ETH Price: $3,341.23 (-1.98%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00
Transaction Hash
Method
Block
From
To
Swap Token215134442024-12-30 6:16:352 days ago1735539395IN
0xEEE21cf8...7FeC65074
0 ETH0.000261742.90065011
Remove Liquidity211207252024-11-05 10:03:1157 days ago1730800991IN
0xEEE21cf8...7FeC65074
0 ETH0.000804795.92711929
Add Liquidity211206772024-11-05 9:53:3557 days ago1730800415IN
0xEEE21cf8...7FeC65074
0 ETH0.002967065.88729032
Add Liquidity211206652024-11-05 9:51:1157 days ago1730800271IN
0xEEE21cf8...7FeC65074
0.0000001 ETH0.001025556.45224711
Swap Token211206292024-11-05 9:43:5957 days ago1730799839IN
0xEEE21cf8...7FeC65074
0 ETH0.000857837.68608681
Remove Liquidity211206192024-11-05 9:41:5957 days ago1730799719IN
0xEEE21cf8...7FeC65074
0 ETH0.000779915.88
Add Liquidity211204372024-11-05 9:05:2357 days ago1730797523IN
0xEEE21cf8...7FeC65074
0 ETH0.003943187.8239362
Add Liquidity211204042024-11-05 8:58:3557 days ago1730797115IN
0xEEE21cf8...7FeC65074
0.000001 ETH0.001544049.28268669
Swap Token211203762024-11-05 8:52:5957 days ago1730796779IN
0xEEE21cf8...7FeC65074
0.00001 ETH0.00105589.12689298
Swap Token209044972024-10-06 5:43:2387 days ago1728193403IN
0xEEE21cf8...7FeC65074
0.15 ETH0.000328593.47003871
Swap Token206839032024-09-05 10:51:47118 days ago1725533507IN
0xEEE21cf8...7FeC65074
0.15 ETH0.000318273.36113228
Swap Token206838812024-09-05 10:47:23118 days ago1725533243IN
0xEEE21cf8...7FeC65074
0.05 ETH0.000301663.18644214
Swap Token206838712024-09-05 10:45:23118 days ago1725533123IN
0xEEE21cf8...7FeC65074
0.05 ETH0.000300323.17197234
Swap Token206838512024-09-05 10:41:23118 days ago1725532883IN
0xEEE21cf8...7FeC65074
0.05 ETH0.000310623.28068043
Limit Order204518792024-08-04 1:24:23150 days ago1722734663IN
0xEEE21cf8...7FeC65074
0.00420369 ETH0.000126861
Remove Liquidity203595252024-07-22 3:55:59163 days ago1721620559IN
0xEEE21cf8...7FeC65074
0 ETH0.001234168.07242751
Swap Token201456342024-06-22 7:04:11193 days ago1719039851IN
0xEEE21cf8...7FeC65074
0.00003 ETH0.000324011.90336487
Swap Token200374902024-06-07 4:13:59208 days ago1717733639IN
0xEEE21cf8...7FeC65074
0.05 ETH0.000798458.43300355
Swap Token200374322024-06-07 4:02:23208 days ago1717732943IN
0xEEE21cf8...7FeC65074
0.05 ETH0.000935388.36793498
Swap Token189815602024-01-11 5:18:23356 days ago1704950303IN
0xEEE21cf8...7FeC65074
0.01 ETH0.0029134323.67530993
Swap Token189172162024-01-02 4:05:35365 days ago1704168335IN
0xEEE21cf8...7FeC65074
0 ETH0.0014579613
Swap Token189171172024-01-02 3:45:47365 days ago1704167147IN
0xEEE21cf8...7FeC65074
0 ETH0.0013288914
Swap Token184174142023-10-24 3:23:23435 days ago1698117803IN
0xEEE21cf8...7FeC65074
0 ETH0.0039252835
Remove Liquidity182983602023-10-07 11:38:35452 days ago1696678715IN
0xEEE21cf8...7FeC65074
0 ETH0.000723425.95153097
Remove Liquidity181837942023-09-21 10:56:23468 days ago1695293783IN
0xEEE21cf8...7FeC65074
0 ETH0.0018696113.12499057
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
211206652024-11-05 9:51:1157 days ago1730800271
0xEEE21cf8...7FeC65074
0.0000001 ETH
211204042024-11-05 8:58:3557 days ago1730797115
0xEEE21cf8...7FeC65074
0.00000099 ETH
211204042024-11-05 8:58:3557 days ago1730797115
0xEEE21cf8...7FeC65074
768 wei
211203762024-11-05 8:52:5957 days ago1730796779
0xEEE21cf8...7FeC65074
0.00001 ETH
209044972024-10-06 5:43:2387 days ago1728193403
0xEEE21cf8...7FeC65074
0.15 ETH
206839032024-09-05 10:51:47118 days ago1725533507
0xEEE21cf8...7FeC65074
0.15 ETH
206838812024-09-05 10:47:23118 days ago1725533243
0xEEE21cf8...7FeC65074
0.05 ETH
206838712024-09-05 10:45:23118 days ago1725533123
0xEEE21cf8...7FeC65074
0.05 ETH
206838512024-09-05 10:41:23118 days ago1725532883
0xEEE21cf8...7FeC65074
0.05 ETH
204518792024-08-04 1:24:23150 days ago1722734663
0xEEE21cf8...7FeC65074
0.00420369 ETH
201456342024-06-22 7:04:11193 days ago1719039851
0xEEE21cf8...7FeC65074
0.00003 ETH
200374902024-06-07 4:13:59208 days ago1717733639
0xEEE21cf8...7FeC65074
0.05 ETH
200374322024-06-07 4:02:23208 days ago1717732943
0xEEE21cf8...7FeC65074
0.05 ETH
189815602024-01-11 5:18:23356 days ago1704950303
0xEEE21cf8...7FeC65074
0.01 ETH
181837302023-09-21 10:43:23468 days ago1695293003
0xEEE21cf8...7FeC65074
0 ETH
181833772023-09-21 9:32:11468 days ago1695288731
0xEEE21cf8...7FeC65074
0 ETH
181833762023-09-21 9:31:59468 days ago1695288719
0xEEE21cf8...7FeC65074
0 ETH
181833762023-09-21 9:31:59468 days ago1695288719
0xEEE21cf8...7FeC65074
0 ETH
181833632023-09-21 9:29:23468 days ago1695288563
0xEEE21cf8...7FeC65074
0 ETH
181833592023-09-21 9:28:35468 days ago1695288515
0xEEE21cf8...7FeC65074
0 ETH
181833542023-09-21 9:27:23468 days ago1695288443
0xEEE21cf8...7FeC65074
0 ETH
179387182023-08-18 2:31:11502 days ago1692325871
0xEEE21cf8...7FeC65074
0.09745312 ETH
179100152023-08-14 2:09:47506 days ago1691978987
0xEEE21cf8...7FeC65074
0.03567337 ETH
178398772023-08-04 6:36:47516 days ago1691131007
0xEEE21cf8...7FeC65074
0.063 ETH
176387992023-07-07 1:55:59544 days ago1688694959
0xEEE21cf8...7FeC65074
0.089145 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OneSwapRouter

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-09-07
*/

// File: contracts/interfaces/IOneSwapRouter.sol

// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;

interface IOneSwapRouter {
    event AddLiquidity(uint stockAmount, uint moneyAmount, uint liquidity);
    event PairCreated(address indexed pair, address stock, address money, bool isOnlySwap);

    function factory() external pure returns (address);

    // liquidity
    function addLiquidity(
        address stock,
        address money,
        bool isOnlySwap,
        uint amountStockDesired,
        uint amountMoneyDesired,
        uint amountStockMin,
        uint amountMoneyMin,
        address to,
        uint deadline
    ) external payable returns (uint amountStock, uint amountMoney, uint liquidity);
    function removeLiquidity(
        address pair,
        uint liquidity,
        uint amountStockMin,
        uint amountMoneyMin,
        address to,
        uint deadline
    ) external returns (uint amountStock, uint amountMoney);

    // swap token
    function swapToken(
        address token,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    // limit order
    function limitOrder(
        bool isBuy,
        address pair,
        uint prevKey,
        uint price,
        uint32 id,
        uint stockAmount,
        uint deadline
    ) external payable;
}

// File: contracts/interfaces/IOneSwapFactory.sol

pragma solidity 0.6.12;

interface IOneSwapFactory {
    event PairCreated(address indexed pair, address stock, address money, bool isOnlySwap);

    function createPair(address stock, address money, bool isOnlySwap) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
    function setFeeBPS(uint32 bps) external;
    function setPairLogic(address implLogic) external;

    function allPairsLength() external view returns (uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function feeBPS() external view returns (uint32);
    function pairLogic() external returns (address);
    function getTokensFromPair(address pair) external view returns (address stock, address money);
    function tokensToPair(address stock, address money, bool isOnlySwap) external view returns (address pair);
}

// File: contracts/interfaces/IOneSwapPair.sol

pragma solidity 0.6.12;

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

    function name() external view returns (string memory);
    function symbol() external returns (string memory);
    function decimals() external view 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);
}

interface IOneSwapPool {
    // more liquidity was minted
    event Mint(address indexed sender, uint stockAndMoneyAmount, address indexed to);
    // liquidity was burned
    event Burn(address indexed sender, uint stockAndMoneyAmount, address indexed to);
    // amounts of reserved stock and money in this pair changed
    event Sync(uint reserveStockAndMoney);

    function internalStatus() external view returns(uint[3] memory res);
    function getReserves() external view returns (uint112 reserveStock, uint112 reserveMoney, uint32 firstSellID);
    function getBooked() external view returns (uint112 bookedStock, uint112 bookedMoney, uint32 firstBuyID);
    function stock() external returns (address);
    function money() external returns (address);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint stockAmount, uint moneyAmount);
    function skim(address to) external;
    function sync() external;
}

