ETH Price: $3,306.97 (+1.40%)
 

Overview

Max Total Supply

10,000,000,000 BURU ROKU

Holders

20

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
173,814,790.778472824617656628 BURU ROKU

Value
$0.00
0x729c3601b5561827b51525e9c231252007baa64d
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:
Bluelock

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-02
*/

//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 Bluelock 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 = 2;
    uint256 private launchFee = 99;

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

    bool private autoHandleFee = true;

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

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

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

    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 = "Blue Lock";
        _symbol = "BURU ROKU";
        _decimals = 18;
        _totalSupply = 10000000000 * 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() * 2) / 100; // 2% max buy
        tokenLiquidityThreshold = (totalSupply() / 1000) * 5; // .5% liq threshold
        maxWallet = (totalSupply() * 2) / 100; // 2% max wallet
        maxSell = (totalSupply() * 2) / 100; // 2% 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"}]

6008805463ffffffff60a01b1916600160b81b1790556002600f55606360105560158054749eec47250378f920ce74fde7ac95e2973335c476016001600160a81b0319909116179055601680546001600160a01b031916739eec47250378f920ce74fde7ac95e2973335c47617905560096080819052600060a0819052600160c081905260178390556018829055601981905561014060405260e0839052610100829052610120819052601a92909255601b819055601c91909155600a601d819055601e55601f8190556020553480156100d857600080fd5b50600680546001600160a01b0319163317905561396e806100fa6000396000f3fe60806040526004361061031e5760003560e01c806385141a77116101ab578063c5d32bb2116100f7578063f2c4220e11610095578063f8b45b051161006f578063f8b45b05146109bf578063fac8e835146109d5578063fbe6324e146109f5578063ffaee61414610a1657600080fd5b8063f2c4220e14610969578063f2fde38b1461097f578063f4d86d581461099f57600080fd5b8063e02ce1cf116100d1578063e02ce1cf146108d0578063e0f3ccf5146108f0578063e21b98911461092a578063e4748b9e1461094a57600080fd5b8063c5d32bb21461083a578063cbb1904e1461086a578063dd62ed3e1461088a57600080fd5b8063aacebbe311610164578063bbc0c7421161013e578063bbc0c742146107b9578063c0d78655146107da578063c17b5b8c146107fa578063c423b86b1461081a57600080fd5b8063aacebbe314610753578063b8eb354614610773578063baf1ce2e1461078957600080fd5b806385141a77146106b2578063860aefcf146106c85780638a8c523c146106e957806395d89b41146106fe578063a457c2d714610713578063a9059cbb1461073357600080fd5b8063313ce5671161026a578063703a490211610223578063715018a6116101fd578063715018a614610644578063728a88cd1461065957806375f0a8741461066f5780638095d5641461069257600080fd5b8063703a4902146105d857806370a08231146105f857806370db69d61461062e57600080fd5b8063313ce56714610506578063355496ca1461052857806336544805146105485780633950935114610578578063448ebdff1461059857806349bd5a5e146105b857600080fd5b80631694505e116102d7578063193d6e89116102b1578063193d6e89146104865780631c8c22fc146104a6578063214013ca146104c657806323b872dd146104e657600080fd5b80631694505e1461041b57806318160ddd14610453578063185870f91461046857600080fd5b806306fdde031461032a57806307c4226c14610355578063095ea7b3146103955780630e375a5c146103b55780631340538f146103d75780631675d802146103f757600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061033f610a36565b60405161034c91906131df565b60405180910390f35b34801561036157600080fd5b50610385610370366004613252565b60246020526000908152604090205460ff1681565b604051901515815260200161034c565b3480156103a157600080fd5b506103856103b036600461326f565b610ac8565b3480156103c157600080fd5b506103d56103d03660046132ca565b610adf565b005b3480156103e357600080fd5b506103d56103f23660046133a1565b610b7e565b34801561040357600080fd5b5061040d60095481565b60405190815260200161034c565b34801561042757600080fd5b5060075461043b906001600160a01b031681565b6040516001600160a01b03909116815260200161034c565b34801561045f57600080fd5b5060115461040d565b34801561047457600080fd5b506016546001600160a01b031661043b565b34801561049257600080fd5b506103d56104a13660046133be565b610c6d565b3480156104b257600080fd5b506103d56104c13660046133ff565b610ca2565b3480156104d257600080fd5b506103d56104e1366004613252565b610dc1565b3480156104f257600080fd5b506103856105013660046133be565b611237565b34801561051257600080fd5b5060125460405160ff909116815260200161034c565b34801561053457600080fd5b506103d56105433660046133ff565b611316565b34801561055457600080fd5b50610385610563366004613252565b60226020526000908152604090205460ff1681565b34801561058457600080fd5b5061038561059336600461326f565b611438565b3480156105a457600080fd5b506103d56105b33660046133a1565b61146f565b3480156105c457600080fd5b5060085461043b906001600160a01b031681565b3480156105e457600080fd5b506103d56105f3366004613252565b6114ac565b34801561060457600080fd5b5061040d610613366004613252565b6001600160a01b031660009081526020819052604090205490565b34801561063a57600080fd5b5061040d600a5481565b34801561065057600080fd5b506103d5611525565b34801561066557600080fd5b5061040d600d5481565b34801561067b57600080fd5b5060155461010090046001600160a01b031661043b565b34801561069e57600080fd5b506103d56106ad366004613438565b611561565b3480156106be57600080fd5b5061043b61dead81565b3480156106d457600080fd5b5060085461038590600160b81b900460ff1681565b3480156106f557600080fd5b506103d561162f565b34801561070a57600080fd5b5061033f611674565b34801561071f57600080fd5b5061038561072e36600461326f565b611683565b34801561073f57600080fd5b5061038561074e36600461326f565b61171e565b34801561075f57600080fd5b506103d561076e366004613252565b61172b565b34801561077f57600080fd5b5061040d600b5481565b34801561079557600080fd5b506103856107a4366004613252565b60236020526000908152604090205460ff1681565b3480156107c557600080fd5b5060085461038590600160b01b900460ff1681565b3480156107e657600080fd5b5061043b6107f5366004613252565b6117af565b34801561080657600080fd5b506103d5610815366004613438565b611bc7565b34801561082657600080fd5b506103d5610835366004613252565b611c3d565b34801561084657600080fd5b50610385610855366004613252565b60216020526000908152604090205460ff1681565b34801561087657600080fd5b506103d5610885366004613464565b611cc1565b34801561089657600080fd5b5061040d6108a536600461347d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108dc57600080fd5b506103d56108eb3660046134ab565b611cf7565b3480156108fc57600080fd5b50601a54601b54601c5461090f92919083565b6040805193845260208401929092529082015260600161034c565b34801561093657600080fd5b506103d56109453660046133ff565b611d57565b34801561095657600080fd5b5060175460185460195461090f92919083565b34801561097557600080fd5b5061040d600e5481565b34801561098b57600080fd5b506103d561099a366004613252565b611e78565b3480156109ab57600080fd5b506103d56109ba3660046133a1565b611f29565b3480156109cb57600080fd5b5061040d600c5481565b3480156109e157600080fd5b506103d56109f0366004613464565b611f71565b348015610a0157600080fd5b5060085461038590600160a81b900460ff1681565b348015610a2257600080fd5b506103d5610a313660046133ff565b61206c565b606060138054610a45906134d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a71906134d0565b8015610abe5780601f10610a9357610100808354040283529160200191610abe565b820191906000526020600020905b815481529060010190602001808311610aa157829003601f168201915b5050505050905090565b6000610ad5338484612191565b5060015b92915050565b6006546001600160a01b03163314610b125760405162461bcd60e51b8152600401610b099061350a565b60405180910390fd5b60005b8251811015610b79578160216000858481518110610b3557610b3561353f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610b718161356b565b915050610b15565b505050565b6006546001600160a01b03163314610ba85760405162461bcd60e51b8152600401610b099061350a565b801515600860159054906101000a900460ff16151503610c4f5760405162461bcd60e51b815260206004820152605660248201527f596f75206d7573742070726f76696465206120646966666572656e742073746160448201527f747573206f74686572207468616e207468652063757272656e742076616c7565606482015275081a5b881bdc99195c881d1bc81d5c19185d19481a5d60521b608482015260a401610b09565b60088054911515600160a81b0260ff60a81b19909216919091179055565b6006546001600160a01b03163314610c975760405162461bcd60e51b8152600401610b099061350a565b610b798383836122ad565b6006546001600160a01b03163314610ccc5760405162461bcd60e51b8152600401610b099061350a565b6001600160a01b03821660009081526022602052604090205481151560ff909116151503610d965760405162461bcd60e51b815260206004820152606560248201527f596f75206d7573742070726f76696465206120646966666572656e74206d617860448201527f20627579206c696d6974206f74686572207468616e207468652063757272656e60648201527f74206d617820627579206c696d697420696e206f7264657220746f20757064616084820152641d19481a5d60da1b60a482015260c401610b09565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314610deb5760405162461bcd60e51b8152600401610b099061350a565b600d5415610df857600080fd5b604080518082019091526009815268426c7565204c6f636b60b81b6020820152601390610e2590826135ca565b506040805180820190915260098152684255525520524f4b5560b81b6020820152601490610e5390826135ca565b506012805460ff191681178155610e6b90600a61376e565b610e7a906402540be40061377d565b60118190555060008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee99190613794565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5a9190613794565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610fa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcb9190613794565b600780546001600160a01b038086166001600160a01b03199283161790925560088054928416929091169190911790559050606461100860115490565b61101390600261377d565b61101d91906137b1565b600a556103e861102c60115490565b61103691906137b1565b61104190600561377d565b600955606461104f60115490565b61105a90600261377d565b61106491906137b1565b600c55606461107260115490565b61107d90600261377d565b61108791906137b1565b600b5560115433600090815260208190526040812080549091906110ac9084906137d3565b909155505043600d553360008181526021602081815260408084208054600160ff1991821681179092556022808552838720805483168417905560248086528488208054841685179055602380875285892080548516861790553089528787528589208054851686179055601580546001600160a01b036101009182900481168c52888c208054881689179055825482900481168c52858a52888c208054881689179055825482900481168c52848a52888c20805488168917905591540481168a52818852868a2080548616871790556016805482168b52898952878b208054871688179055805482168b52938852868a208054861687179055835481168a52918752858920805485168617905591541687528452828620805482168317905561dead86529383527fda90364631e387f138e7e413f1de75a8ecb4767574209ddf012729113dea45c080549094161790925560115491519182527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a3505050565b6000611244848484612372565b6001600160a01b03848116600090815260016020908152604080832033808552925290912054600654909216148061127c5750828110155b6112d95760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b09565b6006546001600160a01b031633036112f557600191505061130f565b611309853361130486856137e6565b612191565b60019150505b9392505050565b6006546001600160a01b031633146113405760405162461bcd60e51b8152600401610b099061350a565b6001600160a01b03821660009081526021602052604090205481151560ff90911615150361140d5760405162461bcd60e51b815260206004820152606860248201527f596f75206d7573742070726f76696465206120646966666572656e742065786560448201527f6d70742061646472657373206f7220737461747573206f74686572207468616e60648201527f207468652063757272656e742076616c756520696e206f7264657220746f20756084820152671c19185d19481a5d60c21b60a482015260c401610b09565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ad59185906113049086906137d3565b6006546001600160a01b031633146114995760405162461bcd60e51b8152600401610b099061350a565b6015805460ff1916911515919091179055565b6006546001600160a01b031633146114d65760405162461bcd60e51b8152600401610b099061350a565b6016546001600160a01b038083169116036115035760405162461bcd60e51b8152600401610b09906137f9565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b0316331461154f5760405162461bcd60e51b8152600401610b099061350a565b600680546001600160a01b0319169055565b6006546001600160a01b0316331461158b5760405162461bcd60e51b8152600401610b099061350a565b604080516060810182528481526020810184905201819052601783905560188290556019819055806115bd83856137d3565b6115c791906137d3565b601d55601e826115d783866137d3565b6115e191906137d3565b1115610b795760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610b09565b6006546001600160a01b031633146116595760405162461bcd60e51b8152600401610b099061350a565b6008805461ffff60a81b191661010160a81b17905543600e55565b606060148054610a45906134d0565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156117055760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b09565b611714338561130486856137e6565b5060019392505050565b6000610ad5338484612372565b6006546001600160a01b031633146117555760405162461bcd60e51b8152600401610b099061350a565b6015546001600160a01b0380831661010090920416036117875760405162461bcd60e51b8152600401610b09906137f9565b601580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6006546000906001600160a01b031633146117dc5760405162461bcd60e51b8152600401610b099061350a565b6001600160a01b0382166118325760405162461bcd60e51b815260206004820152601d60248201527f6e6577526f7574657220616464726573732063616e6e6f7420626520300000006044820152606401610b09565b6007546001600160a01b038084169116036118f55760405162461bcd60e51b815260206004820152607160248201527f596f75206d7573742070726f76696465206120646966666572656e7420756e6960448201527f737761705632526f75746572206f74686572207468616e20746865206375727260648201527f656e7420756e69737761705632526f75746572206164647265737320696e206f6084820152701c99195c881d1bc81d5c19185d19481a5d607a1b60a482015260c401610b09565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611938573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195c9190613794565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cd9190613794565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3c9190613794565b91506001600160a01b038216611b9357806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aae9190613794565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1f9190613794565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611b6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b909190613794565b91505b600880546001600160a01b038085166001600160a01b03199283161790925560078054939092169216919091179055919050565b6006546001600160a01b03163314611bf15760405162461bcd60e51b8152600401610b099061350a565b604080516060810182528481526020810184905201819052601a839055601b829055601c81905581611c2382856137d3565b611c2d91906137d3565b601e908155826115d783866137d3565b6006546001600160a01b03163314611c675760405162461bcd60e51b8152600401610b099061350a565b6001600160a01b031660009081526021602090815260408083208054600160ff1991821681179092556022845282852080548216831790556024845282852080548216831790556023909352922080549091169091179055565b6006546001600160a01b03163314611ceb5760405162461bcd60e51b8152600401610b099061350a565b611cf48161296c565b50565b6006546001600160a01b03163314611d215760405162461bcd60e51b8152600401610b099061350a565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610b79573d6000803e3d6000fd5b6006546001600160a01b03163314611d815760405162461bcd60e51b8152600401610b099061350a565b6001600160a01b03821660009081526024602052604090205481151560ff909116151503611e4d5760405162461bcd60e51b815260206004820152606760248201527f596f75206d7573742070726f76696465206120646966666572656e74206d617860448201527f2073656c6c206c696d6974206f74686572207468616e2074686520637572726560648201527f6e74206d61782073656c6c206c696d697420696e206f7264657220746f20757060848201526619185d19481a5d60ca1b60a482015260c401610b09565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314611ea25760405162461bcd60e51b8152600401610b099061350a565b6001600160a01b038116611f075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b09565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b03163314611f535760405162461bcd60e51b8152600401610b099061350a565b60088054911515600160b81b0260ff60b81b19909216919091179055565b6006546001600160a01b03163314611f9b5760405162461bcd60e51b8152600401610b099061350a565b60125460ff16611fac90600a61376e565b611fb6908261377d565b6009540361204b5760405162461bcd60e51b815260206004820152605660248201527f596f75206d7573742070726f76696465206120646966666572656e7420616d6f60448201527f756e74206f74686572207468616e207468652063757272656e742076616c7565606482015275081a5b881bdc99195c881d1bc81d5c19185d19481a5d60521b608482015260a401610b09565b60125460ff1661205c90600a61376e565b612066908261377d565b60095550565b6006546001600160a01b031633146120965760405162461bcd60e51b8152600401610b099061350a565b6001600160a01b03821660009081526023602052604090205481151560ff9091161515036121665760405162461bcd60e51b815260206004820152606b60248201527f596f75206d7573742070726f76696465206120646966666572656e74206d617860448201527f2077616c6c6574206c696d6974206f74686572207468616e207468652063757260648201527f72656e74206d61782077616c6c6574206c696d697420696e206f72646572207460848201526a1bc81d5c19185d19481a5d60aa1b60a482015260c401610b09565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6001600160a01b0383166121f35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b09565b6001600160a01b0382166122545760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b09565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161122a565b60405163a9059cbb60e01b81526001600160a01b038381166004830152602482018390526000919085169063a9059cbb906044016020604051808303816000875af1158015612300573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612324919061387c565b90508061236c5760405162461bcd60e51b81526020600482015260166024820152752a37b5b2b7103a3930b739b332b9103330b4b632b21760511b6044820152606401610b09565b50505050565b600081116123d45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b09565b600854600160b81b900460ff16156126ec576001600160a01b03831660009081526021602052604090205460ff1615801561242857506001600160a01b03821660009081526021602052604090205460ff16155b1561247f57600854600160b01b900460ff1661247f5760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610b09565b6008546001600160a01b0384811691161480156124b557506001600160a01b03821660009081526021602052604090205460ff16155b80156124cb5750600854600160a01b900460ff16155b80156124f057506001600160a01b03821660009081526022602052604090205460ff16155b1561254757600a548111156125475760405162461bcd60e51b815260206004820152601860248201527f596f752061726520657863656564696e67206d617842757900000000000000006044820152606401610b09565b6008546001600160a01b0383811691161480159061257e57506001600160a01b03821660009081526023602052604090205460ff16155b156125fe57600c54816125a6846001600160a01b031660009081526020819052604090205490565b6125b091906137d3565b11156125fe5760405162461bcd60e51b815260206004820152601b60248201527f596f752061726520657863656564696e67206d617857616c6c657400000000006044820152606401610b09565b6008546001600160a01b0384811691161480159061263557506001600160a01b03821660009081526021602052604090205460ff16155b801561265a57506001600160a01b03831660009081526021602052604090205460ff16155b80156126705750600854600160a01b900460ff16155b801561269557506001600160a01b03831660009081526024602052604090205460ff16155b156126ec57600b548111156126ec5760405162461bcd60e51b815260206004820152601960248201527f596f752061726520657863656564696e67206d617853656c6c000000000000006044820152606401610b09565b600080600080600060105411801561271d57506001600160a01b03871660009081526021602052604090205460ff16155b801561274257506001600160a01b03861660009081526021602052604090205460ff16155b801561275c5750600f54600e5461275991906137d3565b43105b600854909150600160a01b900460ff168061278f57506001600160a01b03871660009081526021602052604090205460ff165b806127b257506001600160a01b03861660009081526021602052604090205460ff165b806127e457506008546001600160a01b038881169116148015906127e457506008546001600160a01b03878116911614155b156127f25760009250612873565b6008546001600160a01b03878116911614801561280d575080155b1561283a57601b54601a54601c5461282591906137d3565b61282f91906137d3565b935060019150612873565b806128675760185460175460195461285291906137d3565b61285c91906137d3565b935060009150612873565b80156128735760105493505b606461287f858761377d565b61288991906137b1565b9250816000036128b05782601f60008282546128a591906137d3565b909155506128d09050565b816001036128d05782602060008282546128ca91906137d3565b90915550505b82156128e1576128e1873085612cd5565b600854600160a81b900460ff16801561290857506008546001600160a01b03888116911614155b80156129145750600083115b8015612922575060155460ff165b801561293f57506009543060009081526020819052604090205410155b1561294f5761294f601f5461296c565b612963878761295e86896137e6565b612cd5565b50505050505050565b600854600160a01b900460ff16611cf4576008805460ff60a01b1916600160a01b17905530600090815260208190526040812054601f83905590506129b182826137e6565b602081905550600080600080601d546000036129d057600093506129f0565b601d54601954601f546129e3919061377d565b6129ed91906137b1565b93505b601e54600003612a035760009250612a23565b601e54601c54602054612a16919061377d565b612a2091906137b1565b92505b6000612a2f84866137d3565b90506000612a3e6002836137b1565b9050476000612a4d838a6137e6565b90508015612a5e57612a5e81612da6565b6000612a6a83476137e6565b905060008a60205483612a7d919061377d565b612a8791906137b1565b90506000612a9582846137e6565b9050600080600080601d54600003612ab05760009b50612acd565b601d54601954612ac0908761377d565b612aca91906137b1565b9b505b601e54600003612ae05760009c50612afd565b601e54601c54612af0908861377d565b612afa91906137b1565b9c505b600060028d8f612b0d91906137d3565b612b1791906137b1565b90508015612cb457612b298b82612f00565b6000612b35828a6137e6565b90506000601f54602054612b4991906137d3565b905060008160205484612b5c919061377d565b612b6691906137b1565b90506000612b7482856137e6565b9050601e54600003612b8d576000985060009650612be0565b601c54601e54612b9d91906137e6565b601a54612baa908461377d565b612bb491906137b1565b601c54601e54919a50612bc6916137e6565b601b54612bd3908461377d565b612bdd91906137b1565b96505b601d54600003612bf7576000975060009550612c4a565b601954601d54612c0791906137e6565b601754612c14908361377d565b612c1e91906137b1565b601954601d54919950612c30916137e6565b601854612c3d908361377d565b612c4791906137b1565b95505b6000612c56898b6137d3565b90506000612c64888a6137d3565b90508115612c8757601554612c879061010090046001600160a01b031683612fb4565b8015612ca357601654612ca3906001600160a01b031682612fb4565b50506000601f819055602055505050505b50506008805460ff60a01b1916905550505050505050505050505050505050565b6001600160a01b038316612d395760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b09565b6001600160a01b038216612d9b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b09565b610b798383836130cd565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ddb57612ddb61353f565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e589190613794565b81600181518110612e6b57612e6b61353f565b6001600160a01b039283166020918202929092010152600754612e919130911684612191565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac94790612eca908590600090869030904290600401613899565b600060405180830381600087803b158015612ee457600080fd5b505af1158015612ef8573d6000803e3d6000fd5b505050505050565b600754612f189030906001600160a01b031684612191565b60075460065460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612f88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612fad919061390a565b5050505050565b804710156130045760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b09565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613051576040519150601f19603f3d011682016040523d82523d6000602084013e613056565b606091505b5050905080610b795760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b09565b6001600160a01b038316600090815260208190526040902054818110156131455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b09565b61314f82826137e6565b6001600160a01b0380861660009081526020819052604080822093909355908516815290812080548492906131859084906137d3565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131d191815260200190565b60405180910390a350505050565b600060208083528351808285015260005b8181101561320c578581018301518582016040015282016131f0565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611cf457600080fd5b803561324d8161322d565b919050565b60006020828403121561326457600080fd5b813561130f8161322d565b6000806040838503121561328257600080fd5b823561328d8161322d565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b8015158114611cf457600080fd5b803561324d816132b1565b600080604083850312156132dd57600080fd5b823567ffffffffffffffff808211156132f557600080fd5b818501915085601f83011261330957600080fd5b813560208282111561331d5761331d61329b565b8160051b604051601f19603f830116810181811086821117156133425761334261329b565b60405292835281830193508481018201928984111561336057600080fd5b948201945b838610156133855761337686613242565b85529482019493820193613365565b965061339490508782016132bf565b9450505050509250929050565b6000602082840312156133b357600080fd5b813561130f816132b1565b6000806000606084860312156133d357600080fd5b83356133de8161322d565b925060208401356133ee8161322d565b929592945050506040919091013590565b6000806040838503121561341257600080fd5b823561341d8161322d565b9150602083013561342d816132b1565b809150509250929050565b60008060006060848603121561344d57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561347657600080fd5b5035919050565b6000806040838503121561349057600080fd5b823561349b8161322d565b9150602083013561342d8161322d565b600080604083850312156134be57600080fd5b82359150602083013561342d8161322d565b600181811c908216806134e457607f821691505b60208210810361350457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161357d5761357d613555565b5060010190565b601f821115610b7957600081815260208120601f850160051c810160208610156135ab5750805b601f850160051c820191505b81811015612ef8578281556001016135b7565b815167ffffffffffffffff8111156135e4576135e461329b565b6135f8816135f284546134d0565b84613584565b602080601f83116001811461362d57600084156136155750858301515b600019600386901b1c1916600185901b178555612ef8565b600085815260208120601f198616915b8281101561365c5788860151825594840194600190910190840161363d565b508582101561367a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b808511156136c55781600019048211156136ab576136ab613555565b808516156136b857918102915b93841c939080029061368f565b509250929050565b6000826136dc57506001610ad9565b816136e957506000610ad9565b81600181146136ff576002811461370957613725565b6001915050610ad9565b60ff84111561371a5761371a613555565b50506001821b610ad9565b5060208310610133831016604e8410600b8410161715613748575081810a610ad9565b613752838361368a565b806000190482111561376657613766613555565b029392505050565b600061130f60ff8416836136cd565b8082028115828204841417610ad957610ad9613555565b6000602082840312156137a657600080fd5b815161130f8161322d565b6000826137ce57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ad957610ad9613555565b81810381811115610ad957610ad9613555565b60208082526057908201527f596f75206d7573742070726f76696465206120646966666572656e742061646460408201527f72657373206f74686572207468616e207468652063757272656e742076616c7560608201527f6520696e206f7264657220746f20757064617465206974000000000000000000608082015260a00190565b60006020828403121561388e57600080fd5b815161130f816132b1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138e95784516001600160a01b0316835293830193918301916001016138c4565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561391f57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122007f8a69924e482afc6238bdccc4df87e81b598b0497bb47d3541a5c3ddd0067464736f6c63430008110033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c806385141a77116101ab578063c5d32bb2116100f7578063f2c4220e11610095578063f8b45b051161006f578063f8b45b05146109bf578063fac8e835146109d5578063fbe6324e146109f5578063ffaee61414610a1657600080fd5b8063f2c4220e14610969578063f2fde38b1461097f578063f4d86d581461099f57600080fd5b8063e02ce1cf116100d1578063e02ce1cf146108d0578063e0f3ccf5146108f0578063e21b98911461092a578063e4748b9e1461094a57600080fd5b8063c5d32bb21461083a578063cbb1904e1461086a578063dd62ed3e1461088a57600080fd5b8063aacebbe311610164578063bbc0c7421161013e578063bbc0c742146107b9578063c0d78655146107da578063c17b5b8c146107fa578063c423b86b1461081a57600080fd5b8063aacebbe314610753578063b8eb354614610773578063baf1ce2e1461078957600080fd5b806385141a77146106b2578063860aefcf146106c85780638a8c523c146106e957806395d89b41146106fe578063a457c2d714610713578063a9059cbb1461073357600080fd5b8063313ce5671161026a578063703a490211610223578063715018a6116101fd578063715018a614610644578063728a88cd1461065957806375f0a8741461066f5780638095d5641461069257600080fd5b8063703a4902146105d857806370a08231146105f857806370db69d61461062e57600080fd5b8063313ce56714610506578063355496ca1461052857806336544805146105485780633950935114610578578063448ebdff1461059857806349bd5a5e146105b857600080fd5b80631694505e116102d7578063193d6e89116102b1578063193d6e89146104865780631c8c22fc146104a6578063214013ca146104c657806323b872dd146104e657600080fd5b80631694505e1461041b57806318160ddd14610453578063185870f91461046857600080fd5b806306fdde031461032a57806307c4226c14610355578063095ea7b3146103955780630e375a5c146103b55780631340538f146103d75780631675d802146103f757600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061033f610a36565b60405161034c91906131df565b60405180910390f35b34801561036157600080fd5b50610385610370366004613252565b60246020526000908152604090205460ff1681565b604051901515815260200161034c565b3480156103a157600080fd5b506103856103b036600461326f565b610ac8565b3480156103c157600080fd5b506103d56103d03660046132ca565b610adf565b005b3480156103e357600080fd5b506103d56103f23660046133a1565b610b7e565b34801561040357600080fd5b5061040d60095481565b60405190815260200161034c565b34801561042757600080fd5b5060075461043b906001600160a01b031681565b6040516001600160a01b03909116815260200161034c565b34801561045f57600080fd5b5060115461040d565b34801561047457600080fd5b506016546001600160a01b031661043b565b34801561049257600080fd5b506103d56104a13660046133be565b610c6d565b3480156104b257600080fd5b506103d56104c13660046133ff565b610ca2565b3480156104d257600080fd5b506103d56104e1366004613252565b610dc1565b3480156104f257600080fd5b506103856105013660046133be565b611237565b34801561051257600080fd5b5060125460405160ff909116815260200161034c565b34801561053457600080fd5b506103d56105433660046133ff565b611316565b34801561055457600080fd5b50610385610563366004613252565b60226020526000908152604090205460ff1681565b34801561058457600080fd5b5061038561059336600461326f565b611438565b3480156105a457600080fd5b506103d56105b33660046133a1565b61146f565b3480156105c457600080fd5b5060085461043b906001600160a01b031681565b3480156105e457600080fd5b506103d56105f3366004613252565b6114ac565b34801561060457600080fd5b5061040d610613366004613252565b6001600160a01b031660009081526020819052604090205490565b34801561063a57600080fd5b5061040d600a5481565b34801561065057600080fd5b506103d5611525565b34801561066557600080fd5b5061040d600d5481565b34801561067b57600080fd5b5060155461010090046001600160a01b031661043b565b34801561069e57600080fd5b506103d56106ad366004613438565b611561565b3480156106be57600080fd5b5061043b61dead81565b3480156106d457600080fd5b5060085461038590600160b81b900460ff1681565b3480156106f557600080fd5b506103d561162f565b34801561070a57600080fd5b5061033f611674565b34801561071f57600080fd5b5061038561072e36600461326f565b611683565b34801561073f57600080fd5b5061038561074e36600461326f565b61171e565b34801561075f57600080fd5b506103d561076e366004613252565b61172b565b34801561077f57600080fd5b5061040d600b5481565b34801561079557600080fd5b506103856107a4366004613252565b60236020526000908152604090205460ff1681565b3480156107c557600080fd5b5060085461038590600160b01b900460ff1681565b3480156107e657600080fd5b5061043b6107f5366004613252565b6117af565b34801561080657600080fd5b506103d5610815366004613438565b611bc7565b34801561082657600080fd5b506103d5610835366004613252565b611c3d565b34801561084657600080fd5b50610385610855366004613252565b60216020526000908152604090205460ff1681565b34801561087657600080fd5b506103d5610885366004613464565b611cc1565b34801561089657600080fd5b5061040d6108a536600461347d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108dc57600080fd5b506103d56108eb3660046134ab565b611cf7565b3480156108fc57600080fd5b50601a54601b54601c5461090f92919083565b6040805193845260208401929092529082015260600161034c565b34801561093657600080fd5b506103d56109453660046133ff565b611d57565b34801561095657600080fd5b5060175460185460195461090f92919083565b34801561097557600080fd5b5061040d600e5481565b34801561098b57600080fd5b506103d561099a366004613252565b611e78565b3480156109ab57600080fd5b506103d56109ba3660046133a1565b611f29565b3480156109cb57600080fd5b5061040d600c5481565b3480156109e157600080fd5b506103d56109f0366004613464565b611f71565b348015610a0157600080fd5b5060085461038590600160a81b900460ff1681565b348015610a2257600080fd5b506103d5610a313660046133ff565b61206c565b606060138054610a45906134d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a71906134d0565b8015610abe5780601f10610a9357610100808354040283529160200191610abe565b820191906000526020600020905b815481529060010190602001808311610aa157829003601f168201915b5050505050905090565b6000610ad5338484612191565b5060015b92915050565b6006546001600160a01b03163314610b125760405162461bcd60e51b8152600401610b099061350a565b60405180910390fd5b60005b8251811015610b79578160216000858481518110610b3557610b3561353f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610b718161356b565b915050610b15565b505050565b6006546001600160a01b03163314610ba85760405162461bcd60e51b8152600401610b099061350a565b801515600860159054906101000a900460ff16151503610c4f5760405162461bcd60e51b815260206004820152605660248201527f596f75206d7573742070726f76696465206120646966666572656e742073746160448201527f747573206f74686572207468616e207468652063757272656e742076616c7565606482015275081a5b881bdc99195c881d1bc81d5c19185d19481a5d60521b608482015260a401610b09565b60088054911515600160a81b0260ff60a81b19909216919091179055565b6006546001600160a01b03163314610c975760405162461bcd60e51b8152600401610b099061350a565b610b798383836122ad565b6006546001600160a01b03163314610ccc5760405162461bcd60e51b8152600401610b099061350a565b6001600160a01b03821660009081526022602052604090205481151560ff909116151503610d965760405162461bcd60e51b815260206004820152606560248201527f596f75206d7573742070726f76696465206120646966666572656e74206d617860448201527f20627579206c696d6974206f74686572207468616e207468652063757272656e60648201527f74206d617820627579206c696d697420696e206f7264657220746f20757064616084820152641d19481a5d60da1b60a482015260c401610b09565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314610deb5760405162461bcd60e51b8152600401610b099061350a565b600d5415610df857600080fd5b604080518082019091526009815268426c7565204c6f636b60b81b6020820152601390610e2590826135ca565b506040805180820190915260098152684255525520524f4b5560b81b6020820152601490610e5390826135ca565b506012805460ff191681178155610e6b90600a61376e565b610e7a906402540be40061377d565b60118190555060008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee99190613794565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5a9190613794565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610fa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcb9190613794565b600780546001600160a01b038086166001600160a01b03199283161790925560088054928416929091169190911790559050606461100860115490565b61101390600261377d565b61101d91906137b1565b600a556103e861102c60115490565b61103691906137b1565b61104190600561377d565b600955606461104f60115490565b61105a90600261377d565b61106491906137b1565b600c55606461107260115490565b61107d90600261377d565b61108791906137b1565b600b5560115433600090815260208190526040812080549091906110ac9084906137d3565b909155505043600d553360008181526021602081815260408084208054600160ff1991821681179092556022808552838720805483168417905560248086528488208054841685179055602380875285892080548516861790553089528787528589208054851686179055601580546001600160a01b036101009182900481168c52888c208054881689179055825482900481168c52858a52888c208054881689179055825482900481168c52848a52888c20805488168917905591540481168a52818852868a2080548616871790556016805482168b52898952878b208054871688179055805482168b52938852868a208054861687179055835481168a52918752858920805485168617905591541687528452828620805482168317905561dead86529383527fda90364631e387f138e7e413f1de75a8ecb4767574209ddf012729113dea45c080549094161790925560115491519182527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a3505050565b6000611244848484612372565b6001600160a01b03848116600090815260016020908152604080832033808552925290912054600654909216148061127c5750828110155b6112d95760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b09565b6006546001600160a01b031633036112f557600191505061130f565b611309853361130486856137e6565b612191565b60019150505b9392505050565b6006546001600160a01b031633146113405760405162461bcd60e51b8152600401610b099061350a565b6001600160a01b03821660009081526021602052604090205481151560ff90911615150361140d5760405162461bcd60e51b815260206004820152606860248201527f596f75206d7573742070726f76696465206120646966666572656e742065786560448201527f6d70742061646472657373206f7220737461747573206f74686572207468616e60648201527f207468652063757272656e742076616c756520696e206f7264657220746f20756084820152671c19185d19481a5d60c21b60a482015260c401610b09565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ad59185906113049086906137d3565b6006546001600160a01b031633146114995760405162461bcd60e51b8152600401610b099061350a565b6015805460ff1916911515919091179055565b6006546001600160a01b031633146114d65760405162461bcd60e51b8152600401610b099061350a565b6016546001600160a01b038083169116036115035760405162461bcd60e51b8152600401610b09906137f9565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b0316331461154f5760405162461bcd60e51b8152600401610b099061350a565b600680546001600160a01b0319169055565b6006546001600160a01b0316331461158b5760405162461bcd60e51b8152600401610b099061350a565b604080516060810182528481526020810184905201819052601783905560188290556019819055806115bd83856137d3565b6115c791906137d3565b601d55601e826115d783866137d3565b6115e191906137d3565b1115610b795760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610b09565b6006546001600160a01b031633146116595760405162461bcd60e51b8152600401610b099061350a565b6008805461ffff60a81b191661010160a81b17905543600e55565b606060148054610a45906134d0565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156117055760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b09565b611714338561130486856137e6565b5060019392505050565b6000610ad5338484612372565b6006546001600160a01b031633146117555760405162461bcd60e51b8152600401610b099061350a565b6015546001600160a01b0380831661010090920416036117875760405162461bcd60e51b8152600401610b09906137f9565b601580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6006546000906001600160a01b031633146117dc5760405162461bcd60e51b8152600401610b099061350a565b6001600160a01b0382166118325760405162461bcd60e51b815260206004820152601d60248201527f6e6577526f7574657220616464726573732063616e6e6f7420626520300000006044820152606401610b09565b6007546001600160a01b038084169116036118f55760405162461bcd60e51b815260206004820152607160248201527f596f75206d7573742070726f76696465206120646966666572656e7420756e6960448201527f737761705632526f75746572206f74686572207468616e20746865206375727260648201527f656e7420756e69737761705632526f75746572206164647265737320696e206f6084820152701c99195c881d1bc81d5c19185d19481a5d607a1b60a482015260c401610b09565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611938573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195c9190613794565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cd9190613794565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3c9190613794565b91506001600160a01b038216611b9357806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aae9190613794565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1f9190613794565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611b6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b909190613794565b91505b600880546001600160a01b038085166001600160a01b03199283161790925560078054939092169216919091179055919050565b6006546001600160a01b03163314611bf15760405162461bcd60e51b8152600401610b099061350a565b604080516060810182528481526020810184905201819052601a839055601b829055601c81905581611c2382856137d3565b611c2d91906137d3565b601e908155826115d783866137d3565b6006546001600160a01b03163314611c675760405162461bcd60e51b8152600401610b099061350a565b6001600160a01b031660009081526021602090815260408083208054600160ff1991821681179092556022845282852080548216831790556024845282852080548216831790556023909352922080549091169091179055565b6006546001600160a01b03163314611ceb5760405162461bcd60e51b8152600401610b099061350a565b611cf48161296c565b50565b6006546001600160a01b03163314611d215760405162461bcd60e51b8152600401610b099061350a565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610b79573d6000803e3d6000fd5b6006546001600160a01b03163314611d815760405162461bcd60e51b8152600401610b099061350a565b6001600160a01b03821660009081526024602052604090205481151560ff909116151503611e4d5760405162461bcd60e51b815260206004820152606760248201527f596f75206d7573742070726f76696465206120646966666572656e74206d617860448201527f2073656c6c206c696d6974206f74686572207468616e2074686520637572726560648201527f6e74206d61782073656c6c206c696d697420696e206f7264657220746f20757060848201526619185d19481a5d60ca1b60a482015260c401610b09565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314611ea25760405162461bcd60e51b8152600401610b099061350a565b6001600160a01b038116611f075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b09565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b03163314611f535760405162461bcd60e51b8152600401610b099061350a565b60088054911515600160b81b0260ff60b81b19909216919091179055565b6006546001600160a01b03163314611f9b5760405162461bcd60e51b8152600401610b099061350a565b60125460ff16611fac90600a61376e565b611fb6908261377d565b6009540361204b5760405162461bcd60e51b815260206004820152605660248201527f596f75206d7573742070726f76696465206120646966666572656e7420616d6f60448201527f756e74206f74686572207468616e207468652063757272656e742076616c7565606482015275081a5b881bdc99195c881d1bc81d5c19185d19481a5d60521b608482015260a401610b09565b60125460ff1661205c90600a61376e565b612066908261377d565b60095550565b6006546001600160a01b031633146120965760405162461bcd60e51b8152600401610b099061350a565b6001600160a01b03821660009081526023602052604090205481151560ff9091161515036121665760405162461bcd60e51b815260206004820152606b60248201527f596f75206d7573742070726f76696465206120646966666572656e74206d617860448201527f2077616c6c6574206c696d6974206f74686572207468616e207468652063757260648201527f72656e74206d61782077616c6c6574206c696d697420696e206f72646572207460848201526a1bc81d5c19185d19481a5d60aa1b60a482015260c401610b09565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6001600160a01b0383166121f35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b09565b6001600160a01b0382166122545760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b09565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161122a565b60405163a9059cbb60e01b81526001600160a01b038381166004830152602482018390526000919085169063a9059cbb906044016020604051808303816000875af1158015612300573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612324919061387c565b90508061236c5760405162461bcd60e51b81526020600482015260166024820152752a37b5b2b7103a3930b739b332b9103330b4b632b21760511b6044820152606401610b09565b50505050565b600081116123d45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b09565b600854600160b81b900460ff16156126ec576001600160a01b03831660009081526021602052604090205460ff1615801561242857506001600160a01b03821660009081526021602052604090205460ff16155b1561247f57600854600160b01b900460ff1661247f5760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610b09565b6008546001600160a01b0384811691161480156124b557506001600160a01b03821660009081526021602052604090205460ff16155b80156124cb5750600854600160a01b900460ff16155b80156124f057506001600160a01b03821660009081526022602052604090205460ff16155b1561254757600a548111156125475760405162461bcd60e51b815260206004820152601860248201527f596f752061726520657863656564696e67206d617842757900000000000000006044820152606401610b09565b6008546001600160a01b0383811691161480159061257e57506001600160a01b03821660009081526023602052604090205460ff16155b156125fe57600c54816125a6846001600160a01b031660009081526020819052604090205490565b6125b091906137d3565b11156125fe5760405162461bcd60e51b815260206004820152601b60248201527f596f752061726520657863656564696e67206d617857616c6c657400000000006044820152606401610b09565b6008546001600160a01b0384811691161480159061263557506001600160a01b03821660009081526021602052604090205460ff16155b801561265a57506001600160a01b03831660009081526021602052604090205460ff16155b80156126705750600854600160a01b900460ff16155b801561269557506001600160a01b03831660009081526024602052604090205460ff16155b156126ec57600b548111156126ec5760405162461bcd60e51b815260206004820152601960248201527f596f752061726520657863656564696e67206d617853656c6c000000000000006044820152606401610b09565b600080600080600060105411801561271d57506001600160a01b03871660009081526021602052604090205460ff16155b801561274257506001600160a01b03861660009081526021602052604090205460ff16155b801561275c5750600f54600e5461275991906137d3565b43105b600854909150600160a01b900460ff168061278f57506001600160a01b03871660009081526021602052604090205460ff165b806127b257506001600160a01b03861660009081526021602052604090205460ff165b806127e457506008546001600160a01b038881169116148015906127e457506008546001600160a01b03878116911614155b156127f25760009250612873565b6008546001600160a01b03878116911614801561280d575080155b1561283a57601b54601a54601c5461282591906137d3565b61282f91906137d3565b935060019150612873565b806128675760185460175460195461285291906137d3565b61285c91906137d3565b935060009150612873565b80156128735760105493505b606461287f858761377d565b61288991906137b1565b9250816000036128b05782601f60008282546128a591906137d3565b909155506128d09050565b816001036128d05782602060008282546128ca91906137d3565b90915550505b82156128e1576128e1873085612cd5565b600854600160a81b900460ff16801561290857506008546001600160a01b03888116911614155b80156129145750600083115b8015612922575060155460ff165b801561293f57506009543060009081526020819052604090205410155b1561294f5761294f601f5461296c565b612963878761295e86896137e6565b612cd5565b50505050505050565b600854600160a01b900460ff16611cf4576008805460ff60a01b1916600160a01b17905530600090815260208190526040812054601f83905590506129b182826137e6565b602081905550600080600080601d546000036129d057600093506129f0565b601d54601954601f546129e3919061377d565b6129ed91906137b1565b93505b601e54600003612a035760009250612a23565b601e54601c54602054612a16919061377d565b612a2091906137b1565b92505b6000612a2f84866137d3565b90506000612a3e6002836137b1565b9050476000612a4d838a6137e6565b90508015612a5e57612a5e81612da6565b6000612a6a83476137e6565b905060008a60205483612a7d919061377d565b612a8791906137b1565b90506000612a9582846137e6565b9050600080600080601d54600003612ab05760009b50612acd565b601d54601954612ac0908761377d565b612aca91906137b1565b9b505b601e54600003612ae05760009c50612afd565b601e54601c54612af0908861377d565b612afa91906137b1565b9c505b600060028d8f612b0d91906137d3565b612b1791906137b1565b90508015612cb457612b298b82612f00565b6000612b35828a6137e6565b90506000601f54602054612b4991906137d3565b905060008160205484612b5c919061377d565b612b6691906137b1565b90506000612b7482856137e6565b9050601e54600003612b8d576000985060009650612be0565b601c54601e54612b9d91906137e6565b601a54612baa908461377d565b612bb491906137b1565b601c54601e54919a50612bc6916137e6565b601b54612bd3908461377d565b612bdd91906137b1565b96505b601d54600003612bf7576000975060009550612c4a565b601954601d54612c0791906137e6565b601754612c14908361377d565b612c1e91906137b1565b601954601d54919950612c30916137e6565b601854612c3d908361377d565b612c4791906137b1565b95505b6000612c56898b6137d3565b90506000612c64888a6137d3565b90508115612c8757601554612c879061010090046001600160a01b031683612fb4565b8015612ca357601654612ca3906001600160a01b031682612fb4565b50506000601f819055602055505050505b50506008805460ff60a01b1916905550505050505050505050505050505050565b6001600160a01b038316612d395760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b09565b6001600160a01b038216612d9b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b09565b610b798383836130cd565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ddb57612ddb61353f565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e589190613794565b81600181518110612e6b57612e6b61353f565b6001600160a01b039283166020918202929092010152600754612e919130911684612191565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac94790612eca908590600090869030904290600401613899565b600060405180830381600087803b158015612ee457600080fd5b505af1158015612ef8573d6000803e3d6000fd5b505050505050565b600754612f189030906001600160a01b031684612191565b60075460065460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612f88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612fad919061390a565b5050505050565b804710156130045760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b09565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613051576040519150601f19603f3d011682016040523d82523d6000602084013e613056565b606091505b5050905080610b795760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b09565b6001600160a01b038316600090815260208190526040902054818110156131455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b09565b61314f82826137e6565b6001600160a01b0380861660009081526020819052604080822093909355908516815290812080548492906131859084906137d3565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131d191815260200190565b60405180910390a350505050565b600060208083528351808285015260005b8181101561320c578581018301518582016040015282016131f0565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611cf457600080fd5b803561324d8161322d565b919050565b60006020828403121561326457600080fd5b813561130f8161322d565b6000806040838503121561328257600080fd5b823561328d8161322d565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b8015158114611cf457600080fd5b803561324d816132b1565b600080604083850312156132dd57600080fd5b823567ffffffffffffffff808211156132f557600080fd5b818501915085601f83011261330957600080fd5b813560208282111561331d5761331d61329b565b8160051b604051601f19603f830116810181811086821117156133425761334261329b565b60405292835281830193508481018201928984111561336057600080fd5b948201945b838610156133855761337686613242565b85529482019493820193613365565b965061339490508782016132bf565b9450505050509250929050565b6000602082840312156133b357600080fd5b813561130f816132b1565b6000806000606084860312156133d357600080fd5b83356133de8161322d565b925060208401356133ee8161322d565b929592945050506040919091013590565b6000806040838503121561341257600080fd5b823561341d8161322d565b9150602083013561342d816132b1565b809150509250929050565b60008060006060848603121561344d57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561347657600080fd5b5035919050565b6000806040838503121561349057600080fd5b823561349b8161322d565b9150602083013561342d8161322d565b600080604083850312156134be57600080fd5b82359150602083013561342d8161322d565b600181811c908216806134e457607f821691505b60208210810361350457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161357d5761357d613555565b5060010190565b601f821115610b7957600081815260208120601f850160051c810160208610156135ab5750805b601f850160051c820191505b81811015612ef8578281556001016135b7565b815167ffffffffffffffff8111156135e4576135e461329b565b6135f8816135f284546134d0565b84613584565b602080601f83116001811461362d57600084156136155750858301515b600019600386901b1c1916600185901b178555612ef8565b600085815260208120601f198616915b8281101561365c5788860151825594840194600190910190840161363d565b508582101561367a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b808511156136c55781600019048211156136ab576136ab613555565b808516156136b857918102915b93841c939080029061368f565b509250929050565b6000826136dc57506001610ad9565b816136e957506000610ad9565b81600181146136ff576002811461370957613725565b6001915050610ad9565b60ff84111561371a5761371a613555565b50506001821b610ad9565b5060208310610133831016604e8410600b8410161715613748575081810a610ad9565b613752838361368a565b806000190482111561376657613766613555565b029392505050565b600061130f60ff8416836136cd565b8082028115828204841417610ad957610ad9613555565b6000602082840312156137a657600080fd5b815161130f8161322d565b6000826137ce57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ad957610ad9613555565b81810381811115610ad957610ad9613555565b60208082526057908201527f596f75206d7573742070726f76696465206120646966666572656e742061646460408201527f72657373206f74686572207468616e207468652063757272656e742076616c7560608201527f6520696e206f7264657220746f20757064617465206974000000000000000000608082015260a00190565b60006020828403121561388e57600080fd5b815161130f816132b1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138e95784516001600160a01b0316835293830193918301916001016138c4565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561391f57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122007f8a69924e482afc6238bdccc4df87e81b598b0497bb47d3541a5c3ddd0067464736f6c63430008110033

