{
  "address": "0x08A11ef47aF1d5259004Bb29BB590448528faFBF",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract ITroveManager",
          "name": "troveManager",
          "type": "address"
        },
        {
          "internalType": "int256",
          "name": "_startIdx",
          "type": "int256"
        },
        {
          "internalType": "uint256",
          "name": "_count",
          "type": "uint256"
        }
      ],
      "name": "getMultipleSortedTroves",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "debt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "interest",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "coll",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stake",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "pendingCollateral",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "pendingDebt",
              "type": "uint256"
            }
          ],
          "internalType": "struct MultiTroveGetter.CombinedTroveData[]",
          "name": "_troves",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "transactionHash": "0x918bf71021035b4297d55bc42fface35923e6ec75e6fa03e892239083bfe6166",
  "receipt": {
    "to": null,
    "from": "0xF1658C608708172655A8e70a1624c29F956Ee63D",
    "contractAddress": "0x08A11ef47aF1d5259004Bb29BB590448528faFBF",
    "transactionIndex": 2,
    "gasUsed": "914536",
    "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "blockHash": "0x4c41fca77711a6110dbdec4a4863a03689ad62a9edd42d9fe78775b736e68bf5",
    "transactionHash": "0x918bf71021035b4297d55bc42fface35923e6ec75e6fa03e892239083bfe6166",
    "logs": [],
    "blockNumber": 2166507,
    "cumulativeGasUsed": "1008740",
    "status": 1,
    "byzantium": true
  },
  "args": [],
  "numDeployments": 1,
  "solcInputHash": "a6d939c7ac4bb59822edb24b0d925d24",
  "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract ITroveManager\",\"name\":\"troveManager\",\"type\":\"address\"},{\"internalType\":\"int256\",\"name\":\"_startIdx\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"getMultipleSortedTroves\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"debt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"coll\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pendingCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pendingDebt\",\"type\":\"uint256\"}],\"internalType\":\"struct MultiTroveGetter.CombinedTroveData[]\",\"name\":\"_troves\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/helpers/MultiTroveGetter.sol\":\"MultiTroveGetter\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"contracts/helpers/MultiTroveGetter.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.19;\\n\\nimport \\\"../interfaces/ITroveManager.sol\\\";\\nimport \\\"../interfaces/ISortedTroves.sol\\\";\\nimport \\\"../interfaces/IFactory.sol\\\";\\n\\n/*  Helper contract for grabbing Trove data for the front end. Not part of the PropelCore Propel system. */\\ncontract MultiTroveGetter {\\n\\tstruct CombinedTroveData {\\n\\t\\taddress owner;\\n\\t\\tuint256 debt;\\n\\t\\tuint256 interest;\\n\\t\\tuint256 coll;\\n\\t\\tuint256 stake;\\n\\t\\tuint256 pendingCollateral;\\n\\t\\tuint256 pendingDebt;\\n\\t}\\n\\n\\tfunction getMultipleSortedTroves(ITroveManager troveManager, int _startIdx, uint256 _count) external view returns (CombinedTroveData[] memory _troves) {\\n\\t\\tISortedTroves sortedTroves = ISortedTroves(troveManager.sortedTroves());\\n\\t\\tuint256 startIdx;\\n\\t\\tbool descend;\\n\\n\\t\\tif (_startIdx >= 0) {\\n\\t\\t\\tstartIdx = uint256(_startIdx);\\n\\t\\t\\tdescend = true;\\n\\t\\t} else {\\n\\t\\t\\tstartIdx = uint256(-(_startIdx + 1));\\n\\t\\t\\tdescend = false;\\n\\t\\t}\\n\\n\\t\\tuint256 sortedTrovesSize = sortedTroves.getSize();\\n\\t\\tif (startIdx >= sortedTrovesSize) {\\n\\t\\t\\t_troves = new CombinedTroveData[](0);\\n\\t\\t} else {\\n\\t\\t\\tuint256 maxCount = sortedTrovesSize - startIdx;\\n\\t\\t\\tif (_count > maxCount) {\\n\\t\\t\\t\\t_count = maxCount;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (descend) {\\n\\t\\t\\t\\t_troves = _getMultipleSortedTrovesFromHead(troveManager, sortedTroves, startIdx, _count);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t_troves = _getMultipleSortedTrovesFromTail(troveManager, sortedTroves, startIdx, _count);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\tfunction _getMultipleSortedTrovesFromHead(ITroveManager troveManager, ISortedTroves sortedTroves, uint256 _startIdx, uint256 _count) internal view returns (CombinedTroveData[] memory _troves) {\\n\\t\\taddress currentTroveowner = sortedTroves.getFirst();\\n\\n\\t\\tfor (uint256 idx = 0; idx < _startIdx; ++idx) {\\n\\t\\t\\tcurrentTroveowner = sortedTroves.getNext(currentTroveowner);\\n\\t\\t}\\n\\n\\t\\t_troves = new CombinedTroveData[](_count);\\n\\n\\t\\tfor (uint256 idx = 0; idx < _count; ++idx) {\\n\\t\\t\\t_troves[idx].owner = currentTroveowner;\\n\\n\\t\\t\\tITroveManager.Trove memory trove = troveManager.getTrove(currentTroveowner);\\n\\t\\t\\t_troves[idx].debt = trove.debt;\\n\\t\\t\\t_troves[idx].coll = trove.coll;\\n\\t\\t\\t_troves[idx].stake = trove.stake;\\n\\t\\t\\t(_troves[idx].pendingCollateral, _troves[idx].pendingDebt) = troveManager.getPendingCollAndDebtRewards(currentTroveowner);\\n\\t\\t\\t_troves[idx].interest = troveManager.getTroveInterest(currentTroveowner, _troves[idx].debt + _troves[idx].pendingDebt);\\n\\t\\t\\tcurrentTroveowner = sortedTroves.getNext(currentTroveowner);\\n\\t\\t}\\n\\t}\\n\\n\\tfunction _getMultipleSortedTrovesFromTail(ITroveManager troveManager, ISortedTroves sortedTroves, uint256 _startIdx, uint256 _count) internal view returns (CombinedTroveData[] memory _troves) {\\n\\t\\taddress currentTroveowner = sortedTroves.getLast();\\n\\n\\t\\tfor (uint256 idx = 0; idx < _startIdx; ++idx) {\\n\\t\\t\\tcurrentTroveowner = sortedTroves.getPrev(currentTroveowner);\\n\\t\\t}\\n\\n\\t\\t_troves = new CombinedTroveData[](_count);\\n\\n\\t\\tfor (uint256 idx = 0; idx < _count; ++idx) {\\n\\t\\t\\t_troves[idx].owner = currentTroveowner;\\n\\t\\t\\tITroveManager.Trove memory trove = troveManager.getTrove(currentTroveowner);\\n\\t\\t\\t_troves[idx].debt = trove.debt;\\n\\t\\t\\t_troves[idx].coll = trove.coll;\\n\\t\\t\\t_troves[idx].stake = trove.stake;\\n\\n\\t\\t\\t(_troves[idx].pendingCollateral, _troves[idx].pendingDebt) = troveManager.getPendingCollAndDebtRewards(currentTroveowner);\\n\\n\\t\\t\\t_troves[idx].interest = troveManager.getTroveInterest(currentTroveowner, _troves[idx].debt + _troves[idx].pendingDebt);\\n\\n\\t\\t\\tcurrentTroveowner = sortedTroves.getPrev(currentTroveowner);\\n\\t\\t}\\n\\t}\\n}\\n\",\"keccak256\":\"0x13b77afdc3cebc57639e83c3abf0fb5d38ce41340403d9064baa81a9960de481\",\"license\":\"MIT\"},\"contracts/interfaces/IFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.19;\\n\\ninterface IFactory {\\n\\t// commented values are suggested default parameters\\n\\tstruct DeploymentParams {\\n\\t\\tuint256 minuteDecayFactor; // 999037758833783000  (half life of 12 hours)\\n\\t\\tuint256 redemptionFeeFloor; // 1e18 / 1000 * 5  (0.5%)\\n\\t\\tuint256 maxRedemptionFee; // 1e18  (100%)\\n\\t\\tuint256 borrowingFeeFloor; // 1e18 / 1000 * 5  (0.5%)\\n\\t\\tuint256 maxBorrowingFee; // 1e18 / 100 * 5  (5%)\\n\\t\\tuint256 interestRateInBps; // 100 (1%)\\n\\t\\tuint256 maxDebt;\\n\\t\\tuint256 MCR; // 12 * 1e17  (120%)\\n\\t}\\n\\n\\tevent NewDeployment(address collateral, address priceFeed, address troveManager, address sortedTroves);\\n\\n\\tfunction deployNewInstance(address collateral, address priceFeed, address customTroveManagerImpl, address customSortedTrovesImpl, DeploymentParams calldata params) external;\\n\\n\\tfunction setImplementations(address _troveManagerImpl, address _sortedTrovesImpl) external;\\n\\n\\tfunction Propel_CORE() external view returns (address);\\n\\n\\tfunction borrowerOperations() external view returns (address);\\n\\n\\tfunction debtToken() external view returns (address);\\n\\n\\tfunction guardian() external view returns (address);\\n\\n\\tfunction liquidationManager() external view returns (address);\\n\\n\\tfunction owner() external view returns (address);\\n\\n\\tfunction sortedTrovesImpl() external view returns (address);\\n\\n\\tfunction stabilityPool() external view returns (address);\\n\\n\\tfunction troveManagerCount() external view returns (uint256);\\n\\n\\tfunction troveManagerImpl() external view returns (address);\\n\\n\\tfunction troveManagers(uint256) external view returns (address);\\n}\\n\",\"keccak256\":\"0x2e6c41a32d40629a0f5d4128b01a5801842010d1c10b509b686f788ff44a607d\",\"license\":\"MIT\"},\"contracts/interfaces/IPriceFeed.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.19;\\n\\nimport \\\"../interfaces/IPyth.sol\\\";\\n\\ninterface IPriceFeed {\\n\\tstruct OracleRecord {\\n\\t\\tIPyth pyth;\\n\\t\\tuint32 decimals;\\n\\t\\tuint32 heartbeat;\\n\\t\\tbool isFeedWorking;\\n\\t}\\n\\n\\tstruct PriceRecord {\\n\\t\\tuint96 scaledPrice;\\n\\t\\tuint32 timestamp;\\n\\t\\tuint32 lastUpdated;\\n\\t}\\n\\n\\tstruct FeedResponse {\\n\\t\\tint64 price;\\n\\t\\t// Confidence interval around the price\\n\\t\\tuint64 conf;\\n\\t\\t// Price exponent\\n\\t\\tint32 expo;\\n\\t\\t// Unix timestamp describing when the price was published\\n\\t\\tuint publishTime;\\n\\t\\tbool success;\\n\\t}\\n\\n\\t// Custom Errors --------------------------------------------------------------------------------------------------\\n\\n\\terror PriceFeed__InvalidFeedResponseError();\\n\\terror PriceFeed__FeedFrozenError();\\n\\terror PriceFeed__UnknownFeedError();\\n\\terror PriceFeed__HeartbeatOutOfBoundsError();\\n\\n\\t// Events ---------------------------------------------------------------------------------------------------------\\n\\n\\tevent NewOracleRegistered(address pyth);\\n\\tevent PriceFeedStatusUpdated(address oracle, bool isWorking);\\n\\tevent PriceRecordUpdated(uint256 _price);\\n\\n\\tfunction fetchPrice(address _token) external returns (uint256);\\n}\\n\",\"keccak256\":\"0x8ef2b41df0f27e3c3a61cbcbd999aac5928199c7cd5dc7da2d93d7a58891a908\",\"license\":\"MIT\"},\"contracts/interfaces/IPropelBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.19;\\n\\ninterface IPropelBase {\\n\\tfunction DECIMAL_PRECISION() external view returns (uint256);\\n\\n\\t// Critical system collateral ratio. If the system's total collateral ratio (TCR) falls below the CCR, Recovery Mode is triggered.\\n\\tfunction CCR() external view returns (uint256); // 150%\\n\\n\\t// Amount of debt to be locked in gas pool on opening troves\\n\\tfunction DEBT_GAS_COMPENSATION() external view returns (uint256);\\n\\n\\tfunction PERCENT_DIVISOR() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xcf4433a83eb57f68ce98b33c442abde5420e6e4cede255cfa41680fc5c2808b8\",\"license\":\"MIT\"},\"contracts/interfaces/IPyth.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.19;\\n\\ninterface IPyth {\\n\\tstruct Price {\\n\\t\\t// Price\\n\\t\\tint64 price;\\n\\t\\t// Confidence interval around the price\\n\\t\\tuint64 conf;\\n\\t\\t// Price exponent\\n\\t\\tint32 expo;\\n\\t\\t// Unix timestamp describing when the price was published\\n\\t\\tuint publishTime;\\n\\t}\\n\\n\\tfunction getPrice(bytes32 id) external view returns (Price memory);\\n\\n\\tfunction getPriceUnsafe(bytes32 id) external view returns (Price memory price);\\n}\\n\",\"keccak256\":\"0xfd589468ff2885c85543d89042b18e7801be77d8586bddf27481830fb233bd01\",\"license\":\"MIT\"},\"contracts/interfaces/ISortedTroves.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.19;\\n\\ninterface ISortedTroves {\\n\\tevent NodeAdded(address _id, uint256 _NICR);\\n\\tevent NodeRemoved(address _id);\\n\\n\\tfunction insert(address _id, uint256 _NICR, address _prevId, address _nextId) external;\\n\\n\\tfunction reInsert(address _id, uint256 _newNICR, address _prevId, address _nextId) external;\\n\\n\\tfunction remove(address _id) external;\\n\\n\\tfunction setAddresses(address _troveManagerAddress) external;\\n\\n\\tfunction contains(address _id) external view returns (bool);\\n\\n\\tfunction data() external view returns (address head, address tail, uint256 size);\\n\\n\\tfunction findInsertPosition(uint256 _NICR, address _prevId, address _nextId) external view returns (address, address);\\n\\n\\tfunction getFirst() external view returns (address);\\n\\n\\tfunction getLast() external view returns (address);\\n\\n\\tfunction getNext(address _id) external view returns (address);\\n\\n\\tfunction getPrev(address _id) external view returns (address);\\n\\n\\tfunction getSize() external view returns (uint256);\\n\\n\\tfunction isEmpty() external view returns (bool);\\n\\n\\tfunction troveManager() external view returns (address);\\n\\n\\tfunction validInsertPosition(uint256 _NICR, address _prevId, address _nextId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x568f6029aad06d63866b67a30cddcb6ca716b5163aac714d847189d09a2aaf31\",\"license\":\"MIT\"},\"contracts/interfaces/ITroveManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.19;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IPropelBase.sol\\\";\\nimport \\\"./ISortedTroves.sol\\\";\\nimport \\\"./IPriceFeed.sol\\\";\\n\\ninterface ITroveManager is IPropelBase {\\n\\t// Store the necessary data for a trove\\n\\tstruct Trove {\\n\\t\\tuint256 debt;\\n\\t\\tuint256 coll;\\n\\t\\tuint256 stake;\\n\\t\\tStatus status;\\n\\t\\tuint128 arrayIndex;\\n\\t}\\n\\n\\tstruct RedemptionTotals {\\n\\t\\tuint256 remainingDebt;\\n\\t\\tuint256 totalDebtToRedeem;\\n\\t\\tuint256 totalCollateralDrawn;\\n\\t\\tuint256 totalInterest;\\n\\t\\tuint256 collateralFee;\\n\\t\\tuint256 collateralToSendToRedeemer;\\n\\t\\tuint256 decayedBaseRate;\\n\\t\\tuint256 price;\\n\\t\\tuint256 totalDebtSupplyAtStart;\\n\\t}\\n\\n\\tstruct SingleRedemptionValues {\\n\\t\\tuint256 debtLot;\\n\\t\\tuint256 collateralLot;\\n\\t\\tuint256 interestLot;\\n\\t\\tbool cancelledPartial;\\n\\t}\\n\\n\\t// Object containing the collateral and debt snapshots for a given active trove\\n\\tstruct RewardSnapshot {\\n\\t\\tuint256 collateral;\\n\\t\\tuint256 debt;\\n\\t\\tuint256 interest;\\n\\t}\\n\\n\\tenum TroveManagerOperation {\\n\\t\\tapplyPendingRewards,\\n\\t\\tliquidateInNormalMode,\\n\\t\\tliquidateInRecoveryMode,\\n\\t\\tredeemCollateral\\n\\t}\\n\\n\\tenum Status {\\n\\t\\tnonExistent,\\n\\t\\tactive,\\n\\t\\tclosedByOwner,\\n\\t\\tclosedByLiquidation,\\n\\t\\tclosedByRedemption\\n\\t}\\n\\n\\tevent InsterstPaid(address _account, address _borrower, uint256 _interest);\\n\\tevent TroveUpdated(address indexed _borrower, uint256 _debt, uint256 _coll, uint256 _stake, TroveManagerOperation _operation);\\n\\tevent Redemption(uint256 _attemptedDebtAmount, uint256 _actualDebtAmount, uint256 _collateralSent, uint256 _InterestDebt, uint256 _collateralFee);\\n\\tevent BaseRateUpdated(uint256 _baseRate);\\n\\tevent LastFeeOpTimeUpdated(uint256 _lastFeeOpTime);\\n\\tevent TotalStakesUpdated(uint256 _newTotalStakes);\\n\\tevent SystemSnapshotsUpdated(uint256 _totalStakesSnapshot, uint256 _totalCollateralSnapshot);\\n\\tevent LTermsUpdated(uint256 _L_collateral, uint256 _L_debt);\\n\\tevent TroveSnapshotsUpdated(uint256 _L_collateral, uint256 _L_debt, uint256 _L_Interest_Debt);\\n\\tevent TroveIndexUpdated(address _borrower, uint256 _newIndex);\\n\\tevent CollateralSent(address _to, uint256 _amount);\\n\\tevent RewardClaimed(address indexed account, address indexed recipient, uint256 claimed);\\n\\n\\tfunction addCollateralSurplus(address borrower, uint256 collSurplus) external;\\n\\n\\tfunction applyPendingRewards(address _borrower) external returns (uint256 coll, uint256 debt);\\n\\n\\tfunction claimCollateral(address _receiver) external;\\n\\n\\tfunction closeTrove(address _borrower, address _receiver, uint256 collAmount, uint256 debtAmount) external;\\n\\n\\tfunction closeTroveByLiquidation(address _borrower) external;\\n\\n\\tfunction decayBaseRateAndGetBorrowingFee(uint256 _debt) external returns (uint256);\\n\\n\\tfunction decreaseDebtAndSendCollateral(address account, uint256 debt, uint256 coll) external;\\n\\n\\tfunction finalizeLiquidation(address _liquidator, uint256 _debt, uint256 _coll, uint256 _collSurplus, uint256 _debtGasComp, uint256 _collGasComp, uint256 _interest) external;\\n\\n\\tfunction getEntireSystemBalances() external returns (uint256, uint256, uint256);\\n\\n\\tfunction movePendingTroveRewardsToActiveBalances(uint256 _debt, uint256 _collateral) external;\\n\\n\\tfunction openTrove(address _borrower, uint256 _collateralAmount, uint256 _compositeDebt, uint256 NICR, address _upperHint, address _lowerHint) external returns (uint256 stake, uint256 arrayIndex);\\n\\n\\tfunction redeemCollateral(uint256 _debtAmount, address _firstRedemptionHint, address _upperPartialRedemptionHint, address _lowerPartialRedemptionHint, uint256 _partialRedemptionHintNICR, uint256 _maxIterations, uint256 _maxFeePercentage) external;\\n\\n\\tfunction setAddresses(address _priceFeedAddress, address _sortedTrovesAddress, IERC20 _collateralToken) external;\\n\\n\\tfunction setParameters(uint256 _minuteDecayFactor, uint256 _redemptionFeeFloor, uint256 _maxRedemptionFee, uint256 _borrowingFeeFloor, uint256 _maxBorrowingFee, uint256 _maxSystemDebt, uint256 _MCR, uint32 _interestRate) external;\\n\\n\\tfunction setPaused(bool _paused) external;\\n\\n\\tfunction setPriceFeed(address _priceFeedAddress) external;\\n\\n\\tfunction updateTroveFromAdjustment(bool _isDebtIncrease, uint256 _debtChange, uint256 _netDebtChange, bool _isCollIncrease, uint256 _collChange, address _upperHint, address _lowerHint, address _borrower, address _receiver) external returns (uint256, uint256, uint256);\\n\\n\\tfunction fetchPrice() external returns (uint256);\\n\\n\\tfunction distributeInterestDebt() external returns (uint256);\\n\\n\\tfunction repayInterest(address _account, address _borrower, uint256 _debt) external;\\n\\n\\tfunction BOOTSTRAP_PERIOD() external view returns (uint256);\\n\\n\\tfunction L_collateral() external view returns (uint256);\\n\\n\\tfunction L_debt() external view returns (uint256);\\n\\n\\tfunction MCR() external view returns (uint256);\\n\\n\\tfunction getTrove(address _borrower) external view returns (Trove memory);\\n\\n\\tfunction baseRate() external view returns (uint256);\\n\\n\\tfunction borrowerOperationsAddress() external view returns (address);\\n\\n\\tfunction borrowingFeeFloor() external view returns (uint256);\\n\\n\\tfunction collateralToken() external view returns (IERC20);\\n\\n\\tfunction defaultedCollateral() external view returns (uint256);\\n\\n\\tfunction defaultedDebt() external view returns (uint256);\\n\\n\\tfunction getBorrowingFee(uint256 _debt) external view returns (uint256);\\n\\n\\tfunction getBorrowingFeeWithDecay(uint256 _debt) external view returns (uint256);\\n\\n\\tfunction getBorrowingRate() external view returns (uint256);\\n\\n\\tfunction getBorrowingRateWithDecay() external view returns (uint256);\\n\\n\\tfunction getCurrentICR(address _borrower, uint256 _price) external view returns (uint256);\\n\\n\\tfunction getEntireDebtAndColl(address _borrower) external view returns (uint256 debt, uint256 coll, uint256 pendingDebtReward, uint256 pendingCollateralReward);\\n\\n\\tfunction getEntireSystemColl() external view returns (uint256);\\n\\n\\tfunction getEntireSystemDebt() external view returns (uint256);\\n\\n\\tfunction getGlobalSystemDebt() external view returns (uint256);\\n\\n\\tfunction getTroveInterest(address _borrower, uint256 _debt) external view returns (uint256);\\n\\n\\tfunction getRedemptionICR(address _borrower, uint256 _price) external view returns (uint256);\\n\\n\\tfunction getNominalICR(address _borrower) external view returns (uint256);\\n\\n\\tfunction getPendingCollAndDebtRewards(address _borrower) external view returns (uint256, uint256);\\n\\n\\tfunction getRedemptionFeeWithDecay(uint256 _collateralDrawn) external view returns (uint256);\\n\\n\\tfunction getRedemptionRate() external view returns (uint256);\\n\\n\\tfunction getRedemptionRateWithDecay() external view returns (uint256);\\n\\n\\tfunction getTotalActiveCollateral() external view returns (uint256);\\n\\n\\tfunction getTotalActiveDebt() external view returns (uint256);\\n\\n\\tfunction getTroveCollAndDebt(address _borrower) external view returns (uint256 coll, uint256 debt);\\n\\n\\tfunction getTroveFromTroveOwnersArray(uint256 _index) external view returns (address);\\n\\n\\tfunction getTroveOwnersCount() external view returns (uint256);\\n\\n\\tfunction getTroveStake(address _borrower) external view returns (uint256);\\n\\n\\tfunction getTroveStatus(address _borrower) external view returns (uint256);\\n\\n\\tfunction hasPendingRewards(address _borrower) external view returns (bool);\\n\\n\\tfunction lastCollateralError_Redistribution() external view returns (uint256);\\n\\n\\tfunction lastDebtError_Redistribution() external view returns (uint256);\\n\\n\\tfunction lastFeeOperationTime() external view returns (uint256);\\n\\n\\tfunction liquidationManager() external view returns (address);\\n\\n\\tfunction maxBorrowingFee() external view returns (uint256);\\n\\n\\tfunction maxRedemptionFee() external view returns (uint256);\\n\\n\\tfunction maxSystemDebt() external view returns (uint256);\\n\\n\\tfunction minuteDecayFactor() external view returns (uint256);\\n\\n\\tfunction paused() external view returns (bool);\\n\\n\\tfunction redemptionFeeFloor() external view returns (uint256);\\n\\n\\tfunction getRewardSnapshots(address) external view returns (RewardSnapshot memory);\\n\\n\\tfunction priceFeed() external view returns (IPriceFeed);\\n\\n\\tfunction sortedTroves() external view returns (ISortedTroves);\\n\\n\\tfunction sunsetting() external view returns (bool);\\n\\n\\tfunction surplusBalances(address) external view returns (uint256);\\n\\n\\tfunction systemDeploymentTime() external view returns (uint256);\\n\\n\\tfunction totalCollateralSnapshot() external view returns (uint256);\\n\\n\\tfunction totalStakes() external view returns (uint256);\\n\\n\\tfunction totalStakesSnapshot() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x489a259e79e6b4ba4d57177d8b4576487645b00ca324c9d1ae50301abfc939a8\",\"license\":\"MIT\"}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50610fa5806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806305e533ce14610030575b600080fd5b61004361003e366004610c94565b610059565b6040516100509190610cc9565b60405180910390f35b60606000846001600160a01b031663ae9187546040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100bf9190610d54565b9050600080600086126100d7575084905060016100f2565b6100e2866001610d8e565b6100eb90610db6565b9150600090505b6000836001600160a01b031663de8fa4316040518163ffffffff1660e01b8152600401602060405180830381865afa158015610132573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101569190610dee565b90508083106101d95760408051600080825260208201909252906101d1565b6101be6040518060e0016040528060006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8152602001906001900390816101755790505b50945061021d565b60006101e58483610e1d565b9050808711156101f3578096505b821561020c576102058986868a610228565b955061021b565b6102188986868a610757565b95505b505b505050509392505050565b60606000846001600160a01b0316631e2231436040518163ffffffff1660e01b8152600401602060405180830381865afa15801561026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061028e9190610d54565b905060005b84811015610330576040517f765e01590000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015287169063765e015990602401602060405180830381865afa1580156102fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031e9190610d54565b915061032981610e36565b9050610293565b508267ffffffffffffffff81111561034a5761034a610e07565b6040519080825280602002602001820160405280156103c457816020015b6103b16040518060e0016040528060006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8152602001906001900390816103685790505b50915060005b8381101561074d57818382815181106103e5576103e5610e6e565b60209081029190910101516001600160a01b0391821690526040517fbd28c0f4000000000000000000000000000000000000000000000000000000008152838216600482015260009189169063bd28c0f49060240160a060405180830381865afa158015610457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047b9190610ea9565b9050806000015184838151811061049457610494610e6e565b6020026020010151602001818152505080602001518483815181106104bb576104bb610e6e565b6020026020010151606001818152505080604001518483815181106104e2576104e2610e6e565b6020908102919091010151608001526040517fd12ae8410000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015289169063d12ae841906024016040805180830381865afa15801561054f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105739190610f38565b85848151811061058557610585610e6e565b602002602001015160a0018685815181106105a2576105a2610e6e565b602002602001015160c00182815250828152505050876001600160a01b03166355ca38cf848685815181106105d9576105d9610e6e565b602002602001015160c001518786815181106105f7576105f7610e6e565b60200260200101516020015161060d9190610f5c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa15801561066e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106929190610dee565b8483815181106106a4576106a4610e6e565b6020908102919091010151604090810191909152517f765e01590000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015288169063765e015990602401602060405180830381865afa158015610715573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107399190610d54565b9250508061074690610e36565b90506103ca565b5050949350505050565b60606000846001600160a01b0316634d6228316040518163ffffffff1660e01b8152600401602060405180830381865afa158015610799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107bd9190610d54565b905060005b8481101561085f576040517fb72703ac0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015287169063b72703ac90602401602060405180830381865afa158015610829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084d9190610d54565b915061085881610e36565b90506107c2565b508267ffffffffffffffff81111561087957610879610e07565b6040519080825280602002602001820160405280156108f357816020015b6108e06040518060e0016040528060006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8152602001906001900390816108975790505b50915060005b8381101561074d578183828151811061091457610914610e6e565b60209081029190910101516001600160a01b0391821690526040517fbd28c0f4000000000000000000000000000000000000000000000000000000008152838216600482015260009189169063bd28c0f49060240160a060405180830381865afa158015610986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109aa9190610ea9565b905080600001518483815181106109c3576109c3610e6e565b6020026020010151602001818152505080602001518483815181106109ea576109ea610e6e565b602002602001015160600181815250508060400151848381518110610a1157610a11610e6e565b6020908102919091010151608001526040517fd12ae8410000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015289169063d12ae841906024016040805180830381865afa158015610a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa29190610f38565b858481518110610ab457610ab4610e6e565b602002602001015160a001868581518110610ad157610ad1610e6e565b602002602001015160c00182815250828152505050876001600160a01b03166355ca38cf84868581518110610b0857610b08610e6e565b602002602001015160c00151878681518110610b2657610b26610e6e565b602002602001015160200151610b3c9190610f5c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc19190610dee565b848381518110610bd357610bd3610e6e565b6020908102919091010151604090810191909152517fb72703ac0000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015288169063b72703ac90602401602060405180830381865afa158015610c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c689190610d54565b92505080610c7590610e36565b90506108f9565b6001600160a01b0381168114610c9157600080fd5b50565b600080600060608486031215610ca957600080fd5b8335610cb481610c7c565b95602085013595506040909401359392505050565b602080825282518282018190526000919060409081850190868401855b82811015610d4757815180516001600160a01b0316855286810151878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c0908101519085015260e09093019290850190600101610ce6565b5091979650505050505050565b600060208284031215610d6657600080fd5b8151610d7181610c7c565b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082018281126000831280158216821582161715610dae57610dae610d78565b505092915050565b60007f80000000000000000000000000000000000000000000000000000000000000008203610de757610de7610d78565b5060000390565b600060208284031215610e0057600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b81810381811115610e3057610e30610d78565b92915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610e6757610e67610d78565b5060010190565b634e487b7160e01b600052603260045260246000fd5b80516fffffffffffffffffffffffffffffffff81168114610ea457600080fd5b919050565b600060a08284031215610ebb57600080fd5b60405160a0810181811067ffffffffffffffff82111715610eec57634e487b7160e01b600052604160045260246000fd5b8060405250825181526020830151602082015260408301516040820152606083015160058110610f1b57600080fd5b6060820152610f2c60808401610e84565b60808201529392505050565b60008060408385031215610f4b57600080fd5b505080516020909101519092909150565b80820180821115610e3057610e30610d7856fea264697066735822122000b8cc7c1dcd8c4c6b2c82af4e8cb071b5823c472b515a41282ea3f94aa9232864736f6c63430008130033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806305e533ce14610030575b600080fd5b61004361003e366004610c94565b610059565b6040516100509190610cc9565b60405180910390f35b60606000846001600160a01b031663ae9187546040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100bf9190610d54565b9050600080600086126100d7575084905060016100f2565b6100e2866001610d8e565b6100eb90610db6565b9150600090505b6000836001600160a01b031663de8fa4316040518163ffffffff1660e01b8152600401602060405180830381865afa158015610132573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101569190610dee565b90508083106101d95760408051600080825260208201909252906101d1565b6101be6040518060e0016040528060006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8152602001906001900390816101755790505b50945061021d565b60006101e58483610e1d565b9050808711156101f3578096505b821561020c576102058986868a610228565b955061021b565b6102188986868a610757565b95505b505b505050509392505050565b60606000846001600160a01b0316631e2231436040518163ffffffff1660e01b8152600401602060405180830381865afa15801561026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061028e9190610d54565b905060005b84811015610330576040517f765e01590000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015287169063765e015990602401602060405180830381865afa1580156102fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031e9190610d54565b915061032981610e36565b9050610293565b508267ffffffffffffffff81111561034a5761034a610e07565b6040519080825280602002602001820160405280156103c457816020015b6103b16040518060e0016040528060006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8152602001906001900390816103685790505b50915060005b8381101561074d57818382815181106103e5576103e5610e6e565b60209081029190910101516001600160a01b0391821690526040517fbd28c0f4000000000000000000000000000000000000000000000000000000008152838216600482015260009189169063bd28c0f49060240160a060405180830381865afa158015610457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047b9190610ea9565b9050806000015184838151811061049457610494610e6e565b6020026020010151602001818152505080602001518483815181106104bb576104bb610e6e565b6020026020010151606001818152505080604001518483815181106104e2576104e2610e6e565b6020908102919091010151608001526040517fd12ae8410000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015289169063d12ae841906024016040805180830381865afa15801561054f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105739190610f38565b85848151811061058557610585610e6e565b602002602001015160a0018685815181106105a2576105a2610e6e565b602002602001015160c00182815250828152505050876001600160a01b03166355ca38cf848685815181106105d9576105d9610e6e565b602002602001015160c001518786815181106105f7576105f7610e6e565b60200260200101516020015161060d9190610f5c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa15801561066e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106929190610dee565b8483815181106106a4576106a4610e6e565b6020908102919091010151604090810191909152517f765e01590000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015288169063765e015990602401602060405180830381865afa158015610715573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107399190610d54565b9250508061074690610e36565b90506103ca565b5050949350505050565b60606000846001600160a01b0316634d6228316040518163ffffffff1660e01b8152600401602060405180830381865afa158015610799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107bd9190610d54565b905060005b8481101561085f576040517fb72703ac0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015287169063b72703ac90602401602060405180830381865afa158015610829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084d9190610d54565b915061085881610e36565b90506107c2565b508267ffffffffffffffff81111561087957610879610e07565b6040519080825280602002602001820160405280156108f357816020015b6108e06040518060e0016040528060006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8152602001906001900390816108975790505b50915060005b8381101561074d578183828151811061091457610914610e6e565b60209081029190910101516001600160a01b0391821690526040517fbd28c0f4000000000000000000000000000000000000000000000000000000008152838216600482015260009189169063bd28c0f49060240160a060405180830381865afa158015610986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109aa9190610ea9565b905080600001518483815181106109c3576109c3610e6e565b6020026020010151602001818152505080602001518483815181106109ea576109ea610e6e565b602002602001015160600181815250508060400151848381518110610a1157610a11610e6e565b6020908102919091010151608001526040517fd12ae8410000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015289169063d12ae841906024016040805180830381865afa158015610a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa29190610f38565b858481518110610ab457610ab4610e6e565b602002602001015160a001868581518110610ad157610ad1610e6e565b602002602001015160c00182815250828152505050876001600160a01b03166355ca38cf84868581518110610b0857610b08610e6e565b602002602001015160c00151878681518110610b2657610b26610e6e565b602002602001015160200151610b3c9190610f5c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc19190610dee565b848381518110610bd357610bd3610e6e565b6020908102919091010151604090810191909152517fb72703ac0000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015288169063b72703ac90602401602060405180830381865afa158015610c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c689190610d54565b92505080610c7590610e36565b90506108f9565b6001600160a01b0381168114610c9157600080fd5b50565b600080600060608486031215610ca957600080fd5b8335610cb481610c7c565b95602085013595506040909401359392505050565b602080825282518282018190526000919060409081850190868401855b82811015610d4757815180516001600160a01b0316855286810151878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c0908101519085015260e09093019290850190600101610ce6565b5091979650505050505050565b600060208284031215610d6657600080fd5b8151610d7181610c7c565b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082018281126000831280158216821582161715610dae57610dae610d78565b505092915050565b60007f80000000000000000000000000000000000000000000000000000000000000008203610de757610de7610d78565b5060000390565b600060208284031215610e0057600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b81810381811115610e3057610e30610d78565b92915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610e6757610e67610d78565b5060010190565b634e487b7160e01b600052603260045260246000fd5b80516fffffffffffffffffffffffffffffffff81168114610ea457600080fd5b919050565b600060a08284031215610ebb57600080fd5b60405160a0810181811067ffffffffffffffff82111715610eec57634e487b7160e01b600052604160045260246000fd5b8060405250825181526020830151602082015260408301516040820152606083015160058110610f1b57600080fd5b6060820152610f2c60808401610e84565b60808201529392505050565b60008060408385031215610f4b57600080fd5b505080516020909101519092909150565b80820180821115610e3057610e30610d7856fea264697066735822122000b8cc7c1dcd8c4c6b2c82af4e8cb071b5823c472b515a41282ea3f94aa9232864736f6c63430008130033",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  },
  "storageLayout": {
    "storage": [],
    "types": null
  }
}