ETH Price: $1,946.65 (-0.83%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

FXI Sports (FXI) ($0.0011)

Multichain Info

Transaction Hash
Method
Block
From
To
Approve245644242026-03-01 18:35:595 hrs ago1772390159IN
FXI Sports: FXI Token
0 ETH0.000002350.09686139
Approve245622032026-03-01 11:10:1113 hrs ago1772363411IN
FXI Sports: FXI Token
0 ETH0.000094152.03388151
Approve245558872026-02-28 13:59:4734 hrs ago1772287187IN
FXI Sports: FXI Token
0 ETH0.000096152.07658474
Approve245417002026-02-26 14:30:113 days ago1772116211IN
FXI Sports: FXI Token
0 ETH0.000100052.16139958
Approve245416372026-02-26 14:17:353 days ago1772115455IN
FXI Sports: FXI Token
0 ETH0.000101822.2001387
Approve245396472026-02-26 7:38:353 days ago1772091515IN
FXI Sports: FXI Token
0 ETH0.000094732.04647282
Approve245346082026-02-25 14:44:474 days ago1772030687IN
FXI Sports: FXI Token
0 ETH0.000055252.09175549
Approve245346012026-02-25 14:43:234 days ago1772030603IN
FXI Sports: FXI Token
0 ETH0.000097392.10280557
Approve245323052026-02-25 7:02:234 days ago1772002943IN
FXI Sports: FXI Token
0 ETH0.000098822.13357831
Approve245320692026-02-25 6:15:114 days ago1772000111IN
FXI Sports: FXI Token
0 ETH0.000098682.13166157
Approve245316372026-02-25 4:48:234 days ago1771994903IN
FXI Sports: FXI Token
0 ETH0.000094482.04038278
Transfer245294642026-02-24 21:31:115 days ago1771968671IN
FXI Sports: FXI Token
0 ETH0.00015712.05179779
Approve245280932026-02-24 16:55:355 days ago1771952135IN
FXI Sports: FXI Token
0 ETH0.000017630.38079964
Approve245234742026-02-24 1:29:115 days ago1771896551IN
FXI Sports: FXI Token
0 ETH0.00009992.15701149
Approve245228062026-02-23 23:15:116 days ago1771888511IN
FXI Sports: FXI Token
0 ETH0.000094522.0407103
Approve245179582026-02-23 7:00:596 days ago1771830059IN
FXI Sports: FXI Token
0 ETH0.000094532.04110463
Approve245146142026-02-22 19:50:237 days ago1771789823IN
FXI Sports: FXI Token
0 ETH0.000005990.12879834
Approve245103552026-02-22 5:35:597 days ago1771738559IN
FXI Sports: FXI Token
0 ETH0.000098582.128381
Approve245071192026-02-21 18:45:118 days ago1771699511IN
FXI Sports: FXI Token
0 ETH0.000048781.04885563
Approve244994132026-02-20 16:59:239 days ago1771606763IN
FXI Sports: FXI Token
0 ETH0.000097182.09818232
Approve244857602026-02-18 19:17:3511 days ago1771442255IN
FXI Sports: FXI Token
0 ETH0.000009860.21339961
Approve244828062026-02-18 9:24:3511 days ago1771406675IN
FXI Sports: FXI Token
0 ETH0.000094182.03345211
Transfer244828022026-02-18 9:23:4711 days ago1771406627IN
FXI Sports: FXI Token
0 ETH0.000389882.03626918
Approve244776222026-02-17 16:03:3512 days ago1771344215IN
FXI Sports: FXI Token
0 ETH0.000105882.28608066
Transfer244614192026-02-15 9:50:4714 days ago1771149047IN
FXI Sports: FXI Token
0 ETH0.000007550.04250815
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer245655132026-03-01 22:13:592 hrs ago1772403239
FXI Sports: FXI Token
0.00588336 ETH
Transfer245655132026-03-01 22:13:592 hrs ago1772403239
FXI Sports: FXI Token
0.00588336 ETH
Transfer245605832026-03-01 5:44:5918 hrs ago1772343899
FXI Sports: FXI Token
0.0033032 ETH
Transfer245605832026-03-01 5:44:5918 hrs ago1772343899
FXI Sports: FXI Token
0.0033032 ETH
Transfer245602952026-03-01 4:46:5919 hrs ago1772340419
FXI Sports: FXI Token
0.01167857 ETH
Transfer245602952026-03-01 4:46:5919 hrs ago1772340419
FXI Sports: FXI Token
0.01167857 ETH
Transfer245574302026-02-28 19:10:5929 hrs ago1772305859
FXI Sports: FXI Token
0.00764229 ETH
Transfer245574302026-02-28 19:10:5929 hrs ago1772305859
FXI Sports: FXI Token
0.00764229 ETH
Transfer245500262026-02-27 18:21:472 days ago1772216507
FXI Sports: FXI Token
0.00624471 ETH
Transfer245500262026-02-27 18:21:472 days ago1772216507
FXI Sports: FXI Token
0.00624471 ETH
Transfer245420502026-02-26 15:40:353 days ago1772120435
FXI Sports: FXI Token
0.00275387 ETH
Transfer245420502026-02-26 15:40:353 days ago1772120435
FXI Sports: FXI Token
0.00275387 ETH
Transfer245417002026-02-26 14:30:113 days ago1772116211
FXI Sports: FXI Token
0.00274427 ETH
Transfer245417002026-02-26 14:30:113 days ago1772116211
FXI Sports: FXI Token
0.00274427 ETH
Transfer245416372026-02-26 14:17:353 days ago1772115455
FXI Sports: FXI Token
0.00412843 ETH
Transfer245416372026-02-26 14:17:353 days ago1772115455
FXI Sports: FXI Token
0.00412843 ETH
Transfer245396472026-02-26 7:38:353 days ago1772091515
FXI Sports: FXI Token
0.00423898 ETH
Transfer245396472026-02-26 7:38:353 days ago1772091515
FXI Sports: FXI Token
0.00423898 ETH
Transfer245323052026-02-25 7:02:234 days ago1772002943
FXI Sports: FXI Token
0.00334549 ETH
Transfer245323052026-02-25 7:02:234 days ago1772002943
FXI Sports: FXI Token
0.00334549 ETH
Transfer245234742026-02-24 1:29:115 days ago1771896551
FXI Sports: FXI Token
0.00311779 ETH
Transfer245234742026-02-24 1:29:115 days ago1771896551
FXI Sports: FXI Token
0.00311779 ETH
Transfer245228062026-02-23 23:15:116 days ago1771888511
FXI Sports: FXI Token
0.00708594 ETH
Transfer245228062026-02-23 23:15:116 days ago1771888511
FXI Sports: FXI Token
0.00708594 ETH
Transfer245183562026-02-23 8:20:356 days ago1771834835
FXI Sports: FXI Token
0.00233516 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FXISportsToken

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
//SPDX-License-Identifier: None

pragma solidity ^0.8.19;

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "./interfaces/IUniswapV2Factory.sol";
import "./interfaces/IUniswapV2Router02.sol";
import "./interfaces/IFXISportsToken.sol";

/// @title FXI Sports Token
/// @title https://fx1.io/
/// @title https://t.me/fx1_sports_portal
/// @author https://PROOFplatform.io
/// @author https://5thWeb.io

contract FXISportsToken is Ownable, IFXISportsToken {
    /// @notice Maps an address to its token balance
    mapping(address => uint256) private _balances;
    /// @notice Maps addresses to allowances granted by token holders
    mapping(address => mapping(address => uint256)) private _allowances;
    /// @notice Maps addresses to indicate whether they are excluded from transaction fees
    mapping(address => bool) public excludedFromFees;
    /// @notice Maps addresses to indicate whether they are excluded from maximum wallet balance limits
    mapping(address => bool) public excludedFromMaxWallet;
    /// @notice Maps addresses to indicate whether they are whitelisted
    mapping(address => bool) public whitelists;

    /// @notice Total supply of the FX1 Sports Token
    uint256 private _totalSupply = 300_000_000 * 10 ** _decimals;
    /// @notice Timestamp of the token contract launch
    uint256 public launchTime;
    /// @notice Period during which addresses can be added to the whitelist
    uint256 public whitelistPeriod;
    /// @notice Minimum amount of tokens required to trigger an automatic swap for liquidity
    uint256 public swapThreshold;
    /// @notice Maximum amount of tokens that a wallet can hold
    uint256 public maxWalletAmount;
    /// @notice Accumulated amount of tokens reserved for liquidity
    uint256 private accLiquidityAmount;
    /// @notice Accumulated amount of tokens reserved for marketing purposes
    uint256 private accMarketingAmount;

    /// @notice The cumulative fee rate applied to buy transactions
    uint256 public totalBuyFeeRate;
    /// @notice The cumulative fee rate applied to sale transactions
    uint256 public totalSellFeeRate;

    /// @notice Address for receiving marketing-related tax payments
    address public marketingTaxRecv;
    /// @notice Address of the generated token pair
    address public pair;
    /// @notice Address representing a dead wallet
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;

    /// @notice Variable indicates whether a liquidity swap is in progress
    bool private inSwapLiquidity;

    /// @notice Name of the FX1 Sports Token
    string private _name = "FXI Sports";
    /// @notice Symbol of the FX1 Sports Token
    string private _symbol = "FXI";

    /// @notice Fixed-point multiplier used for calculations
    uint256 public immutable FIXED_POINT = 1000;
    /// @notice The maximum allowable fee rate
    uint16 public constant MAX_FEE = 100;
    /// @notice Number of decimal places for token values
    uint8 private constant _decimals = 18;

    /// @notice Router for interacting with the Uniswap decentralized exchange
    IUniswapV2Router02 public dexRouter;
    /// @notice Fee rates for buying transactions
    FeeRate public buyfeeRate;
    /// @notice Fee rates for selling transactions
    FeeRate public sellfeeRate;

    /// @notice Constructs the FX1SportsToken contract
    /// @param _param A struct containing various parameters required for the token's configuration
    constructor(
        FeeRate memory _buyfeeRate,
        FeeRate memory _sellfeeRate,
        Param memory _param
    ) checkFeeRates(_buyfeeRate) checkFeeRates(_sellfeeRate) {
        require(
            _param.marketingTaxRecv != address(0),
            "Invalid MarketingTaxRecv address"
        );
        require(_param.dexRouter != address(0), "Invalid dexRouter adddress");
        require(_param.whitelistPeriod > 0, "Invalid whitelistPeriod");
        address sender = msg.sender;
        marketingTaxRecv = _param.marketingTaxRecv;
        dexRouter = IUniswapV2Router02(_param.dexRouter);
        whitelistPeriod = _param.whitelistPeriod;
        buyfeeRate.liquidityFeeRate = _buyfeeRate.liquidityFeeRate;
        buyfeeRate.marketingFeeRate = _buyfeeRate.marketingFeeRate;
        totalBuyFeeRate =
            _buyfeeRate.liquidityFeeRate +
            _buyfeeRate.marketingFeeRate;

        sellfeeRate.liquidityFeeRate = _sellfeeRate.liquidityFeeRate;
        sellfeeRate.marketingFeeRate = _sellfeeRate.marketingFeeRate;
        totalSellFeeRate =
            _sellfeeRate.liquidityFeeRate +
            _sellfeeRate.marketingFeeRate;

        excludedFromFees[sender] = true;
        excludedFromMaxWallet[sender] = true;
        excludedFromMaxWallet[address(this)] = true;
        excludedFromMaxWallet[marketingTaxRecv] = true;
        whitelists[sender] = true;
        whitelists[address(this)] = true;

        _balances[sender] += _totalSupply;
        emit Transfer(address(0), sender, _totalSupply);
        swapThreshold = _totalSupply / 10000; // 0.01%
    }

    receive() external payable {}

    /**
     * @notice A modifier to check and enforce the maximum fee rates for marketing and liquidity
     * @param _fees The structure containing marketing and liquidity fee rates
     */
    modifier checkFeeRates(FeeRate memory _fees) {
        require(
            _fees.marketingFeeRate + _fees.liquidityFeeRate <= MAX_FEE,
            "Max Rate exceeded, please lower value"
        );
        _;
    }

    /// ================================ Functions for ERC20 token ================================ ///

    function name() external view returns (string memory) {
        return _name;
    }

    function symbol() external view returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external view returns (uint256) {
        return _totalSupply;
    }

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

    function transfer(
        address _recipient,
        uint256 _amount
    ) external override returns (bool) {
        _transfer(msg.sender, _recipient, _amount);
        return true;
    }

    function allowance(
        address _owner,
        address _spender
    ) external view override returns (uint256) {
        return _allowances[_owner][_spender];
    }

    function approve(
        address _spender,
        uint256 _amount
    ) external override returns (bool) {
        _approve(msg.sender, _spender, _amount);
        return true;
    }

    function transferFrom(
        address _sender,
        address _recipient,
        uint256 _amount
    ) external override returns (bool) {
        uint256 currentAllowance = _allowances[_sender][msg.sender];
        require(currentAllowance >= _amount, "Transfer > allowance");
        _approve(_sender, msg.sender, currentAllowance - _amount);
        _transfer(_sender, _recipient, _amount);
        return true;
    }

    /// ================================ External functions ================================ ///

    /**
     * @notice Updates the address of the Uniswap router
     * @param _newRouter The new address of the Uniswap router
     */
    function updateDexRouter(address _newRouter) external onlyOwner {
        require(Address.isContract(_newRouter), "Address is not a contract");
        dexRouter = IUniswapV2Router02(_newRouter);
    }

    /**
     * @notice External function update the Uniswap pair address and adjust exemption settings
     * @param _pair The new Uniswap pair address
     */
    function updatePair(address _pair) external onlyOwner {
        require(_pair != address(0), "Invalid pair address");
        if (pair != address(0)) {
            excludedFromMaxWallet[pair] = false;
            whitelists[pair] = false;
        }
        pair = _pair;
        excludedFromMaxWallet[_pair] = true;
        whitelists[_pair] = true;
    }

    /**
     * @notice External function update the whitelist period
     * @param _newWhiteListPeriod The new duration of the whitelist period in seconds
     */
    function setWhiteListPeriod(
        uint256 _newWhiteListPeriod
    ) external onlyOwner {
        require(_newWhiteListPeriod > 0, "Invalid whitelistPeriod");
        whitelistPeriod = _newWhiteListPeriod;
    }

    /**
     * @notice External function for allows the contract owner to send FX1SportsToken amounts of tokens to multiple recipients
     * @param _recipients An array of recipient addresses to send tokens to
     * @param _amounts An array of corresponding token amounts to be sent to each recipient
     */
    function multiSender(
        address[] memory _recipients,
        uint256[] memory _amounts
    ) external onlyOwner {
        require(_recipients.length == _amounts.length, "Invalid arrays length");

        uint256 totalAmountToSend = 0;
        for (uint256 i = 0; i < _recipients.length; ) {
            require(_recipients[i] != address(0), "Invalid recipient address");
            totalAmountToSend += _amounts[i];

            unchecked {
                i++;
            }
        }

        require(
            _balances[msg.sender] >= totalAmountToSend,
            "Not enough balance to send"
        );
        for (uint256 i = 0; i < _recipients.length; ) {
            _transfer(msg.sender, _recipients[i], _amounts[i]);

            unchecked {
                i++;
            }
        }
    }

    /**
     * @notice External function allows the contract owner to set the launch time of the token
     */
    function setLaunchBegin() external override onlyOwner {
        require(launchTime == 0, "Already launched");
        launchTime = block.timestamp;
    }

    /**
     * @notice External function allows the contract owner to add or remove multiple addresses from the whitelists
     * @param _accounts An array of addresses to be added or removed from the whitelists
     * @param _add A boolean indicating whether to add or remove the addresses from the whitelists
     */
    function updateWhitelists(
        address[] memory _accounts,
        bool _add
    ) external override onlyOwner {
        uint256 length = _accounts.length;
        require(length > 0, "Invalid accounts length");

        for (uint256 i = 0; i < length; ) {
            whitelists[_accounts[i]] = _add;

            unchecked {
                i++;
            }
        }
    }

    /**
     * @notice External function allows the contract owner to exclude or include multiple addresses from the list of addresses exempted from maximum wallet balance limits
     * @param _accounts An array of addresses to be excluded or included in the list
     * @param _add A boolean indicating whether to exclude or include the addresses in the list
     */
    function excludeWalletsFromMaxWallets(
        address[] memory _accounts,
        bool _add
    ) external override onlyOwner {
        uint256 length = _accounts.length;
        require(length > 0, "Invalid length array");
        for (uint256 i = 0; i < length; ) {
            excludedFromMaxWallet[_accounts[i]] = _add;

            unchecked {
                i++;
            }
        }
    }

    /**
     * @notice External function allows the contract owner to exclude or include multiple addresses from the list of addresses exempted from transaction fees
     * @param _accounts An array of addresses to be excluded or included in the list
     * @param _add A boolean indicating whether to exclude or include the addresses in the list
     */
    function excludeWalletsFromFees(
        address[] memory _accounts,
        bool _add
    ) external override onlyOwner {
        uint256 length = _accounts.length;
        require(length > 0, "Invalid length array");
        for (uint256 i = 0; i < length; ) {
            excludedFromFees[_accounts[i]] = _add;

            unchecked {
                i++;
            }
        }
    }

    /**
     * @notice External function allows the contract owner to set a new maximum wallet balance limit
     * @param newLimit The new maximum transfer amount limit to be set
     */
    function setMaxWalletAmount(uint256 newLimit) external override onlyOwner {
        require(newLimit >= (_totalSupply * 10) / 1000, "Min 1% limit");
        maxWalletAmount = newLimit;
    }

    /**
     * @notice External function allows the contract owner to set a new address for the marketing tax wallet
     * @param _marketingTaxWallet The new address to be set as the marketing tax wallet
     */
    function setMarketingTaxWallet(
        address _marketingTaxWallet
    ) external override onlyOwner {
        require(
            _marketingTaxWallet != address(0),
            "Invalid marketingTaxWallet address"
        );
        marketingTaxRecv = _marketingTaxWallet;
    }

    /**
     * @notice This function allows the contract owner to update the fee rates for buy operations
     * @param _marketingBuyFeeRate New marketing fee rate for buy operations
     * @param _liquidityBuyFeeRate New liquidity fee rate for buy operations
     */
    function updateBuyFeeRate(
        uint16 _marketingBuyFeeRate,
        uint16 _liquidityBuyFeeRate
    ) external override onlyOwner {
        require(
            _marketingBuyFeeRate + _liquidityBuyFeeRate <= MAX_FEE,
            "Max Rate exceeded, please lower value"
        );
        buyfeeRate.marketingFeeRate = _marketingBuyFeeRate;
        buyfeeRate.liquidityFeeRate = _liquidityBuyFeeRate;
        totalBuyFeeRate = _marketingBuyFeeRate + _liquidityBuyFeeRate;
    }

    /**
     * @notice This function allows the contract owner to update the fee rates for sell operations
     * @param _marketingSellFeeRate New marketing fee rate for sell operations
     * @param _liquiditySellFeeRate New liquidity fee rate for sell operations
     */
    function updateSellFeeRate(
        uint16 _marketingSellFeeRate,
        uint16 _liquiditySellFeeRate
    ) external override onlyOwner {
        require(
            _marketingSellFeeRate + _liquiditySellFeeRate <= MAX_FEE,
            "Max Rate exceeded, please lower value"
        );
        sellfeeRate.marketingFeeRate = _marketingSellFeeRate;
        sellfeeRate.liquidityFeeRate = _liquiditySellFeeRate;
        totalSellFeeRate = _marketingSellFeeRate + _liquiditySellFeeRate;
    }

    /**
     * @notice External function allows the contract owner to set a new swap threshold value
     * @param _swapThreshold The new swap threshold value to be set
     */
    function setSwapThreshold(
        uint256 _swapThreshold
    ) external override onlyOwner {
        require(_swapThreshold > 0, "Invalid swapThreshold");
        swapThreshold = _swapThreshold;
    }

    /// ================================ Internal functions ================================ ///

    /**
     * @notice Internal function to perform token transfer between two addresses, subject to various checks and conditions
     * @param _sender The address from which tokens are being transferred
     * @param _recipient The address to which tokens are being transferred
     * @param _amount The amount of tokens being transferred
     */
    function _transfer(
        address _sender,
        address _recipient,
        uint256 _amount
    ) internal {
        require(_sender != address(0), "Transfer from zero address");
        require(_recipient != address(0), "Transfer to zero address");
        require(_amount > 0, "Zero amount");
        require(_balances[_sender] >= _amount, "Not enough amount to transfer");
        require(_sender == owner() || launchTime != 0, "Not launched yet");
        if (block.timestamp < launchTime + whitelistPeriod) {
            require(whitelists[_recipient], "only whitelist");
        }
        if (maxWalletAmount > 0) {
            require(
                excludedFromMaxWallet[_recipient] ||
                    _balances[_recipient] + _amount <= maxWalletAmount,
                "Exceeds to maxWalletAmount"
            );
        }
        if (
            inSwapLiquidity ||
            excludedFromFees[_recipient] ||
            excludedFromFees[_sender]
        ) {
            _basicTransfer(_sender, _recipient, _amount);
            emit Transfer(_sender, _recipient, _amount);
            return;
        }
        if (pair != address(0)) {
            if (_sender == pair) {
                // buy
                _taxonBuyTransfer(_sender, _recipient, _amount);
            } else {
                _swapBack();

                if (_recipient == pair) {
                    // sell
                    _taxonSellTransfer(_sender, _recipient, _amount);
                } else {
                    _basicTransfer(_sender, _recipient, _amount);
                }
            }
        }

        emit Transfer(_sender, _recipient, _amount);
    }

    /**
     * @notice Internal function to swap excess tokens in the contract back to ETH and manage liquidity and fees
     */
    function _swapBack() internal {
        uint256 accTotalAmount = accLiquidityAmount + accMarketingAmount;
        if (accTotalAmount <= swapThreshold) {
            return;
        }
        inSwapLiquidity = true;
        uint256 swapAmountForLiquidity = accLiquidityAmount / 2;
        uint256 swapAmount = accTotalAmount - swapAmountForLiquidity;
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();
        _approve(address(this), address(dexRouter), swapAmount);
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapAmount,
            0,
            path,
            address(this),
            block.timestamp + 30 minutes
        );
        uint256 swappedETHAmount = address(this).balance;
        require(swappedETHAmount > 0, "Too small token for swapBack");
        uint256 ethForLiquidity = (swappedETHAmount * swapAmountForLiquidity) /
            swapAmount;

        if (ethForLiquidity > 0) {
            uint256 amountForLiquidity = accLiquidityAmount -
                swapAmountForLiquidity;
            _approve(address(this), address(dexRouter), amountForLiquidity);
            dexRouter.addLiquidityETH{value: ethForLiquidity}(
                address(this),
                amountForLiquidity,
                0,
                0,
                0x000000000000000000000000000000000000dEaD,
                block.timestamp + 30 minutes
            );
            swappedETHAmount -= ethForLiquidity;
        }

        _transferETH(marketingTaxRecv, swappedETHAmount);

        accLiquidityAmount = 0;
        accMarketingAmount = 0;
        inSwapLiquidity = false;
    }

    /**
     * @notice Internal function to handle transfers when tokens are being sold
     * @param _sender The address of the sender (seller)
     * @param _recipient The address of the recipient (buyer)
     * @param _amount The amount of tokens being transferred
     */
    function _taxonSellTransfer(
        address _sender,
        address _recipient,
        uint256 _amount
    ) internal {
        (
            uint256 marketingFeeRate,
            uint256 liquidityFeeRate
        ) = _getSellFeeRate();

        uint256 marketingFeeAmount = (_amount * marketingFeeRate) / FIXED_POINT;
        uint256 liquidityFeeAmount = (_amount * liquidityFeeRate) / FIXED_POINT;
        uint256 recvAmount = _amount -
            (marketingFeeAmount + liquidityFeeAmount);

        _balances[_sender] -= _amount;
        _balances[_recipient] += recvAmount;
        _balances[address(this)] += (marketingFeeAmount + liquidityFeeAmount);
        accLiquidityAmount += liquidityFeeAmount;
        accMarketingAmount += marketingFeeAmount;
    }

    /**
     * @notice Internal function to handle transfers when tokens are being bought
     * @param _sender The address of the sender (buyer)
     * @param _recipient The address of the recipient (seller)
     * @param _amount The amount of tokens being transferred
     */
    function _taxonBuyTransfer(
        address _sender,
        address _recipient,
        uint256 _amount
    ) internal {
        (uint256 marketingFeeRate, uint256 liquidityFeeRate) = _getBuyFeeRate();

        uint256 marketingFeeAmount = (_amount * marketingFeeRate) / FIXED_POINT;
        uint256 liquidityFeeAmount = (_amount * liquidityFeeRate) / FIXED_POINT;
        uint256 recvAmount = _amount -
            (marketingFeeAmount + liquidityFeeAmount);

        _balances[_sender] -= _amount;
        _balances[_recipient] += recvAmount;
        _balances[address(this)] += (marketingFeeAmount + liquidityFeeAmount);
        accLiquidityAmount += liquidityFeeAmount;
        accMarketingAmount += marketingFeeAmount;
    }

    /**
     * @notice Internal function to perform a basic transfer of tokens between two addresses
     * @param _sender The address of the sender
     * @param _recipient The address of the recipient
     * @param _amount The amount of tokens to transfer
     */
    function _basicTransfer(
        address _sender,
        address _recipient,
        uint256 _amount
    ) internal {
        _balances[_sender] -= _amount;
        _balances[_recipient] += _amount;
    }

    /**
     * @notice Internal function to get the fee rates for selling tokens based on the current time period after launch
     */
    function _getSellFeeRate()
        internal
        view
        returns (uint256 _marketingFeeRate, uint256 _liquidityFeeRate)
    {
        return (sellfeeRate.marketingFeeRate, sellfeeRate.liquidityFeeRate);
    }

    /**
     * @notice Internal function to get the fee rates for buying tokens based on the current time period after launch
     */
    function _getBuyFeeRate()
        internal
        view
        returns (uint256 _marketingFeeRate, uint256 _liquidityFeeRate)
    {
        return (buyfeeRate.marketingFeeRate, buyfeeRate.liquidityFeeRate);
    }

    /**
     * @notice Internal function to transfer ETH to a specified recipient
     * @param _recipient The address of the recipient to which ETH should be transferred
     * @param _amount The amount of ETH to transfer
     */
    function _transferETH(address _recipient, uint256 _amount) internal {
        if (_amount == 0) return;
        (bool sent, ) = _recipient.call{value: _amount}("");
        require(sent, "Sending ETH failed");
    }

    /// ================================ Private functions ================================ ///

    /**
     * @notice Private function to set the allowance amount that `_spender` can spend on behalf of `_owner`
     * @param _owner The address that approves spending
     * @param _spender The address that is allowed to spend
     * @param _amount The amount of tokens that `_spender` is allowed to spend
     */
    function _approve(
        address _owner,
        address _spender,
        uint256 _amount
    ) private {
        require(_owner != address(0), "Approve from zero");
        require(_spender != address(0), "Approve to zero");
        _allowances[_owner][_spender] = _amount;
        emit Approval(_owner, _spender, _amount);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint
    );

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

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

    function WETH() external pure returns (address);

    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 amountToken, uint amountETH);

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

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    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;
}

