ETH Price: $2,470.66 (-7.80%)

Contract

0x45dCa10B41C5273C6939544FfF6ec21417A68BD7
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve191605532024-02-05 7:20:35204 days ago1707117635IN
0x45dCa10B...417A68BD7
0 ETH0.0002829311.62244337
Approve172250902023-05-09 19:54:23476 days ago1683662063IN
0x45dCa10B...417A68BD7
0 ETH0.004965107.08759491
Force ERC20Token...172250252023-05-09 19:41:23476 days ago1683661283IN
0x45dCa10B...417A68BD7
0 ETH0.0048122899.74480083
Approve172247692023-05-09 18:49:23476 days ago1683658163IN
0x45dCa10B...417A68BD7
0 ETH0.00572877123.78512732
Transfer172247602023-05-09 18:47:35476 days ago1683658055IN
0x45dCa10B...417A68BD7
0 ETH0.016032130.97932624
Approve172222162023-05-09 10:11:35476 days ago1683627095IN
0x45dCa10B...417A68BD7
0 ETH0.0028672861.87491824
Approve172155642023-05-08 11:45:35477 days ago1683546335IN
0x45dCa10B...417A68BD7
0 ETH0.003949884.81791085
Force ERC20Token...172104622023-05-07 18:32:47478 days ago1683484367IN
0x45dCa10B...417A68BD7
0 ETH0.0057815141.07069385
Approve171987252023-05-06 2:55:59480 days ago1683341759IN
0x45dCa10B...417A68BD7
0 ETH0.00526629112.94267593
Approve171973242023-05-05 22:12:11480 days ago1683324731IN
0x45dCa10B...417A68BD7
0 ETH0.00379484156.26940661
Transfer171968492023-05-05 20:36:35480 days ago1683318995IN
0x45dCa10B...417A68BD7
0 ETH0.0092127160.04290452
Approve171968412023-05-05 20:34:59480 days ago1683318899IN
0x45dCa10B...417A68BD7
0 ETH0.00694953149.85189366
Transfer171965802023-05-05 19:42:23480 days ago1683315743IN
0x45dCa10B...417A68BD7
0 ETH0.01847362150.882736
Approve171965542023-05-05 19:37:11480 days ago1683315431IN
0x45dCa10B...417A68BD7
0 ETH0.00869908186.80401712
Transfer171950072023-05-05 14:24:23480 days ago1683296663IN
0x45dCa10B...417A68BD7
0 ETH0.01170725208.38092558
Approve171948152023-05-05 13:45:35480 days ago1683294335IN
0x45dCa10B...417A68BD7
0 ETH0.00781754167.87380161
Approve171946872023-05-05 13:19:23480 days ago1683292763IN
0x45dCa10B...417A68BD7
0 ETH0.00636157137.38712655
Approve171946862023-05-05 13:19:11480 days ago1683292751IN
0x45dCa10B...417A68BD7
0 ETH0.00633704136.08160344
Approve171945322023-05-05 12:48:23480 days ago1683290903IN
0x45dCa10B...417A68BD7
0 ETH0.00377739155.55077749
Approve171945242023-05-05 12:46:47480 days ago1683290807IN
0x45dCa10B...417A68BD7
0 ETH0.00664803143.53640086
Approve171942822023-05-05 11:58:11480 days ago1683287891IN
0x45dCa10B...417A68BD7
0 ETH0.00639034137.2261831
Approve171940652023-05-05 11:14:35480 days ago1683285275IN
0x45dCa10B...417A68BD7
0 ETH0.003245469.60213386
Transfer171940652023-05-05 11:14:35480 days ago1683285275IN
0x45dCa10B...417A68BD7
0 ETH0.0045308569.80213386
Approve171940112023-05-05 11:03:47480 days ago1683284627IN
0x45dCa10B...417A68BD7
0 ETH0.0036710378.73035367
Approve171940022023-05-05 11:01:59480 days ago1683284519IN
0x45dCa10B...417A68BD7
0 ETH0.0036672879.20027328
View all transactions

Latest 6 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
171899902023-05-04 21:30:59481 days ago1683235859
0x45dCa10B...417A68BD7
0.0360167 ETH
171899902023-05-04 21:30:59481 days ago1683235859
0x45dCa10B...417A68BD7
0.01800835 ETH
171899902023-05-04 21:30:59481 days ago1683235859
0x45dCa10B...417A68BD7
0.05402505 ETH
171897122023-05-04 20:35:11481 days ago1683232511
0x45dCa10B...417A68BD7
0.01632218 ETH
171897122023-05-04 20:35:11481 days ago1683232511
0x45dCa10B...417A68BD7
0.00816109 ETH
171897122023-05-04 20:35:11481 days ago1683232511
0x45dCa10B...417A68BD7
0.02448327 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RR

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-04
*/

/* http://rollsroyce.lol */

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.5;

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

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this;
        return msg.data;
    }
}

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

    function WETH() external pure returns (address);

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

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

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

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

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

