ETH Price: $1,972.88 (+0.54%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Sell Fei204154392024-07-29 23:13:47572 days ago1722294827IN
Fei Protocol: Fei Router
0 ETH0.000067581
Sell Fei151069552022-07-09 7:10:221323 days ago1657350622IN
Fei Protocol: Fei Router
0 ETH0.001206610
Buy Fei143707722022-03-12 8:06:031442 days ago1647072363IN
Fei Protocol: Fei Router
0.01 ETH0.0004554314.19509357
Sell Fei138420492021-12-20 12:36:571524 days ago1640003817IN
Fei Protocol: Fei Router
0 ETH0.004105134.01872565
Sell Fei138305302021-12-18 17:43:261526 days ago1639849406IN
Fei Protocol: Fei Router
0 ETH0.0055843546.28175133
Buy Fei138274362021-12-18 6:18:111526 days ago1639808291IN
Fei Protocol: Fei Router
4.98 ETH0.009618576.08190709
Sell Fei138214282021-12-17 7:48:121527 days ago1639727292IN
Fei Protocol: Fei Router
0 ETH0.0067519655.95302838
Sell Fei138108072021-12-15 16:31:181529 days ago1639585878IN
Fei Protocol: Fei Router
0 ETH0.0094104477.98370635
Buy Fei138059052021-12-14 22:11:061530 days ago1639519866IN
Fei Protocol: Fei Router
6.1 ETH0.01191865102.73021437
Sell Fei138020342021-12-14 7:52:071530 days ago1639468327IN
Fei Protocol: Fei Router
0 ETH0.0072222659.84438822
Sell Fei137992492021-12-13 21:16:381531 days ago1639430198IN
Fei Protocol: Fei Router
0 ETH0.01309095108.48378659
Sell Fei137965282021-12-13 11:24:091531 days ago1639394649IN
Fei Protocol: Fei Router
0 ETH0.0039154132.44675135
Sell Fei137918572021-12-12 18:09:061532 days ago1639332546IN
Fei Protocol: Fei Router
0 ETH0.0084817170.29437191
Sell Fei137885392021-12-12 5:50:411532 days ago1639288241IN
Fei Protocol: Fei Router
0 ETH0.0049350740.90070947
Buy Fei137832342021-12-11 10:08:501533 days ago1639217330IN
Fei Protocol: Fei Router
0.143 ETH0.0034617435
Buy Fei137832342021-12-11 10:08:501533 days ago1639217330IN
Fei Protocol: Fei Router
0.143 ETH0.0035606536
Buy Fei137832342021-12-11 10:08:501533 days ago1639217330IN
Fei Protocol: Fei Router
0.143 ETH0.0041540942
Buy Fei137832342021-12-11 10:08:501533 days ago1639217330IN
Fei Protocol: Fei Router
0.1441 ETH0.0036072633
Buy Fei137828432021-12-11 8:44:091533 days ago1639212249IN
Fei Protocol: Fei Router
0.133 ETH0.0052420753
Buy Fei137828432021-12-11 8:44:091533 days ago1639212249IN
Fei Protocol: Fei Router
0.123 ETH0.0038573739
Buy Fei137828432021-12-11 8:44:091533 days ago1639212249IN
Fei Protocol: Fei Router
0.123 ETH0.003826335
Buy Fei137809762021-12-11 1:48:521534 days ago1639187332IN
Fei Protocol: Fei Router
0.4 ETH0.0085577678.27962058
Buy Fei137809632021-12-11 1:46:531534 days ago1639187213IN
Fei Protocol: Fei Router
0.4 ETH0.01438597110.66557151
Buy Fei137809052021-12-11 1:32:451534 days ago1639186365IN
Fei Protocol: Fei Router
0.5 ETH0.0102832194.06273024
Buy Fei137808942021-12-11 1:30:231534 days ago1639186223IN
Fei Protocol: Fei Router
1 ETH0.01308629103.5119627
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer151069552022-07-09 7:10:221323 days ago1657350622
Fei Protocol: Fei Router
0.06529471 ETH
Transfer151069552022-07-09 7:10:221323 days ago1657350622
Fei Protocol: Fei Router
0.06529471 ETH
-138420492021-12-20 12:36:571524 days ago1640003817
Fei Protocol: Fei Router
0.345628 ETH
-138420492021-12-20 12:36:571524 days ago1640003817
Fei Protocol: Fei Router
0.345628 ETH
-138305302021-12-18 17:43:261526 days ago1639849406
Fei Protocol: Fei Router
0.13276111 ETH
-138305302021-12-18 17:43:261526 days ago1639849406
Fei Protocol: Fei Router
0.13276111 ETH
-138274362021-12-18 6:18:111526 days ago1639808291
Fei Protocol: Fei Router
4.98 ETH
-138214282021-12-17 7:48:121527 days ago1639727292
Fei Protocol: Fei Router
0.26905502 ETH
-138214282021-12-17 7:48:121527 days ago1639727292
Fei Protocol: Fei Router
0.26905502 ETH
-138108072021-12-15 16:31:181529 days ago1639585878
Fei Protocol: Fei Router
0.10800016 ETH
-138108072021-12-15 16:31:181529 days ago1639585878
Fei Protocol: Fei Router
0.10800016 ETH
-138059052021-12-14 22:11:061530 days ago1639519866
Fei Protocol: Fei Router
6.1 ETH
-138020342021-12-14 7:52:071530 days ago1639468327
Fei Protocol: Fei Router
2.28943087 ETH
-138020342021-12-14 7:52:071530 days ago1639468327
Fei Protocol: Fei Router
2.28943087 ETH
-137992492021-12-13 21:16:381531 days ago1639430198
Fei Protocol: Fei Router
0.13980249 ETH
-137992492021-12-13 21:16:381531 days ago1639430198
Fei Protocol: Fei Router
0.13980249 ETH
-137965282021-12-13 11:24:091531 days ago1639394649
Fei Protocol: Fei Router
0.13735667 ETH
-137965282021-12-13 11:24:091531 days ago1639394649
Fei Protocol: Fei Router
0.13735667 ETH
-137918572021-12-12 18:09:061532 days ago1639332546
Fei Protocol: Fei Router
0.16193128 ETH
-137918572021-12-12 18:09:061532 days ago1639332546
Fei Protocol: Fei Router
0.16193128 ETH
-137885392021-12-12 5:50:411532 days ago1639288241
Fei Protocol: Fei Router
0.03527649 ETH
-137885392021-12-12 5:50:411532 days ago1639288241
Fei Protocol: Fei Router
0.03527649 ETH
-137832342021-12-11 10:08:501533 days ago1639217330
Fei Protocol: Fei Router
0.143 ETH
-137832342021-12-11 10:08:501533 days ago1639217330
Fei Protocol: Fei Router
0.143 ETH
-137832342021-12-11 10:08:501533 days ago1639217330
Fei Protocol: Fei Router
0.143 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
FeiRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license
pragma solidity ^0.6.0;
pragma experimental ABIEncoderV2;

import "@uniswap/v2-periphery/contracts/interfaces/IWETH.sol";
import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol";
import "@uniswap/lib/contracts/libraries/TransferHelper.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "../external/UniswapV2Library.sol";
import "./IFeiRouter.sol";

/// @title A Uniswap Router for FEI/ETH swaps
/// @author Fei Protocol
contract FeiRouter is IFeiRouter {
    using SafeMathCopy for uint256;

    // solhint-disable-next-line var-name-mixedcase
    IWETH public immutable WETH;

    // solhint-disable-next-line var-name-mixedcase
    IUniswapV2Pair public immutable PAIR;

    constructor(
        address pair,
        address weth
    ) public {
        PAIR = IUniswapV2Pair(pair);
        WETH = IWETH(weth);
    }

    modifier ensure(uint256 deadline) {
        // solhint-disable-next-line not-rely-on-time
        require(deadline >= block.timestamp, "FeiRouter: Expired");
        _;
    }

    receive() external payable {
        assert(msg.sender == address(WETH)); // only accept ETH via fallback from the WETH contract
    }

    /// @notice buy FEI for ETH with some protections
    /// @param minReward minimum mint reward for purchasing
    /// @param amountOutMin minimum FEI received
    /// @param to address to send FEI
    /// @param deadline block timestamp after which trade is invalid
    function buyFei(
        uint256 minReward,
        uint256 amountOutMin,
        address to,
        uint256 deadline
    ) external payable override ensure(deadline) returns (uint256 amountOut) {

        (uint256 reservesETH, uint256 reservesOther, bool isWETHPairToken0) = _getReserves();

        uint256 amountIn = msg.value;
        amountOut = UniswapV2Library.getAmountOut(
            amountIn,
            reservesETH,
            reservesOther
        );
        
        require(
            amountOut >= amountOutMin,
            "FeiRouter: Insufficient output amount"
        );
        // Convert sent ETH to wrapped ETH and assert successful transfer to pair
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(address(PAIR), amountIn));

        address fei = isWETHPairToken0 ? PAIR.token1() : PAIR.token0();

        // Check fei balance of recipient before to compare against
        uint256 feiBalanceBefore = IERC20(fei).balanceOf(to);

        (uint256 amount0Out, uint256 amount1Out) =
            isWETHPairToken0 ? (uint256(0), amountOut) : (amountOut, uint256(0));
        PAIR.swap(amount0Out, amount1Out, to, new bytes(0));

        // Check that FEI recipient got at least minReward on top of trade amount
        uint256 feiBalanceAfter = IERC20(fei).balanceOf(to);
        uint256 reward = feiBalanceAfter.sub(feiBalanceBefore).sub(amountOut);
        require(reward >= minReward, "FeiRouter: Not enough reward");

        return amountOut;
    }

    /// @notice sell FEI for ETH with some protections
    /// @param maxPenalty maximum fei burn for purchasing
    /// @param amountIn amount of FEI to sell
    /// @param amountOutMin minimum ETH received
    /// @param to address to send ETH
    /// @param deadline block timestamp after which trade is invalid
    function sellFei(
        uint256 maxPenalty,
        uint256 amountIn,
        uint256 amountOutMin,
        address to,
        uint256 deadline
    ) external override ensure(deadline) returns (uint256 amountOut) {
        (uint256 reservesETH, uint256 reservesOther, bool isWETHPairToken0) =
            _getReserves();

        address fei = isWETHPairToken0 ? PAIR.token1() : PAIR.token0();

        IERC20(fei).transferFrom(msg.sender, address(PAIR), amountIn);

        // Figure out how much the PAIR actually received net of FEI burn
        uint256 effectiveAmountIn = IERC20(fei).balanceOf(address(PAIR)).sub(reservesOther);

        // Check that burned fee-on-transfer is not more than the maxPenalty
        if (effectiveAmountIn < amountIn) {
            uint256 penalty = amountIn - effectiveAmountIn;
            require(penalty <= maxPenalty, "FeiRouter: Penalty too high");
        }

        amountOut = UniswapV2Library.getAmountOut(
            effectiveAmountIn,
            reservesOther,
            reservesETH
        );
        require(
            amountOut >= amountOutMin,
            "FeiRouter: Insufficient output amount"
        );

        (uint256 amount0Out, uint256 amount1Out) =
            isWETHPairToken0 ? (amountOut, uint256(0)) : (uint256(0), amountOut);

        PAIR.swap(amount0Out, amount1Out, address(this), new bytes(0));

        IWETH(WETH).withdraw(amountOut);

        TransferHelper.safeTransferETH(to, amountOut);
        return amountOut;
    }

    function _getReserves()
        internal
        view
        returns (
            uint256 reservesETH,
            uint256 reservesOther,
            bool isWETHPairToken0
        )
    {
        (uint256 reserves0, uint256 reserves1, ) = PAIR.getReserves();
        isWETHPairToken0 = PAIR.token0() == address(WETH);
        return
            isWETHPairToken0
                ? (reserves0, reserves1, isWETHPairToken0)
                : (reserves1, reserves0, isWETHPairToken0);
    }
}