//SPDX-License-Identifier: None

pragma solidity ^0.8.19;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

/// @title FXI Sports Token
/// @title https://fx1.io/
/// @title https://t.me/fx1_sports_portal
/// @author https://PROOFplatform.io
/// @author https://5thWeb.io

interface IFXISportsToken is IERC20 {
    struct Param {
        address marketingTaxRecv;
        address dexRouter;
        uint256 whitelistPeriod;
    }

    struct FeeRate {
        uint256 marketingFeeRate;
        uint256 liquidityFeeRate;
    }

    /// @notice Locks trading until called. Cannont be called twice.
    /// @dev Only owner can call this function.
    function setLaunchBegin() external;

    /// @notice Add/Remove whitelists.
    /// @dev Only owner can call this function.
    /// @param _accounts The address of whitelists.
    /// @param _add True/False = Add/Remove
    function updateWhitelists(address[] memory _accounts, bool _add) external;

    /// @notice Add/Remove wallets to excludedMaxWallet.
    /// @dev Only owner can call this function.
    /// @param _accounts The address of accounts.
    /// @param _add True/False = Add/Remove
    function excludeWalletsFromMaxWallets(
        address[] memory _accounts,
        bool _add
    ) external;

    /// @notice Add/Remove wallets to excludedFromFees.
    /// @dev Only owner can call this function.
    /// @param _accounts The address of accounts.
    /// @param _add True/False = Add/Remove
    function excludeWalletsFromFees(
        address[] memory _accounts,
        bool _add
    ) external;