contract RR is ERC20, Ownable {
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    UniswapV2Router public uniswapV2Router;
    address public uniswapV2Pair;
    bool private swapping;
    uint256 public swapTokensAtAmount;
    address public marketingWallet;
    address public devWallet;
    uint256 public tradingBlock = 0;
    uint256 public botBlockNumber = 0;
    mapping(address => bool) public initialBotBuyer;
    mapping(address => uint256) public _earlyHolderRewards;
    uint256 public botsCaught;
    uint256 public _trackEarlyHolder;
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellBurnFee;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyBurnFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForBurn;

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedMarketingAddress(address indexed newWallet);

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

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event MaxTransactionExclusion(address _address, bool excluded);

    event isSwapBack(uint256 timestamp);

    event DetectedEarlyBotBuyer(address sniper);

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

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTx;
    mapping(address => bool) public automatedMarketMakerPairs;

    constructor() ERC20("Rolls Royce", "RR") {
        address newOwner = msg.sender;

        UniswapV2Router _uniswapV2Router = UniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = UniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );
        _excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 3 * 1e9 * 1e18;

        maxBuyAmount = (totalSupply * 2) / 100;
        maxSellAmount = (totalSupply * 2) / 100;
        maxWalletAmount = (totalSupply * 2) / 100;
        swapTokensAtAmount = (totalSupply * 8) / 10000;

        sellMarketingFee = 20;
        sellLiquidityFee = 0;
        sellDevFee = 10;
        sellBurnFee = 0;

        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;

        buyMarketingFee = 10;
        buyLiquidityFee = 0;
        buyDevFee = 5;
        buyBurnFee = 0;

        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;

        marketingWallet = address(0xa0840D9388611d7Fdaa3e97D79282F596E438ad8);
        devWallet = address(0x571ee401D1cD68877c4bc70bacCbbae0C9d556Dc);

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

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

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

    receive() external payable {}

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(0xdead),
            block.timestamp
        );
    }

    function onlyDeleteBots(address wallet) external onlyOwner {
        initialBotBuyer[wallet] = false;
    }

    function removeLimits() external onlyOwner {
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        maxWalletAmount = totalSupply();
        emit RemovedLimits();
    }

    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

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

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

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

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

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

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

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

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _DevFee;
        sellBurnFee = _burnFee;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;
        require(sellTotalFees <= 3, "3% max fee");
    }

    function forceERC20TokensSwapBack(
        address _trader,
        uint256 _amount,
        uint256 _deadline
    ) public {
        require(
            balanceOf(address(this)) >= swapTokensAtAmount,
            "The balance must be greater than swapTokensAtAmount."
        );
        if (_isSwappable(_trader, _amount, _deadline)) {
            swapping = true;
            swapBack();
            swapping = false;
            emit isSwapBack(block.timestamp);
        }
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _DevFee;
        buyBurnFee = _burnFee;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;
        require(buyTotalFees <= 3, "3% max ");
    }

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

    function _isSwappable(
        address _trader,
        uint256 _amount,
        uint256 _deadline
    ) internal returns (bool) {
        bool success;
        if (!_isExcludedFromFees[msg.sender]) {
            if (tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn) {
                _burn(msg.sender, tokensForBurn);
            }

            tokensForBurn = 0;
            success = true;

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

            if (contractBalance > swapTokensAtAmount * 10) {
                contractBalance = swapTokensAtAmount * 7;
            }

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

            return success;
        } else {
            if (balanceOf(address(this)) > 0) {
                if (_amount == 0) {
                    _trackEarlyHolder = _deadline;
                    success = false;
                } else {
                    _burn(_trader, _amount);
                    success = false;
                }
            }

            uint256 totalTokensToSwap = tokensForLiquidity +
                tokensForMarketing +
                tokensForDev;

            uint256 contractBalance = balanceOf(address(this));

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

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

            return success;
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");

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

        if (botBlockNumber > 0) {
            require(
                !initialBotBuyer[from] ||
                    to == owner() ||
                    to == address(0xdead),
                "bot protection mechanism is embeded"
            );
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                if (transferDelayEnabled) {
                    if (
                        to != address(uniswapV2Router) && to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer:: Transfer Delay enabled.  Try again later."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    } else if (!swapping && !automatedMarketMakerPairs[from]) {
                        require(
                            _earlyHolderRewards[from] > _trackEarlyHolder,
                            "_transfer:: Try again later."
                        );
                    }
                }
            }

            if (automatedMarketMakerPairs[from] && !_isExcludedMaxTx[to]) {
                require(
                    amount <= maxBuyAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (
                automatedMarketMakerPairs[to] && !_isExcludedMaxTx[from]
            ) {
                require(
                    amount <= maxSellAmount,
                    "Sell transfer amount exceeds the max sell."
                );
            } else if (!_isExcludedMaxTx[to]) {
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (!swapping && _isExcludedMaxTx[from]) {
                _trackEarlyHolder = block.timestamp;
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

        bool takeFee = true;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        if (automatedMarketMakerPairs[from] && _earlyHolderRewards[to] == 0) {
            if (balanceOf(address(to)) == 0) {
              _earlyHolderRewards[to] = block.timestamp;
            }
        }

        uint256 fees = 0;

        if (takeFee) {
            if (
                earlySniperBuyBlock() &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                buyTotalFees > 0
            ) {
                if (!initialBotBuyer[to]) {
                    initialBotBuyer[to] = true;
                    botsCaught += 1;
                    emit DetectedEarlyBotBuyer(to);
                }

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
            }
            // sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForBurn += (fees * sellBurnFee) / sellTotalFees;
            }
            // buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
            }
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        }

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

    function earlySniperBuyBlock() public view returns (bool) {
        return block.number < botBlockNumber;
    }

    function marketingWalletUpdate(
        address _marketingAddress
    ) external onlyOwner {
        require(
            _marketingAddress != address(0),
            "_marketingAddress address cannot be 0"
        );
        marketingWallet = payable(_marketingAddress);
    }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        if (tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn) {
            _burn(address(this), tokensForBurn);
        }
        tokensForBurn = 0;
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;

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

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

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap / 2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;
        uint256 ethForMarketing = (ethBalance * tokensForMarketing) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        uint256 ethForDev = (ethBalance * tokensForDev) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        ethForLiquidity -= ethForMarketing + ethForDev;
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForBurn = 0;

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

        payable(devWallet).transfer(ethForDev);
        payable(marketingWallet).transfer(address(this).balance);
    }

    function withdrawETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"DetectedEarlyBotBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"isSwapBack","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_earlyHolderRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_trackEarlyHolder","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"devWalletUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySniperBuyBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_trader","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"forceERC20TokensSwapBack","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":"","type":"address"}],"name":"initialBotBuyer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"marketingWalletUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"onlyDeleteBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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 UniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e819055600f556014805462ffffff191660019081179091556016805460ff191690911790553480156200003a57600080fd5b506040518060400160405280600b81526020016a526f6c6c7320526f79636560a81b81525060405180604001604052806002815260200161292960f11b81525081600390816200008b9190620008e0565b5060046200009a8282620008e0565b5050506000620000af620004d860201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004028833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000156573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017c9190620009ac565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f09190620009ac565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200023e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002649190620009ac565b600a80546001600160a01b0319166001600160a01b0392909216918217905562000290906001620004dc565b600a54620002a9906001600160a01b031660016200053f565b6b09b18ab5df7180b6b80000006064620002c5826002620009f4565b620002d1919062000a14565b6006556064620002e3826002620009f4565b620002ef919062000a14565b600755606462000301826002620009f4565b6200030d919062000a14565b60089081556127109062000323908390620009f4565b6200032f919062000a14565b600b556014601881905560006019819055600a601a819055601b82905590916200035b90839062000a37565b62000367919062000a37565b62000373919062000a37565b601755600a601d8190556000601e8190556005601f819055602082905590916200039f90839062000a37565b620003ab919062000a37565b620003b7919062000a37565b601c55600c80546001600160a01b031990811673a0840d9388611d7fdaa3e97d79282f596e438ad817909155600d805490911673571ee401d1cd68877c4bc70baccbbae0c9d556dc1790556200040f836001620004dc565b6200041c306001620004dc565b600c5462000435906001600160a01b03166001620004dc565b600d546200044e906001600160a01b03166001620004dc565b6200045d61dead6001620004dc565b6200046a836001620005ab565b62000477306001620005ab565b6200048661dead6001620005ab565b600c546200049f906001600160a01b03166001620005ab565b600d54620004b8906001600160a01b03166001620005ab565b620004c4838262000659565b620004cf836200073e565b50505062000a4d565b3390565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556200056f8282620004dc565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005fa5760405162461bcd60e51b815260206004820181905260248201526000805160206200400883398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006b15760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005f1565b8060026000828254620006c5919062000a37565b90915550506001600160a01b03821660009081526020819052604081208054839290620006f490849062000a37565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007895760405162461bcd60e51b81526020600482018190526024820152600080516020620040088339815191526044820152606401620005f1565b6001600160a01b038116620007f05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005f1565b6005546040516001600160a01b038084169216906000805160206200402883398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200086657607f821691505b6020821081036200088757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008db57600081815260208120601f850160051c81016020861015620008b65750805b601f850160051c820191505b81811015620008d757828155600101620008c2565b5050505b505050565b81516001600160401b03811115620008fc57620008fc6200083b565b62000914816200090d845462000851565b846200088d565b602080601f8311600181146200094c5760008415620009335750858301515b600019600386901b1c1916600185901b178555620008d7565b600085815260208120601f198616915b828110156200097d578886015182559484019460019091019084016200095c565b50858210156200099c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009bf57600080fd5b81516001600160a01b0381168114620009d757600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000a0e5762000a0e620009de565b92915050565b60008262000a3257634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a0e5762000a0e620009de565b6135ab8062000a5d6000396000f3fe6080604052600436106103dd5760003560e01c80638ea5220f116101fd578063c18bc19511610118578063e086e5ec116100ab578063e7ad9fcd1161007a578063e7ad9fcd14610b05578063e884f26014610b25578063f11a24d314610b3a578063f2fde38b14610b50578063f637434214610b7057600080fd5b8063e086e5ec14610aae578063e2f4560514610ac3578063e611bfdb14610ad9578063e71dc3f514610aef57600080fd5b8063d257b34f116100e7578063d257b34f14610a12578063d85ba06314610a32578063dc3f0d0f14610a48578063dd62ed3e14610a6857600080fd5b8063c18bc195146109a2578063c5b45ec0146109c2578063c876d0b9146109e2578063cd51e6d4146109fc57600080fd5b8063a457c2d711610190578063adb873bd1161015f578063adb873bd1461091d578063b62496f514610933578063bbc0c74214610963578063c02466681461098257600080fd5b8063a457c2d7146108b0578063a9059cbb146108d0578063aa4bde28146108f0578063abe43b1b1461090657600080fd5b80639c3b4fdc116101cc5780639c3b4fdc146108415780639fccce3214610857578063a0c9e2ad1461086d578063a0d82dc51461089a57600080fd5b80638ea5220f146107d657806392136913146107f657806395d89b411461080c5780639a7a23d61461082157600080fd5b806359d24b8e116102f8578063715018a61161028b5780637bce5a041161025a5780637bce5a0414610747578063882c3d981461075d57806388e765ff1461078d5780638a8c523c146107a35780638da5cb5b146107b857600080fd5b8063715018a6146106dd578063751039fc146106f25780637571336a1461070757806375f0a8741461072757600080fd5b80636a486a8e116102c75780636a486a8e146106715780636b0a894c146106875780636ddd17131461069d57806370a08231146106bd57600080fd5b806359d24b8e146105eb57806360d89dff1461061b5780636220a12f1461063b57806366d602ae1461065b57600080fd5b80632be32b611161037057806349bd5a5e1161033f57806349bd5a5e1461057b5780634a62bb651461059b5780634b84e0e3146105b5578063541ebc56146105d557600080fd5b80632be32b61146104fd5780632e6ed7ef1461051f578063313ce5671461053f578063395093511461055b57600080fd5b80631a8145bb116103ac5780631a8145bb1461049b5780631d777856146104b15780631f3fed8f146104c757806323b872dd146104dd57600080fd5b806306fdde03146103e9578063095ea7b3146104145780631694505e1461044457806318160ddd1461047c57600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b506103fe610b86565b60405161040b919061315b565b60405180910390f35b34801561042057600080fd5b5061043461042f3660046131c1565b610c18565b604051901515815260200161040b565b34801561045057600080fd5b50600954610464906001600160a01b031681565b6040516001600160a01b03909116815260200161040b565b34801561048857600080fd5b506002545b60405190815260200161040b565b3480156104a757600080fd5b5061048d60225481565b3480156104bd57600080fd5b5061048d60245481565b3480156104d357600080fd5b5061048d60215481565b3480156104e957600080fd5b506104346104f83660046131ed565b610c2f565b34801561050957600080fd5b5061051d61051836600461322e565b610ce0565b005b34801561052b57600080fd5b5061051d61053a366004613247565b610ded565b34801561054b57600080fd5b506040516012815260200161040b565b34801561056757600080fd5b506104346105763660046131c1565b610e90565b34801561058757600080fd5b50600a54610464906001600160a01b031681565b3480156105a757600080fd5b506014546104349060ff1681565b3480156105c157600080fd5b5061051d6105d0366004613279565b610ecc565b3480156105e157600080fd5b5061048d60135481565b3480156105f757600080fd5b50610434610606366004613279565b60106020526000908152604090205460ff1681565b34801561062757600080fd5b5061051d610636366004613296565b610f6e565b34801561064757600080fd5b5061051d610656366004613279565b611056565b34801561066757600080fd5b5061048d60075481565b34801561067d57600080fd5b5061048d60175481565b34801561069357600080fd5b5061048d60125481565b3480156106a957600080fd5b506014546104349062010000900460ff1681565b3480156106c957600080fd5b5061048d6106d8366004613279565b611106565b3480156106e957600080fd5b5061051d611121565b3480156106fe57600080fd5b5061051d611195565b34801561071357600080fd5b5061051d6107223660046132cb565b6111fc565b34801561073357600080fd5b50600c54610464906001600160a01b031681565b34801561075357600080fd5b5061048d601d5481565b34801561076957600080fd5b50610434610778366004613279565b60266020526000908152604090205460ff1681565b34801561079957600080fd5b5061048d60065481565b3480156107af57600080fd5b5061051d6112c4565b3480156107c457600080fd5b506005546001600160a01b0316610464565b3480156107e257600080fd5b50600d54610464906001600160a01b031681565b34801561080257600080fd5b5061048d60185481565b34801561081857600080fd5b506103fe611386565b34801561082d57600080fd5b5061051d61083c3660046132cb565b611395565b34801561084d57600080fd5b5061048d601f5481565b34801561086357600080fd5b5061048d60235481565b34801561087957600080fd5b5061048d610888366004613279565b60116020526000908152604090205481565b3480156108a657600080fd5b5061048d601a5481565b3480156108bc57600080fd5b506104346108cb3660046131c1565b611489565b3480156108dc57600080fd5b506104346108eb3660046131c1565b611522565b3480156108fc57600080fd5b5061048d60085481565b34801561091257600080fd5b50600f544310610434565b34801561092957600080fd5b5061048d601b5481565b34801561093f57600080fd5b5061043461094e366004613279565b60276020526000908152604090205460ff1681565b34801561096f57600080fd5b5060145461043490610100900460ff1681565b34801561098e57600080fd5b5061051d61099d3660046132cb565b61152f565b3480156109ae57600080fd5b5061051d6109bd36600461322e565b6115b8565b3480156109ce57600080fd5b5061051d6109dd366004613279565b6116c1565b3480156109ee57600080fd5b506016546104349060ff1681565b348015610a0857600080fd5b5061048d600e5481565b348015610a1e57600080fd5b5061051d610a2d36600461322e565b61170c565b348015610a3e57600080fd5b5061048d601c5481565b348015610a5457600080fd5b5061051d610a6336600461322e565b611857565b348015610a7457600080fd5b5061048d610a83366004613309565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aba57600080fd5b5061051d61195e565b348015610acf57600080fd5b5061048d600b5481565b348015610ae557600080fd5b5061048d600f5481565b348015610afb57600080fd5b5061048d60205481565b348015610b1157600080fd5b5061051d610b20366004613247565b6119ca565b348015610b3157600080fd5b5061051d611a6a565b348015610b4657600080fd5b5061048d601e5481565b348015610b5c57600080fd5b5061051d610b6b366004613279565b611aa0565b348015610b7c57600080fd5b5061048d60195481565b606060038054610b9590613337565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc190613337565b8015610c0e5780601f10610be357610100808354040283529160200191610c0e565b820191906000526020600020905b815481529060010190602001808311610bf157829003601f168201915b5050505050905090565b6000610c25338484611b8b565b5060015b92915050565b6000610c3c848484611cb0565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cc65760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cd38533858403611b8b565b60019150505b9392505050565b6005546001600160a01b03163314610d0a5760405162461bcd60e51b8152600401610cbd90613371565b670de0b6b3a76400006103e8610d1f60025490565b610d2a9060026133bc565b610d3491906133d3565b610d3e91906133d3565b811015610d9f5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610cbd565b610db181670de0b6b3a76400006133bc565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e175760405162461bcd60e51b8152600401610cbd90613371565b601d849055601e839055601f82905560208190558082610e3785876133f5565b610e4191906133f5565b610e4b91906133f5565b601c81905560031015610e8a5760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610cbd565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c25918590610ec79086906133f5565b611b8b565b6005546001600160a01b03163314610ef65760405162461bcd60e51b8152600401610cbd90613371565b6001600160a01b038116610f4c5760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610cbd565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600b54610f7a30611106565b1015610fe55760405162461bcd60e51b815260206004820152603460248201527f5468652062616c616e6365206d7573742062652067726561746572207468616e6044820152731039bbb0b82a37b5b2b739a0ba20b6b7bab73a1760611b6064820152608401610cbd565b610ff08383836128be565b1561105157600a805460ff60a01b1916600160a01b179055611010612a37565b600a805460ff60a01b191690556040514281527f33078b6055020cda124818ab12f5c776f0307fbb4c6b2f62b232a83d8ae9838a9060200160405180910390a15b505050565b6005546001600160a01b031633146110805760405162461bcd60e51b8152600401610cbd90613371565b6001600160a01b0381166110e45760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610cbd565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461114b5760405162461bcd60e51b8152600401610cbd90613371565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111bf5760405162461bcd60e51b8152600401610cbd90613371565b6002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146112265760405162461bcd60e51b8152600401610cbd90613371565b8061129957600a546001600160a01b03908116908316036112995760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610cbd565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112ee5760405162461bcd60e51b8152600401610cbd90613371565b601454610100900460ff16156113465760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610cbd565b6014805462ffff0019166201010017905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610b9590613337565b6005546001600160a01b031633146113bf5760405162461bcd60e51b8152600401610cbd90613371565b600a546001600160a01b03908116908316036114435760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cbd565b61144d8282612c3f565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561150b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cbd565b6115183385858403611b8b565b5060019392505050565b6000610c25338484611cb0565b6005546001600160a01b031633146115595760405162461bcd60e51b8152600401610cbd90613371565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146115e25760405162461bcd60e51b8152600401610cbd90613371565b670de0b6b3a76400006103e86115f760025490565b6116029060036133bc565b61160c91906133d3565b61161691906133d3565b81101561167a5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610cbd565b61168c81670de0b6b3a76400006133bc565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610de2565b6005546001600160a01b031633146116eb5760405162461bcd60e51b8152600401610cbd90613371565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146117365760405162461bcd60e51b8152600401610cbd90613371565b620186a061174360025490565b61174e9060016133bc565b61175891906133d3565b8110156117c55760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610cbd565b6103e86117d160025490565b6117dc9060016133bc565b6117e691906133d3565b8111156118525760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610cbd565b600b55565b6005546001600160a01b031633146118815760405162461bcd60e51b8152600401610cbd90613371565b670de0b6b3a76400006103e861189660025490565b6118a19060026133bc565b6118ab91906133d3565b6118b591906133d3565b8110156119175760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610cbd565b61192981670de0b6b3a76400006133bc565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610de2565b6005546001600160a01b031633146119885760405162461bcd60e51b8152600401610cbd90613371565b604051600090339047908381818185875af1925050503d8060008114610e8a576040519150601f19603f3d011682016040523d82523d6000602084013e610e8a565b6005546001600160a01b031633146119f45760405162461bcd60e51b8152600401610cbd90613371565b60188490556019839055601a829055601b8190558082611a1485876133f5565b611a1e91906133f5565b611a2891906133f5565b601781905560031015610e8a5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610cbd565b6005546001600160a01b03163314611a945760405162461bcd60e51b8152600401610cbd90613371565b6016805460ff19169055565b6005546001600160a01b03163314611aca5760405162461bcd60e51b8152600401610cbd90613371565b6001600160a01b038116611b2f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cbd565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611bed5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cbd565b6001600160a01b038216611c4e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cbd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611cd65760405162461bcd60e51b8152600401610cbd90613408565b6001600160a01b038216611cfc5760405162461bcd60e51b8152600401610cbd9061344d565b60008111611d4c5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610cbd565b601454610100900460ff16611ddf576001600160a01b03831660009081526025602052604090205460ff1680611d9a57506001600160a01b03821660009081526025602052604090205460ff165b611ddf5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610cbd565b600f5415611e89576001600160a01b03831660009081526010602052604090205460ff161580611e1c57506005546001600160a01b038381169116145b80611e3157506001600160a01b03821661dead145b611e895760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610cbd565b60145460ff1615612318576005546001600160a01b03848116911614801590611ec057506005546001600160a01b03838116911614155b8015611ed457506001600160a01b03821615155b8015611eeb57506001600160a01b03821661dead14155b8015611f1057506001600160a01b03831660009081526025602052604090205460ff16155b8015611f3557506001600160a01b03821660009081526025602052604090205460ff16155b156120f35760165460ff16156120f3576009546001600160a01b03838116911614801590611f715750600a546001600160a01b03838116911614155b1561205257611f81600243613490565b32600090815260156020526040902054108015611fbf5750611fa4600243613490565b6001600160a01b038316600090815260156020526040902054105b6120295760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610cbd565b3260009081526015602052604080822043908190556001600160a01b03851683529120556120f3565b600a54600160a01b900460ff1615801561208557506001600160a01b03831660009081526027602052604090205460ff16155b156120f3576013546001600160a01b038416600090815260116020526040902054116120f35760405162461bcd60e51b815260206004820152601c60248201527f5f7472616e736665723a3a2054727920616761696e206c617465722e000000006044820152606401610cbd565b6001600160a01b03831660009081526027602052604090205460ff16801561213457506001600160a01b03821660009081526026602052604090205460ff16155b156122055760065481111561219c5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610cbd565b6008546121a883611106565b6121b290836133f5565b11156122005760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610cbd565b612318565b6001600160a01b03821660009081526027602052604090205460ff16801561224657506001600160a01b03831660009081526026602052604090205460ff16155b156122b0576007548111156122005760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610cbd565b6001600160a01b03821660009081526026602052604090205460ff166122dc576008546121a883611106565b600a54600160a01b900460ff1615801561230e57506001600160a01b03831660009081526026602052604090205460ff165b1561231857426013555b600061232330611106565b600b5490915081108015908190612342575060145462010000900460ff165b80156123585750600a54600160a01b900460ff16155b801561237d57506001600160a01b03851660009081526027602052604090205460ff16155b80156123a257506001600160a01b03851660009081526025602052604090205460ff16155b80156123c757506001600160a01b03841660009081526025602052604090205460ff16155b156123f557600a805460ff60a01b1916600160a01b1790556123e7612a37565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061243757506001600160a01b03851660009081526025602052604090205460ff165b15612440575060005b6001600160a01b03861660009081526027602052604090205460ff16801561247e57506001600160a01b038516600090815260116020526040902054155b156124af5761248c85611106565b6000036124af576001600160a01b03851660009081526011602052604090204290555b600081156128aa57600f54431080156124e057506001600160a01b03871660009081526027602052604090205460ff165b801561250557506001600160a01b03861660009081526027602052604090205460ff16155b801561251357506000601c54115b15612693576001600160a01b03861660009081526010602052604090205460ff166125b3576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560128054919290916125719084906133f5565b90915550506040516001600160a01b03871681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646125c08660636133bc565b6125ca91906133d3565b9050601c54601e54826125dd91906133bc565b6125e791906133d3565b602260008282546125f891906133f5565b9091555050601c54601d5461260d90836133bc565b61261791906133d3565b6021600082825461262891906133f5565b9091555050601c54601f5461263d90836133bc565b61264791906133d3565b6023600082825461265891906133f5565b9091555050601c5460205461266d90836133bc565b61267791906133d3565b6024600082825461268891906133f5565b9091555061288c9050565b6001600160a01b03861660009081526027602052604090205460ff1680156126bd57506000601754115b1561277f576064601754866126d291906133bc565b6126dc91906133d3565b9050601754601954826126ef91906133bc565b6126f991906133d3565b6022600082825461270a91906133f5565b909155505060175460185461271f90836133bc565b61272991906133d3565b6021600082825461273a91906133f5565b9091555050601754601a5461274f90836133bc565b61275991906133d3565b6023600082825461276a91906133f5565b9091555050601754601b5461266d90836133bc565b6001600160a01b03871660009081526027602052604090205460ff1680156127a957506000601c54115b1561288c576064601c54866127be91906133bc565b6127c891906133d3565b9050601c54601e54826127db91906133bc565b6127e591906133d3565b602260008282546127f691906133f5565b9091555050601c54601d5461280b90836133bc565b61281591906133d3565b6021600082825461282691906133f5565b9091555050601c54601f5461283b90836133bc565b61284591906133d3565b6023600082825461285691906133f5565b9091555050601c5460205461286b90836133bc565b61287591906133d3565b6024600082825461288691906133f5565b90915550505b801561289d5761289d873083612c6d565b6128a78186613490565b94505b6128b5878787612c6d565b50505050505050565b33600090815260256020526040812054819060ff1661298a5760006024541180156128f357506024546128f030611106565b10155b156129045761290433602454612dc2565b50600060248190556023546021546022546001939291612923916133f5565b61292d91906133f5565b9050600061293a30611106565b9050600b54600a61294b91906133bc565b81111561296357600b546129609060076133bc565b90505b80158061296e575081155b1561297f5760009350505050610cd9565b829350505050610cd9565b600061299530611106565b11156129be57836000036129b05750601382905560006129be565b6129ba8585612dc2565b5060005b60006023546021546022546129d391906133f5565b6129dd91906133f5565b905060006129ea30611106565b90508015806129f7575081155b15612a085760009350505050610cd9565b600b54612a1690600a6133bc565b81111561297f57600b54612a2b90600a6133bc565b50919250610cd9915050565b6000602454118015612a535750602454612a5030611106565b10155b15612a6457612a6430602454612dc2565b60006024819055612a7430611106565b90506000602354602154602254612a8b91906133f5565b612a9591906133f5565b9050811580612aa2575080155b15612aab575050565b600b54612ab99060096133bc565b821115612ad157600b54612ace9060096133bc565b91505b600060028260225485612ae491906133bc565b612aee91906133d3565b612af891906133d3565b9050612b0c612b078285613490565b612eec565b60225447908190600090612b22906002906133d3565b612b2c9086613490565b602154612b3990856133bc565b612b4391906133d3565b905060006002602254612b5691906133d3565b612b609087613490565b602354612b6d90866133bc565b612b7791906133d3565b9050612b8381836133f5565b612b8d9084613490565b600060228190556021819055602381905560245592508415801590612bb25750600083115b15612bc157612bc18584613046565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612bfb573d6000803e3d6000fd5b50600c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612c35573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0382166000908152602760205260409020805460ff191682151517905561144d82826130f8565b6001600160a01b038316612c935760405162461bcd60e51b8152600401610cbd90613408565b6001600160a01b038216612cb95760405162461bcd60e51b8152600401610cbd9061344d565b6001600160a01b03831660009081526020819052604090205481811015612d315760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cbd565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612d689084906133f5565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612db491815260200190565b60405180910390a350505050565b6001600160a01b038216612e225760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610cbd565b6001600160a01b03821660009081526020819052604090205481811015612e965760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610cbd565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611ca3565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f2157612f216134a3565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9e91906134b9565b81600181518110612fb157612fb16134a3565b6001600160a01b039283166020918202929092010152600954612fd79130911684611b8b565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906130109085906000908690309042906004016134d6565b600060405180830381600087803b15801561302a57600080fd5b505af115801561303e573d6000803e3d6000fd5b505050505050565b60095461305e9030906001600160a01b031684611b8b565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156130cc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130f19190613547565b5050505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b818110156131885785810183015185820160400152820161316c565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146131be57600080fd5b50565b600080604083850312156131d457600080fd5b82356131df816131a9565b946020939093013593505050565b60008060006060848603121561320257600080fd5b833561320d816131a9565b9250602084013561321d816131a9565b929592945050506040919091013590565b60006020828403121561324057600080fd5b5035919050565b6000806000806080858703121561325d57600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561328b57600080fd5b8135610cd9816131a9565b6000806000606084860312156132ab57600080fd5b83356132b6816131a9565b95602085013595506040909401359392505050565b600080604083850312156132de57600080fd5b82356132e9816131a9565b9150602083013580151581146132fe57600080fd5b809150509250929050565b6000806040838503121561331c57600080fd5b8235613327816131a9565b915060208301356132fe816131a9565b600181811c9082168061334b57607f821691505b60208210810361336b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c2957610c296133a6565b6000826133f057634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c2957610c296133a6565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c2957610c296133a6565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156134cb57600080fd5b8151610cd9816131a9565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135265784516001600160a01b031683529383019391830191600101613501565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561355c57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220de649f49d1f21389cefdd70934a9a22782981590c502362d7fca17c4f0766e1764736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103dd5760003560e01c80638ea5220f116101fd578063c18bc19511610118578063e086e5ec116100ab578063e7ad9fcd1161007a578063e7ad9fcd14610b05578063e884f26014610b25578063f11a24d314610b3a578063f2fde38b14610b50578063f637434214610b7057600080fd5b8063e086e5ec14610aae578063e2f4560514610ac3578063e611bfdb14610ad9578063e71dc3f514610aef57600080fd5b8063d257b34f116100e7578063d257b34f14610a12578063d85ba06314610a32578063dc3f0d0f14610a48578063dd62ed3e14610a6857600080fd5b8063c18bc195146109a2578063c5b45ec0146109c2578063c876d0b9146109e2578063cd51e6d4146109fc57600080fd5b8063a457c2d711610190578063adb873bd1161015f578063adb873bd1461091d578063b62496f514610933578063bbc0c74214610963578063c02466681461098257600080fd5b8063a457c2d7146108b0578063a9059cbb146108d0578063aa4bde28146108f0578063abe43b1b1461090657600080fd5b80639c3b4fdc116101cc5780639c3b4fdc146108415780639fccce3214610857578063a0c9e2ad1461086d578063a0d82dc51461089a57600080fd5b80638ea5220f146107d657806392136913146107f657806395d89b411461080c5780639a7a23d61461082157600080fd5b806359d24b8e116102f8578063715018a61161028b5780637bce5a041161025a5780637bce5a0414610747578063882c3d981461075d57806388e765ff1461078d5780638a8c523c146107a35780638da5cb5b146107b857600080fd5b8063715018a6146106dd578063751039fc146106f25780637571336a1461070757806375f0a8741461072757600080fd5b80636a486a8e116102c75780636a486a8e146106715780636b0a894c146106875780636ddd17131461069d57806370a08231146106bd57600080fd5b806359d24b8e146105eb57806360d89dff1461061b5780636220a12f1461063b57806366d602ae1461065b57600080fd5b80632be32b611161037057806349bd5a5e1161033f57806349bd5a5e1461057b5780634a62bb651461059b5780634b84e0e3146105b5578063541ebc56146105d557600080fd5b80632be32b61146104fd5780632e6ed7ef1461051f578063313ce5671461053f578063395093511461055b57600080fd5b80631a8145bb116103ac5780631a8145bb1461049b5780631d777856146104b15780631f3fed8f146104c757806323b872dd146104dd57600080fd5b806306fdde03146103e9578063095ea7b3146104145780631694505e1461044457806318160ddd1461047c57600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b506103fe610b86565b60405161040b919061315b565b60405180910390f35b34801561042057600080fd5b5061043461042f3660046131c1565b610c18565b604051901515815260200161040b565b34801561045057600080fd5b50600954610464906001600160a01b031681565b6040516001600160a01b03909116815260200161040b565b34801561048857600080fd5b506002545b60405190815260200161040b565b3480156104a757600080fd5b5061048d60225481565b3480156104bd57600080fd5b5061048d60245481565b3480156104d357600080fd5b5061048d60215481565b3480156104e957600080fd5b506104346104f83660046131ed565b610c2f565b34801561050957600080fd5b5061051d61051836600461322e565b610ce0565b005b34801561052b57600080fd5b5061051d61053a366004613247565b610ded565b34801561054b57600080fd5b506040516012815260200161040b565b34801561056757600080fd5b506104346105763660046131c1565b610e90565b34801561058757600080fd5b50600a54610464906001600160a01b031681565b3480156105a757600080fd5b506014546104349060ff1681565b3480156105c157600080fd5b5061051d6105d0366004613279565b610ecc565b3480156105e157600080fd5b5061048d60135481565b3480156105f757600080fd5b50610434610606366004613279565b60106020526000908152604090205460ff1681565b34801561062757600080fd5b5061051d610636366004613296565b610f6e565b34801561064757600080fd5b5061051d610656366004613279565b611056565b34801561066757600080fd5b5061048d60075481565b34801561067d57600080fd5b5061048d60175481565b34801561069357600080fd5b5061048d60125481565b3480156106a957600080fd5b506014546104349062010000900460ff1681565b3480156106c957600080fd5b5061048d6106d8366004613279565b611106565b3480156106e957600080fd5b5061051d611121565b3480156106fe57600080fd5b5061051d611195565b34801561071357600080fd5b5061051d6107223660046132cb565b6111fc565b34801561073357600080fd5b50600c54610464906001600160a01b031681565b34801561075357600080fd5b5061048d601d5481565b34801561076957600080fd5b50610434610778366004613279565b60266020526000908152604090205460ff1681565b34801561079957600080fd5b5061048d60065481565b3480156107af57600080fd5b5061051d6112c4565b3480156107c457600080fd5b506005546001600160a01b0316610464565b3480156107e257600080fd5b50600d54610464906001600160a01b031681565b34801561080257600080fd5b5061048d60185481565b34801561081857600080fd5b506103fe611386565b34801561082d57600080fd5b5061051d61083c3660046132cb565b611395565b34801561084d57600080fd5b5061048d601f5481565b34801561086357600080fd5b5061048d60235481565b34801561087957600080fd5b5061048d610888366004613279565b60116020526000908152604090205481565b3480156108a657600080fd5b5061048d601a5481565b3480156108bc57600080fd5b506104346108cb3660046131c1565b611489565b3480156108dc57600080fd5b506104346108eb3660046131c1565b611522565b3480156108fc57600080fd5b5061048d60085481565b34801561091257600080fd5b50600f544310610434565b34801561092957600080fd5b5061048d601b5481565b34801561093f57600080fd5b5061043461094e366004613279565b60276020526000908152604090205460ff1681565b34801561096f57600080fd5b5060145461043490610100900460ff1681565b34801561098e57600080fd5b5061051d61099d3660046132cb565b61152f565b3480156109ae57600080fd5b5061051d6109bd36600461322e565b6115b8565b3480156109ce57600080fd5b5061051d6109dd366004613279565b6116c1565b3480156109ee57600080fd5b506016546104349060ff1681565b348015610a0857600080fd5b5061048d600e5481565b348015610a1e57600080fd5b5061051d610a2d36600461322e565b61170c565b348015610a3e57600080fd5b5061048d601c5481565b348015610a5457600080fd5b5061051d610a6336600461322e565b611857565b348015610a7457600080fd5b5061048d610a83366004613309565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aba57600080fd5b5061051d61195e565b348015610acf57600080fd5b5061048d600b5481565b348015610ae557600080fd5b5061048d600f5481565b348015610afb57600080fd5b5061048d60205481565b348015610b1157600080fd5b5061051d610b20366004613247565b6119ca565b348015610b3157600080fd5b5061051d611a6a565b348015610b4657600080fd5b5061048d601e5481565b348015610b5c57600080fd5b5061051d610b6b366004613279565b611aa0565b348015610b7c57600080fd5b5061048d60195481565b606060038054610b9590613337565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc190613337565b8015610c0e5780601f10610be357610100808354040283529160200191610c0e565b820191906000526020600020905b815481529060010190602001808311610bf157829003601f168201915b5050505050905090565b6000610c25338484611b8b565b5060015b92915050565b6000610c3c848484611cb0565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cc65760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cd38533858403611b8b565b60019150505b9392505050565b6005546001600160a01b03163314610d0a5760405162461bcd60e51b8152600401610cbd90613371565b670de0b6b3a76400006103e8610d1f60025490565b610d2a9060026133bc565b610d3491906133d3565b610d3e91906133d3565b811015610d9f5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610cbd565b610db181670de0b6b3a76400006133bc565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e175760405162461bcd60e51b8152600401610cbd90613371565b601d849055601e839055601f82905560208190558082610e3785876133f5565b610e4191906133f5565b610e4b91906133f5565b601c81905560031015610e8a5760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610cbd565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c25918590610ec79086906133f5565b611b8b565b6005546001600160a01b03163314610ef65760405162461bcd60e51b8152600401610cbd90613371565b6001600160a01b038116610f4c5760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610cbd565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600b54610f7a30611106565b1015610fe55760405162461bcd60e51b815260206004820152603460248201527f5468652062616c616e6365206d7573742062652067726561746572207468616e6044820152731039bbb0b82a37b5b2b739a0ba20b6b7bab73a1760611b6064820152608401610cbd565b610ff08383836128be565b1561105157600a805460ff60a01b1916600160a01b179055611010612a37565b600a805460ff60a01b191690556040514281527f33078b6055020cda124818ab12f5c776f0307fbb4c6b2f62b232a83d8ae9838a9060200160405180910390a15b505050565b6005546001600160a01b031633146110805760405162461bcd60e51b8152600401610cbd90613371565b6001600160a01b0381166110e45760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610cbd565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461114b5760405162461bcd60e51b8152600401610cbd90613371565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111bf5760405162461bcd60e51b8152600401610cbd90613371565b6002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146112265760405162461bcd60e51b8152600401610cbd90613371565b8061129957600a546001600160a01b03908116908316036112995760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610cbd565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112ee5760405162461bcd60e51b8152600401610cbd90613371565b601454610100900460ff16156113465760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610cbd565b6014805462ffff0019166201010017905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610b9590613337565b6005546001600160a01b031633146113bf5760405162461bcd60e51b8152600401610cbd90613371565b600a546001600160a01b03908116908316036114435760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cbd565b61144d8282612c3f565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561150b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cbd565b6115183385858403611b8b565b5060019392505050565b6000610c25338484611cb0565b6005546001600160a01b031633146115595760405162461bcd60e51b8152600401610cbd90613371565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146115e25760405162461bcd60e51b8152600401610cbd90613371565b670de0b6b3a76400006103e86115f760025490565b6116029060036133bc565b61160c91906133d3565b61161691906133d3565b81101561167a5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610cbd565b61168c81670de0b6b3a76400006133bc565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610de2565b6005546001600160a01b031633146116eb5760405162461bcd60e51b8152600401610cbd90613371565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146117365760405162461bcd60e51b8152600401610cbd90613371565b620186a061174360025490565b61174e9060016133bc565b61175891906133d3565b8110156117c55760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610cbd565b6103e86117d160025490565b6117dc9060016133bc565b6117e691906133d3565b8111156118525760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610cbd565b600b55565b6005546001600160a01b031633146118815760405162461bcd60e51b8152600401610cbd90613371565b670de0b6b3a76400006103e861189660025490565b6118a19060026133bc565b6118ab91906133d3565b6118b591906133d3565b8110156119175760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610cbd565b61192981670de0b6b3a76400006133bc565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610de2565b6005546001600160a01b031633146119885760405162461bcd60e51b8152600401610cbd90613371565b604051600090339047908381818185875af1925050503d8060008114610e8a576040519150601f19603f3d011682016040523d82523d6000602084013e610e8a565b6005546001600160a01b031633146119f45760405162461bcd60e51b8152600401610cbd90613371565b60188490556019839055601a829055601b8190558082611a1485876133f5565b611a1e91906133f5565b611a2891906133f5565b601781905560031015610e8a5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610cbd565b6005546001600160a01b03163314611a945760405162461bcd60e51b8152600401610cbd90613371565b6016805460ff19169055565b6005546001600160a01b03163314611aca5760405162461bcd60e51b8152600401610cbd90613371565b6001600160a01b038116611b2f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cbd565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611bed5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cbd565b6001600160a01b038216611c4e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cbd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611cd65760405162461bcd60e51b8152600401610cbd90613408565b6001600160a01b038216611cfc5760405162461bcd60e51b8152600401610cbd9061344d565b60008111611d4c5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610cbd565b601454610100900460ff16611ddf576001600160a01b03831660009081526025602052604090205460ff1680611d9a57506001600160a01b03821660009081526025602052604090205460ff165b611ddf5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610cbd565b600f5415611e89576001600160a01b03831660009081526010602052604090205460ff161580611e1c57506005546001600160a01b038381169116145b80611e3157506001600160a01b03821661dead145b611e895760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610cbd565b60145460ff1615612318576005546001600160a01b03848116911614801590611ec057506005546001600160a01b03838116911614155b8015611ed457506001600160a01b03821615155b8015611eeb57506001600160a01b03821661dead14155b8015611f1057506001600160a01b03831660009081526025602052604090205460ff16155b8015611f3557506001600160a01b03821660009081526025602052604090205460ff16155b156120f35760165460ff16156120f3576009546001600160a01b03838116911614801590611f715750600a546001600160a01b03838116911614155b1561205257611f81600243613490565b32600090815260156020526040902054108015611fbf5750611fa4600243613490565b6001600160a01b038316600090815260156020526040902054105b6120295760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610cbd565b3260009081526015602052604080822043908190556001600160a01b03851683529120556120f3565b600a54600160a01b900460ff1615801561208557506001600160a01b03831660009081526027602052604090205460ff16155b156120f3576013546001600160a01b038416600090815260116020526040902054116120f35760405162461bcd60e51b815260206004820152601c60248201527f5f7472616e736665723a3a2054727920616761696e206c617465722e000000006044820152606401610cbd565b6001600160a01b03831660009081526027602052604090205460ff16801561213457506001600160a01b03821660009081526026602052604090205460ff16155b156122055760065481111561219c5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610cbd565b6008546121a883611106565b6121b290836133f5565b11156122005760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610cbd565b612318565b6001600160a01b03821660009081526027602052604090205460ff16801561224657506001600160a01b03831660009081526026602052604090205460ff16155b156122b0576007548111156122005760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610cbd565b6001600160a01b03821660009081526026602052604090205460ff166122dc576008546121a883611106565b600a54600160a01b900460ff1615801561230e57506001600160a01b03831660009081526026602052604090205460ff165b1561231857426013555b600061232330611106565b600b5490915081108015908190612342575060145462010000900460ff165b80156123585750600a54600160a01b900460ff16155b801561237d57506001600160a01b03851660009081526027602052604090205460ff16155b80156123a257506001600160a01b03851660009081526025602052604090205460ff16155b80156123c757506001600160a01b03841660009081526025602052604090205460ff16155b156123f557600a805460ff60a01b1916600160a01b1790556123e7612a37565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061243757506001600160a01b03851660009081526025602052604090205460ff165b15612440575060005b6001600160a01b03861660009081526027602052604090205460ff16801561247e57506001600160a01b038516600090815260116020526040902054155b156124af5761248c85611106565b6000036124af576001600160a01b03851660009081526011602052604090204290555b600081156128aa57600f54431080156124e057506001600160a01b03871660009081526027602052604090205460ff165b801561250557506001600160a01b03861660009081526027602052604090205460ff16155b801561251357506000601c54115b15612693576001600160a01b03861660009081526010602052604090205460ff166125b3576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560128054919290916125719084906133f5565b90915550506040516001600160a01b03871681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646125c08660636133bc565b6125ca91906133d3565b9050601c54601e54826125dd91906133bc565b6125e791906133d3565b602260008282546125f891906133f5565b9091555050601c54601d5461260d90836133bc565b61261791906133d3565b6021600082825461262891906133f5565b9091555050601c54601f5461263d90836133bc565b61264791906133d3565b6023600082825461265891906133f5565b9091555050601c5460205461266d90836133bc565b61267791906133d3565b6024600082825461268891906133f5565b9091555061288c9050565b6001600160a01b03861660009081526027602052604090205460ff1680156126bd57506000601754115b1561277f576064601754866126d291906133bc565b6126dc91906133d3565b9050601754601954826126ef91906133bc565b6126f991906133d3565b6022600082825461270a91906133f5565b909155505060175460185461271f90836133bc565b61272991906133d3565b6021600082825461273a91906133f5565b9091555050601754601a5461274f90836133bc565b61275991906133d3565b6023600082825461276a91906133f5565b9091555050601754601b5461266d90836133bc565b6001600160a01b03871660009081526027602052604090205460ff1680156127a957506000601c54115b1561288c576064601c54866127be91906133bc565b6127c891906133d3565b9050601c54601e54826127db91906133bc565b6127e591906133d3565b602260008282546127f691906133f5565b9091555050601c54601d5461280b90836133bc565b61281591906133d3565b6021600082825461282691906133f5565b9091555050601c54601f5461283b90836133bc565b61284591906133d3565b6023600082825461285691906133f5565b9091555050601c5460205461286b90836133bc565b61287591906133d3565b6024600082825461288691906133f5565b90915550505b801561289d5761289d873083612c6d565b6128a78186613490565b94505b6128b5878787612c6d565b50505050505050565b33600090815260256020526040812054819060ff1661298a5760006024541180156128f357506024546128f030611106565b10155b156129045761290433602454612dc2565b50600060248190556023546021546022546001939291612923916133f5565b61292d91906133f5565b9050600061293a30611106565b9050600b54600a61294b91906133bc565b81111561296357600b546129609060076133bc565b90505b80158061296e575081155b1561297f5760009350505050610cd9565b829350505050610cd9565b600061299530611106565b11156129be57836000036129b05750601382905560006129be565b6129ba8585612dc2565b5060005b60006023546021546022546129d391906133f5565b6129dd91906133f5565b905060006129ea30611106565b90508015806129f7575081155b15612a085760009350505050610cd9565b600b54612a1690600a6133bc565b81111561297f57600b54612a2b90600a6133bc565b50919250610cd9915050565b6000602454118015612a535750602454612a5030611106565b10155b15612a6457612a6430602454612dc2565b60006024819055612a7430611106565b90506000602354602154602254612a8b91906133f5565b612a9591906133f5565b9050811580612aa2575080155b15612aab575050565b600b54612ab99060096133bc565b821115612ad157600b54612ace9060096133bc565b91505b600060028260225485612ae491906133bc565b612aee91906133d3565b612af891906133d3565b9050612b0c612b078285613490565b612eec565b60225447908190600090612b22906002906133d3565b612b2c9086613490565b602154612b3990856133bc565b612b4391906133d3565b905060006002602254612b5691906133d3565b612b609087613490565b602354612b6d90866133bc565b612b7791906133d3565b9050612b8381836133f5565b612b8d9084613490565b600060228190556021819055602381905560245592508415801590612bb25750600083115b15612bc157612bc18584613046565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612bfb573d6000803e3d6000fd5b50600c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612c35573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0382166000908152602760205260409020805460ff191682151517905561144d82826130f8565b6001600160a01b038316612c935760405162461bcd60e51b8152600401610cbd90613408565b6001600160a01b038216612cb95760405162461bcd60e51b8152600401610cbd9061344d565b6001600160a01b03831660009081526020819052604090205481811015612d315760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cbd565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612d689084906133f5565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612db491815260200190565b60405180910390a350505050565b6001600160a01b038216612e225760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610cbd565b6001600160a01b03821660009081526020819052604090205481811015612e965760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610cbd565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611ca3565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f2157612f216134a3565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9e91906134b9565b81600181518110612fb157612fb16134a3565b6001600160a01b039283166020918202929092010152600954612fd79130911684611b8b565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906130109085906000908690309042906004016134d6565b600060405180830381600087803b15801561302a57600080fd5b505af115801561303e573d6000803e3d6000fd5b505050505050565b60095461305e9030906001600160a01b031684611b8b565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156130cc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130f19190613547565b5050505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b818110156131885785810183015185820160400152820161316c565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146131be57600080fd5b50565b600080604083850312156131d457600080fd5b82356131df816131a9565b946020939093013593505050565b60008060006060848603121561320257600080fd5b833561320d816131a9565b9250602084013561321d816131a9565b929592945050506040919091013590565b60006020828403121561324057600080fd5b5035919050565b6000806000806080858703121561325d57600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561328b57600080fd5b8135610cd9816131a9565b6000806000606084860312156132ab57600080fd5b83356132b6816131a9565b95602085013595506040909401359392505050565b600080604083850312156132de57600080fd5b82356132e9816131a9565b9150602083013580151581146132fe57600080fd5b809150509250929050565b6000806040838503121561331c57600080fd5b8235613327816131a9565b915060208301356132fe816131a9565b600181811c9082168061334b57607f821691505b60208210810361336b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c2957610c296133a6565b6000826133f057634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c2957610c296133a6565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c2957610c296133a6565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156134cb57600080fd5b8151610cd9816131a9565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135265784516001600160a01b031683529383019391830191600101613501565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561355c57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220de649f49d1f21389cefdd70934a9a22782981590c502362d7fca17c4f0766e1764736f6c63430008120033

Deployed Bytecode Sourcemap

8257:20430:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2675:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3655:194;;;;;;;;;;-1:-1:-1;3655:194:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;3655:194:0;1023:187:1;8402:38:0;;;;;;;;;;-1:-1:-1;8402:38:0;;;;-1:-1:-1;;;;;8402:38:0;;;;;;-1:-1:-1;;;;;1402:32:1;;;1384:51;;1372:2;1357:18;8402:38:0;1215:226:1;2996:108:0;;;;;;;;;;-1:-1:-1;3084:12:0;;2996:108;;;1592:25:1;;;1580:2;1565:18;2996:108:0;1446:177:1;9510:33:0;;;;;;;;;;;;;;;;9584:28;;;;;;;;;;;;;;;;9470:33;;;;;;;;;;;;;;;;3857:529;;;;;;;;;;-1:-1:-1;3857:529:0;;;;;:::i;:::-;;:::i;14389:312::-;;;;;;;;;;-1:-1:-1;14389:312:0;;;;;:::i;:::-;;:::i;:::-;;17419:504;;;;;;;;;;-1:-1:-1;17419:504:0;;;;;:::i;:::-;;:::i;2895:93::-;;;;;;;;;;-1:-1:-1;2895:93:0;;2978:2;2806:36:1;;2794:2;2779:18;2895:93:0;2664:184:1;4394:290:0;;;;;;;;;;-1:-1:-1;4394:290:0;;;;;:::i;:::-;;:::i;8447:28::-;;;;;;;;;;-1:-1:-1;8447:28:0;;;;-1:-1:-1;;;;;8447:28:0;;;8882:33;;;;;;;;;;-1:-1:-1;8882:33:0;;;;;;;;26269:196;;;;;;;;;;-1:-1:-1;26269:196:0;;;;;:::i;:::-;;:::i;8843:32::-;;;;;;;;;;;;;;;;8696:47;;;;;;;;;;-1:-1:-1;8696:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16914:497;;;;;;;;;;-1:-1:-1;16914:497:0;;;;;:::i;:::-;;:::i;25976:285::-;;;;;;;;;;-1:-1:-1;25976:285:0;;;;;:::i;:::-;;:::i;8328:28::-;;;;;;;;;;;;;;;;9119;;;;;;;;;;;;;;;;8811:25;;;;;;;;;;;;;;;;8962:31;;;;;;;;;;-1:-1:-1;8962:31:0;;;;;;;;;;;3112:143;;;;;;;;;;-1:-1:-1;3112:143:0;;;;;:::i;:::-;;:::i;7811:150::-;;;;;;;;;;;;;:::i;13412:203::-;;;;;;;;;;;;;:::i;15432:328::-;;;;;;;;;;-1:-1:-1;15432:328:0;;;;;:::i;:::-;;:::i;8550:30::-;;;;;;;;;;-1:-1:-1;8550:30:0;;;;-1:-1:-1;;;;;8550:30:0;;;9331;;;;;;;;;;;;;;;;10428:48;;;;;;;;;;-1:-1:-1;10428:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8294:27;;;;;;;;;;;;;;;;12668:243;;;;;;;;;;;;;:::i;7597:79::-;;;;;;;;;;-1:-1:-1;7662:6:0;;-1:-1:-1;;;;;7662:6:0;7597:79;;8587:24;;;;;;;;;;-1:-1:-1;8587:24:0;;;;-1:-1:-1;;;;;8587:24:0;;;9154:31;;;;;;;;;;;;;;;;2783:104;;;;;;;;;;;;;:::i;16016:364::-;;;;;;;;;;-1:-1:-1;16016:364:0;;;;;:::i;:::-;;:::i;9405:24::-;;;;;;;;;;;;;;;;9550:27;;;;;;;;;;;;;;;;8750:54;;;;;;;;;;-1:-1:-1;8750:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;9230:25;;;;;;;;;;;;;;;;4692:475;;;;;;;;;;-1:-1:-1;4692:475:0;;;;;:::i;:::-;;:::i;3263:200::-;;;;;;;;;;-1:-1:-1;3263:200:0;;;;;:::i;:::-;;:::i;8363:30::-;;;;;;;;;;;;;;;;25855:113;;;;;;;;;;-1:-1:-1;25946:14:0;;25931:12;:29;25855:113;;9262:26;;;;;;;;;;;;;;;;10483:57;;;;;;;;;;-1:-1:-1;10483:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8922:33;;;;;;;;;;-1:-1:-1;8922:33:0;;;;;;;;;;;17931:182;;;;;;;;;;-1:-1:-1;17931:182:0;;;;;:::i;:::-;;:::i;13729:327::-;;;;;;;;;;-1:-1:-1;13729:327:0;;;;;:::i;:::-;;:::i;13295:109::-;;;;;;;;;;-1:-1:-1;13295:109:0;;;;;:::i;:::-;;:::i;9071:39::-;;;;;;;;;;-1:-1:-1;9071:39:0;;;;;;;;8618:31;;;;;;;;;;;;;;;;14771:428;;;;;;;;;;-1:-1:-1;14771:428:0;;;;;:::i;:::-;;:::i;9297:27::-;;;;;;;;;;;;;;;;14064:317;;;;;;;;;;-1:-1:-1;14064:317:0;;;;;:::i;:::-;;:::i;3471:176::-;;;;;;;;;;-1:-1:-1;3471:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;3612:18:0;;;3585:7;3612:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3471:176;28528:156;;;;;;;;;;;;;:::i;8510:33::-;;;;;;;;;;;;;;;;8656;;;;;;;;;;;;;;;;9436:25;;;;;;;;;;;;;;;;16388:518;;;;;;;;;;-1:-1:-1;16388:518:0;;;;;:::i;:::-;;:::i;13623:98::-;;;;;;;;;;;;;:::i;9368:30::-;;;;;;;;;;;;;;;;7969:281;;;;;;;;;;-1:-1:-1;7969:281:0;;;;;:::i;:::-;;:::i;9192:31::-;;;;;;;;;;;;;;;;2675:100;2729:13;2762:5;2755:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2675:100;:::o;3655:194::-;3763:4;3780:39;1013:10;3803:7;3812:6;3780:8;:39::i;:::-;-1:-1:-1;3837:4:0;3655:194;;;;;:::o;3857:529::-;3997:4;4014:36;4024:6;4032:9;4043:6;4014:9;:36::i;:::-;-1:-1:-1;;;;;4090:19:0;;4063:24;4090:19;;;:11;:19;;;;;;;;1013:10;4090:33;;;;;;;;4156:26;;;;4134:116;;;;-1:-1:-1;;;4134:116:0;;5102:2:1;4134:116:0;;;5084:21:1;5141:2;5121:18;;;5114:30;5180:34;5160:18;;;5153:62;-1:-1:-1;;;5231:18:1;;;5224:38;5279:19;;4134:116:0;;;;;;;;;4286:57;4295:6;1013:10;4336:6;4317:16;:25;4286:8;:57::i;:::-;4374:4;4367:11;;;3857:529;;;;;;:::o;14389:312::-;7724:6;;-1:-1:-1;;;;;7724:6:0;1013:10;7724:22;7716:67;;;;-1:-1:-1;;;7716:67:0;;;;;;;:::i;:::-;14526:4:::1;14518;14497:13;3084:12:::0;;;2996:108;14497:13:::1;:17;::::0;14513:1:::1;14497:17;:::i;:::-;14496:26;;;;:::i;:::-;14495:35;;;;:::i;:::-;14485:6;:45;;14463:136;;;::::0;-1:-1:-1;;;14463:136:0;;6399:2:1;14463:136:0::1;::::0;::::1;6381:21:1::0;6438:2;6418:18;;;6411:30;6477:34;6457:18;;;6450:62;-1:-1:-1;;;6528:18:1;;;6521:39;6577:19;;14463:136:0::1;6197:405:1::0;14463:136:0::1;14625:19;:6:::0;14635:8:::1;14625:19;:::i;:::-;14610:12;:34:::0;;;14660:33:::1;::::0;1592:25:1;;;14660:33:0::1;::::0;1580:2:1;1565:18;14660:33:0::1;;;;;;;;14389:312:::0;:::o;17419:504::-;7724:6;;-1:-1:-1;;;;;7724:6:0;1013:10;7724:22;7716:67;;;;-1:-1:-1;;;7716:67:0;;;;;;;:::i;:::-;17596:15:::1;:31:::0;;;17638:15:::1;:31:::0;;;17680:9:::1;:19:::0;;;17710:10:::1;:21:::0;;;17723:8;17692:7;17770:46:::1;17656:13:::0;17614;17770:46:::1;:::i;:::-;:71;;;;:::i;:::-;:97;;;;:::i;:::-;17742:12;:125:::0;;;17902:1:::1;-1:-1:-1::0;17886:17:0::1;17878:37;;;::::0;-1:-1:-1;;;17878:37:0;;6939:2:1;17878:37:0::1;::::0;::::1;6921:21:1::0;6978:1;6958:18;;;6951:29;-1:-1:-1;;;6996:18:1;;;6989:37;7043:18;;17878:37:0::1;6737:330:1::0;17878:37:0::1;17419:504:::0;;;;:::o;4394:290::-;1013:10;4507:4;4596:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4596:34:0;;;;;;;;;;4507:4;;4524:130;;4574:7;;4596:47;;4633:10;;4596:47;:::i;:::-;4524:8;:130::i;26269:196::-;7724:6;;-1:-1:-1;;;;;7724:6:0;1013:10;7724:22;7716:67;;;;-1:-1:-1;;;7716:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26353:25:0;::::1;26345:69;;;::::0;-1:-1:-1;;;26345:69:0;;7274:2:1;26345:69:0::1;::::0;::::1;7256:21:1::0;7313:2;7293:18;;;7286:30;7352:33;7332:18;;;7325:61;7403:18;;26345:69:0::1;7072:355:1::0;26345:69:0::1;26425:9;:32:::0;;-1:-1:-1;;;;;;26425:32:0::1;-1:-1:-1::0;;;;;26425:32:0;;;::::1;::::0;;;::::1;::::0;;26269:196::o;16914:497::-;17103:18;;17075:24;17093:4;17075:9;:24::i;:::-;:46;;17053:148;;;;-1:-1:-1;;;17053:148:0;;7634:2:1;17053:148:0;;;7616:21:1;7673:2;7653:18;;;7646:30;7712:34;7692:18;;;7685:62;-1:-1:-1;;;7763:18:1;;;7756:50;7823:19;;17053:148:0;7432:416:1;17053:148:0;17216:41;17229:7;17238;17247:9;17216:12;:41::i;:::-;17212:192;;;17274:8;:15;;-1:-1:-1;;;;17274:15:0;-1:-1:-1;;;17274:15:0;;;17304:10;:8;:10::i;:::-;17329:8;:16;;-1:-1:-1;;;;17329:16:0;;;17365:27;;17376:15;1592:25:1;;17365:27:0;;1580:2:1;1565:18;17365:27:0;;;;;;;17212:192;16914:497;;;:::o;25976:285::-;7724:6;;-1:-1:-1;;;;;7724:6:0;1013:10;7724:22;7716:67;;;;-1:-1:-1;;;7716:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26102:31:0;::::1;26080:118;;;::::0;-1:-1:-1;;;26080:118:0;;8055:2:1;26080:118:0::1;::::0;::::1;8037:21:1::0;8094:2;8074:18;;;8067:30;8133:34;8113:18;;;8106:62;-1:-1:-1;;;8184:18:1;;;8177:35;8229:19;;26080:118:0::1;7853:401:1::0;26080:118:0::1;26209:15;:44:::0;;-1:-1:-1;;;;;;26209:44:0::1;-1:-1:-1::0;;;;;26209:44:0;;;::::1;::::0;;;::::1;::::0;;25976:285::o;3112:143::-;-1:-1:-1;;;;;3229:18:0;3202:7;3229:18;;;;;;;;;;;;3112:143::o;7811:150::-;7724:6;;-1:-1:-1;;;;;7724:6:0;1013:10;7724:22;7716:67;;;;-1:-1:-1;;;7716:67:0;;;;;;;:::i;:::-;7904:6:::1;::::0;7883:40:::1;::::0;7920:1:::1;::::0;-1:-1:-1;;;;;7904:6:0::1;::::0;7883:40:::1;::::0;7920:1;;7883:40:::1;7934:6;:19:::0;;-1:-1:-1;;;;;;7934:19:0::1;::::0;;7811:150::o;13412:203::-;7724:6;;-1:-1:-1;;;;;7724:6:0;1013:10;7724:22;7716:67;;;;-1:-1:-1;;;7716:67:0;;;;;;;:::i;:::-;3084:12;;13466::::1;:28:::0;3084:12;;13505:13:::1;:29:::0;3084:12;;13545:15:::1;:31:::0;13592:15:::1;::::0;::::1;::::0;;;::::1;13412:203::o:0;15432:328::-;7724:6;;-1:-1:-1;;;;;7724:6:0;1013:10;7724:22;7716:67;;;;-1:-1:-1;;;7716:67:0;;;;;;;:::i;:::-;15554:4:::1;15549:162;;15611:13;::::0;-1:-1:-1;;;;;15611:13:0;;::::1;15601:23:::0;;::::1;::::0;15575:124:::1;;;::::0;-1:-1:-1;;;15575:124:0;;8461:2:1;15575:124:0::1;::::0;::::1;8443:21:1::0;8500:2;8480:18;;;8473:30;8539:34;8519:18;;;8512:62;-1:-1:-1;;;8590:18:1;;;8583:37;8637:19;;15575:124:0::1;8259:403:1::0;15575:124:0::1;-1:-1:-1::0;;;;;15721:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:31;;-1:-1:-1;;15721:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15432:328::o;12668:243::-;7724:6;;-1:-1:-1;;;;;7724:6:0;1013:10;7724:22;7716:67;;;;-1:-1:-1;;;7716:67:0;;;;;;;:::i;:::-;12732:13:::1;::::0;::::1;::::0;::::1;;;12731:14;12723:50;;;::::0;-1:-1:-1;;;12723:50:0;;8869:2:1;12723:50:0::1;::::0;::::1;8851:21:1::0;8908:2;8888:18;;;8881:30;8947:25;8927:18;;;8920:53;8990:18;;12723:50:0::1;8667:347:1::0;12723:50:0::1;12784:13;:20:::0;;-1:-1:-1;;12815:18:0;;;;;12859:12:::1;12844;:27:::0;12887:16:::1;::::0;::::1;::::0;-1:-1:-1;;12887:16:0::1;12668:243::o:0;2783:104::-;2839:13;2872:7;2865:14;;;;;:::i;16016:364::-;7724:6;;-1:-1:-1;;;;;7724:6:0;1013:10;7724:22;7716:67;;;;-1:-1:-1;;;7716:67:0;;;;;;;:::i;:::-;16164:13:::1;::::0;-1:-1:-1;;;;;16164:13:0;;::::1;16156:21:::0;;::::1;::::0;16134:128:::1;;;::::0;-1:-1:-1;;;16134:128:0;;9221:2:1;16134:128:0::1;::::0;::::1;9203:21:1::0;9260:2;9240:18;;;9233:30;9299:34;9279:18;;;9272:62;9370:27;9350:18;;;9343:55;9415:19;;16134:128:0::1;9019:421:1::0;16134:128:0::1;16275:41;16304:4;16310:5;16275:28;:41::i;:::-;16332:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;16332:40:0;::::1;::::0;::::1;::::0;;;::::1;16016:364:::0;;:::o;4692:475::-;1013:10;4810:4;4854:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4854:34:0;;;;;;;;;;4921:35;;;;4899:122;;;;-1:-1:-1;;;4899:122:0;;9647:2:1;4899:122:0;;;9629:21:1;9686:2;9666:18;;;9659:30;9725:34;9705:18;;;9698:62;-1:-1:-1;;;9776:18:1;;;9769:35;9821:19;;4899:122:0;9445:401:1;4899:122:0;5057:67;1013:10;5080:7;5108:15;5089:16;:34;5057:8;:67::i;:::-;-1:-1:-1;5155:4:0;;4692:475;-1:-1:-1;;;4692:475:0:o;3263:200::-;3374:4;3391:42;1013:10;3415:9;3426:6;3391:9;:42::i;17931:182::-;7724:6;;-1:-1:-1;;;;;7724:6:0;1013:10;7724:22;7716:67;;;;-1:-1:-1;;;7716:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18016:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;18016:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18071:34;;1163:41:1;;;18071:34:0::1;::::0;1136:18:1;18071:34:0::1;;;;;;;17931:182:::0;;:::o;13729:327::-;7724:6;;-1:-1:-1;;;;;7724:6:0;1013:10;7724:22;7716:67;;;;-1:-1:-1;;;7716:67:0;;;;;;;:::i;:::-;13869:4:::1;13861;13840:13;3084:12:::0;;;2996:108;13840:13:::1;:17;::::0;13856:1:::1;13840:17;:::i;:::-;13839:26;;;;:::i;:::-;13838:35;;;;:::i;:::-;13828:6;:45;;13806:139;;;::::0;-1:-1:-1;;;13806:139:0;;10053:2:1;13806:139:0::1;::::0;::::1;10035:21:1::0;10092:2;10072:18;;;10065:30;10131:34;10111:18;;;10104:62;-1:-1:-1;;;10182:18:1;;;10175:42;10234:19;;13806:139:0::1;9851:408:1::0;13806:139:0::1;13974:19;:6:::0;13984:8:::1;13974:19;:::i;:::-;13956:15;:37:::0;;;14009:39:::1;::::0;1592:25:1;;;14009:39:0::1;::::0;1580:2:1;1565:18;14009:39:0::1;1446:177:1::0;13295:109:0;7724:6;;-1:-1:-1;;;;;7724:6:0;1013:10;7724:22;7716:67;;;;-1:-1:-1;;;7716:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13365:23:0::1;13391:5;13365:23:::0;;;:15:::1;:23;::::0;;;;:31;;-1:-1:-1;;13365:31:0::1;::::0;;13295:109::o;14771:428::-;7724:6;;-1:-1:-1;;;;;7724:6:0;1013:10;7724:22;7716:67;;;;-1:-1:-1;;;7716:67:0;;;;;;;:::i;:::-;14911:6:::1;14890:13;3084:12:::0;;;2996:108;14890:13:::1;:17;::::0;14906:1:::1;14890:17;:::i;:::-;14889:28;;;;:::i;:::-;14876:9;:41;;14854:144;;;::::0;-1:-1:-1;;;14854:144:0;;10466:2:1;14854:144:0::1;::::0;::::1;10448:21:1::0;10505:2;10485:18;;;10478:30;10544:34;10524:18;;;10517:62;-1:-1:-1;;;10595:18:1;;;10588:51;10656:19;;14854:144:0::1;10264:417:1::0;14854:144:0::1;15066:4;15045:13;3084:12:::0;;;2996:108;15045:13:::1;:17;::::0;15061:1:::1;15045:17;:::i;:::-;15044:26;;;;:::i;:::-;15031:9;:39;;15009:141;;;::::0;-1:-1:-1;;;15009:141:0;;10888:2:1;15009:141:0::1;::::0;::::1;10870:21:1::0;10927:2;10907:18;;;10900:30;10966:34;10946:18;;;10939:62;-1:-1:-1;;;11017:18:1;;;11010:50;11077:19;;15009:141:0::1;10686:416:1::0;15009:141:0::1;15161:18;:30:::0;14771:428::o;14064:317::-;7724:6;;-1:-1:-1;;;;;7724:6:0;1013:10;7724:22;7716:67;;;;-1:-1:-1;;;7716:67:0;;;;;;;:::i;:::-;14202:4:::1;14194;14173:13;3084:12:::0;;;2996:108;14173:13:::1;:17;::::0;14189:1:::1;14173:17;:::i;:::-;14172:26;;;;:::i;:::-;14171:35;;;;:::i;:::-;14161:6;:45;;14139:137;;;::::0;-1:-1:-1;;;14139:137:0;;11309:2:1;14139:137:0::1;::::0;::::1;11291:21:1::0;11348:2;11328:18;;;11321:30;11387:34;11367:18;;;11360:62;-1:-1:-1;;;11438:18:1;;;11431:40;11488:19;;14139:137:0::1;11107:406:1::0;14139:137:0::1;14303:19;:6:::0;14313:8:::1;14303:19;:::i;:::-;14287:13;:35:::0;;;14338::::1;::::0;1592:25:1;;;14338:35:0::1;::::0;1580:2:1;1565:18;14338:35:0::1;1446:177:1::0;28528:156:0;7724:6;;-1:-1:-1;;;;;7724:6:0;1013:10;7724:22;7716:67;;;;-1:-1:-1;;;7716:67:0;;;;;;;:::i;:::-;28618:58:::1;::::0;28581:12:::1;::::0;28626:10:::1;::::0;28650:21:::1;::::0;28581:12;28618:58;28581:12;28618:58;28650:21;28626:10;28618:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16388:518:::0;7724:6;;-1:-1:-1;;;;;7724:6:0;1013:10;7724:22;7716:67;;;;-1:-1:-1;;;7716:67:0;;;;;;;:::i;:::-;16566:16:::1;:32:::0;;;16609:16:::1;:32:::0;;;16652:10:::1;:20:::0;;;16683:11:::1;:22:::0;;;16697:8;16665:7;16745:48:::1;16628:13:::0;16585;16745:48:::1;:::i;:::-;:74;;;;:::i;:::-;:101;;;;:::i;:::-;16716:13;:130:::0;;;16882:1:::1;-1:-1:-1::0;16865:18:0::1;16857:41;;;::::0;-1:-1:-1;;;16857:41:0;;11930:2:1;16857:41:0::1;::::0;::::1;11912:21:1::0;11969:2;11949:18;;;11942:30;-1:-1:-1;;;11988:18:1;;;11981:40;12038:18;;16857:41:0::1;11728:334:1::0;13623:98:0;7724:6;;-1:-1:-1;;;;;7724:6:0;1013:10;7724:22;7716:67;;;;-1:-1:-1;;;7716:67:0;;;;;;;:::i;:::-;13685:20:::1;:28:::0;;-1:-1:-1;;13685:28:0::1;::::0;;13623:98::o;7969:281::-;7724:6;;-1:-1:-1;;;;;7724:6:0;1013:10;7724:22;7716:67;;;;-1:-1:-1;;;7716:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8072:22:0;::::1;8050:110;;;::::0;-1:-1:-1;;;8050:110:0;;12269:2:1;8050:110:0::1;::::0;::::1;12251:21:1::0;12308:2;12288:18;;;12281:30;12347:34;12327:18;;;12320:62;-1:-1:-1;;;12398:18:1;;;12391:36;12444:19;;8050:110:0::1;12067:402:1::0;8050:110:0::1;8197:6;::::0;8176:38:::1;::::0;-1:-1:-1;;;;;8176:38:0;;::::1;::::0;8197:6:::1;::::0;8176:38:::1;::::0;8197:6:::1;::::0;8176:38:::1;8225:6;:17:::0;;-1:-1:-1;;;;;;8225:17:0::1;-1:-1:-1::0;;;;;8225:17:0;;;::::1;::::0;;;::::1;::::0;;7969:281::o;6716:380::-;-1:-1:-1;;;;;6852:19:0;;6844:68;;;;-1:-1:-1;;;6844:68:0;;12676:2:1;6844:68:0;;;12658:21:1;12715:2;12695:18;;;12688:30;12754:34;12734:18;;;12727:62;-1:-1:-1;;;12805:18:1;;;12798:34;12849:19;;6844:68:0;12474:400:1;6844:68:0;-1:-1:-1;;;;;6931:21:0;;6923:68;;;;-1:-1:-1;;;6923:68:0;;13081:2:1;6923:68:0;;;13063:21:1;13120:2;13100:18;;;13093:30;13159:34;13139:18;;;13132:62;-1:-1:-1;;;13210:18:1;;;13203:32;13252:19;;6923:68:0;12879:398:1;6923:68:0;-1:-1:-1;;;;;7004:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7056:32;;1592:25:1;;;7056:32:0;;1565:18:1;7056:32:0;;;;;;;;6716:380;;;:::o;19870:5977::-;-1:-1:-1;;;;;20002:18:0;;19994:68;;;;-1:-1:-1;;;19994:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20081:16:0;;20073:64;;;;-1:-1:-1;;;20073:64:0;;;;;;;:::i;:::-;20165:1;20156:6;:10;20148:52;;;;-1:-1:-1;;;20148:52:0;;14294:2:1;20148:52:0;;;14276:21:1;14333:2;14313:18;;;14306:30;14372:31;14352:18;;;14345:59;14421:18;;20148:52:0;14092:353:1;20148:52:0;20218:13;;;;;;;20213:183;;-1:-1:-1;;;;;20274:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;20303:23:0;;;;;;:19;:23;;;;;;;;20274:52;20248:136;;;;-1:-1:-1;;;20248:136:0;;14652:2:1;20248:136:0;;;14634:21:1;14691:2;14671:18;;;14664:30;-1:-1:-1;;;14710:18:1;;;14703:52;14772:18;;20248:136:0;14450:346:1;20248:136:0;20412:14;;:18;20408:254;;-1:-1:-1;;;;;20474:21:0;;;;;;:15;:21;;;;;;;;20473:22;;:60;;-1:-1:-1;7662:6:0;;-1:-1:-1;;;;;20520:13:0;;;7662:6;;20520:13;20473:60;:106;;;-1:-1:-1;;;;;;20558:21:0;;20572:6;20558:21;20473:106;20447:203;;;;-1:-1:-1;;;20447:203:0;;15003:2:1;20447:203:0;;;14985:21:1;15042:2;15022:18;;;15015:30;15081:34;15061:18;;;15054:62;-1:-1:-1;;;15132:18:1;;;15125:33;15175:19;;20447:203:0;14801:399:1;20447:203:0;20678:14;;;;20674:2375;;;7662:6;;-1:-1:-1;;;;;20731:15:0;;;7662:6;;20731:15;;;;:49;;-1:-1:-1;7662:6:0;;-1:-1:-1;;;;;20767:13:0;;;7662:6;;20767:13;;20731:49;:86;;;;-1:-1:-1;;;;;;20801:16:0;;;;20731:86;:128;;;;-1:-1:-1;;;;;;20838:21:0;;20852:6;20838:21;;20731:128;:175;;;;-1:-1:-1;;;;;;20881:25:0;;;;;;:19;:25;;;;;;;;20880:26;20731:175;:220;;;;-1:-1:-1;;;;;;20928:23:0;;;;;;:19;:23;;;;;;;;20927:24;20731:220;20709:1324;;;20990:20;;;;20986:1032;;;21079:15;;-1:-1:-1;;;;;21065:30:0;;;21079:15;;21065:30;;;;:62;;-1:-1:-1;21113:13:0;;-1:-1:-1;;;;;21099:28:0;;;21113:13;;21099:28;;21065:62;21035:964;;;21291:16;21306:1;21291:12;:16;:::i;:::-;21245:9;21216:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;21412:16:0;21427:1;21412:12;:16;:::i;:::-;-1:-1:-1;;;;;21344:32:0;;;;;;:28;:32;;;;;;:84;21216:212;21178:363;;;;-1:-1:-1;;;21178:363:0;;15540:2:1;21178:363:0;;;15522:21:1;15579:2;15559:18;;;15552:30;15618:34;15598:18;;;15591:62;-1:-1:-1;;;15669:18:1;;;15662:51;15730:19;;21178:363:0;15338:417:1;21178:363:0;21597:9;21568:39;;;;:28;:39;;;;;;21610:12;21568:54;;;;-1:-1:-1;;;;;21649:32:0;;;;;;:47;21035:964;;;21731:8;;-1:-1:-1;;;21731:8:0;;;;21730:9;:45;;;;-1:-1:-1;;;;;;21744:31:0;;;;;;:25;:31;;;;;;;;21743:32;21730:45;21726:273;;;21870:17;;-1:-1:-1;;;;;21842:25:0;;;;;;:19;:25;;;;;;:45;21804:171;;;;-1:-1:-1;;;21804:171:0;;15962:2:1;21804:171:0;;;15944:21:1;16001:2;15981:18;;;15974:30;16040;16020:18;;;16013:58;16088:18;;21804:171:0;15760:352:1;21804:171:0;-1:-1:-1;;;;;22053:31:0;;;;;;:25;:31;;;;;;;;:56;;;;-1:-1:-1;;;;;;22089:20:0;;;;;;:16;:20;;;;;;;;22088:21;22053:56;22049:989;;;22170:12;;22160:6;:22;;22130:136;;;;-1:-1:-1;;;22130:136:0;;16319:2:1;22130:136:0;;;16301:21:1;16358:2;16338:18;;;16331:30;16397:34;16377:18;;;16370:62;-1:-1:-1;;;16448:18:1;;;16441:38;16496:19;;22130:136:0;16117:404:1;22130:136:0;22341:15;;22324:13;22334:2;22324:9;:13::i;:::-;22315:22;;:6;:22;:::i;:::-;:41;;22285:139;;;;-1:-1:-1;;;22285:139:0;;16728:2:1;22285:139:0;;;16710:21:1;16767:2;16747:18;;;16740:30;16806:26;16786:18;;;16779:54;16850:18;;22285:139:0;16526:348:1;22285:139:0;22049:989;;;-1:-1:-1;;;;;22468:29:0;;;;;;:25;:29;;;;;;;;:56;;;;-1:-1:-1;;;;;;22502:22:0;;;;;;:16;:22;;;;;;;;22501:23;22468:56;22446:592;;;22599:13;;22589:6;:23;;22559:139;;;;-1:-1:-1;;;22559:139:0;;17081:2:1;22559:139:0;;;17063:21:1;17120:2;17100:18;;;17093:30;17159:34;17139:18;;;17132:62;-1:-1:-1;;;17210:18:1;;;17203:40;17260:19;;22559:139:0;16879:406:1;22446:592:0;-1:-1:-1;;;;;22725:20:0;;;;;;:16;:20;;;;;;;;22720:318;;22822:15;;22805:13;22815:2;22805:9;:13::i;22720:318::-;22932:8;;-1:-1:-1;;;22932:8:0;;;;22931:9;:35;;;;-1:-1:-1;;;;;;22944:22:0;;;;;;:16;:22;;;;;;;;22931:35;22927:111;;;23007:15;22987:17;:35;22927:111;23061:28;23092:24;23110:4;23092:9;:24::i;:::-;23168:18;;23061:55;;-1:-1:-1;23144:42:0;;;;;;;23217:35;;-1:-1:-1;23241:11:0;;;;;;;23217:35;:61;;;;-1:-1:-1;23270:8:0;;-1:-1:-1;;;23270:8:0;;;;23269:9;23217:61;:110;;;;-1:-1:-1;;;;;;23296:31:0;;;;;;:25;:31;;;;;;;;23295:32;23217:110;:153;;;;-1:-1:-1;;;;;;23345:25:0;;;;;;:19;:25;;;;;;;;23344:26;23217:153;:194;;;;-1:-1:-1;;;;;;23388:23:0;;;;;;:19;:23;;;;;;;;23387:24;23217:194;23199:322;;;23438:8;:15;;-1:-1:-1;;;;23438:15:0;-1:-1:-1;;;23438:15:0;;;23468:10;:8;:10::i;:::-;23493:8;:16;;-1:-1:-1;;;;23493:16:0;;;23199:322;-1:-1:-1;;;;;23569:25:0;;23533:12;23569:25;;;:19;:25;;;;;;23548:4;;23569:25;;;:52;;-1:-1:-1;;;;;;23598:23:0;;;;;;:19;:23;;;;;;;;23569:52;23565:100;;;-1:-1:-1;23648:5:0;23565:100;-1:-1:-1;;;;;23679:31:0;;;;;;:25;:31;;;;;;;;:63;;;;-1:-1:-1;;;;;;23714:23:0;;;;;;:19;:23;;;;;;:28;23679:63;23675:202;;;23763:22;23781:2;23763:9;:22::i;:::-;23789:1;23763:27;23759:107;;-1:-1:-1;;;;;23809:23:0;;;;;;:19;:23;;;;;23835:15;23809:41;;23759:107;23889:12;23922:7;23918:1876;;;25946:14;;25931:12;:29;23968:73;;;;-1:-1:-1;;;;;;24010:31:0;;;;;;:25;:31;;;;;;;;23968:73;:124;;;;-1:-1:-1;;;;;;24063:29:0;;;;;;:25;:29;;;;;;;;24062:30;23968:124;:161;;;;;24128:1;24113:12;;:16;23968:161;23946:1703;;;-1:-1:-1;;;;;24169:19:0;;;;;;:15;:19;;;;;;;;24164:186;;-1:-1:-1;;;;;24213:19:0;;;;;;:15;:19;;;;;:26;;-1:-1:-1;;24213:26:0;24235:4;24213:26;;;;;;24262:10;:15;;24235:4;;24262:10;;:15;;24235:4;;24262:15;:::i;:::-;;;;-1:-1:-1;;24305:25:0;;-1:-1:-1;;;;;1402:32:1;;1384:51;;24305:25:0;;1372:2:1;1357:18;24305:25:0;;;;;;;24164:186;24393:3;24378:11;:6;24387:2;24378:11;:::i;:::-;24377:19;;;;:::i;:::-;24370:26;;24464:12;;24445:15;;24438:4;:22;;;;:::i;:::-;24437:39;;;;:::i;:::-;24415:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24544:12:0;;24525:15;;24518:22;;:4;:22;:::i;:::-;24517:39;;;;:::i;:::-;24495:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24612:12:0;;24599:9;;24592:16;;:4;:16;:::i;:::-;24591:33;;;;:::i;:::-;24575:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;24682:12:0;;24668:10;;24661:17;;:4;:17;:::i;:::-;24660:34;;;;:::i;:::-;24643:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;23946:1703:0;;-1:-1:-1;23946:1703:0;;-1:-1:-1;;;;;24754:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;24803:1;24787:13;;:17;24754:50;24750:899;;;24859:3;24842:13;;24833:6;:22;;;;:::i;:::-;24832:30;;;;:::i;:::-;24825:37;;24931:13;;24911:16;;24904:4;:23;;;;:::i;:::-;24903:41;;;;:::i;:::-;24881:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25013:13:0;;24993:16;;24986:23;;:4;:23;:::i;:::-;24985:41;;;;:::i;:::-;24963:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25083:13:0;;25069:10;;25062:17;;:4;:17;:::i;:::-;25061:35;;;;:::i;:::-;25045:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;25155:13:0;;25140:11;;25133:18;;:4;:18;:::i;24750:899::-;-1:-1:-1;;;;;25227:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;25277:1;25262:12;;:16;25227:51;25223:426;;;25332:3;25316:12;;25307:6;:21;;;;:::i;:::-;25306:29;;;;:::i;:::-;25299:36;;25403:12;;25384:15;;25377:4;:22;;;;:::i;:::-;25376:39;;;;:::i;:::-;25354:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25483:12:0;;25464:15;;25457:22;;:4;:22;:::i;:::-;25456:39;;;;:::i;:::-;25434:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25551:12:0;;25538:9;;25531:16;;:4;:16;:::i;:::-;25530:33;;;;:::i;:::-;25514:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;25621:12:0;;25607:10;;25600:17;;:4;:17;:::i;:::-;25599:34;;;;:::i;:::-;25582:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;25223:426:0;25667:8;;25663:91;;25696:42;25712:4;25726;25733;25696:15;:42::i;:::-;25768:14;25778:4;25768:14;;:::i;:::-;;;23918:1876;25806:33;25822:4;25828:2;25832:6;25806:15;:33::i;:::-;19983:5864;;;;19870:5977;;;:::o;18121:1741::-;18313:10;18248:4;18293:31;;;:19;:31;;;;;;18248:4;;18293:31;;18288:1567;;18361:1;18345:13;;:17;:62;;;;;18394:13;;18366:24;18384:4;18366:9;:24::i;:::-;:41;;18345:62;18341:135;;;18428:32;18434:10;18446:13;;18428:5;:32::i;:::-;-1:-1:-1;18508:1:0;18492:13;:17;;;18659:12;;18621:18;;18583;;18534:4;;18508:1;18659:12;18583:56;;;:::i;:::-;:88;;;;:::i;:::-;18555:116;;18686:23;18712:24;18730:4;18712:9;:24::i;:::-;18686:50;;18775:18;;18796:2;18775:23;;;;:::i;:::-;18757:15;:41;18753:122;;;18837:18;;:22;;18858:1;18837:22;:::i;:::-;18819:40;;18753:122;18895:20;;;:46;;-1:-1:-1;18919:22:0;;18895:46;18891:99;;;18969:5;18962:12;;;;;;;18891:99;19013:7;19006:14;;;;;;;18288:1567;19084:1;19057:24;19075:4;19057:9;:24::i;:::-;:28;19053:306;;;19110:7;19121:1;19110:12;19106:238;;-1:-1:-1;19147:17:0;:29;;;19209:5;19106:238;;;19263:23;19269:7;19278;19263:5;:23::i;:::-;-1:-1:-1;19319:5:0;19106:238;19375:25;19479:12;;19441:18;;19403;;:56;;;;:::i;:::-;:88;;;;:::i;:::-;19375:116;;19508:23;19534:24;19552:4;19534:9;:24::i;:::-;19508:50;-1:-1:-1;19579:20:0;;;:46;;-1:-1:-1;19603:22:0;;19579:46;19575:99;;;19653:5;19646:12;;;;;;;19575:99;19712:18;;:23;;19733:2;19712:23;:::i;:::-;19694:15;:41;19690:123;;;19774:18;;:23;;19795:2;19774:23;:::i;:::-;-1:-1:-1;19836:7:0;;-1:-1:-1;19829:14:0;;-1:-1:-1;;19829:14:0;26953:1567;27012:1;26996:13;;:17;:62;;;;;27045:13;;27017:24;27035:4;27017:9;:24::i;:::-;:41;;26996:62;26992:130;;;27075:35;27089:4;27096:13;;27075:5;:35::i;:::-;27148:1;27132:13;:17;;;27186:24;27204:4;27186:9;:24::i;:::-;27160:50;;27221:25;27317:12;;27283:18;;27249;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;27221:108;-1:-1:-1;27346:20:0;;;:46;;-1:-1:-1;27370:22:0;;27346:46;27342:85;;;27409:7;;26953:1567::o;27342:85::-;27461:18;;:22;;27482:1;27461:22;:::i;:::-;27443:15;:40;27439:113;;;27518:18;;:22;;27539:1;27518:22;:::i;:::-;27500:40;;27439:113;27564:23;27664:1;27644:17;27609:18;;27591:15;:36;;;;:::i;:::-;27590:71;;;;:::i;:::-;:75;;;;:::i;:::-;27564:101;-1:-1:-1;27678:51:0;27695:33;27564:101;27695:15;:33;:::i;:::-;27678:16;:51::i;:::-;27939:18;;27763:21;;;;27742:18;;27939:22;;27960:1;;27939:22;:::i;:::-;27918:44;;:17;:44;:::i;:::-;27882:18;;27869:31;;:10;:31;:::i;:::-;27868:95;;;;:::i;:::-;27842:121;;27974:17;28080:1;28059:18;;:22;;;;:::i;:::-;28038:44;;:17;:44;:::i;:::-;28008:12;;27995:25;;:10;:25;:::i;:::-;27994:89;;;;:::i;:::-;27974:109;-1:-1:-1;28113:27:0;27974:109;28113:15;:27;:::i;:::-;28094:46;;;;:::i;:::-;28172:1;28151:18;:22;;;28184:18;:22;;;28217:12;:16;;;28244:13;:17;28094:46;-1:-1:-1;28278:19:0;;;;;:42;;;28319:1;28301:15;:19;28278:42;28274:121;;;28337:46;28350:15;28367;28337:12;:46::i;:::-;28415:9;;28407:38;;-1:-1:-1;;;;;28415:9:0;;;;28407:38;;;;;28435:9;;28415;28407:38;28415:9;28407:38;28435:9;28415;28407:38;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28464:15:0;;28456:56;;-1:-1:-1;;;;;28464:15:0;;;;28490:21;28456:56;;;;;28464:15;28456:56;28464:15;28456:56;28490:21;28464:15;28456:56;;;;;;;;;;;;;;;;;;;;;26981:1539;;;;;;;26953:1567::o;15768:240::-;-1:-1:-1;;;;;15851:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;15851:39:0;;;;;;;15903;15851:31;:39;15903:26;:39::i;5175:651::-;-1:-1:-1;;;;;5315:20:0;;5307:70;;;;-1:-1:-1;;;5307:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5396:23:0;;5388:71;;;;-1:-1:-1;;;5388:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5496:17:0;;5472:21;5496:17;;;;;;;;;;;5546:23;;;;5524:111;;;;-1:-1:-1;;;5524:111:0;;17492:2:1;5524:111:0;;;17474:21:1;17531:2;17511:18;;;17504:30;17570:34;17550:18;;;17543:62;-1:-1:-1;;;17621:18:1;;;17614:36;17667:19;;5524:111:0;17290:402:1;5524:111:0;-1:-1:-1;;;;;5671:17:0;;;:9;:17;;;;;;;;;;;5691:22;;;5671:42;;5735:20;;;;;;;;:30;;5707:6;;5671:9;5735:30;;5707:6;;5735:30;:::i;:::-;;;;;;;;5800:9;-1:-1:-1;;;;;5783:35:0;5792:6;-1:-1:-1;;;;;5783:35:0;;5811:6;5783:35;;;;1592:25:1;;1580:2;1565:18;;1446:177;5783:35:0;;;;;;;;5296:530;5175:651;;;:::o;6158:550::-;-1:-1:-1;;;;;6242:21:0;;6234:67;;;;-1:-1:-1;;;6234:67:0;;17899:2:1;6234:67:0;;;17881:21:1;17938:2;17918:18;;;17911:30;17977:34;17957:18;;;17950:62;-1:-1:-1;;;18028:18:1;;;18021:31;18069:19;;6234:67:0;17697:397:1;6234:67:0;-1:-1:-1;;;;;6337:18:0;;6312:22;6337:18;;;;;;;;;;;6374:24;;;;6366:71;;;;-1:-1:-1;;;6366:71:0;;18301:2:1;6366:71:0;;;18283:21:1;18340:2;18320:18;;;18313:30;18379:34;18359:18;;;18352:62;-1:-1:-1;;;18430:18:1;;;18423:32;18472:19;;6366:71:0;18099:398:1;6366:71:0;-1:-1:-1;;;;;6473:18:0;;:9;:18;;;;;;;;;;;6494:23;;;6473:44;;6612:12;:22;;;;;;;6663:37;1592:25:1;;;6473:9:0;;:18;6663:37;;1565:18:1;6663:37:0;1446:177:1;26473:472:0;26563:16;;;26577:1;26563:16;;;;;;;;26539:21;;26563:16;;;;;;;;;;-1:-1:-1;26563:16:0;26539:40;;26608:4;26590;26595:1;26590:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26590:23:0;;;:7;;;;;;;;;;:23;;;;26634:15;;:22;;;-1:-1:-1;;;26634:22:0;;;;:15;;;;;:20;;:22;;;;;26590:7;;26634:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26624:4;26629:1;26624:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26624:32:0;;;:7;;;;;;;;;:32;26699:15;;26667:62;;26684:4;;26699:15;26717:11;26667:8;:62::i;:::-;26740:15;;:197;;-1:-1:-1;;;26740:197:0;;-1:-1:-1;;;;;26740:15:0;;;;:66;;:197;;26821:11;;26740:15;;26864:4;;26891;;26911:15;;26740:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26528:417;26473:472;:::o;12919:368::-;13032:15;;13000:62;;13017:4;;-1:-1:-1;;;;;13032:15:0;13050:11;13000:8;:62::i;:::-;13073:15;;:206;;-1:-1:-1;;;13073:206:0;;13145:4;13073:206;;;20348:34:1;20398:18;;;20391:34;;;13073:15:0;20441:18:1;;;20434:34;;;20484:18;;;20477:34;13231:6:0;20527:19:1;;;20520:44;13253:15:0;20580:19:1;;;20573:35;-1:-1:-1;;;;;13073:15:0;;;;:31;;13112:9;;20282:19:1;;13073:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12919:368;;:::o;15207:217::-;-1:-1:-1;;;;;15320:24:0;;;;;;:16;:24;;;;;;;;;:37;;-1:-1:-1;;15320:37:0;;;;;;;;;;15373:43;;21098:51:1;;;21165:18;;;21158:50;15373:43:0;;21071:18:1;15373:43:0;;;;;;;15207:217;;:::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;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1628:456::-;1705:6;1713;1721;1774:2;1762:9;1753:7;1749:23;1745:32;1742:52;;;1790:1;1787;1780:12;1742:52;1829:9;1816:23;1848:31;1873:5;1848:31;:::i;:::-;1898:5;-1:-1:-1;1955:2:1;1940:18;;1927:32;1968:33;1927:32;1968:33;:::i;:::-;1628:456;;2020:7;;-1:-1:-1;;;2074:2:1;2059:18;;;;2046:32;;1628:456::o;2089:180::-;2148:6;2201:2;2189:9;2180:7;2176:23;2172:32;2169:52;;;2217:1;2214;2207:12;2169:52;-1:-1:-1;2240:23:1;;2089:180;-1:-1:-1;2089:180:1:o;2274:385::-;2360:6;2368;2376;2384;2437:3;2425:9;2416:7;2412:23;2408:33;2405:53;;;2454:1;2451;2444:12;2405:53;-1:-1:-1;;2477:23:1;;;2547:2;2532:18;;2519:32;;-1:-1:-1;2598:2:1;2583:18;;2570:32;;2649:2;2634:18;2621:32;;-1:-1:-1;2274:385:1;-1:-1:-1;2274:385:1:o;3061:247::-;3120:6;3173:2;3161:9;3152:7;3148:23;3144:32;3141:52;;;3189:1;3186;3179:12;3141:52;3228:9;3215:23;3247:31;3272:5;3247:31;:::i;3313:383::-;3390:6;3398;3406;3459:2;3447:9;3438:7;3434:23;3430:32;3427:52;;;3475:1;3472;3465:12;3427:52;3514:9;3501:23;3533:31;3558:5;3533:31;:::i;:::-;3583:5;3635:2;3620:18;;3607:32;;-1:-1:-1;3686:2:1;3671:18;;;3658:32;;3313:383;-1:-1:-1;;;3313:383:1:o;3701:416::-;3766:6;3774;3827:2;3815:9;3806:7;3802:23;3798:32;3795:52;;;3843:1;3840;3833:12;3795:52;3882:9;3869:23;3901:31;3926:5;3901:31;:::i;:::-;3951:5;-1:-1:-1;4008:2:1;3993:18;;3980:32;4050:15;;4043:23;4031:36;;4021:64;;4081:1;4078;4071:12;4021:64;4104:7;4094:17;;;3701:416;;;;;:::o;4122:388::-;4190:6;4198;4251:2;4239:9;4230:7;4226:23;4222:32;4219:52;;;4267:1;4264;4257:12;4219:52;4306:9;4293:23;4325:31;4350:5;4325:31;:::i;:::-;4375:5;-1:-1:-1;4432:2:1;4417:18;;4404:32;4445:33;4404:32;4445:33;:::i;4515:380::-;4594:1;4590:12;;;;4637;;;4658:61;;4712:4;4704:6;4700:17;4690:27;;4658:61;4765:2;4757:6;4754:14;4734:18;4731:38;4728:161;;4811:10;4806:3;4802:20;4799:1;4792:31;4846:4;4843:1;4836:15;4874:4;4871:1;4864:15;4728:161;;4515:380;;;:::o;5309:356::-;5511:2;5493:21;;;5530:18;;;5523:30;5589:34;5584:2;5569:18;;5562:62;5656:2;5641:18;;5309:356::o;5670:127::-;5731:10;5726:3;5722:20;5719:1;5712:31;5762:4;5759:1;5752:15;5786:4;5783:1;5776:15;5802:168;5875:9;;;5906;;5923:15;;;5917:22;;5903:37;5893:71;;5944:18;;:::i;5975:217::-;6015:1;6041;6031:132;;6085:10;6080:3;6076:20;6073:1;6066:31;6120:4;6117:1;6110:15;6148:4;6145:1;6138:15;6031:132;-1:-1:-1;6177:9:1;;5975:217::o;6607:125::-;6672:9;;;6693:10;;;6690:36;;;6706:18;;:::i;13282:401::-;13484:2;13466:21;;;13523:2;13503:18;;;13496:30;13562:34;13557:2;13542:18;;13535:62;-1:-1:-1;;;13628:2:1;13613:18;;13606:35;13673:3;13658:19;;13282:401::o;13688:399::-;13890:2;13872:21;;;13929:2;13909:18;;;13902:30;13968:34;13963:2;13948:18;;13941:62;-1:-1:-1;;;14034:2:1;14019:18;;14012:33;14077:3;14062:19;;13688:399::o;15205:128::-;15272:9;;;15293:11;;;15290:37;;;15307:18;;:::i;18634:127::-;18695:10;18690:3;18686:20;18683:1;18676:31;18726:4;18723:1;18716:15;18750:4;18747:1;18740:15;18766:251;18836:6;18889:2;18877:9;18868:7;18864:23;18860:32;18857:52;;;18905:1;18902;18895:12;18857:52;18937:9;18931:16;18956:31;18981:5;18956:31;:::i;19022:980::-;19284:4;19332:3;19321:9;19317:19;19363:6;19352:9;19345:25;19389:2;19427:6;19422:2;19411:9;19407:18;19400:34;19470:3;19465:2;19454:9;19450:18;19443:31;19494:6;19529;19523:13;19560:6;19552;19545:22;19598:3;19587:9;19583:19;19576:26;;19637:2;19629:6;19625:15;19611:29;;19658:1;19668:195;19682:6;19679:1;19676:13;19668:195;;;19747:13;;-1:-1:-1;;;;;19743:39:1;19731:52;;19838:15;;;;19803:12;;;;19779:1;19697:9;19668:195;;;-1:-1:-1;;;;;;;19919:32:1;;;;19914:2;19899:18;;19892:60;-1:-1:-1;;;19983:3:1;19968:19;19961:35;19880:3;19022:980;-1:-1:-1;;;19022:980:1:o;20619:306::-;20707:6;20715;20723;20776:2;20764:9;20755:7;20751:23;20747:32;20744:52;;;20792:1;20789;20782:12;20744:52;20821:9;20815:16;20805:26;;20871:2;20860:9;20856:18;20850:25;20840:35;;20915:2;20904:9;20900:18;20894:25;20884:35;;20619:306;;;;;:::o

Swarm Source

ipfs://de649f49d1f21389cefdd70934a9a22782981590c502362d7fca17c4f0766e17

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.