Contract 0x8C3736e2FE63cc2cD89Ee228D9dBcAb6CE5B767B 8

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xcdc536593ab47acb93a3ce1c7d63f76f0f82b38379050771de96cd20af4f3225_accept Admin174129362022-07-16 18:56:27144 days 3 hrs ago0x5ec869c1cb378bb77bc55bb56129399f6828c8c5 IN  Impermax: Factory0 AVAX0.0034145 100
0x082c62314a0537ed5aba4701429bf905615da91188a78e81cbbd043509ae8c1e_accept Reserves...174129322022-07-16 18:56:19144 days 3 hrs ago0x5ec869c1cb378bb77bc55bb56129399f6828c8c5 IN  Impermax: Factory0 AVAX0.003419 100
0xc2e3e2e9b4b97a995dac0e1326a12c2e5910413ba2136c75ebab421ddee3f98b_set Pending Adm...174129182022-07-16 18:55:50144 days 3 hrs ago0x04825ca4d96064bd08605013d19cb7e108ff03d4 IN  Impermax: Factory0 AVAX0.004732 100
0x35d70c21d9bbeb7b0659ad8473a4ff4010703f6970e52cfa35aa46601ac606de_set Reserves Pe...174129062022-07-16 18:55:27144 days 3 hrs ago0x052df909ebde5ec8b38cc90734633a906cd3c204 IN  Impermax: Factory0 AVAX0.0047321 100
0x1c79f471a005a08709aafbeaa4ef814f8c471763a9fa010e274eb7ae649afed5_set Reserves Ma...174128992022-07-16 18:55:13144 days 3 hrs ago0x052df909ebde5ec8b38cc90734633a906cd3c204 IN  Impermax: Factory0 AVAX0.0030219 100
0x23e197b6538e58aa1617b4f1f2e0d94248f0148b4e361dd227ac4def0235e481Initialize Lendi...110886952022-02-18 17:32:16292 days 5 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 AVAX0.001558714947 42.542507912
0xec58d5acc7d6f568da29fce1e019230728dddd348ac448e94286e42411463ad9Create Collatera...110886952022-02-18 17:32:16292 days 5 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 AVAX0.001365954844 42.542507912
0xbbf998c1b8b298e05403b8190d71fed37113cd3999e9e2dbad053ff6942de53dCreate Borrowabl...110886952022-02-18 17:32:16292 days 5 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 AVAX0.001366592981 42.542507912
0x2991c4f1aaf5b10569f0a85b54030afe796beb77c6bd7cae910247de37cf2491Create Borrowabl...110886942022-02-18 17:32:14292 days 5 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 AVAX0.001366635524 42.542507912
0x41e55164b7528613b847e8e94a3874814a3b4f32a28ba27d10a9729a7bbfdb7fInitialize Lendi...110880812022-02-18 17:11:14292 days 5 hrs ago0x45425ee1c7246c95550cafd742dc4c47097a9705 IN  Impermax: Factory0 AVAX0.021986560142 41.96821473
0x8ed8ed72a45e636143d63d9cf63731ecb3f2d2fe9d9e78a6ebbab90300e70330Create Collatera...110880472022-02-18 17:10:07292 days 5 hrs ago0x45425ee1c7246c95550cafd742dc4c47097a9705 IN  Impermax: Factory0 AVAX0.136411974302 41.96821473
0x6e7858b5bca6945ffd8ede6967c494270a816ca0b5fc6661eee30c67b838241bCreate Borrowabl...110880432022-02-18 17:09:56292 days 5 hrs ago0x45425ee1c7246c95550cafd742dc4c47097a9705 IN  Impermax: Factory0 AVAX0.159071956418 41.96821473
0xe8697bf154c8b26b4fd9e5cfc816ef7ccb1b43bb482dd19bf01ff8e6f79aaca7Create Borrowabl...110880182022-02-18 17:09:07292 days 5 hrs ago0x45425ee1c7246c95550cafd742dc4c47097a9705 IN  Impermax: Factory0 AVAX0.161179348352 41.96821473
0x63be2666123293df284f25c59436a73cf50b22c2f01dbe58d4b3e24c8a19dbcdInitialize Lendi...110841922022-02-18 14:57:12292 days 7 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 AVAX0.055501230778 105.864033118
0xc71704f31a051e5f54f226b699bf465df34bf1d20502d8837a216d8d1dcd3f91Create Collatera...110833682022-02-18 14:29:11292 days 8 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 AVAX0.083375664118 25.651177566
0xd7d81671c52e09b36ac7e584c39523d30339299b3f91844b30e4e811333dbb66Create Borrowabl...110833672022-02-18 14:29:08292 days 8 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 AVAX0.097225555723 25.651177566
0x7b664e0499d1e96685c210c2de771cfb6d736dc060eb20e78cce6c424c803504Create Borrowabl...110833592022-02-18 14:28:53292 days 8 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 AVAX0.09933388636 25.864764409
0x79f176cb5e44b3519fcd043791afcb57735965733cb2beb300c82fc74de2a05fInitialize Lendi...110830742022-02-18 14:19:22292 days 8 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 AVAX0.019062704259 36.360540599
0xfd67a26fb39806508265c61aee7a96e111e6f0f7052e88d99e8c524aecb930d5Create Collatera...110829292022-02-18 14:14:20292 days 8 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 AVAX0.082963961709 25.524514088
0xd2557278bcbd6eb5618a01b29f232c46ecfccded6642e496ffa731eb8b25952fCreate Borrowabl...110829242022-02-18 14:14:09292 days 8 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 AVAX0.098266361051 25.92577494
0x96e037a431783308bdd9835716c3d1407e9917b3ebd8f11de73ce355df98dd34Create Borrowabl...110829182022-02-18 14:13:58292 days 8 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 AVAX0.09802494371 25.523939193
0xef609f4195a1dfb87cd506874e17176cd0042a58306350ef88bcf343b34ea511Initialize Lendi...110802962022-02-18 12:45:41292 days 10 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 AVAX0.0180872805 34.5
0x922ec5f2000dc2ee004190d2354e4621bd9ffe037f16fafc130e11c8db9489f1Create Collatera...110802442022-02-18 12:43:54292 days 10 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 AVAX0.0812591 25
0x2a44e4fbb1cfec4fb263f4513635792c9adbebefd0b23e23a9d79f47bbec1955Create Borrowabl...110802432022-02-18 12:43:53292 days 10 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 AVAX0.0947574 25
0x5bcaac96c8077447eec876da19f366c6ae1c381c14caaf63e6252d1bbaa700d8Create Borrowabl...110802272022-02-18 12:43:21292 days 10 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 AVAX0.09601275 25
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Factory

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2021-11-15
*/

