ETH Price: $2,962.20 (-1.93%)
Gas: 2 Gwei

Token

Submitted for verification at Etherscan.io on 2021... (CONTRACT)
 

Overview

Max Total Supply

21,000,000 CONTRACT

Holders

31

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
178,500 CONTRACT

Value
$0.00
0xabe4aea5d250294ecce14566734f2cb288a6512f
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:
ca

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-17
*/

// https://t.me/contracterc

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

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

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

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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use Operationh 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 _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), 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 ca 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 DevTeamAddress;
    address OperationAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping (address => bool) public boughtEarly;
    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 buyDevTeamFee;
    uint256 public buyLiquidityFee;
    uint256 public buyOperationFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellDevTeamFee;
    uint256 public sellLiquidityFee;
    uint256 public sellOperationFee;
    uint256 public sellBurnFee;

    uint256 public tokensForDevTeam;
    uint256 public tokensForLiquidity;
    uint256 public tokensForOperation;
    uint256 public tokensForBurn;

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

    // 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 UpdatedDevTeamAddress(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("Submitted for verification at Etherscan.io on 2021-02-26*// @dev Interface of the ERC20 standard as defined in the EIP. Does not include* the optional functions; to access them see `ERC20Detailed`.*/interface IERC20 {/** * @dev Returns the amount of tokens in existence.  */function totalSupply() external view returns (uint256);", "CONTRACT") {

        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 = 21000000 * 1e18;

        maxBuyAmount = totalSupply * 1 / 100;
        maxSellAmount = totalSupply * 1 / 100;
        maxWalletAmount = totalSupply * 1 / 100;
        swapTokensAtAmount = totalSupply * 1 / 10000;

        buyDevTeamFee = 15;
        buyLiquidityFee = 0;
        buyOperationFee = 0;
        buyBurnFee = 0;
        buyTotalFees = buyDevTeamFee + buyLiquidityFee + buyOperationFee + buyBurnFee;

        sellDevTeamFee = 25;
        sellLiquidityFee = 0;
        sellOperationFee = 0;
        sellBurnFee = 0;
        sellTotalFees = sellDevTeamFee + sellLiquidityFee + sellOperationFee + sellBurnFee;

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

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

        DevTeamAddress = address(newOwner);
        OperationAddress = address(newOwner);

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

    receive() external payable {}

    // only enable if no plan to airdrop

    function enableTrading(uint256 deadBlocks) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + deadBlocks;
        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 {
        boughtEarly[wallet] = flag;
    }

    function massManageBoughtEarly(address[] calldata wallets, bool flag) external onlyOwner {
        for(uint256 i = 0; i < wallets.length; i++){
            boughtEarly[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 _DevTeamFee, uint256 _liquidityFee, uint256 _OperationFee, uint256 _burnFee) external onlyOwner {
        buyDevTeamFee = _DevTeamFee;
        buyLiquidityFee = _liquidityFee;
        buyOperationFee = _OperationFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buyDevTeamFee + buyLiquidityFee + buyOperationFee + buyBurnFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _DevTeamFee, uint256 _liquidityFee, uint256 _OperationFee, uint256 _burnFee) external onlyOwner {
        sellDevTeamFee = _DevTeamFee;
        sellLiquidityFee = _liquidityFee;
        sellOperationFee = _OperationFee;
        sellBurnFee = _burnFee;
        sellTotalFees = sellDevTeamFee + sellLiquidityFee + sellOperationFee + sellBurnFee;
        require(sellTotalFees <= 30, "Keep fees at 30% or less");
    }

    function returnToNormalTax() external onlyOwner {
        sellDevTeamFee = 0;
        sellLiquidityFee = 0;
        sellOperationFee = 0;
        sellBurnFee = 0;
        sellTotalFees = sellDevTeamFee + sellLiquidityFee + sellOperationFee + sellBurnFee;
        require(sellTotalFees <= 30, "Keep fees at 3O% or less");

        buyDevTeamFee = 0;
        buyLiquidityFee = 0;
        buyOperationFee = 0;
        buyBurnFee = 0;
        buyTotalFees = buyDevTeamFee + buyLiquidityFee + buyOperationFee + buyBurnFee;
        require(buyTotalFees <= 30, "Keep fees at 30% or less");
    }

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

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

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");

        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }

        if(blockForPenaltyEnd > 0){
            require(!boughtEarly[from] || to == owner() || to == address(0xdead), "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){
            // Bot/sniper penalty.
            if(earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && buyTotalFees > 0){

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

                fees = amount * 99 / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDevTeam += fees * buyDevTeamFee / buyTotalFees;
                tokensForOperation += fees * buyOperationFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / 100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDevTeam += fees * sellDevTeamFee / sellTotalFees;
                tokensForOperation += fees * sellOperationFee / sellTotalFees;
                tokensForBurn += fees * sellBurnFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDevTeam += fees * buyDevTeamFee / buyTotalFees;
                tokensForOperation += fees * buyOperationFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
            }

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

        	amount -= fees;
        }

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

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

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

    function 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(DevTeamAddress),
            block.timestamp
        );
    }

    function swapBack() private {

        if(tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn) {
            _burn(address(this), tokensForBurn);
        }
        tokensForBurn = 0;

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForDevTeam + tokensForOperation;

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

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

        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 ethForDevTeam = ethBalance * tokensForDevTeam / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForOperation = ethBalance * tokensForOperation / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForDevTeam + ethForOperation;

        tokensForLiquidity = 0;
        tokensForDevTeam = 0;
        tokensForOperation = 0;
        tokensForBurn = 0;

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

        (success,) = address(OperationAddress).call{value: ethForOperation}("");

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

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

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

    function setDevTeamAddress(address _DevTeamAddress) external onlyOwner {
        require(_DevTeamAddress != address(0), "_DevTeamAddress address cannot be 0");
        DevTeamAddress = payable(_DevTeamAddress);
    }

    function setOperationAddress(address _OperationAddress) external onlyOwner {
        require(_OperationAddress != address(0), "_OperationAddress address cannot be 0");
        OperationAddress = payable(_OperationAddress);
    }

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

    // useful for buybacks or to reclaim any ETH on the contract in a way that helps holders.
    function buyBackTokens(uint256 amountInWei) external onlyOwner {
        require(amountInWei <= 10 ether, "May not buy more than 10 ETH in a single buy to reduce sandwich attacks");

        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        // make the swap
        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0, // accept any amount of Ethereum
            path,
            address(0xdead),
            block.timestamp
        );
        emit BuyBackTriggered(amountInWei);
    }
}

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":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedDevTeamAddress","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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInWei","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevTeamFee","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":"buyOperationFee","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":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"deadBlocks","type":"uint256"}],"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":"returnToNormalTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationFee","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":"_DevTeamAddress","type":"address"}],"name":"setDevTeamAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_OperationAddress","type":"address"}],"name":"setOperationAddress","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":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevTeam","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperation","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":"_DevTeamFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_OperationFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","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":"_DevTeamFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_OperationFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","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"}]