    /// @notice Set maxWalletAmount.
    /// @dev Only owner can call this function.
    /// @param _maxWalletAmount New maxWalletAmount.
    function setMaxWalletAmount(uint256 _maxWalletAmount) external;

    /// @notice Set marketingTaxRecipient wallet address.
    /// @dev Only owner can call this function.
    /// @param _marketingTaxWallet The address of marketingTaxRecipient wallet.
    function setMarketingTaxWallet(address _marketingTaxWallet) external;

    /// @notice UpdateBuyFeeRate.
    /// @dev Only owner can call this function.
    /// @dev Max Rate of 100(10%) 10 = 1%
    /// @param _marketingBuyFeeRate New MarketingBuyFeeRate.
    /// @param _liquidityBuyFeeRate New LiquidityBuyFeeRate.
    function updateBuyFeeRate(
        uint16 _marketingBuyFeeRate,
        uint16 _liquidityBuyFeeRate
    ) external;

    /// @notice UpdateSellFeeRate.
    /// @dev Only owner can call this function.
    /// @dev Max Rate of 100(10%) 10 = 1%
    /// @param _marketingSellFeeRate New MarketingSellFeeRate.
    /// @param _liquiditySellFeeRate New LiquiditySellFeeRate.
    function updateSellFeeRate(
        uint16 _marketingSellFeeRate,
        uint16 _liquiditySellFeeRate
    ) external;