// File: contracts\interfaces\IFactory.sol

pragma solidity >=0.5.0;

interface IFactory {
	event LendingPoolInitialized(address indexed uniswapV2Pair, address indexed token0, address indexed token1,
		address collateral, address borrowable0, address borrowable1, uint lendingPoolId);
	event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);
	event NewAdmin(address oldAdmin, address newAdmin);
	event NewReservesPendingAdmin(address oldReservesPendingAdmin, address newReservesPendingAdmin);
	event NewReservesAdmin(address oldReservesAdmin, address newReservesAdmin);
	event NewReservesManager(address oldReservesManager, address newReservesManager);
	
	function admin() external view returns (address);
	function pendingAdmin() external view returns (address);
	function reservesAdmin() external view returns (address);
	function reservesPendingAdmin() external view returns (address);
	function reservesManager() external view returns (address);

	function getLendingPool(address uniswapV2Pair) external view returns (
		bool initialized, 
		uint24 lendingPoolId, 
		address collateral, 
		address borrowable0, 
		address borrowable1
	);
	function allLendingPools(uint) external view returns (address uniswapV2Pair);
	function allLendingPoolsLength() external view returns (uint);
	
	function bDeployer() external view returns (address);
	function cDeployer() external view returns (address);
	function simpleUniswapOracle() external view returns (address);

	function createCollateral(address uniswapV2Pair) external returns (address collateral);
	function createBorrowable0(address uniswapV2Pair) external returns (address borrowable0);
	function createBorrowable1(address uniswapV2Pair) external returns (address borrowable1);
	function initializeLendingPool(address uniswapV2Pair) external;

	function _setPendingAdmin(address newPendingAdmin) external;
	function _acceptAdmin() external;
	function _setReservesPendingAdmin(address newPendingAdmin) external;
	function _acceptReservesAdmin() external;
	function _setReservesManager(address newReservesManager) external;
}

// File: contracts\interfaces\IBDeployer.sol

pragma solidity >=0.5.0;

interface IBDeployer {
	function deployBorrowable(address uniswapV2Pair, uint8 index) external returns (address borrowable);
}

// File: contracts\interfaces\IBorrowable.sol

pragma solidity >=0.5.0;

interface IBorrowable {

	/*** Impermax ERC20 ***/
	
	event Transfer(address indexed from, address indexed to, uint value);
	event Approval(address indexed owner, address indexed spender, 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;
	
	/*** Pool Token ***/
	
	event Mint(address indexed sender, address indexed minter, uint mintAmount, uint mintTokens);
	event Redeem(address indexed sender, address indexed redeemer, uint redeemAmount, uint redeemTokens);
	event Sync(uint totalBalance);
	
	function underlying() external view returns (address);
	function factory() external view returns (address);
	function totalBalance() external view returns (uint);
	function MINIMUM_LIQUIDITY() external pure returns (uint);

	function exchangeRate() external returns (uint);
	function mint(address minter) external returns (uint mintTokens);
	function redeem(address redeemer) external returns (uint redeemAmount);
	function skim(address to) external;
	function sync() external;
	
	function _setFactory() external;
	
	/*** Borrowable ***/

	event BorrowApproval(address indexed owner, address indexed spender, uint value);
	event Borrow(address indexed sender, address indexed borrower, address indexed receiver, uint borrowAmount, uint repayAmount, uint accountBorrowsPrior, uint accountBorrows, uint totalBorrows);
	event Liquidate(address indexed sender, address indexed borrower, address indexed liquidator, uint seizeTokens, uint repayAmount, uint accountBorrowsPrior, uint accountBorrows, uint totalBorrows);
	
	function BORROW_FEE() external pure returns (uint);
	function collateral() external view returns (address);
	function reserveFactor() external view returns (uint);
	function exchangeRateLast() external view returns (uint);
	function borrowIndex() external view returns (uint);
	function totalBorrows() external view returns (uint);
	function borrowAllowance(address owner, address spender) external view returns (uint);
	function borrowBalance(address borrower) external view returns (uint);	
	function borrowTracker() external view returns (address);
	
	function BORROW_PERMIT_TYPEHASH() external pure returns (bytes32);
	function borrowApprove(address spender, uint256 value) external returns (bool);
	function borrowPermit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
	function borrow(address borrower, address receiver, uint borrowAmount, bytes calldata data) external;
	function liquidate(address borrower, address liquidator) external returns (uint seizeTokens);
	function trackBorrow(address borrower) external;
	
	/*** Borrowable Interest Rate Model ***/

	event AccrueInterest(uint interestAccumulated, uint borrowIndex, uint totalBorrows);
	event CalculateKink(uint kinkRate);
	event CalculateBorrowRate(uint borrowRate);
	
	function KINK_BORROW_RATE_MAX() external pure returns (uint);
	function KINK_BORROW_RATE_MIN() external pure returns (uint);
	function KINK_MULTIPLIER() external pure returns (uint);
	function borrowRate() external view returns (uint);
	function kinkBorrowRate() external view returns (uint);
	function kinkUtilizationRate() external view returns (uint);
	function adjustSpeed() external view returns (uint);
	function rateUpdateTimestamp() external view returns (uint32);
	function accrualTimestamp() external view returns (uint32);
	
	function accrueInterest() external;
	
	/*** Borrowable Setter ***/

	event NewReserveFactor(uint newReserveFactor);
	event NewKinkUtilizationRate(uint newKinkUtilizationRate);
	event NewAdjustSpeed(uint newAdjustSpeed);
	event NewBorrowTracker(address newBorrowTracker);

	function RESERVE_FACTOR_MAX() external pure returns (uint);
	function KINK_UR_MIN() external pure returns (uint);
	function KINK_UR_MAX() external pure returns (uint);
	function ADJUST_SPEED_MIN() external pure returns (uint);
	function ADJUST_SPEED_MAX() external pure returns (uint);
	
	function _initialize (
		string calldata _name, 
		string calldata _symbol,
		address _underlying, 
		address _collateral
	) external;
	function _setReserveFactor(uint newReserveFactor) external;
	function _setKinkUtilizationRate(uint newKinkUtilizationRate) external;
	function _setAdjustSpeed(uint newAdjustSpeed) external;
	function _setBorrowTracker(address newBorrowTracker) external;
}

// File: contracts\interfaces\ICDeployer.sol

pragma solidity >=0.5.0;

interface ICDeployer {
	function deployCollateral(address uniswapV2Pair) external returns (address collateral);
}

// File: contracts\interfaces\ICollateral.sol

pragma solidity >=0.5.0;

interface ICollateral {

