ETH Price: $3,377.01 (-2.34%)

Token

Beat Matchmaker (BEAT)
 

Overview

Max Total Supply

100,000,000 BEAT

Holders

514

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
shawnmelo.eth
Balance
69,393.88504416040710255 BEAT

Value
$0.00
0x2f365624c31cdb9aec9acc6b395deb155601bfee
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:
BMM

Compiler Version
v0.8.27+commit.40a35a09

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 8 : BMM.sol
/**
     Telegram: https://t.me/Beatmatchmaker
     Twitter: https://x.com/beatmatchmaker 
     Website: https://beatmatchmaker.com/
     Dapp: https://www.beatmatchmaker.com/beat 

     $BEAT isn’t just a token; it’s a movement. Every transaction fuels the development of cutting-edge tools and platforms that 
     uplift emerging music talent, streamline music distribution, 
     and bring creators closer to their audiences. 
     By supporting $BEAT, you’re directly shaping the future of music, 
     fostering innovation, and giving a voice to the next generation of talent. 
     Together, we’re redefining how music is created, shared, and experienced.

     Officially Incubated by Sentinel Incubator - https://sentinelincubator.com
*/

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

import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./ERC20.sol";
import "./Ownable.sol";
import "./ReentrancyGuard.sol";
import "./UniswapV2Contracts.sol";

