ETH Price: $2,940.30 (-4.15%)
Gas: 1 Gwei

Token

Chadz N The Hood (CHADZ)
 

Overview

Max Total Supply

1,000,000,000 CHADZ

Holders

38

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000000001 CHADZ

Value
$0.00
0x5e12d7ab0c6822e2647208997cad6eea1f7ffaf4
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Chadz

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : Chadz.sol
// SPDX-License-Identifier: MIT
/*
https://t.me/ChadzPortal
https://chadz.xyz
*/

pragma solidity ^0.8.15;

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IERC20Metadata is IERC20 {
    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);
    }
}

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

    function WETH() external pure returns (address);

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

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

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

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

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

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address operationsAddress;
    address devAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping(address => bool) public boughtEarly;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyBurnFee;

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

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForBurn;

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

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

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

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event BuyBackTriggered(uint256 amount);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

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

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("Chadz N The Hood", "CHADZ") {
        address newOwner = msg.sender; // can leave alone if owner is deployer.

        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        dexRouter = _dexRouter;

        // create pair
        lpPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 1 * 1e9 * 1e18;

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

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

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

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

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

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

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

    receive() external payable {}

    // only enable if no plan to airdrop

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

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

    function manageBoughtEarly(address wallet, bool flag) external onlyOwner {
        boughtEarly[wallet] = flag;
    }

    function massManageBoughtEarly(address[] calldata wallets, bool flag)
        external
        onlyOwner
    {
        for (uint256 i = 0; i < wallets.length; i++) {
            boughtEarly[wallets[i]] = flag;
        }
    }

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

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

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

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

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

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

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

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

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

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

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

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

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

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

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

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

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

        if (blockForPenaltyEnd > 0) {
            require(
                !boughtEarly[from] || to == owner() || to == address(0xdead),
                "Bots cannot transfer tokens in or out except to owner or dead address."
            );
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (to != address(dexRouter) && to != address(lpPair)) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer:: Transfer Delay enabled.  Try again later."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // bot/sniper penalty.
            if (
                earlyBuyPenaltyInEffect() &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                buyTotalFees > 0
            ) {
                if (!boughtEarly[to]) {
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    emit CaughtEarlyBuyer(to);
                }

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

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

            amount -= fees;
        }

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

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

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

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

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

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

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

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

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

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

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

        bool success;

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = (ethBalance * tokensForOperations) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        uint256 ethForDev = (ethBalance * tokensForDev) /
            (totalTokensToSwap - (tokensForLiquidity / 2));

        ethForLiquidity -= ethForOperations + ethForDev;

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

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

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

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

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

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

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

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

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

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

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

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

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInWei","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"deadBlocks","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"manageBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"massManageBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"returnToNormalTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040525f600e556012805462ffffff191660019081179091556014805460ff1916909117905534801562000033575f80fd5b506040518060400160405280601081526020016f10da18591e881388151a1948121bdbd960821b8152506040518060400160405280600581526020016421a420a22d60d91b81525081600390816200008c91906200083f565b5060046200009b82826200083f565b5050505f620000af6200044760201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f905f80516020620046e7833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000152573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000178919062000907565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001ea919062000907565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000235573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200025b919062000907565b600a80546001600160a01b0319166001600160a01b03929092169182179055620002879060016200044b565b600a54620002a0906001600160a01b03166001620004ad565b6b033b2e3c9fd0803ce80000006064620002bc8260026200094a565b620002c891906200096a565b6006556064620002da8260026200094a565b620002e691906200096a565b6007556064620002f88260026200094a565b6200030491906200096a565b600855612710620003178260056200094a565b6200032391906200096a565b600b55601460168190555f6017819055601881905560198190559081906200034d9082906200098a565b6200035991906200098a565b6200036591906200098a565b6015556014601b8190555f601c819055601d819055601e8190559081906200038f9082906200098a565b6200039b91906200098a565b620003a791906200098a565b601a55620003b78360016200044b565b620003c43060016200044b565b620003d361dead60016200044b565b620003e083600162000517565b620003ed30600162000517565b620003fc61dead600162000517565b600c80546001600160a01b0385166001600160a01b03199182168117909255600d80549091169091179055620004338382620005c3565b6200043e83620006a5565b505050620009a0565b3390565b6001600160a01b0382165f81815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382165f908152602560205260409020805460ff1916821515179055620004dc82826200044b565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b6005546001600160a01b03163314620005655760405162461bcd60e51b815260206004820181905260248201525f80516020620046c783398151915260448201526064015b60405180910390fd5b6001600160a01b0382165f81815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200061b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200055c565b8060025f8282546200062e91906200098a565b90915550506001600160a01b0382165f90815260208190526040812080548392906200065c9084906200098a565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006ef5760405162461bcd60e51b815260206004820181905260248201525f80516020620046c783398151915260448201526064016200055c565b6001600160a01b038116620007565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200055c565b6005546040516001600160a01b038084169216905f80516020620046e7833981519152905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620007c857607f821691505b602082108103620007e757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200083a575f81815260208120601f850160051c81016020861015620008155750805b601f850160051c820191505b81811015620008365782815560010162000821565b5050505b505050565b81516001600160401b038111156200085b576200085b6200079f565b62000873816200086c8454620007b3565b84620007ed565b602080601f831160018114620008a9575f8415620008915750858301515b5f19600386901b1c1916600185901b17855562000836565b5f85815260208120601f198616915b82811015620008d957888601518255948401946001909101908401620008b8565b5085821015620008f757878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6020828403121562000918575f80fd5b81516001600160a01b03811681146200092f575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141762000964576200096462000936565b92915050565b5f826200098557634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111562000964576200096462000936565b613d1980620009ae5f395ff3fe6080604052600436106103d7575f3560e01c80638da5cb5b116101ff578063d257b34f11610113578063e800dff7116100a8578063f2fde38b11610078578063f2fde38b14610ace578063f5648a4f14610aed578063f637434214610b01578063fb002c9714610b16578063fc155d1d14610b2b575f80fd5b8063e800dff714610a71578063e884f26014610a90578063ee40166e14610aa4578063f11a24d314610ab9575f80fd5b8063e2cd5fcd116100e3578063e2cd5fcd14610a14578063e2f4560514610a28578063e71dc3f514610a3d578063e7ad9fcd14610a52575f80fd5b8063d257b34f1461097d578063d85ba0631461099c578063dc3f0d0f146109b1578063dd62ed3e146109d0575f80fd5b8063a9059cbb11610194578063bbc0c74211610164578063bbc0c742146108e9578063c024666814610907578063c18bc19514610926578063c876d0b914610945578063d0d41fe11461095e575f80fd5b8063a9059cbb14610872578063aa4bde2814610891578063adb873bd146108a6578063b62496f5146108bb575f80fd5b80639fccce32116101cf5780639fccce3214610814578063a0d82dc514610829578063a457c2d71461083e578063a62068ce1461085d575f80fd5b80638da5cb5b146107af57806395d89b41146107cc5780639a7a23d6146107e05780639c3b4fdc146107ff575f80fd5b80634a62bb65116102f65780636ddd17131161028b5780637571336a1161025b5780637571336a1461070f57806382aa7c681461072e5780638366e79a1461074d57806385ecfd281461076c57806388e765ff1461079a575f80fd5b80636ddd1713146106a957806370a08231146106c8578063715018a6146106e7578063751039fc146106fb575f80fd5b80635a139dd4116102c65780635a139dd41461065557806366d602ae1461066a5780636a486a8e1461067f5780636b0a894c14610694575f80fd5b80634a62bb65146105fd5780634f77f6c01461061657806351f205e41461062b57806358a6d5311461063f575f80fd5b80632307b4411161036c578063313ce5671161033c578063313ce5671461058557806339509351146105a0578063452ed4f1146105bf578063499b8394146105de575f80fd5b80632307b4411461050957806323b872dd146105285780632be32b61146105475780632e6ed7ef14610566575f80fd5b8063130a2c3c116103a7578063130a2c3c146104a057806318160ddd146104c15780631a8145bb146104df5780631d777856146104f4575f80fd5b806306fdde03146103e25780630758d9241461040c578063095ea7b31461044357806310d5de5314610472575f80fd5b366103de57005b5f80fd5b3480156103ed575f80fd5b506103f6610b4a565b604051610403919061367c565b60405180910390f35b348015610417575f80fd5b5060095461042b906001600160a01b031681565b6040516001600160a01b039091168152602001610403565b34801561044e575f80fd5b5061046261045d3660046136de565b610bda565b6040519015158152602001610403565b34801561047d575f80fd5b5061046261048c366004613708565b60246020525f908152604090205460ff1681565b3480156104ab575f80fd5b506104bf6104ba366004613737565b610bf0565b005b3480156104cc575f80fd5b506002545b604051908152602001610403565b3480156104ea575f80fd5b506104d160205481565b3480156104ff575f80fd5b506104d160225481565b348015610514575f80fd5b506104bf610523366004613886565b610c97565b348015610533575f80fd5b50610462610542366004613942565b610ded565b348015610552575f80fd5b506104bf610561366004613980565b610e95565b348015610571575f80fd5b506104bf610580366004613997565b610fa2565b348015610590575f80fd5b5060405160128152602001610403565b3480156105ab575f80fd5b506104626105ba3660046136de565b611055565b3480156105ca575f80fd5b50600a5461042b906001600160a01b031681565b3480156105e9575f80fd5b506104bf6105f8366004613708565b611090565b348015610608575f80fd5b506012546104629060ff1681565b348015610621575f80fd5b506104d1601b5481565b348015610636575f80fd5b506104bf611141565b34801561064a575f80fd5b50600f544310610462565b348015610660575f80fd5b506104d160165481565b348015610675575f80fd5b506104d160075481565b34801561068a575f80fd5b506104d1601a5481565b34801561069f575f80fd5b506104d160115481565b3480156106b4575f80fd5b506012546104629062010000900460ff1681565b3480156106d3575f80fd5b506104d16106e2366004613708565b61124a565b3480156106f2575f80fd5b506104bf611264565b348015610706575f80fd5b506104bf6112d7565b34801561071a575f80fd5b506104bf6107293660046139c6565b611341565b348015610739575f80fd5b506104bf610748366004613980565b611408565b348015610758575f80fd5b506104626107673660046139fd565b6114da565b348015610777575f80fd5b50610462610786366004613708565b60106020525f908152604090205460ff1681565b3480156107a5575f80fd5b506104d160065481565b3480156107ba575f80fd5b506005546001600160a01b031661042b565b3480156107d7575f80fd5b506103f66116dc565b3480156107eb575f80fd5b506104bf6107fa3660046139c6565b6116eb565b34801561080a575f80fd5b506104d160185481565b34801561081f575f80fd5b506104d160215481565b348015610834575f80fd5b506104d1601d5481565b348015610849575f80fd5b506104626108583660046136de565b6117de565b348015610868575f80fd5b506104d1600f5481565b34801561087d575f80fd5b5061046261088c3660046136de565b611876565b34801561089c575f80fd5b506104d160085481565b3480156108b1575f80fd5b506104d1601e5481565b3480156108c6575f80fd5b506104626108d5366004613708565b60256020525f908152604090205460ff1681565b3480156108f4575f80fd5b5060125461046290610100900460ff1681565b348015610912575f80fd5b506104bf6109213660046139c6565b611882565b348015610931575f80fd5b506104bf610940366004613980565b61190a565b348015610950575f80fd5b506014546104629060ff1681565b348015610969575f80fd5b506104bf610978366004613708565b611a13565b348015610988575f80fd5b506104bf610997366004613980565b611ab5565b3480156109a7575f80fd5b506104d160155481565b3480156109bc575f80fd5b506104bf6109cb366004613980565b611c00565b3480156109db575f80fd5b506104d16109ea3660046139fd565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610a1f575f80fd5b506104bf611d07565b348015610a33575f80fd5b506104d1600b5481565b348015610a48575f80fd5b506104d160195481565b348015610a5d575f80fd5b506104bf610a6c366004613997565b611e4f565b348015610a7c575f80fd5b506104bf610a8b3660046139c6565b611f02565b348015610a9b575f80fd5b506104bf611f56565b348015610aaf575f80fd5b506104d1600e5481565b348015610ac4575f80fd5b506104d160175481565b348015610ad9575f80fd5b506104bf610ae8366004613708565b611f8c565b348015610af8575f80fd5b506104bf612076565b348015610b0c575f80fd5b506104d1601c5481565b348015610b21575f80fd5b506104d1601f5481565b348015610b36575f80fd5b506104bf610b45366004613980565b6120df565b606060038054610b5990613a29565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8590613a29565b8015610bd05780601f10610ba757610100808354040283529160200191610bd0565b820191905f5260205f20905b815481529060010190602001808311610bb357829003601f168201915b5050505050905090565b5f610be633848461231a565b5060015b92915050565b6005546001600160a01b03163314610c235760405162461bcd60e51b8152600401610c1a90613a61565b60405180910390fd5b5f5b82811015610c91578160105f868685818110610c4357610c43613a96565b9050602002016020810190610c589190613708565b6001600160a01b0316815260208101919091526040015f20805460ff191691151591909117905580610c8981613abe565b915050610c25565b50505050565b6005546001600160a01b03163314610cc15760405162461bcd60e51b8152600401610c1a90613a61565b8051825114610d125760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610c1a565b610258825110610d835760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610c1a565b5f5b8251811015610de8575f838281518110610da157610da1613a96565b602002602001015190505f838381518110610dbe57610dbe613a96565b60200260200101519050610dd333838361243e565b50508080610de090613abe565b915050610d85565b505050565b5f610df9848484612591565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610e7d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c1a565b610e8a853385840361231a565b506001949350505050565b6005546001600160a01b03163314610ebf5760405162461bcd60e51b8152600401610c1a90613a61565b670de0b6b3a76400006103e8610ed460025490565b610edf906002613ad6565b610ee99190613aed565b610ef39190613aed565b811015610f545760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c1a565b610f6681670de0b6b3a7640000613ad6565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610fcc5760405162461bcd60e51b8152600401610c1a90613a61565b60168490556017839055601882905560198190558082610fec8587613b0c565b610ff69190613b0c565b6110009190613b0c565b601581905560141015610c915760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610c1a565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610be691859061108b908690613b0c565b61231a565b6005546001600160a01b031633146110ba5760405162461bcd60e51b8152600401610c1a90613a61565b6001600160a01b03811661111f5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610c1a565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461116b5760405162461bcd60e51b8152600401610c1a90613a61565b600b546111773061124a565b10156111ed576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610c1a565b600a805460ff60a01b1916600160a01b17905561120861309c565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b0316331461128e5760405162461bcd60e51b8152600401610c1a90613a61565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146113015760405162461bcd60e51b8152600401610c1a90613a61565b6012805460ff199081169091556014805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a1565b6005546001600160a01b0316331461136b5760405162461bcd60e51b8152600401610c1a90613a61565b806113de57600a546001600160a01b03908116908316036113de5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c1a565b6001600160a01b03919091165f908152602460205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114325760405162461bcd60e51b8152600401610c1a90613a61565b601254610100900460ff161561148a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c1a565b6012805462ffff0019166201010017905543600e8190556114ac908290613b0c565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb7905f90a150565b6005545f906001600160a01b031633146115065760405162461bcd60e51b8152600401610c1a90613a61565b6001600160a01b03831661155c5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c1a565b306001600160a01b038416036115b45760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c1a565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa1580156115f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061161c9190613b1f565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303815f875af115801561166c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116909190613b36565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610b5990613a29565b6005546001600160a01b031633146117155760405162461bcd60e51b8152600401610c1a90613a61565b600a546001600160a01b03908116908316036117995760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c1a565b6117a382826132cd565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b335f9081526001602090815260408083206001600160a01b03861684529091528120548281101561185f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c1a565b61186c338585840361231a565b5060019392505050565b5f610be6338484612591565b6005546001600160a01b031633146118ac5760405162461bcd60e51b8152600401610c1a90613a61565b6001600160a01b0382165f81815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146119345760405162461bcd60e51b8152600401610c1a90613a61565b670de0b6b3a76400006103e861194960025490565b611954906003613ad6565b61195e9190613aed565b6119689190613aed565b8110156119cc5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c1a565b6119de81670de0b6b3a7640000613ad6565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f97565b6005546001600160a01b03163314611a3d5760405162461bcd60e51b8152600401610c1a90613a61565b6001600160a01b038116611a935760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610c1a565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611adf5760405162461bcd60e51b8152600401610c1a90613a61565b620186a0611aec60025490565b611af7906001613ad6565b611b019190613aed565b811015611b6e5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c1a565b6103e8611b7a60025490565b611b85906001613ad6565b611b8f9190613aed565b811115611bfb5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c1a565b600b55565b6005546001600160a01b03163314611c2a5760405162461bcd60e51b8152600401610c1a90613a61565b670de0b6b3a76400006103e8611c3f60025490565b611c4a906002613ad6565b611c549190613aed565b611c5e9190613aed565b811015611cc05760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c1a565b611cd281670de0b6b3a7640000613ad6565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f97565b6005546001600160a01b03163314611d315760405162461bcd60e51b8152600401610c1a90613a61565b6014601b8190555f601c819055601d819055601e819055908190611d56908290613b0c565b611d609190613b0c565b611d6a9190613b0c565b601a819055600a1015611dbf5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610c1a565b601460168190555f601781905560188190556019819055908190611de4908290613b0c565b611dee9190613b0c565b611df89190613b0c565b6015819055600a1015611e4d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610c1a565b565b6005546001600160a01b03163314611e795760405162461bcd60e51b8152600401610c1a90613a61565b601b849055601c839055601d829055601e8190558082611e998587613b0c565b611ea39190613b0c565b611ead9190613b0c565b601a81905560141015610c915760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610c1a565b6005546001600160a01b03163314611f2c5760405162461bcd60e51b8152600401610c1a90613a61565b6001600160a01b03919091165f908152601060205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611f805760405162461bcd60e51b8152600401610c1a90613a61565b6014805460ff19169055565b6005546001600160a01b03163314611fb65760405162461bcd60e51b8152600401610c1a90613a61565b6001600160a01b03811661201b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c1a565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146120a05760405162461bcd60e51b8152600401610c1a90613a61565b6040515f90339047908381818185875af1925050503d805f8114610c91576040519150601f19603f3d011682016040523d82523d5f602084013e610c91565b6005546001600160a01b031633146121095760405162461bcd60e51b8152600401610c1a90613a61565b678ac7230489e800008111156121975760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610c1a565b6040805160028082526060820183525f926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156121fe573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122229190613b51565b815f8151811061223457612234613a96565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061226857612268613a96565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906122af905f90869061dead904290600401613bae565b5f604051808303818588803b1580156122c6575f80fd5b505af11580156122d8573d5f803e3d5ffd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205688260405161230e91815260200190565b60405180910390a15050565b6001600160a01b03831661237c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c1a565b6001600160a01b0382166123dd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c1a565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166124645760405162461bcd60e51b8152600401610c1a90613be2565b6001600160a01b03821661248a5760405162461bcd60e51b8152600401610c1a90613c27565b6001600160a01b0383165f90815260208190526040902054818110156125015760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c1a565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290612537908490613b0c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161258391815260200190565b60405180910390a350505050565b6001600160a01b0383166125b75760405162461bcd60e51b8152600401610c1a90613be2565b6001600160a01b0382166125dd5760405162461bcd60e51b8152600401610c1a90613c27565b5f811161262c5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c1a565b601254610100900460ff166126bd576001600160a01b0383165f9081526023602052604090205460ff168061267857506001600160a01b0382165f9081526023602052604090205460ff165b6126bd5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c1a565b600f541561278f576001600160a01b0383165f9081526010602052604090205460ff1615806126f957506005546001600160a01b038381169116145b8061270e57506001600160a01b03821661dead145b61278f5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610c1a565b60125460ff1615612b81576005546001600160a01b038481169116148015906127c657506005546001600160a01b03838116911614155b80156127da57506001600160a01b03821615155b80156127f157506001600160a01b03821661dead14155b801561281557506001600160a01b0383165f9081526023602052604090205460ff16155b801561283957506001600160a01b0382165f9081526023602052604090205460ff16155b15612b815760145460ff161561294f576009546001600160a01b038381169116148015906128755750600a546001600160a01b03838116911614155b1561294f57612885600243613c6a565b325f908152601360205260409020541080156128c157506128a7600243613c6a565b6001600160a01b0383165f90815260136020526040902054105b61292b5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c1a565b325f9081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383165f9081526025602052604090205460ff16801561298e57506001600160a01b0382165f9081526024602052604090205460ff16155b15612a5a576006548111156129f65760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c1a565b600854612a028361124a565b612a0c9083613b0c565b1115612a555760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c1a565b612b81565b6001600160a01b0382165f9081526025602052604090205460ff168015612a9957506001600160a01b0383165f9081526024602052604090205460ff16155b15612b0357600754811115612a555760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c1a565b6001600160a01b0382165f9081526024602052604090205460ff16612b8157600854612b2e8361124a565b612b389083613b0c565b1115612b815760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c1a565b5f612b8b3061124a565b600b5490915081108015908190612baa575060125462010000900460ff165b8015612bc05750600a54600160a01b900460ff16155b8015612be457506001600160a01b0385165f9081526025602052604090205460ff16155b8015612c0857506001600160a01b0385165f9081526023602052604090205460ff16155b8015612c2c57506001600160a01b0384165f9081526023602052604090205460ff16155b15612c5a57600a805460ff60a01b1916600160a01b179055612c4c61309c565b600a805460ff60a01b191690555b6001600160a01b0385165f9081526023602052604090205460019060ff1680612c9a57506001600160a01b0385165f9081526023602052604090205460ff165b15612ca257505f5b5f811561308857600f5443108015612cd157506001600160a01b0387165f9081526025602052604090205460ff165b8015612cf557506001600160a01b0386165f9081526025602052604090205460ff16155b8015612d0257505f601554115b15612e7c576001600160a01b0386165f9081526010602052604090205460ff16612da0576001600160a01b0386165f908152601060205260408120805460ff191660019081179091556011805491929091612d5e908490613b0c565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612dad866063613ad6565b612db79190613aed565b905060155460175482612dca9190613ad6565b612dd49190613aed565b60205f828254612de49190613b0c565b9091555050601554601654612df99083613ad6565b612e039190613aed565b601f5f828254612e139190613b0c565b9091555050601554601854612e289083613ad6565b612e329190613aed565b60215f828254612e429190613b0c565b9091555050601554601954612e579083613ad6565b612e619190613aed565b60225f828254612e719190613b0c565b9091555061306a9050565b6001600160a01b0386165f9081526025602052604090205460ff168015612ea457505f601a54115b15612f63576064601a5486612eb99190613ad6565b612ec39190613aed565b9050601a54601c5482612ed69190613ad6565b612ee09190613aed565b60205f828254612ef09190613b0c565b9091555050601a54601b54612f059083613ad6565b612f0f9190613aed565b601f5f828254612f1f9190613b0c565b9091555050601a54601d54612f349083613ad6565b612f3e9190613aed565b60215f828254612f4e9190613b0c565b9091555050601a54601e54612e579083613ad6565b6001600160a01b0387165f9081526025602052604090205460ff168015612f8b57505f601554115b1561306a57606460155486612fa09190613ad6565b612faa9190613aed565b905060155460175482612fbd9190613ad6565b612fc79190613aed565b60205f828254612fd79190613b0c565b9091555050601554601654612fec9083613ad6565b612ff69190613aed565b601f5f8282546130069190613b0c565b909155505060155460185461301b9083613ad6565b6130259190613aed565b60215f8282546130359190613b0c565b909155505060155460195461304a9083613ad6565b6130549190613aed565b60225f8282546130649190613b0c565b90915550505b801561307b5761307b87308361243e565b6130858186613c6a565b94505b61309387878761243e565b50505050505050565b5f6022541180156130b757506022546130b43061124a565b10155b156130c8576130c8306022546132fa565b5f60228190556130d73061124a565b90505f602154601f546020546130ed9190613b0c565b6130f79190613b0c565b9050811580613104575080155b1561310d575050565b600b5461311b906014613ad6565b82111561313357600b54613130906014613ad6565b91505b5f80600283602054866131469190613ad6565b6131509190613aed565b61315a9190613aed565b905061316e6131698286613c6a565b613422565b602054479081905f9061318390600290613aed565b61318d9087613c6a565b601f5461319a9085613ad6565b6131a49190613aed565b90505f60026020546131b69190613aed565b6131c09088613c6a565b6021546131cd9086613ad6565b6131d79190613aed565b90506131e38183613b0c565b6131ed9084613c6a565b5f6020819055601f81905560218190556022559250841580159061321057505f83115b1561321f5761321f8584613572565b600d546040516001600160a01b039091169082905f81818185875af1925050503d805f8114613269576040519150601f19603f3d011682016040523d82523d5f602084013e61326e565b606091505b5050600c546040519197506001600160a01b03169047905f81818185875af1925050503d805f81146132bb576040519150601f19603f3d011682016040523d82523d5f602084013e6132c0565b606091505b5050505050505050505050565b6001600160a01b0382165f908152602560205260409020805460ff19168215151790556117a38282613621565b6001600160a01b03821661335a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c1a565b6001600160a01b0382165f90815260208190526040902054818110156133cd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c1a565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612431565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061345557613455613a96565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156134ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134d09190613b51565b816001815181106134e3576134e3613a96565b6001600160a01b039283166020918202929092010152600954613509913091168461231a565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906135419085905f90869030904290600401613c7d565b5f604051808303815f87803b158015613558575f80fd5b505af115801561356a573d5f803e3d5ffd5b505050505050565b60095461358a9030906001600160a01b03168461231a565b60095460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156135f5573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061361a9190613cb8565b5050505050565b6001600160a01b0382165f81815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910161230e565b5f6020808352835180828501525f5b818110156136a75785810183015185820160400152820161368b565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146136db575f80fd5b50565b5f80604083850312156136ef575f80fd5b82356136fa816136c7565b946020939093013593505050565b5f60208284031215613718575f80fd5b8135613723816136c7565b9392505050565b80151581146136db575f80fd5b5f805f60408486031215613749575f80fd5b833567ffffffffffffffff80821115613760575f80fd5b818601915086601f830112613773575f80fd5b813581811115613781575f80fd5b8760208260051b8501011115613795575f80fd5b602092830195509350508401356137ab8161372a565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156137f3576137f36137b6565b604052919050565b5f67ffffffffffffffff821115613814576138146137b6565b5060051b60200190565b5f82601f83011261382d575f80fd5b8135602061384261383d836137fb565b6137ca565b82815260059290921b84018101918181019086841115613860575f80fd5b8286015b8481101561387b5780358352918301918301613864565b509695505050505050565b5f8060408385031215613897575f80fd5b823567ffffffffffffffff808211156138ae575f80fd5b818501915085601f8301126138c1575f80fd5b813560206138d161383d836137fb565b82815260059290921b840181019181810190898411156138ef575f80fd5b948201945b83861015613916578535613907816136c7565b825294820194908201906138f4565b9650508601359250508082111561392b575f80fd5b506139388582860161381e565b9150509250929050565b5f805f60608486031215613954575f80fd5b833561395f816136c7565b9250602084013561396f816136c7565b929592945050506040919091013590565b5f60208284031215613990575f80fd5b5035919050565b5f805f80608085870312156139aa575f80fd5b5050823594602084013594506040840135936060013592509050565b5f80604083850312156139d7575f80fd5b82356139e2816136c7565b915060208301356139f28161372a565b809150509250929050565b5f8060408385031215613a0e575f80fd5b8235613a19816136c7565b915060208301356139f2816136c7565b600181811c90821680613a3d57607f821691505b602082108103613a5b57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f60018201613acf57613acf613aaa565b5060010190565b8082028115828204841417610bea57610bea613aaa565b5f82613b0757634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610bea57610bea613aaa565b5f60208284031215613b2f575f80fd5b5051919050565b5f60208284031215613b46575f80fd5b81516137238161372a565b5f60208284031215613b61575f80fd5b8151613723816136c7565b5f8151808452602080850194508084015f5b83811015613ba35781516001600160a01b031687529582019590820190600101613b7e565b509495945050505050565b848152608060208201525f613bc66080830186613b6c565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bea57610bea613aaa565b85815284602082015260a060408201525f613c9b60a0830186613b6c565b6001600160a01b0394909416606083015250608001529392505050565b5f805f60608486031215613cca575f80fd5b835192506020840151915060408401519050925092509256fea26469706673582212203af8cbee5f759502985368035777d1602a94584f1e9a03353455a03fa9f06c5264736f6c634300081400334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103d7575f3560e01c80638da5cb5b116101ff578063d257b34f11610113578063e800dff7116100a8578063f2fde38b11610078578063f2fde38b14610ace578063f5648a4f14610aed578063f637434214610b01578063fb002c9714610b16578063fc155d1d14610b2b575f80fd5b8063e800dff714610a71578063e884f26014610a90578063ee40166e14610aa4578063f11a24d314610ab9575f80fd5b8063e2cd5fcd116100e3578063e2cd5fcd14610a14578063e2f4560514610a28578063e71dc3f514610a3d578063e7ad9fcd14610a52575f80fd5b8063d257b34f1461097d578063d85ba0631461099c578063dc3f0d0f146109b1578063dd62ed3e146109d0575f80fd5b8063a9059cbb11610194578063bbc0c74211610164578063bbc0c742146108e9578063c024666814610907578063c18bc19514610926578063c876d0b914610945578063d0d41fe11461095e575f80fd5b8063a9059cbb14610872578063aa4bde2814610891578063adb873bd146108a6578063b62496f5146108bb575f80fd5b80639fccce32116101cf5780639fccce3214610814578063a0d82dc514610829578063a457c2d71461083e578063a62068ce1461085d575f80fd5b80638da5cb5b146107af57806395d89b41146107cc5780639a7a23d6146107e05780639c3b4fdc146107ff575f80fd5b80634a62bb65116102f65780636ddd17131161028b5780637571336a1161025b5780637571336a1461070f57806382aa7c681461072e5780638366e79a1461074d57806385ecfd281461076c57806388e765ff1461079a575f80fd5b80636ddd1713146106a957806370a08231146106c8578063715018a6146106e7578063751039fc146106fb575f80fd5b80635a139dd4116102c65780635a139dd41461065557806366d602ae1461066a5780636a486a8e1461067f5780636b0a894c14610694575f80fd5b80634a62bb65146105fd5780634f77f6c01461061657806351f205e41461062b57806358a6d5311461063f575f80fd5b80632307b4411161036c578063313ce5671161033c578063313ce5671461058557806339509351146105a0578063452ed4f1146105bf578063499b8394146105de575f80fd5b80632307b4411461050957806323b872dd146105285780632be32b61146105475780632e6ed7ef14610566575f80fd5b8063130a2c3c116103a7578063130a2c3c146104a057806318160ddd146104c15780631a8145bb146104df5780631d777856146104f4575f80fd5b806306fdde03146103e25780630758d9241461040c578063095ea7b31461044357806310d5de5314610472575f80fd5b366103de57005b5f80fd5b3480156103ed575f80fd5b506103f6610b4a565b604051610403919061367c565b60405180910390f35b348015610417575f80fd5b5060095461042b906001600160a01b031681565b6040516001600160a01b039091168152602001610403565b34801561044e575f80fd5b5061046261045d3660046136de565b610bda565b6040519015158152602001610403565b34801561047d575f80fd5b5061046261048c366004613708565b60246020525f908152604090205460ff1681565b3480156104ab575f80fd5b506104bf6104ba366004613737565b610bf0565b005b3480156104cc575f80fd5b506002545b604051908152602001610403565b3480156104ea575f80fd5b506104d160205481565b3480156104ff575f80fd5b506104d160225481565b348015610514575f80fd5b506104bf610523366004613886565b610c97565b348015610533575f80fd5b50610462610542366004613942565b610ded565b348015610552575f80fd5b506104bf610561366004613980565b610e95565b348015610571575f80fd5b506104bf610580366004613997565b610fa2565b348015610590575f80fd5b5060405160128152602001610403565b3480156105ab575f80fd5b506104626105ba3660046136de565b611055565b3480156105ca575f80fd5b50600a5461042b906001600160a01b031681565b3480156105e9575f80fd5b506104bf6105f8366004613708565b611090565b348015610608575f80fd5b506012546104629060ff1681565b348015610621575f80fd5b506104d1601b5481565b348015610636575f80fd5b506104bf611141565b34801561064a575f80fd5b50600f544310610462565b348015610660575f80fd5b506104d160165481565b348015610675575f80fd5b506104d160075481565b34801561068a575f80fd5b506104d1601a5481565b34801561069f575f80fd5b506104d160115481565b3480156106b4575f80fd5b506012546104629062010000900460ff1681565b3480156106d3575f80fd5b506104d16106e2366004613708565b61124a565b3480156106f2575f80fd5b506104bf611264565b348015610706575f80fd5b506104bf6112d7565b34801561071a575f80fd5b506104bf6107293660046139c6565b611341565b348015610739575f80fd5b506104bf610748366004613980565b611408565b348015610758575f80fd5b506104626107673660046139fd565b6114da565b348015610777575f80fd5b50610462610786366004613708565b60106020525f908152604090205460ff1681565b3480156107a5575f80fd5b506104d160065481565b3480156107ba575f80fd5b506005546001600160a01b031661042b565b3480156107d7575f80fd5b506103f66116dc565b3480156107eb575f80fd5b506104bf6107fa3660046139c6565b6116eb565b34801561080a575f80fd5b506104d160185481565b34801561081f575f80fd5b506104d160215481565b348015610834575f80fd5b506104d1601d5481565b348015610849575f80fd5b506104626108583660046136de565b6117de565b348015610868575f80fd5b506104d1600f5481565b34801561087d575f80fd5b5061046261088c3660046136de565b611876565b34801561089c575f80fd5b506104d160085481565b3480156108b1575f80fd5b506104d1601e5481565b3480156108c6575f80fd5b506104626108d5366004613708565b60256020525f908152604090205460ff1681565b3480156108f4575f80fd5b5060125461046290610100900460ff1681565b348015610912575f80fd5b506104bf6109213660046139c6565b611882565b348015610931575f80fd5b506104bf610940366004613980565b61190a565b348015610950575f80fd5b506014546104629060ff1681565b348015610969575f80fd5b506104bf610978366004613708565b611a13565b348015610988575f80fd5b506104bf610997366004613980565b611ab5565b3480156109a7575f80fd5b506104d160155481565b3480156109bc575f80fd5b506104bf6109cb366004613980565b611c00565b3480156109db575f80fd5b506104d16109ea3660046139fd565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610a1f575f80fd5b506104bf611d07565b348015610a33575f80fd5b506104d1600b5481565b348015610a48575f80fd5b506104d160195481565b348015610a5d575f80fd5b506104bf610a6c366004613997565b611e4f565b348015610a7c575f80fd5b506104bf610a8b3660046139c6565b611f02565b348015610a9b575f80fd5b506104bf611f56565b348015610aaf575f80fd5b506104d1600e5481565b348015610ac4575f80fd5b506104d160175481565b348015610ad9575f80fd5b506104bf610ae8366004613708565b611f8c565b348015610af8575f80fd5b506104bf612076565b348015610b0c575f80fd5b506104d1601c5481565b348015610b21575f80fd5b506104d1601f5481565b348015610b36575f80fd5b506104bf610b45366004613980565b6120df565b606060038054610b5990613a29565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8590613a29565b8015610bd05780601f10610ba757610100808354040283529160200191610bd0565b820191905f5260205f20905b815481529060010190602001808311610bb357829003601f168201915b5050505050905090565b5f610be633848461231a565b5060015b92915050565b6005546001600160a01b03163314610c235760405162461bcd60e51b8152600401610c1a90613a61565b60405180910390fd5b5f5b82811015610c91578160105f868685818110610c4357610c43613a96565b9050602002016020810190610c589190613708565b6001600160a01b0316815260208101919091526040015f20805460ff191691151591909117905580610c8981613abe565b915050610c25565b50505050565b6005546001600160a01b03163314610cc15760405162461bcd60e51b8152600401610c1a90613a61565b8051825114610d125760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610c1a565b610258825110610d835760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610c1a565b5f5b8251811015610de8575f838281518110610da157610da1613a96565b602002602001015190505f838381518110610dbe57610dbe613a96565b60200260200101519050610dd333838361243e565b50508080610de090613abe565b915050610d85565b505050565b5f610df9848484612591565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610e7d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c1a565b610e8a853385840361231a565b506001949350505050565b6005546001600160a01b03163314610ebf5760405162461bcd60e51b8152600401610c1a90613a61565b670de0b6b3a76400006103e8610ed460025490565b610edf906002613ad6565b610ee99190613aed565b610ef39190613aed565b811015610f545760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c1a565b610f6681670de0b6b3a7640000613ad6565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610fcc5760405162461bcd60e51b8152600401610c1a90613a61565b60168490556017839055601882905560198190558082610fec8587613b0c565b610ff69190613b0c565b6110009190613b0c565b601581905560141015610c915760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610c1a565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610be691859061108b908690613b0c565b61231a565b6005546001600160a01b031633146110ba5760405162461bcd60e51b8152600401610c1a90613a61565b6001600160a01b03811661111f5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610c1a565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461116b5760405162461bcd60e51b8152600401610c1a90613a61565b600b546111773061124a565b10156111ed576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610c1a565b600a805460ff60a01b1916600160a01b17905561120861309c565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b0316331461128e5760405162461bcd60e51b8152600401610c1a90613a61565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146113015760405162461bcd60e51b8152600401610c1a90613a61565b6012805460ff199081169091556014805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a1565b6005546001600160a01b0316331461136b5760405162461bcd60e51b8152600401610c1a90613a61565b806113de57600a546001600160a01b03908116908316036113de5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c1a565b6001600160a01b03919091165f908152602460205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114325760405162461bcd60e51b8152600401610c1a90613a61565b601254610100900460ff161561148a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c1a565b6012805462ffff0019166201010017905543600e8190556114ac908290613b0c565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb7905f90a150565b6005545f906001600160a01b031633146115065760405162461bcd60e51b8152600401610c1a90613a61565b6001600160a01b03831661155c5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c1a565b306001600160a01b038416036115b45760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c1a565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa1580156115f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061161c9190613b1f565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303815f875af115801561166c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116909190613b36565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610b5990613a29565b6005546001600160a01b031633146117155760405162461bcd60e51b8152600401610c1a90613a61565b600a546001600160a01b03908116908316036117995760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c1a565b6117a382826132cd565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b335f9081526001602090815260408083206001600160a01b03861684529091528120548281101561185f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c1a565b61186c338585840361231a565b5060019392505050565b5f610be6338484612591565b6005546001600160a01b031633146118ac5760405162461bcd60e51b8152600401610c1a90613a61565b6001600160a01b0382165f81815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146119345760405162461bcd60e51b8152600401610c1a90613a61565b670de0b6b3a76400006103e861194960025490565b611954906003613ad6565b61195e9190613aed565b6119689190613aed565b8110156119cc5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c1a565b6119de81670de0b6b3a7640000613ad6565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f97565b6005546001600160a01b03163314611a3d5760405162461bcd60e51b8152600401610c1a90613a61565b6001600160a01b038116611a935760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610c1a565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611adf5760405162461bcd60e51b8152600401610c1a90613a61565b620186a0611aec60025490565b611af7906001613ad6565b611b019190613aed565b811015611b6e5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c1a565b6103e8611b7a60025490565b611b85906001613ad6565b611b8f9190613aed565b811115611bfb5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c1a565b600b55565b6005546001600160a01b03163314611c2a5760405162461bcd60e51b8152600401610c1a90613a61565b670de0b6b3a76400006103e8611c3f60025490565b611c4a906002613ad6565b611c549190613aed565b611c5e9190613aed565b811015611cc05760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c1a565b611cd281670de0b6b3a7640000613ad6565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f97565b6005546001600160a01b03163314611d315760405162461bcd60e51b8152600401610c1a90613a61565b6014601b8190555f601c819055601d819055601e819055908190611d56908290613b0c565b611d609190613b0c565b611d6a9190613b0c565b601a819055600a1015611dbf5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610c1a565b601460168190555f601781905560188190556019819055908190611de4908290613b0c565b611dee9190613b0c565b611df89190613b0c565b6015819055600a1015611e4d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610c1a565b565b6005546001600160a01b03163314611e795760405162461bcd60e51b8152600401610c1a90613a61565b601b849055601c839055601d829055601e8190558082611e998587613b0c565b611ea39190613b0c565b611ead9190613b0c565b601a81905560141015610c915760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610c1a565b6005546001600160a01b03163314611f2c5760405162461bcd60e51b8152600401610c1a90613a61565b6001600160a01b03919091165f908152601060205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611f805760405162461bcd60e51b8152600401610c1a90613a61565b6014805460ff19169055565b6005546001600160a01b03163314611fb65760405162461bcd60e51b8152600401610c1a90613a61565b6001600160a01b03811661201b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c1a565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146120a05760405162461bcd60e51b8152600401610c1a90613a61565b6040515f90339047908381818185875af1925050503d805f8114610c91576040519150601f19603f3d011682016040523d82523d5f602084013e610c91565b6005546001600160a01b031633146121095760405162461bcd60e51b8152600401610c1a90613a61565b678ac7230489e800008111156121975760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610c1a565b6040805160028082526060820183525f926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156121fe573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122229190613b51565b815f8151811061223457612234613a96565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061226857612268613a96565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906122af905f90869061dead904290600401613bae565b5f604051808303818588803b1580156122c6575f80fd5b505af11580156122d8573d5f803e3d5ffd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205688260405161230e91815260200190565b60405180910390a15050565b6001600160a01b03831661237c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c1a565b6001600160a01b0382166123dd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c1a565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166124645760405162461bcd60e51b8152600401610c1a90613be2565b6001600160a01b03821661248a5760405162461bcd60e51b8152600401610c1a90613c27565b6001600160a01b0383165f90815260208190526040902054818110156125015760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c1a565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290612537908490613b0c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161258391815260200190565b60405180910390a350505050565b6001600160a01b0383166125b75760405162461bcd60e51b8152600401610c1a90613be2565b6001600160a01b0382166125dd5760405162461bcd60e51b8152600401610c1a90613c27565b5f811161262c5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c1a565b601254610100900460ff166126bd576001600160a01b0383165f9081526023602052604090205460ff168061267857506001600160a01b0382165f9081526023602052604090205460ff165b6126bd5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c1a565b600f541561278f576001600160a01b0383165f9081526010602052604090205460ff1615806126f957506005546001600160a01b038381169116145b8061270e57506001600160a01b03821661dead145b61278f5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610c1a565b60125460ff1615612b81576005546001600160a01b038481169116148015906127c657506005546001600160a01b03838116911614155b80156127da57506001600160a01b03821615155b80156127f157506001600160a01b03821661dead14155b801561281557506001600160a01b0383165f9081526023602052604090205460ff16155b801561283957506001600160a01b0382165f9081526023602052604090205460ff16155b15612b815760145460ff161561294f576009546001600160a01b038381169116148015906128755750600a546001600160a01b03838116911614155b1561294f57612885600243613c6a565b325f908152601360205260409020541080156128c157506128a7600243613c6a565b6001600160a01b0383165f90815260136020526040902054105b61292b5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c1a565b325f9081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383165f9081526025602052604090205460ff16801561298e57506001600160a01b0382165f9081526024602052604090205460ff16155b15612a5a576006548111156129f65760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c1a565b600854612a028361124a565b612a0c9083613b0c565b1115612a555760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c1a565b612b81565b6001600160a01b0382165f9081526025602052604090205460ff168015612a9957506001600160a01b0383165f9081526024602052604090205460ff16155b15612b0357600754811115612a555760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c1a565b6001600160a01b0382165f9081526024602052604090205460ff16612b8157600854612b2e8361124a565b612b389083613b0c565b1115612b815760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c1a565b5f612b8b3061124a565b600b5490915081108015908190612baa575060125462010000900460ff165b8015612bc05750600a54600160a01b900460ff16155b8015612be457506001600160a01b0385165f9081526025602052604090205460ff16155b8015612c0857506001600160a01b0385165f9081526023602052604090205460ff16155b8015612c2c57506001600160a01b0384165f9081526023602052604090205460ff16155b15612c5a57600a805460ff60a01b1916600160a01b179055612c4c61309c565b600a805460ff60a01b191690555b6001600160a01b0385165f9081526023602052604090205460019060ff1680612c9a57506001600160a01b0385165f9081526023602052604090205460ff165b15612ca257505f5b5f811561308857600f5443108015612cd157506001600160a01b0387165f9081526025602052604090205460ff165b8015612cf557506001600160a01b0386165f9081526025602052604090205460ff16155b8015612d0257505f601554115b15612e7c576001600160a01b0386165f9081526010602052604090205460ff16612da0576001600160a01b0386165f908152601060205260408120805460ff191660019081179091556011805491929091612d5e908490613b0c565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612dad866063613ad6565b612db79190613aed565b905060155460175482612dca9190613ad6565b612dd49190613aed565b60205f828254612de49190613b0c565b9091555050601554601654612df99083613ad6565b612e039190613aed565b601f5f828254612e139190613b0c565b9091555050601554601854612e289083613ad6565b612e329190613aed565b60215f828254612e429190613b0c565b9091555050601554601954612e579083613ad6565b612e619190613aed565b60225f828254612e719190613b0c565b9091555061306a9050565b6001600160a01b0386165f9081526025602052604090205460ff168015612ea457505f601a54115b15612f63576064601a5486612eb99190613ad6565b612ec39190613aed565b9050601a54601c5482612ed69190613ad6565b612ee09190613aed565b60205f828254612ef09190613b0c565b9091555050601a54601b54612f059083613ad6565b612f0f9190613aed565b601f5f828254612f1f9190613b0c565b9091555050601a54601d54612f349083613ad6565b612f3e9190613aed565b60215f828254612f4e9190613b0c565b9091555050601a54601e54612e579083613ad6565b6001600160a01b0387165f9081526025602052604090205460ff168015612f8b57505f601554115b1561306a57606460155486612fa09190613ad6565b612faa9190613aed565b905060155460175482612fbd9190613ad6565b612fc79190613aed565b60205f828254612fd79190613b0c565b9091555050601554601654612fec9083613ad6565b612ff69190613aed565b601f5f8282546130069190613b0c565b909155505060155460185461301b9083613ad6565b6130259190613aed565b60215f8282546130359190613b0c565b909155505060155460195461304a9083613ad6565b6130549190613aed565b60225f8282546130649190613b0c565b90915550505b801561307b5761307b87308361243e565b6130858186613c6a565b94505b61309387878761243e565b50505050505050565b5f6022541180156130b757506022546130b43061124a565b10155b156130c8576130c8306022546132fa565b5f60228190556130d73061124a565b90505f602154601f546020546130ed9190613b0c565b6130f79190613b0c565b9050811580613104575080155b1561310d575050565b600b5461311b906014613ad6565b82111561313357600b54613130906014613ad6565b91505b5f80600283602054866131469190613ad6565b6131509190613aed565b61315a9190613aed565b905061316e6131698286613c6a565b613422565b602054479081905f9061318390600290613aed565b61318d9087613c6a565b601f5461319a9085613ad6565b6131a49190613aed565b90505f60026020546131b69190613aed565b6131c09088613c6a565b6021546131cd9086613ad6565b6131d79190613aed565b90506131e38183613b0c565b6131ed9084613c6a565b5f6020819055601f81905560218190556022559250841580159061321057505f83115b1561321f5761321f8584613572565b600d546040516001600160a01b039091169082905f81818185875af1925050503d805f8114613269576040519150601f19603f3d011682016040523d82523d5f602084013e61326e565b606091505b5050600c546040519197506001600160a01b03169047905f81818185875af1925050503d805f81146132bb576040519150601f19603f3d011682016040523d82523d5f602084013e6132c0565b606091505b5050505050505050505050565b6001600160a01b0382165f908152602560205260409020805460ff19168215151790556117a38282613621565b6001600160a01b03821661335a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c1a565b6001600160a01b0382165f90815260208190526040902054818110156133cd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c1a565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612431565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061345557613455613a96565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156134ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134d09190613b51565b816001815181106134e3576134e3613a96565b6001600160a01b039283166020918202929092010152600954613509913091168461231a565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906135419085905f90869030904290600401613c7d565b5f604051808303815f87803b158015613558575f80fd5b505af115801561356a573d5f803e3d5ffd5b505050505050565b60095461358a9030906001600160a01b03168461231a565b60095460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156135f5573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061361a9190613cb8565b5050505050565b6001600160a01b0382165f81815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910161230e565b5f6020808352835180828501525f5b818110156136a75785810183015185820160400152820161368b565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146136db575f80fd5b50565b5f80604083850312156136ef575f80fd5b82356136fa816136c7565b946020939093013593505050565b5f60208284031215613718575f80fd5b8135613723816136c7565b9392505050565b80151581146136db575f80fd5b5f805f60408486031215613749575f80fd5b833567ffffffffffffffff80821115613760575f80fd5b818601915086601f830112613773575f80fd5b813581811115613781575f80fd5b8760208260051b8501011115613795575f80fd5b602092830195509350508401356137ab8161372a565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156137f3576137f36137b6565b604052919050565b5f67ffffffffffffffff821115613814576138146137b6565b5060051b60200190565b5f82601f83011261382d575f80fd5b8135602061384261383d836137fb565b6137ca565b82815260059290921b84018101918181019086841115613860575f80fd5b8286015b8481101561387b5780358352918301918301613864565b509695505050505050565b5f8060408385031215613897575f80fd5b823567ffffffffffffffff808211156138ae575f80fd5b818501915085601f8301126138c1575f80fd5b813560206138d161383d836137fb565b82815260059290921b840181019181810190898411156138ef575f80fd5b948201945b83861015613916578535613907816136c7565b825294820194908201906138f4565b9650508601359250508082111561392b575f80fd5b506139388582860161381e565b9150509250929050565b5f805f60608486031215613954575f80fd5b833561395f816136c7565b9250602084013561396f816136c7565b929592945050506040919091013590565b5f60208284031215613990575f80fd5b5035919050565b5f805f80608085870312156139aa575f80fd5b5050823594602084013594506040840135936060013592509050565b5f80604083850312156139d7575f80fd5b82356139e2816136c7565b915060208301356139f28161372a565b809150509250929050565b5f8060408385031215613a0e575f80fd5b8235613a19816136c7565b915060208301356139f2816136c7565b600181811c90821680613a3d57607f821691505b602082108103613a5b57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f60018201613acf57613acf613aaa565b5060010190565b8082028115828204841417610bea57610bea613aaa565b5f82613b0757634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610bea57610bea613aaa565b5f60208284031215613b2f575f80fd5b5051919050565b5f60208284031215613b46575f80fd5b81516137238161372a565b5f60208284031215613b61575f80fd5b8151613723816136c7565b5f8151808452602080850194508084015f5b83811015613ba35781516001600160a01b031687529582019590820190600101613b7e565b509495945050505050565b848152608060208201525f613bc66080830186613b6c565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bea57610bea613aaa565b85815284602082015260a060408201525f613c9b60a0830186613b6c565b6001600160a01b0394909416606083015250608001529392505050565b5f805f60608486031215613cca575f80fd5b835192506020840151915060408401519050925092509256fea26469706673582212203af8cbee5f759502985368035777d1602a94584f1e9a03353455a03fa9f06c5264736f6c63430008140033

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.