code: def _get_indirect_shadowing_information(contract):
          
          # If this variable is an overshadowing variable, we'll want to return information describing it.
          result = []
          indirect_shadows = detect_c3_function_shadowing(contract)
          if indirect_shadows:
              for collision_set in sorted(indirect_shadows, key=lambda x: x[0][1].name):
                  winner = collision_set[-1][1].contract.name
                  collision_steps = [colliding_function.contract.name for _, colliding_function in collision_set]
                  collision_steps = ', '.join(collision_steps)
                  result.append(f"'{collision_set[0][1].full_name}' collides in inherited contracts {collision_steps} where {winner} is chosen.")
          return '\n'.join(result)
docs: Obtain a string that describes variable shadowing for the given variable. None if no shadowing exists.
          :param var: The variable to collect shadowing information for.
          :param contract: The contract in which this variable is being analyzed.
          :return: Returns a string describing variable shadowing for the given variable. None if no shadowing exists.