Contract 0x223b26cc3d0154ee9b625e94eb194940a8ca3867

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x85642069d1e96810b47b5379e25df98e90186022f7d003654ac03d4dd39e516eTransfer Ownersh...216886062022-10-29 12:11:33142 days 16 hrs agoDegenX: Deployer IN  0x223b26cc3d0154ee9b625e94eb194940a8ca38670 AVAX0.006441075225
0xf0d38dfa453d4d49775fb9d1c0ac0a2f00bbe3b563e3a3b3616b8a2e0875ff69Allow Contract209768892022-10-12 17:07:46159 days 11 hrs agoDegenX: Deployer IN  0x223b26cc3d0154ee9b625e94eb194940a8ca38670 AVAX0.012964725225
0xa2875d8276cc6b12d350a176e17911f2de5a6ce571275f777c14d78b65fe9b97Allow Contract209768872022-10-12 17:07:41159 days 11 hrs agoDegenX: Deployer IN  0x223b26cc3d0154ee9b625e94eb194940a8ca38670 AVAX0.012964725225
0xab6099d419b0b53221450042a0a86fe9e3ee50b467d3000bf0ee1905af5d99aeAllow Contract209768842022-10-12 17:07:36159 days 11 hrs agoDegenX: Deployer IN  0x223b26cc3d0154ee9b625e94eb194940a8ca38670 AVAX0.012964725225
0x21afc4d4168cdf4485086050fbb0e243bd034186c96d8504b119486b999c7b51Allow Contract209768812022-10-12 17:07:30159 days 11 hrs agoDegenX: Deployer IN  0x223b26cc3d0154ee9b625e94eb194940a8ca38670 AVAX0.012964725225
0xacac0897697c5dbde91ebbb808f5893f28116eedab7a36ac35745adee155adbe0x60806040209768782022-10-12 17:07:21159 days 11 hrs agoDegenX: Deployer IN  Create: DGNXControllerV20 AVAX1.088565525225
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DGNXControllerV2

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 11 : DGNXControllerV2.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import '@openzeppelin/contracts/access/Ownable.sol';
import '@openzeppelin/contracts/security/ReentrancyGuard.sol';

import './../interfaces/IDGNXController.sol';
import './../interfaces/IDGNXDisburser.sol';
import './../interfaces/IFactory.sol';
import './../interfaces/IPair.sol';
import './../interfaces/IERC20.sol';
import './DGNXLibrary.sol';

