Skip to content

Commit

Permalink
chore: migrate asset manager contract (#160)
Browse files Browse the repository at this point in the history
* chore: migrate asset manager contract

* fix: bridges folder structure

* fix: swapper folder structure

* fix: config engine test structure

* fix: type and unused import

* docs: fix author
  • Loading branch information
brotherlymite authored Nov 3, 2023
1 parent 78e58db commit fb9c5de
Show file tree
Hide file tree
Showing 32 changed files with 1,849 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {Script} from 'forge-std/Script.sol';
import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol';
import {TransparentProxyFactory} from 'solidity-utils/contracts/transparent-proxy/TransparentProxyFactory.sol';

import {AaveSwapper} from './AaveSwapper.sol';
import {AaveSwapper} from 'src/swaps/AaveSwapper.sol';

contract DeplyAaveSwapper is Script {
function run() external {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
pragma solidity ^0.8.0;

import {EthereumScript, PolygonScript} from 'src/ScriptUtils.sol';
import {AavePolEthERC20Bridge} from './AavePolEthERC20Bridge.sol';
import {AavePolEthERC20Bridge} from 'src/bridges/AavePolEthERC20Bridge.sol';
import {AaveGovernanceV2} from 'aave-address-book/AaveGovernanceV2.sol';

contract DeployEthereum is EthereumScript {
Expand Down
14 changes: 14 additions & 0 deletions src/asset-manager/Common.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import {OwnableWithGuardian} from 'solidity-utils/contracts/access-control/OwnableWithGuardian.sol';

/// @author Llama
abstract contract Common is OwnableWithGuardian {
/// @notice Provided address is zero address
error InvalidZeroAddress();

/// @notice One week, in seconds. Vote-locking is rounded down to weeks.
uint256 internal constant WEEK = 7 days;
}
41 changes: 41 additions & 0 deletions src/asset-manager/LSDLiquidityGaugeManager.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import {ILiquidityGaugeController} from './interfaces/ILiquidityGaugeController.sol';
import {Common} from './Common.sol';

/// @author Llama
abstract contract LSDLiquidityGaugeManager is Common {
event GaugeControllerChanged(address indexed oldController, address indexed newController);
event GaugeVote(address indexed gauge, uint256 amount);

/// @notice Setting to the same controller address as currently set.
error SameController();

/// @notice Address of LSD Gauge Controller
address public gaugeControllerBalancer;

/// @notice Set the gauge controller used for gauge weight voting
/// @param _gaugeController The gauge controller address
function setGaugeController(address _gaugeController) public onlyOwnerOrGuardian {
if (_gaugeController == address(0)) revert InvalidZeroAddress();

address oldController = gaugeControllerBalancer;
if (oldController == _gaugeController) revert SameController();

gaugeControllerBalancer = _gaugeController;

emit GaugeControllerChanged(oldController, gaugeControllerBalancer);
}

/// @notice Vote for a gauge's weight
/// @param gauge the address of the gauge to vote for
/// @param weight the weight of gaugeAddress in basis points [0, 10.000]
function voteForGaugeWeight(address gauge, uint256 weight) external onlyOwnerOrGuardian {
if (gauge == address(0)) revert InvalidZeroAddress();

ILiquidityGaugeController(gaugeControllerBalancer).vote_for_gauge_weights(gauge, weight);
emit GaugeVote(gauge, weight);
}
}
171 changes: 171 additions & 0 deletions src/asset-manager/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
# Strategic Assets Manager Information

## Main Idea

The main idea of this new contract is for the DAO to be able to handle strategic assets (assets that will earn rewards, or assets that can be used to
vote on different protocols, for example) without the need to go through the full governance flow every week.

Take the following example: the DAO wants to hold veBAL as part of its strategy for the long term. To get the most out of veBAL, the DAO should "re-lock"
its holdings on a weekly basis. This is a very tedious approach and can lead to a lot of voter fatigue. Because of this, the StrategicAssetsManager contract
can be governed by the DAO, while some functions can be invoked by an allowed guardian, acting on the role of Asset Manager.

## Functionality

#### StrategicAssetsManager.sol

`function withdrawERC20(address token, address to, uint256 amount) external onlyOwner`

Sends ERC20 tokens to an address. Withdrawal mechanism.

`function updateGuardian(address _manager) external onlyOwner`

Updates guardian role, which in this contract functions as a strategic asset manager. Inherited from OwnableWithGuardian.

`function transferOwnership(address _owner) external onlyOwner`

Updates the owner of the contract. Inherited from Ownable.

#### VeTokenManager.sol

```
function buyBoost(
address underlying,
address delegator,
address receiver,
uint256 amount,
uint256 duration
) external onlyOwnerOrGuardian
```

Purchase boost to incentivize rewards earned by locking (up to 2.5x of earnings). Spend fee token.
For more info see: https://doc.paladin.vote/warden-boost/boost-market

The idea is to increase the yield in the provided liquidity.
For example, pay 10 BAL to boost rewards in a veBAL pool up to 2.5x times, to earn more BAL in return.

```
function sellBoost(
address underlying,
uint256 pricePerVote,
uint64 maxDuration,
uint64 expiryTime,
uint16 minPerc,
uint16 maxPerc,
bool useAdvicePrice
) external onlyOwnerOrGuardian
```

Owner of veToken allows others to incentivize their liquidity pools by selling boost. The price can be chosen by the user, or by setting useAdvicePrice, let Warden determine the price.
The seller of boost receives the native token.

```
function updateBoostOffer(
address underlying,
uint256 pricePerVote,
uint64 maxDuration,
uint64 expiryTime,
uint16 minPerc,
uint16 maxPerc,
bool useAdvicePrice
) external onlyOwnerOrGuardian
```

Allows the user to update an existing offer to sell boost.

`function removeBoostOffer(address underlying) external onlyOwnerOrGuardian`

Removes a boost offer.

` function claimBoostRewards(address underlying) external onlyOwnerOrGuardian`

Claim rewards earned by selling boost.

`function setSpaceIdVEBAL(address underlying, bytes32 _spaceId) external onlyOwnerOrGuardian`

Sets the spaceID that's used by protocol on Snapshot for voting. For example, "balancer.eth" is Balancer's spaceId on Snapshot.

```
function setDelegateVEBAL(
address underlying,
address newDelegate
) external onlyOwnerOrGuardian
```

Delegate tokens so they can vote on Snapshot.

`function clearDelegateVEBAL(address underlying) external onlyOwnerOrGuardian`

Remove the active delegate.

```
function setLockDurationVEBAL(
address underlying,
uint256 newLockDuration
) external onlyOwnerOrGuardian
```

Set the lock duration to specific time. For example, max lock for veBAL is 1 year, so set to 1 year (or less).

`function lockVEBAL(address underlying) external onlyOwnerOrGuardian`

The main function for veBAL.
Initially, it locks the B-80BAL-20WETH token to receive veBAL. (This contract needs to be allow-listed by Balancer prior to calling or it will fail).
On subsequent calls (for example, weekly) it extends the lock duration once again. The voting % available per token is dependent on the locking duration.
If locking duration is 6 months and the maximum duration is 1 year, then the voting weight is only half.
This function also locks more of the native token held by StrategicAssetsManager available on the contract.

`function unlockVEBAL(address underlying) external onlyOwnerOrGuardian`

Unlocks the veToken in order to receive the underlying once again. Lock duration needs to have passed or transaction will revert.

#### VlTokenManager.sol

`function lockVLAURA(uint256 amount) external onlyOwnerOrGuardian`

Locks AURA into vlAURA (if not locked before).

`function claimVLAURARewards() external onlyOwnerOrGuardian`

Claims rewards accrued by locking vlAURA.

`function delegateVLAURA(address delegatee) external onlyOwnerOrGuardian`

Delegates vlAURA for voting purposes.

`function relockVLAURA() external onlyOwnerOrGuardian`

Relocks vlAURA that has been previously locked.

`function unlockVLAURA() external onlyOwnerOrGuardian`

Unlock vlAURA position into AURA. Lock period needs to have passed or it will revert.

`function emergencyWithdrawVLAURA() external onlyOwnerOrGuardian`

Emergency function to exit a position if the AURA system is shut down.

##### LSDLiquidityGaugeManager.sol

`function setGaugeController(address token, address gaugeController) public onlyOwnerOrGuardian`

Sets the address that handles gauges for veTokens.

Here is the proposal on Balancer as it relates to GHO: https://forum.balancer.fi/t/bip-xxx-approve-the-smbpt-gauges-for-the-aave-sm/4949
This post has the explanation on all the steps the DAO can expect to interact with these protocols to maximize rewards.
The excalidraw towards the bottom of the page is helpful in seeing the full flow.

Curve docs on liquidity gauges: https://curve.readthedocs.io/dao-gauges.html

The main concept here is that the ecosystem rewards liquidity providers by rewarding them with token emissions. These tokens are distributed according to which gauges receive the
most votes.

```
function voteForGaugeWeight(
address token,
address gauge,
uint256 weight
) external onlyOwnerOrGuardian
```

Utilizing the veToken holdings, the DAO can vote to redirect emissions to the DAO's own gauge.
Here, by voting for the DAO's gauge, and also purchasing boost, the DAO can expect to earn a lot more BAL rewards over time than just by holding a veToken for example.
42 changes: 42 additions & 0 deletions src/asset-manager/StrategicAssetsManager.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol';
import {Initializable} from 'solidity-utils/contracts/transparent-proxy/Initializable.sol';
import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol';
import {AaveGovernanceV2} from 'aave-address-book/AaveGovernanceV2.sol';
import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol';

import {LSDLiquidityGaugeManager} from './LSDLiquidityGaugeManager.sol';
import {VeTokenManager} from './VeTokenManager.sol';
import {VlTokenManager} from './VlTokenManager.sol';

/// @author Llama
contract StrategicAssetsManager is
Initializable,
LSDLiquidityGaugeManager,
VeTokenManager,
VlTokenManager
{
using SafeERC20 for IERC20;

event WithdrawalERC20(address indexed _token, uint256 _amount);

/// @notice Initialize function
function initialize() external initializer {
_transferOwnership(AaveGovernanceV2.SHORT_EXECUTOR);
_updateGuardian(0x205e795336610f5131Be52F09218AF19f0f3eC60);
spaceIdBalancer = 'balancer.eth';
gaugeControllerBalancer = 0xC128468b7Ce63eA702C1f104D55A2566b13D3ABD;
lockDurationVEBAL = 365 days;
}

/// @notice Withdraw a specified amount of ERC20 token to the Aave Collector
/// @param token The address of the ERC20 token to withdraw
/// @param amount The amount of token to withdraw
function withdrawERC20(address token, uint256 amount) external onlyOwner {
IERC20(token).safeTransfer(address(AaveV3Ethereum.COLLECTOR), amount);
emit WithdrawalERC20(token, amount);
}
}
Loading

1 comment on commit fb9c5de

@github-actions
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Foundry report

forge 0.2.0 (09fe3e0 2023-11-02T00:21:11.736779974Z)
Build log
Compiling 276 files with 0.8.18
Solc 0.8.18 finished in 114.24s
Compiler run successful with warnings:
Warning (8760): This declaration has the same name as another declaration.
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:60:5:
   |
60 |     uint256 baseVariableBorrowRate,
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Note: The other declaration is here:
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:92:3:
   |
92 |   function baseVariableBorrowRate() external view override returns (uint256) {
   |   ^ (Relevant source part starts here and spans across multiple lines).

Warning (8760): This declaration has the same name as another declaration.
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:61:5:
   |
61 |     uint256 variableRateSlope1,
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
Note: The other declaration is here:
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:76:3:
   |
76 |   function variableRateSlope1() external view returns (uint256) {
   |   ^ (Relevant source part starts here and spans across multiple lines).

Warning (8760): This declaration has the same name as another declaration.
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:62:5:
   |
62 |     uint256 variableRateSlope2,
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
Note: The other declaration is here:
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:80:3:
   |
80 |   function variableRateSlope2() external view returns (uint256) {
   |   ^ (Relevant source part starts here and spans across multiple lines).

Warning (8760): This declaration has the same name as another declaration.
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:63:5:
   |
63 |     uint256 stableRateSlope1,
   |     ^^^^^^^^^^^^^^^^^^^^^^^^
Note: The other declaration is here:
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:84:3:
   |
84 |   function stableRateSlope1() external view returns (uint256) {
   |   ^ (Relevant source part starts here and spans across multiple lines).

Warning (8760): This declaration has the same name as another declaration.
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:64:5:
   |
64 |     uint256 stableRateSlope2
   |     ^^^^^^^^^^^^^^^^^^^^^^^^
Note: The other declaration is here:
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:88:3:
   |
88 |   function stableRateSlope2() external view returns (uint256) {
   |   ^ (Relevant source part starts here and spans across multiple lines).

Warning (2462): Visibility for constructor is ignored. If you want the contract to be non-deployable, making it "abstract" is sufficient.
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:57:3:
   |
57 |   constructor(
   |   ^ (Relevant source part starts here and spans across multiple lines).

Warning (5667): Unused function parameter. Remove or comment out the variable name to silence this warning.
   --> src/GovV3Helpers.sol:734:5:
    |
734 |     address votingPortal
    |     ^^^^^^^^^^^^^^^^^^^^

| Contract                                    | Size (kB) | Margin (kB) |
|---------------------------------------------|-----------|-------------|
| AaveGovernanceV2                            | 0.086     | 24.49       |
| AavePolEthERC20Bridge                       | 3.027     | 21.549      |
| AaveSafetyModule                            | 0.086     | 24.49       |
| AaveSwapper                                 | 5.613     | 18.963      |
| AaveV2Avalanche                             | 0.086     | 24.49       |
| AaveV2AvalancheAssets                       | 0.086     | 24.49       |
| AaveV2ConfigEngine                          | 3.18      | 21.396      |
| AaveV2Ethereum                              | 0.086     | 24.49       |
| AaveV2EthereumAMM                           | 0.086     | 24.49       |
| AaveV2EthereumAMMAssets                     | 0.086     | 24.49       |
| AaveV2EthereumArc                           | 0.086     | 24.49       |
| AaveV2EthereumArcAssets                     | 0.086     | 24.49       |
| AaveV2EthereumAssets                        | 0.086     | 24.49       |
| AaveV2EthereumRatesUpdate                   | 1.512     | 23.064      |
| AaveV2Fuji                                  | 0.086     | 24.49       |
| AaveV2FujiAssets                            | 0.086     | 24.49       |
| AaveV2Goerli                                | 0.086     | 24.49       |
| AaveV2GoerliAssets                          | 0.086     | 24.49       |
| AaveV2Mumbai                                | 0.086     | 24.49       |
| AaveV2MumbaiAssets                          | 0.086     | 24.49       |
| AaveV2Polygon                               | 0.086     | 24.49       |
| AaveV2PolygonAssets                         | 0.086     | 24.49       |
| AaveV3Arbitrum                              | 0.086     | 24.49       |
| AaveV3ArbitrumAssets                        | 0.086     | 24.49       |
| AaveV3ArbitrumEModes                        | 0.086     | 24.49       |
| AaveV3ArbitrumGoerli                        | 0.086     | 24.49       |
| AaveV3ArbitrumGoerliAssets                  | 0.086     | 24.49       |
| AaveV3ArbitrumGoerliEModes                  | 0.086     | 24.49       |
| AaveV3ArbitrumRatesUpdates070322            | 4.674     | 19.902      |
| AaveV3Avalanche                             | 0.086     | 24.49       |
| AaveV3AvalancheAssets                       | 0.086     | 24.49       |
| AaveV3AvalancheCollateralUpdate             | 3.408     | 21.168      |
| AaveV3AvalancheCollateralUpdateCorrectBonus | 3.408     | 21.168      |
| AaveV3AvalancheCollateralUpdateNoChange     | 3.428     | 21.148      |
| AaveV3AvalancheCollateralUpdateWrongBonus   | 3.408     | 21.168      |
| AaveV3AvalancheEModeCategoryUpdateEdgeBonus | 3.379     | 21.197      |
| AaveV3AvalancheEModeCategoryUpdateNoChange  | 3.443     | 21.133      |
| AaveV3AvalancheEModes                       | 0.086     | 24.49       |
| AaveV3AvalancheRatesUpdates070322           | 5.115     | 19.461      |
| AaveV3Base                                  | 0.086     | 24.49       |
| AaveV3BaseAssets                            | 0.086     | 24.49       |
| AaveV3BaseEModes                            | 0.086     | 24.49       |
| AaveV3ConfigEngine                          | 8.273     | 16.303      |
| AaveV3Ethereum                              | 0.086     | 24.49       |
| AaveV3EthereumAssetEModeUpdate              | 3.257     | 21.319      |
| AaveV3EthereumAssets                        | 0.086     | 24.49       |
| AaveV3EthereumEModes                        | 0.086     | 24.49       |
| AaveV3EthereumMockCapUpdate                 | 3.335     | 21.241      |
| AaveV3EthereumMockCustomListing             | 4.168     | 20.408      |
| AaveV3Fantom                                | 0.086     | 24.49       |
| AaveV3FantomAssets                          | 0.086     | 24.49       |
| AaveV3FantomEModes                          | 0.086     | 24.49       |
| AaveV3FantomTestnet                         | 0.086     | 24.49       |
| AaveV3FantomTestnetAssets                   | 0.086     | 24.49       |
| AaveV3FantomTestnetEModes                   | 0.086     | 24.49       |
| AaveV3Fuji                                  | 0.086     | 24.49       |
| AaveV3FujiAssets                            | 0.086     | 24.49       |
| AaveV3FujiEModes                            | 0.086     | 24.49       |
| AaveV3Gnosis                                | 0.086     | 24.49       |
| AaveV3GnosisAssets                          | 0.086     | 24.49       |
| AaveV3GnosisEModes                          | 0.086     | 24.49       |
| AaveV3GoerliGho                             | 0.086     | 24.49       |
| AaveV3GoerliGhoAssets                       | 0.086     | 24.49       |
| AaveV3GoerliGhoEModes                       | 0.086     | 24.49       |
| AaveV3Harmony                               | 0.086     | 24.49       |
| AaveV3HarmonyAssets                         | 0.086     | 24.49       |
| AaveV3HarmonyEModes                         | 0.086     | 24.49       |
| AaveV3Metis                                 | 0.086     | 24.49       |
| AaveV3MetisAssets                           | 0.086     | 24.49       |
| AaveV3MetisEModes                           | 0.086     | 24.49       |
| AaveV3Mumbai                                | 0.086     | 24.49       |
| AaveV3MumbaiAssets                          | 0.086     | 24.49       |
| AaveV3MumbaiEModes                          | 0.086     | 24.49       |
| AaveV3Optimism                              | 0.086     | 24.49       |
| AaveV3OptimismAssets                        | 0.086     | 24.49       |
| AaveV3OptimismEModes                        | 0.086     | 24.49       |
| AaveV3OptimismGoerli                        | 0.086     | 24.49       |
| AaveV3OptimismGoerliAssets                  | 0.086     | 24.49       |
| AaveV3OptimismGoerliEModes                  | 0.086     | 24.49       |
| AaveV3OptimismMockRatesUpdate               | 3.669     | 20.907      |
| AaveV3OptimismRatesUpdates070322            | 4.377     | 20.199      |
| AaveV3Polygon                               | 0.086     | 24.49       |
| AaveV3PolygonAssets                         | 0.086     | 24.49       |
| AaveV3PolygonBorrowUpdate                   | 3.428     | 21.148      |
| AaveV3PolygonEModeCategoryUpdate            | 3.377     | 21.199      |
| AaveV3PolygonEModes                         | 0.086     | 24.49       |
| AaveV3PolygonMockListing                    | 3.986     | 20.59       |
| AaveV3PolygonPriceFeedUpdate                | 3.276     | 21.3        |
| AaveV3PolygonRatesUpdates070322             | 5.73      | 18.846      |
| AaveV3ScrollAlpha                           | 0.086     | 24.49       |
| AaveV3ScrollAlphaAssets                     | 0.086     | 24.49       |
| AaveV3ScrollAlphaEModes                     | 0.086     | 24.49       |
| AaveV3ScrollSepolia                         | 0.086     | 24.49       |
| AaveV3ScrollSepoliaAssets                   | 0.086     | 24.49       |
| AaveV3ScrollSepoliaEModes                   | 0.086     | 24.49       |
| AaveV3Sepolia                               | 0.086     | 24.49       |
| AaveV3SepoliaAssets                         | 0.086     | 24.49       |
| AaveV3SepoliaEModes                         | 0.086     | 24.49       |
| Address                                     | 0.086     | 24.49       |
| AddressAliasHelper                          | 0.086     | 24.49       |
| BorrowEngine                                | 2.923     | 21.653      |
| CapsEngine                                  | 1.256     | 23.32       |
| CapsPlusRiskSteward                         | 2.607     | 21.969      |
| CapsPlusRiskStewardErrors                   | 0.556     | 24.02       |
| ChainHelpers                                | 0.086     | 24.49       |
| ChainIds                                    | 0.086     | 24.49       |
| CollateralEngine                            | 2.836     | 21.74       |
| ConfiguratorInputTypes                      | 0.086     | 24.49       |
| Create2Utils                                | 0.164     | 24.412      |
| CrosschainForwarderArbitrum                 | 2.246     | 22.33       |
| CrosschainForwarderMetis                    | 1.561     | 23.015      |
| CrosschainForwarderOptimism                 | 1.689     | 22.887      |
| CrosschainForwarderPolygon                  | 1.435     | 23.141      |
| DataTypes                                   | 0.086     | 24.49       |
| DefaultReserveInterestRateStrategy          | 3.485     | 21.091      |
| DeployEngineArbLib                          | 0.086     | 24.49       |
| DeployEngineAvaLib                          | 0.086     | 24.49       |
| DeployEngineBaseLib                         | 0.086     | 24.49       |
| DeployEngineEthLib                          | 0.086     | 24.49       |
| DeployEngineGnoLib                          | 0.086     | 24.49       |
| DeployEngineMetLib                          | 0.086     | 24.49       |
| DeployEngineOptLib                          | 0.086     | 24.49       |
| DeployEnginePolLib                          | 0.086     | 24.49       |
| DeployRatesFactoryArbLib                    | 0.086     | 24.49       |
| DeployRatesFactoryAvaLib                    | 0.086     | 24.49       |
| DeployRatesFactoryBasLib                    | 0.086     | 24.49       |
| DeployRatesFactoryEthLib                    | 0.086     | 24.49       |
| DeployRatesFactoryGnoLib                    | 0.086     | 24.49       |
| DeployRatesFactoryLib                       | 0.086     | 24.49       |
| DeployRatesFactoryMetLib                    | 0.086     | 24.49       |
| DeployRatesFactoryOptLib                    | 0.086     | 24.49       |
| DeployRatesFactoryPolLib                    | 0.086     | 24.49       |
| DeployV2EngineAvaLib                        | 0.086     | 24.49       |
| DeployV2EngineEthAMMLib                     | 0.086     | 24.49       |
| DeployV2EngineEthLib                        | 0.086     | 24.49       |
| DeployV2EnginePolLib                        | 0.086     | 24.49       |
| DeployV2RatesFactoryAvaLib                  | 0.086     | 24.49       |
| DeployV2RatesFactoryEthAMMLib               | 0.086     | 24.49       |
| DeployV2RatesFactoryEthLib                  | 0.086     | 24.49       |
| DeployV2RatesFactoryLib                     | 0.086     | 24.49       |
| DeployV2RatesFactoryPolLib                  | 0.086     | 24.49       |
| EModeEngine                                 | 4.404     | 20.172      |
| ERC1967Proxy                                | 0.699     | 23.877      |
| EngineFlags                                 | 0.086     | 24.49       |
| Errors                                      | 4.714     | 19.862      |
| FreezingSteward                             | 0.715     | 23.861      |
| FxChild                                     | 1.039     | 23.537      |
| FxRoot                                      | 0.811     | 23.765      |
| GovHelpers                                  | 0.086     | 24.49       |
| GovV3Helpers                                | 0.086     | 24.49       |
| GovV3StorageHelpers                         | 0.086     | 24.49       |
| GovernanceV3Arbitrum                        | 0.086     | 24.49       |
| GovernanceV3Avalanche                       | 0.086     | 24.49       |
| GovernanceV3BNB                             | 0.086     | 24.49       |
| GovernanceV3Base                            | 0.086     | 24.49       |
| GovernanceV3Ethereum                        | 0.086     | 24.49       |
| GovernanceV3Fuji                            | 0.086     | 24.49       |
| GovernanceV3Gnosis                          | 0.086     | 24.49       |
| GovernanceV3Goerli                          | 0.086     | 24.49       |
| GovernanceV3Metis                           | 0.086     | 24.49       |
| GovernanceV3Mumbai                          | 0.086     | 24.49       |
| GovernanceV3Optimism                        | 0.086     | 24.49       |
| GovernanceV3Polygon                         | 0.086     | 24.49       |
| IpfsUtils                                   | 0.086     | 24.49       |
| ListingEngine                               | 8.792     | 15.784      |
| MiscArbitrum                                | 0.086     | 24.49       |
| MiscAvalanche                               | 0.086     | 24.49       |
| MiscBase                                    | 0.086     | 24.49       |
| MiscEthereum                                | 0.086     | 24.49       |
| MiscFantom                                  | 0.086     | 24.49       |
| MiscGnosis                                  | 0.086     | 24.49       |
| MiscMetis                                   | 0.086     | 24.49       |
| MiscOptimism                                | 0.086     | 24.49       |
| MiscPolygon                                 | 0.086     | 24.49       |
| MockExecutor                                | 0.437     | 24.139      |
| MyPayload                                   | 1.53      | 23.046      |
| PayloadWithEmit                             | 0.15      | 24.426      |
| PayloadsControllerUtils                     | 0.086     | 24.49       |
| PercentageMath                              | 0.086     | 24.49       |
| PriceFeedEngine                             | 1.657     | 22.919      |
| ProxyAdmin                                  | 1.683     | 22.893      |
| ProxyHelpers                                | 0.086     | 24.49       |
| RateEngine                                  | 3.596     | 20.98       |
| ReserveConfiguration                        | 0.171     | 24.405      |
| SafeCast                                    | 0.086     | 24.49       |
| SafeERC20                                   | 0.086     | 24.49       |
| SafeMath                                    | 0.086     | 24.49       |
| StdStyle                                    | 0.086     | 24.49       |
| StorageHelpers                              | 0.086     | 24.49       |
| StorageSlot                                 | 0.086     | 24.49       |
| StrategicAssetsManager                      | 9.691     | 14.885      |
| TransparentProxyFactory                     | 7.505     | 17.071      |
| TransparentUpgradeableProxy                 | 2.096     | 22.48       |
| V2RateStrategyFactory                       | 8.842     | 15.734      |
| V3RateStrategyFactory                       | 9.279     | 15.297      |
| WadRayMath                                  | 0.086     | 24.49       |
| console                                     | 0.086     | 24.49       |
| console2                                    | 0.086     | 24.49       |
| safeconsole                                 | 0.086     | 24.49       |
| stdError                                    | 0.591     | 23.985      |
| stdJson                                     | 0.086     | 24.49       |
| stdMath                                     | 0.086     | 24.49       |
| stdStorage                                  | 0.086     | 24.49       |
| stdStorageSafe                              | 0.086     | 24.49       |
Test success 🌈
No files changed, compilation skipped

Running 3 tests for tests/bridges/AavePolEthERC20BridgeTest.t.sol:BridgeTest
[PASS] test_revertsIf_invalidChain() (gas: 8575)
[PASS] test_revertsIf_notOwner() (gas: 66660)
[PASS] test_successful() (gas: 59470)
Test result: ok. 3 passed; 0 failed; 0 skipped; finished in 1.58s

Running 2 tests for tests/bridges/AavePolEthERC20BridgeTest.t.sol:EmergencyTokenTransfer
[PASS] test_revertsIf_invalidCaller() (gas: 13104)
[PASS] test_successful_governanceCaller() (gas: 69603)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 523.08ms

Running 2 tests for tests/bridges/AavePolEthERC20BridgeTest.t.sol:ExitTest
[PASS] test_revertsIf_invalidChain() (gas: 11198)
[PASS] test_revertsIf_proofAlreadyProcessed() (gas: 39281)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 244.13ms

Running 2 tests for tests/bridges/AavePolEthERC20BridgeTest.t.sol:TransferOwnership
[PASS] test_revertsIf_invalidCaller() (gas: 14615)
[PASS] test_successful() (gas: 13392)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.18ms

Running 2 tests for tests/bridges/AavePolEthERC20BridgeTest.t.sol:WithdrawToCollectorTest
[PASS] test_revertsIf_invalidChain() (gas: 10872)
[PASS] test_successful() (gas: 76344)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.34s

Running 6 tests for tests/swaps/AaveSwapperTest.t.sol:AaveSwapperSwap
[PASS] test_revertsIf_amountIsZero() (gas: 12452)
[PASS] test_revertsIf_fromTokenIsZeroAddress() (gas: 12435)
[PASS] test_revertsIf_invalidCaller() (gas: 11669)
[PASS] test_revertsIf_invalidRecipient() (gas: 12496)
[PASS] test_revertsIf_toTokenIsZeroAddress() (gas: 12373)
[PASS] test_successful() (gas: 476571)
Test result: ok. 6 passed; 0 failed; 0 skipped; finished in 2.06s

Running 3 tests for tests/swaps/AaveSwapperTest.t.sol:CancelSwap
[PASS] test_revertsIf_invalidCaller() (gas: 15418)
[PASS] test_revertsIf_noMatchingTrade() (gas: 482928)
[PASS] test_successful() (gas: 588040)
Test result: ok. 3 passed; 0 failed; 0 skipped; finished in 1.24s

Running 2 tests for tests/swaps/AaveSwapperTest.t.sol:EmergencyTokenTransfer
[PASS] test_revertsIf_invalidCaller() (gas: 10861)
[PASS] test_successful_governanceCaller() (gas: 304551)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.26s

Running 7 tests for tests/swaps/AaveSwapperTest.t.sol:GetExpectedOut
[PASS] test_aaveToUsdc() (gas: 84122)
[PASS] test_aaveToUsdc_withEthBasedOracles() (gas: 84115)
[PASS] test_balTo80BAL20WETH() (gas: 83868)
[PASS] test_ethToBal() (gas: 69531)
[PASS] test_ethToDai() (gas: 67281)
[PASS] test_revertsIf_fromOracleIsAddressZero() (gas: 9238)
[PASS] test_revertsIf_toOracleIsAddressZero() (gas: 9242)
Test result: ok. 7 passed; 0 failed; 0 skipped; finished in 6.61s

Running 1 test for tests/swaps/AaveSwapperTest.t.sol:Initialize
[PASS] test_revertsIf_alreadyInitialized() (gas: 10894)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 779.61µs

Running 2 tests for tests/swaps/AaveSwapperTest.t.sol:RemoveGuardian
[PASS] test_revertsIf_invalidCaller() (gas: 12924)
[PASS] test_successful() (gas: 16184)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 839.81µs

Running 2 tests for tests/swaps/AaveSwapperTest.t.sol:TransferOwnership
[PASS] test_revertsIf_invalidCaller() (gas: 12352)
[PASS] test_successful() (gas: 18297)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 945.71µs

Running 2 tests for tests/swaps/AaveSwapperTest.t.sol:UpdateGuardian
[PASS] test_revertsIf_invalidCaller() (gas: 14546)
[PASS] test_successful() (gas: 22582)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 949.01µs

Running 1 test for tests/ProtocolV2TestBase.t.sol:ProtocolV2TestE2ETestAsset
[PASS] test_e2eTestAssetUSDT() (gas: 3467300)
Logs:
  E2E: Collateral DAI, TestAsset USDT
  SUPPLY: DAI, Amount: 191494485073629973980349
  SUPPLY: USDT, Amount: 1922278804
  WITHDRAW: USDT, Amount: 961139402
  WITHDRAW: USDT, Amount: 961139403
  BORROW: USDT, Amount 1922278804, Stable: false
  REPAY: USDT, Amount: 1922278804
  BORROW: USDT, Amount 1922278804, Stable: true
  REPAY: USDT, Amount: 1922278804

Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 40.01s

Running 1 test for tests/ProtocolV3TestBase.t.sol:ProtocolV3TestBaseTest
[PASS] test_e2eTestDPI() (gas: 2131017)
Logs:
  E2E: Collateral WMATIC, TestAsset DPI
  SUPPLY: WMATIC, Amount: 18494019080464425505952
  SUPPLY: DPI, Amount: 1618633986381736259
  WITHDRAW: DPI, Amount: 809316993190868129
  WITHDRAW: DPI, Amount: 809316993190868130
  BORROW: DPI, Amount 1618633986381736259, Stable: false
  REPAY: DPI, Amount: 1618633986381736259

Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 18.59s

Running 1 test for tests/ProtocolV3TestBase.t.sol:ProtocolV3TestE2ETestAll
[PASS] test_e2e() (gas: 12079039)
Logs:
  E2E: Collateral LINK, TestAsset DAI
  SUPPLY: LINK, Amount: 1616553507921112188813
  SUPPLY: DAI, Amount: 100002834080317836207
  WITHDRAW: DAI, Amount: 50001417040158918103
  WITHDRAW: DAI, Amount: 50001417040158918104
  BORROW: DAI, Amount 100002834080317836207, Stable: false
  REPAY: DAI, Amount: 100002834080317836207
  BORROW: DAI, Amount 100002834080317836207, Stable: true
  REPAY: DAI, Amount: 100002834080317836207
  E2E: Collateral LINK, TestAsset LINK
  SUPPLY: LINK, Amount: 1616553507921112188813
  SUPPLY: LINK, Amount: 16165535079211121888
  WITHDRAW: LINK, Amount: 8082767539605560944
  WITHDRAW: LINK, Amount: 8082767539605560944
  BORROW: LINK, Amount 16165535079211121888, Stable: false
  REPAY: LINK, Amount: 16165535079211121888
  E2E: Collateral LINK, TestAsset USDC
  SUPPLY: LINK, Amount: 1616553507921112188813
  SUPPLY: USDC, Amount: 100000000
  WITHDRAW: USDC, Amount: 50000000
  WITHDRAW: USDC, Amount: 50000000
  BORROW: USDC, Amount 100000000, Stable: false
  REPAY: USDC, Amount: 100000000
  BORROW: USDC, Amount 100000000, Stable: true
  REPAY: USDC, Amount: 100000000
  E2E: Collateral LINK, TestAsset WBTC
  SUPPLY: LINK, Amount: 1616553507921112188813
  SUPPLY: WBTC, Amount: 385965
  WITHDRAW: WBTC, Amount: 192982
  WITHDRAW: WBTC, Amount: 192983
  BORROW: WBTC, Amount 385965, Stable: false
  REPAY: WBTC, Amount: 385965
  E2E: Collateral LINK, TestAsset WETH
  SUPPLY: LINK, Amount: 1616553507921112188813
  SUPPLY: WETH, Amount: 54558945484701671
  WITHDRAW: WETH, Amount: 27279472742350835
  WITHDRAW: WETH, Amount: 27279472742350836
  BORROW: WETH, Amount 54558945484701671, Stable: false
  REPAY: WETH, Amount: 54558945484701671
  E2E: Collateral LINK, TestAsset USDT
  SUPPLY: LINK, Amount: 1616553507921112188813
  SUPPLY: USDT, Amount: 99994515
  WITHDRAW: USDT, Amount: 49997257
  WITHDRAW: USDT, Amount: 49997258
  BORROW: USDT, Amount 99994515, Stable: false
  REPAY: USDT, Amount: 99994515
  BORROW: USDT, Amount 99994515, Stable: true
  REPAY: USDT, Amount: 99994515
  E2E: Collateral LINK, TestAsset AAVE
  Skip: AAVE, supply cap fully utilized
  E2E: Collateral LINK, TestAsset sUSD
  SUPPLY: LINK, Amount: 1616553507921112188813
  SUPPLY: sUSD, Amount: 100213932694959892580
  WITHDRAW: sUSD, Amount: 50106966347479946290
  WITHDRAW: sUSD, Amount: 50106966347479946291
  BORROW: sUSD, Amount 100213932694959892580, Stable: false
  REPAY: sUSD, Amount: 100213932694959892580
  E2E: Collateral LINK, TestAsset OP
  SUPPLY: LINK, Amount: 1616553507921112188813
  SUPPLY: OP, Amount: 65659881812212738017
  WITHDRAW: OP, Amount: 32829940906106369008
  WITHDRAW: OP, Amount: 32829940906106369009
  E2E: Collateral LINK, TestAsset wstETH
  SUPPLY: LINK, Amount: 1616553507921112188813
  SUPPLY: wstETH, Amount: 48438229171421992
  WITHDRAW: wstETH, Amount: 24219114585710996
  WITHDRAW: wstETH, Amount: 24219114585710996
  BORROW: wstETH, Amount 48438229171421992, Stable: false
  REPAY: wstETH, Amount: 48438229171421992
  E2E: Collateral LINK, TestAsset LUSD
  SUPPLY: LINK, Amount: 1616553507921112188813
  SUPPLY: LUSD, Amount: 99436925482654158084
  WITHDRAW: LUSD, Amount: 49718462741327079042
  WITHDRAW: LUSD, Amount: 49718462741327079042
  BORROW: LUSD, Amount 99436925482654158084, Stable: false
  REPAY: LUSD, Amount: 99436925482654158084
  E2E: TestAsset MAI SKIPPED

Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 25.24s

Running 1 test for tests/v2-config-engine/AaveV2ConfigEngineTest.t.sol:AaveV2ConfigEngineTest
[PASS] testV2RateStrategiesUpdates() (gas: 189176059)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 77.60s

Running 1 test for tests/v3-config-engine/AaveV3ConfigEngineGauntletProposal.t.sol:AaveV3ArbitrumConfigEngineRatesTest
[PASS] testEngine() (gas: 17774119)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 23.00s

Running 1 test for tests/v3-config-engine/AaveV3ConfigEngineGauntletProposal.t.sol:AaveV3AvalancheConfigEngineRatesTest
[PASS] testEngine() (gas: 27701821)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 10.43s

Running 1 test for tests/ProtocolV3TestBase.t.sol:ProtocolV3TestE2ETestAllMainnet
[PASS] test_e2e() (gas: 21893289)
Logs:
  E2E: Collateral WETH, TestAsset WETH
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: WETH, Amount: 60586390958843131
  WITHDRAW: WETH, Amount: 30293195479421565
  WITHDRAW: WETH, Amount: 30293195479421566
  BORROW: WETH, Amount 60586390958843131, Stable: false
  REPAY: WETH, Amount: 60586390958843131
  E2E: Collateral WETH, TestAsset wstETH
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: wstETH, Amount: 53280673161492371
  WITHDRAW: wstETH, Amount: 26640336580746185
  WITHDRAW: wstETH, Amount: 26640336580746186
  BORROW: wstETH, Amount 53280673161492371, Stable: false
  REPAY: wstETH, Amount: 53280673161492371
  E2E: Collateral WETH, TestAsset WBTC
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: WBTC, Amount: 383041
  WITHDRAW: WBTC, Amount: 191520
  WITHDRAW: WBTC, Amount: 191521
  BORROW: WBTC, Amount 383041, Stable: false
  REPAY: WBTC, Amount: 383041
  E2E: Collateral WETH, TestAsset USDC
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: USDC, Amount: 99997805
  WITHDRAW: USDC, Amount: 49998902
  WITHDRAW: USDC, Amount: 49998903
  BORROW: USDC, Amount 99997805, Stable: false
  REPAY: USDC, Amount: 99997805
  E2E: Collateral WETH, TestAsset DAI
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: DAI, Amount: 100010001000100010001
  WITHDRAW: DAI, Amount: 50005000500050005000
  WITHDRAW: DAI, Amount: 50005000500050005000
  BORROW: DAI, Amount 100010001000100010001, Stable: false
  REPAY: DAI, Amount: 100010001000100010001
  E2E: Collateral WETH, TestAsset LINK
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: LINK, Amount: 16762478423086336626
  WITHDRAW: LINK, Amount: 8381239211543168313
  WITHDRAW: LINK, Amount: 8381239211543168314
  BORROW: LINK, Amount 16762478423086336626, Stable: false
  REPAY: LINK, Amount: 16762478423086336626
  E2E: Collateral WETH, TestAsset AAVE
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: AAVE, Amount: 1779312582127864301
  WITHDRAW: AAVE, Amount: 889656291063932150
  WITHDRAW: AAVE, Amount: 889656291063932151
  E2E: Collateral WETH, TestAsset cbETH
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: cbETH, Amount: 57866658031368797
  WITHDRAW: cbETH, Amount: 28933329015684398
  WITHDRAW: cbETH, Amount: 28933329015684400
  BORROW: cbETH, Amount 57866658031368797, Stable: false
  REPAY: cbETH, Amount: 57866658031368797
  E2E: Collateral WETH, TestAsset USDT
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: USDT, Amount: 100057032
  WITHDRAW: USDT, Amount: 50028516
  WITHDRAW: USDT, Amount: 50028516
  BORROW: USDT, Amount 100057032, Stable: false
  REPAY: USDT, Amount: 100057032
  E2E: Collateral WETH, TestAsset rETH
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: rETH, Amount: 56019957636630099
  WITHDRAW: rETH, Amount: 28009978818315049
  WITHDRAW: rETH, Amount: 28009978818315049
  BORROW: rETH, Amount 56019957636630099, Stable: false
  REPAY: rETH, Amount: 56019957636630099
  E2E: Collateral WETH, TestAsset LUSD
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: LUSD, Amount: 100115968330756248192
  WITHDRAW: LUSD, Amount: 50057984165378124096
  WITHDRAW: LUSD, Amount: 50057984165378124096
  BORROW: LUSD, Amount 100115968330756248192, Stable: false
  REPAY: LUSD, Amount: 100115968330756248192
  E2E: Collateral WETH, TestAsset CRV
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: CRV, Amount: 223005138752013290392
  WITHDRAW: CRV, Amount: 111502569376006645196
  WITHDRAW: CRV, Amount: 111502569376006645196
  E2E: Collateral WETH, TestAsset MKR
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: MKR, Amount: 98727441294737554
  WITHDRAW: MKR, Amount: 49363720647368777
  WITHDRAW: MKR, Amount: 49363720647368777
  BORROW: MKR, Amount 98727441294737554, Stable: false
  REPAY: MKR, Amount: 98727441294737554
  E2E: Collateral WETH, TestAsset SNX
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: SNX, Amount: 48449612403100775193
  WITHDRAW: SNX, Amount: 24224806201550387596
  WITHDRAW: SNX, Amount: 24224806201550387597
  BORROW: SNX, Amount 48449612403100775193, Stable: false
  REPAY: SNX, Amount: 48449612403100775193
  E2E: Collateral WETH, TestAsset BAL
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: BAL, Amount: 29102153909197170579
  WITHDRAW: BAL, Amount: 14551076954598585289
  WITHDRAW: BAL, Amount: 14551076954598585290
  BORROW: BAL, Amount 29102153909197170579, Stable: false
  REPAY: BAL, Amount: 29102153909197170579
  E2E: Collateral WETH, TestAsset UNI
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: UNI, Amount: 21784934158663696976
  WITHDRAW: UNI, Amount: 10892467079331848488
  WITHDRAW: UNI, Amount: 10892467079331848487
  BORROW: UNI, Amount 21784934158663696976, Stable: false
  REPAY: UNI, Amount: 21784934158663696976
  E2E: Collateral WETH, TestAsset LDO
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: LDO, Amount: 63030843796742294959
  WITHDRAW: LDO, Amount: 31515421898371147479
  WITHDRAW: LDO, Amount: 31515421898371147480
  BORROW: LDO, Amount 63030843796742294959, Stable: false
  REPAY: LDO, Amount: 63030843796742294959
  E2E: Collateral WETH, TestAsset ENS
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: ENS, Amount: 12437764195368907456
  WITHDRAW: ENS, Amount: 6218882097684453728
  WITHDRAW: ENS, Amount: 6218882097684453729
  BORROW: ENS, Amount 12437764195368907456, Stable: false
  REPAY: ENS, Amount: 12437764195368907456
  E2E: Collateral WETH, TestAsset 1INCH
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: 1INCH, Amount: 410278510592180821883
  WITHDRAW: 1INCH, Amount: 205139255296090410941
  WITHDRAW: 1INCH, Amount: 205139255296090410942
  BORROW: 1INCH, Amount 410278510592180821883, Stable: false
  REPAY: 1INCH, Amount: 410278510592180821883
  E2E: Collateral WETH, TestAsset FRAX
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: FRAX, Amount: 100168997118418426095
  WITHDRAW: FRAX, Amount: 50084498559209213047
  WITHDRAW: FRAX, Amount: 50084498559209213049
  BORROW: FRAX, Amount 100168997118418426095, Stable: false
  REPAY: FRAX, Amount: 100168997118418426095
  E2E: TestAsset GHO SKIPPED
  E2E: Collateral WETH, TestAsset RPL
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: RPL, Amount: 4169283941609818799
  WITHDRAW: RPL, Amount: 2084641970804909399
  WITHDRAW: RPL, Amount: 2084641970804909401
  BORROW: RPL, Amount 4169283941609818799, Stable: false
  REPAY: RPL, Amount: 4169283941609818799

Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 45.60s

Running 2 tests for tests/ProtocolV3TestBase.t.sol:ProtocolV3TestE2ETestAsset
[PASS] test_e2eTestAssetMAI() (gas: 1672061)
Logs:
  E2E: Collateral DAI, TestAsset MAI
  SUPPLY: DAI, Amount: 10000000000000000000000
  SUPPLY: MAI, Amount: 100855007402202840780
  WITHDRAW: MAI, Amount: 50427503701101420390
  WITHDRAW: MAI, Amount: 50427503701101420389
  BORROW: MAI, Amount 100855007402202840780, Stable: false
  REPAY: MAI, Amount: 100855007402202840780

[PASS] test_e2eTestAssetUSDC() (gas: 2064284)
Logs:
  E2E: Collateral DAI, TestAsset USDC
  SUPPLY: DAI, Amount: 10000000000000000000000
  SUPPLY: USDC, Amount: 100000866
  WITHDRAW: USDC, Amount: 50000433
  WITHDRAW: USDC, Amount: 50000433
  BORROW: USDC, Amount 100000866, Stable: false
  REPAY: USDC, Amount: 100000866
  BORROW: USDC, Amount 100000866, Stable: true
  REPAY: USDC, Amount: 100000866

Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 25.33s

Running 1 test for tests/v3-config-engine/AaveV3ConfigEngineGauntletProposal.t.sol:AaveV3OptimismConfigEngineRatesTest
[PASS] testEngine() (gas: 20602118)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 32.26s

Running 1 test for tests/ProtocolV3TestBase.t.sol:ProtocolV3TestE2ETestSnapshot
[PASS] test_snapshot() (gas: 4686931)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.13s

Running 2 tests for tests/ProxyHelpersTest.t.sol:ProxyHelpersTest
[PASS] testAdmin() (gas: 3274)
[PASS] testImplementation() (gas: 3219)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 231.66ms

Running 4 tests for tests/asset-manager/TestLSDLiquidityGaugeManager.t.sol:SetGaugeController
[PASS] test_revertsIf_invalidCaller() (gas: 12872)
[PASS] test_revertsIf_invalidZeroAddress() (gas: 11485)
[PASS] test_revertsIf_settingToSameController() (gas: 36517)
[PASS] test_successful() (gas: 39567)
Test result: ok. 4 passed; 0 failed; 0 skipped; finished in 217.84ms

Running 3 tests for tests/asset-manager/TestLSDLiquidityGaugeManager.t.sol:VoteForGaugeWeight
[PASS] test_revertsIf_gaugeIsZeroAddress() (gas: 11597)
[PASS] test_revertsIf_invalidCaller() (gas: 12972)
[PASS] test_successful() (gas: 784417)
Test result: ok. 3 passed; 0 failed; 0 skipped; finished in 4.18s

Running 1 test for tests/asset-manager/TestStrategicAssetsManager.t.sol:Initialize
[PASS] test_revertsIf_alreadyInitialized() (gas: 10916)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 945.41µs

Running 2 tests for tests/asset-manager/TestStrategicAssetsManager.t.sol:RemoveStrategicAssetManager
[PASS] test_revertsIf_invalidCaller() (gas: 12902)
[PASS] test_successful() (gas: 16362)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 874.01µs

Running 2 tests for tests/asset-manager/TestStrategicAssetsManager.t.sol:SetStrategicAssetManager
[PASS] test_revertsIf_invalidCaller() (gas: 14524)
[PASS] test_successful() (gas: 22760)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.08ms

Running 2 tests for tests/asset-manager/TestStrategicAssetsManager.t.sol:TransferOwnership
[PASS] test_revertsIf_invalidCaller() (gas: 12308)
[PASS] test_successful() (gas: 18232)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.04ms

Running 3 tests for tests/asset-manager/TestStrategicAssetsManager.t.sol:WithdrawERC20
[PASS] test_revertsIf_insufficientBalance() (gas: 18086)
[PASS] test_revertsIf_invalidCaller() (gas: 10801)
[PASS] test_successful() (gas: 180463)
Test result: ok. 3 passed; 0 failed; 0 skipped; finished in 39.50ms

Running 3 tests for tests/asset-manager/TestVeTokenManager.t.sol:BuyBoostTest
[PASS] test_revertsIf_estimatedFeeExceedsMaxFee() (gas: 51608)
[PASS] test_revertsIf_invalidCaller() (gas: 16493)
[PASS] test_successful() (gas: 499011)
Test result: ok. 3 passed; 0 failed; 0 skipped; finished in 1.83s

Running 3 tests for tests/asset-manager/TestVeTokenManager.t.sol:Claim
[PASS] test_revertsIf_invalidCaller() (gas: 12810)
[PASS] test_revertsIf_noRewardsWereEarned() (gas: 164020)
[PASS] test_successful() (gas: 1122110)
Test result: ok. 3 passed; 0 failed; 0 skipped; finished in 666.18ms

Running 2 tests for tests/asset-manager/TestVeTokenManager.t.sol:ClearDelegationSnapshot
[PASS] test_revertsIf_invalidCaller() (gas: 12801)
[PASS] test_successful() (gas: 100175)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 118.31ms

Running 5 tests for tests/asset-manager/TestVeTokenManager.t.sol:LockTest
[PASS] test_revertsIf_invalidCaller() (gas: 12834)
[PASS] test_revertsIf_nothingToLockOrRelock() (gas: 119271)
[PASS] test_successful_increaseBalance() (gas: 794326)
[PASS] test_successful_increaseUnlockTime() (gas: 819150)
[PASS] test_successful_locksFirstTime() (gas: 511921)
Test result: ok. 5 passed; 0 failed; 0 skipped; finished in 550.87ms

Running 2 tests for tests/asset-manager/TestVeTokenManager.t.sol:RemoveBoostOfferTest
[PASS] test_revertsIf_invalidCaller() (gas: 12780)
[PASS] test_successful() (gas: 149611)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.55ms

Running 2 tests for tests/asset-manager/TestVeTokenManager.t.sol:SellBoostTest
[PASS] test_revertsIf_invalidCaller() (gas: 13541)
[PASS] test_successful() (gas: 164938)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.65ms

Running 2 tests for tests/asset-manager/TestVeTokenManager.t.sol:SetDelegationSnapshot
[PASS] test_revertsIf_invalidCaller() (gas: 14537)
[PASS] test_successful() (gas: 101663)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.18ms

Running 2 tests for tests/asset-manager/TestVeTokenManager.t.sol:SetLockDurationTest
[PASS] test_revertsIf_invalidCaller() (gas: 12828)
[PASS] test_successful() (gas: 35682)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 975.11µs

Running 2 tests for tests/asset-manager/TestVeTokenManager.t.sol:SetSpaceIdTest
[PASS] test_revertsIf_invalidCaller() (gas: 12769)
[PASS] test_successful() (gas: 101468)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.17ms

Running 3 tests for tests/asset-manager/TestVeTokenManager.t.sol:UnlockTest
[PASS] test_revertsIf_invalidCaller() (gas: 12790)
[PASS] test_revertsIf_unlockTimeHasNotPassed() (gas: 522526)
[PASS] test_successful_unlock() (gas: 5302141)
Test result: ok. 3 passed; 0 failed; 0 skipped; finished in 9.47s

Running 3 tests for tests/asset-manager/TestVeTokenManager.t.sol:UpdateBoostOfferTest
[PASS] test_revertsIf_invalidCaller() (gas: 13574)
[PASS] test_revertsIf_noOfferExists() (gas: 22570)
[PASS] test_successful() (gas: 181149)
Test result: ok. 3 passed; 0 failed; 0 skipped; finished in 2.22ms

Running 2 tests for tests/asset-manager/TestVlTokenManager.t.sol:ClaimVLAURARewardsTest
[PASS] test_revertsIf_invalidCaller() (gas: 12801)
[PASS] test_successful() (gas: 335465)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 846.47ms

Running 3 tests for tests/asset-manager/TestVlTokenManager.t.sol:DelegateVLAURATest
[PASS] test_revertsIf_invalidCaller() (gas: 14551)
[PASS] test_revertsIf_nothingToDelegate() (gas: 23759)
[PASS] test_revertsIf_successful() (gas: 375064)
Test result: ok. 3 passed; 0 failed; 0 skipped; finished in 112.15ms

Running 2 tests for tests/asset-manager/TestVlTokenManager.t.sol:EmergencyWithdrawVLAURA
[PASS] test_revertsIf_invalidCaller() (gas: 12811)
[PASS] test_successful() (gas: 371403)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 125.32ms

Running 3 tests for tests/asset-manager/TestVlTokenManager.t.sol:LockVLAURATest
[PASS] test_revertsIf_insufficientBalance() (gas: 93448)
[PASS] test_revertsIf_invalidCaller() (gas: 12905)
[PASS] test_successful() (gas: 297802)
Test result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.14ms

Running 4 tests for tests/asset-manager/TestVlTokenManager.t.sol:RelockVLAURATest
[PASS] test_revertsIf_invalidCaller() (gas: 12788)
[PASS] test_revertsIf_noExpiredLocks() (gas: 308239)
[PASS] test_revertsIf_noLocks() (gas: 65175)
[PASS] test_successful() (gas: 687508)
Test result: ok. 4 passed; 0 failed; 0 skipped; finished in 665.48ms

Running 4 tests for tests/asset-manager/TestVlTokenManager.t.sol:UnlockVLAURATest
[PASS] test_revertsIf_invalidCaller() (gas: 12813)
[PASS] test_revertsIf_noExpiredLocks() (gas: 308265)
[PASS] test_revertsIf_noLocks() (gas: 65208)
[PASS] test_successful() (gas: 333296)
Test result: ok. 4 passed; 0 failed; 0 skipped; finished in 4.44ms

Running 2 tests for tests/v2-config-engine/V2RateStrategyFactory.t.sol:V2RateStrategyFactoryTest
[PASS] testCreateStrategies() (gas: 850760)
[PASS] testMultipleCreateStrategies() (gas: 850436)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.03s

Running 2 tests for tests/v3-config-engine/V3RateStrategyFactory.t.sol:V3RateStrategyFactoryTest
[PASS] testCreateStrategies() (gas: 714629)
[PASS] testMultipleCreateStrategies() (gas: 714609)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 277.86ms

Running 1 test for tests/GovTest.t.sol:GovernanceL2ExecutorTest
[PASS] testCreateProposal() (gas: 116279)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.44s

Running 2 tests for tests/GovTest.t.sol:GovernanceMainnetExecutorTest
[PASS] testCreateProposalLong() (gas: 165827)
[PASS] testCreateProposalShort() (gas: 161431)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.83s

Running 2 tests for tests/GovTest.t.sol:GovernanceTest
[PASS] testCreateProposal() (gas: 533168)
[PASS] testCreateProposalDynamicIpfsHash() (gas: 544941)
Logs:
  Info: This preview will only work when the file has been uploaded to ipfs
  Preview: https://app.aave.com/governance/ipfs-preview/?ipfsHash=0x12f2d9c91e4e23ae4009ab9ef5862ee0ae79498937b66252213221f04a5d5b32

Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 3.60s

Running 1 test for tests/v3-config-engine/AaveV3ConfigEngineGauntletProposal.t.sol:AaveV3PolygonConfigEngineRatesTest
[PASS] testEngine() (gas: 70927616)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 40.92s

Running 2 tests for tests/GovV2_5.t.sol:GovernanceV2_5Test
[PASS] test_helpers() (gas: 184063548)
Logs:
  0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
  0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0
  0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599
  0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
  0x6B175474E89094C44Da98b954EedeAC495271d0F
  0x514910771AF9Ca656af840dff83E8264EcF986CA
  0xBe9895146f7AF43049ca1c1AE358B0541Ea49704
  0xdAC17F958D2ee523a2206206994597C13D831ec7
  0xae78736Cd615f374D3085123A210448E74Fc6393
  0x5f98805A4E8be255a32880FDeC7F6728C6568bA0
  0xD533a949740bb3306d119CC777fa900bA034cd52
  0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2
  0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F
  0xba100000625a3754423978a60c9317c58a424e3D
  0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984
  0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32
  0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72
  0x111111111117dC0aa78b770fA6A738034120C302
  0x853d955aCEf822Db058eb8505911ED77F175b99e
  0xD33526068D116cE69F19A9ee46F0bd304F21A51f
  0xAf5191B0De278C7286d6C7CC6ab6BB8A73bA2Cd6
  0xdeFA4e8a7bcBA345F687a2f1456F5Edd9CE97202
  E2E: Collateral WETH, TestAsset WETH
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: WETH, Amount: 55179418376243240
  WITHDRAW: WETH, Amount: 27589709188121620
  WITHDRAW: WETH, Amount: 27589709188121620
  BORROW: WETH, Amount 55179418376243240, Stable: false
  REPAY: WETH, Amount: 55179418376243240
  E2E: Collateral WETH, TestAsset wstETH
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: wstETH, Amount: 48196659204067294
  WITHDRAW: wstETH, Amount: 24098329602033647
  WITHDRAW: wstETH, Amount: 24098329602033647
  BORROW: wstETH, Amount 48196659204067294, Stable: false
  REPAY: wstETH, Amount: 48196659204067294
  E2E: Collateral WETH, TestAsset WBTC
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: WBTC, Amount: 289850
  WITHDRAW: WBTC, Amount: 144925
  WITHDRAW: WBTC, Amount: 144924
  BORROW: WBTC, Amount 289850, Stable: false
  REPAY: WBTC, Amount: 289850
  E2E: Collateral WETH, TestAsset USDC
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: USDC, Amount: 99998952
  WITHDRAW: USDC, Amount: 49999476
  WITHDRAW: USDC, Amount: 49999475
  BORROW: USDC, Amount 99998952, Stable: false
  REPAY: USDC, Amount: 99998952
  E2E: Collateral WETH, TestAsset DAI
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: DAI, Amount: 99996515121448017536
  WITHDRAW: DAI, Amount: 49998257560724008768
  WITHDRAW: DAI, Amount: 49998257560724008767
  BORROW: DAI, Amount 99996515121448017536, Stable: false
  REPAY: DAI, Amount: 99996515121448017536
  E2E: Collateral WETH, TestAsset LINK
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: LINK, Amount: 8648238402397290301
  WITHDRAW: LINK, Amount: 4324119201198645150
  WITHDRAW: LINK, Amount: 4324119201198645152
  BORROW: LINK, Amount 8648238402397290301, Stable: false
  REPAY: LINK, Amount: 8648238402397290301
  E2E: Collateral WETH, TestAsset AAVE
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: AAVE, Amount: 1205506661799970371
  WITHDRAW: AAVE, Amount: 602753330899985185
  WITHDRAW: AAVE, Amount: 602753330899985186
  E2E: Collateral WETH, TestAsset cbETH
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: cbETH, Amount: 52540935125604580
  WITHDRAW: cbETH, Amount: 26270467562802290
  WITHDRAW: cbETH, Amount: 26270467562802291
  BORROW: cbETH, Amount 52540935125604580, Stable: false
  REPAY: cbETH, Amount: 52540935125604580
  E2E: Collateral WETH, TestAsset USDT
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: USDT, Amount: 99960561
  WITHDRAW: USDT, Amount: 49980280
  WITHDRAW: USDT, Amount: 49980280
  BORROW: USDT, Amount 99960561, Stable: false
  REPAY: USDT, Amount: 99960561
  E2E: Collateral WETH, TestAsset rETH
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: rETH, Amount: 50719930830671607
  WITHDRAW: rETH, Amount: 25359965415335803
  WITHDRAW: rETH, Amount: 25359965415335804
  BORROW: rETH, Amount 50719930830671607, Stable: false
  REPAY: rETH, Amount: 50719930830671607
  E2E: Collateral WETH, TestAsset LUSD
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: LUSD, Amount: 100400622580244595193
  WITHDRAW: LUSD, Amount: 50200311290122297596
  WITHDRAW: LUSD, Amount: 50200311290122297596
  BORROW: LUSD, Amount 100400622580244595193, Stable: false
  REPAY: LUSD, Amount: 100400622580244595193
  E2E: Collateral WETH, TestAsset CRV
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: CRV, Amount: 204130336484976446114
  WITHDRAW: CRV, Amount: 102065168242488223057
  WITHDRAW: CRV, Amount: 102065168242488223056
  E2E: Collateral WETH, TestAsset MKR
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: MKR, Amount: 71684741974355500
  WITHDRAW: MKR, Amount: 35842370987177750
  WITHDRAW: MKR, Amount: 35842370987177751
  BORROW: MKR, Amount 71684741974355500, Stable: false
  REPAY: MKR, Amount: 71684741974355500
  E2E: Collateral WETH, TestAsset SNX
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: SNX, Amount: 42773220027415666469
  WITHDRAW: SNX, Amount: 21386610013707833234
  WITHDRAW: SNX, Amount: 21386610013707833236
  BORROW: SNX, Amount 42773220027415666469, Stable: false
  REPAY: SNX, Amount: 42773220027415666469
  E2E: Collateral WETH, TestAsset BAL
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: BAL, Amount: 29166490391690361888
  WITHDRAW: BAL, Amount: 14583245195845180944
  WITHDRAW: BAL, Amount: 14583245195845180945
  BORROW: BAL, Amount 29166490391690361888, Stable: false
  REPAY: BAL, Amount: 29166490391690361888
  E2E: Collateral WETH, TestAsset UNI
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: UNI, Amount: 23620887402725642542
  WITHDRAW: UNI, Amount: 11810443701362821271
  WITHDRAW: UNI, Amount: 11810443701362821271
  BORROW: UNI, Amount 23620887402725642542, Stable: false
  REPAY: UNI, Amount: 23620887402725642542
  E2E: Collateral WETH, TestAsset LDO
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: LDO, Amount: 54901997600947410831
  WITHDRAW: LDO, Amount: 27450998800473705415
  WITHDRAW: LDO, Amount: 27450998800473705416
  BORROW: LDO, Amount 54901997600947410831, Stable: false
  REPAY: LDO, Amount: 54901997600947410831
  E2E: Collateral WETH, TestAsset ENS
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: ENS, Amount: 12601883915863587565
  WITHDRAW: ENS, Amount: 6300941957931793782
  WITHDRAW: ENS, Amount: 6300941957931793783
  BORROW: ENS, Amount 12601883915863587565, Stable: false
  REPAY: ENS, Amount: 12601883915863587565
  E2E: Collateral WETH, TestAsset 1INCH
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: 1INCH, Amount: 338983050847457627118
  WITHDRAW: 1INCH, Amount: 169491525423728813559
  WITHDRAW: 1INCH, Amount: 169491525423728813559
  BORROW: 1INCH, Amount 338983050847457627118, Stable: false
  REPAY: 1INCH, Amount: 338983050847457627118
  E2E: Collateral WETH, TestAsset FRAX
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: FRAX, Amount: 100027665651765965430
  WITHDRAW: FRAX, Amount: 50013832825882982715
  WITHDRAW: FRAX, Amount: 50013832825882982715
  BORROW: FRAX, Amount 100027665651765965430, Stable: false
  REPAY: FRAX, Amount: 100027665651765965430
  E2E: Collateral WETH, TestAsset GHO
  SUPPLY: WETH, Amount: 5517941837624324089
  BORROW: GHO, Amount 100000000000000000000, Stable: false
  REPAY: GHO, Amount: 100000000000000000000
  E2E: Collateral WETH, TestAsset RPL
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: RPL, Amount: 4239790130965128683
  WITHDRAW: RPL, Amount: 2119895065482564341
  WITHDRAW: RPL, Amount: 2119895065482564342
  BORROW: RPL, Amount 4239790130965128683, Stable: false
  REPAY: RPL, Amount: 4239790130965128683
  E2E: Collateral WETH, TestAsset sDAI
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: sDAI, Amount: 96069039361867938733
  WITHDRAW: sDAI, Amount: 48034519680933969366
  WITHDRAW: sDAI, Amount: 48034519680933969367
  E2E: Collateral WETH, TestAsset STG
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: STG, Amount: 206606306909578109301
  WITHDRAW: STG, Amount: 103303153454789054650
  WITHDRAW: STG, Amount: 103303153454789054651
  BORROW: STG, Amount 206606306909578109301, Stable: false
  REPAY: STG, Amount: 206606306909578109301
  E2E: Collateral WETH, TestAsset KNC
  SUPPLY: WETH, Amount: 5517941837624324089
  SUPPLY: KNC, Amount: 130492783814301461036
  WITHDRAW: KNC, Amount: 65246391907150730518
  WITHDRAW: KNC, Amount: 65246391907150730517
  BORROW: KNC, Amount 130492783814301461036, Stable: false
  REPAY: KNC, Amount: 130492783814301461036

[PASS] test_payloadCreation() (gas: 1305396)
Logs:
  0xf8741a9c000000000000000000000000ee56e2b3d491590b5b31738cc34d5232f378a8d500000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002e0686173680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009aee0b04504cef83a65ac3f0e838d0593bcb2bc70000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003a666f72776172645061796c6f6164466f72457865637574696f6e282875696e743235362c75696e74382c616464726573732c75696e743430292900000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dabad81af85554e9ae636395611c58f7ec1aaec5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000

Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 85.54s

Running 7 tests for tests/GovV3Test.t.sol:GovernanceV3Test
[PASS] test_executePayloadViaAddress() (gas: 76514)
[PASS] test_executePayloadViaId() (gas: 284239)
[PASS] test_helpers() (gas: 168311847)
Logs:
  0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
  0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0
  0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599
  0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
  0x6B175474E89094C44Da98b954EedeAC495271d0F
  0x514910771AF9Ca656af840dff83E8264EcF986CA
  0xBe9895146f7AF43049ca1c1AE358B0541Ea49704
  0xdAC17F958D2ee523a2206206994597C13D831ec7
  0xae78736Cd615f374D3085123A210448E74Fc6393
  0x5f98805A4E8be255a32880FDeC7F6728C6568bA0
  0xD533a949740bb3306d119CC777fa900bA034cd52
  0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2
  0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F
  0xba100000625a3754423978a60c9317c58a424e3D
  0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984
  0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32
  0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72
  0x111111111117dC0aa78b770fA6A738034120C302
  0x853d955aCEf822Db058eb8505911ED77F175b99e
  0xD33526068D116cE69F19A9ee46F0bd304F21A51f
  0xAf5191B0De278C7286d6C7CC6ab6BB8A73bA2Cd6
  E2E: Collateral WETH, TestAsset WETH
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: WETH, Amount: 63230428037981658
  WITHDRAW: WETH, Amount: 31615214018990829
  WITHDRAW: WETH, Amount: 31615214018990830
  BORROW: WETH, Amount 63230428037981658, Stable: false
  REPAY: WETH, Amount: 63230428037981658
  E2E: Collateral WETH, TestAsset wstETH
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: wstETH, Amount: 55315355475517205
  WITHDRAW: wstETH, Amount: 27657677737758602
  WITHDRAW: wstETH, Amount: 27657677737758603
  BORROW: wstETH, Amount 55315355475517205, Stable: false
  REPAY: wstETH, Amount: 55315355475517205
  E2E: Collateral WETH, TestAsset WBTC
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: WBTC, Amount: 356286
  WITHDRAW: WBTC, Amount: 178143
  WITHDRAW: WBTC, Amount: 178144
  BORROW: WBTC, Amount 356286, Stable: false
  REPAY: WBTC, Amount: 356286
  E2E: Collateral WETH, TestAsset USDC
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: USDC, Amount: 99992700
  WITHDRAW: USDC, Amount: 49996350
  WITHDRAW: USDC, Amount: 49996350
  BORROW: USDC, Amount 99992700, Stable: false
  REPAY: USDC, Amount: 99992700
  E2E: Collateral WETH, TestAsset DAI
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: DAI, Amount: 100008190670815939825
  WITHDRAW: DAI, Amount: 50004095335407969912
  WITHDRAW: DAI, Amount: 50004095335407969913
  BORROW: DAI, Amount 100008190670815939825, Stable: false
  REPAY: DAI, Amount: 100008190670815939825
  E2E: Collateral WETH, TestAsset LINK
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: LINK, Amount: 13398001018248077386
  WITHDRAW: LINK, Amount: 6699000509124038693
  WITHDRAW: LINK, Amount: 6699000509124038693
  BORROW: LINK, Amount 13398001018248077386, Stable: false
  REPAY: LINK, Amount: 13398001018248077386
  E2E: Collateral WETH, TestAsset AAVE
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: AAVE, Amount: 1564437759542101633
  WITHDRAW: AAVE, Amount: 782218879771050816
  WITHDRAW: AAVE, Amount: 782218879771050817
  E2E: Collateral WETH, TestAsset cbETH
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: cbETH, Amount: 60215197390490808
  WITHDRAW: cbETH, Amount: 30107598695245404
  WITHDRAW: cbETH, Amount: 30107598695245403
  BORROW: cbETH, Amount 60215197390490808, Stable: false
  REPAY: cbETH, Amount: 60215197390490808
  E2E: Collateral WETH, TestAsset USDT
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: USDT, Amount: 99999681
  WITHDRAW: USDT, Amount: 49999840
  WITHDRAW: USDT, Amount: 49999841
  BORROW: USDT, Amount 99999681, Stable: false
  REPAY: USDT, Amount: 99999681
  E2E: Collateral WETH, TestAsset rETH
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: rETH, Amount: 58194017021757264
  WITHDRAW: rETH, Amount: 29097008510878632
  WITHDRAW: rETH, Amount: 29097008510878632
  BORROW: rETH, Amount 58194017021757264, Stable: false
  REPAY: rETH, Amount: 58194017021757264
  E2E: Collateral WETH, TestAsset LUSD
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: LUSD, Amount: 100282477688803375123
  WITHDRAW: LUSD, Amount: 50141238844401687561
  WITHDRAW: LUSD, Amount: 50141238844401687562
  BORROW: LUSD, Amount 100282477688803375123, Stable: false
  REPAY: LUSD, Amount: 100282477688803375123
  E2E: Collateral WETH, TestAsset CRV
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: CRV, Amount: 227519912144551044854
  WITHDRAW: CRV, Amount: 113759956072275522427
  WITHDRAW: CRV, Amount: 113759956072275522428
  E2E: Collateral WETH, TestAsset MKR
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: MKR, Amount: 70128545975415666
  WITHDRAW: MKR, Amount: 35064272987707833
  WITHDRAW: MKR, Amount: 35064272987707833
  BORROW: MKR, Amount 70128545975415666, Stable: false
  REPAY: MKR, Amount: 70128545975415666
  E2E: Collateral WETH, TestAsset SNX
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: SNX, Amount: 52909493021237870498
  WITHDRAW: SNX, Amount: 26454746510618935249
  WITHDRAW: SNX, Amount: 26454746510618935249
  BORROW: SNX, Amount 52909493021237870498, Stable: false
  REPAY: SNX, Amount: 52909493021237870498
  E2E: Collateral WETH, TestAsset BAL
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: BAL, Amount: 32149519855279836558
  WITHDRAW: BAL, Amount: 16074759927639918279
  WITHDRAW: BAL, Amount: 16074759927639918279
  BORROW: BAL, Amount 32149519855279836558, Stable: false
  REPAY: BAL, Amount: 32149519855279836558
  E2E: Collateral WETH, TestAsset UNI
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: UNI, Amount: 24306982172850917130
  WITHDRAW: UNI, Amount: 12153491086425458565
  WITHDRAW: UNI, Amount: 12153491086425458565
  BORROW: UNI, Amount 24306982172850917130, Stable: false
  REPAY: UNI, Amount: 24306982172850917130
  E2E: Collateral WETH, TestAsset LDO
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: LDO, Amount: 62116514766837928316
  WITHDRAW: LDO, Amount: 31058257383418964158
  WITHDRAW: LDO, Amount: 31058257383418964158
  BORROW: LDO, Amount 62116514766837928316, Stable: false
  REPAY: LDO, Amount: 62116514766837928316
  E2E: Collateral WETH, TestAsset ENS
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: ENS, Amount: 13952686209449166798
  WITHDRAW: ENS, Amount: 6976343104724583399
  WITHDRAW: ENS, Amount: 6976343104724583398
  BORROW: ENS, Amount 13952686209449166798, Stable: false
  REPAY: ENS, Amount: 13952686209449166798
  E2E: Collateral WETH, TestAsset 1INCH
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: 1INCH, Amount: 400000000000000000000
  WITHDRAW: 1INCH, Amount: 200000000000000000000
  WITHDRAW: 1INCH, Amount: 199999999999999999999
  BORROW: 1INCH, Amount 400000000000000000000, Stable: false
  REPAY: 1INCH, Amount: 400000000000000000000
  E2E: Collateral WETH, TestAsset FRAX
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: FRAX, Amount: 99969922049552951003
  WITHDRAW: FRAX, Amount: 49984961024776475501
  WITHDRAW: FRAX, Amount: 49984961024776475502
  BORROW: FRAX, Amount 99969922049552951003, Stable: false
  REPAY: FRAX, Amount: 99969922049552951003
  E2E: Collateral WETH, TestAsset GHO
  SUPPLY: WETH, Amount: 6323042803798165897
  BORROW: GHO, Amount 100000000000000000000, Stable: false
  REPAY: GHO, Amount: 100000000000000000000
  E2E: Collateral WETH, TestAsset RPL
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: RPL, Amount: 5120405154638544972
  WITHDRAW: RPL, Amount: 2560202577319272486
  WITHDRAW: RPL, Amount: 2560202577319272486
  Skip Borrowing: RPL, borrow cap fully utilized
  E2E: Collateral WETH, TestAsset sDAI
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: sDAI, Amount: 96272113668407590597
  WITHDRAW: sDAI, Amount: 48136056834203795298
  WITHDRAW: sDAI, Amount: 48136056834203795299
  E2E: Collateral WETH, TestAsset STG
  SUPPLY: WETH, Amount: 6323042803798165897
  SUPPLY: STG, Amount: 245552865714897211079
  WITHDRAW: STG, Amount: 122776432857448605539
  WITHDRAW: STG, Amount: 122776432857448605540
  BORROW: STG, Amount 245552865714897211079, Stable: false
  REPAY: STG, Amount: 245552865714897211079

[PASS] test_injectPayloadIntoPayloadsController() (gas: 65056)
[PASS] test_injectProposalIntoGovernance() (gas: 105776)
[PASS] test_payloadCreation() (gas: 644803)
Logs:
  0x3bec1bfc00000000000000000000000000000000000000000000000000000000000000600000000000000000000000009b24c168d6a76b5459b1d47071a54962a4df36c36861736800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dabad81af85554e9ae636395611c58f7ec1aaec50000000000000000000000000000000000000000000000000000000000000000

[PASS] test_readyPayloadId() (gas: 176882)
Test result: ok. 7 passed; 0 failed; 0 skipped; finished in 77.50s

Running 1 test for tests/crosschainforwarders/MetisCrossChainForwarderTest.t.sol:MetisCrossChainForwarderTest
[PASS] testProposalE2E() (gas: 1213112)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 4.21s

Running 1 test for tests/crosschainforwarders/OptimismCrossChainForwarderTest.t.sol:OptimismCrossChainForwarderTest
[PASS] testProposalE2E() (gas: 1196698)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 4.48s

Running 1 test for tests/crosschainforwarders/PolygonCrossChainForwarderTest.t.sol:PolygonCrossChainForwarderTest
[PASS] testProposalE2E() (gas: 1049319)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.94s

Running 20 tests for tests/v3-config-engine/AaveV3ConfigEngineTest.t.sol:AaveV3ConfigEngineTest
[PASS] testArbitrumRateStrategiesUpdates() (gas: 29258058)
[PASS] testAssetEModeUpdates() (gas: 71553578)
[PASS] testAvaxRateStrategiesUpdates() (gas: 36353919)
[PASS] testBorrowsUpdates() (gas: 92354351)
[PASS] testCapsUpdates() (gas: 71568001)
[PASS] testCollateralUpdateCorrectBonus() (gas: 35815481)
[PASS] testCollateralUpdateWrongBonus() (gas: 8018847)
[PASS] testCollateralsUpdates() (gas: 35816942)
[PASS] testCollateralsUpdatesNoChange() (gas: 35792592)
[PASS] testEModeCategoryUpdates() (gas: 92415826)
[PASS] testEModeCategoryUpdatesNoChange() (gas: 35807331)
[PASS] testEModeCategoryUpdatesWrongBonus() (gas: 8032134)
[PASS] testFailCollateralsUpdatesNoChange() (gas: 8699549)
[PASS] testFailEModeCategoryUpdatesNoChange() (gas: 8047623)
[PASS] testListings() (gas: 98125267)
[PASS] testListingsCustom() (gas: 77059331)
[PASS] testOptimismRateStrategiesUpdates() (gas: 37521649)
[PASS] testPolygonRateStrategiesUpdates() (gas: 93068226)
[PASS] testPriceFeedsUpdates() (gas: 92277083)
[PASS] testRateStrategiesUpdates() (gas: 37329377)
Test result: ok. 20 passed; 0 failed; 0 skipped; finished in 177.20s

Running 3 tests for tests/crosschainforwarders/ArbitrumCrossChainForwarderTest.t.sol:ArbitrumCrossChainForwarderTest
[PASS] testHasSufficientGas() (gas: 24011)
[PASS] testProposalE2E() (gas: 1120307)
[PASS] testgetGetMaxSubmissionCost() (gas: 17204)
Test result: ok. 3 passed; 0 failed; 0 skipped; finished in 6.47s

Running 9 tests for tests/riskstewards/CapsPlusRiskSteward.t.sol:CapsPlusRiskSteward_Test
[PASS] test_debounce() (gas: 135500)
[PASS] test_increaseCapsMax() (gas: 119606)
[PASS] test_invalidCaller() (gas: 7547)
[PASS] test_keepCurrent() (gas: 52442)
[PASS] test_unlisted() (gas: 32845)
[PASS] test_updateBorrowCapBiggerMax() (gas: 37192)
[PASS] test_updateBorrowCapNotStrictlyHigher() (gas: 45964)
[PASS] test_updateSupplyCapBiggerMax() (gas: 36948)
[PASS] test_updateSupplyCapNotStrictlyHigher() (gas: 45517)
Test result: ok. 9 passed; 0 failed; 0 skipped; finished in 2.86s

Running 1 test for tests/swaps/DepositV2SwapPayloadTest.t.sol:DepositV2SwapPayloadTest
[PASS] test_successful() (gas: 476089)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.41s

Running 1 test for tests/ProtocolV2TestBase.t.sol:ProtocolV2TestBaseTest
[PASS] testE2E() (gas: 18721402)
Logs:
  E2E: Collateral AAVE, TestAsset USDT
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: USDT, Amount: 1922278804
  WITHDRAW: USDT, Amount: 961139402
  WITHDRAW: USDT, Amount: 961139403
  BORROW: USDT, Amount 1922278804, Stable: false
  REPAY: USDT, Amount: 1922278804
  BORROW: USDT, Amount 1922278804, Stable: true
  REPAY: USDT, Amount: 1922278804
  E2E: Collateral AAVE, TestAsset WBTC
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: WBTC, Amount: 6293388
  WITHDRAW: WBTC, Amount: 3146694
  WITHDRAW: WBTC, Amount: 3146693
  BORROW: WBTC, Amount 6293388, Stable: false
  REPAY: WBTC, Amount: 6293388
  BORROW: WBTC, Amount 6293388, Stable: true
  REPAY: WBTC, Amount: 6293388
  E2E: Collateral AAVE, TestAsset WETH
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: WETH, Amount: 1000000000000000000
  WITHDRAW: WETH, Amount: 500000000000000000
  WITHDRAW: WETH, Amount: 500000000000000001
  BORROW: WETH, Amount 1000000000000000000, Stable: false
  REPAY: WETH, Amount: 1000000000000000000
  BORROW: WETH, Amount 1000000000000000000, Stable: true
  REPAY: WETH, Amount: 1000000000000000000
  E2E: Collateral AAVE, TestAsset AAVE
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: AAVE, Amount: 25535972511960226937
  WITHDRAW: AAVE, Amount: 12767986255980113468
  WITHDRAW: AAVE, Amount: 12767986255980113469
  E2E: Collateral AAVE, TestAsset DAI
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: DAI, Amount: 1914944850736299739803
  WITHDRAW: DAI, Amount: 957472425368149869901
  WITHDRAW: DAI, Amount: 957472425368149869902
  BORROW: DAI, Amount 1914944850736299739803, Stable: false
  REPAY: DAI, Amount: 1914944850736299739803
  BORROW: DAI, Amount 1914944850736299739803, Stable: true
  REPAY: DAI, Amount: 1914944850736299739803
  E2E: Collateral AAVE, TestAsset sUSD
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: sUSD, Amount: 1919434649608077907661
  WITHDRAW: sUSD, Amount: 959717324804038953830
  WITHDRAW: sUSD, Amount: 959717324804038953830
  BORROW: sUSD, Amount 1919434649608077907661, Stable: false
  REPAY: sUSD, Amount: 1919434649608077907661
  E2E: Collateral AAVE, TestAsset USDC
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: USDC, Amount: 1912585127
  WITHDRAW: USDC, Amount: 956292563
  WITHDRAW: USDC, Amount: 956292564
  BORROW: USDC, Amount 1912585127, Stable: false
  REPAY: USDC, Amount: 1912585127
  BORROW: USDC, Amount 1912585127, Stable: true
  REPAY: USDC, Amount: 1912585127
  E2E: Collateral AAVE, TestAsset CRV
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: CRV, Amount: 2447532600357965341777
  WITHDRAW: CRV, Amount: 1223766300178982670888
  WITHDRAW: CRV, Amount: 1223766300178982670889
  E2E: Collateral AAVE, TestAsset GUSD
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: GUSD, Amount: 191331
  WITHDRAW: GUSD, Amount: 95665
  WITHDRAW: GUSD, Amount: 95665
  BORROW: GUSD, Amount 191331, Stable: false
  REPAY: GUSD, Amount: 191331
  E2E: Collateral AAVE, TestAsset USDP
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: USDP, Amount: 1939299150785117381031
  WITHDRAW: USDP, Amount: 969649575392558690515
  WITHDRAW: USDP, Amount: 969649575392558690516
  BORROW: USDP, Amount 1939299150785117381031, Stable: false
  REPAY: USDP, Amount: 1939299150785117381031
  E2E: Collateral AAVE, TestAsset FRAX
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: FRAX, Amount: 1937630504372688546970
  WITHDRAW: FRAX, Amount: 968815252186344273485
  WITHDRAW: FRAX, Amount: 968815252186344273486
  BORROW: FRAX, Amount 1937630504372688546970, Stable: false
  REPAY: FRAX, Amount: 1937630504372688546970
  E2E: Collateral AAVE, TestAsset stETH
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: stETH, Amount: 1000000000000000000
  WITHDRAW: stETH, Amount: 500000000000000000
  WITHDRAW: stETH, Amount: 499999999999999999
  E2E: Collateral AAVE, TestAsset LUSD
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: LUSD, Amount: 1910246445122217347247
  WITHDRAW: LUSD, Amount: 955123222561108673623
  WITHDRAW: LUSD, Amount: 955123222561108673623
  BORROW: LUSD, Amount 1910246445122217347247, Stable: false
  REPAY: LUSD, Amount: 1910246445122217347247
  BORROW: LUSD, Amount 1910246445122217347247, Stable: true
  REPAY: LUSD, Amount: 1910246445122217347247

Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 28.80s

Running 1 test for tests/swaps/DepositV3SwapPayloadTest.t.sol:DepositV3SwapPayloadTest
[PASS] test_successful() (gas: 442317)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.45s

Running 1 test for tests/GovTest.t.sol:GovernanceIpfsTest
[PASS] testIpfsHashCreation() (gas: 14571)
Logs:
  Info: This preview will only work when the file has been uploaded to ipfs
  Preview: https://app.aave.com/governance/ipfs-preview/?ipfsHash=0x12f2d9c91e4e23ae4009ab9ef5862ee0ae79498937b66252213221f04a5d5b32

Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.31s
 
Ran 66 test suites: 171 tests passed, 0 failed, 0 skipped (171 total tests)

Please sign in to comment.