ETH Price: $3,593.91 (+4.08%)
Gas: 4.36 Gwei
 

Overview

Max Total Supply

5,000,000,000,000 DRACO

Holders

76

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
sheeeeeeeeesh.eth
Balance
67,876,400.000000018790429798 DRACO

Value
$0.00
0x80ed40ff3fb4588aeaae1da3fa082f04da5f4903
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:
Dracarys

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 600 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**

Dracarys ($DRACO) is a new ERC-20 cryptocurrency inspired by dragons. Every transaction made with Dracarys will have 3% of it burned, and 3% will be added to the liquidity pool. This will help to keep the currency stable, as well as help to grow the liquidity pool over time.

No dev or mkt taxes!

3% BURNED | 3% ADDED TO LIQUIDITY | 5B TOKENS | LIQUIDITY BURNED

https://dracarys.wtf

https://t.me/dracaryserc

https://twitter.com/TokenDracarys

*/


// SPDX-License-Identifier: MIT

pragma solidity 0.8.15;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );
}

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

contract Dracarys is ERC20, Ownable {

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

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address operationsAddress;
    address devAddress;

    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 buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyBurnFee;

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

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    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 UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event BuyBackTriggered(uint256 amount);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

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

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("Dracarys", "DRACO") {

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

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

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

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

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

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

        operationsAddress = address(newOwner);
        devAddress = address(newOwner);

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

    receive() external payable {}

    // only enable if no plan to airdrop

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

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

    function removeBoughtEarly(address wallet) external onlyOwner {
        require(boughtEarly[wallet], "Wallet is already not flagged.");
        boughtEarly[wallet] = false;
    }

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

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

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

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

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

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

    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 600, "Can only airdrop 600 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

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

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _devFee, uint256 _burnFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee + buyBurnFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }

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

    function returnToNormalTax() external onlyOwner {
        sellOperationsFee = 0;
        sellLiquidityFee = 3;
        sellDevFee = 0;
        sellBurnFee = 3;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee + sellBurnFee;
        require(sellTotalFees <= 20, "Must keep fees at 20% or less");

        buyOperationsFee = 0;
        buyLiquidityFee = 3;
        buyDevFee = 0;
        buyBurnFee = 3;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee + buyBurnFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }

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

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

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

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

        if(!earlyBuyPenaltyInEffect() && 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 * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
            }

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

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / 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(0xdead),
            block.timestamp
        );
    }

    function swapBack() private {

        if(tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn) {
            super._transfer(address(this), address(0xdead), tokensForBurn);
        }
        tokensForBurn = 0;

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForDev;

        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 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForDev = ethBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForOperations + ethForDev;

        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForDev = 0;
        tokensForBurn = 0;

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

        (success,) = address(devAddress).call{value: ethForDev}("");

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

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

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

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

    function setDevAddress(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "_devAddress address cannot be 0");
        devAddress = payable(_devAddress);
    }

    // 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":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":[],"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":[],"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":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"returnToNormalTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","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":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","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":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","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"}]