interface IOneSwapPair {
    event NewLimitOrder(uint data); // new limit order was sent by an account
    event NewMarketOrder(uint data); // new market order was sent by an account
    event OrderChanged(uint data); // old orders in orderbook changed
    event DealWithPool(uint data); // new order deal with the AMM pool
    event RemoveOrder(uint data); // an order was removed from the orderbook
    
    // Return three prices in rational number form, i.e., numerator/denominator.
    // They are: the first sell order's price; the first buy order's price; the current price of the AMM pool.
    function getPrices() external returns (
        uint firstSellPriceNumerator,
        uint firstSellPriceDenominator,
        uint firstBuyPriceNumerator,
        uint firstBuyPriceDenominator,
        uint poolPriceNumerator,
        uint poolPriceDenominator);

    // This function queries a list of orders in orderbook. It starts from 'id' and iterates the single-linked list, util it reaches the end, 
    // or until it has found 'maxCount' orders. If 'id' is 0, it starts from the beginning of the single-linked list.
    // It may cost a lot of gas. So you'd not to call in on chain. It is mainly for off-chain query.
    // The first uint256 returned by this function is special: the lowest 24 bits is the first order's id and the the higher bits is block height.
    // THe other uint256s are all corresponding to an order record of the single-linked list.
    function getOrderList(bool isBuy, uint32 id, uint32 maxCount) external view returns (uint[] memory);

    // remove an order from orderbook and return its booked (i.e. frozen) money to maker
    // 'id' points to the order to be removed
    // prevKey points to 3 previous orders in the single-linked list
    function removeOrder(bool isBuy, uint32 id, uint72 positionID) external;

    function removeOrders(uint[] calldata rmList) external;

    // Try to deal a new limit order or insert it into orderbook
    // its suggested order id is 'id' and suggested positions are in 'prevKey'
    // prevKey points to 3 existing orders in the single-linked list
    // the order's sender is 'sender'. the order's amount is amount*stockUnit, which is the stock amount to be sold or bought.
    // the order's price is 'price32', which is decimal floating point value.
    function addLimitOrder(bool isBuy, address sender, uint64 amount, uint32 price32, uint32 id, uint72 prevKey) external payable;

    // Try to deal a new market order. 'sender' pays 'inAmount' of 'inputToken', in exchange of the other token kept by this pair
    function addMarketOrder(address inputToken, address sender, uint112 inAmount) external payable returns (uint);

    // Given the 'amount' of stock and decimal floating point price 'price32', calculate the 'stockAmount' and 'moneyAmount' to be traded
    function calcStockAndMoney(uint64 amount, uint32 price32) external pure returns (uint stockAmount, uint moneyAmount);
}

// File: contracts/interfaces/IERC20.sol

pragma solidity 0.6.12;

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

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view 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);
}

// File: contracts/libraries/SafeMath256.sol

pragma solidity 0.6.12;

