@java.lang.Override
  public int hashCode() {
    if (memoizedHashCode != 0) {
      return memoizedHashCode;
    }
    int hash = 41;
    hash = (19 * hash) + getDescriptor().hashCode();
    if (hasStartTime()) {
      hash = (37 * hash) + START_TIME_FIELD_NUMBER;
      hash = (53 * hash) + getStartTime().hashCode();
    }
    if (hasEndTime()) {
      hash = (37 * hash) + END_TIME_FIELD_NUMBER;
      hash = (53 * hash) + getEndTime().hashCode();
    }
    switch (stepCase_) {
      case 3:
        hash = (37 * hash) + PREVIOUS_REPLICATION_CYCLE_FIELD_NUMBER;
        hash = (53 * hash) + getPreviousReplicationCycle().hashCode();
        break;
      case 4:
        hash = (37 * hash) + SHUTTING_DOWN_SOURCE_VM_FIELD_NUMBER;
        hash = (53 * hash) + getShuttingDownSourceVm().hashCode();
        break;
      case 5:
        hash = (37 * hash) + FINAL_SYNC_FIELD_NUMBER;
        hash = (53 * hash) + getFinalSync().hashCode();
        break;
      case 6:
        hash = (37 * hash) + PREPARING_VM_DISKS_FIELD_NUMBER;
        hash = (53 * hash) + getPreparingVmDisks().hashCode();
        break;
      case 7:
        hash = (37 * hash) + INSTANTIATING_MIGRATED_VM_FIELD_NUMBER;
        hash = (53 * hash) + getInstantiatingMigratedVm().hashCode();
        break;
      case 0:
      default:
    }
    hash = (29 * hash) + getUnknownFields().hashCode();
    memoizedHashCode = hash;
    return hash;
  }
<pre>
The time the step has ended.
</pre>

<code>.google.protobuf.Timestamp end_time = 2;</code>
java-vmmigration/proto-google-cloud-vmmigration-v1/src/main/java/com/google/cloud/vmmigration/v1/CutoverStep.java