60806040526000600e556012805462ffffff191660019081179091556014805460ff191690911790553480156200003557600080fd5b5060405180604001604052806008815260200167447261636172797360c01b81525060405180604001604052806005815260200164445241434f60d81b815250816003908162000086919062000850565b50600462000095828262000850565b5050506000620000aa6200044860201b60201c565b600580546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620049b6833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000151573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017791906200091c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001eb91906200091c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000239573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025f91906200091c565b600a80546001600160a01b0319166001600160a01b039290921691821790556200028b9060016200044c565b600a54620002a4906001600160a01b03166001620004af565b6c3f1bdf10116048a593400000006064620002c182600262000964565b620002cd919062000986565b6006556064620002df82600162000964565b620002eb919062000986565b6007556064620002fd82600262000964565b62000309919062000986565b6008556127106200031c82600562000964565b62000328919062000986565b600b5560006016819055600360178190556018829055601981905590620003508282620009a9565b6200035c9190620009a9565b620003689190620009a9565b6015556000601b8190556003601c819055601d829055601e81905590620003908282620009a9565b6200039c9190620009a9565b620003a89190620009a9565b601a55620003b88360016200044c565b620003c53060016200044c565b620003d461dead60016200044c565b620003e18360016200051b565b620003ee3060016200051b565b620003fd61dead60016200051b565b600c80546001600160a01b0385166001600160a01b03199182168117909255600d80549091169091179055620004348382620005c9565b6200043f83620006ae565b505050620009c4565b3390565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602560205260409020805460ff1916821515179055620004df82826200044c565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146200056a5760405162461bcd60e51b815260206004820181905260248201526000805160206200499683398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006215760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000561565b8060026000828254620006359190620009a9565b90915550506001600160a01b0382166000908152602081905260408120805483929062000664908490620009a9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006f95760405162461bcd60e51b8152602060048201819052602482015260008051602062004996833981519152604482015260640162000561565b6001600160a01b038116620007605760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000561565b6005546040516001600160a01b03808416921690600080516020620049b683398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007d657607f821691505b602082108103620007f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200084b57600081815260208120601f850160051c81016020861015620008265750805b601f850160051c820191505b81811015620008475782815560010162000832565b5050505b505050565b81516001600160401b038111156200086c576200086c620007ab565b62000884816200087d8454620007c1565b84620007fd565b602080601f831160018114620008bc5760008415620008a35750858301515b600019600386901b1c1916600185901b17855562000847565b600085815260208120601f198616915b82811015620008ed57888601518255948401946001909101908401620008cc565b50858210156200090c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200092f57600080fd5b81516001600160a01b03811681146200094757600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200098157620009816200094e565b500290565b600082620009a457634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620009bf57620009bf6200094e565b500190565b613fc280620009d46000396000f3fe6080604052600436106103fd5760003560e01c80638da5cb5b1161020d578063d0d41fe111610128578063e7ad9fcd116100bb578063f2fde38b1161008a578063f63743421161006f578063f637434214610b57578063fb002c9714610b6d578063fc155d1d14610b8357600080fd5b8063f2fde38b14610b22578063f5648a4f14610b4257600080fd5b8063e7ad9fcd14610ac1578063e884f26014610ae1578063ee40166e14610af6578063f11a24d314610b0c57600080fd5b8063dd62ed3e116100f7578063dd62ed3e14610a3a578063e2cd5fcd14610a80578063e2f4560514610a95578063e71dc3f514610aab57600080fd5b8063d0d41fe1146109c4578063d257b34f146109e4578063d85ba06314610a04578063dc3f0d0f14610a1a57600080fd5b8063a9059cbb116101a0578063bbc0c7421161016f578063bbc0c7421461094b578063c02466681461096a578063c18bc1951461098a578063c876d0b9146109aa57600080fd5b8063a9059cbb146108cf578063aa4bde28146108ef578063adb873bd14610905578063b62496f51461091b57600080fd5b80639fccce32116101dc5780639fccce321461086d578063a0d82dc514610883578063a457c2d714610899578063a62068ce146108b957600080fd5b80638da5cb5b1461080457806395d89b41146108225780639a7a23d6146108375780639c3b4fdc1461085757600080fd5b80634f77f6c0116103185780636ddd1713116102ab5780637571336a1161027a57806385ecfd281161025f57806385ecfd28146107a957806388e765ff146107d95780638a8c523c146107ef57600080fd5b80637571336a146107695780638366e79a1461078957600080fd5b80636ddd1713146106e957806370a0823114610709578063715018a61461073f578063751039fc1461075457600080fd5b80635bb988c9116102e75780635bb988c91461068757806366d602ae146106a75780636a486a8e146106bd5780636b0a894c146106d357600080fd5b80634f77f6c01461062f57806351f205e41461064557806358a6d5311461065a5780635a139dd41461067157600080fd5b806323b872dd11610390578063395093511161035f57806339509351146105b5578063452ed4f1146105d5578063499b8394146105f55780634a62bb651461061557600080fd5b806323b872dd146105395780632be32b61146105595780632e6ed7ef14610579578063313ce5671461059957600080fd5b806318160ddd116103cc57806318160ddd146104cc5780631a8145bb146104eb5780631d777856146105015780632307b4411461051757600080fd5b806306fdde03146104095780630758d92414610434578063095ea7b31461046c57806310d5de531461049c57600080fd5b3661040457005b600080fd5b34801561041557600080fd5b5061041e610ba3565b60405161042b91906139f1565b60405180910390f35b34801561044057600080fd5b50600954610454906001600160a01b031681565b6040516001600160a01b03909116815260200161042b565b34801561047857600080fd5b5061048c610487366004613a5e565b610c35565b604051901515815260200161042b565b3480156104a857600080fd5b5061048c6104b7366004613a8a565b60246020526000908152604090205460ff1681565b3480156104d857600080fd5b506002545b60405190815260200161042b565b3480156104f757600080fd5b506104dd60205481565b34801561050d57600080fd5b506104dd60225481565b34801561052357600080fd5b50610537610532366004613b84565b610c4b565b005b34801561054557600080fd5b5061048c610554366004613c46565b610dce565b34801561056557600080fd5b50610537610574366004613c87565b610e78565b34801561058557600080fd5b50610537610594366004613ca0565b610fa3565b3480156105a557600080fd5b506040516012815260200161042b565b3480156105c157600080fd5b5061048c6105d0366004613a5e565b61107a565b3480156105e157600080fd5b50600a54610454906001600160a01b031681565b34801561060157600080fd5b50610537610610366004613a8a565b6110b6565b34801561062157600080fd5b5060125461048c9060ff1681565b34801561063b57600080fd5b506104dd601b5481565b34801561065157600080fd5b50610537611185565b34801561066657600080fd5b50600f54431061048c565b34801561067d57600080fd5b506104dd60165481565b34801561069357600080fd5b506105376106a2366004613a8a565b6112b3565b3480156106b357600080fd5b506104dd60075481565b3480156106c957600080fd5b506104dd601a5481565b3480156106df57600080fd5b506104dd60115481565b3480156106f557600080fd5b5060125461048c9062010000900460ff1681565b34801561071557600080fd5b506104dd610724366004613a8a565b6001600160a01b031660009081526020819052604090205490565b34801561074b57600080fd5b50610537611384565b34801561076057600080fd5b50610537611416565b34801561077557600080fd5b50610537610784366004613ce0565b61149f565b34801561079557600080fd5b5061048c6107a4366004613d19565b611585565b3480156107b557600080fd5b5061048c6107c4366004613a8a565b60106020526000908152604090205460ff1681565b3480156107e557600080fd5b506104dd60065481565b3480156107fb57600080fd5b506105376117ac565b34801561081057600080fd5b506005546001600160a01b0316610454565b34801561082e57600080fd5b5061041e61189c565b34801561084357600080fd5b50610537610852366004613ce0565b6118ab565b34801561086357600080fd5b506104dd60185481565b34801561087957600080fd5b506104dd60215481565b34801561088f57600080fd5b506104dd601d5481565b3480156108a557600080fd5b5061048c6108b4366004613a5e565b6119bd565b3480156108c557600080fd5b506104dd600f5481565b3480156108db57600080fd5b5061048c6108ea366004613a5e565b611a56565b3480156108fb57600080fd5b506104dd60085481565b34801561091157600080fd5b506104dd601e5481565b34801561092757600080fd5b5061048c610936366004613a8a565b60256020526000908152604090205460ff1681565b34801561095757600080fd5b5060125461048c90610100900460ff1681565b34801561097657600080fd5b50610537610985366004613ce0565b611a63565b34801561099657600080fd5b506105376109a5366004613c87565b611b0a565b3480156109b657600080fd5b5060145461048c9060ff1681565b3480156109d057600080fd5b506105376109df366004613a8a565b611c42565b3480156109f057600080fd5b506105376109ff366004613c87565b611d02565b348015610a1057600080fd5b506104dd60155481565b348015610a2657600080fd5b50610537610a35366004613c87565b611e7c565b348015610a4657600080fd5b506104dd610a55366004613d19565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a8c57600080fd5b50610537611fa1565b348015610aa157600080fd5b506104dd600b5481565b348015610ab757600080fd5b506104dd60195481565b348015610acd57600080fd5b50610537610adc366004613ca0565b612103565b348015610aed57600080fd5b506105376121d4565b348015610b0257600080fd5b506104dd600e5481565b348015610b1857600080fd5b506104dd60175481565b348015610b2e57600080fd5b50610537610b3d366004613a8a565b612228565b348015610b4e57600080fd5b50610537612331565b348015610b6357600080fd5b506104dd601c5481565b348015610b7957600080fd5b506104dd601f5481565b348015610b8f57600080fd5b50610537610b9e366004613c87565b6123bb565b606060038054610bb290613d47565b80601f0160208091040260200160405190810160405280929190818152602001828054610bde90613d47565b8015610c2b5780601f10610c0057610100808354040283529160200191610c2b565b820191906000526020600020905b815481529060010190602001808311610c0e57829003601f168201915b5050505050905090565b6000610c4233848461261d565b50600192915050565b6005546001600160a01b03163314610c985760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d83398151915260448201526064015b60405180910390fd5b8051825114610ce95760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610c8f565b610258825110610d615760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c6574732070657260448201527f2074786e2064756520746f20676173206c696d697473000000000000000000006064820152608401610c8f565b60005b8251811015610dc9576000838281518110610d8157610d81613d81565b602002602001015190506000838381518110610d9f57610d9f613d81565b60200260200101519050610db4338383612741565b50508080610dc190613dad565b915050610d64565b505050565b6000610ddb848484612910565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610e605760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c8f565b610e6d853385840361261d565b506001949350505050565b6005546001600160a01b03163314610ec05760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b670de0b6b3a76400006103e8610ed560025490565b610ee0906002613dc6565b610eea9190613de5565b610ef49190613de5565b811015610f555760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c8f565b610f6781670de0b6b3a7640000613dc6565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610feb5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6016849055601783905560188290556019819055808261100b8587613e07565b6110159190613e07565b61101f9190613e07565b6015819055600f10156110745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610c8f565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c429185906110b1908690613e07565b61261d565b6005546001600160a01b031633146110fe5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6001600160a01b0381166111635760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610c8f565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111cd5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b600b54306000908152602081905260409020541015611256576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610c8f565b600a805460ff60a01b1916600160a01b17905561127161350e565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146112fb5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6001600160a01b03811660009081526010602052604090205460ff166113635760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610c8f565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146113cc5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461145e5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6012805460ff199081169091556014805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114e75760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b8061155a57600a546001600160a01b039081169083160361155a5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c8f565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546000906001600160a01b031633146115d05760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6001600160a01b0383166116265760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c8f565b306001600160a01b0384160361167e5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c8f565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156116c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e99190613e1f565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561173c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117609190613e38565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146117f45760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b601254610100900460ff161561184c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c8f565b6012805462ffff0019166201010017905543600e81905561186e906001613e07565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610bb290613d47565b6005546001600160a01b031633146118f35760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b600a546001600160a01b03908116908316036119775760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c8f565b611981828261375b565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611a3f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c8f565b611a4c338585840361261d565b5060019392505050565b6000610c42338484612910565b6005546001600160a01b03163314611aab5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611b525760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b670de0b6b3a76400006103e8611b6760025490565b611b72906003613dc6565b611b7c9190613de5565b611b869190613de5565b811015611bfb5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201527f6572207468616e20302e332500000000000000000000000000000000000000006064820152608401610c8f565b611c0d81670de0b6b3a7640000613dc6565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f98565b6005546001600160a01b03163314611c8a5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6001600160a01b038116611ce05760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610c8f565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611d4a5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b620186a0611d5760025490565b611d62906001613dc6565b611d6c9190613de5565b811015611de15760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527f20302e3030312520746f74616c20737570706c792e00000000000000000000006064820152608401610c8f565b6103e8611ded60025490565b611df8906001613dc6565b611e029190613de5565b811115611e775760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527f6e20302e312520746f74616c20737570706c792e0000000000000000000000006064820152608401610c8f565b600b55565b6005546001600160a01b03163314611ec45760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b670de0b6b3a76400006103e8611ed960025490565b611ee4906002613dc6565b611eee9190613de5565b611ef89190613de5565b811015611f5a5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c8f565b611f6c81670de0b6b3a7640000613dc6565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f98565b6005546001600160a01b03163314611fe95760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6000601b8190556003601c819055601d829055601e8190559061200c8282613e07565b6120169190613e07565b6120209190613e07565b601a819055601410156120755760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610c8f565b600060168190556003601781905560188290556019819055906120988282613e07565b6120a29190613e07565b6120ac9190613e07565b6015819055600f10156121015760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610c8f565b565b6005546001600160a01b0316331461214b5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b601b849055601c839055601d829055601e819055808261216b8587613e07565b6121759190613e07565b61217f9190613e07565b601a819055601410156110745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610c8f565b6005546001600160a01b0316331461221c5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6014805460ff19169055565b6005546001600160a01b031633146122705760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6001600160a01b0381166122d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c8f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146123795760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b604051600090339047908381818185875af1925050503d8060008114611074576040519150601f19603f3d011682016040523d82523d6000602084013e611074565b6005546001600160a01b031633146124035760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b678ac7230489e800008111156124915760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610c8f565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613e55565b8160008151811061253257612532613d81565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061256657612566613d81565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906125ae90600090869061dead904290600401613eb6565b6000604051808303818588803b1580156125c757600080fd5b505af11580156125db573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205688260405161261191815260200190565b60405180910390a15050565b6001600160a01b03831661267f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c8f565b6001600160a01b0382166126e05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c8f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166127a55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c8f565b6001600160a01b0382166128075760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c8f565b6001600160a01b0383166000908152602081905260409020548181101561287f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c8f565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906128b6908490613e07565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161290291815260200190565b60405180910390a350505050565b6001600160a01b0383166129745760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c8f565b6001600160a01b0382166129d65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c8f565b60008111612a265760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c8f565b601254610100900460ff16612ac0576001600160a01b03831660009081526023602052604090205460ff1680612a7457506001600160a01b03821660009081526023602052604090205460ff165b612ac05760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f74206163746976652e000000000000000000006044820152606401610c8f565b600f544310158015612ad457506000600f54115b15612ba4576001600160a01b03831660009081526010602052604090205460ff161580612b0e57506005546001600160a01b038381169116145b80612b2357506001600160a01b03821661dead145b612ba45760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610c8f565b60125460ff1615612fd2576005546001600160a01b03848116911614801590612bdb57506005546001600160a01b03838116911614155b8015612bef57506001600160a01b03821615155b8015612c0657506001600160a01b03821661dead14155b8015612c2b57506001600160a01b03831660009081526023602052604090205460ff16155b8015612c5057506001600160a01b03821660009081526023602052604090205460ff16155b15612fd25760145460ff1615612d71576009546001600160a01b03838116911614801590612c8c5750600a546001600160a01b03838116911614155b15612d7157612c9c600243613eeb565b32600090815260136020526040902054108015612cda5750612cbf600243613eeb565b6001600160a01b038316600090815260136020526040902054105b612d4c5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e202054727920616761696e206c617465722e00000000000000000000006064820152608401610c8f565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526025602052604090205460ff168015612db257506001600160a01b03821660009081526024602052604090205460ff16155b15612e9357600654811115612e1a5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c8f565b6008546001600160a01b038316600090815260208190526040902054612e409083613e07565b1115612e8e5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c8f565b612fd2565b6001600160a01b03821660009081526025602052604090205460ff168015612ed457506001600160a01b03831660009081526024602052604090205460ff16155b15612f3e57600754811115612e8e5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c8f565b6001600160a01b03821660009081526024602052604090205460ff16612fd2576008546001600160a01b038316600090815260208190526040902054612f849083613e07565b1115612fd25760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c8f565b30600090815260208190526040902054600b5481108015908190612ffe575060125462010000900460ff165b80156130145750600a54600160a01b900460ff16155b801561303957506001600160a01b03851660009081526025602052604090205460ff16155b801561305e57506001600160a01b03851660009081526023602052604090205460ff16155b801561308357506001600160a01b03841660009081526023602052604090205460ff16155b156130b157600a805460ff60a01b1916600160a01b1790556130a361350e565b600a805460ff60a01b191690555b6001600160a01b03851660009081526023602052604090205460019060ff16806130f357506001600160a01b03851660009081526023602052604090205460ff165b156130fc575060005b600081156134fa57600f544310801561312d57506001600160a01b03871660009081526025602052604090205460ff165b801561315257506001600160a01b03861660009081526025602052604090205460ff16155b801561316057506000601554115b156132e3576001600160a01b03861660009081526010602052604090205460ff16613200576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560118054919290916131be908490613e07565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064601554866132109190613dc6565b61321a9190613de5565b90506015546017548261322d9190613dc6565b6132379190613de5565b602060008282546132489190613e07565b909155505060155460165461325d9083613dc6565b6132679190613de5565b601f60008282546132789190613e07565b909155505060155460185461328d9083613dc6565b6132979190613de5565b602160008282546132a89190613e07565b90915550506015546019546132bd9083613dc6565b6132c79190613de5565b602260008282546132d89190613e07565b909155506134dc9050565b6001600160a01b03861660009081526025602052604090205460ff16801561330d57506000601a54115b156133cf576064601a54866133229190613dc6565b61332c9190613de5565b9050601a54601c548261333f9190613dc6565b6133499190613de5565b6020600082825461335a9190613e07565b9091555050601a54601b5461336f9083613dc6565b6133799190613de5565b601f600082825461338a9190613e07565b9091555050601a54601d5461339f9083613dc6565b6133a99190613de5565b602160008282546133ba9190613e07565b9091555050601a54601e546132bd9083613dc6565b6001600160a01b03871660009081526025602052604090205460ff1680156133f957506000601554115b156134dc5760646015548661340e9190613dc6565b6134189190613de5565b90506015546017548261342b9190613dc6565b6134359190613de5565b602060008282546134469190613e07565b909155505060155460165461345b9083613dc6565b6134659190613de5565b601f60008282546134769190613e07565b909155505060155460185461348b9083613dc6565b6134959190613de5565b602160008282546134a69190613e07565b90915550506015546019546134bb9083613dc6565b6134c59190613de5565b602260008282546134d69190613e07565b90915550505b80156134ed576134ed873083612741565b6134f78186613eeb565b94505b613505878787612741565b50505050505050565b600060225411801561353157506022543060009081526020819052604090205410155b15613545576135453061dead602254612741565b600060228190553081526020819052604081205490506000602154601f546020546135709190613e07565b61357a9190613e07565b9050811580613587575080155b15613590575050565b600b5461359e906014613dc6565b8211156135b657600b546135b3906014613dc6565b91505b600080600283602054866135ca9190613dc6565b6135d49190613de5565b6135de9190613de5565b90506135f26135ed8286613eeb565b613789565b6020544790819060009061360890600290613de5565b6136129087613eeb565b601f5461361f9085613dc6565b6136299190613de5565b90506000600260205461363c9190613de5565b6136469088613eeb565b6021546136539086613dc6565b61365d9190613de5565b90506136698183613e07565b6136739084613eeb565b60006020819055601f8190556021819055602255925084158015906136985750600083115b156136a7576136a785846138e3565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146136f4576040519150601f19603f3d011682016040523d82523d6000602084013e6136f9565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114613749576040519150601f19603f3d011682016040523d82523d6000602084013e61374e565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602560205260409020805460ff19168215151790556119818282613995565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106137be576137be613d81565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613817573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061383b9190613e55565b8160018151811061384e5761384e613d81565b6001600160a01b039283166020918202929092010152600954613874913091168461261d565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906138ad908590600090869030904290600401613f02565b600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b505050505050565b6009546138fb9030906001600160a01b03168461261d565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613969573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061398e9190613f3e565b5050505050565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67469101612611565b600060208083528351808285015260005b81811015613a1e57858101830151858201604001528201613a02565b81811115613a30576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114613a5b57600080fd5b50565b60008060408385031215613a7157600080fd5b8235613a7c81613a46565b946020939093013593505050565b600060208284031215613a9c57600080fd5b8135613aa781613a46565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613aed57613aed613aae565b604052919050565b600067ffffffffffffffff821115613b0f57613b0f613aae565b5060051b60200190565b600082601f830112613b2a57600080fd5b81356020613b3f613b3a83613af5565b613ac4565b82815260059290921b84018101918181019086841115613b5e57600080fd5b8286015b84811015613b795780358352918301918301613b62565b509695505050505050565b60008060408385031215613b9757600080fd5b823567ffffffffffffffff80821115613baf57600080fd5b818501915085601f830112613bc357600080fd5b81356020613bd3613b3a83613af5565b82815260059290921b84018101918181019089841115613bf257600080fd5b948201945b83861015613c19578535613c0a81613a46565b82529482019490820190613bf7565b96505086013592505080821115613c2f57600080fd5b50613c3c85828601613b19565b9150509250929050565b600080600060608486031215613c5b57600080fd5b8335613c6681613a46565b92506020840135613c7681613a46565b929592945050506040919091013590565b600060208284031215613c9957600080fd5b5035919050565b60008060008060808587031215613cb657600080fd5b5050823594602084013594506040840135936060013592509050565b8015158114613a5b57600080fd5b60008060408385031215613cf357600080fd5b8235613cfe81613a46565b91506020830135613d0e81613cd2565b809150509250929050565b60008060408385031215613d2c57600080fd5b8235613d3781613a46565b91506020830135613d0e81613a46565b600181811c90821680613d5b57607f821691505b602082108103613d7b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613dbf57613dbf613d97565b5060010190565b6000816000190483118215151615613de057613de0613d97565b500290565b600082613e0257634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613e1a57613e1a613d97565b500190565b600060208284031215613e3157600080fd5b5051919050565b600060208284031215613e4a57600080fd5b8151613aa781613cd2565b600060208284031215613e6757600080fd5b8151613aa781613a46565b600081518084526020808501945080840160005b83811015613eab5781516001600160a01b031687529582019590820190600101613e86565b509495945050505050565b848152608060208201526000613ecf6080830186613e72565b6001600160a01b03949094166040830152506060015292915050565b600082821015613efd57613efd613d97565b500390565b85815284602082015260a060408201526000613f2160a0830186613e72565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613f5357600080fd5b835192506020840151915060408401519050925092509256fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220ab11556efe32c317e81ce07579f86b49b694d645ea04105cab311337688a767264736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103fd5760003560e01c80638da5cb5b1161020d578063d0d41fe111610128578063e7ad9fcd116100bb578063f2fde38b1161008a578063f63743421161006f578063f637434214610b57578063fb002c9714610b6d578063fc155d1d14610b8357600080fd5b8063f2fde38b14610b22578063f5648a4f14610b4257600080fd5b8063e7ad9fcd14610ac1578063e884f26014610ae1578063ee40166e14610af6578063f11a24d314610b0c57600080fd5b8063dd62ed3e116100f7578063dd62ed3e14610a3a578063e2cd5fcd14610a80578063e2f4560514610a95578063e71dc3f514610aab57600080fd5b8063d0d41fe1146109c4578063d257b34f146109e4578063d85ba06314610a04578063dc3f0d0f14610a1a57600080fd5b8063a9059cbb116101a0578063bbc0c7421161016f578063bbc0c7421461094b578063c02466681461096a578063c18bc1951461098a578063c876d0b9146109aa57600080fd5b8063a9059cbb146108cf578063aa4bde28146108ef578063adb873bd14610905578063b62496f51461091b57600080fd5b80639fccce32116101dc5780639fccce321461086d578063a0d82dc514610883578063a457c2d714610899578063a62068ce146108b957600080fd5b80638da5cb5b1461080457806395d89b41146108225780639a7a23d6146108375780639c3b4fdc1461085757600080fd5b80634f77f6c0116103185780636ddd1713116102ab5780637571336a1161027a57806385ecfd281161025f57806385ecfd28146107a957806388e765ff146107d95780638a8c523c146107ef57600080fd5b80637571336a146107695780638366e79a1461078957600080fd5b80636ddd1713146106e957806370a0823114610709578063715018a61461073f578063751039fc1461075457600080fd5b80635bb988c9116102e75780635bb988c91461068757806366d602ae146106a75780636a486a8e146106bd5780636b0a894c146106d357600080fd5b80634f77f6c01461062f57806351f205e41461064557806358a6d5311461065a5780635a139dd41461067157600080fd5b806323b872dd11610390578063395093511161035f57806339509351146105b5578063452ed4f1146105d5578063499b8394146105f55780634a62bb651461061557600080fd5b806323b872dd146105395780632be32b61146105595780632e6ed7ef14610579578063313ce5671461059957600080fd5b806318160ddd116103cc57806318160ddd146104cc5780631a8145bb146104eb5780631d777856146105015780632307b4411461051757600080fd5b806306fdde03146104095780630758d92414610434578063095ea7b31461046c57806310d5de531461049c57600080fd5b3661040457005b600080fd5b34801561041557600080fd5b5061041e610ba3565b60405161042b91906139f1565b60405180910390f35b34801561044057600080fd5b50600954610454906001600160a01b031681565b6040516001600160a01b03909116815260200161042b565b34801561047857600080fd5b5061048c610487366004613a5e565b610c35565b604051901515815260200161042b565b3480156104a857600080fd5b5061048c6104b7366004613a8a565b60246020526000908152604090205460ff1681565b3480156104d857600080fd5b506002545b60405190815260200161042b565b3480156104f757600080fd5b506104dd60205481565b34801561050d57600080fd5b506104dd60225481565b34801561052357600080fd5b50610537610532366004613b84565b610c4b565b005b34801561054557600080fd5b5061048c610554366004613c46565b610dce565b34801561056557600080fd5b50610537610574366004613c87565b610e78565b34801561058557600080fd5b50610537610594366004613ca0565b610fa3565b3480156105a557600080fd5b506040516012815260200161042b565b3480156105c157600080fd5b5061048c6105d0366004613a5e565b61107a565b3480156105e157600080fd5b50600a54610454906001600160a01b031681565b34801561060157600080fd5b50610537610610366004613a8a565b6110b6565b34801561062157600080fd5b5060125461048c9060ff1681565b34801561063b57600080fd5b506104dd601b5481565b34801561065157600080fd5b50610537611185565b34801561066657600080fd5b50600f54431061048c565b34801561067d57600080fd5b506104dd60165481565b34801561069357600080fd5b506105376106a2366004613a8a565b6112b3565b3480156106b357600080fd5b506104dd60075481565b3480156106c957600080fd5b506104dd601a5481565b3480156106df57600080fd5b506104dd60115481565b3480156106f557600080fd5b5060125461048c9062010000900460ff1681565b34801561071557600080fd5b506104dd610724366004613a8a565b6001600160a01b031660009081526020819052604090205490565b34801561074b57600080fd5b50610537611384565b34801561076057600080fd5b50610537611416565b34801561077557600080fd5b50610537610784366004613ce0565b61149f565b34801561079557600080fd5b5061048c6107a4366004613d19565b611585565b3480156107b557600080fd5b5061048c6107c4366004613a8a565b60106020526000908152604090205460ff1681565b3480156107e557600080fd5b506104dd60065481565b3480156107fb57600080fd5b506105376117ac565b34801561081057600080fd5b506005546001600160a01b0316610454565b34801561082e57600080fd5b5061041e61189c565b34801561084357600080fd5b50610537610852366004613ce0565b6118ab565b34801561086357600080fd5b506104dd60185481565b34801561087957600080fd5b506104dd60215481565b34801561088f57600080fd5b506104dd601d5481565b3480156108a557600080fd5b5061048c6108b4366004613a5e565b6119bd565b3480156108c557600080fd5b506104dd600f5481565b3480156108db57600080fd5b5061048c6108ea366004613a5e565b611a56565b3480156108fb57600080fd5b506104dd60085481565b34801561091157600080fd5b506104dd601e5481565b34801561092757600080fd5b5061048c610936366004613a8a565b60256020526000908152604090205460ff1681565b34801561095757600080fd5b5060125461048c90610100900460ff1681565b34801561097657600080fd5b50610537610985366004613ce0565b611a63565b34801561099657600080fd5b506105376109a5366004613c87565b611b0a565b3480156109b657600080fd5b5060145461048c9060ff1681565b3480156109d057600080fd5b506105376109df366004613a8a565b611c42565b3480156109f057600080fd5b506105376109ff366004613c87565b611d02565b348015610a1057600080fd5b506104dd60155481565b348015610a2657600080fd5b50610537610a35366004613c87565b611e7c565b348015610a4657600080fd5b506104dd610a55366004613d19565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a8c57600080fd5b50610537611fa1565b348015610aa157600080fd5b506104dd600b5481565b348015610ab757600080fd5b506104dd60195481565b348015610acd57600080fd5b50610537610adc366004613ca0565b612103565b348015610aed57600080fd5b506105376121d4565b348015610b0257600080fd5b506104dd600e5481565b348015610b1857600080fd5b506104dd60175481565b348015610b2e57600080fd5b50610537610b3d366004613a8a565b612228565b348015610b4e57600080fd5b50610537612331565b348015610b6357600080fd5b506104dd601c5481565b348015610b7957600080fd5b506104dd601f5481565b348015610b8f57600080fd5b50610537610b9e366004613c87565b6123bb565b606060038054610bb290613d47565b80601f0160208091040260200160405190810160405280929190818152602001828054610bde90613d47565b8015610c2b5780601f10610c0057610100808354040283529160200191610c2b565b820191906000526020600020905b815481529060010190602001808311610c0e57829003601f168201915b5050505050905090565b6000610c4233848461261d565b50600192915050565b6005546001600160a01b03163314610c985760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d83398151915260448201526064015b60405180910390fd5b8051825114610ce95760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610c8f565b610258825110610d615760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c6574732070657260448201527f2074786e2064756520746f20676173206c696d697473000000000000000000006064820152608401610c8f565b60005b8251811015610dc9576000838281518110610d8157610d81613d81565b602002602001015190506000838381518110610d9f57610d9f613d81565b60200260200101519050610db4338383612741565b50508080610dc190613dad565b915050610d64565b505050565b6000610ddb848484612910565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610e605760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c8f565b610e6d853385840361261d565b506001949350505050565b6005546001600160a01b03163314610ec05760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b670de0b6b3a76400006103e8610ed560025490565b610ee0906002613dc6565b610eea9190613de5565b610ef49190613de5565b811015610f555760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c8f565b610f6781670de0b6b3a7640000613dc6565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610feb5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6016849055601783905560188290556019819055808261100b8587613e07565b6110159190613e07565b61101f9190613e07565b6015819055600f10156110745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610c8f565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c429185906110b1908690613e07565b61261d565b6005546001600160a01b031633146110fe5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6001600160a01b0381166111635760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610c8f565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111cd5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b600b54306000908152602081905260409020541015611256576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610c8f565b600a805460ff60a01b1916600160a01b17905561127161350e565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146112fb5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6001600160a01b03811660009081526010602052604090205460ff166113635760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610c8f565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146113cc5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461145e5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6012805460ff199081169091556014805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114e75760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b8061155a57600a546001600160a01b039081169083160361155a5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c8f565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546000906001600160a01b031633146115d05760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6001600160a01b0383166116265760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c8f565b306001600160a01b0384160361167e5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c8f565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156116c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e99190613e1f565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561173c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117609190613e38565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146117f45760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b601254610100900460ff161561184c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c8f565b6012805462ffff0019166201010017905543600e81905561186e906001613e07565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610bb290613d47565b6005546001600160a01b031633146118f35760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b600a546001600160a01b03908116908316036119775760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c8f565b611981828261375b565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611a3f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c8f565b611a4c338585840361261d565b5060019392505050565b6000610c42338484612910565b6005546001600160a01b03163314611aab5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611b525760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b670de0b6b3a76400006103e8611b6760025490565b611b72906003613dc6565b611b7c9190613de5565b611b869190613de5565b811015611bfb5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201527f6572207468616e20302e332500000000000000000000000000000000000000006064820152608401610c8f565b611c0d81670de0b6b3a7640000613dc6565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f98565b6005546001600160a01b03163314611c8a5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6001600160a01b038116611ce05760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610c8f565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611d4a5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b620186a0611d5760025490565b611d62906001613dc6565b611d6c9190613de5565b811015611de15760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527f20302e3030312520746f74616c20737570706c792e00000000000000000000006064820152608401610c8f565b6103e8611ded60025490565b611df8906001613dc6565b611e029190613de5565b811115611e775760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527f6e20302e312520746f74616c20737570706c792e0000000000000000000000006064820152608401610c8f565b600b55565b6005546001600160a01b03163314611ec45760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b670de0b6b3a76400006103e8611ed960025490565b611ee4906002613dc6565b611eee9190613de5565b611ef89190613de5565b811015611f5a5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c8f565b611f6c81670de0b6b3a7640000613dc6565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f98565b6005546001600160a01b03163314611fe95760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6000601b8190556003601c819055601d829055601e8190559061200c8282613e07565b6120169190613e07565b6120209190613e07565b601a819055601410156120755760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610c8f565b600060168190556003601781905560188290556019819055906120988282613e07565b6120a29190613e07565b6120ac9190613e07565b6015819055600f10156121015760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610c8f565b565b6005546001600160a01b0316331461214b5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b601b849055601c839055601d829055601e819055808261216b8587613e07565b6121759190613e07565b61217f9190613e07565b601a819055601410156110745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610c8f565b6005546001600160a01b0316331461221c5760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6014805460ff19169055565b6005546001600160a01b031633146122705760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b6001600160a01b0381166122d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c8f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146123795760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b604051600090339047908381818185875af1925050503d8060008114611074576040519150601f19603f3d011682016040523d82523d6000602084013e611074565b6005546001600160a01b031633146124035760405162461bcd60e51b81526020600482018190526024820152600080516020613f6d8339815191526044820152606401610c8f565b678ac7230489e800008111156124915760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610c8f565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613e55565b8160008151811061253257612532613d81565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061256657612566613d81565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906125ae90600090869061dead904290600401613eb6565b6000604051808303818588803b1580156125c757600080fd5b505af11580156125db573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205688260405161261191815260200190565b60405180910390a15050565b6001600160a01b03831661267f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c8f565b6001600160a01b0382166126e05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c8f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166127a55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c8f565b6001600160a01b0382166128075760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c8f565b6001600160a01b0383166000908152602081905260409020548181101561287f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c8f565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906128b6908490613e07565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161290291815260200190565b60405180910390a350505050565b6001600160a01b0383166129745760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c8f565b6001600160a01b0382166129d65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c8f565b60008111612a265760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c8f565b601254610100900460ff16612ac0576001600160a01b03831660009081526023602052604090205460ff1680612a7457506001600160a01b03821660009081526023602052604090205460ff165b612ac05760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f74206163746976652e000000000000000000006044820152606401610c8f565b600f544310158015612ad457506000600f54115b15612ba4576001600160a01b03831660009081526010602052604090205460ff161580612b0e57506005546001600160a01b038381169116145b80612b2357506001600160a01b03821661dead145b612ba45760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610c8f565b60125460ff1615612fd2576005546001600160a01b03848116911614801590612bdb57506005546001600160a01b03838116911614155b8015612bef57506001600160a01b03821615155b8015612c0657506001600160a01b03821661dead14155b8015612c2b57506001600160a01b03831660009081526023602052604090205460ff16155b8015612c5057506001600160a01b03821660009081526023602052604090205460ff16155b15612fd25760145460ff1615612d71576009546001600160a01b03838116911614801590612c8c5750600a546001600160a01b03838116911614155b15612d7157612c9c600243613eeb565b32600090815260136020526040902054108015612cda5750612cbf600243613eeb565b6001600160a01b038316600090815260136020526040902054105b612d4c5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e202054727920616761696e206c617465722e00000000000000000000006064820152608401610c8f565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526025602052604090205460ff168015612db257506001600160a01b03821660009081526024602052604090205460ff16155b15612e9357600654811115612e1a5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c8f565b6008546001600160a01b038316600090815260208190526040902054612e409083613e07565b1115612e8e5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c8f565b612fd2565b6001600160a01b03821660009081526025602052604090205460ff168015612ed457506001600160a01b03831660009081526024602052604090205460ff16155b15612f3e57600754811115612e8e5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c8f565b6001600160a01b03821660009081526024602052604090205460ff16612fd2576008546001600160a01b038316600090815260208190526040902054612f849083613e07565b1115612fd25760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c8f565b30600090815260208190526040902054600b5481108015908190612ffe575060125462010000900460ff165b80156130145750600a54600160a01b900460ff16155b801561303957506001600160a01b03851660009081526025602052604090205460ff16155b801561305e57506001600160a01b03851660009081526023602052604090205460ff16155b801561308357506001600160a01b03841660009081526023602052604090205460ff16155b156130b157600a805460ff60a01b1916600160a01b1790556130a361350e565b600a805460ff60a01b191690555b6001600160a01b03851660009081526023602052604090205460019060ff16806130f357506001600160a01b03851660009081526023602052604090205460ff165b156130fc575060005b600081156134fa57600f544310801561312d57506001600160a01b03871660009081526025602052604090205460ff165b801561315257506001600160a01b03861660009081526025602052604090205460ff16155b801561316057506000601554115b156132e3576001600160a01b03861660009081526010602052604090205460ff16613200576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560118054919290916131be908490613e07565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064601554866132109190613dc6565b61321a9190613de5565b90506015546017548261322d9190613dc6565b6132379190613de5565b602060008282546132489190613e07565b909155505060155460165461325d9083613dc6565b6132679190613de5565b601f60008282546132789190613e07565b909155505060155460185461328d9083613dc6565b6132979190613de5565b602160008282546132a89190613e07565b90915550506015546019546132bd9083613dc6565b6132c79190613de5565b602260008282546132d89190613e07565b909155506134dc9050565b6001600160a01b03861660009081526025602052604090205460ff16801561330d57506000601a54115b156133cf576064601a54866133229190613dc6565b61332c9190613de5565b9050601a54601c548261333f9190613dc6565b6133499190613de5565b6020600082825461335a9190613e07565b9091555050601a54601b5461336f9083613dc6565b6133799190613de5565b601f600082825461338a9190613e07565b9091555050601a54601d5461339f9083613dc6565b6133a99190613de5565b602160008282546133ba9190613e07565b9091555050601a54601e546132bd9083613dc6565b6001600160a01b03871660009081526025602052604090205460ff1680156133f957506000601554115b156134dc5760646015548661340e9190613dc6565b6134189190613de5565b90506015546017548261342b9190613dc6565b6134359190613de5565b602060008282546134469190613e07565b909155505060155460165461345b9083613dc6565b6134659190613de5565b601f60008282546134769190613e07565b909155505060155460185461348b9083613dc6565b6134959190613de5565b602160008282546134a69190613e07565b90915550506015546019546134bb9083613dc6565b6134c59190613de5565b602260008282546134d69190613e07565b90915550505b80156134ed576134ed873083612741565b6134f78186613eeb565b94505b613505878787612741565b50505050505050565b600060225411801561353157506022543060009081526020819052604090205410155b15613545576135453061dead602254612741565b600060228190553081526020819052604081205490506000602154601f546020546135709190613e07565b61357a9190613e07565b9050811580613587575080155b15613590575050565b600b5461359e906014613dc6565b8211156135b657600b546135b3906014613dc6565b91505b600080600283602054866135ca9190613dc6565b6135d49190613de5565b6135de9190613de5565b90506135f26135ed8286613eeb565b613789565b6020544790819060009061360890600290613de5565b6136129087613eeb565b601f5461361f9085613dc6565b6136299190613de5565b90506000600260205461363c9190613de5565b6136469088613eeb565b6021546136539086613dc6565b61365d9190613de5565b90506136698183613e07565b6136739084613eeb565b60006020819055601f8190556021819055602255925084158015906136985750600083115b156136a7576136a785846138e3565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146136f4576040519150601f19603f3d011682016040523d82523d6000602084013e6136f9565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114613749576040519150601f19603f3d011682016040523d82523d6000602084013e61374e565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602560205260409020805460ff19168215151790556119818282613995565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106137be576137be613d81565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613817573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061383b9190613e55565b8160018151811061384e5761384e613d81565b6001600160a01b039283166020918202929092010152600954613874913091168461261d565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906138ad908590600090869030904290600401613f02565b600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b505050505050565b6009546138fb9030906001600160a01b03168461261d565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613969573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061398e9190613f3e565b5050505050565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67469101612611565b600060208083528351808285015260005b81811015613a1e57858101830151858201604001528201613a02565b81811115613a30576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114613a5b57600080fd5b50565b60008060408385031215613a7157600080fd5b8235613a7c81613a46565b946020939093013593505050565b600060208284031215613a9c57600080fd5b8135613aa781613a46565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613aed57613aed613aae565b604052919050565b600067ffffffffffffffff821115613b0f57613b0f613aae565b5060051b60200190565b600082601f830112613b2a57600080fd5b81356020613b3f613b3a83613af5565b613ac4565b82815260059290921b84018101918181019086841115613b5e57600080fd5b8286015b84811015613b795780358352918301918301613b62565b509695505050505050565b60008060408385031215613b9757600080fd5b823567ffffffffffffffff80821115613baf57600080fd5b818501915085601f830112613bc357600080fd5b81356020613bd3613b3a83613af5565b82815260059290921b84018101918181019089841115613bf257600080fd5b948201945b83861015613c19578535613c0a81613a46565b82529482019490820190613bf7565b96505086013592505080821115613c2f57600080fd5b50613c3c85828601613b19565b9150509250929050565b600080600060608486031215613c5b57600080fd5b8335613c6681613a46565b92506020840135613c7681613a46565b929592945050506040919091013590565b600060208284031215613c9957600080fd5b5035919050565b60008060008060808587031215613cb657600080fd5b5050823594602084013594506040840135936060013592509050565b8015158114613a5b57600080fd5b60008060408385031215613cf357600080fd5b8235613cfe81613a46565b91506020830135613d0e81613cd2565b809150509250929050565b60008060408385031215613d2c57600080fd5b8235613d3781613a46565b91506020830135613d0e81613a46565b600181811c90821680613d5b57607f821691505b602082108103613d7b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613dbf57613dbf613d97565b5060010190565b6000816000190483118215151615613de057613de0613d97565b500290565b600082613e0257634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613e1a57613e1a613d97565b500190565b600060208284031215613e3157600080fd5b5051919050565b600060208284031215613e4a57600080fd5b8151613aa781613cd2565b600060208284031215613e6757600080fd5b8151613aa781613a46565b600081518084526020808501945080840160005b83811015613eab5781516001600160a01b031687529582019590820190600101613e86565b509495945050505050565b848152608060208201526000613ecf6080830186613e72565b6001600160a01b03949094166040830152506060015292915050565b600082821015613efd57613efd613d97565b500390565b85815284602082015260a060408201526000613f2160a0830186613e72565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613f5357600080fd5b835192506020840151915060408401519050925092509256fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220ab11556efe32c317e81ce07579f86b49b694d645ea04105cab311337688a767264736f6c634300080f0033