contract BMM is ERC20, Ownable, ReentrancyGuard {
    // Uniswap router and pair addresses
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;

    // Address where burned tokens are sent
    address public constant deadAddress = address(0xdead);

    // Wallets for fee distribution
    address public projectWallet;
    address public projectWalletTwo;
    address public incubatorWallet;
    address public referralWallet;

    // Swap and trading flags
    bool private swapping;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public limitsInEffect = true;

    // Block number and timestamp when trading was enabled
    uint256 public tradingActiveBlock;
    uint256 public tradingActiveTimestamp;

    // Maximum transaction amount and wallet balance
    uint256 public maxTransactionAmount;
    uint256 public maxWallet;

    // Fee percentages (per 10,000 units, where 10,000 = 100%)
    uint256 public buyTotalFees;
    uint256 public buyFee;

    uint256 public sellTotalFees;
    uint256 public sellFee;

    // Tokens accumulated for fees
    uint256 public tokensForFees;

    // Swap back percentage threshold (in basis points, out of 10,000)
    uint256 public maxSwapBackPercent = 50; // 0.5%

    // Minimum amount of tokens to trigger swap back (0.01% of total supply)
    uint256 public swapTokensAtAmount;

    // Mappings for fee and transaction exclusions
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // Automated market maker pairs
    mapping(address => bool) public automatedMarketMakerPairs;

    // Whitelist variables
    uint256 public whitelistStartTime;
    bool public whitelistActive = true;
    mapping(address => bool) public whitelistedAddresses;

    // Events for tracking state changes
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event ProjectWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event ProjectWalletTwoUpdated(address indexed newWallet, address indexed oldWallet);
    event IncubatorWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event ReferralWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event TradingEnabled(uint256 blockNumber);
    event LimitsRemoved();
    event MaxTransactionAmountUpdated(uint256 newAmount);
    event MaxWalletUpdated(uint256 newAmount);
    event ExcludedFromMaxTransaction(address indexed account, bool isExcluded);
    event SwapEnabledUpdated(bool enabled);
    event BuyFeesUpdated(uint256 fee);
    event SellFeesUpdated(uint256 fee);
    event MaxSwapBackPercentUpdated(uint256 newPercent);
    event TokenSwap(uint256 tokensSwapped, uint256 ethReceived);
    event TokenSwapFailed(uint256 tokenAmount);
    event TokenSwapFailedWithReason(uint256 tokenAmount, string reason);
    event TokenSwapFailedWithData(uint256 tokenAmount, bytes data);
    event TransferFailed(address to, uint256 amount);
    event Whitelisted(address indexed account);

    // Custom Errors
    error TradingNotActive();
    error ExceedsMaxTransactionAmount();
    error ExceedsMaxWalletAmount();
    error MaxTransactionAmountTooLow();
    error MaxWalletTooLow();
    error CannotRemovePrimaryPair();
    error NewWalletIsZeroAddress();
    error CannotIncreaseFees();
    error TransferFromZeroAddress();
    error TransferToZeroAddress();
    error SwapFailed();
    error MaxSwapBackPercentTooHigh();

    // Deployer address
    address public immutable deployer;

    // Tax enablement flags
    bool public isProjectWalletTaxEnabled = true;
    bool public isProjectWalletTwoTaxEnabled = true;
    bool public isIncubatorWalletTaxEnabled = true;
    bool public isReferralWalletTaxEnabled = true;

    /**
     * @dev Constructor initializes the token and sets up Uniswap pair.
     * @param _router Address of the UniswapV2Router02.
     */
    constructor(address _router) ERC20("Beat Matchmaker", "BEAT") {
        address _owner = _msgSender();
        deployer = _owner;

        uint256 totalSupply_ = 100_000_000 * (10 ** decimals());

        // Adjusted percentages per 10,000 units
        maxTransactionAmount = (totalSupply_ * 150) / 10_000; // 1.5% of total supply
        maxWallet = (totalSupply_ * 150) / 10_000; // 1.5% of total supply

        // Fee percentages (per 10,000 units, where 10,000 = 100%)
        buyFee = 2500; // 25%
        buyTotalFees = buyFee;

        sellFee = 3000; // 30%
        sellTotalFees = sellFee;

        // Set initial wallets
        projectWallet = address(0x8270b9EA380AEC5057200d31e28E1d41899eAaA9);
        projectWalletTwo = address(0x8270b9EA380AEC5057200d31e28E1d41899eAaA9);
        incubatorWallet = address(0x85dBe4ce3c809DAC17E4B1D32a5A2478038a3ae1);
        referralWallet = address(0x4f82b6Bda395C43A047dDc30CD6eDf7479A2C7Af);

        if (_router == address(0)) revert NewWalletIsZeroAddress();

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);

        uniswapV2Router = _uniswapV2Router;

        // Exclude router from max transaction amount
        excludeFromMaxTransaction(address(_uniswapV2Router), true);

        // Create or get existing Uniswap pair
        address existingPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .getPair(address(this), _uniswapV2Router.WETH());
        if (existingPair != address(0)) {
            uniswapV2Pair = existingPair;
        } else {
            uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        // Set the pair as an AMM pair
        _setAutomatedMarketMakerPair(uniswapV2Pair, true);

        // Exclude Uniswap pair from max transaction limits
        excludeFromMaxTransaction(uniswapV2Pair, true);

        // Exclude from fees and max transaction limits
        excludeFromFees(_owner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(deadAddress, true);

        excludeFromMaxTransaction(_owner, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(deadAddress, true);

        // Set the minimum tokens to swap back (0.01% of total supply)
        swapTokensAtAmount = (totalSupply_ * 1) / 10_000; // 0.01%

        // Initialize whitelist
        whitelistActive = true;

        // Mint total supply to owner
        _mint(_owner, totalSupply_);
    }

    /**
     * @dev Enables trading and allows swaps.
     */
    function enableTrading() external onlyOwner {
        if (projectWallet == address(0)) revert NewWalletIsZeroAddress();
        if (projectWalletTwo == address(0)) revert NewWalletIsZeroAddress();
        if (incubatorWallet == address(0)) revert NewWalletIsZeroAddress();
        if (referralWallet == address(0)) revert NewWalletIsZeroAddress();
        tradingActive = true;
        swapEnabled = true;
        limitsInEffect = true;
        tradingActiveBlock = block.number;
        tradingActiveTimestamp = block.timestamp;
        whitelistStartTime = block.timestamp; // Start the whitelist period
        whitelistActive = true; // Ensure whitelist is active
        emit TradingEnabled(block.number);
    }

    /**
     * @dev Removes transaction and wallet limits.
     * @return True if successful.
     */
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        emit LimitsRemoved();
        return true;
    }

    /**
     * @dev Updates the maximum transaction amount.
     * @param newAmount The new maximum transaction amount.
     */
    function updateMaxTransactionAmount(uint256 newAmount) external onlyOwner {
        if (newAmount < (totalSupply() * 100) / 10_000) revert MaxTransactionAmountTooLow(); // Minimum 1%
        maxTransactionAmount = newAmount;
        emit MaxTransactionAmountUpdated(newAmount);
    }

    /**
     * @dev Updates the maximum wallet balance.
     * @param newAmount The new maximum wallet balance.
     */
    function updateMaxWallet(uint256 newAmount) external onlyOwner {
        if (newAmount < (totalSupply() * 100) / 10_000) revert MaxWalletTooLow(); // Minimum 1%
        maxWallet = newAmount;
        emit MaxWalletUpdated(newAmount);
    }

    /**
     * @dev Excludes or includes an account from the max transaction limit.
     * @param account The account to modify.
     * @param isExcluded Whether the account is excluded.
     */
    function excludeFromMaxTransaction(address account, bool isExcluded)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[account] = isExcluded;
        emit ExcludedFromMaxTransaction(account, isExcluded);
    }

    /**
     * @dev Enables or disables the swap mechanism.
     * @param enabled Whether swapping is enabled.
     */
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
        emit SwapEnabledUpdated(enabled);
    }

    /**
     * @dev Excludes or includes an account from fees.
     * @param account The account to modify.
     * @param excluded Whether the account is excluded.
     */
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    /**
     * @dev Sets an address as an automated market maker pair.
     * @param pair The address to set.
     * @param value Whether it is an AMM pair.
     */
    function setAutomatedMarketMakerPair(address pair, bool value)
        external
        onlyOwner
    {
        if (pair == uniswapV2Pair) revert CannotRemovePrimaryPair();
        _setAutomatedMarketMakerPair(pair, value);
    }

    /**
     * @dev Internal function to set an AMM pair.
     * @param pair The address to set.
     * @param value Whether it is an AMM pair.
     */
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    /**
     * @dev Updates the project wallet address.
     * @param newWallet The new wallet address.
     */
    function updateProjectWallet(address newWallet) external onlyOwner {
        if (newWallet == address(0)) revert NewWalletIsZeroAddress();
        emit ProjectWalletUpdated(newWallet, projectWallet);
        projectWallet = newWallet;
    }

    /**
     * @dev Updates the project wallet two address.
     * @param newWallet The new wallet address.
     */
    function updateProjectWalletTwo(address newWallet) external onlyOwner {
        if (newWallet == address(0)) revert NewWalletIsZeroAddress();
        emit ProjectWalletTwoUpdated(newWallet, projectWalletTwo);
        projectWalletTwo = newWallet;
    }

    /**
     * @dev Updates the incubator wallet address.
     * @param newWallet The new wallet address.
     */
    function updateIncubatorWallet(address newWallet) external onlyOwner {
        if (newWallet == address(0)) revert NewWalletIsZeroAddress();
        emit IncubatorWalletUpdated(newWallet, incubatorWallet);
        incubatorWallet = newWallet;
    }

    /**
     * @dev Updates the referral wallet address.
     * @param newWallet The new wallet address.
     */
    function updateReferralWallet(address newWallet) external onlyOwner {
        if (newWallet == address(0)) revert NewWalletIsZeroAddress();
        emit ReferralWalletUpdated(newWallet, referralWallet);
        referralWallet = newWallet;
    }

    /**
     * @dev Updates the max swap back percentage.
     * @param newPercent The new max swap back percentage (in basis points, out of 10,000).
     */
    function updateMaxSwapBackPercent(uint256 newPercent) external onlyOwner {
        if (newPercent > 1000) revert MaxSwapBackPercentTooHigh(); // Cannot set above 10%
        maxSwapBackPercent = newPercent;
        emit MaxSwapBackPercentUpdated(newPercent);
    }

    /**
     * @dev Checks if an account is excluded from fees.
     * @param account The account to check.
     * @return True if excluded, false otherwise.
     */
    function isExcludedFromFees(address account) external view returns (bool) {
        return _isExcludedFromFees[account];
    }

    /**
     * @dev Updates the buy fees.
     * @param newFee The new buy fee percentage (per 10,000 units).
     */
    function updateBuyFees(uint256 newFee) external onlyOwner {
        if (newFee > buyFee) revert CannotIncreaseFees();
        buyFee = newFee;
        buyTotalFees = buyFee;
        emit BuyFeesUpdated(buyFee);
    }

    /**
     * @dev Updates the sell fees.
     * @param newFee The new sell fee percentage (per 10,000 units).
     */
    function updateSellFees(uint256 newFee) external onlyOwner {
        if (newFee > sellFee) revert CannotIncreaseFees();
        sellFee = newFee;
        sellTotalFees = sellFee;
        emit SellFeesUpdated(sellFee);
    }

    /**
     * @dev Whitelists or removes addresses from the whitelist.
     * @param wallets The array of addresses to modify.
     * @param isWhitelisted Whether the addresses are whitelisted.
     */
    function whitelistWallets(address[] calldata wallets, bool isWhitelisted) external onlyOwner {
        for (uint256 i = 0; i < wallets.length; i++) {
            whitelistedAddresses[wallets[i]] = isWhitelisted;
            emit Whitelisted(wallets[i]);
        }
    }

    /**
     * @dev Manually ends the whitelist period.
     */
    function shutOffWhitelist() external onlyOwner {
        require(whitelistActive, "Whitelist not active");
        whitelistActive = false;
    }

    /**
     * @dev Revokes taxes to the project wallet. Can only be called once by the deployer.
     */
    function revokeProjectWalletTax() external {
        require(msg.sender == deployer, "Only deployer can call");
        require(isProjectWalletTaxEnabled, "Taxes already revoked");
        isProjectWalletTaxEnabled = false;
    }

    /**
     * @dev Revokes taxes to the project wallet two. Can only be called once by the deployer.
     */
    function revokeProjectWalletTwoTax() external {
        require(msg.sender == deployer, "Only deployer can call");
        require(isProjectWalletTwoTaxEnabled, "Taxes already revoked");
        isProjectWalletTwoTaxEnabled = false;
    }

    /**
     * @dev Revokes taxes to the incubator wallet. Can only be called once by the deployer.
     */
    function revokeIncubatorWalletTax() external {
        require(msg.sender == deployer, "Only deployer can call");
        require(isIncubatorWalletTaxEnabled, "Taxes already revoked");
        isIncubatorWalletTaxEnabled = false;
    }

    /**
     * @dev Revokes taxes to the referral wallet. Can only be called once by the deployer.
     */
    function revokeReferralWalletTax() external {
        require(msg.sender == deployer, "Only deployer can call");
        require(isReferralWalletTaxEnabled, "Taxes already revoked");
        isReferralWalletTaxEnabled = false;
    }

    /**
     * @dev Internal transfer function with fee logic and whitelist enforcement.
     * @param from The sender address.
     * @param to The recipient address.
     * @param amount The amount to transfer.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (from == address(0)) revert TransferFromZeroAddress();
        if (to == address(0)) revert TransferToZeroAddress();

        // Check if trading is active
        if (!tradingActive) {
            if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
                revert TradingNotActive();
            }
        }

        // Early return if amount is zero
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        // Limits and whitelist checks
        if (limitsInEffect && !swapping) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != deadAddress
            ) {
                // Determine if we are in the whitelist period (first 5 minutes)
                bool isInWhitelistPeriod = whitelistActive && (block.timestamp < whitelistStartTime + 5 minutes);

                uint256 currentMaxTransactionAmount;
                uint256 currentMaxWallet;

                if (isInWhitelistPeriod) {
                    currentMaxTransactionAmount = (totalSupply() * 20) / 10_000; // 0.2%
                    currentMaxWallet = (totalSupply() * 20) / 10_000; // 0.2%
                } else {
                    currentMaxTransactionAmount = maxTransactionAmount; // 1.5%
                    currentMaxWallet = maxWallet; // 1.5%
                    // Whitelist period has ended
                    if (whitelistActive) {
                        whitelistActive = false;
                    }
                }

                // Whitelist enforcement during whitelist period
                if (isInWhitelistPeriod) {
                    // Enforce whitelist checks for all transactions
                    if (automatedMarketMakerPairs[from]) {
                        // Buying: Only whitelisted addresses can buy
                        require(
                            whitelistedAddresses[to],
                            "Not whitelisted during whitelist period"
                        );
                    } else if (automatedMarketMakerPairs[to]) {
                        // Selling: Only whitelisted addresses can sell
                        require(
                            whitelistedAddresses[from],
                            "Not whitelisted during whitelist period"
                        );
                    } else {
                        // Transfers between wallets
                        require(
                            whitelistedAddresses[from] && whitelistedAddresses[to],
                            "Both sender and recipient must be whitelisted during whitelist period"
                        );
                    }
                }

                // Max transaction and wallet limits
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    // Buy transaction
                    if (amount > currentMaxTransactionAmount)
                        revert ExceedsMaxTransactionAmount();
                    if (balanceOf(to) + amount > currentMaxWallet)
                        revert ExceedsMaxWalletAmount();
                } else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    // Sell transaction
                    if (amount > currentMaxTransactionAmount)
                        revert ExceedsMaxTransactionAmount();
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    // Regular transfer
                    if (balanceOf(to) + amount > currentMaxWallet)
                        revert ExceedsMaxWalletAmount();
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        // Check if we should perform a swap back
        bool shouldSwapBack = canSwap &&
            swapEnabled &&
            !swapping &&
            automatedMarketMakerPairs[to] && // Sell transaction
            from != address(this) &&
            !_isExcludedFromFees[from];

        if (shouldSwapBack) {
            swapping = true;
            swapBack(amount);
            swapping = false;
        }

        bool takeFee = !swapping;

        // If any account is excluded from fee, remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        // Calculate fees if applicable
        if (takeFee) {
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                // Sell transaction
                fees = (amount * sellTotalFees) / 10_000; // Fees are per 10,000 units
                tokensForFees += fees;
            } else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                // Buy transaction
                fees = (amount * buyTotalFees) / 10_000; // Fees are per 10,000 units
                tokensForFees += fees;
            }

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

            amount -= fees;
        }

        // Perform the actual token transfer
        super._transfer(from, to, amount);
    }

    /**
     * @dev Swaps tokens for ETH using Uniswap.
     * @param tokenAmount The amount of tokens to swap.
     * @return success True if the swap was successful.
     */
    function swapTokensForEth(uint256 tokenAmount) private returns (bool success) {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uint256 initialETHBalance = address(this).balance;

        try
            uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                tokenAmount,
                0, // Accept any amount of ETH
                path,
                address(this),
                block.timestamp
            )
        {
            uint256 ethReceived = address(this).balance - initialETHBalance;
            emit TokenSwap(tokenAmount, ethReceived);
            success = true;
        } catch Error(string memory reason) {
            emit TokenSwapFailedWithReason(tokenAmount, reason);
            success = false;
        } catch (bytes memory data) {
            emit TokenSwapFailedWithData(tokenAmount, data);
            success = false;
        }
    }

    /**
     * @dev Swaps back tokens for ETH and distributes to wallets.
     * @param sellAmount The amount of tokens being sold in the current transaction.
     */
    function swapBack(uint256 sellAmount) private nonReentrant {
        uint256 contractBalance = balanceOf(address(this));
        uint256 tokensToSwap = tokensForFees;

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

        // Calculate maximum swap amount based on maxSwapBackPercent
        uint256 maxSwapAmount = (totalSupply() * maxSwapBackPercent) / 10_000;

        // Determine amount to swap (small amount to avoid large dumps)
        uint256 amountToSwap = sellAmount;

        if (amountToSwap > maxSwapAmount) {
            amountToSwap = maxSwapAmount;
        }

        if (amountToSwap > tokensToSwap) {
            amountToSwap = tokensToSwap;
        }

        if (amountToSwap > contractBalance) {
            amountToSwap = contractBalance;
        }

        // Ensure amount to swap meets minimum threshold
        if (amountToSwap < swapTokensAtAmount) {
            return;
        }

        // Swap tokens for ETH
        bool success = swapTokensForEth(amountToSwap);

        if (success) {
            // Decrement tokensForFees
            tokensForFees -= amountToSwap;

            // Distribute ETH to wallets
            uint256 ethBalance = address(this).balance;

            if (ethBalance > 0) {
                distributeEth(ethBalance);
            }
        } else {
            // Handle swap failure if necessary
            return;
        }
    }

    /**
     * @dev Distributes ETH to the wallets based on enabled taxes.
     * @param ethBalance The total ETH balance to distribute.
     */
    function distributeEth(uint256 ethBalance) private {
        if (ethBalance == 0) {
            return;
        }

        // Define percentages per 10,000 units (where 10,000 = 100%)
        uint256 totalPercentage = 0;
        uint256 incubatorWalletPercentage = 0;
        uint256 referralWalletPercentage = 0;
        uint256 projectWalletPercentage = 0;
        uint256 projectWalletTwoPercentage = 0;

        if (isIncubatorWalletTaxEnabled) {
            incubatorWalletPercentage = 1750; // 17.5%
            totalPercentage += incubatorWalletPercentage;
        }

        if (isReferralWalletTaxEnabled) {
            referralWalletPercentage = 500; // 5%
            totalPercentage += referralWalletPercentage;
        }

        if (isProjectWalletTaxEnabled) {
            projectWalletPercentage = 3875; // 38.75%
            totalPercentage += projectWalletPercentage;
        }

        if (isProjectWalletTwoTaxEnabled) {
            projectWalletTwoPercentage = 3875; // 38.75%
            totalPercentage += projectWalletTwoPercentage;
        }

        // Check for division by zero
        if (totalPercentage == 0) {
            // No wallets are enabled, nothing to distribute
            return;
        }

        // Distribute ETH based on enabled wallets
        uint256 totalDistributed = 0;

        if (incubatorWalletPercentage > 0) {
            uint256 ethForIncubator = (ethBalance * incubatorWalletPercentage) / totalPercentage;
            totalDistributed += ethForIncubator;

            // Distribute ETH to incubator wallet
            (bool successIncubator, ) = incubatorWallet.call{value: ethForIncubator}("");
            if (!successIncubator) {
                emit TransferFailed(incubatorWallet, ethForIncubator);
            }
        }

        if (referralWalletPercentage > 0) {
            uint256 ethForReferral = (ethBalance * referralWalletPercentage) / totalPercentage;
            totalDistributed += ethForReferral;

            // Distribute ETH to referral wallet
            (bool successReferral, ) = referralWallet.call{value: ethForReferral}("");
            if (!successReferral) {
                emit TransferFailed(referralWallet, ethForReferral);
            }
        }

        if (projectWalletPercentage > 0) {
            uint256 ethForProject = (ethBalance * projectWalletPercentage) / totalPercentage;
            totalDistributed += ethForProject;

            // Distribute ETH to project wallet
            (bool successProject, ) = projectWallet.call{value: ethForProject}("");
            if (!successProject) {
                emit TransferFailed(projectWallet, ethForProject);
            }
        }

        if (projectWalletTwoPercentage > 0) {
            uint256 ethForProjectTwo = (ethBalance * projectWalletTwoPercentage) / totalPercentage;
            totalDistributed += ethForProjectTwo;

            // Distribute ETH to project wallet two
            (bool successProjectTwo, ) = projectWalletTwo.call{value: ethForProjectTwo}("");
            if (!successProjectTwo) {
                emit TransferFailed(projectWalletTwo, ethForProjectTwo);
            }
        }

        // Ensure the total distribution does not exceed balance
        require(totalDistributed <= ethBalance, "Insufficient ETH balance for distribution");
    }

    /**
     * @dev Allows the owner to rescue ETH from the contract.
     */
    function rescueETH() external onlyOwner nonReentrant {
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance == 0) revert SwapFailed();

        (bool success, ) = owner().call{value: contractETHBalance}("");
        if (!success) revert SwapFailed();
    }

    /**
     * @dev Allows the owner to rescue any ERC20 tokens, including the contract's own tokens.
     * @param tokenAddress The address of the token to rescue.
     */
    function rescueTokens(address tokenAddress) external onlyOwner {
        IERC20 token = IERC20(tokenAddress);
        uint256 contractTokenBalance = token.balanceOf(address(this));
        if (contractTokenBalance == 0) revert SwapFailed();
        token.transfer(owner(), contractTokenBalance);
    }

    // Receive function to accept ETH
    receive() external payable {}

    // Fallback function
    fallback() external payable {}
}

