class ReplicaSetOperationsImpl
    extends RollableScalableResourceOperation<ReplicaSet, ReplicaSetList, RollableScalableResource<ReplicaSet>>
    implements TimeoutImageEditReplacePatchable<ReplicaSet> {

  public ReplicaSetOperationsImpl(Client client) {
    this(new PodOperationContext(), HasMetadataOperationsImpl.defaultContext(client));
  }

  ReplicaSetOperationsImpl(PodOperationContext context, OperationContext superContext) {
    super(context, superContext.withApiGroupName("apps")
        .withApiGroupVersion("v1")
        .withPlural("replicasets"), ReplicaSet.class, ReplicaSetList.class);
  }

  @Override
  public ReplicaSetOperationsImpl newInstance(OperationContext context) {
    return new ReplicaSetOperationsImpl(rollingOperationContext, context);
  }

  @Override
  public ReplicaSetOperationsImpl newInstance(PodOperationContext context,
      OperationContext superContext) {
    return new ReplicaSetOperationsImpl(context, superContext);
  }

  @Override
  public RollingUpdater<ReplicaSet, ReplicaSetList> getRollingUpdater(long rollingTimeout, TimeUnit rollingTimeUnit) {
    return new ReplicaSetRollingUpdater(context.getClient(), getNamespace(), rollingTimeUnit.toMillis(rollingTimeout),
        getRequestConfig().getLoggingInterval());
  }

  @Override
  public Status rollback(DeploymentRollback deploymentRollback) {<FILL_FUNCTION_BODY>}

  @Override
  public String getLog(boolean isPretty) {
    return PodOperationUtil
        .getLog(new ReplicaSetOperationsImpl(rollingOperationContext.withPrettyOutput(isPretty), context).doGetLog(), isPretty);
  }

  private List<PodResource> doGetLog() {
    ReplicaSet replicaSet = requireFromServer();
    return PodOperationUtil.getPodOperationsForController(context,
        rollingOperationContext, replicaSet.getMetadata().getUid(),
        getReplicaSetSelectorLabels(replicaSet));
  }

  /**
   * Returns an unclosed Reader. It's the caller responsibility to close it.
   *
   * @return Reader
   */
  @Override
  public Reader getLogReader() {
    return PodOperationUtil.getLogReader(doGetLog());
  }

  /**
   * Returns an unclosed InputStream. It's the caller responsibility to close it.
   *
   * @return InputStream
   */
  @Override
  public InputStream getLogInputStream() {
    return PodOperationUtil.getLogInputStream(doGetLog());
  }

  @Override
  public LogWatch watchLog(OutputStream out) {
    return PodOperationUtil.watchLog(doGetLog(), out);
  }

  static Map<String, String> getReplicaSetSelectorLabels(ReplicaSet replicaSet) {
    Map<String, String> labels = new HashMap<>();

    if (replicaSet != null && replicaSet.getSpec() != null && replicaSet.getSpec().getSelector() != null) {
      labels.putAll(replicaSet.getSpec().getSelector().getMatchLabels());
    }
    return labels;
  }

  @Override
  protected List<Container> getContainers(ReplicaSet value) {
    return value.getSpec().getTemplate().getSpec().getContainers();
  }

  @Override
  public TimeTailPrettyLoggable limitBytes(int limitBytes) {
    return new ReplicaSetOperationsImpl(rollingOperationContext.withLimitBytes(limitBytes), context);
  }

  @Override
  public TimeTailPrettyLoggable terminated() {
    return new ReplicaSetOperationsImpl(rollingOperationContext.withTerminatedStatus(true), context);
  }

  @Override
  public Loggable withPrettyOutput() {
    return new ReplicaSetOperationsImpl(rollingOperationContext.withPrettyOutput(true), context);
  }

  @Override
  public PrettyLoggable tailingLines(int lines) {
    return new ReplicaSetOperationsImpl(rollingOperationContext.withTailingLines(lines), context);
  }

  @Override
  public TailPrettyLoggable sinceTime(String timestamp) {
    return new ReplicaSetOperationsImpl(rollingOperationContext.withSinceTimestamp(timestamp), context);
  }

  @Override
  public TailPrettyLoggable sinceSeconds(int seconds) {
    return new ReplicaSetOperationsImpl(rollingOperationContext.withSinceSeconds(seconds), context);
  }

  @Override
  public BytesLimitTerminateTimeTailPrettyLoggable usingTimestamps() {
    return new ReplicaSetOperationsImpl(rollingOperationContext.withTimestamps(true), context);
  }
}

    throw new KubernetesClientException("rollback not supported in case of ReplicaSets");
  
<methods>public ReplicaSet edit(UnaryOperator<ReplicaSet>) ,public java.lang.String getLog() ,public io.fabric8.kubernetes.client.dsl.Loggable inContainer(java.lang.String) ,public abstract RollableScalableResourceOperation<ReplicaSet,ReplicaSetList,RollableScalableResource<ReplicaSet>> newInstance(io.fabric8.kubernetes.client.dsl.internal.PodOperationContext, io.fabric8.kubernetes.client.dsl.internal.OperationContext) ,public ReplicaSet pause() ,public ReplicaSet restart() ,public ReplicaSet resume() ,public TimeoutImageEditReplacePatchable<ReplicaSet> rolling() ,public ReplicaSet undo() ,public ReplicaSet updateImage(java.lang.String) ,public ReplicaSet updateImage(Map<java.lang.String,java.lang.String>) ,public io.fabric8.kubernetes.client.dsl.LogWatch watchLog() ,public io.fabric8.kubernetes.client.dsl.Loggable withLogWaitTimeout(java.lang.Integer) ,public io.fabric8.kubernetes.client.dsl.Loggable withReadyWaitTimeout(java.lang.Integer) ,public RollableScalableResourceOperation<ReplicaSet,ReplicaSetList,RollableScalableResource<ReplicaSet>> withTimeout(long, java.util.concurrent.TimeUnit) ,public RollableScalableResourceOperation<ReplicaSet,ReplicaSetList,RollableScalableResource<ReplicaSet>> withTimeoutInMillis(long) <variables>protected final non-sealed io.fabric8.kubernetes.client.dsl.internal.PodOperationContext rollingOperationContext