Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
InstaVaultUIResolver
Compiler Version
v0.8.6+commit.11564f7e
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;
import "./interface.sol";
import "./helpers.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
contract InstaVaultUIResolver is Helpers {
struct CommonVaultInfo {
address token;
uint8 decimals;
uint256 userBalance;
uint256 userBalanceStETH;
uint256 aaveTokenSupplyRate;
uint256 aaveWETHBorrowRate_;
uint256 totalStEthBal;
uint256 wethDebtAmt;
uint256 userSupplyAmount;
uint256 vaultTVLInAsset;
uint256 availableWithdraw;
uint256 revenueFee;
VaultInterfaceToken.Ratios ratios;
}
/**
* @dev Get all the info
* @notice Get info of all the vaults and the user
*/
function getInfoCommon(address user_, address[] memory vaults_)
public
view
returns (CommonVaultInfo[] memory commonInfo_)
{
uint256 len_ = vaults_.length;
commonInfo_ = new CommonVaultInfo[](vaults_.length);
for (uint256 i = 0; i < len_; i++) {
VaultInterfaceCommon vault_ = VaultInterfaceCommon(vaults_[i]);
IAavePriceOracle aaveOracle_ = IAavePriceOracle(
AAVE_ADDR_PROVIDER.getPriceOracle()
);
uint256 ethPriceInBaseCurrency_ = aaveOracle_.getAssetPrice(
WETH_ADDR
);
if (vaults_[i] == ETH_VAULT_ADDR) {
HelperStruct memory helper_;
VaultInterfaceETH ethVault_ = VaultInterfaceETH(vaults_[i]);
VaultInterfaceETH.Ratios memory ratios_ = ethVault_.ratios();
commonInfo_[i].token = ETH_ADDR;
commonInfo_[i].decimals = 18;
commonInfo_[i].userBalance = user_.balance;
commonInfo_[i].userBalanceStETH = TokenInterface(STETH_ADDR)
.balanceOf(user_);
commonInfo_[i].aaveTokenSupplyRate = 0;
VaultInterfaceETH.BalVariables memory balances_;
(
helper_.stethCollateralAmt,
commonInfo_[i].wethDebtAmt,
balances_,
,
) = ethVault_.netAssets();
commonInfo_[i].totalStEthBal =
helper_.stethCollateralAmt +
balances_.stethDsaBal +
balances_.stethVaultBal;
commonInfo_[i].availableWithdraw = balances_.totalBal;
uint256 currentRatioMax_ = (commonInfo_[i].wethDebtAmt * 1e4) /
helper_.stethCollateralAmt;
uint256 maxLimitThreshold = ratios_.maxLimit - 10; // taking 0.1% margin
if (currentRatioMax_ < maxLimitThreshold) {
commonInfo_[i].availableWithdraw +=
helper_.stethCollateralAmt -
((1e4 * commonInfo_[i].wethDebtAmt) /
maxLimitThreshold);
}
commonInfo_[i].ratios.maxLimit = ratios_.maxLimit;
commonInfo_[i].ratios.minLimit = ratios_.minLimit;
commonInfo_[i].ratios.minLimitGap = ratios_.minLimitGap;
commonInfo_[i].ratios.maxBorrowRate = ratios_.maxBorrowRate;
} else {
VaultInterfaceToken tokenVault_ = VaultInterfaceToken(
vaults_[i]
);
commonInfo_[i].ratios = tokenVault_.ratios();
commonInfo_[i].token = tokenVault_.token();
commonInfo_[i].decimals = vault_.decimals();
commonInfo_[i].userBalance = TokenInterface(
commonInfo_[i].token
).balanceOf(user_);
commonInfo_[i].userBalanceStETH = 0;
(
,
,
,
commonInfo_[i].aaveTokenSupplyRate,
,
,
,
,
,
) = AAVE_DATA.getReserveData(commonInfo_[i].token);
uint256 maxLimitThreshold = (commonInfo_[i].ratios.maxLimit -
100) - 10; // taking 0.1% margin from withdrawLimit
uint256 stethCollateralAmt_;
(
stethCollateralAmt_,
commonInfo_[i].wethDebtAmt,
commonInfo_[i].availableWithdraw
) = getAmounts(
vaults_[i],
commonInfo_[i].decimals,
aaveOracle_.getAssetPrice(commonInfo_[i].token),
ethPriceInBaseCurrency_,
commonInfo_[i].ratios.stEthLimit,
maxLimitThreshold
);
commonInfo_[i].totalStEthBal =
stethCollateralAmt_ +
IERC20(STETH_ADDR).balanceOf(vault_.vaultDsa()) +
IERC20(STETH_ADDR).balanceOf(vaults_[i]);
}
(uint256 exchangePrice, ) = vault_.getCurrentExchangePrice();
commonInfo_[i].userSupplyAmount =
(vault_.balanceOf(user_) * exchangePrice) /
1e18;
(, , , , commonInfo_[i].aaveWETHBorrowRate_, , , , , ) = AAVE_DATA
.getReserveData(WETH_ADDR);
commonInfo_[i].vaultTVLInAsset =
(vault_.totalSupply() * exchangePrice) /
1e18;
commonInfo_[i].revenueFee = vault_.revenueFee();
}
}
struct DeleverageAndWithdrawVars {
uint256 withdrawalFee;
uint256 currentRatioMax;
uint256 currentRatioMin;
uint256 netCollateral;
uint256 netBorrow;
VaultInterfaceETH.BalVariables balances;
uint256 netSupply;
uint256 availableWithdraw;
uint256 maxLimitThreshold;
address tokenAddr;
uint256 tokenCollateralAmt;
uint256 tokenVaultBal;
uint256 tokenDSABal;
uint256 netTokenBal;
uint256 idealTokenBal;
uint256 tokenPriceInBaseCurrency;
uint256 ethPriceInBaseCurrency;
uint256 tokenColInEth;
uint256 tokenSupplyInEth;
uint256 withdrawAmtInEth;
uint256 idealTokenBalInEth;
}
function getDeleverageAndWithdrawData(
address vaultAddr_,
uint256 withdrawAmt_
)
public
view
returns (
address tokenAddr_,
uint256 tokenDecimals_,
uint256 premium,
uint256 tokenPriceInEth_,
uint256 exchangePrice_,
uint256 itokenAmt_,
uint256 deleverageAmtMax_,
uint256 deleverageAmtMin_,
uint256 deleverageAmtTillMinLimit_,
uint256 deleverageAmtTillMaxLimit_
)
{
DeleverageAndWithdrawVars memory v_;
premium = deleverageAndWithdrawWrapper.premium();
v_.withdrawalFee = VaultInterfaceCommon(vaultAddr_).withdrawalFee();
(exchangePrice_, ) = VaultInterfaceCommon(vaultAddr_)
.getCurrentExchangePrice();
itokenAmt_ = (withdrawAmt_ * 1e18) / exchangePrice_;
withdrawAmt_ = withdrawAmt_ - (withdrawAmt_ * v_.withdrawalFee) / 1e4;
(v_.currentRatioMax, v_.currentRatioMin) = getCurrentRatios(vaultAddr_);
tokenDecimals_ = VaultInterfaceCommon(vaultAddr_).decimals();
if (vaultAddr_ == ETH_VAULT_ADDR) {
tokenAddr_ = ETH_ADDR;
tokenPriceInEth_ = 1e18;
VaultInterfaceETH.Ratios memory ratios_ = VaultInterfaceETH(
vaultAddr_
).ratios();
(
v_.netCollateral,
v_.netBorrow,
v_.balances,
v_.netSupply,
) = VaultInterfaceETH(vaultAddr_).netAssets();
v_.availableWithdraw = v_.balances.totalBal;
v_.maxLimitThreshold = ratios_.maxLimit;
if (v_.currentRatioMax < v_.maxLimitThreshold) {
v_.availableWithdraw +=
v_.netCollateral -
((1e4 * v_.netBorrow) / v_.maxLimitThreshold);
}
// using this deleverageAmt_ the max ratio will remain the same
if (withdrawAmt_ > v_.balances.totalBal) {
deleverageAmtMax_ =
(v_.netBorrow * (withdrawAmt_ - v_.balances.totalBal)) /
(v_.netCollateral - v_.netBorrow);
} else deleverageAmtMax_ = 0;
// using this deleverageAmt_ the min ratio will remain the same
deleverageAmtMin_ =
(v_.netBorrow * withdrawAmt_) /
(v_.netSupply - v_.netBorrow);
// using this deleverageAmt_ the max ratio will be taken to maxLimit (unless ideal balance is sufficient)
if (
v_.availableWithdraw <= withdrawAmt_ &&
withdrawAmt_ > v_.balances.totalBal
) {
deleverageAmtTillMaxLimit_ =
((v_.netBorrow * 1e4) -
((ratios_.maxLimit - 10) * // taking 0.1% margin from maxLimit
(v_.netSupply - withdrawAmt_))) /
(1e4 - (ratios_.maxLimit - 10));
} else deleverageAmtTillMaxLimit_ = 0;
// using this deleverageAmt_ the min ratio will be taken to minLimit
if (v_.availableWithdraw <= withdrawAmt_) {
deleverageAmtTillMinLimit_ =
((v_.netBorrow * 1e4) -
(ratios_.minLimit * (v_.netSupply - withdrawAmt_))) /
(1e4 - ratios_.minLimit);
} else deleverageAmtTillMinLimit_ = 0;
} else {
tokenAddr_ = VaultInterfaceToken(vaultAddr_).token();
VaultInterfaceToken.Ratios memory ratios_ = VaultInterfaceToken(
vaultAddr_
).ratios();
v_.tokenAddr = VaultInterfaceToken(vaultAddr_).token();
(
v_.tokenCollateralAmt,
,
,
v_.tokenVaultBal,
v_.tokenDSABal,
v_.netTokenBal
) = VaultInterfaceToken(vaultAddr_).getVaultBalances();
v_.idealTokenBal = v_.tokenVaultBal + v_.tokenDSABal;
IAavePriceOracle aaveOracle_ = IAavePriceOracle(
AAVE_ADDR_PROVIDER.getPriceOracle()
);
v_.tokenPriceInBaseCurrency = aaveOracle_.getAssetPrice(
v_.tokenAddr
);
v_.ethPriceInBaseCurrency = aaveOracle_.getAssetPrice(WETH_ADDR);
tokenPriceInEth_ =
(v_.tokenPriceInBaseCurrency * 1e18) /
v_.ethPriceInBaseCurrency;
v_.tokenColInEth =
(v_.tokenCollateralAmt * tokenPriceInEth_) /
(10**tokenDecimals_);
v_.tokenSupplyInEth =
(v_.netTokenBal * tokenPriceInEth_) /
(10**tokenDecimals_);
v_.withdrawAmtInEth =
(withdrawAmt_ * tokenPriceInEth_) /
(10**tokenDecimals_);
v_.idealTokenBalInEth =
(v_.idealTokenBal * tokenPriceInEth_) /
(10**tokenDecimals_);
// using this deleverageAmt_ the max ratio will remain the same
if (v_.withdrawAmtInEth > v_.idealTokenBalInEth) {
deleverageAmtMax_ =
(v_.currentRatioMax *
(v_.withdrawAmtInEth - v_.idealTokenBalInEth)) /
(10000 - ratios_.stEthLimit);
} else deleverageAmtMax_ = 0;
// using this deleverageAmt_ the min ratio will remain the same
deleverageAmtMin_ =
(v_.currentRatioMin * v_.withdrawAmtInEth) /
(10000 - ratios_.stEthLimit);
v_.availableWithdraw = v_.tokenVaultBal + v_.tokenDSABal;
v_.maxLimitThreshold = ratios_.maxLimit - 100;
if (v_.currentRatioMax < v_.maxLimitThreshold) {
v_.availableWithdraw += (((v_.maxLimitThreshold -
v_.currentRatioMax) * v_.tokenCollateralAmt) /
v_.maxLimitThreshold);
}
// using this deleverageAmt_ the max ratio will be taken to maxLimit (unless ideal balance is sufficient)
if (
v_.availableWithdraw <= withdrawAmt_ &&
withdrawAmt_ > v_.idealTokenBal
) {
deleverageAmtTillMaxLimit_ =
((v_.currentRatioMax * v_.tokenColInEth) -
(ratios_.maxLimit *
(v_.tokenColInEth -
(v_.withdrawAmtInEth -
v_.idealTokenBalInEth)))) /
(10000 - ratios_.stEthLimit);
} else deleverageAmtTillMaxLimit_ = 0;
// using this deleverageAmt_ the min ratio will be taken to minLimit
if (v_.availableWithdraw <= withdrawAmt_) {
deleverageAmtTillMinLimit_ =
((v_.currentRatioMin * v_.tokenSupplyInEth) -
(ratios_.minLimit *
(v_.tokenSupplyInEth - v_.withdrawAmtInEth))) /
(10000 - ratios_.stEthLimit);
} else deleverageAmtTillMinLimit_ = 0;
}
}
}//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;
interface IAaveAddressProvider {
function getPriceOracle() external view returns (address);
}
interface IAavePriceOracle {
function getAssetPrice(address _asset) external view returns (uint256);
}
interface IAaveDataprovider {
function getReserveData(address asset)
external
view
returns (
uint256,
uint256,
uint256,
uint256,
uint256,
uint256,
uint256,
uint256,
uint256,
uint40
);
}
interface TokenInterface {
function approve(address, uint256) external;
function transfer(address, uint256) external;
function transferFrom(
address,
address,
uint256
) external;
function deposit() external payable;
function withdraw(uint256) external;
function balanceOf(address) external view returns (uint256);
function decimals() external view returns (uint256);
function totalSupply() external view returns (uint256);
}
interface VaultInterfaceETH {
struct BalVariables {
uint256 wethVaultBal;
uint256 wethDsaBal;
uint256 stethVaultBal;
uint256 stethDsaBal;
uint256 totalBal;
}
function netAssets()
external
view
returns (
uint256 netCollateral_,
uint256 netBorrow_,
BalVariables memory balances_,
uint256 netSupply_,
uint256 netBal_
);
struct Ratios {
uint16 maxLimit;
uint16 minLimit;
uint16 minLimitGap;
uint128 maxBorrowRate;
}
function ratios() external view returns (Ratios memory);
}
interface VaultInterfaceToken {
struct Ratios {
uint16 maxLimit;
uint16 maxLimitGap;
uint16 minLimit;
uint16 minLimitGap;
uint16 stEthLimit;
uint128 maxBorrowRate;
}
function ratios() external view returns (Ratios memory);
function token() external view returns (address);
function idealExcessAmt() external view returns (uint256);
function getVaultBalances()
external
view
returns (
uint256 tokenCollateralAmt_,
uint256 stethCollateralAmt_,
uint256 wethDebtAmt_,
uint256 tokenVaultBal_,
uint256 tokenDSABal_,
uint256 netTokenBal_
);
}
interface VaultInterfaceCommon {
function decimals() external view returns (uint8);
function balanceOf(address account) external view returns (uint256);
function getCurrentExchangePrice()
external
view
returns (uint256 exchangePrice_, uint256 newRevenue_);
function vaultDsa() external view returns (address);
function totalSupply() external view returns (uint256);
function revenueFee() external view returns (uint256);
function withdrawalFee() external view returns (uint256);
}
interface InstaDeleverageAndWithdrawWrapper {
function premium() external view returns (uint256);
}//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;
import "./interface.sol";
contract Helpers {
IAaveAddressProvider internal constant AAVE_ADDR_PROVIDER =
IAaveAddressProvider(0xB53C1a33016B2DC2fF3653530bfF1848a515c8c5);
IAaveDataprovider internal constant AAVE_DATA =
IAaveDataprovider(0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d);
InstaDeleverageAndWithdrawWrapper
internal constant deleverageAndWithdrawWrapper =
InstaDeleverageAndWithdrawWrapper(
0xA6978cBA39f86491Ae5dcA53f4cdeFCB100E3E3d
);
address internal constant ETH_ADDR =
0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
address internal constant WETH_ADDR =
0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
address internal constant STETH_ADDR =
0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84;
address internal constant ETH_VAULT_ADDR =
0xc383a3833A87009fD9597F8184979AF5eDFad019;
struct BalVariables {
uint256 wethVaultBal;
uint256 wethDsaBal;
uint256 stethVaultBal;
uint256 stethDsaBal;
uint256 totalBal;
}
struct HelperStruct {
uint256 stethCollateralAmt;
uint256 tokenVaultBal;
uint256 tokenDSABal;
uint256 netTokenBal;
uint256 tokenCollateralAmt;
}
/**
* @dev Helper function
* @notice Helper function for calculating amounts
*/
function getAmounts(
address vaultAddr_,
uint256 decimals_,
uint256 tokenPriceInBaseCurrency_,
uint256 ethPriceInBaseCurrency_,
uint256 stEthLimit_,
uint256 maxLimitThreshold_
)
internal
view
returns (
uint256 stethCollateralAmt,
uint256 wethDebtAmt,
uint256 availableWithdraw
)
{
VaultInterfaceToken tokenVault_ = VaultInterfaceToken(vaultAddr_);
HelperStruct memory helper_;
(
helper_.tokenCollateralAmt,
stethCollateralAmt,
wethDebtAmt,
helper_.tokenVaultBal,
helper_.tokenDSABal,
helper_.netTokenBal
) = tokenVault_.getVaultBalances();
uint256 tokenPriceInEth = (tokenPriceInBaseCurrency_ * 1e18) /
ethPriceInBaseCurrency_;
uint256 tokenColInEth_ = (helper_.tokenCollateralAmt *
tokenPriceInEth) / (10**decimals_);
uint256 ethCoveringDebt_ = (stethCollateralAmt * stEthLimit_) / 10000;
uint256 excessDebt_ = (ethCoveringDebt_ < wethDebtAmt)
? wethDebtAmt - ethCoveringDebt_
: 0;
uint256 currentRatioMax = tokenColInEth_ == 0
? 0
: (excessDebt_ * 10000) / tokenColInEth_;
availableWithdraw = helper_.tokenVaultBal + helper_.tokenDSABal;
if (currentRatioMax < maxLimitThreshold_) {
availableWithdraw += (((maxLimitThreshold_ - currentRatioMax) *
helper_.tokenCollateralAmt) / maxLimitThreshold_);
}
}
struct CurrentRatioVars {
uint256 netCollateral;
uint256 netBorrow;
uint256 netSupply;
address tokenAddr;
uint256 tokenDecimals;
uint256 tokenColAmt;
uint256 stethColAmt;
uint256 wethDebt;
uint256 netTokenBal;
uint256 ethCoveringDebt;
uint256 excessDebt;
uint256 tokenPriceInBaseCurrency;
uint256 ethPriceInBaseCurrency;
uint256 excessDebtInBaseCurrency;
uint256 netTokenColInBaseCurrency;
uint256 netTokenSupplyInBaseCurrency;
}
function getCurrentRatios(address vaultAddr_)
public
view
returns (uint256 currentRatioMax_, uint256 currentRatioMin_)
{
CurrentRatioVars memory v_;
if (vaultAddr_ == ETH_VAULT_ADDR) {
(
v_.netCollateral,
v_.netBorrow,
,
v_.netSupply,
) = VaultInterfaceETH(vaultAddr_).netAssets();
currentRatioMax_ = (v_.netBorrow * 1e4) / v_.netCollateral;
currentRatioMin_ = (v_.netBorrow * 1e4) / v_.netSupply;
} else {
VaultInterfaceToken vault_ = VaultInterfaceToken(vaultAddr_);
v_.tokenAddr = vault_.token();
v_.tokenDecimals = VaultInterfaceCommon(vaultAddr_).decimals();
(
v_.tokenColAmt,
v_.stethColAmt,
v_.wethDebt,
,
,
v_.netTokenBal
) = vault_.getVaultBalances();
VaultInterfaceToken.Ratios memory ratios_ = vault_.ratios();
v_.ethCoveringDebt = (v_.stethColAmt * ratios_.stEthLimit) / 10000;
v_.excessDebt = v_.ethCoveringDebt < v_.wethDebt
? v_.wethDebt - v_.ethCoveringDebt
: 0;
IAavePriceOracle aaveOracle_ = IAavePriceOracle(
AAVE_ADDR_PROVIDER.getPriceOracle()
);
v_.tokenPriceInBaseCurrency = aaveOracle_.getAssetPrice(
v_.tokenAddr
);
v_.ethPriceInBaseCurrency = aaveOracle_.getAssetPrice(WETH_ADDR);
v_.excessDebtInBaseCurrency =
(v_.excessDebt * v_.ethPriceInBaseCurrency) /
1e18;
v_.netTokenColInBaseCurrency =
(v_.tokenColAmt * v_.tokenPriceInBaseCurrency) /
(10**v_.tokenDecimals);
v_.netTokenSupplyInBaseCurrency =
(v_.netTokenBal * v_.tokenPriceInBaseCurrency) /
(10**v_.tokenDecimals);
currentRatioMax_ =
(v_.excessDebtInBaseCurrency * 10000) /
v_.netTokenColInBaseCurrency;
currentRatioMin_ =
(v_.excessDebtInBaseCurrency * 10000) /
v_.netTokenSupplyInBaseCurrency;
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"vaultAddr_","type":"address"}],"name":"getCurrentRatios","outputs":[{"internalType":"uint256","name":"currentRatioMax_","type":"uint256"},{"internalType":"uint256","name":"currentRatioMin_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vaultAddr_","type":"address"},{"internalType":"uint256","name":"withdrawAmt_","type":"uint256"}],"name":"getDeleverageAndWithdrawData","outputs":[{"internalType":"address","name":"tokenAddr_","type":"address"},{"internalType":"uint256","name":"tokenDecimals_","type":"uint256"},{"internalType":"uint256","name":"premium","type":"uint256"},{"internalType":"uint256","name":"tokenPriceInEth_","type":"uint256"},{"internalType":"uint256","name":"exchangePrice_","type":"uint256"},{"internalType":"uint256","name":"itokenAmt_","type":"uint256"},{"internalType":"uint256","name":"deleverageAmtMax_","type":"uint256"},{"internalType":"uint256","name":"deleverageAmtMin_","type":"uint256"},{"internalType":"uint256","name":"deleverageAmtTillMinLimit_","type":"uint256"},{"internalType":"uint256","name":"deleverageAmtTillMaxLimit_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user_","type":"address"},{"internalType":"address[]","name":"vaults_","type":"address[]"}],"name":"getInfoCommon","outputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint256","name":"userBalance","type":"uint256"},{"internalType":"uint256","name":"userBalanceStETH","type":"uint256"},{"internalType":"uint256","name":"aaveTokenSupplyRate","type":"uint256"},{"internalType":"uint256","name":"aaveWETHBorrowRate_","type":"uint256"},{"internalType":"uint256","name":"totalStEthBal","type":"uint256"},{"internalType":"uint256","name":"wethDebtAmt","type":"uint256"},{"internalType":"uint256","name":"userSupplyAmount","type":"uint256"},{"internalType":"uint256","name":"vaultTVLInAsset","type":"uint256"},{"internalType":"uint256","name":"availableWithdraw","type":"uint256"},{"internalType":"uint256","name":"revenueFee","type":"uint256"},{"components":[{"internalType":"uint16","name":"maxLimit","type":"uint16"},{"internalType":"uint16","name":"maxLimitGap","type":"uint16"},{"internalType":"uint16","name":"minLimit","type":"uint16"},{"internalType":"uint16","name":"minLimitGap","type":"uint16"},{"internalType":"uint16","name":"stEthLimit","type":"uint16"},{"internalType":"uint128","name":"maxBorrowRate","type":"uint128"}],"internalType":"struct VaultInterfaceToken.Ratios","name":"ratios","type":"tuple"}],"internalType":"struct InstaVaultUIResolver.CommonVaultInfo[]","name":"commonInfo_","type":"tuple[]"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b5061312b806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806328327584146100465780639bdbd7f71461006f578063c691d6dc146100d6575b600080fd5b6100596100543660046129b2565b6100fe565b6040516100669190612d87565b60405180910390f35b61008261007d366004612a80565b6112d5565b604080516001600160a01b03909b168b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e084015261010083015261012082015261014001610066565b6100e96100e4366004612971565b611f5e565b60408051928352602083019190915201610066565b80516060908067ffffffffffffffff81111561011c5761011c6130c7565b60405190808252806020026020018201604052801561015557816020015b6101426127a3565b81526020019060019003908161013a5790505b50915060005b818110156112cd576000848281518110610177576101776130b1565b60200260200101519050600073b53c1a33016b2dc2ff3653530bff1848a515c8c56001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b1580156101d057600080fd5b505afa1580156101e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102089190612995565b60405163b3596f0760e01b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260048201529091506000906001600160a01b0383169063b3596f079060240160206040518083038186803b15801561026157600080fd5b505afa158015610275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102999190612bc8565b905073c383a3833a87009fd9597f8184979af5edfad0196001600160a01b03168785815181106102cb576102cb6130b1565b60200260200101516001600160a01b0316141561081e576103146040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6000888681518110610328576103286130b1565b602002602001015190506000816001600160a01b031663cf6d625e6040518163ffffffff1660e01b815260040160806040518083038186803b15801561036d57600080fd5b505afa158015610381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a59190612aac565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8988815181106103ce576103ce6130b1565b6020026020010151600001906001600160a01b031690816001600160a01b0316815250506012898881518110610406576104066130b1565b60200260200101516020019060ff16908160ff16815250508a6001600160a01b03163189888151811061043b5761043b6130b1565b6020908102919091010151604090810191909152516370a0823160e01b81526001600160a01b038c16600482015273ae7ab96520de3a18e5e111b5eaab095312d7fe84906370a082319060240160206040518083038186803b1580156104a057600080fd5b505afa1580156104b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d89190612bc8565b8988815181106104ea576104ea6130b1565b60200260200101516060018181525050600089888151811061050e5761050e6130b1565b602002602001015160800181815250506105506040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b826001600160a01b0316630782d4216040518163ffffffff1660e01b81526004016101206040518083038186803b15801561058a57600080fd5b505afa15801561059e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c29190612c05565b905050866000018d8c815181106105db576105db6130b1565b602002602001015160e001829550838152508381525050505080604001518160600151856000015161060d9190612f00565b6106179190612f00565b8a8981518110610629576106296130b1565b602002602001015160c001818152505080608001518a8981518110610650576106506130b1565b6020026020010151610140018181525050600084600001518b8a8151811061067a5761067a6130b1565b602002602001015160e001516127106106939190613027565b61069d9190612f18565b90506000600a84600001516106b29190613046565b61ffff1690508082101561073157808c8b815181106106d3576106d36130b1565b602002602001015160e001516127106106ec9190613027565b6106f69190612f18565b86516107029190613069565b8c8b81518110610714576107146130b1565b60200260200101516101400181815161072d9190612f00565b9052505b83600001518c8b81518110610748576107486130b1565b602002602001015161018001516000019061ffff16908161ffff168152505083602001518c8b8151811061077e5761077e6130b1565b602002602001015161018001516040019061ffff16908161ffff168152505083604001518c8b815181106107b4576107b46130b1565b602002602001015161018001516060019061ffff16908161ffff168152505083606001518c8b815181106107ea576107ea6130b1565b6020026020010151610180015160a001906001600160801b031690816001600160801b031681525050505050505050610f75565b6000878581518110610832576108326130b1565b60200260200101519050806001600160a01b031663cf6d625e6040518163ffffffff1660e01b815260040160c06040518083038186803b15801561087557600080fd5b505afa158015610889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ad9190612b29565b8786815181106108bf576108bf6130b1565b60200260200101516101800181905250806001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561090857600080fd5b505afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109409190612995565b878681518110610952576109526130b1565b6020026020010151600001906001600160a01b031690816001600160a01b031681525050836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156109af57600080fd5b505afa1580156109c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e79190612d64565b8786815181106109f9576109f96130b1565b60200260200101516020019060ff16908160ff1681525050868581518110610a2357610a236130b1565b6020908102919091010151516040516370a0823160e01b81526001600160a01b038b81166004830152909116906370a082319060240160206040518083038186803b158015610a7157600080fd5b505afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa99190612bc8565b878681518110610abb57610abb6130b1565b602002602001015160400181815250506000878681518110610adf57610adf6130b1565b6020026020010151606001818152505073057835ad21a177dbdd3090bb1cae03eacf78fc6d6001600160a01b03166335ea6a75888781518110610b2457610b246130b1565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024016101406040518083038186803b158015610b7057600080fd5b505afa158015610b84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba89190612cdb565b50508e519497508e96508c955050509183109150610bca905057610bca6130b1565b602002602001015160800181815250506000600a6064898881518110610bf257610bf26130b1565b6020026020010151610180015160000151610c0d9190613046565b610c179190613046565b61ffff1690506000610d2f8a8881518110610c3457610c346130b1565b60200260200101518a8981518110610c4e57610c4e6130b1565b60200260200101516020015160ff16876001600160a01b031663b3596f078d8c81518110610c7e57610c7e6130b1565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015610cc957600080fd5b505afa158015610cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d019190612bc8565b878d8c81518110610d1457610d146130b1565b602002602001015161018001516080015161ffff16876125cf565b8b8a81518110610d4157610d416130b1565b602002602001015160e0018c8b81518110610d5e57610d5e6130b1565b602002602001015161014001828152508281525082935050505073ae7ab96520de3a18e5e111b5eaab095312d7fe846001600160a01b03166370a082318b8981518110610dad57610dad6130b1565b60200260200101516040518263ffffffff1660e01b8152600401610de091906001600160a01b0391909116815260200190565b60206040518083038186803b158015610df857600080fd5b505afa158015610e0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e309190612bc8565b73ae7ab96520de3a18e5e111b5eaab095312d7fe846001600160a01b03166370a08231886001600160a01b031663dc9356986040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec49190612995565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015610f0357600080fd5b505afa158015610f17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3b9190612bc8565b610f459083612f00565b610f4f9190612f00565b898881518110610f6157610f616130b1565b602002602001015160c00181815250505050505b6000836001600160a01b031663cc4a01586040518163ffffffff1660e01b8152600401604080518083038186803b158015610faf57600080fd5b505afa158015610fc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe79190612be1565b506040516370a0823160e01b81526001600160a01b038b81166004830152919250670de0b6b3a7640000918391908716906370a082319060240160206040518083038186803b15801561103957600080fd5b505afa15801561104d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110719190612bc8565b61107b9190613027565b6110859190612f18565b878681518110611097576110976130b1565b602090810291909101015161010001526040516335ea6a7560e01b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600482015273057835ad21a177dbdd3090bb1cae03eacf78fc6d906335ea6a75906024016101406040518083038186803b15801561110657600080fd5b505afa15801561111a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113e9190612cdb565b50508e519397508e96508c9550505090831091506111609050576111606130b1565b602002602001015160a0018181525050670de0b6b3a764000081856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111b357600080fd5b505afa1580156111c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111eb9190612bc8565b6111f59190613027565b6111ff9190612f18565b878681518110611211576112116130b1565b6020026020010151610120018181525050836001600160a01b03166336e4ec646040518163ffffffff1660e01b815260040160206040518083038186803b15801561125b57600080fd5b505afa15801561126f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112939190612bc8565b8786815181106112a5576112a56130b1565b60200260200101516101600181815250505050505080806112c590613080565b91505061015b565b505092915050565b6000806000806000806000806000806112ec61286a565b73a6978cba39f86491ae5dca53f4cdefcb100e3e3d6001600160a01b031663e0a73a936040518163ffffffff1660e01b815260040160206040518083038186803b15801561133957600080fd5b505afa15801561134d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113719190612bc8565b98508c6001600160a01b0316638bc7e8c46040518163ffffffff1660e01b815260040160206040518083038186803b1580156113ac57600080fd5b505afa1580156113c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e49190612bc8565b8160000181815250508c6001600160a01b031663cc4a01586040518163ffffffff1660e01b8152600401604080518083038186803b15801561142557600080fd5b505afa158015611439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145d9190612be1565b509650866114738d670de0b6b3a7640000613027565b61147d9190612f18565b815190965061271090611490908e613027565b61149a9190612f18565b6114a4908d613069565b9b506114af8d611f5e565b8260200183604001828152508281525050508c6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156114fa57600080fd5b505afa15801561150e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115329190612d64565b60ff1699506001600160a01b038d1673c383a3833a87009fd9597f8184979af5edfad01914156118895773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9a50670de0b6b3a7640000975060008d6001600160a01b031663cf6d625e6040518163ffffffff1660e01b815260040160806040518083038186803b1580156115b957600080fd5b505afa1580156115cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f19190612aac565b90508d6001600160a01b0316630782d4216040518163ffffffff1660e01b81526004016101206040518083038186803b15801561162d57600080fd5b505afa158015611641573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116659190612c05565b5060c086015260a085018190526080808601929092526060850192909252015160e0830152805161ffff166101008301819052602083015110156116e85761010082015160808301516116ba90612710613027565b6116c49190612f18565b82606001516116d39190613069565b8260e0018181516116e49190612f00565b9052505b8160a00151608001518d111561173f578160800151826060015161170c9190613069565b60a08301516080015161171f908f613069565b836080015161172e9190613027565b6117389190612f18565b9550611744565b600095505b81608001518260c001516117589190613069565b8d83608001516117689190613027565b6117729190612f18565b94508c8260e001511115801561178f57508160a00151608001518d115b1561180a5780516117a290600a90613046565b6117ae90612710613046565b61ffff168d8360c001516117c29190613069565b82516117d090600a90613046565b61ffff166117de9190613027565b60808401516117ef90612710613027565b6117f99190613069565b6118039190612f18565b925061180f565b600092505b8c8260e001511161187e57602081015161182b90612710613046565b61ffff168d8360c0015161183f9190613069565b826020015161ffff166118529190613027565b608084015161186390612710613027565b61186d9190613069565b6118779190612f18565b9350611883565b600093505b50611f4e565b8c6001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118c257600080fd5b505afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa9190612995565b9a5060008d6001600160a01b031663cf6d625e6040518163ffffffff1660e01b815260040160c06040518083038186803b15801561193757600080fd5b505afa15801561194b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196f9190612b29565b90508d6001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156119aa57600080fd5b505afa1580156119be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e29190612995565b8261012001906001600160a01b031690816001600160a01b0316815250508d6001600160a01b031663223706856040518163ffffffff1660e01b815260040160c06040518083038186803b158015611a3957600080fd5b505afa158015611a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a719190612c91565b6101a088015261018087018190526101608701829052610140870194909452611a9d9392509050612f00565b826101c0018181525050600073b53c1a33016b2dc2ff3653530bff1848a515c8c56001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b158015611af657600080fd5b505afa158015611b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2e9190612995565b61012084015160405163b3596f0760e01b81526001600160a01b03918216600482015291925082169063b3596f079060240160206040518083038186803b158015611b7857600080fd5b505afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb09190612bc8565b6101e084015260405163b3596f0760e01b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260048201526001600160a01b0382169063b3596f079060240160206040518083038186803b158015611c0957600080fd5b505afa158015611c1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c419190612bc8565b61020084018190526101e0840151611c6190670de0b6b3a7640000613027565b611c6b9190612f18565b9950611c788c600a612f7d565b8a846101400151611c899190613027565b611c939190612f18565b610220840152611ca48c600a612f7d565b8a846101a00151611cb59190613027565b611cbf9190612f18565b610240840152611cd08c600a612f7d565b8a8f611cdc9190613027565b611ce69190612f18565b610260840152611cf78c600a612f7d565b8a846101c00151611d089190613027565b611d129190612f18565b61028084018190526102608401511115611d71576080820151611d3790612710613046565b61ffff16836102800151846102600151611d519190613069565b8460200151611d609190613027565b611d6a9190612f18565b9650611d76565b600096505b6080820151611d8790612710613046565b61ffff168361026001518460400151611da09190613027565b611daa9190612f18565b9550826101800151836101600151611dc29190612f00565b60e08401528151611dd590606490613046565b61ffff16610100840181905260208401511015611e30576101008301516101408401516020850151611e079083613069565b611e119190613027565b611e1b9190612f18565b8360e001818151611e2c9190612f00565b9052505b8d8360e0015111158015611e485750826101c001518e115b15611ec8576080820151611e5e90612710613046565b61ffff16836102800151846102600151611e789190613069565b846102200151611e889190613069565b8351611e98919061ffff16613027565b8461022001518560200151611ead9190613027565b611eb79190613069565b611ec19190612f18565b9350611ecd565b600093505b8d8360e0015111611f46576080820151611ee990612710613046565b61ffff16836102600151846102400151611f039190613069565b836040015161ffff16611f169190613027565b8461024001518560400151611f2b9190613027565b611f359190613069565b611f3f9190612f18565b9450611f4b565b600094505b50505b509295989b9194979a5092959850565b600080611fea60405180610200016040528060008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b03841673c383a3833a87009fd9597f8184979af5edfad01914156120d257836001600160a01b0316630782d4216040518163ffffffff1660e01b81526004016101206040518083038186803b15801561204957600080fd5b505afa15801561205d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120819190612c05565b506040850152506020830181905281835261209e90612710613027565b6120a89190612f18565b9250806040015181602001516127106120c19190613027565b6120cb9190612f18565b91506125c9565b6000849050806001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561211057600080fd5b505afa158015612124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121489190612995565b82606001906001600160a01b031690816001600160a01b031681525050846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561219e57600080fd5b505afa1580156121b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d69190612d64565b60ff16826080018181525050806001600160a01b031663223706856040518163ffffffff1660e01b815260040160c06040518083038186803b15801561221b57600080fd5b505afa15801561222f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122539190612c91565b610100880152505060e085015260c08085019190915260a0840191909152604080516367b6b12f60e11b815290516000926001600160a01b0385169263cf6d625e9260048083019392829003018186803b1580156122b057600080fd5b505afa1580156122c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e89190612b29565b9050612710816080015161ffff168460c001516123059190613027565b61230f9190612f18565b610120840181905260e08401511161232857600061233d565b8261012001518360e0015161233d9190613069565b83610140018181525050600073b53c1a33016b2dc2ff3653530bff1848a515c8c56001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b15801561239657600080fd5b505afa1580156123aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ce9190612995565b606085015160405163b3596f0760e01b81526001600160a01b03918216600482015291925082169063b3596f079060240160206040518083038186803b15801561241757600080fd5b505afa15801561242b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244f9190612bc8565b61016085015260405163b3596f0760e01b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260048201526001600160a01b0382169063b3596f079060240160206040518083038186803b1580156124a857600080fd5b505afa1580156124bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e09190612bc8565b6101808501819052610140850151670de0b6b3a76400009161250191613027565b61250b9190612f18565b6101a0850152608084015161252190600a612f7d565b8461016001518560a001516125369190613027565b6125409190612f18565b6101c0850152608084015161255690600a612f7d565b84610160015185610100015161256c9190613027565b6125769190612f18565b6101e08501526101c08401516101a085015161259490612710613027565b61259e9190612f18565b9550836101e00151846101a001516127106125b99190613027565b6125c39190612f18565b94505050505b50915091565b60008060008089905061260a6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b816001600160a01b031663223706856040518163ffffffff1660e01b815260040160c06040518083038186803b15801561264357600080fd5b505afa158015612657573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267b9190612c91565b6060870152604086015260208501526080840192909252955093506000886126ab8b670de0b6b3a7640000613027565b6126b59190612f18565b905060006126c48c600a612f7d565b8284608001516126d49190613027565b6126de9190612f18565b905060006127106126ef8b8a613027565b6126f99190612f18565b9050600087821061270b576000612715565b6127158289613069565b90506000831561273b578361272c83612710613027565b6127369190612f18565b61273e565b60005b9050856040015186602001516127549190612f00565b97508a8110156127905760808601518b9061276f8383613069565b6127799190613027565b6127839190612f18565b61278d9089612f00565b97505b5050505050505096509650969350505050565b604051806101a0016040528060006001600160a01b03168152602001600060ff168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016128656040518060c00160405280600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff16815260200160006001600160801b031681525090565b905290565b604051806102a0016040528060008152602001600081526020016000815260200160008152602001600081526020016128cb6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80516001600160801b038116811461295a57600080fd5b919050565b805161ffff8116811461295a57600080fd5b60006020828403121561298357600080fd5b813561298e816130dd565b9392505050565b6000602082840312156129a757600080fd5b815161298e816130dd565b600080604083850312156129c557600080fd5b82356129d0816130dd565b915060208381013567ffffffffffffffff808211156129ee57600080fd5b818601915086601f830112612a0257600080fd5b813581811115612a1457612a146130c7565b8060051b9150612a25848301612ecf565b8181528481019084860184860187018b1015612a4057600080fd5b600095505b83861015612a6f5780359450612a5a856130dd565b84835260019590950194918601918601612a45565b508096505050505050509250929050565b60008060408385031215612a9357600080fd5b8235612a9e816130dd565b946020939093013593505050565b600060808284031215612abe57600080fd5b6040516080810181811067ffffffffffffffff82111715612ae157612ae16130c7565b604052612aed8361295f565b8152612afb6020840161295f565b6020820152612b0c6040840161295f565b6040820152612b1d60608401612943565b60608201529392505050565b600060c08284031215612b3b57600080fd5b60405160c0810181811067ffffffffffffffff82111715612b5e57612b5e6130c7565b604052612b6a8361295f565b8152612b786020840161295f565b6020820152612b896040840161295f565b6040820152612b9a6060840161295f565b6060820152612bab6080840161295f565b6080820152612bbc60a08401612943565b60a08201529392505050565b600060208284031215612bda57600080fd5b5051919050565b60008060408385031215612bf457600080fd5b505080516020909101519092909150565b6000806000806000858703610120811215612c1f57600080fd5b865195506020870151945060a0603f1982011215612c3c57600080fd5b50612c45612ea6565b60408701518152606087015160208201526080870151604082015260a0870151606082015260c087015160808201528093505060e0860151915061010086015190509295509295909350565b60008060008060008060c08789031215612caa57600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b6000806000806000806000806000806101408b8d031215612cfb57600080fd5b8a51995060208b0151985060408b0151975060608b0151965060808b0151955060a08b0151945060c08b0151935060e08b015192506101008b015191506101208b015164ffffffffff81168114612d5157600080fd5b809150509295989b9194979a5092959850565b600060208284031215612d7657600080fd5b815160ff8116811461298e57600080fd5b602080825282518282018190526000919060409081850190868401855b82811015612e9957815180516001600160a01b031685528681015160ff16878601528581015186860152606080820151818701526080808301518188015260a0808401518189015260c0808501519089015260e08085015190890152610100808501519089015261012080850151908901526101408085015190890152610160808501519089015261018093840151805161ffff908116958a0195909552602081015185166101a08a0152604081015185166101c08a01529283015184166101e08901529082015190921661020087015201516001600160801b03166102208501526102409093019290850190600101612da4565b5091979650505050505050565b60405160a0810167ffffffffffffffff81118282101715612ec957612ec96130c7565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612ef857612ef86130c7565b604052919050565b60008219821115612f1357612f1361309b565b500190565b600082612f3557634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115612f75578160001904821115612f5b57612f5b61309b565b80851615612f6857918102915b93841c9390800290612f3f565b509250929050565b600061298e8383600082612f9357506001613021565b81612fa057506000613021565b8160018114612fb65760028114612fc057612fdc565b6001915050613021565b60ff841115612fd157612fd161309b565b50506001821b613021565b5060208310610133831016604e8410600b8410161715612fff575081810a613021565b6130098383612f3a565b806000190482111561301d5761301d61309b565b0290505b92915050565b60008160001904831182151516156130415761304161309b565b500290565b600061ffff838116908316818110156130615761306161309b565b039392505050565b60008282101561307b5761307b61309b565b500390565b60006000198214156130945761309461309b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146130f257600080fd5b5056fea2646970667358221220fc933c5c82748dd57fab68bd06e885a6ac92ee47ea61bfed35f0e867ae67726564736f6c63430008060033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100415760003560e01c806328327584146100465780639bdbd7f71461006f578063c691d6dc146100d6575b600080fd5b6100596100543660046129b2565b6100fe565b6040516100669190612d87565b60405180910390f35b61008261007d366004612a80565b6112d5565b604080516001600160a01b03909b168b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e084015261010083015261012082015261014001610066565b6100e96100e4366004612971565b611f5e565b60408051928352602083019190915201610066565b80516060908067ffffffffffffffff81111561011c5761011c6130c7565b60405190808252806020026020018201604052801561015557816020015b6101426127a3565b81526020019060019003908161013a5790505b50915060005b818110156112cd576000848281518110610177576101776130b1565b60200260200101519050600073b53c1a33016b2dc2ff3653530bff1848a515c8c56001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b1580156101d057600080fd5b505afa1580156101e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102089190612995565b60405163b3596f0760e01b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260048201529091506000906001600160a01b0383169063b3596f079060240160206040518083038186803b15801561026157600080fd5b505afa158015610275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102999190612bc8565b905073c383a3833a87009fd9597f8184979af5edfad0196001600160a01b03168785815181106102cb576102cb6130b1565b60200260200101516001600160a01b0316141561081e576103146040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6000888681518110610328576103286130b1565b602002602001015190506000816001600160a01b031663cf6d625e6040518163ffffffff1660e01b815260040160806040518083038186803b15801561036d57600080fd5b505afa158015610381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a59190612aac565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8988815181106103ce576103ce6130b1565b6020026020010151600001906001600160a01b031690816001600160a01b0316815250506012898881518110610406576104066130b1565b60200260200101516020019060ff16908160ff16815250508a6001600160a01b03163189888151811061043b5761043b6130b1565b6020908102919091010151604090810191909152516370a0823160e01b81526001600160a01b038c16600482015273ae7ab96520de3a18e5e111b5eaab095312d7fe84906370a082319060240160206040518083038186803b1580156104a057600080fd5b505afa1580156104b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d89190612bc8565b8988815181106104ea576104ea6130b1565b60200260200101516060018181525050600089888151811061050e5761050e6130b1565b602002602001015160800181815250506105506040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b826001600160a01b0316630782d4216040518163ffffffff1660e01b81526004016101206040518083038186803b15801561058a57600080fd5b505afa15801561059e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c29190612c05565b905050866000018d8c815181106105db576105db6130b1565b602002602001015160e001829550838152508381525050505080604001518160600151856000015161060d9190612f00565b6106179190612f00565b8a8981518110610629576106296130b1565b602002602001015160c001818152505080608001518a8981518110610650576106506130b1565b6020026020010151610140018181525050600084600001518b8a8151811061067a5761067a6130b1565b602002602001015160e001516127106106939190613027565b61069d9190612f18565b90506000600a84600001516106b29190613046565b61ffff1690508082101561073157808c8b815181106106d3576106d36130b1565b602002602001015160e001516127106106ec9190613027565b6106f69190612f18565b86516107029190613069565b8c8b81518110610714576107146130b1565b60200260200101516101400181815161072d9190612f00565b9052505b83600001518c8b81518110610748576107486130b1565b602002602001015161018001516000019061ffff16908161ffff168152505083602001518c8b8151811061077e5761077e6130b1565b602002602001015161018001516040019061ffff16908161ffff168152505083604001518c8b815181106107b4576107b46130b1565b602002602001015161018001516060019061ffff16908161ffff168152505083606001518c8b815181106107ea576107ea6130b1565b6020026020010151610180015160a001906001600160801b031690816001600160801b031681525050505050505050610f75565b6000878581518110610832576108326130b1565b60200260200101519050806001600160a01b031663cf6d625e6040518163ffffffff1660e01b815260040160c06040518083038186803b15801561087557600080fd5b505afa158015610889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ad9190612b29565b8786815181106108bf576108bf6130b1565b60200260200101516101800181905250806001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561090857600080fd5b505afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109409190612995565b878681518110610952576109526130b1565b6020026020010151600001906001600160a01b031690816001600160a01b031681525050836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156109af57600080fd5b505afa1580156109c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e79190612d64565b8786815181106109f9576109f96130b1565b60200260200101516020019060ff16908160ff1681525050868581518110610a2357610a236130b1565b6020908102919091010151516040516370a0823160e01b81526001600160a01b038b81166004830152909116906370a082319060240160206040518083038186803b158015610a7157600080fd5b505afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa99190612bc8565b878681518110610abb57610abb6130b1565b602002602001015160400181815250506000878681518110610adf57610adf6130b1565b6020026020010151606001818152505073057835ad21a177dbdd3090bb1cae03eacf78fc6d6001600160a01b03166335ea6a75888781518110610b2457610b246130b1565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024016101406040518083038186803b158015610b7057600080fd5b505afa158015610b84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba89190612cdb565b50508e519497508e96508c955050509183109150610bca905057610bca6130b1565b602002602001015160800181815250506000600a6064898881518110610bf257610bf26130b1565b6020026020010151610180015160000151610c0d9190613046565b610c179190613046565b61ffff1690506000610d2f8a8881518110610c3457610c346130b1565b60200260200101518a8981518110610c4e57610c4e6130b1565b60200260200101516020015160ff16876001600160a01b031663b3596f078d8c81518110610c7e57610c7e6130b1565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015610cc957600080fd5b505afa158015610cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d019190612bc8565b878d8c81518110610d1457610d146130b1565b602002602001015161018001516080015161ffff16876125cf565b8b8a81518110610d4157610d416130b1565b602002602001015160e0018c8b81518110610d5e57610d5e6130b1565b602002602001015161014001828152508281525082935050505073ae7ab96520de3a18e5e111b5eaab095312d7fe846001600160a01b03166370a082318b8981518110610dad57610dad6130b1565b60200260200101516040518263ffffffff1660e01b8152600401610de091906001600160a01b0391909116815260200190565b60206040518083038186803b158015610df857600080fd5b505afa158015610e0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e309190612bc8565b73ae7ab96520de3a18e5e111b5eaab095312d7fe846001600160a01b03166370a08231886001600160a01b031663dc9356986040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec49190612995565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015610f0357600080fd5b505afa158015610f17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3b9190612bc8565b610f459083612f00565b610f4f9190612f00565b898881518110610f6157610f616130b1565b602002602001015160c00181815250505050505b6000836001600160a01b031663cc4a01586040518163ffffffff1660e01b8152600401604080518083038186803b158015610faf57600080fd5b505afa158015610fc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe79190612be1565b506040516370a0823160e01b81526001600160a01b038b81166004830152919250670de0b6b3a7640000918391908716906370a082319060240160206040518083038186803b15801561103957600080fd5b505afa15801561104d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110719190612bc8565b61107b9190613027565b6110859190612f18565b878681518110611097576110976130b1565b602090810291909101015161010001526040516335ea6a7560e01b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600482015273057835ad21a177dbdd3090bb1cae03eacf78fc6d906335ea6a75906024016101406040518083038186803b15801561110657600080fd5b505afa15801561111a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113e9190612cdb565b50508e519397508e96508c9550505090831091506111609050576111606130b1565b602002602001015160a0018181525050670de0b6b3a764000081856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111b357600080fd5b505afa1580156111c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111eb9190612bc8565b6111f59190613027565b6111ff9190612f18565b878681518110611211576112116130b1565b6020026020010151610120018181525050836001600160a01b03166336e4ec646040518163ffffffff1660e01b815260040160206040518083038186803b15801561125b57600080fd5b505afa15801561126f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112939190612bc8565b8786815181106112a5576112a56130b1565b60200260200101516101600181815250505050505080806112c590613080565b91505061015b565b505092915050565b6000806000806000806000806000806112ec61286a565b73a6978cba39f86491ae5dca53f4cdefcb100e3e3d6001600160a01b031663e0a73a936040518163ffffffff1660e01b815260040160206040518083038186803b15801561133957600080fd5b505afa15801561134d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113719190612bc8565b98508c6001600160a01b0316638bc7e8c46040518163ffffffff1660e01b815260040160206040518083038186803b1580156113ac57600080fd5b505afa1580156113c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e49190612bc8565b8160000181815250508c6001600160a01b031663cc4a01586040518163ffffffff1660e01b8152600401604080518083038186803b15801561142557600080fd5b505afa158015611439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145d9190612be1565b509650866114738d670de0b6b3a7640000613027565b61147d9190612f18565b815190965061271090611490908e613027565b61149a9190612f18565b6114a4908d613069565b9b506114af8d611f5e565b8260200183604001828152508281525050508c6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156114fa57600080fd5b505afa15801561150e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115329190612d64565b60ff1699506001600160a01b038d1673c383a3833a87009fd9597f8184979af5edfad01914156118895773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9a50670de0b6b3a7640000975060008d6001600160a01b031663cf6d625e6040518163ffffffff1660e01b815260040160806040518083038186803b1580156115b957600080fd5b505afa1580156115cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f19190612aac565b90508d6001600160a01b0316630782d4216040518163ffffffff1660e01b81526004016101206040518083038186803b15801561162d57600080fd5b505afa158015611641573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116659190612c05565b5060c086015260a085018190526080808601929092526060850192909252015160e0830152805161ffff166101008301819052602083015110156116e85761010082015160808301516116ba90612710613027565b6116c49190612f18565b82606001516116d39190613069565b8260e0018181516116e49190612f00565b9052505b8160a00151608001518d111561173f578160800151826060015161170c9190613069565b60a08301516080015161171f908f613069565b836080015161172e9190613027565b6117389190612f18565b9550611744565b600095505b81608001518260c001516117589190613069565b8d83608001516117689190613027565b6117729190612f18565b94508c8260e001511115801561178f57508160a00151608001518d115b1561180a5780516117a290600a90613046565b6117ae90612710613046565b61ffff168d8360c001516117c29190613069565b82516117d090600a90613046565b61ffff166117de9190613027565b60808401516117ef90612710613027565b6117f99190613069565b6118039190612f18565b925061180f565b600092505b8c8260e001511161187e57602081015161182b90612710613046565b61ffff168d8360c0015161183f9190613069565b826020015161ffff166118529190613027565b608084015161186390612710613027565b61186d9190613069565b6118779190612f18565b9350611883565b600093505b50611f4e565b8c6001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118c257600080fd5b505afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa9190612995565b9a5060008d6001600160a01b031663cf6d625e6040518163ffffffff1660e01b815260040160c06040518083038186803b15801561193757600080fd5b505afa15801561194b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196f9190612b29565b90508d6001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156119aa57600080fd5b505afa1580156119be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e29190612995565b8261012001906001600160a01b031690816001600160a01b0316815250508d6001600160a01b031663223706856040518163ffffffff1660e01b815260040160c06040518083038186803b158015611a3957600080fd5b505afa158015611a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a719190612c91565b6101a088015261018087018190526101608701829052610140870194909452611a9d9392509050612f00565b826101c0018181525050600073b53c1a33016b2dc2ff3653530bff1848a515c8c56001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b158015611af657600080fd5b505afa158015611b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2e9190612995565b61012084015160405163b3596f0760e01b81526001600160a01b03918216600482015291925082169063b3596f079060240160206040518083038186803b158015611b7857600080fd5b505afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb09190612bc8565b6101e084015260405163b3596f0760e01b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260048201526001600160a01b0382169063b3596f079060240160206040518083038186803b158015611c0957600080fd5b505afa158015611c1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c419190612bc8565b61020084018190526101e0840151611c6190670de0b6b3a7640000613027565b611c6b9190612f18565b9950611c788c600a612f7d565b8a846101400151611c899190613027565b611c939190612f18565b610220840152611ca48c600a612f7d565b8a846101a00151611cb59190613027565b611cbf9190612f18565b610240840152611cd08c600a612f7d565b8a8f611cdc9190613027565b611ce69190612f18565b610260840152611cf78c600a612f7d565b8a846101c00151611d089190613027565b611d129190612f18565b61028084018190526102608401511115611d71576080820151611d3790612710613046565b61ffff16836102800151846102600151611d519190613069565b8460200151611d609190613027565b611d6a9190612f18565b9650611d76565b600096505b6080820151611d8790612710613046565b61ffff168361026001518460400151611da09190613027565b611daa9190612f18565b9550826101800151836101600151611dc29190612f00565b60e08401528151611dd590606490613046565b61ffff16610100840181905260208401511015611e30576101008301516101408401516020850151611e079083613069565b611e119190613027565b611e1b9190612f18565b8360e001818151611e2c9190612f00565b9052505b8d8360e0015111158015611e485750826101c001518e115b15611ec8576080820151611e5e90612710613046565b61ffff16836102800151846102600151611e789190613069565b846102200151611e889190613069565b8351611e98919061ffff16613027565b8461022001518560200151611ead9190613027565b611eb79190613069565b611ec19190612f18565b9350611ecd565b600093505b8d8360e0015111611f46576080820151611ee990612710613046565b61ffff16836102600151846102400151611f039190613069565b836040015161ffff16611f169190613027565b8461024001518560400151611f2b9190613027565b611f359190613069565b611f3f9190612f18565b9450611f4b565b600094505b50505b509295989b9194979a5092959850565b600080611fea60405180610200016040528060008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b03841673c383a3833a87009fd9597f8184979af5edfad01914156120d257836001600160a01b0316630782d4216040518163ffffffff1660e01b81526004016101206040518083038186803b15801561204957600080fd5b505afa15801561205d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120819190612c05565b506040850152506020830181905281835261209e90612710613027565b6120a89190612f18565b9250806040015181602001516127106120c19190613027565b6120cb9190612f18565b91506125c9565b6000849050806001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561211057600080fd5b505afa158015612124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121489190612995565b82606001906001600160a01b031690816001600160a01b031681525050846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561219e57600080fd5b505afa1580156121b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d69190612d64565b60ff16826080018181525050806001600160a01b031663223706856040518163ffffffff1660e01b815260040160c06040518083038186803b15801561221b57600080fd5b505afa15801561222f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122539190612c91565b610100880152505060e085015260c08085019190915260a0840191909152604080516367b6b12f60e11b815290516000926001600160a01b0385169263cf6d625e9260048083019392829003018186803b1580156122b057600080fd5b505afa1580156122c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e89190612b29565b9050612710816080015161ffff168460c001516123059190613027565b61230f9190612f18565b610120840181905260e08401511161232857600061233d565b8261012001518360e0015161233d9190613069565b83610140018181525050600073b53c1a33016b2dc2ff3653530bff1848a515c8c56001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b15801561239657600080fd5b505afa1580156123aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ce9190612995565b606085015160405163b3596f0760e01b81526001600160a01b03918216600482015291925082169063b3596f079060240160206040518083038186803b15801561241757600080fd5b505afa15801561242b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244f9190612bc8565b61016085015260405163b3596f0760e01b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260048201526001600160a01b0382169063b3596f079060240160206040518083038186803b1580156124a857600080fd5b505afa1580156124bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e09190612bc8565b6101808501819052610140850151670de0b6b3a76400009161250191613027565b61250b9190612f18565b6101a0850152608084015161252190600a612f7d565b8461016001518560a001516125369190613027565b6125409190612f18565b6101c0850152608084015161255690600a612f7d565b84610160015185610100015161256c9190613027565b6125769190612f18565b6101e08501526101c08401516101a085015161259490612710613027565b61259e9190612f18565b9550836101e00151846101a001516127106125b99190613027565b6125c39190612f18565b94505050505b50915091565b60008060008089905061260a6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b816001600160a01b031663223706856040518163ffffffff1660e01b815260040160c06040518083038186803b15801561264357600080fd5b505afa158015612657573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267b9190612c91565b6060870152604086015260208501526080840192909252955093506000886126ab8b670de0b6b3a7640000613027565b6126b59190612f18565b905060006126c48c600a612f7d565b8284608001516126d49190613027565b6126de9190612f18565b905060006127106126ef8b8a613027565b6126f99190612f18565b9050600087821061270b576000612715565b6127158289613069565b90506000831561273b578361272c83612710613027565b6127369190612f18565b61273e565b60005b9050856040015186602001516127549190612f00565b97508a8110156127905760808601518b9061276f8383613069565b6127799190613027565b6127839190612f18565b61278d9089612f00565b97505b5050505050505096509650969350505050565b604051806101a0016040528060006001600160a01b03168152602001600060ff168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016128656040518060c00160405280600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff16815260200160006001600160801b031681525090565b905290565b604051806102a0016040528060008152602001600081526020016000815260200160008152602001600081526020016128cb6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80516001600160801b038116811461295a57600080fd5b919050565b805161ffff8116811461295a57600080fd5b60006020828403121561298357600080fd5b813561298e816130dd565b9392505050565b6000602082840312156129a757600080fd5b815161298e816130dd565b600080604083850312156129c557600080fd5b82356129d0816130dd565b915060208381013567ffffffffffffffff808211156129ee57600080fd5b818601915086601f830112612a0257600080fd5b813581811115612a1457612a146130c7565b8060051b9150612a25848301612ecf565b8181528481019084860184860187018b1015612a4057600080fd5b600095505b83861015612a6f5780359450612a5a856130dd565b84835260019590950194918601918601612a45565b508096505050505050509250929050565b60008060408385031215612a9357600080fd5b8235612a9e816130dd565b946020939093013593505050565b600060808284031215612abe57600080fd5b6040516080810181811067ffffffffffffffff82111715612ae157612ae16130c7565b604052612aed8361295f565b8152612afb6020840161295f565b6020820152612b0c6040840161295f565b6040820152612b1d60608401612943565b60608201529392505050565b600060c08284031215612b3b57600080fd5b60405160c0810181811067ffffffffffffffff82111715612b5e57612b5e6130c7565b604052612b6a8361295f565b8152612b786020840161295f565b6020820152612b896040840161295f565b6040820152612b9a6060840161295f565b6060820152612bab6080840161295f565b6080820152612bbc60a08401612943565b60a08201529392505050565b600060208284031215612bda57600080fd5b5051919050565b60008060408385031215612bf457600080fd5b505080516020909101519092909150565b6000806000806000858703610120811215612c1f57600080fd5b865195506020870151945060a0603f1982011215612c3c57600080fd5b50612c45612ea6565b60408701518152606087015160208201526080870151604082015260a0870151606082015260c087015160808201528093505060e0860151915061010086015190509295509295909350565b60008060008060008060c08789031215612caa57600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b6000806000806000806000806000806101408b8d031215612cfb57600080fd5b8a51995060208b0151985060408b0151975060608b0151965060808b0151955060a08b0151945060c08b0151935060e08b015192506101008b015191506101208b015164ffffffffff81168114612d5157600080fd5b809150509295989b9194979a5092959850565b600060208284031215612d7657600080fd5b815160ff8116811461298e57600080fd5b602080825282518282018190526000919060409081850190868401855b82811015612e9957815180516001600160a01b031685528681015160ff16878601528581015186860152606080820151818701526080808301518188015260a0808401518189015260c0808501519089015260e08085015190890152610100808501519089015261012080850151908901526101408085015190890152610160808501519089015261018093840151805161ffff908116958a0195909552602081015185166101a08a0152604081015185166101c08a01529283015184166101e08901529082015190921661020087015201516001600160801b03166102208501526102409093019290850190600101612da4565b5091979650505050505050565b60405160a0810167ffffffffffffffff81118282101715612ec957612ec96130c7565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612ef857612ef86130c7565b604052919050565b60008219821115612f1357612f1361309b565b500190565b600082612f3557634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115612f75578160001904821115612f5b57612f5b61309b565b80851615612f6857918102915b93841c9390800290612f3f565b509250929050565b600061298e8383600082612f9357506001613021565b81612fa057506000613021565b8160018114612fb65760028114612fc057612fdc565b6001915050613021565b60ff841115612fd157612fd161309b565b50506001821b613021565b5060208310610133831016604e8410600b8410161715612fff575081810a613021565b6130098383612f3a565b806000190482111561301d5761301d61309b565b0290505b92915050565b60008160001904831182151516156130415761304161309b565b500290565b600061ffff838116908316818110156130615761306161309b565b039392505050565b60008282101561307b5761307b61309b565b500390565b60006000198214156130945761309461309b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146130f257600080fd5b5056fea2646970667358221220fc933c5c82748dd57fab68bd06e885a6ac92ee47ea61bfed35f0e867ae67726564736f6c63430008060033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.