File 2 of 11 : UniswapV2Library.sol
pragma solidity >=0.6.0;

 import "./SafeMathCopy.sol";

 library UniswapV2Library {
    using SafeMathCopy for uint;

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

pragma solidity ^0.6.0;

import "../token/IUniswapIncentive.sol";

/// @title FeiRouter interface
/// @author Fei Protocol
interface IFeiRouter {
    // ----------- state changing api -----------

    function buyFei(
        uint256 minReward,
        uint256 amountOutMin,
        address to,
        uint256 deadline
    ) external payable returns (uint256 amountOut);

    function sellFei(
        uint256 maxPenalty,
        uint256 amountIn,
        uint256 amountOutMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountOut);
}

pragma solidity ^0.6.2;
pragma experimental ABIEncoderV2;

import "./IIncentive.sol";
import "../external/Decimal.sol";

/// @title UniswapIncentive interface
/// @author Fei Protocol
interface IUniswapIncentive is IIncentive {
    // ----------- Events -----------

    event TimeWeightUpdate(uint256 _weight, bool _active);

    event GrowthRateUpdate(uint256 _growthRate);

    event ExemptAddressUpdate(address indexed _account, bool _isExempt);

    // ----------- Governor only state changing api -----------

    function setExemptAddress(address account, bool isExempt) external;

    function setTimeWeightGrowth(uint32 growthRate) external;

    function setTimeWeight(
        uint32 weight,
        uint32 growth,
        bool active
    ) external;

    // ----------- Getters -----------

    function isIncentiveParity() external view returns (bool);

    function isExemptAddress(address account) external view returns (bool);

    // solhint-disable-next-line func-name-mixedcase
    function TIME_WEIGHT_GRANULARITY() external view returns (uint32);

    function getGrowthRate() external view returns (uint32);

    function getTimeWeight() external view returns (uint32);

    function isTimeWeightActive() external view returns (bool);

    function getBuyIncentive(uint256 amount)
        external
        view
        returns (
            uint256 incentive,
            uint32 weight,
            Decimal.D256 memory initialDeviation,
            Decimal.D256 memory finalDeviation
        );

    function getSellPenalty(uint256 amount)
        external
        view
        returns (
            uint256 penalty,
            Decimal.D256 memory initialDeviation,
            Decimal.D256 memory finalDeviation
        );

    function getSellPenaltyMultiplier(
        Decimal.D256 calldata initialDeviation,
        Decimal.D256 calldata finalDeviation
    ) external view returns (Decimal.D256 memory);

    function getBuyIncentiveMultiplier(
        Decimal.D256 calldata initialDeviation,
        Decimal.D256 calldata finalDeviation
    ) external view returns (Decimal.D256 memory);
}

File 5 of 11 : IIncentive.sol
pragma solidity ^0.6.2;

/// @title incentive contract interface
/// @author Fei Protocol
/// @notice Called by FEI token contract when transferring with an incentivized address
/// @dev should be appointed as a Minter or Burner as needed
interface IIncentive {
    // ----------- Fei only state changing api -----------

    /// @notice apply incentives on transfer
    /// @param sender the sender address of the FEI
    /// @param receiver the receiver address of the FEI
    /// @param operator the operator (msg.sender) of the transfer
    /// @param amount the amount of FEI transferred
    function incentivize(
        address sender,
        address receiver,
        address operator,
        uint256 amount
    ) external;
}

/*
    Copyright 2019 dYdX Trading Inc.
    Copyright 2020 Empty Set Squad <emptysetsquad@protonmail.com>
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
*/

pragma solidity ^0.6.0;
pragma experimental ABIEncoderV2;

import "./SafeMathCopy.sol";

/**
 * @title Decimal
 * @author dYdX
 *
 * Library that defines a fixed-point number with 18 decimal places.
 */
library Decimal {
    using SafeMathCopy for uint256;

    // ============ Constants ============

    uint256 private constant BASE = 10**18;

    // ============ Structs ============


    struct D256 {
        uint256 value;
    }

    // ============ Static Functions ============

    function zero()
    internal
    pure
    returns (D256 memory)
    {
        return D256({ value: 0 });
    }

    function one()
    internal
    pure
    returns (D256 memory)
    {
        return D256({ value: BASE });
    }

    function from(
        uint256 a
    )
    internal
    pure
    returns (D256 memory)
    {
        return D256({ value: a.mul(BASE) });
    }

    function ratio(
        uint256 a,
        uint256 b
    )
    internal
    pure
    returns (D256 memory)
    {
        return D256({ value: getPartial(a, BASE, b) });
    }

    // ============ Self Functions ============

    function add(
        D256 memory self,
        uint256 b
    )
    internal
    pure
    returns (D256 memory)
    {
        return D256({ value: self.value.add(b.mul(BASE)) });
    }

    function sub(
        D256 memory self,
        uint256 b
    )
    internal
    pure
    returns (D256 memory)
    {
        return D256({ value: self.value.sub(b.mul(BASE)) });
    }

    function sub(
        D256 memory self,
        uint256 b,
        string memory reason
    )
    internal
    pure
    returns (D256 memory)
    {
        return D256({ value: self.value.sub(b.mul(BASE), reason) });
    }

    function mul(
        D256 memory self,
        uint256 b
    )
    internal
    pure
    returns (D256 memory)
    {
        return D256({ value: self.value.mul(b) });
    }

    function div(
        D256 memory self,
        uint256 b
    )
    internal
    pure
    returns (D256 memory)
    {
        return D256({ value: self.value.div(b) });
    }

    function pow(
        D256 memory self,
        uint256 b
    )
    internal
    pure
    returns (D256 memory)
    {
        if (b == 0) {
            return from(1);
        }

        D256 memory temp = D256({ value: self.value });
        for (uint256 i = 1; i < b; i++) {
            temp = mul(temp, self);
        }

        return temp;
    }

    function add(
        D256 memory self,
        D256 memory b
    )
    internal
    pure
    returns (D256 memory)
    {
        return D256({ value: self.value.add(b.value) });
    }

    function sub(
        D256 memory self,
        D256 memory b
    )
    internal
    pure
    returns (D256 memory)
    {
        return D256({ value: self.value.sub(b.value) });
    }

    function sub(
        D256 memory self,
        D256 memory b,
        string memory reason
    )
    internal
    pure
    returns (D256 memory)
    {
        return D256({ value: self.value.sub(b.value, reason) });
    }

    function mul(
        D256 memory self,
        D256 memory b
    )
    internal
    pure
    returns (D256 memory)
    {
        return D256({ value: getPartial(self.value, b.value, BASE) });
    }

    function div(
        D256 memory self,
        D256 memory b
    )
    internal
    pure
    returns (D256 memory)
    {
        return D256({ value: getPartial(self.value, BASE, b.value) });
    }

    function equals(D256 memory self, D256 memory b) internal pure returns (bool) {
        return self.value == b.value;
    }

    function greaterThan(D256 memory self, D256 memory b) internal pure returns (bool) {
        return compareTo(self, b) == 2;
    }

    function lessThan(D256 memory self, D256 memory b) internal pure returns (bool) {
        return compareTo(self, b) == 0;
    }

    function greaterThanOrEqualTo(D256 memory self, D256 memory b) internal pure returns (bool) {
        return compareTo(self, b) > 0;
    }

    function lessThanOrEqualTo(D256 memory self, D256 memory b) internal pure returns (bool) {
        return compareTo(self, b) < 2;
    }

    function isZero(D256 memory self) internal pure returns (bool) {
        return self.value == 0;
    }

    function asUint256(D256 memory self) internal pure returns (uint256) {
        return self.value.div(BASE);
    }

    // ============ Core Methods ============

    function getPartial(
        uint256 target,
        uint256 numerator,
        uint256 denominator
    )
    private
    pure
    returns (uint256)
    {
        return target.mul(numerator).div(denominator);
    }

    function compareTo(
        D256 memory a,
        D256 memory b
    )
    private
    pure
    returns (uint256)
    {
        if (a.value == b.value) {
            return 1;
        }
        return a.value > b.value ? 2 : 0;
    }
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMathCopy { // To avoid namespace collision between openzeppelin safemath and uniswap safemath
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @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) {
        // 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 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

pragma solidity >=0.5.0;

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}

pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity >=0.6.0;

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint 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))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"address","name":"weth","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"PAIR","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"minReward","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"buyFei","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxPenalty","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"sellFei","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561001057600080fd5b5060405161142b38038061142b83398101604081905261002f9161004d565b6001600160601b0319606092831b811660a052911b1660805261009e565b6000806040838503121561005f578182fd5b825161006a81610086565b602084015190925061007b81610086565b809150509250929050565b6001600160a01b038116811461009b57600080fd5b50565b60805160601c60a05160601c6113156101166000398061014952806101df5280610297528061032b528061045c528061067e5280610709528061079f52806108d35280610a465280610a965280610b68525080605352806104dd52806105c8528061064e5280610a6a5280610b3e52506113156000f3fe6080604052600436106100435760003560e01c80638f8e4fb714610081578063a4eba383146100b7578063ace3a8a7146100ca578063ad5c4648146100ec5761007c565b3661007c57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461007a57fe5b005b600080fd5b34801561008d57600080fd5b506100a161009c366004610f21565b610101565b6040516100ae9190611242565b60405180910390f35b6100a16100c5366004610ee3565b610561565b3480156100d657600080fd5b506100df610a44565b6040516100ae9190610fb1565b3480156100f857600080fd5b506100df610a68565b6000814281101561012d5760405162461bcd60e51b815260040161012490611151565b60405180910390fd5b600080600061013a610a8c565b9250925092506000816101dd577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156101a057600080fd5b505afa1580156101b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d89190610e3b565b61026e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561023657600080fd5b505afa15801561024a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026e9190610e3b565b6040516323b872dd60e01b81529091506001600160a01b038216906323b872dd906102c19033907f0000000000000000000000000000000000000000000000000000000000000000908f90600401610fc5565b602060405180830381600087803b1580156102db57600080fd5b505af11580156102ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103139190610e57565b5060006103c284836001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016103669190610fb1565b60206040518083038186803b15801561037e57600080fd5b505afa158015610392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b69190610ecb565b9063ffffffff610c2116565b90508a8110156103f157808b038c8111156103ef5760405162461bcd60e51b81526004016101249061117d565b505b6103fc818587610c6c565b96508987101561041e5760405162461bcd60e51b815260040161012490611015565b6000808461042e57600089610432565b8860005b6040805160008152602081019182905263022c0d9f60e01b90915291935091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063022c0d9f90610496908590859030906024810161124b565b600060405180830381600087803b1580156104b057600080fd5b505af11580156104c4573d6000803e3d6000fd5b5050604051632e1a7d4d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250632e1a7d4d9150610514908c90600401611242565b600060405180830381600087803b15801561052e57600080fd5b505af1158015610542573d6000803e3d6000fd5b505050506105508b8a610d1e565b505050505050505095945050505050565b600081428110156105845760405162461bcd60e51b815260040161012490611151565b6000806000610591610a8c565b91945092509050346105a4818585610c6c565b9550888610156105c65760405162461bcd60e51b815260040161012490611015565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561062157600080fd5b505af1158015610635573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506106a891507f0000000000000000000000000000000000000000000000000000000000000000908590600401610fe9565b602060405180830381600087803b1580156106c257600080fd5b505af11580156106d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fa9190610e57565b61070057fe5b60008261079d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561076057600080fd5b505afa158015610774573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107989190610e3b565b61082e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156107f657600080fd5b505afa15801561080a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082e9190610e3b565b90506000816001600160a01b03166370a082318b6040518263ffffffff1660e01b815260040161085e9190610fb1565b60206040518083038186803b15801561087657600080fd5b505afa15801561088a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ae9190610ecb565b9050600080856108c0578960006108c4565b60008a5b90925090506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663022c0d9f83838f60006040519080825280601f01601f191660200182016040528015610927576020820181803683370190505b506040518563ffffffff1660e01b8152600401610947949392919061124b565b600060405180830381600087803b15801561096157600080fd5b505af1158015610975573d6000803e3d6000fd5b505050506000846001600160a01b03166370a082318e6040518263ffffffff1660e01b81526004016109a79190610fb1565b60206040518083038186803b1580156109bf57600080fd5b505afa1580156109d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f79190610ecb565b90506000610a0f8c6103b6848863ffffffff610c2116565b90508f811015610a315760405162461bcd60e51b815260040161012490611091565b5050505050505050505050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610aed57600080fd5b505afa158015610b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b259190610e77565b506001600160701b031691506001600160701b031691507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610bbf57600080fd5b505afa158015610bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf79190610e3b565b6001600160a01b031614925082610c1057808284610c14565b8181845b9450945094505050909192565b6000610c6383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610db0565b90505b92915050565b6000808411610c8d5760405162461bcd60e51b8152600401610124906111f7565b600083118015610c9d5750600082115b610cb95760405162461bcd60e51b8152600401610124906110c8565b6000610ccd856103e563ffffffff610ddc16565b90506000610ce1828563ffffffff610ddc16565b90506000610d0783610cfb886103e863ffffffff610ddc16565b9063ffffffff610e1616565b9050808281610d1257fe5b04979650505050505050565b604080516000808252602082019092526001600160a01b038416908390604051610d489190610f95565b60006040518083038185875af1925050503d8060008114610d85576040519150601f19603f3d011682016040523d82523d6000602084013e610d8a565b606091505b5050905080610dab5760405162461bcd60e51b8152600401610124906111b4565b505050565b60008184841115610dd45760405162461bcd60e51b81526004016101249190611002565b505050900390565b600082610deb57506000610c66565b82820282848281610df857fe5b0414610c635760405162461bcd60e51b815260040161012490611110565b600082820183811015610c635760405162461bcd60e51b81526004016101249061105a565b600060208284031215610e4c578081fd5b8151610c63816112b2565b600060208284031215610e68578081fd5b81518015158114610c63578182fd5b600080600060608486031215610e8b578182fd5b8351610e96816112ca565b6020850151909350610ea7816112ca565b604085015190925063ffffffff81168114610ec0578182fd5b809150509250925092565b600060208284031215610edc578081fd5b5051919050565b60008060008060808587031215610ef8578081fd5b84359350602085013592506040850135610f11816112b2565b9396929550929360600135925050565b600080600080600060a08688031215610f38578081fd5b8535945060208601359350604086013592506060860135610f58816112b2565b949793965091946080013592915050565b60008151808452610f81816020860160208601611282565b601f01601f19169290920160200192915050565b60008251610fa7818460208701611282565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b600060208252610c636020830184610f69565b60208082526025908201527f466569526f757465723a20496e73756666696369656e74206f757470757420616040820152641b5bdd5b9d60da1b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601c908201527f466569526f757465723a204e6f7420656e6f7567682072657761726400000000604082015260600190565b60208082526028908201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4c604082015267495155494449545960c01b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526012908201527111995a549bdd5d195c8e88115e1c1a5c995960721b604082015260600190565b6020808252601b908201527f466569526f757465723a2050656e616c747920746f6f20686967680000000000604082015260600190565b60208082526023908201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960408201526213115160ea1b606082015260800190565b6020808252602b908201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4960408201526a1394155517d05353d5539560aa1b606082015260800190565b90815260200190565b600085825284602083015260018060a01b0384166040830152608060608301526112786080830184610f69565b9695505050505050565b60005b8381101561129d578181015183820152602001611285565b838111156112ac576000848401525b50505050565b6001600160a01b03811681146112c757600080fd5b50565b6001600160701b03811681146112c757600080fdfea264697066735822122077d8e84c47cee3f0d5065210a0b5f820e26db31e9aea8bb61f02c0262284423764736f6c6343000606003300000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a878000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

