// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: tensorflow/python/util/protobuf/compare_test.proto

package compare_test;

public final class CompareTest {
  private CompareTest() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  /**
   * Protobuf enum {@code compare_test.Enum}
   */
  public enum Enum
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>A = 0;</code>
     */
    A(0),
    /**
     * <code>B = 1;</code>
     */
    B(1),
    /**
     * <code>C = 2;</code>
     */
    C(2),
    ;

    /**
     * <code>A = 0;</code>
     */
    public static final int A_VALUE = 0;
    /**
     * <code>B = 1;</code>
     */
    public static final int B_VALUE = 1;
    /**
     * <code>C = 2;</code>
     */
    public static final int C_VALUE = 2;


    public final int getNumber() {
      return value;
    }

    /**
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static Enum valueOf(int value) {
      return forNumber(value);
    }

    public static Enum forNumber(int value) {
      switch (value) {
        case 0: return A;
        case 1: return B;
        case 2: return C;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<Enum>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        Enum> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<Enum>() {
            public Enum findValueByNumber(int number) {
              return Enum.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return compare_test.CompareTest.getDescriptor().getEnumTypes().get(0);
    }

    private static final Enum[] VALUES = values();

    public static Enum valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private Enum(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:compare_test.Enum)
  }

  public interface SmallOrBuilder extends
      // @@protoc_insertion_point(interface_extends:compare_test.Small)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated string strings = 1;</code>
     */
    java.util.List<java.lang.String>
        getStringsList();
    /**
     * <code>repeated string strings = 1;</code>
     */
    int getStringsCount();
    /**
     * <code>repeated string strings = 1;</code>
     */
    java.lang.String getStrings(int index);
    /**
     * <code>repeated string strings = 1;</code>
     */
    com.google.protobuf.ByteString
        getStringsBytes(int index);
  }
  /**
   * Protobuf type {@code compare_test.Small}
   */
  public  static final class Small extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:compare_test.Small)
      SmallOrBuilder {
    // Use Small.newBuilder() to construct.
    private Small(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Small() {
      strings_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Small(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                strings_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              strings_.add(bs);
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          strings_ = strings_.getUnmodifiableView();
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return compare_test.CompareTest.internal_static_compare_test_Small_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return compare_test.CompareTest.internal_static_compare_test_Small_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              compare_test.CompareTest.Small.class, compare_test.CompareTest.Small.Builder.class);
    }

    public static final int STRINGS_FIELD_NUMBER = 1;
    private com.google.protobuf.LazyStringList strings_;
    /**
     * <code>repeated string strings = 1;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getStringsList() {
      return strings_;
    }
    /**
     * <code>repeated string strings = 1;</code>
     */
    public int getStringsCount() {
      return strings_.size();
    }
    /**
     * <code>repeated string strings = 1;</code>
     */
    public java.lang.String getStrings(int index) {
      return strings_.get(index);
    }
    /**
     * <code>repeated string strings = 1;</code>
     */
    public com.google.protobuf.ByteString
        getStringsBytes(int index) {
      return strings_.getByteString(index);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      for (int i = 0; i < strings_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, strings_.getRaw(i));
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < strings_.size(); i++) {
          dataSize += computeStringSizeNoTag(strings_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getStringsList().size();
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof compare_test.CompareTest.Small)) {
        return super.equals(obj);
      }
      compare_test.CompareTest.Small other = (compare_test.CompareTest.Small) obj;

      boolean result = true;
      result = result && getStringsList()
          .equals(other.getStringsList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getStringsCount() > 0) {
        hash = (37 * hash) + STRINGS_FIELD_NUMBER;
        hash = (53 * hash) + getStringsList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static compare_test.CompareTest.Small parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static compare_test.CompareTest.Small parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static compare_test.CompareTest.Small parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static compare_test.CompareTest.Small parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static compare_test.CompareTest.Small parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static compare_test.CompareTest.Small parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static compare_test.CompareTest.Small parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static compare_test.CompareTest.Small parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static compare_test.CompareTest.Small parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static compare_test.CompareTest.Small parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(compare_test.CompareTest.Small prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code compare_test.Small}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:compare_test.Small)
        compare_test.CompareTest.SmallOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return compare_test.CompareTest.internal_static_compare_test_Small_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return compare_test.CompareTest.internal_static_compare_test_Small_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                compare_test.CompareTest.Small.class, compare_test.CompareTest.Small.Builder.class);
      }

      // Construct using compare_test.CompareTest.Small.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        strings_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return compare_test.CompareTest.internal_static_compare_test_Small_descriptor;
      }

      public compare_test.CompareTest.Small getDefaultInstanceForType() {
        return compare_test.CompareTest.Small.getDefaultInstance();
      }

      public compare_test.CompareTest.Small build() {
        compare_test.CompareTest.Small result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public compare_test.CompareTest.Small buildPartial() {
        compare_test.CompareTest.Small result = new compare_test.CompareTest.Small(this);
        int from_bitField0_ = bitField0_;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          strings_ = strings_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.strings_ = strings_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof compare_test.CompareTest.Small) {
          return mergeFrom((compare_test.CompareTest.Small)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(compare_test.CompareTest.Small other) {
        if (other == compare_test.CompareTest.Small.getDefaultInstance()) return this;
        if (!other.strings_.isEmpty()) {
          if (strings_.isEmpty()) {
            strings_ = other.strings_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureStringsIsMutable();
            strings_.addAll(other.strings_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        compare_test.CompareTest.Small parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (compare_test.CompareTest.Small) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.LazyStringList strings_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureStringsIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          strings_ = new com.google.protobuf.LazyStringArrayList(strings_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <code>repeated string strings = 1;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getStringsList() {
        return strings_.getUnmodifiableView();
      }
      /**
       * <code>repeated string strings = 1;</code>
       */
      public int getStringsCount() {
        return strings_.size();
      }
      /**
       * <code>repeated string strings = 1;</code>
       */
      public java.lang.String getStrings(int index) {
        return strings_.get(index);
      }
      /**
       * <code>repeated string strings = 1;</code>
       */
      public com.google.protobuf.ByteString
          getStringsBytes(int index) {
        return strings_.getByteString(index);
      }
      /**
       * <code>repeated string strings = 1;</code>
       */
      public Builder setStrings(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureStringsIsMutable();
        strings_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string strings = 1;</code>
       */
      public Builder addStrings(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureStringsIsMutable();
        strings_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string strings = 1;</code>
       */
      public Builder addAllStrings(
          java.lang.Iterable<java.lang.String> values) {
        ensureStringsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, strings_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string strings = 1;</code>
       */
      public Builder clearStrings() {
        strings_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string strings = 1;</code>
       */
      public Builder addStringsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureStringsIsMutable();
        strings_.add(value);
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:compare_test.Small)
    }

    // @@protoc_insertion_point(class_scope:compare_test.Small)
    private static final compare_test.CompareTest.Small DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new compare_test.CompareTest.Small();
    }

    public static compare_test.CompareTest.Small getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Small>
        PARSER = new com.google.protobuf.AbstractParser<Small>() {
      public Small parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new Small(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<Small> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<Small> getParserForType() {
      return PARSER;
    }

    public compare_test.CompareTest.Small getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface MediumOrBuilder extends
      // @@protoc_insertion_point(interface_extends:compare_test.Medium)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated int32 int32s = 1;</code>
     */
    java.util.List<java.lang.Integer> getInt32SList();
    /**
     * <code>repeated int32 int32s = 1;</code>
     */
    int getInt32SCount();
    /**
     * <code>repeated int32 int32s = 1;</code>
     */
    int getInt32S(int index);

    /**
     * <code>repeated .compare_test.Small smalls = 2;</code>
     */
    java.util.List<compare_test.CompareTest.Small> 
        getSmallsList();
    /**
     * <code>repeated .compare_test.Small smalls = 2;</code>
     */
    compare_test.CompareTest.Small getSmalls(int index);
    /**
     * <code>repeated .compare_test.Small smalls = 2;</code>
     */
    int getSmallsCount();
    /**
     * <code>repeated .compare_test.Small smalls = 2;</code>
     */
    java.util.List<? extends compare_test.CompareTest.SmallOrBuilder> 
        getSmallsOrBuilderList();
    /**
     * <code>repeated .compare_test.Small smalls = 2;</code>
     */
    compare_test.CompareTest.SmallOrBuilder getSmallsOrBuilder(
        int index);

    /**
     * <code>repeated group GroupA = 3 { ... }</code>
     */
    java.util.List<compare_test.CompareTest.Medium.GroupA> 
        getGroupAList();
    /**
     * <code>repeated group GroupA = 3 { ... }</code>
     */
    compare_test.CompareTest.Medium.GroupA getGroupA(int index);
    /**
     * <code>repeated group GroupA = 3 { ... }</code>
     */
    int getGroupACount();
    /**
     * <code>repeated group GroupA = 3 { ... }</code>
     */
    java.util.List<? extends compare_test.CompareTest.Medium.GroupAOrBuilder> 
        getGroupAOrBuilderList();
    /**
     * <code>repeated group GroupA = 3 { ... }</code>
     */
    compare_test.CompareTest.Medium.GroupAOrBuilder getGroupAOrBuilder(
        int index);

    /**
     * <code>repeated float floats = 6;</code>
     */
    java.util.List<java.lang.Float> getFloatsList();
    /**
     * <code>repeated float floats = 6;</code>
     */
    int getFloatsCount();
    /**
     * <code>repeated float floats = 6;</code>
     */
    float getFloats(int index);
  }
  /**
   * Protobuf type {@code compare_test.Medium}
   */
  public  static final class Medium extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:compare_test.Medium)
      MediumOrBuilder {
    // Use Medium.newBuilder() to construct.
    private Medium(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Medium() {
      int32S_ = java.util.Collections.emptyList();
      smalls_ = java.util.Collections.emptyList();
      groupA_ = java.util.Collections.emptyList();
      floats_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Medium(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                int32S_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000001;
              }
              int32S_.add(input.readInt32());
              break;
            }
            case 10: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001) && input.getBytesUntilLimit() > 0) {
                int32S_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000001;
              }
              while (input.getBytesUntilLimit() > 0) {
                int32S_.add(input.readInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                smalls_ = new java.util.ArrayList<compare_test.CompareTest.Small>();
                mutable_bitField0_ |= 0x00000002;
              }
              smalls_.add(
                  input.readMessage(compare_test.CompareTest.Small.PARSER, extensionRegistry));
              break;
            }
            case 27: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                groupA_ = new java.util.ArrayList<compare_test.CompareTest.Medium.GroupA>();
                mutable_bitField0_ |= 0x00000004;
              }
              groupA_.add(input.readGroup(3, compare_test.CompareTest.Medium.GroupA.PARSER,
                  extensionRegistry));
              break;
            }
            case 53: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                floats_ = new java.util.ArrayList<java.lang.Float>();
                mutable_bitField0_ |= 0x00000008;
              }
              floats_.add(input.readFloat());
              break;
            }
            case 50: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008) && input.getBytesUntilLimit() > 0) {
                floats_ = new java.util.ArrayList<java.lang.Float>();
                mutable_bitField0_ |= 0x00000008;
              }
              while (input.getBytesUntilLimit() > 0) {
                floats_.add(input.readFloat());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          int32S_ = java.util.Collections.unmodifiableList(int32S_);
        }
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          smalls_ = java.util.Collections.unmodifiableList(smalls_);
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          groupA_ = java.util.Collections.unmodifiableList(groupA_);
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          floats_ = java.util.Collections.unmodifiableList(floats_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return compare_test.CompareTest.internal_static_compare_test_Medium_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return compare_test.CompareTest.internal_static_compare_test_Medium_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              compare_test.CompareTest.Medium.class, compare_test.CompareTest.Medium.Builder.class);
    }

    public interface GroupAOrBuilder extends
        // @@protoc_insertion_point(interface_extends:compare_test.Medium.GroupA)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>repeated group GroupB = 4 { ... }</code>
       */
      java.util.List<compare_test.CompareTest.Medium.GroupA.GroupB> 
          getGroupBList();
      /**
       * <code>repeated group GroupB = 4 { ... }</code>
       */
      compare_test.CompareTest.Medium.GroupA.GroupB getGroupB(int index);
      /**
       * <code>repeated group GroupB = 4 { ... }</code>
       */
      int getGroupBCount();
      /**
       * <code>repeated group GroupB = 4 { ... }</code>
       */
      java.util.List<? extends compare_test.CompareTest.Medium.GroupA.GroupBOrBuilder> 
          getGroupBOrBuilderList();
      /**
       * <code>repeated group GroupB = 4 { ... }</code>
       */
      compare_test.CompareTest.Medium.GroupA.GroupBOrBuilder getGroupBOrBuilder(
          int index);
    }
    /**
     * Protobuf type {@code compare_test.Medium.GroupA}
     */
    public  static final class GroupA extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:compare_test.Medium.GroupA)
        GroupAOrBuilder {
      // Use GroupA.newBuilder() to construct.
      private GroupA(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private GroupA() {
        groupB_ = java.util.Collections.emptyList();
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private GroupA(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 35: {
                if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                  groupB_ = new java.util.ArrayList<compare_test.CompareTest.Medium.GroupA.GroupB>();
                  mutable_bitField0_ |= 0x00000001;
                }
                groupB_.add(input.readGroup(4, compare_test.CompareTest.Medium.GroupA.GroupB.PARSER,
                    extensionRegistry));
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
            groupB_ = java.util.Collections.unmodifiableList(groupB_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return compare_test.CompareTest.internal_static_compare_test_Medium_GroupA_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return compare_test.CompareTest.internal_static_compare_test_Medium_GroupA_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                compare_test.CompareTest.Medium.GroupA.class, compare_test.CompareTest.Medium.GroupA.Builder.class);
      }

      public interface GroupBOrBuilder extends
          // @@protoc_insertion_point(interface_extends:compare_test.Medium.GroupA.GroupB)
          com.google.protobuf.MessageOrBuilder {

        /**
         * <code>required string strings = 5;</code>
         */
        boolean hasStrings();
        /**
         * <code>required string strings = 5;</code>
         */
        java.lang.String getStrings();
        /**
         * <code>required string strings = 5;</code>
         */
        com.google.protobuf.ByteString
            getStringsBytes();
      }
      /**
       * Protobuf type {@code compare_test.Medium.GroupA.GroupB}
       */
      public  static final class GroupB extends
          com.google.protobuf.GeneratedMessageV3 implements
          // @@protoc_insertion_point(message_implements:compare_test.Medium.GroupA.GroupB)
          GroupBOrBuilder {
        // Use GroupB.newBuilder() to construct.
        private GroupB(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
          super(builder);
        }
        private GroupB() {
          strings_ = "";
        }

        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
          return this.unknownFields;
        }
        private GroupB(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          this();
          int mutable_bitField0_ = 0;
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
              com.google.protobuf.UnknownFieldSet.newBuilder();
          try {
            boolean done = false;
            while (!done) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  done = true;
                  break;
                default: {
                  if (!parseUnknownField(input, unknownFields,
                                         extensionRegistry, tag)) {
                    done = true;
                  }
                  break;
                }
                case 42: {
                  com.google.protobuf.ByteString bs = input.readBytes();
                  bitField0_ |= 0x00000001;
                  strings_ = bs;
                  break;
                }
              }
            }
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.setUnfinishedMessage(this);
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(
                e).setUnfinishedMessage(this);
          } finally {
            this.unknownFields = unknownFields.build();
            makeExtensionsImmutable();
          }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return compare_test.CompareTest.internal_static_compare_test_Medium_GroupA_GroupB_descriptor;
        }

        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return compare_test.CompareTest.internal_static_compare_test_Medium_GroupA_GroupB_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  compare_test.CompareTest.Medium.GroupA.GroupB.class, compare_test.CompareTest.Medium.GroupA.GroupB.Builder.class);
        }

        private int bitField0_;
        public static final int STRINGS_FIELD_NUMBER = 5;
        private volatile java.lang.Object strings_;
        /**
         * <code>required string strings = 5;</code>
         */
        public boolean hasStrings() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required string strings = 5;</code>
         */
        public java.lang.String getStrings() {
          java.lang.Object ref = strings_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              strings_ = s;
            }
            return s;
          }
        }
        /**
         * <code>required string strings = 5;</code>
         */
        public com.google.protobuf.ByteString
            getStringsBytes() {
          java.lang.Object ref = strings_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            strings_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
          byte isInitialized = memoizedIsInitialized;
          if (isInitialized == 1) return true;
          if (isInitialized == 0) return false;

          if (!hasStrings()) {
            memoizedIsInitialized = 0;
            return false;
          }
          memoizedIsInitialized = 1;
          return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                            throws java.io.IOException {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            com.google.protobuf.GeneratedMessageV3.writeString(output, 5, strings_);
          }
          unknownFields.writeTo(output);
        }

        public int getSerializedSize() {
          int size = memoizedSize;
          if (size != -1) return size;

          size = 0;
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, strings_);
          }
          size += unknownFields.getSerializedSize();
          memoizedSize = size;
          return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        public boolean equals(final java.lang.Object obj) {
          if (obj == this) {
           return true;
          }
          if (!(obj instanceof compare_test.CompareTest.Medium.GroupA.GroupB)) {
            return super.equals(obj);
          }
          compare_test.CompareTest.Medium.GroupA.GroupB other = (compare_test.CompareTest.Medium.GroupA.GroupB) obj;

          boolean result = true;
          result = result && (hasStrings() == other.hasStrings());
          if (hasStrings()) {
            result = result && getStrings()
                .equals(other.getStrings());
          }
          result = result && unknownFields.equals(other.unknownFields);
          return result;
        }

        @java.lang.Override
        public int hashCode() {
          if (memoizedHashCode != 0) {
            return memoizedHashCode;
          }
          int hash = 41;
          hash = (19 * hash) + getDescriptor().hashCode();
          if (hasStrings()) {
            hash = (37 * hash) + STRINGS_FIELD_NUMBER;
            hash = (53 * hash) + getStrings().hashCode();
          }
          hash = (29 * hash) + unknownFields.hashCode();
          memoizedHashCode = hash;
          return hash;
        }

        public static compare_test.CompareTest.Medium.GroupA.GroupB parseFrom(
            com.google.protobuf.ByteString data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static compare_test.CompareTest.Medium.GroupA.GroupB parseFrom(
            com.google.protobuf.ByteString data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static compare_test.CompareTest.Medium.GroupA.GroupB parseFrom(byte[] data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static compare_test.CompareTest.Medium.GroupA.GroupB parseFrom(
            byte[] data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static compare_test.CompareTest.Medium.GroupA.GroupB parseFrom(java.io.InputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseWithIOException(PARSER, input);
        }
        public static compare_test.CompareTest.Medium.GroupA.GroupB parseFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseWithIOException(PARSER, input, extensionRegistry);
        }
        public static compare_test.CompareTest.Medium.GroupA.GroupB parseDelimitedFrom(java.io.InputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseDelimitedWithIOException(PARSER, input);
        }
        public static compare_test.CompareTest.Medium.GroupA.GroupB parseDelimitedFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
        }
        public static compare_test.CompareTest.Medium.GroupA.GroupB parseFrom(
            com.google.protobuf.CodedInputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseWithIOException(PARSER, input);
        }
        public static compare_test.CompareTest.Medium.GroupA.GroupB parseFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseWithIOException(PARSER, input, extensionRegistry);
        }

        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder() {
          return DEFAULT_INSTANCE.toBuilder();
        }
        public static Builder newBuilder(compare_test.CompareTest.Medium.GroupA.GroupB prototype) {
          return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() {
          return this == DEFAULT_INSTANCE
              ? new Builder() : new Builder().mergeFrom(this);
        }

        @java.lang.Override
        protected Builder newBuilderForType(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          Builder builder = new Builder(parent);
          return builder;
        }
        /**
         * Protobuf type {@code compare_test.Medium.GroupA.GroupB}
         */
        public static final class Builder extends
            com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
            // @@protoc_insertion_point(builder_implements:compare_test.Medium.GroupA.GroupB)
            compare_test.CompareTest.Medium.GroupA.GroupBOrBuilder {
          public static final com.google.protobuf.Descriptors.Descriptor
              getDescriptor() {
            return compare_test.CompareTest.internal_static_compare_test_Medium_GroupA_GroupB_descriptor;
          }

          protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
              internalGetFieldAccessorTable() {
            return compare_test.CompareTest.internal_static_compare_test_Medium_GroupA_GroupB_fieldAccessorTable
                .ensureFieldAccessorsInitialized(
                    compare_test.CompareTest.Medium.GroupA.GroupB.class, compare_test.CompareTest.Medium.GroupA.GroupB.Builder.class);
          }

          // Construct using compare_test.CompareTest.Medium.GroupA.GroupB.newBuilder()
          private Builder() {
            maybeForceBuilderInitialization();
          }

          private Builder(
              com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
            super(parent);
            maybeForceBuilderInitialization();
          }
          private void maybeForceBuilderInitialization() {
            if (com.google.protobuf.GeneratedMessageV3
                    .alwaysUseFieldBuilders) {
            }
          }
          public Builder clear() {
            super.clear();
            strings_ = "";
            bitField0_ = (bitField0_ & ~0x00000001);
            return this;
          }

          public com.google.protobuf.Descriptors.Descriptor
              getDescriptorForType() {
            return compare_test.CompareTest.internal_static_compare_test_Medium_GroupA_GroupB_descriptor;
          }

          public compare_test.CompareTest.Medium.GroupA.GroupB getDefaultInstanceForType() {
            return compare_test.CompareTest.Medium.GroupA.GroupB.getDefaultInstance();
          }

          public compare_test.CompareTest.Medium.GroupA.GroupB build() {
            compare_test.CompareTest.Medium.GroupA.GroupB result = buildPartial();
            if (!result.isInitialized()) {
              throw newUninitializedMessageException(result);
            }
            return result;
          }

          public compare_test.CompareTest.Medium.GroupA.GroupB buildPartial() {
            compare_test.CompareTest.Medium.GroupA.GroupB result = new compare_test.CompareTest.Medium.GroupA.GroupB(this);
            int from_bitField0_ = bitField0_;
            int to_bitField0_ = 0;
            if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
              to_bitField0_ |= 0x00000001;
            }
            result.strings_ = strings_;
            result.bitField0_ = to_bitField0_;
            onBuilt();
            return result;
          }

          public Builder clone() {
            return (Builder) super.clone();
          }
          public Builder setField(
              com.google.protobuf.Descriptors.FieldDescriptor field,
              Object value) {
            return (Builder) super.setField(field, value);
          }
          public Builder clearField(
              com.google.protobuf.Descriptors.FieldDescriptor field) {
            return (Builder) super.clearField(field);
          }
          public Builder clearOneof(
              com.google.protobuf.Descriptors.OneofDescriptor oneof) {
            return (Builder) super.clearOneof(oneof);
          }
          public Builder setRepeatedField(
              com.google.protobuf.Descriptors.FieldDescriptor field,
              int index, Object value) {
            return (Builder) super.setRepeatedField(field, index, value);
          }
          public Builder addRepeatedField(
              com.google.protobuf.Descriptors.FieldDescriptor field,
              Object value) {
            return (Builder) super.addRepeatedField(field, value);
          }
          public Builder mergeFrom(com.google.protobuf.Message other) {
            if (other instanceof compare_test.CompareTest.Medium.GroupA.GroupB) {
              return mergeFrom((compare_test.CompareTest.Medium.GroupA.GroupB)other);
            } else {
              super.mergeFrom(other);
              return this;
            }
          }

          public Builder mergeFrom(compare_test.CompareTest.Medium.GroupA.GroupB other) {
            if (other == compare_test.CompareTest.Medium.GroupA.GroupB.getDefaultInstance()) return this;
            if (other.hasStrings()) {
              bitField0_ |= 0x00000001;
              strings_ = other.strings_;
              onChanged();
            }
            this.mergeUnknownFields(other.unknownFields);
            onChanged();
            return this;
          }

          public final boolean isInitialized() {
            if (!hasStrings()) {
              return false;
            }
            return true;
          }

          public Builder mergeFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws java.io.IOException {
            compare_test.CompareTest.Medium.GroupA.GroupB parsedMessage = null;
            try {
              parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              parsedMessage = (compare_test.CompareTest.Medium.GroupA.GroupB) e.getUnfinishedMessage();
              throw e.unwrapIOException();
            } finally {
              if (parsedMessage != null) {
                mergeFrom(parsedMessage);
              }
            }
            return this;
          }
          private int bitField0_;

          private java.lang.Object strings_ = "";
          /**
           * <code>required string strings = 5;</code>
           */
          public boolean hasStrings() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
          }
          /**
           * <code>required string strings = 5;</code>
           */
          public java.lang.String getStrings() {
            java.lang.Object ref = strings_;
            if (!(ref instanceof java.lang.String)) {
              com.google.protobuf.ByteString bs =
                  (com.google.protobuf.ByteString) ref;
              java.lang.String s = bs.toStringUtf8();
              if (bs.isValidUtf8()) {
                strings_ = s;
              }
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>required string strings = 5;</code>
           */
          public com.google.protobuf.ByteString
              getStringsBytes() {
            java.lang.Object ref = strings_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              strings_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>required string strings = 5;</code>
           */
          public Builder setStrings(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
            strings_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>required string strings = 5;</code>
           */
          public Builder clearStrings() {
            bitField0_ = (bitField0_ & ~0x00000001);
            strings_ = getDefaultInstance().getStrings();
            onChanged();
            return this;
          }
          /**
           * <code>required string strings = 5;</code>
           */
          public Builder setStringsBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
            strings_ = value;
            onChanged();
            return this;
          }
          public final Builder setUnknownFields(
              final com.google.protobuf.UnknownFieldSet unknownFields) {
            return super.setUnknownFields(unknownFields);
          }

          public final Builder mergeUnknownFields(
              final com.google.protobuf.UnknownFieldSet unknownFields) {
            return super.mergeUnknownFields(unknownFields);
          }


          // @@protoc_insertion_point(builder_scope:compare_test.Medium.GroupA.GroupB)
        }

        // @@protoc_insertion_point(class_scope:compare_test.Medium.GroupA.GroupB)
        private static final compare_test.CompareTest.Medium.GroupA.GroupB DEFAULT_INSTANCE;
        static {
          DEFAULT_INSTANCE = new compare_test.CompareTest.Medium.GroupA.GroupB();
        }

        public static compare_test.CompareTest.Medium.GroupA.GroupB getDefaultInstance() {
          return DEFAULT_INSTANCE;
        }

        @java.lang.Deprecated public static final com.google.protobuf.Parser<GroupB>
            PARSER = new com.google.protobuf.AbstractParser<GroupB>() {
          public GroupB parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
              return new GroupB(input, extensionRegistry);
          }
        };

        public static com.google.protobuf.Parser<GroupB> parser() {
          return PARSER;
        }

        @java.lang.Override
        public com.google.protobuf.Parser<GroupB> getParserForType() {
          return PARSER;
        }

        public compare_test.CompareTest.Medium.GroupA.GroupB getDefaultInstanceForType() {
          return DEFAULT_INSTANCE;
        }

      }

      public static final int GROUPB_FIELD_NUMBER = 4;
      private java.util.List<compare_test.CompareTest.Medium.GroupA.GroupB> groupB_;
      /**
       * <code>repeated group GroupB = 4 { ... }</code>
       */
      public java.util.List<compare_test.CompareTest.Medium.GroupA.GroupB> getGroupBList() {
        return groupB_;
      }
      /**
       * <code>repeated group GroupB = 4 { ... }</code>
       */
      public java.util.List<? extends compare_test.CompareTest.Medium.GroupA.GroupBOrBuilder> 
          getGroupBOrBuilderList() {
        return groupB_;
      }
      /**
       * <code>repeated group GroupB = 4 { ... }</code>
       */
      public int getGroupBCount() {
        return groupB_.size();
      }
      /**
       * <code>repeated group GroupB = 4 { ... }</code>
       */
      public compare_test.CompareTest.Medium.GroupA.GroupB getGroupB(int index) {
        return groupB_.get(index);
      }
      /**
       * <code>repeated group GroupB = 4 { ... }</code>
       */
      public compare_test.CompareTest.Medium.GroupA.GroupBOrBuilder getGroupBOrBuilder(
          int index) {
        return groupB_.get(index);
      }

      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        for (int i = 0; i < getGroupBCount(); i++) {
          if (!getGroupB(i).isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        for (int i = 0; i < groupB_.size(); i++) {
          output.writeGroup(4, groupB_.get(i));
        }
        unknownFields.writeTo(output);
      }

      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        for (int i = 0; i < groupB_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeGroupSize(4, groupB_.get(i));
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof compare_test.CompareTest.Medium.GroupA)) {
          return super.equals(obj);
        }
        compare_test.CompareTest.Medium.GroupA other = (compare_test.CompareTest.Medium.GroupA) obj;

        boolean result = true;
        result = result && getGroupBList()
            .equals(other.getGroupBList());
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (getGroupBCount() > 0) {
          hash = (37 * hash) + GROUPB_FIELD_NUMBER;
          hash = (53 * hash) + getGroupBList().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static compare_test.CompareTest.Medium.GroupA parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static compare_test.CompareTest.Medium.GroupA parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static compare_test.CompareTest.Medium.GroupA parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static compare_test.CompareTest.Medium.GroupA parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static compare_test.CompareTest.Medium.GroupA parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static compare_test.CompareTest.Medium.GroupA parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }
      public static compare_test.CompareTest.Medium.GroupA parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static compare_test.CompareTest.Medium.GroupA parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
      }
      public static compare_test.CompareTest.Medium.GroupA parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static compare_test.CompareTest.Medium.GroupA parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(compare_test.CompareTest.Medium.GroupA prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code compare_test.Medium.GroupA}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:compare_test.Medium.GroupA)
          compare_test.CompareTest.Medium.GroupAOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return compare_test.CompareTest.internal_static_compare_test_Medium_GroupA_descriptor;
        }

        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return compare_test.CompareTest.internal_static_compare_test_Medium_GroupA_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  compare_test.CompareTest.Medium.GroupA.class, compare_test.CompareTest.Medium.GroupA.Builder.class);
        }

        // Construct using compare_test.CompareTest.Medium.GroupA.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
            getGroupBFieldBuilder();
          }
        }
        public Builder clear() {
          super.clear();
          if (groupBBuilder_ == null) {
            groupB_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            groupBBuilder_.clear();
          }
          return this;
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return compare_test.CompareTest.internal_static_compare_test_Medium_GroupA_descriptor;
        }

        public compare_test.CompareTest.Medium.GroupA getDefaultInstanceForType() {
          return compare_test.CompareTest.Medium.GroupA.getDefaultInstance();
        }

        public compare_test.CompareTest.Medium.GroupA build() {
          compare_test.CompareTest.Medium.GroupA result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public compare_test.CompareTest.Medium.GroupA buildPartial() {
          compare_test.CompareTest.Medium.GroupA result = new compare_test.CompareTest.Medium.GroupA(this);
          int from_bitField0_ = bitField0_;
          if (groupBBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
              groupB_ = java.util.Collections.unmodifiableList(groupB_);
              bitField0_ = (bitField0_ & ~0x00000001);
            }
            result.groupB_ = groupB_;
          } else {
            result.groupB_ = groupBBuilder_.build();
          }
          onBuilt();
          return result;
        }

        public Builder clone() {
          return (Builder) super.clone();
        }
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            Object value) {
          return (Builder) super.setField(field, value);
        }
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof compare_test.CompareTest.Medium.GroupA) {
            return mergeFrom((compare_test.CompareTest.Medium.GroupA)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(compare_test.CompareTest.Medium.GroupA other) {
          if (other == compare_test.CompareTest.Medium.GroupA.getDefaultInstance()) return this;
          if (groupBBuilder_ == null) {
            if (!other.groupB_.isEmpty()) {
              if (groupB_.isEmpty()) {
                groupB_ = other.groupB_;
                bitField0_ = (bitField0_ & ~0x00000001);
              } else {
                ensureGroupBIsMutable();
                groupB_.addAll(other.groupB_);
              }
              onChanged();
            }
          } else {
            if (!other.groupB_.isEmpty()) {
              if (groupBBuilder_.isEmpty()) {
                groupBBuilder_.dispose();
                groupBBuilder_ = null;
                groupB_ = other.groupB_;
                bitField0_ = (bitField0_ & ~0x00000001);
                groupBBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getGroupBFieldBuilder() : null;
              } else {
                groupBBuilder_.addAllMessages(other.groupB_);
              }
            }
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        public final boolean isInitialized() {
          for (int i = 0; i < getGroupBCount(); i++) {
            if (!getGroupB(i).isInitialized()) {
              return false;
            }
          }
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          compare_test.CompareTest.Medium.GroupA parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (compare_test.CompareTest.Medium.GroupA) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private java.util.List<compare_test.CompareTest.Medium.GroupA.GroupB> groupB_ =
          java.util.Collections.emptyList();
        private void ensureGroupBIsMutable() {
          if (!((bitField0_ & 0x00000001) == 0x00000001)) {
            groupB_ = new java.util.ArrayList<compare_test.CompareTest.Medium.GroupA.GroupB>(groupB_);
            bitField0_ |= 0x00000001;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            compare_test.CompareTest.Medium.GroupA.GroupB, compare_test.CompareTest.Medium.GroupA.GroupB.Builder, compare_test.CompareTest.Medium.GroupA.GroupBOrBuilder> groupBBuilder_;

        /**
         * <code>repeated group GroupB = 4 { ... }</code>
         */
        public java.util.List<compare_test.CompareTest.Medium.GroupA.GroupB> getGroupBList() {
          if (groupBBuilder_ == null) {
            return java.util.Collections.unmodifiableList(groupB_);
          } else {
            return groupBBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated group GroupB = 4 { ... }</code>
         */
        public int getGroupBCount() {
          if (groupBBuilder_ == null) {
            return groupB_.size();
          } else {
            return groupBBuilder_.getCount();
          }
        }
        /**
         * <code>repeated group GroupB = 4 { ... }</code>
         */
        public compare_test.CompareTest.Medium.GroupA.GroupB getGroupB(int index) {
          if (groupBBuilder_ == null) {
            return groupB_.get(index);
          } else {
            return groupBBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated group GroupB = 4 { ... }</code>
         */
        public Builder setGroupB(
            int index, compare_test.CompareTest.Medium.GroupA.GroupB value) {
          if (groupBBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureGroupBIsMutable();
            groupB_.set(index, value);
            onChanged();
          } else {
            groupBBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated group GroupB = 4 { ... }</code>
         */
        public Builder setGroupB(
            int index, compare_test.CompareTest.Medium.GroupA.GroupB.Builder builderForValue) {
          if (groupBBuilder_ == null) {
            ensureGroupBIsMutable();
            groupB_.set(index, builderForValue.build());
            onChanged();
          } else {
            groupBBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated group GroupB = 4 { ... }</code>
         */
        public Builder addGroupB(compare_test.CompareTest.Medium.GroupA.GroupB value) {
          if (groupBBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureGroupBIsMutable();
            groupB_.add(value);
            onChanged();
          } else {
            groupBBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated group GroupB = 4 { ... }</code>
         */
        public Builder addGroupB(
            int index, compare_test.CompareTest.Medium.GroupA.GroupB value) {
          if (groupBBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureGroupBIsMutable();
            groupB_.add(index, value);
            onChanged();
          } else {
            groupBBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated group GroupB = 4 { ... }</code>
         */
        public Builder addGroupB(
            compare_test.CompareTest.Medium.GroupA.GroupB.Builder builderForValue) {
          if (groupBBuilder_ == null) {
            ensureGroupBIsMutable();
            groupB_.add(builderForValue.build());
            onChanged();
          } else {
            groupBBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated group GroupB = 4 { ... }</code>
         */
        public Builder addGroupB(
            int index, compare_test.CompareTest.Medium.GroupA.GroupB.Builder builderForValue) {
          if (groupBBuilder_ == null) {
            ensureGroupBIsMutable();
            groupB_.add(index, builderForValue.build());
            onChanged();
          } else {
            groupBBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated group GroupB = 4 { ... }</code>
         */
        public Builder addAllGroupB(
            java.lang.Iterable<? extends compare_test.CompareTest.Medium.GroupA.GroupB> values) {
          if (groupBBuilder_ == null) {
            ensureGroupBIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, groupB_);
            onChanged();
          } else {
            groupBBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated group GroupB = 4 { ... }</code>
         */
        public Builder clearGroupB() {
          if (groupBBuilder_ == null) {
            groupB_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000001);
            onChanged();
          } else {
            groupBBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated group GroupB = 4 { ... }</code>
         */
        public Builder removeGroupB(int index) {
          if (groupBBuilder_ == null) {
            ensureGroupBIsMutable();
            groupB_.remove(index);
            onChanged();
          } else {
            groupBBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated group GroupB = 4 { ... }</code>
         */
        public compare_test.CompareTest.Medium.GroupA.GroupB.Builder getGroupBBuilder(
            int index) {
          return getGroupBFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated group GroupB = 4 { ... }</code>
         */
        public compare_test.CompareTest.Medium.GroupA.GroupBOrBuilder getGroupBOrBuilder(
            int index) {
          if (groupBBuilder_ == null) {
            return groupB_.get(index);  } else {
            return groupBBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated group GroupB = 4 { ... }</code>
         */
        public java.util.List<? extends compare_test.CompareTest.Medium.GroupA.GroupBOrBuilder> 
             getGroupBOrBuilderList() {
          if (groupBBuilder_ != null) {
            return groupBBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(groupB_);
          }
        }
        /**
         * <code>repeated group GroupB = 4 { ... }</code>
         */
        public compare_test.CompareTest.Medium.GroupA.GroupB.Builder addGroupBBuilder() {
          return getGroupBFieldBuilder().addBuilder(
              compare_test.CompareTest.Medium.GroupA.GroupB.getDefaultInstance());
        }
        /**
         * <code>repeated group GroupB = 4 { ... }</code>
         */
        public compare_test.CompareTest.Medium.GroupA.GroupB.Builder addGroupBBuilder(
            int index) {
          return getGroupBFieldBuilder().addBuilder(
              index, compare_test.CompareTest.Medium.GroupA.GroupB.getDefaultInstance());
        }
        /**
         * <code>repeated group GroupB = 4 { ... }</code>
         */
        public java.util.List<compare_test.CompareTest.Medium.GroupA.GroupB.Builder> 
             getGroupBBuilderList() {
          return getGroupBFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            compare_test.CompareTest.Medium.GroupA.GroupB, compare_test.CompareTest.Medium.GroupA.GroupB.Builder, compare_test.CompareTest.Medium.GroupA.GroupBOrBuilder> 
            getGroupBFieldBuilder() {
          if (groupBBuilder_ == null) {
            groupBBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                compare_test.CompareTest.Medium.GroupA.GroupB, compare_test.CompareTest.Medium.GroupA.GroupB.Builder, compare_test.CompareTest.Medium.GroupA.GroupBOrBuilder>(
                    groupB_,
                    ((bitField0_ & 0x00000001) == 0x00000001),
                    getParentForChildren(),
                    isClean());
            groupB_ = null;
          }
          return groupBBuilder_;
        }
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }


        // @@protoc_insertion_point(builder_scope:compare_test.Medium.GroupA)
      }

      // @@protoc_insertion_point(class_scope:compare_test.Medium.GroupA)
      private static final compare_test.CompareTest.Medium.GroupA DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new compare_test.CompareTest.Medium.GroupA();
      }

      public static compare_test.CompareTest.Medium.GroupA getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<GroupA>
          PARSER = new com.google.protobuf.AbstractParser<GroupA>() {
        public GroupA parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
            return new GroupA(input, extensionRegistry);
        }
      };

      public static com.google.protobuf.Parser<GroupA> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<GroupA> getParserForType() {
        return PARSER;
      }

      public compare_test.CompareTest.Medium.GroupA getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public static final int INT32S_FIELD_NUMBER = 1;
    private java.util.List<java.lang.Integer> int32S_;
    /**
     * <code>repeated int32 int32s = 1;</code>
     */
    public java.util.List<java.lang.Integer>
        getInt32SList() {
      return int32S_;
    }
    /**
     * <code>repeated int32 int32s = 1;</code>
     */
    public int getInt32SCount() {
      return int32S_.size();
    }
    /**
     * <code>repeated int32 int32s = 1;</code>
     */
    public int getInt32S(int index) {
      return int32S_.get(index);
    }

    public static final int SMALLS_FIELD_NUMBER = 2;
    private java.util.List<compare_test.CompareTest.Small> smalls_;
    /**
     * <code>repeated .compare_test.Small smalls = 2;</code>
     */
    public java.util.List<compare_test.CompareTest.Small> getSmallsList() {
      return smalls_;
    }
    /**
     * <code>repeated .compare_test.Small smalls = 2;</code>
     */
    public java.util.List<? extends compare_test.CompareTest.SmallOrBuilder> 
        getSmallsOrBuilderList() {
      return smalls_;
    }
    /**
     * <code>repeated .compare_test.Small smalls = 2;</code>
     */
    public int getSmallsCount() {
      return smalls_.size();
    }
    /**
     * <code>repeated .compare_test.Small smalls = 2;</code>
     */
    public compare_test.CompareTest.Small getSmalls(int index) {
      return smalls_.get(index);
    }
    /**
     * <code>repeated .compare_test.Small smalls = 2;</code>
     */
    public compare_test.CompareTest.SmallOrBuilder getSmallsOrBuilder(
        int index) {
      return smalls_.get(index);
    }

    public static final int GROUPA_FIELD_NUMBER = 3;
    private java.util.List<compare_test.CompareTest.Medium.GroupA> groupA_;
    /**
     * <code>repeated group GroupA = 3 { ... }</code>
     */
    public java.util.List<compare_test.CompareTest.Medium.GroupA> getGroupAList() {
      return groupA_;
    }
    /**
     * <code>repeated group GroupA = 3 { ... }</code>
     */
    public java.util.List<? extends compare_test.CompareTest.Medium.GroupAOrBuilder> 
        getGroupAOrBuilderList() {
      return groupA_;
    }
    /**
     * <code>repeated group GroupA = 3 { ... }</code>
     */
    public int getGroupACount() {
      return groupA_.size();
    }
    /**
     * <code>repeated group GroupA = 3 { ... }</code>
     */
    public compare_test.CompareTest.Medium.GroupA getGroupA(int index) {
      return groupA_.get(index);
    }
    /**
     * <code>repeated group GroupA = 3 { ... }</code>
     */
    public compare_test.CompareTest.Medium.GroupAOrBuilder getGroupAOrBuilder(
        int index) {
      return groupA_.get(index);
    }

    public static final int FLOATS_FIELD_NUMBER = 6;
    private java.util.List<java.lang.Float> floats_;
    /**
     * <code>repeated float floats = 6;</code>
     */
    public java.util.List<java.lang.Float>
        getFloatsList() {
      return floats_;
    }
    /**
     * <code>repeated float floats = 6;</code>
     */
    public int getFloatsCount() {
      return floats_.size();
    }
    /**
     * <code>repeated float floats = 6;</code>
     */
    public float getFloats(int index) {
      return floats_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      for (int i = 0; i < getGroupACount(); i++) {
        if (!getGroupA(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      for (int i = 0; i < int32S_.size(); i++) {
        output.writeInt32(1, int32S_.get(i));
      }
      for (int i = 0; i < smalls_.size(); i++) {
        output.writeMessage(2, smalls_.get(i));
      }
      for (int i = 0; i < groupA_.size(); i++) {
        output.writeGroup(3, groupA_.get(i));
      }
      for (int i = 0; i < floats_.size(); i++) {
        output.writeFloat(6, floats_.get(i));
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < int32S_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(int32S_.get(i));
        }
        size += dataSize;
        size += 1 * getInt32SList().size();
      }
      for (int i = 0; i < smalls_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, smalls_.get(i));
      }
      for (int i = 0; i < groupA_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeGroupSize(3, groupA_.get(i));
      }
      {
        int dataSize = 0;
        dataSize = 4 * getFloatsList().size();
        size += dataSize;
        size += 1 * getFloatsList().size();
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof compare_test.CompareTest.Medium)) {
        return super.equals(obj);
      }
      compare_test.CompareTest.Medium other = (compare_test.CompareTest.Medium) obj;

      boolean result = true;
      result = result && getInt32SList()
          .equals(other.getInt32SList());
      result = result && getSmallsList()
          .equals(other.getSmallsList());
      result = result && getGroupAList()
          .equals(other.getGroupAList());
      result = result && getFloatsList()
          .equals(other.getFloatsList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getInt32SCount() > 0) {
        hash = (37 * hash) + INT32S_FIELD_NUMBER;
        hash = (53 * hash) + getInt32SList().hashCode();
      }
      if (getSmallsCount() > 0) {
        hash = (37 * hash) + SMALLS_FIELD_NUMBER;
        hash = (53 * hash) + getSmallsList().hashCode();
      }
      if (getGroupACount() > 0) {
        hash = (37 * hash) + GROUPA_FIELD_NUMBER;
        hash = (53 * hash) + getGroupAList().hashCode();
      }
      if (getFloatsCount() > 0) {
        hash = (37 * hash) + FLOATS_FIELD_NUMBER;
        hash = (53 * hash) + getFloatsList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static compare_test.CompareTest.Medium parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static compare_test.CompareTest.Medium parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static compare_test.CompareTest.Medium parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static compare_test.CompareTest.Medium parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static compare_test.CompareTest.Medium parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static compare_test.CompareTest.Medium parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static compare_test.CompareTest.Medium parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static compare_test.CompareTest.Medium parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static compare_test.CompareTest.Medium parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static compare_test.CompareTest.Medium parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(compare_test.CompareTest.Medium prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code compare_test.Medium}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:compare_test.Medium)
        compare_test.CompareTest.MediumOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return compare_test.CompareTest.internal_static_compare_test_Medium_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return compare_test.CompareTest.internal_static_compare_test_Medium_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                compare_test.CompareTest.Medium.class, compare_test.CompareTest.Medium.Builder.class);
      }

      // Construct using compare_test.CompareTest.Medium.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getSmallsFieldBuilder();
          getGroupAFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        int32S_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        if (smallsBuilder_ == null) {
          smalls_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          smallsBuilder_.clear();
        }
        if (groupABuilder_ == null) {
          groupA_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          groupABuilder_.clear();
        }
        floats_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return compare_test.CompareTest.internal_static_compare_test_Medium_descriptor;
      }

      public compare_test.CompareTest.Medium getDefaultInstanceForType() {
        return compare_test.CompareTest.Medium.getDefaultInstance();
      }

      public compare_test.CompareTest.Medium build() {
        compare_test.CompareTest.Medium result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public compare_test.CompareTest.Medium buildPartial() {
        compare_test.CompareTest.Medium result = new compare_test.CompareTest.Medium(this);
        int from_bitField0_ = bitField0_;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          int32S_ = java.util.Collections.unmodifiableList(int32S_);
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.int32S_ = int32S_;
        if (smallsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            smalls_ = java.util.Collections.unmodifiableList(smalls_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.smalls_ = smalls_;
        } else {
          result.smalls_ = smallsBuilder_.build();
        }
        if (groupABuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            groupA_ = java.util.Collections.unmodifiableList(groupA_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.groupA_ = groupA_;
        } else {
          result.groupA_ = groupABuilder_.build();
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          floats_ = java.util.Collections.unmodifiableList(floats_);
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.floats_ = floats_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof compare_test.CompareTest.Medium) {
          return mergeFrom((compare_test.CompareTest.Medium)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(compare_test.CompareTest.Medium other) {
        if (other == compare_test.CompareTest.Medium.getDefaultInstance()) return this;
        if (!other.int32S_.isEmpty()) {
          if (int32S_.isEmpty()) {
            int32S_ = other.int32S_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureInt32SIsMutable();
            int32S_.addAll(other.int32S_);
          }
          onChanged();
        }
        if (smallsBuilder_ == null) {
          if (!other.smalls_.isEmpty()) {
            if (smalls_.isEmpty()) {
              smalls_ = other.smalls_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureSmallsIsMutable();
              smalls_.addAll(other.smalls_);
            }
            onChanged();
          }
        } else {
          if (!other.smalls_.isEmpty()) {
            if (smallsBuilder_.isEmpty()) {
              smallsBuilder_.dispose();
              smallsBuilder_ = null;
              smalls_ = other.smalls_;
              bitField0_ = (bitField0_ & ~0x00000002);
              smallsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getSmallsFieldBuilder() : null;
            } else {
              smallsBuilder_.addAllMessages(other.smalls_);
            }
          }
        }
        if (groupABuilder_ == null) {
          if (!other.groupA_.isEmpty()) {
            if (groupA_.isEmpty()) {
              groupA_ = other.groupA_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureGroupAIsMutable();
              groupA_.addAll(other.groupA_);
            }
            onChanged();
          }
        } else {
          if (!other.groupA_.isEmpty()) {
            if (groupABuilder_.isEmpty()) {
              groupABuilder_.dispose();
              groupABuilder_ = null;
              groupA_ = other.groupA_;
              bitField0_ = (bitField0_ & ~0x00000004);
              groupABuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getGroupAFieldBuilder() : null;
            } else {
              groupABuilder_.addAllMessages(other.groupA_);
            }
          }
        }
        if (!other.floats_.isEmpty()) {
          if (floats_.isEmpty()) {
            floats_ = other.floats_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureFloatsIsMutable();
            floats_.addAll(other.floats_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getGroupACount(); i++) {
          if (!getGroupA(i).isInitialized()) {
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        compare_test.CompareTest.Medium parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (compare_test.CompareTest.Medium) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<java.lang.Integer> int32S_ = java.util.Collections.emptyList();
      private void ensureInt32SIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          int32S_ = new java.util.ArrayList<java.lang.Integer>(int32S_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <code>repeated int32 int32s = 1;</code>
       */
      public java.util.List<java.lang.Integer>
          getInt32SList() {
        return java.util.Collections.unmodifiableList(int32S_);
      }
      /**
       * <code>repeated int32 int32s = 1;</code>
       */
      public int getInt32SCount() {
        return int32S_.size();
      }
      /**
       * <code>repeated int32 int32s = 1;</code>
       */
      public int getInt32S(int index) {
        return int32S_.get(index);
      }
      /**
       * <code>repeated int32 int32s = 1;</code>
       */
      public Builder setInt32S(
          int index, int value) {
        ensureInt32SIsMutable();
        int32S_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 int32s = 1;</code>
       */
      public Builder addInt32S(int value) {
        ensureInt32SIsMutable();
        int32S_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 int32s = 1;</code>
       */
      public Builder addAllInt32S(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureInt32SIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, int32S_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 int32s = 1;</code>
       */
      public Builder clearInt32S() {
        int32S_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }

      private java.util.List<compare_test.CompareTest.Small> smalls_ =
        java.util.Collections.emptyList();
      private void ensureSmallsIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          smalls_ = new java.util.ArrayList<compare_test.CompareTest.Small>(smalls_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          compare_test.CompareTest.Small, compare_test.CompareTest.Small.Builder, compare_test.CompareTest.SmallOrBuilder> smallsBuilder_;

      /**
       * <code>repeated .compare_test.Small smalls = 2;</code>
       */
      public java.util.List<compare_test.CompareTest.Small> getSmallsList() {
        if (smallsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(smalls_);
        } else {
          return smallsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .compare_test.Small smalls = 2;</code>
       */
      public int getSmallsCount() {
        if (smallsBuilder_ == null) {
          return smalls_.size();
        } else {
          return smallsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .compare_test.Small smalls = 2;</code>
       */
      public compare_test.CompareTest.Small getSmalls(int index) {
        if (smallsBuilder_ == null) {
          return smalls_.get(index);
        } else {
          return smallsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .compare_test.Small smalls = 2;</code>
       */
      public Builder setSmalls(
          int index, compare_test.CompareTest.Small value) {
        if (smallsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSmallsIsMutable();
          smalls_.set(index, value);
          onChanged();
        } else {
          smallsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .compare_test.Small smalls = 2;</code>
       */
      public Builder setSmalls(
          int index, compare_test.CompareTest.Small.Builder builderForValue) {
        if (smallsBuilder_ == null) {
          ensureSmallsIsMutable();
          smalls_.set(index, builderForValue.build());
          onChanged();
        } else {
          smallsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .compare_test.Small smalls = 2;</code>
       */
      public Builder addSmalls(compare_test.CompareTest.Small value) {
        if (smallsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSmallsIsMutable();
          smalls_.add(value);
          onChanged();
        } else {
          smallsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .compare_test.Small smalls = 2;</code>
       */
      public Builder addSmalls(
          int index, compare_test.CompareTest.Small value) {
        if (smallsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSmallsIsMutable();
          smalls_.add(index, value);
          onChanged();
        } else {
          smallsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .compare_test.Small smalls = 2;</code>
       */
      public Builder addSmalls(
          compare_test.CompareTest.Small.Builder builderForValue) {
        if (smallsBuilder_ == null) {
          ensureSmallsIsMutable();
          smalls_.add(builderForValue.build());
          onChanged();
        } else {
          smallsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .compare_test.Small smalls = 2;</code>
       */
      public Builder addSmalls(
          int index, compare_test.CompareTest.Small.Builder builderForValue) {
        if (smallsBuilder_ == null) {
          ensureSmallsIsMutable();
          smalls_.add(index, builderForValue.build());
          onChanged();
        } else {
          smallsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .compare_test.Small smalls = 2;</code>
       */
      public Builder addAllSmalls(
          java.lang.Iterable<? extends compare_test.CompareTest.Small> values) {
        if (smallsBuilder_ == null) {
          ensureSmallsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, smalls_);
          onChanged();
        } else {
          smallsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .compare_test.Small smalls = 2;</code>
       */
      public Builder clearSmalls() {
        if (smallsBuilder_ == null) {
          smalls_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          smallsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .compare_test.Small smalls = 2;</code>
       */
      public Builder removeSmalls(int index) {
        if (smallsBuilder_ == null) {
          ensureSmallsIsMutable();
          smalls_.remove(index);
          onChanged();
        } else {
          smallsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .compare_test.Small smalls = 2;</code>
       */
      public compare_test.CompareTest.Small.Builder getSmallsBuilder(
          int index) {
        return getSmallsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .compare_test.Small smalls = 2;</code>
       */
      public compare_test.CompareTest.SmallOrBuilder getSmallsOrBuilder(
          int index) {
        if (smallsBuilder_ == null) {
          return smalls_.get(index);  } else {
          return smallsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .compare_test.Small smalls = 2;</code>
       */
      public java.util.List<? extends compare_test.CompareTest.SmallOrBuilder> 
           getSmallsOrBuilderList() {
        if (smallsBuilder_ != null) {
          return smallsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(smalls_);
        }
      }
      /**
       * <code>repeated .compare_test.Small smalls = 2;</code>
       */
      public compare_test.CompareTest.Small.Builder addSmallsBuilder() {
        return getSmallsFieldBuilder().addBuilder(
            compare_test.CompareTest.Small.getDefaultInstance());
      }
      /**
       * <code>repeated .compare_test.Small smalls = 2;</code>
       */
      public compare_test.CompareTest.Small.Builder addSmallsBuilder(
          int index) {
        return getSmallsFieldBuilder().addBuilder(
            index, compare_test.CompareTest.Small.getDefaultInstance());
      }
      /**
       * <code>repeated .compare_test.Small smalls = 2;</code>
       */
      public java.util.List<compare_test.CompareTest.Small.Builder> 
           getSmallsBuilderList() {
        return getSmallsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          compare_test.CompareTest.Small, compare_test.CompareTest.Small.Builder, compare_test.CompareTest.SmallOrBuilder> 
          getSmallsFieldBuilder() {
        if (smallsBuilder_ == null) {
          smallsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              compare_test.CompareTest.Small, compare_test.CompareTest.Small.Builder, compare_test.CompareTest.SmallOrBuilder>(
                  smalls_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          smalls_ = null;
        }
        return smallsBuilder_;
      }

      private java.util.List<compare_test.CompareTest.Medium.GroupA> groupA_ =
        java.util.Collections.emptyList();
      private void ensureGroupAIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          groupA_ = new java.util.ArrayList<compare_test.CompareTest.Medium.GroupA>(groupA_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          compare_test.CompareTest.Medium.GroupA, compare_test.CompareTest.Medium.GroupA.Builder, compare_test.CompareTest.Medium.GroupAOrBuilder> groupABuilder_;

      /**
       * <code>repeated group GroupA = 3 { ... }</code>
       */
      public java.util.List<compare_test.CompareTest.Medium.GroupA> getGroupAList() {
        if (groupABuilder_ == null) {
          return java.util.Collections.unmodifiableList(groupA_);
        } else {
          return groupABuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated group GroupA = 3 { ... }</code>
       */
      public int getGroupACount() {
        if (groupABuilder_ == null) {
          return groupA_.size();
        } else {
          return groupABuilder_.getCount();
        }
      }
      /**
       * <code>repeated group GroupA = 3 { ... }</code>
       */
      public compare_test.CompareTest.Medium.GroupA getGroupA(int index) {
        if (groupABuilder_ == null) {
          return groupA_.get(index);
        } else {
          return groupABuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated group GroupA = 3 { ... }</code>
       */
      public Builder setGroupA(
          int index, compare_test.CompareTest.Medium.GroupA value) {
        if (groupABuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureGroupAIsMutable();
          groupA_.set(index, value);
          onChanged();
        } else {
          groupABuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated group GroupA = 3 { ... }</code>
       */
      public Builder setGroupA(
          int index, compare_test.CompareTest.Medium.GroupA.Builder builderForValue) {
        if (groupABuilder_ == null) {
          ensureGroupAIsMutable();
          groupA_.set(index, builderForValue.build());
          onChanged();
        } else {
          groupABuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated group GroupA = 3 { ... }</code>
       */
      public Builder addGroupA(compare_test.CompareTest.Medium.GroupA value) {
        if (groupABuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureGroupAIsMutable();
          groupA_.add(value);
          onChanged();
        } else {
          groupABuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated group GroupA = 3 { ... }</code>
       */
      public Builder addGroupA(
          int index, compare_test.CompareTest.Medium.GroupA value) {
        if (groupABuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureGroupAIsMutable();
          groupA_.add(index, value);
          onChanged();
        } else {
          groupABuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated group GroupA = 3 { ... }</code>
       */
      public Builder addGroupA(
          compare_test.CompareTest.Medium.GroupA.Builder builderForValue) {
        if (groupABuilder_ == null) {
          ensureGroupAIsMutable();
          groupA_.add(builderForValue.build());
          onChanged();
        } else {
          groupABuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated group GroupA = 3 { ... }</code>
       */
      public Builder addGroupA(
          int index, compare_test.CompareTest.Medium.GroupA.Builder builderForValue) {
        if (groupABuilder_ == null) {
          ensureGroupAIsMutable();
          groupA_.add(index, builderForValue.build());
          onChanged();
        } else {
          groupABuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated group GroupA = 3 { ... }</code>
       */
      public Builder addAllGroupA(
          java.lang.Iterable<? extends compare_test.CompareTest.Medium.GroupA> values) {
        if (groupABuilder_ == null) {
          ensureGroupAIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, groupA_);
          onChanged();
        } else {
          groupABuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated group GroupA = 3 { ... }</code>
       */
      public Builder clearGroupA() {
        if (groupABuilder_ == null) {
          groupA_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          groupABuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated group GroupA = 3 { ... }</code>
       */
      public Builder removeGroupA(int index) {
        if (groupABuilder_ == null) {
          ensureGroupAIsMutable();
          groupA_.remove(index);
          onChanged();
        } else {
          groupABuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated group GroupA = 3 { ... }</code>
       */
      public compare_test.CompareTest.Medium.GroupA.Builder getGroupABuilder(
          int index) {
        return getGroupAFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated group GroupA = 3 { ... }</code>
       */
      public compare_test.CompareTest.Medium.GroupAOrBuilder getGroupAOrBuilder(
          int index) {
        if (groupABuilder_ == null) {
          return groupA_.get(index);  } else {
          return groupABuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated group GroupA = 3 { ... }</code>
       */
      public java.util.List<? extends compare_test.CompareTest.Medium.GroupAOrBuilder> 
           getGroupAOrBuilderList() {
        if (groupABuilder_ != null) {
          return groupABuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(groupA_);
        }
      }
      /**
       * <code>repeated group GroupA = 3 { ... }</code>
       */
      public compare_test.CompareTest.Medium.GroupA.Builder addGroupABuilder() {
        return getGroupAFieldBuilder().addBuilder(
            compare_test.CompareTest.Medium.GroupA.getDefaultInstance());
      }
      /**
       * <code>repeated group GroupA = 3 { ... }</code>
       */
      public compare_test.CompareTest.Medium.GroupA.Builder addGroupABuilder(
          int index) {
        return getGroupAFieldBuilder().addBuilder(
            index, compare_test.CompareTest.Medium.GroupA.getDefaultInstance());
      }
      /**
       * <code>repeated group GroupA = 3 { ... }</code>
       */
      public java.util.List<compare_test.CompareTest.Medium.GroupA.Builder> 
           getGroupABuilderList() {
        return getGroupAFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          compare_test.CompareTest.Medium.GroupA, compare_test.CompareTest.Medium.GroupA.Builder, compare_test.CompareTest.Medium.GroupAOrBuilder> 
          getGroupAFieldBuilder() {
        if (groupABuilder_ == null) {
          groupABuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              compare_test.CompareTest.Medium.GroupA, compare_test.CompareTest.Medium.GroupA.Builder, compare_test.CompareTest.Medium.GroupAOrBuilder>(
                  groupA_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          groupA_ = null;
        }
        return groupABuilder_;
      }

      private java.util.List<java.lang.Float> floats_ = java.util.Collections.emptyList();
      private void ensureFloatsIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          floats_ = new java.util.ArrayList<java.lang.Float>(floats_);
          bitField0_ |= 0x00000008;
         }
      }
      /**
       * <code>repeated float floats = 6;</code>
       */
      public java.util.List<java.lang.Float>
          getFloatsList() {
        return java.util.Collections.unmodifiableList(floats_);
      }
      /**
       * <code>repeated float floats = 6;</code>
       */
      public int getFloatsCount() {
        return floats_.size();
      }
      /**
       * <code>repeated float floats = 6;</code>
       */
      public float getFloats(int index) {
        return floats_.get(index);
      }
      /**
       * <code>repeated float floats = 6;</code>
       */
      public Builder setFloats(
          int index, float value) {
        ensureFloatsIsMutable();
        floats_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated float floats = 6;</code>
       */
      public Builder addFloats(float value) {
        ensureFloatsIsMutable();
        floats_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated float floats = 6;</code>
       */
      public Builder addAllFloats(
          java.lang.Iterable<? extends java.lang.Float> values) {
        ensureFloatsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, floats_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated float floats = 6;</code>
       */
      public Builder clearFloats() {
        floats_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:compare_test.Medium)
    }

    // @@protoc_insertion_point(class_scope:compare_test.Medium)
    private static final compare_test.CompareTest.Medium DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new compare_test.CompareTest.Medium();
    }

    public static compare_test.CompareTest.Medium getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Medium>
        PARSER = new com.google.protobuf.AbstractParser<Medium>() {
      public Medium parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new Medium(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<Medium> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<Medium> getParserForType() {
      return PARSER;
    }

    public compare_test.CompareTest.Medium getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface LargeOrBuilder extends
      // @@protoc_insertion_point(interface_extends:compare_test.Large)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string string_ = 1;</code>
     */
    boolean hasString();
    /**
     * <code>optional string string_ = 1;</code>
     */
    java.lang.String getString();
    /**
     * <code>optional string string_ = 1;</code>
     */
    com.google.protobuf.ByteString
        getStringBytes();

    /**
     * <code>optional int64 int64_ = 2;</code>
     */
    boolean hasInt64();
    /**
     * <code>optional int64 int64_ = 2;</code>
     */
    long getInt64();

    /**
     * <code>optional float float_ = 3;</code>
     */
    boolean hasFloat();
    /**
     * <code>optional float float_ = 3;</code>
     */
    float getFloat();

    /**
     * <code>optional bool bool_ = 4;</code>
     */
    boolean hasBool();
    /**
     * <code>optional bool bool_ = 4;</code>
     */
    boolean getBool();

    /**
     * <code>optional .compare_test.Enum enum_ = 5;</code>
     */
    boolean hasEnum();
    /**
     * <code>optional .compare_test.Enum enum_ = 5;</code>
     */
    compare_test.CompareTest.Enum getEnum();

    /**
     * <code>repeated int64 int64s = 6;</code>
     */
    java.util.List<java.lang.Long> getInt64SList();
    /**
     * <code>repeated int64 int64s = 6;</code>
     */
    int getInt64SCount();
    /**
     * <code>repeated int64 int64s = 6;</code>
     */
    long getInt64S(int index);

    /**
     * <code>optional .compare_test.Medium medium = 7;</code>
     */
    boolean hasMedium();
    /**
     * <code>optional .compare_test.Medium medium = 7;</code>
     */
    compare_test.CompareTest.Medium getMedium();
    /**
     * <code>optional .compare_test.Medium medium = 7;</code>
     */
    compare_test.CompareTest.MediumOrBuilder getMediumOrBuilder();

    /**
     * <code>optional .compare_test.Small small = 8;</code>
     */
    boolean hasSmall();
    /**
     * <code>optional .compare_test.Small small = 8;</code>
     */
    compare_test.CompareTest.Small getSmall();
    /**
     * <code>optional .compare_test.Small small = 8;</code>
     */
    compare_test.CompareTest.SmallOrBuilder getSmallOrBuilder();

    /**
     * <code>optional double double_ = 9;</code>
     */
    boolean hasDouble();
    /**
     * <code>optional double double_ = 9;</code>
     */
    double getDouble();

    /**
     * <code>optional .compare_test.WithMap with_map = 10;</code>
     */
    boolean hasWithMap();
    /**
     * <code>optional .compare_test.WithMap with_map = 10;</code>
     */
    compare_test.CompareTest.WithMap getWithMap();
    /**
     * <code>optional .compare_test.WithMap with_map = 10;</code>
     */
    compare_test.CompareTest.WithMapOrBuilder getWithMapOrBuilder();
  }
  /**
   * Protobuf type {@code compare_test.Large}
   */
  public  static final class Large extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:compare_test.Large)
      LargeOrBuilder {
    // Use Large.newBuilder() to construct.
    private Large(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Large() {
      string_ = "";
      int64_ = 0L;
      float_ = 0F;
      bool_ = false;
      enum_ = 0;
      int64S_ = java.util.Collections.emptyList();
      double_ = 0D;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Large(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              string_ = bs;
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              int64_ = input.readInt64();
              break;
            }
            case 29: {
              bitField0_ |= 0x00000004;
              float_ = input.readFloat();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              bool_ = input.readBool();
              break;
            }
            case 40: {
              int rawValue = input.readEnum();
              compare_test.CompareTest.Enum value = compare_test.CompareTest.Enum.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(5, rawValue);
              } else {
                bitField0_ |= 0x00000010;
                enum_ = rawValue;
              }
              break;
            }
            case 48: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                int64S_ = new java.util.ArrayList<java.lang.Long>();
                mutable_bitField0_ |= 0x00000020;
              }
              int64S_.add(input.readInt64());
              break;
            }
            case 50: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020) && input.getBytesUntilLimit() > 0) {
                int64S_ = new java.util.ArrayList<java.lang.Long>();
                mutable_bitField0_ |= 0x00000020;
              }
              while (input.getBytesUntilLimit() > 0) {
                int64S_.add(input.readInt64());
              }
              input.popLimit(limit);
              break;
            }
            case 58: {
              compare_test.CompareTest.Medium.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = medium_.toBuilder();
              }
              medium_ = input.readMessage(compare_test.CompareTest.Medium.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(medium_);
                medium_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
            case 66: {
              compare_test.CompareTest.Small.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) == 0x00000040)) {
                subBuilder = small_.toBuilder();
              }
              small_ = input.readMessage(compare_test.CompareTest.Small.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(small_);
                small_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
            case 73: {
              bitField0_ |= 0x00000080;
              double_ = input.readDouble();
              break;
            }
            case 82: {
              compare_test.CompareTest.WithMap.Builder subBuilder = null;
              if (((bitField0_ & 0x00000100) == 0x00000100)) {
                subBuilder = withMap_.toBuilder();
              }
              withMap_ = input.readMessage(compare_test.CompareTest.WithMap.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(withMap_);
                withMap_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000100;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          int64S_ = java.util.Collections.unmodifiableList(int64S_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return compare_test.CompareTest.internal_static_compare_test_Large_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return compare_test.CompareTest.internal_static_compare_test_Large_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              compare_test.CompareTest.Large.class, compare_test.CompareTest.Large.Builder.class);
    }

    private int bitField0_;
    public static final int STRING__FIELD_NUMBER = 1;
    private volatile java.lang.Object string_;
    /**
     * <code>optional string string_ = 1;</code>
     */
    public boolean hasString() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string string_ = 1;</code>
     */
    public java.lang.String getString() {
      java.lang.Object ref = string_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          string_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string string_ = 1;</code>
     */
    public com.google.protobuf.ByteString
        getStringBytes() {
      java.lang.Object ref = string_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        string_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int INT64__FIELD_NUMBER = 2;
    private long int64_;
    /**
     * <code>optional int64 int64_ = 2;</code>
     */
    public boolean hasInt64() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 int64_ = 2;</code>
     */
    public long getInt64() {
      return int64_;
    }

    public static final int FLOAT__FIELD_NUMBER = 3;
    private float float_;
    /**
     * <code>optional float float_ = 3;</code>
     */
    public boolean hasFloat() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional float float_ = 3;</code>
     */
    public float getFloat() {
      return float_;
    }

    public static final int BOOL__FIELD_NUMBER = 4;
    private boolean bool_;
    /**
     * <code>optional bool bool_ = 4;</code>
     */
    public boolean hasBool() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional bool bool_ = 4;</code>
     */
    public boolean getBool() {
      return bool_;
    }

    public static final int ENUM__FIELD_NUMBER = 5;
    private int enum_;
    /**
     * <code>optional .compare_test.Enum enum_ = 5;</code>
     */
    public boolean hasEnum() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional .compare_test.Enum enum_ = 5;</code>
     */
    public compare_test.CompareTest.Enum getEnum() {
      compare_test.CompareTest.Enum result = compare_test.CompareTest.Enum.valueOf(enum_);
      return result == null ? compare_test.CompareTest.Enum.A : result;
    }

    public static final int INT64S_FIELD_NUMBER = 6;
    private java.util.List<java.lang.Long> int64S_;
    /**
     * <code>repeated int64 int64s = 6;</code>
     */
    public java.util.List<java.lang.Long>
        getInt64SList() {
      return int64S_;
    }
    /**
     * <code>repeated int64 int64s = 6;</code>
     */
    public int getInt64SCount() {
      return int64S_.size();
    }
    /**
     * <code>repeated int64 int64s = 6;</code>
     */
    public long getInt64S(int index) {
      return int64S_.get(index);
    }

    public static final int MEDIUM_FIELD_NUMBER = 7;
    private compare_test.CompareTest.Medium medium_;
    /**
     * <code>optional .compare_test.Medium medium = 7;</code>
     */
    public boolean hasMedium() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional .compare_test.Medium medium = 7;</code>
     */
    public compare_test.CompareTest.Medium getMedium() {
      return medium_ == null ? compare_test.CompareTest.Medium.getDefaultInstance() : medium_;
    }
    /**
     * <code>optional .compare_test.Medium medium = 7;</code>
     */
    public compare_test.CompareTest.MediumOrBuilder getMediumOrBuilder() {
      return medium_ == null ? compare_test.CompareTest.Medium.getDefaultInstance() : medium_;
    }

    public static final int SMALL_FIELD_NUMBER = 8;
    private compare_test.CompareTest.Small small_;
    /**
     * <code>optional .compare_test.Small small = 8;</code>
     */
    public boolean hasSmall() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional .compare_test.Small small = 8;</code>
     */
    public compare_test.CompareTest.Small getSmall() {
      return small_ == null ? compare_test.CompareTest.Small.getDefaultInstance() : small_;
    }
    /**
     * <code>optional .compare_test.Small small = 8;</code>
     */
    public compare_test.CompareTest.SmallOrBuilder getSmallOrBuilder() {
      return small_ == null ? compare_test.CompareTest.Small.getDefaultInstance() : small_;
    }

    public static final int DOUBLE__FIELD_NUMBER = 9;
    private double double_;
    /**
     * <code>optional double double_ = 9;</code>
     */
    public boolean hasDouble() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional double double_ = 9;</code>
     */
    public double getDouble() {
      return double_;
    }

    public static final int WITH_MAP_FIELD_NUMBER = 10;
    private compare_test.CompareTest.WithMap withMap_;
    /**
     * <code>optional .compare_test.WithMap with_map = 10;</code>
     */
    public boolean hasWithMap() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional .compare_test.WithMap with_map = 10;</code>
     */
    public compare_test.CompareTest.WithMap getWithMap() {
      return withMap_ == null ? compare_test.CompareTest.WithMap.getDefaultInstance() : withMap_;
    }
    /**
     * <code>optional .compare_test.WithMap with_map = 10;</code>
     */
    public compare_test.CompareTest.WithMapOrBuilder getWithMapOrBuilder() {
      return withMap_ == null ? compare_test.CompareTest.WithMap.getDefaultInstance() : withMap_;
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (hasMedium()) {
        if (!getMedium().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, string_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, int64_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeFloat(3, float_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(4, bool_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeEnum(5, enum_);
      }
      for (int i = 0; i < int64S_.size(); i++) {
        output.writeInt64(6, int64S_.get(i));
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(7, getMedium());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(8, getSmall());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeDouble(9, double_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeMessage(10, getWithMap());
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, string_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, int64_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(3, float_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, bool_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(5, enum_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < int64S_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt64SizeNoTag(int64S_.get(i));
        }
        size += dataSize;
        size += 1 * getInt64SList().size();
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, getMedium());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, getSmall());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(9, double_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, getWithMap());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof compare_test.CompareTest.Large)) {
        return super.equals(obj);
      }
      compare_test.CompareTest.Large other = (compare_test.CompareTest.Large) obj;

      boolean result = true;
      result = result && (hasString() == other.hasString());
      if (hasString()) {
        result = result && getString()
            .equals(other.getString());
      }
      result = result && (hasInt64() == other.hasInt64());
      if (hasInt64()) {
        result = result && (getInt64()
            == other.getInt64());
      }
      result = result && (hasFloat() == other.hasFloat());
      if (hasFloat()) {
        result = result && (
            java.lang.Float.floatToIntBits(getFloat())
            == java.lang.Float.floatToIntBits(
                other.getFloat()));
      }
      result = result && (hasBool() == other.hasBool());
      if (hasBool()) {
        result = result && (getBool()
            == other.getBool());
      }
      result = result && (hasEnum() == other.hasEnum());
      if (hasEnum()) {
        result = result && enum_ == other.enum_;
      }
      result = result && getInt64SList()
          .equals(other.getInt64SList());
      result = result && (hasMedium() == other.hasMedium());
      if (hasMedium()) {
        result = result && getMedium()
            .equals(other.getMedium());
      }
      result = result && (hasSmall() == other.hasSmall());
      if (hasSmall()) {
        result = result && getSmall()
            .equals(other.getSmall());
      }
      result = result && (hasDouble() == other.hasDouble());
      if (hasDouble()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getDouble())
            == java.lang.Double.doubleToLongBits(
                other.getDouble()));
      }
      result = result && (hasWithMap() == other.hasWithMap());
      if (hasWithMap()) {
        result = result && getWithMap()
            .equals(other.getWithMap());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasString()) {
        hash = (37 * hash) + STRING__FIELD_NUMBER;
        hash = (53 * hash) + getString().hashCode();
      }
      if (hasInt64()) {
        hash = (37 * hash) + INT64__FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getInt64());
      }
      if (hasFloat()) {
        hash = (37 * hash) + FLOAT__FIELD_NUMBER;
        hash = (53 * hash) + java.lang.Float.floatToIntBits(
            getFloat());
      }
      if (hasBool()) {
        hash = (37 * hash) + BOOL__FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getBool());
      }
      if (hasEnum()) {
        hash = (37 * hash) + ENUM__FIELD_NUMBER;
        hash = (53 * hash) + enum_;
      }
      if (getInt64SCount() > 0) {
        hash = (37 * hash) + INT64S_FIELD_NUMBER;
        hash = (53 * hash) + getInt64SList().hashCode();
      }
      if (hasMedium()) {
        hash = (37 * hash) + MEDIUM_FIELD_NUMBER;
        hash = (53 * hash) + getMedium().hashCode();
      }
      if (hasSmall()) {
        hash = (37 * hash) + SMALL_FIELD_NUMBER;
        hash = (53 * hash) + getSmall().hashCode();
      }
      if (hasDouble()) {
        hash = (37 * hash) + DOUBLE__FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getDouble()));
      }
      if (hasWithMap()) {
        hash = (37 * hash) + WITH_MAP_FIELD_NUMBER;
        hash = (53 * hash) + getWithMap().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static compare_test.CompareTest.Large parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static compare_test.CompareTest.Large parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static compare_test.CompareTest.Large parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static compare_test.CompareTest.Large parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static compare_test.CompareTest.Large parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static compare_test.CompareTest.Large parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static compare_test.CompareTest.Large parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static compare_test.CompareTest.Large parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static compare_test.CompareTest.Large parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static compare_test.CompareTest.Large parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(compare_test.CompareTest.Large prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code compare_test.Large}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:compare_test.Large)
        compare_test.CompareTest.LargeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return compare_test.CompareTest.internal_static_compare_test_Large_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return compare_test.CompareTest.internal_static_compare_test_Large_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                compare_test.CompareTest.Large.class, compare_test.CompareTest.Large.Builder.class);
      }

      // Construct using compare_test.CompareTest.Large.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getMediumFieldBuilder();
          getSmallFieldBuilder();
          getWithMapFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        string_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        int64_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        float_ = 0F;
        bitField0_ = (bitField0_ & ~0x00000004);
        bool_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        enum_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        int64S_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000020);
        if (mediumBuilder_ == null) {
          medium_ = null;
        } else {
          mediumBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        if (smallBuilder_ == null) {
          small_ = null;
        } else {
          smallBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        double_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000100);
        if (withMapBuilder_ == null) {
          withMap_ = null;
        } else {
          withMapBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return compare_test.CompareTest.internal_static_compare_test_Large_descriptor;
      }

      public compare_test.CompareTest.Large getDefaultInstanceForType() {
        return compare_test.CompareTest.Large.getDefaultInstance();
      }

      public compare_test.CompareTest.Large build() {
        compare_test.CompareTest.Large result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public compare_test.CompareTest.Large buildPartial() {
        compare_test.CompareTest.Large result = new compare_test.CompareTest.Large(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.string_ = string_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.int64_ = int64_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.float_ = float_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.bool_ = bool_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.enum_ = enum_;
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          int64S_ = java.util.Collections.unmodifiableList(int64S_);
          bitField0_ = (bitField0_ & ~0x00000020);
        }
        result.int64S_ = int64S_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000020;
        }
        if (mediumBuilder_ == null) {
          result.medium_ = medium_;
        } else {
          result.medium_ = mediumBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000040;
        }
        if (smallBuilder_ == null) {
          result.small_ = small_;
        } else {
          result.small_ = smallBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000080;
        }
        result.double_ = double_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000100;
        }
        if (withMapBuilder_ == null) {
          result.withMap_ = withMap_;
        } else {
          result.withMap_ = withMapBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof compare_test.CompareTest.Large) {
          return mergeFrom((compare_test.CompareTest.Large)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(compare_test.CompareTest.Large other) {
        if (other == compare_test.CompareTest.Large.getDefaultInstance()) return this;
        if (other.hasString()) {
          bitField0_ |= 0x00000001;
          string_ = other.string_;
          onChanged();
        }
        if (other.hasInt64()) {
          setInt64(other.getInt64());
        }
        if (other.hasFloat()) {
          setFloat(other.getFloat());
        }
        if (other.hasBool()) {
          setBool(other.getBool());
        }
        if (other.hasEnum()) {
          setEnum(other.getEnum());
        }
        if (!other.int64S_.isEmpty()) {
          if (int64S_.isEmpty()) {
            int64S_ = other.int64S_;
            bitField0_ = (bitField0_ & ~0x00000020);
          } else {
            ensureInt64SIsMutable();
            int64S_.addAll(other.int64S_);
          }
          onChanged();
        }
        if (other.hasMedium()) {
          mergeMedium(other.getMedium());
        }
        if (other.hasSmall()) {
          mergeSmall(other.getSmall());
        }
        if (other.hasDouble()) {
          setDouble(other.getDouble());
        }
        if (other.hasWithMap()) {
          mergeWithMap(other.getWithMap());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        if (hasMedium()) {
          if (!getMedium().isInitialized()) {
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        compare_test.CompareTest.Large parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (compare_test.CompareTest.Large) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object string_ = "";
      /**
       * <code>optional string string_ = 1;</code>
       */
      public boolean hasString() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string string_ = 1;</code>
       */
      public java.lang.String getString() {
        java.lang.Object ref = string_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            string_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string string_ = 1;</code>
       */
      public com.google.protobuf.ByteString
          getStringBytes() {
        java.lang.Object ref = string_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          string_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string string_ = 1;</code>
       */
      public Builder setString(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        string_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string string_ = 1;</code>
       */
      public Builder clearString() {
        bitField0_ = (bitField0_ & ~0x00000001);
        string_ = getDefaultInstance().getString();
        onChanged();
        return this;
      }
      /**
       * <code>optional string string_ = 1;</code>
       */
      public Builder setStringBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        string_ = value;
        onChanged();
        return this;
      }

      private long int64_ ;
      /**
       * <code>optional int64 int64_ = 2;</code>
       */
      public boolean hasInt64() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 int64_ = 2;</code>
       */
      public long getInt64() {
        return int64_;
      }
      /**
       * <code>optional int64 int64_ = 2;</code>
       */
      public Builder setInt64(long value) {
        bitField0_ |= 0x00000002;
        int64_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 int64_ = 2;</code>
       */
      public Builder clearInt64() {
        bitField0_ = (bitField0_ & ~0x00000002);
        int64_ = 0L;
        onChanged();
        return this;
      }

      private float float_ ;
      /**
       * <code>optional float float_ = 3;</code>
       */
      public boolean hasFloat() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional float float_ = 3;</code>
       */
      public float getFloat() {
        return float_;
      }
      /**
       * <code>optional float float_ = 3;</code>
       */
      public Builder setFloat(float value) {
        bitField0_ |= 0x00000004;
        float_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional float float_ = 3;</code>
       */
      public Builder clearFloat() {
        bitField0_ = (bitField0_ & ~0x00000004);
        float_ = 0F;
        onChanged();
        return this;
      }

      private boolean bool_ ;
      /**
       * <code>optional bool bool_ = 4;</code>
       */
      public boolean hasBool() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional bool bool_ = 4;</code>
       */
      public boolean getBool() {
        return bool_;
      }
      /**
       * <code>optional bool bool_ = 4;</code>
       */
      public Builder setBool(boolean value) {
        bitField0_ |= 0x00000008;
        bool_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool bool_ = 4;</code>
       */
      public Builder clearBool() {
        bitField0_ = (bitField0_ & ~0x00000008);
        bool_ = false;
        onChanged();
        return this;
      }

      private int enum_ = 0;
      /**
       * <code>optional .compare_test.Enum enum_ = 5;</code>
       */
      public boolean hasEnum() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional .compare_test.Enum enum_ = 5;</code>
       */
      public compare_test.CompareTest.Enum getEnum() {
        compare_test.CompareTest.Enum result = compare_test.CompareTest.Enum.valueOf(enum_);
        return result == null ? compare_test.CompareTest.Enum.A : result;
      }
      /**
       * <code>optional .compare_test.Enum enum_ = 5;</code>
       */
      public Builder setEnum(compare_test.CompareTest.Enum value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000010;
        enum_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .compare_test.Enum enum_ = 5;</code>
       */
      public Builder clearEnum() {
        bitField0_ = (bitField0_ & ~0x00000010);
        enum_ = 0;
        onChanged();
        return this;
      }

      private java.util.List<java.lang.Long> int64S_ = java.util.Collections.emptyList();
      private void ensureInt64SIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          int64S_ = new java.util.ArrayList<java.lang.Long>(int64S_);
          bitField0_ |= 0x00000020;
         }
      }
      /**
       * <code>repeated int64 int64s = 6;</code>
       */
      public java.util.List<java.lang.Long>
          getInt64SList() {
        return java.util.Collections.unmodifiableList(int64S_);
      }
      /**
       * <code>repeated int64 int64s = 6;</code>
       */
      public int getInt64SCount() {
        return int64S_.size();
      }
      /**
       * <code>repeated int64 int64s = 6;</code>
       */
      public long getInt64S(int index) {
        return int64S_.get(index);
      }
      /**
       * <code>repeated int64 int64s = 6;</code>
       */
      public Builder setInt64S(
          int index, long value) {
        ensureInt64SIsMutable();
        int64S_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int64 int64s = 6;</code>
       */
      public Builder addInt64S(long value) {
        ensureInt64SIsMutable();
        int64S_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int64 int64s = 6;</code>
       */
      public Builder addAllInt64S(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureInt64SIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, int64S_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int64 int64s = 6;</code>
       */
      public Builder clearInt64S() {
        int64S_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000020);
        onChanged();
        return this;
      }

      private compare_test.CompareTest.Medium medium_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          compare_test.CompareTest.Medium, compare_test.CompareTest.Medium.Builder, compare_test.CompareTest.MediumOrBuilder> mediumBuilder_;
      /**
       * <code>optional .compare_test.Medium medium = 7;</code>
       */
      public boolean hasMedium() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional .compare_test.Medium medium = 7;</code>
       */
      public compare_test.CompareTest.Medium getMedium() {
        if (mediumBuilder_ == null) {
          return medium_ == null ? compare_test.CompareTest.Medium.getDefaultInstance() : medium_;
        } else {
          return mediumBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .compare_test.Medium medium = 7;</code>
       */
      public Builder setMedium(compare_test.CompareTest.Medium value) {
        if (mediumBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          medium_ = value;
          onChanged();
        } else {
          mediumBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .compare_test.Medium medium = 7;</code>
       */
      public Builder setMedium(
          compare_test.CompareTest.Medium.Builder builderForValue) {
        if (mediumBuilder_ == null) {
          medium_ = builderForValue.build();
          onChanged();
        } else {
          mediumBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .compare_test.Medium medium = 7;</code>
       */
      public Builder mergeMedium(compare_test.CompareTest.Medium value) {
        if (mediumBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              medium_ != null &&
              medium_ != compare_test.CompareTest.Medium.getDefaultInstance()) {
            medium_ =
              compare_test.CompareTest.Medium.newBuilder(medium_).mergeFrom(value).buildPartial();
          } else {
            medium_ = value;
          }
          onChanged();
        } else {
          mediumBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .compare_test.Medium medium = 7;</code>
       */
      public Builder clearMedium() {
        if (mediumBuilder_ == null) {
          medium_ = null;
          onChanged();
        } else {
          mediumBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       * <code>optional .compare_test.Medium medium = 7;</code>
       */
      public compare_test.CompareTest.Medium.Builder getMediumBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getMediumFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .compare_test.Medium medium = 7;</code>
       */
      public compare_test.CompareTest.MediumOrBuilder getMediumOrBuilder() {
        if (mediumBuilder_ != null) {
          return mediumBuilder_.getMessageOrBuilder();
        } else {
          return medium_ == null ?
              compare_test.CompareTest.Medium.getDefaultInstance() : medium_;
        }
      }
      /**
       * <code>optional .compare_test.Medium medium = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          compare_test.CompareTest.Medium, compare_test.CompareTest.Medium.Builder, compare_test.CompareTest.MediumOrBuilder> 
          getMediumFieldBuilder() {
        if (mediumBuilder_ == null) {
          mediumBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              compare_test.CompareTest.Medium, compare_test.CompareTest.Medium.Builder, compare_test.CompareTest.MediumOrBuilder>(
                  getMedium(),
                  getParentForChildren(),
                  isClean());
          medium_ = null;
        }
        return mediumBuilder_;
      }

      private compare_test.CompareTest.Small small_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          compare_test.CompareTest.Small, compare_test.CompareTest.Small.Builder, compare_test.CompareTest.SmallOrBuilder> smallBuilder_;
      /**
       * <code>optional .compare_test.Small small = 8;</code>
       */
      public boolean hasSmall() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional .compare_test.Small small = 8;</code>
       */
      public compare_test.CompareTest.Small getSmall() {
        if (smallBuilder_ == null) {
          return small_ == null ? compare_test.CompareTest.Small.getDefaultInstance() : small_;
        } else {
          return smallBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .compare_test.Small small = 8;</code>
       */
      public Builder setSmall(compare_test.CompareTest.Small value) {
        if (smallBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          small_ = value;
          onChanged();
        } else {
          smallBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .compare_test.Small small = 8;</code>
       */
      public Builder setSmall(
          compare_test.CompareTest.Small.Builder builderForValue) {
        if (smallBuilder_ == null) {
          small_ = builderForValue.build();
          onChanged();
        } else {
          smallBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .compare_test.Small small = 8;</code>
       */
      public Builder mergeSmall(compare_test.CompareTest.Small value) {
        if (smallBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              small_ != null &&
              small_ != compare_test.CompareTest.Small.getDefaultInstance()) {
            small_ =
              compare_test.CompareTest.Small.newBuilder(small_).mergeFrom(value).buildPartial();
          } else {
            small_ = value;
          }
          onChanged();
        } else {
          smallBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .compare_test.Small small = 8;</code>
       */
      public Builder clearSmall() {
        if (smallBuilder_ == null) {
          small_ = null;
          onChanged();
        } else {
          smallBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       * <code>optional .compare_test.Small small = 8;</code>
       */
      public compare_test.CompareTest.Small.Builder getSmallBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getSmallFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .compare_test.Small small = 8;</code>
       */
      public compare_test.CompareTest.SmallOrBuilder getSmallOrBuilder() {
        if (smallBuilder_ != null) {
          return smallBuilder_.getMessageOrBuilder();
        } else {
          return small_ == null ?
              compare_test.CompareTest.Small.getDefaultInstance() : small_;
        }
      }
      /**
       * <code>optional .compare_test.Small small = 8;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          compare_test.CompareTest.Small, compare_test.CompareTest.Small.Builder, compare_test.CompareTest.SmallOrBuilder> 
          getSmallFieldBuilder() {
        if (smallBuilder_ == null) {
          smallBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              compare_test.CompareTest.Small, compare_test.CompareTest.Small.Builder, compare_test.CompareTest.SmallOrBuilder>(
                  getSmall(),
                  getParentForChildren(),
                  isClean());
          small_ = null;
        }
        return smallBuilder_;
      }

      private double double_ ;
      /**
       * <code>optional double double_ = 9;</code>
       */
      public boolean hasDouble() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional double double_ = 9;</code>
       */
      public double getDouble() {
        return double_;
      }
      /**
       * <code>optional double double_ = 9;</code>
       */
      public Builder setDouble(double value) {
        bitField0_ |= 0x00000100;
        double_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional double double_ = 9;</code>
       */
      public Builder clearDouble() {
        bitField0_ = (bitField0_ & ~0x00000100);
        double_ = 0D;
        onChanged();
        return this;
      }

      private compare_test.CompareTest.WithMap withMap_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          compare_test.CompareTest.WithMap, compare_test.CompareTest.WithMap.Builder, compare_test.CompareTest.WithMapOrBuilder> withMapBuilder_;
      /**
       * <code>optional .compare_test.WithMap with_map = 10;</code>
       */
      public boolean hasWithMap() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional .compare_test.WithMap with_map = 10;</code>
       */
      public compare_test.CompareTest.WithMap getWithMap() {
        if (withMapBuilder_ == null) {
          return withMap_ == null ? compare_test.CompareTest.WithMap.getDefaultInstance() : withMap_;
        } else {
          return withMapBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .compare_test.WithMap with_map = 10;</code>
       */
      public Builder setWithMap(compare_test.CompareTest.WithMap value) {
        if (withMapBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          withMap_ = value;
          onChanged();
        } else {
          withMapBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .compare_test.WithMap with_map = 10;</code>
       */
      public Builder setWithMap(
          compare_test.CompareTest.WithMap.Builder builderForValue) {
        if (withMapBuilder_ == null) {
          withMap_ = builderForValue.build();
          onChanged();
        } else {
          withMapBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .compare_test.WithMap with_map = 10;</code>
       */
      public Builder mergeWithMap(compare_test.CompareTest.WithMap value) {
        if (withMapBuilder_ == null) {
          if (((bitField0_ & 0x00000200) == 0x00000200) &&
              withMap_ != null &&
              withMap_ != compare_test.CompareTest.WithMap.getDefaultInstance()) {
            withMap_ =
              compare_test.CompareTest.WithMap.newBuilder(withMap_).mergeFrom(value).buildPartial();
          } else {
            withMap_ = value;
          }
          onChanged();
        } else {
          withMapBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .compare_test.WithMap with_map = 10;</code>
       */
      public Builder clearWithMap() {
        if (withMapBuilder_ == null) {
          withMap_ = null;
          onChanged();
        } else {
          withMapBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }
      /**
       * <code>optional .compare_test.WithMap with_map = 10;</code>
       */
      public compare_test.CompareTest.WithMap.Builder getWithMapBuilder() {
        bitField0_ |= 0x00000200;
        onChanged();
        return getWithMapFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .compare_test.WithMap with_map = 10;</code>
       */
      public compare_test.CompareTest.WithMapOrBuilder getWithMapOrBuilder() {
        if (withMapBuilder_ != null) {
          return withMapBuilder_.getMessageOrBuilder();
        } else {
          return withMap_ == null ?
              compare_test.CompareTest.WithMap.getDefaultInstance() : withMap_;
        }
      }
      /**
       * <code>optional .compare_test.WithMap with_map = 10;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          compare_test.CompareTest.WithMap, compare_test.CompareTest.WithMap.Builder, compare_test.CompareTest.WithMapOrBuilder> 
          getWithMapFieldBuilder() {
        if (withMapBuilder_ == null) {
          withMapBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              compare_test.CompareTest.WithMap, compare_test.CompareTest.WithMap.Builder, compare_test.CompareTest.WithMapOrBuilder>(
                  getWithMap(),
                  getParentForChildren(),
                  isClean());
          withMap_ = null;
        }
        return withMapBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:compare_test.Large)
    }

    // @@protoc_insertion_point(class_scope:compare_test.Large)
    private static final compare_test.CompareTest.Large DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new compare_test.CompareTest.Large();
    }

    public static compare_test.CompareTest.Large getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Large>
        PARSER = new com.google.protobuf.AbstractParser<Large>() {
      public Large parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new Large(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<Large> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<Large> getParserForType() {
      return PARSER;
    }

    public compare_test.CompareTest.Large getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface LabeledOrBuilder extends
      // @@protoc_insertion_point(interface_extends:compare_test.Labeled)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required int32 required = 1;</code>
     */
    boolean hasRequired();
    /**
     * <code>required int32 required = 1;</code>
     */
    int getRequired();

    /**
     * <code>optional int32 optional = 2;</code>
     */
    boolean hasOptional();
    /**
     * <code>optional int32 optional = 2;</code>
     */
    int getOptional();
  }
  /**
   * Protobuf type {@code compare_test.Labeled}
   */
  public  static final class Labeled extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:compare_test.Labeled)
      LabeledOrBuilder {
    // Use Labeled.newBuilder() to construct.
    private Labeled(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Labeled() {
      required_ = 0;
      optional_ = 0;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Labeled(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              required_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              optional_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return compare_test.CompareTest.internal_static_compare_test_Labeled_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return compare_test.CompareTest.internal_static_compare_test_Labeled_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              compare_test.CompareTest.Labeled.class, compare_test.CompareTest.Labeled.Builder.class);
    }

    private int bitField0_;
    public static final int REQUIRED_FIELD_NUMBER = 1;
    private int required_;
    /**
     * <code>required int32 required = 1;</code>
     */
    public boolean hasRequired() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required int32 required = 1;</code>
     */
    public int getRequired() {
      return required_;
    }

    public static final int OPTIONAL_FIELD_NUMBER = 2;
    private int optional_;
    /**
     * <code>optional int32 optional = 2;</code>
     */
    public boolean hasOptional() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 optional = 2;</code>
     */
    public int getOptional() {
      return optional_;
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasRequired()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, required_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, optional_);
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, required_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, optional_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof compare_test.CompareTest.Labeled)) {
        return super.equals(obj);
      }
      compare_test.CompareTest.Labeled other = (compare_test.CompareTest.Labeled) obj;

      boolean result = true;
      result = result && (hasRequired() == other.hasRequired());
      if (hasRequired()) {
        result = result && (getRequired()
            == other.getRequired());
      }
      result = result && (hasOptional() == other.hasOptional());
      if (hasOptional()) {
        result = result && (getOptional()
            == other.getOptional());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRequired()) {
        hash = (37 * hash) + REQUIRED_FIELD_NUMBER;
        hash = (53 * hash) + getRequired();
      }
      if (hasOptional()) {
        hash = (37 * hash) + OPTIONAL_FIELD_NUMBER;
        hash = (53 * hash) + getOptional();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static compare_test.CompareTest.Labeled parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static compare_test.CompareTest.Labeled parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static compare_test.CompareTest.Labeled parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static compare_test.CompareTest.Labeled parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static compare_test.CompareTest.Labeled parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static compare_test.CompareTest.Labeled parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static compare_test.CompareTest.Labeled parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static compare_test.CompareTest.Labeled parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static compare_test.CompareTest.Labeled parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static compare_test.CompareTest.Labeled parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(compare_test.CompareTest.Labeled prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code compare_test.Labeled}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:compare_test.Labeled)
        compare_test.CompareTest.LabeledOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return compare_test.CompareTest.internal_static_compare_test_Labeled_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return compare_test.CompareTest.internal_static_compare_test_Labeled_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                compare_test.CompareTest.Labeled.class, compare_test.CompareTest.Labeled.Builder.class);
      }

      // Construct using compare_test.CompareTest.Labeled.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        required_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        optional_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return compare_test.CompareTest.internal_static_compare_test_Labeled_descriptor;
      }

      public compare_test.CompareTest.Labeled getDefaultInstanceForType() {
        return compare_test.CompareTest.Labeled.getDefaultInstance();
      }

      public compare_test.CompareTest.Labeled build() {
        compare_test.CompareTest.Labeled result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public compare_test.CompareTest.Labeled buildPartial() {
        compare_test.CompareTest.Labeled result = new compare_test.CompareTest.Labeled(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.required_ = required_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.optional_ = optional_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof compare_test.CompareTest.Labeled) {
          return mergeFrom((compare_test.CompareTest.Labeled)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(compare_test.CompareTest.Labeled other) {
        if (other == compare_test.CompareTest.Labeled.getDefaultInstance()) return this;
        if (other.hasRequired()) {
          setRequired(other.getRequired());
        }
        if (other.hasOptional()) {
          setOptional(other.getOptional());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        if (!hasRequired()) {
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        compare_test.CompareTest.Labeled parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (compare_test.CompareTest.Labeled) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int required_ ;
      /**
       * <code>required int32 required = 1;</code>
       */
      public boolean hasRequired() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required int32 required = 1;</code>
       */
      public int getRequired() {
        return required_;
      }
      /**
       * <code>required int32 required = 1;</code>
       */
      public Builder setRequired(int value) {
        bitField0_ |= 0x00000001;
        required_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 required = 1;</code>
       */
      public Builder clearRequired() {
        bitField0_ = (bitField0_ & ~0x00000001);
        required_ = 0;
        onChanged();
        return this;
      }

      private int optional_ ;
      /**
       * <code>optional int32 optional = 2;</code>
       */
      public boolean hasOptional() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 optional = 2;</code>
       */
      public int getOptional() {
        return optional_;
      }
      /**
       * <code>optional int32 optional = 2;</code>
       */
      public Builder setOptional(int value) {
        bitField0_ |= 0x00000002;
        optional_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 optional = 2;</code>
       */
      public Builder clearOptional() {
        bitField0_ = (bitField0_ & ~0x00000002);
        optional_ = 0;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:compare_test.Labeled)
    }

    // @@protoc_insertion_point(class_scope:compare_test.Labeled)
    private static final compare_test.CompareTest.Labeled DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new compare_test.CompareTest.Labeled();
    }

    public static compare_test.CompareTest.Labeled getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Labeled>
        PARSER = new com.google.protobuf.AbstractParser<Labeled>() {
      public Labeled parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new Labeled(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<Labeled> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<Labeled> getParserForType() {
      return PARSER;
    }

    public compare_test.CompareTest.Labeled getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface WithMapOrBuilder extends
      // @@protoc_insertion_point(interface_extends:compare_test.WithMap)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>map&lt;int32, .compare_test.Small&gt; value_message = 1;</code>
     */
    int getValueMessageCount();
    /**
     * <code>map&lt;int32, .compare_test.Small&gt; value_message = 1;</code>
     */
    boolean containsValueMessage(
        int key);
    /**
     * Use {@link #getValueMessageMap()} instead.
     */
    @java.lang.Deprecated
    java.util.Map<java.lang.Integer, compare_test.CompareTest.Small>
    getValueMessage();
    /**
     * <code>map&lt;int32, .compare_test.Small&gt; value_message = 1;</code>
     */
    java.util.Map<java.lang.Integer, compare_test.CompareTest.Small>
    getValueMessageMap();
    /**
     * <code>map&lt;int32, .compare_test.Small&gt; value_message = 1;</code>
     */

    compare_test.CompareTest.Small getValueMessageOrDefault(
        int key,
        compare_test.CompareTest.Small defaultValue);
    /**
     * <code>map&lt;int32, .compare_test.Small&gt; value_message = 1;</code>
     */

    compare_test.CompareTest.Small getValueMessageOrThrow(
        int key);

    /**
     * <code>map&lt;string, string&gt; value_string = 2;</code>
     */
    int getValueStringCount();
    /**
     * <code>map&lt;string, string&gt; value_string = 2;</code>
     */
    boolean containsValueString(
        java.lang.String key);
    /**
     * Use {@link #getValueStringMap()} instead.
     */
    @java.lang.Deprecated
    java.util.Map<java.lang.String, java.lang.String>
    getValueString();
    /**
     * <code>map&lt;string, string&gt; value_string = 2;</code>
     */
    java.util.Map<java.lang.String, java.lang.String>
    getValueStringMap();
    /**
     * <code>map&lt;string, string&gt; value_string = 2;</code>
     */

    java.lang.String getValueStringOrDefault(
        java.lang.String key,
        java.lang.String defaultValue);
    /**
     * <code>map&lt;string, string&gt; value_string = 2;</code>
     */

    java.lang.String getValueStringOrThrow(
        java.lang.String key);
  }
  /**
   * Protobuf type {@code compare_test.WithMap}
   */
  public  static final class WithMap extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:compare_test.WithMap)
      WithMapOrBuilder {
    // Use WithMap.newBuilder() to construct.
    private WithMap(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private WithMap() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private WithMap(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                valueMessage_ = com.google.protobuf.MapField.newMapField(
                    ValueMessageDefaultEntryHolder.defaultEntry);
                mutable_bitField0_ |= 0x00000001;
              }
              com.google.protobuf.MapEntry<java.lang.Integer, compare_test.CompareTest.Small>
              valueMessage__ = input.readMessage(
                  ValueMessageDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
              valueMessage_.getMutableMap().put(
                  valueMessage__.getKey(), valueMessage__.getValue());
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                valueString_ = com.google.protobuf.MapField.newMapField(
                    ValueStringDefaultEntryHolder.defaultEntry);
                mutable_bitField0_ |= 0x00000002;
              }
              com.google.protobuf.MapEntry<java.lang.String, java.lang.String>
              valueString__ = input.readMessage(
                  ValueStringDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
              valueString_.getMutableMap().put(
                  valueString__.getKey(), valueString__.getValue());
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return compare_test.CompareTest.internal_static_compare_test_WithMap_descriptor;
    }

    @SuppressWarnings({"rawtypes"})
    protected com.google.protobuf.MapField internalGetMapField(
        int number) {
      switch (number) {
        case 1:
          return internalGetValueMessage();
        case 2:
          return internalGetValueString();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return compare_test.CompareTest.internal_static_compare_test_WithMap_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              compare_test.CompareTest.WithMap.class, compare_test.CompareTest.WithMap.Builder.class);
    }

    public static final int VALUE_MESSAGE_FIELD_NUMBER = 1;
    private static final class ValueMessageDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.Integer, compare_test.CompareTest.Small> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.Integer, compare_test.CompareTest.Small>newDefaultInstance(
                  compare_test.CompareTest.internal_static_compare_test_WithMap_ValueMessageEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.INT32,
                  0,
                  com.google.protobuf.WireFormat.FieldType.MESSAGE,
                  compare_test.CompareTest.Small.getDefaultInstance());
    }
    private com.google.protobuf.MapField<
        java.lang.Integer, compare_test.CompareTest.Small> valueMessage_;
    private com.google.protobuf.MapField<java.lang.Integer, compare_test.CompareTest.Small>
    internalGetValueMessage() {
      if (valueMessage_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            ValueMessageDefaultEntryHolder.defaultEntry);
      }
      return valueMessage_;
    }

    public int getValueMessageCount() {
      return internalGetValueMessage().getMap().size();
    }
    /**
     * <code>map&lt;int32, .compare_test.Small&gt; value_message = 1;</code>
     */

    public boolean containsValueMessage(
        int key) {
      
      return internalGetValueMessage().getMap().containsKey(key);
    }
    /**
     * Use {@link #getValueMessageMap()} instead.
     */
    @java.lang.Deprecated
    public java.util.Map<java.lang.Integer, compare_test.CompareTest.Small> getValueMessage() {
      return getValueMessageMap();
    }
    /**
     * <code>map&lt;int32, .compare_test.Small&gt; value_message = 1;</code>
     */

    public java.util.Map<java.lang.Integer, compare_test.CompareTest.Small> getValueMessageMap() {
      return internalGetValueMessage().getMap();
    }
    /**
     * <code>map&lt;int32, .compare_test.Small&gt; value_message = 1;</code>
     */

    public compare_test.CompareTest.Small getValueMessageOrDefault(
        int key,
        compare_test.CompareTest.Small defaultValue) {
      
      java.util.Map<java.lang.Integer, compare_test.CompareTest.Small> map =
          internalGetValueMessage().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <code>map&lt;int32, .compare_test.Small&gt; value_message = 1;</code>
     */

    public compare_test.CompareTest.Small getValueMessageOrThrow(
        int key) {
      
      java.util.Map<java.lang.Integer, compare_test.CompareTest.Small> map =
          internalGetValueMessage().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }

    public static final int VALUE_STRING_FIELD_NUMBER = 2;
    private static final class ValueStringDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.String, java.lang.String> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.String, java.lang.String>newDefaultInstance(
                  compare_test.CompareTest.internal_static_compare_test_WithMap_ValueStringEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "",
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "");
    }
    private com.google.protobuf.MapField<
        java.lang.String, java.lang.String> valueString_;
    private com.google.protobuf.MapField<java.lang.String, java.lang.String>
    internalGetValueString() {
      if (valueString_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            ValueStringDefaultEntryHolder.defaultEntry);
      }
      return valueString_;
    }

    public int getValueStringCount() {
      return internalGetValueString().getMap().size();
    }
    /**
     * <code>map&lt;string, string&gt; value_string = 2;</code>
     */

    public boolean containsValueString(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      return internalGetValueString().getMap().containsKey(key);
    }
    /**
     * Use {@link #getValueStringMap()} instead.
     */
    @java.lang.Deprecated
    public java.util.Map<java.lang.String, java.lang.String> getValueString() {
      return getValueStringMap();
    }
    /**
     * <code>map&lt;string, string&gt; value_string = 2;</code>
     */

    public java.util.Map<java.lang.String, java.lang.String> getValueStringMap() {
      return internalGetValueString().getMap();
    }
    /**
     * <code>map&lt;string, string&gt; value_string = 2;</code>
     */

    public java.lang.String getValueStringOrDefault(
        java.lang.String key,
        java.lang.String defaultValue) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, java.lang.String> map =
          internalGetValueString().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <code>map&lt;string, string&gt; value_string = 2;</code>
     */

    public java.lang.String getValueStringOrThrow(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, java.lang.String> map =
          internalGetValueString().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      com.google.protobuf.GeneratedMessageV3
        .serializeIntegerMapTo(
          output,
          internalGetValueMessage(),
          ValueMessageDefaultEntryHolder.defaultEntry,
          1);
      com.google.protobuf.GeneratedMessageV3
        .serializeStringMapTo(
          output,
          internalGetValueString(),
          ValueStringDefaultEntryHolder.defaultEntry,
          2);
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (java.util.Map.Entry<java.lang.Integer, compare_test.CompareTest.Small> entry
           : internalGetValueMessage().getMap().entrySet()) {
        com.google.protobuf.MapEntry<java.lang.Integer, compare_test.CompareTest.Small>
        valueMessage__ = ValueMessageDefaultEntryHolder.defaultEntry.newBuilderForType()
            .setKey(entry.getKey())
            .setValue(entry.getValue())
            .build();
        size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, valueMessage__);
      }
      for (java.util.Map.Entry<java.lang.String, java.lang.String> entry
           : internalGetValueString().getMap().entrySet()) {
        com.google.protobuf.MapEntry<java.lang.String, java.lang.String>
        valueString__ = ValueStringDefaultEntryHolder.defaultEntry.newBuilderForType()
            .setKey(entry.getKey())
            .setValue(entry.getValue())
            .build();
        size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(2, valueString__);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof compare_test.CompareTest.WithMap)) {
        return super.equals(obj);
      }
      compare_test.CompareTest.WithMap other = (compare_test.CompareTest.WithMap) obj;

      boolean result = true;
      result = result && internalGetValueMessage().equals(
          other.internalGetValueMessage());
      result = result && internalGetValueString().equals(
          other.internalGetValueString());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (!internalGetValueMessage().getMap().isEmpty()) {
        hash = (37 * hash) + VALUE_MESSAGE_FIELD_NUMBER;
        hash = (53 * hash) + internalGetValueMessage().hashCode();
      }
      if (!internalGetValueString().getMap().isEmpty()) {
        hash = (37 * hash) + VALUE_STRING_FIELD_NUMBER;
        hash = (53 * hash) + internalGetValueString().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static compare_test.CompareTest.WithMap parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static compare_test.CompareTest.WithMap parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static compare_test.CompareTest.WithMap parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static compare_test.CompareTest.WithMap parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static compare_test.CompareTest.WithMap parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static compare_test.CompareTest.WithMap parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static compare_test.CompareTest.WithMap parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static compare_test.CompareTest.WithMap parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static compare_test.CompareTest.WithMap parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static compare_test.CompareTest.WithMap parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(compare_test.CompareTest.WithMap prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code compare_test.WithMap}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:compare_test.WithMap)
        compare_test.CompareTest.WithMapOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return compare_test.CompareTest.internal_static_compare_test_WithMap_descriptor;
      }

      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMapField(
          int number) {
        switch (number) {
          case 1:
            return internalGetValueMessage();
          case 2:
            return internalGetValueString();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMutableMapField(
          int number) {
        switch (number) {
          case 1:
            return internalGetMutableValueMessage();
          case 2:
            return internalGetMutableValueString();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return compare_test.CompareTest.internal_static_compare_test_WithMap_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                compare_test.CompareTest.WithMap.class, compare_test.CompareTest.WithMap.Builder.class);
      }

      // Construct using compare_test.CompareTest.WithMap.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        internalGetMutableValueMessage().clear();
        internalGetMutableValueString().clear();
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return compare_test.CompareTest.internal_static_compare_test_WithMap_descriptor;
      }

      public compare_test.CompareTest.WithMap getDefaultInstanceForType() {
        return compare_test.CompareTest.WithMap.getDefaultInstance();
      }

      public compare_test.CompareTest.WithMap build() {
        compare_test.CompareTest.WithMap result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public compare_test.CompareTest.WithMap buildPartial() {
        compare_test.CompareTest.WithMap result = new compare_test.CompareTest.WithMap(this);
        int from_bitField0_ = bitField0_;
        result.valueMessage_ = internalGetValueMessage();
        result.valueMessage_.makeImmutable();
        result.valueString_ = internalGetValueString();
        result.valueString_.makeImmutable();
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof compare_test.CompareTest.WithMap) {
          return mergeFrom((compare_test.CompareTest.WithMap)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(compare_test.CompareTest.WithMap other) {
        if (other == compare_test.CompareTest.WithMap.getDefaultInstance()) return this;
        internalGetMutableValueMessage().mergeFrom(
            other.internalGetValueMessage());
        internalGetMutableValueString().mergeFrom(
            other.internalGetValueString());
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        compare_test.CompareTest.WithMap parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (compare_test.CompareTest.WithMap) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.MapField<
          java.lang.Integer, compare_test.CompareTest.Small> valueMessage_;
      private com.google.protobuf.MapField<java.lang.Integer, compare_test.CompareTest.Small>
      internalGetValueMessage() {
        if (valueMessage_ == null) {
          return com.google.protobuf.MapField.emptyMapField(
              ValueMessageDefaultEntryHolder.defaultEntry);
        }
        return valueMessage_;
      }
      private com.google.protobuf.MapField<java.lang.Integer, compare_test.CompareTest.Small>
      internalGetMutableValueMessage() {
        onChanged();;
        if (valueMessage_ == null) {
          valueMessage_ = com.google.protobuf.MapField.newMapField(
              ValueMessageDefaultEntryHolder.defaultEntry);
        }
        if (!valueMessage_.isMutable()) {
          valueMessage_ = valueMessage_.copy();
        }
        return valueMessage_;
      }

      public int getValueMessageCount() {
        return internalGetValueMessage().getMap().size();
      }
      /**
       * <code>map&lt;int32, .compare_test.Small&gt; value_message = 1;</code>
       */

      public boolean containsValueMessage(
          int key) {
        
        return internalGetValueMessage().getMap().containsKey(key);
      }
      /**
       * Use {@link #getValueMessageMap()} instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.Integer, compare_test.CompareTest.Small> getValueMessage() {
        return getValueMessageMap();
      }
      /**
       * <code>map&lt;int32, .compare_test.Small&gt; value_message = 1;</code>
       */

      public java.util.Map<java.lang.Integer, compare_test.CompareTest.Small> getValueMessageMap() {
        return internalGetValueMessage().getMap();
      }
      /**
       * <code>map&lt;int32, .compare_test.Small&gt; value_message = 1;</code>
       */

      public compare_test.CompareTest.Small getValueMessageOrDefault(
          int key,
          compare_test.CompareTest.Small defaultValue) {
        
        java.util.Map<java.lang.Integer, compare_test.CompareTest.Small> map =
            internalGetValueMessage().getMap();
        return map.containsKey(key) ? map.get(key) : defaultValue;
      }
      /**
       * <code>map&lt;int32, .compare_test.Small&gt; value_message = 1;</code>
       */

      public compare_test.CompareTest.Small getValueMessageOrThrow(
          int key) {
        
        java.util.Map<java.lang.Integer, compare_test.CompareTest.Small> map =
            internalGetValueMessage().getMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return map.get(key);
      }

      public Builder clearValueMessage() {
        internalGetMutableValueMessage().getMutableMap()
            .clear();
        return this;
      }
      /**
       * <code>map&lt;int32, .compare_test.Small&gt; value_message = 1;</code>
       */

      public Builder removeValueMessage(
          int key) {
        
        internalGetMutableValueMessage().getMutableMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.Integer, compare_test.CompareTest.Small>
      getMutableValueMessage() {
        return internalGetMutableValueMessage().getMutableMap();
      }
      /**
       * <code>map&lt;int32, .compare_test.Small&gt; value_message = 1;</code>
       */
      public Builder putValueMessage(
          int key,
          compare_test.CompareTest.Small value) {
        
        if (value == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableValueMessage().getMutableMap()
            .put(key, value);
        return this;
      }
      /**
       * <code>map&lt;int32, .compare_test.Small&gt; value_message = 1;</code>
       */

      public Builder putAllValueMessage(
          java.util.Map<java.lang.Integer, compare_test.CompareTest.Small> values) {
        internalGetMutableValueMessage().getMutableMap()
            .putAll(values);
        return this;
      }

      private com.google.protobuf.MapField<
          java.lang.String, java.lang.String> valueString_;
      private com.google.protobuf.MapField<java.lang.String, java.lang.String>
      internalGetValueString() {
        if (valueString_ == null) {
          return com.google.protobuf.MapField.emptyMapField(
              ValueStringDefaultEntryHolder.defaultEntry);
        }
        return valueString_;
      }
      private com.google.protobuf.MapField<java.lang.String, java.lang.String>
      internalGetMutableValueString() {
        onChanged();;
        if (valueString_ == null) {
          valueString_ = com.google.protobuf.MapField.newMapField(
              ValueStringDefaultEntryHolder.defaultEntry);
        }
        if (!valueString_.isMutable()) {
          valueString_ = valueString_.copy();
        }
        return valueString_;
      }

      public int getValueStringCount() {
        return internalGetValueString().getMap().size();
      }
      /**
       * <code>map&lt;string, string&gt; value_string = 2;</code>
       */

      public boolean containsValueString(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        return internalGetValueString().getMap().containsKey(key);
      }
      /**
       * Use {@link #getValueStringMap()} instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, java.lang.String> getValueString() {
        return getValueStringMap();
      }
      /**
       * <code>map&lt;string, string&gt; value_string = 2;</code>
       */

      public java.util.Map<java.lang.String, java.lang.String> getValueStringMap() {
        return internalGetValueString().getMap();
      }
      /**
       * <code>map&lt;string, string&gt; value_string = 2;</code>
       */

      public java.lang.String getValueStringOrDefault(
          java.lang.String key,
          java.lang.String defaultValue) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, java.lang.String> map =
            internalGetValueString().getMap();
        return map.containsKey(key) ? map.get(key) : defaultValue;
      }
      /**
       * <code>map&lt;string, string&gt; value_string = 2;</code>
       */

      public java.lang.String getValueStringOrThrow(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, java.lang.String> map =
            internalGetValueString().getMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return map.get(key);
      }

      public Builder clearValueString() {
        internalGetMutableValueString().getMutableMap()
            .clear();
        return this;
      }
      /**
       * <code>map&lt;string, string&gt; value_string = 2;</code>
       */

      public Builder removeValueString(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableValueString().getMutableMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, java.lang.String>
      getMutableValueString() {
        return internalGetMutableValueString().getMutableMap();
      }
      /**
       * <code>map&lt;string, string&gt; value_string = 2;</code>
       */
      public Builder putValueString(
          java.lang.String key,
          java.lang.String value) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        if (value == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableValueString().getMutableMap()
            .put(key, value);
        return this;
      }
      /**
       * <code>map&lt;string, string&gt; value_string = 2;</code>
       */

      public Builder putAllValueString(
          java.util.Map<java.lang.String, java.lang.String> values) {
        internalGetMutableValueString().getMutableMap()
            .putAll(values);
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:compare_test.WithMap)
    }

    // @@protoc_insertion_point(class_scope:compare_test.WithMap)
    private static final compare_test.CompareTest.WithMap DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new compare_test.CompareTest.WithMap();
    }

    public static compare_test.CompareTest.WithMap getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<WithMap>
        PARSER = new com.google.protobuf.AbstractParser<WithMap>() {
      public WithMap parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new WithMap(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<WithMap> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<WithMap> getParserForType() {
      return PARSER;
    }

    public compare_test.CompareTest.WithMap getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_compare_test_Small_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_compare_test_Small_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_compare_test_Medium_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_compare_test_Medium_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_compare_test_Medium_GroupA_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_compare_test_Medium_GroupA_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_compare_test_Medium_GroupA_GroupB_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_compare_test_Medium_GroupA_GroupB_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_compare_test_Large_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_compare_test_Large_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_compare_test_Labeled_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_compare_test_Labeled_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_compare_test_WithMap_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_compare_test_WithMap_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_compare_test_WithMap_ValueMessageEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_compare_test_WithMap_ValueMessageEntry_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_compare_test_WithMap_ValueStringEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_compare_test_WithMap_ValueStringEntry_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n2tensorflow/python/util/protobuf/compar" +
      "e_test.proto\022\014compare_test\"\030\n\005Small\022\017\n\007s" +
      "trings\030\001 \003(\t\"\323\001\n\006Medium\022\016\n\006int32s\030\001 \003(\005\022" +
      "#\n\006smalls\030\002 \003(\0132\023.compare_test.Small\022+\n\006" +
      "groupa\030\003 \003(\n2\033.compare_test.Medium.Group" +
      "A\022\016\n\006floats\030\006 \003(\002\032W\n\006GroupA\0222\n\006groupb\030\004 " +
      "\003(\n2\".compare_test.Medium.GroupA.GroupB\032" +
      "\031\n\006GroupB\022\017\n\007strings\030\005 \002(\t\"\376\001\n\005Large\022\017\n\007" +
      "string_\030\001 \001(\t\022\016\n\006int64_\030\002 \001(\003\022\016\n\006float_\030" +
      "\003 \001(\002\022\r\n\005bool_\030\004 \001(\010\022!\n\005enum_\030\005 \001(\0162\022.co",
      "mpare_test.Enum\022\016\n\006int64s\030\006 \003(\003\022$\n\006mediu" +
      "m\030\007 \001(\0132\024.compare_test.Medium\022\"\n\005small\030\010" +
      " \001(\0132\023.compare_test.Small\022\017\n\007double_\030\t \001" +
      "(\001\022\'\n\010with_map\030\n \001(\0132\025.compare_test.With" +
      "Map\"-\n\007Labeled\022\020\n\010required\030\001 \002(\005\022\020\n\010opti" +
      "onal\030\002 \001(\005\"\205\002\n\007WithMap\022>\n\rvalue_message\030" +
      "\001 \003(\0132\'.compare_test.WithMap.ValueMessag" +
      "eEntry\022<\n\014value_string\030\002 \003(\0132&.compare_t" +
      "est.WithMap.ValueStringEntry\032H\n\021ValueMes" +
      "sageEntry\022\013\n\003key\030\001 \001(\005\022\"\n\005value\030\002 \001(\0132\023.",
      "compare_test.Small:\0028\001\0322\n\020ValueStringEnt" +
      "ry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001*\033\n\004En" +
      "um\022\005\n\001A\020\000\022\005\n\001B\020\001\022\005\n\001C\020\002B\003\370\001\001"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
        new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
          public com.google.protobuf.ExtensionRegistry assignDescriptors(
              com.google.protobuf.Descriptors.FileDescriptor root) {
            descriptor = root;
            return null;
          }
        };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        }, assigner);
    internal_static_compare_test_Small_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_compare_test_Small_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_compare_test_Small_descriptor,
        new java.lang.String[] { "Strings", });
    internal_static_compare_test_Medium_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_compare_test_Medium_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_compare_test_Medium_descriptor,
        new java.lang.String[] { "Int32S", "Smalls", "GroupA", "Floats", });
    internal_static_compare_test_Medium_GroupA_descriptor =
      internal_static_compare_test_Medium_descriptor.getNestedTypes().get(0);
    internal_static_compare_test_Medium_GroupA_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_compare_test_Medium_GroupA_descriptor,
        new java.lang.String[] { "GroupB", });
    internal_static_compare_test_Medium_GroupA_GroupB_descriptor =
      internal_static_compare_test_Medium_GroupA_descriptor.getNestedTypes().get(0);
    internal_static_compare_test_Medium_GroupA_GroupB_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_compare_test_Medium_GroupA_GroupB_descriptor,
        new java.lang.String[] { "Strings", });
    internal_static_compare_test_Large_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_compare_test_Large_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_compare_test_Large_descriptor,
        new java.lang.String[] { "String", "Int64", "Float", "Bool", "Enum", "Int64S", "Medium", "Small", "Double", "WithMap", });
    internal_static_compare_test_Labeled_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_compare_test_Labeled_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_compare_test_Labeled_descriptor,
        new java.lang.String[] { "Required", "Optional", });
    internal_static_compare_test_WithMap_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_compare_test_WithMap_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_compare_test_WithMap_descriptor,
        new java.lang.String[] { "ValueMessage", "ValueString", });
    internal_static_compare_test_WithMap_ValueMessageEntry_descriptor =
      internal_static_compare_test_WithMap_descriptor.getNestedTypes().get(0);
    internal_static_compare_test_WithMap_ValueMessageEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_compare_test_WithMap_ValueMessageEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_compare_test_WithMap_ValueStringEntry_descriptor =
      internal_static_compare_test_WithMap_descriptor.getNestedTypes().get(1);
    internal_static_compare_test_WithMap_ValueStringEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_compare_test_WithMap_ValueStringEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