contract DGNXControllerV2 is IDGNXController, ReentrancyGuard, Ownable {
    bool public inFee = false;
    bool public applyFee = true;

    // taxation
    uint256 public burnTax = 100;
    uint256 public backingTax = 200;
    uint256 public liquidityTax = 300;
    uint256 public marketingTax = 100;
    uint256 public platformTax = 200;
    uint256 public investmentFundTax = 200;

    // threshold for liquidity boosting
    uint256 public liquidityThreshold = 20 * 10**18; // 20 AVAX for now

    // track liquidity for boosting
    uint256 public liquidityWAVAX;

    // Some basic stuff we need
    address public constant DEV = 0xdF090f6675034Fde637031c6590FD1bBeBc4fa45;
    address public constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address public constant MARKETING =
        0x16eF18E42A7d72E52E9B213D7eABA269B90A4643;
    address public constant BACKING =
        0x31CE1540414361cFf99e83a05e4ad6d35D425202;
    address public constant PLATFORM =
        0xcA01A9d36F47561F03226B6b697B14B9274b1B10;
    address public constant INVESTMENT_FUND =
        0x829619513F202e1bFD8929f656EF96bac73BDAe8;
    address public constant DISBURSER =
        0x8a0E3264Da08bf999AfF5a50AabF5d2dc89fab79;
    address public constant LOCKER = 0x2c7D8bB6aBA4FFf56cDDBF9ea47ed270A10098F7;

    // needs to be set
    address public previousController;
    address public dgnx;
    address public wavax;
    address public mainPair;

    // track all pairs
    address[] private allPairs;

    mapping(address => address[]) private pairsPath;
    mapping(address => bool) private pairs;
    mapping(address => bool) private factories;
    mapping(address => bool) private allowedContracts;

    event PairAdded(address pair, address[] pathToWAVAX, address sender);
    event PairRemoved(address pair, address sender);
    event FactoryAdded(address factory, address sender);
    event FactoryRemoved(address factory, address sender);
    event TurnFeesOn(address sender);
    event TurnFeesOff(address sender);
    event MigratingController(address originalSender);
    event RecoverToken(address sender, address asset, uint256 amount);
    event AllowContract(address sender, address target);
    event RemoveContract(address sender, address target);
    event SetBurnTax(address sender, uint256 tax);
    event SetBackingTax(address sender, uint256 tax);
    event SetLiquidityTax(address sender, uint256 tax);
    event SetMarketingTax(address sender, uint256 tax);
    event SetPlatformTax(address sender, uint256 tax);
    event SetInvestmentFundTax(address sender, uint256 tax);
    event SetLiquidityThreshold(address sender, uint256 threshold);
    event BoostLiquidity(
        address token0,
        uint256 amount0,
        address token1,
        uint256 amount1,
        address sender
    );

    constructor(
        address _dgnx,
        address _wavax,
        address[] memory _factories,
        address[] memory _pairs,
        address _mainPair
    ) {
        require(_dgnx != address(0), 'DGNXController::constructor wrong dgnx');
        require(
            _wavax != address(0),
            'DGNXController::constructor wrong wavax'
        );
        require(
            _dgnx != _wavax,
            'DGNXController::constructor dgnx and wavax same token'
        );
        require(
            _factories.length >= 2 &&
                _pairs.length >= 2 &&
                _factories.length == _pairs.length,
            'DGNXController::constructor mismatching factories and pairs'
        );

        dgnx = _dgnx;
        wavax = _wavax;

        address[] memory path;
        bool hasMainPair = false;
        for (uint256 i = 0; i < _factories.length; i++) {
            require(
                _factories[i] == IPair(_pairs[i]).factory(),
                'DGNXController::constructor pair factory and factory mismatch'
            );
            addFactory(_factories[i]);
            addPair(_pairs[i], path);
            if (_mainPair == _pairs[i]) {
                hasMainPair = true;
            }
        }

        require(
            hasMainPair,
            'DGNXController::constructor main pair is not available in pairs'
        );

        setMainPair(_mainPair);
        allowContract(_dgnx);
    }

    modifier onlyAllowed() {
        _onlyAllowed();
        _;
    }

    function _onlyAllowed() private view {
        require(
            allowedContracts[msg.sender] || msg.sender == owner(),
            'DGNXController::_onlyAllowed not allowed'
        );
    }

    function transferFees(
        address from,
        address to,
        uint256 amount
    ) external virtual onlyAllowed returns (uint256 newAmount) {
        require(amount > 0, 'DGNXController::transferFees no amount set');

        bool isSell = isPair(to);
        bool isBuy = isPair(from);

        // Disburser Wallet Transfer Tax
        if (isDisburserWallet(to) && !isSell && !isBuy && from != DISBURSER) {
            uint256 leftover = amount % 10000;
            uint256 tax = (((amount - leftover) * 500) / 10000) + leftover;
            safeTransfer(dgnx, LOCKER, tax);
            return amount - tax;
        }

        if (
            isAllowed(from) ||
            isAllowed(to) ||
            (!isSell && !isBuy) ||
            !applyFee ||
            inFee
        ) return amount;

        (
            uint256 _newAmount,
            uint256 _liquidityAmount,
            uint256 _backingAmount,
            uint256 _burnAmount,
            uint256 _marketingAmount,
            uint256 _platformAmount,
            uint256 _investmentFundAmount
        ) = estimateTransferFees(from, to, amount);

        uint256 swapAmount = amount - _newAmount - _burnAmount;

        newAmount = _newAmount;

        // enter fee
        inFee = true;

        if (_burnAmount > 0) {
            safeTransfer(dgnx, DEAD, _burnAmount);
        }

        if (allPairs.length > 1) {
            address currentPair = isSell ? to : from;
            uint256 wavaxBefore = IERC20(wavax).balanceOf(address(this));

            (, address swapPair) = bestWAVAXValue(swapAmount, currentPair);

            address _factory = IPair(swapPair).factory();

            // swap start >> dgnx > wavax
            address[] memory path = getPathForPair(swapPair, dgnx);
            uint256[] memory amounts = getAmountsOut(
                _factory,
                swapAmount,
                path
            );
            safeTransfer(path[0], swapPair, amounts[0]);
            _swap(_factory, amounts, path, address(this));
            // swap end

            uint256 receivedWavax = IERC20(wavax).balanceOf(address(this)) -
                wavaxBefore;

            uint256 _backing = (receivedWavax * _backingAmount) / swapAmount;
            uint256 _platform = (receivedWavax * _platformAmount) / swapAmount;
            uint256 _investment = (receivedWavax * _investmentFundAmount) /
                swapAmount;

            if (_backing > 0) {
                safeTransfer(wavax, BACKING, _backing);
            }

            if (_platform > 0) {
                uint256 _devAmount = (_platform * 40) / 100; // 40%
                _platform -= _devAmount; // 60%
                safeTransfer(wavax, DEV, _devAmount);
                safeTransfer(wavax, PLATFORM, _platform);
            }

            if (_investment > 0) {
                safeTransfer(wavax, INVESTMENT_FUND, _investment);
            }

            if (_marketingAmount > 0) {
                uint256 _amount = (receivedWavax * _marketingAmount) /
                    swapAmount;
                safeTransfer(wavax, MARKETING, _amount);
            }

            // rest of wavax on contract will be used for liquidity boosting
            liquidityWAVAX = IERC20(wavax).balanceOf(address(this));

            if (
                mainPair != currentPair && liquidityWAVAX >= liquidityThreshold
            ) {
                boostLiquidity();
            }
        } else {
            // return amount to sender
            newAmount += _liquidityAmount;

            if (_backingAmount > 0) {
                safeTransfer(dgnx, BACKING, _backingAmount);
            }

            if (_platformAmount > 0) {
                uint256 _devAmount = (_platformAmount * 40) / 100; // 40%
                _platformAmount -= _devAmount; // 60%
                safeTransfer(dgnx, DEV, _devAmount);
                safeTransfer(dgnx, PLATFORM, _platformAmount);
            }

            if (_investmentFundAmount > 0) {
                safeTransfer(dgnx, INVESTMENT_FUND, _investmentFundAmount);
            }

            if (_marketingAmount > 0) {
                safeTransfer(dgnx, MARKETING, _marketingAmount);
            }
        }

        // leave fee
        inFee = false;
    }

    function estimateTransferFees(
        address from,
        address to,
        uint256 amount
    )
        public
        view
        returns (
            uint256 newAmount,
            uint256 _liquidityAmount,
            uint256 _backingAmount,
            uint256 _burnAmount,
            uint256 _marketingAmount,
            uint256 _platformAmount,
            uint256 _investmentFundAmount
        )
    {
        require(
            amount > 0,
            'DGNXController::estimateTransferFees no amount set'
        );

        bool isSell = isPair(to);
        bool isBuy = isPair(from);

        // Disburser Wallet Transfer Tax
        if (isDisburserWallet(to) && !isSell && !isBuy && from != DISBURSER) {
            uint256 leftover = amount % 10000;
            uint256 tax = (((amount - leftover) * 500) / 10000) + leftover;
            return (amount - tax, 0, 0, 0, 0, 0, 0);
        }

        if (
            isAllowed(from) ||
            isAllowed(to) ||
            (!isSell && !isBuy) ||
            !applyFee ||
            inFee
        ) return (amount, 0, 0, 0, 0, 0, 0);

        _liquidityAmount = (amount * liquidityTax) / 10000;
        _backingAmount = (amount * backingTax) / 10000;
        _platformAmount = (amount * platformTax) / 10000;
        _investmentFundAmount = (amount * investmentFundTax) / 10000;
        newAmount =
            amount -
            (_backingAmount +
                _liquidityAmount +
                _platformAmount +
                _investmentFundAmount);

        if (isSell) {
            _burnAmount = (amount * burnTax) / 10000;
            newAmount -= _burnAmount;
        } else {
            _marketingAmount = (amount * marketingTax) / 10000;
            newAmount -= _marketingAmount;
        }
    }

    function boostLiquidity() public onlyAllowed nonReentrant {
        uint256 forSwap = liquidityWAVAX / 2;
        uint256 forLiquidity = liquidityWAVAX - forSwap;

        address _factory = IPair(mainPair).factory();
        address _t0 = IPair(mainPair).token0();
        address _t1 = IPair(mainPair).token1();

        // swap start >> wavax > dgnx
        address[] memory path = getPathForPair(mainPair, wavax);
        uint256[] memory amounts = getAmountsOut(_factory, forSwap, path);
        safeTransfer(path[0], mainPair, amounts[0]);
        _swap(_factory, amounts, path, address(this));
        // swap end

        (uint256 amountA, uint256 amountB, ) = addLiquidity(
            _factory,
            _t0,
            _t1,
            amounts[amounts.length - 1],
            forLiquidity,
            PLATFORM
        );

        // update current wavax with leftovers
        liquidityWAVAX = IERC20(wavax).balanceOf(address(this));

        emit BoostLiquidity(_t0, amountA, _t1, amountB, msg.sender);
    }

    function addLiquidity(
        address factory,
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        address to
    )
        internal
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        )
    {
        (uint256 reserveA, uint256 reserveB) = DGNXLibrary.getReserves(
            factory,
            tokenA,
            tokenB
        );
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint256 amountBOptimal = DGNXLibrary.quote(
                amountADesired,
                reserveA,
                reserveB
            );
            if (amountBOptimal <= amountBDesired) {
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint256 amountAOptimal = DGNXLibrary.quote(
                    amountBDesired,
                    reserveB,
                    reserveA
                );
                assert(amountAOptimal <= amountADesired);
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
        address pair = IFactory(factory).getPair(tokenA, tokenB);
        safeTransfer(tokenA, pair, amountA);
        safeTransfer(tokenB, pair, amountB);
        liquidity = IPair(pair).mint(to);
    }

    function _swap(
        address factory,
        uint256[] memory amounts,
        address[] memory path,
        address _to
    ) internal {
        for (uint256 i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0, ) = DGNXLibrary.sortTokens(input, output);
            uint256 amountOut = amounts[i + 1];
            (uint256 amount0Out, uint256 amount1Out) = input == token0
                ? (uint256(0), amountOut)
                : (amountOut, uint256(0));
            address to = i < path.length - 2
                ? IFactory(factory).getPair(output, path[i + 2])
                : _to;
            IPair(IFactory(factory).getPair(input, output)).swap(
                amount0Out,
                amount1Out,
                to,
                new bytes(0)
            );
        }
    }

    function bestWAVAXValue(uint256 tokenAmount, address ignorePair)
        internal
        view
        returns (uint256 value, address usePair)
    {
        if (allPairs.length > 0 && tokenAmount > 0) {
            uint256 currentValue;
            for (uint256 i; i < allPairs.length; i++) {
                address pair = allPairs[i];
                if (ignorePair != pair) {
                    address[] memory path = getPathForPair(pair, dgnx);
                    uint256[] memory amounts = getAmountsOut(
                        IPair(pair).factory(),
                        tokenAmount,
                        path
                    );
                    currentValue = amounts[amounts.length - 1];
                    if (currentValue > value) {
                        value = currentValue;
                        usePair = pair;
                    }
                }
            }
        }
    }

    /**
     * Add example:
     *   addr => DGNX/BNB
     *   pathToWAVAX => BNB => WAVAX
     */
    function addPair(address addr, address[] memory pathToWAVAX)
        public
        onlyAllowed
    {
        require(addr != address(0), 'DGNXController::addPair no pair');
        require(
            IPair(addr).factory() != address(0),
            'DGNXController::addPair no factory'
        );
        require(
            factories[IPair(addr).factory()],
            'DGNXController::addPair wrong factory'
        );
        require(!pairs[addr], 'DGNXController::addPair pair already exists');
        address t0 = IPair(addr).token0();
        address t1 = IPair(addr).token1();
        require(t0 == dgnx || t1 == dgnx, 'DGNXController::addPair no dgnx');
        (t0, t1) = t0 == dgnx ? (t0, t1) : (t1, t0);
        if (pathToWAVAX.length == 1)
            revert('DGNXController::addPair swap path needs 2 addresses');
        if (pathToWAVAX.length > 1) {
            require(
                pathToWAVAX[0] == t1,
                'DGNXController::addPair wrong paired token path'
            );
            require(
                pathToWAVAX[pathToWAVAX.length - 1] == wavax,
                'DGNXController::addPair wrong wavax path'
            );
            for (uint256 i; i < pathToWAVAX.length - 1; i++) {
                require(
                    IFactory(IPair(addr).factory()).getPair(
                        pathToWAVAX[i],
                        pathToWAVAX[i + 1]
                    ) != address(0),
                    'DGNXController::addPair invalid pair'
                );
            }
            pairsPath[addr] = pathToWAVAX;
        } else {
            require(
                t0 == wavax || t1 == wavax,
                'DGNXController::addPair no busd token'
            );
        }

        pairs[addr] = true;
        allPairs.push(addr);

        emit PairAdded(addr, pathToWAVAX, msg.sender);
    }

    function removePair(address addr) external onlyOwner {
        require(pairs[addr], 'DGNXController::removePair no pair');
        pairs[addr] = false;
        emit PairRemoved(addr, msg.sender);
    }

    function isPair(address addr) private view returns (bool) {
        return pairs[addr];
    }

    function addFactory(address addr) public onlyOwner {
        require(addr != address(0), 'DGNXController::addFactory wrong address');
        require(
            !factories[addr],
            'DGNXController::addFactory already existing'
        );
        factories[addr] = true;
        emit FactoryAdded(addr, msg.sender);
    }

    function removeFactory(address addr) external onlyOwner {
        require(factories[addr], 'DGNXController::removeFactory not existing');
        factories[addr] = false;
        emit FactoryRemoved(addr, msg.sender);
    }

    function getAmountsOut(
        address factory,
        uint256 amountIn,
        address[] memory path
    ) public view returns (uint256[] memory amounts) {
        return DGNXLibrary.getAmountsOut(factory, amountIn, path);
    }

    function getPathForPair(address addr, address from)
        internal
        view
        returns (address[] memory path)
    {
        (address t0, address t1) = IPair(addr).token0() == from
            ? (IPair(addr).token0(), IPair(addr).token1())
            : (IPair(addr).token1(), IPair(addr).token0());

        if (pairsPath[addr].length == 0) {
            path = new address[](2);
            (path[0], path[1]) = (t0, t1);
        } else {
            path = new address[](pairsPath[addr].length + 1);
            path[0] = t0;
            for (uint256 j; j < pairsPath[addr].length; j++) {
                path[j + 1] = pairsPath[addr][j];
            }
        }
    }

    function feeOff() external onlyAllowed {
        applyFee = false;
        emit TurnFeesOff(msg.sender);
    }

    function feeOn() external onlyAllowed {
        applyFee = true;
        emit TurnFeesOn(msg.sender);
    }

    // if we update controller, we need to transfer funds to new controller. This will be called by new controller and add all factories and pairs
    function migrate() external onlyAllowed nonReentrant {
        uint256 balanceDgnx = IERC20(dgnx).balanceOf(address(this));
        uint256 balanceWavax = IERC20(wavax).balanceOf(address(this));
        if (balanceDgnx > 0) {
            safeTransfer(dgnx, msg.sender, balanceDgnx);
        }
        if (balanceWavax > 0) {
            safeTransfer(wavax, msg.sender, balanceWavax);
        }
        for (uint256 i; i < allPairs.length; i++) {
            uint256 lpTokens = IERC20(allPairs[i]).balanceOf(address(this));
            if (lpTokens > 0) {
                safeTransfer(allPairs[i], msg.sender, lpTokens);
            }
            address _t0 = IPair(allPairs[i]).token0();
            address _t1 = IPair(allPairs[i]).token1();
            uint256 _t0Balance = IERC20(_t0).balanceOf(address(this));
            uint256 _t1Balance = IERC20(_t1).balanceOf(address(this));
            if (_t0Balance > 0) {
                safeTransfer(_t0, msg.sender, _t0Balance);
            }
            if (_t1Balance > 0) {
                safeTransfer(_t1, msg.sender, _t1Balance);
            }
        }
    }

    // this is called by the token to initiate the migration from the new controller
    function migration(address _previousController)
        external
        onlyAllowed
        nonReentrant
    {
        require(
            _previousController != address(this) &&
                _previousController != address(0),
            'DGNXController::migration wrong controller address'
        );
        previousController = _previousController;
        IDGNXController(previousController).migrate();

        // move migrated pool tokens to platform multisig
        safeTransfer(
            mainPair,
            PLATFORM,
            IERC20(mainPair).balanceOf(address(this))
        );

        // burn migrated dgnx
        safeTransfer(dgnx, DEAD, IERC20(dgnx).balanceOf(address(this)));

        // move wavax to marketing
        safeTransfer(wavax, MARKETING, IERC20(wavax).balanceOf(address(this)));

        emit MigratingController(tx.origin);
    }

    // if there are any tokens send by accident, we can revover it
    function recoverToken(address token, address to)
        external
        onlyAllowed
        nonReentrant
    {
        require(dgnx != token, 'DGNXController::recoverToken No drain allowed');
        require(
            wavax != token,
            'DGNXController::recoverToken No drain allowed'
        );
        for (uint256 i; i < allPairs.length; i++) {
            require(
                allPairs[i] != token,
                'DGNXController::recoverToken No drain allowed'
            );
        }
        uint256 amount = IERC20(token).balanceOf(address(this));
        safeTransfer(token, to, amount);
        emit RecoverToken(msg.sender, token, amount);
    }

    function allowContract(address addr) public onlyAllowed nonReentrant {
        require(
            addr != address(0),
            'DGNXController::allowContract zero address'
        );
        require(addr != DEAD, 'DGNXController::allowContract 0xdead address');
        require(
            addr.code.length > 0,
            'DGNXController::allowContract no contract'
        );
        allowedContracts[addr] = true;
        emit AllowContract(msg.sender, addr);
    }

    function removeContract(address addr) external onlyAllowed {
        require(
            allowedContracts[addr],
            'DGNXController::removeContract no contract'
        );
        delete allowedContracts[addr];
        emit RemoveContract(msg.sender, addr);
    }

    function isAllowed(address addr) public view returns (bool) {
        return allowedContracts[addr];
    }

    function isDisburserWallet(address addr) private view returns (bool) {
        return IDGNXDisburser(DISBURSER).legacyAmounts(addr) > 0;
    }

    function setMainPair(address pair) public onlyOwner {
        require(pair != address(0), 'DGNXController::setMainPair zero address');
        require(
            pair != mainPair,
            'DGNXController::setMainPair pair already set'
        );
        mainPair = pair;
    }

    function getAllPairs() external view returns (address[] memory addr) {
        addr = allPairs;
    }

    function setBurnTax(uint256 _tax) external onlyOwner {
        require(_tax <= 500, 'DGNXController::setBurnTax max tax is 5');
        burnTax = _tax;
        emit SetBurnTax(msg.sender, _tax);
    }

    function setBackingTax(uint256 _tax) external onlyOwner {
        require(_tax <= 500, 'DGNXController::setBackingTax max tax is 5');
        backingTax = _tax;
        emit SetBackingTax(msg.sender, _tax);
    }

    function setLiquidityTax(uint256 _tax) external onlyOwner {
        require(_tax <= 500, 'DGNXController::setLiquidityTax max tax is 5');
        liquidityTax = _tax;
        emit SetLiquidityTax(msg.sender, _tax);
    }

    function setMarketingTax(uint256 _tax) external onlyOwner {
        require(_tax <= 500, 'DGNXController::setMarketingTax max tax is 5');
        marketingTax = _tax;
        emit SetMarketingTax(msg.sender, _tax);
    }

    function setPlatformTax(uint256 _tax) external onlyOwner {
        require(_tax <= 500, 'DGNXController::setPlatformTax max tax is 5');
        platformTax = _tax;
        emit SetPlatformTax(msg.sender, _tax);
    }

    function setInvestmentFundTax(uint256 _tax) external onlyOwner {
        require(
            _tax <= 500,
            'DGNXController::setInvestmentFundTax max tax is 5'
        );
        investmentFundTax = _tax;
        emit SetInvestmentFundTax(msg.sender, _tax);
    }

    function setLiquidityThreshold(uint256 _threshold) external onlyOwner {
        liquidityThreshold = _threshold;
        emit SetLiquidityThreshold(msg.sender, _threshold);
    }

    function safeTransfer(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(0xa9059cbb, to, value)
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            'DGNXController::safeTransfer TRANSFER_FAILED'
        );
    }
}