    /// @notice Set swapThreshold.
    /// @dev Only owner can call this function.
    /// @param _swapThreshold New swapThreshold amount.
    function setSwapThreshold(uint256 _swapThreshold) external;
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"components":[{"internalType":"uint256","name":"marketingFeeRate","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeRate","type":"uint256"}],"internalType":"struct IFXISportsToken.FeeRate","name":"_buyfeeRate","type":"tuple"},{"components":[{"internalType":"uint256","name":"marketingFeeRate","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeRate","type":"uint256"}],"internalType":"struct IFXISportsToken.FeeRate","name":"_sellfeeRate","type":"tuple"},{"components":[{"internalType":"address","name":"marketingTaxRecv","type":"address"},{"internalType":"address","name":"dexRouter","type":"address"},{"internalType":"uint256","name":"whitelistPeriod","type":"uint256"}],"internalType":"struct IFXISportsToken.Param","name":"_param","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FIXED_POINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FEE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyfeeRate","outputs":[{"internalType":"uint256","name":"marketingFeeRate","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeRate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"bool","name":"_add","type":"bool"}],"name":"excludeWalletsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"bool","name":"_add","type":"bool"}],"name":"excludeWalletsFromMaxWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxRecv","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"multiSender","outputs":[],"stateMutability":"nonpayable","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellfeeRate","outputs":[{"internalType":"uint256","name":"marketingFeeRate","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeRate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setLaunchBegin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingTaxWallet","type":"address"}],"name":"setMarketingTaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapThreshold","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newWhiteListPeriod","type":"uint256"}],"name":"setWhiteListPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","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":"totalBuyFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","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":[{"internalType":"uint16","name":"_marketingBuyFeeRate","type":"uint16"},{"internalType":"uint16","name":"_liquidityBuyFeeRate","type":"uint16"}],"name":"updateBuyFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRouter","type":"address"}],"name":"updateDexRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"updatePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_marketingSellFeeRate","type":"uint16"},{"internalType":"uint16","name":"_liquiditySellFeeRate","type":"uint16"}],"name":"updateSellFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"bool","name":"_add","type":"bool"}],"name":"updateWhitelists","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052620000126012600a62000584565b62000022906311e1a3006200059c565b60065560408051808201909152600a8152694658492053706f72747360b01b60208201526011906200005590826200065b565b5060408051808201909152600381526246584960e81b60208201526012906200007f90826200065b565b506103e86080523480156200009357600080fd5b5060405162002d1d38038062002d1d833981016040819052620000b69162000796565b620000c1336200041f565b602083015183518491606491620000d991906200083f565b11156200012a5760405162461bcd60e51b8152602060048201526025602482015260008051602062002cfd83398151915260448201526476616c756560d81b60648201526084015b60405180910390fd5b6020830151835184916064916200014291906200083f565b11156200018f5760405162461bcd60e51b8152602060048201526025602482015260008051602062002cfd83398151915260448201526476616c756560d81b606482015260840162000121565b82516001600160a01b0316620001e85760405162461bcd60e51b815260206004820181905260248201527f496e76616c6964204d61726b6574696e67546178526563762061646472657373604482015260640162000121565b60208301516001600160a01b0316620002445760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420646578526f75746572206164646472657373000000000000604482015260640162000121565b60008360400151116200029a5760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642077686974656c697374506572696f64000000000000000000604482015260640162000121565b8251600f80546001600160a01b03199081166001600160a01b039384161790915560208086015160138054909316931692909217905560408401516008558501516015819055855160148190553391620002f591906200083f565b600d55602085015160178190558551601681905562000314916200083f565b600e556001600160a01b0381811660008181526003602090815260408083208054600160ff199182168117909255600484528285208054821683179055308086528386208054831684179055600f549097168552828520805482168317905585855260058452828520805482168317905595845281842080549096168117909555600654938352939052918220805491929091620003b49084906200083f565b90915550506006546040519081526001600160a01b038216906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36127106006546200040f919062000855565b6009555062000878945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004c6578160001904821115620004aa57620004aa6200046f565b80851615620004b857918102915b93841c93908002906200048a565b509250929050565b600082620004df575060016200057e565b81620004ee575060006200057e565b8160018114620005075760028114620005125762000532565b60019150506200057e565b60ff8411156200052657620005266200046f565b50506001821b6200057e565b5060208310610133831016604e8410600b841016171562000557575081810a6200057e565b62000563838362000485565b80600019048211156200057a576200057a6200046f565b0290505b92915050565b60006200059560ff841683620004ce565b9392505050565b80820281158282048414176200057e576200057e6200046f565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005e157607f821691505b6020821081036200060257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200065657600081815260208120601f850160051c81016020861015620006315750805b601f850160051c820191505b8181101562000652578281556001016200063d565b5050505b505050565b81516001600160401b03811115620006775762000677620005b6565b6200068f81620006888454620005cc565b8462000608565b602080601f831160018114620006c75760008415620006ae5750858301515b600019600386901b1c1916600185901b17855562000652565b600085815260208120601f198616915b82811015620006f857888601518255948401946001909101908401620006d7565b5085821015620007175787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000604082840312156200073a57600080fd5b604080519081016001600160401b03811182821017156200075f576200075f620005b6565b604052825181526020928301519281019290925250919050565b80516001600160a01b03811681146200079157600080fd5b919050565b600080600083850360e0811215620007ad57600080fd5b620007b9868662000727565b9350620007ca866040870162000727565b92506060607f1982011215620007df57600080fd5b50604051606081016001600160401b0381118282101715620008055762000805620005b6565b604052620008166080860162000779565b81526200082660a0860162000779565b602082015260c094909401516040850152509093909250565b808201808211156200057e576200057e6200046f565b6000826200087357634e487b7160e01b600052601260045260246000fd5b500490565b60805161245b620008a26000396000818161055b0152818161193b0152611974015261245b6000f3fe60806040526004361061024a5760003560e01c8063790ca41311610139578063aa4bde28116100b6578063d82e49c81161007a578063d82e49c8146106f4578063dbe66ca014610709578063dd22a9de14610739578063dd62ed3e14610754578063f2fde38b1461079a578063f7712862146107ba57600080fd5b8063aa4bde2814610660578063b48e665e14610676578063bc063e1a1461068c578063bcac45d8146106b4578063d650b6f5146106d457600080fd5b806395d89b41116100fd57806395d89b41146105cb5780639d0014b1146105e0578063a4fd3e9914610600578063a8aa1b3114610620578063a9059cbb1461064057600080fd5b8063790ca41314610513578063794dca89146105295780637a458d7a146105495780637d99f9a41461057d5780638da5cb5b146105ad57600080fd5b8063256c2cd1116101c757806370a082311161018b57806370a082311461047257806370af439c146104a8578063714f75e0146104be578063715018a6146104de5780637653f01e146104f357600080fd5b8063256c2cd1146103e057806327a14fc21461040057806328b88eb114610420578063313ce5671461043657806345a1f81e1461045257600080fd5b8063095ea7b31161020e578063095ea7b31461032b57806318160ddd1461035b5780631b56bbf9146103705780631e7be2101461039057806323b872dd146103c057600080fd5b8063026e9ff2146102565780630445b6671461028b57806306fdde03146102af5780630758d924146102d157806308a580691461030957600080fd5b3661025157005b600080fd5b34801561026257600080fd5b50601454601554610271919082565b604080519283526020830191909152015b60405180910390f35b34801561029757600080fd5b506102a160095481565b604051908152602001610282565b3480156102bb57600080fd5b506102c46107da565b6040516102829190611e92565b3480156102dd57600080fd5b506013546102f1906001600160a01b031681565b6040516001600160a01b039091168152602001610282565b34801561031557600080fd5b50610329610324366004611ef7565b61086c565b005b34801561033757600080fd5b5061034b610346366004611f3f565b6108f0565b6040519015158152602001610282565b34801561036757600080fd5b506006546102a1565b34801561037c57600080fd5b5061032961038b366004611f6b565b610907565b34801561039c57600080fd5b5061034b6103ab366004611f6b565b60056020526000908152604090205460ff1681565b3480156103cc57600080fd5b5061034b6103db366004611f8f565b610a21565b3480156103ec57600080fd5b506103296103fb3660046120af565b610ab6565b34801561040c57600080fd5b5061032961041b366004612106565b610b88565b34801561042c57600080fd5b506102a1600d5481565b34801561044257600080fd5b5060405160128152602001610282565b34801561045e57600080fd5b5061032961046d366004611ef7565b610c11565b34801561047e57600080fd5b506102a161048d366004611f6b565b6001600160a01b031660009081526001602052604090205490565b3480156104b457600080fd5b506102a1600e5481565b3480156104ca57600080fd5b506103296104d9366004611f6b565b610c8c565b3480156104ea57600080fd5b50610329610d2f565b3480156104ff57600080fd5b50600f546102f1906001600160a01b031681565b34801561051f57600080fd5b506102a160075481565b34801561053557600080fd5b506103296105443660046120af565b610d65565b34801561055557600080fd5b506102a17f000000000000000000000000000000000000000000000000000000000000000081565b34801561058957600080fd5b5061034b610598366004611f6b565b60046020526000908152604090205460ff1681565b3480156105b957600080fd5b506000546001600160a01b03166102f1565b3480156105d757600080fd5b506102c4610e3a565b3480156105ec57600080fd5b506103296105fb366004612106565b610e49565b34801561060c57600080fd5b5061032961061b366004611f6b565b610ec0565b34801561062c57600080fd5b506010546102f1906001600160a01b031681565b34801561064c57600080fd5b5061034b61065b366004611f3f565b610f6d565b34801561066c57600080fd5b506102a1600a5481565b34801561068257600080fd5b506102a160085481565b34801561069857600080fd5b506106a1606481565b60405161ffff9091168152602001610282565b3480156106c057600080fd5b506103296106cf366004612106565b610f7a565b3480156106e057600080fd5b506103296106ef36600461211f565b610ff9565b34801561070057600080fd5b506103296111d4565b34801561071557600080fd5b5061034b610724366004611f6b565b60036020526000908152604090205460ff1681565b34801561074557600080fd5b50601654601754610271919082565b34801561076057600080fd5b506102a161076f3660046121da565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156107a657600080fd5b506103296107b5366004611f6b565b611247565b3480156107c657600080fd5b506103296107d53660046120af565b6112e2565b6060601180546107e990612208565b80601f016020809104026020016040519081016040528092919081815260200182805461081590612208565b80156108625780601f1061083757610100808354040283529160200191610862565b820191906000526020600020905b81548152906001019060200180831161084557829003601f168201915b5050505050905090565b6000546001600160a01b0316331461089f5760405162461bcd60e51b815260040161089690612242565b60405180910390fd5b60646108ab828461228d565b61ffff1611156108cd5760405162461bcd60e51b8152600401610896906122af565b61ffff80831660165581166017556108e5818361228d565b61ffff16600e555050565b60006108fd3384846113ae565b5060015b92915050565b6000546001600160a01b031633146109315760405162461bcd60e51b815260040161089690612242565b6001600160a01b03811661097e5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642070616972206164647265737360601b6044820152606401610896565b6010546001600160a01b0316156109ce57601080546001600160a01b039081166000908152600460209081526040808320805460ff19908116909155945490931682526005905220805490911690555b601080546001600160a01b039092166001600160a01b0319909216821790556000908152600460209081526040808320805460ff1990811660019081179092556005909352922080549091169091179055565b6001600160a01b038316600090815260026020908152604080832033845290915281205482811015610a8c5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610896565b610aa08533610a9b86856122f4565b6113ae565b610aab8585856114a2565b506001949350505050565b6000546001600160a01b03163314610ae05760405162461bcd60e51b815260040161089690612242565b815180610b265760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206c656e67746820617272617960601b6044820152606401610896565b60005b81811015610b82578260036000868481518110610b4857610b48612307565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610b29565b50505050565b6000546001600160a01b03163314610bb25760405162461bcd60e51b815260040161089690612242565b6103e8600654600a610bc4919061231d565b610bce9190612334565b811015610c0c5760405162461bcd60e51b815260206004820152600c60248201526b135a5b880c49481b1a5b5a5d60a21b6044820152606401610896565b600a55565b6000546001600160a01b03163314610c3b5760405162461bcd60e51b815260040161089690612242565b6064610c47828461228d565b61ffff161115610c695760405162461bcd60e51b8152600401610896906122af565b61ffff8083166014558116601555610c81818361228d565b61ffff16600d555050565b6000546001600160a01b03163314610cb65760405162461bcd60e51b815260040161089690612242565b6001600160a01b0381163b610d0d5760405162461bcd60e51b815260206004820152601960248201527f41646472657373206973206e6f74206120636f6e7472616374000000000000006044820152606401610896565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610d595760405162461bcd60e51b815260040161089690612242565b610d636000611873565b565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b815260040161089690612242565b815180610dde5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206163636f756e7473206c656e6774680000000000000000006044820152606401610896565b60005b81811015610b82578260056000868481518110610e0057610e00612307565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610de1565b6060601280546107e990612208565b6000546001600160a01b03163314610e735760405162461bcd60e51b815260040161089690612242565b60008111610ebb5760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a59081cddd85c151a1c995cda1bdb19605a1b6044820152606401610896565b600955565b6000546001600160a01b03163314610eea5760405162461bcd60e51b815260040161089690612242565b6001600160a01b038116610f4b5760405162461bcd60e51b815260206004820152602260248201527f496e76616c6964206d61726b6574696e6754617857616c6c6574206164647265604482015261737360f01b6064820152608401610896565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b60006108fd3384846114a2565b6000546001600160a01b03163314610fa45760405162461bcd60e51b815260040161089690612242565b60008111610ff45760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642077686974656c697374506572696f640000000000000000006044820152606401610896565b600855565b6000546001600160a01b031633146110235760405162461bcd60e51b815260040161089690612242565b805182511461106c5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840c2e4e4c2f2e640d8cadccee8d605b1b6044820152606401610896565b6000805b83518110156111235760006001600160a01b031684828151811061109657611096612307565b60200260200101516001600160a01b0316036110f45760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420726563697069656e742061646472657373000000000000006044820152606401610896565b82818151811061110657611106612307565b6020026020010151826111199190612356565b9150600101611070565b50336000908152600160205260409020548111156111835760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420656e6f7567682062616c616e636520746f2073656e640000000000006044820152606401610896565b60005b8351811015610b82576111cc338583815181106111a5576111a5612307565b60200260200101518584815181106111bf576111bf612307565b60200260200101516114a2565b600101611186565b6000546001600160a01b031633146111fe5760405162461bcd60e51b815260040161089690612242565b600754156112415760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b6044820152606401610896565b42600755565b6000546001600160a01b031633146112715760405162461bcd60e51b815260040161089690612242565b6001600160a01b0381166112d65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610896565b6112df81611873565b50565b6000546001600160a01b0316331461130c5760405162461bcd60e51b815260040161089690612242565b8151806113525760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206c656e67746820617272617960601b6044820152606401610896565b60005b81811015610b8257826004600086848151811061137457611374612307565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101611355565b6001600160a01b0383166113f85760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610896565b6001600160a01b0382166114405760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610896565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166114f85760405162461bcd60e51b815260206004820152601a60248201527f5472616e736665722066726f6d207a65726f20616464726573730000000000006044820152606401610896565b6001600160a01b03821661154e5760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220746f207a65726f206164647265737300000000000000006044820152606401610896565b6000811161158c5760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606401610896565b6001600160a01b0383166000908152600160205260409020548111156115f45760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f75676820616d6f756e7420746f207472616e736665720000006044820152606401610896565b6000546001600160a01b0384811691161480611611575060075415155b6116505760405162461bcd60e51b815260206004820152601060248201526f139bdd081b185d5b98da1959081e595d60821b6044820152606401610896565b6008546007546116609190612356565b4210156116c0576001600160a01b03821660009081526005602052604090205460ff166116c05760405162461bcd60e51b815260206004820152600e60248201526d1bdb9b1e481dda1a5d195b1a5cdd60921b6044820152606401610896565b600a5415611760576001600160a01b03821660009081526004602052604090205460ff16806117145750600a546001600160a01b038316600090815260016020526040902054611711908390612356565b11155b6117605760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746f206d617857616c6c6574416d6f756e740000000000006044820152606401610896565b601054600160a01b900460ff168061179057506001600160a01b03821660009081526003602052604090205460ff165b806117b357506001600160a01b03831660009081526003602052604090205460ff165b15611808576117c38383836118c3565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161149591815260200190565b6010546001600160a01b0316156117c3576010546001600160a01b039081169084160361183f5761183a838383611922565b6117c3565b611847611a89565b6010546001600160a01b03908116908316036118685761183a838383611dd9565b6117c38383836118c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260016020526040812080548392906118eb9084906122f4565b90915550506001600160a01b03821660009081526001602052604081208054839290611918908490612356565b9091555050505050565b6000806119326014546015549091565b909250905060007f0000000000000000000000000000000000000000000000000000000000000000611964848661231d565b61196e9190612334565b905060007f000000000000000000000000000000000000000000000000000000000000000061199d848761231d565b6119a79190612334565b905060006119b58284612356565b6119bf90876122f4565b6001600160a01b0389166000908152600160205260408120805492935088929091906119ec9084906122f4565b90915550506001600160a01b03871660009081526001602052604081208054839290611a19908490612356565b90915550611a2990508284612356565b3060009081526001602052604081208054909190611a48908490612356565b9250508190555081600b6000828254611a619190612356565b9250508190555082600c6000828254611a7a9190612356565b90915550505050505050505050565b6000600c54600b54611a9b9190612356565b90506009548111611aa95750565b6010805460ff60a01b1916600160a01b179055600b54600090611ace90600290612334565b90506000611adc82846122f4565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611b1657611b16612307565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b939190612369565b81600181518110611ba657611ba6612307565b6001600160a01b039283166020918202929092010152601354611bcc91309116846113ae565b6013546001600160a01b031663791ac9478360008430611bee42610708612356565b6040518663ffffffff1660e01b8152600401611c0e959493929190612386565b600060405180830381600087803b158015611c2857600080fd5b505af1158015611c3c573d6000803e3d6000fd5b50479250505080611c8f5760405162461bcd60e51b815260206004820152601c60248201527f546f6f20736d616c6c20746f6b656e20666f7220737761704261636b000000006044820152606401610896565b600083611c9c868461231d565b611ca69190612334565b90508015611da457600085600b54611cbe91906122f4565b601354909150611cd99030906001600160a01b0316836113ae565b6013546001600160a01b031663f305d71983308460008061dead611cff42610708612356565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af1158015611d6c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d9191906123f7565b5050508183611da091906122f4565b9250505b600f54611dba906001600160a01b031683611de9565b50506000600b819055600c5550506010805460ff60a01b191690555050565b6000806119326016546017549091565b80600003611df5575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611e42576040519150601f19603f3d011682016040523d82523d6000602084013e611e47565b606091505b5050905080611e8d5760405162461bcd60e51b815260206004820152601260248201527114d95b991a5b99c81155120819985a5b195960721b6044820152606401610896565b505050565b600060208083528351808285015260005b81811015611ebf57858101830151858201604001528201611ea3565b506000604082860101526040601f19601f8301168501019250505092915050565b803561ffff81168114611ef257600080fd5b919050565b60008060408385031215611f0a57600080fd5b611f1383611ee0565b9150611f2160208401611ee0565b90509250929050565b6001600160a01b03811681146112df57600080fd5b60008060408385031215611f5257600080fd5b8235611f5d81611f2a565b946020939093013593505050565b600060208284031215611f7d57600080fd5b8135611f8881611f2a565b9392505050565b600080600060608486031215611fa457600080fd5b8335611faf81611f2a565b92506020840135611fbf81611f2a565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561200f5761200f611fd0565b604052919050565b600067ffffffffffffffff82111561203157612031611fd0565b5060051b60200190565b600082601f83011261204c57600080fd5b8135602061206161205c83612017565b611fe6565b82815260059290921b8401810191818101908684111561208057600080fd5b8286015b848110156120a457803561209781611f2a565b8352918301918301612084565b509695505050505050565b600080604083850312156120c257600080fd5b823567ffffffffffffffff8111156120d957600080fd5b6120e58582860161203b565b925050602083013580151581146120fb57600080fd5b809150509250929050565b60006020828403121561211857600080fd5b5035919050565b6000806040838503121561213257600080fd5b823567ffffffffffffffff8082111561214a57600080fd5b6121568683870161203b565b935060209150818501358181111561216d57600080fd5b85019050601f8101861361218057600080fd5b803561218e61205c82612017565b81815260059190911b820183019083810190888311156121ad57600080fd5b928401925b828410156121cb578335825292840192908401906121b2565b80955050505050509250929050565b600080604083850312156121ed57600080fd5b82356121f881611f2a565b915060208301356120fb81611f2a565b600181811c9082168061221c57607f821691505b60208210810361223c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b61ffff8181168382160190808211156122a8576122a8612277565b5092915050565b60208082526025908201527f4d617820526174652065786365656465642c20706c65617365206c6f7765722060408201526476616c756560d81b606082015260800190565b8181038181111561090157610901612277565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761090157610901612277565b60008261235157634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561090157610901612277565b60006020828403121561237b57600080fd5b8151611f8881611f2a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123d65784516001600160a01b0316835293830193918301916001016123b1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561240c57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220efee4ba0b843bc47ec0f767576171cec1953273c20d1f3be7b446402395fcffb64736f6c634300081300334d617820526174652065786365656465642c20706c65617365206c6f776572200000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afc94420451fca019dc97100d14abcb8704d6e650000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000000000003c

