Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 5,950 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Exit_target Repa... | 13611388 | 1067 days ago | IN | 0 ETH | 0.01397418 | ||||
Exit_target Repa... | 13607306 | 1068 days ago | IN | 0 ETH | 0.01314597 | ||||
Exit_target Repa... | 13607044 | 1068 days ago | IN | 0 ETH | 0.01393405 | ||||
Exit_Eth_target ... | 13598739 | 1069 days ago | IN | 0 ETH | 0.04564589 | ||||
Join | 13594068 | 1070 days ago | IN | 0 ETH | 0.01129784 | ||||
Join | 13591012 | 1070 days ago | IN | 0 ETH | 0.01941159 | ||||
Exit_Eth_target ... | 13590983 | 1070 days ago | IN | 0 ETH | 0.02066599 | ||||
Join_Eth | 13590968 | 1070 days ago | IN | 6 ETH | 0.02817347 | ||||
Join | 13590190 | 1070 days ago | IN | 0 ETH | 0.01139919 | ||||
Exit_target Repa... | 13589835 | 1070 days ago | IN | 0 ETH | 0.02750051 | ||||
Exit_target Repa... | 13587101 | 1071 days ago | IN | 0 ETH | 0.0270173 | ||||
Join | 13580032 | 1072 days ago | IN | 0 ETH | 0.02088114 | ||||
Exit_target Repa... | 13577132 | 1072 days ago | IN | 0 ETH | 0.04369132 | ||||
Exit_target Repa... | 13571068 | 1073 days ago | IN | 0 ETH | 0.0205063 | ||||
Exit_target Repa... | 13571007 | 1073 days ago | IN | 0 ETH | 0.02548965 | ||||
Exit_target Repa... | 13570900 | 1073 days ago | IN | 0 ETH | 0.03235409 | ||||
Join | 13568291 | 1074 days ago | IN | 0 ETH | 0.00682724 | ||||
Exit_target Repa... | 13566649 | 1074 days ago | IN | 0 ETH | 0.02835428 | ||||
Exit_target Repa... | 13565144 | 1074 days ago | IN | 0 ETH | 0.01953892 | ||||
Trigger Liquidat... | 13562549 | 1075 days ago | IN | 0 ETH | 0.01703829 | ||||
Exit_target Repa... | 13558808 | 1075 days ago | IN | 0 ETH | 0.04500147 | ||||
Exit_target Repa... | 13549747 | 1077 days ago | IN | 0 ETH | 0.01583802 | ||||
Exit_target Repa... | 13549507 | 1077 days ago | IN | 0 ETH | 0.00984935 | ||||
Join | 13549474 | 1077 days ago | IN | 0 ETH | 0.01253026 | ||||
Exit_target Repa... | 13546313 | 1077 days ago | IN | 0 ETH | 0.03494653 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
13598739 | 1069 days ago | 1 ETH | ||||
13598739 | 1069 days ago | 1 ETH | ||||
13590983 | 1070 days ago | 6 ETH | ||||
13590983 | 1070 days ago | 6 ETH | ||||
13590968 | 1070 days ago | 6 ETH | ||||
13493271 | 1086 days ago | 20 ETH | ||||
13493271 | 1086 days ago | 20 ETH | ||||
13466184 | 1090 days ago | 4 ETH | ||||
13466184 | 1090 days ago | 4 ETH | ||||
13466156 | 1090 days ago | 3 ETH | ||||
13466156 | 1090 days ago | 3 ETH | ||||
13432273 | 1095 days ago | 50 ETH | ||||
13432273 | 1095 days ago | 50 ETH | ||||
13420861 | 1097 days ago | 3.90318326 ETH | ||||
13420861 | 1097 days ago | 3.90318326 ETH | ||||
13395495 | 1101 days ago | 50 ETH | ||||
13392762 | 1101 days ago | 0.1 ETH | ||||
13386289 | 1102 days ago | 29 ETH | ||||
13385943 | 1102 days ago | 2.09519801 ETH | ||||
13353311 | 1108 days ago | 12 ETH | ||||
13300247 | 1116 days ago | 110 ETH | ||||
13300247 | 1116 days ago | 110 ETH | ||||
13291308 | 1117 days ago | 110 ETH | ||||
13283173 | 1118 days ago | 30.4645 ETH | ||||
13283173 | 1118 days ago | 30.4645 ETH |
Loading...
Loading
Contract Name:
CDPManager01
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-04-07 */ // File: localhost/contracts/helpers/SafeMath.sol // SPDX-License-Identifier: bsl-1.1 /* Copyright 2020 Unit Protocol: Artem Zakharov ([email protected]). */ pragma solidity 0.7.6; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "SafeMath: division by zero"); return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } // File: localhost/contracts/helpers/ReentrancyGuard.sol pragma solidity 0.7.6; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: localhost/contracts/interfaces/IToken.sol interface IToken { function decimals() external view returns (uint8); } // File: localhost/contracts/interfaces/IVaultParameters.sol interface IVaultParameters { function canModifyVault ( address ) external view returns ( bool ); function foundation ( ) external view returns ( address ); function isManager ( address ) external view returns ( bool ); function isOracleTypeEnabled ( uint256, address ) external view returns ( bool ); function liquidationFee ( address ) external view returns ( uint256 ); function setCollateral ( address asset, uint256 stabilityFeeValue, uint256 liquidationFeeValue, uint256 usdpLimit, uint256[] calldata oracles ) external; function setFoundation ( address newFoundation ) external; function setLiquidationFee ( address asset, uint256 newValue ) external; function setManager ( address who, bool permit ) external; function setOracleType ( uint256 _type, address asset, bool enabled ) external; function setStabilityFee ( address asset, uint256 newValue ) external; function setTokenDebtLimit ( address asset, uint256 limit ) external; function setVaultAccess ( address who, bool permit ) external; function stabilityFee ( address ) external view returns ( uint256 ); function tokenDebtLimit ( address ) external view returns ( uint256 ); function vault ( ) external view returns ( address ); function vaultParameters ( ) external view returns ( address ); } // File: localhost/contracts/interfaces/IVaultManagerParameters.sol interface IVaultManagerParameters { function devaluationPeriod ( address ) external view returns ( uint256 ); function initialCollateralRatio ( address ) external view returns ( uint256 ); function liquidationDiscount ( address ) external view returns ( uint256 ); function liquidationRatio ( address ) external view returns ( uint256 ); function maxColPercent ( address ) external view returns ( uint256 ); function minColPercent ( address ) external view returns ( uint256 ); function setColPartRange ( address asset, uint256 min, uint256 max ) external; function setCollateral ( address asset, uint256 stabilityFeeValue, uint256 liquidationFeeValue, uint256 initialCollateralRatioValue, uint256 liquidationRatioValue, uint256 liquidationDiscountValue, uint256 devaluationPeriodValue, uint256 usdpLimit, uint256[] calldata oracles, uint256 minColP, uint256 maxColP ) external; function setDevaluationPeriod ( address asset, uint256 newValue ) external; function setInitialCollateralRatio ( address asset, uint256 newValue ) external; function setLiquidationDiscount ( address asset, uint256 newValue ) external; function setLiquidationRatio ( address asset, uint256 newValue ) external; function vaultParameters ( ) external view returns ( address ); } // File: localhost/contracts/interfaces/ICDPRegistry.sol pragma experimental ABIEncoderV2; interface ICDPRegistry { struct CDP { address asset; address owner; } function batchCheckpoint ( address[] calldata assets, address[] calldata owners ) external; function batchCheckpointForAsset ( address asset, address[] calldata owners ) external; function checkpoint ( address asset, address owner ) external; function cr ( ) external view returns ( address ); function getAllCdps ( ) external view returns ( CDP[] memory r ); function getCdpsByCollateral ( address asset ) external view returns ( CDP[] memory cdps ); function getCdpsByOwner ( address owner ) external view returns ( CDP[] memory r ); function getCdpsCount ( ) external view returns ( uint256 totalCdpCount ); function getCdpsCountForCollateral ( address asset ) external view returns ( uint256 ); function isAlive ( address asset, address owner ) external view returns ( bool ); function isListed ( address asset, address owner ) external view returns ( bool ); function vault ( ) external view returns ( address ); } // File: localhost/contracts/interfaces/IVault.sol interface IVault { function DENOMINATOR_1E2 ( ) external view returns ( uint256 ); function DENOMINATOR_1E5 ( ) external view returns ( uint256 ); function borrow ( address asset, address user, uint256 amount ) external returns ( uint256 ); function calculateFee ( address asset, address user, uint256 amount ) external view returns ( uint256 ); function changeOracleType ( address asset, address user, uint256 newOracleType ) external; function chargeFee ( address asset, address user, uint256 amount ) external; function col ( ) external view returns ( address ); function colToken ( address, address ) external view returns ( uint256 ); function collaterals ( address, address ) external view returns ( uint256 ); function debts ( address, address ) external view returns ( uint256 ); function depositCol ( address asset, address user, uint256 amount ) external; function depositEth ( address user ) external payable; function depositMain ( address asset, address user, uint256 amount ) external; function destroy ( address asset, address user ) external; function getTotalDebt ( address asset, address user ) external view returns ( uint256 ); function lastUpdate ( address, address ) external view returns ( uint256 ); function liquidate ( address asset, address positionOwner, uint256 mainAssetToLiquidator, uint256 colToLiquidator, uint256 mainAssetToPositionOwner, uint256 colToPositionOwner, uint256 repayment, uint256 penalty, address liquidator ) external; function liquidationBlock ( address, address ) external view returns ( uint256 ); function liquidationFee ( address, address ) external view returns ( uint256 ); function liquidationPrice ( address, address ) external view returns ( uint256 ); function oracleType ( address, address ) external view returns ( uint256 ); function repay ( address asset, address user, uint256 amount ) external returns ( uint256 ); function spawn ( address asset, address user, uint256 _oracleType ) external; function stabilityFee ( address, address ) external view returns ( uint256 ); function tokenDebts ( address ) external view returns ( uint256 ); function triggerLiquidation ( address asset, address positionOwner, uint256 initialPrice ) external; function update ( address asset, address user ) external; function usdp ( ) external view returns ( address ); function vaultParameters ( ) external view returns ( address ); function weth ( ) external view returns ( address payable ); function withdrawCol ( address asset, address user, uint256 amount ) external; function withdrawEth ( address user, uint256 amount ) external; function withdrawMain ( address asset, address user, uint256 amount ) external; } // File: localhost/contracts/interfaces/IWETH.sol interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function withdraw(uint) external; } // File: localhost/contracts/interfaces/IOracleUsd.sol interface IOracleUsd { // returns Q112-encoded value // returned value 10**18 * 2**112 is $1 function assetToUsd(address asset, uint amount) external view returns (uint); } // File: localhost/contracts/interfaces/IOracleRegistry.sol interface IOracleRegistry { struct Oracle { uint oracleType; address oracleAddress; } function WETH ( ) external view returns ( address ); function getKeydonixOracleTypes ( ) external view returns ( uint256[] memory ); function getOracles ( ) external view returns ( Oracle[] memory foundOracles ); function keydonixOracleTypes ( uint256 ) external view returns ( uint256 ); function maxOracleType ( ) external view returns ( uint256 ); function oracleByAsset ( address asset ) external view returns ( address ); function oracleByType ( uint256 ) external view returns ( address ); function oracleTypeByAsset ( address ) external view returns ( uint256 ); function oracleTypeByOracle ( address ) external view returns ( uint256 ); function setKeydonixOracleTypes ( uint256[] memory _keydonixOracleTypes ) external; function setOracle ( uint256 oracleType, address oracle ) external; function setOracleTypeForAsset ( address asset, uint256 oracleType ) external; function setOracleTypeForAssets ( address[] memory assets, uint256 oracleType ) external; function unsetOracle ( uint256 oracleType ) external; function unsetOracleForAsset ( address asset ) external; function unsetOracleForAssets ( address[] memory assets ) external; function vaultParameters ( ) external view returns ( address ); } // File: localhost/contracts/vault-managers/CDPManager01.sol /* Copyright 2020 Unit Protocol: Artem Zakharov ([email protected]). */ pragma solidity 0.7.6; /** * @title CDPManager01 **/ contract CDPManager01 is ReentrancyGuard { using SafeMath for uint; IVault public immutable vault; IVaultManagerParameters public immutable vaultManagerParameters; IOracleRegistry public immutable oracleRegistry; ICDPRegistry public immutable cdpRegistry; address payable public immutable WETH; uint public constant Q112 = 2 ** 112; uint public constant DENOMINATOR_1E5 = 1e5; /** * @dev Trigger when joins are happened **/ event Join(address indexed asset, address indexed owner, uint main, uint usdp); /** * @dev Trigger when exits are happened **/ event Exit(address indexed asset, address indexed owner, uint main, uint usdp); /** * @dev Trigger when liquidations are initiated **/ event LiquidationTriggered(address indexed asset, address indexed owner); modifier checkpoint(address asset, address owner) { _; cdpRegistry.checkpoint(asset, owner); } /** * @param _vaultManagerParameters The address of the contract with Vault manager parameters * @param _oracleRegistry The address of the oracle registry * @param _cdpRegistry The address of the CDP registry **/ constructor(address _vaultManagerParameters, address _oracleRegistry, address _cdpRegistry) { require( _vaultManagerParameters != address(0) && _oracleRegistry != address(0) && _cdpRegistry != address(0), "Unit Protocol: INVALID_ARGS" ); vaultManagerParameters = IVaultManagerParameters(_vaultManagerParameters); vault = IVault(IVaultParameters(IVaultManagerParameters(_vaultManagerParameters).vaultParameters()).vault()); oracleRegistry = IOracleRegistry(_oracleRegistry); WETH = IVault(IVaultParameters(IVaultManagerParameters(_vaultManagerParameters).vaultParameters()).vault()).weth(); cdpRegistry = ICDPRegistry(_cdpRegistry); } // only accept ETH via fallback from the WETH contract receive() external payable { require(msg.sender == WETH, "Unit Protocol: RESTRICTED"); } /** * @notice Depositing tokens must be pre-approved to Vault address * @notice position actually considered as spawned only when debt > 0 * @dev Deposits collateral and/or borrows USDP * @param asset The address of the collateral * @param assetAmount The amount of the collateral to deposit * @param usdpAmount The amount of USDP token to borrow **/ function join(address asset, uint assetAmount, uint usdpAmount) public nonReentrant checkpoint(asset, msg.sender) { require(usdpAmount != 0 || assetAmount != 0, "Unit Protocol: USELESS_TX"); require(IToken(asset).decimals() <= 18, "Unit Protocol: NOT_SUPPORTED_DECIMALS"); if (usdpAmount == 0) { vault.depositMain(asset, msg.sender, assetAmount); } else { _ensureOracle(asset); bool spawned = vault.debts(asset, msg.sender) != 0; if (!spawned) { // spawn a position vault.spawn(asset, msg.sender, oracleRegistry.oracleTypeByAsset(asset)); } if (assetAmount != 0) { vault.depositMain(asset, msg.sender, assetAmount); } // mint USDP to owner vault.borrow(asset, msg.sender, usdpAmount); // check collateralization _ensurePositionCollateralization(asset, msg.sender); } // fire an event emit Join(asset, msg.sender, assetAmount, usdpAmount); } /** * @dev Deposits ETH and/or borrows USDP * @param usdpAmount The amount of USDP token to borrow **/ function join_Eth(uint usdpAmount) external payable { if (msg.value != 0) { IWETH(WETH).deposit{value: msg.value}(); require(IWETH(WETH).transfer(msg.sender, msg.value), "Unit Protocol: WETH_TRANSFER_FAILED"); } join(WETH, msg.value, usdpAmount); } /** * @notice Tx sender must have a sufficient USDP balance to pay the debt * @dev Withdraws collateral and repays specified amount of debt * @param asset The address of the collateral * @param assetAmount The amount of the collateral to withdraw * @param usdpAmount The amount of USDP to repay **/ function exit(address asset, uint assetAmount, uint usdpAmount) public nonReentrant checkpoint(asset, msg.sender) returns (uint) { // check usefulness of tx require(assetAmount != 0 || usdpAmount != 0, "Unit Protocol: USELESS_TX"); uint debt = vault.debts(asset, msg.sender); // catch full repayment if (usdpAmount > debt) { usdpAmount = debt; } if (assetAmount == 0) { _repay(asset, msg.sender, usdpAmount); } else { if (debt == usdpAmount) { vault.withdrawMain(asset, msg.sender, assetAmount); if (usdpAmount != 0) { _repay(asset, msg.sender, usdpAmount); } } else { _ensureOracle(asset); // withdraw collateral to the owner address vault.withdrawMain(asset, msg.sender, assetAmount); if (usdpAmount != 0) { _repay(asset, msg.sender, usdpAmount); } vault.update(asset, msg.sender); _ensurePositionCollateralization(asset, msg.sender); } } // fire an event emit Exit(asset, msg.sender, assetAmount, usdpAmount); return usdpAmount; } /** * @notice Repayment is the sum of the principal and interest * @dev Withdraws collateral and repays specified amount of debt * @param asset The address of the collateral * @param assetAmount The amount of the collateral to withdraw * @param repayment The target repayment amount **/ function exit_targetRepayment(address asset, uint assetAmount, uint repayment) external returns (uint) { uint usdpAmount = _calcPrincipal(asset, msg.sender, repayment); return exit(asset, assetAmount, usdpAmount); } /** * @notice Withdraws WETH and converts to ETH * @param ethAmount ETH amount to withdraw * @param usdpAmount The amount of USDP token to repay **/ function exit_Eth(uint ethAmount, uint usdpAmount) public returns (uint) { usdpAmount = exit(WETH, ethAmount, usdpAmount); require(IWETH(WETH).transferFrom(msg.sender, address(this), ethAmount), "Unit Protocol: WETH_TRANSFER_FROM_FAILED"); IWETH(WETH).withdraw(ethAmount); (bool success, ) = msg.sender.call{value:ethAmount}(""); require(success, "Unit Protocol: ETH_TRANSFER_FAILED"); return usdpAmount; } /** * @notice Repayment is the sum of the principal and interest * @notice Withdraws WETH and converts to ETH * @param ethAmount ETH amount to withdraw * @param repayment The target repayment amount **/ function exit_Eth_targetRepayment(uint ethAmount, uint repayment) external returns (uint) { uint usdpAmount = _calcPrincipal(WETH, msg.sender, repayment); return exit_Eth(ethAmount, usdpAmount); } // decreases debt function _repay(address asset, address owner, uint usdpAmount) internal { uint fee = vault.calculateFee(asset, owner, usdpAmount); vault.chargeFee(vault.usdp(), owner, fee); // burn USDP from the owner's balance uint debtAfter = vault.repay(asset, owner, usdpAmount); if (debtAfter == 0) { // clear unused storage vault.destroy(asset, owner); } } function _ensurePositionCollateralization(address asset, address owner) internal view { // collateral value of the position in USD uint usdValue_q112 = getCollateralUsdValue_q112(asset, owner); // USD limit of the position uint usdLimit = usdValue_q112 * vaultManagerParameters.initialCollateralRatio(asset) / Q112 / 100; // revert if collateralization is not enough require(vault.getTotalDebt(asset, owner) <= usdLimit, "Unit Protocol: UNDERCOLLATERALIZED"); } // Liquidation Trigger /** * @dev Triggers liquidation of a position * @param asset The address of the collateral token of a position * @param owner The owner of the position **/ function triggerLiquidation(address asset, address owner) external nonReentrant { _ensureOracle(asset); // USD value of the collateral uint usdValue_q112 = getCollateralUsdValue_q112(asset, owner); // reverts if a position is not liquidatable require(_isLiquidatablePosition(asset, owner, usdValue_q112), "Unit Protocol: SAFE_POSITION"); uint liquidationDiscount_q112 = usdValue_q112.mul( vaultManagerParameters.liquidationDiscount(asset) ).div(DENOMINATOR_1E5); uint initialLiquidationPrice = usdValue_q112.sub(liquidationDiscount_q112).div(Q112); // sends liquidation command to the Vault vault.triggerLiquidation(asset, owner, initialLiquidationPrice); // fire an liquidation event emit LiquidationTriggered(asset, owner); } function getCollateralUsdValue_q112(address asset, address owner) public view returns (uint) { return IOracleUsd(oracleRegistry.oracleByAsset(asset)).assetToUsd(asset, vault.collaterals(asset, owner)); } /** * @dev Determines whether a position is liquidatable * @param asset The address of the collateral * @param owner The owner of the position * @param usdValue_q112 Q112-encoded USD value of the collateral * @return boolean value, whether a position is liquidatable **/ function _isLiquidatablePosition( address asset, address owner, uint usdValue_q112 ) internal view returns (bool) { uint debt = vault.getTotalDebt(asset, owner); // position is collateralized if there is no debt if (debt == 0) return false; return debt.mul(100).mul(Q112).div(usdValue_q112) >= vaultManagerParameters.liquidationRatio(asset); } function _ensureOracle(address asset) internal view { uint oracleType = oracleRegistry.oracleTypeByAsset(asset); require(oracleType != 0, "Unit Protocol: INVALID_ORACLE_TYPE"); address oracle = oracleRegistry.oracleByType(oracleType); require(oracle != address(0), "Unit Protocol: DISABLED_ORACLE"); } /** * @dev Determines whether a position is liquidatable * @param asset The address of the collateral * @param owner The owner of the position * @return boolean value, whether a position is liquidatable **/ function isLiquidatablePosition( address asset, address owner ) public view returns (bool) { uint usdValue_q112 = getCollateralUsdValue_q112(asset, owner); return _isLiquidatablePosition(asset, owner, usdValue_q112); } /** * @dev Calculates current utilization ratio * @param asset The address of the collateral * @param owner The owner of the position * @return utilization ratio **/ function utilizationRatio( address asset, address owner ) public view returns (uint) { uint debt = vault.getTotalDebt(asset, owner); if (debt == 0) return 0; uint usdValue_q112 = getCollateralUsdValue_q112(asset, owner); return debt.mul(100).mul(Q112).div(usdValue_q112); } /** * @dev Calculates liquidation price * @param asset The address of the collateral * @param owner The owner of the position * @return Q112-encoded liquidation price **/ function liquidationPrice_q112( address asset, address owner ) external view returns (uint) { uint debt = vault.getTotalDebt(asset, owner); if (debt == 0) return uint(-1); uint collateralLiqPrice = debt.mul(100).mul(Q112).div(vaultManagerParameters.liquidationRatio(asset)); require(IToken(asset).decimals() <= 18, "Unit Protocol: NOT_SUPPORTED_DECIMALS"); return collateralLiqPrice / vault.collaterals(asset, owner) / 10 ** (18 - IToken(asset).decimals()); } function _calcPrincipal(address asset, address owner, uint repayment) internal view returns (uint) { uint fee = vault.stabilityFee(asset, owner) * (block.timestamp - vault.lastUpdate(asset, owner)) / 365 days; return repayment * DENOMINATOR_1E5 / (DENOMINATOR_1E5 + fee); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_vaultManagerParameters","type":"address"},{"internalType":"address","name":"_oracleRegistry","type":"address"},{"internalType":"address","name":"_cdpRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"main","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"usdp","type":"uint256"}],"name":"Exit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"main","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"usdp","type":"uint256"}],"name":"Join","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"LiquidationTriggered","type":"event"},{"inputs":[],"name":"DENOMINATOR_1E5","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Q112","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cdpRegistry","outputs":[{"internalType":"contract ICDPRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"assetAmount","type":"uint256"},{"internalType":"uint256","name":"usdpAmount","type":"uint256"}],"name":"exit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"uint256","name":"usdpAmount","type":"uint256"}],"name":"exit_Eth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"uint256","name":"repayment","type":"uint256"}],"name":"exit_Eth_targetRepayment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"assetAmount","type":"uint256"},{"internalType":"uint256","name":"repayment","type":"uint256"}],"name":"exit_targetRepayment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"getCollateralUsdValue_q112","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"isLiquidatablePosition","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"assetAmount","type":"uint256"},{"internalType":"uint256","name":"usdpAmount","type":"uint256"}],"name":"join","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"usdpAmount","type":"uint256"}],"name":"join_Eth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"liquidationPrice_q112","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracleRegistry","outputs":[{"internalType":"contract IOracleRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"triggerLiquidation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"utilizationRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vaultManagerParameters","outputs":[{"internalType":"contract IVaultManagerParameters","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6101206040523480156200001257600080fd5b5060405162002c3138038062002c31833981016040819052620000359162000367565b60016000556001600160a01b038316158015906200005b57506001600160a01b03821615155b80156200007057506001600160a01b03811615155b620000985760405162461bcd60e51b81526004016200008f90620003ba565b60405180910390fd5b826001600160a01b031660a0816001600160a01b031660601b81525050826001600160a01b031663aca345ee6040518163ffffffff1660e01b815260040160206040518083038186803b158015620000ef57600080fd5b505afa15801562000104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012a919062000341565b6001600160a01b031663fbfa77cf6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200016357600080fd5b505afa15801562000178573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019e919062000341565b6001600160601b0319606091821b81166080529083901b1660c05260408051635651a2f760e11b815290516001600160a01b0385169163aca345ee916004808301926020929190829003018186803b158015620001fa57600080fd5b505afa1580156200020f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000235919062000341565b6001600160a01b031663fbfa77cf6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200026e57600080fd5b505afa15801562000283573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a9919062000341565b6001600160a01b0316633fc8cef36040518163ffffffff1660e01b815260040160206040518083038186803b158015620002e257600080fd5b505afa158015620002f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031d919062000341565b6001600160601b0319606091821b81166101005291901b1660e052506200040a9050565b60006020828403121562000353578081fd5b81516200036081620003f1565b9392505050565b6000806000606084860312156200037c578182fd5b83516200038981620003f1565b60208501519093506200039c81620003f1565b6040850151909250620003af81620003f1565b809150509250925092565b6020808252601b908201527f556e69742050726f746f636f6c3a20494e56414c49445f415247530000000000604082015260600190565b6001600160a01b03811681146200040757600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c61270b620005266000398061011d52806108a7528061092d52806109da5280610b575280610ba552806116e5528061172552806117e3525080610b335280610f1d52806116695250806106f95280610aed52806113e25280611f2a5280611fe852508061043a5280610b7b52806110095280611a1052806120b35250806103855280610605528061078f5280610a105280610c465280610d0f5280610dad5280610e4252806110da528061128c528061131f52806113b152806114ea528061156d52806118d0528061194c5280611ac15280611b615280611c3f5280611ccc5280611cfb5280611df55280611e9f5280612164525061270b6000f3fe60806040526004361061010d5760003560e01c8063ab2a2a8211610095578063bbdc953111610064578063bbdc9531146102eb578063d4796d121461030b578063ea36380a1461032b578063eb70d3581461034b578063fbfa77cf1461036b57610165565b8063ab2a2a821461028c578063ad5c4648146102a1578063b7ebdc0c146102b6578063ba96208a146102cb57610165565b80633bf7a83e116100dc5780633bf7a83e146102005780634265607c146102155780634bb93ab114610235578063971182c614610257578063a3d84b5b1461026c57610165565b806312dc1dcc1461016a578063134a02dd146101a0578063252d040e146101cd57806325df9058146101ed57610165565b3661016557336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101635760405162461bcd60e51b815260040161015a906124b6565b60405180910390fd5b005b600080fd5b34801561017657600080fd5b5061018a610185366004612252565b610380565b60405161019791906126a9565b60405180910390f35b3480156101ac57600080fd5b506101c06101bb366004612252565b6106bd565b60405161019791906123be565b3480156101d957600080fd5b5061018a6101e8366004612252565b6106df565b6101636101fb3660046122de565b61089f565b34801561020c57600080fd5b5061018a610a03565b34801561022157600080fd5b5061018a610230366004612252565b610a0b565b34801561024157600080fd5b5061024a610aeb565b6040516101979190612353565b34801561026357600080fd5b5061018a610b0f565b34801561027857600080fd5b5061018a61028736600461228a565b610b16565b34801561029857600080fd5b5061024a610b31565b3480156102ad57600080fd5b5061024a610b55565b3480156102c257600080fd5b5061024a610b79565b3480156102d757600080fd5b5061018a6102e636600461230e565b610b9d565b3480156102f757600080fd5b5061018a61030636600461228a565b610bd7565b34801561031757600080fd5b50610163610326366004612252565b610f95565b34801561033757600080fd5b5061016361034636600461228a565b611189565b34801561035757600080fd5b5061018a61036636600461230e565b6116de565b34801561037757600080fd5b5061024a6118ce565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d6446d4385856040518363ffffffff1660e01b81526004016103d19291906123a4565b60206040518083038186803b1580156103e957600080fd5b505afa1580156103fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042191906122f6565b905080610433576000199150506106b7565b60006104f37f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633bffbbe2876040518263ffffffff1660e01b81526004016104849190612353565b60206040518083038186803b15801561049c57600080fd5b505afa1580156104b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d491906122f6565b6104ed600160701b6104e78660646118f2565b906118f2565b90611917565b90506012856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561053057600080fd5b505afa158015610544573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610568919061232f565b60ff1611156105895760405162461bcd60e51b815260040161015a90612664565b846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156105c257600080fd5b505afa1580156105d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fa919061232f565b60120360ff16600a0a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e51e119e87876040518363ffffffff1660e01b81526004016106519291906123a4565b60206040518083038186803b15801561066957600080fd5b505afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a191906122f6565b82816106a957fe5b04816106b157fe5b04925050505b92915050565b6000806106ca84846106df565b90506106d7848483611947565b949350505050565b604051631c0b181960e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063381630329061072e908690600401612353565b60206040518083038186803b15801561074657600080fd5b505afa15801561075a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077e9190612236565b6001600160a01b03166310e55698847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e51e119e87876040518363ffffffff1660e01b81526004016107db9291906123a4565b60206040518083038186803b1580156107f357600080fd5b505afa158015610807573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082b91906122f6565b6040518363ffffffff1660e01b815260040161084892919061238b565b60206040518083038186803b15801561086057600080fd5b505afa158015610874573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089891906122f6565b9392505050565b34156109d5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561090057600080fd5b505af1158015610914573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925061096791503390349060040161238b565b602060405180830381600087803b15801561098157600080fd5b505af1158015610995573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b991906122be565b6109d55760405162461bcd60e51b815260040161015a906124ed565b610a007f00000000000000000000000000000000000000000000000000000000000000003483611189565b50565b600160701b81565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d6446d4385856040518363ffffffff1660e01b8152600401610a5c9291906123a4565b60206040518083038186803b158015610a7457600080fd5b505afa158015610a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aac91906122f6565b905080610abd5760009150506106b7565b6000610ac985856106df565b9050610ae2816104ed600160701b6104e78660646118f2565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b620186a081565b600080610b24853385611ab7565b9050610ae2858583610bd7565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080610bcb7f00000000000000000000000000000000000000000000000000000000000000003385611ab7565b90506106d784826116de565b600060026000541415610bfc5760405162461bcd60e51b815260040161015a906125eb565b6002600055833384151580610c1057508315155b610c2c5760405162461bcd60e51b815260040161015a90612530565b604051634ac1c33d60e01b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690634ac1c33d90610c7d908a9033906004016123a4565b60206040518083038186803b158015610c9557600080fd5b505afa158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccd91906122f6565b905080851115610cdb578094505b85610cf057610ceb873387611c25565b610eb5565b84811415610d8d576040516311af95b160e31b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638d7cad8890610d48908a9033908b90600401612367565b600060405180830381600087803b158015610d6257600080fd5b505af1158015610d76573d6000803e3d6000fd5b5050505084600014610ceb57610ceb873387611c25565b610d9687611f10565b6040516311af95b160e31b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638d7cad8890610de6908a9033908b90600401612367565b600060405180830381600087803b158015610e0057600080fd5b505af1158015610e14573d6000803e3d6000fd5b5050505084600014610e2b57610e2b873387611c25565b60405163c640752d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c640752d90610e79908a9033906004016123a4565b600060405180830381600087803b158015610e9357600080fd5b505af1158015610ea7573d6000803e3d6000fd5b50505050610eb5873361209a565b336001600160a01b0316876001600160a01b03167fa702ae6024e8b4c2b0eb162b1453dacb93cf6922f5a2d7236faed898c21148f88888604051610efa9291906126b2565b60405180910390a384935050604051632ed56dff60e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bb55b7fc90610f5490859085906004016123a4565b600060405180830381600087803b158015610f6e57600080fd5b505af1158015610f82573d6000803e3d6000fd5b5050600160005550929695505050505050565b60026000541415610fb85760405162461bcd60e51b815260040161015a906125eb565b6002600055610fc682611f10565b6000610fd283836106df565b9050610fdf838383611947565b610ffb5760405162461bcd60e51b815260040161015a906123c9565b60006110aa620186a06104ed7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166315a04ea2886040518263ffffffff1660e01b81526004016110539190612353565b60206040518083038186803b15801561106b57600080fd5b505afa15801561107f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a391906122f6565b85906118f2565b905060006110c0600160701b6104ed8585612224565b604051633a15193760e11b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063742a326e9061111390889088908690600401612367565b600060405180830381600087803b15801561112d57600080fd5b505af1158015611141573d6000803e3d6000fd5b50506040516001600160a01b038088169350881691507f5b79a897d30813a62a1f95ba180d3320d3701d96605708b81105e00719a069e490600090a350506001600055505050565b600260005414156111ac5760405162461bcd60e51b815260040161015a906125eb565b60026000558233821515806111c057508315155b6111dc5760405162461bcd60e51b815260040161015a90612530565b6012856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561121757600080fd5b505afa15801561122b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124f919061232f565b60ff1611156112705760405162461bcd60e51b815260040161015a90612664565b826112fc5760405163770c1acf60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ee18359e906112c590889033908990600401612367565b600060405180830381600087803b1580156112df57600080fd5b505af11580156112f3573d6000803e3d6000fd5b50505050611605565b61130585611f10565b604051634ac1c33d60e01b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690634ac1c33d9061135690899033906004016123a4565b60206040518083038186803b15801561136e57600080fd5b505afa158015611382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a691906122f6565b15159050806114cd577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c6d894f087337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fbcd55318b6040518263ffffffff1660e01b815260040161142c9190612353565b60206040518083038186803b15801561144457600080fd5b505afa158015611458573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147c91906122f6565b6040518463ffffffff1660e01b815260040161149a93929190612367565b600060405180830381600087803b1580156114b457600080fd5b505af11580156114c8573d6000803e3d6000fd5b505050505b84156115565760405163770c1acf60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ee18359e9061152390899033908a90600401612367565b600060405180830381600087803b15801561153d57600080fd5b505af1158015611551573d6000803e3d6000fd5b505050505b6040516314890dcb60e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635224372c906115a690899033908990600401612367565b602060405180830381600087803b1580156115c057600080fd5b505af11580156115d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f891906122f6565b50611603863361209a565b505b336001600160a01b0316856001600160a01b03167f6423b6056e64b3b29cb2d342362b47c26fa8d6877da27ea152354060df19b9bc868660405161164a9291906126b2565b60405180910390a3604051632ed56dff60e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bb55b7fc906116a090859085906004016123a4565b600060405180830381600087803b1580156116ba57600080fd5b505af11580156116ce573d6000803e3d6000fd5b5050600160005550505050505050565b600061170b7f00000000000000000000000000000000000000000000000000000000000000008484610bd7565b6040516323b872dd60e01b81529092506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd9061175e90339030908890600401612367565b602060405180830381600087803b15801561177857600080fd5b505af115801561178c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b091906122be565b6117cc5760405162461bcd60e51b815260040161015a90612400565b604051632e1a7d4d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d906118189086906004016126a9565b600060405180830381600087803b15801561183257600080fd5b505af1158015611846573d6000803e3d6000fd5b505050506000336001600160a01b03168460405161186390612350565b60006040518083038185875af1925050503d80600081146118a0576040519150601f19603f3d011682016040523d82523d6000602084013e6118a5565b606091505b50509050806118c65760405162461bcd60e51b815260040161015a906125a9565b509092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600082611901575060006106b7565b508181028183828161190f57fe5b04146106b757fe5b6000816119365760405162461bcd60e51b815260040161015a9061247f565b81838161193f57fe5b049392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d6446d4386866040518363ffffffff1660e01b81526004016119989291906123a4565b60206040518083038186803b1580156119b057600080fd5b505afa1580156119c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e891906122f6565b9050806119f9576000915050610898565b604051631dffddf160e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633bffbbe290611a45908890600401612353565b60206040518083038186803b158015611a5d57600080fd5b505afa158015611a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9591906122f6565b611aac846104ed600160701b6104e78660646118f2565b101595945050505050565b6000806301e133807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166388ad7a6187876040518363ffffffff1660e01b8152600401611b0d9291906123a4565b60206040518083038186803b158015611b2557600080fd5b505afa158015611b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5d91906122f6565b42037f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d4b93dbe88886040518363ffffffff1660e01b8152600401611bad9291906123a4565b60206040518083038186803b158015611bc557600080fd5b505afa158015611bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfd91906122f6565b0281611c0557fe5b04905080620186a001620186a0840281611c1b57fe5b0495945050505050565b604051633e543e5b60e11b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637ca87cb690611c7890879087908790600401612367565b60206040518083038186803b158015611c9057600080fd5b505afa158015611ca4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc891906122f6565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633d1aa9637f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166374e6076c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611d5257600080fd5b505afa158015611d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8a9190612236565b85846040518463ffffffff1660e01b8152600401611daa93929190612367565b600060405180830381600087803b158015611dc457600080fd5b505af1158015611dd8573d6000803e3d6000fd5b5050604051631da649cf60e01b8152600092506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169150631da649cf90611e2f90889088908890600401612367565b602060405180830381600087803b158015611e4957600080fd5b505af1158015611e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8191906122f6565b905080611f09576040516362b40f9f60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906362b40f9f90611ed690889088906004016123a4565b600060405180830381600087803b158015611ef057600080fd5b505af1158015611f04573d6000803e3d6000fd5b505050505b5050505050565b60405163fbcd553160e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fbcd553190611f5f908590600401612353565b60206040518083038186803b158015611f7757600080fd5b505afa158015611f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611faf91906122f6565b905080611fce5760405162461bcd60e51b815260040161015a90612567565b6040516362c03ee360e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5807dc69061201d9085906004016126a9565b60206040518083038186803b15801561203557600080fd5b505afa158015612049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206d9190612236565b90506001600160a01b0381166120955760405162461bcd60e51b815260040161015a90612448565b505050565b60006120a683836106df565b905060006064600160701b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b85c4496876040518263ffffffff1660e01b81526004016120fd9190612353565b60206040518083038186803b15801561211557600080fd5b505afa158015612129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214d91906122f6565b84028161215657fe5b048161215e57fe5b049050807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d6446d4386866040518363ffffffff1660e01b81526004016121b09291906123a4565b60206040518083038186803b1580156121c857600080fd5b505afa1580156121dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220091906122f6565b111561221e5760405162461bcd60e51b815260040161015a90612622565b50505050565b60008282111561223057fe5b50900390565b600060208284031215612247578081fd5b8151610898816126c0565b60008060408385031215612264578081fd5b823561226f816126c0565b9150602083013561227f816126c0565b809150509250929050565b60008060006060848603121561229e578081fd5b83356122a9816126c0565b95602085013595506040909401359392505050565b6000602082840312156122cf578081fd5b81518015158114610898578182fd5b6000602082840312156122ef578081fd5b5035919050565b600060208284031215612307578081fd5b5051919050565b60008060408385031215612320578182fd5b50508035926020909101359150565b600060208284031215612340578081fd5b815160ff81168114610898578182fd5b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b6020808252601c908201527f556e69742050726f746f636f6c3a20534146455f504f534954494f4e00000000604082015260600190565b60208082526028908201527f556e69742050726f746f636f6c3a20574554485f5452414e534645525f46524f6040820152671357d1905253115160c21b606082015260800190565b6020808252601e908201527f556e69742050726f746f636f6c3a2044495341424c45445f4f5241434c450000604082015260600190565b6020808252601a908201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604082015260600190565b60208082526019908201527f556e69742050726f746f636f6c3a205245535452494354454400000000000000604082015260600190565b60208082526023908201527f556e69742050726f746f636f6c3a20574554485f5452414e534645525f46414960408201526213115160ea1b606082015260800190565b60208082526019908201527f556e69742050726f746f636f6c3a205553454c4553535f545800000000000000604082015260600190565b60208082526022908201527f556e69742050726f746f636f6c3a20494e56414c49445f4f5241434c455f5459604082015261504560f01b606082015260800190565b60208082526022908201527f556e69742050726f746f636f6c3a204554485f5452414e534645525f4641494c604082015261115160f21b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526022908201527f556e69742050726f746f636f6c3a20554e444552434f4c4c41544552414c495a604082015261115160f21b606082015260800190565b60208082526025908201527f556e69742050726f746f636f6c3a204e4f545f535550504f525445445f444543604082015264494d414c5360d81b606082015260800190565b90815260200190565b918252602082015260400190565b6001600160a01b0381168114610a0057600080fdfea2646970667358221220fd75fdeb2db628db0bd9a0cd7d5e415029566d274ebf2a4c27062b07d7fb7d1d64736f6c63430007060033000000000000000000000000203153522b9eaef4ae17c6e99851ee7b2f7d312e00000000000000000000000075fbfe26b21fd3ea008af0c764949f8214150c8f0000000000000000000000001a5ff58bc3246eb233fea20d32b79b5f01ec650c
Deployed Bytecode
0x60806040526004361061010d5760003560e01c8063ab2a2a8211610095578063bbdc953111610064578063bbdc9531146102eb578063d4796d121461030b578063ea36380a1461032b578063eb70d3581461034b578063fbfa77cf1461036b57610165565b8063ab2a2a821461028c578063ad5c4648146102a1578063b7ebdc0c146102b6578063ba96208a146102cb57610165565b80633bf7a83e116100dc5780633bf7a83e146102005780634265607c146102155780634bb93ab114610235578063971182c614610257578063a3d84b5b1461026c57610165565b806312dc1dcc1461016a578063134a02dd146101a0578063252d040e146101cd57806325df9058146101ed57610165565b3661016557336001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216146101635760405162461bcd60e51b815260040161015a906124b6565b60405180910390fd5b005b600080fd5b34801561017657600080fd5b5061018a610185366004612252565b610380565b60405161019791906126a9565b60405180910390f35b3480156101ac57600080fd5b506101c06101bb366004612252565b6106bd565b60405161019791906123be565b3480156101d957600080fd5b5061018a6101e8366004612252565b6106df565b6101636101fb3660046122de565b61089f565b34801561020c57600080fd5b5061018a610a03565b34801561022157600080fd5b5061018a610230366004612252565b610a0b565b34801561024157600080fd5b5061024a610aeb565b6040516101979190612353565b34801561026357600080fd5b5061018a610b0f565b34801561027857600080fd5b5061018a61028736600461228a565b610b16565b34801561029857600080fd5b5061024a610b31565b3480156102ad57600080fd5b5061024a610b55565b3480156102c257600080fd5b5061024a610b79565b3480156102d757600080fd5b5061018a6102e636600461230e565b610b9d565b3480156102f757600080fd5b5061018a61030636600461228a565b610bd7565b34801561031757600080fd5b50610163610326366004612252565b610f95565b34801561033757600080fd5b5061016361034636600461228a565b611189565b34801561035757600080fd5b5061018a61036636600461230e565b6116de565b34801561037757600080fd5b5061024a6118ce565b6000807f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b031663d6446d4385856040518363ffffffff1660e01b81526004016103d19291906123a4565b60206040518083038186803b1580156103e957600080fd5b505afa1580156103fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042191906122f6565b905080610433576000199150506106b7565b60006104f37f000000000000000000000000203153522b9eaef4ae17c6e99851ee7b2f7d312e6001600160a01b0316633bffbbe2876040518263ffffffff1660e01b81526004016104849190612353565b60206040518083038186803b15801561049c57600080fd5b505afa1580156104b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d491906122f6565b6104ed600160701b6104e78660646118f2565b906118f2565b90611917565b90506012856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561053057600080fd5b505afa158015610544573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610568919061232f565b60ff1611156105895760405162461bcd60e51b815260040161015a90612664565b846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156105c257600080fd5b505afa1580156105d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fa919061232f565b60120360ff16600a0a7f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b031663e51e119e87876040518363ffffffff1660e01b81526004016106519291906123a4565b60206040518083038186803b15801561066957600080fd5b505afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a191906122f6565b82816106a957fe5b04816106b157fe5b04925050505b92915050565b6000806106ca84846106df565b90506106d7848483611947565b949350505050565b604051631c0b181960e11b81526000906001600160a01b037f00000000000000000000000075fbfe26b21fd3ea008af0c764949f8214150c8f169063381630329061072e908690600401612353565b60206040518083038186803b15801561074657600080fd5b505afa15801561075a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077e9190612236565b6001600160a01b03166310e55698847f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b031663e51e119e87876040518363ffffffff1660e01b81526004016107db9291906123a4565b60206040518083038186803b1580156107f357600080fd5b505afa158015610807573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082b91906122f6565b6040518363ffffffff1660e01b815260040161084892919061238b565b60206040518083038186803b15801561086057600080fd5b505afa158015610874573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089891906122f6565b9392505050565b34156109d5577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561090057600080fd5b505af1158015610914573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216935063a9059cbb925061096791503390349060040161238b565b602060405180830381600087803b15801561098157600080fd5b505af1158015610995573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b991906122be565b6109d55760405162461bcd60e51b815260040161015a906124ed565b610a007f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc23483611189565b50565b600160701b81565b6000807f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b031663d6446d4385856040518363ffffffff1660e01b8152600401610a5c9291906123a4565b60206040518083038186803b158015610a7457600080fd5b505afa158015610a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aac91906122f6565b905080610abd5760009150506106b7565b6000610ac985856106df565b9050610ae2816104ed600160701b6104e78660646118f2565b95945050505050565b7f00000000000000000000000075fbfe26b21fd3ea008af0c764949f8214150c8f81565b620186a081565b600080610b24853385611ab7565b9050610ae2858583610bd7565b7f0000000000000000000000001a5ff58bc3246eb233fea20d32b79b5f01ec650c81565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b7f000000000000000000000000203153522b9eaef4ae17c6e99851ee7b2f7d312e81565b600080610bcb7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc23385611ab7565b90506106d784826116de565b600060026000541415610bfc5760405162461bcd60e51b815260040161015a906125eb565b6002600055833384151580610c1057508315155b610c2c5760405162461bcd60e51b815260040161015a90612530565b604051634ac1c33d60e01b81526000906001600160a01b037f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf191690634ac1c33d90610c7d908a9033906004016123a4565b60206040518083038186803b158015610c9557600080fd5b505afa158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccd91906122f6565b905080851115610cdb578094505b85610cf057610ceb873387611c25565b610eb5565b84811415610d8d576040516311af95b160e31b81526001600160a01b037f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf191690638d7cad8890610d48908a9033908b90600401612367565b600060405180830381600087803b158015610d6257600080fd5b505af1158015610d76573d6000803e3d6000fd5b5050505084600014610ceb57610ceb873387611c25565b610d9687611f10565b6040516311af95b160e31b81526001600160a01b037f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf191690638d7cad8890610de6908a9033908b90600401612367565b600060405180830381600087803b158015610e0057600080fd5b505af1158015610e14573d6000803e3d6000fd5b5050505084600014610e2b57610e2b873387611c25565b60405163c640752d60e01b81526001600160a01b037f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf19169063c640752d90610e79908a9033906004016123a4565b600060405180830381600087803b158015610e9357600080fd5b505af1158015610ea7573d6000803e3d6000fd5b50505050610eb5873361209a565b336001600160a01b0316876001600160a01b03167fa702ae6024e8b4c2b0eb162b1453dacb93cf6922f5a2d7236faed898c21148f88888604051610efa9291906126b2565b60405180910390a384935050604051632ed56dff60e21b81526001600160a01b037f0000000000000000000000001a5ff58bc3246eb233fea20d32b79b5f01ec650c169063bb55b7fc90610f5490859085906004016123a4565b600060405180830381600087803b158015610f6e57600080fd5b505af1158015610f82573d6000803e3d6000fd5b5050600160005550929695505050505050565b60026000541415610fb85760405162461bcd60e51b815260040161015a906125eb565b6002600055610fc682611f10565b6000610fd283836106df565b9050610fdf838383611947565b610ffb5760405162461bcd60e51b815260040161015a906123c9565b60006110aa620186a06104ed7f000000000000000000000000203153522b9eaef4ae17c6e99851ee7b2f7d312e6001600160a01b03166315a04ea2886040518263ffffffff1660e01b81526004016110539190612353565b60206040518083038186803b15801561106b57600080fd5b505afa15801561107f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a391906122f6565b85906118f2565b905060006110c0600160701b6104ed8585612224565b604051633a15193760e11b81529091506001600160a01b037f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf19169063742a326e9061111390889088908690600401612367565b600060405180830381600087803b15801561112d57600080fd5b505af1158015611141573d6000803e3d6000fd5b50506040516001600160a01b038088169350881691507f5b79a897d30813a62a1f95ba180d3320d3701d96605708b81105e00719a069e490600090a350506001600055505050565b600260005414156111ac5760405162461bcd60e51b815260040161015a906125eb565b60026000558233821515806111c057508315155b6111dc5760405162461bcd60e51b815260040161015a90612530565b6012856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561121757600080fd5b505afa15801561122b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124f919061232f565b60ff1611156112705760405162461bcd60e51b815260040161015a90612664565b826112fc5760405163770c1acf60e11b81526001600160a01b037f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf19169063ee18359e906112c590889033908990600401612367565b600060405180830381600087803b1580156112df57600080fd5b505af11580156112f3573d6000803e3d6000fd5b50505050611605565b61130585611f10565b604051634ac1c33d60e01b81526000906001600160a01b037f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf191690634ac1c33d9061135690899033906004016123a4565b60206040518083038186803b15801561136e57600080fd5b505afa158015611382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a691906122f6565b15159050806114cd577f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b031663c6d894f087337f00000000000000000000000075fbfe26b21fd3ea008af0c764949f8214150c8f6001600160a01b031663fbcd55318b6040518263ffffffff1660e01b815260040161142c9190612353565b60206040518083038186803b15801561144457600080fd5b505afa158015611458573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147c91906122f6565b6040518463ffffffff1660e01b815260040161149a93929190612367565b600060405180830381600087803b1580156114b457600080fd5b505af11580156114c8573d6000803e3d6000fd5b505050505b84156115565760405163770c1acf60e11b81526001600160a01b037f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf19169063ee18359e9061152390899033908a90600401612367565b600060405180830381600087803b15801561153d57600080fd5b505af1158015611551573d6000803e3d6000fd5b505050505b6040516314890dcb60e21b81526001600160a01b037f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf191690635224372c906115a690899033908990600401612367565b602060405180830381600087803b1580156115c057600080fd5b505af11580156115d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f891906122f6565b50611603863361209a565b505b336001600160a01b0316856001600160a01b03167f6423b6056e64b3b29cb2d342362b47c26fa8d6877da27ea152354060df19b9bc868660405161164a9291906126b2565b60405180910390a3604051632ed56dff60e21b81526001600160a01b037f0000000000000000000000001a5ff58bc3246eb233fea20d32b79b5f01ec650c169063bb55b7fc906116a090859085906004016123a4565b600060405180830381600087803b1580156116ba57600080fd5b505af11580156116ce573d6000803e3d6000fd5b5050600160005550505050505050565b600061170b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28484610bd7565b6040516323b872dd60e01b81529092506001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216906323b872dd9061175e90339030908890600401612367565b602060405180830381600087803b15801561177857600080fd5b505af115801561178c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b091906122be565b6117cc5760405162461bcd60e51b815260040161015a90612400565b604051632e1a7d4d60e01b81526001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21690632e1a7d4d906118189086906004016126a9565b600060405180830381600087803b15801561183257600080fd5b505af1158015611846573d6000803e3d6000fd5b505050506000336001600160a01b03168460405161186390612350565b60006040518083038185875af1925050503d80600081146118a0576040519150601f19603f3d011682016040523d82523d6000602084013e6118a5565b606091505b50509050806118c65760405162461bcd60e51b815260040161015a906125a9565b509092915050565b7f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf1981565b600082611901575060006106b7565b508181028183828161190f57fe5b04146106b757fe5b6000816119365760405162461bcd60e51b815260040161015a9061247f565b81838161193f57fe5b049392505050565b6000807f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b031663d6446d4386866040518363ffffffff1660e01b81526004016119989291906123a4565b60206040518083038186803b1580156119b057600080fd5b505afa1580156119c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e891906122f6565b9050806119f9576000915050610898565b604051631dffddf160e11b81526001600160a01b037f000000000000000000000000203153522b9eaef4ae17c6e99851ee7b2f7d312e1690633bffbbe290611a45908890600401612353565b60206040518083038186803b158015611a5d57600080fd5b505afa158015611a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9591906122f6565b611aac846104ed600160701b6104e78660646118f2565b101595945050505050565b6000806301e133807f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b03166388ad7a6187876040518363ffffffff1660e01b8152600401611b0d9291906123a4565b60206040518083038186803b158015611b2557600080fd5b505afa158015611b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5d91906122f6565b42037f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b031663d4b93dbe88886040518363ffffffff1660e01b8152600401611bad9291906123a4565b60206040518083038186803b158015611bc557600080fd5b505afa158015611bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfd91906122f6565b0281611c0557fe5b04905080620186a001620186a0840281611c1b57fe5b0495945050505050565b604051633e543e5b60e11b81526000906001600160a01b037f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf191690637ca87cb690611c7890879087908790600401612367565b60206040518083038186803b158015611c9057600080fd5b505afa158015611ca4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc891906122f6565b90507f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b0316633d1aa9637f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b03166374e6076c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611d5257600080fd5b505afa158015611d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8a9190612236565b85846040518463ffffffff1660e01b8152600401611daa93929190612367565b600060405180830381600087803b158015611dc457600080fd5b505af1158015611dd8573d6000803e3d6000fd5b5050604051631da649cf60e01b8152600092506001600160a01b037f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf19169150631da649cf90611e2f90889088908890600401612367565b602060405180830381600087803b158015611e4957600080fd5b505af1158015611e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8191906122f6565b905080611f09576040516362b40f9f60e01b81526001600160a01b037f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf1916906362b40f9f90611ed690889088906004016123a4565b600060405180830381600087803b158015611ef057600080fd5b505af1158015611f04573d6000803e3d6000fd5b505050505b5050505050565b60405163fbcd553160e01b81526000906001600160a01b037f00000000000000000000000075fbfe26b21fd3ea008af0c764949f8214150c8f169063fbcd553190611f5f908590600401612353565b60206040518083038186803b158015611f7757600080fd5b505afa158015611f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611faf91906122f6565b905080611fce5760405162461bcd60e51b815260040161015a90612567565b6040516362c03ee360e11b81526000906001600160a01b037f00000000000000000000000075fbfe26b21fd3ea008af0c764949f8214150c8f169063c5807dc69061201d9085906004016126a9565b60206040518083038186803b15801561203557600080fd5b505afa158015612049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206d9190612236565b90506001600160a01b0381166120955760405162461bcd60e51b815260040161015a90612448565b505050565b60006120a683836106df565b905060006064600160701b7f000000000000000000000000203153522b9eaef4ae17c6e99851ee7b2f7d312e6001600160a01b031663b85c4496876040518263ffffffff1660e01b81526004016120fd9190612353565b60206040518083038186803b15801561211557600080fd5b505afa158015612129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214d91906122f6565b84028161215657fe5b048161215e57fe5b049050807f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b031663d6446d4386866040518363ffffffff1660e01b81526004016121b09291906123a4565b60206040518083038186803b1580156121c857600080fd5b505afa1580156121dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220091906122f6565b111561221e5760405162461bcd60e51b815260040161015a90612622565b50505050565b60008282111561223057fe5b50900390565b600060208284031215612247578081fd5b8151610898816126c0565b60008060408385031215612264578081fd5b823561226f816126c0565b9150602083013561227f816126c0565b809150509250929050565b60008060006060848603121561229e578081fd5b83356122a9816126c0565b95602085013595506040909401359392505050565b6000602082840312156122cf578081fd5b81518015158114610898578182fd5b6000602082840312156122ef578081fd5b5035919050565b600060208284031215612307578081fd5b5051919050565b60008060408385031215612320578182fd5b50508035926020909101359150565b600060208284031215612340578081fd5b815160ff81168114610898578182fd5b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b6020808252601c908201527f556e69742050726f746f636f6c3a20534146455f504f534954494f4e00000000604082015260600190565b60208082526028908201527f556e69742050726f746f636f6c3a20574554485f5452414e534645525f46524f6040820152671357d1905253115160c21b606082015260800190565b6020808252601e908201527f556e69742050726f746f636f6c3a2044495341424c45445f4f5241434c450000604082015260600190565b6020808252601a908201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604082015260600190565b60208082526019908201527f556e69742050726f746f636f6c3a205245535452494354454400000000000000604082015260600190565b60208082526023908201527f556e69742050726f746f636f6c3a20574554485f5452414e534645525f46414960408201526213115160ea1b606082015260800190565b60208082526019908201527f556e69742050726f746f636f6c3a205553454c4553535f545800000000000000604082015260600190565b60208082526022908201527f556e69742050726f746f636f6c3a20494e56414c49445f4f5241434c455f5459604082015261504560f01b606082015260800190565b60208082526022908201527f556e69742050726f746f636f6c3a204554485f5452414e534645525f4641494c604082015261115160f21b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526022908201527f556e69742050726f746f636f6c3a20554e444552434f4c4c41544552414c495a604082015261115160f21b606082015260800190565b60208082526025908201527f556e69742050726f746f636f6c3a204e4f545f535550504f525445445f444543604082015264494d414c5360d81b606082015260800190565b90815260200190565b918252602082015260400190565b6001600160a01b0381168114610a0057600080fdfea2646970667358221220fd75fdeb2db628db0bd9a0cd7d5e415029566d274ebf2a4c27062b07d7fb7d1d64736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000203153522b9eaef4ae17c6e99851ee7b2f7d312e00000000000000000000000075fbfe26b21fd3ea008af0c764949f8214150c8f0000000000000000000000001a5ff58bc3246eb233fea20d32b79b5f01ec650c
-----Decoded View---------------
Arg [0] : _vaultManagerParameters (address): 0x203153522B9EAef4aE17c6e99851EE7b2F7D312E
Arg [1] : _oracleRegistry (address): 0x75fBFe26B21fd3EA008af0C764949f8214150C8f
Arg [2] : _cdpRegistry (address): 0x1a5Ff58BC3246Eb233fEA20D32b79B5F01eC650c
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000203153522b9eaef4ae17c6e99851ee7b2f7d312e
Arg [1] : 00000000000000000000000075fbfe26b21fd3ea008af0c764949f8214150c8f
Arg [2] : 0000000000000000000000001a5ff58bc3246eb233fea20d32b79b5f01ec650c
Deployed Bytecode Sourcemap
13396:13108:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15516:10;-1:-1:-1;;;;;15530:4:0;15516:18;;15508:56;;;;-1:-1:-1;;;15508:56:0;;;;;;;:::i;:::-;;;;;;;;;13396:13108;;;;;25649:548;;;;;;;;;;-1:-1:-1;25649:548:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24605:266;;;;;;;;;;-1:-1:-1;24605:266:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;23048:217::-;;;;;;;;;;-1:-1:-1;23048:217:0;;;;;:::i;:::-;;:::i;17248:310::-;;;;;;:::i;:::-;;:::i;13730:36::-;;;;;;;;;;;;;:::i;25080:349::-;;;;;;;;;;-1:-1:-1;25080:349:0;;;;;:::i;:::-;;:::i;13582:47::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;13773:42::-;;;;;;;;;;;;;:::i;19575:242::-;;;;;;;;;;-1:-1:-1;19575:242:0;;;;;:::i;:::-;;:::i;13636:41::-;;;;;;;;;;;;;:::i;13684:37::-;;;;;;;;;;;;;:::i;13512:63::-;;;;;;;;;;;;;:::i;20723:219::-;;;;;;;;;;-1:-1:-1;20723:219:0;;;;;:::i;:::-;;:::i;17912:1321::-;;;;;;;;;;-1:-1:-1;17912:1321:0;;;;;:::i;:::-;;:::i;22165:875::-;;;;;;;;;;-1:-1:-1;22165:875:0;;;;;:::i;:::-;;:::i;15985:1126::-;;;;;;;;;;-1:-1:-1;15985:1126:0;;;;;:::i;:::-;;:::i;20007:465::-;;;;;;;;;;-1:-1:-1;20007:465:0;;;;;:::i;:::-;;:::i;13476:29::-;;;;;;;;;;;;;:::i;25649:548::-;25758:4;25777:9;25789:5;-1:-1:-1;;;;;25789:18:0;;25808:5;25815;25789:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25777:44;-1:-1:-1;25836:9:0;25832:30;;-1:-1:-1;;25847:15:0;;;;;25832:30;25883:23;25909:75;25937:22;-1:-1:-1;;;;;25937:39:0;;25977:5;25937:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25909:23;-1:-1:-1;;;25909:13:0;:4;25918:3;25909:8;:13::i;:::-;:17;;:23::i;:::-;:27;;:75::i;:::-;25883:101;;26033:2;26012:5;-1:-1:-1;;;;;26005:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:30;;;;25997:80;;;;-1:-1:-1;;;25997:80:0;;;;;;;:::i;:::-;26171:5;-1:-1:-1;;;;;26164:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26159:2;:29;26152:37;;:2;:37;26118:5;-1:-1:-1;;;;;26118:17:0;;26136:5;26143;26118:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26097:18;:52;;;;;;:92;;;;;;26090:99;;;;25649:548;;;;;:::o;24605:266::-;24713:4;24730:18;24751:40;24778:5;24785;24751:26;:40::i;:::-;24730:61;;24811:52;24835:5;24842;24849:13;24811:23;:52::i;:::-;24804:59;24605:266;-1:-1:-1;;;;24605:266:0:o;23048:217::-;23170:35;;-1:-1:-1;;;23170:35:0;;23135:4;;-1:-1:-1;;;;;23170:14:0;:28;;;;:35;;23199:5;;23170:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23159:58:0;;23218:5;23225;-1:-1:-1;;;;;23225:17:0;;23243:5;23250;23225:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23159:98;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23152:105;23048:217;-1:-1:-1;;;23048:217:0:o;17248:310::-;17317:9;:14;17313:192;;17354:4;-1:-1:-1;;;;;17348:19:0;;17375:9;17348:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17410:43:0;;-1:-1:-1;;;17410:43:0;;-1:-1:-1;;;;;17416:4:0;17410:20;;-1:-1:-1;17410:20:0;;-1:-1:-1;17410:43:0;;-1:-1:-1;17431:10:0;;17443:9;;17410:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17402:91;;;;-1:-1:-1;;;17402:91:0;;;;;;;:::i;:::-;17517:33;17522:4;17528:9;17539:10;17517:4;:33::i;:::-;17248:310;:::o;13730:36::-;-1:-1:-1;;;13730:36:0;:::o;25080:349::-;25182:4;25199:9;25211:5;-1:-1:-1;;;;;25211:18:0;;25230:5;25237;25211:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25199:44;-1:-1:-1;25258:9:0;25254:23;;25276:1;25269:8;;;;;25254:23;25298:18;25319:40;25346:5;25353;25319:26;:40::i;:::-;25298:61;-1:-1:-1;25379:42:0;25298:61;25379:23;-1:-1:-1;;;25379:13:0;:4;25388:3;25379:8;:13::i;:42::-;25372:49;25080:349;-1:-1:-1;;;;;25080:349:0:o;13582:47::-;;;:::o;13773:42::-;13812:3;13773:42;:::o;19575:242::-;19672:4;19691:15;19709:44;19724:5;19731:10;19743:9;19709:14;:44::i;:::-;19691:62;;19773:36;19778:5;19785:11;19798:10;19773:4;:36::i;13636:41::-;;;:::o;13684:37::-;;;:::o;13512:63::-;;;:::o;20723:219::-;20807:4;20824:15;20842:43;20857:4;20863:10;20875:9;20842:14;:43::i;:::-;20824:61;;20903:31;20912:9;20923:10;20903:8;:31::i;17912:1321::-;18035:4;3034:1;3631:7;;:19;;3623:63;;;;-1:-1:-1;;;3623:63:0;;;;;;;:::i;:::-;3034:1;3764:7;:18;18007:5;18014:10:::1;18097:16:::0;;::::2;::::0;:35:::2;;-1:-1:-1::0;18117:15:0;;::::2;18097:35;18089:73;;;;-1:-1:-1::0;;;18089:73:0::2;;;;;;;:::i;:::-;18187:30;::::0;-1:-1:-1;;;18187:30:0;;18175:9:::2;::::0;-1:-1:-1;;;;;18187:5:0::2;:11;::::0;::::2;::::0;:30:::2;::::0;18199:5;;18206:10:::2;::::0;18187:30:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18175:42;;18280:4;18267:10;:17;18263:45;;;18301:4;18288:17;;18263:45;18324:16:::0;18320:784:::2;;18357:37;18364:5;18371:10;18383;18357:6;:37::i;:::-;18320:784;;;18439:10;18431:4;:18;18427:666;;;18470:50;::::0;-1:-1:-1;;;18470:50:0;;-1:-1:-1;;;;;18470:5:0::2;:18;::::0;::::2;::::0;:50:::2;::::0;18489:5;;18496:10:::2;::::0;18508:11;;18470:50:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;18543:10;18557:1;18543:15;18539:101;;18583:37;18590:5;18597:10;18609;18583:6;:37::i;18427:666::-;18680:20;18694:5;18680:13;:20::i;:::-;18782:50;::::0;-1:-1:-1;;;18782:50:0;;-1:-1:-1;;;;;18782:5:0::2;:18;::::0;::::2;::::0;:50:::2;::::0;18801:5;;18808:10:::2;::::0;18820:11;;18782:50:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;18857:10;18871:1;18857:15;18853:101;;18897:37;18904:5;18911:10;18923;18897:6;:37::i;:::-;18974:31;::::0;-1:-1:-1;;;18974:31:0;;-1:-1:-1;;;;;18974:5:0::2;:12;::::0;::::2;::::0;:31:::2;::::0;18987:5;;18994:10:::2;::::0;18974:31:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;19026:51;19059:5;19066:10;19026:32;:51::i;:::-;19159:10;-1:-1:-1::0;;;;;19147:48:0::2;19152:5;-1:-1:-1::0;;;;;19147:48:0::2;;19171:11;19184:10;19147:48;;;;;;;:::i;:::-;;;;;;;;19215:10;19208:17;;;14349:36:::1;::::0;-1:-1:-1;;;14349:36:0;;-1:-1:-1;;;;;14349:11:0::1;:22;::::0;::::1;::::0;:36:::1;::::0;14372:5;;14379;;14349:36:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;2990:1:0;3943:7;:22;-1:-1:-1;17912:1321:0;;;-1:-1:-1;;;;;;17912:1321:0:o;22165:875::-;3034:1;3631:7;;:19;;3623:63;;;;-1:-1:-1;;;3623:63:0;;;;;;;:::i;:::-;3034:1;3764:7;:18;22258:20:::1;22272:5:::0;22258:13:::1;:20::i;:::-;22331:18;22352:40;22379:5;22386;22352:26;:40::i;:::-;22331:61;;22475:52;22499:5;22506;22513:13;22475:23;:52::i;:::-;22467:93;;;;-1:-1:-1::0;;;22467:93:0::1;;;;;;;:::i;:::-;22573:29;22605:113;13812:3;22605:92;22637:22;-1:-1:-1::0;;;;;22637:42:0::1;;22680:5;22637:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22605:13:::0;;:17:::1;:92::i;:113::-;22573:145:::0;-1:-1:-1;22731:28:0::1;22762:53;-1:-1:-1::0;;;22762:43:0::1;:13:::0;22573:145;22762:17:::1;:43::i;:53::-;22879:63;::::0;-1:-1:-1;;;22879:63:0;;22731:84;;-1:-1:-1;;;;;;22879:5:0::1;:24;::::0;::::1;::::0;:63:::1;::::0;22904:5;;22911;;22731:84;;22879:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22998:34:0::1;::::0;-1:-1:-1;;;;;22998:34:0;;::::1;::::0;-1:-1:-1;22998:34:0;::::1;::::0;-1:-1:-1;22998:34:0::1;::::0;;;::::1;-1:-1:-1::0;;2990:1:0;3943:7;:22;-1:-1:-1;;;22165:875:0:o;15985:1126::-;3034:1;3631:7;;:19;;3623:63;;;;-1:-1:-1;;;3623:63:0;;;;;;;:::i;:::-;3034:1;3764:7;:18;16080:5;16087:10:::1;16118:15:::0;;::::2;::::0;:35:::2;;-1:-1:-1::0;16137:16:0;;::::2;16118:35;16110:73;;;;-1:-1:-1::0;;;16110:73:0::2;;;;;;;:::i;:::-;16232:2;16211:5;-1:-1:-1::0;;;;;16204:22:0::2;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:30;;;;16196:80;;;;-1:-1:-1::0;;;16196:80:0::2;;;;;;;:::i;:::-;16293:15:::0;16289:723:::2;;16327:49;::::0;-1:-1:-1;;;16327:49:0;;-1:-1:-1;;;;;16327:5:0::2;:17;::::0;::::2;::::0;:49:::2;::::0;16345:5;;16352:10:::2;::::0;16364:11;;16327:49:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;16289:723;;;16413:20;16427:5;16413:13;:20::i;:::-;16465:30;::::0;-1:-1:-1;;;16465:30:0;;16450:12:::2;::::0;-1:-1:-1;;;;;16465:5:0::2;:11;::::0;::::2;::::0;:30:::2;::::0;16477:5;;16484:10:::2;::::0;16465:30:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35:::0;::::2;::::0;-1:-1:-1;16465:35:0;16517:157:::2;;16587:5;-1:-1:-1::0;;;;;16587:11:0::2;;16599:5;16606:10;16618:14;-1:-1:-1::0;;;;;16618:32:0::2;;16651:5;16618:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16587:71;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;16517:157;16694:16:::0;;16690:106:::2;;16731:49;::::0;-1:-1:-1;;;16731:49:0;;-1:-1:-1;;;;;16731:5:0::2;:17;::::0;::::2;::::0;:49:::2;::::0;16749:5;;16756:10:::2;::::0;16768:11;;16731:49:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;16690:106;16847:43;::::0;-1:-1:-1;;;16847:43:0;;-1:-1:-1;;;;;16847:5:0::2;:12;::::0;::::2;::::0;:43:::2;::::0;16860:5;;16867:10:::2;::::0;16879;;16847:43:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16947:51;16980:5;16987:10;16947:32;:51::i;:::-;16289:723;;17067:10;-1:-1:-1::0;;;;;17055:48:0::2;17060:5;-1:-1:-1::0;;;;;17055:48:0::2;;17079:11;17092:10;17055:48;;;;;;;:::i;:::-;;;;;;;;14349:36:::1;::::0;-1:-1:-1;;;14349:36:0;;-1:-1:-1;;;;;14349:11:0::1;:22;::::0;::::1;::::0;:36:::1;::::0;14372:5;;14379;;14349:36:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;2990:1:0;3943:7;:22;-1:-1:-1;;;;;;;15985:1126:0:o;20007:465::-;20074:4;20104:33;20109:4;20115:9;20126:10;20104:4;:33::i;:::-;20156:62;;-1:-1:-1;;;20156:62:0;;20091:46;;-1:-1:-1;;;;;;20162:4:0;20156:24;;;;:62;;20181:10;;20201:4;;20208:9;;20156:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20148:115;;;;-1:-1:-1;;;20148:115:0;;;;;;;:::i;:::-;20274:31;;-1:-1:-1;;;20274:31:0;;-1:-1:-1;;;;;20280:4:0;20274:20;;;;:31;;20295:9;;20274:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20317:12;20335:10;-1:-1:-1;;;;;20335:15:0;20357:9;20335:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20316:55;;;20390:7;20382:54;;;;-1:-1:-1;;;20382:54:0;;;;;;;:::i;:::-;-1:-1:-1;20454:10:0;;20007:465;-1:-1:-1;;20007:465:0:o;13476:29::-;;;:::o;384:202::-;442:9;468:6;464:47;;-1:-1:-1;498:1:0;491:8;;464:47;-1:-1:-1;525:5:0;;;529:1;525;:5;:1;548:5;;;;;:10;541:18;;;681:154;739:7;767:6;759:45;;;;-1:-1:-1;;;759:45:0;;;;;;;:::i;:::-;826:1;822;:5;;;;;;;681:154;-1:-1:-1;;;681:154:0:o;23585:420::-;23725:4;23742:9;23754:5;-1:-1:-1;;;;;23754:18:0;;23773:5;23780;23754:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23742:44;-1:-1:-1;23862:9:0;23858:27;;23880:5;23873:12;;;;;23858:27;23951:46;;-1:-1:-1;;;23951:46:0;;-1:-1:-1;;;;;23951:22:0;:39;;;;:46;;23991:5;;23951:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23905:42;23933:13;23905:23;-1:-1:-1;;;23905:13:0;:4;23914:3;23905:8;:13::i;:42::-;:92;;;23585:420;-1:-1:-1;;;;;23585:420:0:o;26205:296::-;26298:4;26315:8;26414;26380:5;-1:-1:-1;;;;;26380:16:0;;26397:5;26404;26380:30;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26362:15;:48;26326:5;-1:-1:-1;;;;;26326:18:0;;26345:5;26352;26326:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:85;:96;;;;;;26315:107;;26489:3;13812;26471:21;13812:3;26440:9;:27;:53;;;;;;;26205:296;-1:-1:-1;;;;;26205:296:0:o;20973:433::-;21067:44;;-1:-1:-1;;;21067:44:0;;21056:8;;-1:-1:-1;;;;;21067:5:0;:18;;;;:44;;21086:5;;21093;;21100:10;;21067:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21056:55;;21122:5;-1:-1:-1;;;;;21122:15:0;;21138:5;-1:-1:-1;;;;;21138:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21152:5;21159:3;21122:41;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21240:37:0;;-1:-1:-1;;;21240:37:0;;21223:14;;-1:-1:-1;;;;;;21240:5:0;:11;;-1:-1:-1;21240:11:0;;:37;;21252:5;;21259;;21266:10;;21240:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21223:54;-1:-1:-1;21292:14:0;21288:111;;21360:27;;-1:-1:-1;;;21360:27:0;;-1:-1:-1;;;;;21360:5:0;:13;;;;:27;;21374:5;;21381;;21360:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21288:111;20973:433;;;;;:::o;24013:342::-;24094:39;;-1:-1:-1;;;24094:39:0;;24076:15;;-1:-1:-1;;;;;24094:14:0;:32;;;;:39;;24127:5;;24094:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24076:57;-1:-1:-1;24152:15:0;24144:62;;;;-1:-1:-1;;;24144:62:0;;;;;;;:::i;:::-;24234:39;;-1:-1:-1;;;24234:39:0;;24217:14;;-1:-1:-1;;;;;24234:14:0;:27;;;;:39;;24262:10;;24234:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24217:56;-1:-1:-1;;;;;;24292:20:0;;24284:63;;;;-1:-1:-1;;;24284:63:0;;;;;;;:::i;:::-;24013:342;;;:::o;21414:524::-;21563:18;21584:40;21611:5;21618;21584:26;:40::i;:::-;21563:61;;21675:13;21769:3;-1:-1:-1;;;21707:22:0;-1:-1:-1;;;;;21707:45:0;;21753:5;21707:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21691:13;:68;:75;;;;;;:81;;;;;;21675:97;;21883:8;21847:5;-1:-1:-1;;;;;21847:18:0;;21866:5;21873;21847:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;21839:91;;;;-1:-1:-1;;;21839:91:0;;;;;;;:::i;:::-;21414:524;;;;:::o;960:123::-;1018:7;1050:1;1045;:6;;1038:14;;;;-1:-1:-1;1070:5:0;;;960:123::o;14:263:1:-;;137:2;125:9;116:7;112:23;108:32;105:2;;;158:6;150;143:22;105:2;195:9;189:16;214:33;241:5;214:33;:::i;282:402::-;;;411:2;399:9;390:7;386:23;382:32;379:2;;;432:6;424;417:22;379:2;476:9;463:23;495:33;522:5;495:33;:::i;:::-;547:5;-1:-1:-1;604:2:1;589:18;;576:32;617:35;576:32;617:35;:::i;:::-;671:7;661:17;;;369:315;;;;;:::o;689:395::-;;;;835:2;823:9;814:7;810:23;806:32;803:2;;;856:6;848;841:22;803:2;900:9;887:23;919:33;946:5;919:33;:::i;:::-;971:5;1023:2;1008:18;;995:32;;-1:-1:-1;1074:2:1;1059:18;;;1046:32;;793:291;-1:-1:-1;;;793:291:1:o;1089:297::-;;1209:2;1197:9;1188:7;1184:23;1180:32;1177:2;;;1230:6;1222;1215:22;1177:2;1267:9;1261:16;1320:5;1313:13;1306:21;1299:5;1296:32;1286:2;;1347:6;1339;1332:22;1391:190;;1503:2;1491:9;1482:7;1478:23;1474:32;1471:2;;;1524:6;1516;1509:22;1471:2;-1:-1:-1;1552:23:1;;1461:120;-1:-1:-1;1461:120:1:o;1586:194::-;;1709:2;1697:9;1688:7;1684:23;1680:32;1677:2;;;1730:6;1722;1715:22;1677:2;-1:-1:-1;1758:16:1;;1667:113;-1:-1:-1;1667:113:1:o;1785:258::-;;;1914:2;1902:9;1893:7;1889:23;1885:32;1882:2;;;1935:6;1927;1920:22;1882:2;-1:-1:-1;;1963:23:1;;;2033:2;2018:18;;;2005:32;;-1:-1:-1;1872:171:1:o;2048:293::-;;2169:2;2157:9;2148:7;2144:23;2140:32;2137:2;;;2190:6;2182;2175:22;2137:2;2227:9;2221:16;2277:4;2270:5;2266:16;2259:5;2256:27;2246:2;;2302:6;2294;2287:22;2346:205;2546:3;2537:14::o;2556:203::-;-1:-1:-1;;;;;2720:32:1;;;;2702:51;;2690:2;2675:18;;2657:102::o;2988:391::-;-1:-1:-1;;;;;3262:15:1;;;3244:34;;3314:15;;;;3309:2;3294:18;;3287:43;3361:2;3346:18;;3339:34;;;;3194:2;3179:18;;3161:218::o;3384:282::-;-1:-1:-1;;;;;3584:32:1;;;;3566:51;;3648:2;3633:18;;3626:34;3554:2;3539:18;;3521:145::o;3671:304::-;-1:-1:-1;;;;;3901:15:1;;;3883:34;;3953:15;;3948:2;3933:18;;3926:43;3833:2;3818:18;;3800:175::o;5344:187::-;5509:14;;5502:22;5484:41;;5472:2;5457:18;;5439:92::o;6456:352::-;6658:2;6640:21;;;6697:2;6677:18;;;6670:30;6736;6731:2;6716:18;;6709:58;6799:2;6784:18;;6630:178::o;6813:404::-;7015:2;6997:21;;;7054:2;7034:18;;;7027:30;7093:34;7088:2;7073:18;;7066:62;-1:-1:-1;;;7159:2:1;7144:18;;7137:38;7207:3;7192:19;;6987:230::o;7222:354::-;7424:2;7406:21;;;7463:2;7443:18;;;7436:30;7502:32;7497:2;7482:18;;7475:60;7567:2;7552:18;;7396:180::o;7581:350::-;7783:2;7765:21;;;7822:2;7802:18;;;7795:30;7861:28;7856:2;7841:18;;7834:56;7922:2;7907:18;;7755:176::o;7936:349::-;8138:2;8120:21;;;8177:2;8157:18;;;8150:30;8216:27;8211:2;8196:18;;8189:55;8276:2;8261:18;;8110:175::o;8290:399::-;8492:2;8474:21;;;8531:2;8511:18;;;8504:30;8570:34;8565:2;8550:18;;8543:62;-1:-1:-1;;;8636:2:1;8621:18;;8614:33;8679:3;8664:19;;8464:225::o;8694:349::-;8896:2;8878:21;;;8935:2;8915:18;;;8908:30;8974:27;8969:2;8954:18;;8947:55;9034:2;9019:18;;8868:175::o;9048:398::-;9250:2;9232:21;;;9289:2;9269:18;;;9262:30;9328:34;9323:2;9308:18;;9301:62;-1:-1:-1;;;9394:2:1;9379:18;;9372:32;9436:3;9421:19;;9222:224::o;9451:398::-;9653:2;9635:21;;;9692:2;9672:18;;;9665:30;9731:34;9726:2;9711:18;;9704:62;-1:-1:-1;;;9797:2:1;9782:18;;9775:32;9839:3;9824:19;;9625:224::o;9854:355::-;10056:2;10038:21;;;10095:2;10075:18;;;10068:30;10134:33;10129:2;10114:18;;10107:61;10200:2;10185:18;;10028:181::o;10214:398::-;10416:2;10398:21;;;10455:2;10435:18;;;10428:30;10494:34;10489:2;10474:18;;10467:62;-1:-1:-1;;;10560:2:1;10545:18;;10538:32;10602:3;10587:19;;10388:224::o;10617:401::-;10819:2;10801:21;;;10858:2;10838:18;;;10831:30;10897:34;10892:2;10877:18;;10870:62;-1:-1:-1;;;10963:2:1;10948:18;;10941:35;11008:3;10993:19;;10791:227::o;11023:177::-;11169:25;;;11157:2;11142:18;;11124:76::o;11205:248::-;11379:25;;;11435:2;11420:18;;11413:34;11367:2;11352:18;;11334:119::o;11458:133::-;-1:-1:-1;;;;;11535:31:1;;11525:42;;11515:2;;11581:1;11578;11571:12
Swarm Source
ipfs://fd75fdeb2db628db0bd9a0cd7d5e415029566d274ebf2a4c27062b07d7fb7d1d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.