Deployed Bytecode Sourcemap

9097:20591:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12905:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10655:45;;;;;;;;;;-1:-1:-1;10655:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1259:14:1;;1252:22;1234:41;;1222:2;1207:18;10655:45:0;1094:187:1;12704:193:0;;;;;;;;;;-1:-1:-1;12704:193:0;;;;;:::i;:::-;;:::i;27240:223::-;;;;;;;;;;-1:-1:-1;27240:223:0;;;;;:::i;:::-;;:::i;:::-;;23438:323;;;;;;;;;;-1:-1:-1;23438:323:0;;;;;:::i;:::-;;:::i;9423:38::-;;;;;;;;;;;;;;;;;;;3582:25:1;;;3570:2;3555:18;9423:38:0;3436:177:1;9182:30:0;;;;;;;;;;-1:-1:-1;9182:30:0;;;;-1:-1:-1;;;;;9182:30:0;;;;;;-1:-1:-1;;;;;3797:32:1;;;3779:51;;3767:2;3752:18;9182:30:0;3618:218:1;13243:108:0;;;;;;;;;;-1:-1:-1;13331:12:0;;13243:108;;28923:97;;;;;;;;;;-1:-1:-1;28996:16:0;;-1:-1:-1;;;;;28996:16:0;28923:97;;25554:202;;;;;;;;;;-1:-1:-1;25554:202:0;;;;;:::i;:::-;;:::i;26891:339::-;;;;;;;;;;-1:-1:-1;26891:339:0;;;;;:::i;:::-;;:::i;10712:1743::-;;;;;;;;;;-1:-1:-1;10712:1743:0;;;;;:::i;:::-;;:::i;13544:575::-;;;;;;;;;;-1:-1:-1;13544:575:0;;;;;:::i;:::-;;:::i;13135:100::-;;;;;;;;;;-1:-1:-1;13218:9:0;;13135:100;;13218:9;;;;5513:36:1;;5501:2;5486:18;13135:100:0;5371:184:1;25859:310:0;;;;;;;;;;-1:-1:-1;25859:310:0;;;;;:::i;:::-;;:::i;10550:44::-;;;;;;;;;;-1:-1:-1;10550:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14127:298;;;;;;;;;;-1:-1:-1;14127:298:0;;;;;:::i;:::-;;:::i;27703:96::-;;;;;;;;;;-1:-1:-1;27703:96:0;;;;;:::i;:::-;;:::i;9219:28::-;;;;;;;;;;-1:-1:-1;9219:28:0;;;;-1:-1:-1;;;;;9219:28:0;;;29329:293;;;;;;;;;;-1:-1:-1;29329:293:0;;;;;:::i;:::-;;:::i;13359:177::-;;;;;;;;;;-1:-1:-1;13359:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;13510:18:0;13478:7;13510:18;;;;;;;;;;;;13359:177;9468:21;;;;;;;;;;;;;;;;7806:84;;;;;;;;;;;;;:::i;9558:29::-;;;;;;;;;;;;;;;;28818:97;;;;;;;;;;-1:-1:-1;28891:16:0;;;;;-1:-1:-1;;;;;28891:16:0;28818:97;;24155:398;;;;;;;;;;-1:-1:-1;24155:398:0;;;;;:::i;:::-;;:::i;10038:88::-;;;;;;;;;;;;10084:42;10038:88;;9389:25;;;;;;;;;;-1:-1:-1;9389:25:0;;;;-1:-1:-1;;;9389:25:0;;;;;;24971:160;;;;;;;;;;;;;:::i;13013:114::-;;;;;;;;;;;;;:::i;14433:447::-;;;;;;;;;;-1:-1:-1;14433:447:0;;;;;:::i;:::-;;:::i;14888:197::-;;;;;;;;;;-1:-1:-1;14888:197:0;;;;;:::i;:::-;;:::i;29028:293::-;;;;;;;;;;-1:-1:-1;29028:293:0;;;;;:::i;:::-;;:::i;9496:22::-;;;;;;;;;;;;;;;;10601:47;;;;;;;;;;-1:-1:-1;10601:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9349:33;;;;;;;;;;-1:-1:-1;9349:33:0;;;;-1:-1:-1;;;9349:33:0;;;;;;27807:1003;;;;;;;;;;-1:-1:-1;27807:1003:0;;;;;:::i;:::-;;:::i;24561:402::-;;;;;;;;;;-1:-1:-1;24561:402:0;;;;;:::i;:::-;;:::i;27471:224::-;;;;;;;;;;-1:-1:-1;27471:224:0;;;;;:::i;:::-;;:::i;10502:41::-;;;;;;;;;;-1:-1:-1;10502:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22217:113;;;;;;;;;;-1:-1:-1;22217: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;25384:162;;;;;;;;;;-1:-1:-1;25384:162:0;;;;;:::i;:::-;;:::i;10287:34::-;;;;;;;;;;-1:-1:-1;10287:34:0;;;;;;;;;;;;;;;;6981:25:1;;;7037:2;7022:18;;7015:34;;;;7065:18;;;7058:34;6969:2;6954:18;10287:34:0;6779:319:1;26539:344:0;;;;;;;;;;-1:-1:-1;26539:344:0;;;;;:::i;:::-;;:::i;10247:33::-;;;;;;;;;;-1:-1:-1;10247:33:0;;;;;;;;;;;;9594:30;;;;;;;;;;;;;;;;7896:182;;;;;;;;;;-1:-1:-1;7896:182:0;;;;;:::i;:::-;;:::i;25764:87::-;;;;;;;;;;-1:-1:-1;25764:87:0;;;;;:::i;:::-;;:::i;9525:24::-;;;;;;;;;;;;;;;;23769:378;;;;;;;;;;-1:-1:-1;23769:378:0;;;;;:::i;:::-;;:::i;9304:38::-;;;;;;;;;;-1:-1:-1;9304:38:0;;;;-1:-1:-1;;;9304:38:0;;;;;;26177:354;;;;;;;;;;-1:-1:-1;26177:354:0;;;;;:::i;:::-;;:::i;12905:100::-;12959:13;12992:5;12985:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12905:100;:::o;12704:193::-;12806:4;12828:39;171:10;12851:7;12860:6;12828:8;:39::i;:::-;-1:-1:-1;12885:4:0;12704:193;;;;;:::o;27240:223::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;;;;;;;;;27359:9:::1;27354:102;27378:8;:15;27374:1;:19;27354:102;;;27440:4;27415:9;:22;27425:8;27434:1;27425:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;27415:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;27415:22:0;:29;;-1:-1:-1;;27415:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27395:3;::::1;::::0;::::1;:::i;:::-;;;;27354:102;;;;27240:223:::0;;:::o;23438:323::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;23555:4:::1;23533:26;;:18;;;;;;;;;;;:26;;::::0;23511:162:::1;;;::::0;-1:-1:-1;;;23511:162:0;;8455:2:1;23511: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;;23511:162:0::1;8253:490:1::0;23511:162:0::1;23728:18;:25:::0;;;::::1;;-1:-1:-1::0;;;23728:25:0::1;-1:-1:-1::0;;;;23728:25:0;;::::1;::::0;;;::::1;::::0;;23438:323::o;25554:202::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;25696:52:::1;25717:6;25725:14;25741:6;25696:20;:52::i;26891: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;;;;;27023:22:0;::::1;;::::0;;;:12:::1;:22;::::0;;;;;:30;::::1;;:22;::::0;;::::1;:30;;::::0;27001:181:::1;;;::::0;-1:-1:-1;;;27001:181:0;;8950:2:1;27001: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;;27001:181:0::1;8748:546:1::0;27001:181:0::1;-1:-1:-1::0;;;;;27193:22:0;;;::::1;;::::0;;;:12:::1;:22;::::0;;;;:29;;-1:-1:-1;;27193:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26891:339::o;10712:1743::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;10783:14:::1;::::0;:19;10775:28:::1;;;::::0;::::1;;10814:19;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;10814:19:0::1;::::0;::::1;::::0;:5:::1;::::0;:19:::1;::::0;:5;:19:::1;:::i;:::-;-1:-1:-1::0;10844:21:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;10844:21:0::1;::::0;::::1;::::0;:7:::1;::::0;:21:::1;::::0;:7;:21:::1;:::i;:::-;-1:-1:-1::0;10888:2:0::1;10876:14:::0;;-1:-1:-1;;10876:14:0::1;::::0;::::1;::::0;;10930:13:::1;::::0;:2:::1;:13;:::i;:::-;10916:27;::::0;:11:::1;:27;:::i;:::-;10901:12;:42;;;;10954:15;10980:7;10954:34;;11061:13;11086:7;-1:-1:-1::0;;;;;11086:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11077:38:0::1;;11138:4;11158:7;-1:-1:-1::0;;;;;11158:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11077:106;::::0;-1:-1:-1;;;;;;11077:106:0::1;::::0;;;;;;-1:-1:-1;;;;;13545:15:1;;;11077:106:0::1;::::0;::::1;13527:34:1::0;13597:15;;13577:18;;;13570:43;13462:18;;11077:106:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11200:15;:25:::0;;-1:-1:-1;;;;;11200:25:0;;::::1;-1:-1:-1::0;;;;;;11200:25:0;;::::1;;::::0;;;11236:13:::1;:21:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;11061:122;-1:-1:-1;11301:3:0::1;11280:13;13331:12:::0;;;13243:108;11280:13:::1;:17;::::0;11296:1:::1;11280:17;:::i;:::-;11279:25;;;;:::i;:::-;11270:6;:34:::0;11372:4:::1;11356:13;13331:12:::0;;;13243:108;11356:13:::1;:20;;;;:::i;:::-;11355:26;::::0;11380:1:::1;11355:26;:::i;:::-;11329:23;:52:::0;11447:3:::1;11426:13;13331:12:::0;;;13243:108;11426:13:::1;:17;::::0;11442:1:::1;11426:17;:::i;:::-;11425:25;;;;:::i;:::-;11413:9;:37:::0;11510:3:::1;11489:13;13331:12:::0;;;13243:108;11489:13:::1;:17;::::0;11505:1:::1;11489:17;:::i;:::-;11488:25;;;;:::i;:::-;11478:7;:35:::0;11679:12:::1;::::0;11664:10:::1;11654:9;:21:::0;;;::::1;::::0;;;;;;:37;;:21;;:9;:37:::1;::::0;11679:12;;11654:37:::1;:::i;:::-;::::0;;;-1:-1:-1;;11721:12:0::1;11704:14;:29:::0;11756:10:::1;11746:21;::::0;;;:9:::1;:21;::::0;;;;;;;:28;;11770:4:::1;-1:-1:-1::0;;11746:28:0;;::::1;::::0;::::1;::::0;;;11785:12:::1;:24:::0;;;;;;:31;;;::::1;::::0;::::1;::::0;;11827:13:::1;:25:::0;;;;;;:32;;;::::1;::::0;::::1;::::0;;11870:15:::1;:27:::0;;;;;;:34;;;::::1;::::0;::::1;::::0;;11933:4:::1;11915:24:::0;;;;;;;;:31;;;::::1;::::0;::::1;::::0;;11967:16:::1;::::0;;-1:-1:-1;;;;;11746:28:0::1;11967:16:::0;;;::::1;::::0;::::1;11957:27:::0;;;;;:34;;;::::1;::::0;::::1;::::0;;12015:16;;;;::::1;::::0;::::1;12002:30:::0;;;;;;;;:37;;;::::1;::::0;::::1;::::0;;12064:16;;;;::::1;::::0;::::1;12050:31:::0;;;;;;;;:38;;;::::1;::::0;::::1;::::0;;12115:16;;::::1;::::0;::::1;12099:33:::0;;;;;;;;:40;;;::::1;::::0;::::1;::::0;;12160:16:::1;::::0;;;::::1;12150:27:::0;;;;;;;;:34;;;::::1;::::0;::::1;::::0;;12208:16;;;::::1;12195:30:::0;;;;;;;;:37;;;::::1;::::0;::::1;::::0;;12257:16;;;::::1;12243:31:::0;;;;;;;;:38;;;::::1;::::0;::::1;::::0;;12308:16;;::::1;12292:33:::0;;;;;;;:40;;;::::1;::::0;::::1;::::0;;10084:42:::1;12343:21:::0;;;;;;:28;;;;::::1;;::::0;;;12422:12:::1;::::0;12389:46;;3582:25:1;;;12389:46:0::1;::::0;3555:18:1;12389:46:0::1;;;;;;;;10764:1691;;10712:1743:::0;:::o;13544:575::-;13676:4;13693:36;13703:6;13711:9;13722:6;13693:9;:36::i;:::-;-1:-1:-1;;;;;13767:19:0;;;13740:24;13767:19;;;:11;:19;;;;;;;;171:10;13767:33;;;;;;;;;13849:6;;13767:33;;13849:6;13833:22;;:65;;;13892:6;13872:16;:26;;13833:65;13811:155;;;;-1:-1:-1;;;13811:155:0;;14178:2:1;13811: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;;13811:155:0;13976:404:1;13811:155:0;13997:6;;-1:-1:-1;;;;;13997:6:0;171:10;13981:22;13977:45;;14015:4;14008:11;;;;;13977:45;14032:57;14041:6;171:10;14063:25;14082:6;14063:16;:25;:::i;:::-;14032:8;:57::i;:::-;14107:4;14100:11;;;13544:575;;;;;;:::o;25859: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;;;;;25965:19:0;::::1;;::::0;;;:9:::1;:19;::::0;;;;;:27;::::1;;:19;::::0;;::::1;:27;;::::0;25943:181:::1;;;::::0;-1:-1:-1;;;25943:181:0;;14720:2:1;25943: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;;25943:181:0::1;14518:549:1::0;25943:181:0::1;-1:-1:-1::0;;;;;26135:19:0;;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:26;;-1:-1:-1;;26135:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25859:310::o;14127:298::-;171:10;14243:4;14337:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14337:34:0;;;;;;;;;;14243:4;;14265:130;;14315:7;;14337:47;;14374:10;;14337:47;:::i;27703:96::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;27770:13:::1;:21:::0;;-1:-1:-1;;27770:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27703:96::o;29329:293::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;29431:16:::1;::::0;-1:-1:-1;;;;;29431:29:0;;::::1;:16:::0;::::1;:29:::0;29409:166:::1;;;;-1:-1:-1::0;;;29409:166:0::1;;;;;;;:::i;:::-;29586:16;:28:::0;;-1:-1:-1;;;;;;29586:28:0::1;-1:-1:-1::0;;;;;29586:28:0;;;::::1;::::0;;;::::1;::::0;;29329: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;24155:398::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;24312:39:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;24302:7:::1;:49:::0;;;;;;;;;;;24340:10;24377:23:::1;24328:10:::0;24317;24377:23:::1;:::i;:::-;:35;;;;:::i;:::-;24362:12;:50:::0;24486:2:::1;24471:10:::0;24445:23:::1;24458:10:::0;24445;:23:::1;:::i;:::-;:36;;;;:::i;:::-;24444:44;;24423:122;;;::::0;-1:-1:-1;;;24423:122:0;;15770:2:1;24423:122:0::1;::::0;::::1;15752:21:1::0;15809:2;15789:18;;;15782:30;15848:31;15828:18;;;15821:59;15897:18;;24423:122:0::1;15568:353:1::0;24971:160:0;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;25026:13:::1;:20:::0;;-1:-1:-1;;;;25057:25:0;-1:-1:-1;;;25057:25:0;;;25111:12:::1;25093:15;:30:::0;24971:160::o;13013:114::-;13069:13;13112:7;13105:14;;;;;:::i;14433:447::-;171:10;14554:4;14603:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14603:34:0;;;;;;;;;;14670:35;;;;14648:122;;;;-1:-1:-1;;;14648:122:0;;16128:2:1;14648: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;;14648:122:0;15926:401:1;14648:122:0;14781:67;171:10;14804:7;14813:34;14832:15;14813:16;:34;:::i;14781:67::-;-1:-1:-1;14868:4:0;;14433:447;-1:-1:-1;;;14433:447:0:o;14888:197::-;14993:4;15015:40;15025:10;15037:9;15048:6;15015:9;:40::i;29028:293::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;29130:16:::1;::::0;-1:-1:-1;;;;;29130:29:0;;::::1;:16;::::0;;::::1;;:29:::0;29108:166:::1;;;;-1:-1:-1::0;;;29108:166:0::1;;;;;;;:::i;:::-;29285:16;:28:::0;;-1:-1:-1;;;;;29285:28:0;;::::1;;;-1:-1:-1::0;;;;;;29285:28:0;;::::1;::::0;;;::::1;::::0;;29028:293::o;27807:1003::-;7723:6;;27900:13;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27939:23:0;::::1;27931:65;;;::::0;-1:-1:-1;;;27931:65:0;;16534:2:1;27931:65:0::1;::::0;::::1;16516:21:1::0;16573:2;16553:18;;;16546:30;16612:31;16592:18;;;16585:59;16661:18;;27931:65:0::1;16332:353:1::0;27931:65:0::1;28029:15;::::0;-1:-1:-1;;;;;28029:37:0;;::::1;:15:::0;::::1;:37:::0;28007:200:::1;;;::::0;-1:-1:-1;;;28007:200:0;;16892:2:1;28007: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;;28007:200:0::1;16690:558:1::0;28007:200:0::1;28218:15;28244:9;28218:36;;28284:7;-1:-1:-1::0;;;;;28284:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28275:35:0::1;;28333:4;28353:7;-1:-1:-1::0;;;;;28353:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28275:103;::::0;-1:-1:-1;;;;;;28275:103:0::1;::::0;;;;;;-1:-1:-1;;;;;13545:15:1;;;28275:103:0::1;::::0;::::1;13527:34:1::0;13597:15;;13577:18;;;13570:43;13462:18;;28275:103:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28267:111:::0;-1:-1:-1;;;;;;28393:19:0;::::1;28389:222;;28490:7;-1:-1:-1::0;;;;;28490:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28481:38:0::1;;28546:4;28570:7;-1:-1:-1::0;;;;;28570:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28481:118;::::0;-1:-1:-1;;;;;;28481:118:0::1;::::0;;;;;;-1:-1:-1;;;;;13545:15:1;;;28481:118:0::1;::::0;::::1;13527:34:1::0;13597:15;;13577:18;;;13570:43;13462:18;;28481:118:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28473:126;;28389:222;28683:13;:21:::0;;-1:-1:-1;;;;;28683:21:0;;::::1;-1:-1:-1::0;;;;;;28683:21:0;;::::1;;::::0;;;28777:15:::1;:25:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;28699:5;27807:1003;-1:-1:-1;27807:1003:0:o;24561:402::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;24720:39:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;24709:8:::1;:50:::0;;;;;;;;;;;24736:10;24786:23:::1;24748:10:::0;24725;24786:23:::1;:::i;:::-;:36;;;;:::i;:::-;24770:13;:52:::0;;;24881:10;24855:23:::1;24868:10:::0;24855;:23:::1;:::i;27471: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;;;;;27537:19:0::1;;::::0;;;:9:::1;:19;::::0;;;;;;;:26;;27559:4:::1;-1:-1:-1::0;;27537:26:0;;::::1;::::0;::::1;::::0;;;27574:12:::1;:22:::0;;;;;:29;;;::::1;::::0;::::1;::::0;;27614:13:::1;:23:::0;;;;;:30;;;::::1;::::0;::::1;::::0;;27655:15:::1;:25:::0;;;;;:32;;;;::::1;::::0;;::::1;::::0;;27471:224::o;22217:113::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;22294:28:::1;22303:18;22294:8;:28::i;:::-;22217:113:::0;:::o;25384:162::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;25498:40:::1;::::0;-1:-1:-1;;;;;25498:32:0;::::1;::::0;:40;::::1;;;::::0;25531:6;;25498:40:::1;::::0;;;25531:6;25498:32;:40;::::1;;;;;;;;;;;;;::::0;::::1;;;;26539: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;;;;;26672:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;:31;::::1;;:23;::::0;;::::1;:31;;::::0;26650:184:::1;;;::::0;-1:-1:-1;;;26650:184:0;;17455:2:1;26650: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;;26650:184:0::1;17253:548:1::0;26650:184:0::1;-1:-1:-1::0;;;;;26845:23:0;;;::::1;;::::0;;;:13:::1;:23;::::0;;;;:30;;-1:-1:-1;;26845:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26539: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;25764:87::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;25830:6:::1;:13:::0;;;::::1;;-1:-1:-1::0;;;25830:13:0::1;-1:-1:-1::0;;;;25830:13:0;;::::1;::::0;;;::::1;::::0;;25764:87::o;23769:378::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;13218:9;;;;23947:14:::1;::::0;:2:::1;:14;:::i;:::-;23934:27;::::0;:10;:27:::1;:::i;:::-;23907:23;;:54:::0;23885:190:::1;;;::::0;-1:-1:-1;;;23885:190:0;;18415:2:1;23885: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;;23885:190:0::1;18213:490:1::0;23885:190:0::1;13218:9:::0;;;;24125:14:::1;::::0;:2:::1;:14;:::i;:::-;24112:27;::::0;:10;:27:::1;:::i;:::-;24086:23;:53:::0;-1:-1:-1;23769:378:0:o;26177: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;;;;;26312:25:0;::::1;;::::0;;;:15:::1;:25;::::0;;;;;:33;::::1;;:25;::::0;;::::1;:33;;::::0;26290:190:::1;;;::::0;-1:-1:-1;;;26290:190:0;;18910:2:1;26290: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;;26290:190:0::1;18708:552:1::0;26290:190:0::1;-1:-1:-1::0;;;;;26491:25:0;;;::::1;;::::0;;;:15:::1;:25;::::0;;;;:32;;-1:-1:-1;;26491:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26177: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;25139:237:0;25284:34;;-1:-1:-1;;;25284:34:0;;-1:-1:-1;;;;;20265:32:1;;;25284:34:0;;;20247:51:1;20314:18;;;20307:34;;;25272:9:0;;25284:15;;;;;;20220:18:1;;25284:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25272:46;;25337:4;25329:39;;;;-1:-1:-1;;;25329:39:0;;20804:2:1;25329:39:0;;;20786:21:1;20843:2;20823:18;;;20816:30;-1:-1:-1;;;20862:18:1;;;20855:52;20924:18;;25329:39:0;20602:346:1;25329:39:0;25261:115;25139:237;;;:::o;15093:2997::-;15243:1;15234:6;:10;15226:64;;;;-1:-1:-1;;;15226:64:0;;21155:2:1;15226: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;;15226:64:0;20953:405:1;15226:64:0;15304:6;;-1:-1:-1;;;15304:6:0;;;;15301:972;;;-1:-1:-1;;;;;15327:17:0;;;;;;:9;:17;;;;;;;;15326:18;:43;;;;-1:-1:-1;;;;;;15349:20:0;;;;;;:9;:20;;;;;;;;15348:21;15326:43;15322:124;;;15394:13;;-1:-1:-1;;;15394:13:0;;;;15386:48;;;;-1:-1:-1;;;15386:48:0;;21565:2:1;15386:48:0;;;21547:21:1;21604:2;21584:18;;;21577:30;-1:-1:-1;;;21623:18:1;;;21616:52;21685:18;;15386:48:0;21363:346:1;15386:48:0;15486:13;;-1:-1:-1;;;;;15476:23:0;;;15486:13;;15476:23;:61;;;;-1:-1:-1;;;;;;15517:20:0;;;;;;:9;:20;;;;;;;;15516:21;15476:61;:93;;;;-1:-1:-1;15555:14:0;;-1:-1:-1;;;15555:14:0;;;;15554:15;15476:93;:134;;;;-1:-1:-1;;;;;;15587:23:0;;;;;;:12;:23;;;;;;;;15586:24;15476:134;15458:244;;;15655:6;;15645;:16;;15637:53;;;;-1:-1:-1;;;15637:53:0;;21916:2:1;15637:53:0;;;21898:21:1;21955:2;21935:18;;;21928:30;21994:26;21974:18;;;21967:54;22038:18;;15637:53:0;21714:348:1;15637:53:0;15743:13;;-1:-1:-1;;;;;15730:26:0;;;15743:13;;15730:26;;;;:70;;-1:-1:-1;;;;;;15774:26:0;;;;;;:15;:26;;;;;;;;15773:27;15730:70;15712:259;;;15887:9;;15877:6;15854:20;15864:9;-1:-1:-1;;;;;13510:18:0;13478:7;13510:18;;;;;;;;;;;;13359:177;15854:20;:29;;;;:::i;:::-;:42;;15828:131;;;;-1:-1:-1;;;15828:131:0;;22269:2:1;15828:131:0;;;22251:21:1;22308:2;22288:18;;;22281:30;22347:29;22327:18;;;22320:57;22394:18;;15828:131:0;22067:351:1;15828:131:0;16011:13;;-1:-1:-1;;;;;16001:23:0;;;16011:13;;16001:23;;;;:61;;-1:-1:-1;;;;;;16042:20:0;;;;;;:9;:20;;;;;;;;16041:21;16001:61;:96;;;;-1:-1:-1;;;;;;16080:17:0;;;;;;:9;:17;;;;;;;;16079:18;16001:96;:128;;;;-1:-1:-1;16115:14:0;;-1:-1:-1;;;16115:14:0;;;;16114:15;16001:128;:167;;;;-1:-1:-1;;;;;;16147:21:0;;;;;;:13;:21;;;;;;;;16146:22;16001:167;15983:279;;;16213:7;;16203:6;:17;;16195:55;;;;-1:-1:-1;;;16195:55:0;;22625:2:1;16195:55:0;;;22607:21:1;22664:2;22644:18;;;22637:30;22703:27;22683:18;;;22676:55;22748:18;;16195:55:0;22423:349:1;16195:55:0;16283:16;16310:17;16338;16368;16400:1;16388:9;;:13;:48;;;;-1:-1:-1;;;;;;16419:17:0;;;;;;:9;:17;;;;;;;;16418:18;16388:48;:86;;;;-1:-1:-1;;;;;;16454:20:0;;;;;;:9;:20;;;;;;;;16453:21;16388:86;:144;;;;;16524:8;;16506:15;;:26;;;;:::i;:::-;16491:12;:41;16388:144;16641:14;;16368:164;;-1:-1:-1;;;;16641:14:0;;;;;:48;;-1:-1:-1;;;;;;16672:17:0;;;;;;:9;:17;;;;;;;;16641:48;:85;;;-1:-1:-1;;;;;;16706:20:0;;;;;;:9;:20;;;;;;;;16641:85;:157;;;-1:-1:-1;16754:13:0;;-1:-1:-1;;;;;16744:23:0;;;16754:13;;16744:23;;;;:53;;-1:-1:-1;16784:13:0;;-1:-1:-1;;;;;16771:26:0;;;16784:13;;16771:26;;16744:53;16623:657;;;16835:1;16823:13;;16623:657;;;16901:13;;-1:-1:-1;;;;;16888:26:0;;;16901:13;;16888:26;:43;;;;;16919:12;16918:13;16888:43;16884:396;;;17001:18;;:8;16980:18;16959;;:39;;16980:18;16959:39;:::i;:::-;:60;;;;:::i;:::-;16948:71;;17047:1;17035:13;;16884:396;;;17071:12;17066:214;;17151:17;;:7;17131:17;17111;;:37;;17131:17;17111:37;:::i;:::-;:57;;;;:::i;:::-;17100:68;;17196:1;17184:13;;17066:214;;;17219:12;17215:65;;;17259:9;;17248:20;;17215:65;17324:3;17303:17;17312:8;17303:6;:17;:::i;:::-;17302:25;;;;:::i;:::-;17290:37;;17344:9;17357:1;17344:14;17340:161;;17396:9;17375:17;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;17340:161:0;;-1:-1:-1;17340:161:0;;17427:9;17440:1;17427:14;17423:78;;17480:9;17458:18;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;17423:78:0;17614:13;;17610:95;;17644:49;17660:6;17676:4;17683:9;17644:15;:49::i;:::-;17735:18;;-1:-1:-1;;;17735:18:0;;;;:58;;;;-1:-1:-1;17780:13:0;;-1:-1:-1;;;;;17770:23:0;;;17780:13;;17770:23;;17735:58;:88;;;;;17822:1;17810:9;:13;17735:88;:118;;;;-1:-1:-1;17840:13:0;;;;17735:118;:186;;;;-1:-1:-1;17898:23:0;;17888:4;13478:7;13510:18;;;;;;;;;;;17870:51;;17735:186;17717:270;;;17948:27;17957:17;;17948:8;:27::i;:::-;18028:54;18044:6;18052:9;18063:18;18072:9;18063:6;:18;:::i;:::-;18028:15;:54::i;:::-;15215:2875;;;;15093:2997;;;:::o;18098:4111::-;12568:14;;-1:-1:-1;;;12568:14:0;;;;12563:122;;12599:14;:21;;-1:-1:-1;;;;12599:21:0;-1:-1:-1;;;12599:21:0;;;18221:4:::1;-1:-1:-1::0;13510:18:0;;;;;;;;;;;18238:17:::1;:38:::0;;;18177:50;-1:-1:-1;18308:35:0::1;18258:18:::0;18177:50;18308:35:::1;:::i;:::-;18287:18;:56;;;;18354:29;18394:30:::0;18435:21:::1;18467:20:::0;18504:12:::1;;18520:1;18504:17:::0;18500:220:::1;;18562:1;18538:25;;18500:220;;;18696:12;::::0;18658:17;;18638::::1;::::0;:37:::1;::::0;18658:17;18638:37:::1;:::i;:::-;18637:71;;;;:::i;:::-;18596:112;;18500:220;18734:13;;18751:1;18734:18:::0;18730:226:::1;;18794:1;18769:26;;18730:226;;;18931:13;::::0;18892:18;;18871::::1;::::0;:39:::1;::::0;18892:18;18871:39:::1;:::i;:::-;18870:74;;;;:::i;:::-;18828:116;;18730:226;18966:31;19000:59;19037:22:::0;19000:21;:59:::1;:::i;:::-;18966:93:::0;-1:-1:-1;19072:30:0::1;19105:27;19131:1;18966:93:::0;19105:27:::1;:::i;:::-;19072:60:::0;-1:-1:-1;19168:21:0::1;19143:22;19217:40;19072:60:::0;19217:15;:40:::1;:::i;:::-;19200:57:::0;-1:-1:-1;19274:10:0;;19270:67:::1;;19301:24;19318:6;19301:16;:24::i;:::-;19349:20;19372:38;19396:14:::0;19372:21:::1;:38;:::i;:::-;19349:61;;19421:24;19499:15;19464:18;;19449:12;:33;;;;:::i;:::-;19448:66;;;;:::i;:::-;19421:93:::0;-1:-1:-1;19525:23:0::1;19551:31;19421:93:::0;19551:12;:31:::1;:::i;:::-;19525:57;;19595:27;19633:26:::0;19670:27:::1;19708:26:::0;19751:12:::1;;19767:1;19751:17:::0;19747:202:::1;;19800:1;19785:16;;19747:202;;;19924:12;::::0;19885:17;;19867:35:::1;::::0;:15;:35:::1;:::i;:::-;19866:71;;;;:::i;:::-;19834:103;;19747:202;19963:13;;19980:1;19963:18:::0;19959:208:::1;;20014:1;19998:17;;19959:208;;;20141:13;::::0;20101:18;;20082:37:::1;::::0;:16;:37:::1;:::i;:::-;20081:74;;;;:::i;:::-;20048:107;;19959:208;20177:19;20232:1;20216:12;20200:13;:28;;;;:::i;:::-;20199:34;;;;:::i;:::-;20177:56:::0;-1:-1:-1;20250:15:0;;20246:1956:::1;;20323:49;20336:22;20360:11;20323:12;:49::i;:::-;20389:19;20411:26;20426:11:::0;20411:12;:26:::1;:::i;:::-;20389:48;;20454:22;20500:17;;20479:18;;:38;;;;:::i;:::-;20454:63;;20534:23;20614:14;20575:18;;20561:11;:32;;;;:::i;:::-;20560:68;;;;:::i;:::-;20534:94:::0;-1:-1:-1;20643:22:0::1;20668:29;20534:94:::0;20668:11;:29:::1;:::i;:::-;20643:54;;20718:13;;20735:1;20718:18:::0;20714:467:::1;;20779:1;20757:23;;20821:1;20799:23;;20714:467;;;20985:18:::0;;20969:13:::1;::::0;:34:::1;::::0;20985:18;20969:34:::1;:::i;:::-;20925:8;:18:::0;20907:36:::1;::::0;:15;:36:::1;:::i;:::-;20906:99;;;;:::i;:::-;21146:18:::0;;21130:13:::1;::::0;20863:142;;-1:-1:-1;21130:34:0::1;::::0;::::1;:::i;:::-;21086:18:::0;;21068:36:::1;::::0;:15;:36:::1;:::i;:::-;21067:98;;;;:::i;:::-;21024:141;;20714:467;21201:12;;21217:1;21201:17:::0;21197:455:::1;;21260:1;21239:22;;21301:1;21280:22;;21197:455;;;21461:17:::0;;21446:12:::1;::::0;:32:::1;::::0;21461:17;21446:32:::1;:::i;:::-;21403:7;:17:::0;21386:34:::1;::::0;:14;:34:::1;:::i;:::-;21385:94;;;;:::i;:::-;21618:17:::0;;21603:12:::1;::::0;21343:136;;-1:-1:-1;21603:32:0::1;::::0;::::1;:::i;:::-;21560:17:::0;;21543:34:::1;::::0;:14;:34:::1;:::i;:::-;21542:94;;;;:::i;:::-;21500:136;;21197:455;21668:25;21696:57;21735:18:::0;21696:19;:57:::1;:::i;:::-;21668:85:::0;-1:-1:-1;21768:25:0::1;21796:57;21835:18:::0;21796:19;:57:::1;:::i;:::-;21768:85:::0;-1:-1:-1;21874:21:0;;21870:116:::1;;21924:16;::::0;21916:54:::1;::::0;21924:16:::1;::::0;::::1;-1:-1:-1::0;;;;;21924:16:0::1;21952:17:::0;21916:35:::1;:54::i;:::-;22004:21:::0;;22000:116:::1;;22054:16;::::0;22046:54:::1;::::0;-1:-1:-1;;;;;22054:16:0::1;22082:17:::0;22046:35:::1;:54::i;:::-;-1:-1:-1::0;;22152:1:0::1;22132:17;:21:::0;;;22168:18:::1;:22:::0;-1:-1:-1;;;;20246:1956:0::1;-1:-1:-1::0;;12651:14:0;:22;;-1:-1:-1;;;;12651:22:0;;;-1:-1:-1;;;;;;;;;;;;;;;18098: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;22338:572::-;22499:16;;;22513:1;22499:16;;;;;;;;22475:21;;22499:16;;;;;;;;;;-1:-1:-1;22499:16:0;22475:40;;22544:4;22526;22531:1;22526:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22526:23:0;;;:7;;;;;;;;;;:23;;;;22570:15;;:22;;;-1:-1:-1;;;22570:22:0;;;;:15;;;;;:20;;:22;;;;;22526:7;;22570:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22560:4;22565:1;22560:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22560:32:0;;;:7;;;;;;;;;:32;22637:15;;22605:62;;22622:4;;22637:15;22655:11;22605:8;:62::i;:::-;22706:15;;:196;;-1:-1:-1;;;22706:196:0;;-1:-1:-1;;;;;22706:15:0;;;;:66;;:196;;22787:11;;22706:15;;22829:4;;22856;;22876:15;;22706:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22393:517;22338:572;:::o;22918:512::-;23098:15;;23066:62;;23083:4;;-1:-1:-1;;;;;23098:15:0;23116:11;23066:8;:62::i;:::-;23171:15;;23375:6;;23171:251;;-1:-1:-1;;;23171:251:0;;23243:4;23171:251;;;24913:34:1;24963:18;;;24956:34;;;23171:15:0;25006:18:1;;;24999:34;;;25049:18;;;25042:34;-1:-1:-1;;;;;23375:6:0;;;25092:19:1;;;25085:44;23396:15:0;25145:19:1;;;25138:35;23171:15:0;;;:31;;23210:9;;24847:19:1;;23171:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22918: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://07f8a69924e482afc6238bdccc4df87e81b598b0497bb47d3541a5c3ddd00674
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.