Deployed Bytecode Sourcemap

9974:19936:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4421:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10127:27;;;;;;;;;;-1:-1:-1;10127:27:0;;;;-1:-1:-1;;;;;10127:27:0;;;;;;-1:-1:-1;;;;;798:55:1;;;780:74;;768:2;753:18;10127:27:0;616:244:1;5335:169:0;;;;;;;;;;-1:-1:-1;5335:169:0;;;;;:::i;:::-;;:::i;:::-;;;1509:14:1;;1502:22;1484:41;;1472:2;1457:18;5335:169:0;1344:187:1;11515:64:0;;;;;;;;;;-1:-1:-1;11515:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4742:108;;;;;;;;;;-1:-1:-1;4830:12:0;;4742:108;;;1934:25:1;;;1922:2;1907:18;4742:108:0;1788:177:1;11263:33:0;;;;;;;;;;;;;;;;11337:28;;;;;;;;;;;;;;;;16761:618;;;;;;;;;;-1:-1:-1;16761:618:0;;;;;:::i;:::-;;:::i;:::-;;5512:492;;;;;;;;;;-1:-1:-1;5512:492:0;;;;;:::i;:::-;;:::i;15279:269::-;;;;;;;;;;-1:-1:-1;15279:269:0;;;;;:::i;:::-;;:::i;18206:436::-;;;;;;;;;;-1:-1:-1;18206:436:0;;;;;:::i;:::-;;:::i;4641:93::-;;;;;;;;;;-1:-1:-1;4641:93:0;;4724:2;5635:36:1;;5623:2;5608:18;4641:93:0;5493:184:1;6012:215:0;;;;;;;;;;-1:-1:-1;6012:215:0;;;;;:::i;:::-;;:::i;10161:21::-;;;;;;;;;;-1:-1:-1;10161:21:0;;;;-1:-1:-1;;;;;10161:21:0;;;28384:237;;;;;;;;;;-1:-1:-1;28384:237:0;;;;;:::i;:::-;;:::i;10522:33::-;;;;;;;;;;-1:-1:-1;10522:33:0;;;;;;;;11078:32;;;;;;;;;;;;;;;;28876:312;;;;;;;;;;;;;:::i;24831:120::-;;;;;;;;;;-1:-1:-1;24925:18:0;;24910:12;:33;24831:120;;10903:31;;;;;;;;;;;;;;;;14931:181;;;;;;;;;;-1:-1:-1;14931:181:0;;;;;:::i;:::-;;:::i;10053:28::-;;;;;;;;;;;;;;;;11043;;;;;;;;;;;;;;;;10488:25;;;;;;;;;;;;;;;;10602:31;;;;;;;;;;-1:-1:-1;10602:31:0;;;;;;;;;;;4858:127;;;;;;;;;;-1:-1:-1;4858:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4959:18:0;4932:7;4959:18;;;;;;;;;;;;4858:127;8498:150;;;;;;;;;;;;;:::i;14769:154::-;;;;;;;;;;;;;:::i;17387:260::-;;;;;;;;;;-1:-1:-1;17387:260:0;;;;;:::i;:::-;;:::i;27690:456::-;;;;;;;;;;-1:-1:-1;27690:456:0;;;;;:::i;:::-;;:::i;10437:44::-;;;;;;;;;;-1:-1:-1;10437:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10019:27;;;;;;;;;;;;;;;;14414:303;;;;;;;;;;;;;:::i;8284:79::-;;;;;;;;;;-1:-1:-1;8349:6:0;;-1:-1:-1;;;;;8349:6:0;8284:79;;4529:104;;;;;;;;;;;;;:::i;17655:295::-;;;;;;;;;;-1:-1:-1;17655:295:0;;;;;:::i;:::-;;:::i;10978:24::-;;;;;;;;;;;;;;;;11303:27;;;;;;;;;;;;;;;;11155:25;;;;;;;;;;;;;;;;6235:413;;;;;;;;;;-1:-1:-1;6235:413:0;;;;;:::i;:::-;;:::i;10397:33::-;;;;;;;;;;;;;;;;4993:175;;;;;;;;;;-1:-1:-1;4993:175:0;;;;;:::i;:::-;;:::i;10088:30::-;;;;;;;;;;;;;;;;11187:26;;;;;;;;;;;;;;;;11737:58;;;;;;;;;;-1:-1:-1;11737:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10562:33;;;;;;;;;;-1:-1:-1;10562:33:0;;;;;;;;;;;19713:182;;;;;;;;;;-1:-1:-1;19713:182:0;;;;;:::i;:::-;;:::i;15838:284::-;;;;;;;;;;-1:-1:-1;15838:284:0;;;;;:::i;:::-;;:::i;10821:39::-;;;;;;;;;;-1:-1:-1;10821:39:0;;;;;;;;28629:195;;;;;;;;;;-1:-1:-1;28629:195:0;;;;;:::i;:::-;;:::i;16192:346::-;;;;;;;;;;-1:-1:-1;16192:346:0;;;;;:::i;:::-;;:::i;10869:27::-;;;;;;;;;;;;;;;;15556:274;;;;;;;;;;-1:-1:-1;15556:274:0;;;;;:::i;:::-;;:::i;5176:151::-;;;;;;;;;;-1:-1:-1;5176:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5292:18:0;;;5265:7;5292:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5176:151;19105:600;;;;;;;;;;;;;:::i;10219:33::-;;;;;;;;;;;;;;;;11009:25;;;;;;;;;;;;;;;;18650:447;;;;;;;;;;-1:-1:-1;18650:447:0;;;;;:::i;:::-;;:::i;15173:98::-;;;;;;;;;;;;;:::i;10320:37::-;;;;;;;;;;;;;;;;10941:30;;;;;;;;;;;;;;;;8656:244;;;;;;;;;;-1:-1:-1;8656:244:0;;;;;:::i;:::-;;:::i;28216:160::-;;;;;;;;;;;;;:::i;11117:31::-;;;;;;;;;;;;;;;;11222:34;;;;;;;;;;;;;;;;29291:616;;;;;;;;;;-1:-1:-1;29291:616:0;;;;;:::i;:::-;;:::i;4421:100::-;4475:13;4508:5;4501:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4421:100;:::o;5335:169::-;5418:4;5435:39;650:10;5458:7;5467:6;5435:8;:39::i;:::-;-1:-1:-1;5492:4:0;5335:169;;;;:::o;16761:618::-;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;;;;;;;;;16903:15:::1;:22;16885:7;:14;:40;16877:83;;;::::0;-1:-1:-1;;;16877:83:0;;7764:2:1;16877:83:0::1;::::0;::::1;7746:21:1::0;7803:2;7783:18;;;7776:30;7842:32;7822:18;;;7815:60;7892:18;;16877:83:0::1;7562:354:1::0;16877:83:0::1;16996:3;16979:7;:14;:20;16971:87;;;::::0;-1:-1:-1;;;16971:87:0;;8123:2:1;16971:87:0::1;::::0;::::1;8105:21:1::0;8162:2;8142:18;;;8135:30;8201:34;8181:18;;;8174:62;8272:24;8252:18;;;8245:52;8314:19;;16971:87:0::1;7921:418:1::0;16971:87:0::1;17171:9;17167:205;17190:7;:14;17186:1;:18;17167:205;;;17225:14;17242:7;17250:1;17242:10;;;;;;;;:::i;:::-;;;;;;;17225:27;;17267:14;17284:15;17300:1;17284:18;;;;;;;;:::i;:::-;;;;;;;17267:35;;17317:43;17333:10;17345:6;17353;17317:15;:43::i;:::-;17210:162;;17206:3;;;;;:::i;:::-;;;;17167:205;;;;16761:618:::0;;:::o;5512:492::-;5652:4;5669:36;5679:6;5687:9;5698:6;5669:9;:36::i;:::-;-1:-1:-1;;;;;5745:19:0;;5718:24;5745:19;;;:11;:19;;;;;;;;650:10;5745:33;;;;;;;;5797:26;;;;5789:79;;;;-1:-1:-1;;;5789:79:0;;8950:2:1;5789:79:0;;;8932:21:1;8989:2;8969:18;;;8962:30;9028:34;9008:18;;;9001:62;-1:-1:-1;;;9079:18:1;;;9072:38;9127:19;;5789:79:0;8748:404:1;5789:79:0;5904:57;5913:6;650:10;5954:6;5935:16;:25;5904:8;:57::i;:::-;-1:-1:-1;5992:4:0;;5512:492;-1:-1:-1;;;;5512:492:0:o;15279:269::-;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;15398:4:::1;15392;15372:13;4830:12:::0;;;4742:108;15372:13:::1;:17;::::0;15388:1:::1;15372:17;:::i;:::-;:24;;;;:::i;:::-;15371:31;;;;:::i;:::-;15361:6;:41;;15353:95;;;::::0;-1:-1:-1;;;15353:95:0;;9754:2:1;15353:95:0::1;::::0;::::1;9736:21:1::0;9793:2;9773:18;;;9766:30;9832:34;9812:18;;;9805:62;-1:-1:-1;;;9883:18:1;;;9876:39;9932:19;;15353:95:0::1;9552:405:1::0;15353:95:0::1;15474:17;:6:::0;15484::::1;15474:17;:::i;:::-;15459:12;:32:::0;;;15507:33:::1;::::0;1934:25:1;;;15507:33:0::1;::::0;1922:2:1;1907:18;15507:33:0::1;;;;;;;;15279:269:::0;:::o;18206:436::-;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;18341:16:::1;:33:::0;;;18385:15:::1;:31:::0;;;18427:9:::1;:19:::0;;;18457:10:::1;:21:::0;;;18470:8;18439:7;18504:34:::1;18403:13:::0;18360:14;18504:34:::1;:::i;:::-;:46;;;;:::i;:::-;:59;;;;:::i;:::-;18489:12;:74:::0;;;18598:2:::1;-1:-1:-1::0;18582:18:0::1;18574:60;;;::::0;-1:-1:-1;;;18574:60:0;;10297:2:1;18574:60:0::1;::::0;::::1;10279:21:1::0;10336:2;10316:18;;;10309:30;10375:31;10355:18;;;10348:59;10424:18;;18574:60:0::1;10095:353:1::0;18574:60:0::1;18206:436:::0;;;;:::o;6012:215::-;650:10;6100:4;6149:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6149:34:0;;;;;;;;;;6100:4;;6117:80;;6140:7;;6149:47;;6186:10;;6149:47;:::i;:::-;6117:8;:80::i;28384:237::-;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;-1:-1:-1;;;;;28480:32:0;::::1;28472:83;;;::::0;-1:-1:-1;;;28472:83:0;;10655:2:1;28472:83:0::1;::::0;::::1;10637:21:1::0;10694:2;10674:18;;;10667:30;10733:34;10713:18;;;10706:62;-1:-1:-1;;;10784:18:1;;;10777:36;10830:19;;28472:83:0::1;10453:402:1::0;28472:83:0::1;28566:17;:47:::0;;-1:-1:-1;;;;;;28566:47:0::1;-1:-1:-1::0;;;;;28566:47:0;;;::::1;::::0;;;::::1;::::0;;28384:237::o;28876:312::-;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;28967:18:::1;::::0;28957:4:::1;4932:7:::0;4959:18;;;;;;;;;;;28939:46:::1;;28931:123;;;::::0;;-1:-1:-1;;;28931:123:0;;11062:2:1;28931:123:0::1;::::0;::::1;11044:21:1::0;11081:18;;;11074:30;;;;11140:34;11120:18;;;11113:62;11211:34;11191:18;;;11184:62;11263:19;;28931:123:0::1;10860:428:1::0;28931:123:0::1;29065:8;:15:::0;;-1:-1:-1;;;;29065:15:0::1;-1:-1:-1::0;;;29065:15:0::1;::::0;;29091:10:::1;:8;:10::i;:::-;29112:8;:16:::0;;-1:-1:-1;;;;29112:16:0::1;::::0;;29144:36:::1;::::0;29164:15:::1;1934:25:1::0;;29144:36:0::1;::::0;1922:2:1;1907:18;29144:36:0::1;;;;;;;28876:312::o:0;14931:181::-;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;-1:-1:-1;;;;;15012:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;15004:62;;;::::0;-1:-1:-1;;;15004:62:0;;11495:2:1;15004:62:0::1;::::0;::::1;11477:21:1::0;11534:2;11514:18;;;11507:30;11573:32;11553:18;;;11546:60;11623:18;;15004:62:0::1;11293:354:1::0;15004:62:0::1;-1:-1:-1::0;;;;;15077:19:0::1;15099:5;15077:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;15077:27:0::1;::::0;;14931:181::o;8498:150::-;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;8591:6:::1;::::0;8570:40:::1;::::0;8607:1:::1;::::0;-1:-1:-1;;;;;8591:6:0::1;::::0;8570:40:::1;::::0;8607:1;;8570:40:::1;8621:6;:19:::0;;-1:-1:-1;;;;;;8621:19:0::1;::::0;;8498:150::o;14769:154::-;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;14823:14:::1;:22:::0;;-1:-1:-1;;14823:22:0;;::::1;::::0;;;14856:20:::1;:28:::0;;;;::::1;::::0;;14900:15:::1;::::0;::::1;::::0;14840:5:::1;::::0;14900:15:::1;14769:154::o:0;17387:260::-;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;17483:4:::1;17479:104;;17521:6;::::0;-1:-1:-1;;;;;17521:6:0;;::::1;17511:16:::0;;::::1;::::0;17503:68:::1;;;::::0;-1:-1:-1;;;17503:68:0;;11854:2:1;17503:68:0::1;::::0;::::1;11836:21:1::0;11893:2;11873:18;;;11866:30;11932:34;11912:18;;;11905:62;-1:-1:-1;;;11983:18:1;;;11976:37;12030:19;;17503:68:0::1;11652:403:1::0;17503:68:0::1;-1:-1:-1::0;;;;;17593:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;17593:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17387:260::o;27690:456::-;8411:6;;27777:10;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;-1:-1:-1;;;;;27808:20:0;::::1;27800:59;;;::::0;-1:-1:-1;;;27800:59:0;;12262:2:1;27800:59:0::1;::::0;::::1;12244:21:1::0;12301:2;12281:18;;;12274:30;12340:28;12320:18;;;12313:56;12386:18;;27800:59:0::1;12060:350:1::0;27800:59:0::1;27896:4;-1:-1:-1::0;;;;;27878:23:0;::::1;::::0;27870:64:::1;;;::::0;-1:-1:-1;;;27870:64:0;;12617:2:1;27870:64:0::1;::::0;::::1;12599:21:1::0;12656:2;12636:18;;;12629:30;12695;12675:18;;;12668:58;12743:18;;27870:64:0::1;12415:352:1::0;27870:64:0::1;27972:39;::::0;-1:-1:-1;;;27972:39:0;;28005:4:::1;27972:39;::::0;::::1;780:74:1::0;27945:24:0::1;::::0;-1:-1:-1;;;;;27972:24:0;::::1;::::0;::::1;::::0;753:18:1;;27972:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28030:46;::::0;-1:-1:-1;;;28030:46:0;;-1:-1:-1;;;;;13153:55:1;;;28030:46:0::1;::::0;::::1;13135:74:1::0;13225:18;;;13218:34;;;27945:66:0;;-1:-1:-1;28030:23:0;;::::1;::::0;::::1;::::0;13108:18:1;;28030:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28092;::::0;;-1:-1:-1;;;;;13153:55:1;;13135:74;;13240:2;13225:18;;13218:34;;;28022:54:0;;-1:-1:-1;28092:46:0::1;::::0;13108:18:1;28092:46:0::1;;;;;;;27789:357;27690:456:::0;;;;:::o;14414:303::-;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;14478:13:::1;::::0;::::1;::::0;::::1;;;14477:14;14469:50;;;::::0;-1:-1:-1;;;14469:50:0;;13715:2:1;14469:50:0::1;::::0;::::1;13697:21:1::0;13754:2;13734:18;;;13727:30;13793:25;13773:18;;;13766:53;13836:18;;14469:50:0::1;13513:347:1::0;14469:50:0::1;14530:13;:20:::0;;-1:-1:-1;;14561:18:0;;;;;14611:12:::1;14590:18;:33:::0;;;14655:22:::1;::::0;-1:-1:-1;14655:22:0::1;:::i;:::-;14634:18;:43:::0;14693:16:::1;::::0;::::1;::::0;;;::::1;14414:303::o:0;4529:104::-;4585:13;4618:7;4611:14;;;;;:::i;17655:295::-;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;17764:6:::1;::::0;-1:-1:-1;;;;;17764:6:0;;::::1;17756:14:::0;;::::1;::::0;17748:84:::1;;;::::0;-1:-1:-1;;;17748:84:0;;14067:2:1;17748:84:0::1;::::0;::::1;14049:21:1::0;14106:2;14086:18;;;14079:30;14145:34;14125:18;;;14118:62;14216:27;14196:18;;;14189:55;14261:19;;17748:84:0::1;13865:421:1::0;17748:84:0::1;17845:41;17874:4;17880:5;17845:28;:41::i;:::-;17902:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;17902:40:0;::::1;::::0;::::1;::::0;;;::::1;17655:295:::0;;:::o;6235:413::-;650:10;6328:4;6372:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6372:34:0;;;;;;;;;;6425:35;;;;6417:85;;;;-1:-1:-1;;;6417:85:0;;14493:2:1;6417:85:0;;;14475:21:1;14532:2;14512:18;;;14505:30;14571:34;14551:18;;;14544:62;-1:-1:-1;;;14622:18:1;;;14615:35;14667:19;;6417:85:0;14291:401:1;6417:85:0;6538:67;650:10;6561:7;6589:15;6570:16;:34;6538:8;:67::i;:::-;-1:-1:-1;6636:4:0;;6235:413;-1:-1:-1;;;6235:413:0:o;4993:175::-;5079:4;5096:42;650:10;5120:9;5131:6;5096:9;:42::i;19713:182::-;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;-1:-1:-1;;;;;19798:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;19798:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19853:34;;1484:41:1;;;19853:34:0::1;::::0;1457:18:1;19853:34:0::1;;;;;;;19713:182:::0;;:::o;15838:284::-;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;15960:4:::1;15954;15934:13;4830:12:::0;;;4742:108;15934:13:::1;:17;::::0;15950:1:::1;15934:17;:::i;:::-;:24;;;;:::i;:::-;15933:31;;;;:::i;:::-;15923:6;:41;;15915:98;;;::::0;-1:-1:-1;;;15915:98:0;;14899:2:1;15915:98:0::1;::::0;::::1;14881:21:1::0;14938:2;14918:18;;;14911:30;14977:34;14957:18;;;14950:62;15048:14;15028:18;;;15021:42;15080:19;;15915:98:0::1;14697:408:1::0;15915:98:0::1;16042:17;:6:::0;16052::::1;16042:17;:::i;:::-;16024:15;:35:::0;;;16075:39:::1;::::0;1934:25:1;;;16075:39:0::1;::::0;1922:2:1;1907:18;16075:39:0::1;1788:177:1::0;28629:195:0;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;-1:-1:-1;;;;;28711:25:0;::::1;28703:69;;;::::0;-1:-1:-1;;;28703:69:0;;15312:2:1;28703:69:0::1;::::0;::::1;15294:21:1::0;15351:2;15331:18;;;15324:30;15390:33;15370:18;;;15363:61;15441:18;;28703:69:0::1;15110:355:1::0;28703:69:0::1;28783:10;:33:::0;;-1:-1:-1;;;;;;28783:33:0::1;-1:-1:-1::0;;;;;28783:33:0;;;::::1;::::0;;;::::1;::::0;;28629:195::o;16192:346::-;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;16315:6:::1;16295:13;4830:12:::0;;;4742:108;16295:13:::1;:17;::::0;16311:1:::1;16295:17;:::i;:::-;:26;;;;:::i;:::-;16282:9;:39;;16274:105;;;::::0;-1:-1:-1;;;16274:105:0;;15672:2:1;16274:105:0::1;::::0;::::1;15654:21:1::0;15711:2;15691:18;;;15684:30;15750:34;15730:18;;;15723:62;15821:23;15801:18;;;15794:51;15862:19;;16274:105:0::1;15470:417:1::0;16274:105:0::1;16430:4;16410:13;4830:12:::0;;;4742:108;16410:13:::1;:17;::::0;16426:1:::1;16410:17;:::i;:::-;:24;;;;:::i;:::-;16397:9;:37;;16389:102;;;::::0;-1:-1:-1;;;16389:102:0;;16094:2:1;16389:102:0::1;::::0;::::1;16076:21:1::0;16133:2;16113:18;;;16106:30;16172:34;16152:18;;;16145:62;16243:22;16223:18;;;16216:50;16283:19;;16389:102:0::1;15892:416:1::0;16389:102:0::1;16501:18;:30:::0;16192:346::o;15556:274::-;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;15676:4:::1;15670;15650:13;4830:12:::0;;;4742:108;15650:13:::1;:17;::::0;15666:1:::1;15650:17;:::i;:::-;:24;;;;:::i;:::-;15649:31;;;;:::i;:::-;15639:6;:41;;15631:96;;;::::0;-1:-1:-1;;;15631:96:0;;16515:2:1;15631:96:0::1;::::0;::::1;16497:21:1::0;16554:2;16534:18;;;16527:30;16593:34;16573:18;;;16566:62;-1:-1:-1;;;16644:18:1;;;16637:40;16694:19;;15631:96:0::1;16313:406:1::0;15631:96:0::1;15754:17;:6:::0;15764::::1;15754:17;:::i;:::-;15738:13;:33:::0;;;15787:35:::1;::::0;1934:25:1;;;15787:35:0::1;::::0;1922:2:1;1907:18;15787:35:0::1;1788:177:1::0;19105:600:0;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;19184:1:::1;19164:17;:21:::0;;;19215:1:::1;19196:16;:20:::0;;;19227:10:::1;:14:::0;;;19252:11:::1;:15:::0;;;19215:1;19294:36:::1;19215:1:::0;19184;19294:36:::1;:::i;:::-;:49;;;;:::i;:::-;:63;;;;:::i;:::-;19278:13;:79:::0;;;19393:2:::1;-1:-1:-1::0;19376:19:0::1;19368:61;;;::::0;-1:-1:-1;;;19368:61:0;;16926:2:1;19368:61:0::1;::::0;::::1;16908:21:1::0;16965:2;16945:18;;;16938:30;17004:31;16984:18;;;16977:59;17053:18;;19368:61:0::1;16724:353:1::0;19368:61:0::1;19461:1;19442:16;:20:::0;;;19491:1:::1;19473:15;:19:::0;;;19503:9:::1;:13:::0;;;19527:10:::1;:14:::0;;;19491:1;19567:34:::1;19491:1:::0;19461;19567:34:::1;:::i;:::-;:46;;;;:::i;:::-;:59;;;;:::i;:::-;19552:12;:74:::0;;;19661:2:::1;-1:-1:-1::0;19645:18:0::1;19637:60;;;::::0;-1:-1:-1;;;19637:60:0;;10297:2:1;19637:60:0::1;::::0;::::1;10279:21:1::0;10336:2;10316:18;;;10309:30;10375:31;10355:18;;;10348:59;10424:18;;19637:60:0::1;10095:353:1::0;19637:60:0::1;19105:600::o:0;18650:447::-;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;18786:17:::1;:34:::0;;;18831:16:::1;:32:::0;;;18874:10:::1;:20:::0;;;18905:11:::1;:22:::0;;;18919:8;18887:7;18954:36:::1;18850:13:::0;18806:14;18954:36:::1;:::i;:::-;:49;;;;:::i;:::-;:63;;;;:::i;:::-;18938:13;:79:::0;;;19053:2:::1;-1:-1:-1::0;19036:19:0::1;19028:61;;;::::0;-1:-1:-1;;;19028:61:0;;16926:2:1;19028:61:0::1;::::0;::::1;16908:21:1::0;16965:2;16945:18;;;16938:30;17004:31;16984:18;;;16977:59;17053:18;;19028:61:0::1;16724:353:1::0;15173:98:0;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;15235:20:::1;:28:::0;;-1:-1:-1;;15235:28:0::1;::::0;;15173:98::o;8656:244::-;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;-1:-1:-1;;;;;8745:22:0;::::1;8737:73;;;::::0;-1:-1:-1;;;8737:73:0;;17284:2:1;8737:73:0::1;::::0;::::1;17266:21:1::0;17323:2;17303:18;;;17296:30;17362:34;17342:18;;;17335:62;-1:-1:-1;;;17413:18:1;;;17406:36;17459:19;;8737:73:0::1;17082:402:1::0;8737:73:0::1;8847:6;::::0;8826:38:::1;::::0;-1:-1:-1;;;;;8826:38:0;;::::1;::::0;8847:6:::1;::::0;8826:38:::1;::::0;8847:6:::1;::::0;8826:38:::1;8875:6;:17:::0;;-1:-1:-1;;;;;;8875:17:0::1;-1:-1:-1::0;;;;;8875:17:0;;;::::1;::::0;;;::::1;::::0;;8656:244::o;28216:160::-;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;28310:58:::1;::::0;28274:12:::1;::::0;28318:10:::1;::::0;28342:21:::1;::::0;28274:12;28310:58;28274:12;28310:58;28342:21;28318:10;28310:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29291:616:::0;8411:6;;-1:-1:-1;;;;;8411:6:0;650:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;7403:2:1;8403:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8403:67:0;7201:356:1;8403:67:0;29388:8:::1;29373:11;:23;;29365:107;;;::::0;-1:-1:-1;;;29365:107:0;;17901:2:1;29365:107:0::1;::::0;::::1;17883:21:1::0;17940:2;17920:18;;;17913:30;17979:34;17959:18;;;17952:62;18050:34;18030:18;;;18023:62;-1:-1:-1;;;18101:19:1;;;18094:38;18149:19;;29365:107:0::1;17699:475:1::0;29365:107:0::1;29509:16;::::0;;29523:1:::1;29509:16:::0;;;;;::::1;::::0;;29485:21:::1;::::0;29509:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;29546:9:0::1;::::0;:16:::1;::::0;;-1:-1:-1;;;29546:16:0;;;;29485:40;;-1:-1:-1;;;;;;29546:9:0;;::::1;::::0;:14:::1;::::0;-1:-1:-1;29546:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29536:4;29541:1;29536:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1::0;;;;;29536:26:0::1;;;-1:-1:-1::0;;;;;29536:26:0::1;;;::::0;::::1;29591:4;29573;29578:1;29573:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29573:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;29635:9:::1;::::0;:219:::1;::::0;-1:-1:-1;;;29635:219:0;;:9;::::1;::::0;:60:::1;::::0;29703:11;;29635:219:::1;::::0;:9:::1;::::0;29779:4;;29806:6:::1;::::0;29828:15:::1;::::0;29635:219:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;29870:29;29887:11;29870:29;;;;1934:25:1::0;;1922:2;1907:18;;1788:177;29870:29:0::1;;;;;;;;29354:553;29291:616:::0;:::o;7577:380::-;-1:-1:-1;;;;;7713:19:0;;7705:68;;;;-1:-1:-1;;;7705:68:0;;19664:2:1;7705:68:0;;;19646:21:1;19703:2;19683:18;;;19676:30;19742:34;19722:18;;;19715:62;-1:-1:-1;;;19793:18:1;;;19786:34;19837:19;;7705:68:0;19462:400:1;7705:68:0;-1:-1:-1;;;;;7792:21:0;;7784:68;;;;-1:-1:-1;;;7784:68:0;;20069:2:1;7784:68:0;;;20051:21:1;20108:2;20088:18;;;20081:30;20147:34;20127:18;;;20120:62;-1:-1:-1;;;20198:18:1;;;20191:32;20240:19;;7784:68:0;19867:398:1;7784:68:0;-1:-1:-1;;;;;7865:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7917:32;;1934:25:1;;;7917:32:0;;1907:18:1;7917:32:0;;;;;;;7577:380;;;:::o;6656:614::-;-1:-1:-1;;;;;6796:20:0;;6788:70;;;;-1:-1:-1;;;6788:70:0;;20472:2:1;6788:70:0;;;20454:21:1;20511:2;20491:18;;;20484:30;20550:34;20530:18;;;20523:62;-1:-1:-1;;;20601:18:1;;;20594:35;20646:19;;6788:70:0;20270:401:1;6788:70:0;-1:-1:-1;;;;;6877:23:0;;6869:71;;;;-1:-1:-1;;;6869:71:0;;20878:2:1;6869:71:0;;;20860:21:1;20917:2;20897:18;;;20890:30;20956:34;20936:18;;;20929:62;-1:-1:-1;;;21007:18:1;;;21000:33;21050:19;;6869:71:0;20676:399:1;6869:71:0;-1:-1:-1;;;;;6977:17:0;;6953:21;6977:17;;;;;;;;;;;7013:23;;;;7005:74;;;;-1:-1:-1;;;7005:74:0;;21282:2:1;7005:74:0;;;21264:21:1;21321:2;21301:18;;;21294:30;21360:34;21340:18;;;21333:62;-1:-1:-1;;;21411:18:1;;;21404:36;21457:19;;7005:74:0;21080:402:1;7005:74:0;-1:-1:-1;;;;;7115:17:0;;;:9;:17;;;;;;;;;;;7135:22;;;7115:42;;7179:20;;;;;;;;:30;;7151:6;;7115:9;7179:30;;7151:6;;7179:30;:::i;:::-;;;;;;;;7244:9;-1:-1:-1;;;;;7227:35:0;7236:6;-1:-1:-1;;;;;7227:35:0;;7255:6;7227:35;;;;1934:25:1;;1922:2;1907:18;;1788:177;7227:35:0;;;;;;;;6777:493;6656:614;;;:::o;19903:4920::-;-1:-1:-1;;;;;20003:18:0;;19995:68;;;;-1:-1:-1;;;19995:68:0;;20472:2:1;19995:68:0;;;20454:21:1;20511:2;20491:18;;;20484:30;20550:34;20530:18;;;20523:62;-1:-1:-1;;;20601:18:1;;;20594:35;20646:19;;19995:68:0;20270:401:1;19995:68:0;-1:-1:-1;;;;;20082:16:0;;20074:64;;;;-1:-1:-1;;;20074:64:0;;20878:2:1;20074:64:0;;;20860:21:1;20917:2;20897:18;;;20890:30;20956:34;20936:18;;;20929:62;-1:-1:-1;;;21007:18:1;;;21000:33;21050:19;;20074:64:0;20676:399:1;20074:64:0;20166:1;20157:6;:10;20149:52;;;;-1:-1:-1;;;20149:52:0;;21689:2:1;20149:52:0;;;21671:21:1;21728:2;21708:18;;;21701:30;21767:31;21747:18;;;21740:59;21816:18;;20149:52:0;21487:353:1;20149:52:0;20218:13;;;;;;;20214:132;;-1:-1:-1;;;;;20255:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;20284:23:0;;;;;;:19;:23;;;;;;;;20255:52;20247:87;;;;-1:-1:-1;;;20247:87:0;;22047:2:1;20247:87:0;;;22029:21:1;22086:2;22066:18;;;22059:30;22125:24;22105:18;;;22098:52;22167:18;;20247:87:0;21845:346:1;20247:87:0;24925:18;;24910:12;:33;20361:26;:52;;;;;20412:1;20391:18;;:22;20361:52;20358:226;;;-1:-1:-1;;;;;20438:17:0;;;;;;:11;:17;;;;;;;;20437:18;;:35;;-1:-1:-1;8349:6:0;;-1:-1:-1;;;;;20459:13:0;;;8349:6;;20459:13;20437:35;:60;;;-1:-1:-1;;;;;;20476:21:0;;20490:6;20476:21;20437:60;20429:143;;;;-1:-1:-1;;;20429:143:0;;22398:2:1;20429:143:0;;;22380:21:1;22437:2;22417:18;;;22410:30;22476:34;22456:18;;;22449:62;22547:34;22527:18;;;22520:62;-1:-1:-1;;;22598:19:1;;;22591:37;22645:19;;20429:143:0;22196:474:1;20429:143:0;20599:14;;;;20596:1649;;;8349:6;;-1:-1:-1;;;;;20633:15:0;;;8349:6;;20633:15;;;;:32;;-1:-1:-1;8349:6:0;;-1:-1:-1;;;;;20652:13:0;;;8349:6;;20652:13;;20633:32;:52;;;;-1:-1:-1;;;;;;20669:16:0;;;;20633:52;:77;;;;-1:-1:-1;;;;;;20689:21:0;;20703:6;20689:21;;20633:77;:107;;;;-1:-1:-1;;;;;;20715:25:0;;;;;;:19;:25;;;;;;;;20714:26;20633:107;:135;;;;-1:-1:-1;;;;;;20745:23:0;;;;;;:19;:23;;;;;;;;20744:24;20633:135;20629:1605;;;20926:20;;;;20922:506;;;20988:9;;-1:-1:-1;;;;;20974:24:0;;;20988:9;;20974:24;;;;:49;;-1:-1:-1;21016:6:0;;-1:-1:-1;;;;;21002:21:0;;;21016:6;;21002:21;;20974:49;20970:439;;;21101:16;21116:1;21101:12;:16;:::i;:::-;21088:9;21059:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;21156:16:0;21171:1;21156:12;:16;:::i;:::-;-1:-1:-1;;;;;21121:32:0;;;;;;:28;:32;;;;;;:51;21059:113;21051:179;;;;-1:-1:-1;;;21051:179:0;;23007:2:1;21051:179:0;;;22989:21:1;23046:2;23026:18;;;23019:30;23085:34;23065:18;;;23058:62;23156:23;23136:18;;;23129:51;23197:19;;21051:179:0;22805:417:1;21051:179:0;21286:9;21257:39;;;;:28;:39;;;;;;21299:12;21257:54;;;;-1:-1:-1;;;;;21338:32:0;;;;;;:47;20970:439;-1:-1:-1;;;;;21480:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;21516:35:0;;;;;;:31;:35;;;;;;;;21515:36;21480:71;21476:743;;;21598:12;;21588:6;:22;;21580:75;;;;-1:-1:-1;;;21580:75:0;;23429:2:1;21580:75:0;;;23411:21:1;23468:2;23448:18;;;23441:30;23507:34;23487:18;;;23480:62;-1:-1:-1;;;23558:18:1;;;23551:38;23606:19;;21580:75:0;23227:404:1;21580:75:0;21716:15;;-1:-1:-1;;;;;4959:18:0;;4932:7;4959:18;;;;;;;;;;;21690:22;;:6;:22;:::i;:::-;:41;;21682:78;;;;-1:-1:-1;;;21682:78:0;;23838:2:1;21682:78:0;;;23820:21:1;23877:2;23857:18;;;23850:30;23916:26;23896:18;;;23889:54;23960:18;;21682:78:0;23636:348:1;21682:78:0;21476:743;;;-1:-1:-1;;;;;21836:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;21870:37:0;;;;;;:31;:37;;;;;;;;21869:38;21836:71;21832:387;;;21954:13;;21944:6;:23;;21936:78;;;;-1:-1:-1;;;21936:78:0;;24191:2:1;21936:78:0;;;24173:21:1;24230:2;24210:18;;;24203:30;24269:34;24249:18;;;24242:62;-1:-1:-1;;;24320:18:1;;;24313:40;24370:19;;21936:78:0;23989:406:1;21832:387:0;-1:-1:-1;;;;;22062:35:0;;;;;;:31;:35;;;;;;;;22057:162;;22155:15;;-1:-1:-1;;;;;4959:18:0;;4932:7;4959:18;;;;;;;;;;;22129:22;;:6;:22;:::i;:::-;:41;;22121:78;;;;-1:-1:-1;;;22121:78:0;;23838:2:1;22121:78:0;;;23820:21:1;23877:2;23857:18;;;23850:30;23916:26;23896:18;;;23889:54;23960:18;;22121:78:0;23636:348:1;22121:78:0;22306:4;22257:28;4959:18;;;;;;;;;;;22364;;22340:42;;;;;;;22398:22;;-1:-1:-1;22409:11:0;;;;;;;22398:22;:35;;;;-1:-1:-1;22425:8:0;;-1:-1:-1;;;22425:8:0;;;;22424:9;22398:35;:71;;;;-1:-1:-1;;;;;;22438:31:0;;;;;;:25;:31;;;;;;;;22437:32;22398:71;:101;;;;-1:-1:-1;;;;;;22474:25:0;;;;;;:19;:25;;;;;;;;22473:26;22398:101;:129;;;;-1:-1:-1;;;;;;22504:23:0;;;;;;:19;:23;;;;;;;;22503:24;22398:129;22395:236;;;22544:8;:15;;-1:-1:-1;;;;22544:15:0;-1:-1:-1;;;22544:15:0;;;22576:10;:8;:10::i;:::-;22603:8;:16;;-1:-1:-1;;;;22603:16:0;;;22395:236;-1:-1:-1;;;;;22761:25:0;;22643:12;22761:25;;;:19;:25;;;;;;22658:4;;22761:25;;;:52;;-1:-1:-1;;;;;;22790:23:0;;;;;;:19;:23;;;;;;;;22761:52;22758:99;;;-1:-1:-1;22840:5:0;22758:99;22869:12;22973:7;22970:1800;;;24925:18;;24910:12;:33;23035:60;;;;-1:-1:-1;;;;;;23064:31:0;;;;;;:25;:31;;;;;;;;23035:60;:94;;;;-1:-1:-1;;;;;;23100:29:0;;;;;;:25;:29;;;;;;;;23099:30;23035:94;:114;;;;;23148:1;23133:12;;:16;23035:114;23032:1594;;;-1:-1:-1;;;;;23175:15:0;;;;;;:11;:15;;;;;;;;23171:171;;-1:-1:-1;;;;;23214:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;23214:22:0;23232:4;23214:22;;;;;;23259:10;:15;;23232:4;;23259:10;;:15;;23232:4;;23259:15;:::i;:::-;;;;-1:-1:-1;;23302:20:0;;-1:-1:-1;;;;;798:55:1;;780:74;;23302:20:0;;768:2:1;753:18;23302:20:0;;;;;;;23171:171;23393:3;23378:12;;23369:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;23362:34;;23459:12;;23441:15;;23434:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;23412:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;23539:12:0;;23520:16;;23513:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;23490:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23605:12:0;;23593:9;;23586:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;23570:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;23673:12:0;;23660:10;;23653:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;23636:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;23032:1594:0;;-1:-1:-1;23032:1594:0;;-1:-1:-1;;;;;23750:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;23799:1;23783:13;;:17;23750:50;23746:880;;;23852:3;23836:13;;23827:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;23820:35;;23922:13;;23903:16;;23896:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;23874:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24004:13:0;;23984:17;;23977:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;23954:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;24072:13:0;;24059:10;;24052:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;24036:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;24142:13:0;;24128:11;;24121:18;;:4;:18;:::i;23746:880::-;-1:-1:-1;;;;;24218:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;24268:1;24253:12;;:16;24218:51;24215:411;;;24318:3;24303:12;;24294:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;24287:34;;24384:12;;24366:15;;24359:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24337:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;24464:12:0;;24445:16;;24438:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;24415:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24530:12:0;;24518:9;;24511:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;24495:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;24598:12:0;;24585:10;;24578:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;24561:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;24215:411:0;24645:8;;24642:89;;24673:42;24689:4;24703;24710;24673:15;:42::i;:::-;24744:14;24754:4;24744:14;;:::i;:::-;;;22970:1800;24782:33;24798:4;24804:2;24808:6;24782:15;:33::i;:::-;19982:4841;;;;19903:4920;;;:::o;26057:1625::-;26117:1;26101:13;;:17;:62;;;;-1:-1:-1;26150:13:0;;26140:4;4932:7;4959:18;;;;;;;;;;;26122:41;;26101:62;26098:156;;;26180:62;26204:4;26219:6;26228:13;;26180:15;:62::i;:::-;26280:1;26264:13;:17;;;26338:4;4959:18;;;;;;;;;;26294:50;;26355:25;26426:12;;26404:19;;26383:18;;:40;;;;:::i;:::-;:55;;;;:::i;:::-;26355:83;-1:-1:-1;26454:20:0;;;:46;;-1:-1:-1;26478:22:0;;26454:46;26451:60;;;26503:7;;26057:1625::o;26451:60::-;26544:18;;:23;;26565:2;26544:23;:::i;:::-;26526:15;:41;26523:113;;;26601:18;;:23;;26622:2;26601:23;:::i;:::-;26583:41;;26523:113;26648:12;26722:23;26807:1;26787:17;26766:18;;26748:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;26722:86;-1:-1:-1;26821:51:0;26838:33;26722:86;26838:15;:33;:::i;:::-;26821:16;:51::i;:::-;27071:18;;26906:21;;;;26885:18;;27071:20;;27090:1;;27071:20;:::i;:::-;27050:42;;:17;:42;:::i;:::-;27027:19;;27014:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;26987:106;;27104:17;27193:1;27174:18;;:20;;;;:::i;:::-;27153:42;;:17;:42;:::i;:::-;27137:12;;27124:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;27104:92;-1:-1:-1;27228:28:0;27104:92;27228:16;:28;:::i;:::-;27209:47;;;;:::i;:::-;27290:1;27269:18;:22;;;27302:19;:23;;;27336:12;:16;;;27363:13;:17;27209:47;-1:-1:-1;27396:19:0;;;;;:42;;;27437:1;27419:15;:19;27396:42;27393:119;;;27454:46;27467:15;27484;27454:12;:46::i;:::-;27545:10;;27537:46;;-1:-1:-1;;;;;27545:10:0;;;;27569:9;;27537:46;;;;27569:9;27545:10;27537:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27617:17:0;;27609:65;;27524:59;;-1:-1:-1;;;;;;27617:17:0;;27648:21;;27609:65;;;;27648:21;27617:17;27609:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26057:1625:0:o;17958:240::-;-1:-1:-1;;;;;18041:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;18041:39:0;;;;;;;18093;18041:31;:39;18093:26;:39::i;24959:573::-;25111:16;;;25125:1;25111:16;;;;;;;;25087:21;;25111:16;;;;;;;;;;-1:-1:-1;25111:16:0;25087:40;;25156:4;25138;25143:1;25138:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25138:23:0;;;:7;;;;;;;;;;:23;;;;25182:9;;:16;;;-1:-1:-1;;;25182:16:0;;;;:9;;;;;:14;;:16;;;;;25138:7;;25182:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25172:4;25177:1;25172:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25172:26:0;;;:7;;;;;;;;;:26;25243:9;;25211:56;;25228:4;;25243:9;25255:11;25211:8;:56::i;:::-;25306:9;;:218;;-1:-1:-1;;;25306:218:0;;-1:-1:-1;;;;;25306:9:0;;;;:60;;:218;;25381:11;;25306:9;;25451:4;;25478;;25498:15;;25306:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25014:518;24959:573;:::o;25540:509::-;25720:9;;25688:56;;25705:4;;-1:-1:-1;;;;;25720:9:0;25732:11;25688:8;:56::i;:::-;25787:9;;:254;;-1:-1:-1;;;25787:254:0;;25853:4;25787:254;;;25374:34:1;25424:18;;;25417:34;;;25787:9:0;25467:18:1;;;25460:34;;;25510:18;;;25503:34;25993:6:0;25553:19:1;;;25546:44;26015:15:0;25606:19:1;;;25599:35;-1:-1:-1;;;;;25787:9:0;;;;:25;;25820:9;;25285:19:1;;25787:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25540:509;;:::o;16546:207::-;-1:-1:-1;;;;;16634:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;16634:52:0;;;;;;;;;;16702:43;;26124:74:1;;;26214:18;;;26207:50;16702:43:0;;26097:18:1;16702:43:0;25956:307:1;14:597;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;865:154::-;-1:-1:-1;;;;;944:5:1;940:54;933:5;930:65;920:93;;1009:1;1006;999:12;920:93;865:154;:::o;1024:315::-;1092:6;1100;1153:2;1141:9;1132:7;1128:23;1124:32;1121:52;;;1169:1;1166;1159:12;1121:52;1208:9;1195:23;1227:31;1252:5;1227:31;:::i;:::-;1277:5;1329:2;1314:18;;;;1301:32;;-1:-1:-1;;;1024:315:1:o;1536:247::-;1595:6;1648:2;1636:9;1627:7;1623:23;1619:32;1616:52;;;1664:1;1661;1654:12;1616:52;1703:9;1690:23;1722:31;1747:5;1722:31;:::i;:::-;1772:5;1536:247;-1:-1:-1;;;1536:247:1:o;1970:127::-;2031:10;2026:3;2022:20;2019:1;2012:31;2062:4;2059:1;2052:15;2086:4;2083:1;2076:15;2102:275;2173:2;2167:9;2238:2;2219:13;;-1:-1:-1;;2215:27:1;2203:40;;2273:18;2258:34;;2294:22;;;2255:62;2252:88;;;2320:18;;:::i;:::-;2356:2;2349:22;2102:275;;-1:-1:-1;2102:275:1:o;2382:183::-;2442:4;2475:18;2467:6;2464:30;2461:56;;;2497:18;;:::i;:::-;-1:-1:-1;2542:1:1;2538:14;2554:4;2534:25;;2382:183::o;2570:662::-;2624:5;2677:3;2670:4;2662:6;2658:17;2654:27;2644:55;;2695:1;2692;2685:12;2644:55;2731:6;2718:20;2757:4;2781:60;2797:43;2837:2;2797:43;:::i;:::-;2781:60;:::i;:::-;2875:15;;;2961:1;2957:10;;;;2945:23;;2941:32;;;2906:12;;;;2985:15;;;2982:35;;;3013:1;3010;3003:12;2982:35;3049:2;3041:6;3037:15;3061:142;3077:6;3072:3;3069:15;3061:142;;;3143:17;;3131:30;;3181:12;;;;3094;;3061:142;;;-1:-1:-1;3221:5:1;2570:662;-1:-1:-1;;;;;;2570:662:1:o;3237:1215::-;3355:6;3363;3416:2;3404:9;3395:7;3391:23;3387:32;3384:52;;;3432:1;3429;3422:12;3384:52;3472:9;3459:23;3501:18;3542:2;3534:6;3531:14;3528:34;;;3558:1;3555;3548:12;3528:34;3596:6;3585:9;3581:22;3571:32;;3641:7;3634:4;3630:2;3626:13;3622:27;3612:55;;3663:1;3660;3653:12;3612:55;3699:2;3686:16;3721:4;3745:60;3761:43;3801:2;3761:43;:::i;3745:60::-;3839:15;;;3921:1;3917:10;;;;3909:19;;3905:28;;;3870:12;;;;3945:19;;;3942:39;;;3977:1;3974;3967:12;3942:39;4001:11;;;;4021:217;4037:6;4032:3;4029:15;4021:217;;;4117:3;4104:17;4134:31;4159:5;4134:31;:::i;:::-;4178:18;;4054:12;;;;4216;;;;4021:217;;;4257:5;-1:-1:-1;;4300:18:1;;4287:32;;-1:-1:-1;;4331:16:1;;;4328:36;;;4360:1;4357;4350:12;4328:36;;4383:63;4438:7;4427:8;4416:9;4412:24;4383:63;:::i;:::-;4373:73;;;3237:1215;;;;;:::o;4457:456::-;4534:6;4542;4550;4603:2;4591:9;4582:7;4578:23;4574:32;4571:52;;;4619:1;4616;4609:12;4571:52;4658:9;4645:23;4677:31;4702:5;4677:31;:::i;:::-;4727:5;-1:-1:-1;4784:2:1;4769:18;;4756:32;4797:33;4756:32;4797:33;:::i;:::-;4457:456;;4849:7;;-1:-1:-1;;;4903:2:1;4888:18;;;;4875:32;;4457:456::o;4918:180::-;4977:6;5030:2;5018:9;5009:7;5005:23;5001:32;4998:52;;;5046:1;5043;5036:12;4998:52;-1:-1:-1;5069:23:1;;4918:180;-1:-1:-1;4918:180:1:o;5103:385::-;5189:6;5197;5205;5213;5266:3;5254:9;5245:7;5241:23;5237:33;5234:53;;;5283:1;5280;5273:12;5234:53;-1:-1:-1;;5306:23:1;;;5376:2;5361:18;;5348:32;;-1:-1:-1;5427:2:1;5412:18;;5399:32;;5478:2;5463:18;5450:32;;-1:-1:-1;5103:385:1;-1:-1:-1;5103:385:1:o;5913:118::-;5999:5;5992:13;5985:21;5978:5;5975:32;5965:60;;6021:1;6018;6011:12;6036:382;6101:6;6109;6162:2;6150:9;6141:7;6137:23;6133:32;6130:52;;;6178:1;6175;6168:12;6130:52;6217:9;6204:23;6236:31;6261:5;6236:31;:::i;:::-;6286:5;-1:-1:-1;6343:2:1;6328:18;;6315:32;6356:30;6315:32;6356:30;:::i;:::-;6405:7;6395:17;;;6036:382;;;;;:::o;6423:388::-;6491:6;6499;6552:2;6540:9;6531:7;6527:23;6523:32;6520:52;;;6568:1;6565;6558:12;6520:52;6607:9;6594:23;6626:31;6651:5;6626:31;:::i;:::-;6676:5;-1:-1:-1;6733:2:1;6718:18;;6705:32;6746:33;6705:32;6746:33;:::i;6816:380::-;6895:1;6891:12;;;;6938;;;6959:61;;7013:4;7005:6;7001:17;6991:27;;6959:61;7066:2;7058:6;7055:14;7035:18;7032:38;7029:161;;7112:10;7107:3;7103:20;7100:1;7093:31;7147:4;7144:1;7137:15;7175:4;7172:1;7165:15;7029:161;;6816:380;;;:::o;8344:127::-;8405:10;8400:3;8396:20;8393:1;8386:31;8436:4;8433:1;8426:15;8460:4;8457:1;8450:15;8476:127;8537:10;8532:3;8528:20;8525:1;8518:31;8568:4;8565:1;8558:15;8592:4;8589:1;8582:15;8608:135;8647:3;8668:17;;;8665:43;;8688:18;;:::i;:::-;-1:-1:-1;8735:1:1;8724:13;;8608:135::o;9157:168::-;9197:7;9263:1;9259;9255:6;9251:14;9248:1;9245:21;9240:1;9233:9;9226:17;9222:45;9219:71;;;9270:18;;:::i;:::-;-1:-1:-1;9310:9:1;;9157:168::o;9330:217::-;9370:1;9396;9386:132;;9440:10;9435:3;9431:20;9428:1;9421:31;9475:4;9472:1;9465:15;9503:4;9500:1;9493:15;9386:132;-1:-1:-1;9532:9:1;;9330:217::o;9962:128::-;10002:3;10033:1;10029:6;10026:1;10023:13;10020:39;;;10039:18;;:::i;:::-;-1:-1:-1;10075:9:1;;9962:128::o;12772:184::-;12842:6;12895:2;12883:9;12874:7;12870:23;12866:32;12863:52;;;12911:1;12908;12901:12;12863:52;-1:-1:-1;12934:16:1;;12772:184;-1:-1:-1;12772:184:1:o;13263:245::-;13330:6;13383:2;13371:9;13362:7;13358:23;13354:32;13351:52;;;13399:1;13396;13389:12;13351:52;13431:9;13425:16;13450:28;13472:5;13450:28;:::i;18179:251::-;18249:6;18302:2;18290:9;18281:7;18277:23;18273:32;18270:52;;;18318:1;18315;18308:12;18270:52;18350:9;18344:16;18369:31;18394:5;18369:31;:::i;18435:484::-;18488:3;18526:5;18520:12;18553:6;18548:3;18541:19;18579:4;18608:2;18603:3;18599:12;18592:19;;18645:2;18638:5;18634:14;18666:1;18676:218;18690:6;18687:1;18684:13;18676:218;;;18755:13;;-1:-1:-1;;;;;18751:62:1;18739:75;;18834:12;;;;18869:15;;;;18712:1;18705:9;18676:218;;;-1:-1:-1;18910:3:1;;18435:484;-1:-1:-1;;;;;18435:484:1:o;18924:533::-;19195:6;19184:9;19177:25;19238:3;19233:2;19222:9;19218:18;19211:31;19158:4;19259:57;19311:3;19300:9;19296:19;19288:6;19259:57;:::i;:::-;-1:-1:-1;;;;;19352:55:1;;;;19347:2;19332:18;;19325:83;-1:-1:-1;19439:2:1;19424:18;19417:34;19251:65;18924:533;-1:-1:-1;;18924:533:1:o;22675:125::-;22715:4;22743:1;22740;22737:8;22734:34;;;22748:18;;:::i;:::-;-1:-1:-1;22785:9:1;;22675:125::o;24400:605::-;24699:6;24688:9;24681:25;24742:6;24737:2;24726:9;24722:18;24715:34;24785:3;24780:2;24769:9;24765:18;24758:31;24662:4;24806:57;24858:3;24847:9;24843:19;24835:6;24806:57;:::i;:::-;-1:-1:-1;;;;;24899:55:1;;;;24894:2;24879:18;;24872:83;-1:-1:-1;24986:3:1;24971:19;24964:35;24798:65;24400:605;-1:-1:-1;;;24400:605:1:o;25645:306::-;25733:6;25741;25749;25802:2;25790:9;25781:7;25777:23;25773:32;25770:52;;;25818:1;25815;25808:12;25770:52;25847:9;25841:16;25831:26;;25897:2;25886:9;25882:18;25876:25;25866:35;;25941:2;25930:9;25926:18;25920:25;25910:35;;25645:306;;;;;:::o

Swarm Source

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