Deployed Bytecode

0x60806040526004361061024a5760003560e01c8063790ca41311610139578063aa4bde28116100b6578063d82e49c81161007a578063d82e49c8146106f4578063dbe66ca014610709578063dd22a9de14610739578063dd62ed3e14610754578063f2fde38b1461079a578063f7712862146107ba57600080fd5b8063aa4bde2814610660578063b48e665e14610676578063bc063e1a1461068c578063bcac45d8146106b4578063d650b6f5146106d457600080fd5b806395d89b41116100fd57806395d89b41146105cb5780639d0014b1146105e0578063a4fd3e9914610600578063a8aa1b3114610620578063a9059cbb1461064057600080fd5b8063790ca41314610513578063794dca89146105295780637a458d7a146105495780637d99f9a41461057d5780638da5cb5b146105ad57600080fd5b8063256c2cd1116101c757806370a082311161018b57806370a082311461047257806370af439c146104a8578063714f75e0146104be578063715018a6146104de5780637653f01e146104f357600080fd5b8063256c2cd1146103e057806327a14fc21461040057806328b88eb114610420578063313ce5671461043657806345a1f81e1461045257600080fd5b8063095ea7b31161020e578063095ea7b31461032b57806318160ddd1461035b5780631b56bbf9146103705780631e7be2101461039057806323b872dd146103c057600080fd5b8063026e9ff2146102565780630445b6671461028b57806306fdde03146102af5780630758d924146102d157806308a580691461030957600080fd5b3661025157005b600080fd5b34801561026257600080fd5b50601454601554610271919082565b604080519283526020830191909152015b60405180910390f35b34801561029757600080fd5b506102a160095481565b604051908152602001610282565b3480156102bb57600080fd5b506102c46107da565b6040516102829190611e92565b3480156102dd57600080fd5b506013546102f1906001600160a01b031681565b6040516001600160a01b039091168152602001610282565b34801561031557600080fd5b50610329610324366004611ef7565b61086c565b005b34801561033757600080fd5b5061034b610346366004611f3f565b6108f0565b6040519015158152602001610282565b34801561036757600080fd5b506006546102a1565b34801561037c57600080fd5b5061032961038b366004611f6b565b610907565b34801561039c57600080fd5b5061034b6103ab366004611f6b565b60056020526000908152604090205460ff1681565b3480156103cc57600080fd5b5061034b6103db366004611f8f565b610a21565b3480156103ec57600080fd5b506103296103fb3660046120af565b610ab6565b34801561040c57600080fd5b5061032961041b366004612106565b610b88565b34801561042c57600080fd5b506102a1600d5481565b34801561044257600080fd5b5060405160128152602001610282565b34801561045e57600080fd5b5061032961046d366004611ef7565b610c11565b34801561047e57600080fd5b506102a161048d366004611f6b565b6001600160a01b031660009081526001602052604090205490565b3480156104b457600080fd5b506102a1600e5481565b3480156104ca57600080fd5b506103296104d9366004611f6b565b610c8c565b3480156104ea57600080fd5b50610329610d2f565b3480156104ff57600080fd5b50600f546102f1906001600160a01b031681565b34801561051f57600080fd5b506102a160075481565b34801561053557600080fd5b506103296105443660046120af565b610d65565b34801561055557600080fd5b506102a17f00000000000000000000000000000000000000000000000000000000000003e881565b34801561058957600080fd5b5061034b610598366004611f6b565b60046020526000908152604090205460ff1681565b3480156105b957600080fd5b506000546001600160a01b03166102f1565b3480156105d757600080fd5b506102c4610e3a565b3480156105ec57600080fd5b506103296105fb366004612106565b610e49565b34801561060c57600080fd5b5061032961061b366004611f6b565b610ec0565b34801561062c57600080fd5b506010546102f1906001600160a01b031681565b34801561064c57600080fd5b5061034b61065b366004611f3f565b610f6d565b34801561066c57600080fd5b506102a1600a5481565b34801561068257600080fd5b506102a160085481565b34801561069857600080fd5b506106a1606481565b60405161ffff9091168152602001610282565b3480156106c057600080fd5b506103296106cf366004612106565b610f7a565b3480156106e057600080fd5b506103296106ef36600461211f565b610ff9565b34801561070057600080fd5b506103296111d4565b34801561071557600080fd5b5061034b610724366004611f6b565b60036020526000908152604090205460ff1681565b34801561074557600080fd5b50601654601754610271919082565b34801561076057600080fd5b506102a161076f3660046121da565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156107a657600080fd5b506103296107b5366004611f6b565b611247565b3480156107c657600080fd5b506103296107d53660046120af565b6112e2565b6060601180546107e990612208565b80601f016020809104026020016040519081016040528092919081815260200182805461081590612208565b80156108625780601f1061083757610100808354040283529160200191610862565b820191906000526020600020905b81548152906001019060200180831161084557829003601f168201915b5050505050905090565b6000546001600160a01b0316331461089f5760405162461bcd60e51b815260040161089690612242565b60405180910390fd5b60646108ab828461228d565b61ffff1611156108cd5760405162461bcd60e51b8152600401610896906122af565b61ffff80831660165581166017556108e5818361228d565b61ffff16600e555050565b60006108fd3384846113ae565b5060015b92915050565b6000546001600160a01b031633146109315760405162461bcd60e51b815260040161089690612242565b6001600160a01b03811661097e5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642070616972206164647265737360601b6044820152606401610896565b6010546001600160a01b0316156109ce57601080546001600160a01b039081166000908152600460209081526040808320805460ff19908116909155945490931682526005905220805490911690555b601080546001600160a01b039092166001600160a01b0319909216821790556000908152600460209081526040808320805460ff1990811660019081179092556005909352922080549091169091179055565b6001600160a01b038316600090815260026020908152604080832033845290915281205482811015610a8c5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610896565b610aa08533610a9b86856122f4565b6113ae565b610aab8585856114a2565b506001949350505050565b6000546001600160a01b03163314610ae05760405162461bcd60e51b815260040161089690612242565b815180610b265760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206c656e67746820617272617960601b6044820152606401610896565b60005b81811015610b82578260036000868481518110610b4857610b48612307565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610b29565b50505050565b6000546001600160a01b03163314610bb25760405162461bcd60e51b815260040161089690612242565b6103e8600654600a610bc4919061231d565b610bce9190612334565b811015610c0c5760405162461bcd60e51b815260206004820152600c60248201526b135a5b880c49481b1a5b5a5d60a21b6044820152606401610896565b600a55565b6000546001600160a01b03163314610c3b5760405162461bcd60e51b815260040161089690612242565b6064610c47828461228d565b61ffff161115610c695760405162461bcd60e51b8152600401610896906122af565b61ffff8083166014558116601555610c81818361228d565b61ffff16600d555050565b6000546001600160a01b03163314610cb65760405162461bcd60e51b815260040161089690612242565b6001600160a01b0381163b610d0d5760405162461bcd60e51b815260206004820152601960248201527f41646472657373206973206e6f74206120636f6e7472616374000000000000006044820152606401610896565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610d595760405162461bcd60e51b815260040161089690612242565b610d636000611873565b565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b815260040161089690612242565b815180610dde5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206163636f756e7473206c656e6774680000000000000000006044820152606401610896565b60005b81811015610b82578260056000868481518110610e0057610e00612307565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610de1565b6060601280546107e990612208565b6000546001600160a01b03163314610e735760405162461bcd60e51b815260040161089690612242565b60008111610ebb5760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a59081cddd85c151a1c995cda1bdb19605a1b6044820152606401610896565b600955565b6000546001600160a01b03163314610eea5760405162461bcd60e51b815260040161089690612242565b6001600160a01b038116610f4b5760405162461bcd60e51b815260206004820152602260248201527f496e76616c6964206d61726b6574696e6754617857616c6c6574206164647265604482015261737360f01b6064820152608401610896565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b60006108fd3384846114a2565b6000546001600160a01b03163314610fa45760405162461bcd60e51b815260040161089690612242565b60008111610ff45760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642077686974656c697374506572696f640000000000000000006044820152606401610896565b600855565b6000546001600160a01b031633146110235760405162461bcd60e51b815260040161089690612242565b805182511461106c5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840c2e4e4c2f2e640d8cadccee8d605b1b6044820152606401610896565b6000805b83518110156111235760006001600160a01b031684828151811061109657611096612307565b60200260200101516001600160a01b0316036110f45760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420726563697069656e742061646472657373000000000000006044820152606401610896565b82818151811061110657611106612307565b6020026020010151826111199190612356565b9150600101611070565b50336000908152600160205260409020548111156111835760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420656e6f7567682062616c616e636520746f2073656e640000000000006044820152606401610896565b60005b8351811015610b82576111cc338583815181106111a5576111a5612307565b60200260200101518584815181106111bf576111bf612307565b60200260200101516114a2565b600101611186565b6000546001600160a01b031633146111fe5760405162461bcd60e51b815260040161089690612242565b600754156112415760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b6044820152606401610896565b42600755565b6000546001600160a01b031633146112715760405162461bcd60e51b815260040161089690612242565b6001600160a01b0381166112d65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610896565b6112df81611873565b50565b6000546001600160a01b0316331461130c5760405162461bcd60e51b815260040161089690612242565b8151806113525760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206c656e67746820617272617960601b6044820152606401610896565b60005b81811015610b8257826004600086848151811061137457611374612307565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101611355565b6001600160a01b0383166113f85760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610896565b6001600160a01b0382166114405760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610896565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166114f85760405162461bcd60e51b815260206004820152601a60248201527f5472616e736665722066726f6d207a65726f20616464726573730000000000006044820152606401610896565b6001600160a01b03821661154e5760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220746f207a65726f206164647265737300000000000000006044820152606401610896565b6000811161158c5760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606401610896565b6001600160a01b0383166000908152600160205260409020548111156115f45760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f75676820616d6f756e7420746f207472616e736665720000006044820152606401610896565b6000546001600160a01b0384811691161480611611575060075415155b6116505760405162461bcd60e51b815260206004820152601060248201526f139bdd081b185d5b98da1959081e595d60821b6044820152606401610896565b6008546007546116609190612356565b4210156116c0576001600160a01b03821660009081526005602052604090205460ff166116c05760405162461bcd60e51b815260206004820152600e60248201526d1bdb9b1e481dda1a5d195b1a5cdd60921b6044820152606401610896565b600a5415611760576001600160a01b03821660009081526004602052604090205460ff16806117145750600a546001600160a01b038316600090815260016020526040902054611711908390612356565b11155b6117605760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746f206d617857616c6c6574416d6f756e740000000000006044820152606401610896565b601054600160a01b900460ff168061179057506001600160a01b03821660009081526003602052604090205460ff165b806117b357506001600160a01b03831660009081526003602052604090205460ff165b15611808576117c38383836118c3565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161149591815260200190565b6010546001600160a01b0316156117c3576010546001600160a01b039081169084160361183f5761183a838383611922565b6117c3565b611847611a89565b6010546001600160a01b03908116908316036118685761183a838383611dd9565b6117c38383836118c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260016020526040812080548392906118eb9084906122f4565b90915550506001600160a01b03821660009081526001602052604081208054839290611918908490612356565b9091555050505050565b6000806119326014546015549091565b909250905060007f00000000000000000000000000000000000000000000000000000000000003e8611964848661231d565b61196e9190612334565b905060007f00000000000000000000000000000000000000000000000000000000000003e861199d848761231d565b6119a79190612334565b905060006119b58284612356565b6119bf90876122f4565b6001600160a01b0389166000908152600160205260408120805492935088929091906119ec9084906122f4565b90915550506001600160a01b03871660009081526001602052604081208054839290611a19908490612356565b90915550611a2990508284612356565b3060009081526001602052604081208054909190611a48908490612356565b9250508190555081600b6000828254611a619190612356565b9250508190555082600c6000828254611a7a9190612356565b90915550505050505050505050565b6000600c54600b54611a9b9190612356565b90506009548111611aa95750565b6010805460ff60a01b1916600160a01b179055600b54600090611ace90600290612334565b90506000611adc82846122f4565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611b1657611b16612307565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b939190612369565b81600181518110611ba657611ba6612307565b6001600160a01b039283166020918202929092010152601354611bcc91309116846113ae565b6013546001600160a01b031663791ac9478360008430611bee42610708612356565b6040518663ffffffff1660e01b8152600401611c0e959493929190612386565b600060405180830381600087803b158015611c2857600080fd5b505af1158015611c3c573d6000803e3d6000fd5b50479250505080611c8f5760405162461bcd60e51b815260206004820152601c60248201527f546f6f20736d616c6c20746f6b656e20666f7220737761704261636b000000006044820152606401610896565b600083611c9c868461231d565b611ca69190612334565b90508015611da457600085600b54611cbe91906122f4565b601354909150611cd99030906001600160a01b0316836113ae565b6013546001600160a01b031663f305d71983308460008061dead611cff42610708612356565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af1158015611d6c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d9191906123f7565b5050508183611da091906122f4565b9250505b600f54611dba906001600160a01b031683611de9565b50506000600b819055600c5550506010805460ff60a01b191690555050565b6000806119326016546017549091565b80600003611df5575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611e42576040519150601f19603f3d011682016040523d82523d6000602084013e611e47565b606091505b5050905080611e8d5760405162461bcd60e51b815260206004820152601260248201527114d95b991a5b99c81155120819985a5b195960721b6044820152606401610896565b505050565b600060208083528351808285015260005b81811015611ebf57858101830151858201604001528201611ea3565b506000604082860101526040601f19601f8301168501019250505092915050565b803561ffff81168114611ef257600080fd5b919050565b60008060408385031215611f0a57600080fd5b611f1383611ee0565b9150611f2160208401611ee0565b90509250929050565b6001600160a01b03811681146112df57600080fd5b60008060408385031215611f5257600080fd5b8235611f5d81611f2a565b946020939093013593505050565b600060208284031215611f7d57600080fd5b8135611f8881611f2a565b9392505050565b600080600060608486031215611fa457600080fd5b8335611faf81611f2a565b92506020840135611fbf81611f2a565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561200f5761200f611fd0565b604052919050565b600067ffffffffffffffff82111561203157612031611fd0565b5060051b60200190565b600082601f83011261204c57600080fd5b8135602061206161205c83612017565b611fe6565b82815260059290921b8401810191818101908684111561208057600080fd5b8286015b848110156120a457803561209781611f2a565b8352918301918301612084565b509695505050505050565b600080604083850312156120c257600080fd5b823567ffffffffffffffff8111156120d957600080fd5b6120e58582860161203b565b925050602083013580151581146120fb57600080fd5b809150509250929050565b60006020828403121561211857600080fd5b5035919050565b6000806040838503121561213257600080fd5b823567ffffffffffffffff8082111561214a57600080fd5b6121568683870161203b565b935060209150818501358181111561216d57600080fd5b85019050601f8101861361218057600080fd5b803561218e61205c82612017565b81815260059190911b820183019083810190888311156121ad57600080fd5b928401925b828410156121cb578335825292840192908401906121b2565b80955050505050509250929050565b600080604083850312156121ed57600080fd5b82356121f881611f2a565b915060208301356120fb81611f2a565b600181811c9082168061221c57607f821691505b60208210810361223c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b61ffff8181168382160190808211156122a8576122a8612277565b5092915050565b60208082526025908201527f4d617820526174652065786365656465642c20706c65617365206c6f7765722060408201526476616c756560d81b606082015260800190565b8181038181111561090157610901612277565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761090157610901612277565b60008261235157634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561090157610901612277565b60006020828403121561237b57600080fd5b8151611f8881611f2a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123d65784516001600160a01b0316835293830193918301916001016123b1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561240c57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220efee4ba0b843bc47ec0f767576171cec1953273c20d1f3be7b446402395fcffb64736f6c63430008130033

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

0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afc94420451fca019dc97100d14abcb8704d6e650000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000000000003c

-----Decoded View---------------
Arg [0] : _buyfeeRate (tuple):
Arg [1] : marketingFeeRate (uint256): 20
Arg [2] : liquidityFeeRate (uint256): 0

Arg [1] : _sellfeeRate (tuple):
Arg [1] : marketingFeeRate (uint256): 20
Arg [2] : liquidityFeeRate (uint256): 0

Arg [2] : _param (tuple):
Arg [1] : marketingTaxRecv (address): 0xafc94420451Fca019dC97100D14AbCb8704D6e65
Arg [2] : dexRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [3] : whitelistPeriod (uint256): 60


-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 000000000000000000000000afc94420451fca019dc97100d14abcb8704d6e65
Arg [5] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [6] : 000000000000000000000000000000000000000000000000000000000000003c


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

OVERVIEW

The $FXI token serves as your key to the FX1 community. Acquire $FXI to access platform services, hold it for exclusive benefits, or stake it for APY yield.

0xC5190E7FEC4d97a3a3b1aB42dfedac608e2d0793
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.