	/*** Impermax ERC20 ***/
	
	event Transfer(address indexed from, address indexed to, uint value);
	event Approval(address indexed owner, address indexed spender, 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;
	
	/*** Pool Token ***/
	
	event Mint(address indexed sender, address indexed minter, uint mintAmount, uint mintTokens);
	event Redeem(address indexed sender, address indexed redeemer, uint redeemAmount, uint redeemTokens);
	event Sync(uint totalBalance);
	
	function underlying() external view returns (address);
	function factory() external view returns (address);
	function totalBalance() external view returns (uint);
	function MINIMUM_LIQUIDITY() external pure returns (uint);

	function exchangeRate() external returns (uint);
	function mint(address minter) external returns (uint mintTokens);
	function redeem(address redeemer) external returns (uint redeemAmount);
	function skim(address to) external;
	function sync() external;
	
	function _setFactory() external;
	
	/*** Collateral ***/
	
	function borrowable0() external view returns (address);
	function borrowable1() external view returns (address);
	function simpleUniswapOracle() external view returns (address);
	function safetyMarginSqrt() external view returns (uint);
	function liquidationIncentive() external view returns (uint);
	
	function getPrices() external returns (uint price0, uint price1);
	function tokensUnlocked(address from, uint value) external returns (bool);
	function accountLiquidityAmounts(address account, uint amount0, uint amount1) external returns (uint liquidity, uint shortfall);
	function accountLiquidity(address account) external returns (uint liquidity, uint shortfall);
	function canBorrow(address account, address borrowable, uint accountBorrows) external returns (bool);
	function seize(address liquidator, address borrower, uint repayAmount) external returns (uint seizeTokens);
	function flashRedeem(address redeemer, uint redeemAmount, bytes calldata data) external;
	
	/*** Collateral Setter ***/
	
	event NewSafetyMargin(uint newSafetyMarginSqrt);
	event NewLiquidationIncentive(uint newLiquidationIncentive);

	function SAFETY_MARGIN_SQRT_MIN() external pure returns (uint);
	function SAFETY_MARGIN_SQRT_MAX() external pure returns (uint);
	function LIQUIDATION_INCENTIVE_MIN() external pure returns (uint);
	function LIQUIDATION_INCENTIVE_MAX() external pure returns (uint);
	
	function _initialize (
		string calldata _name, 
		string calldata _symbol,
		address _underlying, 
		address _borrowable0, 
		address _borrowable1
	) external;
	function _setSafetyMarginSqrt(uint newSafetyMarginSqrt) external;
	function _setLiquidationIncentive(uint newLiquidationIncentive) external;
}

// File: contracts\interfaces\IERC20.sol

pragma solidity >=0.5.0;

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\interfaces\IUniswapV2Pair.sol

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

// File: contracts\interfaces\ISimpleUniswapOracle.sol

pragma solidity >=0.5.0;

interface ISimpleUniswapOracle {
	event PriceUpdate(address indexed pair, uint256 priceCumulative, uint32 blockTimestamp, bool lastIsA);
	function MIN_T() external pure returns (uint32);
	function getBlockTimestamp() external view returns (uint32);
	function getPair(address uniswapV2Pair) external view returns (
		uint256 priceCumulativeA,
		uint256 priceCumulativeB,
		uint32 updateA,
		uint32 updateB,
		bool lastIsA,
		bool initialized
	);
	function initialize(address uniswapV2Pair) external;
	function getResult(address uniswapV2Pair) external returns (uint224 price, uint32 T);
}

// File: contracts\Factory.sol

pragma solidity =0.5.16;









contract Factory is IFactory {
	address public admin;
	address public pendingAdmin;
	address public reservesAdmin;
	address public reservesPendingAdmin;
	address public reservesManager;
		
	struct LendingPool {
		bool initialized;
		uint24 lendingPoolId;
		address collateral;
		address borrowable0;
		address borrowable1;
	}
	mapping(address => LendingPool) public getLendingPool; // get by UniswapV2Pair
	address[] public allLendingPools; // address of the UniswapV2Pair
	function allLendingPoolsLength() external view returns (uint) {
		return allLendingPools.length;
	}
	
	IBDeployer public bDeployer;
	ICDeployer public cDeployer;
	ISimpleUniswapOracle public simpleUniswapOracle;
	
	event LendingPoolInitialized(address indexed uniswapV2Pair, address indexed token0, address indexed token1,
		address collateral, address borrowable0, address borrowable1, uint lendingPoolId);
	event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);
	event NewAdmin(address oldAdmin, address newAdmin);
	event NewReservesPendingAdmin(address oldReservesPendingAdmin, address newReservesPendingAdmin);
	event NewReservesAdmin(address oldReservesAdmin, address newReservesAdmin);
	event NewReservesManager(address oldReservesManager, address newReservesManager);
	