60806040526000600e556012805462ffffff191660019081179091556014805460ff191690911790553480156200003557600080fd5b5060405180610180016040528061014981526020016200482d610149913960408051808201909152600881526710d3d395149050d560c21b602082015260036200008083826200084e565b5060046200008f82826200084e565b5050506000620000a46200044660201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000906000805160206200480d833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa1580156200014b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017191906200091a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200091a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000233573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025991906200091a565b600a80546001600160a01b0319166001600160a01b03929092169182179055620002859060016200044a565b600a546200029e906001600160a01b03166001620004ad565b6a115eec47f6cf7e350000006064620002b982600162000962565b620002c5919062000982565b6006556064620002d782600162000962565b620002e3919062000982565b6007556064620002f582600162000962565b62000301919062000982565b6008556127106200031482600162000962565b62000320919062000982565b600b55600f601681905560006017819055601881905560198190559081906200034b908290620009a5565b620003579190620009a5565b620003639190620009a5565b6015556019601b8190556000601c819055601d819055601e8190559081906200038e908290620009a5565b6200039a9190620009a5565b620003a69190620009a5565b601a55620003b68360016200044a565b620003c33060016200044a565b620003d261dead60016200044a565b620003df83600162000519565b620003ec30600162000519565b620003fb61dead600162000519565b600c80546001600160a01b0385166001600160a01b03199182168117909255600d80549091169091179055620004328382620005c7565b6200043d83620006ac565b505050620009bb565b3390565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602560205260409020805460ff1916821515179055620004dd82826200044a565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005685760405162461bcd60e51b81526020600482018190526024820152600080516020620047ed83398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200061f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200055f565b8060026000828254620006339190620009a5565b90915550506001600160a01b0382166000908152602081905260408120805483929062000662908490620009a5565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006f75760405162461bcd60e51b81526020600482018190526024820152600080516020620047ed83398151915260448201526064016200055f565b6001600160a01b0381166200075e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200055f565b6005546040516001600160a01b038084169216906000805160206200480d83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007d457607f821691505b602082108103620007f557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200084957600081815260208120601f850160051c81016020861015620008245750805b601f850160051c820191505b81811015620008455782815560010162000830565b5050505b505050565b81516001600160401b038111156200086a576200086a620007a9565b62000882816200087b8454620007bf565b84620007fb565b602080601f831160018114620008ba5760008415620008a15750858301515b600019600386901b1c1916600185901b17855562000845565b600085815260208120601f198616915b82811015620008eb57888601518255948401946001909101908401620008ca565b50858210156200090a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200092d57600080fd5b81516001600160a01b03811681146200094557600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200097c576200097c6200094c565b92915050565b600082620009a057634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200097c576200097c6200094c565b613e2280620009cb6000396000f3fe6080604052600436106103e85760003560e01c806388e765ff11610208578063d257b34f11610118578063e7ad9fcd116100ab578063f11a24d31161007a578063f11a24d314610b22578063f2fde38b14610b38578063f5648a4f14610b58578063f637434214610b6d578063fc155d1d14610b8357600080fd5b8063e7ad9fcd14610ab7578063e800dff714610ad7578063e884f26014610af7578063ee40166e14610b0c57600080fd5b8063dd62ed3e116100e7578063dd62ed3e14610a30578063e2cd5fcd14610a76578063e2f4560514610a8b578063e71dc3f514610aa157600080fd5b8063d257b34f146109ba578063d53ce956146109da578063d85ba063146109fa578063dc3f0d0f14610a1057600080fd5b8063aa4bde281161019b578063bbc0c7421161016a578063bbc0c7421461092b578063c02466681461094a578063c18bc1951461096a578063c876d0b91461098a578063cd207777146109a457600080fd5b8063aa4bde28146108b9578063adb873bd146108cf578063b5aa1d6c146108e5578063b62496f5146108fb57600080fd5b80639a7a23d6116101d75780639a7a23d614610843578063a457c2d714610863578063a62068ce14610883578063a9059cbb1461089957600080fd5b806388e765ff146107e45780638b43b085146107fa5780638da5cb5b1461081057806395d89b411461082e57600080fd5b806339509351116103035780636b0a894c11610296578063751039fc11610265578063751039fc1461073f5780637571336a1461075457806382aa7c68146107745780638366e79a1461079457806385ecfd28146107b457600080fd5b80636b0a894c146106d45780636ddd1713146106ea57806370a082311461070a578063715018a61461072a57600080fd5b806351f205e4116102d257806351f205e41461067c57806358a6d5311461069157806366d602ae146106a85780636a486a8e146106be57600080fd5b8063395093511461060c578063452ed4f11461062c5780634992e0e61461064c5780634a62bb651461066257600080fd5b80632307b4411161037b5780632760072b1161034a5780632760072b146105905780632be32b61146105b05780632e6ed7ef146105d0578063313ce567146105f057600080fd5b80632307b4411461052457806323b872dd146105445780632580ad8014610564578063273dde531461057a57600080fd5b8063130a2c3c116103b7578063130a2c3c146104b757806318160ddd146104d95780631a8145bb146104f85780631d7778561461050e57600080fd5b806306fdde03146103f45780630758d9241461041f578063095ea7b31461045757806310d5de531461048757600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b50610409610ba3565b6040516104169190613746565b60405180910390f35b34801561042b57600080fd5b5060095461043f906001600160a01b031681565b6040516001600160a01b039091168152602001610416565b34801561046357600080fd5b506104776104723660046137ac565b610c35565b6040519015158152602001610416565b34801561049357600080fd5b506104776104a23660046137d8565b60246020526000908152604090205460ff1681565b3480156104c357600080fd5b506104d76104d236600461380a565b610c4c565b005b3480156104e557600080fd5b506002545b604051908152602001610416565b34801561050457600080fd5b506104ea60205481565b34801561051a57600080fd5b506104ea60225481565b34801561053057600080fd5b506104d761053f366004613966565b610cf6565b34801561055057600080fd5b5061047761055f366004613a28565b610e4f565b34801561057057600080fd5b506104ea601f5481565b34801561058657600080fd5b506104ea60215481565b34801561059c57600080fd5b506104d76105ab3660046137d8565b610ef9565b3480156105bc57600080fd5b506104d76105cb366004613a69565b610fa7565b3480156105dc57600080fd5b506104d76105eb366004613a82565b6110b4565b3480156105fc57600080fd5b5060405160128152602001610416565b34801561061857600080fd5b506104776106273660046137ac565b611167565b34801561063857600080fd5b50600a5461043f906001600160a01b031681565b34801561065857600080fd5b506104ea601b5481565b34801561066e57600080fd5b506012546104779060ff1681565b34801561068857600080fd5b506104d76111a3565b34801561069d57600080fd5b50600f544310610477565b3480156106b457600080fd5b506104ea60075481565b3480156106ca57600080fd5b506104ea601a5481565b3480156106e057600080fd5b506104ea60115481565b3480156106f657600080fd5b506012546104779062010000900460ff1681565b34801561071657600080fd5b506104ea6107253660046137d8565b6112ac565b34801561073657600080fd5b506104d76112c7565b34801561074b57600080fd5b506104d761133b565b34801561076057600080fd5b506104d761076f366004613ab4565b6113a6565b34801561078057600080fd5b506104d761078f366004613a69565b61146e565b3480156107a057600080fd5b506104776107af366004613aed565b611541565b3480156107c057600080fd5b506104776107cf3660046137d8565b60106020526000908152604090205460ff1681565b3480156107f057600080fd5b506104ea60065481565b34801561080657600080fd5b506104ea60185481565b34801561081c57600080fd5b506005546001600160a01b031661043f565b34801561083a57600080fd5b5061040961174a565b34801561084f57600080fd5b506104d761085e366004613ab4565b611759565b34801561086f57600080fd5b5061047761087e3660046137ac565b61184d565b34801561088f57600080fd5b506104ea600f5481565b3480156108a557600080fd5b506104776108b43660046137ac565b6118e6565b3480156108c557600080fd5b506104ea60085481565b3480156108db57600080fd5b506104ea601e5481565b3480156108f157600080fd5b506104ea60165481565b34801561090757600080fd5b506104776109163660046137d8565b60256020526000908152604090205460ff1681565b34801561093757600080fd5b5060125461047790610100900460ff1681565b34801561095657600080fd5b506104d7610965366004613ab4565b6118f3565b34801561097657600080fd5b506104d7610985366004613a69565b61197c565b34801561099657600080fd5b506014546104779060ff1681565b3480156109b057600080fd5b506104ea601d5481565b3480156109c657600080fd5b506104d76109d5366004613a69565b611a85565b3480156109e657600080fd5b506104d76109f53660046137d8565b611bd0565b348015610a0657600080fd5b506104ea60155481565b348015610a1c57600080fd5b506104d7610a2b366004613a69565b611c80565b348015610a3c57600080fd5b506104ea610a4b366004613aed565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a8257600080fd5b506104d7611d87565b348015610a9757600080fd5b506104ea600b5481565b348015610aad57600080fd5b506104ea60195481565b348015610ac357600080fd5b506104d7610ad2366004613a82565b611ec2565b348015610ae357600080fd5b506104d7610af2366004613ab4565b611f70565b348015610b0357600080fd5b506104d7611fc5565b348015610b1857600080fd5b506104ea600e5481565b348015610b2e57600080fd5b506104ea60175481565b348015610b4457600080fd5b506104d7610b533660046137d8565b611ffb565b348015610b6457600080fd5b506104d76120e6565b348015610b7957600080fd5b506104ea601c5481565b348015610b8f57600080fd5b506104d7610b9e366004613a69565b612152565b606060038054610bb290613b1b565b80601f0160208091040260200160405190810160405280929190818152602001828054610bde90613b1b565b8015610c2b5780601f10610c0057610100808354040283529160200191610c2b565b820191906000526020600020905b815481529060010190602001808311610c0e57829003601f168201915b5050505050905090565b6000610c42338484612396565b5060015b92915050565b6005546001600160a01b03163314610c7f5760405162461bcd60e51b8152600401610c7690613b55565b60405180910390fd5b60005b82811015610cf0578160106000868685818110610ca157610ca1613b8a565b9050602002016020810190610cb691906137d8565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610ce881613bb6565b915050610c82565b50505050565b6005546001600160a01b03163314610d205760405162461bcd60e51b8152600401610c7690613b55565b8051825114610d715760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610c76565b610258825110610de25760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610c76565b60005b8251811015610e4a576000838281518110610e0257610e02613b8a565b602002602001015190506000838381518110610e2057610e20613b8a565b60200260200101519050610e353383836124bb565b50508080610e4290613bb6565b915050610de5565b505050565b6000610e5c848484612610565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ee15760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c76565b610eee8533858403612396565b506001949350505050565b6005546001600160a01b03163314610f235760405162461bcd60e51b8152600401610c7690613b55565b6001600160a01b038116610f855760405162461bcd60e51b815260206004820152602360248201527f5f4465765465616d4164647265737320616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610c76565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610fd15760405162461bcd60e51b8152600401610c7690613b55565b670de0b6b3a76400006103e8610fe660025490565b610ff1906002613bcf565b610ffb9190613be6565b6110059190613be6565b8110156110665760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c76565b61107881670de0b6b3a7640000613bcf565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b031633146110de5760405162461bcd60e51b8152600401610c7690613b55565b601684905560178390556018829055601981905580826110fe8587613c08565b6111089190613c08565b6111129190613c08565b6015819055600f1015610cf05760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610c76565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c4291859061119e908690613c08565b612396565b6005546001600160a01b031633146111cd5760405162461bcd60e51b8152600401610c7690613b55565b600b546111d9306112ac565b101561124f576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610c76565b600a805460ff60a01b1916600160a01b17905561126a613145565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146112f15760405162461bcd60e51b8152600401610c7690613b55565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146113655760405162461bcd60e51b8152600401610c7690613b55565b6012805460ff199081169091556014805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146113d05760405162461bcd60e51b8152600401610c7690613b55565b8061144357600a546001600160a01b03908116908316036114435760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c76565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114985760405162461bcd60e51b8152600401610c7690613b55565b601254610100900460ff16156114f05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c76565b6012805462ffff0019166201010017905543600e819055611512908290613c08565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b0316331461156e5760405162461bcd60e51b8152600401610c7690613b55565b6001600160a01b0383166115c45760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c76565b306001600160a01b0384160361161c5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c76565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611663573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116879190613c1b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156116da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fe9190613c34565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610bb290613b1b565b6005546001600160a01b031633146117835760405162461bcd60e51b8152600401610c7690613b55565b600a546001600160a01b03908116908316036118075760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c76565b6118118282613384565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118cf5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c76565b6118dc3385858403612396565b5060019392505050565b6000610c42338484612610565b6005546001600160a01b0316331461191d5760405162461bcd60e51b8152600401610c7690613b55565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146119a65760405162461bcd60e51b8152600401610c7690613b55565b670de0b6b3a76400006103e86119bb60025490565b6119c6906003613bcf565b6119d09190613be6565b6119da9190613be6565b811015611a3e5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c76565b611a5081670de0b6b3a7640000613bcf565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016110a9565b6005546001600160a01b03163314611aaf5760405162461bcd60e51b8152600401610c7690613b55565b620186a0611abc60025490565b611ac7906001613bcf565b611ad19190613be6565b811015611b3e5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c76565b6103e8611b4a60025490565b611b55906001613bcf565b611b5f9190613be6565b811115611bcb5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c76565b600b55565b6005546001600160a01b03163314611bfa5760405162461bcd60e51b8152600401610c7690613b55565b6001600160a01b038116611c5e5760405162461bcd60e51b815260206004820152602560248201527f5f4f7065726174696f6e4164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c76565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611caa5760405162461bcd60e51b8152600401610c7690613b55565b670de0b6b3a76400006103e8611cbf60025490565b611cca906002613bcf565b611cd49190613be6565b611cde9190613be6565b811015611d405760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c76565b611d5281670de0b6b3a7640000613bcf565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016110a9565b6005546001600160a01b03163314611db15760405162461bcd60e51b8152600401610c7690613b55565b6000601b819055601c819055601d819055601e81905580611dd28180613c08565b611ddc9190613c08565b611de69190613c08565b601a819055601e1015611e3b5760405162461bcd60e51b815260206004820152601860248201527f4b656570206665657320617420334f25206f72206c65737300000000000000006044820152606401610c76565b6000601681905560178190556018819055601981905580611e5c8180613c08565b611e669190613c08565b611e709190613c08565b6015819055601e1015611ec05760405162461bcd60e51b81526020600482015260186024820152774b656570206665657320617420333025206f72206c65737360401b6044820152606401610c76565b565b6005546001600160a01b03163314611eec5760405162461bcd60e51b8152600401610c7690613b55565b601b849055601c839055601d829055601e8190558082611f0c8587613c08565b611f169190613c08565b611f209190613c08565b601a819055601e1015610cf05760405162461bcd60e51b81526020600482015260186024820152774b656570206665657320617420333025206f72206c65737360401b6044820152606401610c76565b6005546001600160a01b03163314611f9a5760405162461bcd60e51b8152600401610c7690613b55565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611fef5760405162461bcd60e51b8152600401610c7690613b55565b6014805460ff19169055565b6005546001600160a01b031633146120255760405162461bcd60e51b8152600401610c7690613b55565b6001600160a01b03811661208a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c76565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146121105760405162461bcd60e51b8152600401610c7690613b55565b604051600090339047908381818185875af1925050503d8060008114610cf0576040519150601f19603f3d011682016040523d82523d6000602084013e610cf0565b6005546001600160a01b0316331461217c5760405162461bcd60e51b8152600401610c7690613b55565b678ac7230489e8000081111561220a5760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610c76565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612274573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122989190613c51565b816000815181106122ab576122ab613b8a565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106122df576122df613b8a565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de9590849061232790600090869061dead904290600401613cb2565b6000604051808303818588803b15801561234057600080fd5b505af1158015612354573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205688260405161238a91815260200190565b60405180910390a15050565b6001600160a01b0383166123f85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c76565b6001600160a01b0382166124595760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c76565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166124e15760405162461bcd60e51b8152600401610c7690613ce7565b6001600160a01b0382166125075760405162461bcd60e51b8152600401610c7690613d2c565b6001600160a01b0383166000908152602081905260409020548181101561257f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c76565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906125b6908490613c08565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161260291815260200190565b60405180910390a350505050565b6001600160a01b0383166126365760405162461bcd60e51b8152600401610c7690613ce7565b6001600160a01b03821661265c5760405162461bcd60e51b8152600401610c7690613d2c565b600081116126ac5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c76565b601254610100900460ff1661273f576001600160a01b03831660009081526023602052604090205460ff16806126fa57506001600160a01b03821660009081526023602052604090205460ff165b61273f5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c76565b600f5415612812576001600160a01b03831660009081526010602052604090205460ff16158061277c57506005546001600160a01b038381169116145b8061279157506001600160a01b03821661dead145b6128125760405162461bcd60e51b815260206004820152604660248201527f626f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610c76565b60125460ff1615612c0e576005546001600160a01b0384811691161480159061284957506005546001600160a01b03838116911614155b801561285d57506001600160a01b03821615155b801561287457506001600160a01b03821661dead14155b801561289957506001600160a01b03831660009081526023602052604090205460ff16155b80156128be57506001600160a01b03821660009081526023602052604090205460ff16155b15612c0e5760145460ff16156129d7576009546001600160a01b038381169116148015906128fa5750600a546001600160a01b03838116911614155b156129d75761290a600243613d6f565b32600090815260136020526040902054108015612948575061292d600243613d6f565b6001600160a01b038316600090815260136020526040902054105b6129b25760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c76565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526025602052604090205460ff168015612a1857506001600160a01b03821660009081526024602052604090205460ff16155b15612ae457600654811115612a805760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c76565b600854612a8c836112ac565b612a969083613c08565b1115612adf5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c76565b612c0e565b6001600160a01b03821660009081526025602052604090205460ff168015612b2557506001600160a01b03831660009081526024602052604090205460ff16155b15612b8f57600754811115612adf5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c76565b6001600160a01b03821660009081526024602052604090205460ff16612c0e57600854612bbb836112ac565b612bc59083613c08565b1115612c0e5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c76565b6000612c19306112ac565b600b5490915081108015908190612c38575060125462010000900460ff165b8015612c4e5750600a54600160a01b900460ff16155b8015612c7357506001600160a01b03851660009081526025602052604090205460ff16155b8015612c9857506001600160a01b03851660009081526023602052604090205460ff16155b8015612cbd57506001600160a01b03841660009081526023602052604090205460ff16155b15612ceb57600a805460ff60a01b1916600160a01b179055612cdd613145565b600a805460ff60a01b191690555b6001600160a01b03851660009081526023602052604090205460019060ff1680612d2d57506001600160a01b03851660009081526023602052604090205460ff165b15612d36575060005b6000811561313157600f5443108015612d6757506001600160a01b03871660009081526025602052604090205460ff165b8015612d8c57506001600160a01b03861660009081526025602052604090205460ff16155b8015612d9a57506000601554115b15612f1a576001600160a01b03861660009081526010602052604090205460ff16612e3a576001600160a01b0386166000908152601060205260408120805460ff191660019081179091556011805491929091612df8908490613c08565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612e47866063613bcf565b612e519190613be6565b905060155460175482612e649190613bcf565b612e6e9190613be6565b60206000828254612e7f9190613c08565b9091555050601554601654612e949083613bcf565b612e9e9190613be6565b601f6000828254612eaf9190613c08565b9091555050601554601854612ec49083613bcf565b612ece9190613be6565b60216000828254612edf9190613c08565b9091555050601554601954612ef49083613bcf565b612efe9190613be6565b60226000828254612f0f9190613c08565b909155506131139050565b6001600160a01b03861660009081526025602052604090205460ff168015612f4457506000601a54115b15613006576064601a5486612f599190613bcf565b612f639190613be6565b9050601a54601c5482612f769190613bcf565b612f809190613be6565b60206000828254612f919190613c08565b9091555050601a54601b54612fa69083613bcf565b612fb09190613be6565b601f6000828254612fc19190613c08565b9091555050601a54601d54612fd69083613bcf565b612fe09190613be6565b60216000828254612ff19190613c08565b9091555050601a54601e54612ef49083613bcf565b6001600160a01b03871660009081526025602052604090205460ff16801561303057506000601554115b15613113576064601554866130459190613bcf565b61304f9190613be6565b9050601554601754826130629190613bcf565b61306c9190613be6565b6020600082825461307d9190613c08565b90915550506015546016546130929083613bcf565b61309c9190613be6565b601f60008282546130ad9190613c08565b90915550506015546018546130c29083613bcf565b6130cc9190613be6565b602160008282546130dd9190613c08565b90915550506015546019546130f29083613bcf565b6130fc9190613be6565b6022600082825461310d9190613c08565b90915550505b8015613124576131248730836124bb565b61312e8186613d6f565b94505b61313c8787876124bb565b50505050505050565b6000602254118015613161575060225461315e306112ac565b10155b1561317257613172306022546133b2565b60006022819055613182306112ac565b90506000602154601f546020546131999190613c08565b6131a39190613c08565b90508115806131b0575080155b156131b9575050565b600b546131c7906014613bcf565b8211156131df57600b546131dc906014613bcf565b91505b600080600283602054866131f39190613bcf565b6131fd9190613be6565b6132079190613be6565b905061321b6132168286613d6f565b6134dc565b6020544790819060009061323190600290613be6565b61323b9087613d6f565b601f546132489085613bcf565b6132529190613be6565b9050600060026020546132659190613be6565b61326f9088613d6f565b60215461327c9086613bcf565b6132869190613be6565b90506132928183613c08565b61329c9084613d6f565b60006020819055601f8190556021819055602255925084158015906132c15750600083115b156132d0576132d08584613636565b600d546040516001600160a01b03909116908290600081818185875af1925050503d806000811461331d576040519150601f19603f3d011682016040523d82523d6000602084013e613322565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114613372576040519150601f19603f3d011682016040523d82523d6000602084013e613377565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602560205260409020805460ff191682151517905561181182826136ea565b6001600160a01b0382166134125760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c76565b6001600160a01b038216600090815260208190526040902054818110156134865760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c76565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016124ae565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061351157613511613b8a565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561356a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061358e9190613c51565b816001815181106135a1576135a1613b8a565b6001600160a01b0392831660209182029290920101526009546135c79130911684612396565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613600908590600090869030904290600401613d82565b600060405180830381600087803b15801561361a57600080fd5b505af115801561362e573d6000803e3d6000fd5b505050505050565b60095461364e9030906001600160a01b031684612396565b600954600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156136be573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136e39190613dbe565b5050505050565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910161238a565b600060208083528351808285015260005b8181101561377357858101830151858201604001528201613757565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146137a957600080fd5b50565b600080604083850312156137bf57600080fd5b82356137ca81613794565b946020939093013593505050565b6000602082840312156137ea57600080fd5b81356137f581613794565b9392505050565b80151581146137a957600080fd5b60008060006040848603121561381f57600080fd5b833567ffffffffffffffff8082111561383757600080fd5b818601915086601f83011261384b57600080fd5b81358181111561385a57600080fd5b8760208260051b850101111561386f57600080fd5b60209283019550935050840135613885816137fc565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156138cf576138cf613890565b604052919050565b600067ffffffffffffffff8211156138f1576138f1613890565b5060051b60200190565b600082601f83011261390c57600080fd5b8135602061392161391c836138d7565b6138a6565b82815260059290921b8401810191818101908684111561394057600080fd5b8286015b8481101561395b5780358352918301918301613944565b509695505050505050565b6000806040838503121561397957600080fd5b823567ffffffffffffffff8082111561399157600080fd5b818501915085601f8301126139a557600080fd5b813560206139b561391c836138d7565b82815260059290921b840181019181810190898411156139d457600080fd5b948201945b838610156139fb5785356139ec81613794565b825294820194908201906139d9565b96505086013592505080821115613a1157600080fd5b50613a1e858286016138fb565b9150509250929050565b600080600060608486031215613a3d57600080fd5b8335613a4881613794565b92506020840135613a5881613794565b929592945050506040919091013590565b600060208284031215613a7b57600080fd5b5035919050565b60008060008060808587031215613a9857600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215613ac757600080fd5b8235613ad281613794565b91506020830135613ae2816137fc565b809150509250929050565b60008060408385031215613b0057600080fd5b8235613b0b81613794565b91506020830135613ae281613794565b600181811c90821680613b2f57607f821691505b602082108103613b4f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613bc857613bc8613ba0565b5060010190565b8082028115828204841417610c4657610c46613ba0565b600082613c0357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c4657610c46613ba0565b600060208284031215613c2d57600080fd5b5051919050565b600060208284031215613c4657600080fd5b81516137f5816137fc565b600060208284031215613c6357600080fd5b81516137f581613794565b600081518084526020808501945080840160005b83811015613ca75781516001600160a01b031687529582019590820190600101613c82565b509495945050505050565b848152608060208201526000613ccb6080830186613c6e565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c4657610c46613ba0565b85815284602082015260a060408201526000613da160a0830186613c6e565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613dd357600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220d023a1b01a58bc4e29e99549be0d26633641426f9174cb810c0be62072ee5b3564736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05375626d697474656420666f7220766572696669636174696f6e2061742045746865727363616e2e696f206f6e20323032312d30322d32362a2f2f204064657620496e74657266616365206f6620746865204552433230207374616e6461726420617320646566696e656420696e20746865204549502e20446f6573206e6f7420696e636c7564652a20746865206f7074696f6e616c2066756e6374696f6e733b20746f20616363657373207468656d207365652060455243323044657461696c6564602e2a2f696e7465726661636520494552433230207b2f2a2a202a20406465762052657475726e732074686520616d6f756e74206f6620746f6b656e7320696e206578697374656e63652e20202a2f66756e6374696f6e20746f74616c537570706c7928292065787465726e616c20766965772072657475726e73202875696e74323536293b

