ETH Price: $2,623.27 (+0.86%)
Gas: 1 Gwei

Token

vitalikwifhat (vitalikwifhat)
 

Overview

Max Total Supply

420,690,000,000 vitalikwifhat

Holders

32

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
6,065,810,208.341348260768886246 vitalikwifhat

Value
$0.00
0xa301192365d90b8a49f9ecbe82f323c2acd85ece
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:
Contract

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-02-03
*/

// SPDX-License-Identifier: UNLICENSED

/*
https://t.me/vitalikwifhat_eth

https://twitter.com/davidgokhshtein/status/1753897148045840674

    
*/

pragma solidity 0.8.24;

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 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
        );
}

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

contract Contract is ERC20, Ownable {

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

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address operationsAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    mapping (address => bool) public bot;
    uint256 public botsCaught;

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

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

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

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

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;

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

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

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

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

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event BuyBackTriggered(uint256 amount);

    event OwnerForcedSwapBack(uint256 timestamp);
 
    event CaughtEarlyBuyer(address sniper);

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

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20(unicode"vitalikwifhat", unicode"vitalikwifhat") {

        address newOwner = msg.sender; // can leave alone if owner is deployer.

        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;

        // create pair
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 42069 * 1e7 * 1e18;

        maxBuyAmount = totalSupply * 2 / 100;
        maxSellAmount = totalSupply * 2 / 100;
        maxWalletAmount = totalSupply * 2 / 100;
        swapTokensAtAmount = totalSupply * 1 / 1000;

        buyOperationsFee = 25;
        buyLiquidityFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        sellOperationsFee = 25;
        sellLiquidityFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;

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

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

        operationsAddress = address(newOwner);

        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    // only enable if no plan to airdrop

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        emit EnabledTrading();
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }

    function manageBoughtEarly(address wallet, bool flag) external onlyOwner {
        bot[wallet] = flag;
    }

    function massManageBoughtEarly(address[] calldata wallets, bool flag) external onlyOwner {
        for(uint256 i = 0; i < wallets.length; i++){
            bot[wallets[i]] = flag;
        }
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 2 / 1000)/1e18, "Cannot set max buy amount lower than 0.2%");
        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 2 / 1000)/1e18, "Cannot set max sell amount lower than 0.2%");
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

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

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

    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 600, "Can only airdrop 600 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) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;
        require(buyTotalFees <= 30, "Must keep fees at 30% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;
        require(sellTotalFees <= 99, "Must keep fees at 99% 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.");
        }

        require(!bot[from] && !bot[to], "Bots cannot transfer tokens in or out except to owner or dead address.");

        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled){
                    if (to != address(dexRouter) && to != address(lpPair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number - 2 && _holderLastTransferTimestamp[to] < block.number - 2, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
    
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                        require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / 100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
            }

            if(fees > 0){
                super._transfer(from, address(this), fees);
            }

        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }
    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 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;

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

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

        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));

        ethForLiquidity -= ethForOperations;

        tokensForLiquidity = 0;
        tokensForOperations = 0;

        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        if(address(this).balance > 0){
            (success,) = address(operationsAddress).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");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

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

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

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= 0, "No tokens to swap");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","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":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":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","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":[{"internalType":"address","name":"","type":"address"}],"name":"bot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","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":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"manageBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"massManageBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","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"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040525f600d556010805462ffffff191660019081179091556012805460ff1916909117905534801562000033575f80fd5b50604080518082018252600d8082526c1d9a5d185b1a5addda599a185d609a1b6020808401829052845180860190955291845290830152906003620000798382620007cd565b506004620000888282620007cd565b5050505f6200009c620003d760201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f905f8051602062003af0833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa1580156200013f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000165919062000899565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001d7919062000899565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000222573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000248919062000899565b600a80546001600160a01b0319166001600160a01b0392909216918217905562000274906001620003db565b600a546200028d906001600160a01b031660016200043d565b6c054f529ca52576bc68920000006064620002aa826002620008dc565b620002b69190620008fc565b6006556064620002c8826002620008dc565b620002d49190620008fc565b6007556064620002e6826002620008dc565b620002f29190620008fc565b6008556103e862000305826001620008dc565b620003119190620008fc565b600b55601960148190555f60158190556200032c916200091c565b601355601960178190555f601881905562000347916200091c565b60165562000357836001620003db565b62000364306001620003db565b6200037361dead6001620003db565b62000380836001620004a7565b6200038d306001620004a7565b6200039c61dead6001620004a7565b600c80546001600160a01b0319166001600160a01b038516179055620003c3838262000553565b620003ce8362000635565b50505062000932565b3390565b6001600160a01b0382165f818152601c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382165f908152601d60205260409020805460ff19168215151790556200046c8282620003db565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b6005546001600160a01b03163314620004f55760405162461bcd60e51b815260206004820181905260248201525f8051602062003ad083398151915260448201526064015b60405180910390fd5b6001600160a01b0382165f818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005ab5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004ec565b8060025f828254620005be91906200091c565b90915550506001600160a01b0382165f9081526020819052604081208054839290620005ec9084906200091c565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200067f5760405162461bcd60e51b815260206004820181905260248201525f8051602062003ad08339815191526044820152606401620004ec565b6001600160a01b038116620006e65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620004ec565b6005546040516001600160a01b038084169216905f8051602062003af0833981519152905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200075857607f821691505b6020821081036200077757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620007c857805f5260205f20601f840160051c81016020851015620007a45750805b601f840160051c820191505b81811015620007c5575f8155600101620007b0565b50505b505050565b81516001600160401b03811115620007e957620007e96200072f565b6200080181620007fa845462000743565b846200077d565b602080601f83116001811462000837575f84156200081f5750858301515b5f19600386901b1c1916600185901b17855562000891565b5f85815260208120601f198616915b82811015620008675788860151825594840194600190910190840162000846565b50858210156200088557878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208284031215620008aa575f80fd5b81516001600160a01b0381168114620008c1575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417620008f657620008f6620008c8565b92915050565b5f826200091757634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620008f657620008f6620008c8565b61319080620009405f395ff3fe60806040526004361061035e575f3560e01c80637571336a116101bd578063c876d0b9116100f2578063e884f26011610092578063f2fde38b1161006d578063f2fde38b14610983578063f5648a4f146109a2578063f6374342146109b6578063fb002c97146109cb575f80fd5b8063e884f26014610945578063ee40166e14610959578063f11a24d31461096e575f80fd5b8063dc3f0d0f116100cd578063dc3f0d0f146108ae578063dd62ed3e146108cd578063e2f4560514610911578063e800dff714610926575f80fd5b8063c876d0b914610861578063d257b34f1461087a578063d85ba06314610899575f80fd5b8063a457c2d71161015d578063b62496f511610138578063b62496f5146107d7578063bbc0c74214610805578063c024666814610823578063c18bc19514610842575f80fd5b8063a457c2d714610784578063a9059cbb146107a3578063aa4bde28146107c2575f80fd5b80638a8c523c116101985780638a8c523c146107205780638da5cb5b1461073457806395d89b41146107515780639a7a23d614610765575f80fd5b80637571336a146106cd5780638366e79a146106ec57806388e765ff1461070b575f80fd5b8063452ed4f11161029357806366d602ae116102335780636ddd17131161020e5780636ddd17131461065257806370a0823114610671578063715018a6146106a5578063751039fc146106b9575f80fd5b806366d602ae146106135780636a486a8e146106285780636b0a894c1461063d575f80fd5b80634f77f6c01161026e5780634f77f6c0146105b657806351f205e4146105cb5780635a139dd4146105df57806366ca9b83146105f4575f80fd5b8063452ed4f11461055f578063499b83941461057e5780634a62bb651461059d575f80fd5b80631a8145bb116102fe5780632be32b61116102d95780632be32b61146104d8578063313ce567146104f7578063353f2345146105125780633950935114610540575f80fd5b80631a8145bb146104855780632307b4411461049a57806323b872dd146104b9575f80fd5b8063095ea7b311610339578063095ea7b3146103eb57806310d5de531461041a578063130a2c3c1461044857806318160ddd14610467575f80fd5b806302dbd8f81461036957806306fdde031461038a5780630758d924146103b4575f80fd5b3661036557005b5f80fd5b348015610374575f80fd5b50610388610383366004612b55565b6109e0565b005b348015610395575f80fd5b5061039e610a80565b6040516103ab9190612b75565b60405180910390f35b3480156103bf575f80fd5b506009546103d3906001600160a01b031681565b6040516001600160a01b0390911681526020016103ab565b3480156103f6575f80fd5b5061040a610405366004612bd8565b610b10565b60405190151581526020016103ab565b348015610425575f80fd5b5061040a610434366004612c02565b601c6020525f908152604090205460ff1681565b348015610453575f80fd5b50610388610462366004612c31565b610b26565b348015610472575f80fd5b506002545b6040519081526020016103ab565b348015610490575f80fd5b50610477601a5481565b3480156104a5575f80fd5b506103886104b4366004612d84565b610bba565b3480156104c4575f80fd5b5061040a6104d3366004612e40565b610d05565b3480156104e3575f80fd5b506103886104f2366004612e7e565b610dad565b348015610502575f80fd5b50604051601281526020016103ab565b34801561051d575f80fd5b5061040a61052c366004612c02565b600e6020525f908152604090205460ff1681565b34801561054b575f80fd5b5061040a61055a366004612bd8565b610eba565b34801561056a575f80fd5b50600a546103d3906001600160a01b031681565b348015610589575f80fd5b50610388610598366004612c02565b610ef5565b3480156105a8575f80fd5b5060105461040a9060ff1681565b3480156105c1575f80fd5b5061047760175481565b3480156105d6575f80fd5b50610388610fa6565b3480156105ea575f80fd5b5061047760145481565b3480156105ff575f80fd5b5061038861060e366004612b55565b611035565b34801561061e575f80fd5b5061047760075481565b348015610633575f80fd5b5061047760165481565b348015610648575f80fd5b50610477600f5481565b34801561065d575f80fd5b5060105461040a9062010000900460ff1681565b34801561067c575f80fd5b5061047761068b366004612c02565b6001600160a01b03165f9081526020819052604090205490565b3480156106b0575f80fd5b506103886110c8565b3480156106c4575f80fd5b5061038861113b565b3480156106d8575f80fd5b506103886106e7366004612e95565b6111a5565b3480156106f7575f80fd5b5061040a610706366004612ecc565b61126c565b348015610716575f80fd5b5061047760065481565b34801561072b575f80fd5b50610388611416565b34801561073f575f80fd5b506005546001600160a01b03166103d3565b34801561075c575f80fd5b5061039e6114d7565b348015610770575f80fd5b5061038861077f366004612e95565b6114e6565b34801561078f575f80fd5b5061040a61079e366004612bd8565b6115d9565b3480156107ae575f80fd5b5061040a6107bd366004612bd8565b611671565b3480156107cd575f80fd5b5061047760085481565b3480156107e2575f80fd5b5061040a6107f1366004612c02565b601d6020525f908152604090205460ff1681565b348015610810575f80fd5b5060105461040a90610100900460ff1681565b34801561082e575f80fd5b5061038861083d366004612e95565b61167d565b34801561084d575f80fd5b5061038861085c366004612e7e565b611705565b34801561086c575f80fd5b5060125461040a9060ff1681565b348015610885575f80fd5b50610388610894366004612e7e565b61180e565b3480156108a4575f80fd5b5061047760135481565b3480156108b9575f80fd5b506103886108c8366004612e7e565b611959565b3480156108d8575f80fd5b506104776108e7366004612ecc565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561091c575f80fd5b50610477600b5481565b348015610931575f80fd5b50610388610940366004612e95565b611a60565b348015610950575f80fd5b50610388611ab4565b348015610964575f80fd5b50610477600d5481565b348015610979575f80fd5b5061047760155481565b34801561098e575f80fd5b5061038861099d366004612c02565b611aea565b3480156109ad575f80fd5b50610388611bd4565b3480156109c1575f80fd5b5061047760185481565b3480156109d6575f80fd5b5061047760195481565b6005546001600160a01b03163314610a135760405162461bcd60e51b8152600401610a0a90612ef8565b60405180910390fd5b60178290556018819055610a278183612f41565b601681905560631015610a7c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420393925206f72206c6573730000006044820152606401610a0a565b5050565b606060038054610a8f90612f54565b80601f0160208091040260200160405190810160405280929190818152602001828054610abb90612f54565b8015610b065780601f10610add57610100808354040283529160200191610b06565b820191905f5260205f20905b815481529060010190602001808311610ae957829003601f168201915b5050505050905090565b5f610b1c338484611c3d565b5060015b92915050565b6005546001600160a01b03163314610b505760405162461bcd60e51b8152600401610a0a90612ef8565b5f5b82811015610bb45781600e5f868685818110610b7057610b70612f8c565b9050602002016020810190610b859190612c02565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610b52565b50505050565b6005546001600160a01b03163314610be45760405162461bcd60e51b8152600401610a0a90612ef8565b8051825114610c355760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a0a565b610258825110610ca65760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610a0a565b5f5b8251811015610d00575f838281518110610cc457610cc4612f8c565b602002602001015190505f838381518110610ce157610ce1612f8c565b60200260200101519050610cf6338383611d60565b5050600101610ca8565b505050565b5f610d11848484611eb3565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610d955760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a0a565b610da28533858403611c3d565b506001949350505050565b6005546001600160a01b03163314610dd75760405162461bcd60e51b8152600401610a0a90612ef8565b670de0b6b3a76400006103e8610dec60025490565b610df7906002612fa0565b610e019190612fb7565b610e0b9190612fb7565b811015610e6c5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610a0a565b610e7e81670de0b6b3a7640000612fa0565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610b1c918590610ef0908690612f41565b611c3d565b6005546001600160a01b03163314610f1f5760405162461bcd60e51b8152600401610a0a90612ef8565b6001600160a01b038116610f845760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610a0a565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610fd05760405162461bcd60e51b8152600401610a0a90612ef8565b305f908152602052600a805460ff60a01b1916600160a01b179055610ff3612763565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461105f5760405162461bcd60e51b8152600401610a0a90612ef8565b601482905560158190556110738183612f41565b6013819055601e1015610a7c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610a0a565b6005546001600160a01b031633146110f25760405162461bcd60e51b8152600401610a0a90612ef8565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111655760405162461bcd60e51b8152600401610a0a90612ef8565b6010805460ff199081169091556012805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a1565b6005546001600160a01b031633146111cf5760405162461bcd60e51b8152600401610a0a90612ef8565b8061124257600a546001600160a01b03908116908316036112425760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610a0a565b6001600160a01b03919091165f908152601c60205260409020805460ff1916911515919091179055565b6005545f906001600160a01b031633146112985760405162461bcd60e51b8152600401610a0a90612ef8565b6001600160a01b0383166112ee5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610a0a565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611332573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113569190612fd6565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303815f875af11580156113a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ca9190612fed565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146114405760405162461bcd60e51b8152600401610a0a90612ef8565b601054610100900460ff16156114985760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610a0a565b6010805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb7905f90a1565b606060048054610a8f90612f54565b6005546001600160a01b031633146115105760405162461bcd60e51b8152600401610a0a90612ef8565b600a546001600160a01b03908116908316036115945760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a0a565b61159e82826128c7565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b335f9081526001602090815260408083206001600160a01b03861684529091528120548281101561165a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a0a565b6116673385858403611c3d565b5060019392505050565b5f610b1c338484611eb3565b6005546001600160a01b031633146116a75760405162461bcd60e51b8152600401610a0a90612ef8565b6001600160a01b0382165f818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461172f5760405162461bcd60e51b8152600401610a0a90612ef8565b670de0b6b3a76400006103e861174460025490565b61174f906003612fa0565b6117599190612fb7565b6117639190612fb7565b8110156117c75760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610a0a565b6117d981670de0b6b3a7640000612fa0565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610eaf565b6005546001600160a01b031633146118385760405162461bcd60e51b8152600401610a0a90612ef8565b620186a061184560025490565b611850906001612fa0565b61185a9190612fb7565b8110156118c75760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a0a565b6103e86118d360025490565b6118de906001612fa0565b6118e89190612fb7565b8111156119545760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610a0a565b600b55565b6005546001600160a01b031633146119835760405162461bcd60e51b8152600401610a0a90612ef8565b670de0b6b3a76400006103e861199860025490565b6119a3906002612fa0565b6119ad9190612fb7565b6119b79190612fb7565b811015611a195760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610a0a565b611a2b81670de0b6b3a7640000612fa0565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610eaf565b6005546001600160a01b03163314611a8a5760405162461bcd60e51b8152600401610a0a90612ef8565b6001600160a01b03919091165f908152600e60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611ade5760405162461bcd60e51b8152600401610a0a90612ef8565b6012805460ff19169055565b6005546001600160a01b03163314611b145760405162461bcd60e51b8152600401610a0a90612ef8565b6001600160a01b038116611b795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a0a565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611bfe5760405162461bcd60e51b8152600401610a0a90612ef8565b6040515f90339047908381818185875af1925050503d805f8114610bb4576040519150601f19603f3d011682016040523d82523d5f602084013e610bb4565b6001600160a01b038316611c9f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a0a565b6001600160a01b038216611d005760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a0a565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d865760405162461bcd60e51b8152600401610a0a90613008565b6001600160a01b038216611dac5760405162461bcd60e51b8152600401610a0a9061304d565b6001600160a01b0383165f9081526020819052604090205481811015611e235760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a0a565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290611e59908490612f41565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ea591815260200190565b60405180910390a350505050565b6001600160a01b038316611ed95760405162461bcd60e51b8152600401610a0a90613008565b6001600160a01b038216611eff5760405162461bcd60e51b8152600401610a0a9061304d565b5f8111611f4e5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610a0a565b601054610100900460ff16611fdf576001600160a01b0383165f908152601b602052604090205460ff1680611f9a57506001600160a01b0382165f908152601b602052604090205460ff165b611fdf5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a0a565b6001600160a01b0383165f908152600e602052604090205460ff1615801561201f57506001600160a01b0382165f908152600e602052604090205460ff16155b6120a05760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610a0a565b60105460ff16156124b0576005546001600160a01b038481169116148015906120d757506005546001600160a01b03838116911614155b80156120eb57506001600160a01b03821615155b801561210257506001600160a01b03821661dead14155b801561212657506001600160a01b0383165f908152601b602052604090205460ff16155b801561214a57506001600160a01b0382165f908152601b602052604090205460ff16155b156124b05760125460ff1615612260576009546001600160a01b038381169116148015906121865750600a546001600160a01b03838116911614155b1561226057612196600243613090565b325f908152601160205260409020541080156121d257506121b8600243613090565b6001600160a01b0383165f90815260116020526040902054105b61223c5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610a0a565b325f9081526011602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383165f908152601d602052604090205460ff16801561229f57506001600160a01b0382165f908152601c602052604090205460ff16155b1561237a576006548111156123075760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610a0a565b6008546001600160a01b0383165f9081526020819052604090205461232c9083612f41565b11156123755760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610a0a565b6124b0565b6001600160a01b0382165f908152601d602052604090205460ff1680156123b957506001600160a01b0383165f908152601c602052604090205460ff16155b15612423576007548111156123755760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610a0a565b6001600160a01b0382165f908152601c602052604090205460ff166124b0576008546001600160a01b0383165f908152602081905260409020546124679083612f41565b11156124b05760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610a0a565b305f90815260208190526040902054600b54811080159081906124db575060105462010000900460ff165b80156124f15750600a54600160a01b900460ff16155b801561251557506001600160a01b0385165f908152601d602052604090205460ff16155b801561253957506001600160a01b0385165f908152601b602052604090205460ff16155b801561255d57506001600160a01b0384165f908152601b602052604090205460ff16155b1561258b57600a805460ff60a01b1916600160a01b17905561257d612763565b600a805460ff60a01b191690555b6001600160a01b0385165f908152601b602052604090205460019060ff16806125cb57506001600160a01b0385165f908152601b602052604090205460ff165b156125d357505f5b5f811561274f576001600160a01b0386165f908152601d602052604090205460ff16801561260257505f601654115b15612688576064601654866126179190612fa0565b6126219190612fb7565b9050601654601854826126349190612fa0565b61263e9190612fb7565b601a5f82825461264e9190612f41565b90915550506016546017546126639083612fa0565b61266d9190612fb7565b60195f82825461267d9190612f41565b909155506127319050565b6001600160a01b0387165f908152601d602052604090205460ff1680156126b057505f601354115b15612731576064601354866126c59190612fa0565b6126cf9190612fb7565b9050601354601554826126e29190612fa0565b6126ec9190612fb7565b601a5f8282546126fc9190612f41565b90915550506013546014546127119083612fa0565b61271b9190612fb7565b60195f82825461272b9190612f41565b90915550505b801561274257612742873083611d60565b61274c8186613090565b94505b61275a878787611d60565b50505050505050565b305f9081526020819052604081205490505f601954601a546127859190612f41565b9050811580612792575080155b1561279b575050565b600b546127a990603c612fa0565b8211156127c157600b546127be90603c612fa0565b91505b5f80600283601a54866127d49190612fa0565b6127de9190612fb7565b6127e89190612fb7565b90506127fc6127f78286613090565b6128f4565b601a54479081905f9061281190600290612fb7565b61281b9087613090565b6019546128289085612fa0565b6128329190612fb7565b905061283e8183613090565b5f601a8190556019559150831580159061285757505f82115b15612866576128668483612a44565b471561275a57600c546040516001600160a01b039091169047905f81818185875af1925050503d805f81146128b6576040519150601f19603f3d011682016040523d82523d5f602084013e6128bb565b606091505b50505050505050505050565b6001600160a01b0382165f908152601d60205260409020805460ff191682151517905561159e8282612af3565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061292757612927612f8c565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561297e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129a291906130a3565b816001815181106129b5576129b5612f8c565b6001600160a01b0392831660209182029290920101526009546129db9130911684611c3d565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612a139085905f908690309042906004016130be565b5f604051808303815f87803b158015612a2a575f80fd5b505af1158015612a3c573d5f803e3d5ffd5b505050505050565b600954612a5c9030906001600160a01b031684611c3d565b60095460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612ac7573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612aec919061312f565b5050505050565b6001600160a01b0382165f818152601c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b5f8060408385031215612b66575f80fd5b50508035926020909101359150565b5f602080835283518060208501525f5b81811015612ba157858101830151858201604001528201612b85565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612bd5575f80fd5b50565b5f8060408385031215612be9575f80fd5b8235612bf481612bc1565b946020939093013593505050565b5f60208284031215612c12575f80fd5b8135612c1d81612bc1565b9392505050565b8015158114612bd5575f80fd5b5f805f60408486031215612c43575f80fd5b833567ffffffffffffffff80821115612c5a575f80fd5b818601915086601f830112612c6d575f80fd5b813581811115612c7b575f80fd5b8760208260051b8501011115612c8f575f80fd5b60209283019550935050840135612ca581612c24565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612ced57612ced612cb0565b604052919050565b5f67ffffffffffffffff821115612d0e57612d0e612cb0565b5060051b60200190565b5f82601f830112612d27575f80fd5b81356020612d3c612d3783612cf5565b612cc4565b8083825260208201915060208460051b870101935086841115612d5d575f80fd5b602086015b84811015612d795780358352918301918301612d62565b509695505050505050565b5f8060408385031215612d95575f80fd5b823567ffffffffffffffff80821115612dac575f80fd5b818501915085601f830112612dbf575f80fd5b81356020612dcf612d3783612cf5565b82815260059290921b84018101918181019089841115612ded575f80fd5b948201945b83861015612e14578535612e0581612bc1565b82529482019490820190612df2565b96505086013592505080821115612e29575f80fd5b50612e3685828601612d18565b9150509250929050565b5f805f60608486031215612e52575f80fd5b8335612e5d81612bc1565b92506020840135612e6d81612bc1565b929592945050506040919091013590565b5f60208284031215612e8e575f80fd5b5035919050565b5f8060408385031215612ea6575f80fd5b8235612eb181612bc1565b91506020830135612ec181612c24565b809150509250929050565b5f8060408385031215612edd575f80fd5b8235612ee881612bc1565b91506020830135612ec181612bc1565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b2057610b20612f2d565b600181811c90821680612f6857607f821691505b602082108103612f8657634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b8082028115828204841417610b2057610b20612f2d565b5f82612fd157634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612fe6575f80fd5b5051919050565b5f60208284031215612ffd575f80fd5b8151612c1d81612c24565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b2057610b20612f2d565b5f602082840312156130b3575f80fd5b8151612c1d81612bc1565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b8181101561310e5784516001600160a01b0316835293830193918301916001016130e9565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215613141575f80fd5b835192506020840151915060408401519050925092509256fea26469706673582212205f887167942274121102f8f4a3e30c15875c35e1c3c0ae052bb58157cdab505864736f6c634300081800334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x60806040526004361061035e575f3560e01c80637571336a116101bd578063c876d0b9116100f2578063e884f26011610092578063f2fde38b1161006d578063f2fde38b14610983578063f5648a4f146109a2578063f6374342146109b6578063fb002c97146109cb575f80fd5b8063e884f26014610945578063ee40166e14610959578063f11a24d31461096e575f80fd5b8063dc3f0d0f116100cd578063dc3f0d0f146108ae578063dd62ed3e146108cd578063e2f4560514610911578063e800dff714610926575f80fd5b8063c876d0b914610861578063d257b34f1461087a578063d85ba06314610899575f80fd5b8063a457c2d71161015d578063b62496f511610138578063b62496f5146107d7578063bbc0c74214610805578063c024666814610823578063c18bc19514610842575f80fd5b8063a457c2d714610784578063a9059cbb146107a3578063aa4bde28146107c2575f80fd5b80638a8c523c116101985780638a8c523c146107205780638da5cb5b1461073457806395d89b41146107515780639a7a23d614610765575f80fd5b80637571336a146106cd5780638366e79a146106ec57806388e765ff1461070b575f80fd5b8063452ed4f11161029357806366d602ae116102335780636ddd17131161020e5780636ddd17131461065257806370a0823114610671578063715018a6146106a5578063751039fc146106b9575f80fd5b806366d602ae146106135780636a486a8e146106285780636b0a894c1461063d575f80fd5b80634f77f6c01161026e5780634f77f6c0146105b657806351f205e4146105cb5780635a139dd4146105df57806366ca9b83146105f4575f80fd5b8063452ed4f11461055f578063499b83941461057e5780634a62bb651461059d575f80fd5b80631a8145bb116102fe5780632be32b61116102d95780632be32b61146104d8578063313ce567146104f7578063353f2345146105125780633950935114610540575f80fd5b80631a8145bb146104855780632307b4411461049a57806323b872dd146104b9575f80fd5b8063095ea7b311610339578063095ea7b3146103eb57806310d5de531461041a578063130a2c3c1461044857806318160ddd14610467575f80fd5b806302dbd8f81461036957806306fdde031461038a5780630758d924146103b4575f80fd5b3661036557005b5f80fd5b348015610374575f80fd5b50610388610383366004612b55565b6109e0565b005b348015610395575f80fd5b5061039e610a80565b6040516103ab9190612b75565b60405180910390f35b3480156103bf575f80fd5b506009546103d3906001600160a01b031681565b6040516001600160a01b0390911681526020016103ab565b3480156103f6575f80fd5b5061040a610405366004612bd8565b610b10565b60405190151581526020016103ab565b348015610425575f80fd5b5061040a610434366004612c02565b601c6020525f908152604090205460ff1681565b348015610453575f80fd5b50610388610462366004612c31565b610b26565b348015610472575f80fd5b506002545b6040519081526020016103ab565b348015610490575f80fd5b50610477601a5481565b3480156104a5575f80fd5b506103886104b4366004612d84565b610bba565b3480156104c4575f80fd5b5061040a6104d3366004612e40565b610d05565b3480156104e3575f80fd5b506103886104f2366004612e7e565b610dad565b348015610502575f80fd5b50604051601281526020016103ab565b34801561051d575f80fd5b5061040a61052c366004612c02565b600e6020525f908152604090205460ff1681565b34801561054b575f80fd5b5061040a61055a366004612bd8565b610eba565b34801561056a575f80fd5b50600a546103d3906001600160a01b031681565b348015610589575f80fd5b50610388610598366004612c02565b610ef5565b3480156105a8575f80fd5b5060105461040a9060ff1681565b3480156105c1575f80fd5b5061047760175481565b3480156105d6575f80fd5b50610388610fa6565b3480156105ea575f80fd5b5061047760145481565b3480156105ff575f80fd5b5061038861060e366004612b55565b611035565b34801561061e575f80fd5b5061047760075481565b348015610633575f80fd5b5061047760165481565b348015610648575f80fd5b50610477600f5481565b34801561065d575f80fd5b5060105461040a9062010000900460ff1681565b34801561067c575f80fd5b5061047761068b366004612c02565b6001600160a01b03165f9081526020819052604090205490565b3480156106b0575f80fd5b506103886110c8565b3480156106c4575f80fd5b5061038861113b565b3480156106d8575f80fd5b506103886106e7366004612e95565b6111a5565b3480156106f7575f80fd5b5061040a610706366004612ecc565b61126c565b348015610716575f80fd5b5061047760065481565b34801561072b575f80fd5b50610388611416565b34801561073f575f80fd5b506005546001600160a01b03166103d3565b34801561075c575f80fd5b5061039e6114d7565b348015610770575f80fd5b5061038861077f366004612e95565b6114e6565b34801561078f575f80fd5b5061040a61079e366004612bd8565b6115d9565b3480156107ae575f80fd5b5061040a6107bd366004612bd8565b611671565b3480156107cd575f80fd5b5061047760085481565b3480156107e2575f80fd5b5061040a6107f1366004612c02565b601d6020525f908152604090205460ff1681565b348015610810575f80fd5b5060105461040a90610100900460ff1681565b34801561082e575f80fd5b5061038861083d366004612e95565b61167d565b34801561084d575f80fd5b5061038861085c366004612e7e565b611705565b34801561086c575f80fd5b5060125461040a9060ff1681565b348015610885575f80fd5b50610388610894366004612e7e565b61180e565b3480156108a4575f80fd5b5061047760135481565b3480156108b9575f80fd5b506103886108c8366004612e7e565b611959565b3480156108d8575f80fd5b506104776108e7366004612ecc565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561091c575f80fd5b50610477600b5481565b348015610931575f80fd5b50610388610940366004612e95565b611a60565b348015610950575f80fd5b50610388611ab4565b348015610964575f80fd5b50610477600d5481565b348015610979575f80fd5b5061047760155481565b34801561098e575f80fd5b5061038861099d366004612c02565b611aea565b3480156109ad575f80fd5b50610388611bd4565b3480156109c1575f80fd5b5061047760185481565b3480156109d6575f80fd5b5061047760195481565b6005546001600160a01b03163314610a135760405162461bcd60e51b8152600401610a0a90612ef8565b60405180910390fd5b60178290556018819055610a278183612f41565b601681905560631015610a7c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420393925206f72206c6573730000006044820152606401610a0a565b5050565b606060038054610a8f90612f54565b80601f0160208091040260200160405190810160405280929190818152602001828054610abb90612f54565b8015610b065780601f10610add57610100808354040283529160200191610b06565b820191905f5260205f20905b815481529060010190602001808311610ae957829003601f168201915b5050505050905090565b5f610b1c338484611c3d565b5060015b92915050565b6005546001600160a01b03163314610b505760405162461bcd60e51b8152600401610a0a90612ef8565b5f5b82811015610bb45781600e5f868685818110610b7057610b70612f8c565b9050602002016020810190610b859190612c02565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610b52565b50505050565b6005546001600160a01b03163314610be45760405162461bcd60e51b8152600401610a0a90612ef8565b8051825114610c355760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a0a565b610258825110610ca65760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610a0a565b5f5b8251811015610d00575f838281518110610cc457610cc4612f8c565b602002602001015190505f838381518110610ce157610ce1612f8c565b60200260200101519050610cf6338383611d60565b5050600101610ca8565b505050565b5f610d11848484611eb3565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610d955760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a0a565b610da28533858403611c3d565b506001949350505050565b6005546001600160a01b03163314610dd75760405162461bcd60e51b8152600401610a0a90612ef8565b670de0b6b3a76400006103e8610dec60025490565b610df7906002612fa0565b610e019190612fb7565b610e0b9190612fb7565b811015610e6c5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610a0a565b610e7e81670de0b6b3a7640000612fa0565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610b1c918590610ef0908690612f41565b611c3d565b6005546001600160a01b03163314610f1f5760405162461bcd60e51b8152600401610a0a90612ef8565b6001600160a01b038116610f845760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610a0a565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610fd05760405162461bcd60e51b8152600401610a0a90612ef8565b305f908152602052600a805460ff60a01b1916600160a01b179055610ff3612763565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461105f5760405162461bcd60e51b8152600401610a0a90612ef8565b601482905560158190556110738183612f41565b6013819055601e1015610a7c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610a0a565b6005546001600160a01b031633146110f25760405162461bcd60e51b8152600401610a0a90612ef8565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111655760405162461bcd60e51b8152600401610a0a90612ef8565b6010805460ff199081169091556012805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a1565b6005546001600160a01b031633146111cf5760405162461bcd60e51b8152600401610a0a90612ef8565b8061124257600a546001600160a01b03908116908316036112425760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610a0a565b6001600160a01b03919091165f908152601c60205260409020805460ff1916911515919091179055565b6005545f906001600160a01b031633146112985760405162461bcd60e51b8152600401610a0a90612ef8565b6001600160a01b0383166112ee5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610a0a565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611332573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113569190612fd6565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303815f875af11580156113a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ca9190612fed565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146114405760405162461bcd60e51b8152600401610a0a90612ef8565b601054610100900460ff16156114985760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610a0a565b6010805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb7905f90a1565b606060048054610a8f90612f54565b6005546001600160a01b031633146115105760405162461bcd60e51b8152600401610a0a90612ef8565b600a546001600160a01b03908116908316036115945760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a0a565b61159e82826128c7565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b335f9081526001602090815260408083206001600160a01b03861684529091528120548281101561165a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a0a565b6116673385858403611c3d565b5060019392505050565b5f610b1c338484611eb3565b6005546001600160a01b031633146116a75760405162461bcd60e51b8152600401610a0a90612ef8565b6001600160a01b0382165f818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461172f5760405162461bcd60e51b8152600401610a0a90612ef8565b670de0b6b3a76400006103e861174460025490565b61174f906003612fa0565b6117599190612fb7565b6117639190612fb7565b8110156117c75760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610a0a565b6117d981670de0b6b3a7640000612fa0565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610eaf565b6005546001600160a01b031633146118385760405162461bcd60e51b8152600401610a0a90612ef8565b620186a061184560025490565b611850906001612fa0565b61185a9190612fb7565b8110156118c75760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a0a565b6103e86118d360025490565b6118de906001612fa0565b6118e89190612fb7565b8111156119545760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610a0a565b600b55565b6005546001600160a01b031633146119835760405162461bcd60e51b8152600401610a0a90612ef8565b670de0b6b3a76400006103e861199860025490565b6119a3906002612fa0565b6119ad9190612fb7565b6119b79190612fb7565b811015611a195760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610a0a565b611a2b81670de0b6b3a7640000612fa0565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610eaf565b6005546001600160a01b03163314611a8a5760405162461bcd60e51b8152600401610a0a90612ef8565b6001600160a01b03919091165f908152600e60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611ade5760405162461bcd60e51b8152600401610a0a90612ef8565b6012805460ff19169055565b6005546001600160a01b03163314611b145760405162461bcd60e51b8152600401610a0a90612ef8565b6001600160a01b038116611b795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a0a565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611bfe5760405162461bcd60e51b8152600401610a0a90612ef8565b6040515f90339047908381818185875af1925050503d805f8114610bb4576040519150601f19603f3d011682016040523d82523d5f602084013e610bb4565b6001600160a01b038316611c9f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a0a565b6001600160a01b038216611d005760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a0a565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d865760405162461bcd60e51b8152600401610a0a90613008565b6001600160a01b038216611dac5760405162461bcd60e51b8152600401610a0a9061304d565b6001600160a01b0383165f9081526020819052604090205481811015611e235760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a0a565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290611e59908490612f41565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ea591815260200190565b60405180910390a350505050565b6001600160a01b038316611ed95760405162461bcd60e51b8152600401610a0a90613008565b6001600160a01b038216611eff5760405162461bcd60e51b8152600401610a0a9061304d565b5f8111611f4e5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610a0a565b601054610100900460ff16611fdf576001600160a01b0383165f908152601b602052604090205460ff1680611f9a57506001600160a01b0382165f908152601b602052604090205460ff165b611fdf5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a0a565b6001600160a01b0383165f908152600e602052604090205460ff1615801561201f57506001600160a01b0382165f908152600e602052604090205460ff16155b6120a05760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610a0a565b60105460ff16156124b0576005546001600160a01b038481169116148015906120d757506005546001600160a01b03838116911614155b80156120eb57506001600160a01b03821615155b801561210257506001600160a01b03821661dead14155b801561212657506001600160a01b0383165f908152601b602052604090205460ff16155b801561214a57506001600160a01b0382165f908152601b602052604090205460ff16155b156124b05760125460ff1615612260576009546001600160a01b038381169116148015906121865750600a546001600160a01b03838116911614155b1561226057612196600243613090565b325f908152601160205260409020541080156121d257506121b8600243613090565b6001600160a01b0383165f90815260116020526040902054105b61223c5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610a0a565b325f9081526011602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383165f908152601d602052604090205460ff16801561229f57506001600160a01b0382165f908152601c602052604090205460ff16155b1561237a576006548111156123075760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610a0a565b6008546001600160a01b0383165f9081526020819052604090205461232c9083612f41565b11156123755760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610a0a565b6124b0565b6001600160a01b0382165f908152601d602052604090205460ff1680156123b957506001600160a01b0383165f908152601c602052604090205460ff16155b15612423576007548111156123755760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610a0a565b6001600160a01b0382165f908152601c602052604090205460ff166124b0576008546001600160a01b0383165f908152602081905260409020546124679083612f41565b11156124b05760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610a0a565b305f90815260208190526040902054600b54811080159081906124db575060105462010000900460ff165b80156124f15750600a54600160a01b900460ff16155b801561251557506001600160a01b0385165f908152601d602052604090205460ff16155b801561253957506001600160a01b0385165f908152601b602052604090205460ff16155b801561255d57506001600160a01b0384165f908152601b602052604090205460ff16155b1561258b57600a805460ff60a01b1916600160a01b17905561257d612763565b600a805460ff60a01b191690555b6001600160a01b0385165f908152601b602052604090205460019060ff16806125cb57506001600160a01b0385165f908152601b602052604090205460ff165b156125d357505f5b5f811561274f576001600160a01b0386165f908152601d602052604090205460ff16801561260257505f601654115b15612688576064601654866126179190612fa0565b6126219190612fb7565b9050601654601854826126349190612fa0565b61263e9190612fb7565b601a5f82825461264e9190612f41565b90915550506016546017546126639083612fa0565b61266d9190612fb7565b60195f82825461267d9190612f41565b909155506127319050565b6001600160a01b0387165f908152601d602052604090205460ff1680156126b057505f601354115b15612731576064601354866126c59190612fa0565b6126cf9190612fb7565b9050601354601554826126e29190612fa0565b6126ec9190612fb7565b601a5f8282546126fc9190612f41565b90915550506013546014546127119083612fa0565b61271b9190612fb7565b60195f82825461272b9190612f41565b90915550505b801561274257612742873083611d60565b61274c8186613090565b94505b61275a878787611d60565b50505050505050565b305f9081526020819052604081205490505f601954601a546127859190612f41565b9050811580612792575080155b1561279b575050565b600b546127a990603c612fa0565b8211156127c157600b546127be90603c612fa0565b91505b5f80600283601a54866127d49190612fa0565b6127de9190612fb7565b6127e89190612fb7565b90506127fc6127f78286613090565b6128f4565b601a54479081905f9061281190600290612fb7565b61281b9087613090565b6019546128289085612fa0565b6128329190612fb7565b905061283e8183613090565b5f601a8190556019559150831580159061285757505f82115b15612866576128668483612a44565b471561275a57600c546040516001600160a01b039091169047905f81818185875af1925050503d805f81146128b6576040519150601f19603f3d011682016040523d82523d5f602084013e6128bb565b606091505b50505050505050505050565b6001600160a01b0382165f908152601d60205260409020805460ff191682151517905561159e8282612af3565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061292757612927612f8c565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561297e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129a291906130a3565b816001815181106129b5576129b5612f8c565b6001600160a01b0392831660209182029290920101526009546129db9130911684611c3d565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612a139085905f908690309042906004016130be565b5f604051808303815f87803b158015612a2a575f80fd5b505af1158015612a3c573d5f803e3d5ffd5b505050505050565b600954612a5c9030906001600160a01b031684611c3d565b60095460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612ac7573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612aec919061312f565b5050505050565b6001600160a01b0382165f818152601c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b5f8060408385031215612b66575f80fd5b50508035926020909101359150565b5f602080835283518060208501525f5b81811015612ba157858101830151858201604001528201612b85565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612bd5575f80fd5b50565b5f8060408385031215612be9575f80fd5b8235612bf481612bc1565b946020939093013593505050565b5f60208284031215612c12575f80fd5b8135612c1d81612bc1565b9392505050565b8015158114612bd5575f80fd5b5f805f60408486031215612c43575f80fd5b833567ffffffffffffffff80821115612c5a575f80fd5b818601915086601f830112612c6d575f80fd5b813581811115612c7b575f80fd5b8760208260051b8501011115612c8f575f80fd5b60209283019550935050840135612ca581612c24565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612ced57612ced612cb0565b604052919050565b5f67ffffffffffffffff821115612d0e57612d0e612cb0565b5060051b60200190565b5f82601f830112612d27575f80fd5b81356020612d3c612d3783612cf5565b612cc4565b8083825260208201915060208460051b870101935086841115612d5d575f80fd5b602086015b84811015612d795780358352918301918301612d62565b509695505050505050565b5f8060408385031215612d95575f80fd5b823567ffffffffffffffff80821115612dac575f80fd5b818501915085601f830112612dbf575f80fd5b81356020612dcf612d3783612cf5565b82815260059290921b84018101918181019089841115612ded575f80fd5b948201945b83861015612e14578535612e0581612bc1565b82529482019490820190612df2565b96505086013592505080821115612e29575f80fd5b50612e3685828601612d18565b9150509250929050565b5f805f60608486031215612e52575f80fd5b8335612e5d81612bc1565b92506020840135612e6d81612bc1565b929592945050506040919091013590565b5f60208284031215612e8e575f80fd5b5035919050565b5f8060408385031215612ea6575f80fd5b8235612eb181612bc1565b91506020830135612ec181612c24565b809150509250929050565b5f8060408385031215612edd575f80fd5b8235612ee881612bc1565b91506020830135612ec181612bc1565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b2057610b20612f2d565b600181811c90821680612f6857607f821691505b602082108103612f8657634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b8082028115828204841417610b2057610b20612f2d565b5f82612fd157634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612fe6575f80fd5b5051919050565b5f60208284031215612ffd575f80fd5b8151612c1d81612c24565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b2057610b20612f2d565b5f602082840312156130b3575f80fd5b8151612c1d81612bc1565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b8181101561310e5784516001600160a01b0316835293830193918301916001016130e9565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215613141575f80fd5b835192506020840151915060408401519050925092509256fea26469706673582212205f887167942274121102f8f4a3e30c15875c35e1c3c0ae052bb58157cdab505864736f6c63430008180033