	constructor(address _admin, address _reservesAdmin, IBDeployer _bDeployer, ICDeployer _cDeployer, ISimpleUniswapOracle _simpleUniswapOracle) public {
		admin = _admin;
		reservesAdmin = _reservesAdmin;
		bDeployer = _bDeployer;
		cDeployer = _cDeployer;
		simpleUniswapOracle = _simpleUniswapOracle;
		emit NewAdmin(address(0), _admin);
		emit NewReservesAdmin(address(0), _reservesAdmin);
	}
	
	function _getTokens(address uniswapV2Pair) private view returns (address token0, address token1) {
		token0 = IUniswapV2Pair(uniswapV2Pair).token0();
		token1 = IUniswapV2Pair(uniswapV2Pair).token1();
	}
	
	function _createLendingPool(address uniswapV2Pair) private {
		if (getLendingPool[uniswapV2Pair].lendingPoolId != 0) return;
		allLendingPools.push(uniswapV2Pair);		
		getLendingPool[uniswapV2Pair] = LendingPool(false, uint24(allLendingPools.length), address(0), address(0), address(0));
	}
	
	function createCollateral(address uniswapV2Pair) external returns (address collateral) {
		_getTokens(uniswapV2Pair);
		require(getLendingPool[uniswapV2Pair].collateral == address(0), "Impermax: ALREADY_EXISTS");		
		collateral = cDeployer.deployCollateral(uniswapV2Pair);
		ICollateral(collateral)._setFactory();
		_createLendingPool(uniswapV2Pair);
		getLendingPool[uniswapV2Pair].collateral = collateral;
	}
	
	function createBorrowable0(address uniswapV2Pair) external returns (address borrowable0) {
		_getTokens(uniswapV2Pair);
		require(getLendingPool[uniswapV2Pair].borrowable0 == address(0), "Impermax: ALREADY_EXISTS");		
		borrowable0 = bDeployer.deployBorrowable(uniswapV2Pair, 0);
		IBorrowable(borrowable0)._setFactory();
		_createLendingPool(uniswapV2Pair);
		getLendingPool[uniswapV2Pair].borrowable0 = borrowable0;
	}
	
	function createBorrowable1(address uniswapV2Pair) external returns (address borrowable1) {
		_getTokens(uniswapV2Pair);
		require(getLendingPool[uniswapV2Pair].borrowable1 == address(0), "Impermax: ALREADY_EXISTS");		
		borrowable1 = bDeployer.deployBorrowable(uniswapV2Pair, 1);
		IBorrowable(borrowable1)._setFactory();
		_createLendingPool(uniswapV2Pair);
		getLendingPool[uniswapV2Pair].borrowable1 = borrowable1;
	}
	
	function initializeLendingPool(address uniswapV2Pair) external {
		(address token0, address token1) = _getTokens(uniswapV2Pair);
		LendingPool memory lPool = getLendingPool[uniswapV2Pair];
		require(!lPool.initialized, "Impermax: ALREADY_INITIALIZED");
		
		require(lPool.collateral != address(0), "Impermax: COLLATERALIZABLE_NOT_CREATED");
		require(lPool.borrowable0 != address(0), "Impermax: BORROWABLE0_NOT_CREATED");
		require(lPool.borrowable1 != address(0), "Impermax: BORROWABLE1_NOT_CREATED");
		
		(,,,,,bool oracleInitialized) = simpleUniswapOracle.getPair(uniswapV2Pair);
		if (!oracleInitialized) simpleUniswapOracle.initialize(uniswapV2Pair);
		
		ICollateral(lPool.collateral)._initialize("Impermax Collateral", "imxC", uniswapV2Pair, lPool.borrowable0, lPool.borrowable1);
		IBorrowable(lPool.borrowable0)._initialize("Impermax Borrowable", "imxB", token0, lPool.collateral);
		IBorrowable(lPool.borrowable1)._initialize("Impermax Borrowable", "imxB", token1, lPool.collateral);
		
		getLendingPool[uniswapV2Pair].initialized = true;
		emit LendingPoolInitialized(uniswapV2Pair, token0, token1, lPool.collateral, lPool.borrowable0, lPool.borrowable1, lPool.lendingPoolId);
	}
	
	function _setPendingAdmin(address newPendingAdmin) external {
		require(msg.sender == admin, "Impermax: UNAUTHORIZED");
		address oldPendingAdmin = pendingAdmin;
		pendingAdmin = newPendingAdmin;
		emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin);
	}

	function _acceptAdmin() external {
		require(msg.sender == pendingAdmin, "Impermax: UNAUTHORIZED");
		address oldAdmin = admin;
		address oldPendingAdmin = pendingAdmin;
		admin = pendingAdmin;
		pendingAdmin = address(0);
		emit NewAdmin(oldAdmin, admin);
		emit NewPendingAdmin(oldPendingAdmin, address(0));
	}
	
	function _setReservesPendingAdmin(address newReservesPendingAdmin) external {
		require(msg.sender == reservesAdmin, "Impermax: UNAUTHORIZED");
		address oldReservesPendingAdmin = reservesPendingAdmin;
		reservesPendingAdmin = newReservesPendingAdmin;
		emit NewReservesPendingAdmin(oldReservesPendingAdmin, newReservesPendingAdmin);
	}

	function _acceptReservesAdmin() external {
		require(msg.sender == reservesPendingAdmin, "Impermax: UNAUTHORIZED");
		address oldReservesAdmin = reservesAdmin;
		address oldReservesPendingAdmin = reservesPendingAdmin;
		reservesAdmin = reservesPendingAdmin;
		reservesPendingAdmin = address(0);
		emit NewReservesAdmin(oldReservesAdmin, reservesAdmin);
		emit NewReservesPendingAdmin(oldReservesPendingAdmin, address(0));
	}