File 2 of 11 : Ownable.sol
// 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);
    }
}

File 3 of 11 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 4 of 11 : IDGNXController.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

interface IDGNXController {
    function transferFees(
        address from,
        address to,
        uint256 amount
    ) external returns (uint256 newAmount);

    function estimateTransferFees(
        address from,
        address to,
        uint256 amount
    )
        external
        returns (
            uint256 newAmount,
            uint256 _liquidityAmount,
            uint256 _backingAmount,
            uint256 _burnAmount,
            uint256 _marketingAmount,
            uint256 _platformAmount,
            uint256 _launchpadAmount
        );

    function migration(address _previousController) external;

    function migrate() external;

    function allowContract(address addr) external;

    function removeContract(address addr) external;

    function recoverToken(address token, address to) external;

    function isAllowed(address addr) external view returns (bool);

    function feeOff() external;

    function feeOn() external;
}

File 5 of 11 : IDGNXDisburser.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

interface IDGNXDisburser {
    function legacyAmounts(address addr) external view returns (uint256);
}

File 6 of 11 : IFactory.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

interface IFactory {
    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);
}

File 7 of 11 : IPair.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

interface IPair {
    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function mint(address to) external returns (uint256 liquidity);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );
}

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

interface IERC20 {
    function balanceOf(address account) external view returns (uint256);
}

File 9 of 11 : DGNXLibrary.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import '@openzeppelin/contracts/utils/math/SafeMath.sol';
import './../interfaces/IFactory.sol';
import './../interfaces/IPair.sol';

library DGNXLibrary {
    using SafeMath for uint256;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB)
        internal
        pure
        returns (address token0, address token1)
    {
        require(tokenA != tokenB, 'DGNXLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB
            ? (tokenA, tokenB)
            : (tokenB, tokenA);
        require(token0 != address(0), 'DGNXLibrary: ZERO_ADDRESS');
    }

    // fetches and sorts the reserves for a pair
    function getReserves(
        address factory,
        address tokenA,
        address tokenB
    ) internal view returns (uint256 reserveA, uint256 reserveB) {
        (address token0, ) = sortTokens(tokenA, tokenB);
        (uint256 reserve0, uint256 reserve1, ) = IPair(
            IFactory(factory).getPair(tokenA, tokenB)
        ).getReserves();
        (reserveA, reserveB) = tokenA == token0
            ? (reserve0, reserve1)
            : (reserve1, reserve0);
    }

    // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) internal pure returns (uint256 amountB) {
        require(amountA > 0, 'DGNXLibrary: INSUFFICIENT_AMOUNT');
        require(
            reserveA > 0 && reserveB > 0,
            'DGNXLibrary: INSUFFICIENT_LIQUIDITY'
        );
        amountB = amountA.mul(reserveB) / reserveA;
    }

    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) internal pure returns (uint256 amountOut) {
        require(amountIn > 0, 'DGNXLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(
            reserveIn > 0 && reserveOut > 0,
            'DGNXLibrary: INSUFFICIENT_LIQUIDITY'
        );
        uint256 amountInWithFee = amountIn.mul(997);
        uint256 numerator = amountInWithFee.mul(reserveOut);
        uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(
        address factory,
        uint256 amountIn,
        address[] memory path
    ) internal view returns (uint256[] memory amounts) {
        require(path.length >= 2, 'DGNXLibrary: INVALID_PATH');
        amounts = new uint256[](path.length);
        amounts[0] = amountIn;
        for (uint256 i; i < path.length - 1; i++) {
            (uint256 reserveIn, uint256 reserveOut) = getReserves(
                factory,
                path[i],
                path[i + 1]
            );
            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);
        }
    }
}

File 10 of 11 : Context.sol
// 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;
    }
}

