ETH Price: $3,246.84 (+4.26%)
 

Overview

ETH Balance

1 wei

Eth Value

Less Than $0.01 (@ $3,246.84/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve217402362025-01-30 22:08:231 hr ago1738274903IN
0xc7290Af2...b868da500
0 ETH0.000215714.63343804
Approve217393052025-01-30 19:00:234 hrs ago1738263623IN
0xc7290Af2...b868da500
0 ETH0.000289786.22443854
Approve217387082025-01-30 17:00:116 hrs ago1738256411IN
0xc7290Af2...b868da500
0 ETH0.000395088.47527531
Approve217263892025-01-28 23:44:472 days ago1738107887IN
0xc7290Af2...b868da500
0 ETH0.000182063.91168137
Approve217263362025-01-28 23:34:112 days ago1738107251IN
0xc7290Af2...b868da500
0 ETH0.00026355.66006291
Approve217262672025-01-28 23:20:232 days ago1738106423IN
0xc7290Af2...b868da500
0 ETH0.000445999.61704261
Approve217256952025-01-28 21:25:472 days ago1738099547IN
0xc7290Af2...b868da500
0 ETH0.000390938.39700278
Approve217249722025-01-28 19:00:112 days ago1738090811IN
0xc7290Af2...b868da500
0 ETH0.000338697.27500225
Approve217151592025-01-27 10:06:593 days ago1737972419IN
0xc7290Af2...b868da500
0 ETH0.000279826.01198108
Approve217141382025-01-27 6:42:353 days ago1737960155IN
0xc7290Af2...b868da500
0 ETH0.000245545.26734596
Approve217122142025-01-27 0:16:593 days ago1737937019IN
0xc7290Af2...b868da500
0 ETH0.000442479.50411776
Transfer217116192025-01-26 22:17:594 days ago1737929879IN
0xc7290Af2...b868da500
0 ETH0.0006763810.68591726
Approve217087722025-01-26 12:44:594 days ago1737895499IN
0xc7290Af2...b868da500
0 ETH0.000239215.13820233
Approve217063202025-01-26 4:31:234 days ago1737865883IN
0xc7290Af2...b868da500
0 ETH0.000233585.01739549
Approve217044082025-01-25 22:08:235 days ago1737842903IN
0xc7290Af2...b868da500
0 ETH0.000349197.50048687
Transfer217043022025-01-25 21:47:115 days ago1737841631IN
0xc7290Af2...b868da500
0 ETH0.00029374.67384872
Approve217012562025-01-25 11:35:595 days ago1737804959IN
0xc7290Af2...b868da500
0 ETH0.000317366.81675148
Transfer216982822025-01-25 1:36:235 days ago1737768983IN
0xc7290Af2...b868da500
0 ETH0.000478957.56959851
Approve216973122025-01-24 22:20:476 days ago1737757247IN
0xc7290Af2...b868da500
0 ETH0.00043759.39743211
Approve216941702025-01-24 11:49:476 days ago1737719387IN
0xc7290Af2...b868da500
0 ETH0.0008365717.96930083
Approve216902902025-01-23 22:49:477 days ago1737672587IN
0xc7290Af2...b868da500
0 ETH0.000457239.82116625
Approve216886772025-01-23 17:26:477 days ago1737653207IN
0xc7290Af2...b868da500
0 ETH0.0004922310.57290097
Approve216872752025-01-23 12:45:117 days ago1737636311IN
0xc7290Af2...b868da500
0 ETH0.000353127.61831023
Approve216871602025-01-23 12:22:117 days ago1737634931IN
0xc7290Af2...b868da500
0 ETH0.000388358.3415901
Approve216864912025-01-23 10:07:357 days ago1737626855IN
0xc7290Af2...b868da500
0 ETH0.000307586.60687362
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
217402382025-01-30 22:08:471 hr ago1738274927
0xc7290Af2...b868da500
0.03731033 ETH
217402382025-01-30 22:08:471 hr ago1738274927
0xc7290Af2...b868da500
0.03731033 ETH
217402382025-01-30 22:08:471 hr ago1738274927
0xc7290Af2...b868da500
0.07462066 ETH
217393072025-01-30 19:00:594 hrs ago1738263659
0xc7290Af2...b868da500
0.02866475 ETH
217393072025-01-30 19:00:594 hrs ago1738263659
0xc7290Af2...b868da500
0.02866475 ETH
217393072025-01-30 19:00:594 hrs ago1738263659
0xc7290Af2...b868da500
0.0573295 ETH
217309322025-01-29 14:58:3533 hrs ago1738162715
0xc7290Af2...b868da500
0.00356706 ETH
217309322025-01-29 14:58:3533 hrs ago1738162715
0xc7290Af2...b868da500
0.00356706 ETH
217309322025-01-29 14:58:3533 hrs ago1738162715
0xc7290Af2...b868da500
0.00713412 ETH
217275102025-01-29 3:30:3544 hrs ago1738121435
0xc7290Af2...b868da500
0.01329263 ETH
217275102025-01-29 3:30:3544 hrs ago1738121435
0xc7290Af2...b868da500
0.01329263 ETH
217275102025-01-29 3:30:3544 hrs ago1738121435
0xc7290Af2...b868da500
0.02658527 ETH
217263392025-01-28 23:34:472 days ago1738107287
0xc7290Af2...b868da500
0.00630894 ETH
217263392025-01-28 23:34:472 days ago1738107287
0xc7290Af2...b868da500
0.00630894 ETH
217263392025-01-28 23:34:472 days ago1738107287
0xc7290Af2...b868da500
0.01261788 ETH
217218852025-01-28 8:39:352 days ago1738053575
0xc7290Af2...b868da500
0.01629888 ETH
217218852025-01-28 8:39:352 days ago1738053575
0xc7290Af2...b868da500
0.01629888 ETH
217218852025-01-28 8:39:352 days ago1738053575
0xc7290Af2...b868da500
0.03259776 ETH
217151682025-01-27 10:08:473 days ago1737972527
0xc7290Af2...b868da500
0.00568301 ETH
217151682025-01-27 10:08:473 days ago1737972527
0xc7290Af2...b868da500
0.00568301 ETH
217151682025-01-27 10:08:473 days ago1737972527
0xc7290Af2...b868da500
0.01136602 ETH
217122192025-01-27 0:17:593 days ago1737937079
0xc7290Af2...b868da500
0.00564165 ETH
217122192025-01-27 0:17:593 days ago1737937079
0xc7290Af2...b868da500
0.00564165 ETH
217122192025-01-27 0:17:593 days ago1737937079
0xc7290Af2...b868da500
0.01128331 ETH
217113802025-01-26 21:29:594 days ago1737926999
0xc7290Af2...b868da500
0.00513502 ETH
View All Internal Transactions
Loading...
Loading

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


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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