Deployed Bytecode

0x6080604052600436106103e85760003560e01c806388e765ff11610208578063d257b34f11610118578063e7ad9fcd116100ab578063f11a24d31161007a578063f11a24d314610b22578063f2fde38b14610b38578063f5648a4f14610b58578063f637434214610b6d578063fc155d1d14610b8357600080fd5b8063e7ad9fcd14610ab7578063e800dff714610ad7578063e884f26014610af7578063ee40166e14610b0c57600080fd5b8063dd62ed3e116100e7578063dd62ed3e14610a30578063e2cd5fcd14610a76578063e2f4560514610a8b578063e71dc3f514610aa157600080fd5b8063d257b34f146109ba578063d53ce956146109da578063d85ba063146109fa578063dc3f0d0f14610a1057600080fd5b8063aa4bde281161019b578063bbc0c7421161016a578063bbc0c7421461092b578063c02466681461094a578063c18bc1951461096a578063c876d0b91461098a578063cd207777146109a457600080fd5b8063aa4bde28146108b9578063adb873bd146108cf578063b5aa1d6c146108e5578063b62496f5146108fb57600080fd5b80639a7a23d6116101d75780639a7a23d614610843578063a457c2d714610863578063a62068ce14610883578063a9059cbb1461089957600080fd5b806388e765ff146107e45780638b43b085146107fa5780638da5cb5b1461081057806395d89b411461082e57600080fd5b806339509351116103035780636b0a894c11610296578063751039fc11610265578063751039fc1461073f5780637571336a1461075457806382aa7c68146107745780638366e79a1461079457806385ecfd28146107b457600080fd5b80636b0a894c146106d45780636ddd1713146106ea57806370a082311461070a578063715018a61461072a57600080fd5b806351f205e4116102d257806351f205e41461067c57806358a6d5311461069157806366d602ae146106a85780636a486a8e146106be57600080fd5b8063395093511461060c578063452ed4f11461062c5780634992e0e61461064c5780634a62bb651461066257600080fd5b80632307b4411161037b5780632760072b1161034a5780632760072b146105905780632be32b61146105b05780632e6ed7ef146105d0578063313ce567146105f057600080fd5b80632307b4411461052457806323b872dd146105445780632580ad8014610564578063273dde531461057a57600080fd5b8063130a2c3c116103b7578063130a2c3c146104b757806318160ddd146104d95780631a8145bb146104f85780631d7778561461050e57600080fd5b806306fdde03146103f45780630758d9241461041f578063095ea7b31461045757806310d5de531461048757600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b50610409610ba3565b6040516104169190613746565b60405180910390f35b34801561042b57600080fd5b5060095461043f906001600160a01b031681565b6040516001600160a01b039091168152602001610416565b34801561046357600080fd5b506104776104723660046137ac565b610c35565b6040519015158152602001610416565b34801561049357600080fd5b506104776104a23660046137d8565b60246020526000908152604090205460ff1681565b3480156104c357600080fd5b506104d76104d236600461380a565b610c4c565b005b3480156104e557600080fd5b506002545b604051908152602001610416565b34801561050457600080fd5b506104ea60205481565b34801561051a57600080fd5b506104ea60225481565b34801561053057600080fd5b506104d761053f366004613966565b610cf6565b34801561055057600080fd5b5061047761055f366004613a28565b610e4f565b34801561057057600080fd5b506104ea601f5481565b34801561058657600080fd5b506104ea60215481565b34801561059c57600080fd5b506104d76105ab3660046137d8565b610ef9565b3480156105bc57600080fd5b506104d76105cb366004613a69565b610fa7565b3480156105dc57600080fd5b506104d76105eb366004613a82565b6110b4565b3480156105fc57600080fd5b5060405160128152602001610416565b34801561061857600080fd5b506104776106273660046137ac565b611167565b34801561063857600080fd5b50600a5461043f906001600160a01b031681565b34801561065857600080fd5b506104ea601b5481565b34801561066e57600080fd5b506012546104779060ff1681565b34801561068857600080fd5b506104d76111a3565b34801561069d57600080fd5b50600f544310610477565b3480156106b457600080fd5b506104ea60075481565b3480156106ca57600080fd5b506104ea601a5481565b3480156106e057600080fd5b506104ea60115481565b3480156106f657600080fd5b506012546104779062010000900460ff1681565b34801561071657600080fd5b506104ea6107253660046137d8565b6112ac565b34801561073657600080fd5b506104d76112c7565b34801561074b57600080fd5b506104d761133b565b34801561076057600080fd5b506104d761076f366004613ab4565b6113a6565b34801561078057600080fd5b506104d761078f366004613a69565b61146e565b3480156107a057600080fd5b506104776107af366004613aed565b611541565b3480156107c057600080fd5b506104776107cf3660046137d8565b60106020526000908152604090205460ff1681565b3480156107f057600080fd5b506104ea60065481565b34801561080657600080fd5b506104ea60185481565b34801561081c57600080fd5b506005546001600160a01b031661043f565b34801561083a57600080fd5b5061040961174a565b34801561084f57600080fd5b506104d761085e366004613ab4565b611759565b34801561086f57600080fd5b5061047761087e3660046137ac565b61184d565b34801561088f57600080fd5b506104ea600f5481565b3480156108a557600080fd5b506104776108b43660046137ac565b6118e6565b3480156108c557600080fd5b506104ea60085481565b3480156108db57600080fd5b506104ea601e5481565b3480156108f157600080fd5b506104ea60165481565b34801561090757600080fd5b506104776109163660046137d8565b60256020526000908152604090205460ff1681565b34801561093757600080fd5b5060125461047790610100900460ff1681565b34801561095657600080fd5b506104d7610965366004613ab4565b6118f3565b34801561097657600080fd5b506104d7610985366004613a69565b61197c565b34801561099657600080fd5b506014546104779060ff1681565b3480156109b057600080fd5b506104ea601d5481565b3480156109c657600080fd5b506104d76109d5366004613a69565b611a85565b3480156109e657600080fd5b506104d76109f53660046137d8565b611bd0565b348015610a0657600080fd5b506104ea60155481565b348015610a1c57600080fd5b506104d7610a2b366004613a69565b611c80565b348015610a3c57600080fd5b506104ea610a4b366004613aed565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a8257600080fd5b506104d7611d87565b348015610a9757600080fd5b506104ea600b5481565b348015610aad57600080fd5b506104ea60195481565b348015610ac357600080fd5b506104d7610ad2366004613a82565b611ec2565b348015610ae357600080fd5b506104d7610af2366004613ab4565b611f70565b348015610b0357600080fd5b506104d7611fc5565b348015610b1857600080fd5b506104ea600e5481565b348015610b2e57600080fd5b506104ea60175481565b348015610b4457600080fd5b506104d7610b533660046137d8565b611ffb565b348015610b6457600080fd5b506104d76120e6565b348015610b7957600080fd5b506104ea601c5481565b348015610b8f57600080fd5b506104d7610b9e366004613a69565b612152565b606060038054610bb290613b1b565b80601f0160208091040260200160405190810160405280929190818152602001828054610bde90613b1b565b8015610c2b5780601f10610c0057610100808354040283529160200191610c2b565b820191906000526020600020905b815481529060010190602001808311610c0e57829003601f168201915b5050505050905090565b6000610c42338484612396565b5060015b92915050565b6005546001600160a01b03163314610c7f5760405162461bcd60e51b8152600401610c7690613b55565b60405180910390fd5b60005b82811015610cf0578160106000868685818110610ca157610ca1613b8a565b9050602002016020810190610cb691906137d8565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610ce881613bb6565b915050610c82565b50505050565b6005546001600160a01b03163314610d205760405162461bcd60e51b8152600401610c7690613b55565b8051825114610d715760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610c76565b610258825110610de25760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610c76565b60005b8251811015610e4a576000838281518110610e0257610e02613b8a565b602002602001015190506000838381518110610e2057610e20613b8a565b60200260200101519050610e353383836124bb565b50508080610e4290613bb6565b915050610de5565b505050565b6000610e5c848484612610565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ee15760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c76565b610eee8533858403612396565b506001949350505050565b6005546001600160a01b03163314610f235760405162461bcd60e51b8152600401610c7690613b55565b6001600160a01b038116610f855760405162461bcd60e51b815260206004820152602360248201527f5f4465765465616d4164647265737320616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610c76565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610fd15760405162461bcd60e51b8152600401610c7690613b55565b670de0b6b3a76400006103e8610fe660025490565b610ff1906002613bcf565b610ffb9190613be6565b6110059190613be6565b8110156110665760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c76565b61107881670de0b6b3a7640000613bcf565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b031633146110de5760405162461bcd60e51b8152600401610c7690613b55565b601684905560178390556018829055601981905580826110fe8587613c08565b6111089190613c08565b6111129190613c08565b6015819055600f1015610cf05760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610c76565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c4291859061119e908690613c08565b612396565b6005546001600160a01b031633146111cd5760405162461bcd60e51b8152600401610c7690613b55565b600b546111d9306112ac565b101561124f576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610c76565b600a805460ff60a01b1916600160a01b17905561126a613145565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146112f15760405162461bcd60e51b8152600401610c7690613b55565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146113655760405162461bcd60e51b8152600401610c7690613b55565b6012805460ff199081169091556014805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146113d05760405162461bcd60e51b8152600401610c7690613b55565b8061144357600a546001600160a01b03908116908316036114435760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c76565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114985760405162461bcd60e51b8152600401610c7690613b55565b601254610100900460ff16156114f05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c76565b6012805462ffff0019166201010017905543600e819055611512908290613c08565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b0316331461156e5760405162461bcd60e51b8152600401610c7690613b55565b6001600160a01b0383166115c45760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c76565b306001600160a01b0384160361161c5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c76565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611663573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116879190613c1b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156116da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fe9190613c34565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610bb290613b1b565b6005546001600160a01b031633146117835760405162461bcd60e51b8152600401610c7690613b55565b600a546001600160a01b03908116908316036118075760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c76565b6118118282613384565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118cf5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c76565b6118dc3385858403612396565b5060019392505050565b6000610c42338484612610565b6005546001600160a01b0316331461191d5760405162461bcd60e51b8152600401610c7690613b55565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146119a65760405162461bcd60e51b8152600401610c7690613b55565b670de0b6b3a76400006103e86119bb60025490565b6119c6906003613bcf565b6119d09190613be6565b6119da9190613be6565b811015611a3e5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c76565b611a5081670de0b6b3a7640000613bcf565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016110a9565b6005546001600160a01b03163314611aaf5760405162461bcd60e51b8152600401610c7690613b55565b620186a0611abc60025490565b611ac7906001613bcf565b611ad19190613be6565b811015611b3e5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c76565b6103e8611b4a60025490565b611b55906001613bcf565b611b5f9190613be6565b811115611bcb5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c76565b600b55565b6005546001600160a01b03163314611bfa5760405162461bcd60e51b8152600401610c7690613b55565b6001600160a01b038116611c5e5760405162461bcd60e51b815260206004820152602560248201527f5f4f7065726174696f6e4164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c76565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611caa5760405162461bcd60e51b8152600401610c7690613b55565b670de0b6b3a76400006103e8611cbf60025490565b611cca906002613bcf565b611cd49190613be6565b611cde9190613be6565b811015611d405760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c76565b611d5281670de0b6b3a7640000613bcf565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016110a9565b6005546001600160a01b03163314611db15760405162461bcd60e51b8152600401610c7690613b55565b6000601b819055601c819055601d819055601e81905580611dd28180613c08565b611ddc9190613c08565b611de69190613c08565b601a819055601e1015611e3b5760405162461bcd60e51b815260206004820152601860248201527f4b656570206665657320617420334f25206f72206c65737300000000000000006044820152606401610c76565b6000601681905560178190556018819055601981905580611e5c8180613c08565b611e669190613c08565b611e709190613c08565b6015819055601e1015611ec05760405162461bcd60e51b81526020600482015260186024820152774b656570206665657320617420333025206f72206c65737360401b6044820152606401610c76565b565b6005546001600160a01b03163314611eec5760405162461bcd60e51b8152600401610c7690613b55565b601b849055601c839055601d829055601e8190558082611f0c8587613c08565b611f169190613c08565b611f209190613c08565b601a819055601e1015610cf05760405162461bcd60e51b81526020600482015260186024820152774b656570206665657320617420333025206f72206c65737360401b6044820152606401610c76565b6005546001600160a01b03163314611f9a5760405162461bcd60e51b8152600401610c7690613b55565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611fef5760405162461bcd60e51b8152600401610c7690613b55565b6014805460ff19169055565b6005546001600160a01b031633146120255760405162461bcd60e51b8152600401610c7690613b55565b6001600160a01b03811661208a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c76565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146121105760405162461bcd60e51b8152600401610c7690613b55565b604051600090339047908381818185875af1925050503d8060008114610cf0576040519150601f19603f3d011682016040523d82523d6000602084013e610cf0565b6005546001600160a01b0316331461217c5760405162461bcd60e51b8152600401610c7690613b55565b678ac7230489e8000081111561220a5760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610c76565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612274573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122989190613c51565b816000815181106122ab576122ab613b8a565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106122df576122df613b8a565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de9590849061232790600090869061dead904290600401613cb2565b6000604051808303818588803b15801561234057600080fd5b505af1158015612354573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205688260405161238a91815260200190565b60405180910390a15050565b6001600160a01b0383166123f85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c76565b6001600160a01b0382166124595760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c76565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166124e15760405162461bcd60e51b8152600401610c7690613ce7565b6001600160a01b0382166125075760405162461bcd60e51b8152600401610c7690613d2c565b6001600160a01b0383166000908152602081905260409020548181101561257f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c76565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906125b6908490613c08565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161260291815260200190565b60405180910390a350505050565b6001600160a01b0383166126365760405162461bcd60e51b8152600401610c7690613ce7565b6001600160a01b03821661265c5760405162461bcd60e51b8152600401610c7690613d2c565b600081116126ac5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c76565b601254610100900460ff1661273f576001600160a01b03831660009081526023602052604090205460ff16806126fa57506001600160a01b03821660009081526023602052604090205460ff165b61273f5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c76565b600f5415612812576001600160a01b03831660009081526010602052604090205460ff16158061277c57506005546001600160a01b038381169116145b8061279157506001600160a01b03821661dead145b6128125760405162461bcd60e51b815260206004820152604660248201527f626f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610c76565b60125460ff1615612c0e576005546001600160a01b0384811691161480159061284957506005546001600160a01b03838116911614155b801561285d57506001600160a01b03821615155b801561287457506001600160a01b03821661dead14155b801561289957506001600160a01b03831660009081526023602052604090205460ff16155b80156128be57506001600160a01b03821660009081526023602052604090205460ff16155b15612c0e5760145460ff16156129d7576009546001600160a01b038381169116148015906128fa5750600a546001600160a01b03838116911614155b156129d75761290a600243613d6f565b32600090815260136020526040902054108015612948575061292d600243613d6f565b6001600160a01b038316600090815260136020526040902054105b6129b25760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c76565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526025602052604090205460ff168015612a1857506001600160a01b03821660009081526024602052604090205460ff16155b15612ae457600654811115612a805760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c76565b600854612a8c836112ac565b612a969083613c08565b1115612adf5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c76565b612c0e565b6001600160a01b03821660009081526025602052604090205460ff168015612b2557506001600160a01b03831660009081526024602052604090205460ff16155b15612b8f57600754811115612adf5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c76565b6001600160a01b03821660009081526024602052604090205460ff16612c0e57600854612bbb836112ac565b612bc59083613c08565b1115612c0e5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c76565b6000612c19306112ac565b600b5490915081108015908190612c38575060125462010000900460ff165b8015612c4e5750600a54600160a01b900460ff16155b8015612c7357506001600160a01b03851660009081526025602052604090205460ff16155b8015612c9857506001600160a01b03851660009081526023602052604090205460ff16155b8015612cbd57506001600160a01b03841660009081526023602052604090205460ff16155b15612ceb57600a805460ff60a01b1916600160a01b179055612cdd613145565b600a805460ff60a01b191690555b6001600160a01b03851660009081526023602052604090205460019060ff1680612d2d57506001600160a01b03851660009081526023602052604090205460ff165b15612d36575060005b6000811561313157600f5443108015612d6757506001600160a01b03871660009081526025602052604090205460ff165b8015612d8c57506001600160a01b03861660009081526025602052604090205460ff16155b8015612d9a57506000601554115b15612f1a576001600160a01b03861660009081526010602052604090205460ff16612e3a576001600160a01b0386166000908152601060205260408120805460ff191660019081179091556011805491929091612df8908490613c08565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612e47866063613bcf565b612e519190613be6565b905060155460175482612e649190613bcf565b612e6e9190613be6565b60206000828254612e7f9190613c08565b9091555050601554601654612e949083613bcf565b612e9e9190613be6565b601f6000828254612eaf9190613c08565b9091555050601554601854612ec49083613bcf565b612ece9190613be6565b60216000828254612edf9190613c08565b9091555050601554601954612ef49083613bcf565b612efe9190613be6565b60226000828254612f0f9190613c08565b909155506131139050565b6001600160a01b03861660009081526025602052604090205460ff168015612f4457506000601a54115b15613006576064601a5486612f599190613bcf565b612f639190613be6565b9050601a54601c5482612f769190613bcf565b612f809190613be6565b60206000828254612f919190613c08565b9091555050601a54601b54612fa69083613bcf565b612fb09190613be6565b601f6000828254612fc19190613c08565b9091555050601a54601d54612fd69083613bcf565b612fe09190613be6565b60216000828254612ff19190613c08565b9091555050601a54601e54612ef49083613bcf565b6001600160a01b03871660009081526025602052604090205460ff16801561303057506000601554115b15613113576064601554866130459190613bcf565b61304f9190613be6565b9050601554601754826130629190613bcf565b61306c9190613be6565b6020600082825461307d9190613c08565b90915550506015546016546130929083613bcf565b61309c9190613be6565b601f60008282546130ad9190613c08565b90915550506015546018546130c29083613bcf565b6130cc9190613be6565b602160008282546130dd9190613c08565b90915550506015546019546130f29083613bcf565b6130fc9190613be6565b6022600082825461310d9190613c08565b90915550505b8015613124576131248730836124bb565b61312e8186613d6f565b94505b61313c8787876124bb565b50505050505050565b6000602254118015613161575060225461315e306112ac565b10155b1561317257613172306022546133b2565b60006022819055613182306112ac565b90506000602154601f546020546131999190613c08565b6131a39190613c08565b90508115806131b0575080155b156131b9575050565b600b546131c7906014613bcf565b8211156131df57600b546131dc906014613bcf565b91505b600080600283602054866131f39190613bcf565b6131fd9190613be6565b6132079190613be6565b905061321b6132168286613d6f565b6134dc565b6020544790819060009061323190600290613be6565b61323b9087613d6f565b601f546132489085613bcf565b6132529190613be6565b9050600060026020546132659190613be6565b61326f9088613d6f565b60215461327c9086613bcf565b6132869190613be6565b90506132928183613c08565b61329c9084613d6f565b60006020819055601f8190556021819055602255925084158015906132c15750600083115b156132d0576132d08584613636565b600d546040516001600160a01b03909116908290600081818185875af1925050503d806000811461331d576040519150601f19603f3d011682016040523d82523d6000602084013e613322565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114613372576040519150601f19603f3d011682016040523d82523d6000602084013e613377565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602560205260409020805460ff191682151517905561181182826136ea565b6001600160a01b0382166134125760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c76565b6001600160a01b038216600090815260208190526040902054818110156134865760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c76565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016124ae565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061351157613511613b8a565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561356a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061358e9190613c51565b816001815181106135a1576135a1613b8a565b6001600160a01b0392831660209182029290920101526009546135c79130911684612396565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613600908590600090869030904290600401613d82565b600060405180830381600087803b15801561361a57600080fd5b505af115801561362e573d6000803e3d6000fd5b505050505050565b60095461364e9030906001600160a01b031684612396565b600954600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156136be573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136e39190613dbe565b5050505050565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910161238a565b600060208083528351808285015260005b8181101561377357858101830151858201604001528201613757565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146137a957600080fd5b50565b600080604083850312156137bf57600080fd5b82356137ca81613794565b946020939093013593505050565b6000602082840312156137ea57600080fd5b81356137f581613794565b9392505050565b80151581146137a957600080fd5b60008060006040848603121561381f57600080fd5b833567ffffffffffffffff8082111561383757600080fd5b818601915086601f83011261384b57600080fd5b81358181111561385a57600080fd5b8760208260051b850101111561386f57600080fd5b60209283019550935050840135613885816137fc565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156138cf576138cf613890565b604052919050565b600067ffffffffffffffff8211156138f1576138f1613890565b5060051b60200190565b600082601f83011261390c57600080fd5b8135602061392161391c836138d7565b6138a6565b82815260059290921b8401810191818101908684111561394057600080fd5b8286015b8481101561395b5780358352918301918301613944565b509695505050505050565b6000806040838503121561397957600080fd5b823567ffffffffffffffff8082111561399157600080fd5b818501915085601f8301126139a557600080fd5b813560206139b561391c836138d7565b82815260059290921b840181019181810190898411156139d457600080fd5b948201945b838610156139fb5785356139ec81613794565b825294820194908201906139d9565b96505086013592505080821115613a1157600080fd5b50613a1e858286016138fb565b9150509250929050565b600080600060608486031215613a3d57600080fd5b8335613a4881613794565b92506020840135613a5881613794565b929592945050506040919091013590565b600060208284031215613a7b57600080fd5b5035919050565b60008060008060808587031215613a9857600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215613ac757600080fd5b8235613ad281613794565b91506020830135613ae2816137fc565b809150509250929050565b60008060408385031215613b0057600080fd5b8235613b0b81613794565b91506020830135613ae281613794565b600181811c90821680613b2f57607f821691505b602082108103613b4f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613bc857613bc8613ba0565b5060010190565b8082028115828204841417610c4657610c46613ba0565b600082613c0357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c4657610c46613ba0565b600060208284031215613c2d57600080fd5b5051919050565b600060208284031215613c4657600080fd5b81516137f5816137fc565b600060208284031215613c6357600080fd5b81516137f581613794565b600081518084526020808501945080840160005b83811015613ca75781516001600160a01b031687529582019590820190600101613c82565b509495945050505050565b848152608060208201526000613ccb6080830186613c6e565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c4657610c46613ba0565b85815284602082015260a060408201526000613da160a0830186613c6e565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613dd357600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220d023a1b01a58bc4e29e99549be0d26633641426f9174cb810c0be62072ee5b3564736f6c63430008110033

