Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 371 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Redeem Underlyin... | 14032668 | 15 days ago | IN | 0 GLMR | 0.1201805 | ||||
| Redeem Underlyin... | 13995497 | 18 days ago | IN | 0 GLMR | 0.0378605 | ||||
| Redeem Underlyin... | 13972647 | 20 days ago | IN | 0 GLMR | 0.078706 | ||||
| Redeem Underlyin... | 13961215 | 21 days ago | IN | 0 GLMR | 0.109222 | ||||
| Redeem Underlyin... | 13899838 | 26 days ago | IN | 0 GLMR | 0.109222 | ||||
| Redeem Underlyin... | 13811810 | 33 days ago | IN | 0 GLMR | 0.078706 | ||||
| Redeem Underlyin... | 13766262 | 37 days ago | IN | 0 GLMR | 0.109222 | ||||
| Redeem Underlyin... | 13710827 | 41 days ago | IN | 0 GLMR | 0.0378605 | ||||
| Redeem Underlyin... | 13651964 | 46 days ago | IN | 0 GLMR | 0.0378605 | ||||
| Redeem Underlyin... | 13433784 | 65 days ago | IN | 0 GLMR | 0.0378605 | ||||
| Redeem Underlyin... | 13432355 | 65 days ago | IN | 0 GLMR | 0.0378605 | ||||
| Redeem Underlyin... | 13323304 | 74 days ago | IN | 0 GLMR | 0.0378605 | ||||
| Redeem Underlyin... | 13323287 | 74 days ago | IN | 0 GLMR | 0.0378605 | ||||
| Redeem Underlyin... | 13323200 | 74 days ago | IN | 0 GLMR | 0.0378605 | ||||
| Redeem Underlyin... | 12810842 | 116 days ago | IN | 0 GLMR | 0.0598735 | ||||
| Redeem Underlyin... | 12810828 | 116 days ago | IN | 0 GLMR | 0.0598735 | ||||
| Redeem Underlyin... | 12667611 | 127 days ago | IN | 0 GLMR | 0.03786 | ||||
| Redeem Underlyin... | 12667578 | 127 days ago | IN | 0 GLMR | 0.03786 | ||||
| Redeem Underlyin... | 12662987 | 128 days ago | IN | 0 GLMR | 0.03786 | ||||
| Redeem Underlyin... | 12613365 | 131 days ago | IN | 0 GLMR | 0.03786 | ||||
| Redeem Underlyin... | 12509597 | 139 days ago | IN | 0 GLMR | 0.03786 | ||||
| Redeem Underlyin... | 12498910 | 140 days ago | IN | 0 GLMR | 0.03786 | ||||
| Redeem Underlyin... | 12445002 | 144 days ago | IN | 0 GLMR | 0.03786 | ||||
| Redeem Underlyin... | 12445001 | 144 days ago | IN | 0 GLMR | 0.03786 | ||||
| Redeem Underlyin... | 12444997 | 144 days ago | IN | 0 GLMR | 0.03786 |
View more zero value Internal Transactions in Advanced View mode
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
CErc20Delegator
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/**
*Submitted for verification at moonbeam.moonscan.io on 2023-09-25
*/
/**
*Submitted for verification at moonbeam.moonscan.io on 2023-05-30
*/
// SPDX-License-Identifier: BSD-3-Clause
// File: contracts/Orbiter/ErrorReporter.sol
pragma solidity ^0.8.10;
contract ComptrollerErrorReporter {
enum Error {
NO_ERROR,
UNAUTHORIZED,
COMPTROLLER_MISMATCH,
INSUFFICIENT_SHORTFALL,
INSUFFICIENT_LIQUIDITY,
INVALID_CLOSE_FACTOR,
INVALID_COLLATERAL_FACTOR,
INVALID_LIQUIDATION_INCENTIVE,
MARKET_NOT_ENTERED, // no longer possible
MARKET_NOT_LISTED,
MARKET_ALREADY_LISTED,
MATH_ERROR,
NONZERO_BORROW_BALANCE,
PRICE_ERROR,
REJECTION,
SNAPSHOT_ERROR,
TOO_MANY_ASSETS,
TOO_MUCH_REPAY
}
enum FailureInfo {
ACCEPT_ADMIN_PENDING_ADMIN_CHECK,
ACCEPT_PENDING_IMPLEMENTATION_ADDRESS_CHECK,
EXIT_MARKET_BALANCE_OWED,
EXIT_MARKET_REJECTION,
SET_CLOSE_FACTOR_OWNER_CHECK,
SET_CLOSE_FACTOR_VALIDATION,
SET_COLLATERAL_FACTOR_OWNER_CHECK,
SET_COLLATERAL_FACTOR_NO_EXISTS,
SET_COLLATERAL_FACTOR_VALIDATION,
SET_COLLATERAL_FACTOR_WITHOUT_PRICE,
SET_IMPLEMENTATION_OWNER_CHECK,
SET_LIQUIDATION_INCENTIVE_OWNER_CHECK,
SET_LIQUIDATION_INCENTIVE_VALIDATION,
SET_MAX_ASSETS_OWNER_CHECK,
SET_PENDING_ADMIN_OWNER_CHECK,
SET_PENDING_IMPLEMENTATION_OWNER_CHECK,
SET_PRICE_ORACLE_OWNER_CHECK,
SUPPORT_MARKET_EXISTS,
SUPPORT_MARKET_OWNER_CHECK,
SET_PAUSE_GUARDIAN_OWNER_CHECK,
SET_INCENTIVE_OWNER_CHECK
}
/**
* @dev `error` corresponds to enum Error; `info` corresponds to enum FailureInfo, and `detail` is an arbitrary
* contract-specific code that enables us to report opaque error codes from upgradeable contracts.
**/
event Failure(uint error, uint info, uint detail);
/**
* @dev use this when reporting a known error from the money market or a non-upgradeable collaborator
*/
function fail(Error err, FailureInfo info) internal returns (uint) {
emit Failure(uint(err), uint(info), 0);
return uint(err);
}
/**
* @dev use this when reporting an opaque error from an upgradeable collaborator contract
*/
function failOpaque(Error err, FailureInfo info, uint opaqueError) internal returns (uint) {
emit Failure(uint(err), uint(info), opaqueError);
return uint(err);
}
}
contract TokenErrorReporter {
uint public constant NO_ERROR = 0; // support legacy return codes
error TransferComptrollerRejection(uint256 errorCode);
error TransferNotAllowed();
error TransferNotEnough();
error TransferTooMuch();
error MintComptrollerRejection(uint256 errorCode);
error MintFreshnessCheck();
error RedeemComptrollerRejection(uint256 errorCode);
error RedeemFreshnessCheck();
error RedeemTransferOutNotPossible();
error BorrowComptrollerRejection(uint256 errorCode);
error BorrowFreshnessCheck();
error BorrowCashNotAvailable();
error RepayBorrowComptrollerRejection(uint256 errorCode);
error RepayBorrowFreshnessCheck();
error LiquidateComptrollerRejection(uint256 errorCode);
error LiquidateFreshnessCheck();
error LiquidateCollateralFreshnessCheck();
error LiquidateAccrueBorrowInterestFailed(uint256 errorCode);
error LiquidateAccrueCollateralInterestFailed(uint256 errorCode);
error LiquidateLiquidatorIsBorrower();
error LiquidateCloseAmountIsZero();
error LiquidateCloseAmountIsUintMax();
error LiquidateRepayBorrowFreshFailed(uint256 errorCode);
error LiquidateSeizeComptrollerRejection(uint256 errorCode);
error LiquidateSeizeLiquidatorIsBorrower();
error AcceptAdminPendingAdminCheck();
error SetComptrollerOwnerCheck();
error SetPendingAdminOwnerCheck();
error SetReserveFactorAdminCheck();
error SetReserveFactorFreshCheck();
error SetReserveFactorBoundsCheck();
error AddReservesFactorFreshCheck(uint256 actualAddAmount);
error ReduceReservesAdminCheck();
error ReduceReservesFreshCheck();
error ReduceReservesCashNotAvailable();
error ReduceReservesCashValidation();
error SetInterestRateModelOwnerCheck();
error SetInterestRateModelFreshCheck();
}
// File: contracts/Orbiter/EIP20NonStandardInterface.sol
pragma solidity ^0.8.10;
/**
* @title EIP20NonStandardInterface
* @dev Version of ERC20 with no return values for `transfer` and `transferFrom`
* See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca
*/
interface EIP20NonStandardInterface {
/**
* @notice Get the total number of tokens in circulation
* @return The supply of tokens
*/
function totalSupply() external view returns (uint256);
/**
* @notice Gets the balance of the specified address
* @param owner The address from which the balance will be retrieved
* @return balance The balance
*/
function balanceOf(address owner) external view returns (uint256 balance);
///
/// !!!!!!!!!!!!!!
/// !!! NOTICE !!! `transfer` does not return a value, in violation of the ERC-20 specification
/// !!!!!!!!!!!!!!
///
/**
* @notice Transfer `amount` tokens from `msg.sender` to `dst`
* @param dst The address of the destination account
* @param amount The number of tokens to transfer
*/
function transfer(address dst, uint256 amount) external;
///
/// !!!!!!!!!!!!!!
/// !!! NOTICE !!! `transferFrom` does not return a value, in violation of the ERC-20 specification
/// !!!!!!!!!!!!!!
///
/**
* @notice Transfer `amount` tokens from `src` to `dst`
* @param src The address of the source account
* @param dst The address of the destination account
* @param amount The number of tokens to transfer
*/
function transferFrom(address src, address dst, uint256 amount) external;
/**
* @notice Approve `spender` to transfer up to `amount` from `src`
* @dev This will overwrite the approval amount for `spender`
* and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)
* @param spender The address of the account which may transfer tokens
* @param amount The number of tokens that are approved
* @return success Whether or not the approval succeeded
*/
function approve(address spender, uint256 amount) external returns (bool success);
/**
* @notice Get the current allowance from `owner` for `spender`
* @param owner The address of the account which owns the tokens to be spent
* @param spender The address of the account which may transfer tokens
* @return remaining The number of tokens allowed to be spent
*/
function allowance(address owner, address spender) external view returns (uint256 remaining);
event Transfer(address indexed from, address indexed to, uint256 amount);
event Approval(address indexed owner, address indexed spender, uint256 amount);
}
// File: contracts/Orbiter/InterestRateModel.sol
pragma solidity ^0.8.10;
/**
* @title Compound's InterestRateModel Interface
* @author Compound
*/
abstract contract InterestRateModel {
/// @notice Indicator that this is an InterestRateModel contract (for inspection)
bool public constant isInterestRateModel = true;
/**
* @notice Calculates the current borrow interest rate per block
* @param cash The total amount of cash the market has
* @param borrows The total amount of borrows the market has outstanding
* @param reserves The total amount of reserves the market has
* @return The borrow rate per block (as a percentage, and scaled by 1e18)
*/
function getBorrowRate(uint cash, uint borrows, uint reserves) virtual external view returns (uint);
/**
* @notice Calculates the current supply interest rate per block
* @param cash The total amount of cash the market has
* @param borrows The total amount of borrows the market has outstanding
* @param reserves The total amount of reserves the market has
* @param reserveFactorMantissa The current reserve factor the market has
* @return The supply rate per block (as a percentage, and scaled by 1e18)
*/
function getSupplyRate(uint cash, uint borrows, uint reserves, uint reserveFactorMantissa) virtual external view returns (uint);
}
// File: contracts/Orbiter/ComptrollerInterface.sol
pragma solidity ^0.8.10;
abstract contract ComptrollerInterface {
/// @notice Indicator that this is a Comptroller contract (for inspection)
bool public constant isComptroller = true;
/*** Assets You Are In ***/
function enterMarkets(address[] calldata cTokens) virtual external returns (uint[] memory);
function exitMarket(address cToken) virtual external returns (uint);
/*** Policy Hooks ***/
function mintAllowed(address cToken, address minter, uint mintAmount) virtual external returns (uint);
function mintVerify(address cToken, address minter, uint mintAmount, uint mintTokens) virtual external;
function redeemAllowed(address cToken, address redeemer, uint redeemTokens) virtual external returns (uint);
function redeemVerify(address cToken, address redeemer, uint redeemAmount, uint redeemTokens) virtual external;
function borrowAllowed(address cToken, address borrower, uint borrowAmount) virtual external returns (uint);
function borrowVerify(address cToken, address borrower, uint borrowAmount) virtual external;
function repayBorrowAllowed(
address cToken,
address payer,
address borrower,
uint repayAmount) virtual external returns (uint);
function repayBorrowVerify(
address cToken,
address payer,
address borrower,
uint repayAmount,
uint borrowerIndex) virtual external;
function liquidateBorrowAllowed(
address cTokenBorrowed,
address cTokenCollateral,
address liquidator,
address borrower,
uint repayAmount) virtual external returns (uint);
function liquidateBorrowVerify(
address cTokenBorrowed,
address cTokenCollateral,
address liquidator,
address borrower,
uint repayAmount,
uint seizeTokens) virtual external;
function seizeAllowed(
address cTokenCollateral,
address cTokenBorrowed,
address liquidator,
address borrower,
uint seizeTokens) virtual external returns (uint);
function seizeVerify(
address cTokenCollateral,
address cTokenBorrowed,
address liquidator,
address borrower,
uint seizeTokens) virtual external;
function transferAllowed(address cToken, address src, address dst, uint transferTokens) virtual external returns (uint);
function transferVerify(address cToken, address src, address dst, uint transferTokens) virtual external;
/*** Liquidity/Liquidation Calculations ***/
function liquidateCalculateSeizeTokens(
address cTokenBorrowed,
address cTokenCollateral,
uint repayAmount) virtual external view returns (uint, uint);
}
// File: contracts/Orbiter/CTokenInterfaces.sol
pragma solidity ^0.8.10;
contract CTokenStorage {
/**
* @dev Guard variable for re-entrancy checks
*/
bool internal _notEntered;
/**
* @notice EIP-20 token name for this token
*/
string public name;
/**
* @notice EIP-20 token symbol for this token
*/
string public symbol;
/**
* @notice EIP-20 token decimals for this token
*/
uint8 public decimals;
// Maximum borrow rate that can ever be applied (.0005% / block)
uint internal constant borrowRateMaxMantissa = 0.0005e16;
// Maximum fraction of interest that can be set aside for reserves
uint internal constant reserveFactorMaxMantissa = 1e18;
/**
* @notice Administrator for this contract
*/
address payable public admin;
/**
* @notice Pending administrator for this contract
*/
address payable public pendingAdmin;
/**
* @notice Contract which oversees inter-cToken operations
*/
ComptrollerInterface public comptroller;
/**
* @notice Model which tells what the current interest rate should be
*/
InterestRateModel public interestRateModel;
// Initial exchange rate used when minting the first CTokens (used when totalSupply = 0)
uint internal initialExchangeRateMantissa;
/**
* @notice Fraction of interest currently set aside for reserves
*/
uint public reserveFactorMantissa;
/**
* @notice Block number that interest was last accrued at
*/
uint public accrualBlockNumber;
/**
* @notice Accumulator of the total earned interest rate since the opening of the market
*/
uint public borrowIndex;
/**
* @notice Total amount of outstanding borrows of the underlying in this market
*/
uint public totalBorrows;
/**
* @notice Total amount of reserves of the underlying held in this market
*/
uint public totalReserves;
/**
* @notice Total number of tokens in circulation
*/
uint public totalSupply;
// Official record of token balances for each account
mapping (address => uint) internal accountTokens;
// Approved token transfer amounts on behalf of others
mapping (address => mapping (address => uint)) internal transferAllowances;
/**
* @notice Container for borrow balance information
* @member principal Total balance (with accrued interest), after applying the most recent balance-changing action
* @member interestIndex Global borrowIndex as of the most recent balance-changing action
*/
struct BorrowSnapshot {
uint principal;
uint interestIndex;
}
// Mapping of account addresses to outstanding borrow balances
mapping(address => BorrowSnapshot) internal accountBorrows;
/**
* @notice Share of seized collateral that is added to reserves
*/
uint public constant protocolSeizeShareMantissa = 2.8e16; //2.8%
}
abstract contract CTokenInterface is CTokenStorage {
/**
* @notice Indicator that this is a CToken contract (for inspection)
*/
bool public constant isCToken = true;
/*** Market Events ***/
/**
* @notice Event emitted when interest is accrued
*/
event AccrueInterest(uint cashPrior, uint interestAccumulated, uint borrowIndex, uint totalBorrows);
/**
* @notice Event emitted when tokens are minted
*/
event Mint(address minter, uint mintAmount, uint mintTokens);
/**
* @notice Event emitted when tokens are redeemed
*/
event Redeem(address redeemer, uint redeemAmount, uint redeemTokens);
/**
* @notice Event emitted when underlying is borrowed
*/
event Borrow(address borrower, uint borrowAmount, uint accountBorrows, uint totalBorrows);
/**
* @notice Event emitted when a borrow is repaid
*/
event RepayBorrow(address payer, address borrower, uint repayAmount, uint accountBorrows, uint totalBorrows);
/**
* @notice Event emitted when a borrow is liquidated
*/
event LiquidateBorrow(address liquidator, address borrower, uint repayAmount, address cTokenCollateral, uint seizeTokens);
/*** Admin Events ***/
/**
* @notice Event emitted when pendingAdmin is changed
*/
event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);
/**
* @notice Event emitted when pendingAdmin is accepted, which means admin is updated
*/
event NewAdmin(address oldAdmin, address newAdmin);
/**
* @notice Event emitted when comptroller is changed
*/
event NewComptroller(ComptrollerInterface oldComptroller, ComptrollerInterface newComptroller);
/**
* @notice Event emitted when interestRateModel is changed
*/
event NewMarketInterestRateModel(InterestRateModel oldInterestRateModel, InterestRateModel newInterestRateModel);
/**
* @notice Event emitted when the reserve factor is changed
*/
event NewReserveFactor(uint oldReserveFactorMantissa, uint newReserveFactorMantissa);
/**
* @notice Event emitted when the reserves are added
*/
event ReservesAdded(address benefactor, uint addAmount, uint newTotalReserves);
/**
* @notice Event emitted when the reserves are reduced
*/
event ReservesReduced(address admin, uint reduceAmount, uint newTotalReserves);
/**
* @notice EIP20 Transfer event
*/
event Transfer(address indexed from, address indexed to, uint amount);
/**
* @notice EIP20 Approval event
*/
event Approval(address indexed owner, address indexed spender, uint amount);
/*** User Interface ***/
function transfer(address dst, uint amount) virtual external returns (bool);
function transferFrom(address src, address dst, uint amount) virtual external returns (bool);
function approve(address spender, uint amount) virtual external returns (bool);
function allowance(address owner, address spender) virtual external view returns (uint);
function balanceOf(address owner) virtual external view returns (uint);
function balanceOfUnderlying(address owner) virtual external returns (uint);
function getAccountSnapshot(address account) virtual external view returns (uint, uint, uint, uint);
function borrowRatePerBlock() virtual external view returns (uint);
function supplyRatePerBlock() virtual external view returns (uint);
function totalBorrowsCurrent() virtual external returns (uint);
function borrowBalanceCurrent(address account) virtual external returns (uint);
function borrowBalanceStored(address account) virtual external view returns (uint);
function exchangeRateCurrent() virtual external returns (uint);
function exchangeRateStored() virtual external view returns (uint);
function getCash() virtual external view returns (uint);
function accrueInterest() virtual external returns (uint);
function seize(address liquidator, address borrower, uint seizeTokens) virtual external returns (uint);
/*** Admin Functions ***/
function _setPendingAdmin(address payable newPendingAdmin) virtual external returns (uint);
function _acceptAdmin() virtual external returns (uint);
function _setComptroller(ComptrollerInterface newComptroller) virtual external returns (uint);
function _setReserveFactor(uint newReserveFactorMantissa) virtual external returns (uint);
function _reduceReserves(uint reduceAmount) virtual external returns (uint);
function _setInterestRateModel(InterestRateModel newInterestRateModel) virtual external returns (uint);
}
contract CErc20Storage {
/**
* @notice Underlying asset for this CToken
*/
address public underlying;
}
abstract contract CErc20Interface is CErc20Storage {
/*** User Interface ***/
function mint(uint mintAmount) virtual external returns (uint);
function redeem(uint redeemTokens) virtual external returns (uint);
function redeemUnderlying(uint redeemAmount) virtual external returns (uint);
function borrow(uint borrowAmount) virtual external returns (uint);
function repayBorrow(uint repayAmount) virtual external returns (uint);
function repayBorrowBehalf(address borrower, uint repayAmount) virtual external returns (uint);
function liquidateBorrow(address borrower, uint repayAmount, CTokenInterface cTokenCollateral) virtual external returns (uint);
function sweepToken(EIP20NonStandardInterface token) virtual external;
/*** Admin Functions ***/
function _addReserves(uint addAmount) virtual external returns (uint);
}
contract CDelegationStorage {
/**
* @notice Implementation address for this contract
*/
address public implementation;
}
abstract contract CDelegatorInterface is CDelegationStorage {
/**
* @notice Emitted when implementation is changed
*/
event NewImplementation(address oldImplementation, address newImplementation);
/**
* @notice Called by the admin to update the implementation of the delegator
* @param implementation_ The address of the new implementation for delegation
* @param allowResign Flag to indicate whether to call _resignImplementation on the old implementation
* @param becomeImplementationData The encoded bytes data to be passed to _becomeImplementation
*/
function _setImplementation(address implementation_, bool allowResign, bytes memory becomeImplementationData) virtual external;
}
abstract contract CDelegateInterface is CDelegationStorage {
/**
* @notice Called by the delegator on a delegate to initialize it for duty
* @dev Should revert if any issues arise which make it unfit for delegation
* @param data The encoded bytes data for any initialization
*/
function _becomeImplementation(bytes memory data) virtual external;
/**
* @notice Called by the delegator on a delegate to forfeit its responsibility
*/
function _resignImplementation() virtual external;
}
// File: contracts/Orbiter/CErc20Delegator.sol
pragma solidity ^0.8.10;
/**
* @title Compound's CErc20Delegator Contract
* @notice CTokens which wrap an EIP-20 underlying and delegate to an implementation
* @author Compound
*/
contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterface {
/**
* @notice Construct a new money market
* @param underlying_ The address of the underlying asset
* @param comptroller_ The address of the Comptroller
* @param interestRateModel_ The address of the interest rate model
* @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18
* @param name_ ERC-20 name of this token
* @param symbol_ ERC-20 symbol of this tokenв
* @param decimals_ ERC-20 decimal precision of this token
* @param admin_ Address of the administrator of this token
* @param implementation_ The address of the implementation the contract delegates to
* @param becomeImplementationData The encoded args for becomeImplementation
*/
constructor(address underlying_,
ComptrollerInterface comptroller_,
InterestRateModel interestRateModel_,
uint initialExchangeRateMantissa_,
string memory name_,
string memory symbol_,
uint8 decimals_,
address payable admin_,
address implementation_,
bytes memory becomeImplementationData) {
// Creator of the contract is admin during initialization
admin = payable(msg.sender);
// First delegate gets to initialize the delegator (i.e. storage contract)
delegateTo(implementation_, abi.encodeWithSignature("initialize(address,address,address,uint256,string,string,uint8)",
underlying_,
comptroller_,
interestRateModel_,
initialExchangeRateMantissa_,
name_,
symbol_,
decimals_));
// New implementations always get set via the settor (post-initialize)
_setImplementation(implementation_, false, becomeImplementationData);
// Set the proper admin now that initialization is done
admin = admin_;
}
/**
* @notice Called by the admin to update the implementation of the delegator
* @param implementation_ The address of the new implementation for delegation
* @param allowResign Flag to indicate whether to call _resignImplementation on the old implementation
* @param becomeImplementationData The encoded bytes data to be passed to _becomeImplementation
*/
function _setImplementation(address implementation_, bool allowResign, bytes memory becomeImplementationData)override public {
require(msg.sender == admin, "CErc20Delegator::_setImplementation: Caller must be admin");
if (allowResign) {
delegateToImplementation(abi.encodeWithSignature("_resignImplementation()"));
}
address oldImplementation = implementation;
implementation = implementation_;
delegateToImplementation(abi.encodeWithSignature("_becomeImplementation(bytes)", becomeImplementationData));
emit NewImplementation(oldImplementation, implementation);
}
/**
* @notice Sender supplies assets into the market and receives cTokens in exchange
* @dev Accrues interest whether or not the operation succeeds, unless reverted
* @param mintAmount The amount of the underlying asset to supply
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function mint(uint mintAmount) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("mint(uint256)", mintAmount));
return abi.decode(data, (uint));
}
/**
* @notice Sender redeems cTokens in exchange for the underlying asset
* @dev Accrues interest whether or not the operation succeeds, unless reverted
* @param redeemTokens The number of cTokens to redeem into underlying
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function redeem(uint redeemTokens) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("redeem(uint256)", redeemTokens));
return abi.decode(data, (uint));
}
/**
* @notice Sender redeems cTokens in exchange for a specified amount of underlying asset
* @dev Accrues interest whether or not the operation succeeds, unless reverted
* @param redeemAmount The amount of underlying to redeem
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function redeemUnderlying(uint redeemAmount) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("redeemUnderlying(uint256)", redeemAmount));
return abi.decode(data, (uint));
}
/**
* @notice Sender borrows assets from the protocol to their own address
* @param borrowAmount The amount of the underlying asset to borrow
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function borrow(uint borrowAmount) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("borrow(uint256)", borrowAmount));
return abi.decode(data, (uint));
}
/**
* @notice Sender repays their own borrow
* @param repayAmount The amount to repay, or -1 for the full outstanding amount
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function repayBorrow(uint repayAmount) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("repayBorrow(uint256)", repayAmount));
return abi.decode(data, (uint));
}
/**
* @notice Sender repays a borrow belonging to borrower
* @param borrower the account with the debt being payed off
* @param repayAmount The amount to repay, or -1 for the full outstanding amount
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function repayBorrowBehalf(address borrower, uint repayAmount) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("repayBorrowBehalf(address,uint256)", borrower, repayAmount));
return abi.decode(data, (uint));
}
/**
* @notice The sender liquidates the borrowers collateral.
* The collateral seized is transferred to the liquidator.
* @param borrower The borrower of this cToken to be liquidated
* @param cTokenCollateral The market in which to seize collateral from the borrower
* @param repayAmount The amount of the underlying borrowed asset to repay
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function liquidateBorrow(address borrower, uint repayAmount, CTokenInterface cTokenCollateral) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("liquidateBorrow(address,uint256,address)", borrower, repayAmount, cTokenCollateral));
return abi.decode(data, (uint));
}
/**
* @notice Transfer `amount` tokens from `msg.sender` to `dst`
* @param dst The address of the destination account
* @param amount The number of tokens to transfer
* @return Whether or not the transfer succeeded
*/
function transfer(address dst, uint amount) override external returns (bool) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("transfer(address,uint256)", dst, amount));
return abi.decode(data, (bool));
}
/**
* @notice Transfer `amount` tokens from `src` to `dst`
* @param src The address of the source account
* @param dst The address of the destination account
* @param amount The number of tokens to transfer
* @return Whether or not the transfer succeeded
*/
function transferFrom(address src, address dst, uint256 amount) override external returns (bool) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("transferFrom(address,address,uint256)", src, dst, amount));
return abi.decode(data, (bool));
}
/**
* @notice Approve `spender` to transfer up to `amount` from `src`
* @dev This will overwrite the approval amount for `spender`
* and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)
* @param spender The address of the account which may transfer tokens
* @param amount The number of tokens that are approved (-1 means infinite)
* @return Whether or not the approval succeeded
*/
function approve(address spender, uint256 amount) override external returns (bool) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("approve(address,uint256)", spender, amount));
return abi.decode(data, (bool));
}
/**
* @notice Get the current allowance from `owner` for `spender`
* @param owner The address of the account which owns the tokens to be spent
* @param spender The address of the account which may transfer tokens
* @return The number of tokens allowed to be spent (-1 means infinite)
*/
function allowance(address owner, address spender) override external view returns (uint) {
bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("allowance(address,address)", owner, spender));
return abi.decode(data, (uint));
}
/**
* @notice Get the token balance of the `owner`
* @param owner The address of the account to query
* @return The number of tokens owned by `owner`
*/
function balanceOf(address owner) override external view returns (uint) {
bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("balanceOf(address)", owner));
return abi.decode(data, (uint));
}
/**
* @notice Get the underlying balance of the `owner`
* @dev This also accrues interest in a transaction
* @param owner The address of the account to query
* @return The amount of underlying owned by `owner`
*/
function balanceOfUnderlying(address owner) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("balanceOfUnderlying(address)", owner));
return abi.decode(data, (uint));
}
/**
* @notice Get a snapshot of the account's balances, and the cached exchange rate
* @dev This is used by comptroller to more efficiently perform liquidity checks.
* @param account Address of the account to snapshot
* @return (possible error, token balance, borrow balance, exchange rate mantissa)
*/
function getAccountSnapshot(address account) override external view returns (uint, uint, uint, uint) {
bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("getAccountSnapshot(address)", account));
return abi.decode(data, (uint, uint, uint, uint));
}
/**
* @notice Returns the current per-block borrow interest rate for this cToken
* @return The borrow interest rate per block, scaled by 1e18
*/
function borrowRatePerBlock() override external view returns (uint) {
bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("borrowRatePerBlock()"));
return abi.decode(data, (uint));
}
/**
* @notice Returns the current per-block supply interest rate for this cToken
* @return The supply interest rate per block, scaled by 1e18
*/
function supplyRatePerBlock() override external view returns (uint) {
bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("supplyRatePerBlock()"));
return abi.decode(data, (uint));
}
/**
* @notice Returns the current total borrows plus accrued interest
* @return The total borrows with interest
*/
function totalBorrowsCurrent() override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("totalBorrowsCurrent()"));
return abi.decode(data, (uint));
}
/**
* @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex
* @param account The address whose balance should be calculated after updating borrowIndex
* @return The calculated balance
*/
function borrowBalanceCurrent(address account) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("borrowBalanceCurrent(address)", account));
return abi.decode(data, (uint));
}
/**
* @notice Return the borrow balance of account based on stored data
* @param account The address whose balance should be calculated
* @return The calculated balance
*/
function borrowBalanceStored(address account) override public view returns (uint) {
bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("borrowBalanceStored(address)", account));
return abi.decode(data, (uint));
}
/**
* @notice Accrue interest then return the up-to-date exchange rate
* @return Calculated exchange rate scaled by 1e18
*/
function exchangeRateCurrent() override public returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("exchangeRateCurrent()"));
return abi.decode(data, (uint));
}
/**
* @notice Calculates the exchange rate from the underlying to the CToken
* @dev This function does not accrue interest before calculating the exchange rate
* @return Calculated exchange rate scaled by 1e18
*/
function exchangeRateStored() override public view returns (uint) {
bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("exchangeRateStored()"));
return abi.decode(data, (uint));
}
/**
* @notice Get cash balance of this cToken in the underlying asset
* @return The quantity of underlying asset owned by this contract
*/
function getCash() override external view returns (uint) {
bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("getCash()"));
return abi.decode(data, (uint));
}
/**
* @notice Applies accrued interest to total borrows and reserves.
* @dev This calculates interest accrued from the last checkpointed block
* up to the current block and writes new checkpoint to storage.
*/
function accrueInterest() override public returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("accrueInterest()"));
return abi.decode(data, (uint));
}
/**
* @notice Transfers collateral tokens (this market) to the liquidator.
* @dev Will fail unless called by another cToken during the process of liquidation.
* Its absolutely critical to use msg.sender as the borrowed cToken and not a parameter.
* @param liquidator The account receiving seized collateral
* @param borrower The account having collateral seized
* @param seizeTokens The number of cTokens to seize
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function seize(address liquidator, address borrower, uint seizeTokens) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("seize(address,address,uint256)", liquidator, borrower, seizeTokens));
return abi.decode(data, (uint));
}
/**
* @notice A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)
* @param token The address of the ERC-20 token to sweep
*/
function sweepToken(EIP20NonStandardInterface token) override external {
delegateToImplementation(abi.encodeWithSignature("sweepToken(address)", token));
}
/*** Admin Functions ***/
/**
* @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.
* @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.
* @param newPendingAdmin New pending admin.
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function _setPendingAdmin(address payable newPendingAdmin) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setPendingAdmin(address)", newPendingAdmin));
return abi.decode(data, (uint));
}
/**
* @notice Sets a new comptroller for the market
* @dev Admin function to set a new comptroller
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function _setComptroller(ComptrollerInterface newComptroller) override public returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setComptroller(address)", newComptroller));
return abi.decode(data, (uint));
}
/**
* @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh
* @dev Admin function to accrue interest and set a new reserve factor
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function _setReserveFactor(uint newReserveFactorMantissa) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setReserveFactor(uint256)", newReserveFactorMantissa));
return abi.decode(data, (uint));
}
/**
* @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin
* @dev Admin function for pending admin to accept role and update admin
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function _acceptAdmin() override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("_acceptAdmin()"));
return abi.decode(data, (uint));
}
/**
* @notice Accrues interest and adds reserves by transferring from admin
* @param addAmount Amount of reserves to add
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function _addReserves(uint addAmount) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("_addReserves(uint256)", addAmount));
return abi.decode(data, (uint));
}
/**
* @notice Accrues interest and reduces reserves by transferring to admin
* @param reduceAmount Amount of reduction to reserves
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function _reduceReserves(uint reduceAmount) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("_reduceReserves(uint256)", reduceAmount));
return abi.decode(data, (uint));
}
/**
* @notice Accrues interest and updates the interest rate model using _setInterestRateModelFresh
* @dev Admin function to accrue interest and update the interest rate model
* @param newInterestRateModel the new interest rate model to use
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function _setInterestRateModel(InterestRateModel newInterestRateModel) override public returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setInterestRateModel(address)", newInterestRateModel));
return abi.decode(data, (uint));
}
/**
* @notice Internal method to delegate execution to another contract
* @dev It returns to the external caller whatever the implementation returns or forwards reverts
* @param callee The contract to delegatecall
* @param data The raw data to delegatecall
* @return The returned bytes from the delegatecall
*/
function delegateTo(address callee, bytes memory data) internal returns (bytes memory) {
(bool success, bytes memory returnData) = callee.delegatecall(data);
assembly {
if eq(success, 0) {
revert(add(returnData, 0x20), returndatasize())
}
}
return returnData;
}
/**
* @notice Delegates execution to the implementation contract
* @dev It returns to the external caller whatever the implementation returns or forwards reverts
* @param data The raw data to delegatecall
* @return The returned bytes from the delegatecall
*/
function delegateToImplementation(bytes memory data) public returns (bytes memory) {
return delegateTo(implementation, data);
}
/**
* @notice Delegates execution to an implementation contract
* @dev It returns to the external caller whatever the implementation returns or forwards reverts
* There are an additional 2 prefix uints from the wrapper returndata, which we ignore since we make an extra hop.
* @param data The raw data to delegatecall
* @return The returned bytes from the delegatecall
*/
function delegateToViewImplementation(bytes memory data) public view returns (bytes memory) {
(bool success, bytes memory returnData) = address(this).staticcall(abi.encodeWithSignature("delegateToImplementation(bytes)", data));
assembly {
if eq(success, 0) {
revert(add(returnData, 0x20), returndatasize())
}
}
return abi.decode(returnData, (bytes));
}
/**
* @notice Delegates execution to an implementation contract
* @dev It returns to the external caller whatever the implementation returns or forwards reverts
*/
fallback() external payable {
require(msg.value == 0,"CErc20Delegator:fallback: cannot send value to fallback");
// delegate all other functions to current implementation
(bool success, ) = implementation.delegatecall(msg.data);
assembly {
let free_mem_ptr := mload(0x40)
returndatacopy(free_mem_ptr, 0, returndatasize())
switch success
case 0 { revert(free_mem_ptr, returndatasize()) }
default { return(free_mem_ptr, returndatasize()) }
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"underlying_","type":"address"},{"internalType":"contract ComptrollerInterface","name":"comptroller_","type":"address"},{"internalType":"contract InterestRateModel","name":"interestRateModel_","type":"address"},{"internalType":"uint256","name":"initialExchangeRateMantissa_","type":"uint256"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"address payable","name":"admin_","type":"address"},{"internalType":"address","name":"implementation_","type":"address"},{"internalType":"bytes","name":"becomeImplementationData","type":"bytes"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"cashPrior","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"interestAccumulated","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"borrowIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBorrows","type":"uint256"}],"name":"AccrueInterest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"borrowAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accountBorrows","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBorrows","type":"uint256"}],"name":"Borrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"liquidator","type":"address"},{"indexed":false,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"repayAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"cTokenCollateral","type":"address"},{"indexed":false,"internalType":"uint256","name":"seizeTokens","type":"uint256"}],"name":"LiquidateBorrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"mintAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintTokens","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract ComptrollerInterface","name":"oldComptroller","type":"address"},{"indexed":false,"internalType":"contract ComptrollerInterface","name":"newComptroller","type":"address"}],"name":"NewComptroller","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldImplementation","type":"address"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"NewImplementation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract InterestRateModel","name":"oldInterestRateModel","type":"address"},{"indexed":false,"internalType":"contract InterestRateModel","name":"newInterestRateModel","type":"address"}],"name":"NewMarketInterestRateModel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"NewPendingAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldReserveFactorMantissa","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newReserveFactorMantissa","type":"uint256"}],"name":"NewReserveFactor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"redeemer","type":"address"},{"indexed":false,"internalType":"uint256","name":"redeemAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"redeemTokens","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"payer","type":"address"},{"indexed":false,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"repayAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accountBorrows","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBorrows","type":"uint256"}],"name":"RepayBorrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"benefactor","type":"address"},{"indexed":false,"internalType":"uint256","name":"addAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalReserves","type":"uint256"}],"name":"ReservesAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"},{"indexed":false,"internalType":"uint256","name":"reduceAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalReserves","type":"uint256"}],"name":"ReservesReduced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"_acceptAdmin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"addAmount","type":"uint256"}],"name":"_addReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reduceAmount","type":"uint256"}],"name":"_reduceReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ComptrollerInterface","name":"newComptroller","type":"address"}],"name":"_setComptroller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"implementation_","type":"address"},{"internalType":"bool","name":"allowResign","type":"bool"},{"internalType":"bytes","name":"becomeImplementationData","type":"bytes"}],"name":"_setImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract InterestRateModel","name":"newInterestRateModel","type":"address"}],"name":"_setInterestRateModel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newPendingAdmin","type":"address"}],"name":"_setPendingAdmin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newReserveFactorMantissa","type":"uint256"}],"name":"_setReserveFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accrualBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accrueInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOfUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"borrowAmount","type":"uint256"}],"name":"borrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"borrowBalanceCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"borrowBalanceStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"borrowIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"borrowRatePerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"comptroller","outputs":[{"internalType":"contract ComptrollerInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"delegateToImplementation","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"delegateToViewImplementation","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exchangeRateCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exchangeRateStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountSnapshot","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"interestRateModel","outputs":[{"internalType":"contract InterestRateModel","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isCToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"},{"internalType":"contract CTokenInterface","name":"cTokenCollateral","type":"address"}],"name":"liquidateBorrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolSeizeShareMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"redeemTokens","type":"uint256"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redeemAmount","type":"uint256"}],"name":"redeemUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"repayAmount","type":"uint256"}],"name":"repayBorrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"}],"name":"repayBorrowBehalf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveFactorMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"liquidator","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"seizeTokens","type":"uint256"}],"name":"seize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supplyRatePerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract EIP20NonStandardInterface","name":"token","type":"address"}],"name":"sweepToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBorrows","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBorrowsCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b50604051620022083803806200220883398101604081905262000034916200041a565b60038054610100600160a81b0319163361010002179055604051620000a590839062000071908d908d908d908d908d908d908d9060240162000556565b60408051601f198184030181529190526020810180516001600160e01b03908116631a31d46560e01b17909152620000ea16565b50620000b48260008362000169565b5050600380546001600160a01b0390921661010002610100600160a81b031990921691909117905550620005f995505050505050565b6060600080846001600160a01b031684604051620001099190620005bf565b600060405180830381855af49150503d806000811462000146576040519150601f19603f3d011682016040523d82523d6000602084013e6200014b565b606091505b5091509150600082141562000161573d60208201fd5b949350505050565b60035461010090046001600160a01b03163314620001f35760405162461bcd60e51b815260206004820152603960248201527f43457263323044656c656761746f723a3a5f736574496d706c656d656e74617460448201527f696f6e3a2043616c6c6572206d7573742062652061646d696e00000000000000606482015260840160405180910390fd5b811562000235576040805160048152602481019091526020810180516001600160e01b0390811663153ab50560e01b17909152620002339190620002f016565b505b601280546001600160a01b038581166001600160a01b0319831617909255604051911690620002a2906200026e908490602401620005dd565b60408051601f198184030181529190526020810180516001600160e01b03908116630adccee560e31b17909152620002f016565b50601254604080516001600160a01b03808516825290921660208301527fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a910160405180910390a150505050565b6012546060906200030b906001600160a01b031683620000ea565b92915050565b80516001600160a01b03811681146200032957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200036157818101518382015260200162000347565b8381111562000371576000848401525b50505050565b600082601f8301126200038957600080fd5b81516001600160401b0380821115620003a657620003a66200032e565b604051601f8301601f19908116603f01168101908282118183101715620003d157620003d16200032e565b81604052838152866020858801011115620003eb57600080fd5b620003fe84602083016020890162000344565b9695505050505050565b805160ff811681146200032957600080fd5b6000806000806000806000806000806101408b8d0312156200043b57600080fd5b620004468b62000311565b99506200045660208c0162000311565b98506200046660408c0162000311565b60608c015160808d015191995097506001600160401b03808211156200048b57600080fd5b620004998e838f0162000377565b975060a08d0151915080821115620004b057600080fd5b620004be8e838f0162000377565b9650620004ce60c08e0162000408565b9550620004de60e08e0162000311565b9450620004ef6101008e0162000311565b93506101208d01519150808211156200050757600080fd5b50620005168d828e0162000377565b9150509295989b9194979a5092959850565b600081518084526200054281602086016020860162000344565b601f01601f19169290920160200192915050565b6001600160a01b0388811682528781166020830152861660408201526060810185905260e060808201819052600090620005939083018662000528565b82810360a0840152620005a7818662000528565b91505060ff831660c083015298975050505050505050565b60008251620005d381846020870162000344565b9190910192915050565b602081526000620005f2602083018462000528565b9392505050565b611bff80620006096000396000f3fe6080604052600436106102ff5760003560e01c806370a0823111610190578063bd6d894d116100dc578063f2b3abbd11610095578063f851a4401161006f578063f851a440146109c9578063f8f9da28146109ee578063fca7820b14610a03578063fe9c44ae14610a23576102ff565b8063f2b3abbd14610969578063f3fdb15a14610989578063f5e3c462146109a9576102ff565b8063bd6d894d1461089f578063c37f68e2146108b4578063c5ebeaec146108f4578063db006a7514610914578063dd62ed3e14610934578063e9c714f214610954576102ff565b8063a0712d6811610149578063aa5af0fd11610123578063aa5af0fd14610834578063ae9d70b01461084a578063b2a02ff11461085f578063b71d1a0c1461087f576102ff565b8063a0712d68146107df578063a6afed95146107ff578063a9059cbb14610814576102ff565b806370a082311461073f57806373acee981461075f578063852a12e3146107745780638f840ddd1461079457806395d89b41146107aa57806395dd9193146107bf576102ff565b80633af9e6691161024f578063555bcc4011610208578063601a0bf1116101e2578063601a0bf1146106ce5780636752e702146106ee5780636c540baf146107095780636f307dc31461071f576102ff565b8063555bcc401461066e5780635c60da1b1461068e5780635fe3b567146106ae576102ff565b80633af9e669146105c35780633b1d21a2146105e35780633e941010146105f85780634487152f146106185780634576b5db1461063857806347bd371814610658576102ff565b806318160ddd116102bc57806323b872dd1161029657806323b872dd1461051f5780632608f8181461053f578063267822471461055f578063313ce56714610597576102ff565b806318160ddd146104d2578063182df0f5146104e85780631be19560146104fd576102ff565b806306fdde03146103f35780630933c1ed1461041e578063095ea7b31461043e5780630e7527021461046e578063173b99041461049c57806317bfdfbc146104b2575b34156103785760405162461bcd60e51b815260206004820152603760248201527f43457263323044656c656761746f723a66616c6c6261636b3a2063616e6e6f7460448201527f2073656e642076616c756520746f2066616c6c6261636b00000000000000000060648201526084015b60405180910390fd5b6012546040516000916001600160a01b0316906103989083903690611779565b600060405180830381855af49150503d80600081146103d3576040519150601f19603f3d011682016040523d82523d6000602084013e6103d8565b606091505b505090506040513d6000823e8180156103ef573d82f35b3d82fd5b3480156103ff57600080fd5b50610408610a38565b60405161041591906117e5565b60405180910390f35b34801561042a57600080fd5b506104086104393660046118bd565b610ac6565b34801561044a57600080fd5b5061045e61045936600461190a565b610ae5565b6040519015158152602001610415565b34801561047a57600080fd5b5061048e610489366004611936565b610b57565b604051908152602001610415565b3480156104a857600080fd5b5061048e60085481565b3480156104be57600080fd5b5061048e6104cd36600461194f565b610bbc565b3480156104de57600080fd5b5061048e600d5481565b3480156104f457600080fd5b5061048e610c09565b34801561050957600080fd5b5061051d61051836600461194f565b610c5c565b005b34801561052b57600080fd5b5061045e61053a36600461196c565b610ca7565b34801561054b57600080fd5b5061048e61055a36600461190a565b610d22565b34801561056b57600080fd5b5060045461057f906001600160a01b031681565b6040516001600160a01b039091168152602001610415565b3480156105a357600080fd5b506003546105b19060ff1681565b60405160ff9091168152602001610415565b3480156105cf57600080fd5b5061048e6105de36600461194f565b610d8c565b3480156105ef57600080fd5b5061048e610dd9565b34801561060457600080fd5b5061048e610613366004611936565b610e10565b34801561062457600080fd5b506104086106333660046118bd565b610e58565b34801561064457600080fd5b5061048e61065336600461194f565b610f16565b34801561066457600080fd5b5061048e600b5481565b34801561067a57600080fd5b5061051d6106893660046119bb565b610f63565b34801561069a57600080fd5b5060125461057f906001600160a01b031681565b3480156106ba57600080fd5b5060055461057f906001600160a01b031681565b3480156106da57600080fd5b5061048e6106e9366004611936565b6110d5565b3480156106fa57600080fd5b5061048e666379da05b6000081565b34801561071557600080fd5b5061048e60095481565b34801561072b57600080fd5b5060115461057f906001600160a01b031681565b34801561074b57600080fd5b5061048e61075a36600461194f565b61111d565b34801561076b57600080fd5b5061048e61116a565b34801561078057600080fd5b5061048e61078f366004611936565b6111a1565b3480156107a057600080fd5b5061048e600c5481565b3480156107b657600080fd5b506104086111e9565b3480156107cb57600080fd5b5061048e6107da36600461194f565b6111f6565b3480156107eb57600080fd5b5061048e6107fa366004611936565b611243565b34801561080b57600080fd5b5061048e61128b565b34801561082057600080fd5b5061045e61082f36600461190a565b6112c2565b34801561084057600080fd5b5061048e600a5481565b34801561085657600080fd5b5061048e611316565b34801561086b57600080fd5b5061048e61087a36600461196c565b61134d565b34801561088b57600080fd5b5061048e61089a36600461194f565b6113bf565b3480156108ab57600080fd5b5061048e61140c565b3480156108c057600080fd5b506108d46108cf36600461194f565b611443565b604080519485526020850193909352918301526060820152608001610415565b34801561090057600080fd5b5061048e61090f366004611936565b6114c3565b34801561092057600080fd5b5061048e61092f366004611936565b61150b565b34801561094057600080fd5b5061048e61094f366004611a1d565b611553565b34801561096057600080fd5b5061048e6115a8565b34801561097557600080fd5b5061048e61098436600461194f565b6115df565b34801561099557600080fd5b5060065461057f906001600160a01b031681565b3480156109b557600080fd5b5061048e6109c4366004611a56565b61162c565b3480156109d557600080fd5b5060035461057f9061010090046001600160a01b031681565b3480156109fa57600080fd5b5061048e611688565b348015610a0f57600080fd5b5061048e610a1e366004611936565b6116bf565b348015610a2f57600080fd5b5061045e600181565b60018054610a4590611a98565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7190611a98565b8015610abe5780601f10610a9357610100808354040283529160200191610abe565b820191906000526020600020905b815481529060010190602001808311610aa157829003601f168201915b505050505081565b601254606090610adf906001600160a01b031683611707565b92915050565b6040516001600160a01b0383166024820152604481018290526000908190610b399060640160408051601f198184030181529190526020810180516001600160e01b031663095ea7b360e01b179052610ac6565b905080806020019051810190610b4f9190611ad3565b949350505050565b600080610b9f83604051602401610b7091815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663073a938160e11b179052610ac6565b905080806020019051810190610bb59190611af0565b9392505050565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b03166305eff7ef60e21b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b031663182df0f560e01b1790526000908190610c4090610e58565b905080806020019051810190610c569190611af0565b91505090565b6040516001600160a01b0382166024820152610ca39060440160408051601f198184030181529190526020810180516001600160e01b031662df0cab60e51b179052610ac6565b5050565b6040516001600160a01b03808516602483015283166044820152606481018290526000908190610d039060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b179052610ac6565b905080806020019051810190610d199190611ad3565b95945050505050565b6040516001600160a01b0383166024820152604481018290526000908190610d769060640160408051601f198184030181529190526020810180516001600160e01b03166304c11f0360e31b179052610ac6565b905080806020019051810190610b4f9190611af0565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b0316633af9e66960e01b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b0316631d8e90d160e11b1790526000908190610c4090610e58565b600080610b9f83604051602401610e2991815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166303e9410160e41b179052610ac6565b6060600080306001600160a01b031684604051602401610e7891906117e5565b60408051601f198184030181529181526020820180516001600160e01b0316630933c1ed60e01b17905251610ead9190611b09565b600060405180830381855afa9150503d8060008114610ee8576040519150601f19603f3d011682016040523d82523d6000602084013e610eed565b606091505b50915091506000821415610f02573d60208201fd5b80806020019051810190610b4f9190611b25565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b0316634576b5db60e01b179052610ac6565b60035461010090046001600160a01b03163314610fe85760405162461bcd60e51b815260206004820152603960248201527f43457263323044656c656761746f723a3a5f736574496d706c656d656e74617460448201527f696f6e3a2043616c6c6572206d7573742062652061646d696e00000000000000606482015260840161036f565b8115611022576040805160048152602481019091526020810180516001600160e01b031663153ab50560e01b17905261102090610ac6565b505b601280546001600160a01b038581166001600160a01b0319831617909255604051911690611087906110589084906024016117e5565b60408051601f198184030181529190526020810180516001600160e01b0316630adccee560e31b179052610ac6565b50601254604080516001600160a01b03808516825290921660208301527fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a910160405180910390a150505050565b600080610b9f836040516024016110ee91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663601a0bf160e01b179052610ac6565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b179052610e58565b6040805160048152602481019091526020810180516001600160e01b0316630e759dd360e31b1790526000908190610c4090610ac6565b600080610b9f836040516024016111ba91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663852a12e360e01b179052610ac6565b60028054610a4590611a98565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b03166395dd919360e01b179052610e58565b600080610b9f8360405160240161125c91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663140e25ad60e31b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b031663a6afed9560e01b1790526000908190610c4090610ac6565b6040516001600160a01b0383166024820152604481018290526000908190610b399060640160408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b0316630ae9d70b60e41b1790526000908190610c4090610e58565b6040516001600160a01b038085166024830152831660448201526064810182905260009081906113a99060840160408051601f198184030181529190526020810180516001600160e01b031663b2a02ff160e01b179052610ac6565b905080806020019051810190610d199190611af0565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b0316632dc7468360e21b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b031663bd6d894d60e01b1790526000908190610c4090610ac6565b600080600080600061149d8660405160240161146e91906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166361bfb47160e11b179052610e58565b9050808060200190518101906114b39190611b93565b9450945094509450509193509193565b600080610b9f836040516024016114dc91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663317afabb60e21b179052610ac6565b600080610b9f8360405160240161152491815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663db006a7560e01b179052610ac6565b6040516001600160a01b038084166024830152821660448201526000908190610d769060640160408051601f198184030181529190526020810180516001600160e01b0316636eb1769f60e11b179052610e58565b6040805160048152602481019091526020810180516001600160e01b03166374e38a7960e11b1790526000908190610c4090610ac6565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b031663f2b3abbd60e01b179052610ac6565b6040516001600160a01b038085166024830152604482018490528216606482015260009081906113a99060840160408051601f198184030181529190526020810180516001600160e01b0316637af1e23160e11b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b0316631f1f3b4560e31b1790526000908190610c4090610e58565b600080610b9f836040516024016116d891815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663fca7820b60e01b179052610ac6565b6060600080846001600160a01b0316846040516117249190611b09565b600060405180830381855af49150503d806000811461175f576040519150601f19603f3d011682016040523d82523d6000602084013e611764565b606091505b50915091506000821415610b4f573d60208201fd5b8183823760009101908152919050565b60005b838110156117a457818101518382015260200161178c565b838111156117b3576000848401525b50505050565b600081518084526117d1816020860160208601611789565b601f01601f19169290920160200192915050565b602081526000610bb560208301846117b9565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611837576118376117f8565b604052919050565b600067ffffffffffffffff821115611859576118596117f8565b50601f01601f191660200190565b600082601f83011261187857600080fd5b813561188b6118868261183f565b61180e565b8181528460208386010111156118a057600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156118cf57600080fd5b813567ffffffffffffffff8111156118e657600080fd5b610b4f84828501611867565b6001600160a01b038116811461190757600080fd5b50565b6000806040838503121561191d57600080fd5b8235611928816118f2565b946020939093013593505050565b60006020828403121561194857600080fd5b5035919050565b60006020828403121561196157600080fd5b8135610bb5816118f2565b60008060006060848603121561198157600080fd5b833561198c816118f2565b9250602084013561199c816118f2565b929592945050506040919091013590565b801515811461190757600080fd5b6000806000606084860312156119d057600080fd5b83356119db816118f2565b925060208401356119eb816119ad565b9150604084013567ffffffffffffffff811115611a0757600080fd5b611a1386828701611867565b9150509250925092565b60008060408385031215611a3057600080fd5b8235611a3b816118f2565b91506020830135611a4b816118f2565b809150509250929050565b600080600060608486031215611a6b57600080fd5b8335611a76816118f2565b9250602084013591506040840135611a8d816118f2565b809150509250925092565b600181811c90821680611aac57607f821691505b60208210811415611acd57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611ae557600080fd5b8151610bb5816119ad565b600060208284031215611b0257600080fd5b5051919050565b60008251611b1b818460208701611789565b9190910192915050565b600060208284031215611b3757600080fd5b815167ffffffffffffffff811115611b4e57600080fd5b8201601f81018413611b5f57600080fd5b8051611b6d6118868261183f565b818152856020838501011115611b8257600080fd5b610d19826020830160208601611789565b60008060008060808587031215611ba957600080fd5b50508251602084015160408501516060909501519196909550909250905056fea26469706673582212201f976f38c3795ac30d62b97ed9616eeef5f5157ccd7def0cbc3ad5c4ffa9f0fb64736f6c634300080a0033000000000000000000000000ffffffff5ac1f9a51a93f5c527385edf7fe98a5200000000000000000000000027dc3dadbfb40adc677a2d5ef192d40ad7c4c97d00000000000000000000000017f7b994510e7652981bd115f174a9241323a77900000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000008000000000000000000000000ddd1ab9dd0d18d5033f4ea1e247df34e4b287c6f0000000000000000000000000aca5cb726c4e86045f6fbb673eaaca854b1169800000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000f4f726269746572206f786349425443000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000076f786349425443000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102ff5760003560e01c806370a0823111610190578063bd6d894d116100dc578063f2b3abbd11610095578063f851a4401161006f578063f851a440146109c9578063f8f9da28146109ee578063fca7820b14610a03578063fe9c44ae14610a23576102ff565b8063f2b3abbd14610969578063f3fdb15a14610989578063f5e3c462146109a9576102ff565b8063bd6d894d1461089f578063c37f68e2146108b4578063c5ebeaec146108f4578063db006a7514610914578063dd62ed3e14610934578063e9c714f214610954576102ff565b8063a0712d6811610149578063aa5af0fd11610123578063aa5af0fd14610834578063ae9d70b01461084a578063b2a02ff11461085f578063b71d1a0c1461087f576102ff565b8063a0712d68146107df578063a6afed95146107ff578063a9059cbb14610814576102ff565b806370a082311461073f57806373acee981461075f578063852a12e3146107745780638f840ddd1461079457806395d89b41146107aa57806395dd9193146107bf576102ff565b80633af9e6691161024f578063555bcc4011610208578063601a0bf1116101e2578063601a0bf1146106ce5780636752e702146106ee5780636c540baf146107095780636f307dc31461071f576102ff565b8063555bcc401461066e5780635c60da1b1461068e5780635fe3b567146106ae576102ff565b80633af9e669146105c35780633b1d21a2146105e35780633e941010146105f85780634487152f146106185780634576b5db1461063857806347bd371814610658576102ff565b806318160ddd116102bc57806323b872dd1161029657806323b872dd1461051f5780632608f8181461053f578063267822471461055f578063313ce56714610597576102ff565b806318160ddd146104d2578063182df0f5146104e85780631be19560146104fd576102ff565b806306fdde03146103f35780630933c1ed1461041e578063095ea7b31461043e5780630e7527021461046e578063173b99041461049c57806317bfdfbc146104b2575b34156103785760405162461bcd60e51b815260206004820152603760248201527f43457263323044656c656761746f723a66616c6c6261636b3a2063616e6e6f7460448201527f2073656e642076616c756520746f2066616c6c6261636b00000000000000000060648201526084015b60405180910390fd5b6012546040516000916001600160a01b0316906103989083903690611779565b600060405180830381855af49150503d80600081146103d3576040519150601f19603f3d011682016040523d82523d6000602084013e6103d8565b606091505b505090506040513d6000823e8180156103ef573d82f35b3d82fd5b3480156103ff57600080fd5b50610408610a38565b60405161041591906117e5565b60405180910390f35b34801561042a57600080fd5b506104086104393660046118bd565b610ac6565b34801561044a57600080fd5b5061045e61045936600461190a565b610ae5565b6040519015158152602001610415565b34801561047a57600080fd5b5061048e610489366004611936565b610b57565b604051908152602001610415565b3480156104a857600080fd5b5061048e60085481565b3480156104be57600080fd5b5061048e6104cd36600461194f565b610bbc565b3480156104de57600080fd5b5061048e600d5481565b3480156104f457600080fd5b5061048e610c09565b34801561050957600080fd5b5061051d61051836600461194f565b610c5c565b005b34801561052b57600080fd5b5061045e61053a36600461196c565b610ca7565b34801561054b57600080fd5b5061048e61055a36600461190a565b610d22565b34801561056b57600080fd5b5060045461057f906001600160a01b031681565b6040516001600160a01b039091168152602001610415565b3480156105a357600080fd5b506003546105b19060ff1681565b60405160ff9091168152602001610415565b3480156105cf57600080fd5b5061048e6105de36600461194f565b610d8c565b3480156105ef57600080fd5b5061048e610dd9565b34801561060457600080fd5b5061048e610613366004611936565b610e10565b34801561062457600080fd5b506104086106333660046118bd565b610e58565b34801561064457600080fd5b5061048e61065336600461194f565b610f16565b34801561066457600080fd5b5061048e600b5481565b34801561067a57600080fd5b5061051d6106893660046119bb565b610f63565b34801561069a57600080fd5b5060125461057f906001600160a01b031681565b3480156106ba57600080fd5b5060055461057f906001600160a01b031681565b3480156106da57600080fd5b5061048e6106e9366004611936565b6110d5565b3480156106fa57600080fd5b5061048e666379da05b6000081565b34801561071557600080fd5b5061048e60095481565b34801561072b57600080fd5b5060115461057f906001600160a01b031681565b34801561074b57600080fd5b5061048e61075a36600461194f565b61111d565b34801561076b57600080fd5b5061048e61116a565b34801561078057600080fd5b5061048e61078f366004611936565b6111a1565b3480156107a057600080fd5b5061048e600c5481565b3480156107b657600080fd5b506104086111e9565b3480156107cb57600080fd5b5061048e6107da36600461194f565b6111f6565b3480156107eb57600080fd5b5061048e6107fa366004611936565b611243565b34801561080b57600080fd5b5061048e61128b565b34801561082057600080fd5b5061045e61082f36600461190a565b6112c2565b34801561084057600080fd5b5061048e600a5481565b34801561085657600080fd5b5061048e611316565b34801561086b57600080fd5b5061048e61087a36600461196c565b61134d565b34801561088b57600080fd5b5061048e61089a36600461194f565b6113bf565b3480156108ab57600080fd5b5061048e61140c565b3480156108c057600080fd5b506108d46108cf36600461194f565b611443565b604080519485526020850193909352918301526060820152608001610415565b34801561090057600080fd5b5061048e61090f366004611936565b6114c3565b34801561092057600080fd5b5061048e61092f366004611936565b61150b565b34801561094057600080fd5b5061048e61094f366004611a1d565b611553565b34801561096057600080fd5b5061048e6115a8565b34801561097557600080fd5b5061048e61098436600461194f565b6115df565b34801561099557600080fd5b5060065461057f906001600160a01b031681565b3480156109b557600080fd5b5061048e6109c4366004611a56565b61162c565b3480156109d557600080fd5b5060035461057f9061010090046001600160a01b031681565b3480156109fa57600080fd5b5061048e611688565b348015610a0f57600080fd5b5061048e610a1e366004611936565b6116bf565b348015610a2f57600080fd5b5061045e600181565b60018054610a4590611a98565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7190611a98565b8015610abe5780601f10610a9357610100808354040283529160200191610abe565b820191906000526020600020905b815481529060010190602001808311610aa157829003601f168201915b505050505081565b601254606090610adf906001600160a01b031683611707565b92915050565b6040516001600160a01b0383166024820152604481018290526000908190610b399060640160408051601f198184030181529190526020810180516001600160e01b031663095ea7b360e01b179052610ac6565b905080806020019051810190610b4f9190611ad3565b949350505050565b600080610b9f83604051602401610b7091815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663073a938160e11b179052610ac6565b905080806020019051810190610bb59190611af0565b9392505050565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b03166305eff7ef60e21b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b031663182df0f560e01b1790526000908190610c4090610e58565b905080806020019051810190610c569190611af0565b91505090565b6040516001600160a01b0382166024820152610ca39060440160408051601f198184030181529190526020810180516001600160e01b031662df0cab60e51b179052610ac6565b5050565b6040516001600160a01b03808516602483015283166044820152606481018290526000908190610d039060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b179052610ac6565b905080806020019051810190610d199190611ad3565b95945050505050565b6040516001600160a01b0383166024820152604481018290526000908190610d769060640160408051601f198184030181529190526020810180516001600160e01b03166304c11f0360e31b179052610ac6565b905080806020019051810190610b4f9190611af0565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b0316633af9e66960e01b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b0316631d8e90d160e11b1790526000908190610c4090610e58565b600080610b9f83604051602401610e2991815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166303e9410160e41b179052610ac6565b6060600080306001600160a01b031684604051602401610e7891906117e5565b60408051601f198184030181529181526020820180516001600160e01b0316630933c1ed60e01b17905251610ead9190611b09565b600060405180830381855afa9150503d8060008114610ee8576040519150601f19603f3d011682016040523d82523d6000602084013e610eed565b606091505b50915091506000821415610f02573d60208201fd5b80806020019051810190610b4f9190611b25565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b0316634576b5db60e01b179052610ac6565b60035461010090046001600160a01b03163314610fe85760405162461bcd60e51b815260206004820152603960248201527f43457263323044656c656761746f723a3a5f736574496d706c656d656e74617460448201527f696f6e3a2043616c6c6572206d7573742062652061646d696e00000000000000606482015260840161036f565b8115611022576040805160048152602481019091526020810180516001600160e01b031663153ab50560e01b17905261102090610ac6565b505b601280546001600160a01b038581166001600160a01b0319831617909255604051911690611087906110589084906024016117e5565b60408051601f198184030181529190526020810180516001600160e01b0316630adccee560e31b179052610ac6565b50601254604080516001600160a01b03808516825290921660208301527fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a910160405180910390a150505050565b600080610b9f836040516024016110ee91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663601a0bf160e01b179052610ac6565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b179052610e58565b6040805160048152602481019091526020810180516001600160e01b0316630e759dd360e31b1790526000908190610c4090610ac6565b600080610b9f836040516024016111ba91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663852a12e360e01b179052610ac6565b60028054610a4590611a98565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b03166395dd919360e01b179052610e58565b600080610b9f8360405160240161125c91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663140e25ad60e31b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b031663a6afed9560e01b1790526000908190610c4090610ac6565b6040516001600160a01b0383166024820152604481018290526000908190610b399060640160408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b0316630ae9d70b60e41b1790526000908190610c4090610e58565b6040516001600160a01b038085166024830152831660448201526064810182905260009081906113a99060840160408051601f198184030181529190526020810180516001600160e01b031663b2a02ff160e01b179052610ac6565b905080806020019051810190610d199190611af0565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b0316632dc7468360e21b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b031663bd6d894d60e01b1790526000908190610c4090610ac6565b600080600080600061149d8660405160240161146e91906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166361bfb47160e11b179052610e58565b9050808060200190518101906114b39190611b93565b9450945094509450509193509193565b600080610b9f836040516024016114dc91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663317afabb60e21b179052610ac6565b600080610b9f8360405160240161152491815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663db006a7560e01b179052610ac6565b6040516001600160a01b038084166024830152821660448201526000908190610d769060640160408051601f198184030181529190526020810180516001600160e01b0316636eb1769f60e11b179052610e58565b6040805160048152602481019091526020810180516001600160e01b03166374e38a7960e11b1790526000908190610c4090610ac6565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b031663f2b3abbd60e01b179052610ac6565b6040516001600160a01b038085166024830152604482018490528216606482015260009081906113a99060840160408051601f198184030181529190526020810180516001600160e01b0316637af1e23160e11b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b0316631f1f3b4560e31b1790526000908190610c4090610e58565b600080610b9f836040516024016116d891815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663fca7820b60e01b179052610ac6565b6060600080846001600160a01b0316846040516117249190611b09565b600060405180830381855af49150503d806000811461175f576040519150601f19603f3d011682016040523d82523d6000602084013e611764565b606091505b50915091506000821415610b4f573d60208201fd5b8183823760009101908152919050565b60005b838110156117a457818101518382015260200161178c565b838111156117b3576000848401525b50505050565b600081518084526117d1816020860160208601611789565b601f01601f19169290920160200192915050565b602081526000610bb560208301846117b9565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611837576118376117f8565b604052919050565b600067ffffffffffffffff821115611859576118596117f8565b50601f01601f191660200190565b600082601f83011261187857600080fd5b813561188b6118868261183f565b61180e565b8181528460208386010111156118a057600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156118cf57600080fd5b813567ffffffffffffffff8111156118e657600080fd5b610b4f84828501611867565b6001600160a01b038116811461190757600080fd5b50565b6000806040838503121561191d57600080fd5b8235611928816118f2565b946020939093013593505050565b60006020828403121561194857600080fd5b5035919050565b60006020828403121561196157600080fd5b8135610bb5816118f2565b60008060006060848603121561198157600080fd5b833561198c816118f2565b9250602084013561199c816118f2565b929592945050506040919091013590565b801515811461190757600080fd5b6000806000606084860312156119d057600080fd5b83356119db816118f2565b925060208401356119eb816119ad565b9150604084013567ffffffffffffffff811115611a0757600080fd5b611a1386828701611867565b9150509250925092565b60008060408385031215611a3057600080fd5b8235611a3b816118f2565b91506020830135611a4b816118f2565b809150509250929050565b600080600060608486031215611a6b57600080fd5b8335611a76816118f2565b9250602084013591506040840135611a8d816118f2565b809150509250925092565b600181811c90821680611aac57607f821691505b60208210811415611acd57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611ae557600080fd5b8151610bb5816119ad565b600060208284031215611b0257600080fd5b5051919050565b60008251611b1b818460208701611789565b9190910192915050565b600060208284031215611b3757600080fd5b815167ffffffffffffffff811115611b4e57600080fd5b8201601f81018413611b5f57600080fd5b8051611b6d6118868261183f565b818152856020838501011115611b8257600080fd5b610d19826020830160208601611789565b60008060008060808587031215611ba957600080fd5b50508251602084015160408501516060909501519196909550909250905056fea26469706673582212201f976f38c3795ac30d62b97ed9616eeef5f5157ccd7def0cbc3ad5c4ffa9f0fb64736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ffffffff5ac1f9a51a93f5c527385edf7fe98a5200000000000000000000000027dc3dadbfb40adc677a2d5ef192d40ad7c4c97d00000000000000000000000017f7b994510e7652981bd115f174a9241323a77900000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000008000000000000000000000000ddd1ab9dd0d18d5033f4ea1e247df34e4b287c6f0000000000000000000000000aca5cb726c4e86045f6fbb673eaaca854b1169800000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000f4f726269746572206f786349425443000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000076f786349425443000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : underlying_ (address): 0xFFFFFfFf5AC1f9A51A93F5C527385edF7Fe98A52
Arg [1] : comptroller_ (address): 0x27DC3DAdBfb40ADc677A2D5ef192d40aD7c4c97D
Arg [2] : interestRateModel_ (address): 0x17f7B994510E7652981bD115F174a9241323A779
Arg [3] : initialExchangeRateMantissa_ (uint256): 20000000000000000
Arg [4] : name_ (string): Orbiter oxcIBTC
Arg [5] : symbol_ (string): oxcIBTC
Arg [6] : decimals_ (uint8): 8
Arg [7] : admin_ (address): 0xdDD1ab9dD0d18d5033f4ea1E247DF34E4B287c6F
Arg [8] : implementation_ (address): 0x0acA5CB726c4e86045F6FBb673eAACa854B11698
Arg [9] : becomeImplementationData (bytes): 0x
-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 000000000000000000000000ffffffff5ac1f9a51a93f5c527385edf7fe98a52
Arg [1] : 00000000000000000000000027dc3dadbfb40adc677a2d5ef192d40ad7c4c97d
Arg [2] : 00000000000000000000000017f7b994510e7652981bd115f174a9241323a779
Arg [3] : 00000000000000000000000000000000000000000000000000470de4df820000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [7] : 000000000000000000000000ddd1ab9dd0d18d5033f4ea1e247df34e4b287c6f
Arg [8] : 0000000000000000000000000aca5cb726c4e86045f6fbb673eaaca854b11698
Arg [9] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [10] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [11] : 4f726269746572206f7863494254430000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [13] : 6f78634942544300000000000000000000000000000000000000000000000000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
22304:23419:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45205:9;:14;45197:81;;;;-1:-1:-1;;;45197:81:0;;216:2:1;45197:81:0;;;198:21:1;255:2;235:18;;;228:30;294:34;274:18;;;267:62;365:25;345:18;;;338:53;408:19;;45197:81:0;;;;;;;;;45377:14;;:37;;45359:12;;-1:-1:-1;;;;;45377:14:0;;:37;;45359:12;;45405:8;;45377:37;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45358:56;;;45477:4;45471:11;45528:16;45525:1;45511:12;45496:49;45568:7;45589:49;;;;45683:16;45669:12;45662:38;45589:49;45619:16;45605:12;45598:38;11966:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43964:141;;;;;;;;;;-1:-1:-1;43964:141:0;;;;;:::i;:::-;;:::i;31516:258::-;;;;;;;;;;-1:-1:-1;31516:258:0;;;;;:::i;:::-;;:::i;:::-;;;3704:14:1;;3697:22;3679:41;;3667:2;3652:18;31516:258:0;3539:187:1;28265:239:0;;;;;;;;;;-1:-1:-1;28265:239:0;;;;;:::i;:::-;;:::i;:::-;;;4062:25:1;;;4050:2;4035:18;28265:239:0;3916:177:1;13189:33:0;;;;;;;;;;;;;;;;35399:252;;;;;;;;;;-1:-1:-1;35399:252:0;;;;;:::i;:::-;;:::i;13834:23::-;;;;;;;;;;;;;;;;36739:224;;;;;;;;;;;;;:::i;38877:169::-;;;;;;;;;;-1:-1:-1;38877:169:0;;;;;:::i;:::-;;:::i;:::-;;30760:286;;;;;;;;;;-1:-1:-1;30760:286:0;;;;;:::i;:::-;;:::i;28831:287::-;;;;;;;;;;-1:-1:-1;28831:287:0;;;;;:::i;:::-;;:::i;12639:35::-;;;;;;;;;;-1:-1:-1;12639:35:0;;;;-1:-1:-1;;;;;12639:35:0;;;;;;-1:-1:-1;;;;;5276:32:1;;;5258:51;;5246:2;5231:18;12639:35:0;5096:219:1;12162:21:0;;;;;;;;;;-1:-1:-1;12162:21:0;;;;;;;;;;;5492:4:1;5480:17;;;5462:36;;5450:2;5435:18;12162:21:0;5320:184:1;33054:246:0;;;;;;;;;;-1:-1:-1;33054:246:0;;;;;:::i;:::-;;:::i;37133:204::-;;;;;;;;;;;;;:::i;41561:237::-;;;;;;;;;;-1:-1:-1;41561:237:0;;;;;:::i;:::-;;:::i;44527:436::-;;;;;;;;;;-1:-1:-1;44527:436:0;;;;;:::i;:::-;;:::i;39988:267::-;;;;;;;;;;-1:-1:-1;39988:267:0;;;;;:::i;:::-;;:::i;13598:24::-;;;;;;;;;;;;;;;;25096:653;;;;;;;;;;-1:-1:-1;25096:653:0;;;;;:::i;:::-;;:::i;20722:29::-;;;;;;;;;;-1:-1:-1;20722:29:0;;;;-1:-1:-1;;;;;20722:29:0;;;12765:39;;;;;;;;;;-1:-1:-1;12765:39:0;;;;-1:-1:-1;;;;;12765:39:0;;;42051:249;;;;;;;;;;-1:-1:-1;42051:249:0;;;;;:::i;:::-;;:::i;14729:56::-;;;;;;;;;;;;14779:6;14729:56;;13312:30;;;;;;;;;;;;;;;;19688:25;;;;;;;;;;-1:-1:-1;19688:25:0;;;;-1:-1:-1;;;;;19688:25:0;;;32563:235;;;;;;;;;;-1:-1:-1;32563:235:0;;;;;:::i;:::-;;:::i;34889:219::-;;;;;;;;;;;;;:::i;27268:251::-;;;;;;;;;;-1:-1:-1;27268:251:0;;;;;:::i;:::-;;:::i;13728:25::-;;;;;;;;;;;;;;;;12062:20;;;;;;;;;;;;;:::i;35860:257::-;;;;;;;;;;-1:-1:-1;35860:257:0;;;;;:::i;:::-;;:::i;26107:223::-;;;;;;;;;;-1:-1:-1;26107:223:0;;;;;:::i;:::-;;:::i;37593:207::-;;;;;;;;;;;;;:::i;30204:249::-;;;;;;;;;;-1:-1:-1;30204:249:0;;;;;:::i;:::-;;:::i;13463:23::-;;;;;;;;;;;;;;;;34517:226;;;;;;;;;;;;;:::i;38361:303::-;;;;;;;;;;-1:-1:-1;38361:303:0;;;;;:::i;:::-;;:::i;39495:268::-;;;;;;;;;;-1:-1:-1;39495:268:0;;;;;:::i;:::-;;:::i;36272:217::-;;;;;;;;;;;;;:::i;33646:293::-;;;;;;;;;;-1:-1:-1;33646:293:0;;;;;:::i;:::-;;:::i;:::-;;;;7442:25:1;;;7498:2;7483:18;;7476:34;;;;7526:18;;;7519:34;7584:2;7569:18;;7562:34;7429:3;7414:19;33646:293:0;7211:391:1;27787:231:0;;;;;;;;;;-1:-1:-1;27787:231:0;;;;;:::i;:::-;;:::i;26681:::-;;;;;;;;;;-1:-1:-1;26681:231:0;;;;;:::i;:::-;;:::i;32104:269::-;;;;;;;;;;-1:-1:-1;32104:269:0;;;;;:::i;:::-;;:::i;41113:205::-;;;;;;;;;;;;;:::i;42669:288::-;;;;;;;;;;-1:-1:-1;42669:288:0;;;;;:::i;:::-;;:::i;12906:42::-;;;;;;;;;;-1:-1:-1;12906:42:0;;;;-1:-1:-1;;;;;12906:42:0;;;29600:343;;;;;;;;;;-1:-1:-1;29600:343:0;;;;;:::i;:::-;;:::i;12528:28::-;;;;;;;;;;-1:-1:-1;12528:28:0;;;;;;;-1:-1:-1;;;;;12528:28:0;;;34115:226;;;;;;;;;;;;;:::i;40558:277::-;;;;;;;;;;-1:-1:-1;40558:277:0;;;;;:::i;:::-;;:::i;14950:36::-;;;;;;;;;;;;14982:4;14950:36;;11966:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43964:141::-;44076:14;;44033:12;;44065:32;;-1:-1:-1;;;;;44076:14:0;44092:4;44065:10;:32::i;:::-;44058:39;43964:141;-1:-1:-1;;43964:141:0:o;31516:258::-;31655:68;;-1:-1:-1;;;;;9571:32:1;;31655:68:0;;;9553:51:1;9620:18;;;9613:34;;;31593:4:0;;;;31630:94;;9526:18:1;;31655:68:0;;;-1:-1:-1;;31655:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;31655:68:0;-1:-1:-1;;;31655:68:0;;;31630:24;:94::i;:::-;31610:114;;31753:4;31742:24;;;;;;;;;;;;:::i;:::-;31735:31;31516:258;-1:-1:-1;;;;31516:258:0:o;28265:239::-;28331:4;28348:17;28368:86;28441:11;28393:60;;;;;;4062:25:1;;4050:2;4035:18;;3916:177;28393:60:0;;;;-1:-1:-1;;28393:60:0;;;;;;;;;;;;;;-1:-1:-1;;;;;28393:60:0;-1:-1:-1;;;28393:60:0;;;28368:24;:86::i;:::-;28348:106;;28483:4;28472:24;;;;;;;;;;;;:::i;:::-;28465:31;28265:239;-1:-1:-1;;;28265:239:0:o;35399:252::-;35535:65;;-1:-1:-1;;;;;5276:32:1;;35535:65:0;;;5258:51:1;35473:4:0;;;;35510:91;;5231:18:1;;35535:65:0;;;-1:-1:-1;;35535:65:0;;;;;;;;;;;;;;-1:-1:-1;;;;;35535:65:0;-1:-1:-1;;;35535:65:0;;;35510:24;:91::i;36739:224::-;36865:47;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36865:47:0;-1:-1:-1;;;36865:47:0;;;36799:4;;;;36836:77;;:28;:77::i;:::-;36816:97;;36942:4;36931:24;;;;;;;;;;;;:::i;:::-;36924:31;;;36739:224;:::o;38877:169::-;38984:53;;-1:-1:-1;;;;;5276:32:1;;38984:53:0;;;5258:51:1;38959:79:0;;5231:18:1;;38984:53:0;;;-1:-1:-1;;38984:53:0;;;;;;;;;;;;;;-1:-1:-1;;;;;38984:53:0;-1:-1:-1;;;38984:53:0;;;38959:24;:79::i;:::-;;38877:169;:::o;30760:286::-;30913:82;;-1:-1:-1;;;;;10596:15:1;;;30913:82:0;;;10578:34:1;10648:15;;10628:18;;;10621:43;10680:18;;;10673:34;;;30851:4:0;;;;30888:108;;10513:18:1;;30913:82:0;;;-1:-1:-1;;30913:82:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30913:82:0;-1:-1:-1;;;30913:82:0;;;30888:24;:108::i;:::-;30868:128;;31025:4;31014:24;;;;;;;;;;;;:::i;:::-;31007:31;30760:286;-1:-1:-1;;;;;30760:286:0:o;28831:287::-;28983:84;;-1:-1:-1;;;;;9571:32:1;;28983:84:0;;;9553:51:1;9620:18;;;9613:34;;;28921:4:0;;;;28958:110;;9526:18:1;;28983:84:0;;;-1:-1:-1;;28983:84:0;;;;;;;;;;;;;;-1:-1:-1;;;;;28983:84:0;-1:-1:-1;;;28983:84:0;;;28958:24;:110::i;:::-;28938:130;;29097:4;29086:24;;;;;;;;;;;;:::i;33054:246::-;33187:62;;-1:-1:-1;;;;;5276:32:1;;33187:62:0;;;5258:51:1;33125:4:0;;;;33162:88;;5231:18:1;;33187:62:0;;;-1:-1:-1;;33187:62:0;;;;;;;;;;;;;;-1:-1:-1;;;;;33187:62:0;-1:-1:-1;;;33187:62:0;;;33162:24;:88::i;37133:204::-;37250:36;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37250:36:0;-1:-1:-1;;;37250:36:0;;;37184:4;;;;37221:66;;:28;:66::i;41561:237::-;41626:4;41643:17;41663:85;41737:9;41688:59;;;;;;4062:25:1;;4050:2;4035:18;;3916:177;41688:59:0;;;;-1:-1:-1;;41688:59:0;;;;;;;;;;;;;;-1:-1:-1;;;;;41688:59:0;-1:-1:-1;;;41688:59:0;;;41663:24;:85::i;44527:436::-;44605:12;44631;44645:23;44680:4;-1:-1:-1;;;;;44672:24:0;44756:4;44697:64;;;;;;;;:::i;:::-;;;;-1:-1:-1;;44697:64:0;;;;;;;;;;;;;;-1:-1:-1;;;;;44697:64:0;-1:-1:-1;;;44697:64:0;;;44672:90;;;44697:64;44672:90;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44630:132;;;;44812:1;44803:7;44800:14;44797:99;;;44864:16;44857:4;44845:10;44841:21;44834:47;44797:99;44935:10;44924:31;;;;;;;;;;;;:::i;39988:267::-;40137:67;;-1:-1:-1;;;;;5276:32:1;;40137:67:0;;;5258:51:1;40075:4:0;;;;40112:93;;5231:18:1;;40137:67:0;;;-1:-1:-1;;40137:67:0;;;;;;;;;;;;;;-1:-1:-1;;;;;40137:67:0;-1:-1:-1;;;40137:67:0;;;40112:24;:93::i;25096:653::-;25254:5;;;;;-1:-1:-1;;;;;25254:5:0;25240:10;:19;25232:89;;;;-1:-1:-1;;;25232:89:0;;11838:2:1;25232:89:0;;;11820:21:1;11877:2;11857:18;;;11850:30;11916:34;11896:18;;;11889:62;11987:27;11967:18;;;11960:55;12032:19;;25232:89:0;11636:421:1;25232:89:0;25338:11;25334:120;;;25391:50;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25391:50:0;-1:-1:-1;;;25391:50:0;;;25366:76;;:24;:76::i;:::-;;25334:120;25494:14;;;-1:-1:-1;;;;;25519:32:0;;;-1:-1:-1;;;;;;25519:32:0;;;;;;25589:81;;25494:14;;;25564:107;;25589:81;;25645:24;;25589:81;;;:::i;:::-;;;;-1:-1:-1;;25589:81:0;;;;;;;;;;;;;;-1:-1:-1;;;;;25589:81:0;-1:-1:-1;;;25589:81:0;;;25564:24;:107::i;:::-;-1:-1:-1;25726:14:0;;25689:52;;;-1:-1:-1;;;;;12292:15:1;;;12274:34;;25726:14:0;;;12339:2:1;12324:18;;12317:43;25689:52:0;;12209:18:1;25689:52:0;;;;;;;25221:528;25096:653;;;:::o;42051:249::-;42122:4;42139:17;42159:91;42236:12;42184:65;;;;;;4062:25:1;;4050:2;4035:18;;3916:177;42184:65:0;;;;-1:-1:-1;;42184:65:0;;;;;;;;;;;;;;-1:-1:-1;;;;;42184:65:0;-1:-1:-1;;;42184:65:0;;;42159:24;:91::i;32563:235::-;32695:52;;-1:-1:-1;;;;;5276:32:1;;32695:52:0;;;5258:51:1;32629:4:0;;;;32666:82;;5231:18:1;;32695:52:0;;;-1:-1:-1;;32695:52:0;;;;;;;;;;;;;;-1:-1:-1;;;;;32695:52:0;-1:-1:-1;;;32695:52:0;;;32666:28;:82::i;34889:219::-;35009:48;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35009:48:0;-1:-1:-1;;;35009:48:0;;;34947:4;;;;34984:74;;:24;:74::i;27268:251::-;27340:4;27357:17;27377:92;27455:12;27402:66;;;;;;4062:25:1;;4050:2;4035:18;;3916:177;27402:66:0;;;;-1:-1:-1;;27402:66:0;;;;;;;;;;;;;;-1:-1:-1;;;;;27402:66:0;-1:-1:-1;;;27402:66:0;;;27377:24;:92::i;12062:20::-;;;;;;;:::i;35860:257::-;36002:64;;-1:-1:-1;;;;;5276:32:1;;36002:64:0;;;5258:51:1;35936:4:0;;;;35973:94;;5231:18:1;;36002:64:0;;;-1:-1:-1;;36002:64:0;;;;;;;;;;;;;;-1:-1:-1;;;;;36002:64:0;-1:-1:-1;;;36002:64:0;;;35973:28;:94::i;26107:223::-;26165:4;26182:17;26202:78;26268:10;26227:52;;;;;;4062:25:1;;4050:2;4035:18;;3916:177;26227:52:0;;;;-1:-1:-1;;26227:52:0;;;;;;;;;;;;;;-1:-1:-1;;;;;26227:52:0;-1:-1:-1;;;26227:52:0;;;26202:24;:78::i;37593:207::-;37706:43;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37706:43:0;-1:-1:-1;;;37706:43:0;;;37644:4;;;;37681:69;;:24;:69::i;30204:249::-;30337:65;;-1:-1:-1;;;;;9571:32:1;;30337:65:0;;;9553:51:1;9620:18;;;9613:34;;;30275:4:0;;;;30312:91;;9526:18:1;;30337:65:0;;;-1:-1:-1;;30337:65:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30337:65:0;-1:-1:-1;;;30337:65:0;;;30312:24;:91::i;34517:226::-;34645:47;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34645:47:0;-1:-1:-1;;;34645:47:0;;;34579:4;;;;34616:77;;:28;:77::i;38361:303::-;38521:92;;-1:-1:-1;;;;;10596:15:1;;;38521:92:0;;;10578:34:1;10648:15;;10628:18;;;10621:43;10680:18;;;10673:34;;;38459:4:0;;;;38496:118;;10513:18:1;;38521:92:0;;;-1:-1:-1;;38521:92:0;;;;;;;;;;;;;;-1:-1:-1;;;;;38521:92:0;-1:-1:-1;;;38521:92:0;;;38496:24;:118::i;:::-;38476:138;;38643:4;38632:24;;;;;;;;;;;;:::i;39495:268::-;39643:69;;-1:-1:-1;;;;;5276:32:1;;39643:69:0;;;5258:51:1;39581:4:0;;;;39618:95;;5231:18:1;;39643:69:0;;;-1:-1:-1;;39643:69:0;;;;;;;;;;;;;;-1:-1:-1;;;;;39643:69:0;-1:-1:-1;;;39643:69:0;;;39618:24;:95::i;36272:217::-;36390:48;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36390:48:0;-1:-1:-1;;;36390:48:0;;;36328:4;;;;36365:74;;:24;:74::i;33646:293::-;33723:4;33729;33735;33741;33758:17;33778:93;33862:7;33807:63;;;;;;;-1:-1:-1;;;;;5276:32:1;;;;5258:51;;5246:2;5231:18;;5096:219;33807:63:0;;;;-1:-1:-1;;33807:63:0;;;;;;;;;;;;;;-1:-1:-1;;;;;33807:63:0;-1:-1:-1;;;33807:63:0;;;33778:28;:93::i;:::-;33758:113;;33900:4;33889:42;;;;;;;;;;;;:::i;:::-;33882:49;;;;;;;;;33646:293;;;;;:::o;27787:231::-;27849:4;27866:17;27886:82;27954:12;27911:56;;;;;;4062:25:1;;4050:2;4035:18;;3916:177;27911:56:0;;;;-1:-1:-1;;27911:56:0;;;;;;;;;;;;;;-1:-1:-1;;;;;27911:56:0;-1:-1:-1;;;27911:56:0;;;27886:24;:82::i;26681:231::-;26743:4;26760:17;26780:82;26848:12;26805:56;;;;;;4062:25:1;;4050:2;4035:18;;3916:177;26805:56:0;;;;-1:-1:-1;;26805:56:0;;;;;;;;;;;;;;-1:-1:-1;;;;;26805:56:0;-1:-1:-1;;;26805:56:0;;;26780:24;:82::i;32104:269::-;32253:69;;-1:-1:-1;;;;;12292:15:1;;;32253:69:0;;;12274:34:1;12344:15;;12324:18;;;12317:43;32187:4:0;;;;32224:99;;12209:18:1;;32253:69:0;;;-1:-1:-1;;32253:69:0;;;;;;;;;;;;;;-1:-1:-1;;;;;32253:69:0;-1:-1:-1;;;32253:69:0;;;32224:28;:99::i;41113:205::-;41226:41;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41226:41:0;-1:-1:-1;;;41226:41:0;;;41164:4;;;;41201:67;;:24;:67::i;42669:288::-;42827:79;;-1:-1:-1;;;;;5276:32:1;;42827:79:0;;;5258:51:1;42765:4:0;;;;42802:105;;5231:18:1;;42827:79:0;;;-1:-1:-1;;42827:79:0;;;;;;;;;;;;;;-1:-1:-1;;;;;42827:79:0;-1:-1:-1;;;42827:79:0;;;42802:24;:105::i;29600:343::-;29784:108;;-1:-1:-1;;;;;13025:15:1;;;29784:108:0;;;13007:34:1;13057:18;;;13050:34;;;13120:15;;13100:18;;;13093:43;29722:4:0;;;;29759:134;;12942:18:1;;29784:108:0;;;-1:-1:-1;;29784:108:0;;;;;;;;;;;;;;-1:-1:-1;;;;;29784:108:0;-1:-1:-1;;;29784:108:0;;;29759:24;:134::i;34115:226::-;34243:47;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34243:47:0;-1:-1:-1;;;34243:47:0;;;34177:4;;;;34214:77;;:28;:77::i;40558:277::-;40643:4;40660:17;40680:105;40759:24;40705:79;;;;;;4062:25:1;;4050:2;4035:18;;3916:177;40705:79:0;;;;-1:-1:-1;;40705:79:0;;;;;;;;;;;;;;-1:-1:-1;;;;;40705:79:0;-1:-1:-1;;;40705:79:0;;;40680:24;:105::i;43317:345::-;43390:12;43416;43430:23;43457:6;-1:-1:-1;;;;;43457:19:0;43477:4;43457:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43415:67;;;;43532:1;43523:7;43520:14;43517:99;;;43584:16;43577:4;43565:10;43561:21;43554:47;438:271:1;621:6;613;608:3;595:33;577:3;647:16;;672:13;;;647:16;438:271;-1:-1:-1;438:271:1:o;714:258::-;786:1;796:113;810:6;807:1;804:13;796:113;;;886:11;;;880:18;867:11;;;860:39;832:2;825:10;796:113;;;927:6;924:1;921:13;918:48;;;962:1;953:6;948:3;944:16;937:27;918:48;;714:258;;;:::o;977:::-;1019:3;1057:5;1051:12;1084:6;1079:3;1072:19;1100:63;1156:6;1149:4;1144:3;1140:14;1133:4;1126:5;1122:16;1100:63;:::i;:::-;1217:2;1196:15;-1:-1:-1;;1192:29:1;1183:39;;;;1224:4;1179:50;;977:258;-1:-1:-1;;977:258:1:o;1240:220::-;1389:2;1378:9;1371:21;1352:4;1409:45;1450:2;1439:9;1435:18;1427:6;1409:45;:::i;1465:127::-;1526:10;1521:3;1517:20;1514:1;1507:31;1557:4;1554:1;1547:15;1581:4;1578:1;1571:15;1597:275;1668:2;1662:9;1733:2;1714:13;;-1:-1:-1;;1710:27:1;1698:40;;1768:18;1753:34;;1789:22;;;1750:62;1747:88;;;1815:18;;:::i;:::-;1851:2;1844:22;1597:275;;-1:-1:-1;1597:275:1:o;1877:186::-;1925:4;1958:18;1950:6;1947:30;1944:56;;;1980:18;;:::i;:::-;-1:-1:-1;2046:2:1;2025:15;-1:-1:-1;;2021:29:1;2052:4;2017:40;;1877:186::o;2068:462::-;2110:5;2163:3;2156:4;2148:6;2144:17;2140:27;2130:55;;2181:1;2178;2171:12;2130:55;2217:6;2204:20;2248:48;2264:31;2292:2;2264:31;:::i;:::-;2248:48;:::i;:::-;2321:2;2312:7;2305:19;2367:3;2360:4;2355:2;2347:6;2343:15;2339:26;2336:35;2333:55;;;2384:1;2381;2374:12;2333:55;2449:2;2442:4;2434:6;2430:17;2423:4;2414:7;2410:18;2397:55;2497:1;2472:16;;;2490:4;2468:27;2461:38;;;;2476:7;2068:462;-1:-1:-1;;;2068:462:1:o;2535:320::-;2603:6;2656:2;2644:9;2635:7;2631:23;2627:32;2624:52;;;2672:1;2669;2662:12;2624:52;2712:9;2699:23;2745:18;2737:6;2734:30;2731:50;;;2777:1;2774;2767:12;2731:50;2800:49;2841:7;2832:6;2821:9;2817:22;2800:49;:::i;3083:131::-;-1:-1:-1;;;;;3158:31:1;;3148:42;;3138:70;;3204:1;3201;3194:12;3138:70;3083:131;:::o;3219:315::-;3287:6;3295;3348:2;3336:9;3327:7;3323:23;3319:32;3316:52;;;3364:1;3361;3354:12;3316:52;3403:9;3390:23;3422:31;3447:5;3422:31;:::i;:::-;3472:5;3524:2;3509:18;;;;3496:32;;-1:-1:-1;;;3219:315:1:o;3731:180::-;3790:6;3843:2;3831:9;3822:7;3818:23;3814:32;3811:52;;;3859:1;3856;3849:12;3811:52;-1:-1:-1;3882:23:1;;3731:180;-1:-1:-1;3731:180:1:o;4098:247::-;4157:6;4210:2;4198:9;4189:7;4185:23;4181:32;4178:52;;;4226:1;4223;4216:12;4178:52;4265:9;4252:23;4284:31;4309:5;4284:31;:::i;4635:456::-;4712:6;4720;4728;4781:2;4769:9;4760:7;4756:23;4752:32;4749:52;;;4797:1;4794;4787:12;4749:52;4836:9;4823:23;4855:31;4880:5;4855:31;:::i;:::-;4905:5;-1:-1:-1;4962:2:1;4947:18;;4934:32;4975:33;4934:32;4975:33;:::i;:::-;4635:456;;5027:7;;-1:-1:-1;;;5081:2:1;5066:18;;;;5053:32;;4635:456::o;5789:118::-;5875:5;5868:13;5861:21;5854:5;5851:32;5841:60;;5897:1;5894;5887:12;5912:590;5995:6;6003;6011;6064:2;6052:9;6043:7;6039:23;6035:32;6032:52;;;6080:1;6077;6070:12;6032:52;6119:9;6106:23;6138:31;6163:5;6138:31;:::i;:::-;6188:5;-1:-1:-1;6245:2:1;6230:18;;6217:32;6258:30;6217:32;6258:30;:::i;:::-;6307:7;-1:-1:-1;6365:2:1;6350:18;;6337:32;6392:18;6381:30;;6378:50;;;6424:1;6421;6414:12;6378:50;6447:49;6488:7;6479:6;6468:9;6464:22;6447:49;:::i;:::-;6437:59;;;5912:590;;;;;:::o;7607:388::-;7675:6;7683;7736:2;7724:9;7715:7;7711:23;7707:32;7704:52;;;7752:1;7749;7742:12;7704:52;7791:9;7778:23;7810:31;7835:5;7810:31;:::i;:::-;7860:5;-1:-1:-1;7917:2:1;7902:18;;7889:32;7930:33;7889:32;7930:33;:::i;:::-;7982:7;7972:17;;;7607:388;;;;;:::o;8510:479::-;8610:6;8618;8626;8679:2;8667:9;8658:7;8654:23;8650:32;8647:52;;;8695:1;8692;8685:12;8647:52;8734:9;8721:23;8753:31;8778:5;8753:31;:::i;:::-;8803:5;-1:-1:-1;8855:2:1;8840:18;;8827:32;;-1:-1:-1;8911:2:1;8896:18;;8883:32;8924:33;8883:32;8924:33;:::i;:::-;8976:7;8966:17;;;8510:479;;;;;:::o;8994:380::-;9073:1;9069:12;;;;9116;;;9137:61;;9191:4;9183:6;9179:17;9169:27;;9137:61;9244:2;9236:6;9233:14;9213:18;9210:38;9207:161;;;9290:10;9285:3;9281:20;9278:1;9271:31;9325:4;9322:1;9315:15;9353:4;9350:1;9343:15;9207:161;;8994:380;;;:::o;9658:245::-;9725:6;9778:2;9766:9;9757:7;9753:23;9749:32;9746:52;;;9794:1;9791;9784:12;9746:52;9826:9;9820:16;9845:28;9867:5;9845:28;:::i;9908:184::-;9978:6;10031:2;10019:9;10010:7;10006:23;10002:32;9999:52;;;10047:1;10044;10037:12;9999:52;-1:-1:-1;10070:16:1;;9908:184;-1:-1:-1;9908:184:1:o;10718:274::-;10847:3;10885:6;10879:13;10901:53;10947:6;10942:3;10935:4;10927:6;10923:17;10901:53;:::i;:::-;10970:16;;;;;10718:274;-1:-1:-1;;10718:274:1:o;10997:634::-;11076:6;11129:2;11117:9;11108:7;11104:23;11100:32;11097:52;;;11145:1;11142;11135:12;11097:52;11178:9;11172:16;11211:18;11203:6;11200:30;11197:50;;;11243:1;11240;11233:12;11197:50;11266:22;;11319:4;11311:13;;11307:27;-1:-1:-1;11297:55:1;;11348:1;11345;11338:12;11297:55;11377:2;11371:9;11402:48;11418:31;11446:2;11418:31;:::i;11402:48::-;11473:2;11466:5;11459:17;11513:7;11508:2;11503;11499;11495:11;11491:20;11488:33;11485:53;;;11534:1;11531;11524:12;11485:53;11547:54;11598:2;11593;11586:5;11582:14;11577:2;11573;11569:11;11547:54;:::i;12371:368::-;12468:6;12476;12484;12492;12545:3;12533:9;12524:7;12520:23;12516:33;12513:53;;;12562:1;12559;12552:12;12513:53;-1:-1:-1;;12585:16:1;;12641:2;12626:18;;12620:25;12685:2;12670:18;;12664:25;12729:2;12714:18;;;12708:25;12585:16;;12620:25;;-1:-1:-1;12708:25:1;;-1:-1:-1;12371:368:1;-1:-1:-1;12371:368:1:o
Swarm Source
ipfs://1f976f38c3795ac30d62b97ed9616eeef5f5157ccd7def0cbc3ad5c4ffa9f0fb
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in GLMR
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.