Deployed Bytecode

0x6080604052600436106100435760003560e01c80638f8e4fb714610081578063a4eba383146100b7578063ace3a8a7146100ca578063ad5c4648146100ec5761007c565b3661007c57336001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2161461007a57fe5b005b600080fd5b34801561008d57600080fd5b506100a161009c366004610f21565b610101565b6040516100ae9190611242565b60405180910390f35b6100a16100c5366004610ee3565b610561565b3480156100d657600080fd5b506100df610a44565b6040516100ae9190610fb1565b3480156100f857600080fd5b506100df610a68565b6000814281101561012d5760405162461bcd60e51b815260040161012490611151565b60405180910390fd5b600080600061013a610a8c565b9250925092506000816101dd577f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a8786001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156101a057600080fd5b505afa1580156101b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d89190610e3b565b61026e565b7f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a8786001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561023657600080fd5b505afa15801561024a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026e9190610e3b565b6040516323b872dd60e01b81529091506001600160a01b038216906323b872dd906102c19033907f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a878908f90600401610fc5565b602060405180830381600087803b1580156102db57600080fd5b505af11580156102ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103139190610e57565b5060006103c284836001600160a01b03166370a082317f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a8786040518263ffffffff1660e01b81526004016103669190610fb1565b60206040518083038186803b15801561037e57600080fd5b505afa158015610392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b69190610ecb565b9063ffffffff610c2116565b90508a8110156103f157808b038c8111156103ef5760405162461bcd60e51b81526004016101249061117d565b505b6103fc818587610c6c565b96508987101561041e5760405162461bcd60e51b815260040161012490611015565b6000808461042e57600089610432565b8860005b6040805160008152602081019182905263022c0d9f60e01b90915291935091506001600160a01b037f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a878169063022c0d9f90610496908590859030906024810161124b565b600060405180830381600087803b1580156104b057600080fd5b505af11580156104c4573d6000803e3d6000fd5b5050604051632e1a7d4d60e01b81526001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2169250632e1a7d4d9150610514908c90600401611242565b600060405180830381600087803b15801561052e57600080fd5b505af1158015610542573d6000803e3d6000fd5b505050506105508b8a610d1e565b505050505050505095945050505050565b600081428110156105845760405162461bcd60e51b815260040161012490611151565b6000806000610591610a8c565b91945092509050346105a4818585610c6c565b9550888610156105c65760405162461bcd60e51b815260040161012490611015565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561062157600080fd5b505af1158015610635573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216935063a9059cbb92506106a891507f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a878908590600401610fe9565b602060405180830381600087803b1580156106c257600080fd5b505af11580156106d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fa9190610e57565b61070057fe5b60008261079d577f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a8786001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561076057600080fd5b505afa158015610774573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107989190610e3b565b61082e565b7f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a8786001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156107f657600080fd5b505afa15801561080a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082e9190610e3b565b90506000816001600160a01b03166370a082318b6040518263ffffffff1660e01b815260040161085e9190610fb1565b60206040518083038186803b15801561087657600080fd5b505afa15801561088a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ae9190610ecb565b9050600080856108c0578960006108c4565b60008a5b90925090506001600160a01b037f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a8781663022c0d9f83838f60006040519080825280601f01601f191660200182016040528015610927576020820181803683370190505b506040518563ffffffff1660e01b8152600401610947949392919061124b565b600060405180830381600087803b15801561096157600080fd5b505af1158015610975573d6000803e3d6000fd5b505050506000846001600160a01b03166370a082318e6040518263ffffffff1660e01b81526004016109a79190610fb1565b60206040518083038186803b1580156109bf57600080fd5b505afa1580156109d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f79190610ecb565b90506000610a0f8c6103b6848863ffffffff610c2116565b90508f811015610a315760405162461bcd60e51b815260040161012490611091565b5050505050505050505050949350505050565b7f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a87881565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b60008060008060007f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a8786001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610aed57600080fd5b505afa158015610b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b259190610e77565b506001600160701b031691506001600160701b031691507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03167f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a8786001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610bbf57600080fd5b505afa158015610bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf79190610e3b565b6001600160a01b031614925082610c1057808284610c14565b8181845b9450945094505050909192565b6000610c6383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610db0565b90505b92915050565b6000808411610c8d5760405162461bcd60e51b8152600401610124906111f7565b600083118015610c9d5750600082115b610cb95760405162461bcd60e51b8152600401610124906110c8565b6000610ccd856103e563ffffffff610ddc16565b90506000610ce1828563ffffffff610ddc16565b90506000610d0783610cfb886103e863ffffffff610ddc16565b9063ffffffff610e1616565b9050808281610d1257fe5b04979650505050505050565b604080516000808252602082019092526001600160a01b038416908390604051610d489190610f95565b60006040518083038185875af1925050503d8060008114610d85576040519150601f19603f3d011682016040523d82523d6000602084013e610d8a565b606091505b5050905080610dab5760405162461bcd60e51b8152600401610124906111b4565b505050565b60008184841115610dd45760405162461bcd60e51b81526004016101249190611002565b505050900390565b600082610deb57506000610c66565b82820282848281610df857fe5b0414610c635760405162461bcd60e51b815260040161012490611110565b600082820183811015610c635760405162461bcd60e51b81526004016101249061105a565b600060208284031215610e4c578081fd5b8151610c63816112b2565b600060208284031215610e68578081fd5b81518015158114610c63578182fd5b600080600060608486031215610e8b578182fd5b8351610e96816112ca565b6020850151909350610ea7816112ca565b604085015190925063ffffffff81168114610ec0578182fd5b809150509250925092565b600060208284031215610edc578081fd5b5051919050565b60008060008060808587031215610ef8578081fd5b84359350602085013592506040850135610f11816112b2565b9396929550929360600135925050565b600080600080600060a08688031215610f38578081fd5b8535945060208601359350604086013592506060860135610f58816112b2565b949793965091946080013592915050565b60008151808452610f81816020860160208601611282565b601f01601f19169290920160200192915050565b60008251610fa7818460208701611282565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b600060208252610c636020830184610f69565b60208082526025908201527f466569526f757465723a20496e73756666696369656e74206f757470757420616040820152641b5bdd5b9d60da1b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601c908201527f466569526f757465723a204e6f7420656e6f7567682072657761726400000000604082015260600190565b60208082526028908201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4c604082015267495155494449545960c01b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526012908201527111995a549bdd5d195c8e88115e1c1a5c995960721b604082015260600190565b6020808252601b908201527f466569526f757465723a2050656e616c747920746f6f20686967680000000000604082015260600190565b60208082526023908201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960408201526213115160ea1b606082015260800190565b6020808252602b908201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4960408201526a1394155517d05353d5539560aa1b606082015260800190565b90815260200190565b600085825284602083015260018060a01b0384166040830152608060608301526112786080830184610f69565b9695505050505050565b60005b8381101561129d578181015183820152602001611285565b838111156112ac576000848401525b50505050565b6001600160a01b03811681146112c757600080fd5b50565b6001600160701b03811681146112c757600080fdfea264697066735822122077d8e84c47cee3f0d5065210a0b5f820e26db31e9aea8bb61f02c0262284423764736f6c63430006060033

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