	function _setReservesManager(address newReservesManager) external {
		require(msg.sender == reservesAdmin, "Impermax: UNAUTHORIZED");
		address oldReservesManager = reservesManager;
		reservesManager = newReservesManager;
		emit NewReservesManager(oldReservesManager, newReservesManager);
	}
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_reservesAdmin","type":"address"},{"internalType":"contract IBDeployer","name":"_bDeployer","type":"address"},{"internalType":"contract ICDeployer","name":"_cDeployer","type":"address"},{"internalType":"contract ISimpleUniswapOracle","name":"_simpleUniswapOracle","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"uniswapV2Pair","type":"address"},{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"address","name":"collateral","type":"address"},{"indexed":false,"internalType":"address","name":"borrowable0","type":"address"},{"indexed":false,"internalType":"address","name":"borrowable1","type":"address"},{"indexed":false,"internalType":"uint256","name":"lendingPoolId","type":"uint256"}],"name":"LendingPoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"NewPendingAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldReservesAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newReservesAdmin","type":"address"}],"name":"NewReservesAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldReservesManager","type":"address"},{"indexed":false,"internalType":"address","name":"newReservesManager","type":"address"}],"name":"NewReservesManager","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldReservesPendingAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newReservesPendingAdmin","type":"address"}],"name":"NewReservesPendingAdmin","type":"event"},{"constant":false,"inputs":[],"name":"_acceptAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"_acceptReservesAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"_setPendingAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newReservesManager","type":"address"}],"name":"_setReservesManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newReservesPendingAdmin","type":"address"}],"name":"_setReservesPendingAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allLendingPools","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"allLendingPoolsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bDeployer","outputs":[{"internalType":"contract IBDeployer","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cDeployer","outputs":[{"internalType":"contract ICDeployer","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"uniswapV2Pair","type":"address"}],"name":"createBorrowable0","outputs":[{"internalType":"address","name":"borrowable0","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"uniswapV2Pair","type":"address"}],"name":"createBorrowable1","outputs":[{"internalType":"address","name":"borrowable1","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"uniswapV2Pair","type":"address"}],"name":"createCollateral","outputs":[{"internalType":"address","name":"collateral","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"getLendingPool","outputs":[{"internalType":"bool","name":"initialized","type":"bool"},{"internalType":"uint24","name":"lendingPoolId","type":"uint24"},{"internalType":"address","name":"collateral","type":"address"},{"internalType":"address","name":"borrowable0","type":"address"},{"internalType":"address","name":"borrowable1","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"uniswapV2Pair","type":"address"}],"name":"initializeLendingPool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reservesAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reservesManager","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reservesPendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"simpleUniswapOracle","outputs":[{"internalType":"contract ISimpleUniswapOracle","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50604051611e30380380611e30833981810160405260a081101561003357600080fd5b5080516020808301516040808501516060860151608090960151600080546001600160a01b03199081166001600160a01b03808a169182178455600280548416828a16179055600780548416828816179055600880548416828d161790556009805490931690851617909155845191825295810195909552825195969395919490927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92918290030190a160408051600081526001600160a01b038616602082015281517fa328ba21363a99cbf330243928bb26a15acf20bf43166ef838e67ff5d84d4ae7929181900390910190a15050505050611cfa806101366000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80639e1348e3116100cd578063d407112711610081578063e9c714f211610066578063e9c714f2146103c2578063eb5ab75f146103ca578063f851a440146103fd5761016c565b8063d40711271461039d578063db5a2690146103ba5761016c565b8063b658ca75116100b2578063b658ca7514610304578063b71d1a0c14610337578063cbed6d711461036a5761016c565b80639e1348e3146102c9578063b1ccc03e146102d15761016c565b8063714c0206116101245780637c6674b5116101095780637c6674b5146102af578063822d73b2146102b7578063998c077d146102bf5761016c565b8063714c02061461028d5780637a4660d5146102a75761016c565b80632678224711610155578063267822471461024a578063345ef9411461025257806349a788381461025a5761016c565b80630572bf5f1461017157806323c6145d146101ee575b600080fd5b6101a46004803603602081101561018757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610405565b60408051951515865262ffffff909416602086015273ffffffffffffffffffffffffffffffffffffffff928316858501529082166060850152166080830152519081900360a00190f35b6102216004803603602081101561020457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610459565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61022161068f565b6102216106ab565b6102216004803603602081101561027057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106c7565b6102956108fb565b60408051918252519081900360200190f35b610221610901565b61022161091d565b610221610939565b6102c7610955565b005b610221610ac0565b6102c7600480360360208110156102e757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610adc565b6102c76004803603602081101561031a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610bea565b6102c76004803603602081101561034d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661134c565b6102216004803603602081101561038057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661145a565b610221600480360360208110156103b357600080fd5b503561168c565b6102216116c0565b6102c76116dc565b6102c7600480360360208110156103e057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611847565b610221611955565b60056020526000908152604090208054600182015460029092015460ff82169262ffffff6101008404169273ffffffffffffffffffffffffffffffffffffffff640100000000909104811692918116911685565b600061046482611971565b505073ffffffffffffffffffffffffffffffffffffffff8281166000908152600560205260409020546401000000009004161561050257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496d7065726d61783a20414c52454144595f4558495354530000000000000000604482015290519081900360640190fd5b600854604080517f7924fedd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291519190921691637924fedd9160248083019260209291908290030181600087803b15801561057757600080fd5b505af115801561058b573d6000803e3d6000fd5b505050506040513d60208110156105a157600080fd5b5051604080517f4a5d316c000000000000000000000000000000000000000000000000000000008152905191925073ffffffffffffffffffffffffffffffffffffffff831691634a5d316c9160048082019260009290919082900301818387803b15801561060e57600080fd5b505af1158015610622573d6000803e3d6000fd5b5050505061062f82611a84565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526005602052604090208054928216640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9093169290921790915590565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60006106d282611971565b505073ffffffffffffffffffffffffffffffffffffffff828116600090815260056020526040902060010154161561076b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496d7065726d61783a20414c52454144595f4558495354530000000000000000604482015290519081900360640190fd5b600754604080517f54bcd7ad00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260006024830181905292519316926354bcd7ad92604480840193602093929083900390910190829087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050506040513d602081101561081357600080fd5b5051604080517f4a5d316c000000000000000000000000000000000000000000000000000000008152905191925073ffffffffffffffffffffffffffffffffffffffff831691634a5d316c9160048082019260009290919082900301818387803b15801561088057600080fd5b505af1158015610894573d6000803e3d6000fd5b505050506108a182611a84565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020526040902060010180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169282169290921790915590565b60065490565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b60095473ffffffffffffffffffffffffffffffffffffffff1681565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1633146109db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496d7065726d61783a20554e415554484f52495a454400000000000000000000604482015290519081900360640190fd5b600280546003805473ffffffffffffffffffffffffffffffffffffffff8082167fffffffffffffffffffffffff000000000000000000000000000000000000000080861682179687905590921690925560408051938316808552949092166020840152815190927fa328ba21363a99cbf330243928bb26a15acf20bf43166ef838e67ff5d84d4ae792908290030190a16040805173ffffffffffffffffffffffffffffffffffffffff831681526000602082015281517f01d5e27ed5584d16c62ba1a14cfde0783f979d4797a3fc41342aff17d8ef5b41929181900390910190a15050565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60025473ffffffffffffffffffffffffffffffffffffffff163314610b6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496d7065726d61783a20554e415554484f52495a454400000000000000000000604482015290519081900360640190fd5b6003805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935281517f01d5e27ed5584d16c62ba1a14cfde0783f979d4797a3fc41342aff17d8ef5b41929181900390910190a15050565b600080610bf683611971565b91509150610c02611c2f565b5073ffffffffffffffffffffffffffffffffffffffff808416600090815260056020908152604091829020825160a081018452815460ff8116158015835262ffffff61010083041694830194909452640100000000900485169381019390935260018101548416606084015260020154909216608082015290610ce657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f496d7065726d61783a20414c52454144595f494e495449414c495a4544000000604482015290519081900360640190fd5b604081015173ffffffffffffffffffffffffffffffffffffffff16610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611c7f6026913960400191505060405180910390fd5b606081015173ffffffffffffffffffffffffffffffffffffffff16610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611ca56021913960400191505060405180910390fd5b608081015173ffffffffffffffffffffffffffffffffffffffff16610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611c5e6021913960400191505060405180910390fd5b600954604080517f1a788a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015291516000939290921691631a788a029160248082019260c092909190829003018186803b158015610ead57600080fd5b505afa158015610ec1573d6000803e3d6000fd5b505050506040513d60c0811015610ed757600080fd5b5060a00151905080610f7057600954604080517fc4d66de800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529151919092169163c4d66de891602480830192600092919082900301818387803b158015610f5757600080fd5b505af1158015610f6b573d6000803e3d6000fd5b505050505b6040808301516060840151608085015183517fc548e3c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660448301529283166064820152908216608482015260a0600480830191909152601360a48301527f496d7065726d617820436f6c6c61746572616c0000000000000000000000000060c483015260e0602483015260e48201527f696d784300000000000000000000000000000000000000000000000000000000610104820152925191169163c548e3c59161012480830192600092919082900301818387803b15801561106957600080fd5b505af115801561107d573d6000803e3d6000fd5b505050606083015160408085015181517f6a030c1100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116604483015291821660648201526080600480830191909152601360848301527f496d7065726d617820426f72726f7761626c650000000000000000000000000060a483015260c0602483015260c48201527f696d78420000000000000000000000000000000000000000000000000000000060e4820152915192169250636a030c119161010480830192600092919082900301818387803b15801561116c57600080fd5b505af1158015611180573d6000803e3d6000fd5b5050505060808281015160408085015181517f6a030c1100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660448301529182166064820152600480820195909552601360848201527f496d7065726d617820426f72726f7761626c650000000000000000000000000060a482015260c0602482015260c48101949094527f696d78420000000000000000000000000000000000000000000000000000000060e48501529051911691636a030c119161010480830192600092919082900301818387803b15801561127157600080fd5b505af1158015611285573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff80871660008181526005602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055868201516060808901516080808b01518b8601518751958a168652928916958501959095529387168386015262ffffff169082015291518885169550938916937f4c3ab495dc8ebd1b2f3232d7632e54411bc7e4d111475e7fbbd5547d9a28c4959281900390910190a45050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146113d257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496d7065726d61783a20554e415554484f52495a454400000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935281517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9929181900390910190a15050565b600061146582611971565b505073ffffffffffffffffffffffffffffffffffffffff82811660009081526005602052604090206002015416156114fe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496d7065726d61783a20414c52454144595f4558495354530000000000000000604482015290519081900360640190fd5b600754604080517f54bcd7ad00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260016024830152915191909216916354bcd7ad9160448083019260209291908290030181600087803b15801561157a57600080fd5b505af115801561158e573d6000803e3d6000fd5b505050506040513d60208110156115a457600080fd5b5051604080517f4a5d316c000000000000000000000000000000000000000000000000000000008152905191925073ffffffffffffffffffffffffffffffffffffffff831691634a5d316c9160048082019260009290919082900301818387803b15801561161157600080fd5b505af1158015611625573d6000803e3d6000fd5b5050505061163282611a84565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020526040902060020180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169282169290921790915590565b6006818154811061169957fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff16331461176257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496d7065726d61783a20554e415554484f52495a454400000000000000000000604482015290519081900360640190fd5b600080546001805473ffffffffffffffffffffffffffffffffffffffff8082167fffffffffffffffffffffffff000000000000000000000000000000000000000080861682179687905590921690925560408051938316808552949092166020840152815190927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92908290030190a16040805173ffffffffffffffffffffffffffffffffffffffff831681526000602082015281517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9929181900390910190a15050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146118cd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496d7065726d61783a20554e415554484f52495a454400000000000000000000604482015290519081900360640190fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935281517f324bacfad26225895fcf55780481bec4ce49013c92500fa1c25626ff43fbf661929181900390910190a15050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6000808273ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ba57600080fd5b505afa1580156119ce573d6000803e3d6000fd5b505050506040513d60208110156119e457600080fd5b5051604080517fd21220a7000000000000000000000000000000000000000000000000000000008152905191935073ffffffffffffffffffffffffffffffffffffffff85169163d21220a791600480820192602092909190829003018186803b158015611a5057600080fd5b505afa158015611a64573d6000803e3d6000fd5b505050506040513d6020811015611a7a57600080fd5b5051919391925050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260056020526040902054610100900462ffffff1615611abe57611c2c565b60068054600181810183557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f909101805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831681179093556040805160a0810182526000808252965462ffffff90811660208381019182528385018a8152606085018b8152608086018c8152998c5260059092529490992092518354915194518616640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff95909316610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ff9115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009093169290921716179290921691909117815594519385018054948216948316949094179093559051600290930180549390921692169190911790555b50565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091529056fe496d7065726d61783a20424f52524f5741424c45315f4e4f545f43524541544544496d7065726d61783a20434f4c4c41544552414c495a41424c455f4e4f545f43524541544544496d7065726d61783a20424f52524f5741424c45305f4e4f545f43524541544544a265627a7a723158205807900bcc8fa6f1ffa1c3e9e973b6883771749e476b79e288be00753ca8dcf164736f6c6343000510003200000000000000000000000004825ca4d96064bd08605013d19cb7e108ff03d4000000000000000000000000052df909ebde5ec8b38cc90734633a906cd3c2040000000000000000000000005671b249391ca5e6a8fe28ceb1e85dc41c12ba7d00000000000000000000000031864bc58a47a4fc8782b4135873788e876de9eb000000000000000000000000c12e00de204d58ead5b5ce9054e94aee7747fb6c

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

00000000000000000000000004825ca4d96064bd08605013d19cb7e108ff03d4000000000000000000000000052df909ebde5ec8b38cc90734633a906cd3c2040000000000000000000000005671b249391ca5e6a8fe28ceb1e85dc41c12ba7d00000000000000000000000031864bc58a47a4fc8782b4135873788e876de9eb000000000000000000000000c12e00de204d58ead5b5ce9054e94aee7747fb6c

-----Decoded View---------------
Arg [0] : _admin (address): 0x04825ca4d96064bd08605013d19cb7e108ff03d4
Arg [1] : _reservesAdmin (address): 0x052df909ebde5ec8b38cc90734633a906cd3c204
Arg [2] : _bDeployer (address): 0x5671b249391ca5e6a8fe28ceb1e85dc41c12ba7d
Arg [3] : _cDeployer (address): 0x31864bc58a47a4fc8782b4135873788e876de9eb
Arg [4] : _simpleUniswapOracle (address): 0xc12e00de204d58ead5b5ce9054e94aee7747fb6c

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000004825ca4d96064bd08605013d19cb7e108ff03d4
Arg [1] : 000000000000000000000000052df909ebde5ec8b38cc90734633a906cd3c204
Arg [2] : 0000000000000000000000005671b249391ca5e6a8fe28ceb1e85dc41c12ba7d
Arg [3] : 00000000000000000000000031864bc58a47a4fc8782b4135873788e876de9eb
Arg [4] : 000000000000000000000000c12e00de204d58ead5b5ce9054e94aee7747fb6c


Deployed ByteCode Sourcemap

14492:6398:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14492:6398:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14833:53;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14833:53:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16712:417;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16712:417:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14549:27;;;:::i;14651:30::-;;;:::i;17135:427::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17135:427:0;;;;:::i;14982:101::-;;;:::i;:::-;;;;;;;;;;;;;;;;15120:27;;;:::i;15151:47::-;;;:::i;14580:28::-;;;:::i;20154:432::-;;;:::i;:::-;;14612:35;;;:::i;19808:341::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19808:341:0;;;;:::i;18001:1209::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18001:1209:0;;;;:::i;19216:261::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19216:261:0;;;;:::i;17568:427::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17568:427:0;;;;:::i;14914:32::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14914:32:0;;:::i;15089:27::-;;;:::i;19482:320::-;;;:::i;20591:296::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20591:296:0;;;;:::i;14525:20::-;;;:::i;14833:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16712:417::-;16779:18;16804:25;16815:13;16804:10;:25::i;:::-;-1:-1:-1;;16842:54:0;:29;;;16894:1;16842:29;;;:14;:29;;;;;:40;;;;;:54;16834:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16945:9;;:41;;;;;;:9;:41;;;;;;;;;:9;;;;;:26;;:41;;;;;;;;;;;;;;:9;;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;16945:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16945:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16945:41:0;16991:37;;;;;;;;16945:41;;-1:-1:-1;16991:35:0;;;;;;:37;;;;;;;;;;;;;;;;:35;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;16991:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16991:37:0;;;;17033:33;17052:13;17033:18;:33::i;:::-;17071:29;;;;;;;;:14;:29;;;;;:53;;;;;;;;;;;;;;;;;;17114:10;16712:417::o;14549:27::-;;;;;;:::o;14651:30::-;;;;;;:::o;17135:427::-;17203:19;17229:25;17240:13;17229:10;:25::i;:::-;-1:-1:-1;;17267:55:0;:29;;;17320:1;17267:29;;;:14;:29;;;;;:41;;;;:55;17259:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17372:9;;:44;;;;;;:9;:44;;;;;;;:9;:44;;;;;;;;:9;;;:26;;:44;;;;;;;;;;;;;;;;;;:9;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;17372:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17372:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17372:44:0;17421:38;;;;;;;;17372:44;;-1:-1:-1;17421:36:0;;;;;;:38;;;;;;;;;;;;;;;;:36;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;17421:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17421:38:0;;;;17464:33;17483:13;17464:18;:33::i;:::-;17502:29;;;;;;;;:14;:29;;;;;:41;;:55;;;;;;;;;;;;;;;17135:427::o;14982:101::-;15056:15;:22;14982:101;:::o;15120:27::-;;;;;;:::o;15151:47::-;;;;;;:::o;14580:28::-;;;;;;:::o;20154:432::-;20222:20;;;;20208:10;:34;20200:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20301:13;;;20353:20;;;20301:13;20353:20;;;20378:36;;;;;;;;;;20419:33;;;;;;20462:49;;;20301:13;;;20462:49;;;20497:13;;;;20462:49;;;;;;20353:20;;20462:49;;;;;;;;;20521:60;;;;;;;;20578:1;20521:60;;;;;;;;;;;;;;;;;20154:432;;:::o;14612:35::-;;;;;;:::o;19808:341::-;19911:13;;;;19897:10;:27;19889:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19990:20;;;;20015:46;;;;;;;;;;;20071:73;;;19990:20;;;;20071:73;;;;;;;;;;;;;;;;;;;;;;;19808:341;;:::o;18001:1209::-;18070:14;18086;18104:25;18115:13;18104:10;:25::i;:::-;18069:60;;;;18134:24;;:::i;:::-;-1:-1:-1;18161:29:0;;;;;;;;:14;:29;;;;;;;;;18134:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18195:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18272:16;;;;:30;;18264:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18358:17;;;;:31;;18350:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18440:17;;;;:31;;18432:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18550:19;;:42;;;;;;:19;:42;;;;;;;;;18524:22;;18550:19;;;;;:27;;:42;;;;;;;;;;;;;;;:19;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;18550:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18550:42:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;18550:42:0;;;;-1:-1:-1;18550:42:0;18597:69;;18621:19;;:45;;;;;;:19;:45;;;;;;;;;:19;;;;;:30;;:45;;;;;:19;;:45;;;;;;;:19;;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;18621:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18621:45:0;;;;18597:69;18687:16;;;;;18763:17;;;;18782;;;;18675:125;;;;;:41;:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;;:125;;;;;-1:-1:-1;;18675:125:0;;;;;;;-1:-1:-1;18675:41:0;:125;;;5:2:-1;;;;30:1;27;20:12;5:2;18675:125:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;18817:17:0;;;;18887:16;;;;;18805:99;;;;;:42;:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;-1:-1:-1;18805:42:0;;:99;;;;;-1:-1:-1;;18805:99:0;;;;;;;-1:-1:-1;18805:42:0;:99;;;5:2:-1;;;;30:1;27;20:12;5:2;18805:99:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;18921:17:0;;;;;18991:16;;;;;18909:99;;;;;:42;:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;;:99;;;;;-1:-1:-1;;18909:99:0;;;;;;;-1:-1:-1;18909:42:0;:99;;;5:2:-1;;;;30:1;27;20:12;5:2;18909:99:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;19017:29:0;;;;;;;;:14;:29;;;;;;;;;:48;;;;19061:4;19017:48;;;19129:16;;;;19147:17;;;;;19166;;;;;19185:19;;;;19075:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19075:130:0;;;;;;;;;;;;;;18001:1209;;;;;:::o;19216:261::-;19303:5;;;;19289:10;:19;19281:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19366:12;;;;19383:30;;;;;;;;;;;19423:49;;;19366:12;;;;19423:49;;;;;;;;;;;;;;;;;;;;;;;19216:261;;:::o;17568:427::-;17636:19;17662:25;17673:13;17662:10;:25::i;:::-;-1:-1:-1;;17700:55:0;:29;;;17753:1;17700:29;;;:14;:29;;;;;:41;;;;:55;17692:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17805:9;;:44;;;;;;:9;:44;;;;;;;:9;:44;;;;;;:9;;;;;:26;;:44;;;;;;;;;;;;;;:9;;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;17805:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17805:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17805:44:0;17854:38;;;;;;;;17805:44;;-1:-1:-1;17854:36:0;;;;;;:38;;;;;;;;;;;;;;;;:36;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;17854:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17854:38:0;;;;17897:33;17916:13;17897:18;:33::i;:::-;17935:29;;;;;;;;:14;:29;;;;;:41;;:55;;;;;;;;;;;;;;;17568:427::o;14914:32::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14914:32:0;:::o;15089:27::-;;;;;;:::o;19482:320::-;19542:12;;;;19528:10;:26;19520:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19586:16;19605:5;;;19641:12;;19605:5;19641:12;;;19658:20;;;;;;;;;;19683:25;;;;;;19718;;;19605:5;;;19718:25;;;19737:5;;;;19718:25;;;;;;19641:12;;19718:25;;;;;;;;;19753:44;;;;;;;;19794:1;19753:44;;;;;;;;;;;;;;;;;19482:320;;:::o;20591:296::-;20684:13;;;;20670:10;:27;20662:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20758:15;;;;20778:36;;;;;;;;;;;20824:58;;;20758:15;;;;20824:58;;;;;;;;;;;;;;;;;;;;;;;20591:296;;:::o;14525:20::-;;;;;;:::o;16200:206::-;16265:14;16281;16326:13;16311:36;;;:38;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16311:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16311:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16311:38:0;16363;;;;;;;;16311;;-1:-1:-1;16363:36:0;;;;;;:38;;;;;16311;;16363;;;;;;;;:36;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;16363:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16363:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16363:38:0;16200:206;;16363:38;;-1:-1:-1;;16200:206:0:o;16412:294::-;16480:29;;;;;;;:14;:29;;;;;:43;;;;;;:48;16476:61;;16530:7;;16476:61;16541:15;27:10:-1;;39:1;23:18;;;45:23;;16541:35:0;;;;;;;;;;;;;;;;;;;16615:86;;;;;;;;-1:-1:-1;16615:86:0;;;16641:22;;16615:86;;;;16541:35;16615:86;;;;;;;;;;;;;;;;;;;;;;;;16583:29;;;:14;:29;;;;;;;:118;;;;;;;;;;;;;;;;;16541:35;16583:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16412:294;;:::o;14492:6398::-;;;;;;;;;-1:-1:-1;14492:6398:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

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