Deployed Bytecode Sourcemap

10094:20481:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3983:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10241:27;;;;;;;;;;-1:-1:-1;10241:27:0;;;;-1:-1:-1;;;;;10241:27:0;;;;;;-1:-1:-1;;;;;749:32:1;;;731:51;;719:2;704:18;10241:27:0;567:221:1;4897:169:0;;;;;;;;;;-1:-1:-1;4897:169:0;;;;;:::i;:::-;;:::i;:::-;;;1414:14:1;;1407:22;1389:41;;1377:2;1362:18;4897:169:0;1249:187:1;11641:64:0;;;;;;;;;;-1:-1:-1;11641:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15548:207;;;;;;;;;;-1:-1:-1;15548:207:0;;;;;:::i;:::-;;:::i;:::-;;4304:108;;;;;;;;;;-1:-1:-1;4392:12:0;;4304:108;;;2717:25:1;;;2705:2;2690:18;4304:108:0;2571:177:1;11383:33:0;;;;;;;;;;;;;;;;11463:28;;;;;;;;;;;;;;;;17404:618;;;;;;;;;;-1:-1:-1;17404:618:0;;;;;:::i;:::-;;:::i;5074:492::-;;;;;;;;;;-1:-1:-1;5074:492:0;;;;;:::i;:::-;;:::i;11345:31::-;;;;;;;;;;;;;;;;11423:33;;;;;;;;;;;;;;;;29031:219;;;;;;;;;;-1:-1:-1;29031:219:0;;;;;:::i;:::-;;:::i;15922:269::-;;;;;;;;;;-1:-1:-1;15922:269:0;;;;;:::i;:::-;;:::i;18849:448::-;;;;;;;;;;-1:-1:-1;18849:448:0;;;;;:::i;:::-;;:::i;4203:93::-;;;;;;;;;;-1:-1:-1;4203:93:0;;4286:2;6418:36:1;;6406:2;6391:18;4203:93:0;6276:184:1;5574:215:0;;;;;;;;;;-1:-1:-1;5574:215:0;;;;;:::i;:::-;;:::i;10275:21::-;;;;;;;;;;-1:-1:-1;10275:21:0;;;;-1:-1:-1;;;;;10275:21:0;;;11198:29;;;;;;;;;;;;;;;;10639:33;;;;;;;;;;-1:-1:-1;10639:33:0;;;;;;;;29541:312;;;;;;;;;;;;;:::i;25473:120::-;;;;;;;;;;-1:-1:-1;25567:18:0;;25552:12;:33;25473:120;;10167:28;;;;;;;;;;;;;;;;11163;;;;;;;;;;;;;;;;10605:25;;;;;;;;;;;;;;;;10719:31;;;;;;;;;;-1:-1:-1;10719:31:0;;;;;;;;;;;4420:127;;;;;;;;;;-1:-1:-1;4420:127:0;;;;;:::i;:::-;;:::i;8618:150::-;;;;;;;;;;;;;:::i;15260:154::-;;;;;;;;;;;;;:::i;18030:260::-;;;;;;;;;;-1:-1:-1;18030:260:0;;;;;:::i;:::-;;:::i;14878:330::-;;;;;;;;;;-1:-1:-1;14878:330:0;;;;;:::i;:::-;;:::i;28337:456::-;;;;;;;;;;-1:-1:-1;28337:456:0;;;;;:::i;:::-;;:::i;10554:44::-;;;;;;;;;;-1:-1:-1;10554:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10133:27;;;;;;;;;;;;;;;;11092:30;;;;;;;;;;;;;;;;8404:79;;;;;;;;;;-1:-1:-1;8469:6:0;;-1:-1:-1;;;;;8469:6:0;8404:79;;4091:104;;;;;;;;;;;;;:::i;18298:295::-;;;;;;;;;;-1:-1:-1;18298:295:0;;;;;:::i;:::-;;:::i;5797:413::-;;;;;;;;;;-1:-1:-1;5797:413:0;;;;;:::i;:::-;;:::i;10514:33::-;;;;;;;;;;;;;;;;4555:175;;;;;;;;;;-1:-1:-1;4555:175:0;;;;;:::i;:::-;;:::i;10202:30::-;;;;;;;;;;;;;;;;11310:26;;;;;;;;;;;;;;;;11020:28;;;;;;;;;;;;;;;;11863:58;;;;;;;;;;-1:-1:-1;11863:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10679:33;;;;;;;;;;-1:-1:-1;10679:33:0;;;;;;;;;;;20377:182;;;;;;;;;;-1:-1:-1;20377:182:0;;;;;:::i;:::-;;:::i;16481:284::-;;;;;;;;;;-1:-1:-1;16481:284:0;;;;;:::i;:::-;;:::i;10938:39::-;;;;;;;;;;-1:-1:-1;10938:39:0;;;;;;;;11272:31;;;;;;;;;;;;;;;;16835:346;;;;;;;;;;-1:-1:-1;16835:346:0;;;;;:::i;:::-;;:::i;29258:231::-;;;;;;;;;;-1:-1:-1;29258:231:0;;;;;:::i;:::-;;:::i;10986:27::-;;;;;;;;;;;;;;;;16199:274;;;;;;;;;;-1:-1:-1;16199:274:0;;;;;:::i;:::-;;:::i;4738:151::-;;;;;;;;;;-1:-1:-1;4738:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4854:18:0;;;4827:7;4854:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4738:151;19767:602;;;;;;;;;;;;;:::i;10333:33::-;;;;;;;;;;;;;;;;11129:25;;;;;;;;;;;;;;;;19305:454;;;;;;;;;;-1:-1:-1;19305:454:0;;;;;:::i;:::-;;:::i;15422:118::-;;;;;;;;;;-1:-1:-1;15422:118:0;;;;;:::i;:::-;;:::i;15816:98::-;;;;;;;;;;;;;:::i;10437:37::-;;;;;;;;;;;;;;;;11055:30;;;;;;;;;;;;;;;;8776:244;;;;;;;;;;-1:-1:-1;8776:244:0;;;;;:::i;:::-;;:::i;28863:160::-;;;;;;;;;;;;;:::i;11234:31::-;;;;;;;;;;;;;;;;29956:616;;;;;;;;;;-1:-1:-1;29956:616:0;;;;;:::i;:::-;;:::i;3983:100::-;4037:13;4070:5;4063:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3983:100;:::o;4897:169::-;4980:4;4997:39;206:10;5020:7;5029:6;4997:8;:39::i;:::-;-1:-1:-1;5054:4:0;4897:169;;;;;:::o;15548:207::-;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;;;;;;;;;15652:9:::1;15648:100;15667:18:::0;;::::1;15648:100;;;15732:4;15706:11;:23;15718:7;;15726:1;15718:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15706:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;15706:23:0;:30;;-1:-1:-1;;15706:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15687:3;::::1;::::0;::::1;:::i;:::-;;;;15648:100;;;;15548:207:::0;;;:::o;17404:618::-;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;17546:15:::1;:22;17528:7;:14;:40;17520:83;;;::::0;-1:-1:-1;;;17520:83:0;;8805:2:1;17520:83:0::1;::::0;::::1;8787:21:1::0;8844:2;8824:18;;;8817:30;8883:32;8863:18;;;8856:60;8933:18;;17520:83:0::1;8603:354:1::0;17520:83:0::1;17639:3;17622:7;:14;:20;17614:87;;;::::0;-1:-1:-1;;;17614:87:0;;9164:2:1;17614:87:0::1;::::0;::::1;9146:21:1::0;9203:2;9183:18;;;9176:30;9242:34;9222:18;;;9215:62;-1:-1:-1;;;9293:18:1;;;9286:52;9355:19;;17614:87:0::1;8962:418:1::0;17614:87:0::1;17814:9;17810:205;17833:7;:14;17829:1;:18;17810:205;;;17868:14;17885:7;17893:1;17885:10;;;;;;;;:::i;:::-;;;;;;;17868:27;;17910:14;17927:15;17943:1;17927:18;;;;;;;;:::i;:::-;;;;;;;17910:35;;17960:43;17976:10;17988:6;17996;17960:15;:43::i;:::-;17853:162;;17849:3;;;;;:::i;:::-;;;;17810:205;;;;17404:618:::0;;:::o;5074:492::-;5214:4;5231:36;5241:6;5249:9;5260:6;5231:9;:36::i;:::-;-1:-1:-1;;;;;5307:19:0;;5280:24;5307:19;;;:11;:19;;;;;;;;206:10;5307:33;;;;;;;;5359:26;;;;5351:79;;;;-1:-1:-1;;;5351:79:0;;9587:2:1;5351:79:0;;;9569:21:1;9626:2;9606:18;;;9599:30;9665:34;9645:18;;;9638:62;-1:-1:-1;;;9716:18:1;;;9709:38;9764:19;;5351:79:0;9385:404:1;5351:79:0;5466:57;5475:6;206:10;5516:6;5497:16;:25;5466:8;:57::i;:::-;-1:-1:-1;5554:4:0;;5074:492;-1:-1:-1;;;;5074:492:0:o;29031:219::-;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29121:29:0;::::1;29113:77;;;::::0;-1:-1:-1;;;29113:77:0;;9996:2:1;29113:77:0::1;::::0;::::1;9978:21:1::0;10035:2;10015:18;;;10008:30;10074:34;10054:18;;;10047:62;-1:-1:-1;;;10125:18:1;;;10118:33;10168:19;;29113:77:0::1;9794:399:1::0;29113:77:0::1;29201:14;:41:::0;;-1:-1:-1;;;;;;29201:41:0::1;-1:-1:-1::0;;;;;29201:41:0;;;::::1;::::0;;;::::1;::::0;;29031:219::o;15922:269::-;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;16041:4:::1;16035;16015:13;4392:12:::0;;;4304:108;16015:13:::1;:17;::::0;16031:1:::1;16015:17;:::i;:::-;:24;;;;:::i;:::-;16014:31;;;;:::i;:::-;16004:6;:41;;15996:95;;;::::0;-1:-1:-1;;;15996:95:0;;10795:2:1;15996:95:0::1;::::0;::::1;10777:21:1::0;10834:2;10814:18;;;10807:30;10873:34;10853:18;;;10846:62;-1:-1:-1;;;10924:18:1;;;10917:39;10973:19;;15996:95:0::1;10593:405:1::0;15996:95:0::1;16117:17;:6:::0;16127::::1;16117:17;:::i;:::-;16102:12;:32:::0;;;16150:33:::1;::::0;2717:25:1;;;16150:33:0::1;::::0;2705:2:1;2690:18;16150:33:0::1;;;;;;;;15922:269:::0;:::o;18849:448::-;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;18987:13:::1;:27:::0;;;19025:15:::1;:31:::0;;;19067:15:::1;:31:::0;;;19109:10:::1;:21:::0;;;19122:8;19085:13;19156:31:::1;19043:13:::0;19003:11;19156:31:::1;:::i;:::-;:49;;;;:::i;:::-;:62;;;;:::i;:::-;19141:12;:77:::0;;;19253:2:::1;-1:-1:-1::0;19237:18:0::1;19229:60;;;::::0;-1:-1:-1;;;19229:60:0;;11335:2:1;19229:60:0::1;::::0;::::1;11317:21:1::0;11374:2;11354:18;;;11347:30;11413:31;11393:18;;;11386:59;11462:18;;19229:60:0::1;11133:353:1::0;5574:215:0;206:10;5662:4;5711:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5711:34:0;;;;;;;;;;5662:4;;5679:80;;5702:7;;5711:47;;5748:10;;5711:47;:::i;:::-;5679:8;:80::i;29541:312::-;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;29632:18:::1;;29604:24;29622:4;29604:9;:24::i;:::-;:46;;29596:123;;;::::0;;-1:-1:-1;;;29596:123:0;;11693:2:1;29596:123:0::1;::::0;::::1;11675:21:1::0;11712:18;;;11705:30;;;;11771:34;11751:18;;;11744:62;11842:34;11822:18;;;11815:62;11894:19;;29596:123:0::1;11491:428:1::0;29596:123:0::1;29730:8;:15:::0;;-1:-1:-1;;;;29730:15:0::1;-1:-1:-1::0;;;29730:15:0::1;::::0;;29756:10:::1;:8;:10::i;:::-;29777:8;:16:::0;;-1:-1:-1;;;;29777:16:0::1;::::0;;29809:36:::1;::::0;29829:15:::1;2717:25:1::0;;29809:36:0::1;::::0;2705:2:1;2690:18;29809:36:0::1;;;;;;;29541:312::o:0;4420:127::-;-1:-1:-1;;;;;4521:18:0;4494:7;4521:18;;;;;;;;;;;;4420:127::o;8618:150::-;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;8711:6:::1;::::0;8690:40:::1;::::0;8727:1:::1;::::0;-1:-1:-1;;;;;8711:6:0::1;::::0;8690:40:::1;::::0;8727:1;;8690:40:::1;8741:6;:19:::0;;-1:-1:-1;;;;;;8741:19:0::1;::::0;;8618:150::o;15260:154::-;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;15314:14:::1;:22:::0;;-1:-1:-1;;15314:22:0;;::::1;::::0;;;15347:20:::1;:28:::0;;;;::::1;::::0;;15391:15:::1;::::0;::::1;::::0;15331:5:::1;::::0;15391:15:::1;15260:154::o:0;18030:260::-;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;18126:4:::1;18122:104;;18164:6;::::0;-1:-1:-1;;;;;18164:6:0;;::::1;18154:16:::0;;::::1;::::0;18146:68:::1;;;::::0;-1:-1:-1;;;18146:68:0;;12126:2:1;18146:68:0::1;::::0;::::1;12108:21:1::0;12165:2;12145:18;;;12138:30;12204:34;12184:18;;;12177:62;-1:-1:-1;;;12255:18:1;;;12248:37;12302:19;;18146:68:0::1;11924:403:1::0;18146:68:0::1;-1:-1:-1::0;;;;;18236:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;18236:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18030:260::o;14878:330::-;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;14960:13:::1;::::0;::::1;::::0;::::1;;;14959:14;14951:50;;;::::0;-1:-1:-1;;;14951:50:0;;12534:2:1;14951:50:0::1;::::0;::::1;12516:21:1::0;12573:2;12553:18;;;12546:30;12612:25;12592:18;;;12585:53;12655:18;;14951:50:0::1;12332:347:1::0;14951:50:0::1;15012:13;:20:::0;;-1:-1:-1;;15043:18:0;;;;;15093:12:::1;15072:18;:33:::0;;;15137:31:::1;::::0;15158:10;;15137:31:::1;:::i;:::-;15116:18;:52:::0;15184:16:::1;::::0;::::1;::::0;;;::::1;14878:330:::0;:::o;28337:456::-;8531:6;;28424:10;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28455:20:0;::::1;28447:59;;;::::0;-1:-1:-1;;;28447:59:0;;12886:2:1;28447:59:0::1;::::0;::::1;12868:21:1::0;12925:2;12905:18;;;12898:30;12964:28;12944:18;;;12937:56;13010:18;;28447:59:0::1;12684:350:1::0;28447:59:0::1;28543:4;-1:-1:-1::0;;;;;28525:23:0;::::1;::::0;28517:64:::1;;;::::0;-1:-1:-1;;;28517:64:0;;13241:2:1;28517:64:0::1;::::0;::::1;13223:21:1::0;13280:2;13260:18;;;13253:30;13319;13299:18;;;13292:58;13367:18;;28517:64:0::1;13039:352:1::0;28517:64:0::1;28619:39;::::0;-1:-1:-1;;;28619:39:0;;28652:4:::1;28619:39;::::0;::::1;731:51:1::0;28592:24:0::1;::::0;-1:-1:-1;;;;;28619:24:0;::::1;::::0;::::1;::::0;704:18:1;;28619:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28677:46;::::0;-1:-1:-1;;;28677:46:0;;-1:-1:-1;;;;;13777:32:1;;;28677:46:0::1;::::0;::::1;13759:51:1::0;13826:18;;;13819:34;;;28592:66:0;;-1:-1:-1;28677:23:0;;::::1;::::0;::::1;::::0;13732:18:1;;28677:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28739;::::0;;-1:-1:-1;;;;;13777:32:1;;13759:51;;13841:2;13826:18;;13819:34;;;28669:54:0;;-1:-1:-1;28739:46:0::1;::::0;13732:18:1;28739:46:0::1;;;;;;;28436:357;28337:456:::0;;;;:::o;4091:104::-;4147:13;4180:7;4173:14;;;;;:::i;18298:295::-;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;18407:6:::1;::::0;-1:-1:-1;;;;;18407:6:0;;::::1;18399:14:::0;;::::1;::::0;18391:84:::1;;;::::0;-1:-1:-1;;;18391:84:0;;14316:2:1;18391:84:0::1;::::0;::::1;14298:21:1::0;14355:2;14335:18;;;14328:30;14394:34;14374:18;;;14367:62;14465:27;14445:18;;;14438:55;14510:19;;18391:84:0::1;14114:421:1::0;18391:84:0::1;18488:41;18517:4;18523:5;18488:28;:41::i;:::-;18545:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;18545:40:0;::::1;::::0;::::1;::::0;;;::::1;18298:295:::0;;:::o;5797:413::-;206:10;5890:4;5934:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5934:34:0;;;;;;;;;;5987:35;;;;5979:85;;;;-1:-1:-1;;;5979:85:0;;14742:2:1;5979:85:0;;;14724:21:1;14781:2;14761:18;;;14754:30;14820:34;14800:18;;;14793:62;-1:-1:-1;;;14871:18:1;;;14864:35;14916:19;;5979:85:0;14540:401:1;5979:85:0;6100:67;206:10;6123:7;6151:15;6132:16;:34;6100:8;:67::i;:::-;-1:-1:-1;6198:4:0;;5797:413;-1:-1:-1;;;5797:413:0:o;4555:175::-;4641:4;4658:42;206:10;4682:9;4693:6;4658:9;:42::i;20377:182::-;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20462:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20462:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20517:34;;1389:41:1;;;20517:34:0::1;::::0;1362:18:1;20517:34:0::1;;;;;;;20377:182:::0;;:::o;16481:284::-;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;16603:4:::1;16597;16577:13;4392:12:::0;;;4304:108;16577:13:::1;:17;::::0;16593:1:::1;16577:17;:::i;:::-;:24;;;;:::i;:::-;16576:31;;;;:::i;:::-;16566:6;:41;;16558:98;;;::::0;-1:-1:-1;;;16558:98:0;;15148:2:1;16558:98:0::1;::::0;::::1;15130:21:1::0;15187:2;15167:18;;;15160:30;15226:34;15206:18;;;15199:62;-1:-1:-1;;;15277:18:1;;;15270:42;15329:19;;16558:98:0::1;14946:408:1::0;16558:98:0::1;16685:17;:6:::0;16695::::1;16685:17;:::i;:::-;16667:15;:35:::0;;;16718:39:::1;::::0;2717:25:1;;;16718:39:0::1;::::0;2705:2:1;2690:18;16718:39:0::1;2571:177:1::0;16835:346:0;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;16958:6:::1;16938:13;4392:12:::0;;;4304:108;16938:13:::1;:17;::::0;16954:1:::1;16938:17;:::i;:::-;:26;;;;:::i;:::-;16925:9;:39;;16917:105;;;::::0;-1:-1:-1;;;16917:105:0;;15561:2:1;16917:105:0::1;::::0;::::1;15543:21:1::0;15600:2;15580:18;;;15573:30;15639:34;15619:18;;;15612:62;-1:-1:-1;;;15690:18:1;;;15683:51;15751:19;;16917:105:0::1;15359:417:1::0;16917:105:0::1;17073:4;17053:13;4392:12:::0;;;4304:108;17053:13:::1;:17;::::0;17069:1:::1;17053:17;:::i;:::-;:24;;;;:::i;:::-;17040:9;:37;;17032:102;;;::::0;-1:-1:-1;;;17032:102:0;;15983:2:1;17032:102:0::1;::::0;::::1;15965:21:1::0;16022:2;16002:18;;;15995:30;16061:34;16041:18;;;16034:62;-1:-1:-1;;;16112:18:1;;;16105:50;16172:19;;17032:102:0::1;15781:416:1::0;17032:102:0::1;17144:18;:30:::0;16835:346::o;29258:231::-;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29352:31:0;::::1;29344:81;;;::::0;-1:-1:-1;;;29344:81:0;;16404:2:1;29344:81:0::1;::::0;::::1;16386:21:1::0;16443:2;16423:18;;;16416:30;16482:34;16462:18;;;16455:62;-1:-1:-1;;;16533:18:1;;;16526:35;16578:19;;29344:81:0::1;16202:401:1::0;29344:81:0::1;29436:16;:45:::0;;-1:-1:-1;;;;;;29436:45:0::1;-1:-1:-1::0;;;;;29436:45:0;;;::::1;::::0;;;::::1;::::0;;29258:231::o;16199:274::-;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;16319:4:::1;16313;16293:13;4392:12:::0;;;4304:108;16293:13:::1;:17;::::0;16309:1:::1;16293:17;:::i;:::-;:24;;;;:::i;:::-;16292:31;;;;:::i;:::-;16282:6;:41;;16274:96;;;::::0;-1:-1:-1;;;16274:96:0;;16810:2:1;16274:96:0::1;::::0;::::1;16792:21:1::0;16849:2;16829:18;;;16822:30;16888:34;16868:18;;;16861:62;-1:-1:-1;;;16939:18:1;;;16932:40;16989:19;;16274:96:0::1;16608:406:1::0;16274:96:0::1;16397:17;:6:::0;16407::::1;16397:17;:::i;:::-;16381:13;:33:::0;;;16430:35:::1;::::0;2717:25:1;;;16430:35:0::1;::::0;2705:2:1;2690:18;16430:35:0::1;2571:177:1::0;19767:602:0;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;19843:1:::1;19826:14;:18:::0;;;19855:16:::1;:20:::0;;;19886:16:::1;:20:::0;;;19917:11:::1;:15:::0;;;19843:1;19959:33:::1;19843:1:::0;;19959:33:::1;:::i;:::-;:52;;;;:::i;:::-;:66;;;;:::i;:::-;19943:13;:82:::0;;;20061:2:::1;-1:-1:-1::0;20044:19:0::1;20036:56;;;::::0;-1:-1:-1;;;20036:56:0;;17221:2:1;20036:56:0::1;::::0;::::1;17203:21:1::0;17260:2;17240:18;;;17233:30;17299:26;17279:18;;;17272:54;17343:18;;20036:56:0::1;17019:348:1::0;20036:56:0::1;20121:1;20105:13;:17:::0;;;20133:15:::1;:19:::0;;;20163:15:::1;:19:::0;;;20193:10:::1;:14:::0;;;20121:1;20233:31:::1;20121:1:::0;;20233:31:::1;:::i;:::-;:49;;;;:::i;:::-;:62;;;;:::i;:::-;20218:12;:77:::0;;;20330:2:::1;-1:-1:-1::0;20314:18:0::1;20306:55;;;::::0;-1:-1:-1;;;20306:55:0;;17574:2:1;20306:55:0::1;::::0;::::1;17556:21:1::0;17613:2;17593:18;;;17586:30;-1:-1:-1;;;17632:18:1;;;17625:54;17696:18;;20306:55:0::1;17372:348:1::0;20306:55:0::1;19767:602::o:0;19305:454::-;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;19444:14:::1;:28:::0;;;19483:16:::1;:32:::0;;;19526:16:::1;:32:::0;;;19569:11:::1;:22:::0;;;19583:8;19545:13;19618:33:::1;19502:13:::0;19461:11;19618:33:::1;:::i;:::-;:52;;;;:::i;:::-;:66;;;;:::i;:::-;19602:13;:82:::0;;;19720:2:::1;-1:-1:-1::0;19703:19:0::1;19695:56;;;::::0;-1:-1:-1;;;19695:56:0;;17574:2:1;19695:56:0::1;::::0;::::1;17556:21:1::0;17613:2;17593:18;;;17586:30;-1:-1:-1;;;17632:18:1;;;17625:54;17696:18;;19695:56:0::1;17372:348:1::0;15422:118:0;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15506:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;15506:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15422:118::o;15816:98::-;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;15878:20:::1;:28:::0;;-1:-1:-1;;15878:28:0::1;::::0;;15816:98::o;8776:244::-;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8865:22:0;::::1;8857:73;;;::::0;-1:-1:-1;;;8857:73:0;;17927:2:1;8857:73:0::1;::::0;::::1;17909:21:1::0;17966:2;17946:18;;;17939:30;18005:34;17985:18;;;17978:62;-1:-1:-1;;;18056:18:1;;;18049:36;18102:19;;8857:73:0::1;17725:402:1::0;8857:73:0::1;8967:6;::::0;8946:38:::1;::::0;-1:-1:-1;;;;;8946:38:0;;::::1;::::0;8967:6:::1;::::0;8946:38:::1;::::0;8967:6:::1;::::0;8946:38:::1;8995:6;:17:::0;;-1:-1:-1;;;;;;8995:17:0::1;-1:-1:-1::0;;;;;8995:17:0;;;::::1;::::0;;;::::1;::::0;;8776:244::o;28863:160::-;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;28957:58:::1;::::0;28921:12:::1;::::0;28965:10:::1;::::0;28989:21:::1;::::0;28921:12;28957:58;28921:12;28957:58;28989:21;28965:10;28957:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29956:616:::0;8531:6;;-1:-1:-1;;;;;8531:6:0;206:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;30053:8:::1;30038:11;:23;;30030:107;;;::::0;-1:-1:-1;;;30030:107:0;;18544:2:1;30030:107:0::1;::::0;::::1;18526:21:1::0;18583:2;18563:18;;;18556:30;18622:34;18602:18;;;18595:62;18693:34;18673:18;;;18666:62;-1:-1:-1;;;18744:19:1;;;18737:38;18792:19;;30030:107:0::1;18342:475:1::0;30030:107:0::1;30174:16;::::0;;30188:1:::1;30174:16:::0;;;;;::::1;::::0;;30150:21:::1;::::0;30174:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;30211:9:0::1;::::0;:16:::1;::::0;;-1:-1:-1;;;30211:16:0;;;;30150:40;;-1:-1:-1;;;;;;30211:9:0;;::::1;::::0;:14:::1;::::0;-1:-1:-1;30211:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30201:4;30206:1;30201:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1::0;;;;;30201:26:0::1;;;-1:-1:-1::0;;;;;30201:26:0::1;;;::::0;::::1;30256:4;30238;30243:1;30238:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30238:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;30300:9:::1;::::0;:219:::1;::::0;-1:-1:-1;;;30300:219:0;;:9;::::1;::::0;:60:::1;::::0;30368:11;;30300:219:::1;::::0;:9:::1;::::0;30444:4;;30471:6:::1;::::0;30493:15:::1;::::0;30300:219:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;30535:29;30552:11;30535:29;;;;2717:25:1::0;;2705:2;2690:18;;2571:177;30535:29:0::1;;;;;;;;30019:553;29956:616:::0;:::o;7697:380::-;-1:-1:-1;;;;;7833:19:0;;7825:68;;;;-1:-1:-1;;;7825:68:0;;20261:2:1;7825:68:0;;;20243:21:1;20300:2;20280:18;;;20273:30;20339:34;20319:18;;;20312:62;-1:-1:-1;;;20390:18:1;;;20383:34;20434:19;;7825:68:0;20059:400:1;7825:68:0;-1:-1:-1;;;;;7912:21:0;;7904:68;;;;-1:-1:-1;;;7904:68:0;;20666:2:1;7904:68:0;;;20648:21:1;20705:2;20685:18;;;20678:30;20744:34;20724:18;;;20717:62;-1:-1:-1;;;20795:18:1;;;20788:32;20837:19;;7904:68:0;20464:398:1;7904:68:0;-1:-1:-1;;;;;7985:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8037:32;;2717:25:1;;;8037:32:0;;2690:18:1;8037:32:0;;;;;;;;7697:380;;;:::o;6218:614::-;-1:-1:-1;;;;;6358:20:0;;6350:70;;;;-1:-1:-1;;;6350:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6439:23:0;;6431:71;;;;-1:-1:-1;;;6431:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6539:17:0;;6515:21;6539:17;;;;;;;;;;;6575:23;;;;6567:74;;;;-1:-1:-1;;;6567:74:0;;21879:2:1;6567:74:0;;;21861:21:1;21918:2;21898:18;;;21891:30;21957:34;21937:18;;;21930:62;-1:-1:-1;;;22008:18:1;;;22001:36;22054:19;;6567:74:0;21677:402:1;6567:74:0;-1:-1:-1;;;;;6677:17:0;;;:9;:17;;;;;;;;;;;6697:22;;;6677:42;;6741:20;;;;;;;;:30;;6713:6;;6677:9;6741:30;;6713:6;;6741:30;:::i;:::-;;;;;;;;6806:9;-1:-1:-1;;;;;6789:35:0;6798:6;-1:-1:-1;;;;;6789:35:0;;6817:6;6789:35;;;;2717:25:1;;2705:2;2690:18;;2571:177;6789:35:0;;;;;;;;6339:493;6218:614;;;:::o;20567:4898::-;-1:-1:-1;;;;;20667:18:0;;20659:68;;;;-1:-1:-1;;;20659:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20746:16:0;;20738:64;;;;-1:-1:-1;;;20738:64:0;;;;;;;:::i;:::-;20830:1;20821:6;:10;20813:52;;;;-1:-1:-1;;;20813:52:0;;22286:2:1;20813:52:0;;;22268:21:1;22325:2;22305:18;;;22298:30;22364:31;22344:18;;;22337:59;22413:18;;20813:52:0;22084:353:1;20813:52:0;20882:13;;;;;;;20878:132;;-1:-1:-1;;;;;20919:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;20948:23:0;;;;;;:19;:23;;;;;;;;20919:52;20911:87;;;;-1:-1:-1;;;20911:87:0;;22644:2:1;20911:87:0;;;22626:21:1;22683:2;22663:18;;;22656:30;-1:-1:-1;;;22702:18:1;;;22695:52;22764:18;;20911:87:0;22442:346:1;20911:87:0;21025:18;;:22;21022:196;;-1:-1:-1;;;;;21072:17:0;;;;;;:11;:17;;;;;;;;21071:18;;:35;;-1:-1:-1;8469:6:0;;-1:-1:-1;;;;;21093:13:0;;;8469:6;;21093:13;21071:35;:60;;;-1:-1:-1;;;;;;21110:21:0;;21124:6;21110:21;21071:60;21063:143;;;;-1:-1:-1;;;21063:143:0;;22995:2:1;21063:143:0;;;22977:21:1;23034:2;23014:18;;;23007:30;23073:34;23053:18;;;23046:62;23144:34;23124:18;;;23117:62;-1:-1:-1;;;23195:19:1;;;23188:37;23242:19;;21063:143:0;22793:474:1;21063:143:0;21233:14;;;;21230:1649;;;8469:6;;-1:-1:-1;;;;;21267:15:0;;;8469:6;;21267:15;;;;:32;;-1:-1:-1;8469:6:0;;-1:-1:-1;;;;;21286:13:0;;;8469:6;;21286:13;;21267:32;:52;;;;-1:-1:-1;;;;;;21303:16:0;;;;21267:52;:77;;;;-1:-1:-1;;;;;;21323:21:0;;21337:6;21323:21;;21267:77;:107;;;;-1:-1:-1;;;;;;21349:25:0;;;;;;:19;:25;;;;;;;;21348:26;21267:107;:135;;;;-1:-1:-1;;;;;;21379:23:0;;;;;;:19;:23;;;;;;;;21378:24;21267:135;21263:1605;;;21560:20;;;;21556:506;;;21622:9;;-1:-1:-1;;;;;21608:24:0;;;21622:9;;21608:24;;;;:49;;-1:-1:-1;21650:6:0;;-1:-1:-1;;;;;21636:21:0;;;21650:6;;21636:21;;21608:49;21604:439;;;21735:16;21750:1;21735:12;:16;:::i;:::-;21722:9;21693:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;21790:16:0;21805:1;21790:12;:16;:::i;:::-;-1:-1:-1;;;;;21755:32:0;;;;;;:28;:32;;;;;;:51;21693:113;21685:179;;;;-1:-1:-1;;;21685:179:0;;23607:2:1;21685:179:0;;;23589:21:1;23646:2;23626:18;;;23619:30;23685:34;23665:18;;;23658:62;-1:-1:-1;;;23736:18:1;;;23729:51;23797:19;;21685:179:0;23405:417:1;21685:179:0;21920:9;21891:39;;;;:28;:39;;;;;;21933:12;21891:54;;;;-1:-1:-1;;;;;21972:32:0;;;;;;:47;21604:439;-1:-1:-1;;;;;22114:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;22150:35:0;;;;;;:31;:35;;;;;;;;22149:36;22114:71;22110:743;;;22232:12;;22222:6;:22;;22214:75;;;;-1:-1:-1;;;22214:75:0;;24029:2:1;22214:75:0;;;24011:21:1;24068:2;24048:18;;;24041:30;24107:34;24087:18;;;24080:62;-1:-1:-1;;;24158:18:1;;;24151:38;24206:19;;22214:75:0;23827:404:1;22214:75:0;22350:15;;22333:13;22343:2;22333:9;:13::i;:::-;22324:22;;:6;:22;:::i;:::-;:41;;22316:78;;;;-1:-1:-1;;;22316:78:0;;24438:2:1;22316:78:0;;;24420:21:1;24477:2;24457:18;;;24450:30;-1:-1:-1;;;24496:18:1;;;24489:54;24560:18;;22316:78:0;24236:348:1;22316:78:0;22110:743;;;-1:-1:-1;;;;;22470:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;22504:37:0;;;;;;:31;:37;;;;;;;;22503:38;22470:71;22466:387;;;22588:13;;22578:6;:23;;22570:78;;;;-1:-1:-1;;;22570:78:0;;24791:2:1;22570:78:0;;;24773:21:1;24830:2;24810:18;;;24803:30;24869:34;24849:18;;;24842:62;-1:-1:-1;;;24920:18:1;;;24913:40;24970:19;;22570:78:0;24589:406:1;22466:387:0;-1:-1:-1;;;;;22696:35:0;;;;;;:31;:35;;;;;;;;22691:162;;22789:15;;22772:13;22782:2;22772:9;:13::i;:::-;22763:22;;:6;:22;:::i;:::-;:41;;22755:78;;;;-1:-1:-1;;;22755:78:0;;24438:2:1;22755:78:0;;;24420:21:1;24477:2;24457:18;;;24450:30;-1:-1:-1;;;24496:18:1;;;24489:54;24560:18;;22755:78:0;24236:348:1;22755:78:0;22891:28;22922:24;22940:4;22922:9;:24::i;:::-;22998:18;;22891:55;;-1:-1:-1;22974:42:0;;;;;;;23032:22;;-1:-1:-1;23043:11:0;;;;;;;23032:22;:35;;;;-1:-1:-1;23059:8:0;;-1:-1:-1;;;23059:8:0;;;;23058:9;23032:35;:71;;;;-1:-1:-1;;;;;;23072:31:0;;;;;;:25;:31;;;;;;;;23071:32;23032:71;:101;;;;-1:-1:-1;;;;;;23108:25:0;;;;;;:19;:25;;;;;;;;23107:26;23032:101;:129;;;;-1:-1:-1;;;;;;23138:23:0;;;;;;:19;:23;;;;;;;;23137:24;23032:129;23029:236;;;23178:8;:15;;-1:-1:-1;;;;23178:15:0;-1:-1:-1;;;23178:15:0;;;23210:10;:8;:10::i;:::-;23237:8;:16;;-1:-1:-1;;;;23237:16:0;;;23029:236;-1:-1:-1;;;;;23395:25:0;;23277:12;23395:25;;;:19;:25;;;;;;23292:4;;23395:25;;;:52;;-1:-1:-1;;;;;;23424:23:0;;;;;;:19;:23;;;;;;;;23395:52;23392:99;;;-1:-1:-1;23474:5:0;23392:99;23503:12;23607:7;23604:1808;;;25567:18;;25552:12;:33;23669:60;;;;-1:-1:-1;;;;;;23698:31:0;;;;;;:25;:31;;;;;;;;23669:60;:94;;;;-1:-1:-1;;;;;;23734:29:0;;;;;;:25;:29;;;;;;;;23733:30;23669:94;:114;;;;;23782:1;23767:12;;:16;23669:114;23666:1602;;;-1:-1:-1;;;;;23809:15:0;;;;;;:11;:15;;;;;;;;23805:171;;-1:-1:-1;;;;;23848:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;23848:22:0;23866:4;23848:22;;;;;;23893:10;:15;;23866:4;;23893:10;;:15;;23866:4;;23893:15;:::i;:::-;;;;-1:-1:-1;;23936:20:0;;-1:-1:-1;;;;;749:32:1;;731:51;;23936:20:0;;719:2:1;704:18;23936:20:0;;;;;;;23805:171;24017:3;24003:11;:6;24012:2;24003:11;:::i;:::-;:17;;;;:::i;:::-;23996:24;;24083:12;;24065:15;;24058:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24036:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;24157:12:0;;24141:13;;24134:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;24114:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;24235:12:0;;24217:15;;24210:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;24188:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;24303:12:0;;24290:10;;24283:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;24266:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;23666:1602:0;;-1:-1:-1;23666:1602:0;;-1:-1:-1;;;;;24380:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;24429:1;24413:13;;:17;24380:50;24376:892;;;24482:3;24466:13;;24457:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;24450:35;;24552:13;;24533:16;;24526:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;24504:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24628:13:0;;24611:14;;24604:21;;:4;:21;:::i;:::-;:37;;;;:::i;:::-;24584:16;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;24708:13:0;;24689:16;;24682:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;24660:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24778:13:0;;24764:11;;24757:18;;:4;:18;:::i;24376:892::-;-1:-1:-1;;;;;24854:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;24904:1;24889:12;;:16;24854:51;24851:417;;;24954:3;24939:12;;24930:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;24923:34;;25020:12;;25002:15;;24995:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24973:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;25094:12:0;;25078:13;;25071:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;25051:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;25172:12:0;;25154:15;;25147:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;25125:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;25240:12:0;;25227:10;;25220:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;25203:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;24851:417:0;25287:8;;25284:89;;25315:42;25331:4;25345;25352;25315:15;:42::i;:::-;25386:14;25396:4;25386:14;;:::i;:::-;;;23604:1808;25424:33;25440:4;25446:2;25450:6;25424:15;:33::i;:::-;20646:4819;;;;20567:4898;;;:::o;26707:1622::-;26767:1;26751:13;;:17;:62;;;;;26800:13;;26772:24;26790:4;26772:9;:24::i;:::-;:41;;26751:62;26748:129;;;26830:35;26844:4;26851:13;;26830:5;:35::i;:::-;26903:1;26887:13;:17;;;26943:24;26961:4;26943:9;:24::i;:::-;26917:50;;26978:25;27046:18;;27027:16;;27006:18;;:37;;;;:::i;:::-;:58;;;;:::i;:::-;26978:86;-1:-1:-1;27080:20:0;;;:46;;-1:-1:-1;27104:22:0;;27080:46;27077:60;;;27129:7;;26707:1622::o;27077:60::-;27170:18;;:23;;27191:2;27170:23;:::i;:::-;27152:15;:41;27149:113;;;27227:18;;:23;;27248:2;27227:23;:::i;:::-;27209:41;;27149:113;27274:12;27348:23;27433:1;27413:17;27392:18;;27374:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;27348:86;-1:-1:-1;27447:51:0;27464:33;27348:86;27464:15;:33;:::i;:::-;27447:16;:51::i;:::-;27691:18;;27532:21;;;;27511:18;;27691:20;;27710:1;;27691:20;:::i;:::-;27670:42;;:17;:42;:::i;:::-;27650:16;;27637:29;;:10;:29;:::i;:::-;:76;;;;:::i;:::-;27613:100;;27724:23;27825:1;27806:18;;:20;;;;:::i;:::-;27785:42;;:17;:42;:::i;:::-;27763:18;;27750:31;;:10;:31;:::i;:::-;:78;;;;:::i;:::-;27724:104;-1:-1:-1;27860:31:0;27724:104;27860:13;:31;:::i;:::-;27841:50;;;;:::i;:::-;27925:1;27904:18;:22;;;27937:16;:20;;;27968:18;:22;;;28001:13;:17;27841:50;-1:-1:-1;28034:19:0;;;;;:42;;;28075:1;28057:15;:19;28034:42;28031:119;;;28092:46;28105:15;28122;28092:12;:46::i;:::-;28183:16;;28175:58;;-1:-1:-1;;;;;28183:16:0;;;;28213:15;;28175:58;;;;28213:15;28183:16;28175:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28267:14:0;;28259:62;;28162:71;;-1:-1:-1;;;;;;28267:14:0;;28295:21;;28259:62;;;;28295:21;28267:14;28259:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26707:1622:0:o;18601:240::-;-1:-1:-1;;;;;18684:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;18684:39:0;;;;;;;18736;18684:31;:39;18736:26;:39::i;7139:550::-;-1:-1:-1;;;;;7223:21:0;;7215:67;;;;-1:-1:-1;;;7215:67:0;;25202:2:1;7215:67:0;;;25184:21:1;25241:2;25221:18;;;25214:30;25280:34;25260:18;;;25253:62;-1:-1:-1;;;25331:18:1;;;25324:31;25372:19;;7215:67:0;25000:397:1;7215:67:0;-1:-1:-1;;;;;7318:18:0;;7293:22;7318:18;;;;;;;;;;;7355:24;;;;7347:71;;;;-1:-1:-1;;;7347:71:0;;25604:2:1;7347:71:0;;;25586:21:1;25643:2;25623:18;;;25616:30;25682:34;25662:18;;;25655:62;-1:-1:-1;;;25733:18:1;;;25726:32;25775:19;;7347:71:0;25402:398:1;7347:71:0;-1:-1:-1;;;;;7454:18:0;;:9;:18;;;;;;;;;;;7475:23;;;7454:44;;7593:12;:22;;;;;;;7644:37;2717:25:1;;;7454:9:0;;:18;7644:37;;2690:18:1;7644:37:0;2571:177:1;25601:573:0;25753:16;;;25767:1;25753:16;;;;;;;;25729:21;;25753:16;;;;;;;;;;-1:-1:-1;25753:16:0;25729:40;;25798:4;25780;25785:1;25780:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25780:23:0;;;:7;;;;;;;;;;:23;;;;25824:9;;:16;;;-1:-1:-1;;;25824:16:0;;;;:9;;;;;:14;;:16;;;;;25780:7;;25824:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25814:4;25819:1;25814:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25814:26:0;;;:7;;;;;;;;;:26;25885:9;;25853:56;;25870:4;;25885:9;25897:11;25853:8;:56::i;:::-;25948:9;;:218;;-1:-1:-1;;;25948:218:0;;-1:-1:-1;;;;;25948:9:0;;;;:60;;:218;;26023:11;;25948:9;;26093:4;;26120;;26140:15;;25948:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25656:518;25601:573;:::o;26182:517::-;26362:9;;26330:56;;26347:4;;-1:-1:-1;;;;;26362:9:0;26374:11;26330:8;:56::i;:::-;26429:9;;26635:14;;26429:262;;-1:-1:-1;;;26429:262:0;;26495:4;26429:262;;;26733:34:1;26783:18;;;26776:34;;;26429:9:0;26826:18:1;;;26819:34;;;26869:18;;;26862:34;-1:-1:-1;;;;;26635:14:0;;;26912:19:1;;;26905:44;26665:15:0;26965:19:1;;;26958:35;26429:9:0;;;:25;;26462:9;;26667:19:1;;26429:262:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26182:517;;:::o;17189:207::-;-1:-1:-1;;;;;17277:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;17277:52:0;;;;;;;;;;17345:43;;27483:51:1;;;27550:18;;;27543:50;17345:43:0;;27456:18:1;17345:43:0;27315:284:1;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;793:131::-;-1:-1:-1;;;;;868:31:1;;858:42;;848:70;;914:1;911;904:12;848:70;793:131;:::o;929:315::-;997:6;1005;1058:2;1046:9;1037:7;1033:23;1029:32;1026:52;;;1074:1;1071;1064:12;1026:52;1113:9;1100:23;1132:31;1157:5;1132:31;:::i;:::-;1182:5;1234:2;1219:18;;;;1206:32;;-1:-1:-1;;;929:315:1:o;1441:247::-;1500:6;1553:2;1541:9;1532:7;1528:23;1524:32;1521:52;;;1569:1;1566;1559:12;1521:52;1608:9;1595:23;1627:31;1652:5;1627:31;:::i;:::-;1677:5;1441:247;-1:-1:-1;;;1441:247:1:o;1693:118::-;1779:5;1772:13;1765:21;1758:5;1755:32;1745:60;;1801:1;1798;1791:12;1816:750;1908:6;1916;1924;1977:2;1965:9;1956:7;1952:23;1948:32;1945:52;;;1993:1;1990;1983:12;1945:52;2033:9;2020:23;2062:18;2103:2;2095:6;2092:14;2089:34;;;2119:1;2116;2109:12;2089:34;2157:6;2146:9;2142:22;2132:32;;2202:7;2195:4;2191:2;2187:13;2183:27;2173:55;;2224:1;2221;2214:12;2173:55;2264:2;2251:16;2290:2;2282:6;2279:14;2276:34;;;2306:1;2303;2296:12;2276:34;2361:7;2354:4;2344:6;2341:1;2337:14;2333:2;2329:23;2325:34;2322:47;2319:67;;;2382:1;2379;2372:12;2319:67;2413:4;2405:13;;;;-1:-1:-1;2437:6:1;-1:-1:-1;;2478:20:1;;2465:34;2508:28;2465:34;2508:28;:::i;:::-;2555:5;2545:15;;;1816:750;;;;;:::o;2753:127::-;2814:10;2809:3;2805:20;2802:1;2795:31;2845:4;2842:1;2835:15;2869:4;2866:1;2859:15;2885:275;2956:2;2950:9;3021:2;3002:13;;-1:-1:-1;;2998:27:1;2986:40;;3056:18;3041:34;;3077:22;;;3038:62;3035:88;;;3103:18;;:::i;:::-;3139:2;3132:22;2885:275;;-1:-1:-1;2885:275:1:o;3165:183::-;3225:4;3258:18;3250:6;3247:30;3244:56;;;3280:18;;:::i;:::-;-1:-1:-1;3325:1:1;3321:14;3337:4;3317:25;;3165:183::o;3353:662::-;3407:5;3460:3;3453:4;3445:6;3441:17;3437:27;3427:55;;3478:1;3475;3468:12;3427:55;3514:6;3501:20;3540:4;3564:60;3580:43;3620:2;3580:43;:::i;:::-;3564:60;:::i;:::-;3658:15;;;3744:1;3740:10;;;;3728:23;;3724:32;;;3689:12;;;;3768:15;;;3765:35;;;3796:1;3793;3786:12;3765:35;3832:2;3824:6;3820:15;3844:142;3860:6;3855:3;3852:15;3844:142;;;3926:17;;3914:30;;3964:12;;;;3877;;3844:142;;;-1:-1:-1;4004:5:1;3353:662;-1:-1:-1;;;;;;3353:662:1:o;4020:1215::-;4138:6;4146;4199:2;4187:9;4178:7;4174:23;4170:32;4167:52;;;4215:1;4212;4205:12;4167:52;4255:9;4242:23;4284:18;4325:2;4317:6;4314:14;4311:34;;;4341:1;4338;4331:12;4311:34;4379:6;4368:9;4364:22;4354:32;;4424:7;4417:4;4413:2;4409:13;4405:27;4395:55;;4446:1;4443;4436:12;4395:55;4482:2;4469:16;4504:4;4528:60;4544:43;4584:2;4544:43;:::i;4528:60::-;4622:15;;;4704:1;4700:10;;;;4692:19;;4688:28;;;4653:12;;;;4728:19;;;4725:39;;;4760:1;4757;4750:12;4725:39;4784:11;;;;4804:217;4820:6;4815:3;4812:15;4804:217;;;4900:3;4887:17;4917:31;4942:5;4917:31;:::i;:::-;4961:18;;4837:12;;;;4999;;;;4804:217;;;5040:5;-1:-1:-1;;5083:18:1;;5070:32;;-1:-1:-1;;5114:16:1;;;5111:36;;;5143:1;5140;5133:12;5111:36;;5166:63;5221:7;5210:8;5199:9;5195:24;5166:63;:::i;:::-;5156:73;;;4020:1215;;;;;:::o;5240:456::-;5317:6;5325;5333;5386:2;5374:9;5365:7;5361:23;5357:32;5354:52;;;5402:1;5399;5392:12;5354:52;5441:9;5428:23;5460:31;5485:5;5460:31;:::i;:::-;5510:5;-1:-1:-1;5567:2:1;5552:18;;5539:32;5580:33;5539:32;5580:33;:::i;:::-;5240:456;;5632:7;;-1:-1:-1;;;5686:2:1;5671:18;;;;5658:32;;5240:456::o;5701:180::-;5760:6;5813:2;5801:9;5792:7;5788:23;5784:32;5781:52;;;5829:1;5826;5819:12;5781:52;-1:-1:-1;5852:23:1;;5701:180;-1:-1:-1;5701:180:1:o;5886:385::-;5972:6;5980;5988;5996;6049:3;6037:9;6028:7;6024:23;6020:33;6017:53;;;6066:1;6063;6056:12;6017:53;-1:-1:-1;;6089:23:1;;;6159:2;6144:18;;6131:32;;-1:-1:-1;6210:2:1;6195:18;;6182:32;;6261:2;6246:18;6233:32;;-1:-1:-1;5886:385:1;-1:-1:-1;5886:385:1:o;6673:382::-;6738:6;6746;6799:2;6787:9;6778:7;6774:23;6770:32;6767:52;;;6815:1;6812;6805:12;6767:52;6854:9;6841:23;6873:31;6898:5;6873:31;:::i;:::-;6923:5;-1:-1:-1;6980:2:1;6965:18;;6952:32;6993:30;6952:32;6993:30;:::i;:::-;7042:7;7032:17;;;6673:382;;;;;:::o;7060:388::-;7128:6;7136;7189:2;7177:9;7168:7;7164:23;7160:32;7157:52;;;7205:1;7202;7195:12;7157:52;7244:9;7231:23;7263:31;7288:5;7263:31;:::i;:::-;7313:5;-1:-1:-1;7370:2:1;7355:18;;7342:32;7383:33;7342:32;7383:33;:::i;7453:380::-;7532:1;7528:12;;;;7575;;;7596:61;;7650:4;7642:6;7638:17;7628:27;;7596:61;7703:2;7695:6;7692:14;7672:18;7669:38;7666:161;;7749:10;7744:3;7740:20;7737:1;7730:31;7784:4;7781:1;7774:15;7812:4;7809:1;7802:15;7666:161;;7453:380;;;:::o;7838:356::-;8040:2;8022:21;;;8059:18;;;8052:30;8118:34;8113:2;8098:18;;8091:62;8185:2;8170:18;;7838:356::o;8199:127::-;8260:10;8255:3;8251:20;8248:1;8241:31;8291:4;8288:1;8281:15;8315:4;8312:1;8305:15;8331:127;8392:10;8387:3;8383:20;8380:1;8373:31;8423:4;8420:1;8413:15;8447:4;8444:1;8437:15;8463:135;8502:3;8523:17;;;8520:43;;8543:18;;:::i;:::-;-1:-1:-1;8590:1:1;8579:13;;8463:135::o;10198:168::-;10271:9;;;10302;;10319:15;;;10313:22;;10299:37;10289:71;;10340:18;;:::i;10371:217::-;10411:1;10437;10427:132;;10481:10;10476:3;10472:20;10469:1;10462:31;10516:4;10513:1;10506:15;10544:4;10541:1;10534:15;10427:132;-1:-1:-1;10573:9:1;;10371:217::o;11003:125::-;11068:9;;;11089:10;;;11086:36;;;11102:18;;:::i;13396:184::-;13466:6;13519:2;13507:9;13498:7;13494:23;13490:32;13487:52;;;13535:1;13532;13525:12;13487:52;-1:-1:-1;13558:16:1;;13396:184;-1:-1:-1;13396:184:1:o;13864:245::-;13931:6;13984:2;13972:9;13963:7;13959:23;13955:32;13952:52;;;14000:1;13997;13990:12;13952:52;14032:9;14026:16;14051:28;14073:5;14051:28;:::i;18822:251::-;18892:6;18945:2;18933:9;18924:7;18920:23;18916:32;18913:52;;;18961:1;18958;18951:12;18913:52;18993:9;18987:16;19012:31;19037:5;19012:31;:::i;19078:461::-;19131:3;19169:5;19163:12;19196:6;19191:3;19184:19;19222:4;19251:2;19246:3;19242:12;19235:19;;19288:2;19281:5;19277:14;19309:1;19319:195;19333:6;19330:1;19327:13;19319:195;;;19398:13;;-1:-1:-1;;;;;19394:39:1;19382:52;;19454:12;;;;19489:15;;;;19430:1;19348:9;19319:195;;;-1:-1:-1;19530:3:1;;19078:461;-1:-1:-1;;;;;19078:461:1:o;19544:510::-;19815:6;19804:9;19797:25;19858:3;19853:2;19842:9;19838:18;19831:31;19778:4;19879:57;19931:3;19920:9;19916:19;19908:6;19879:57;:::i;:::-;-1:-1:-1;;;;;19972:32:1;;;;19967:2;19952:18;;19945:60;-1:-1:-1;20036:2:1;20021:18;20014:34;19871:65;19544:510;-1:-1:-1;;19544:510:1:o;20867:401::-;21069:2;21051:21;;;21108:2;21088:18;;;21081:30;21147:34;21142:2;21127:18;;21120:62;-1:-1:-1;;;21213:2:1;21198:18;;21191:35;21258:3;21243:19;;20867:401::o;21273:399::-;21475:2;21457:21;;;21514:2;21494:18;;;21487:30;21553:34;21548:2;21533:18;;21526:62;-1:-1:-1;;;21619:2:1;21604:18;;21597:33;21662:3;21647:19;;21273:399::o;23272:128::-;23339:9;;;23360:11;;;23357:37;;;23374:18;;:::i;25805:582::-;26104:6;26093:9;26086:25;26147:6;26142:2;26131:9;26127:18;26120:34;26190:3;26185:2;26174:9;26170:18;26163:31;26067:4;26211:57;26263:3;26252:9;26248:19;26240:6;26211:57;:::i;:::-;-1:-1:-1;;;;;26304:32:1;;;;26299:2;26284:18;;26277:60;-1:-1:-1;26368:3:1;26353:19;26346:35;26203:65;25805:582;-1:-1:-1;;;25805:582:1:o;27004:306::-;27092:6;27100;27108;27161:2;27149:9;27140:7;27136:23;27132:32;27129:52;;;27177:1;27174;27167:12;27129:52;27206:9;27200:16;27190:26;;27256:2;27245:9;27241:18;27235:25;27225:35;;27300:2;27289:9;27285:18;27279:25;27269:35;;27004:306;;;;;:::o

Swarm Source

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