00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a878000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

-----Decoded View---------------
Arg [0] : pair (address): 0x94B0A3d511b6EcDb17eBF877278Ab030acb0A878
Arg [1] : weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a878
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2


Deployed Bytecode Sourcemap

450:4827:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1078:10;-1:-1:-1;;;;;1100:4:3;1078:27;;1071:35;;;;450:4827;;12:1:-1;9;2:12;3277:1504:3;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;3277:1504:3;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1444:1512;;;;;;;;;:::i;664:36::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;664:36:3;;;:::i;:::-;;;;;;;;578:27;;5:9:-1;2:2;;;27:1;24;17:12;2:2;578:27:3;;;:::i;3277:1504::-;3474:17;3455:8;972:15;960:8;:27;;952:58;;;;-1:-1:-1;;;952:58:3;;;;;;;;;;;;;;;;;3504:19:::1;3525:21:::0;3548::::1;3585:14;:12;:14::i;:::-;3503:96;;;;;;3610:11;3624:16;:48;;3659:4;-1:-1:-1::0;;;;;3659:11:3::1;;:13;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3659:13:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3659:13:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;3659:13:3;;;;;;;;;3624:48;;;3643:4;-1:-1:-1::0;;;;;3643:11:3::1;;:13;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3643:13:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3643:13:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;3643:13:3;;;;;;;;;3683:61;::::0;-1:-1:-1;;;3683:61:3;;3610:62;;-1:-1:-1;;;;;;3683:24:3;::::1;::::0;::::1;::::0;:61:::1;::::0;3708:10:::1;::::0;3728:4:::1;::::0;3735:8;;3683:61:::1;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3683:61:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3683:61:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;3683:61:3;;;;;;;;;;3829:25;3857:55;3898:13;3864:3;-1:-1:-1::0;;;;;3857:21:3::1;;3887:4;3857:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3857:36:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3857:36:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;3857:36:3;;;;;;;;;:40:::0;:55:::1;:40;:55;:::i;:::-;3829:83;;4024:8;4004:17;:28;4000:180;;;4066:28:::0;;::::1;4116:21:::0;;::::1;;4108:61;;;;-1:-1:-1::0;;;4108:61:3::1;;;;;;;;;4000:180;;4202:122;4245:17;4276:13;4303:11;4202:29;:122::i;:::-;4190:134;;4368:12;4355:9;:25;;4334:109;;;;-1:-1:-1::0;;;4334:109:3::1;;;;;;;;;4455:18;4475::::0;4509:16:::1;:68;;4563:1;4567:9;4509:68;;;4529:9;4548:1;4509:68;4637:12;::::0;;4647:1:::1;4637:12:::0;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4588:62:3;;;4454:123;;-1:-1:-1;4454:123:3;-1:-1:-1;;;;;;4588:4:3::1;:9;::::0;::::1;::::0;:62:::1;::::0;4454:123;;;;4630:4:::1;::::0;4588:62;;;::::1;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;4588:62:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;4661:31:3::1;::::0;-1:-1:-1;;;4661:31:3;;-1:-1:-1;;;;;4667:4:3::1;4661:20;::::0;-1:-1:-1;4661:20:3::1;::::0;-1:-1:-1;4661:31:3::1;::::0;4682:9;;4661:31:::1;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;4661:31:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;4661:31:3;;;;4703:45;4734:2;4738:9;4703:30;:45::i;:::-;-1:-1:-1::0;;;;;;;3277:1504:3;;;;;;;;:::o;1444:1512::-;1621:17;1602:8;972:15;960:8;:27;;952:58;;;;-1:-1:-1;;;952:58:3;;;;;;;;;1652:19:::1;1673:21:::0;1696::::1;1721:14;:12;:14::i;:::-;1651:84:::0;;-1:-1:-1;1651:84:3;-1:-1:-1;1651:84:3;-1:-1:-1;1765:9:3::1;1796:113;1765:9:::0;1651:84;;1796:29:::1;:113::i;:::-;1784:125;;1962:12;1949:9;:25;;1928:109;;;;-1:-1:-1::0;;;1928:109:3::1;;;;;;;;;2135:4;-1:-1:-1::0;;;;;2129:19:3::1;;2156:8;2129:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2129:38:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;2184:45:3::1;::::0;-1:-1:-1;;;2184:45:3;;-1:-1:-1;;;;;2190:4:3::1;2184:20;::::0;-1:-1:-1;2184:20:3::1;::::0;-1:-1:-1;2184:45:3::1;::::0;-1:-1:-1;2213:4:3::1;::::0;2220:8;;2184:45:::1;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2184:45:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2184:45:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2184:45:3;;;;;;;;;2177:53;;;;2241:11;2255:16;:48;;2290:4;-1:-1:-1::0;;;;;2290:11:3::1;;:13;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2290:13:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2290:13:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2290:13:3;;;;;;;;;2255:48;;;2274:4;-1:-1:-1::0;;;;;2274:11:3::1;;:13;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2274:13:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2274:13:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2274:13:3;;;;;;;;;2241:62;;2382:24;2416:3;-1:-1:-1::0;;;;;2409:21:3::1;;2431:2;2409:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2409:25:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2409:25:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2409:25:3;;;;;;;;;2382:52;;2446:18;2466::::0;2500:16:::1;:68;;2546:9;2565:1;2500:68;;;2528:1;2532:9;2500:68;2445:123:::0;;-1:-1:-1;2445:123:3;-1:-1:-1;;;;;;2578:4:3::1;:9;;2445:123:::0;;2612:2;2626:1:::1;2616:12;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;21:6:-1::0;;108:14:::1;2616:12:3::0;87:42:-1::1;143:17;::::0;-1:-1;2616:12:3::1;;2578:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2578:51:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2578:51:3;;;;2722:23;2755:3;-1:-1:-1::0;;;;;2748:21:3::1;;2770:2;2748:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2748:25:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2748:25:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2748:25:3;;;;;;;;;2722:51:::0;-1:-1:-1;2783:14:3::1;2800:52;2842:9:::0;2800:37:::1;2722:51:::0;2820:16;2800:37:::1;:19;:37;:::i;:52::-;2783:69;;2880:9;2870:6;:19;;2862:60;;;;-1:-1:-1::0;;;2862:60:3::1;;;;;;;;;-1:-1:-1::0;;;;;;;;;;1444:1512:3;;;;;;;:::o;664:36::-;;;:::o;578:27::-;;;:::o;4787:488::-;4871:19;4904:21;4939;4986:17;5005;5028:4;-1:-1:-1;;;;;5028:16:3;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5028:18:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5028:18:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;5028:18:3;;;;;;;;;4985:61;-1:-1:-1;;;;;4985:61:3;;;-1:-1:-1;;;;;4985:61:3;;;5100:4;-1:-1:-1;;;;;5075:30:3;:4;-1:-1:-1;;;;;5075:11:3;;:13;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5075:13:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5075:13:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;5075:13:3;;;;;;;;;-1:-1:-1;;;;;5075:30:3;;5056:49;;5134:16;:134;;5229:9;5240;5251:16;5134:134;;;5170:9;5181;5192:16;5134:134;5115:153;;;;;;;;4787:488;;;:::o;1408:134:1:-;1466:7;1492:43;1496:1;1499;1492:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1485:50;;1408:134;;;;;:::o;237:510:2:-;330:14;375:1;364:8;:12;356:68;;;;-1:-1:-1;;;356:68:2;;;;;;;;;454:1;442:9;:13;:31;;;;;472:1;459:10;:14;442:31;434:84;;;;-1:-1:-1;;;434:84:2;;;;;;;;;528:20;551:17;:8;564:3;551:17;:12;:17;:::i;:::-;528:40;-1:-1:-1;578:14:2;595:31;528:40;615:10;595:31;:19;:31;:::i;:::-;578:48;-1:-1:-1;636:16:2;655:40;679:15;655:19;:9;669:4;655:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;636:59;;729:11;717:9;:23;;;;;;;237:510;-1:-1:-1;;;;;;;237:510:2:o;1339:192:8:-;1446:12;;;1408;1446;;;;;;;;;-1:-1:-1;;;;;1425:7:8;;;1439:5;;1425:34;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1407:52:8;;;1477:7;1469:55;;;;-1:-1:-1;;;1469:55:8;;;;;;;;;1339:192;;;:::o;1833:187:1:-;1919:7;1954:12;1946:6;;;;1938:29;;;;-1:-1:-1;;;1938:29:1;;;;;;;;;;-1:-1:-1;;;1989:5:1;;;1833:187::o;2267:459::-;2325:7;2566:6;2562:45;;-1:-1:-1;2595:1:1;2588:8;;2562:45;2629:5;;;2633:1;2629;:5;:1;2652:5;;;;;:10;2644:56;;;;-1:-1:-1;;;2644:56:1;;;;;;;;961:176;1019:7;1050:5;;;1073:6;;;;1065:46;;;;-1:-1:-1;;;1065:46:1;;;;;;;;976:263:-1;;1091:2;1079:9;1070:7;1066:23;1062:32;1059:2;;;-1:-1;;1097:12;1059:2;226:6;220:13;238:33;265:5;238:33;;1246:257;;1358:2;1346:9;1337:7;1333:23;1329:32;1326:2;;;-1:-1;;1364:12;1326:2;364:6;358:13;19006:5;16999:13;16992:21;18984:5;18981:32;18971:2;;-1:-1;;19017:12;1510:533;;;;1658:2;1646:9;1637:7;1633:23;1629:32;1626:2;;;-1:-1;;1664:12;1626:2;502:6;496:13;514:33;541:5;514:33;;;1827:2;1877:22;;496:13;1716:74;;-1:-1;514:33;496:13;514:33;;;1946:2;1995:22;;914:13;1835:74;;-1:-1;17420:10;17409:22;;19349:34;;19339:2;;-1:-1;;19387:12;19339:2;1954:73;;;;1620:423;;;;;;2050:263;;2165:2;2153:9;2144:7;2140:23;2136:32;2133:2;;;-1:-1;;2171:12;2133:2;-1:-1;774:13;;2127:186;-1:-1;2127:186;2320:617;;;;;2475:3;2463:9;2454:7;2450:23;2446:33;2443:2;;;-1:-1;;2482:12;2443:2;639:6;626:20;2534:63;;2634:2;2677:9;2673:22;626:20;2642:63;;2742:2;2785:9;2781:22;72:20;97:33;124:5;97:33;;;2437:500;;;;-1:-1;2750:63;;2850:2;2889:22;626:20;;-1:-1;;2437:500;2944:743;;;;;;3116:3;3104:9;3095:7;3091:23;3087:33;3084:2;;;-1:-1;;3123:12;3084:2;639:6;626:20;3175:63;;3275:2;3318:9;3314:22;626:20;3283:63;;3383:2;3426:9;3422:22;626:20;3391:63;;3491:2;3534:9;3530:22;72:20;97:33;124:5;97:33;;;3078:609;;;;-1:-1;3078:609;;3599:3;3639:22;626:20;;3078:609;-1:-1;;3078:609;3963:343;;4105:5;16169:12;16454:6;16449:3;16442:19;4198:52;4243:6;16491:4;16486:3;16482:14;16491:4;4224:5;4220:16;4198:52;;;18780:7;18764:14;-1:-1;;18760:28;4262:39;;;;16491:4;4262:39;;4053:253;-1:-1;;4053:253;8744:262;;4473:5;16169:12;4584:52;4629:6;4624:3;4617:4;4610:5;4606:16;4584:52;;;4648:16;;;;;8869:137;-1:-1;;8869:137;9013:213;-1:-1;;;;;17203:54;;;;3914:37;;9131:2;9116:18;;9102:124;9233:451;-1:-1;;;;;17203:54;;;3773:58;;17203:54;;;;9587:2;9572:18;;3914:37;9670:2;9655:18;;8695:37;;;;9415:2;9400:18;;9386:298;9691:324;-1:-1;;;;;17203:54;;;;3914:37;;10001:2;9986:18;;8695:37;9837:2;9822:18;;9808:207;10536:301;;10674:2;10695:17;10688:47;10749:78;10674:2;10663:9;10659:18;10813:6;10749:78;;10844:407;11035:2;11049:47;;;5595:2;11020:18;;;16442:19;5631:34;16482:14;;;5611:55;-1:-1;;;5686:12;;;5679:29;5727:12;;;11006:245;11258:407;11449:2;11463:47;;;5978:2;11434:18;;;16442:19;6014:29;16482:14;;;5994:50;6063:12;;;11420:245;11672:407;11863:2;11877:47;;;6314:2;11848:18;;;16442:19;6350:30;16482:14;;;6330:51;6400:12;;;11834:245;12086:407;12277:2;12291:47;;;6651:2;12262:18;;;16442:19;6687:34;16482:14;;;6667:55;-1:-1;;;6742:12;;;6735:32;6786:12;;;12248:245;12500:407;12691:2;12705:47;;;7037:2;12676:18;;;16442:19;7073:34;16482:14;;;7053:55;-1:-1;;;7128:12;;;7121:25;7165:12;;;12662:245;12914:407;13105:2;13119:47;;;7416:2;13090:18;;;16442:19;-1:-1;;;16482:14;;;7432:41;7492:12;;;13076:245;13328:407;13519:2;13533:47;;;7743:2;13504:18;;;16442:19;7779:29;16482:14;;;7759:50;7828:12;;;13490:245;13742:407;13933:2;13947:47;;;8079:2;13918:18;;;16442:19;8115:34;16482:14;;;8095:55;-1:-1;;;8170:12;;;8163:27;8209:12;;;13904:245;14156:407;14347:2;14361:47;;;8460:2;14332:18;;;16442:19;8496:34;16482:14;;;8476:55;-1:-1;;;8551:12;;;8544:35;8598:12;;;14318:245;14570:213;8695:37;;;14688:2;14673:18;;14659:124;14790:647;;8725:5;8702:3;8695:37;8725:5;15183:2;15172:9;15168:18;8695:37;17420:10;;17214:42;;;16915:5;17203:54;15274:2;15263:9;15259:18;3773:58;15018:3;15311:2;15300:9;15296:18;15289:48;15351:76;15018:3;15007:9;15003:19;15413:6;15351:76;;;15343:84;14989:448;-1:-1;;;;;;14989:448;18420:268;18485:1;18492:101;18506:6;18503:1;18500:13;18492:101;;;18573:11;;;18567:18;18554:11;;;18547:39;18528:2;18521:10;18492:101;;;18608:6;18605:1;18602:13;18599:2;;;18485:1;18664:6;18659:3;18655:16;18648:27;18599:2;;18469:219;;;;18801:117;-1:-1;;;;;17203:54;;18860:35;;18850:2;;18909:1;;18899:12;18850:2;18844:74;;19043:117;-1:-1;;;;;19130:5;17087:42;19105:5;19102:35;19092:2;;19151:1;;19141:12

Swarm Source

ipfs://77d8e84c47cee3f0d5065210a0b5f820e26db31e9aea8bb61f02c02622844237

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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