File 2 of 8 : Context.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;

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

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

File 3 of 8 : ERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;

import "./Context.sol";
import "./IERC20.sol";
import "./IERC20Metadata.sol";

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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - 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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - 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');

        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
    }

    function _mint(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');
        _balances[account] -= amount;
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), 'ERC20: approve from the zero address');
        require(spender != address(0), 'ERC20: approve to the zero address');
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}

File 4 of 8 : IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;

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

File 5 of 8 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;

import "./IERC20.sol";

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

File 6 of 8 : Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;

import "./Context.sol";

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

File 7 of 8 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

File 8 of 8 : UniswapV2Contracts.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;

// IUniswapV2Pair Interface
interface IUniswapV2Pair {
    // Events
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);
    
    // Functions
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

// IUniswapV2Factory Interface
interface IUniswapV2Factory {
    // Events
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    
    // Functions
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

// IUniswapV2Router01 Interface
interface IUniswapV2Router01 {
    // Functions
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    // Liquidity functions
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    
    function removeLiquidity(
        address tokenA,
        address tokenB, 
        uint liquidity, 
        uint amountAMin, 
        uint amountBMin, 
        address to, 
        uint deadline
    ) external returns (uint amountA, uint amountB);
    
    function removeLiquidityETH(
        address token, 
        uint liquidity, 
        uint amountTokenMin, 
        uint amountETHMin, 
        address to, 
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    
    function removeLiquidityWithPermit(
        address tokenA, 
        address tokenB, 
        uint liquidity, 
        uint amountAMin, 
        uint amountBMin, 
        address to, 
        uint deadline, 
        bool approveMax, 
        uint8 v, 
        bytes32 r, 
        bytes32 s
    ) external returns (uint amountA, uint amountB);
    
    function removeLiquidityETHWithPermit(
        address token, 
        uint liquidity, 
        uint amountTokenMin, 
        uint amountETHMin, 
        address to, 
        uint deadline, 
        bool approveMax, 
        uint8 v, 
        bytes32 r, 
        bytes32 s
    ) external returns (uint amountETH);
    
    // Swap functions
    function swapExactTokensForTokens(
        uint amountIn, 
        uint amountOutMin, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external returns (uint[] memory amounts);
    
    function swapTokensForExactTokens(
        uint amountOut, 
        uint amountInMax, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external returns (uint[] memory amounts);
    
    function swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external payable returns (uint[] memory amounts);
    
    function swapTokensForExactETH(
        uint amountOut, 
        uint amountInMax, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external returns (uint[] memory amounts);
    
    function swapExactTokensForETH(
        uint amountIn, 
        uint amountOutMin, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external returns (uint[] memory amounts);
    
    function swapETHForExactTokens(
        uint amountOut, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external payable returns (uint[] memory amounts);
    
    // Utility functions
    function quote(
        uint amountA, 
        uint reserveA, 
        uint reserveB
    ) external pure returns (uint amountB);
    
    function getAmountOut(
        uint amountIn, 
        uint reserveIn, 
        uint reserveOut
    ) external pure returns (uint amountOut);
    
    function getAmountIn(
        uint amountOut, 
        uint reserveIn, 
        uint reserveOut
    ) external pure returns (uint amountIn);
    
    function getAmountsOut(
        uint amountIn, 
        address[] calldata path
    ) external view returns (uint[] memory amounts);
    
    function getAmountsIn(
        uint amountOut, 
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

// IUniswapV2Router02 Interface
interface IUniswapV2Router02 is IUniswapV2Router01 {
    // Additional swap functions supporting fee-on-transfer tokens
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token, 
        uint liquidity, 
        uint amountTokenMin, 
        uint amountETHMin, 
        address to, 
        uint deadline
    ) external returns (uint amountETH);
    
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token, 
        uint liquidity, 
        uint amountTokenMin, 
        uint amountETHMin, 
        address to, 
        uint deadline, 
        bool approveMax, 
        uint8 v, 
        bytes32 r, 
        bytes32 s
    ) external returns (uint amountETH);
    
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn, 
        uint amountOutMin, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external;
    
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external payable;
    
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn, 
        uint amountOutMin, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external;
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CannotIncreaseFees","type":"error"},{"inputs":[],"name":"CannotRemovePrimaryPair","type":"error"},{"inputs":[],"name":"ExceedsMaxTransactionAmount","type":"error"},{"inputs":[],"name":"ExceedsMaxWalletAmount","type":"error"},{"inputs":[],"name":"MaxSwapBackPercentTooHigh","type":"error"},{"inputs":[],"name":"MaxTransactionAmountTooLow","type":"error"},{"inputs":[],"name":"MaxWalletTooLow","type":"error"},{"inputs":[],"name":"NewWalletIsZeroAddress","type":"error"},{"inputs":[],"name":"SwapFailed","type":"error"},{"inputs":[],"name":"TradingNotActive","type":"error"},{"inputs":[],"name":"TransferFromZeroAddress","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"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":"fee","type":"uint256"}],"name":"BuyFeesUpdated","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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"IncubatorWalletUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPercent","type":"uint256"}],"name":"MaxSwapBackPercentUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"MaxTransactionAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"MaxWalletUpdated","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":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"ProjectWalletTwoUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"ProjectWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"ReferralWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"SellFeesUpdated","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":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"TokenSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"TokenSwapFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"TokenSwapFailedWithData","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"TokenSwapFailedWithReason","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"TradingEnabled","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":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"Whitelisted","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","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":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeFromMaxTransaction","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":"incubatorWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isIncubatorWalletTaxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isProjectWalletTaxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isProjectWalletTwoTaxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isReferralWalletTaxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSwapBackPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectWalletTwo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referralWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeIncubatorWalletTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeProjectWalletTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeProjectWalletTwoTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeReferralWalletTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shutOffWhitelist","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":"tokensForFees","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":[],"name":"tradingActiveTimestamp","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":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateIncubatorWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercent","type":"uint256"}],"name":"updateMaxSwapBackPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateProjectWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateProjectWalletTwo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateReferralWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"isWhitelisted","type":"bool"}],"name":"whitelistWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600b805462ffffff60a81b1916600160b81b1790556032601555601b805460ff19166001179055601d8054630101010163ffffffff1990911617905534801561004c57600080fd5b5060405161422238038061422283398101604081905261006b91610864565b6040518060400160405280600f81526020016e2132b0ba1026b0ba31b436b0b5b2b960891b815250604051806040016040528060048152602001631091505560e21b81525081600390816100bf9190610933565b5060046100cc8282610933565b50505060006100df6105e060201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060016006553360a081905260006101466012600a610af0565b610154906305f5e100610aff565b9050612710610164826096610aff565b61016e9190610b16565b600e5561271061017f826096610aff565b6101899190610b16565b600f556109c46011819055601055610bb86013819055601255600880546001600160a01b0319908116738270b9ea380aec5057200d31e28e1d41899eaaa9908117909255600980548216909217909155600a805482167385dbe4ce3c809dac17e4b1d32a5a2478038a3ae1179055600b8054909116734f82b6bda395c43a047ddc30cd6edf7479a2c7af1790556001600160a01b03831661023d5760405163f12aab9d60e01b815260040160405180910390fd5b6001600160a01b038316608052826102568160016105e4565b6000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ba9190610864565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032b9190610864565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015610376573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039a9190610864565b90506001600160a01b038116156103cb57600780546001600160a01b0319166001600160a01b038316179055610530565b816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042d9190610864565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561047a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049e9190610864565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156104eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050f9190610864565b600780546001600160a01b0319166001600160a01b03929092169190911790555b600754610547906001600160a01b03166001610691565b60075461055e906001600160a01b031660016105e4565b6105698460016106e5565b6105743060016106e5565b61058161dead60016106e5565b61058c8460016105e4565b6105973060016105e4565b6105a461dead60016105e4565b6127106105b2846001610aff565b6105bc9190610b16565b601655601b805460ff191660011790556105d68484610785565b5050505050610b4b565b3390565b6005546001600160a01b031633146106315760405162461bcd60e51b8152602060048201819052602482015260008051602061420283398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f388758d239a7790471b273e3760fe65d6424024ca3adb4582f843cec8e71ba5e91015b60405180910390a25050565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b0316331461072d5760405162461bcd60e51b815260206004820181905260248201526000805160206142028339815191526044820152606401610628565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610685565b6001600160a01b0382166107db5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610628565b80600260008282546107ed9190610b38565b90915550506001600160a01b0382166000908152602081905260408120805483929061081a908490610b38565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60006020828403121561087657600080fd5b81516001600160a01b038116811461088d57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806108be57607f821691505b6020821081036108de57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561092e57806000526020600020601f840160051c8101602085101561090b5750805b601f840160051c820191505b8181101561092b5760008155600101610917565b50505b505050565b81516001600160401b0381111561094c5761094c610894565b6109608161095a84546108aa565b846108e4565b6020601f821160018114610994576000831561097c5750848201515b600019600385901b1c1916600184901b17845561092b565b600084815260208120601f198516915b828110156109c457878501518255602094850194600190920191016109a4565b50848210156109e25786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b6001815b6001841115610a4257808504811115610a2657610a266109f1565b6001841615610a3457908102905b60019390931c928002610a0b565b935093915050565b600082610a5957506001610aea565b81610a6657506000610aea565b8160018114610a7c5760028114610a8657610aa2565b6001915050610aea565b60ff841115610a9757610a976109f1565b50506001821b610aea565b5060208310610133831016604e8410600b8410161715610ac5575081810a610aea565b610ad26000198484610a07565b8060001904821115610ae657610ae66109f1565b0290505b92915050565b600061088d60ff841683610a4a565b8082028115828204841417610aea57610aea6109f1565b600082610b3357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610aea57610aea6109f1565b60805160a051613661610ba160003960008181610adf015281816110e0015281816111ae0152818161122e0152611c53015260008181610510015281816129d101528181612a8a0152612ac801526136616000f3fe6080604052600436106103cc5760003560e01c806370a08231116101fb578063bbc0c74211610117578063dd62ed3e116100a5578063ee40166e11610077578063ee40166e14610bc8578063ee6bdf8914610bde578063eff165bd14610bfe578063f2fde38b14610c14578063f8b45b0514610c3457005b8063dd62ed3e14610b2c578063e1f1487414610b72578063e2f4560514610b92578063eba4c33314610ba857005b8063c8c8ebe4116100e9578063c8c8ebe414610a97578063cd0fd14914610aad578063d5f3948814610acd578063d73e12f614610b01578063d85ba06314610b1657005b8063bbc0c74214610a16578063bbd9e5b414610a37578063beb08ab914610a57578063c024666814610a7757005b8063924de9b711610194578063a457c2d711610166578063a457c2d714610965578063a9059cbb14610985578063aa498023146109a5578063b62496f5146109c5578063b6f68691146109f557005b8063924de9b7146108fa5780639292caaf1461091a57806395d89b41146109305780639a7a23d61461094557005b8063751039fc116101cd578063751039fc146108925780637571336a146108a75780638a8c523c146108c75780638da5cb5b146108dc57005b806370a0823114610807578063715018a61461083d578063719276281461085257806371fc46881461087257005b80632d8199c7116102ea5780634a62bb65116102835780635bea1f5d116102555780635bea1f5d146107855780636a3ffffb146107a55780636a486a8e146107bb5780636a7bd94b146107d15780636ddd1713146107e657005b80634a62bb65146106eb5780634fbee1931461070c5780635009716c14610745578063518fbc081461076557005b806339509351116102bc578063395093511461067f5780633f8a62041461069f57806347062402146106b557806349bd5a5e146106cb57005b80632d8199c7146106145780632e71c87714610629578063313ce56714610649578063343572fa1461066557005b80631694505e1161036757806320d3cc9e1161033957806320d3cc9e1461059e57806323b872dd146105b357806327163663146105d357806327c8f835146105e85780632b14ca56146105fe57005b80631694505e146104fe57806318160ddd1461054a5780631c499ab01461056957806320800a001461058957005b806306fdde03116103a057806306fdde031461046c578063095ea7b31461048e5780630ed91680146104ae57806310d5de53146104ce57005b8062ae3bf8146103ce57806302a32ae2146103ee57806302ce58131461042257806306c933d81461043c575b005b3480156103da57600080fd5b506103cc6103e936600461308c565b610c4a565b3480156103fa57600080fd5b50601d5461040d90610100900460ff1681565b60405190151581526020015b60405180910390f35b34801561042e57600080fd5b50601b5461040d9060ff1681565b34801561044857600080fd5b5061040d61045736600461308c565b601c6020526000908152604090205460ff1681565b34801561047857600080fd5b50610481610da5565b60405161041991906130f6565b34801561049a57600080fd5b5061040d6104a9366004613109565b610e37565b3480156104ba57600080fd5b506103cc6104c936600461308c565b610e4e565b3480156104da57600080fd5b5061040d6104e936600461308c565b60186020526000908152604090205460ff1681565b34801561050a57600080fd5b506105327f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610419565b34801561055657600080fd5b506002545b604051908152602001610419565b34801561057557600080fd5b506103cc610584366004613135565b610efc565b34801561059557600080fd5b506103cc610fa3565b3480156105aa57600080fd5b506103cc6110d5565b3480156105bf57600080fd5b5061040d6105ce36600461314e565b611151565b3480156105df57600080fd5b506103cc6111a3565b3480156105f457600080fd5b5061053261dead81565b34801561060a57600080fd5b5061055b60135481565b34801561062057600080fd5b506103cc611223565b34801561063557600080fd5b506103cc61064436600461308c565b6112a1565b34801561065557600080fd5b5060405160128152602001610419565b34801561067157600080fd5b50601d5461040d9060ff1681565b34801561068b57600080fd5b5061040d61069a366004613109565b61134f565b3480156106ab57600080fd5b5061055b60145481565b3480156106c157600080fd5b5061055b60115481565b3480156106d757600080fd5b50600754610532906001600160a01b031681565b3480156106f757600080fd5b50600b5461040d90600160b81b900460ff1681565b34801561071857600080fd5b5061040d61072736600461308c565b6001600160a01b031660009081526017602052604090205460ff1690565b34801561075157600080fd5b50601d5461040d9062010000900460ff1681565b34801561077157600080fd5b506103cc61078036600461308c565b611386565b34801561079157600080fd5b506103cc6107a0366004613135565b611434565b3480156107b157600080fd5b5061055b600d5481565b3480156107c757600080fd5b5061055b60125481565b3480156107dd57600080fd5b506103cc6114b6565b3480156107f257600080fd5b50600b5461040d90600160b01b900460ff1681565b34801561081357600080fd5b5061055b61082236600461308c565b6001600160a01b031660009081526020819052604090205490565b34801561084957600080fd5b506103cc611535565b34801561085e57600080fd5b506103cc61086d36600461308c565b6115a9565b34801561087e57600080fd5b506103cc61088d366004613135565b611657565b34801561089e57600080fd5b5061040d6116de565b3480156108b357600080fd5b506103cc6108c236600461319d565b611748565b3480156108d357600080fd5b506103cc6117d2565b3480156108e857600080fd5b506005546001600160a01b0316610532565b34801561090657600080fd5b506103cc6109153660046131d6565b611908565b34801561092657600080fd5b5061055b601a5481565b34801561093c57600080fd5b5061048161197f565b34801561095157600080fd5b506103cc61096036600461319d565b61198e565b34801561097157600080fd5b5061040d610980366004613109565b6119f5565b34801561099157600080fd5b5061040d6109a0366004613109565b611a2c565b3480156109b157600080fd5b506103cc6109c0366004613135565b611a39565b3480156109d157600080fd5b5061040d6109e036600461308c565b60196020526000908152604090205460ff1681565b348015610a0157600080fd5b50601d5461040d906301000000900460ff1681565b348015610a2257600080fd5b50600b5461040d90600160a81b900460ff1681565b348015610a4357600080fd5b506103cc610a523660046131f3565b611ad9565b348015610a6357600080fd5b50600854610532906001600160a01b031681565b348015610a8357600080fd5b506103cc610a9236600461319d565b611bc6565b348015610aa357600080fd5b5061055b600e5481565b348015610ab957600080fd5b50600954610532906001600160a01b031681565b348015610ad957600080fd5b506105327f000000000000000000000000000000000000000000000000000000000000000081565b348015610b0d57600080fd5b506103cc611c48565b348015610b2257600080fd5b5061055b60105481565b348015610b3857600080fd5b5061055b610b4736600461327c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b7e57600080fd5b50600b54610532906001600160a01b031681565b348015610b9e57600080fd5b5061055b60165481565b348015610bb457600080fd5b506103cc610bc3366004613135565b611cbe565b348015610bd457600080fd5b5061055b600c5481565b348015610bea57600080fd5b50600a54610532906001600160a01b031681565b348015610c0a57600080fd5b5061055b60155481565b348015610c2057600080fd5b506103cc610c2f36600461308c565b611d45565b348015610c4057600080fd5b5061055b600f5481565b6005546001600160a01b03163314610c7d5760405162461bcd60e51b8152600401610c74906132aa565b60405180910390fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cea91906132df565b905080600003610d0d5760405163081ceff360e41b815260040160405180910390fd5b816001600160a01b031663a9059cbb610d2e6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610d7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9f91906132f8565b50505050565b606060038054610db490613315565b80601f0160208091040260200160405190810160405280929190818152602001828054610de090613315565b8015610e2d5780601f10610e0257610100808354040283529160200191610e2d565b820191906000526020600020905b815481529060010190602001808311610e1057829003601f168201915b5050505050905090565b6000610e44338484611e30565b5060015b92915050565b6005546001600160a01b03163314610e785760405162461bcd60e51b8152600401610c74906132aa565b6001600160a01b038116610e9f5760405163f12aab9d60e01b815260040160405180910390fd5b600b546040516001600160a01b03918216918316907f5119b7c42595066c7ec6106563cbe03442f1ba8d305d4981ce87bc80ad3d8ddd90600090a3600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f265760405162461bcd60e51b8152600401610c74906132aa565b612710610f3260025490565b610f3d906064613365565b610f47919061337c565b811015610f675760405163a51c909d60e01b815260040160405180910390fd5b600f8190556040518181527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace906020015b60405180910390a150565b6005546001600160a01b03163314610fcd5760405162461bcd60e51b8152600401610c74906132aa565b60026006540361101f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c74565b60026006554760008190036110475760405163081ceff360e41b815260040160405180910390fd5b600061105b6005546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d80600081146110a5576040519150601f19603f3d011682016040523d82523d6000602084013e6110aa565b606091505b50509050806110cc5760405163081ceff360e41b815260040160405180910390fd5b50506001600655565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461111d5760405162461bcd60e51b8152600401610c749061339e565b601d54610100900460ff166111445760405162461bcd60e51b8152600401610c74906133ce565b601d805461ff0019169055565b600061115e848484611f55565b6001600160a01b0384166000908152600160209081526040808320338085529252909120546111999186916111949086906133fd565b611e30565b5060019392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111eb5760405162461bcd60e51b8152600401610c749061339e565b601d546301000000900460ff166112145760405162461bcd60e51b8152600401610c74906133ce565b601d805463ff00000019169055565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461126b5760405162461bcd60e51b8152600401610c749061339e565b601d5462010000900460ff166112935760405162461bcd60e51b8152600401610c74906133ce565b601d805462ff000019169055565b6005546001600160a01b031633146112cb5760405162461bcd60e51b8152600401610c74906132aa565b6001600160a01b0381166112f25760405163f12aab9d60e01b815260040160405180910390fd5b600a546040516001600160a01b03918216918316907fd5bab94e3f642caa9f25830fdd5537e2df93309890c3a49998c6d0eb0c8c053b90600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610e44918590611194908690613410565b6005546001600160a01b031633146113b05760405162461bcd60e51b8152600401610c74906132aa565b6001600160a01b0381166113d75760405163f12aab9d60e01b815260040160405180910390fd5b6009546040516001600160a01b03918216918316907f5636c2b58fb71de1761762b630fb3be56d15e4474444f0f8e517c11aad57033a90600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461145e5760405162461bcd60e51b8152600401610c74906132aa565b6103e881111561148157604051633f86cacf60e11b815260040160405180910390fd5b60158190556040518181527fd08d3952aefe7cb7a7c742db67cd6bdb7cfea25b875f3797f4959c12a261197790602001610f98565b6005546001600160a01b031633146114e05760405162461bcd60e51b8152600401610c74906132aa565b601b5460ff166115295760405162461bcd60e51b815260206004820152601460248201527357686974656c697374206e6f742061637469766560601b6044820152606401610c74565b601b805460ff19169055565b6005546001600160a01b0316331461155f5760405162461bcd60e51b8152600401610c74906132aa565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146115d35760405162461bcd60e51b8152600401610c74906132aa565b6001600160a01b0381166115fa5760405163f12aab9d60e01b815260040160405180910390fd5b6008546040516001600160a01b03918216918316907fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e790600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146116815760405162461bcd60e51b8152600401610c74906132aa565b6011548111156116a457604051631f333b8160e01b815260040160405180910390fd5b601181905560108190556040518181527f491005465ab6f82fd10f4b13a1b1e5ca452bc4856b019f63775e33a6b1ad2feb90602001610f98565b6005546000906001600160a01b0316331461170b5760405162461bcd60e51b8152600401610c74906132aa565b600b805460ff60b81b191690556040517f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef90600090a15060015b90565b6005546001600160a01b031633146117725760405162461bcd60e51b8152600401610c74906132aa565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f388758d239a7790471b273e3760fe65d6424024ca3adb4582f843cec8e71ba5e91015b60405180910390a25050565b6005546001600160a01b031633146117fc5760405162461bcd60e51b8152600401610c74906132aa565b6008546001600160a01b03166118255760405163f12aab9d60e01b815260040160405180910390fd5b6009546001600160a01b031661184e5760405163f12aab9d60e01b815260040160405180910390fd5b600a546001600160a01b03166118775760405163f12aab9d60e01b815260040160405180910390fd5b600b546001600160a01b03166118a05760405163f12aab9d60e01b815260040160405180910390fd5b600b805462ffffff60a81b19166201010160a81b17905543600c81905542600d819055601a55601b805460ff191660011790556040519081527fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e9239060200160405180910390a1565b6005546001600160a01b031633146119325760405162461bcd60e51b8152600401610c74906132aa565b600b8054821515600160b01b0260ff60b01b199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1290610f9890831515815260200190565b606060048054610db490613315565b6005546001600160a01b031633146119b85760405162461bcd60e51b8152600401610c74906132aa565b6007546001600160a01b03908116908316036119e757604051630277ae4960e21b815260040160405180910390fd5b6119f18282612685565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610e449185906111949086906133fd565b6000610e44338484611f55565b6005546001600160a01b03163314611a635760405162461bcd60e51b8152600401610c74906132aa565b612710611a6f60025490565b611a7a906064613365565b611a84919061337c565b811015611aa45760405163c7d1448f60e01b815260040160405180910390fd5b600e8190556040518181527f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac90602001610f98565b6005546001600160a01b03163314611b035760405162461bcd60e51b8152600401610c74906132aa565b60005b82811015610d9f5781601c6000868685818110611b2557611b25613423565b9050602002016020810190611b3a919061308c565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110611b7457611b74613423565b9050602002016020810190611b89919061308c565b6001600160a01b03167faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a5460405160405180910390a2600101611b06565b6005546001600160a01b03163314611bf05760405162461bcd60e51b8152600401610c74906132aa565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016117c6565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c905760405162461bcd60e51b8152600401610c749061339e565b601d5460ff16611cb25760405162461bcd60e51b8152600401610c74906133ce565b601d805460ff19169055565b6005546001600160a01b03163314611ce85760405162461bcd60e51b8152600401610c74906132aa565b601354811115611d0b57604051631f333b8160e01b815260040160405180910390fd5b601381905560128190556040518181527f16df2c25b3392f376a685a3826b941b25140108d95899d6b1bd983feafbc1c5590602001610f98565b6005546001600160a01b03163314611d6f5760405162461bcd60e51b8152600401610c74906132aa565b6001600160a01b038116611dd45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c74565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611e925760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c74565b6001600160a01b038216611ef35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c74565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611f7c57604051630b07e54560e11b815260040160405180910390fd5b6001600160a01b038216611fa357604051633a954ecd60e21b815260040160405180910390fd5b600b54600160a81b900460ff16612014576001600160a01b03831660009081526017602052604090205460ff16158015611ff657506001600160a01b03821660009081526017602052604090205460ff16155b1561201457604051632924508760e21b815260040160405180910390fd5b8060000361202d57612028838360006126d9565b505050565b600b54600160b81b900460ff1680156120505750600b54600160a01b900460ff16155b1561244f576005546001600160a01b0384811691161480159061208157506005546001600160a01b03838116911614155b801561209557506001600160a01b03821615155b80156120ac57506001600160a01b03821661dead14155b1561244f57601b5460009060ff1680156120d35750601a546120d09061012c613410565b42105b90506000808215612129576127106120ea60025490565b6120f5906014613365565b6120ff919061337c565b915061271061210d60025490565b612118906014613365565b612122919061337c565b9050612147565b5050600e54600f54601b5460ff161561214757601b805460ff191690555b82156122c4576001600160a01b03861660009081526019602052604090205460ff16156121ab576001600160a01b0385166000908152601c602052604090205460ff166121a65760405162461bcd60e51b8152600401610c7490613439565b6122c4565b6001600160a01b03851660009081526019602052604090205460ff1615612204576001600160a01b0386166000908152601c602052604090205460ff166121a65760405162461bcd60e51b8152600401610c7490613439565b6001600160a01b0386166000908152601c602052604090205460ff16801561224457506001600160a01b0385166000908152601c602052604090205460ff165b6122c45760405162461bcd60e51b815260206004820152604560248201527f426f74682073656e64657220616e6420726563697069656e74206d757374206260448201527f652077686974656c697374656420647572696e672077686974656c6973742070606482015264195c9a5bd960da1b608482015260a401610c74565b6001600160a01b03861660009081526019602052604090205460ff16801561230557506001600160a01b03851660009081526018602052604090205460ff16155b1561237a578184111561232b5760405163fdeb075d60e01b815260040160405180910390fd5b808461234c876001600160a01b031660009081526020819052604090205490565b6123569190613410565b11156123755760405163fd42866160e01b815260040160405180910390fd5b61244b565b6001600160a01b03851660009081526019602052604090205460ff1680156123bb57506001600160a01b03861660009081526018602052604090205460ff16155b156123e157818411156123755760405163fdeb075d60e01b815260040160405180910390fd5b6001600160a01b03851660009081526018602052604090205460ff1661244b578084612422876001600160a01b031660009081526020819052604090205490565b61242c9190613410565b111561244b5760405163fd42866160e01b815260040160405180910390fd5b5050505b3060009081526020819052604081205460165490919082108015919082906124805750600b54600160b01b900460ff165b80156124965750600b54600160a01b900460ff16155b80156124ba57506001600160a01b03851660009081526019602052604090205460ff165b80156124cf57506001600160a01b0386163014155b80156124f457506001600160a01b03861660009081526017602052604090205460ff16155b9050801561252657600b805460ff60a01b1916600160a01b17905561251884612840565b600b805460ff60a01b191690555b600b546001600160a01b03871660009081526017602052604090205460ff600160a01b90920482161591168061257457506001600160a01b03861660009081526017602052604090205460ff165b1561257d575060005b60008115612670576001600160a01b03871660009081526019602052604090205460ff1680156125af57506000601254115b156125ee57612710601254876125c59190613365565b6125cf919061337c565b905080601460008282546125e39190613410565b909155506126529050565b6001600160a01b03881660009081526019602052604090205460ff16801561261857506000601054115b15612652576127106010548761262e9190613365565b612638919061337c565b9050806014600082825461264c9190613410565b90915550505b8015612663576126638830836126d9565b61266d81876133fd565b95505b61267b8888886126d9565b5050505050505050565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831661273d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c74565b6001600160a01b03821661279f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c74565b6001600160a01b038316600090815260208190526040812080548392906127c79084906133fd565b90915550506001600160a01b038216600090815260208190526040812080548392906127f4908490613410565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f4891815260200190565b6002600654036128925760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c74565b6002600655306000908152602081905260409020546014548115806128b5575080155b156128c157505061296e565b60006127106015546128d260025490565b6128dc9190613365565b6128e6919061337c565b905083818111156128f45750805b828111156128ff5750815b8381111561290a5750825b60165481101561291d575050505061296e565b600061292882612976565b9050801561295e57816014600082825461294291906133fd565b9091555047905080156129585761295881612c57565b50612968565b505050505061296e565b50505050505b506001600655565b6040805160028082526060820183526000928392919060208301908036833701905050905030816000815181106129af576129af613423565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a519190613480565b81600181518110612a6457612a64613423565b60200260200101906001600160a01b031690816001600160a01b031681525050612aaf307f000000000000000000000000000000000000000000000000000000000000000085611e30565b60405163791ac94760e01b815247906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612b0690879060009087903090429060040161349d565b600060405180830381600087803b158015612b2057600080fd5b505af1925050508015612b31575060015b612c0257612b3d61350f565b806308c379a003612b9f5750612b51613565565b80612b5c5750612ba1565b7fdf56312a616c0a93bb5bc464e3b9e2514160a42cbc69db8a095db22d397b4a198582604051612b8d9291906135ea565b60405180910390a16000935050612c50565b505b3d808015612bcb576040519150601f19603f3d011682016040523d82523d6000602084013e612bd0565b606091505b507fcac61de4cc24e08946cbe1f74266e89411092e0723d52258d0b9f3b6142c1df68582604051612b8d9291906135ea565b6000612c0e82476133fd565b60408051878152602081018390529192507fa808b9f34dc92cf15d3573b357678c78b5aeb0ae55a5d0fb3915b2a3611649c5910160405180910390a160019350505b5050919050565b80600003612c625750565b6000806000806000601d60029054906101000a900460ff1615612c91576106d69350612c8e8486613410565b94505b601d546301000000900460ff1615612cb5576101f49250612cb28386613410565b94505b601d5460ff1615612cd257610f239150612ccf8286613410565b94505b601d54610100900460ff1615612cf35750610f23612cf08186613410565b94505b84600003612d0357505050505050565b60008415612dc657600086612d18878a613365565b612d22919061337c565b9050612d2e8183613410565b600a546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114612d80576040519150601f19603f3d011682016040523d82523d6000602084013e612d85565b606091505b5050905080612dc357600a54604080516001600160a01b0390921682526020820184905260008051602061360c833981519152910160405180910390a15b50505b8315612e8757600086612dd9868a613365565b612de3919061337c565b9050612def8183613410565b600b546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114612e41576040519150601f19603f3d011682016040523d82523d6000602084013e612e46565b606091505b5050905080612e8457600b54604080516001600160a01b0390921682526020820184905260008051602061360c833981519152910160405180910390a15b50505b8215612f4857600086612e9a858a613365565b612ea4919061337c565b9050612eb08183613410565b6008546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114612f02576040519150601f19603f3d011682016040523d82523d6000602084013e612f07565b606091505b5050905080612f4557600854604080516001600160a01b0390921682526020820184905260008051602061360c833981519152910160405180910390a15b50505b811561300957600086612f5b848a613365565b612f65919061337c565b9050612f718183613410565b6009546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114612fc3576040519150601f19603f3d011682016040523d82523d6000602084013e612fc8565b606091505b505090508061300657600954604080516001600160a01b0390921682526020820184905260008051602061360c833981519152910160405180910390a15b50505b8681111561306b5760405162461bcd60e51b815260206004820152602960248201527f496e73756666696369656e74204554482062616c616e636520666f72206469736044820152683a3934b13aba34b7b760b91b6064820152608401610c74565b50505050505050565b6001600160a01b038116811461308957600080fd5b50565b60006020828403121561309e57600080fd5b81356130a981613074565b9392505050565b6000815180845260005b818110156130d6576020818501810151868301820152016130ba565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006130a960208301846130b0565b6000806040838503121561311c57600080fd5b823561312781613074565b946020939093013593505050565b60006020828403121561314757600080fd5b5035919050565b60008060006060848603121561316357600080fd5b833561316e81613074565b9250602084013561317e81613074565b929592945050506040919091013590565b801515811461308957600080fd5b600080604083850312156131b057600080fd5b82356131bb81613074565b915060208301356131cb8161318f565b809150509250929050565b6000602082840312156131e857600080fd5b81356130a98161318f565b60008060006040848603121561320857600080fd5b833567ffffffffffffffff81111561321f57600080fd5b8401601f8101861361323057600080fd5b803567ffffffffffffffff81111561324757600080fd5b8660208260051b840101111561325c57600080fd5b6020918201945092508401356132718161318f565b809150509250925092565b6000806040838503121561328f57600080fd5b823561329a81613074565b915060208301356131cb81613074565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156132f157600080fd5b5051919050565b60006020828403121561330a57600080fd5b81516130a98161318f565b600181811c9082168061332957607f821691505b60208210810361334957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610e4857610e4861334f565b60008261339957634e487b7160e01b600052601260045260246000fd5b500490565b60208082526016908201527513db9b1e4819195c1b1bde595c8818d85b8818d85b1b60521b604082015260600190565b60208082526015908201527415185e195cc8185b1c9958591e481c995d9bdad959605a1b604082015260600190565b81810381811115610e4857610e4861334f565b80820180821115610e4857610e4861334f565b634e487b7160e01b600052603260045260246000fd5b60208082526027908201527f4e6f742077686974656c697374656420647572696e672077686974656c697374604082015266081c195c9a5bd960ca1b606082015260800190565b60006020828403121561349257600080fd5b81516130a981613074565b600060a0820187835286602084015260a0604084015280865180835260c08501915060208801925060005b818110156134ef5783516001600160a01b03168352602093840193909201916001016134c8565b50506001600160a01b039590951660608401525050608001529392505050565b600060033d11156117455760046000803e5060005160e01c90565b601f8201601f1916810167ffffffffffffffff8111828210171561355e57634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d10156135735790565b6040513d600319016004823e80513d602482011167ffffffffffffffff8211171561359d57505090565b808201805167ffffffffffffffff8111156135b9575050505090565b3d84016003190182820160200111156135d3575050505090565b6135e26020828501018561352a565b509392505050565b82815260406020820152600061360360408301846130b0565b94935050505056fe1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda81a2646970667358221220ac363f559d911b9a934c0b776418dcd9f2876b7144e210cba02f3d82d296963264736f6c634300081b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65720000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106103cc5760003560e01c806370a08231116101fb578063bbc0c74211610117578063dd62ed3e116100a5578063ee40166e11610077578063ee40166e14610bc8578063ee6bdf8914610bde578063eff165bd14610bfe578063f2fde38b14610c14578063f8b45b0514610c3457005b8063dd62ed3e14610b2c578063e1f1487414610b72578063e2f4560514610b92578063eba4c33314610ba857005b8063c8c8ebe4116100e9578063c8c8ebe414610a97578063cd0fd14914610aad578063d5f3948814610acd578063d73e12f614610b01578063d85ba06314610b1657005b8063bbc0c74214610a16578063bbd9e5b414610a37578063beb08ab914610a57578063c024666814610a7757005b8063924de9b711610194578063a457c2d711610166578063a457c2d714610965578063a9059cbb14610985578063aa498023146109a5578063b62496f5146109c5578063b6f68691146109f557005b8063924de9b7146108fa5780639292caaf1461091a57806395d89b41146109305780639a7a23d61461094557005b8063751039fc116101cd578063751039fc146108925780637571336a146108a75780638a8c523c146108c75780638da5cb5b146108dc57005b806370a0823114610807578063715018a61461083d578063719276281461085257806371fc46881461087257005b80632d8199c7116102ea5780634a62bb65116102835780635bea1f5d116102555780635bea1f5d146107855780636a3ffffb146107a55780636a486a8e146107bb5780636a7bd94b146107d15780636ddd1713146107e657005b80634a62bb65146106eb5780634fbee1931461070c5780635009716c14610745578063518fbc081461076557005b806339509351116102bc578063395093511461067f5780633f8a62041461069f57806347062402146106b557806349bd5a5e146106cb57005b80632d8199c7146106145780632e71c87714610629578063313ce56714610649578063343572fa1461066557005b80631694505e1161036757806320d3cc9e1161033957806320d3cc9e1461059e57806323b872dd146105b357806327163663146105d357806327c8f835146105e85780632b14ca56146105fe57005b80631694505e146104fe57806318160ddd1461054a5780631c499ab01461056957806320800a001461058957005b806306fdde03116103a057806306fdde031461046c578063095ea7b31461048e5780630ed91680146104ae57806310d5de53146104ce57005b8062ae3bf8146103ce57806302a32ae2146103ee57806302ce58131461042257806306c933d81461043c575b005b3480156103da57600080fd5b506103cc6103e936600461308c565b610c4a565b3480156103fa57600080fd5b50601d5461040d90610100900460ff1681565b60405190151581526020015b60405180910390f35b34801561042e57600080fd5b50601b5461040d9060ff1681565b34801561044857600080fd5b5061040d61045736600461308c565b601c6020526000908152604090205460ff1681565b34801561047857600080fd5b50610481610da5565b60405161041991906130f6565b34801561049a57600080fd5b5061040d6104a9366004613109565b610e37565b3480156104ba57600080fd5b506103cc6104c936600461308c565b610e4e565b3480156104da57600080fd5b5061040d6104e936600461308c565b60186020526000908152604090205460ff1681565b34801561050a57600080fd5b506105327f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610419565b34801561055657600080fd5b506002545b604051908152602001610419565b34801561057557600080fd5b506103cc610584366004613135565b610efc565b34801561059557600080fd5b506103cc610fa3565b3480156105aa57600080fd5b506103cc6110d5565b3480156105bf57600080fd5b5061040d6105ce36600461314e565b611151565b3480156105df57600080fd5b506103cc6111a3565b3480156105f457600080fd5b5061053261dead81565b34801561060a57600080fd5b5061055b60135481565b34801561062057600080fd5b506103cc611223565b34801561063557600080fd5b506103cc61064436600461308c565b6112a1565b34801561065557600080fd5b5060405160128152602001610419565b34801561067157600080fd5b50601d5461040d9060ff1681565b34801561068b57600080fd5b5061040d61069a366004613109565b61134f565b3480156106ab57600080fd5b5061055b60145481565b3480156106c157600080fd5b5061055b60115481565b3480156106d757600080fd5b50600754610532906001600160a01b031681565b3480156106f757600080fd5b50600b5461040d90600160b81b900460ff1681565b34801561071857600080fd5b5061040d61072736600461308c565b6001600160a01b031660009081526017602052604090205460ff1690565b34801561075157600080fd5b50601d5461040d9062010000900460ff1681565b34801561077157600080fd5b506103cc61078036600461308c565b611386565b34801561079157600080fd5b506103cc6107a0366004613135565b611434565b3480156107b157600080fd5b5061055b600d5481565b3480156107c757600080fd5b5061055b60125481565b3480156107dd57600080fd5b506103cc6114b6565b3480156107f257600080fd5b50600b5461040d90600160b01b900460ff1681565b34801561081357600080fd5b5061055b61082236600461308c565b6001600160a01b031660009081526020819052604090205490565b34801561084957600080fd5b506103cc611535565b34801561085e57600080fd5b506103cc61086d36600461308c565b6115a9565b34801561087e57600080fd5b506103cc61088d366004613135565b611657565b34801561089e57600080fd5b5061040d6116de565b3480156108b357600080fd5b506103cc6108c236600461319d565b611748565b3480156108d357600080fd5b506103cc6117d2565b3480156108e857600080fd5b506005546001600160a01b0316610532565b34801561090657600080fd5b506103cc6109153660046131d6565b611908565b34801561092657600080fd5b5061055b601a5481565b34801561093c57600080fd5b5061048161197f565b34801561095157600080fd5b506103cc61096036600461319d565b61198e565b34801561097157600080fd5b5061040d610980366004613109565b6119f5565b34801561099157600080fd5b5061040d6109a0366004613109565b611a2c565b3480156109b157600080fd5b506103cc6109c0366004613135565b611a39565b3480156109d157600080fd5b5061040d6109e036600461308c565b60196020526000908152604090205460ff1681565b348015610a0157600080fd5b50601d5461040d906301000000900460ff1681565b348015610a2257600080fd5b50600b5461040d90600160a81b900460ff1681565b348015610a4357600080fd5b506103cc610a523660046131f3565b611ad9565b348015610a6357600080fd5b50600854610532906001600160a01b031681565b348015610a8357600080fd5b506103cc610a9236600461319d565b611bc6565b348015610aa357600080fd5b5061055b600e5481565b348015610ab957600080fd5b50600954610532906001600160a01b031681565b348015610ad957600080fd5b506105327f00000000000000000000000085dbe4ce3c809dac17e4b1d32a5a2478038a3ae181565b348015610b0d57600080fd5b506103cc611c48565b348015610b2257600080fd5b5061055b60105481565b348015610b3857600080fd5b5061055b610b4736600461327c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b7e57600080fd5b50600b54610532906001600160a01b031681565b348015610b9e57600080fd5b5061055b60165481565b348015610bb457600080fd5b506103cc610bc3366004613135565b611cbe565b348015610bd457600080fd5b5061055b600c5481565b348015610bea57600080fd5b50600a54610532906001600160a01b031681565b348015610c0a57600080fd5b5061055b60155481565b348015610c2057600080fd5b506103cc610c2f36600461308c565b611d45565b348015610c4057600080fd5b5061055b600f5481565b6005546001600160a01b03163314610c7d5760405162461bcd60e51b8152600401610c74906132aa565b60405180910390fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cea91906132df565b905080600003610d0d5760405163081ceff360e41b815260040160405180910390fd5b816001600160a01b031663a9059cbb610d2e6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610d7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9f91906132f8565b50505050565b606060038054610db490613315565b80601f0160208091040260200160405190810160405280929190818152602001828054610de090613315565b8015610e2d5780601f10610e0257610100808354040283529160200191610e2d565b820191906000526020600020905b815481529060010190602001808311610e1057829003601f168201915b5050505050905090565b6000610e44338484611e30565b5060015b92915050565b6005546001600160a01b03163314610e785760405162461bcd60e51b8152600401610c74906132aa565b6001600160a01b038116610e9f5760405163f12aab9d60e01b815260040160405180910390fd5b600b546040516001600160a01b03918216918316907f5119b7c42595066c7ec6106563cbe03442f1ba8d305d4981ce87bc80ad3d8ddd90600090a3600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f265760405162461bcd60e51b8152600401610c74906132aa565b612710610f3260025490565b610f3d906064613365565b610f47919061337c565b811015610f675760405163a51c909d60e01b815260040160405180910390fd5b600f8190556040518181527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace906020015b60405180910390a150565b6005546001600160a01b03163314610fcd5760405162461bcd60e51b8152600401610c74906132aa565b60026006540361101f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c74565b60026006554760008190036110475760405163081ceff360e41b815260040160405180910390fd5b600061105b6005546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d80600081146110a5576040519150601f19603f3d011682016040523d82523d6000602084013e6110aa565b606091505b50509050806110cc5760405163081ceff360e41b815260040160405180910390fd5b50506001600655565b336001600160a01b037f00000000000000000000000085dbe4ce3c809dac17e4b1d32a5a2478038a3ae1161461111d5760405162461bcd60e51b8152600401610c749061339e565b601d54610100900460ff166111445760405162461bcd60e51b8152600401610c74906133ce565b601d805461ff0019169055565b600061115e848484611f55565b6001600160a01b0384166000908152600160209081526040808320338085529252909120546111999186916111949086906133fd565b611e30565b5060019392505050565b336001600160a01b037f00000000000000000000000085dbe4ce3c809dac17e4b1d32a5a2478038a3ae116146111eb5760405162461bcd60e51b8152600401610c749061339e565b601d546301000000900460ff166112145760405162461bcd60e51b8152600401610c74906133ce565b601d805463ff00000019169055565b336001600160a01b037f00000000000000000000000085dbe4ce3c809dac17e4b1d32a5a2478038a3ae1161461126b5760405162461bcd60e51b8152600401610c749061339e565b601d5462010000900460ff166112935760405162461bcd60e51b8152600401610c74906133ce565b601d805462ff000019169055565b6005546001600160a01b031633146112cb5760405162461bcd60e51b8152600401610c74906132aa565b6001600160a01b0381166112f25760405163f12aab9d60e01b815260040160405180910390fd5b600a546040516001600160a01b03918216918316907fd5bab94e3f642caa9f25830fdd5537e2df93309890c3a49998c6d0eb0c8c053b90600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610e44918590611194908690613410565b6005546001600160a01b031633146113b05760405162461bcd60e51b8152600401610c74906132aa565b6001600160a01b0381166113d75760405163f12aab9d60e01b815260040160405180910390fd5b6009546040516001600160a01b03918216918316907f5636c2b58fb71de1761762b630fb3be56d15e4474444f0f8e517c11aad57033a90600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461145e5760405162461bcd60e51b8152600401610c74906132aa565b6103e881111561148157604051633f86cacf60e11b815260040160405180910390fd5b60158190556040518181527fd08d3952aefe7cb7a7c742db67cd6bdb7cfea25b875f3797f4959c12a261197790602001610f98565b6005546001600160a01b031633146114e05760405162461bcd60e51b8152600401610c74906132aa565b601b5460ff166115295760405162461bcd60e51b815260206004820152601460248201527357686974656c697374206e6f742061637469766560601b6044820152606401610c74565b601b805460ff19169055565b6005546001600160a01b0316331461155f5760405162461bcd60e51b8152600401610c74906132aa565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146115d35760405162461bcd60e51b8152600401610c74906132aa565b6001600160a01b0381166115fa5760405163f12aab9d60e01b815260040160405180910390fd5b6008546040516001600160a01b03918216918316907fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e790600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146116815760405162461bcd60e51b8152600401610c74906132aa565b6011548111156116a457604051631f333b8160e01b815260040160405180910390fd5b601181905560108190556040518181527f491005465ab6f82fd10f4b13a1b1e5ca452bc4856b019f63775e33a6b1ad2feb90602001610f98565b6005546000906001600160a01b0316331461170b5760405162461bcd60e51b8152600401610c74906132aa565b600b805460ff60b81b191690556040517f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef90600090a15060015b90565b6005546001600160a01b031633146117725760405162461bcd60e51b8152600401610c74906132aa565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f388758d239a7790471b273e3760fe65d6424024ca3adb4582f843cec8e71ba5e91015b60405180910390a25050565b6005546001600160a01b031633146117fc5760405162461bcd60e51b8152600401610c74906132aa565b6008546001600160a01b03166118255760405163f12aab9d60e01b815260040160405180910390fd5b6009546001600160a01b031661184e5760405163f12aab9d60e01b815260040160405180910390fd5b600a546001600160a01b03166118775760405163f12aab9d60e01b815260040160405180910390fd5b600b546001600160a01b03166118a05760405163f12aab9d60e01b815260040160405180910390fd5b600b805462ffffff60a81b19166201010160a81b17905543600c81905542600d819055601a55601b805460ff191660011790556040519081527fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e9239060200160405180910390a1565b6005546001600160a01b031633146119325760405162461bcd60e51b8152600401610c74906132aa565b600b8054821515600160b01b0260ff60b01b199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1290610f9890831515815260200190565b606060048054610db490613315565b6005546001600160a01b031633146119b85760405162461bcd60e51b8152600401610c74906132aa565b6007546001600160a01b03908116908316036119e757604051630277ae4960e21b815260040160405180910390fd5b6119f18282612685565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610e449185906111949086906133fd565b6000610e44338484611f55565b6005546001600160a01b03163314611a635760405162461bcd60e51b8152600401610c74906132aa565b612710611a6f60025490565b611a7a906064613365565b611a84919061337c565b811015611aa45760405163c7d1448f60e01b815260040160405180910390fd5b600e8190556040518181527f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac90602001610f98565b6005546001600160a01b03163314611b035760405162461bcd60e51b8152600401610c74906132aa565b60005b82811015610d9f5781601c6000868685818110611b2557611b25613423565b9050602002016020810190611b3a919061308c565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110611b7457611b74613423565b9050602002016020810190611b89919061308c565b6001600160a01b03167faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a5460405160405180910390a2600101611b06565b6005546001600160a01b03163314611bf05760405162461bcd60e51b8152600401610c74906132aa565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016117c6565b336001600160a01b037f00000000000000000000000085dbe4ce3c809dac17e4b1d32a5a2478038a3ae11614611c905760405162461bcd60e51b8152600401610c749061339e565b601d5460ff16611cb25760405162461bcd60e51b8152600401610c74906133ce565b601d805460ff19169055565b6005546001600160a01b03163314611ce85760405162461bcd60e51b8152600401610c74906132aa565b601354811115611d0b57604051631f333b8160e01b815260040160405180910390fd5b601381905560128190556040518181527f16df2c25b3392f376a685a3826b941b25140108d95899d6b1bd983feafbc1c5590602001610f98565b6005546001600160a01b03163314611d6f5760405162461bcd60e51b8152600401610c74906132aa565b6001600160a01b038116611dd45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c74565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611e925760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c74565b6001600160a01b038216611ef35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c74565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611f7c57604051630b07e54560e11b815260040160405180910390fd5b6001600160a01b038216611fa357604051633a954ecd60e21b815260040160405180910390fd5b600b54600160a81b900460ff16612014576001600160a01b03831660009081526017602052604090205460ff16158015611ff657506001600160a01b03821660009081526017602052604090205460ff16155b1561201457604051632924508760e21b815260040160405180910390fd5b8060000361202d57612028838360006126d9565b505050565b600b54600160b81b900460ff1680156120505750600b54600160a01b900460ff16155b1561244f576005546001600160a01b0384811691161480159061208157506005546001600160a01b03838116911614155b801561209557506001600160a01b03821615155b80156120ac57506001600160a01b03821661dead14155b1561244f57601b5460009060ff1680156120d35750601a546120d09061012c613410565b42105b90506000808215612129576127106120ea60025490565b6120f5906014613365565b6120ff919061337c565b915061271061210d60025490565b612118906014613365565b612122919061337c565b9050612147565b5050600e54600f54601b5460ff161561214757601b805460ff191690555b82156122c4576001600160a01b03861660009081526019602052604090205460ff16156121ab576001600160a01b0385166000908152601c602052604090205460ff166121a65760405162461bcd60e51b8152600401610c7490613439565b6122c4565b6001600160a01b03851660009081526019602052604090205460ff1615612204576001600160a01b0386166000908152601c602052604090205460ff166121a65760405162461bcd60e51b8152600401610c7490613439565b6001600160a01b0386166000908152601c602052604090205460ff16801561224457506001600160a01b0385166000908152601c602052604090205460ff165b6122c45760405162461bcd60e51b815260206004820152604560248201527f426f74682073656e64657220616e6420726563697069656e74206d757374206260448201527f652077686974656c697374656420647572696e672077686974656c6973742070606482015264195c9a5bd960da1b608482015260a401610c74565b6001600160a01b03861660009081526019602052604090205460ff16801561230557506001600160a01b03851660009081526018602052604090205460ff16155b1561237a578184111561232b5760405163fdeb075d60e01b815260040160405180910390fd5b808461234c876001600160a01b031660009081526020819052604090205490565b6123569190613410565b11156123755760405163fd42866160e01b815260040160405180910390fd5b61244b565b6001600160a01b03851660009081526019602052604090205460ff1680156123bb57506001600160a01b03861660009081526018602052604090205460ff16155b156123e157818411156123755760405163fdeb075d60e01b815260040160405180910390fd5b6001600160a01b03851660009081526018602052604090205460ff1661244b578084612422876001600160a01b031660009081526020819052604090205490565b61242c9190613410565b111561244b5760405163fd42866160e01b815260040160405180910390fd5b5050505b3060009081526020819052604081205460165490919082108015919082906124805750600b54600160b01b900460ff165b80156124965750600b54600160a01b900460ff16155b80156124ba57506001600160a01b03851660009081526019602052604090205460ff165b80156124cf57506001600160a01b0386163014155b80156124f457506001600160a01b03861660009081526017602052604090205460ff16155b9050801561252657600b805460ff60a01b1916600160a01b17905561251884612840565b600b805460ff60a01b191690555b600b546001600160a01b03871660009081526017602052604090205460ff600160a01b90920482161591168061257457506001600160a01b03861660009081526017602052604090205460ff165b1561257d575060005b60008115612670576001600160a01b03871660009081526019602052604090205460ff1680156125af57506000601254115b156125ee57612710601254876125c59190613365565b6125cf919061337c565b905080601460008282546125e39190613410565b909155506126529050565b6001600160a01b03881660009081526019602052604090205460ff16801561261857506000601054115b15612652576127106010548761262e9190613365565b612638919061337c565b9050806014600082825461264c9190613410565b90915550505b8015612663576126638830836126d9565b61266d81876133fd565b95505b61267b8888886126d9565b5050505050505050565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831661273d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c74565b6001600160a01b03821661279f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c74565b6001600160a01b038316600090815260208190526040812080548392906127c79084906133fd565b90915550506001600160a01b038216600090815260208190526040812080548392906127f4908490613410565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f4891815260200190565b6002600654036128925760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c74565b6002600655306000908152602081905260409020546014548115806128b5575080155b156128c157505061296e565b60006127106015546128d260025490565b6128dc9190613365565b6128e6919061337c565b905083818111156128f45750805b828111156128ff5750815b8381111561290a5750825b60165481101561291d575050505061296e565b600061292882612976565b9050801561295e57816014600082825461294291906133fd565b9091555047905080156129585761295881612c57565b50612968565b505050505061296e565b50505050505b506001600655565b6040805160028082526060820183526000928392919060208301908036833701905050905030816000815181106129af576129af613423565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a519190613480565b81600181518110612a6457612a64613423565b60200260200101906001600160a01b031690816001600160a01b031681525050612aaf307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d85611e30565b60405163791ac94760e01b815247906001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612b0690879060009087903090429060040161349d565b600060405180830381600087803b158015612b2057600080fd5b505af1925050508015612b31575060015b612c0257612b3d61350f565b806308c379a003612b9f5750612b51613565565b80612b5c5750612ba1565b7fdf56312a616c0a93bb5bc464e3b9e2514160a42cbc69db8a095db22d397b4a198582604051612b8d9291906135ea565b60405180910390a16000935050612c50565b505b3d808015612bcb576040519150601f19603f3d011682016040523d82523d6000602084013e612bd0565b606091505b507fcac61de4cc24e08946cbe1f74266e89411092e0723d52258d0b9f3b6142c1df68582604051612b8d9291906135ea565b6000612c0e82476133fd565b60408051878152602081018390529192507fa808b9f34dc92cf15d3573b357678c78b5aeb0ae55a5d0fb3915b2a3611649c5910160405180910390a160019350505b5050919050565b80600003612c625750565b6000806000806000601d60029054906101000a900460ff1615612c91576106d69350612c8e8486613410565b94505b601d546301000000900460ff1615612cb5576101f49250612cb28386613410565b94505b601d5460ff1615612cd257610f239150612ccf8286613410565b94505b601d54610100900460ff1615612cf35750610f23612cf08186613410565b94505b84600003612d0357505050505050565b60008415612dc657600086612d18878a613365565b612d22919061337c565b9050612d2e8183613410565b600a546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114612d80576040519150601f19603f3d011682016040523d82523d6000602084013e612d85565b606091505b5050905080612dc357600a54604080516001600160a01b0390921682526020820184905260008051602061360c833981519152910160405180910390a15b50505b8315612e8757600086612dd9868a613365565b612de3919061337c565b9050612def8183613410565b600b546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114612e41576040519150601f19603f3d011682016040523d82523d6000602084013e612e46565b606091505b5050905080612e8457600b54604080516001600160a01b0390921682526020820184905260008051602061360c833981519152910160405180910390a15b50505b8215612f4857600086612e9a858a613365565b612ea4919061337c565b9050612eb08183613410565b6008546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114612f02576040519150601f19603f3d011682016040523d82523d6000602084013e612f07565b606091505b5050905080612f4557600854604080516001600160a01b0390921682526020820184905260008051602061360c833981519152910160405180910390a15b50505b811561300957600086612f5b848a613365565b612f65919061337c565b9050612f718183613410565b6009546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114612fc3576040519150601f19603f3d011682016040523d82523d6000602084013e612fc8565b606091505b505090508061300657600954604080516001600160a01b0390921682526020820184905260008051602061360c833981519152910160405180910390a15b50505b8681111561306b5760405162461bcd60e51b815260206004820152602960248201527f496e73756666696369656e74204554482062616c616e636520666f72206469736044820152683a3934b13aba34b7b760b91b6064820152608401610c74565b50505050505050565b6001600160a01b038116811461308957600080fd5b50565b60006020828403121561309e57600080fd5b81356130a981613074565b9392505050565b6000815180845260005b818110156130d6576020818501810151868301820152016130ba565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006130a960208301846130b0565b6000806040838503121561311c57600080fd5b823561312781613074565b946020939093013593505050565b60006020828403121561314757600080fd5b5035919050565b60008060006060848603121561316357600080fd5b833561316e81613074565b9250602084013561317e81613074565b929592945050506040919091013590565b801515811461308957600080fd5b600080604083850312156131b057600080fd5b82356131bb81613074565b915060208301356131cb8161318f565b809150509250929050565b6000602082840312156131e857600080fd5b81356130a98161318f565b60008060006040848603121561320857600080fd5b833567ffffffffffffffff81111561321f57600080fd5b8401601f8101861361323057600080fd5b803567ffffffffffffffff81111561324757600080fd5b8660208260051b840101111561325c57600080fd5b6020918201945092508401356132718161318f565b809150509250925092565b6000806040838503121561328f57600080fd5b823561329a81613074565b915060208301356131cb81613074565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156132f157600080fd5b5051919050565b60006020828403121561330a57600080fd5b81516130a98161318f565b600181811c9082168061332957607f821691505b60208210810361334957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610e4857610e4861334f565b60008261339957634e487b7160e01b600052601260045260246000fd5b500490565b60208082526016908201527513db9b1e4819195c1b1bde595c8818d85b8818d85b1b60521b604082015260600190565b60208082526015908201527415185e195cc8185b1c9958591e481c995d9bdad959605a1b604082015260600190565b81810381811115610e4857610e4861334f565b80820180821115610e4857610e4861334f565b634e487b7160e01b600052603260045260246000fd5b60208082526027908201527f4e6f742077686974656c697374656420647572696e672077686974656c697374604082015266081c195c9a5bd960ca1b606082015260800190565b60006020828403121561349257600080fd5b81516130a981613074565b600060a0820187835286602084015260a0604084015280865180835260c08501915060208801925060005b818110156134ef5783516001600160a01b03168352602093840193909201916001016134c8565b50506001600160a01b039590951660608401525050608001529392505050565b600060033d11156117455760046000803e5060005160e01c90565b601f8201601f1916810167ffffffffffffffff8111828210171561355e57634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d10156135735790565b6040513d600319016004823e80513d602482011167ffffffffffffffff8211171561359d57505090565b808201805167ffffffffffffffff8111156135b9575050505090565b3d84016003190182820160200111156135d3575050505090565b6135e26020828501018561352a565b509392505050565b82815260406020820152600061360360408301846130b0565b94935050505056fe1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda81a2646970667358221220ac363f559d911b9a934c0b776418dcd9f2876b7144e210cba02f3d82d296963264736f6c634300081b0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : _router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


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.