Deployed Bytecode Sourcemap

9622:16028:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17827:321;;;;;;;;;;-1:-1:-1;17827:321:0;;;;;:::i;:::-;;:::i;:::-;;4069:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9775:27;;;;;;;;;;-1:-1:-1;9775:27:0;;;;-1:-1:-1;;;;;9775:27:0;;;;;;-1:-1:-1;;;;;1002:32:1;;;984:51;;972:2;957:18;9775:27:0;820:221:1;4983:169:0;;;;;;;;;;-1:-1:-1;4983:169:0;;;;;:::i;:::-;;:::i;:::-;;;1667:14:1;;1660:22;1642:41;;1630:2;1615:18;4983:169:0;1502:187:1;10893:64:0;;;;;;;;;;-1:-1:-1;10893:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14212:199;;;;;;;;;;-1:-1:-1;14212:199:0;;;;;:::i;:::-;;:::i;4390:108::-;;;;;;;;;;-1:-1:-1;4478:12:0;;4390:108;;;2970:25:1;;;2958:2;2943:18;4390:108:0;2824:177:1;10710:33:0;;;;;;;;;;;;;;;;16060:618;;;;;;;;;;-1:-1:-1;16060:618:0;;;;;:::i;:::-;;:::i;5160:492::-;;;;;;;;;;-1:-1:-1;5160:492:0;;;;;:::i;:::-;;:::i;14578:269::-;;;;;;;;;;-1:-1:-1;14578:269:0;;;;;:::i;:::-;;:::i;4289:93::-;;;;;;;;;;-1:-1:-1;4289:93:0;;4372:2;6287:36:1;;6275:2;6260:18;4289:93:0;6145:184:1;10020:36:0;;;;;;;;;;-1:-1:-1;10020:36:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5660:215;;;;;;;;;;-1:-1:-1;5660:215:0;;;;;:::i;:::-;;:::i;9809:21::-;;;;;;;;;;-1:-1:-1;9809:21:0;;;;-1:-1:-1;;;;;9809:21:0;;;25108:237;;;;;;;;;;-1:-1:-1;25108:237:0;;;;;:::i;:::-;;:::i;10097:33::-;;;;;;;;;;-1:-1:-1;10097:33:0;;;;;;;;10590:32;;;;;;;;;;;;;;;;25397:248;;;;;;;;;;;;;:::i;10478:31::-;;;;;;;;;;;;;;;;17505:314;;;;;;;;;;-1:-1:-1;17505:314:0;;;;;:::i;:::-;;:::i;9701:28::-;;;;;;;;;;;;;;;;10555;;;;;;;;;;;;;;;;10063:25;;;;;;;;;;;;;;;;10177:31;;;;;;;;;;-1:-1:-1;10177:31:0;;;;;;;;;;;4506:127;;;;;;;;;;-1:-1:-1;4506:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4607:18:0;4580:7;4607:18;;;;;;;;;;;;4506:127;8146:150;;;;;;;;;;;;;:::i;13932:154::-;;;;;;;;;;;;;:::i;16686:260::-;;;;;;;;;;-1:-1:-1;16686:260:0;;;;;:::i;:::-;;:::i;24489:381::-;;;;;;;;;;-1:-1:-1;24489:381:0;;;;;:::i;:::-;;:::i;9667:27::-;;;;;;;;;;;;;;;;13631:249;;;;;;;;;;;;;:::i;7932:79::-;;;;;;;;;;-1:-1:-1;7997:6:0;;-1:-1:-1;;;;;7997:6:0;7932:79;;4177:104;;;;;;;;;;;;;:::i;16954:295::-;;;;;;;;;;-1:-1:-1;16954:295:0;;;;;:::i;:::-;;:::i;5883:413::-;;;;;;;;;;-1:-1:-1;5883:413:0;;;;;:::i;:::-;;:::i;4641:175::-;;;;;;;;;;-1:-1:-1;4641:175:0;;;;;:::i;:::-;;:::i;9736:30::-;;;;;;;;;;;;;;;;11115:58;;;;;;;;;;-1:-1:-1;11115:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10137:33;;;;;;;;;;-1:-1:-1;10137:33:0;;;;;;;;;;;18156:182;;;;;;;;;;-1:-1:-1;18156:182:0;;;;;:::i;:::-;;:::i;15137:284::-;;;;;;;;;;-1:-1:-1;15137:284:0;;;;;:::i;:::-;;:::i;10396:39::-;;;;;;;;;;-1:-1:-1;10396:39:0;;;;;;;;15491:346;;;;;;;;;;-1:-1:-1;15491:346:0;;;;;:::i;:::-;;:::i;10444:27::-;;;;;;;;;;;;;;;;14855:274;;;;;;;;;;-1:-1:-1;14855:274:0;;;;;:::i;:::-;;:::i;4824:151::-;;;;;;;;;;-1:-1:-1;4824:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4940:18:0;;;4913:7;4940:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4824:151;9867:33;;;;;;;;;;;;;;;;14094:110;;;;;;;;;;-1:-1:-1;14094:110:0;;;;;:::i;:::-;;:::i;14472:98::-;;;;;;;;;;;;;:::i;9943:37::-;;;;;;;;;;;;;;;;10516:30;;;;;;;;;;;;;;;;8304:244;;;;;;;;;;-1:-1:-1;8304:244:0;;;;;:::i;:::-;;:::i;24940:160::-;;;;;;;;;;;;;:::i;10629:31::-;;;;;;;;;;;;;;;;10669:34;;;;;;;;;;;;;;;;17827:321;8059:6;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;;;;;;;;;17928:17:::1;:34:::0;;;17973:16:::1;:32:::0;;;18032:36:::1;17992:13:::0;17948:14;18032:36:::1;:::i;:::-;18016:13;:52:::0;;;18104:2:::1;-1:-1:-1::0;18087:19:0::1;18079:61;;;::::0;-1:-1:-1;;;18079:61:0;;8147:2:1;18079:61:0::1;::::0;::::1;8129:21:1::0;8186:2;8166:18;;;8159:30;8225:31;8205:18;;;8198:59;8274:18;;18079:61:0::1;7945:353:1::0;18079:61:0::1;17827:321:::0;;:::o;4069:100::-;4123:13;4156:5;4149:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4069:100;:::o;4983:169::-;5066:4;5083:39;298:10;5106:7;5115:6;5083:8;:39::i;:::-;-1:-1:-1;5140:4:0;4983:169;;;;;:::o;14212:199::-;8059:6;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;14316:9:::1;14312:92;14331:18:::0;;::::1;14312:92;;;14388:4;14370:3;:15;14374:7;;14382:1;14374:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14370:15:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;14370:15:0;:22;;-1:-1:-1;;14370:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;14351:3:0::1;14312:92;;;;14212:199:::0;;;:::o;16060:618::-;8059:6;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;16202:15:::1;:22;16184:7;:14;:40;16176:83;;;::::0;-1:-1:-1;;;16176:83:0;;9022:2:1;16176:83:0::1;::::0;::::1;9004:21:1::0;9061:2;9041:18;;;9034:30;9100:32;9080:18;;;9073:60;9150:18;;16176:83:0::1;8820:354:1::0;16176:83:0::1;16295:3;16278:7;:14;:20;16270:87;;;::::0;-1:-1:-1;;;16270:87:0;;9381:2:1;16270:87:0::1;::::0;::::1;9363:21:1::0;9420:2;9400:18;;;9393:30;9459:34;9439:18;;;9432:62;-1:-1:-1;;;9510:18:1;;;9503:52;9572:19;;16270:87:0::1;9179:418:1::0;16270:87:0::1;16470:9;16466:205;16489:7;:14;16485:1;:18;16466:205;;;16524:14;16541:7;16549:1;16541:10;;;;;;;;:::i;:::-;;;;;;;16524:27;;16566:14;16583:15;16599:1;16583:18;;;;;;;;:::i;:::-;;;;;;;16566:35;;16616:43;16632:10;16644:6;16652;16616:15;:43::i;:::-;-1:-1:-1::0;;16505:3:0::1;;16466:205;;;;16060:618:::0;;:::o;5160:492::-;5300:4;5317:36;5327:6;5335:9;5346:6;5317:9;:36::i;:::-;-1:-1:-1;;;;;5393:19:0;;5366:24;5393:19;;;:11;:19;;;;;;;;298:10;5393:33;;;;;;;;5445:26;;;;5437:79;;;;-1:-1:-1;;;5437:79:0;;9804:2:1;5437:79:0;;;9786:21:1;9843:2;9823:18;;;9816:30;9882:34;9862:18;;;9855:62;-1:-1:-1;;;9933:18:1;;;9926:38;9981:19;;5437:79:0;9602:404:1;5437:79:0;5552:57;5561:6;298:10;5602:6;5583:16;:25;5552:8;:57::i;:::-;-1:-1:-1;5640:4:0;;5160:492;-1:-1:-1;;;;5160:492:0:o;14578:269::-;8059:6;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;14697:4:::1;14691;14671:13;4478:12:::0;;;4390:108;14671:13:::1;:17;::::0;14687:1:::1;14671:17;:::i;:::-;:24;;;;:::i;:::-;14670:31;;;;:::i;:::-;14660:6;:41;;14652:95;;;::::0;-1:-1:-1;;;14652:95:0;;10608:2:1;14652:95:0::1;::::0;::::1;10590:21:1::0;10647:2;10627:18;;;10620:30;10686:34;10666:18;;;10659:62;-1:-1:-1;;;10737:18:1;;;10730:39;10786:19;;14652:95:0::1;10406:405:1::0;14652:95:0::1;14773:17;:6:::0;14783::::1;14773:17;:::i;:::-;14758:12;:32:::0;;;14806:33:::1;::::0;2970:25:1;;;14806:33:0::1;::::0;2958:2:1;2943:18;14806:33:0::1;;;;;;;;14578:269:::0;:::o;5660:215::-;298:10;5748:4;5797:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5797:34:0;;;;;;;;;;5748:4;;5765:80;;5788:7;;5797:47;;5834:10;;5797:47;:::i;:::-;5765:8;:80::i;25108:237::-;8059:6;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25204:32:0;::::1;25196:83;;;::::0;-1:-1:-1;;;25196:83:0;;11018:2:1;25196:83:0::1;::::0;::::1;11000:21:1::0;11057:2;11037:18;;;11030:30;11096:34;11076:18;;;11069:62;-1:-1:-1;;;11147:18:1;;;11140:36;11193:19;;25196:83:0::1;10816:402:1::0;25196:83:0::1;25290:17;:47:::0;;-1:-1:-1;;;;;;25290:47:0::1;-1:-1:-1::0;;;;;25290:47:0;;;::::1;::::0;;;::::1;::::0;;25108:237::o;25397:248::-;8059:6;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;25478:4:::1;25488:1;4607:18:::0;;;;;25522:8:::1;:15:::0;;-1:-1:-1;;;;25522:15:0::1;-1:-1:-1::0;;;25522:15:0::1;::::0;;25548:10:::1;:8;:10::i;:::-;25569:8;:16:::0;;-1:-1:-1;;;;25569:16:0::1;::::0;;25601:36:::1;::::0;25621:15:::1;2970:25:1::0;;25601:36:0::1;::::0;2958:2:1;2943:18;25601:36:0::1;;;;;;;25397:248::o:0;17505:314::-;8059:6;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;17605:16:::1;:33:::0;;;17649:15:::1;:31:::0;;;17706:34:::1;17667:13:::0;17624:14;17706:34:::1;:::i;:::-;17691:12;:49:::0;;;17775:2:::1;-1:-1:-1::0;17759:18:0::1;17751:60;;;::::0;-1:-1:-1;;;17751:60:0;;11771:2:1;17751:60:0::1;::::0;::::1;11753:21:1::0;11810:2;11790:18;;;11783:30;11849:31;11829:18;;;11822:59;11898:18;;17751:60:0::1;11569:353:1::0;8146:150:0;8059:6;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;8239:6:::1;::::0;8218:40:::1;::::0;8255:1:::1;::::0;-1:-1:-1;;;;;8239:6:0::1;::::0;8218:40:::1;::::0;8255:1;;8218:40:::1;8269:6;:19:::0;;-1:-1:-1;;;;;;8269:19:0::1;::::0;;8146:150::o;13932:154::-;8059:6;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;13986:14:::1;:22:::0;;-1:-1:-1;;13986:22:0;;::::1;::::0;;;14019:20:::1;:28:::0;;;;::::1;::::0;;14063:15:::1;::::0;::::1;::::0;14003:5:::1;::::0;14063:15:::1;13932:154::o:0;16686:260::-;8059:6;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;16782:4:::1;16778:104;;16820:6;::::0;-1:-1:-1;;;;;16820:6:0;;::::1;16810:16:::0;;::::1;::::0;16802:68:::1;;;::::0;-1:-1:-1;;;16802:68:0;;12129:2:1;16802:68:0::1;::::0;::::1;12111:21:1::0;12168:2;12148:18;;;12141:30;12207:34;12187:18;;;12180:62;-1:-1:-1;;;12258:18:1;;;12251:37;12305:19;;16802:68:0::1;11927:403:1::0;16802:68:0::1;-1:-1:-1::0;;;;;16892:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;16892:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16686:260::o;24489:381::-;8059:6;;24576:10;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24607:20:0;::::1;24599:59;;;::::0;-1:-1:-1;;;24599:59:0;;12537:2:1;24599:59:0::1;::::0;::::1;12519:21:1::0;12576:2;12556:18;;;12549:30;12615:28;12595:18;;;12588:56;12661:18;;24599:59:0::1;12335:350:1::0;24599:59:0::1;24696:39;::::0;-1:-1:-1;;;24696:39:0;;24729:4:::1;24696:39;::::0;::::1;984:51:1::0;24669:24:0::1;::::0;-1:-1:-1;;;;;24696:24:0;::::1;::::0;::::1;::::0;957:18:1;;24696:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24754:46;::::0;-1:-1:-1;;;24754:46:0;;-1:-1:-1;;;;;13071:32:1;;;24754:46:0::1;::::0;::::1;13053:51:1::0;13120:18;;;13113:34;;;24669:66:0;;-1:-1:-1;24754:23:0;;::::1;::::0;::::1;::::0;13026:18:1;;24754:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24816;::::0;;-1:-1:-1;;;;;13071:32:1;;13053:51;;13135:2;13120:18;;13113:34;;;24746:54:0;;-1:-1:-1;24816:46:0::1;::::0;13026:18:1;24816:46:0::1;;;;;;;24588:282;24489:381:::0;;;;:::o;13631:249::-;8059:6;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;13695:13:::1;::::0;::::1;::::0;::::1;;;13694:14;13686:50;;;::::0;-1:-1:-1;;;13686:50:0;;13610:2:1;13686:50:0::1;::::0;::::1;13592:21:1::0;13649:2;13629:18;;;13622:30;13688:25;13668:18;;;13661:53;13731:18;;13686:50:0::1;13408:347:1::0;13686:50:0::1;13747:13;:20:::0;;-1:-1:-1;;13778:18:0;;;;;13828:12:::1;13807:18;:33:::0;13856:16:::1;::::0;::::1;::::0;-1:-1:-1;;13856:16:0::1;13631:249::o:0;4177:104::-;4233:13;4266:7;4259:14;;;;;:::i;16954:295::-;8059:6;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;17063:6:::1;::::0;-1:-1:-1;;;;;17063:6:0;;::::1;17055:14:::0;;::::1;::::0;17047:84:::1;;;::::0;-1:-1:-1;;;17047:84:0;;13962:2:1;17047:84:0::1;::::0;::::1;13944:21:1::0;14001:2;13981:18;;;13974:30;14040:34;14020:18;;;14013:62;14111:27;14091:18;;;14084:55;14156:19;;17047:84:0::1;13760:421:1::0;17047:84:0::1;17144:41;17173:4;17179:5;17144:28;:41::i;:::-;17201:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;17201:40:0;::::1;::::0;::::1;::::0;;;::::1;16954:295:::0;;:::o;5883:413::-;298:10;5976:4;6020:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6020:34:0;;;;;;;;;;6073:35;;;;6065:85;;;;-1:-1:-1;;;6065:85:0;;14388:2:1;6065:85:0;;;14370:21:1;14427:2;14407:18;;;14400:30;14466:34;14446:18;;;14439:62;-1:-1:-1;;;14517:18:1;;;14510:35;14562:19;;6065:85:0;14186:401:1;6065:85:0;6186:67;298:10;6209:7;6237:15;6218:16;:34;6186:8;:67::i;:::-;-1:-1:-1;6284:4:0;;5883:413;-1:-1:-1;;;5883:413:0:o;4641:175::-;4727:4;4744:42;298:10;4768:9;4779:6;4744:9;:42::i;18156:182::-;8059:6;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18241:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;18241:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18296:34;;1642:41:1;;;18296:34:0::1;::::0;1615:18:1;18296:34:0::1;;;;;;;18156:182:::0;;:::o;15137:284::-;8059:6;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;15259:4:::1;15253;15233:13;4478:12:::0;;;4390:108;15233:13:::1;:17;::::0;15249:1:::1;15233:17;:::i;:::-;:24;;;;:::i;:::-;15232:31;;;;:::i;:::-;15222:6;:41;;15214:98;;;::::0;-1:-1:-1;;;15214:98:0;;14794:2:1;15214:98:0::1;::::0;::::1;14776:21:1::0;14833:2;14813:18;;;14806:30;14872:34;14852:18;;;14845:62;-1:-1:-1;;;14923:18:1;;;14916:42;14975:19;;15214:98:0::1;14592:408:1::0;15214:98:0::1;15341:17;:6:::0;15351::::1;15341:17;:::i;:::-;15323:15;:35:::0;;;15374:39:::1;::::0;2970:25:1;;;15374:39:0::1;::::0;2958:2:1;2943:18;15374:39:0::1;2824:177:1::0;15491:346:0;8059:6;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;15614:6:::1;15594:13;4478:12:::0;;;4390:108;15594:13:::1;:17;::::0;15610:1:::1;15594:17;:::i;:::-;:26;;;;:::i;:::-;15581:9;:39;;15573:105;;;::::0;-1:-1:-1;;;15573:105:0;;15207:2:1;15573:105:0::1;::::0;::::1;15189:21:1::0;15246:2;15226:18;;;15219:30;15285:34;15265:18;;;15258:62;-1:-1:-1;;;15336:18:1;;;15329:51;15397:19;;15573:105:0::1;15005:417:1::0;15573:105:0::1;15729:4;15709:13;4478:12:::0;;;4390:108;15709:13:::1;:17;::::0;15725:1:::1;15709:17;:::i;:::-;:24;;;;:::i;:::-;15696:9;:37;;15688:102;;;::::0;-1:-1:-1;;;15688:102:0;;15629:2:1;15688:102:0::1;::::0;::::1;15611:21:1::0;15668:2;15648:18;;;15641:30;15707:34;15687:18;;;15680:62;-1:-1:-1;;;15758:18:1;;;15751:50;15818:19;;15688:102:0::1;15427:416:1::0;15688:102:0::1;15800:18;:30:::0;15491:346::o;14855:274::-;8059:6;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;14975:4:::1;14969;14949:13;4478:12:::0;;;4390:108;14949:13:::1;:17;::::0;14965:1:::1;14949:17;:::i;:::-;:24;;;;:::i;:::-;14948:31;;;;:::i;:::-;14938:6;:41;;14930:96;;;::::0;-1:-1:-1;;;14930:96:0;;16050:2:1;14930:96:0::1;::::0;::::1;16032:21:1::0;16089:2;16069:18;;;16062:30;16128:34;16108:18;;;16101:62;-1:-1:-1;;;16179:18:1;;;16172:40;16229:19;;14930:96:0::1;15848:406:1::0;14930:96:0::1;15053:17;:6:::0;15063::::1;15053:17;:::i;:::-;15037:13;:33:::0;;;15086:35:::1;::::0;2970:25:1;;;15086:35:0::1;::::0;2958:2:1;2943:18;15086:35:0::1;2824:177:1::0;14094:110:0;8059:6;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14178:11:0;;;::::1;;::::0;;;:3:::1;:11;::::0;;;;:18;;-1:-1:-1;;14178:18:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14094:110::o;14472:98::-;8059:6;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;14534:20:::1;:28:::0;;-1:-1:-1;;14534:28:0::1;::::0;;14472:98::o;8304:244::-;8059:6;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8393:22:0;::::1;8385:73;;;::::0;-1:-1:-1;;;8385:73:0;;16461:2:1;8385:73:0::1;::::0;::::1;16443:21:1::0;16500:2;16480:18;;;16473:30;16539:34;16519:18;;;16512:62;-1:-1:-1;;;16590:18:1;;;16583:36;16636:19;;8385:73:0::1;16259:402:1::0;8385:73:0::1;8495:6;::::0;8474:38:::1;::::0;-1:-1:-1;;;;;8474:38:0;;::::1;::::0;8495:6:::1;::::0;8474:38:::1;::::0;8495:6:::1;::::0;8474:38:::1;8523:6;:17:::0;;-1:-1:-1;;;;;;8523:17:0::1;-1:-1:-1::0;;;;;8523:17:0;;;::::1;::::0;;;::::1;::::0;;8304:244::o;24940:160::-;8059:6;;-1:-1:-1;;;;;8059:6:0;298:10;8059:22;8051:67;;;;-1:-1:-1;;;8051:67:0;;;;;;;:::i;:::-;25034:58:::1;::::0;24998:12:::1;::::0;25042:10:::1;::::0;25066:21:::1;::::0;24998:12;25034:58;24998:12;25034:58;25066:21;25042:10;25034:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7225:380:::0;-1:-1:-1;;;;;7361:19:0;;7353:68;;;;-1:-1:-1;;;7353:68:0;;17078:2:1;7353:68:0;;;17060:21:1;17117:2;17097:18;;;17090:30;17156:34;17136:18;;;17129:62;-1:-1:-1;;;17207:18:1;;;17200:34;17251:19;;7353:68:0;16876:400:1;7353:68:0;-1:-1:-1;;;;;7440:21:0;;7432:68;;;;-1:-1:-1;;;7432:68:0;;17483:2:1;7432:68:0;;;17465:21:1;17522:2;17502:18;;;17495:30;17561:34;17541:18;;;17534:62;-1:-1:-1;;;17612:18:1;;;17605:32;17654:19;;7432:68:0;17281:398:1;7432:68:0;-1:-1:-1;;;;;7513:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7565:32;;2970:25:1;;;7565:32:0;;2943:18:1;7565:32:0;;;;;;;7225:380;;;:::o;6304:614::-;-1:-1:-1;;;;;6444:20:0;;6436:70;;;;-1:-1:-1;;;6436:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6525:23:0;;6517:71;;;;-1:-1:-1;;;6517:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6625:17:0;;6601:21;6625:17;;;;;;;;;;;6661:23;;;;6653:74;;;;-1:-1:-1;;;6653:74:0;;18696:2:1;6653:74:0;;;18678:21:1;18735:2;18715:18;;;18708:30;18774:34;18754:18;;;18747:62;-1:-1:-1;;;18825:18:1;;;18818:36;18871:19;;6653:74:0;18494:402:1;6653:74:0;-1:-1:-1;;;;;6763:17:0;;;:9;:17;;;;;;;;;;;6783:22;;;6763:42;;6827:20;;;;;;;;:30;;6799:6;;6763:9;6827:30;;6799:6;;6827:30;:::i;:::-;;;;;;;;6892:9;-1:-1:-1;;;;;6875:35:0;6884:6;-1:-1:-1;;;;;6875:35:0;;6903:6;6875:35;;;;2970:25:1;;2958:2;2943:18;;2824:177;6875:35:0;;;;;;;;6425:493;6304:614;;;:::o;18346:3806::-;-1:-1:-1;;;;;18446:18:0;;18438:68;;;;-1:-1:-1;;;18438:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18525:16:0;;18517:64;;;;-1:-1:-1;;;18517:64:0;;;;;;;:::i;:::-;18609:1;18600:6;:10;18592:52;;;;-1:-1:-1;;;18592:52:0;;19103:2:1;18592:52:0;;;19085:21:1;19142:2;19122:18;;;19115:30;19181:31;19161:18;;;19154:59;19230:18;;18592:52:0;18901:353:1;18592:52:0;18661:13;;;;;;;18657:132;;-1:-1:-1;;;;;18698:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;18727:23:0;;;;;;:19;:23;;;;;;;;18698:52;18690:87;;;;-1:-1:-1;;;18690:87:0;;19461:2:1;18690:87:0;;;19443:21:1;19500:2;19480:18;;;19473:30;-1:-1:-1;;;19519:18:1;;;19512:52;19581:18;;18690:87:0;19259:346:1;18690:87:0;-1:-1:-1;;;;;18810:9:0;;;;;;:3;:9;;;;;;;;18809:10;:22;;;;-1:-1:-1;;;;;;18824:7:0;;;;;;:3;:7;;;;;;;;18823:8;18809:22;18801:105;;;;-1:-1:-1;;;18801:105:0;;19812:2:1;18801:105:0;;;19794:21:1;19851:2;19831:18;;;19824:30;19890:34;19870:18;;;19863:62;19961:34;19941:18;;;19934:62;-1:-1:-1;;;20012:19:1;;;20005:37;20059:19;;18801:105:0;19610:474:1;18801:105:0;18922:14;;;;18919:1653;;;7997:6;;-1:-1:-1;;;;;18956:15:0;;;7997:6;;18956:15;;;;:32;;-1:-1:-1;7997:6:0;;-1:-1:-1;;;;;18975:13:0;;;7997:6;;18975:13;;18956:32;:52;;;;-1:-1:-1;;;;;;18992:16:0;;;;18956:52;:77;;;;-1:-1:-1;;;;;;19012:21:0;;19026:6;19012:21;;18956:77;:107;;;;-1:-1:-1;;;;;;19038:25:0;;;;;;:19;:25;;;;;;;;19037:26;18956:107;:135;;;;-1:-1:-1;;;;;;19068:23:0;;;;;;:19;:23;;;;;;;;19067:24;18956:135;18952:1609;;;19249:20;;;;19245:506;;;19311:9;;-1:-1:-1;;;;;19297:24:0;;;19311:9;;19297:24;;;;:49;;-1:-1:-1;19339:6:0;;-1:-1:-1;;;;;19325:21:0;;;19339:6;;19325:21;;19297:49;19293:439;;;19424:16;19439:1;19424:12;:16;:::i;:::-;19411:9;19382:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;19479:16:0;19494:1;19479:12;:16;:::i;:::-;-1:-1:-1;;;;;19444:32:0;;;;;;:28;:32;;;;;;:51;19382:113;19374:179;;;;-1:-1:-1;;;19374:179:0;;20424:2:1;19374:179:0;;;20406:21:1;20463:2;20443:18;;;20436:30;20502:34;20482:18;;;20475:62;-1:-1:-1;;;20553:18:1;;;20546:51;20614:19;;19374:179:0;20222:417:1;19374:179:0;19609:9;19580:39;;;;:28;:39;;;;;;19622:12;19580:54;;;;-1:-1:-1;;;;;19661:32:0;;;;;;:47;19293:439;-1:-1:-1;;;;;19807:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;19843:35:0;;;;;;:31;:35;;;;;;;;19842:36;19807:71;19803:743;;;19925:12;;19915:6;:22;;19907:75;;;;-1:-1:-1;;;19907:75:0;;20846:2:1;19907:75:0;;;20828:21:1;20885:2;20865:18;;;20858:30;20924:34;20904:18;;;20897:62;-1:-1:-1;;;20975:18:1;;;20968:38;21023:19;;19907:75:0;20644:404:1;19907:75:0;20043:15;;-1:-1:-1;;;;;4607:18:0;;4580:7;4607:18;;;;;;;;;;;20017:22;;:6;:22;:::i;:::-;:41;;20009:78;;;;-1:-1:-1;;;20009:78:0;;21255:2:1;20009:78:0;;;21237:21:1;21294:2;21274:18;;;21267:30;-1:-1:-1;;;21313:18:1;;;21306:54;21377:18;;20009:78:0;21053:348:1;20009:78:0;19803:743;;;-1:-1:-1;;;;;20163:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;20197:37:0;;;;;;:31;:37;;;;;;;;20196:38;20163:71;20159:387;;;20281:13;;20271:6;:23;;20263:78;;;;-1:-1:-1;;;20263:78:0;;21608:2:1;20263:78:0;;;21590:21:1;21647:2;21627:18;;;21620:30;21686:34;21666:18;;;21659:62;-1:-1:-1;;;21737:18:1;;;21730:40;21787:19;;20263:78:0;21406:406:1;20159:387:0;-1:-1:-1;;;;;20389:35:0;;;;;;:31;:35;;;;;;;;20384:162;;20482:15;;-1:-1:-1;;;;;4607:18:0;;4580:7;4607:18;;;;;;;;;;;20456:22;;:6;:22;:::i;:::-;:41;;20448:78;;;;-1:-1:-1;;;20448:78:0;;21255:2:1;20448:78:0;;;21237:21:1;21294:2;21274:18;;;21267:30;-1:-1:-1;;;21313:18:1;;;21306:54;21377:18;;20448:78:0;21053:348:1;20448:78:0;20633:4;20584:28;4607:18;;;;;;;;;;;20691;;20667:42;;;;;;;20725:22;;-1:-1:-1;20736:11:0;;;;;;;20725:22;:35;;;;-1:-1:-1;20752:8:0;;-1:-1:-1;;;20752:8:0;;;;20751:9;20725:35;:71;;;;-1:-1:-1;;;;;;20765:31:0;;;;;;:25;:31;;;;;;;;20764:32;20725:71;:101;;;;-1:-1:-1;;;;;;20801:25:0;;;;;;:19;:25;;;;;;;;20800:26;20725:101;:129;;;;-1:-1:-1;;;;;;20831:23:0;;;;;;:19;:23;;;;;;;;20830:24;20725:129;20722:236;;;20871:8;:15;;-1:-1:-1;;;;20871:15:0;-1:-1:-1;;;20871:15:0;;;20903:10;:8;:10::i;:::-;20930:8;:16;;-1:-1:-1;;;;20930:16:0;;;20722:236;-1:-1:-1;;;;;21088:25:0;;20970:12;21088:25;;;:19;:25;;;;;;20985:4;;21088:25;;;:52;;-1:-1:-1;;;;;;21117:23:0;;;;;;:19;:23;;;;;;;;21088:52;21085:99;;;-1:-1:-1;21167:5:0;21085:99;21196:12;21300:7;21297:802;;;-1:-1:-1;;;;;21351:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;21400:1;21384:13;;:17;21351:50;21347:608;;;21453:3;21437:13;;21428:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;21421:35;;21523:13;;21504:16;;21497:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;21475:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21605:13:0;;21585:17;;21578:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;21555:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;21347:608:0;;-1:-1:-1;21347:608:0;;-1:-1:-1;;;;;21681:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;21731:1;21716:12;;:16;21681:51;21678:277;;;21781:3;21766:12;;21757:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;21750:34;;21847:12;;21829:15;;21822:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;21800:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;21927:12:0;;21908:16;;21901:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;21878:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21678:277:0;21974:8;;21971:89;;22002:42;22018:4;22032;22039;22002:15;:42::i;:::-;22073:14;22083:4;22073:14;;:::i;:::-;;;21297:802;22111:33;22127:4;22133:2;22137:6;22111:15;:33::i;:::-;18425:3727;;;;18346:3806;;;:::o;23256:1225::-;23339:4;23295:23;4607:18;;;;;;;;;;;23295:50;;23356:25;23405:19;;23384:18;;:40;;;;:::i;:::-;23356:68;-1:-1:-1;23440:20:0;;;:46;;-1:-1:-1;23464:22:0;;23440:46;23437:60;;;23489:7;;23256:1225::o;23437:60::-;23530:18;;:23;;23551:2;23530:23;:::i;:::-;23512:15;:41;23509:113;;;23587:18;;:23;;23608:2;23587:23;:::i;:::-;23569:41;;23509:113;23634:12;23708:23;23793:1;23773:17;23752:18;;23734:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;23708:86;-1:-1:-1;23807:51:0;23824:33;23708:86;23824:15;:33;:::i;:::-;23807:16;:51::i;:::-;24057:18;;23892:21;;;;23871:18;;24057:20;;24076:1;;24057:20;:::i;:::-;24036:42;;:17;:42;:::i;:::-;24013:19;;24000:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;23973:106;-1:-1:-1;24092:35:0;23973:106;24092:35;;:::i;:::-;24161:1;24140:18;:22;;;24173:19;:23;24092:35;-1:-1:-1;24212:19:0;;;;;:42;;;24253:1;24235:15;:19;24212:42;24209:119;;;24270:46;24283:15;24300;24270:12;:46::i;:::-;24343:21;:25;24340:134;;24405:17;;24397:65;;-1:-1:-1;;;;;24405:17:0;;;;24436:21;;24397:65;;;;24436:21;24405:17;24397:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;23256:1225:0:o;17257:240::-;-1:-1:-1;;;;;17340:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;17340:39:0;;;;;;;17392;17340:31;:39;17392:26;:39::i;22158:573::-;22310:16;;;22324:1;22310:16;;;;;;;;22286:21;;22310:16;;;;;;;;;;-1:-1:-1;22310:16:0;22286:40;;22355:4;22337;22342:1;22337:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22337:23:0;;;:7;;;;;;;;;;:23;;;;22381:9;;:16;;;-1:-1:-1;;;22381:16:0;;;;:9;;;;;:14;;:16;;;;;22337:7;;22381:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22371:4;22376:1;22371:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22371:26:0;;;:7;;;;;;;;;:26;22442:9;;22410:56;;22427:4;;22442:9;22454:11;22410:8;:56::i;:::-;22505:9;;:218;;-1:-1:-1;;;22505:218:0;;-1:-1:-1;;;;;22505:9:0;;;;:60;;:218;;22580:11;;22505:9;;22650:4;;22677;;22697:15;;22505:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22213:518;22158:573;:::o;22739:509::-;22919:9;;22887:56;;22904:4;;-1:-1:-1;;;;;22919:9:0;22931:11;22887:8;:56::i;:::-;22986:9;;:254;;-1:-1:-1;;;22986:254:0;;23052:4;22986:254;;;23399:34:1;23449:18;;;23442:34;;;22986:9:0;23492:18:1;;;23485:34;;;23535:18;;;23528:34;23192:6:0;23578:19:1;;;23571:44;23214:15:0;23631:19:1;;;23624:35;-1:-1:-1;;;;;22986:9:0;;;;:25;;23019:9;;23333:19:1;;22986:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22739:509;;:::o;15845:207::-;-1:-1:-1;;;;;15933:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;15933:52:0;;;;;;;;;;16001:43;;24149:51:1;;;24216:18;;;24209:50;16001:43:0;;24122:18:1;16001:43:0;;;;;;;15845:207;;:::o;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:548::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;551:3;736:1;731:2;722:6;711:9;707:22;703:31;696:42;806:2;799;795:7;790:2;782:6;778:15;774:29;763:9;759:45;755:54;747:62;;;;267:548;;;;:::o;1046:131::-;-1:-1:-1;;;;;1121:31:1;;1111:42;;1101:70;;1167:1;1164;1157:12;1101:70;1046:131;:::o;1182:315::-;1250:6;1258;1311:2;1299:9;1290:7;1286:23;1282:32;1279:52;;;1327:1;1324;1317:12;1279:52;1366:9;1353:23;1385:31;1410:5;1385:31;:::i;:::-;1435:5;1487:2;1472:18;;;;1459:32;;-1:-1:-1;;;1182:315:1:o;1694:247::-;1753:6;1806:2;1794:9;1785:7;1781:23;1777:32;1774:52;;;1822:1;1819;1812:12;1774:52;1861:9;1848:23;1880:31;1905:5;1880:31;:::i;:::-;1930:5;1694:247;-1:-1:-1;;;1694:247:1:o;1946:118::-;2032:5;2025:13;2018:21;2011:5;2008:32;1998:60;;2054:1;2051;2044:12;2069:750;2161:6;2169;2177;2230:2;2218:9;2209:7;2205:23;2201:32;2198:52;;;2246:1;2243;2236:12;2198:52;2286:9;2273:23;2315:18;2356:2;2348:6;2345:14;2342:34;;;2372:1;2369;2362:12;2342:34;2410:6;2399:9;2395:22;2385:32;;2455:7;2448:4;2444:2;2440:13;2436:27;2426:55;;2477:1;2474;2467:12;2426:55;2517:2;2504:16;2543:2;2535:6;2532:14;2529:34;;;2559:1;2556;2549:12;2529:34;2614:7;2607:4;2597:6;2594:1;2590:14;2586:2;2582:23;2578:34;2575:47;2572:67;;;2635:1;2632;2625:12;2572:67;2666:4;2658:13;;;;-1:-1:-1;2690:6:1;-1:-1:-1;;2731:20:1;;2718:34;2761:28;2718:34;2761:28;:::i;:::-;2808:5;2798:15;;;2069:750;;;;;:::o;3006:127::-;3067:10;3062:3;3058:20;3055:1;3048:31;3098:4;3095:1;3088:15;3122:4;3119:1;3112:15;3138:275;3209:2;3203:9;3274:2;3255:13;;-1:-1:-1;;3251:27:1;3239:40;;3309:18;3294:34;;3330:22;;;3291:62;3288:88;;;3356:18;;:::i;:::-;3392:2;3385:22;3138:275;;-1:-1:-1;3138:275:1:o;3418:183::-;3478:4;3511:18;3503:6;3500:30;3497:56;;;3533:18;;:::i;:::-;-1:-1:-1;3578:1:1;3574:14;3590:4;3570:25;;3418:183::o;3606:668::-;3660:5;3713:3;3706:4;3698:6;3694:17;3690:27;3680:55;;3731:1;3728;3721:12;3680:55;3767:6;3754:20;3793:4;3817:60;3833:43;3873:2;3833:43;:::i;:::-;3817:60;:::i;:::-;3899:3;3923:2;3918:3;3911:15;3951:4;3946:3;3942:14;3935:21;;4008:4;4002:2;3999:1;3995:10;3987:6;3983:23;3979:34;3965:48;;4036:3;4028:6;4025:15;4022:35;;;4053:1;4050;4043:12;4022:35;4089:4;4081:6;4077:17;4103:142;4119:6;4114:3;4111:15;4103:142;;;4185:17;;4173:30;;4223:12;;;;4136;;4103:142;;;-1:-1:-1;4263:5:1;3606:668;-1:-1:-1;;;;;;3606:668:1:o;4279:1215::-;4397:6;4405;4458:2;4446:9;4437:7;4433:23;4429:32;4426:52;;;4474:1;4471;4464:12;4426:52;4514:9;4501:23;4543:18;4584:2;4576:6;4573:14;4570:34;;;4600:1;4597;4590:12;4570:34;4638:6;4627:9;4623:22;4613:32;;4683:7;4676:4;4672:2;4668:13;4664:27;4654:55;;4705:1;4702;4695:12;4654:55;4741:2;4728:16;4763:4;4787:60;4803:43;4843:2;4803:43;:::i;4787:60::-;4881:15;;;4963:1;4959:10;;;;4951:19;;4947:28;;;4912:12;;;;4987:19;;;4984:39;;;5019:1;5016;5009:12;4984:39;5043:11;;;;5063:217;5079:6;5074:3;5071:15;5063:217;;;5159:3;5146:17;5176:31;5201:5;5176:31;:::i;:::-;5220:18;;5096:12;;;;5258;;;;5063:217;;;5299:5;-1:-1:-1;;5342:18:1;;5329:32;;-1:-1:-1;;5373:16:1;;;5370:36;;;5402:1;5399;5392:12;5370:36;;5425:63;5480:7;5469:8;5458:9;5454:24;5425:63;:::i;:::-;5415:73;;;4279:1215;;;;;:::o;5499:456::-;5576:6;5584;5592;5645:2;5633:9;5624:7;5620:23;5616:32;5613:52;;;5661:1;5658;5651:12;5613:52;5700:9;5687:23;5719:31;5744:5;5719:31;:::i;:::-;5769:5;-1:-1:-1;5826:2:1;5811:18;;5798:32;5839:33;5798:32;5839:33;:::i;:::-;5499:456;;5891:7;;-1:-1:-1;;;5945:2:1;5930:18;;;;5917:32;;5499:456::o;5960:180::-;6019:6;6072:2;6060:9;6051:7;6047:23;6043:32;6040:52;;;6088:1;6085;6078:12;6040:52;-1:-1:-1;6111:23:1;;5960:180;-1:-1:-1;5960:180:1:o;6542:382::-;6607:6;6615;6668:2;6656:9;6647:7;6643:23;6639:32;6636:52;;;6684:1;6681;6674:12;6636:52;6723:9;6710:23;6742:31;6767:5;6742:31;:::i;:::-;6792:5;-1:-1:-1;6849:2:1;6834:18;;6821:32;6862:30;6821:32;6862:30;:::i;:::-;6911:7;6901:17;;;6542:382;;;;;:::o;6929:388::-;6997:6;7005;7058:2;7046:9;7037:7;7033:23;7029:32;7026:52;;;7074:1;7071;7064:12;7026:52;7113:9;7100:23;7132:31;7157:5;7132:31;:::i;:::-;7182:5;-1:-1:-1;7239:2:1;7224:18;;7211:32;7252:33;7211:32;7252:33;:::i;7322:356::-;7524:2;7506:21;;;7543:18;;;7536:30;7602:34;7597:2;7582:18;;7575:62;7669:2;7654:18;;7322:356::o;7683:127::-;7744:10;7739:3;7735:20;7732:1;7725:31;7775:4;7772:1;7765:15;7799:4;7796:1;7789:15;7815:125;7880:9;;;7901:10;;;7898:36;;;7914:18;;:::i;8303:380::-;8382:1;8378:12;;;;8425;;;8446:61;;8500:4;8492:6;8488:17;8478:27;;8446:61;8553:2;8545:6;8542:14;8522:18;8519:38;8516:161;;8599:10;8594:3;8590:20;8587:1;8580:31;8634:4;8631:1;8624:15;8662:4;8659:1;8652:15;8516:161;;8303:380;;;:::o;8688:127::-;8749:10;8744:3;8740:20;8737:1;8730:31;8780:4;8777:1;8770:15;8804:4;8801:1;8794:15;10011:168;10084:9;;;10115;;10132:15;;;10126:22;;10112:37;10102:71;;10153:18;;:::i;10184:217::-;10224:1;10250;10240:132;;10294:10;10289:3;10285:20;10282:1;10275:31;10329:4;10326:1;10319:15;10357:4;10354:1;10347:15;10240:132;-1:-1:-1;10386:9:1;;10184:217::o;12690:184::-;12760:6;12813:2;12801:9;12792:7;12788:23;12784:32;12781:52;;;12829:1;12826;12819:12;12781:52;-1:-1:-1;12852:16:1;;12690:184;-1:-1:-1;12690:184:1:o;13158:245::-;13225:6;13278:2;13266:9;13257:7;13253:23;13249:32;13246:52;;;13294:1;13291;13284:12;13246:52;13326:9;13320:16;13345:28;13367:5;13345:28;:::i;17684:401::-;17886:2;17868:21;;;17925:2;17905:18;;;17898:30;17964:34;17959:2;17944:18;;17937:62;-1:-1:-1;;;18030:2:1;18015:18;;18008:35;18075:3;18060:19;;17684:401::o;18090:399::-;18292:2;18274:21;;;18331:2;18311:18;;;18304:30;18370:34;18365:2;18350:18;;18343:62;-1:-1:-1;;;18436:2:1;18421:18;;18414:33;18479:3;18464:19;;18090:399::o;20089:128::-;20156:9;;;20177:11;;;20174:37;;;20191:18;;:::i;21817:251::-;21887:6;21940:2;21928:9;21919:7;21915:23;21911:32;21908:52;;;21956:1;21953;21946:12;21908:52;21988:9;21982:16;22007:31;22032:5;22007:31;:::i;22073:980::-;22335:4;22383:3;22372:9;22368:19;22414:6;22403:9;22396:25;22440:2;22478:6;22473:2;22462:9;22458:18;22451:34;22521:3;22516:2;22505:9;22501:18;22494:31;22545:6;22580;22574:13;22611:6;22603;22596:22;22649:3;22638:9;22634:19;22627:26;;22688:2;22680:6;22676:15;22662:29;;22709:1;22719:195;22733:6;22730:1;22727:13;22719:195;;;22798:13;;-1:-1:-1;;;;;22794:39:1;22782:52;;22889:15;;;;22854:12;;;;22830:1;22748:9;22719:195;;;-1:-1:-1;;;;;;;22970:32:1;;;;22965:2;22950:18;;22943:60;-1:-1:-1;;;23034:3:1;23019:19;23012:35;22931:3;22073:980;-1:-1:-1;;;22073:980:1:o;23670:306::-;23758:6;23766;23774;23827:2;23815:9;23806:7;23802:23;23798:32;23795:52;;;23843:1;23840;23833:12;23795:52;23872:9;23866:16;23856:26;;23922:2;23911:9;23907:18;23901:25;23891:35;;23966:2;23955:9;23951:18;23945:25;23935:35;;23670:306;;;;;:::o

Swarm Source

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