library SafeMath256 {
    /**
     * @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;
    }
}

// File: contracts/libraries/DecFloat32.sol

pragma solidity 0.6.12;

/*
This library defines a decimal floating point number. It has 8 decimal significant digits. Its maximum value is 9.9999999e+15.
And its minimum value is 1.0e-16. The following golang code explains its detail implementation.

func buildPrice(significant int, exponent int) uint32 {
	if !(10000000 <= significant && significant <= 99999999) {
		panic("Invalid significant")
	}
	if !(-16 <= exponent && exponent <= 15) {
		panic("Invalid exponent")
	}
	return uint32(((exponent+16)<<27)|significant);
}

func priceToFloat(price uint32) float64 {
	exponent := int(price>>27)
	significant := float64(price&((1<<27)-1))
	return significant * math.Pow10(exponent-23)
}

*/

// A price presented as a rational number
struct RatPrice {
    uint numerator;   // at most 54bits
    uint denominator; // at most 76bits
}

library DecFloat32 {
    uint32 public constant MANTISSA_MASK = (1<<27) - 1;
    uint32 public constant MAX_MANTISSA = 9999_9999;
    uint32 public constant MIN_MANTISSA = 1000_0000;
    uint32 public constant MIN_PRICE = MIN_MANTISSA;
    uint32 public constant MAX_PRICE = (31<<27)|MAX_MANTISSA;

    // 10 ** (i + 1)
    function powSmall(uint32 i) internal pure returns (uint) {
        uint x = 2695994666777834996822029817977685892750687677375768584125520488993233305610;
        return (x >> (32*i)) & ((1<<32)-1);
    }

    // 10 ** (i * 8)
    function powBig(uint32 i) internal pure returns (uint) {
        uint y = 3402823669209384634633746076162356521930955161600000001;
        return (y >> (64*i)) & ((1<<64)-1);
    }

    // if price32=( 0<<27)|12345678 then numerator=12345678 denominator=100000000000000000000000
    // if price32=( 1<<27)|12345678 then numerator=12345678 denominator=10000000000000000000000
    // if price32=( 2<<27)|12345678 then numerator=12345678 denominator=1000000000000000000000
    // if price32=( 3<<27)|12345678 then numerator=12345678 denominator=100000000000000000000
    // if price32=( 4<<27)|12345678 then numerator=12345678 denominator=10000000000000000000
    // if price32=( 5<<27)|12345678 then numerator=12345678 denominator=1000000000000000000
    // if price32=( 6<<27)|12345678 then numerator=12345678 denominator=100000000000000000
    // if price32=( 7<<27)|12345678 then numerator=12345678 denominator=10000000000000000
    // if price32=( 8<<27)|12345678 then numerator=12345678 denominator=1000000000000000
    // if price32=( 9<<27)|12345678 then numerator=12345678 denominator=100000000000000
    // if price32=(10<<27)|12345678 then numerator=12345678 denominator=10000000000000
    // if price32=(11<<27)|12345678 then numerator=12345678 denominator=1000000000000
    // if price32=(12<<27)|12345678 then numerator=12345678 denominator=100000000000
    // if price32=(13<<27)|12345678 then numerator=12345678 denominator=10000000000
    // if price32=(14<<27)|12345678 then numerator=12345678 denominator=1000000000
    // if price32=(15<<27)|12345678 then numerator=12345678 denominator=100000000
    // if price32=(16<<27)|12345678 then numerator=12345678 denominator=10000000
    // if price32=(17<<27)|12345678 then numerator=12345678 denominator=1000000
    // if price32=(18<<27)|12345678 then numerator=12345678 denominator=100000
    // if price32=(19<<27)|12345678 then numerator=12345678 denominator=10000
    // if price32=(20<<27)|12345678 then numerator=12345678 denominator=1000
    // if price32=(21<<27)|12345678 then numerator=12345678 denominator=100
    // if price32=(22<<27)|12345678 then numerator=12345678 denominator=10
    // if price32=(23<<27)|12345678 then numerator=12345678 denominator=1
    // if price32=(24<<27)|12345678 then numerator=123456780 denominator=1
    // if price32=(25<<27)|12345678 then numerator=1234567800 denominator=1
    // if price32=(26<<27)|12345678 then numerator=12345678000 denominator=1
    // if price32=(27<<27)|12345678 then numerator=123456780000 denominator=1
    // if price32=(28<<27)|12345678 then numerator=1234567800000 denominator=1
    // if price32=(29<<27)|12345678 then numerator=12345678000000 denominator=1
    // if price32=(30<<27)|12345678 then numerator=123456780000000 denominator=1
    // if price32=(31<<27)|12345678 then numerator=1234567800000000 denominator=1
    function expandPrice(uint32 price32) internal pure returns (RatPrice memory) {
        uint s = price32&((1<<27)-1);
        uint32 a = price32 >> 27;
        RatPrice memory price;
        if(a >= 24) {
            uint32 b = a - 24;
            price.numerator = s * powSmall(b);
            price.denominator = 1;
        } else if(a == 23) {
            price.numerator = s;
            price.denominator = 1;
        } else {
            uint32 b = 22 - a;
            price.numerator = s;
            price.denominator = powSmall(b&0x7) * powBig(b>>3);
        }
        return price;
    }

    function getExpandPrice(uint price) internal pure returns(uint numerator, uint denominator) {
        uint32 m = uint32(price) & MANTISSA_MASK;
        require(MIN_MANTISSA <= m && m <= MAX_MANTISSA, "Invalid Price");
        RatPrice memory actualPrice = expandPrice(uint32(price));
        return (actualPrice.numerator, actualPrice.denominator);
    }

}

// File: contracts/OneSwapRouter.sol

pragma solidity 0.6.12;








contract OneSwapRouter is IOneSwapRouter {
    using SafeMath256 for uint;
    address public immutable override factory;

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

    constructor(address _factory) public {
        factory = _factory;
    }

    function _addLiquidity(address pair, uint amountStockDesired, uint amountMoneyDesired,
        uint amountStockMin, uint amountMoneyMin) private view returns (uint amountStock, uint amountMoney) {

        (uint reserveStock, uint reserveMoney, ) = IOneSwapPool(pair).getReserves();
        if (reserveStock == 0 && reserveMoney == 0) {
            (amountStock, amountMoney) = (amountStockDesired, amountMoneyDesired);
        } else {
            uint amountMoneyOptimal = _quote(amountStockDesired, reserveStock, reserveMoney);
            if (amountMoneyOptimal <= amountMoneyDesired) {
                require(amountMoneyOptimal >= amountMoneyMin, "OneSwapRouter: INSUFFICIENT_MONEY_AMOUNT");
                (amountStock, amountMoney) = (amountStockDesired, amountMoneyOptimal);
            } else {
                uint amountStockOptimal = _quote(amountMoneyDesired, reserveMoney, reserveStock);
                assert(amountStockOptimal <= amountStockDesired);
                require(amountStockOptimal >= amountStockMin, "OneSwapRouter: INSUFFICIENT_STOCK_AMOUNT");
                (amountStock, amountMoney) = (amountStockOptimal, amountMoneyDesired);
            }
        }
    }

    function addLiquidity(address stock, address money, bool isOnlySwap, uint amountStockDesired,
        uint amountMoneyDesired, uint amountStockMin, uint amountMoneyMin, address to, uint deadline) external
        payable override ensure(deadline) returns (uint amountStock, uint amountMoney, uint liquidity) {

        if (stock != address(0) && money != address(0)) {
            require(msg.value == 0, 'OneSwapRouter: NOT_ENTER_ETH_VALUE');
        }
        address pair = IOneSwapFactory(factory).tokensToPair(stock, money, isOnlySwap);
        if (pair == address(0)) {
            pair = IOneSwapFactory(factory).createPair(stock, money, isOnlySwap);
        }
        (amountStock, amountMoney) = _addLiquidity(pair, amountStockDesired,
            amountMoneyDesired, amountStockMin, amountMoneyMin);
        _safeTransferFrom(stock, msg.sender, pair, amountStock);
        _safeTransferFrom(money, msg.sender, pair, amountMoney);
        liquidity = IOneSwapPool(pair).mint(to);
        emit AddLiquidity(amountStock, amountMoney, liquidity);
    }

    function _removeLiquidity(address pair, uint liquidity, uint amountStockMin,
        uint amountMoneyMin, address to) private returns (uint amountStock, uint amountMoney) {
        IERC20(pair).transferFrom(msg.sender, pair, liquidity);
        (amountStock, amountMoney) = IOneSwapPool(pair).burn(to);
        require(amountStock >= amountStockMin, "OneSwapRouter: INSUFFICIENT_STOCK_AMOUNT");
        require(amountMoney >= amountMoneyMin, "OneSwapRouter: INSUFFICIENT_MONEY_AMOUNT");
    }

    function removeLiquidity(address pair, uint liquidity, uint amountStockMin, uint amountMoneyMin,
        address to, uint deadline) external override ensure(deadline) returns (uint amountStock, uint amountMoney) {
        // ensure pair exist
        _getTokensFromPair(pair);
        (amountStock, amountMoney) = _removeLiquidity(pair, liquidity, amountStockMin, amountMoneyMin, to);
    }

    function _swap(address input, uint amountIn, address[] memory path, address _to) internal virtual returns (uint[] memory amounts) {
        amounts = new uint[](path.length + 1);
        amounts[0] = amountIn;

        for (uint i = 0; i < path.length; i++) {
            (address to, bool isLastSwap) = i < path.length - 1 ? (path[i+1], false) : (_to, true);
            amounts[i + 1] = IOneSwapPair(path[i]).addMarketOrder(input, to, uint112(amounts[i]));
            if (!isLastSwap) {
                (address stock, address money) = _getTokensFromPair(path[i]);
                input = (stock != input) ? stock : money;
            }
        }
    }

    function swapToken(address token, uint amountIn, uint amountOutMin, address[] calldata path,
        address to, uint deadline) external payable override ensure(deadline) returns (uint[] memory amounts) {

        if (token != address(0)) { require(msg.value == 0, 'OneSwapRouter: NOT_ENTER_ETH_VALUE'); }
        require(path.length >= 1, "OneSwapRouter: INVALID_PATH");
        // ensure pair exist
        _getTokensFromPair(path[0]);
        _safeTransferFrom(token, msg.sender, path[0], amountIn);
        amounts = _swap(token, amountIn, path, to);
        require(amounts[path.length] >= amountOutMin, "OneSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT");
    }

    function limitOrder(bool isBuy, address pair, uint prevKey, uint price, uint32 id,
        uint stockAmount, uint deadline) external payable override ensure(deadline) {

        (address stock, address money) = _getTokensFromPair(pair);
        {
            (uint _stockAmount, uint _moneyAmount) = IOneSwapPair(pair).calcStockAndMoney(uint64(stockAmount), uint32(price));
            if (isBuy) {
                if (money != address(0)) { require(msg.value == 0, 'OneSwapRouter: NOT_ENTER_ETH_VALUE'); }
                _safeTransferFrom(money, msg.sender, pair, _moneyAmount);
            } else {
                if (stock != address(0)) { require(msg.value == 0, 'OneSwapRouter: NOT_ENTER_ETH_VALUE'); }
                _safeTransferFrom(stock, msg.sender, pair, _stockAmount);
            }
        }
        IOneSwapPair(pair).addLimitOrder(isBuy, msg.sender, uint64(stockAmount), uint32(price), id, uint72(prevKey));
    }

    // todo. add encoded bytes interface for limitOrder.

    function _safeTransferFrom(address token, address from, address to, uint value) internal {
        if (token == address(0)) {
            _safeTransferETH(to, value);
            uint inputValue = msg.value;
            if (inputValue > value) { _safeTransferETH(msg.sender, inputValue - value); }
            return;
        }

        uint beforeAmount = IERC20(token).balanceOf(to);
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "OneSwapRouter: TRANSFER_FROM_FAILED");
        uint afterAmount = IERC20(token).balanceOf(to);
        require(afterAmount == beforeAmount + value, "OneSwapRouter: TRANSFER_FAILED");
    }

    function _safeTransferETH(address to, uint value) internal {
        // solhint-disable-next-line avoid-low-level-calls
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, "TransferHelper: ETH_TRANSFER_FAILED");
    }

    function _quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
        require(amountA > 0, "OneSwapRouter: INSUFFICIENT_AMOUNT");
        require(reserveA > 0 && reserveB > 0, "OneSwapRouter: INSUFFICIENT_LIQUIDITY");
        amountB = amountA.mul(reserveB) / reserveA;
    }

    function _getTokensFromPair(address pair) internal view returns(address stock, address money) {
        (stock, money) = IOneSwapFactory(factory).getTokensFromPair(pair);
        require(stock != address(0) || money != address(0), "OneSwapRouter: PAIR_NOT_EXIST");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"stockAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"moneyAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"address","name":"stock","type":"address"},{"indexed":false,"internalType":"address","name":"money","type":"address"},{"indexed":false,"internalType":"bool","name":"isOnlySwap","type":"bool"}],"name":"PairCreated","type":"event"},{"inputs":[{"internalType":"address","name":"stock","type":"address"},{"internalType":"address","name":"money","type":"address"},{"internalType":"bool","name":"isOnlySwap","type":"bool"},{"internalType":"uint256","name":"amountStockDesired","type":"uint256"},{"internalType":"uint256","name":"amountMoneyDesired","type":"uint256"},{"internalType":"uint256","name":"amountStockMin","type":"uint256"},{"internalType":"uint256","name":"amountMoneyMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountStock","type":"uint256"},{"internalType":"uint256","name":"amountMoney","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"isBuy","type":"bool"},{"internalType":"address","name":"pair","type":"address"},{"internalType":"uint256","name":"prevKey","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint32","name":"id","type":"uint32"},{"internalType":"uint256","name":"stockAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"limitOrder","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountStockMin","type":"uint256"},{"internalType":"uint256","name":"amountMoneyMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountStock","type":"uint256"},{"internalType":"uint256","name":"amountMoney","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapToken","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"}]

60a060405234801561001057600080fd5b506040516117783803806117788339818101604052602081101561003357600080fd5b5051606081901b6001600160601b0319166080526001600160a01b0316611702610076600039806105ee52806106725280610a845280610aab52506117026000f3fe60806040526004361061004a5760003560e01c806301f3cc5a1461004f5780635a47ddc3146100a357806396c92f5e14610121578063a70002601461018d578063c45a015514610278575b600080fd5b6100a1600480360360e081101561006557600080fd5b5080351515906001600160a01b036020820135169060408101359060608101359063ffffffff6080820135169060a08101359060c001356102a9565b005b61010360048036036101208110156100ba57600080fd5b506001600160a01b0381358116916020810135821691604082013515159160608101359160808201359160a08101359160c08201359160e0810135909116906101000135610503565b60408051938452602084019290925282820152519081900360600190f35b34801561012d57600080fd5b50610174600480360360c081101561014457600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610823565b6040805192835260208301919091528051918290030190f35b610228600480360360c08110156101a357600080fd5b6001600160a01b0382351691602081013591604082013591908101906080810160608201356401000000008111156101da57600080fd5b8201836020820111156101ec57600080fd5b8035906020019184602083028401116401000000008311171561020e57600080fd5b91935091506001600160a01b03813516906020013561089d565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561026457818101518382015260200161024c565b505050509050019250505060405180910390f35b34801561028457600080fd5b5061028d610a82565b604080516001600160a01b039092168252519081900360200190f35b80428110156102f8576040805162461bcd60e51b815260206004820152601660248201527513db9954ddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b60008061030489610aa6565b6040805163c2dab57b60e01b815267ffffffffffffffff8916600482015263ffffffff8b166024820152815193955091935060009283926001600160a01b038e169263c2dab57b92604480840193829003018186803b15801561036657600080fd5b505afa15801561037a573d6000803e3d6000fd5b505050506040513d604081101561039057600080fd5b50805160209091015190925090508b15610401576001600160a01b038316156103f05734156103f05760405162461bcd60e51b81526004018080602001828103825260228152602001806115cb6022913960400191505060405180910390fd5b6103fc83338d84610bc2565b610459565b6001600160a01b0384161561044d57341561044d5760405162461bcd60e51b81526004018080602001828103825260228152602001806115cb6022913960400191505060405180910390fd5b61045984338d85610bc2565b50506040805163c018f41360e01b81528b1515600482015233602482015267ffffffffffffffff8716604482015263ffffffff808a1660648301528816608482015268ffffffffffffffffff8a1660a482015290516001600160a01b038b169163c018f4139160c480830192600092919082900301818387803b1580156104df57600080fd5b505af11580156104f3573d6000803e3d6000fd5b5050505050505050505050505050565b60008060008342811015610557576040805162461bcd60e51b815260206004820152601660248201527513db9954ddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b6001600160a01b038d161580159061057757506001600160a01b038c1615155b156105b95734156105b95760405162461bcd60e51b81526004018080602001828103825260228152602001806115cb6022913960400191505060405180910390fd5b60408051633643c09f60e11b81526001600160a01b038f811660048301528e811660248301528d1515604483015291516000927f00000000000000000000000000000000000000000000000000000000000000001691636c87813e916064808301926020929190829003018186803b15801561063457600080fd5b505afa158015610648573d6000803e3d6000fd5b505050506040513d602081101561065e57600080fd5b505190506001600160a01b038116610729577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166382dfdce48f8f8f6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b0316815260200182151581526020019350505050602060405180830381600087803b1580156106fa57600080fd5b505af115801561070e573d6000803e3d6000fd5b505050506040513d602081101561072457600080fd5b505190505b610736818c8c8c8c610ea4565b90955093506107478e338388610bc2565b6107538d338387610bc2565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b1580156107a257600080fd5b505af11580156107b6573d6000803e3d6000fd5b505050506040513d60208110156107cc57600080fd5b5051604080518781526020810187905280820183905290519194507ff75993dbe1645872cbbea6395e1feebee76b435baf0e4d62d7eac269c6f57b24919081900360600190a1505099509950999650505050505050565b6000808242811015610875576040805162461bcd60e51b815260206004820152601660248201527513db9954ddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b61087e89610aa6565b505061088d898989898961100e565b909a909950975050505050505050565b606081428110156108ee576040805162461bcd60e51b815260206004820152601660248201527513db9954ddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b6001600160a01b0389161561093a57341561093a5760405162461bcd60e51b81526004018080602001828103825260228152602001806115cb6022913960400191505060405180910390fd5b6001851015610990576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6553776170526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6109b5868660008181106109a057fe5b905060200201356001600160a01b0316610aa6565b50506109df8933888860008181106109c957fe5b905060200201356001600160a01b03168b610bc2565b610a1f89898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a925061119d915050565b915086828787905081518110610a3157fe5b60200260200101511015610a765760405162461bcd60e51b81526004018080602001828103825260298152602001806116816029913960400191505060405180910390fd5b50979650505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c0225aa1846040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050604080518083038186803b158015610b1557600080fd5b505afa158015610b29573d6000803e3d6000fd5b505050506040513d6040811015610b3f57600080fd5b50805160209091015190925090506001600160a01b038216151580610b6c57506001600160a01b03811615155b610bbd576040805162461bcd60e51b815260206004820152601d60248201527f4f6e6553776170526f757465723a20504149525f4e4f545f4558495354000000604482015290519081900360640190fd5b915091565b6001600160a01b038416610bf557610bda8282611383565b3481811115610bef57610bef33838303611383565b50610e9e565b6000846001600160a01b03166370a08231846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610c4457600080fd5b505afa158015610c58573d6000803e3d6000fd5b505050506040513d6020811015610c6e57600080fd5b5051604080516001600160a01b0387811660248301528681166044830152606480830187905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251949550600094606094928b16939282918083835b60208310610cf65780518252601f199092019160209182019101610cd7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610d58576040519150601f19603f3d011682016040523d82523d6000602084013e610d5d565b606091505b5091509150818015610d8b575080511580610d8b5750808060200190516020811015610d8857600080fd5b50515b610dc65760405162461bcd60e51b815260040180806020018281038252602381526020018061165e6023913960400191505060405180910390fd5b6000876001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610e1557600080fd5b505afa158015610e29573d6000803e3d6000fd5b505050506040513d6020811015610e3f57600080fd5b505190508385018114610e99576040805162461bcd60e51b815260206004820152601e60248201527f4f6e6553776170526f757465723a205452414e534645525f4641494c45440000604482015290519081900360640190fd5b505050505b50505050565b600080600080886001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610ee357600080fd5b505afa158015610ef7573d6000803e3d6000fd5b505050506040513d6060811015610f0d57600080fd5b5080516020909101516001600160701b03918216935016905081158015610f32575080155b15610f4257879350869250611002565b6000610f4f89848461147b565b9050878111610fa25785811015610f975760405162461bcd60e51b81526004018080602001828103825260288152602001806116366028913960400191505060405180910390fd5b889450925082611000565b6000610faf89848661147b565b905089811115610fbb57fe5b87811015610ffa5760405162461bcd60e51b81526004018080602001828103825260288152602001806115ed6028913960400191505060405180910390fd5b94508793505b505b50509550959350505050565b604080516323b872dd60e01b81523360048201526001600160a01b03871660248201819052604482018790529151600092839290916323b872dd9160648082019260209290919082900301818787803b15801561106a57600080fd5b505af115801561107e573d6000803e3d6000fd5b505050506040513d602081101561109457600080fd5b50506040805163226bf2d160e21b81526001600160a01b0385811660048301528251908a16926389afcb4492602480820193918290030181600087803b1580156110dd57600080fd5b505af11580156110f1573d6000803e3d6000fd5b505050506040513d604081101561110757600080fd5b5080516020909101519092509050848210156111545760405162461bcd60e51b81526004018080602001828103825260288152602001806115ed6028913960400191505060405180910390fd5b838110156111935760405162461bcd60e51b81526004018080602001828103825260288152602001806116366028913960400191505060405180910390fd5b9550959350505050565b6060825160010167ffffffffffffffff811180156111ba57600080fd5b506040519080825280602002602001820160405280156111e4578160200160208202803683370190505b50905083816000815181106111f557fe5b60200260200101818152505060005b835181101561137a57600080600186510383106112235784600161123d565b85836001018151811061123257fe5b602002602001015160005b9150915085838151811061124d57fe5b60200260200101516001600160a01b031663a6e81533898487878151811061127157fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b03168152602001826001600160701b031681526020019350505050602060405180830381600087803b1580156112d857600080fd5b505af11580156112ec573d6000803e3d6000fd5b505050506040513d602081101561130257600080fd5b5051845185906001860190811061131557fe5b602002602001018181525050806113705760008061134588868151811061133857fe5b6020026020010151610aa6565b91509150896001600160a01b0316826001600160a01b03161415611369578061136b565b815b995050505b5050600101611204565b50949350505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106113cf5780518252601f1990920191602091820191016113b0565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611431576040519150601f19603f3d011682016040523d82523d6000602084013e611436565b606091505b50509050806114765760405162461bcd60e51b81526004018080602001828103825260238152602001806116aa6023913960400191505060405180910390fd5b505050565b60008084116114bb5760405162461bcd60e51b81526004018080602001828103825260228152602001806115846022913960400191505060405180910390fd5b6000831180156114cb5750600082115b6115065760405162461bcd60e51b81526004018080602001828103825260258152602001806115a66025913960400191505060405180910390fd5b826115118584611521565b8161151857fe5b04949350505050565b6000826115305750600061157d565b8282028284828161153d57fe5b041461157a5760405162461bcd60e51b81526004018080602001828103825260218152602001806116156021913960400191505060405180910390fd5b90505b9291505056fe4f6e6553776170526f757465723a20494e53554646494349454e545f414d4f554e544f6e6553776170526f757465723a20494e53554646494349454e545f4c49515549444954594f6e6553776170526f757465723a204e4f545f454e5445525f4554485f56414c55454f6e6553776170526f757465723a20494e53554646494349454e545f53544f434b5f414d4f554e54536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f6e6553776170526f757465723a20494e53554646494349454e545f4d4f4e45595f414d4f554e544f6e6553776170526f757465723a205452414e534645525f46524f4d5f4641494c45444f6e6553776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a26469706673582212201e165bbd889b7adeeeaa828225074fef5bd1a49f3531ebc4409cfbe02332a8b264736f6c634300060c00330000000000000000000000005ed3c9089ed0355bc77cf439dc2ed28c4054c8c4

Deployed Bytecode

0x60806040526004361061004a5760003560e01c806301f3cc5a1461004f5780635a47ddc3146100a357806396c92f5e14610121578063a70002601461018d578063c45a015514610278575b600080fd5b6100a1600480360360e081101561006557600080fd5b5080351515906001600160a01b036020820135169060408101359060608101359063ffffffff6080820135169060a08101359060c001356102a9565b005b61010360048036036101208110156100ba57600080fd5b506001600160a01b0381358116916020810135821691604082013515159160608101359160808201359160a08101359160c08201359160e0810135909116906101000135610503565b60408051938452602084019290925282820152519081900360600190f35b34801561012d57600080fd5b50610174600480360360c081101561014457600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610823565b6040805192835260208301919091528051918290030190f35b610228600480360360c08110156101a357600080fd5b6001600160a01b0382351691602081013591604082013591908101906080810160608201356401000000008111156101da57600080fd5b8201836020820111156101ec57600080fd5b8035906020019184602083028401116401000000008311171561020e57600080fd5b91935091506001600160a01b03813516906020013561089d565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561026457818101518382015260200161024c565b505050509050019250505060405180910390f35b34801561028457600080fd5b5061028d610a82565b604080516001600160a01b039092168252519081900360200190f35b80428110156102f8576040805162461bcd60e51b815260206004820152601660248201527513db9954ddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b60008061030489610aa6565b6040805163c2dab57b60e01b815267ffffffffffffffff8916600482015263ffffffff8b166024820152815193955091935060009283926001600160a01b038e169263c2dab57b92604480840193829003018186803b15801561036657600080fd5b505afa15801561037a573d6000803e3d6000fd5b505050506040513d604081101561039057600080fd5b50805160209091015190925090508b15610401576001600160a01b038316156103f05734156103f05760405162461bcd60e51b81526004018080602001828103825260228152602001806115cb6022913960400191505060405180910390fd5b6103fc83338d84610bc2565b610459565b6001600160a01b0384161561044d57341561044d5760405162461bcd60e51b81526004018080602001828103825260228152602001806115cb6022913960400191505060405180910390fd5b61045984338d85610bc2565b50506040805163c018f41360e01b81528b1515600482015233602482015267ffffffffffffffff8716604482015263ffffffff808a1660648301528816608482015268ffffffffffffffffff8a1660a482015290516001600160a01b038b169163c018f4139160c480830192600092919082900301818387803b1580156104df57600080fd5b505af11580156104f3573d6000803e3d6000fd5b5050505050505050505050505050565b60008060008342811015610557576040805162461bcd60e51b815260206004820152601660248201527513db9954ddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b6001600160a01b038d161580159061057757506001600160a01b038c1615155b156105b95734156105b95760405162461bcd60e51b81526004018080602001828103825260228152602001806115cb6022913960400191505060405180910390fd5b60408051633643c09f60e11b81526001600160a01b038f811660048301528e811660248301528d1515604483015291516000927f0000000000000000000000005ed3c9089ed0355bc77cf439dc2ed28c4054c8c41691636c87813e916064808301926020929190829003018186803b15801561063457600080fd5b505afa158015610648573d6000803e3d6000fd5b505050506040513d602081101561065e57600080fd5b505190506001600160a01b038116610729577f0000000000000000000000005ed3c9089ed0355bc77cf439dc2ed28c4054c8c46001600160a01b03166382dfdce48f8f8f6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b0316815260200182151581526020019350505050602060405180830381600087803b1580156106fa57600080fd5b505af115801561070e573d6000803e3d6000fd5b505050506040513d602081101561072457600080fd5b505190505b610736818c8c8c8c610ea4565b90955093506107478e338388610bc2565b6107538d338387610bc2565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b1580156107a257600080fd5b505af11580156107b6573d6000803e3d6000fd5b505050506040513d60208110156107cc57600080fd5b5051604080518781526020810187905280820183905290519194507ff75993dbe1645872cbbea6395e1feebee76b435baf0e4d62d7eac269c6f57b24919081900360600190a1505099509950999650505050505050565b6000808242811015610875576040805162461bcd60e51b815260206004820152601660248201527513db9954ddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b61087e89610aa6565b505061088d898989898961100e565b909a909950975050505050505050565b606081428110156108ee576040805162461bcd60e51b815260206004820152601660248201527513db9954ddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b6001600160a01b0389161561093a57341561093a5760405162461bcd60e51b81526004018080602001828103825260228152602001806115cb6022913960400191505060405180910390fd5b6001851015610990576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6553776170526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6109b5868660008181106109a057fe5b905060200201356001600160a01b0316610aa6565b50506109df8933888860008181106109c957fe5b905060200201356001600160a01b03168b610bc2565b610a1f89898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a925061119d915050565b915086828787905081518110610a3157fe5b60200260200101511015610a765760405162461bcd60e51b81526004018080602001828103825260298152602001806116816029913960400191505060405180910390fd5b50979650505050505050565b7f0000000000000000000000005ed3c9089ed0355bc77cf439dc2ed28c4054c8c481565b6000807f0000000000000000000000005ed3c9089ed0355bc77cf439dc2ed28c4054c8c46001600160a01b031663c0225aa1846040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050604080518083038186803b158015610b1557600080fd5b505afa158015610b29573d6000803e3d6000fd5b505050506040513d6040811015610b3f57600080fd5b50805160209091015190925090506001600160a01b038216151580610b6c57506001600160a01b03811615155b610bbd576040805162461bcd60e51b815260206004820152601d60248201527f4f6e6553776170526f757465723a20504149525f4e4f545f4558495354000000604482015290519081900360640190fd5b915091565b6001600160a01b038416610bf557610bda8282611383565b3481811115610bef57610bef33838303611383565b50610e9e565b6000846001600160a01b03166370a08231846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610c4457600080fd5b505afa158015610c58573d6000803e3d6000fd5b505050506040513d6020811015610c6e57600080fd5b5051604080516001600160a01b0387811660248301528681166044830152606480830187905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251949550600094606094928b16939282918083835b60208310610cf65780518252601f199092019160209182019101610cd7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610d58576040519150601f19603f3d011682016040523d82523d6000602084013e610d5d565b606091505b5091509150818015610d8b575080511580610d8b5750808060200190516020811015610d8857600080fd5b50515b610dc65760405162461bcd60e51b815260040180806020018281038252602381526020018061165e6023913960400191505060405180910390fd5b6000876001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610e1557600080fd5b505afa158015610e29573d6000803e3d6000fd5b505050506040513d6020811015610e3f57600080fd5b505190508385018114610e99576040805162461bcd60e51b815260206004820152601e60248201527f4f6e6553776170526f757465723a205452414e534645525f4641494c45440000604482015290519081900360640190fd5b505050505b50505050565b600080600080886001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610ee357600080fd5b505afa158015610ef7573d6000803e3d6000fd5b505050506040513d6060811015610f0d57600080fd5b5080516020909101516001600160701b03918216935016905081158015610f32575080155b15610f4257879350869250611002565b6000610f4f89848461147b565b9050878111610fa25785811015610f975760405162461bcd60e51b81526004018080602001828103825260288152602001806116366028913960400191505060405180910390fd5b889450925082611000565b6000610faf89848661147b565b905089811115610fbb57fe5b87811015610ffa5760405162461bcd60e51b81526004018080602001828103825260288152602001806115ed6028913960400191505060405180910390fd5b94508793505b505b50509550959350505050565b604080516323b872dd60e01b81523360048201526001600160a01b03871660248201819052604482018790529151600092839290916323b872dd9160648082019260209290919082900301818787803b15801561106a57600080fd5b505af115801561107e573d6000803e3d6000fd5b505050506040513d602081101561109457600080fd5b50506040805163226bf2d160e21b81526001600160a01b0385811660048301528251908a16926389afcb4492602480820193918290030181600087803b1580156110dd57600080fd5b505af11580156110f1573d6000803e3d6000fd5b505050506040513d604081101561110757600080fd5b5080516020909101519092509050848210156111545760405162461bcd60e51b81526004018080602001828103825260288152602001806115ed6028913960400191505060405180910390fd5b838110156111935760405162461bcd60e51b81526004018080602001828103825260288152602001806116366028913960400191505060405180910390fd5b9550959350505050565b6060825160010167ffffffffffffffff811180156111ba57600080fd5b506040519080825280602002602001820160405280156111e4578160200160208202803683370190505b50905083816000815181106111f557fe5b60200260200101818152505060005b835181101561137a57600080600186510383106112235784600161123d565b85836001018151811061123257fe5b602002602001015160005b9150915085838151811061124d57fe5b60200260200101516001600160a01b031663a6e81533898487878151811061127157fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b03168152602001826001600160701b031681526020019350505050602060405180830381600087803b1580156112d857600080fd5b505af11580156112ec573d6000803e3d6000fd5b505050506040513d602081101561130257600080fd5b5051845185906001860190811061131557fe5b602002602001018181525050806113705760008061134588868151811061133857fe5b6020026020010151610aa6565b91509150896001600160a01b0316826001600160a01b03161415611369578061136b565b815b995050505b5050600101611204565b50949350505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106113cf5780518252601f1990920191602091820191016113b0565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611431576040519150601f19603f3d011682016040523d82523d6000602084013e611436565b606091505b50509050806114765760405162461bcd60e51b81526004018080602001828103825260238152602001806116aa6023913960400191505060405180910390fd5b505050565b60008084116114bb5760405162461bcd60e51b81526004018080602001828103825260228152602001806115846022913960400191505060405180910390fd5b6000831180156114cb5750600082115b6115065760405162461bcd60e51b81526004018080602001828103825260258152602001806115a66025913960400191505060405180910390fd5b826115118584611521565b8161151857fe5b04949350505050565b6000826115305750600061157d565b8282028284828161153d57fe5b041461157a5760405162461bcd60e51b81526004018080602001828103825260218152602001806116156021913960400191505060405180910390fd5b90505b9291505056fe4f6e6553776170526f757465723a20494e53554646494349454e545f414d4f554e544f6e6553776170526f757465723a20494e53554646494349454e545f4c49515549444954594f6e6553776170526f757465723a204e4f545f454e5445525f4554485f56414c55454f6e6553776170526f757465723a20494e53554646494349454e545f53544f434b5f414d4f554e54536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f6e6553776170526f757465723a20494e53554646494349454e545f4d4f4e45595f414d4f554e544f6e6553776170526f757465723a205452414e534645525f46524f4d5f4641494c45444f6e6553776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a26469706673582212201e165bbd889b7adeeeaa828225074fef5bd1a49f3531ebc4409cfbe02332a8b264736f6c634300060c0033

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

0000000000000000000000005ed3c9089ed0355bc77cf439dc2ed28c4054c8c4

-----Decoded View---------------
Arg [0] : _factory (address): 0x5eD3C9089Ed0355bc77CF439Dc2eD28c4054C8c4

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000005ed3c9089ed0355bc77cf439dc2ed28c4054c8c4


Deployed Bytecode Sourcemap

18553:7762:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23518:946;;;;;;;;;;;;;;;;-1:-1:-1;23518:946:0;;;;;-1:-1:-1;;;;;23518:946:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20173:1075;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20173:1075:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;21762:395;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21762:395:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22840:670;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22840:670:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22840:670:0;-1:-1:-1;;;;;;22840:670:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18634:41;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;18634:41:0;;;;;;;;;;;;;;23518:946;23676:8;18802:15;18790:8;:27;;18782:62;;;;;-1:-1:-1;;;18782:62:0;;;;;;;;;;;;-1:-1:-1;;;18782:62:0;;;;;;;;;;;;;;;23700:13:::1;23715::::0;23732:24:::1;23751:4;23732:18;:24::i;:::-;23823:72;::::0;;-1:-1:-1;;;23823:72:0;;::::1;::::0;::::1;;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;23699:57;;-1:-1:-1;23699:57:0;;-1:-1:-1;23783:17:0::1;::::0;;;-1:-1:-1;;;;;23823:36:0;::::1;::::0;::::1;::::0;:72;;;;;;;;;;:36;:72;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23823:72:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;23823:72:0;-1:-1:-1;23910:417:0;::::1;;;-1:-1:-1::0;;;;;23944:19:0;::::1;::::0;23940:91:::1;;23975:9;:14:::0;23967:61:::1;;;;-1:-1:-1::0;;;23967:61:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24049:56;24067:5;24074:10;24086:4;24092:12;24049:17;:56::i;:::-;23910:417;;;-1:-1:-1::0;;;;;24150:19:0;::::1;::::0;24146:91:::1;;24181:9;:14:::0;24173:61:::1;;;;-1:-1:-1::0;;;24173:61:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24255:56;24273:5;24280:10;24292:4;24298:12;24255:17;:56::i;:::-;-1:-1:-1::0;;24348:108:0::1;::::0;;-1:-1:-1;;;24348:108:0;;;::::1;;;::::0;::::1;::::0;24388:10:::1;24348:108:::0;;;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;;;;;24348:32:0;::::1;::::0;::::1;::::0;:108;;;;;-1:-1:-1;;24348:108:0;;;;;;;-1:-1:-1;24348:32:0;:108;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18855:1;;23518:946:::0;;;;;;;;:::o;20173:1075::-;20431:16;20449;20467:14;20412:8;18802:15;18790:8;:27;;18782:62;;;;;-1:-1:-1;;;18782:62:0;;;;;;;;;;;;-1:-1:-1;;;18782:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20500:19:0;::::1;::::0;;::::1;::::0;:42:::1;;-1:-1:-1::0;;;;;;20523:19:0;::::1;::::0;::::1;20500:42;20496:136;;;20567:9;:14:::0;20559:61:::1;;;;-1:-1:-1::0;;;20559:61:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20657:63;::::0;;-1:-1:-1;;;20657:63:0;;-1:-1:-1;;;;;20657:63:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;::::1;;::::0;;;;;;20642:12:::1;::::0;20673:7:::1;20657:37;::::0;::::1;::::0;:63;;;;;::::1;::::0;;;;;;;;:37;:63;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20657:63:0;;-1:-1:-1;;;;;;20735:18:0;::::1;20731:119;;20793:7;-1:-1:-1::0;;;;;20777:35:0::1;;20813:5;20820;20827:10;20777:61;;;;;;;;;;;;;-1:-1:-1::0;;;;;20777:61:0::1;;;;;;-1:-1:-1::0;;;;;20777:61:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20777:61:0;;-1:-1:-1;20731:119:0::1;20889:104;20903:4;20909:18;20942;20962:14;20978;20889:13;:104::i;:::-;20860:133:::0;;-1:-1:-1;20860:133:0;-1:-1:-1;21004:55:0::1;21022:5:::0;21029:10:::1;21041:4:::0;20860:133;21004:17:::1;:55::i;:::-;21070;21088:5;21095:10;21107:4;21113:11;21070:17;:55::i;:::-;21161:4;-1:-1:-1::0;;;;;21148:23:0::1;;21172:2;21148:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;21148:27:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;21148:27:0;21191:49:::1;::::0;;;;;21148:27:::1;21191:49:::0;::::1;::::0;;;;;;;;;;;21148:27;;-1:-1:-1;21191:49:0::1;::::0;;;;;;;;::::1;18855:1;20173:1075:::0;;;;;;;;;;;;;;:::o;21762:395::-;21939:16;21957;21920:8;18802:15;18790:8;:27;;18782:62;;;;;-1:-1:-1;;;18782:62:0;;;;;;;;;;;;-1:-1:-1;;;18782:62:0;;;;;;;;;;;;;;;22016:24:::1;22035:4;22016:18;:24::i;:::-;;;22080:69;22097:4;22103:9;22114:14;22130;22146:2;22080:16;:69::i;:::-;22051:98:::0;;;;-1:-1:-1;21762:395:0;-1:-1:-1;;;;;;;;21762:395:0:o;22840:670::-;23021:21;23002:8;18802:15;18790:8;:27;;18782:62;;;;;-1:-1:-1;;;18782:62:0;;;;;;;;;;;;-1:-1:-1;;;18782:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23061:19:0;::::1;::::0;23057:91:::1;;23092:9;:14:::0;23084:61:::1;;;;-1:-1:-1::0;;;23084:61:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23181:1;23166:16:::0;::::1;;23158:56;;;::::0;;-1:-1:-1;;;23158:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23255:27;23274:4;;23279:1;23274:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23274:7:0::1;23255:18;:27::i;:::-;;;23293:55;23311:5;23318:10;23330:4;;23335:1;23330:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23330:7:0::1;23339:8;23293:17;:55::i;:::-;23369:32;23375:5;23382:8;23392:4;;23369:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;23398:2:0;;-1:-1:-1;23369:5:0::1;::::0;-1:-1:-1;;23369:32:0:i:1;:::-;23359:42;;23444:12;23420:7;23428:4;;:11;;23420:20;;;;;;;;;;;;;;:36;;23412:90;;;;-1:-1:-1::0;;;23412:90:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22840:670:::0;;;;;;;;;;:::o;18634:41::-;;;:::o;26039:273::-;26103:13;26118;26177:7;-1:-1:-1;;;;;26161:42:0;;26204:4;26161:48;;;;;;;;;;;;;-1:-1:-1;;;;;26161:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26161:48:0;;;;;;;;;-1:-1:-1;26161:48:0;-1:-1:-1;;;;;;26228:19:0;;;;;:42;;-1:-1:-1;;;;;;26251:19:0;;;;26228:42;26220:84;;;;;-1:-1:-1;;;26220:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26039:273;;;:::o;24532:911::-;-1:-1:-1;;;;;24636:19:0;;24632:233;;24672:27;24689:2;24693:5;24672:16;:27::i;:::-;24732:9;24760:18;;;24756:77;;;24782:48;24799:10;24824:5;24811:10;:18;24782:16;:48::i;:::-;24847:7;;;24632:233;24877:17;24904:5;-1:-1:-1;;;;;24897:23:0;;24921:2;24897:27;;;;;;;;;;;;;-1:-1:-1;;;;;24897:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24897:27:0;25121:51;;;-1:-1:-1;;;;;25121:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24897:27;25121:51;;;;-1:-1:-1;;;;;25121:51:0;-1:-1:-1;;;25121:51:0;;;25110:63;;;;24897:27;;-1:-1:-1;25075:12:0;;25089:17;;25110:10;;;;25121:51;25110:63;;;;25121:51;25110:63;;;;;;;;;;-1:-1:-1;;25110:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25074:99;;;;25192:7;:57;;;;-1:-1:-1;25204:11:0;;:16;;:44;;;25235:4;25224:24;;;;;;;;;;;;;;;-1:-1:-1;25224:24:0;25204:44;25184:105;;;;-1:-1:-1;;;25184:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25300:16;25326:5;-1:-1:-1;;;;;25319:23:0;;25343:2;25319:27;;;;;;;;;;;;;-1:-1:-1;;;;;25319:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25319:27:0;;-1:-1:-1;25380:20:0;;;25365:35;;25357:78;;;;;-1:-1:-1;;;25357:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24532:911;;;;;;;;;:::o;18954:1211::-;19114:16;19132;19164:17;19183;19219:4;-1:-1:-1;;;;;19206:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19206:32:0;;;;;;;-1:-1:-1;;;;;19163:75:0;;;;-1:-1:-1;19163:75:0;;-1:-1:-1;19253:17:0;;:38;;;;-1:-1:-1;19274:17:0;;19253:38;19249:909;;;19338:18;;-1:-1:-1;19358:18:0;;-1:-1:-1;19249:909:0;;;19410:23;19436:54;19443:18;19463:12;19477;19436:6;:54::i;:::-;19410:80;;19531:18;19509;:40;19505:642;;19600:14;19578:18;:36;;19570:89;;;;-1:-1:-1;;;19570:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19708:18;;-1:-1:-1;19728:18:0;-1:-1:-1;19728:18:0;19505:642;;;19788:23;19814:54;19821:18;19841:12;19855;19814:6;:54::i;:::-;19788:80;;19916:18;19894;:40;;19887:48;;;;19984:14;19962:18;:36;;19954:89;;;;-1:-1:-1;;;19954:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20092:18;-1:-1:-1;20112:18:0;;-1:-1:-1;19505:642:0;19249:909;;18954:1211;;;;;;;;;;:::o;21256:498::-;21439:54;;;-1:-1:-1;;;21439:54:0;;21465:10;21439:54;;;;-1:-1:-1;;;;;21439:25:0;;:54;;;;;;;;;;;;;;21392:16;;;;21439:25;;;;:54;;;;;;;;;;;;;;;21392:16;21439:25;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21533:27:0;;;-1:-1:-1;;;21533:27:0;;-1:-1:-1;;;;;21533:27:0;;;;;;;;;:23;;;;;;:27;;;;;;;;;;;-1:-1:-1;21533:23:0;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21533:27:0;;;;;;;;;-1:-1:-1;21533:27:0;-1:-1:-1;21579:29:0;;;;21571:82;;;;-1:-1:-1;;;21571:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21687:14;21672:11;:29;;21664:82;;;;-1:-1:-1;;;21664:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21256:498;;;;;;;;:::o;22165:667::-;22272:21;22327:4;:11;22341:1;22327:15;22316:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22316:27:0;;22306:37;;22367:8;22354:7;22362:1;22354:10;;;;;;;;;;;;;:21;;;;;22393:6;22388:437;22409:4;:11;22405:1;:15;22388:437;;;22443:10;22455:15;22492:1;22478:4;:11;:15;22474:1;:19;:54;;22518:3;22523:4;22474:54;;;22497:4;22502:1;22504;22502:3;22497:9;;;;;;;;;;;;;;22508:5;22474:54;22442:86;;;;22573:4;22578:1;22573:7;;;;;;;;;;;;;;-1:-1:-1;;;;;22560:36:0;;22597:5;22604:2;22616:7;22624:1;22616:10;;;;;;;;;;;;;;22560:68;;;;;;;;;;;;;-1:-1:-1;;;;;22560:68:0;;;;;;-1:-1:-1;;;;;22560:68:0;;;;;;-1:-1:-1;;;;;22560:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22560:68:0;22543:14;;:7;;22555:1;22551:5;;;22543:14;;;;;;;;;;;:85;;;;;22648:10;22643:171;;22680:13;22695;22712:27;22731:4;22736:1;22731:7;;;;;;;;;;;;;;22712:18;:27::i;:::-;22679:60;;;;22776:5;-1:-1:-1;;;;;22767:14:0;:5;-1:-1:-1;;;;;22767:14:0;;;22766:32;;22793:5;22766:32;;;22785:5;22766:32;22758:40;;22643:171;;;-1:-1:-1;;22422:3:0;;22388:437;;;;22165:667;;;;;;:::o;25451:256::-;25620:12;;;25582;25620;;;;;;;;;-1:-1:-1;;;;;25599:7:0;;;25613:5;;25599:34;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25599:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25581:52;;;25652:7;25644:55;;;;-1:-1:-1;;;25644:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25451:256;;;:::o;25715:316::-;25798:12;25841:1;25831:7;:11;25823:58;;;;-1:-1:-1;;;25823:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25911:1;25900:8;:12;:28;;;;;25927:1;25916:8;:12;25900:28;25892:78;;;;-1:-1:-1;;;25892:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26015:8;25991:21;:7;26003:8;25991:11;:21::i;:::-;:32;;;;;;;25715:316;-1:-1:-1;;;;25715:316:0:o;9992:471::-;10050:7;10295:6;10291:47;;-1:-1:-1;10325:1:0;10318:8;;10291:47;10362:5;;;10366:1;10362;:5;:1;10386:5;;;;;:10;10378:56;;;;-1:-1:-1;;;10378:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10454:1;-1:-1:-1;9992:471:0;;;;;:::o

Swarm Source

ipfs://1e165bbd889b7adeeeaa828225074fef5bd1a49f3531ebc4409cfbe02332a8b2

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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