File 11 of 11 : SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_dgnx","type":"address"},{"internalType":"address","name":"_wavax","type":"address"},{"internalType":"address[]","name":"_factories","type":"address[]"},{"internalType":"address[]","name":"_pairs","type":"address[]"},{"internalType":"address","name":"_mainPair","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"target","type":"address"}],"name":"AllowContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token0","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"BoostLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"factory","type":"address"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"FactoryAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"factory","type":"address"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"FactoryRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"originalSender","type":"address"}],"name":"MigratingController","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":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"address[]","name":"pathToWAVAX","type":"address[]"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"PairAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"PairRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RecoverToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"target","type":"address"}],"name":"RemoveContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"SetBackingTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"SetBurnTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"SetInvestmentFundTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"SetLiquidityTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"SetLiquidityThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"SetMarketingTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"SetPlatformTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"TurnFeesOff","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"TurnFeesOn","type":"event"},{"inputs":[],"name":"BACKING","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEV","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DISBURSER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVESTMENT_FUND","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LOCKER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MARKETING","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PLATFORM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"address[]","name":"pathToWAVAX","type":"address[]"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"allowContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"backingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boostLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dgnx","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"estimateTransferFees","outputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"},{"internalType":"uint256","name":"_liquidityAmount","type":"uint256"},{"internalType":"uint256","name":"_backingAmount","type":"uint256"},{"internalType":"uint256","name":"_burnAmount","type":"uint256"},{"internalType":"uint256","name":"_marketingAmount","type":"uint256"},{"internalType":"uint256","name":"_platformAmount","type":"uint256"},{"internalType":"uint256","name":"_investmentFundAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllPairs","outputs":[{"internalType":"address[]","name":"addr","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"investmentFundTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWAVAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_previousController","type":"address"}],"name":"migration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"previousController","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"recoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setBackingTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setBurnTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setInvestmentFundTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setLiquidityTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"setLiquidityThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"setMainPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setMarketingTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setPlatformTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFees","outputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wavax","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040526001805461ffff60a01b1916600160a81b1790556064600281905560c8600381905561012c60045560059190915560068190556007556801158e460913d000006008553480156200005457600080fd5b506040516200631b3803806200631b83398101604081905262000077916200152c565b6001600055620000873362000501565b6001600160a01b038516620000e15760405162461bcd60e51b81526020600482015260266024820152600080516020620062db8339815191526044820152650ce40c8cedcf60d31b60648201526084015b60405180910390fd5b6001600160a01b038416620001385760405162461bcd60e51b81526020600482015260276024820152600080516020620062db8339815191526044820152660ce40eec2ecc2f60cb1b6064820152608401620000d8565b836001600160a01b0316856001600160a01b031603620001c15760405162461bcd60e51b815260206004820152603560248201527f44474e58436f6e74726f6c6c65723a3a636f6e7374727563746f722064676e7860448201527f20616e642077617661782073616d6520746f6b656e00000000000000000000006064820152608401620000d8565b6002835110158015620001d657506002825110155b8015620001e4575081518351145b620002585760405162461bcd60e51b815260206004820152603b60248201527f44474e58436f6e74726f6c6c65723a3a636f6e7374727563746f72206d69736d60448201527f61746368696e6720666163746f7269657320616e6420706169727300000000006064820152608401620000d8565b600b80546001600160a01b038088166001600160a01b031992831617909255600c80549287169290911691909117905560606000805b85518110156200046857848181518110620002ad57620002ad620015cf565b60200260200101516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003199190620015e5565b6001600160a01b0316868281518110620003375762000337620015cf565b60200260200101516001600160a01b031614620003bd5760405162461bcd60e51b815260206004820152603d60248201527f44474e58436f6e74726f6c6c65723a3a636f6e7374727563746f72207061697260448201527f20666163746f727920616e6420666163746f7279206d69736d617463680000006064820152608401620000d8565b620003ea868281518110620003d657620003d6620015cf565b60200260200101516200055360201b60201c565b62000418858281518110620004035762000403620015cf565b602002602001015184620006e560201b60201c565b8481815181106200042d576200042d620015cf565b60200260200101516001600160a01b0316846001600160a01b0316036200045357600191505b806200045f8162001620565b9150506200028e565b5080620004de5760405162461bcd60e51b815260206004820152603f60248201527f44474e58436f6e74726f6c6c65723a3a636f6e7374727563746f72206d61696e60448201527f2070616972206973206e6f7420617661696c61626c6520696e207061697273006064820152608401620000d8565b620004e98362000fe2565b620004f4876200112d565b50505050505050620016da565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001546001600160a01b031633146200059e5760405162461bcd60e51b81526020600482018190526024820152600080516020620062fb8339815191526044820152606401620000d8565b6001600160a01b038116620006075760405162461bcd60e51b815260206004820152602860248201527f44474e58436f6e74726f6c6c65723a3a616464466163746f72792077726f6e67604482015267206164647265737360c01b6064820152608401620000d8565b6001600160a01b03811660009081526011602052604090205460ff1615620006865760405162461bcd60e51b815260206004820152602b60248201527f44474e58436f6e74726f6c6c65723a3a616464466163746f727920616c72656160448201526a6479206578697374696e6760a81b6064820152608401620000d8565b6001600160a01b038116600081815260116020908152604091829020805460ff19166001179055815192835233908301527fdc1fd46feba2318f68d29b121fd1f1c88d652dceeda1402b56b0f7188090667b910160405180910390a150565b620006ef62001341565b6001600160a01b038216620007475760405162461bcd60e51b815260206004820152601f60248201527f44474e58436f6e74726f6c6c65723a3a61646450616972206e6f2070616972006044820152606401620000d8565b60006001600160a01b0316826001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000791573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007b79190620015e5565b6001600160a01b0316036200081a5760405162461bcd60e51b815260206004820152602260248201527f44474e58436f6e74726f6c6c65723a3a61646450616972206e6f20666163746f604482015261727960f01b6064820152608401620000d8565b60116000836001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200085d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008839190620015e5565b6001600160a01b0316815260208101919091526040016000205460ff16620008fc5760405162461bcd60e51b815260206004820152602560248201527f44474e58436f6e74726f6c6c65723a3a616464506169722077726f6e6720666160448201526463746f727960d81b6064820152608401620000d8565b6001600160a01b03821660009081526010602052604090205460ff16156200097b5760405162461bcd60e51b815260206004820152602b60248201527f44474e58436f6e74726f6c6c65723a3a61646450616972207061697220616c7260448201526a656164792065786973747360a81b6064820152608401620000d8565b6000826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015620009bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009e29190620015e5565b90506000836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a4b9190620015e5565b600b549091506001600160a01b038381169116148062000a785750600b546001600160a01b038281169116145b62000ac65760405162461bcd60e51b815260206004820152601f60248201527f44474e58436f6e74726f6c6c65723a3a61646450616972206e6f2064676e78006044820152606401620000d8565b600b546001600160a01b0383811691161462000ae457808262000ae7565b81815b8451919350915060010362000b655760405162461bcd60e51b815260206004820152603360248201527f44474e58436f6e74726f6c6c65723a3a6164645061697220737761702070617460448201527f68206e65656473203220616464726573736573000000000000000000000000006064820152608401620000d8565b60018351111562000eb157806001600160a01b03168360008151811062000b905762000b90620015cf565b60200260200101516001600160a01b03161462000c085760405162461bcd60e51b815260206004820152602f60248201527f44474e58436f6e74726f6c6c65723a3a616464506169722077726f6e6720706160448201526e0d2e4cac840e8ded6cadc40e0c2e8d608b1b6064820152608401620000d8565b600c5483516001600160a01b0390911690849062000c29906001906200163c565b8151811062000c3c5762000c3c620015cf565b60200260200101516001600160a01b03161462000cad5760405162461bcd60e51b815260206004820152602860248201527f44474e58436f6e74726f6c6c65723a3a616464506169722077726f6e672077616044820152670ecc2f040e0c2e8d60c31b6064820152608401620000d8565b60005b6001845162000cc091906200163c565b81101562000e7e5760006001600160a01b0316856001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000d12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d389190620015e5565b6001600160a01b031663e6a4390586848151811062000d5b5762000d5b620015cf565b60200260200101518785600162000d73919062001656565b8151811062000d865762000d86620015cf565b60200260200101516040518363ffffffff1660e01b815260040162000dc19291906001600160a01b0392831681529116602082015260400190565b602060405180830381865afa15801562000ddf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e059190620015e5565b6001600160a01b03160362000e695760405162461bcd60e51b8152602060048201526024808201527f44474e58436f6e74726f6c6c65723a3a6164645061697220696e76616c6964206044820152633830b4b960e11b6064820152608401620000d8565b8062000e758162001620565b91505062000cb0565b506001600160a01b0384166000908152600f60209081526040909120845162000eaa92860190620013cb565b5062000f37565b600c546001600160a01b038381169116148062000edb5750600c546001600160a01b038281169116145b62000f375760405162461bcd60e51b815260206004820152602560248201527f44474e58436f6e74726f6c6c65723a3a61646450616972206e6f2062757364206044820152643a37b5b2b760d91b6064820152608401620000d8565b6001600160a01b038416600081815260106020526040808220805460ff19166001908117909155600e805491820181559092527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd90910180546001600160a01b031916909217909155517f1955a2778a00e9248184f6eddeb1cd24a10d7dcb8b8e534ea9b112cb329340b19062000fd49086908690339062001671565b60405180910390a150505050565b6001546001600160a01b031633146200102d5760405162461bcd60e51b81526020600482018190526024820152600080516020620062fb8339815191526044820152606401620000d8565b6001600160a01b038116620010965760405162461bcd60e51b815260206004820152602860248201527f44474e58436f6e74726f6c6c65723a3a7365744d61696e50616972207a65726f604482015267206164647265737360c01b6064820152608401620000d8565b600d546001600160a01b03908116908216036200110b5760405162461bcd60e51b815260206004820152602c60248201527f44474e58436f6e74726f6c6c65723a3a7365744d61696e50616972207061697260448201526b08185b1c9958591e481cd95d60a21b6064820152608401620000d8565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6200113762001341565b6002600054036200118b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401620000d8565b60026000556001600160a01b038116620011fb5760405162461bcd60e51b815260206004820152602a60248201527f44474e58436f6e74726f6c6c65723a3a616c6c6f77436f6e7472616374207a65604482015269726f206164647265737360b01b6064820152608401620000d8565b61deac196001600160a01b038216016200126d5760405162461bcd60e51b815260206004820152602c60248201527f44474e58436f6e74726f6c6c65723a3a616c6c6f77436f6e747261637420307860448201526b64656164206164647265737360a01b6064820152608401620000d8565b6000816001600160a01b03163b11620012db5760405162461bcd60e51b815260206004820152602960248201527f44474e58436f6e74726f6c6c65723a3a616c6c6f77436f6e7472616374206e6f6044820152680818dbdb9d1c9858dd60ba1b6064820152608401620000d8565b6001600160a01b038116600081815260126020908152604091829020805460ff191660011790558151338152908101929092527f21d9dc6bbcbac2ec1efea972942d14c693b61cc8ea9bdbb89d5d5baf81fa6763910160405180910390a1506001600055565b3360009081526012602052604090205460ff16806200136a57506001546001600160a01b031633145b620013c95760405162461bcd60e51b815260206004820152602860248201527f44474e58436f6e74726f6c6c65723a3a5f6f6e6c79416c6c6f776564206e6f7460448201526708185b1b1bddd95960c21b6064820152608401620000d8565b565b82805482825590600052602060002090810192821562001423579160200282015b828111156200142357825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620013ec565b506200143192915062001435565b5090565b5b8082111562001431576000815560010162001436565b80516001600160a01b03811681146200146457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200149157600080fd5b815160206001600160401b0380831115620014b057620014b062001469565b8260051b604051601f19603f83011681018181108482111715620014d857620014d862001469565b604052938452858101830193838101925087851115620014f757600080fd5b83870191505b84821015620015215762001511826200144c565b83529183019190830190620014fd565b979650505050505050565b600080600080600060a086880312156200154557600080fd5b62001550866200144c565b945062001560602087016200144c565b60408701519094506001600160401b03808211156200157e57600080fd5b6200158c89838a016200147f565b94506060880151915080821115620015a357600080fd5b50620015b2888289016200147f565b925050620015c3608087016200144c565b90509295509295909350565b634e487b7160e01b600052603260045260246000fd5b600060208284031215620015f857600080fd5b62001603826200144c565b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016200163557620016356200160a565b5060010190565b6000828210156200165157620016516200160a565b500390565b600082198211156200166c576200166c6200160a565b500190565b6001600160a01b038481168252606060208084018290528551918401829052600092868201929091906080860190855b81811015620016c1578551851683529483019491830191600101620016a1565b5050809450505080851660408501525050949350505050565b614bf180620016ea6000396000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c806385af30c511610182578063be617fa0116100e9578063e530a7d0116100a2578063f6bd02fa1161007c578063f6bd02fa1461066b578063f800ece91461067e578063fde726fb14610693578063feaea586146106a657600080fd5b8063e530a7d01461062a578063f2fde38b14610645578063f30e85bc1461065857600080fd5b8063be617fa0146105ce578063c1b2ff69146105d7578063c1eb5ddd146105df578063c375c2ef146105fa578063c96880861461060d578063dcc9def51461061657600080fd5b8063af6c9c1d1161013b578063af6c9c1d14610559578063b11c6b821461056c578063b2fabdb01461057f578063b549a50c14610588578063babcc5391461059b578063bb7b9c76146105ae57600080fd5b806385af30c5146104f757806386a954681461050a5780638da5cb5b1461052e5780638fd3ab801461053f578063968658ef1461054757806398f5c5f41461055057600080fd5b806344c55ffb116102415780635f4eb5af116101fa5780637508d16d116101d45780637508d16d1461046e57806376f3750d1461048157806377d64375146104c95780637efc77fa146104dc57600080fd5b80635f4eb5af14610440578063685e248614610453578063715018a61461046657600080fd5b806344c55ffb146103db5780634a827cee146103f65780634b37c73f146104095780634baf59f31461041c5780634f335d0a1461042f5780635cf76be51461043757600080fd5b80631f3b86fc116102935780631f3b86fc146103645780631fb0383e1461037757806322f08e661461038a57806329a9736a1461039257806329ce1ec5146103ad578063398788f7146103c057600080fd5b806303fd2a45146102db57806308ecd9a614610301578063117be4c21461031c5780631699141b1461032f5780631d2cb02d146103445780631d4eaead1461035b575b600080fd5b6102e461dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b6102e4732c7d8bb6aba4fff56cddbf9ea47ed270a10098f781565b600c546102e4906001600160a01b031681565b61034261033d366004614568565b6106b9565b005b61034d60055481565b6040519081526020016102f8565b61034d60025481565b600a546102e4906001600160a01b031681565b610342610385366004614568565b61079a565b610342610861565b6102e47331ce1540414361cff99e83a05e4ad6d35d42520281565b6103426103bb3660046145a6565b6108ac565b6102e473829619513f202e1bfd8929f656ef96bac73bdae881565b6102e4738a0e3264da08bf999aff5a50aabf5d2dc89fab7981565b610342610404366004614568565b610a0f565b6103426104173660046145a6565b610adb565b61034261042a366004614568565b610bd2565b610342610c37565b61034d60095481565b61034261044e366004614568565b610c82565b6103426104613660046145a6565b610d4e565b610342610fbe565b61034261047c366004614670565b610ff4565b61049461048f3660046146c0565b611889565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e0016102f8565b600b546102e4906001600160a01b031681565b6102e473ca01a9d36f47561f03226b6b697b14b9274b1b1081565b600d546102e4906001600160a01b031681565b60015461051e90600160a01b900460ff1681565b60405190151581526020016102f8565b6001546001600160a01b03166102e4565b610342611b64565b61034d60035481565b61034d60075481565b6103426105673660046145a6565b611fb2565b61034261057a366004614568565b6120a1565b61034d60065481565b610342610596366004614568565b61216c565b61051e6105a93660046145a6565b612236565b6105c16105bc366004614701565b612254565b6040516102f8919061475a565b61034d60045481565b61034261226b565b6102e473df090f6675034fde637031c6590fd1bbebc4fa4581565b6103426106083660046145a6565b6125e6565b61034d60085481565b60015461051e90600160a81b900460ff1681565b6102e47316ef18e42a7d72e52e9b213d7eaba269b90a464381565b6103426106533660046145a6565b6126bb565b6103426106663660046145a6565b612756565b6103426106793660046145a6565b61287c565b610686612a45565b6040516102f891906147e2565b61034d6106a13660046146c0565b612aa7565b6103426106b43660046147f5565b613240565b6001546001600160a01b031633146106ec5760405162461bcd60e51b81526004016106e39061482e565b60405180910390fd5b6101f48111156107585760405162461bcd60e51b815260206004820152603160248201527f44474e58436f6e74726f6c6c65723a3a736574496e766573746d656e7446756e60448201527064546178206d617820746178206973203560781b60648201526084016106e3565b600781905560408051338152602081018390527f9eeef0cc2d86a34c82ac6e1a2a250fa5b253f5957aed3379fef7e85bfe40d46b91015b60405180910390a150565b6001546001600160a01b031633146107c45760405162461bcd60e51b81526004016106e39061482e565b6101f48111156108265760405162461bcd60e51b815260206004820152602760248201527f44474e58436f6e74726f6c6c65723a3a7365744275726e546178206d617820746044820152666178206973203560c81b60648201526084016106e3565b600281905560408051338152602081018390527f93dc5eeebb3a74c225e728d46f28c0c10b954698b0a58f2c729d4bb333e39b9b910161078f565b610869613403565b6001805460ff60a81b191690556040513381527fcd85286e83e03f739cbd06db2d1a20e691f3a050557a2e442d490d9130f23134906020015b60405180910390a1565b6001546001600160a01b031633146108d65760405162461bcd60e51b81526004016106e39061482e565b6001600160a01b03811661093d5760405162461bcd60e51b815260206004820152602860248201527f44474e58436f6e74726f6c6c65723a3a616464466163746f72792077726f6e67604482015267206164647265737360c01b60648201526084016106e3565b6001600160a01b03811660009081526011602052604090205460ff16156109ba5760405162461bcd60e51b815260206004820152602b60248201527f44474e58436f6e74726f6c6c65723a3a616464466163746f727920616c72656160448201526a6479206578697374696e6760a81b60648201526084016106e3565b6001600160a01b03811660009081526011602052604090819020805460ff19166001179055517fdc1fd46feba2318f68d29b121fd1f1c88d652dceeda1402b56b0f7188090667b9061078f9083903390614863565b6001546001600160a01b03163314610a395760405162461bcd60e51b81526004016106e39061482e565b6101f4811115610aa05760405162461bcd60e51b815260206004820152602c60248201527f44474e58436f6e74726f6c6c65723a3a7365744d61726b6574696e675461782060448201526b6d617820746178206973203560a01b60648201526084016106e3565b600581905560408051338152602081018390527fff74ad6389d94f406fff03c8e507b1ccd4ceb9fbb5a5e846c838d8ddda7e1025910161078f565b6001546001600160a01b03163314610b055760405162461bcd60e51b81526004016106e39061482e565b6001600160a01b03811660009081526011602052604090205460ff16610b805760405162461bcd60e51b815260206004820152602a60248201527f44474e58436f6e74726f6c6c65723a3a72656d6f7665466163746f7279206e6f60448201526974206578697374696e6760b01b60648201526084016106e3565b6001600160a01b03811660009081526011602052604090819020805460ff19169055517f8abf55dfd8e76ea63b50021c4123f3438348f31da3f1d5eb162209547fb3d9189061078f9083903390614863565b6001546001600160a01b03163314610bfc5760405162461bcd60e51b81526004016106e39061482e565b600881905560408051338152602081018390527f13a6a521ac994307f915a9614b0fe4fd6abca32cb794b3a9d894ef5da522f53a910161078f565b610c3f613403565b6001805460ff60a81b1916600160a81b1790556040513381527f421d189bd87632076d420e3ff0226ca9fcade5da6013bda354b844c8cb18ca79906020016108a2565b6001546001600160a01b03163314610cac5760405162461bcd60e51b81526004016106e39061482e565b6101f4811115610d135760405162461bcd60e51b815260206004820152602c60248201527f44474e58436f6e74726f6c6c65723a3a7365744c69717569646974795461782060448201526b6d617820746178206973203560a01b60648201526084016106e3565b600481905560408051338152602081018390527f32e80931bd06f1f2edf0947358361debdee5e7756a2bf126d353277c37922e20910161078f565b610d56613403565b600260005403610d785760405162461bcd60e51b81526004016106e39061487d565b60026000556001600160a01b0381163014801590610d9e57506001600160a01b03811615155b610e055760405162461bcd60e51b815260206004820152603260248201527f44474e58436f6e74726f6c6c65723a3a6d6967726174696f6e2077726f6e6720604482015271636f6e74726f6c6c6572206164647265737360701b60648201526084016106e3565b600a80546001600160a01b0319166001600160a01b0383169081179091556040805163011fa75760e71b81529051638fd3ab809160048082019260009290919082900301818387803b158015610e5a57600080fd5b505af1158015610e6e573d6000803e3d6000fd5b5050600d546040516370a0823160e01b8152306004820152610f0093506001600160a01b03909116915073ca01a9d36f47561f03226b6b697b14b9274b1b109082906370a08231906024015b602060405180830381865afa158015610ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efb91906148b4565b613488565b600b546040516370a0823160e01b8152306004820152610f38916001600160a01b03169061dead9082906370a0823190602401610eba565b600c546040516370a0823160e01b8152306004820152610f82916001600160a01b0316907316ef18e42a7d72e52e9b213d7eaba269b90a46439082906370a0823190602401610eba565b6040513281527fd71a86c9a486d0cb85da9ea9874fea86d3b6989898cc6b0276b9e602a2bb2c27906020015b60405180910390a1506001600055565b6001546001600160a01b03163314610fe85760405162461bcd60e51b81526004016106e39061482e565b610ff260006135b8565b565b610ffc613403565b6001600160a01b0382166110525760405162461bcd60e51b815260206004820152601f60248201527f44474e58436f6e74726f6c6c65723a3a61646450616972206e6f20706169720060448201526064016106e3565b60006001600160a01b0316826001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561109b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bf91906148cd565b6001600160a01b0316036111205760405162461bcd60e51b815260206004820152602260248201527f44474e58436f6e74726f6c6c65723a3a61646450616972206e6f20666163746f604482015261727960f01b60648201526084016106e3565b60116000836001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611162573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118691906148cd565b6001600160a01b0316815260208101919091526040016000205460ff166111fd5760405162461bcd60e51b815260206004820152602560248201527f44474e58436f6e74726f6c6c65723a3a616464506169722077726f6e6720666160448201526463746f727960d81b60648201526084016106e3565b6001600160a01b03821660009081526010602052604090205460ff161561127a5760405162461bcd60e51b815260206004820152602b60248201527f44474e58436f6e74726f6c6c65723a3a61646450616972207061697220616c7260448201526a656164792065786973747360a81b60648201526084016106e3565b6000826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112de91906148cd565b90506000836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611320573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134491906148cd565b600b549091506001600160a01b03838116911614806113705750600b546001600160a01b038281169116145b6113bc5760405162461bcd60e51b815260206004820152601f60248201527f44474e58436f6e74726f6c6c65723a3a61646450616972206e6f2064676e780060448201526064016106e3565b600b546001600160a01b038381169116146113d85780826113db565b81815b8451919350915060010361144d5760405162461bcd60e51b815260206004820152603360248201527f44474e58436f6e74726f6c6c65723a3a6164645061697220737761702070617460448201527268206e6565647320322061646472657373657360681b60648201526084016106e3565b60018351111561175d57806001600160a01b031683600081518110611474576114746148ea565b60200260200101516001600160a01b0316146114ea5760405162461bcd60e51b815260206004820152602f60248201527f44474e58436f6e74726f6c6c65723a3a616464506169722077726f6e6720706160448201526e0d2e4cac840e8ded6cadc40e0c2e8d608b1b60648201526084016106e3565b600c5483516001600160a01b0390911690849061150990600190614916565b81518110611519576115196148ea565b60200260200101516001600160a01b0316146115885760405162461bcd60e51b815260206004820152602860248201527f44474e58436f6e74726f6c6c65723a3a616464506169722077726f6e672077616044820152670ecc2f040e0c2e8d60c31b60648201526084016106e3565b60005b600184516115999190614916565b81101561172d5760006001600160a01b0316856001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160d91906148cd565b6001600160a01b031663e6a4390586848151811061162d5761162d6148ea565b602002602001015187856001611643919061492d565b81518110611653576116536148ea565b60200260200101516040518363ffffffff1660e01b8152600401611678929190614863565b602060405180830381865afa158015611695573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b991906148cd565b6001600160a01b03160361171b5760405162461bcd60e51b8152602060048201526024808201527f44474e58436f6e74726f6c6c65723a3a6164645061697220696e76616c6964206044820152633830b4b960e11b60648201526084016106e3565b8061172581614945565b91505061158b565b506001600160a01b0384166000908152600f602090815260409091208451611757928601906144ee565b506117e0565b600c546001600160a01b03838116911614806117865750600c546001600160a01b038281169116145b6117e05760405162461bcd60e51b815260206004820152602560248201527f44474e58436f6e74726f6c6c65723a3a61646450616972206e6f2062757364206044820152643a37b5b2b760d91b60648201526084016106e3565b6001600160a01b038416600081815260106020526040808220805460ff19166001908117909155600e805491820181559092527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd90910180546001600160a01b031916909217909155517f1955a2778a00e9248184f6eddeb1cd24a10d7dcb8b8e534ea9b112cb329340b19061187b9086908690339061495e565b60405180910390a150505050565b60008060008060008060008088116118fe5760405162461bcd60e51b815260206004820152603260248201527f44474e58436f6e74726f6c6c65723a3a657374696d6174655472616e736665726044820152711199595cc81b9bc8185b5bdd5b9d081cd95d60721b60648201526084016106e3565b6001600160a01b0389811660009081526010602052604080822054928d16825290205460ff91821691166119318b61360a565b801561193b575081155b8015611945575080155b801561196e57506001600160a01b038c16738a0e3264da08bf999aff5a50aabf5d2dc89fab7914155b156119df5760006119816127108c6149a9565b9050600081612710611993828f614916565b61199f906101f46149bd565b6119a991906149dc565b6119b3919061492d565b90506119bf818d614916565b6000806000806000809a509a509a509a509a509a509a5050505050611b57565b6119e88c612236565b806119f757506119f78b612236565b80611a09575081158015611a09575080155b80611a1e5750600154600160a81b900460ff16155b80611a325750600154600160a01b900460ff165b15611a56578960008060008060008098509850985098509850985098505050611b57565b6127106004548b611a6791906149bd565b611a7191906149dc565b97506127106003548b611a8491906149bd565b611a8e91906149dc565b96506127106006548b611aa191906149bd565b611aab91906149dc565b93506127106007548b611abe91906149bd565b611ac891906149dc565b92508284611ad68a8a61492d565b611ae0919061492d565b611aea919061492d565b611af4908b614916565b98508115611b2a576127106002548b611b0d91906149bd565b611b1791906149dc565b9550611b23868a614916565b9850611b54565b6127106005548b611b3b91906149bd565b611b4591906149dc565b9450611b51858a614916565b98505b50505b9397509397509397909450565b611b6c613403565b600260005403611b8e5760405162461bcd60e51b81526004016106e39061487d565b60026000908155600b546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0191906148b4565b600c546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7391906148b4565b90508115611c9257600b54611c92906001600160a01b03163384613488565b8015611caf57600c54611caf906001600160a01b03163383613488565b60005b600e54811015611fa8576000600e8281548110611cd157611cd16148ea565b6000918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611d22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4691906148b4565b90508015611d8057611d80600e8381548110611d6457611d646148ea565b6000918252602090912001546001600160a01b03163383613488565b6000600e8381548110611d9557611d956148ea565b6000918252602091829020015460408051630dfe168160e01b815290516001600160a01b0390921692630dfe1681926004808401938290030181865afa158015611de3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0791906148cd565b90506000600e8481548110611e1e57611e1e6148ea565b600091825260209182902001546040805163d21220a760e01b815290516001600160a01b039092169263d21220a7926004808401938290030181865afa158015611e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9091906148cd565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa158015611eda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efe91906148b4565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa158015611f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6c91906148b4565b90508115611f7f57611f7f843384613488565b8015611f9057611f90833383613488565b50505050508080611fa090614945565b915050611cb2565b5050600160005550565b6001546001600160a01b03163314611fdc5760405162461bcd60e51b81526004016106e39061482e565b6001600160a01b03811660009081526010602052604090205460ff1661204f5760405162461bcd60e51b815260206004820152602260248201527f44474e58436f6e74726f6c6c65723a3a72656d6f766550616972206e6f20706160448201526134b960f11b60648201526084016106e3565b6001600160a01b03811660009081526010602052604090819020805460ff19169055517fcfacf9d602eaae62e56c577b2340ef89b971ff33287fa964a1d17027e8ea2d429061078f9083903390614863565b6001546001600160a01b031633146120cb5760405162461bcd60e51b81526004016106e39061482e565b6101f48111156121315760405162461bcd60e51b815260206004820152602b60248201527f44474e58436f6e74726f6c6c65723a3a736574506c6174666f726d546178206d60448201526a617820746178206973203560a81b60648201526084016106e3565b600681905560408051338152602081018390527fef97289860b81bb154ca263dfa041f54db4b0f4fa21d77b8feffc48c15d5ea27910161078f565b6001546001600160a01b031633146121965760405162461bcd60e51b81526004016106e39061482e565b6101f48111156121fb5760405162461bcd60e51b815260206004820152602a60248201527f44474e58436f6e74726f6c6c65723a3a7365744261636b696e67546178206d616044820152697820746178206973203560b01b60648201526084016106e3565b600381905560408051338152602081018390527f18e9acd84de9e10fffcc9ad33c40cdac33981ae26b4d564cac9a200ccee03ca9910161078f565b6001600160a01b031660009081526012602052604090205460ff1690565b6060612261848484613692565b90505b9392505050565b612273613403565b6002600054036122955760405162461bcd60e51b81526004016106e39061487d565b6002600081815560095490916122aa916149dc565b90506000816009546122bc9190614916565b90506000600d60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612313573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233791906148cd565b90506000600d60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561238e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b291906148cd565b90506000600d60009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242d91906148cd565b600d54600c5491925060009161244f916001600160a01b03908116911661381d565b9050600061245e858884612254565b90506124b482600081518110612476576124766148ea565b6020026020010151600d60009054906101000a90046001600160a01b0316836000815181106124a7576124a76148ea565b6020026020010151613488565b6124c085828430613c09565b60008061250b87878786600188516124d89190614916565b815181106124e8576124e86148ea565b60200260200101518c73ca01a9d36f47561f03226b6b697b14b9274b1b10613e94565b50600c546040516370a0823160e01b81523060048201529294509092506001600160a01b0316906370a0823190602401602060405180830381865afa158015612558573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257c91906148b4565b600955604080516001600160a01b038881168252602082018590528716818301526060810183905233608082015290517f50bab42c05c91edd9b96cf71f8f3e529af7991526614c3d91d528bca6e76d4079181900360a00190a15050600160005550505050505050565b6125ee613403565b6001600160a01b03811660009081526012602052604090205460ff166126695760405162461bcd60e51b815260206004820152602a60248201527f44474e58436f6e74726f6c6c65723a3a72656d6f7665436f6e7472616374206e6044820152691bc818dbdb9d1c9858dd60b21b60648201526084016106e3565b6001600160a01b03811660009081526012602052604090819020805460ff19169055517f6a5c7da51a06b9bffbafc4b0b82e404741c2bafa4841947363a6dced874c62b29061078f9033908490614863565b6001546001600160a01b031633146126e55760405162461bcd60e51b81526004016106e39061482e565b6001600160a01b03811661274a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106e3565b612753816135b8565b50565b6001546001600160a01b031633146127805760405162461bcd60e51b81526004016106e39061482e565b6001600160a01b0381166127e75760405162461bcd60e51b815260206004820152602860248201527f44474e58436f6e74726f6c6c65723a3a7365744d61696e50616972207a65726f604482015267206164647265737360c01b60648201526084016106e3565b600d546001600160a01b039081169082160361285a5760405162461bcd60e51b815260206004820152602c60248201527f44474e58436f6e74726f6c6c65723a3a7365744d61696e50616972207061697260448201526b08185b1c9958591e481cd95d60a21b60648201526084016106e3565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b612884613403565b6002600054036128a65760405162461bcd60e51b81526004016106e39061487d565b60026000556001600160a01b0381166129145760405162461bcd60e51b815260206004820152602a60248201527f44474e58436f6e74726f6c6c65723a3a616c6c6f77436f6e7472616374207a65604482015269726f206164647265737360b01b60648201526084016106e3565b61deac196001600160a01b038216016129845760405162461bcd60e51b815260206004820152602c60248201527f44474e58436f6e74726f6c6c65723a3a616c6c6f77436f6e747261637420307860448201526b64656164206164647265737360a01b60648201526084016106e3565b6000816001600160a01b03163b116129f05760405162461bcd60e51b815260206004820152602960248201527f44474e58436f6e74726f6c6c65723a3a616c6c6f77436f6e7472616374206e6f6044820152680818dbdb9d1c9858dd60ba1b60648201526084016106e3565b6001600160a01b03811660009081526012602052604090819020805460ff19166001179055517f21d9dc6bbcbac2ec1efea972942d14c693b61cc8ea9bdbb89d5d5baf81fa676390610fae9033908490614863565b6060600e805480602002602001604051908101604052809291908181526020018280548015612a9d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612a7f575b5050505050905090565b6000612ab1613403565b60008211612b145760405162461bcd60e51b815260206004820152602a60248201527f44474e58436f6e74726f6c6c65723a3a7472616e7366657246656573206e6f20604482015269185b5bdd5b9d081cd95d60b21b60648201526084016106e3565b6001600160a01b0383811660009081526010602052604080822054928716825290205460ff9182169116612b478561360a565b8015612b51575081155b8015612b5b575080155b8015612b8457506001600160a01b038616738a0e3264da08bf999aff5a50aabf5d2dc89fab7914155b15612c0c576000612b97612710866149a9565b9050600081612710612ba98289614916565b612bb5906101f46149bd565b612bbf91906149dc565b612bc9919061492d565b600b54909150612bf7906001600160a01b0316732c7d8bb6aba4fff56cddbf9ea47ed270a10098f783613488565b612c018187614916565b945050505050612264565b612c1586612236565b80612c245750612c2485612236565b80612c36575081158015612c36575080155b80612c4b5750600154600160a81b900460ff16155b80612c5f5750600154600160a01b900460ff165b15612c6e578392505050612264565b6000806000806000806000612c848d8d8d611889565b9650965096509650965096509650600084888d612ca19190614916565b612cab9190614916565b6001805460ff60a01b1916600160a01b179055979a508a9790508415612ce457600b54612ce4906001600160a01b031661dead87613488565b600e54600110156130fd5760008a612cfc578e612cfe565b8d5b600c546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612d4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7091906148b4565b90506000612d7e8484614018565b9150506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de591906148cd565b600b54909150600090612e029084906001600160a01b031661381d565b90506000612e11838884612254565b9050612e4582600081518110612e2957612e296148ea565b602002602001015185836000815181106124a7576124a76148ea565b612e5183828430613c09565b600c546040516370a0823160e01b815230600482015260009187916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec291906148b4565b612ecc9190614916565b9050600088612edb8f846149bd565b612ee591906149dc565b9050600089612ef48d856149bd565b612efe91906149dc565b905060008a612f0d8d866149bd565b612f1791906149dc565b90508215612f4a57600c54612f4a906001600160a01b03167331ce1540414361cff99e83a05e4ad6d35d42520285613488565b8115612fd05760006064612f5f8460286149bd565b612f6991906149dc565b9050612f758184614916565b600c54909350612fa3906001600160a01b031673df090f6675034fde637031c6590fd1bbebc4fa4583613488565b600c54612fce906001600160a01b031673ca01a9d36f47561f03226b6b697b14b9274b1b1085613488565b505b801561300157600c54613001906001600160a01b031673829619513f202e1bfd8929f656ef96bac73bdae883613488565b8d156130505760008b8f8661301691906149bd565b61302091906149dc565b600c5490915061304e906001600160a01b03167316ef18e42a7d72e52e9b213d7eaba269b90a464383613488565b505b600c546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130bc91906148b4565b600955600d546001600160a01b038b81169116148015906130e1575060085460095410155b156130ee576130ee61226b565b50505050505050505050613222565b613107878c61492d565b9a50851561313a57600b5461313a906001600160a01b03167331ce1540414361cff99e83a05e4ad6d35d42520288613488565b82156131c0576000606461314f8560286149bd565b61315991906149dc565b90506131658185614916565b600b54909450613193906001600160a01b031673df090f6675034fde637031c6590fd1bbebc4fa4583613488565b600b546131be906001600160a01b031673ca01a9d36f47561f03226b6b697b14b9274b1b1086613488565b505b81156131f157600b546131f1906001600160a01b031673829619513f202e1bfd8929f656ef96bac73bdae884613488565b831561322257600b54613222906001600160a01b03167316ef18e42a7d72e52e9b213d7eaba269b90a464386613488565b50506001805460ff60a01b1916905550505050505050509392505050565b613248613403565b60026000540361326a5760405162461bcd60e51b81526004016106e39061487d565b6002600055600b546001600160a01b0380841691160361329c5760405162461bcd60e51b81526004016106e3906149f0565b600c546001600160a01b038084169116036132c95760405162461bcd60e51b81526004016106e3906149f0565b60005b600e5481101561333757826001600160a01b0316600e82815481106132f3576132f36148ea565b6000918252602090912001546001600160a01b0316036133255760405162461bcd60e51b81526004016106e3906149f0565b8061332f81614945565b9150506132cc565b506040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa15801561337f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a391906148b4565b90506133b0838383613488565b604080513381526001600160a01b03851660208201529081018290527f16a1412f01b73c390eb2548427101644aa86c1443c272f73df00fb74c48fe4999060600160405180910390a15050600160005550565b3360009081526012602052604090205460ff168061342b57506001546001600160a01b031633145b610ff25760405162461bcd60e51b815260206004820152602860248201527f44474e58436f6e74726f6c6c65723a3a5f6f6e6c79416c6c6f776564206e6f7460448201526708185b1b1bddd95960c21b60648201526084016106e3565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916134e49190614a6d565b6000604051808303816000865af19150503d8060008114613521576040519150601f19603f3d011682016040523d82523d6000602084013e613526565b606091505b50915091508180156135505750805115806135505750808060200190518101906135509190614a89565b6135b15760405162461bcd60e51b815260206004820152602c60248201527f44474e58436f6e74726f6c6c65723a3a736166655472616e736665722054524160448201526b1394d1915497d1905253115160a21b60648201526084016106e3565b5050505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051638864fae960e01b81526001600160a01b03821660048201526000908190738a0e3264da08bf999aff5a50aabf5d2dc89fab7990638864fae990602401602060405180830381865afa158015613667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061368b91906148b4565b1192915050565b60606002825110156136e65760405162461bcd60e51b815260206004820152601960248201527f44474e584c6962726172793a20494e56414c49445f504154480000000000000060448201526064016106e3565b815167ffffffffffffffff811115613700576137006145c3565b604051908082528060200260200182016040528015613729578160200160208202803683370190505b5090508281600081518110613740576137406148ea565b60200260200101818152505060005b6001835161375d9190614916565b811015613815576000806137b08786858151811061377d5761377d6148ea565b602002602001015187866001613793919061492d565b815181106137a3576137a36148ea565b602002602001015161415b565b915091506137d88484815181106137c9576137c96148ea565b60200260200101518383614289565b846137e485600161492d565b815181106137f4576137f46148ea565b6020026020010181815250505050808061380d90614945565b91505061374f565b509392505050565b6060600080836001600160a01b0316856001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561386a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061388e91906148cd565b6001600160a01b03161461396557846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138fe91906148cd565b856001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561393c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061396091906148cd565b613a29565b846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139c791906148cd565b856001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2991906148cd565b6001600160a01b0387166000908152600f602052604081205492945090925003613abb576040805160028082526060820183529091602083019080368337019050509250818184600081518110613a8257613a826148ea565b6020026020010185600181518110613a9c57613a9c6148ea565b6001600160a01b03938416602091820292909201015291169052613c01565b6001600160a01b0385166000908152600f6020526040902054613adf90600161492d565b67ffffffffffffffff811115613af757613af76145c3565b604051908082528060200260200182016040528015613b20578160200160208202803683370190505b5092508183600081518110613b3757613b376148ea565b60200260200101906001600160a01b031690816001600160a01b03168152505060005b6001600160a01b0386166000908152600f6020526040902054811015613bff576001600160a01b0386166000908152600f60205260409020805482908110613ba457613ba46148ea565b6000918252602090912001546001600160a01b031684613bc583600161492d565b81518110613bd557613bd56148ea565b6001600160a01b039092166020928302919091019091015280613bf781614945565b915050613b5a565b505b505092915050565b60005b60018351613c1a9190614916565b8110156135b157600080848381518110613c3657613c366148ea565b602002602001015185846001613c4c919061492d565b81518110613c5c57613c5c6148ea565b6020026020010151915091506000613c748383614362565b509050600087613c8586600161492d565b81518110613c9557613c956148ea565b60200260200101519050600080836001600160a01b0316866001600160a01b031614613cc357826000613cc7565b6000835b91509150600060028a51613cdb9190614916565b8810613ce75788613d79565b6001600160a01b038c1663e6a43905878c613d038c600261492d565b81518110613d1357613d136148ea565b60200260200101516040518363ffffffff1660e01b8152600401613d38929190614863565b602060405180830381865afa158015613d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d7991906148cd565b60405163e6a4390560e01b81529091506001600160a01b038d169063e6a4390590613daa908a908a90600401614863565b602060405180830381865afa158015613dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613deb91906148cd565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613e28576020820181803683370190505b506040518563ffffffff1660e01b8152600401613e489493929190614aab565b600060405180830381600087803b158015613e6257600080fd5b505af1158015613e76573d6000803e3d6000fd5b50505050505050505050508080613e8c90614945565b915050613c0c565b6000806000806000613ea78b8b8b61415b565b91509150816000148015613eb9575080155b15613ec957879450869350613f11565b6000613ed6898484614444565b9050878111613eea57889550935083613f0f565b6000613ef7898486614444565b905089811115613f0957613f09614afb565b95508794505b505b60405163e6a4390560e01b81526000906001600160a01b038d169063e6a4390590613f42908e908e90600401614863565b602060405180830381865afa158015613f5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f8391906148cd565b9050613f908b8288613488565b613f9b8a8287613488565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a627842906024016020604051808303816000875af1158015613fe3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061400791906148b4565b935050505096509650969350505050565b600e5460009081901580159061402e5750600084115b15614154576000805b600e54811015614151576000600e8281548110614056576140566148ea565b6000918252602090912001546001600160a01b0390811691508616811461413e57600b546000906140919083906001600160a01b031661381d565b90506000614101836001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140fa91906148cd565b8a84612254565b905080600182516141129190614916565b81518110614122576141226148ea565b602002602001015194508685111561413b578496508295505b50505b508061414981614945565b915050614037565b50505b9250929050565b600080600061416a8585614362565b509050600080876001600160a01b031663e6a4390588886040518363ffffffff1660e01b815260040161419e929190614863565b602060405180830381865afa1580156141bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141df91906148cd565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561421c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142409190614b28565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b03161461427757808261427a565b81815b90999098509650505050505050565b60008084116142e95760405162461bcd60e51b815260206004820152602660248201527f44474e584c6962726172793a20494e53554646494349454e545f494e5055545f604482015265105353d5539560d21b60648201526084016106e3565b6000831180156142f95750600082115b6143155760405162461bcd60e51b81526004016106e390614b78565b6000614323856103e56144d6565b9050600061433182856144d6565b9050600061434b83614345886103e86144d6565b906144e2565b905061435781836149dc565b979650505050505050565b600080826001600160a01b0316846001600160a01b0316036143c65760405162461bcd60e51b815260206004820181905260248201527f44474e584c6962726172793a204944454e544943414c5f41444452455353455360448201526064016106e3565b826001600160a01b0316846001600160a01b0316106143e65782846143e9565b83835b90925090506001600160a01b0382166141545760405162461bcd60e51b815260206004820152601960248201527f44474e584c6962726172793a205a45524f5f414444524553530000000000000060448201526064016106e3565b60008084116144955760405162461bcd60e51b815260206004820181905260248201527f44474e584c6962726172793a20494e53554646494349454e545f414d4f554e5460448201526064016106e3565b6000831180156144a55750600082115b6144c15760405162461bcd60e51b81526004016106e390614b78565b826144cc85846144d6565b61226191906149dc565b600061226482846149bd565b6000612264828461492d565b828054828255906000526020600020908101928215614543579160200282015b8281111561454357825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061450e565b5061454f929150614553565b5090565b5b8082111561454f5760008155600101614554565b60006020828403121561457a57600080fd5b5035919050565b6001600160a01b038116811461275357600080fd5b80356145a181614581565b919050565b6000602082840312156145b857600080fd5b813561226481614581565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126145ea57600080fd5b8135602067ffffffffffffffff80831115614607576146076145c3565b8260051b604051601f19603f8301168101818110848211171561462c5761462c6145c3565b60405293845285810183019383810192508785111561464a57600080fd5b83870191505b848210156143575761466182614596565b83529183019190830190614650565b6000806040838503121561468357600080fd5b823561468e81614581565b9150602083013567ffffffffffffffff8111156146aa57600080fd5b6146b6858286016145d9565b9150509250929050565b6000806000606084860312156146d557600080fd5b83356146e081614581565b925060208401356146f081614581565b929592945050506040919091013590565b60008060006060848603121561471657600080fd5b833561472181614581565b925060208401359150604084013567ffffffffffffffff81111561474457600080fd5b614750868287016145d9565b9150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561479257835183529284019291840191600101614776565b50909695505050505050565b600081518084526020808501945080840160005b838110156147d75781516001600160a01b0316875295820195908201906001016147b2565b509495945050505050565b602081526000612264602083018461479e565b6000806040838503121561480857600080fd5b823561481381614581565b9150602083013561482381614581565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6001600160a01b0392831681529116602082015260400190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000602082840312156148c657600080fd5b5051919050565b6000602082840312156148df57600080fd5b815161226481614581565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561492857614928614900565b500390565b6000821982111561494057614940614900565b500190565b60006001820161495757614957614900565b5060010190565b600060018060a01b03808616835260606020840152614980606084018661479e565b9150808416604084015250949350505050565b634e487b7160e01b600052601260045260246000fd5b6000826149b8576149b8614993565b500690565b60008160001904831182151516156149d7576149d7614900565b500290565b6000826149eb576149eb614993565b500490565b6020808252602d908201527f44474e58436f6e74726f6c6c65723a3a7265636f766572546f6b656e204e6f2060408201526c191c985a5b88185b1b1bddd959609a1b606082015260800190565b60005b83811015614a58578181015183820152602001614a40565b83811115614a67576000848401525b50505050565b60008251614a7f818460208701614a3d565b9190910192915050565b600060208284031215614a9b57600080fd5b8151801515811461226457600080fd5b84815283602082015260018060a01b03831660408201526080606082015260008251806080840152614ae48160a0850160208701614a3d565b601f01601f19169190910160a00195945050505050565b634e487b7160e01b600052600160045260246000fd5b80516001600160701b03811681146145a157600080fd5b600080600060608486031215614b3d57600080fd5b614b4684614b11565b9250614b5460208501614b11565b9150604084015163ffffffff81168114614b6d57600080fd5b809150509250925092565b60208082526023908201527f44474e584c6962726172793a20494e53554646494349454e545f4c495155494460408201526249545960e81b60608201526080019056fea26469706673582212207f4d27ddabb443a1c2f391a48c09d3b82617d0baa4eb7253600c11d1b5fdd07064736f6c634300080d003344474e58436f6e74726f6c6c65723a3a636f6e7374727563746f722077726f6e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657200000000000000000000000051e48670098173025c477d9aa3f0eff7bf9f7812000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c700000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000bcabb94006400ed84c3699728d6ecbaa06665c8900000000000000000000000000000000000000000000000000000000000000020000000000000000000000009ad6c38be94206ca50bb0d90783181662f0cfa10000000000000000000000000efa94de7a4656d787667c749f7e1223d71e9fd880000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bcabb94006400ed84c3699728d6ecbaa06665c890000000000000000000000004a8323a220d554c03733612d415d465b3f21f12e

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

00000000000000000000000051e48670098173025c477d9aa3f0eff7bf9f7812000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c700000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000bcabb94006400ed84c3699728d6ecbaa06665c8900000000000000000000000000000000000000000000000000000000000000020000000000000000000000009ad6c38be94206ca50bb0d90783181662f0cfa10000000000000000000000000efa94de7a4656d787667c749f7e1223d71e9fd880000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bcabb94006400ed84c3699728d6ecbaa06665c890000000000000000000000004a8323a220d554c03733612d415d465b3f21f12e

-----Decoded View---------------
Arg [0] : _dgnx (address): 0x51e48670098173025c477d9aa3f0eff7bf9f7812
Arg [1] : _wavax (address): 0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7
Arg [2] : _factories (address[]): 0x9ad6c38be94206ca50bb0d90783181662f0cfa10,0xefa94de7a4656d787667c749f7e1223d71e9fd88
Arg [3] : _pairs (address[]): 0xbcabb94006400ed84c3699728d6ecbaa06665c89,0x4a8323a220d554c03733612d415d465b3f21f12e
Arg [4] : _mainPair (address): 0xbcabb94006400ed84c3699728d6ecbaa06665c89

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000051e48670098173025c477d9aa3f0eff7bf9f7812
Arg [1] : 000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [4] : 000000000000000000000000bcabb94006400ed84c3699728d6ecbaa06665c89
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 0000000000000000000000009ad6c38be94206ca50bb0d90783181662f0cfa10
Arg [7] : 000000000000000000000000efa94de7a4656d787667c749f7e1223d71e9fd88
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [9] : 000000000000000000000000bcabb94006400ed84c3699728d6ecbaa06665c89
Arg [10] : 0000000000000000000000004a8323a220d554c03733612d415d465b3f21f12e


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.