function handleActionAfter(
  address _user,
  uint256 _balance,
  uint256 _totalSupply
) external {
  if (!validRTokens[msg.sender] && msg.sender != address(mfd)) revert NotRTokenOrMfd();

  if (_user == address(mfd) || eligibilityExempt[_user]) {
    return;
  }
  if (eligibilityMode == EligibilityModes.FULL) {
    bool lastEligibleStatus = eligibleDataProvider.lastEligibleStatus(_user);
    bool isCurrentlyEligible = eligibleDataProvider.refresh(_user);
    if (isCurrentlyEligible) {
      if (lastEligibleStatus) {
        _handleActionAfterForToken(msg.sender, _user, _balance, _totalSupply);
      } else {
        _updateRegisteredBalance(_user);
      }
    } else {
      _processEligibility(_user, isCurrentlyEligible, true);
    }
  } else {
    _handleActionAfterForToken(msg.sender, _user, _balance, _totalSupply);
  }
}
