ETH Price: $3,955.89 (+1.52%)

Token

ERC-20: Yami Inu (YANU)
 

Overview

Max Total Supply

100,000,000,000 YANU

Holders

14

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
600,000,000 YANU

Value
$0.00
0x45cc6e3e5c138a417bb61c399cb439c6c305d349
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:
YANU

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-13
*/

// SPDX-License-Identifier: MIT                                                                               
                                                                                                                        
pragma solidity ^0.8.7;


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 addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 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 YANU is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address private marketingAddress;
    address public    devAddress;
    address internal treasuryAddress;
    address public futureOwnerAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping (address => bool) public boughtEarly;
    address[] public earlyBuyers;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    mapping (address => bool) internal privateSaleWallets;
    mapping (address => uint256) internal nextPrivateWalletSellDate;
    uint256 internal maxPrivSaleSell = .25 ether;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferBlock; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    bool private gasLimitActive = true;
    uint256 private gasPriceMax = 350 * 1 gwei;

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 private tokensForCharity;


    
    /******************/

    // 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 UpdatedmarketingAddress(address indexed newWallet);

    event UpdateddevAddress(address indexed newWallet);

    event UpdatedTreasuryAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

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

    event AutoNukeLP(uint256 indexed tokensBurned);

    event ManualNukeLP(uint256 indexed tokensBurned);

    event TransferForeignToken(address token, uint256 amount);

    event UpdatedPrivateMaxSell(uint256 amount);

    constructor() ERC20 ("Yami Inu", "YANU") payable {
        
        address newOwner = msg.sender; // can leave alone if owner is deployer.

        // initialize router
        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;

        uint256 totalSupply = 100000000000 * 10**18;
        
        maxBuyAmount = totalSupply * 5 / 1000;
        maxSellAmount = totalSupply * 5 / 1000;
        maxWallet = totalSupply * 2 / 100;
        swapTokensAtAmount = totalSupply * 25 / 100000;

        buyOperationsFee = 5;
        buyLiquidityFee = 0;
        buyDevFee = 3;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee;

        sellOperationsFee = 5;
        sellLiquidityFee = 0;
        sellDevFee = 3;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee;

        marketingAddress = address(0x2D940F567BAB58d3415966eb18fCF0e8d7162E26);
        devAddress = address(0xdead);
        treasuryAddress = address(0xdead);
        futureOwnerAddress = address(0x98dcf5E02cA7ED1F7F595Fb573e445e56245BCb4);

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

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

        _createInitialSupply(newOwner, totalSupply * 30 / 100);
        _createInitialSupply(address(this), totalSupply * 70 / 100);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    function setGasPriceMax(uint256 gas) external onlyOwner {
        require(gas >= 200);
        gasPriceMax = gas * 1 gwei;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        gasLimitActive = false;
        transferDelayEnabled = false;
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        maxWallet = totalSupply();
        emit RemovedLimits();
    }

    function getEarlyBuyers() external view returns (address[] memory){
        return earlyBuyers;
    }

    function removeBoughtEarly(address wallet) external onlyOwner {
        boughtEarly[wallet] = false;
    }

    function emergencyUpdateRouter(address router) external onlyOwner {
        require(!tradingActive, "Cannot update after trading is functional");
        dexRouter = IDexRouter(router);
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function setPrivateSaleMaxSell(uint256 amount) internal onlyOwner{
        require(amount >= 25 && amount <= 5000, "Must set between 0.25 and 50 ETH");
        maxPrivSaleSell = amount * 1e16;
        emit UpdatedPrivateMaxSell(amount);
    }

    function getPrivateSaleMaxSell() public view returns (uint256){
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);
        
        uint256[] memory amounts = new uint256[](2);
        amounts = dexRouter.getAmountsOut(maxPrivSaleSell, path);
        return amounts[1] + (amounts[1] * (sellDevFee + sellOperationsFee + sellLiquidityFee))/100;
    }
    
    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);
    }

    // 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 airdropToWallets(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"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._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);
        emit 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 _liquidityFee, uint256 _charityFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _charityFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _charityFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _charityFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 20, "Must keep fees at 20% or less");
    }

    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(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }

        if(!earlyBuyPenaltyInEffect() && tradingActive){
            require(!boughtEarly[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }

        if(privateSaleWallets[from]){
            if(automatedMarketMakerPairs[to]){
                //enforce max sell restrictions.
                require(nextPrivateWalletSellDate[from] <= block.timestamp, "Cannot sell yet");
                require(amount <= getPrivateSaleMaxSell(), "Attempting to sell over max sell amount.  Check max.");
                nextPrivateWalletSellDate[from] = block.timestamp + 24 hours;
            } else if(!_isExcludedFromFees[to]){
                revert("Private sale cannot transfer and must sell only or transfer to a whitelisted address.");
            }
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                
                // dynamically increase max buy during launch
                if (maxBuyAmount < totalSupply() * 5 / 1000 && block.number >= blockForPenaltyEnd + 20){
                    maxBuyAmount = totalSupply() * 5 / 1000;
                }
                // only use to prevent sniper buys in the first blocks.
                if (gasLimitActive && automatedMarketMakerPairs[from]) {
                    require(tx.gasprice <= gasPriceMax, "Gas price exceeds limit.");
                }

                // 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(_holderLastTransferBlock[tx.origin] < block.number && _holderLastTransferBlock[to] < block.number, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferBlock[tx.origin] = block.number;
                        _holderLastTransferBlock[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                        require(amount + balanceOf(to) <= maxWallet, "Max Wallet exceeded"); // just relevant to buys on launch.
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                }
            }
        }

        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;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if((earlyBuyPenaltyInEffect() || (amount >= maxBuyAmount - .9 ether && blockForPenaltyEnd + 3 >= block.number)) && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && !_isExcludedFromFees[to] && buyTotalFees > 0){
                
                if(!earlyBuyPenaltyInEffect()){
                    maxBuyAmount -= 1;
                }

                if(!boughtEarly[to]){
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    earlyBuyers.push(to);
                    emit CaughtEarlyBuyer(to);
                }

                fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForCharity += fees * buyDevFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / 100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForCharity += fees * sellDevFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForCharity += fees * buyDevFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function earlyBuyPenaltyInEffect() public view returns (bool){
        return block.number < blockForPenaltyEnd;
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        _approve(address(this), address(dexRouter), tokenAmount);

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

    function getCurrentBlock() external view returns (uint256) {
        return block.number;
    }

    function getCurrentTimestamp() external view returns (uint256) {
        return block.timestamp;
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

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



    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForCharity;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 10){
            contractBalance = swapTokensAtAmount * 10;
        }

        bool success;
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        swapTokensForEth(contractBalance - liquidityTokens); 
        
        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForCharity = ethBalance * tokensForCharity / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForOperations + ethForCharity;
            
        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForCharity = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success,) = address (devAddress).call{value: ethForCharity}("");
        (success,) = address(marketingAddress).call{value: address(this).balance}("");
    }

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this) || !tradingActive, "Can't withdraw native tokens while trading is active");
        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 setmarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "address cannot be 0");
        marketingAddress = payable(_marketingAddress);
        emit UpdatedmarketingAddress(_marketingAddress);
    }
    
    function setdevAddress(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "address cannot be 0");
        devAddress = payable(    devAddress);
        emit UpdateddevAddress(_devAddress);
    }

    function setTreasuryAddress(address _treasuryAddress) internal onlyOwner {
        require(_treasuryAddress != address(0), "address cannot be 0");
        treasuryAddress = payable(_treasuryAddress);
        emit UpdatedTreasuryAddress(_treasuryAddress);
    }

     // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

    function launch(address[] memory wallets, uint256[] memory amountsInTokens, uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(blocksForPenalty < 10, "Cannot make penalty blocks more than 10");

        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"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            privateSaleWallets[wallet] = true;
            nextPrivateWalletSellDate[wallet] = block.timestamp;
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }

        maxBuyAmount = totalSupply() * 1 / 1000;
        maxSellAmount = totalSupply() * 1 / 1000;

        //standard enable trading
        tradingActive = true;
        swapEnabled = true; 
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);
   
        // add the liquidity

        require(address(this).balance > 0, "Must have ETH on contract to launch");

        require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");

        _approve(address(this), address(dexRouter), balanceOf(address(this)));
        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            futureOwnerAddress,
            block.timestamp
        );
    }

    function launchPow(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(blocksForPenalty < 10, "Cannot make penalty blocks more than 10");

        maxBuyAmount = totalSupply() * 1 / 1000;
        maxSellAmount = totalSupply() * 1 / 1000;

        //standard enable trading
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);
   
        // add the liquidity

        require(address(this).balance > 0, "Must have ETH on contract to launch");

        require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");

        _approve(address(this), address(dexRouter), balanceOf(address(this)));
        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            futureOwnerAddress,
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","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":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"ManualNukeLP","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":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdatedPrivateMaxSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTreasuryAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdateddevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedmarketingAddress","type":"event"},{"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":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"emergencyUpdateRouter","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":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"futureOwnerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrivateSaleMaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"},{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launchPow","outputs":[],"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":"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":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setdevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setmarketingAddress","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":"tokensForLiquidity","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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","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":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","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"},{"stateMutability":"payable","type":"receive"}]

600060105560158054600162ffffff199091161790556703782dace9d90000601855601a805461ffff191661010117905564517da02c00601b55600860808181526759616d6920496e7560c01b60a0908152610100604052600460c09081526359414e5560e01b60e0529192620000799160039162000655565b5080516200008f90600490602084019062000655565b5050506000620000a46200035e60201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004fb7833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915533906c01431e0fae6d7217caa00000006103e86200012a82600562000711565b62000136919062000733565b6006556103e86200014982600562000711565b62000155919062000733565b60075560646200016782600262000711565b62000173919062000733565b600855620186a06200018782601962000711565b62000193919062000733565b600b556005601d8190556000601e8190556003601f81905591620001b8919062000756565b620001c4919062000756565b601c5560056021819055600060228190556003602381905591620001e9919062000756565b620001f5919062000756565b602055600c80546001600160a01b0319908116732d940f567bab58d3415966eb18fcf0e8d7162e2617909155600d8054821661dead908117909155600e805483169091179055600f80549091167398dcf5e02ca7ed1f7f595fb573e445e56245bcb41790556200026783600162000362565b600f5462000280906001600160a01b0316600162000362565b6200028d30600162000362565b6200029c61dead600162000362565b600c54620002b5906001600160a01b0316600162000362565b620002c2836001620003c5565b600f54620002db906001600160a01b03166001620003c5565b620002e8306001620003c5565b620002f761dead6001620003c5565b600c5462000310906001600160a01b03166001620003c5565b620003368360646200032484601e62000711565b62000330919062000733565b62000473565b6200034a3060646200032484604662000711565b620003558362000558565b505050620007ad565b3390565b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620004145760405162461bcd60e51b8152602060048201819052602482015260008051602062004f9783398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620004cb5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200040b565b8060026000828254620004df919062000756565b90915550506001600160a01b038216600090815260208190526040812080548392906200050e90849062000756565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620005a35760405162461bcd60e51b8152602060048201819052602482015260008051602062004f9783398151915260448201526064016200040b565b6001600160a01b0381166200060a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200040b565b6005546040516001600160a01b0380841692169060008051602062004fb783398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b828054620006639062000771565b90600052602060002090601f016020900481019282620006875760008555620006d2565b82601f10620006a257805160ff1916838001178555620006d2565b82800160010185558215620006d2579182015b82811115620006d2578251825591602001919060010190620006b5565b50620006e0929150620006e4565b5090565b5b80821115620006e05760008155600101620006e5565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200072e576200072e620006fb565b500290565b6000826200075157634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156200076c576200076c620006fb565b500190565b600181811c908216806200078657607f821691505b602082108103620007a757634e487b7160e01b600052602260045260246000fd5b50919050565b6147da80620007bd6000396000f3fe6080604052600436106103fe5760003560e01c80638095d56411610213578063c024666811610123578063ead010ae116100ab578063f2fde38b1161007a578063f2fde38b14610b92578063f5648a4f14610bb2578063f637434214610bc7578063f8b45b0514610bdd578063fb002c9714610bf357600080fd5b8063ead010ae14610b26578063eb472fc414610b46578063ee40166e14610b66578063f11a24d314610b7c57600080fd5b8063d85ba063116100f2578063d85ba06314610a7f578063dc3f0d0f14610a95578063dd62ed3e14610ab5578063e2f4560514610afb578063e884f26014610b1157600080fd5b8063c024666814610a05578063c17b5b8c14610a25578063c876d0b914610a45578063d257b34f14610a5f57600080fd5b80639c3b4fdc116101a6578063a457c2d711610175578063a457c2d714610960578063a62068ce14610980578063a9059cbb14610996578063b62496f5146109b6578063bbc0c742146109e657600080fd5b80639c3b4fdc146108f45780639e46fddb1461090a5780639eeea4f71461092a578063a0d82dc51461094a57600080fd5b80638da5cb5b116101e25780638da5cb5b1461087f57806395d89b411461089d5780639a5bd2dd146108b25780639a7a23d6146108d457600080fd5b80638095d564146107f95780638366e79a1461081957806385ecfd281461083957806388e765ff1461086957600080fd5b80634f77f6c01161030e5780636b0a894c116102a1578063713d097411610270578063713d09741461077a578063715018a61461078f578063751039fc146107a45780637537355d146107b95780637571336a146107d957600080fd5b80636b0a894c146107115780636c9230db146107275780636ddd17131461073a57806370a082311461075a57600080fd5b80635bb988c9116102dd5780635bb988c9146106b257806366d602ae146106d2578063672d5d3b146106e85780636a486a8e146106fb57600080fd5b80634f77f6c01461065a57806351f205e41461067057806358a6d531146106855780635a139dd41461069c57600080fd5b806323b872dd11610391578063313ce56711610360578063313ce567146105c457806339509351146105e05780633ad10ef614610600578063452ed4f1146106205780634a62bb651461064057600080fd5b806323b872dd1461054457806329a46b45146105645780632be32b61146105845780632d51ec93146105a457600080fd5b80631805805b116103cd5780631805805b146104cd57806318160ddd146104ef5780631a8145bb1461050e5780632307b4411461052457600080fd5b806306fdde031461040a5780630758d92414610435578063095ea7b31461046d57806310d5de531461049d57600080fd5b3661040557005b600080fd5b34801561041657600080fd5b5061041f610c09565b60405161042c9190613ec3565b60405180910390f35b34801561044157600080fd5b50600954610455906001600160a01b031681565b6040516001600160a01b03909116815260200161042c565b34801561047957600080fd5b5061048d610488366004613f30565b610c9b565b604051901515815260200161042c565b3480156104a957600080fd5b5061048d6104b8366004613f5c565b60286020526000908152604090205460ff1681565b3480156104d957600080fd5b506104ed6104e8366004613f5c565b610cb1565b005b3480156104fb57600080fd5b506002545b60405190815260200161042c565b34801561051a57600080fd5b5061050060255481565b34801561053057600080fd5b506104ed61053f3660046140ba565b610d70565b34801561055057600080fd5b5061048d61055f36600461411e565b610e79565b34801561057057600080fd5b506104ed61057f366004613f5c565b610f23565b34801561059057600080fd5b506104ed61059f36600461415f565b610fe7565b3480156105b057600080fd5b506104ed6105bf366004613f5c565b6110f4565b3480156105d057600080fd5b506040516012815260200161042c565b3480156105ec57600080fd5b5061048d6105fb366004613f30565b6111b4565b34801561060c57600080fd5b50600d54610455906001600160a01b031681565b34801561062c57600080fd5b50600a54610455906001600160a01b031681565b34801561064c57600080fd5b5060155461048d9060ff1681565b34801561066657600080fd5b5061050060215481565b34801561067c57600080fd5b506104ed6111f0565b34801561069157600080fd5b50601154431061048d565b3480156106a857600080fd5b50610500601d5481565b3480156106be57600080fd5b506104ed6106cd366004613f5c565b6112f9565b3480156106de57600080fd5b5061050060075481565b3480156106f457600080fd5b5043610500565b34801561070757600080fd5b5061050060205481565b34801561071d57600080fd5b5061050060145481565b34801561073357600080fd5b5042610500565b34801561074657600080fd5b5060155461048d9062010000900460ff1681565b34801561076657600080fd5b50610500610775366004613f5c565b611344565b34801561078657600080fd5b5061050061135f565b34801561079b57600080fd5b506104ed611568565b3480156107b057600080fd5b506104ed6115dc565b3480156107c557600080fd5b506104ed6107d436600461415f565b611658565b3480156107e557600080fd5b506104ed6107f4366004614186565b6116a4565b34801561080557600080fd5b506104ed6108143660046141bf565b61176c565b34801561082557600080fd5b5061048d6108343660046141eb565b61180f565b34801561084557600080fd5b5061048d610854366004613f5c565b60126020526000908152604090205460ff1681565b34801561087557600080fd5b5061050060065481565b34801561088b57600080fd5b506005546001600160a01b0316610455565b3480156108a957600080fd5b5061041f611a49565b3480156108be57600080fd5b506108c7611a58565b60405161042c919061425d565b3480156108e057600080fd5b506104ed6108ef366004614186565b611ab9565b34801561090057600080fd5b50610500601f5481565b34801561091657600080fd5b50600f54610455906001600160a01b031681565b34801561093657600080fd5b506104ed61094536600461415f565b611bad565b34801561095657600080fd5b5061050060235481565b34801561096c57600080fd5b5061048d61097b366004613f30565b611f62565b34801561098c57600080fd5b5061050060115481565b3480156109a257600080fd5b5061048d6109b1366004613f30565b611ffb565b3480156109c257600080fd5b5061048d6109d1366004613f5c565b60296020526000908152604090205460ff1681565b3480156109f257600080fd5b5060155461048d90610100900460ff1681565b348015610a1157600080fd5b506104ed610a20366004614186565b612008565b348015610a3157600080fd5b506104ed610a403660046141bf565b612091565b348015610a5157600080fd5b50601a5461048d9060ff1681565b348015610a6b57600080fd5b506104ed610a7a36600461415f565b612134565b348015610a8b57600080fd5b50610500601c5481565b348015610aa157600080fd5b506104ed610ab036600461415f565b61227f565b348015610ac157600080fd5b50610500610ad03660046141eb565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b0757600080fd5b50610500600b5481565b348015610b1d57600080fd5b506104ed612386565b348015610b3257600080fd5b506104ed610b41366004614270565b6123bc565b348015610b5257600080fd5b50610455610b6136600461415f565b612881565b348015610b7257600080fd5b5061050060105481565b348015610b8857600080fd5b50610500601e5481565b348015610b9e57600080fd5b506104ed610bad366004613f5c565b6128ab565b348015610bbe57600080fd5b506104ed612996565b348015610bd357600080fd5b5061050060225481565b348015610be957600080fd5b5061050060085481565b348015610bff57600080fd5b5061050060245481565b606060038054610c18906142dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610c44906142dd565b8015610c915780601f10610c6657610100808354040283529160200191610c91565b820191906000526020600020905b815481529060010190602001808311610c7457829003601f168201915b5050505050905090565b6000610ca8338484612a02565b50600192915050565b6005546001600160a01b03163314610ce45760405162461bcd60e51b8152600401610cdb90614317565b60405180910390fd5b601554610100900460ff1615610d4e5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610cdb565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610d9a5760405162461bcd60e51b8152600401610cdb90614317565b8051825114610deb5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610cdb565b60c8825110610e0c5760405162461bcd60e51b8152600401610cdb9061434c565b60005b8251811015610e74576000838281518110610e2c57610e2c6143a2565b602002602001015190506000838381518110610e4a57610e4a6143a2565b60200260200101519050610e5f338383612b26565b50508080610e6c906143ce565b915050610e0f565b505050565b6000610e86848484612c7b565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f0b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610cdb565b610f188533858403612a02565b506001949350505050565b6005546001600160a01b03163314610f4d5760405162461bcd60e51b8152600401610cdb90614317565b6001600160a01b038116610f995760405162461bcd60e51b81526020600482015260136024820152720616464726573732063616e6e6f74206265203606c1b6044820152606401610cdb565b600d80546001600160a01b031981166001600160a01b0391821617909155604051908216907fc10ae53e38535b0130f375789e38f23a51f921e4e0a995e6653fc95c5ec8f6ba90600090a250565b6005546001600160a01b031633146110115760405162461bcd60e51b8152600401610cdb90614317565b670de0b6b3a76400006103e861102660025490565b6110319060016143e7565b61103b9190614406565b6110459190614406565b8110156110a65760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610cdb565b6110b881670de0b6b3a76400006143e7565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b0316331461111e5760405162461bcd60e51b8152600401610cdb90614317565b6001600160a01b03811661116a5760405162461bcd60e51b81526020600482015260136024820152720616464726573732063616e6e6f74206265203606c1b6044820152606401610cdb565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f7070826fee5038bd448825f6906a564a07f0adcb30f29c5acd303a7efe53999b90600090a250565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ca89185906111eb908690614428565b612a02565b6005546001600160a01b0316331461121a5760405162461bcd60e51b8152600401610cdb90614317565b600b5461122630611344565b101561129c576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610cdb565b600a805460ff60a01b1916600160a01b1790556112b7613a3b565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146113235760405162461bcd60e51b8152600401610cdb90614317565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6001600160a01b031660009081526020819052604090205490565b604080516002808252606082018352600092839291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156113cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f19190614440565b81600081518110611404576114046143a2565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611438576114386143a2565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060095460185460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f916114a791869060040161445d565b600060405180830381865afa1580156114c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114ec919081019061447e565b905060646022546021546023546115039190614428565b61150d9190614428565b82600181518110611520576115206143a2565b602002602001015161153291906143e7565b61153c9190614406565b8160018151811061154f5761154f6143a2565b60200260200101516115619190614428565b9250505090565b6005546001600160a01b031633146115925760405162461bcd60e51b8152600401610cdb90614317565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146116065760405162461bcd60e51b8152600401610cdb90614317565b6015805460ff19169055601a805461ffff191690556002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146116825760405162461bcd60e51b8152600401610cdb90614317565b60c881101561169057600080fd5b61169e81633b9aca006143e7565b601b5550565b6005546001600160a01b031633146116ce5760405162461bcd60e51b8152600401610cdb90614317565b8061174157600a546001600160a01b03908116908316036117415760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610cdb565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146117965760405162461bcd60e51b8152600401610cdb90614317565b601d839055601e829055601f819055806117b08385614428565b6117ba9190614428565b601c819055600f1015610e745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610cdb565b6005546000906001600160a01b0316331461183c5760405162461bcd60e51b8152600401610cdb90614317565b6001600160a01b0383166118925760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610cdb565b6001600160a01b038316301415806118b25750601554610100900460ff16155b61191b5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610cdb565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611962573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611986919061450f565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156119d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fd9190614528565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610c18906142dd565b60606013805480602002602001604051908101604052809291908181526020018280548015610c9157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611a92575050505050905090565b6005546001600160a01b03163314611ae35760405162461bcd60e51b8152600401610cdb90614317565b600a546001600160a01b0390811690831603611b675760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cdb565b611b718282613c43565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314611bd75760405162461bcd60e51b8152600401610cdb90614317565b601554610100900460ff1615611bff5760405162461bcd60e51b8152600401610cdb90614545565b600a8110611c1f5760405162461bcd60e51b8152600401610cdb90614590565b6103e8611c2b60025490565b611c369060016143e7565b611c409190614406565b6006556103e8611c4f60025490565b611c5a9060016143e7565b611c649190614406565b6007556015805462ffff00191662010100179055436010819055611c89908290614428565b6011556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2c9190614440565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db29190614440565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e239190614440565b600a80546001600160a01b0319166001600160a01b03929092169182179055611e4d906001613c6d565b600a54611e64906001600160a01b03166001613c43565b60004711611e845760405162461bcd60e51b8152600401610cdb906145d7565b6000611e8f30611344565b11611eac5760405162461bcd60e51b8152600401610cdb9061461a565b600954611ec79030906001600160a01b03166111eb82611344565b6009546001600160a01b031663f305d7194730611ee381611344565b600f546040516001600160e01b031960e087901b168152611f1993929160009182916001600160a01b0316904290600401614660565b60606040518083038185885af1158015611f37573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f5c919061469b565b50505050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611fe45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cdb565b611ff13385858403612a02565b5060019392505050565b6000610ca8338484612c7b565b6005546001600160a01b031633146120325760405162461bcd60e51b8152600401610cdb90614317565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146120bb5760405162461bcd60e51b8152600401610cdb90614317565b602183905560228290556023819055806120d58385614428565b6120df9190614428565b602081905560141015610e745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610cdb565b6005546001600160a01b0316331461215e5760405162461bcd60e51b8152600401610cdb90614317565b620186a061216b60025490565b6121769060016143e7565b6121809190614406565b8110156121ed5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610cdb565b6103e86121f960025490565b6122049060016143e7565b61220e9190614406565b81111561227a5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610cdb565b600b55565b6005546001600160a01b031633146122a95760405162461bcd60e51b8152600401610cdb90614317565b670de0b6b3a76400006103e86122be60025490565b6122c99060016143e7565b6122d39190614406565b6122dd9190614406565b81101561233f5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610cdb565b61235181670de0b6b3a76400006143e7565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016110e9565b6005546001600160a01b031633146123b05760405162461bcd60e51b8152600401610cdb90614317565b601a805460ff19169055565b6005546001600160a01b031633146123e65760405162461bcd60e51b8152600401610cdb90614317565b601554610100900460ff161561240e5760405162461bcd60e51b8152600401610cdb90614545565b600a811061242e5760405162461bcd60e51b8152600401610cdb90614590565b815183511461247f5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610cdb565b60c88351106124a05760405162461bcd60e51b8152600401610cdb9061434c565b60005b835181101561253b5760008482815181106124c0576124c06143a2565b6020908102919091018101516001600160a01b0381166000908152601683526040808220805460ff1916600117905560179093529182204290558551909250859084908110612511576125116143a2565b60200260200101519050612526338383612b26565b50508080612533906143ce565b9150506124a3565b506103e861254860025490565b6125539060016143e7565b61255d9190614406565b6006556103e861256c60025490565b6125779060016143e7565b6125819190614406565b6007556015805462ffff001916620101001790554360108190556125a6908290614428565b6011556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612625573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126499190614440565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126cf9190614440565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561271c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127409190614440565b600a80546001600160a01b0319166001600160a01b0392909216918217905561276a906001613c6d565b600a54612781906001600160a01b03166001613c43565b600047116127a15760405162461bcd60e51b8152600401610cdb906145d7565b60006127ac30611344565b116127c95760405162461bcd60e51b8152600401610cdb9061461a565b6009546127e49030906001600160a01b03166111eb82611344565b6009546001600160a01b031663f305d719473061280081611344565b600f546040516001600160e01b031960e087901b16815261283693929160009182916001600160a01b0316904290600401614660565b60606040518083038185885af1158015612854573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612879919061469b565b505050505050565b6013818154811061289157600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146128d55760405162461bcd60e51b8152600401610cdb90614317565b6001600160a01b03811661293a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cdb565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146129c05760405162461bcd60e51b8152600401610cdb90614317565b604051600090339047908381818185875af1925050503d8060008114611f5c576040519150601f19603f3d011682016040523d82523d6000602084013e611f5c565b6001600160a01b038316612a645760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cdb565b6001600160a01b038216612ac55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cdb565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612b4c5760405162461bcd60e51b8152600401610cdb906146c9565b6001600160a01b038216612b725760405162461bcd60e51b8152600401610cdb9061470e565b6001600160a01b03831660009081526020819052604090205481811015612bea5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cdb565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612c21908490614428565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c6d91815260200190565b60405180910390a350505050565b6001600160a01b038316612ca15760405162461bcd60e51b8152600401610cdb906146c9565b6001600160a01b038216612cc75760405162461bcd60e51b8152600401610cdb9061470e565b60008111612d175760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610cdb565b601554610100900460ff16612daa576001600160a01b03831660009081526027602052604090205460ff1680612d6557506001600160a01b03821660009081526027602052604090205460ff165b612daa5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610cdb565b6011544310158015612dc35750601554610100900460ff165b15612e93576001600160a01b03831660009081526012602052604090205460ff161580612dfd57506005546001600160a01b038381169116145b80612e1257506001600160a01b03821661dead145b612e935760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610cdb565b6001600160a01b03831660009081526016602052604090205460ff161561307a576001600160a01b03821660009081526029602052604090205460ff1615612fce576001600160a01b038316600090815260176020526040902054421015612f2f5760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610cdb565b612f3761135f565b811115612fa35760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610cdb565b612fb04262015180614428565b6001600160a01b03841660009081526017602052604090205561307a565b6001600160a01b03821660009081526027602052604090205460ff1661307a5760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610cdb565b60155460ff16156134cc576005546001600160a01b038481169116148015906130b157506005546001600160a01b03838116911614155b80156130c557506001600160a01b03821615155b80156130dc57506001600160a01b03821661dead14155b801561310157506001600160a01b03831660009081526027602052604090205460ff16155b801561312657506001600160a01b03821660009081526027602052604090205460ff16155b156134cc576103e861313760025490565b6131429060056143e7565b61314c9190614406565b6006541080156131695750601154613165906014614428565b4310155b15613193576103e861317a60025490565b6131859060056143e7565b61318f9190614406565b6006555b601a54610100900460ff1680156131c257506001600160a01b03831660009081526029602052604090205460ff165b1561321957601b543a11156132195760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610cdb565b601a5460ff1615613319576009546001600160a01b038381169116148015906132505750600a546001600160a01b03838116911614155b1561331957326000908152601960205260409020544311801561328a57506001600160a01b03821660009081526019602052604090205443115b6132f45760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610cdb565b3260009081526019602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526029602052604090205460ff16801561335a57506001600160a01b03821660009081526028602052604090205460ff16155b15613421576006548111156133c25760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610cdb565b6008546133ce83611344565b6133d89083614428565b111561341c5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08195e18d959591959606a1b6044820152606401610cdb565b6134cc565b6001600160a01b03821660009081526029602052604090205460ff16801561346257506001600160a01b03831660009081526028602052604090205460ff16155b156134cc576007548111156134cc5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610cdb565b60006134d730611344565b600b54909150811080159081906134f6575060155462010000900460ff165b801561350c5750600a54600160a01b900460ff16155b801561353157506001600160a01b03851660009081526029602052604090205460ff16155b801561355657506001600160a01b03851660009081526027602052604090205460ff16155b801561357b57506001600160a01b03841660009081526027602052604090205460ff16155b156135a957600a805460ff60a01b1916600160a01b17905561359b613a3b565b600a805460ff60a01b191690555b6001600160a01b03851660009081526027602052604090205460019060ff16806135eb57506001600160a01b03851660009081526027602052604090205460ff165b156135f4575060005b60008115613a275760115443108061363a5750670c7d713b49da000060065461361d9190614751565b851015801561363a57504360115460036136379190614428565b10155b801561365e57506001600160a01b03871660009081526029602052604090205460ff165b801561368357506001600160a01b03861660009081526029602052604090205460ff16155b80156136a857506001600160a01b03861660009081526027602052604090205460ff16155b80156136b657506000601c54115b156138705760115443106136dd576001600660008282546136d79190614751565b90915550505b6001600160a01b03861660009081526012602052604090205460ff166137bd576001600160a01b0386166000908152601260205260408120805460ff191660019081179091556014805491929091613736908490614428565b9091555050601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0900180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064601c54866137cd91906143e7565b6137d79190614406565b9050601c54601e54826137ea91906143e7565b6137f49190614406565b602560008282546138059190614428565b9091555050601c54601d5461381a90836143e7565b6138249190614406565b602460008282546138359190614428565b9091555050601c54601f5461384a90836143e7565b6138549190614406565b602660008282546138659190614428565b90915550613a099050565b6001600160a01b03861660009081526029602052604090205460ff16801561389a57506000602054115b1561392c576064602054866138af91906143e7565b6138b99190614406565b9050602054602254826138cc91906143e7565b6138d69190614406565b602560008282546138e79190614428565b90915550506020546021546138fc90836143e7565b6139069190614406565b602460008282546139179190614428565b909155505060205460235461384a90836143e7565b6001600160a01b03871660009081526029602052604090205460ff16801561395657506000601c54115b15613a09576064601c548661396b91906143e7565b6139759190614406565b9050601c54601e548261398891906143e7565b6139929190614406565b602560008282546139a39190614428565b9091555050601c54601d546139b890836143e7565b6139c29190614406565b602460008282546139d39190614428565b9091555050601c54601f546139e890836143e7565b6139f29190614406565b60266000828254613a039190614428565b90915550505b8015613a1a57613a1a873083612b26565b613a248186614751565b94505b613a32878787612b26565b50505050505050565b6000613a4630611344565b90506000602654602454602554613a5d9190614428565b613a679190614428565b9050811580613a74575080155b15613a7d575050565b600b54613a8b90600a6143e7565b821115613aa357600b54613aa090600a6143e7565b91505b60008060028360255486613ab791906143e7565b613ac19190614406565b613acb9190614406565b9050613adf613ada8286614751565b613cd0565b60255447908190600090613af590600290614406565b613aff9087614751565b602454613b0c90856143e7565b613b169190614406565b905060006002602554613b299190614406565b613b339088614751565b602654613b4090866143e7565b613b4a9190614406565b9050613b568183614428565b613b609084614751565b60006025819055602481905560265592508415801590613b805750600083115b15613b8f57613b8f8584613e22565b600d546040516001600160a01b03909116908290600081818185875af1925050503d8060008114613bdc576040519150601f19603f3d011682016040523d82523d6000602084013e613be1565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114613c31576040519150601f19603f3d011682016040523d82523d6000602084013e613c36565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602960205260409020805460ff1916821515179055611b7182825b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613d0557613d056143a2565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d829190614440565b81600181518110613d9557613d956143a2565b6001600160a01b039283166020918202929092010152600954613dbb9130911684612a02565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613df4908590600090869030904290600401614768565b600060405180830381600087803b158015613e0e57600080fd5b505af1158015612879573d6000803e3d6000fd5b600954613e3a9030906001600160a01b031684612a02565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613e799030908790600090819061dead904290600401614660565b60606040518083038185885af1158015613e97573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ebc919061469b565b5050505050565b600060208083528351808285015260005b81811015613ef057858101830151858201604001528201613ed4565b81811115613f02576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114613f2d57600080fd5b50565b60008060408385031215613f4357600080fd5b8235613f4e81613f18565b946020939093013593505050565b600060208284031215613f6e57600080fd5b8135613f7981613f18565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613fbf57613fbf613f80565b604052919050565b600067ffffffffffffffff821115613fe157613fe1613f80565b5060051b60200190565b600082601f830112613ffc57600080fd5b8135602061401161400c83613fc7565b613f96565b82815260059290921b8401810191818101908684111561403057600080fd5b8286015b8481101561405457803561404781613f18565b8352918301918301614034565b509695505050505050565b600082601f83011261407057600080fd5b8135602061408061400c83613fc7565b82815260059290921b8401810191818101908684111561409f57600080fd5b8286015b8481101561405457803583529183019183016140a3565b600080604083850312156140cd57600080fd5b823567ffffffffffffffff808211156140e557600080fd5b6140f186838701613feb565b9350602085013591508082111561410757600080fd5b506141148582860161405f565b9150509250929050565b60008060006060848603121561413357600080fd5b833561413e81613f18565b9250602084013561414e81613f18565b929592945050506040919091013590565b60006020828403121561417157600080fd5b5035919050565b8015158114613f2d57600080fd5b6000806040838503121561419957600080fd5b82356141a481613f18565b915060208301356141b481614178565b809150509250929050565b6000806000606084860312156141d457600080fd5b505081359360208301359350604090920135919050565b600080604083850312156141fe57600080fd5b823561420981613f18565b915060208301356141b481613f18565b600081518084526020808501945080840160005b838110156142525781516001600160a01b03168752958201959082019060010161422d565b509495945050505050565b602081526000613f796020830184614219565b60008060006060848603121561428557600080fd5b833567ffffffffffffffff8082111561429d57600080fd5b6142a987838801613feb565b945060208601359150808211156142bf57600080fd5b506142cc8682870161405f565b925050604084013590509250925092565b600181811c908216806142f157607f821691505b60208210810361431157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526036908201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726040820152752074786e2064756520746f20676173206c696d69747360501b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016143e0576143e06143b8565b5060010190565b6000816000190483118215151615614401576144016143b8565b500290565b60008261442357634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561443b5761443b6143b8565b500190565b60006020828403121561445257600080fd5b8151613f7981613f18565b8281526040602082015260006144766040830184614219565b949350505050565b6000602080838503121561449157600080fd5b825167ffffffffffffffff8111156144a857600080fd5b8301601f810185136144b957600080fd5b80516144c761400c82613fc7565b81815260059190911b820183019083810190878311156144e657600080fd5b928401925b82841015614504578351825292840192908401906144eb565b979650505050505050565b60006020828403121561452157600080fd5b5051919050565b60006020828403121561453a57600080fd5b8151613f7981614178565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b60208082526026908201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206040820152650d8c2eadcc6d60d31b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156146b057600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015614763576147636143b8565b500390565b85815284602082015260a06040820152600061478760a0830186614219565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220752624c5430344d1b9afbf4ce34b621ef7ba5df970d1872e1f94c02260249b4f64736f6c634300080d00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103fe5760003560e01c80638095d56411610213578063c024666811610123578063ead010ae116100ab578063f2fde38b1161007a578063f2fde38b14610b92578063f5648a4f14610bb2578063f637434214610bc7578063f8b45b0514610bdd578063fb002c9714610bf357600080fd5b8063ead010ae14610b26578063eb472fc414610b46578063ee40166e14610b66578063f11a24d314610b7c57600080fd5b8063d85ba063116100f2578063d85ba06314610a7f578063dc3f0d0f14610a95578063dd62ed3e14610ab5578063e2f4560514610afb578063e884f26014610b1157600080fd5b8063c024666814610a05578063c17b5b8c14610a25578063c876d0b914610a45578063d257b34f14610a5f57600080fd5b80639c3b4fdc116101a6578063a457c2d711610175578063a457c2d714610960578063a62068ce14610980578063a9059cbb14610996578063b62496f5146109b6578063bbc0c742146109e657600080fd5b80639c3b4fdc146108f45780639e46fddb1461090a5780639eeea4f71461092a578063a0d82dc51461094a57600080fd5b80638da5cb5b116101e25780638da5cb5b1461087f57806395d89b411461089d5780639a5bd2dd146108b25780639a7a23d6146108d457600080fd5b80638095d564146107f95780638366e79a1461081957806385ecfd281461083957806388e765ff1461086957600080fd5b80634f77f6c01161030e5780636b0a894c116102a1578063713d097411610270578063713d09741461077a578063715018a61461078f578063751039fc146107a45780637537355d146107b95780637571336a146107d957600080fd5b80636b0a894c146107115780636c9230db146107275780636ddd17131461073a57806370a082311461075a57600080fd5b80635bb988c9116102dd5780635bb988c9146106b257806366d602ae146106d2578063672d5d3b146106e85780636a486a8e146106fb57600080fd5b80634f77f6c01461065a57806351f205e41461067057806358a6d531146106855780635a139dd41461069c57600080fd5b806323b872dd11610391578063313ce56711610360578063313ce567146105c457806339509351146105e05780633ad10ef614610600578063452ed4f1146106205780634a62bb651461064057600080fd5b806323b872dd1461054457806329a46b45146105645780632be32b61146105845780632d51ec93146105a457600080fd5b80631805805b116103cd5780631805805b146104cd57806318160ddd146104ef5780631a8145bb1461050e5780632307b4411461052457600080fd5b806306fdde031461040a5780630758d92414610435578063095ea7b31461046d57806310d5de531461049d57600080fd5b3661040557005b600080fd5b34801561041657600080fd5b5061041f610c09565b60405161042c9190613ec3565b60405180910390f35b34801561044157600080fd5b50600954610455906001600160a01b031681565b6040516001600160a01b03909116815260200161042c565b34801561047957600080fd5b5061048d610488366004613f30565b610c9b565b604051901515815260200161042c565b3480156104a957600080fd5b5061048d6104b8366004613f5c565b60286020526000908152604090205460ff1681565b3480156104d957600080fd5b506104ed6104e8366004613f5c565b610cb1565b005b3480156104fb57600080fd5b506002545b60405190815260200161042c565b34801561051a57600080fd5b5061050060255481565b34801561053057600080fd5b506104ed61053f3660046140ba565b610d70565b34801561055057600080fd5b5061048d61055f36600461411e565b610e79565b34801561057057600080fd5b506104ed61057f366004613f5c565b610f23565b34801561059057600080fd5b506104ed61059f36600461415f565b610fe7565b3480156105b057600080fd5b506104ed6105bf366004613f5c565b6110f4565b3480156105d057600080fd5b506040516012815260200161042c565b3480156105ec57600080fd5b5061048d6105fb366004613f30565b6111b4565b34801561060c57600080fd5b50600d54610455906001600160a01b031681565b34801561062c57600080fd5b50600a54610455906001600160a01b031681565b34801561064c57600080fd5b5060155461048d9060ff1681565b34801561066657600080fd5b5061050060215481565b34801561067c57600080fd5b506104ed6111f0565b34801561069157600080fd5b50601154431061048d565b3480156106a857600080fd5b50610500601d5481565b3480156106be57600080fd5b506104ed6106cd366004613f5c565b6112f9565b3480156106de57600080fd5b5061050060075481565b3480156106f457600080fd5b5043610500565b34801561070757600080fd5b5061050060205481565b34801561071d57600080fd5b5061050060145481565b34801561073357600080fd5b5042610500565b34801561074657600080fd5b5060155461048d9062010000900460ff1681565b34801561076657600080fd5b50610500610775366004613f5c565b611344565b34801561078657600080fd5b5061050061135f565b34801561079b57600080fd5b506104ed611568565b3480156107b057600080fd5b506104ed6115dc565b3480156107c557600080fd5b506104ed6107d436600461415f565b611658565b3480156107e557600080fd5b506104ed6107f4366004614186565b6116a4565b34801561080557600080fd5b506104ed6108143660046141bf565b61176c565b34801561082557600080fd5b5061048d6108343660046141eb565b61180f565b34801561084557600080fd5b5061048d610854366004613f5c565b60126020526000908152604090205460ff1681565b34801561087557600080fd5b5061050060065481565b34801561088b57600080fd5b506005546001600160a01b0316610455565b3480156108a957600080fd5b5061041f611a49565b3480156108be57600080fd5b506108c7611a58565b60405161042c919061425d565b3480156108e057600080fd5b506104ed6108ef366004614186565b611ab9565b34801561090057600080fd5b50610500601f5481565b34801561091657600080fd5b50600f54610455906001600160a01b031681565b34801561093657600080fd5b506104ed61094536600461415f565b611bad565b34801561095657600080fd5b5061050060235481565b34801561096c57600080fd5b5061048d61097b366004613f30565b611f62565b34801561098c57600080fd5b5061050060115481565b3480156109a257600080fd5b5061048d6109b1366004613f30565b611ffb565b3480156109c257600080fd5b5061048d6109d1366004613f5c565b60296020526000908152604090205460ff1681565b3480156109f257600080fd5b5060155461048d90610100900460ff1681565b348015610a1157600080fd5b506104ed610a20366004614186565b612008565b348015610a3157600080fd5b506104ed610a403660046141bf565b612091565b348015610a5157600080fd5b50601a5461048d9060ff1681565b348015610a6b57600080fd5b506104ed610a7a36600461415f565b612134565b348015610a8b57600080fd5b50610500601c5481565b348015610aa157600080fd5b506104ed610ab036600461415f565b61227f565b348015610ac157600080fd5b50610500610ad03660046141eb565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b0757600080fd5b50610500600b5481565b348015610b1d57600080fd5b506104ed612386565b348015610b3257600080fd5b506104ed610b41366004614270565b6123bc565b348015610b5257600080fd5b50610455610b6136600461415f565b612881565b348015610b7257600080fd5b5061050060105481565b348015610b8857600080fd5b50610500601e5481565b348015610b9e57600080fd5b506104ed610bad366004613f5c565b6128ab565b348015610bbe57600080fd5b506104ed612996565b348015610bd357600080fd5b5061050060225481565b348015610be957600080fd5b5061050060085481565b348015610bff57600080fd5b5061050060245481565b606060038054610c18906142dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610c44906142dd565b8015610c915780601f10610c6657610100808354040283529160200191610c91565b820191906000526020600020905b815481529060010190602001808311610c7457829003601f168201915b5050505050905090565b6000610ca8338484612a02565b50600192915050565b6005546001600160a01b03163314610ce45760405162461bcd60e51b8152600401610cdb90614317565b60405180910390fd5b601554610100900460ff1615610d4e5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610cdb565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610d9a5760405162461bcd60e51b8152600401610cdb90614317565b8051825114610deb5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610cdb565b60c8825110610e0c5760405162461bcd60e51b8152600401610cdb9061434c565b60005b8251811015610e74576000838281518110610e2c57610e2c6143a2565b602002602001015190506000838381518110610e4a57610e4a6143a2565b60200260200101519050610e5f338383612b26565b50508080610e6c906143ce565b915050610e0f565b505050565b6000610e86848484612c7b565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f0b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610cdb565b610f188533858403612a02565b506001949350505050565b6005546001600160a01b03163314610f4d5760405162461bcd60e51b8152600401610cdb90614317565b6001600160a01b038116610f995760405162461bcd60e51b81526020600482015260136024820152720616464726573732063616e6e6f74206265203606c1b6044820152606401610cdb565b600d80546001600160a01b031981166001600160a01b0391821617909155604051908216907fc10ae53e38535b0130f375789e38f23a51f921e4e0a995e6653fc95c5ec8f6ba90600090a250565b6005546001600160a01b031633146110115760405162461bcd60e51b8152600401610cdb90614317565b670de0b6b3a76400006103e861102660025490565b6110319060016143e7565b61103b9190614406565b6110459190614406565b8110156110a65760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610cdb565b6110b881670de0b6b3a76400006143e7565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b0316331461111e5760405162461bcd60e51b8152600401610cdb90614317565b6001600160a01b03811661116a5760405162461bcd60e51b81526020600482015260136024820152720616464726573732063616e6e6f74206265203606c1b6044820152606401610cdb565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f7070826fee5038bd448825f6906a564a07f0adcb30f29c5acd303a7efe53999b90600090a250565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ca89185906111eb908690614428565b612a02565b6005546001600160a01b0316331461121a5760405162461bcd60e51b8152600401610cdb90614317565b600b5461122630611344565b101561129c576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610cdb565b600a805460ff60a01b1916600160a01b1790556112b7613a3b565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146113235760405162461bcd60e51b8152600401610cdb90614317565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6001600160a01b031660009081526020819052604090205490565b604080516002808252606082018352600092839291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156113cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f19190614440565b81600081518110611404576114046143a2565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611438576114386143a2565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060095460185460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f916114a791869060040161445d565b600060405180830381865afa1580156114c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114ec919081019061447e565b905060646022546021546023546115039190614428565b61150d9190614428565b82600181518110611520576115206143a2565b602002602001015161153291906143e7565b61153c9190614406565b8160018151811061154f5761154f6143a2565b60200260200101516115619190614428565b9250505090565b6005546001600160a01b031633146115925760405162461bcd60e51b8152600401610cdb90614317565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146116065760405162461bcd60e51b8152600401610cdb90614317565b6015805460ff19169055601a805461ffff191690556002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146116825760405162461bcd60e51b8152600401610cdb90614317565b60c881101561169057600080fd5b61169e81633b9aca006143e7565b601b5550565b6005546001600160a01b031633146116ce5760405162461bcd60e51b8152600401610cdb90614317565b8061174157600a546001600160a01b03908116908316036117415760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610cdb565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146117965760405162461bcd60e51b8152600401610cdb90614317565b601d839055601e829055601f819055806117b08385614428565b6117ba9190614428565b601c819055600f1015610e745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610cdb565b6005546000906001600160a01b0316331461183c5760405162461bcd60e51b8152600401610cdb90614317565b6001600160a01b0383166118925760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610cdb565b6001600160a01b038316301415806118b25750601554610100900460ff16155b61191b5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610cdb565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611962573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611986919061450f565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156119d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fd9190614528565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610c18906142dd565b60606013805480602002602001604051908101604052809291908181526020018280548015610c9157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611a92575050505050905090565b6005546001600160a01b03163314611ae35760405162461bcd60e51b8152600401610cdb90614317565b600a546001600160a01b0390811690831603611b675760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cdb565b611b718282613c43565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314611bd75760405162461bcd60e51b8152600401610cdb90614317565b601554610100900460ff1615611bff5760405162461bcd60e51b8152600401610cdb90614545565b600a8110611c1f5760405162461bcd60e51b8152600401610cdb90614590565b6103e8611c2b60025490565b611c369060016143e7565b611c409190614406565b6006556103e8611c4f60025490565b611c5a9060016143e7565b611c649190614406565b6007556015805462ffff00191662010100179055436010819055611c89908290614428565b6011556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2c9190614440565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db29190614440565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e239190614440565b600a80546001600160a01b0319166001600160a01b03929092169182179055611e4d906001613c6d565b600a54611e64906001600160a01b03166001613c43565b60004711611e845760405162461bcd60e51b8152600401610cdb906145d7565b6000611e8f30611344565b11611eac5760405162461bcd60e51b8152600401610cdb9061461a565b600954611ec79030906001600160a01b03166111eb82611344565b6009546001600160a01b031663f305d7194730611ee381611344565b600f546040516001600160e01b031960e087901b168152611f1993929160009182916001600160a01b0316904290600401614660565b60606040518083038185885af1158015611f37573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f5c919061469b565b50505050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611fe45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cdb565b611ff13385858403612a02565b5060019392505050565b6000610ca8338484612c7b565b6005546001600160a01b031633146120325760405162461bcd60e51b8152600401610cdb90614317565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146120bb5760405162461bcd60e51b8152600401610cdb90614317565b602183905560228290556023819055806120d58385614428565b6120df9190614428565b602081905560141015610e745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610cdb565b6005546001600160a01b0316331461215e5760405162461bcd60e51b8152600401610cdb90614317565b620186a061216b60025490565b6121769060016143e7565b6121809190614406565b8110156121ed5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610cdb565b6103e86121f960025490565b6122049060016143e7565b61220e9190614406565b81111561227a5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610cdb565b600b55565b6005546001600160a01b031633146122a95760405162461bcd60e51b8152600401610cdb90614317565b670de0b6b3a76400006103e86122be60025490565b6122c99060016143e7565b6122d39190614406565b6122dd9190614406565b81101561233f5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610cdb565b61235181670de0b6b3a76400006143e7565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016110e9565b6005546001600160a01b031633146123b05760405162461bcd60e51b8152600401610cdb90614317565b601a805460ff19169055565b6005546001600160a01b031633146123e65760405162461bcd60e51b8152600401610cdb90614317565b601554610100900460ff161561240e5760405162461bcd60e51b8152600401610cdb90614545565b600a811061242e5760405162461bcd60e51b8152600401610cdb90614590565b815183511461247f5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610cdb565b60c88351106124a05760405162461bcd60e51b8152600401610cdb9061434c565b60005b835181101561253b5760008482815181106124c0576124c06143a2565b6020908102919091018101516001600160a01b0381166000908152601683526040808220805460ff1916600117905560179093529182204290558551909250859084908110612511576125116143a2565b60200260200101519050612526338383612b26565b50508080612533906143ce565b9150506124a3565b506103e861254860025490565b6125539060016143e7565b61255d9190614406565b6006556103e861256c60025490565b6125779060016143e7565b6125819190614406565b6007556015805462ffff001916620101001790554360108190556125a6908290614428565b6011556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612625573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126499190614440565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126cf9190614440565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561271c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127409190614440565b600a80546001600160a01b0319166001600160a01b0392909216918217905561276a906001613c6d565b600a54612781906001600160a01b03166001613c43565b600047116127a15760405162461bcd60e51b8152600401610cdb906145d7565b60006127ac30611344565b116127c95760405162461bcd60e51b8152600401610cdb9061461a565b6009546127e49030906001600160a01b03166111eb82611344565b6009546001600160a01b031663f305d719473061280081611344565b600f546040516001600160e01b031960e087901b16815261283693929160009182916001600160a01b0316904290600401614660565b60606040518083038185885af1158015612854573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612879919061469b565b505050505050565b6013818154811061289157600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146128d55760405162461bcd60e51b8152600401610cdb90614317565b6001600160a01b03811661293a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cdb565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146129c05760405162461bcd60e51b8152600401610cdb90614317565b604051600090339047908381818185875af1925050503d8060008114611f5c576040519150601f19603f3d011682016040523d82523d6000602084013e611f5c565b6001600160a01b038316612a645760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cdb565b6001600160a01b038216612ac55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cdb565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612b4c5760405162461bcd60e51b8152600401610cdb906146c9565b6001600160a01b038216612b725760405162461bcd60e51b8152600401610cdb9061470e565b6001600160a01b03831660009081526020819052604090205481811015612bea5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cdb565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612c21908490614428565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c6d91815260200190565b60405180910390a350505050565b6001600160a01b038316612ca15760405162461bcd60e51b8152600401610cdb906146c9565b6001600160a01b038216612cc75760405162461bcd60e51b8152600401610cdb9061470e565b60008111612d175760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610cdb565b601554610100900460ff16612daa576001600160a01b03831660009081526027602052604090205460ff1680612d6557506001600160a01b03821660009081526027602052604090205460ff165b612daa5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610cdb565b6011544310158015612dc35750601554610100900460ff165b15612e93576001600160a01b03831660009081526012602052604090205460ff161580612dfd57506005546001600160a01b038381169116145b80612e1257506001600160a01b03821661dead145b612e935760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610cdb565b6001600160a01b03831660009081526016602052604090205460ff161561307a576001600160a01b03821660009081526029602052604090205460ff1615612fce576001600160a01b038316600090815260176020526040902054421015612f2f5760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610cdb565b612f3761135f565b811115612fa35760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610cdb565b612fb04262015180614428565b6001600160a01b03841660009081526017602052604090205561307a565b6001600160a01b03821660009081526027602052604090205460ff1661307a5760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610cdb565b60155460ff16156134cc576005546001600160a01b038481169116148015906130b157506005546001600160a01b03838116911614155b80156130c557506001600160a01b03821615155b80156130dc57506001600160a01b03821661dead14155b801561310157506001600160a01b03831660009081526027602052604090205460ff16155b801561312657506001600160a01b03821660009081526027602052604090205460ff16155b156134cc576103e861313760025490565b6131429060056143e7565b61314c9190614406565b6006541080156131695750601154613165906014614428565b4310155b15613193576103e861317a60025490565b6131859060056143e7565b61318f9190614406565b6006555b601a54610100900460ff1680156131c257506001600160a01b03831660009081526029602052604090205460ff165b1561321957601b543a11156132195760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610cdb565b601a5460ff1615613319576009546001600160a01b038381169116148015906132505750600a546001600160a01b03838116911614155b1561331957326000908152601960205260409020544311801561328a57506001600160a01b03821660009081526019602052604090205443115b6132f45760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610cdb565b3260009081526019602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526029602052604090205460ff16801561335a57506001600160a01b03821660009081526028602052604090205460ff16155b15613421576006548111156133c25760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610cdb565b6008546133ce83611344565b6133d89083614428565b111561341c5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08195e18d959591959606a1b6044820152606401610cdb565b6134cc565b6001600160a01b03821660009081526029602052604090205460ff16801561346257506001600160a01b03831660009081526028602052604090205460ff16155b156134cc576007548111156134cc5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610cdb565b60006134d730611344565b600b54909150811080159081906134f6575060155462010000900460ff165b801561350c5750600a54600160a01b900460ff16155b801561353157506001600160a01b03851660009081526029602052604090205460ff16155b801561355657506001600160a01b03851660009081526027602052604090205460ff16155b801561357b57506001600160a01b03841660009081526027602052604090205460ff16155b156135a957600a805460ff60a01b1916600160a01b17905561359b613a3b565b600a805460ff60a01b191690555b6001600160a01b03851660009081526027602052604090205460019060ff16806135eb57506001600160a01b03851660009081526027602052604090205460ff165b156135f4575060005b60008115613a275760115443108061363a5750670c7d713b49da000060065461361d9190614751565b851015801561363a57504360115460036136379190614428565b10155b801561365e57506001600160a01b03871660009081526029602052604090205460ff165b801561368357506001600160a01b03861660009081526029602052604090205460ff16155b80156136a857506001600160a01b03861660009081526027602052604090205460ff16155b80156136b657506000601c54115b156138705760115443106136dd576001600660008282546136d79190614751565b90915550505b6001600160a01b03861660009081526012602052604090205460ff166137bd576001600160a01b0386166000908152601260205260408120805460ff191660019081179091556014805491929091613736908490614428565b9091555050601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0900180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064601c54866137cd91906143e7565b6137d79190614406565b9050601c54601e54826137ea91906143e7565b6137f49190614406565b602560008282546138059190614428565b9091555050601c54601d5461381a90836143e7565b6138249190614406565b602460008282546138359190614428565b9091555050601c54601f5461384a90836143e7565b6138549190614406565b602660008282546138659190614428565b90915550613a099050565b6001600160a01b03861660009081526029602052604090205460ff16801561389a57506000602054115b1561392c576064602054866138af91906143e7565b6138b99190614406565b9050602054602254826138cc91906143e7565b6138d69190614406565b602560008282546138e79190614428565b90915550506020546021546138fc90836143e7565b6139069190614406565b602460008282546139179190614428565b909155505060205460235461384a90836143e7565b6001600160a01b03871660009081526029602052604090205460ff16801561395657506000601c54115b15613a09576064601c548661396b91906143e7565b6139759190614406565b9050601c54601e548261398891906143e7565b6139929190614406565b602560008282546139a39190614428565b9091555050601c54601d546139b890836143e7565b6139c29190614406565b602460008282546139d39190614428565b9091555050601c54601f546139e890836143e7565b6139f29190614406565b60266000828254613a039190614428565b90915550505b8015613a1a57613a1a873083612b26565b613a248186614751565b94505b613a32878787612b26565b50505050505050565b6000613a4630611344565b90506000602654602454602554613a5d9190614428565b613a679190614428565b9050811580613a74575080155b15613a7d575050565b600b54613a8b90600a6143e7565b821115613aa357600b54613aa090600a6143e7565b91505b60008060028360255486613ab791906143e7565b613ac19190614406565b613acb9190614406565b9050613adf613ada8286614751565b613cd0565b60255447908190600090613af590600290614406565b613aff9087614751565b602454613b0c90856143e7565b613b169190614406565b905060006002602554613b299190614406565b613b339088614751565b602654613b4090866143e7565b613b4a9190614406565b9050613b568183614428565b613b609084614751565b60006025819055602481905560265592508415801590613b805750600083115b15613b8f57613b8f8584613e22565b600d546040516001600160a01b03909116908290600081818185875af1925050503d8060008114613bdc576040519150601f19603f3d011682016040523d82523d6000602084013e613be1565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114613c31576040519150601f19603f3d011682016040523d82523d6000602084013e613c36565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602960205260409020805460ff1916821515179055611b7182825b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613d0557613d056143a2565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d829190614440565b81600181518110613d9557613d956143a2565b6001600160a01b039283166020918202929092010152600954613dbb9130911684612a02565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613df4908590600090869030904290600401614768565b600060405180830381600087803b158015613e0e57600080fd5b505af1158015612879573d6000803e3d6000fd5b600954613e3a9030906001600160a01b031684612a02565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613e799030908790600090819061dead904290600401614660565b60606040518083038185885af1158015613e97573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ebc919061469b565b5050505050565b600060208083528351808285015260005b81811015613ef057858101830151858201604001528201613ed4565b81811115613f02576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114613f2d57600080fd5b50565b60008060408385031215613f4357600080fd5b8235613f4e81613f18565b946020939093013593505050565b600060208284031215613f6e57600080fd5b8135613f7981613f18565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613fbf57613fbf613f80565b604052919050565b600067ffffffffffffffff821115613fe157613fe1613f80565b5060051b60200190565b600082601f830112613ffc57600080fd5b8135602061401161400c83613fc7565b613f96565b82815260059290921b8401810191818101908684111561403057600080fd5b8286015b8481101561405457803561404781613f18565b8352918301918301614034565b509695505050505050565b600082601f83011261407057600080fd5b8135602061408061400c83613fc7565b82815260059290921b8401810191818101908684111561409f57600080fd5b8286015b8481101561405457803583529183019183016140a3565b600080604083850312156140cd57600080fd5b823567ffffffffffffffff808211156140e557600080fd5b6140f186838701613feb565b9350602085013591508082111561410757600080fd5b506141148582860161405f565b9150509250929050565b60008060006060848603121561413357600080fd5b833561413e81613f18565b9250602084013561414e81613f18565b929592945050506040919091013590565b60006020828403121561417157600080fd5b5035919050565b8015158114613f2d57600080fd5b6000806040838503121561419957600080fd5b82356141a481613f18565b915060208301356141b481614178565b809150509250929050565b6000806000606084860312156141d457600080fd5b505081359360208301359350604090920135919050565b600080604083850312156141fe57600080fd5b823561420981613f18565b915060208301356141b481613f18565b600081518084526020808501945080840160005b838110156142525781516001600160a01b03168752958201959082019060010161422d565b509495945050505050565b602081526000613f796020830184614219565b60008060006060848603121561428557600080fd5b833567ffffffffffffffff8082111561429d57600080fd5b6142a987838801613feb565b945060208601359150808211156142bf57600080fd5b506142cc8682870161405f565b925050604084013590509250925092565b600181811c908216806142f157607f821691505b60208210810361431157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526036908201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726040820152752074786e2064756520746f20676173206c696d69747360501b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016143e0576143e06143b8565b5060010190565b6000816000190483118215151615614401576144016143b8565b500290565b60008261442357634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561443b5761443b6143b8565b500190565b60006020828403121561445257600080fd5b8151613f7981613f18565b8281526040602082015260006144766040830184614219565b949350505050565b6000602080838503121561449157600080fd5b825167ffffffffffffffff8111156144a857600080fd5b8301601f810185136144b957600080fd5b80516144c761400c82613fc7565b81815260059190911b820183019083810190878311156144e657600080fd5b928401925b82841015614504578351825292840192908401906144eb565b979650505050505050565b60006020828403121561452157600080fd5b5051919050565b60006020828403121561453a57600080fd5b8151613f7981614178565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b60208082526026908201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206040820152650d8c2eadcc6d60d31b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156146b057600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015614763576147636143b8565b500390565b85815284602082015260a06040820152600061478760a0830186614219565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220752624c5430344d1b9afbf4ce34b621ef7ba5df970d1872e1f94c02260249b4f64736f6c634300080d0033

Deployed Bytecode Sourcemap

9619:24946:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4147:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9762:27;;;;;;;;;;-1:-1:-1;9762:27:0;;;;-1:-1:-1;;;;;9762:27:0;;;;;;-1:-1:-1;;;;;798:32:1;;;780:51;;768:2;753:18;9762:27:0;616:221:1;5061:169:0;;;;;;;;;;-1:-1:-1;5061:169:0;;;;;:::i;:::-;;:::i;:::-;;;1463:14:1;;1456:22;1438:41;;1426:2;1411:18;5061:169:0;1298:187:1;11472:64:0;;;;;;;;;;-1:-1:-1;11472:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15507:194;;;;;;;;;;-1:-1:-1;15507:194:0;;;;;:::i;:::-;;:::i;:::-;;4468:108;;;;;;;;;;-1:-1:-1;4556:12:0;;4468:108;;;1888:25:1;;;1876:2;1861:18;4468:108:0;1742:177:1;11242:33:0;;;;;;;;;;;;;;;;17760:618;;;;;;;;;;-1:-1:-1;17760:618:0;;;;;:::i;:::-;;:::i;5238:492::-;;;;;;;;;;-1:-1:-1;5238:492:0;;;;;:::i;:::-;;:::i;30170:232::-;;;;;;;;;;-1:-1:-1;30170:232:0;;;;;:::i;:::-;;:::i;16562:269::-;;;;;;;;;;-1:-1:-1;16562:269:0;;;;;:::i;:::-;;:::i;29887:271::-;;;;;;;;;;-1:-1:-1;29887:271:0;;;;;:::i;:::-;;:::i;4367:93::-;;;;;;;;;;-1:-1:-1;4367:93:0;;4450:2;5321:36:1;;5309:2;5294:18;4367:93:0;5179:184:1;5738:215:0;;;;;;;;;;-1:-1:-1;5738:215:0;;;;;:::i;:::-;;:::i;9935:28::-;;;;;;;;;;-1:-1:-1;9935:28:0;;;;-1:-1:-1;;;;;9935:28:0;;;9796:21;;;;;;;;;;-1:-1:-1;9796:21:0;;;;-1:-1:-1;;;;;9796:21:0;;;10288:33;;;;;;;;;;-1:-1:-1;10288:33:0;;;;;;;;11087:32;;;;;;;;;;;;;;;;30727:312;;;;;;;;;;;;;:::i;26216:120::-;;;;;;;;;;-1:-1:-1;26310:18:0;;26295:12;:33;26216:120;;10944:31;;;;;;;;;;;;;;;;15391:108;;;;;;;;;;-1:-1:-1;15391:108:0;;;;;:::i;:::-;;:::i;9694:28::-;;;;;;;;;;;;;;;;26925:97;;;;;;;;;;-1:-1:-1;27002:12:0;26925:97;;11052:28;;;;;;;;;;;;;;;;10254:25;;;;;;;;;;;;;;;;27030:104;;;;;;;;;;-1:-1:-1;27111:15:0;27030:104;;10368:31;;;;;;;;;;-1:-1:-1;10368:31:0;;;;;;;;;;;4584:127;;;;;;;;;;-1:-1:-1;4584:127:0;;;;;:::i;:::-;;:::i;16126:424::-;;;;;;;;;;;;;:::i;8228:150::-;;;;;;;;;;;;;:::i;14970:302::-;;;;;;;;;;;;;:::i;14783:131::-;;;;;;;;;;-1:-1:-1;14783:131:0;;;;;:::i;:::-;;:::i;18390:260::-;;;;;;;;;;-1:-1:-1;18390:260:0;;;;;:::i;:::-;;:::i;19203:381::-;;;;;;;;;;-1:-1:-1;19203:381:0;;;;;:::i;:::-;;:::i;29151:498::-;;;;;;;;;;-1:-1:-1;29151:498:0;;;;;:::i;:::-;;:::i;10168:44::-;;;;;;;;;;-1:-1:-1;10168:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9660:27;;;;;;;;;;;;;;;;8014:79;;;;;;;;;;-1:-1:-1;8079:6:0;;-1:-1:-1;;;;;8079:6:0;8014:79;;4255:104;;;;;;;;;;;;;:::i;15280:103::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18658:293::-;;;;;;;;;;-1:-1:-1;18658:293:0;;;;;:::i;:::-;;:::i;11019:24::-;;;;;;;;;;;;;;;;10009:33;;;;;;;;;;-1:-1:-1;10009:33:0;;;;-1:-1:-1;;;;;10009:33:0;;;33148:1414;;;;;;;;;;-1:-1:-1;33148:1414:0;;;;;:::i;:::-;;:::i;11164:25::-;;;;;;;;;;;;;;;;5961:413;;;;;;;;;;-1:-1:-1;5961:413:0;;;;;:::i;:::-;;:::i;10128:33::-;;;;;;;;;;;;;;;;4719:175;;;;;;;;;;-1:-1:-1;4719:175:0;;;;;:::i;:::-;;:::i;11694:58::-;;;;;;;;;;-1:-1:-1;11694:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10328:33;;;;;;;;;;-1:-1:-1;10328:33:0;;;;;;;;;;;19990:182;;;;;;;;;;-1:-1:-1;19990:182:0;;;;;:::i;:::-;;:::i;19592:390::-;;;;;;;;;;-1:-1:-1;19592:390:0;;;;;:::i;:::-;;:::i;10770:39::-;;;;;;;;;;-1:-1:-1;10770:39:0;;;;;;;;17187:346;;;;;;;;;;-1:-1:-1;17187:346:0;;;;;:::i;:::-;;:::i;10910:27::-;;;;;;;;;;;;;;;;16843:274;;;;;;;;;;-1:-1:-1;16843:274:0;;;;;:::i;:::-;;:::i;4902:151::-;;;;;;;;;;-1:-1:-1;4902:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5018:18:0;;;4991:7;5018:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4902:151;9854:33;;;;;;;;;;;;;;;;15766:98;;;;;;;;;;;;;:::i;31047:2093::-;;;;;;;;;;-1:-1:-1;31047:2093:0;;;;;:::i;:::-;;:::i;10219:28::-;;;;;;;;;;-1:-1:-1;10219:28:0;;;;;:::i;:::-;;:::i;10051:37::-;;;;;;;;;;;;;;;;10982:30;;;;;;;;;;;;;;;;8386:244;;;;;;;;;;-1:-1:-1;8386:244:0;;;;;:::i;:::-;;:::i;29719:160::-;;;;;;;;;;;;;:::i;11126:31::-;;;;;;;;;;;;;;;;9729:24;;;;;;;;;;;;;;;;11201:34;;;;;;;;;;;;;;;;4147:100;4201:13;4234:5;4227:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4147:100;:::o;5061:169::-;5144:4;5161:39;376:10;5184:7;5193:6;5161:8;:39::i;:::-;-1:-1:-1;5218:4:0;5061:169;;;;:::o;15507:194::-;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;;;;;;;;;15593:13:::1;::::0;::::1;::::0;::::1;;;15592:14;15584:68;;;::::0;-1:-1:-1;;;15584:68:0;;9148:2:1;15584:68:0::1;::::0;::::1;9130:21:1::0;9187:2;9167:18;;;9160:30;9226:34;9206:18;;;9199:62;-1:-1:-1;;;9277:18:1;;;9270:39;9326:19;;15584:68:0::1;8946:405:1::0;15584:68:0::1;15663:9;:30:::0;;-1:-1:-1;;;;;;15663:30:0::1;-1:-1:-1::0;;;;;15663:30:0;;;::::1;::::0;;;::::1;::::0;;15507:194::o;17760:618::-;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;17902:15:::1;:22;17884:7;:14;:40;17876:83;;;::::0;-1:-1:-1;;;17876:83:0;;9558:2:1;17876:83:0::1;::::0;::::1;9540:21:1::0;9597:2;9577:18;;;9570:30;9636:32;9616:18;;;9609:60;9686:18;;17876:83:0::1;9356:354:1::0;17876:83:0::1;17995:3;17978:7;:14;:20;17970:87;;;;-1:-1:-1::0;;;17970:87:0::1;;;;;;;:::i;:::-;18170:9;18166:205;18189:7;:14;18185:1;:18;18166:205;;;18224:14;18241:7;18249:1;18241:10;;;;;;;;:::i;:::-;;;;;;;18224:27;;18266:14;18283:15;18299:1;18283:18;;;;;;;;:::i;:::-;;;;;;;18266:35;;18316:43;18332:10;18344:6;18352;18316:15;:43::i;:::-;18209:162;;18205:3;;;;;:::i;:::-;;;;18166:205;;;;17760:618:::0;;:::o;5238:492::-;5378:4;5395:36;5405:6;5413:9;5424:6;5395:9;:36::i;:::-;-1:-1:-1;;;;;5471:19:0;;5444:24;5471:19;;;:11;:19;;;;;;;;376:10;5471:33;;;;;;;;5523:26;;;;5515:79;;;;-1:-1:-1;;;5515:79:0;;10744:2:1;5515:79:0;;;10726:21:1;10783:2;10763:18;;;10756:30;10822:34;10802:18;;;10795:62;-1:-1:-1;;;10873:18:1;;;10866:38;10921:19;;5515:79:0;10542:404:1;5515:79:0;5630:57;5639:6;376:10;5680:6;5661:16;:25;5630:8;:57::i;:::-;-1:-1:-1;5718:4:0;;5238:492;-1:-1:-1;;;;5238:492:0:o;30170:232::-;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30252:25:0;::::1;30244:57;;;::::0;-1:-1:-1;;;30244:57:0;;11153:2:1;30244:57:0::1;::::0;::::1;11135:21:1::0;11192:2;11172:18;;;11165:30;-1:-1:-1;;;11211:18:1;;;11204:49;11270:18;;30244:57:0::1;10951:343:1::0;30244:57:0::1;30337:10;::::0;;-1:-1:-1;;;;;;30312:36:0;::::1;-1:-1:-1::0;;;;;30337:10:0;;::::1;30312:36;::::0;;;30364:30:::1;::::0;;;::::1;::::0;::::1;::::0;30337:10:::1;::::0;30364:30:::1;30170:232:::0;:::o;16562:269::-;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;16681:4:::1;16675;16655:13;4556:12:::0;;;4468:108;16655:13:::1;:17;::::0;16671:1:::1;16655:17;:::i;:::-;:24;;;;:::i;:::-;16654:31;;;;:::i;:::-;16644:6;:41;;16636:95;;;::::0;-1:-1:-1;;;16636:95:0;;11896:2:1;16636:95:0::1;::::0;::::1;11878:21:1::0;11935:2;11915:18;;;11908:30;11974:34;11954:18;;;11947:62;-1:-1:-1;;;12025:18:1;;;12018:39;12074:19;;16636:95:0::1;11694:405:1::0;16636:95:0::1;16757:17;:6:::0;16767::::1;16757:17;:::i;:::-;16742:12;:32:::0;;;16790:33:::1;::::0;1888:25:1;;;16790:33:0::1;::::0;1876:2:1;1861:18;16790:33:0::1;;;;;;;;16562:269:::0;:::o;29887:271::-;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29981:31:0;::::1;29973:63;;;::::0;-1:-1:-1;;;29973:63:0;;11153:2:1;29973:63:0::1;::::0;::::1;11135:21:1::0;11192:2;11172:18;;;11165:30;-1:-1:-1;;;11211:18:1;;;11204:49;11270:18;;29973:63:0::1;10951:343:1::0;29973:63:0::1;30047:16;:45:::0;;-1:-1:-1;;;;;;30047:45:0::1;-1:-1:-1::0;;;;;30047:45:0;::::1;::::0;;::::1;::::0;;;30108:42:::1;::::0;::::1;::::0;-1:-1:-1;;30108:42:0::1;29887:271:::0;:::o;5738:215::-;376:10;5826:4;5875:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5875:34:0;;;;;;;;;;5826:4;;5843:80;;5866:7;;5875:47;;5912:10;;5875:47;:::i;:::-;5843:8;:80::i;30727:312::-;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;30818:18:::1;;30790:24;30808:4;30790:9;:24::i;:::-;:46;;30782:123;;;::::0;;-1:-1:-1;;;30782:123:0;;12439:2:1;30782:123:0::1;::::0;::::1;12421:21:1::0;12458:18;;;12451:30;;;;12517:34;12497:18;;;12490:62;12588:34;12568:18;;;12561:62;12640:19;;30782:123:0::1;12237:428:1::0;30782:123:0::1;30916:8;:15:::0;;-1:-1:-1;;;;30916:15:0::1;-1:-1:-1::0;;;30916:15:0::1;::::0;;30942:10:::1;:8;:10::i;:::-;30963:8;:16:::0;;-1:-1:-1;;;;30963:16:0::1;::::0;;30995:36:::1;::::0;31015:15:::1;1888:25:1::0;;30995:36:0::1;::::0;1876:2:1;1861:18;30995:36:0::1;;;;;;;30727:312::o:0;15391:108::-;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15464:19:0::1;15486:5;15464:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;15464:27:0::1;::::0;;15391:108::o;4584:127::-;-1:-1:-1;;;;;4685:18:0;4658:7;4685:18;;;;;;;;;;;;4584:127::o;16126:424::-;16223:16;;;16237:1;16223:16;;;;;;;;16180:7;;;;16223:16;16237:1;16223:16;;;;;;;;-1:-1:-1;;16260:9:0;;:16;;;-1:-1:-1;;;16260:16:0;;;;16199:40;;-1:-1:-1;;;;;;16260:9:0;;;;:14;;-1:-1:-1;16260:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16250:4;16255:1;16250:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;16250:26:0;;;-1:-1:-1;;;;;16250:26:0;;;;;16305:4;16287;16292:1;16287:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16287:23:0;;;;:7;;;;;;;;;;:23;16358:16;;;16372:1;16358:16;;;;;;;;16331:24;;16358:16;;16372:1;;16358:16;;;;;;;;;-1:-1:-1;;16395:9:0;;16419:15;;16395:46;;-1:-1:-1;;;16395:46:0;;16331:43;;-1:-1:-1;;;;;;16395:9:0;;;;:23;;:46;;16436:4;;16395:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16395:46:0;;;;;;;;;;;;:::i;:::-;16385:56;;16539:3;16520:16;;16500:17;;16487:10;;:30;;;;:::i;:::-;:49;;;;:::i;:::-;16473:7;16481:1;16473:10;;;;;;;;:::i;:::-;;;;;;;:64;;;;:::i;:::-;16472:70;;;;:::i;:::-;16459:7;16467:1;16459:10;;;;;;;;:::i;:::-;;;;;;;:83;;;;:::i;:::-;16452:90;;;;16126:424;:::o;8228:150::-;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;8321:6:::1;::::0;8300:40:::1;::::0;8337:1:::1;::::0;-1:-1:-1;;;;;8321:6:0::1;::::0;8300:40:::1;::::0;8337:1;;8300:40:::1;8351:6;:19:::0;;-1:-1:-1;;;;;;8351:19:0::1;::::0;;8228:150::o;14970:302::-;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;15024:14:::1;:22:::0;;-1:-1:-1;;15024:22:0::1;::::0;;15057:14:::1;:22:::0;;-1:-1:-1;;15090:28:0;;;4556:12;;15129::::1;:28:::0;4556:12;;15168:13:::1;:29:::0;4556:12;;15208:9:::1;:25:::0;15249:15:::1;::::0;::::1;::::0;;;::::1;14970:302::o:0;14783:131::-;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;14865:3:::1;14858;:10;;14850:19;;;::::0;::::1;;14894:12;:3:::0;14900:6:::1;14894:12;:::i;:::-;14880:11;:26:::0;-1:-1:-1;14783:131:0:o;18390:260::-;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;18486:4:::1;18482:104;;18524:6;::::0;-1:-1:-1;;;;;18524:6:0;;::::1;18514:16:::0;;::::1;::::0;18506:68:::1;;;::::0;-1:-1:-1;;;18506:68:0;;14351:2:1;18506:68:0::1;::::0;::::1;14333:21:1::0;14390:2;14370:18;;;14363:30;14429:34;14409:18;;;14402:62;-1:-1:-1;;;14480:18:1;;;14473:37;14527:19;;18506:68:0::1;14149:403:1::0;18506:68:0::1;-1:-1:-1::0;;;;;18596:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;18596:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18390:260::o;19203:381::-;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;19324:16:::1;:33:::0;;;19368:15:::1;:31:::0;;;19410:9:::1;:23:::0;;;19422:11;19459:34:::1;19386:13:::0;19343:14;19459:34:::1;:::i;:::-;:46;;;;:::i;:::-;19444:12;:61:::0;;;19540:2:::1;-1:-1:-1::0;19524:18:0::1;19516:60;;;::::0;-1:-1:-1;;;19516:60:0;;14759:2:1;19516:60:0::1;::::0;::::1;14741:21:1::0;14798:2;14778:18;;;14771:30;14837:31;14817:18;;;14810:59;14886:18;;19516:60:0::1;14557:353:1::0;29151:498:0;8141:6;;29238:10;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29269:20:0;::::1;29261:59;;;::::0;-1:-1:-1;;;29261:59:0;;15117:2:1;29261:59:0::1;::::0;::::1;15099:21:1::0;15156:2;15136:18;;;15129:30;15195:28;15175:18;;;15168:56;15241:18;;29261:59:0::1;14915:350:1::0;29261:59:0::1;-1:-1:-1::0;;;;;29339:23:0;::::1;29357:4;29339:23;;::::0;:41:::1;;-1:-1:-1::0;29367:13:0::1;::::0;::::1;::::0;::::1;;;29366:14;29339:41;29331:106;;;::::0;-1:-1:-1;;;29331:106:0;;15472:2:1;29331:106:0::1;::::0;::::1;15454:21:1::0;15511:2;15491:18;;;15484:30;15550:34;15530:18;;;15523:62;-1:-1:-1;;;15601:18:1;;;15594:50;15661:19;;29331:106:0::1;15270:416:1::0;29331:106:0::1;29475:39;::::0;-1:-1:-1;;;29475:39:0;;29508:4:::1;29475:39;::::0;::::1;780:51:1::0;29448:24:0::1;::::0;-1:-1:-1;;;;;29475:24:0;::::1;::::0;::::1;::::0;753:18:1;;29475:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29533:46;::::0;-1:-1:-1;;;29533:46:0;;-1:-1:-1;;;;;16072:32:1;;;29533:46:0::1;::::0;::::1;16054:51:1::0;16121:18;;;16114:34;;;29448:66:0;;-1:-1:-1;29533:23:0;;::::1;::::0;::::1;::::0;16027:18:1;;29533:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29595;::::0;;-1:-1:-1;;;;;16072:32:1;;16054:51;;16136:2;16121:18;;16114:34;;;29525:54:0;;-1:-1:-1;29595:46:0::1;::::0;16027:18:1;29595:46:0::1;;;;;;;29250:399;29151:498:::0;;;;:::o;4255:104::-;4311:13;4344:7;4337:14;;;;;:::i;15280:103::-;15329:16;15364:11;15357:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15357:18:0;;;;;;;;;;;;;;;;;;;;;;15280:103;:::o;18658:293::-;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;18767:6:::1;::::0;-1:-1:-1;;;;;18767:6:0;;::::1;18759:14:::0;;::::1;::::0;18751:84:::1;;;::::0;-1:-1:-1;;;18751:84:0;;16611:2:1;18751:84:0::1;::::0;::::1;16593:21:1::0;16650:2;16630:18;;;16623:30;16689:34;16669:18;;;16662:62;16760:27;16740:18;;;16733:55;16805:19;;18751:84:0::1;16409:421:1::0;18751:84:0::1;18846:41;18875:4;18881:5;18846:28;:41::i;:::-;18903:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;18903:40:0;::::1;::::0;::::1;::::0;;;::::1;18658:293:::0;;:::o;33148:1414::-;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;33232:13:::1;::::0;::::1;::::0;::::1;;;33231:14;33223:70;;;;-1:-1:-1::0;;;33223:70:0::1;;;;;;;:::i;:::-;33331:2;33312:16;:21;33304:73;;;;-1:-1:-1::0;;;33304:73:0::1;;;;;;;:::i;:::-;33425:4;33405:13;4556:12:::0;;;4468:108;33405:13:::1;:17;::::0;33421:1:::1;33405:17;:::i;:::-;:24;;;;:::i;:::-;33390:12;:39:::0;33476:4:::1;33456:13;4556:12:::0;;;4468:108;33456:13:::1;:17;::::0;33472:1:::1;33456:17;:::i;:::-;:24;;;;:::i;:::-;33440:13;:40:::0;33528:13:::1;:20:::0;;-1:-1:-1;;33559:18:0;;;;;33609:12:::1;33588:18;:33:::0;;;33653:37:::1;::::0;33674:16;;33653:37:::1;:::i;:::-;33632:18;:58:::0;33706:16:::1;::::0;::::1;::::0;;;::::1;33780:9;;;;;;;;;-1:-1:-1::0;;;;;33780:9:0::1;-1:-1:-1::0;;;;;33780:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33768:43:0::1;;33820:4;33827:9;;;;;;;;;-1:-1:-1::0;;;;;33827:9:0::1;-1:-1:-1::0;;;;;33827:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33768:76;::::0;-1:-1:-1;;;;;;33768:76:0::1;::::0;;;;;;-1:-1:-1;;;;;17885:15:1;;;33768:76:0::1;::::0;::::1;17867:34:1::0;17937:15;;17917:18;;;17910:43;17802:18;;33768:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33759:6;:85:::0;;-1:-1:-1;;;;;;33759:85:0::1;-1:-1:-1::0;;;;;33759:85:0;;;::::1;::::0;;::::1;::::0;;33855:49:::1;::::0;-1:-1:-1;33855:26:0::1;:49::i;:::-;33952:6;::::0;33915:51:::1;::::0;-1:-1:-1;;;;;33952:6:0::1;::::0;33915:28:::1;:51::i;:::-;34046:1;34022:21;:25;34014:73;;;;-1:-1:-1::0;;;34014:73:0::1;;;;;;;:::i;:::-;34135:1;34108:24;34126:4;34108:9;:24::i;:::-;:28;34100:79;;;;-1:-1:-1::0;;;34100:79:0::1;;;;;;;:::i;:::-;34224:9;::::0;34192:69:::1;::::0;34209:4:::1;::::0;-1:-1:-1;;;;;34224:9:0::1;34236:24;34209:4:::0;34236:9:::1;:24::i;34192:69::-;34272:9;::::0;-1:-1:-1;;;;;34272:9:0::1;:25;34305:21;34350:4;34370:24;34350:4:::0;34370:9:::1;:24::i;:::-;34495:18;::::0;34272:282:::1;::::0;-1:-1:-1;;;;;;34272:282:0::1;::::0;;;;;;::::1;::::0;;;34409:1:::1;::::0;;;-1:-1:-1;;;;;34495:18:0::1;::::0;34528:15:::1;::::0;34272:282:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33148:1414:::0;:::o;5961:413::-;376:10;6054:4;6098:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6098:34:0;;;;;;;;;;6151:35;;;;6143:85;;;;-1:-1:-1;;;6143:85:0;;19900:2:1;6143:85:0;;;19882:21:1;19939:2;19919:18;;;19912:30;19978:34;19958:18;;;19951:62;-1:-1:-1;;;20029:18:1;;;20022:35;20074:19;;6143:85:0;19698:401:1;6143:85:0;6264:67;376:10;6287:7;6315:15;6296:16;:34;6264:8;:67::i;:::-;-1:-1:-1;6362:4:0;;5961:413;-1:-1:-1;;;5961:413:0:o;4719:175::-;4805:4;4822:42;376:10;4846:9;4857:6;4822:9;:42::i;19990:182::-;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20075:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20075:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20130:34;;1438:41:1;;;20130:34:0::1;::::0;1411:18:1;20130:34:0::1;;;;;;;19990:182:::0;;:::o;19592:390::-;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;19714:17:::1;:34:::0;;;19759:16:::1;:32:::0;;;19802:10:::1;:24:::0;;;19815:11;19853:36:::1;19778:13:::0;19734:14;19853:36:::1;:::i;:::-;:49;;;;:::i;:::-;19837:13;:65:::0;;;19938:2:::1;-1:-1:-1::0;19921:19:0::1;19913:61;;;::::0;-1:-1:-1;;;19913:61:0;;20306:2:1;19913:61:0::1;::::0;::::1;20288:21:1::0;20345:2;20325:18;;;20318:30;20384:31;20364:18;;;20357:59;20433:18;;19913:61:0::1;20104:353:1::0;17187:346:0;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;17310:6:::1;17290:13;4556:12:::0;;;4468:108;17290:13:::1;:17;::::0;17306:1:::1;17290:17;:::i;:::-;:26;;;;:::i;:::-;17277:9;:39;;17269:105;;;::::0;-1:-1:-1;;;17269:105:0;;20664:2:1;17269:105:0::1;::::0;::::1;20646:21:1::0;20703:2;20683:18;;;20676:30;20742:34;20722:18;;;20715:62;-1:-1:-1;;;20793:18:1;;;20786:51;20854:19;;17269:105:0::1;20462:417:1::0;17269:105:0::1;17425:4;17405:13;4556:12:::0;;;4468:108;17405:13:::1;:17;::::0;17421:1:::1;17405:17;:::i;:::-;:24;;;;:::i;:::-;17392:9;:37;;17384:102;;;::::0;-1:-1:-1;;;17384:102:0;;21086:2:1;17384:102:0::1;::::0;::::1;21068:21:1::0;21125:2;21105:18;;;21098:30;21164:34;21144:18;;;21137:62;-1:-1:-1;;;21215:18:1;;;21208:50;21275:19;;17384:102:0::1;20884:416:1::0;17384:102:0::1;17496:18;:30:::0;17187:346::o;16843:274::-;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;16963:4:::1;16957;16937:13;4556:12:::0;;;4468:108;16937:13:::1;:17;::::0;16953:1:::1;16937:17;:::i;:::-;:24;;;;:::i;:::-;16936:31;;;;:::i;:::-;16926:6;:41;;16918:96;;;::::0;-1:-1:-1;;;16918:96:0;;21507:2:1;16918:96:0::1;::::0;::::1;21489:21:1::0;21546:2;21526:18;;;21519:30;21585:34;21565:18;;;21558:62;-1:-1:-1;;;21636:18:1;;;21629:40;21686:19;;16918:96:0::1;21305:406:1::0;16918:96:0::1;17041:17;:6:::0;17051::::1;17041:17;:::i;:::-;17025:13;:33:::0;;;17074:35:::1;::::0;1888:25:1;;;17074:35:0::1;::::0;1876:2:1;1861:18;17074:35:0::1;1742:177:1::0;15766:98:0;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;15828:20:::1;:28:::0;;-1:-1:-1;;15828:28:0::1;::::0;;15766:98::o;31047:2093::-;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;31188:13:::1;::::0;::::1;::::0;::::1;;;31187:14;31179:70;;;;-1:-1:-1::0;;;31179:70:0::1;;;;;;;:::i;:::-;31287:2;31268:16;:21;31260:73;;;;-1:-1:-1::0;;;31260:73:0::1;;;;;;;:::i;:::-;31372:15;:22;31354:7;:14;:40;31346:83;;;::::0;-1:-1:-1;;;31346:83:0;;9558:2:1;31346:83:0::1;::::0;::::1;9540:21:1::0;9597:2;9577:18;;;9570:30;9636:32;9616:18;;;9609:60;9686:18;;31346:83:0::1;9356:354:1::0;31346:83:0::1;31465:3;31448:7;:14;:20;31440:87;;;;-1:-1:-1::0;;;31440:87:0::1;;;;;;;:::i;:::-;31640:9;31636:319;31659:7;:14;31655:1;:18;31636:319;;;31694:14;31711:7;31719:1;31711:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;31736:26:0;::::1;;::::0;;;:18:::1;:26:::0;;;;;;:33;;-1:-1:-1;;31736:33:0::1;31765:4;31736:33;::::0;;31784:25:::1;:33:::0;;;;;;31820:15:::1;31784:51:::0;;31867:18;;31711:10;;-1:-1:-1;31867:15:0;;31883:1;;31867:18;::::1;;;;;:::i;:::-;;;;;;;31850:35;;31900:43;31916:10;31928:6;31936;31900:15;:43::i;:::-;31679:276;;31675:3;;;;;:::i;:::-;;;;31636:319;;;;32002:4;31982:13;4556:12:::0;;;4468:108;31982:13:::1;:17;::::0;31998:1:::1;31982:17;:::i;:::-;:24;;;;:::i;:::-;31967:12;:39:::0;32053:4:::1;32033:13;4556:12:::0;;;4468:108;32033:13:::1;:17;::::0;32049:1:::1;32033:17;:::i;:::-;:24;;;;:::i;:::-;32017:13;:40:::0;32105:13:::1;:20:::0;;-1:-1:-1;;32136:18:0;;;;;32187:12:::1;32166:18;:33:::0;;;32231:37:::1;::::0;32252:16;;32231:37:::1;:::i;:::-;32210:18;:58:::0;32284:16:::1;::::0;::::1;::::0;;;::::1;32358:9;;;;;;;;;-1:-1:-1::0;;;;;32358:9:0::1;-1:-1:-1::0;;;;;32358:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32346:43:0::1;;32398:4;32405:9;;;;;;;;;-1:-1:-1::0;;;;;32405:9:0::1;-1:-1:-1::0;;;;;32405:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32346:76;::::0;-1:-1:-1;;;;;;32346:76:0::1;::::0;;;;;;-1:-1:-1;;;;;17885:15:1;;;32346:76:0::1;::::0;::::1;17867:34:1::0;17937:15;;17917:18;;;17910:43;17802:18;;32346:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32337:6;:85:::0;;-1:-1:-1;;;;;;32337:85:0::1;-1:-1:-1::0;;;;;32337:85:0;;;::::1;::::0;;::::1;::::0;;32433:49:::1;::::0;-1:-1:-1;32433:26:0::1;:49::i;:::-;32530:6;::::0;32493:51:::1;::::0;-1:-1:-1;;;;;32530:6:0::1;::::0;32493:28:::1;:51::i;:::-;32624:1;32600:21;:25;32592:73;;;;-1:-1:-1::0;;;32592:73:0::1;;;;;;;:::i;:::-;32713:1;32686:24;32704:4;32686:9;:24::i;:::-;:28;32678:79;;;;-1:-1:-1::0;;;32678:79:0::1;;;;;;;:::i;:::-;32802:9;::::0;32770:69:::1;::::0;32787:4:::1;::::0;-1:-1:-1;;;;;32802:9:0::1;32814:24;32787:4:::0;32814:9:::1;:24::i;32770:69::-;32850:9;::::0;-1:-1:-1;;;;;32850:9:0::1;:25;32883:21;32928:4;32948:24;32928:4:::0;32948:9:::1;:24::i;:::-;33073:18;::::0;32850:282:::1;::::0;-1:-1:-1;;;;;;32850:282:0::1;::::0;;;;;;::::1;::::0;;;32987:1:::1;::::0;;;-1:-1:-1;;;;;33073:18:0::1;::::0;33106:15:::1;::::0;32850:282:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31047:2093:::0;;;:::o;10219:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10219:28:0;;-1:-1:-1;10219:28:0;:::o;8386:244::-;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8475:22:0;::::1;8467:73;;;::::0;-1:-1:-1;;;8467:73:0;;21918:2:1;8467:73:0::1;::::0;::::1;21900:21:1::0;21957:2;21937:18;;;21930:30;21996:34;21976:18;;;21969:62;-1:-1:-1;;;22047:18:1;;;22040:36;22093:19;;8467:73:0::1;21716:402:1::0;8467:73:0::1;8577:6;::::0;8556:38:::1;::::0;-1:-1:-1;;;;;8556:38:0;;::::1;::::0;8577:6:::1;::::0;8556:38:::1;::::0;8577:6:::1;::::0;8556:38:::1;8605:6;:17:::0;;-1:-1:-1;;;;;;8605:17:0::1;-1:-1:-1::0;;;;;8605:17:0;;;::::1;::::0;;;::::1;::::0;;8386:244::o;29719:160::-;8141:6;;-1:-1:-1;;;;;8141:6:0;376:10;8141:22;8133:67;;;;-1:-1:-1;;;8133:67:0;;;;;;;:::i;:::-;29813:58:::1;::::0;29777:12:::1;::::0;29821:10:::1;::::0;29845:21:::1;::::0;29777:12;29813:58;29777:12;29813:58;29845:21;29821:10;29813:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7303:380:::0;-1:-1:-1;;;;;7439:19:0;;7431:68;;;;-1:-1:-1;;;7431:68:0;;22535:2:1;7431:68:0;;;22517:21:1;22574:2;22554:18;;;22547:30;22613:34;22593:18;;;22586:62;-1:-1:-1;;;22664:18:1;;;22657:34;22708:19;;7431:68:0;22333:400:1;7431:68:0;-1:-1:-1;;;;;7518:21:0;;7510:68;;;;-1:-1:-1;;;7510:68:0;;22940:2:1;7510:68:0;;;22922:21:1;22979:2;22959:18;;;22952:30;23018:34;22998:18;;;22991:62;-1:-1:-1;;;23069:18:1;;;23062:32;23111:19;;7510:68:0;22738:398:1;7510:68:0;-1:-1:-1;;;;;7591:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7643:32;;1888:25:1;;;7643:32:0;;1861:18:1;7643:32:0;;;;;;;7303:380;;;:::o;6382:614::-;-1:-1:-1;;;;;6522:20:0;;6514:70;;;;-1:-1:-1;;;6514:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6603:23:0;;6595:71;;;;-1:-1:-1;;;6595:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6703:17:0;;6679:21;6703:17;;;;;;;;;;;6739:23;;;;6731:74;;;;-1:-1:-1;;;6731:74:0;;24153:2:1;6731:74:0;;;24135:21:1;24192:2;24172:18;;;24165:30;24231:34;24211:18;;;24204:62;-1:-1:-1;;;24282:18:1;;;24275:36;24328:19;;6731:74:0;23951:402:1;6731:74:0;-1:-1:-1;;;;;6841:17:0;;;:9;:17;;;;;;;;;;;6861:22;;;6841:42;;6905:20;;;;;;;;:30;;6877:6;;6841:9;6905:30;;6877:6;;6905:30;:::i;:::-;;;;;;;;6970:9;-1:-1:-1;;;;;6953:35:0;6962:6;-1:-1:-1;;;;;6953:35:0;;6981:6;6953:35;;;;1888:25:1;;1876:2;1861:18;;1742:177;6953:35:0;;;;;;;;6503:493;6382:614;;;:::o;20180:6028::-;-1:-1:-1;;;;;20280:18:0;;20272:68;;;;-1:-1:-1;;;20272:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20359:16:0;;20351:64;;;;-1:-1:-1;;;20351:64:0;;;;;;;:::i;:::-;20443:1;20434:6;:10;20426:52;;;;-1:-1:-1;;;20426:52:0;;24560:2:1;20426:52:0;;;24542:21:1;24599:2;24579:18;;;24572:30;24638:31;24618:18;;;24611:59;24687:18;;20426:52:0;24358:353:1;20426:52:0;20503:13;;;;;;;20499:132;;-1:-1:-1;;;;;20540:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;20569:23:0;;;;;;:19;:23;;;;;;;;20540:52;20532:87;;;;-1:-1:-1;;;20532:87:0;;24918:2:1;20532:87:0;;;24900:21:1;24957:2;24937:18;;;24930:30;-1:-1:-1;;;24976:18:1;;;24969:52;25038:18;;20532:87:0;24716:346:1;20532:87:0;26310:18;;26295:12;:33;20646:26;:43;;;;-1:-1:-1;20676:13:0;;;;;;;20646:43;20643:217;;;-1:-1:-1;;;;;20714:17:0;;;;;;:11;:17;;;;;;;;20713:18;;:35;;-1:-1:-1;8079:6:0;;-1:-1:-1;;;;;20735:13:0;;;8079:6;;20735:13;20713:35;:60;;;-1:-1:-1;;;;;;20752:21:0;;20766:6;20752:21;20713:60;20705:143;;;;-1:-1:-1;;;20705:143:0;;25269:2:1;20705:143:0;;;25251:21:1;25308:2;25288:18;;;25281:30;25347:34;25327:18;;;25320:62;25418:34;25398:18;;;25391:62;-1:-1:-1;;;25469:19:1;;;25462:37;25516:19;;20705:143:0;25067:474:1;20705:143:0;-1:-1:-1;;;;;20875:24:0;;;;;;:18;:24;;;;;;;;20872:610;;;-1:-1:-1;;;;;20918:29:0;;;;;;:25;:29;;;;;;;;20915:556;;;-1:-1:-1;;;;;21025:31:0;;;;;;:25;:31;;;;;;21060:15;-1:-1:-1;21025:50:0;21017:78;;;;-1:-1:-1;;;21017:78:0;;25748:2:1;21017:78:0;;;25730:21:1;25787:2;25767:18;;;25760:30;-1:-1:-1;;;25806:18:1;;;25799:45;25861:18;;21017:78:0;25546:339:1;21017:78:0;21132:23;:21;:23::i;:::-;21122:6;:33;;21114:98;;;;-1:-1:-1;;;21114:98:0;;26092:2:1;21114:98:0;;;26074:21:1;26131:2;26111:18;;;26104:30;26170:34;26150:18;;;26143:62;-1:-1:-1;;;26221:18:1;;;26214:50;26281:19;;21114:98:0;25890:416:1;21114:98:0;21265:26;:15;21283:8;21265:26;:::i;:::-;-1:-1:-1;;;;;21231:31:0;;;;;;:25;:31;;;;;:60;20915:556;;;-1:-1:-1;;;;;21317:23:0;;;;;;:19;:23;;;;;;;;21313:158;;21360:95;;-1:-1:-1;;;21360:95:0;;26513:2:1;21360:95:0;;;26495:21:1;26552:2;26532:18;;;26525:30;26591:34;26571:18;;;26564:62;26662:34;26642:18;;;26635:62;-1:-1:-1;;;26713:19:1;;;26706:52;26775:19;;21360:95:0;26311:489:1;21313:158:0;21505:14;;;;21502:2005;;;8079:6;;-1:-1:-1;;;;;21539:15:0;;;8079:6;;21539:15;;;;:32;;-1:-1:-1;8079:6:0;;-1:-1:-1;;;;;21558:13:0;;;8079:6;;21558:13;;21539:32;:52;;;;-1:-1:-1;;;;;;21575:16:0;;;;21539:52;:77;;;;-1:-1:-1;;;;;;21595:21:0;;21609:6;21595:21;;21539:77;:107;;;;-1:-1:-1;;;;;;21621:25:0;;;;;;:19;:25;;;;;;;;21620:26;21539:107;:135;;;;-1:-1:-1;;;;;;21651:23:0;;;;;;:19;:23;;;;;;;;21650:24;21539:135;21535:1961;;;21814:4;21794:13;4556:12;;;4468:108;21794:13;:17;;21810:1;21794:17;:::i;:::-;:24;;;;:::i;:::-;21779:12;;:39;:82;;;;-1:-1:-1;21838:18:0;;:23;;21859:2;21838:23;:::i;:::-;21822:12;:39;;21779:82;21775:169;;;21920:4;21900:13;4556:12;;;4468:108;21900:13;:17;;21916:1;21900:17;:::i;:::-;:24;;;;:::i;:::-;21885:12;:39;21775:169;22039:14;;;;;;;:49;;;;-1:-1:-1;;;;;;22057:31:0;;;;;;:25;:31;;;;;;;;22039:49;22035:161;;;22136:11;;22121;:26;;22113:63;;;;-1:-1:-1;;;22113:63:0;;27007:2:1;22113:63:0;;;26989:21:1;27046:2;27026:18;;;27019:30;27085:26;27065:18;;;27058:54;27129:18;;22113:63:0;26805:348:1;22113:63:0;22354:20;;;;22350:482;;;22416:9;;-1:-1:-1;;;;;22402:24:0;;;22416:9;;22402:24;;;;:49;;-1:-1:-1;22444:6:0;;-1:-1:-1;;;;;22430:21:0;;;22444:6;;22430:21;;22402:49;22398:415;;;22512:9;22487:35;;;;:24;:35;;;;;;22525:12;-1:-1:-1;22487:97:0;;;;-1:-1:-1;;;;;;22541:28:0;;;;;;:24;:28;;;;;;22572:12;-1:-1:-1;22487:97:0;22479:163;;;;-1:-1:-1;;;22479:163:0;;27360:2:1;22479:163:0;;;27342:21:1;27399:2;27379:18;;;27372:30;27438:34;27418:18;;;27411:62;-1:-1:-1;;;27489:18:1;;;27482:51;27550:19;;22479:163:0;27158:417:1;22479:163:0;22694:9;22669:35;;;;:24;:35;;;;;;22707:12;22669:50;;;;-1:-1:-1;;;;;22746:28:0;;;;;;:43;22398:415;-1:-1:-1;;;;;22901:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;22937:35:0;;;;;;:31;:35;;;;;;;;22936:36;22901:71;22897:584;;;23019:12;;23009:6;:22;;23001:75;;;;-1:-1:-1;;;23001:75:0;;27782:2:1;23001:75:0;;;27764:21:1;27821:2;27801:18;;;27794:30;27860:34;27840:18;;;27833:62;-1:-1:-1;;;27911:18:1;;;27904:38;27959:19;;23001:75:0;27580:404:1;23001:75:0;23137:9;;23120:13;23130:2;23120:9;:13::i;:::-;23111:22;;:6;:22;:::i;:::-;:35;;23103:67;;;;-1:-1:-1;;;23103:67:0;;28191:2:1;23103:67:0;;;28173:21:1;28230:2;28210:18;;;28203:30;-1:-1:-1;;;28249:18:1;;;28242:49;28308:18;;23103:67:0;27989:343:1;23103:67:0;22897:584;;;-1:-1:-1;;;;;23283:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;23317:37:0;;;;;;:31;:37;;;;;;;;23316:38;23283:71;23279:202;;;23401:13;;23391:6;:23;;23383:78;;;;-1:-1:-1;;;23383:78:0;;28539:2:1;23383:78:0;;;28521:21:1;28578:2;28558:18;;;28551:30;28617:34;28597:18;;;28590:62;-1:-1:-1;;;28668:18:1;;;28661:40;28718:19;;23383:78:0;28337:406:1;23383:78:0;23519:28;23550:24;23568:4;23550:9;:24::i;:::-;23634:18;;23519:55;;-1:-1:-1;23610:42:0;;;;;;;23668:22;;-1:-1:-1;23679:11:0;;;;;;;23668:22;:35;;;;-1:-1:-1;23695:8:0;;-1:-1:-1;;;23695:8:0;;;;23694:9;23668:35;:71;;;;-1:-1:-1;;;;;;23708:31:0;;;;;;:25;:31;;;;;;;;23707:32;23668:71;:101;;;;-1:-1:-1;;;;;;23744:25:0;;;;;;:19;:25;;;;;;;;23743:26;23668:101;:129;;;;-1:-1:-1;;;;;;23774:23:0;;;;;;:19;:23;;;;;;;;23773:24;23668:129;23665:232;;;23814:8;:15;;-1:-1:-1;;;;23814:15:0;-1:-1:-1;;;23814:15:0;;;23844:10;:8;:10::i;:::-;23869:8;:16;;-1:-1:-1;;;;23869:16:0;;;23665:232;-1:-1:-1;;;;;24027:25:0;;23909:12;24027:25;;;:19;:25;;;;;;23924:4;;24027:25;;;:52;;-1:-1:-1;;;;;;24056:23:0;;;;;;:19;:23;;;;;;;;24027:52;24024:99;;;-1:-1:-1;24106:5:0;24024:99;24143:12;24247:7;24244:1911;;;26310:18;;26295:12;:33;24310:106;;;;24365:8;24350:12;;:23;;;;:::i;:::-;24340:6;:33;;:75;;;;;24403:12;24377:18;;24398:1;24377:22;;;;:::i;:::-;:38;;24340:75;24309:143;;;;-1:-1:-1;;;;;;24421:31:0;;;;;;:25;:31;;;;;;;;24309:143;:177;;;;-1:-1:-1;;;;;;24457:29:0;;;;;;:25;:29;;;;;;;;24456:30;24309:177;:205;;;;-1:-1:-1;;;;;;24491:23:0;;;;;;:19;:23;;;;;;;;24490:24;24309:205;:225;;;;;24533:1;24518:12;;:16;24309:225;24306:1680;;;26310:18;;26295:12;:33;24572:90;;24641:1;24625:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;24572:90:0;-1:-1:-1;;;;;24686:15:0;;;;;;:11;:15;;;;;;;;24682:214;;-1:-1:-1;;;;;24725:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;24725:22:0;24743:4;24725:22;;;;;;24770:10;:15;;24743:4;;24770:10;;:15;;24743:4;;24770:15;:::i;:::-;;;;-1:-1:-1;;24808:11:0;:20;;;;;;;-1:-1:-1;24808:20:0;;;;;;;;-1:-1:-1;;;;;;24808:20:0;-1:-1:-1;;;;;24808:20:0;;;;;;;;24856;;780:51:1;;;24856:20:0;;768:2:1;753:18;24856:20:0;;;;;;;24682:214;24947:3;24932:12;;24923:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;24916:34;;25013:12;;24995:15;;24988:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24966:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;25093:12:0;;25074:16;;25067:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;25044:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25163:12:0;;25151:9;;25144:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;25124:16;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;24306:1680:0;;-1:-1:-1;24306:1680:0;;-1:-1:-1;;;;;25240:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;25289:1;25273:13;;:17;25240:50;25236:750;;;25342:3;25326:13;;25317:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;25310:35;;25412:13;;25393:16;;25386:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;25364:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25494:13:0;;25474:17;;25467:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;25444:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25566:13:0;;25553:10;;25546:17;;:4;:17;:::i;25236:750::-;-1:-1:-1;;;;;25642:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;25692:1;25677:12;;:16;25642:51;25639:347;;;25742:3;25727:12;;25718:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;25711:34;;25808:12;;25790:15;;25783:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;25761:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;25888:12:0;;25869:16;;25862:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;25839:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25958:12:0;;25946:9;;25939:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;25919:16;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;25639:347:0;26017:8;;26014:93;;26049:42;26065:4;26079;26086;26049:15;:42::i;:::-;26129:14;26139:4;26129:14;;:::i;:::-;;;24244:1911;26167:33;26183:4;26189:2;26193:6;26167:15;:33::i;:::-;20259:5949;;;;20180:6028;;;:::o;27667:1476::-;27708:23;27734:24;27752:4;27734:9;:24::i;:::-;27708:50;;27769:25;27840:16;;27818:19;;27797:18;;:40;;;;:::i;:::-;:59;;;;:::i;:::-;27769:87;-1:-1:-1;27880:20:0;;;:46;;-1:-1:-1;27904:22:0;;27880:46;27877:60;;;27929:7;;27667:1476::o;27877:60::-;27970:18;;:23;;27991:2;27970:23;:::i;:::-;27952:15;:41;27949:113;;;28027:18;;:23;;28048:2;28027:23;:::i;:::-;28009:41;;27949:113;28074:12;28156:23;28241:1;28221:17;28200:18;;28182:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;28156:86;-1:-1:-1;28263:51:0;28280:33;28156:86;28280:15;:33;:::i;:::-;28263:16;:51::i;:::-;28522:18;;28357:21;;;;28336:18;;28522:20;;28541:1;;28522:20;:::i;:::-;28501:42;;:17;:42;:::i;:::-;28478:19;;28465:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;28438:106;;28555:21;28652:1;28633:18;;:20;;;;:::i;:::-;28612:42;;:17;:42;:::i;:::-;28592:16;;28579:29;;:10;:29;:::i;:::-;:76;;;;:::i;:::-;28555:100;-1:-1:-1;28687:32:0;28555:100;28687:16;:32;:::i;:::-;28668:51;;;;:::i;:::-;28765:1;28744:18;:22;;;28777:19;:23;;;28811:16;:20;28668:51;-1:-1:-1;28855:19:0;;;;;:42;;;28896:1;28878:15;:19;28855:42;28852:119;;;28913:46;28926:15;28943;28913:12;:46::i;:::-;29005:10;;28996:51;;-1:-1:-1;;;;;29005:10:0;;;;29029:13;;28996:51;;;;29029:13;29005:10;28996:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29079:16:0;;29071:64;;28983;;-1:-1:-1;;;;;;29079:16:0;;29109:21;;29071:64;;;;29109:21;29079:16;29071:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27667:1476:0:o;18959:236::-;-1:-1:-1;;;;;19042:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;19042:39:0;;;;;;;19092;19042:31;:39;17545:207;-1:-1:-1;;;;;17633:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;17633:52:0;;;;;;;;;;17701:43;;29046:51:1;;;29113:18;;;29106:50;17701:43:0;;29019:18:1;17701:43:0;;;;;;;17545:207;;:::o;26344:573::-;26496:16;;;26510:1;26496:16;;;;;;;;26472:21;;26496:16;;;;;;;;;;-1:-1:-1;26496:16:0;26472:40;;26541:4;26523;26528:1;26523:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26523:23:0;;;:7;;;;;;;;;;:23;;;;26567:9;;:16;;;-1:-1:-1;;;26567:16:0;;;;:9;;;;;:14;;:16;;;;;26523:7;;26567:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26557:4;26562:1;26557:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26557:26:0;;;:7;;;;;;;;;:26;26628:9;;26596:56;;26613:4;;26628:9;26640:11;26596:8;:56::i;:::-;26691:9;;:218;;-1:-1:-1;;;26691:218:0;;-1:-1:-1;;;;;26691:9:0;;;;:60;;:218;;26766:11;;26691:9;;26836:4;;26863;;26883:15;;26691:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27146:509;27326:9;;27294:56;;27311:4;;-1:-1:-1;;;;;27326:9:0;27338:11;27294:8;:56::i;:::-;27393:9;;:254;;-1:-1:-1;;;27393:254:0;;-1:-1:-1;;;;;27393:9:0;;;;:25;;27426:9;;27393:254;;27459:4;;27479:11;;27393:9;;;;27599:6;;27621:15;;27393:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27146:509;;:::o;14:597: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;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;842:131::-;-1:-1:-1;;;;;917:31:1;;907:42;;897:70;;963:1;960;953:12;897:70;842:131;:::o;978:315::-;1046:6;1054;1107:2;1095:9;1086:7;1082:23;1078:32;1075:52;;;1123:1;1120;1113:12;1075:52;1162:9;1149:23;1181:31;1206:5;1181:31;:::i;:::-;1231:5;1283:2;1268:18;;;;1255:32;;-1:-1:-1;;;978:315:1:o;1490:247::-;1549:6;1602:2;1590:9;1581:7;1577:23;1573:32;1570:52;;;1618:1;1615;1608:12;1570:52;1657:9;1644:23;1676:31;1701:5;1676:31;:::i;:::-;1726:5;1490:247;-1:-1:-1;;;1490:247:1:o;1924:127::-;1985:10;1980:3;1976:20;1973:1;1966:31;2016:4;2013:1;2006:15;2040:4;2037:1;2030:15;2056:275;2127:2;2121:9;2192:2;2173:13;;-1:-1:-1;;2169:27:1;2157:40;;2227:18;2212:34;;2248:22;;;2209:62;2206:88;;;2274:18;;:::i;:::-;2310:2;2303:22;2056:275;;-1:-1:-1;2056:275:1:o;2336:183::-;2396:4;2429:18;2421:6;2418:30;2415:56;;;2451:18;;:::i;:::-;-1:-1:-1;2496:1:1;2492:14;2508:4;2488:25;;2336:183::o;2524:737::-;2578:5;2631:3;2624:4;2616:6;2612:17;2608:27;2598:55;;2649:1;2646;2639:12;2598:55;2685:6;2672:20;2711:4;2735:60;2751:43;2791:2;2751:43;:::i;:::-;2735:60;:::i;:::-;2829:15;;;2915:1;2911:10;;;;2899:23;;2895:32;;;2860:12;;;;2939:15;;;2936:35;;;2967:1;2964;2957:12;2936:35;3003:2;2995:6;2991:15;3015:217;3031:6;3026:3;3023:15;3015:217;;;3111:3;3098:17;3128:31;3153:5;3128:31;:::i;:::-;3172:18;;3210:12;;;;3048;;3015:217;;;-1:-1:-1;3250:5:1;2524:737;-1:-1:-1;;;;;;2524:737:1:o;3266:662::-;3320:5;3373:3;3366:4;3358:6;3354:17;3350:27;3340:55;;3391:1;3388;3381:12;3340:55;3427:6;3414:20;3453:4;3477:60;3493:43;3533:2;3493:43;:::i;3477:60::-;3571:15;;;3657:1;3653:10;;;;3641:23;;3637:32;;;3602:12;;;;3681:15;;;3678:35;;;3709:1;3706;3699:12;3678:35;3745:2;3737:6;3733:15;3757:142;3773:6;3768:3;3765:15;3757:142;;;3839:17;;3827:30;;3877:12;;;;3790;;3757:142;;3933:595;4051:6;4059;4112:2;4100:9;4091:7;4087:23;4083:32;4080:52;;;4128:1;4125;4118:12;4080:52;4168:9;4155:23;4197:18;4238:2;4230:6;4227:14;4224:34;;;4254:1;4251;4244:12;4224:34;4277:61;4330:7;4321:6;4310:9;4306:22;4277:61;:::i;:::-;4267:71;;4391:2;4380:9;4376:18;4363:32;4347:48;;4420:2;4410:8;4407:16;4404:36;;;4436:1;4433;4426:12;4404:36;;4459:63;4514:7;4503:8;4492:9;4488:24;4459:63;:::i;:::-;4449:73;;;3933:595;;;;;:::o;4533:456::-;4610:6;4618;4626;4679:2;4667:9;4658:7;4654:23;4650:32;4647:52;;;4695:1;4692;4685:12;4647:52;4734:9;4721:23;4753:31;4778:5;4753:31;:::i;:::-;4803:5;-1:-1:-1;4860:2:1;4845:18;;4832:32;4873:33;4832:32;4873:33;:::i;:::-;4533:456;;4925:7;;-1:-1:-1;;;4979:2:1;4964:18;;;;4951:32;;4533:456::o;4994:180::-;5053:6;5106:2;5094:9;5085:7;5081:23;5077:32;5074:52;;;5122:1;5119;5112:12;5074:52;-1:-1:-1;5145:23:1;;4994:180;-1:-1:-1;4994:180:1:o;5576:118::-;5662:5;5655:13;5648:21;5641:5;5638:32;5628:60;;5684:1;5681;5674:12;5699:382;5764:6;5772;5825:2;5813:9;5804:7;5800:23;5796:32;5793:52;;;5841:1;5838;5831:12;5793:52;5880:9;5867:23;5899:31;5924:5;5899:31;:::i;:::-;5949:5;-1:-1:-1;6006:2:1;5991:18;;5978:32;6019:30;5978:32;6019:30;:::i;:::-;6068:7;6058:17;;;5699:382;;;;;:::o;6086:316::-;6163:6;6171;6179;6232:2;6220:9;6211:7;6207:23;6203:32;6200:52;;;6248:1;6245;6238:12;6200:52;-1:-1:-1;;6271:23:1;;;6341:2;6326:18;;6313:32;;-1:-1:-1;6392:2:1;6377:18;;;6364:32;;6086:316;-1:-1:-1;6086:316:1:o;6407:388::-;6475:6;6483;6536:2;6524:9;6515:7;6511:23;6507:32;6504:52;;;6552:1;6549;6542:12;6504:52;6591:9;6578:23;6610:31;6635:5;6610:31;:::i;:::-;6660:5;-1:-1:-1;6717:2:1;6702:18;;6689:32;6730:33;6689:32;6730:33;:::i;6800:461::-;6853:3;6891:5;6885:12;6918:6;6913:3;6906:19;6944:4;6973:2;6968:3;6964:12;6957:19;;7010:2;7003:5;6999:14;7031:1;7041:195;7055:6;7052:1;7049:13;7041:195;;;7120:13;;-1:-1:-1;;;;;7116:39:1;7104:52;;7176:12;;;;7211:15;;;;7152:1;7070:9;7041:195;;;-1:-1:-1;7252:3:1;;6800:461;-1:-1:-1;;;;;6800:461:1:o;7266:261::-;7445:2;7434:9;7427:21;7408:4;7465:56;7517:2;7506:9;7502:18;7494:6;7465:56;:::i;7532:663::-;7659:6;7667;7675;7728:2;7716:9;7707:7;7703:23;7699:32;7696:52;;;7744:1;7741;7734:12;7696:52;7784:9;7771:23;7813:18;7854:2;7846:6;7843:14;7840:34;;;7870:1;7867;7860:12;7840:34;7893:61;7946:7;7937:6;7926:9;7922:22;7893:61;:::i;:::-;7883:71;;8007:2;7996:9;7992:18;7979:32;7963:48;;8036:2;8026:8;8023:16;8020:36;;;8052:1;8049;8042:12;8020:36;;8075:63;8130:7;8119:8;8108:9;8104:24;8075:63;:::i;:::-;8065:73;;;8185:2;8174:9;8170:18;8157:32;8147:42;;7532:663;;;;;:::o;8200:380::-;8279:1;8275:12;;;;8322;;;8343:61;;8397:4;8389:6;8385:17;8375:27;;8343:61;8450:2;8442:6;8439:14;8419:18;8416:38;8413:161;;8496:10;8491:3;8487:20;8484:1;8477:31;8531:4;8528:1;8521:15;8559:4;8556:1;8549:15;8413:161;;8200:380;;;:::o;8585:356::-;8787:2;8769:21;;;8806:18;;;8799:30;8865:34;8860:2;8845:18;;8838:62;8932:2;8917:18;;8585:356::o;9715:418::-;9917:2;9899:21;;;9956:2;9936:18;;;9929:30;9995:34;9990:2;9975:18;;9968:62;-1:-1:-1;;;10061:2:1;10046:18;;10039:52;10123:3;10108:19;;9715:418::o;10138:127::-;10199:10;10194:3;10190:20;10187:1;10180:31;10230:4;10227:1;10220:15;10254:4;10251:1;10244:15;10270:127;10331:10;10326:3;10322:20;10319:1;10312:31;10362:4;10359:1;10352:15;10386:4;10383:1;10376:15;10402:135;10441:3;10462:17;;;10459:43;;10482:18;;:::i;:::-;-1:-1:-1;10529:1:1;10518:13;;10402:135::o;11299:168::-;11339:7;11405:1;11401;11397:6;11393:14;11390:1;11387:21;11382:1;11375:9;11368:17;11364:45;11361:71;;;11412:18;;:::i;:::-;-1:-1:-1;11452:9:1;;11299:168::o;11472:217::-;11512:1;11538;11528:132;;11582:10;11577:3;11573:20;11570:1;11563:31;11617:4;11614:1;11607:15;11645:4;11642:1;11635:15;11528:132;-1:-1:-1;11674:9:1;;11472:217::o;12104:128::-;12144:3;12175:1;12171:6;12168:1;12165:13;12162:39;;;12181:18;;:::i;:::-;-1:-1:-1;12217:9:1;;12104:128::o;12670:251::-;12740:6;12793:2;12781:9;12772:7;12768:23;12764:32;12761:52;;;12809:1;12806;12799:12;12761:52;12841:9;12835:16;12860:31;12885:5;12860:31;:::i;12926:332::-;13133:6;13122:9;13115:25;13176:2;13171;13160:9;13156:18;13149:30;13096:4;13196:56;13248:2;13237:9;13233:18;13225:6;13196:56;:::i;:::-;13188:64;12926:332;-1:-1:-1;;;;12926:332:1:o;13263:881::-;13358:6;13389:2;13432;13420:9;13411:7;13407:23;13403:32;13400:52;;;13448:1;13445;13438:12;13400:52;13481:9;13475:16;13514:18;13506:6;13503:30;13500:50;;;13546:1;13543;13536:12;13500:50;13569:22;;13622:4;13614:13;;13610:27;-1:-1:-1;13600:55:1;;13651:1;13648;13641:12;13600:55;13680:2;13674:9;13703:60;13719:43;13759:2;13719:43;:::i;13703:60::-;13797:15;;;13879:1;13875:10;;;;13867:19;;13863:28;;;13828:12;;;;13903:19;;;13900:39;;;13935:1;13932;13925:12;13900:39;13959:11;;;;13979:135;13995:6;13990:3;13987:15;13979:135;;;14061:10;;14049:23;;14012:12;;;;14092;;;;13979:135;;;14133:5;13263:881;-1:-1:-1;;;;;;;13263:881:1:o;15691:184::-;15761:6;15814:2;15802:9;15793:7;15789:23;15785:32;15782:52;;;15830:1;15827;15820:12;15782:52;-1:-1:-1;15853:16:1;;15691:184;-1:-1:-1;15691:184:1:o;16159:245::-;16226:6;16279:2;16267:9;16258:7;16254:23;16250:32;16247:52;;;16295:1;16292;16285:12;16247:52;16327:9;16321:16;16346:28;16368:5;16346:28;:::i;16835:407::-;17037:2;17019:21;;;17076:2;17056:18;;;17049:30;17115:34;17110:2;17095:18;;17088:62;-1:-1:-1;;;17181:2:1;17166:18;;17159:41;17232:3;17217:19;;16835:407::o;17247:403::-;17449:2;17431:21;;;17488:2;17468:18;;;17461:30;17527:34;17522:2;17507:18;;17500:62;-1:-1:-1;;;17593:2:1;17578:18;;17571:37;17640:3;17625:19;;17247:403::o;17964:399::-;18166:2;18148:21;;;18205:2;18185:18;;;18178:30;18244:34;18239:2;18224:18;;18217:62;-1:-1:-1;;;18310:2:1;18295:18;;18288:33;18353:3;18338:19;;17964:399::o;18368:402::-;18570:2;18552:21;;;18609:2;18589:18;;;18582:30;18648:34;18643:2;18628:18;;18621:62;-1:-1:-1;;;18714:2:1;18699:18;;18692:36;18760:3;18745:19;;18368:402::o;18775:607::-;-1:-1:-1;;;;;19134:15:1;;;19116:34;;19181:2;19166:18;;19159:34;;;;19224:2;19209:18;;19202:34;;;;19267:2;19252:18;;19245:34;;;;19316:15;;;19310:3;19295:19;;19288:44;19096:3;19348:19;;19341:35;;;;19065:3;19050:19;;18775:607::o;19387:306::-;19475:6;19483;19491;19544:2;19532:9;19523:7;19519:23;19515:32;19512:52;;;19560:1;19557;19550:12;19512:52;19589:9;19583:16;19573:26;;19639:2;19628:9;19624:18;19618:25;19608:35;;19683:2;19672:9;19668:18;19662:25;19652:35;;19387:306;;;;;:::o;23141:401::-;23343:2;23325:21;;;23382:2;23362:18;;;23355:30;23421:34;23416:2;23401:18;;23394:62;-1:-1:-1;;;23487:2:1;23472:18;;23465:35;23532:3;23517:19;;23141:401::o;23547:399::-;23749:2;23731:21;;;23788:2;23768:18;;;23761:30;23827:34;23822:2;23807:18;;23800:62;-1:-1:-1;;;23893:2:1;23878:18;;23871:33;23936:3;23921:19;;23547:399::o;28748:125::-;28788:4;28816:1;28813;28810:8;28807:34;;;28821:18;;:::i;:::-;-1:-1:-1;28858:9:1;;28748:125::o;29167:582::-;29466:6;29455:9;29448:25;29509:6;29504:2;29493:9;29489:18;29482:34;29552:3;29547:2;29536:9;29532:18;29525:31;29429:4;29573:57;29625:3;29614:9;29610:19;29602:6;29573:57;:::i;:::-;-1:-1:-1;;;;;29666:32:1;;;;29661:2;29646:18;;29639:60;-1:-1:-1;29730:3:1;29715:19;29708:35;29565:65;29167:582;-1:-1:-1;;;29167:582:1:o

Swarm Source

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