com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code google.protobuf.FieldOptions}
   */
  public static final class FieldOptions extends
      com.google.protobuf.GeneratedMessage.ExtendableMessage<
        FieldOptions> implements FieldOptionsOrBuilder {
    // Use FieldOptions.newBuilder() to construct.
    private FieldOptions(com.google.protobuf.GeneratedMessage.ExtendableBuilder<com.google.protobuf.DescriptorProtos.FieldOptions, ?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private FieldOptions(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final FieldOptions defaultInstance;
    public static FieldOptions getDefaultInstance() {
      return defaultInstance;
    }

    public FieldOptions getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private FieldOptions(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      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: {
              int rawValue = input.readEnum();
              com.google.protobuf.DescriptorProtos.FieldOptions.CType value = com.google.protobuf.DescriptorProtos.FieldOptions.CType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                ctype_ = value;
              }
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              packed_ = input.readBool();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000008;
              deprecated_ = input.readBool();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000004;
              lazy_ = input.readBool();
              break;
            }
            case 74: {
              bitField0_ |= 0x00000010;
              experimentalMapKey_ = input.readBytes();
              break;
            }
            case 80: {
              bitField0_ |= 0x00000020;
              weak_ = input.readBool();
              break;
            }
            case 7994: {
              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>();
                mutable_bitField0_ |= 0x00000040;
              }
              uninterpretedOption_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.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.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return internal_static_google_protobuf_FieldOptions_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return internal_static_google_protobuf_FieldOptions_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
                  com.google.protobuf.DescriptorProtos.FieldOptions.class, com.google.protobuf.DescriptorProtos.FieldOptions.Builder.class);
    }

    public static com.google.protobuf.Parser<FieldOptions> PARSER =
        new com.google.protobuf.AbstractParser<FieldOptions>() {
      public FieldOptions parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new FieldOptions(input, extensionRegistry);
      }
    };

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

    /**
     * Protobuf enum {@code google.protobuf.FieldOptions.CType}
     */
    public enum CType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>STRING = 0;</code>
       *
       * <pre>
       * Default mode.
       * </pre>
       */
      STRING(0, 0),
      /**
       * <code>CORD = 1;</code>
       */
      CORD(1, 1),
      /**
       * <code>STRING_PIECE = 2;</code>
       */
      STRING_PIECE(2, 2),
      ;

      /**
       * <code>STRING = 0;</code>
       *
       * <pre>
       * Default mode.
       * </pre>
       */
      public static final int STRING_VALUE = 0;
      /**
       * <code>CORD = 1;</code>
       */
      public static final int CORD_VALUE = 1;
      /**
       * <code>STRING_PIECE = 2;</code>
       */
      public static final int STRING_PIECE_VALUE = 2;


      public final int getNumber() { return value; }

      public static CType valueOf(int value) {
        switch (value) {
          case 0: return STRING;
          case 1: return CORD;
          case 2: return STRING_PIECE;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.FieldOptions.getDescriptor().getEnumTypes().get(0);
      }

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

      public static CType 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 index;
      private final int value;

      private CType(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:google.protobuf.FieldOptions.CType)
    }

    private int bitField0_;
    // optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];
    public static final int CTYPE_FIELD_NUMBER = 1;
    private com.google.protobuf.DescriptorProtos.FieldOptions.CType ctype_;
    /**
     * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
     *
     * <pre>
     * The ctype option instructs the C++ code generator to use a different
     * representation of the field than it normally would.  See the specific
     * options below.  This option is not yet implemented in the open source
     * release -- sorry, we'll try to include it in a future version!
     * </pre>
     */
    public boolean hasCtype() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
     *
     * <pre>
     * The ctype option instructs the C++ code generator to use a different
     * representation of the field than it normally would.  See the specific
     * options below.  This option is not yet implemented in the open source
     * release -- sorry, we'll try to include it in a future version!
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.FieldOptions.CType getCtype() {
      return ctype_;
    }

    // optional bool packed = 2;
    public static final int PACKED_FIELD_NUMBER = 2;
    private boolean packed_;
    /**
     * <code>optional bool packed = 2;</code>
     *
     * <pre>
     * The packed option can be enabled for repeated primitive fields to enable
     * a more efficient representation on the wire. Rather than repeatedly
     * writing the tag and type for each element, the entire array is encoded as
     * a single length-delimited blob.
     * </pre>
     */
    public boolean hasPacked() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional bool packed = 2;</code>
     *
     * <pre>
     * The packed option can be enabled for repeated primitive fields to enable
     * a more efficient representation on the wire. Rather than repeatedly
     * writing the tag and type for each element, the entire array is encoded as
     * a single length-delimited blob.
     * </pre>
     */
    public boolean getPacked() {
      return packed_;
    }

    // optional bool lazy = 5 [default = false];
    public static final int LAZY_FIELD_NUMBER = 5;
    private boolean lazy_;
    /**
     * <code>optional bool lazy = 5 [default = false];</code>
     *
     * <pre>
     * Should this field be parsed lazily?  Lazy applies only to message-type
     * fields.  It means that when the outer message is initially parsed, the
     * inner message's contents will not be parsed but instead stored in encoded
     * form.  The inner message will actually be parsed when it is first accessed.
     *
     * This is only a hint.  Implementations are free to choose whether to use
     * eager or lazy parsing regardless of the value of this option.  However,
     * setting this option true suggests that the protocol author believes that
     * using lazy parsing on this field is worth the additional bookkeeping
     * overhead typically needed to implement it.
     *
     * This option does not affect the public interface of any generated code;
     * all method signatures remain the same.  Furthermore, thread-safety of the
     * interface is not affected by this option; const methods remain safe to
     * call from multiple threads concurrently, while non-const methods continue
     * to require exclusive access.
     *
     *
     * Note that implementations may choose not to check required fields within
     * a lazy sub-message.  That is, calling IsInitialized() on the outher message
     * may return true even if the inner message has missing required fields.
     * This is necessary because otherwise the inner message would have to be
     * parsed in order to perform the check, defeating the purpose of lazy
     * parsing.  An implementation which chooses not to check required fields
     * must be consistent about it.  That is, for any particular sub-message, the
     * implementation must either *always* check its required fields, or *never*
     * check its required fields, regardless of whether or not the message has
     * been parsed.
     * </pre>
     */
    public boolean hasLazy() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bool lazy = 5 [default = false];</code>
     *
     * <pre>
     * Should this field be parsed lazily?  Lazy applies only to message-type
     * fields.  It means that when the outer message is initially parsed, the
     * inner message's contents will not be parsed but instead stored in encoded
     * form.  The inner message will actually be parsed when it is first accessed.
     *
     * This is only a hint.  Implementations are free to choose whether to use
     * eager or lazy parsing regardless of the value of this option.  However,
     * setting this option true suggests that the protocol author believes that
     * using lazy parsing on this field is worth the additional bookkeeping
     * overhead typically needed to implement it.
     *
     * This option does not affect the public interface of any generated code;
     * all method signatures remain the same.  Furthermore, thread-safety of the
     * interface is not affected by this option; const methods remain safe to
     * call from multiple threads concurrently, while non-const methods continue
     * to require exclusive access.
     *
     *
     * Note that implementations may choose not to check required fields within
     * a lazy sub-message.  That is, calling IsInitialized() on the outher message
     * may return true even if the inner message has missing required fields.
     * This is necessary because otherwise the inner message would have to be
     * parsed in order to perform the check, defeating the purpose of lazy
     * parsing.  An implementation which chooses not to check required fields
     * must be consistent about it.  That is, for any particular sub-message, the
     * implementation must either *always* check its required fields, or *never*
     * check its required fields, regardless of whether or not the message has
     * been parsed.
     * </pre>
     */
    public boolean getLazy() {
      return lazy_;
    }

    // optional bool deprecated = 3 [default = false];
    public static final int DEPRECATED_FIELD_NUMBER = 3;
    private boolean deprecated_;
    /**
     * <code>optional bool deprecated = 3 [default = false];</code>
     *
     * <pre>
     * Is this field deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for accessors, or it will be completely ignored; in the very least, this
     * is a formalization for deprecating fields.
     * </pre>
     */
    public boolean hasDeprecated() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional bool deprecated = 3 [default = false];</code>
     *
     * <pre>
     * Is this field deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for accessors, or it will be completely ignored; in the very least, this
     * is a formalization for deprecating fields.
     * </pre>
     */
    public boolean getDeprecated() {
      return deprecated_;
    }

    // optional string experimental_map_key = 9;
    public static final int EXPERIMENTAL_MAP_KEY_FIELD_NUMBER = 9;
    private java.lang.Object experimentalMapKey_;
    /**
     * <code>optional string experimental_map_key = 9;</code>
     *
     * <pre>
     * EXPERIMENTAL.  DO NOT USE.
     * For "map" fields, the name of the field in the enclosed type that
     * is the key for this map.  For example, suppose we have:
     *   message Item {
     *     required string name = 1;
     *     required string value = 2;
     *   }
     *   message Config {
     *     repeated Item items = 1 [experimental_map_key="name"];
     *   }
     * In this situation, the map key for Item will be set to "name".
     * TODO: Fully-implement this, then remove the "experimental_" prefix.
     * </pre>
     */
    public boolean hasExperimentalMapKey() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string experimental_map_key = 9;</code>
     *
     * <pre>
     * EXPERIMENTAL.  DO NOT USE.
     * For "map" fields, the name of the field in the enclosed type that
     * is the key for this map.  For example, suppose we have:
     *   message Item {
     *     required string name = 1;
     *     required string value = 2;
     *   }
     *   message Config {
     *     repeated Item items = 1 [experimental_map_key="name"];
     *   }
     * In this situation, the map key for Item will be set to "name".
     * TODO: Fully-implement this, then remove the "experimental_" prefix.
     * </pre>
     */
    public java.lang.String getExperimentalMapKey() {
      java.lang.Object ref = experimentalMapKey_;
      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()) {
          experimentalMapKey_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string experimental_map_key = 9;</code>
     *
     * <pre>
     * EXPERIMENTAL.  DO NOT USE.
     * For "map" fields, the name of the field in the enclosed type that
     * is the key for this map.  For example, suppose we have:
     *   message Item {
     *     required string name = 1;
     *     required string value = 2;
     *   }
     *   message Config {
     *     repeated Item items = 1 [experimental_map_key="name"];
     *   }
     * In this situation, the map key for Item will be set to "name".
     * TODO: Fully-implement this, then remove the "experimental_" prefix.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getExperimentalMapKeyBytes() {
      java.lang.Object ref = experimentalMapKey_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        experimentalMapKey_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bool weak = 10 [default = false];
    public static final int WEAK_FIELD_NUMBER = 10;
    private boolean weak_;
    /**
     * <code>optional bool weak = 10 [default = false];</code>
     *
     * <pre>
     * For Google-internal migration only. Do not use.
     * </pre>
     */
    public boolean hasWeak() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional bool weak = 10 [default = false];</code>
     *
     * <pre>
     * For Google-internal migration only. Do not use.
     * </pre>
     */
    public boolean getWeak() {
      return weak_;
    }

    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public int getUninterpretedOptionCount() {
      return uninterpretedOption_.size();
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
      return uninterpretedOption_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index) {
      return uninterpretedOption_.get(index);
    }

    private void initFields() {
      ctype_ = com.google.protobuf.DescriptorProtos.FieldOptions.CType.STRING;
      packed_ = false;
      lazy_ = false;
      deprecated_ = false;
      experimentalMapKey_ = "";
      weak_ = false;
      uninterpretedOption_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

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

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      com.google.protobuf.GeneratedMessage
        .ExtendableMessage<com.google.protobuf.DescriptorProtos.FieldOptions>.ExtensionWriter extensionWriter =
          newExtensionWriter();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, ctype_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, packed_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(3, deprecated_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(5, lazy_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(9, getExperimentalMapKeyBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBool(10, weak_);
      }
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        output.writeMessage(999, uninterpretedOption_.get(i));
      }
      extensionWriter.writeUntil(536870912, output);
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, ctype_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, packed_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, deprecated_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, lazy_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(9, getExperimentalMapKeyBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(10, weak_);
      }
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(999, uninterpretedOption_.get(i));
      }
      size += extensionsSerializedSize();
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FieldOptions parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.FieldOptions parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FieldOptions prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.FieldOptions}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
          com.google.protobuf.DescriptorProtos.FieldOptions, Builder> implements com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return internal_static_google_protobuf_FieldOptions_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return internal_static_google_protobuf_FieldOptions_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                    com.google.protobuf.DescriptorProtos.FieldOptions.class, com.google.protobuf.DescriptorProtos.FieldOptions.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.FieldOptions.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (alwaysUseFieldBuilders) {
          getUninterpretedOptionFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        ctype_ = com.google.protobuf.DescriptorProtos.FieldOptions.CType.STRING;
        bitField0_ = (bitField0_ & ~0x00000001);
        packed_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        lazy_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        deprecated_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        experimentalMapKey_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        weak_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return internal_static_google_protobuf_FieldOptions_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.FieldOptions getDefaultInstanceForType() {
        return getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.FieldOptions build() {
        com.google.protobuf.DescriptorProtos.FieldOptions result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.FieldOptions buildPartial() {
        com.google.protobuf.DescriptorProtos.FieldOptions result = new com.google.protobuf.DescriptorProtos.FieldOptions(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.ctype_ = ctype_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.packed_ = packed_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.lazy_ = lazy_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.deprecated_ = deprecated_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.experimentalMapKey_ = experimentalMapKey_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.weak_ = weak_;
        if (uninterpretedOptionBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.uninterpretedOption_ = uninterpretedOption_;
        } else {
          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.FieldOptions) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.FieldOptions)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FieldOptions other) {
        if (other == getDefaultInstance()) return this;
        if (other.hasCtype()) {
          setCtype(other.getCtype());
        }
        if (other.hasPacked()) {
          setPacked(other.getPacked());
        }
        if (other.hasLazy()) {
          setLazy(other.getLazy());
        }
        if (other.hasDeprecated()) {
          setDeprecated(other.getDeprecated());
        }
        if (other.hasExperimentalMapKey()) {
          bitField0_ |= 0x00000010;
          experimentalMapKey_ = other.experimentalMapKey_;
          onChanged();
        }
        if (other.hasWeak()) {
          setWeak(other.getWeak());
        }
        if (uninterpretedOptionBuilder_ == null) {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOption_.isEmpty()) {
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureUninterpretedOptionIsMutable();
              uninterpretedOption_.addAll(other.uninterpretedOption_);
            }
            onChanged();
          }
        } else {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOptionBuilder_.isEmpty()) {
              uninterpretedOptionBuilder_.dispose();
              uninterpretedOptionBuilder_ = null;
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000040);
              uninterpretedOptionBuilder_ = 
                alwaysUseFieldBuilders ?
                   getUninterpretedOptionFieldBuilder() : null;
            } else {
              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
            }
          }
        }
        this.mergeExtensionFields(other);
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

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

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

      // optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];
      private com.google.protobuf.DescriptorProtos.FieldOptions.CType ctype_ = com.google.protobuf.DescriptorProtos.FieldOptions.CType.STRING;
      /**
       * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
       *
       * <pre>
       * The ctype option instructs the C++ code generator to use a different
       * representation of the field than it normally would.  See the specific
       * options below.  This option is not yet implemented in the open source
       * release -- sorry, we'll try to include it in a future version!
       * </pre>
       */
      public boolean hasCtype() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
       *
       * <pre>
       * The ctype option instructs the C++ code generator to use a different
       * representation of the field than it normally would.  See the specific
       * options below.  This option is not yet implemented in the open source
       * release -- sorry, we'll try to include it in a future version!
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.FieldOptions.CType getCtype() {
        return ctype_;
      }
      /**
       * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
       *
       * <pre>
       * The ctype option instructs the C++ code generator to use a different
       * representation of the field than it normally would.  See the specific
       * options below.  This option is not yet implemented in the open source
       * release -- sorry, we'll try to include it in a future version!
       * </pre>
       */
      public Builder setCtype(com.google.protobuf.DescriptorProtos.FieldOptions.CType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        ctype_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
       *
       * <pre>
       * The ctype option instructs the C++ code generator to use a different
       * representation of the field than it normally would.  See the specific
       * options below.  This option is not yet implemented in the open source
       * release -- sorry, we'll try to include it in a future version!
       * </pre>
       */
      public Builder clearCtype() {
        bitField0_ = (bitField0_ & ~0x00000001);
        ctype_ = com.google.protobuf.DescriptorProtos.FieldOptions.CType.STRING;
        onChanged();
        return this;
      }

      // optional bool packed = 2;
      private boolean packed_ ;
      /**
       * <code>optional bool packed = 2;</code>
       *
       * <pre>
       * The packed option can be enabled for repeated primitive fields to enable
       * a more efficient representation on the wire. Rather than repeatedly
       * writing the tag and type for each element, the entire array is encoded as
       * a single length-delimited blob.
       * </pre>
       */
      public boolean hasPacked() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bool packed = 2;</code>
       *
       * <pre>
       * The packed option can be enabled for repeated primitive fields to enable
       * a more efficient representation on the wire. Rather than repeatedly
       * writing the tag and type for each element, the entire array is encoded as
       * a single length-delimited blob.
       * </pre>
       */
      public boolean getPacked() {
        return packed_;
      }
      /**
       * <code>optional bool packed = 2;</code>
       *
       * <pre>
       * The packed option can be enabled for repeated primitive fields to enable
       * a more efficient representation on the wire. Rather than repeatedly
       * writing the tag and type for each element, the entire array is encoded as
       * a single length-delimited blob.
       * </pre>
       */
      public Builder setPacked(boolean value) {
        bitField0_ |= 0x00000002;
        packed_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool packed = 2;</code>
       *
       * <pre>
       * The packed option can be enabled for repeated primitive fields to enable
       * a more efficient representation on the wire. Rather than repeatedly
       * writing the tag and type for each element, the entire array is encoded as
       * a single length-delimited blob.
       * </pre>
       */
      public Builder clearPacked() {
        bitField0_ = (bitField0_ & ~0x00000002);
        packed_ = false;
        onChanged();
        return this;
      }

      // optional bool lazy = 5 [default = false];
      private boolean lazy_ ;
      /**
       * <code>optional bool lazy = 5 [default = false];</code>
       *
       * <pre>
       * Should this field be parsed lazily?  Lazy applies only to message-type
       * fields.  It means that when the outer message is initially parsed, the
       * inner message's contents will not be parsed but instead stored in encoded
       * form.  The inner message will actually be parsed when it is first accessed.
       *
       * This is only a hint.  Implementations are free to choose whether to use
       * eager or lazy parsing regardless of the value of this option.  However,
       * setting this option true suggests that the protocol author believes that
       * using lazy parsing on this field is worth the additional bookkeeping
       * overhead typically needed to implement it.
       *
       * This option does not affect the public interface of any generated code;
       * all method signatures remain the same.  Furthermore, thread-safety of the
       * interface is not affected by this option; const methods remain safe to
       * call from multiple threads concurrently, while non-const methods continue
       * to require exclusive access.
       *
       *
       * Note that implementations may choose not to check required fields within
       * a lazy sub-message.  That is, calling IsInitialized() on the outher message
       * may return true even if the inner message has missing required fields.
       * This is necessary because otherwise the inner message would have to be
       * parsed in order to perform the check, defeating the purpose of lazy
       * parsing.  An implementation which chooses not to check required fields
       * must be consistent about it.  That is, for any particular sub-message, the
       * implementation must either *always* check its required fields, or *never*
       * check its required fields, regardless of whether or not the message has
       * been parsed.
       * </pre>
       */
      public boolean hasLazy() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bool lazy = 5 [default = false];</code>
       *
       * <pre>
       * Should this field be parsed lazily?  Lazy applies only to message-type
       * fields.  It means that when the outer message is initially parsed, the
       * inner message's contents will not be parsed but instead stored in encoded
       * form.  The inner message will actually be parsed when it is first accessed.
       *
       * This is only a hint.  Implementations are free to choose whether to use
       * eager or lazy parsing regardless of the value of this option.  However,
       * setting this option true suggests that the protocol author believes that
       * using lazy parsing on this field is worth the additional bookkeeping
       * overhead typically needed to implement it.
       *
       * This option does not affect the public interface of any generated code;
       * all method signatures remain the same.  Furthermore, thread-safety of the
       * interface is not affected by this option; const methods remain safe to
       * call from multiple threads concurrently, while non-const methods continue
       * to require exclusive access.
       *
       *
       * Note that implementations may choose not to check required fields within
       * a lazy sub-message.  That is, calling IsInitialized() on the outher message
       * may return true even if the inner message has missing required fields.
       * This is necessary because otherwise the inner message would have to be
       * parsed in order to perform the check, defeating the purpose of lazy
       * parsing.  An implementation which chooses not to check required fields
       * must be consistent about it.  That is, for any particular sub-message, the
       * implementation must either *always* check its required fields, or *never*
       * check its required fields, regardless of whether or not the message has
       * been parsed.
       * </pre>
       */
      public boolean getLazy() {
        return lazy_;
      }
      /**
       * <code>optional bool lazy = 5 [default = false];</code>
       *
       * <pre>
       * Should this field be parsed lazily?  Lazy applies only to message-type
       * fields.  It means that when the outer message is initially parsed, the
       * inner message's contents will not be parsed but instead stored in encoded
       * form.  The inner message will actually be parsed when it is first accessed.
       *
       * This is only a hint.  Implementations are free to choose whether to use
       * eager or lazy parsing regardless of the value of this option.  However,
       * setting this option true suggests that the protocol author believes that
       * using lazy parsing on this field is worth the additional bookkeeping
       * overhead typically needed to implement it.
       *
       * This option does not affect the public interface of any generated code;
       * all method signatures remain the same.  Furthermore, thread-safety of the
       * interface is not affected by this option; const methods remain safe to
       * call from multiple threads concurrently, while non-const methods continue
       * to require exclusive access.
       *
       *
       * Note that implementations may choose not to check required fields within
       * a lazy sub-message.  That is, calling IsInitialized() on the outher message
       * may return true even if the inner message has missing required fields.
       * This is necessary because otherwise the inner message would have to be
       * parsed in order to perform the check, defeating the purpose of lazy
       * parsing.  An implementation which chooses not to check required fields
       * must be consistent about it.  That is, for any particular sub-message, the
       * implementation must either *always* check its required fields, or *never*
       * check its required fields, regardless of whether or not the message has
       * been parsed.
       * </pre>
       */
      public Builder setLazy(boolean value) {
        bitField0_ |= 0x00000004;
        lazy_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool lazy = 5 [default = false];</code>
       *
       * <pre>
       * Should this field be parsed lazily?  Lazy applies only to message-type
       * fields.  It means that when the outer message is initially parsed, the
       * inner message's contents will not be parsed but instead stored in encoded
       * form.  The inner message will actually be parsed when it is first accessed.
       *
       * This is only a hint.  Implementations are free to choose whether to use
       * eager or lazy parsing regardless of the value of this option.  However,
       * setting this option true suggests that the protocol author believes that
       * using lazy parsing on this field is worth the additional bookkeeping
       * overhead typically needed to implement it.
       *
       * This option does not affect the public interface of any generated code;
       * all method signatures remain the same.  Furthermore, thread-safety of the
       * interface is not affected by this option; const methods remain safe to
       * call from multiple threads concurrently, while non-const methods continue
       * to require exclusive access.
       *
       *
       * Note that implementations may choose not to check required fields within
       * a lazy sub-message.  That is, calling IsInitialized() on the outher message
       * may return true even if the inner message has missing required fields.
       * This is necessary because otherwise the inner message would have to be
       * parsed in order to perform the check, defeating the purpose of lazy
       * parsing.  An implementation which chooses not to check required fields
       * must be consistent about it.  That is, for any particular sub-message, the
       * implementation must either *always* check its required fields, or *never*
       * check its required fields, regardless of whether or not the message has
       * been parsed.
       * </pre>
       */
      public Builder clearLazy() {
        bitField0_ = (bitField0_ & ~0x00000004);
        lazy_ = false;
        onChanged();
        return this;
      }

      // optional bool deprecated = 3 [default = false];
      private boolean deprecated_ ;
      /**
       * <code>optional bool deprecated = 3 [default = false];</code>
       *
       * <pre>
       * Is this field deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for accessors, or it will be completely ignored; in the very least, this
       * is a formalization for deprecating fields.
       * </pre>
       */
      public boolean hasDeprecated() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional bool deprecated = 3 [default = false];</code>
       *
       * <pre>
       * Is this field deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for accessors, or it will be completely ignored; in the very least, this
       * is a formalization for deprecating fields.
       * </pre>
       */
      public boolean getDeprecated() {
        return deprecated_;
      }
      /**
       * <code>optional bool deprecated = 3 [default = false];</code>
       *
       * <pre>
       * Is this field deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for accessors, or it will be completely ignored; in the very least, this
       * is a formalization for deprecating fields.
       * </pre>
       */
      public Builder setDeprecated(boolean value) {
        bitField0_ |= 0x00000008;
        deprecated_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool deprecated = 3 [default = false];</code>
       *
       * <pre>
       * Is this field deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for accessors, or it will be completely ignored; in the very least, this
       * is a formalization for deprecating fields.
       * </pre>
       */
      public Builder clearDeprecated() {
        bitField0_ = (bitField0_ & ~0x00000008);
        deprecated_ = false;
        onChanged();
        return this;
      }

      // optional string experimental_map_key = 9;
      private java.lang.Object experimentalMapKey_ = "";
      /**
       * <code>optional string experimental_map_key = 9;</code>
       *
       * <pre>
       * EXPERIMENTAL.  DO NOT USE.
       * For "map" fields, the name of the field in the enclosed type that
       * is the key for this map.  For example, suppose we have:
       *   message Item {
       *     required string name = 1;
       *     required string value = 2;
       *   }
       *   message Config {
       *     repeated Item items = 1 [experimental_map_key="name"];
       *   }
       * In this situation, the map key for Item will be set to "name".
       * TODO: Fully-implement this, then remove the "experimental_" prefix.
       * </pre>
       */
      public boolean hasExperimentalMapKey() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string experimental_map_key = 9;</code>
       *
       * <pre>
       * EXPERIMENTAL.  DO NOT USE.
       * For "map" fields, the name of the field in the enclosed type that
       * is the key for this map.  For example, suppose we have:
       *   message Item {
       *     required string name = 1;
       *     required string value = 2;
       *   }
       *   message Config {
       *     repeated Item items = 1 [experimental_map_key="name"];
       *   }
       * In this situation, the map key for Item will be set to "name".
       * TODO: Fully-implement this, then remove the "experimental_" prefix.
       * </pre>
       */
      public java.lang.String getExperimentalMapKey() {
        java.lang.Object ref = experimentalMapKey_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          experimentalMapKey_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string experimental_map_key = 9;</code>
       *
       * <pre>
       * EXPERIMENTAL.  DO NOT USE.
       * For "map" fields, the name of the field in the enclosed type that
       * is the key for this map.  For example, suppose we have:
       *   message Item {
       *     required string name = 1;
       *     required string value = 2;
       *   }
       *   message Config {
       *     repeated Item items = 1 [experimental_map_key="name"];
       *   }
       * In this situation, the map key for Item will be set to "name".
       * TODO: Fully-implement this, then remove the "experimental_" prefix.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getExperimentalMapKeyBytes() {
        java.lang.Object ref = experimentalMapKey_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          experimentalMapKey_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string experimental_map_key = 9;</code>
       *
       * <pre>
       * EXPERIMENTAL.  DO NOT USE.
       * For "map" fields, the name of the field in the enclosed type that
       * is the key for this map.  For example, suppose we have:
       *   message Item {
       *     required string name = 1;
       *     required string value = 2;
       *   }
       *   message Config {
       *     repeated Item items = 1 [experimental_map_key="name"];
       *   }
       * In this situation, the map key for Item will be set to "name".
       * TODO: Fully-implement this, then remove the "experimental_" prefix.
       * </pre>
       */
      public Builder setExperimentalMapKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        experimentalMapKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string experimental_map_key = 9;</code>
       *
       * <pre>
       * EXPERIMENTAL.  DO NOT USE.
       * For "map" fields, the name of the field in the enclosed type that
       * is the key for this map.  For example, suppose we have:
       *   message Item {
       *     required string name = 1;
       *     required string value = 2;
       *   }
       *   message Config {
       *     repeated Item items = 1 [experimental_map_key="name"];
       *   }
       * In this situation, the map key for Item will be set to "name".
       * TODO: Fully-implement this, then remove the "experimental_" prefix.
       * </pre>
       */
      public Builder clearExperimentalMapKey() {
        bitField0_ = (bitField0_ & ~0x00000010);
        experimentalMapKey_ = getDefaultInstance().getExperimentalMapKey();
        onChanged();
        return this;
      }
      /**
       * <code>optional string experimental_map_key = 9;</code>
       *
       * <pre>
       * EXPERIMENTAL.  DO NOT USE.
       * For "map" fields, the name of the field in the enclosed type that
       * is the key for this map.  For example, suppose we have:
       *   message Item {
       *     required string name = 1;
       *     required string value = 2;
       *   }
       *   message Config {
       *     repeated Item items = 1 [experimental_map_key="name"];
       *   }
       * In this situation, the map key for Item will be set to "name".
       * TODO: Fully-implement this, then remove the "experimental_" prefix.
       * </pre>
       */
      public Builder setExperimentalMapKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        experimentalMapKey_ = value;
        onChanged();
        return this;
      }

      // optional bool weak = 10 [default = false];
      private boolean weak_ ;
      /**
       * <code>optional bool weak = 10 [default = false];</code>
       *
       * <pre>
       * For Google-internal migration only. Do not use.
       * </pre>
       */
      public boolean hasWeak() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional bool weak = 10 [default = false];</code>
       *
       * <pre>
       * For Google-internal migration only. Do not use.
       * </pre>
       */
      public boolean getWeak() {
        return weak_;
      }
      /**
       * <code>optional bool weak = 10 [default = false];</code>
       *
       * <pre>
       * For Google-internal migration only. Do not use.
       * </pre>
       */
      public Builder setWeak(boolean value) {
        bitField0_ |= 0x00000020;
        weak_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool weak = 10 [default = false];</code>
       *
       * <pre>
       * For Google-internal migration only. Do not use.
       * </pre>
       */
      public Builder clearWeak() {
        bitField0_ = (bitField0_ & ~0x00000020);
        weak_ = false;
        onChanged();
        return this;
      }

      // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
        java.util.Collections.emptyList();
      private void ensureUninterpretedOptionIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>(uninterpretedOption_);
          bitField0_ |= 0x00000040;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;

      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
        if (uninterpretedOptionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        } else {
          return uninterpretedOptionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public int getUninterpretedOptionCount() {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.size();
        } else {
          return uninterpretedOptionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);
        } else {
          return uninterpretedOptionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addAllUninterpretedOption(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          super.addAll(values, uninterpretedOption_);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder clearUninterpretedOption() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder removeUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.remove(index);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
          int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);  } else {
          return uninterpretedOptionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
           getUninterpretedOptionOrBuilderList() {
        if (uninterpretedOptionBuilder_ != null) {
          return uninterpretedOptionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
           getUninterpretedOptionBuilderList() {
        return getUninterpretedOptionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
          getUninterpretedOptionFieldBuilder() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder>(
                  uninterpretedOption_,
                  ((bitField0_ & 0x00000040) == 0x00000040),
                  getParentForChildren(),
                  isClean());
          uninterpretedOption_ = null;
        }
        return uninterpretedOptionBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.FieldOptions)
    }

    static {
      defaultInstance = new FieldOptions(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.FieldOptions)
  }

  public interface EnumOptionsOrBuilder extends
      com.google.protobuf.GeneratedMessage.
          ExtendableMessageOrBuilder<EnumOptions> {

    // optional bool allow_alias = 2 [default = true];
    /**
     * <code>optional bool allow_alias = 2 [default = true];</code>
     *
     * <pre>
     * Set this option to false to disallow mapping different tag names to a same
     * value.
     * </pre>
     */
    boolean hasAllowAlias();
    /**
     * <code>optional bool allow_alias = 2 [default = true];</code>
     *
     * <pre>
     * Set this option to false to disallow mapping different tag names to a same
     * value.
     * </pre>
     */
    boolean getAllowAlias();

    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
        getUninterpretedOptionList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    int getUninterpretedOptionCount();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code google.protobuf.EnumOptions}
   */
  public static final class EnumOptions extends
      com.google.protobuf.GeneratedMessage.ExtendableMessage<
        EnumOptions> implements EnumOptionsOrBuilder {
    // Use EnumOptions.newBuilder() to construct.
    private EnumOptions(com.google.protobuf.GeneratedMessage.ExtendableBuilder<com.google.protobuf.DescriptorProtos.EnumOptions, ?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private EnumOptions(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final EnumOptions defaultInstance;
    public static EnumOptions getDefaultInstance() {
      return defaultInstance;
    }

    public EnumOptions getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private EnumOptions(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      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 16: {
              bitField0_ |= 0x00000001;
              allowAlias_ = input.readBool();
              break;
            }
            case 7994: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>();
                mutable_bitField0_ |= 0x00000002;
              }
              uninterpretedOption_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.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.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return internal_static_google_protobuf_EnumOptions_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return internal_static_google_protobuf_EnumOptions_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
                  com.google.protobuf.DescriptorProtos.EnumOptions.class, com.google.protobuf.DescriptorProtos.EnumOptions.Builder.class);
    }

    public static com.google.protobuf.Parser<EnumOptions> PARSER =
        new com.google.protobuf.AbstractParser<EnumOptions>() {
      public EnumOptions parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new EnumOptions(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    // optional bool allow_alias = 2 [default = true];
    public static final int ALLOW_ALIAS_FIELD_NUMBER = 2;
    private boolean allowAlias_;
    /**
     * <code>optional bool allow_alias = 2 [default = true];</code>
     *
     * <pre>
     * Set this option to false to disallow mapping different tag names to a same
     * value.
     * </pre>
     */
    public boolean hasAllowAlias() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional bool allow_alias = 2 [default = true];</code>
     *
     * <pre>
     * Set this option to false to disallow mapping different tag names to a same
     * value.
     * </pre>
     */
    public boolean getAllowAlias() {
      return allowAlias_;
    }

    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public int getUninterpretedOptionCount() {
      return uninterpretedOption_.size();
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
      return uninterpretedOption_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index) {
      return uninterpretedOption_.get(index);
    }

    private void initFields() {
      allowAlias_ = true;
      uninterpretedOption_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

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

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      com.google.protobuf.GeneratedMessage
        .ExtendableMessage<com.google.protobuf.DescriptorProtos.EnumOptions>.ExtensionWriter extensionWriter =
          newExtensionWriter();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(2, allowAlias_);
      }
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        output.writeMessage(999, uninterpretedOption_.get(i));
      }
      extensionWriter.writeUntil(536870912, output);
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, allowAlias_);
      }
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(999, uninterpretedOption_.get(i));
      }
      size += extensionsSerializedSize();
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumOptions parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.EnumOptions parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.EnumOptions prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.EnumOptions}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
          com.google.protobuf.DescriptorProtos.EnumOptions, Builder> implements com.google.protobuf.DescriptorProtos.EnumOptionsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return internal_static_google_protobuf_EnumOptions_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return internal_static_google_protobuf_EnumOptions_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                    com.google.protobuf.DescriptorProtos.EnumOptions.class, com.google.protobuf.DescriptorProtos.EnumOptions.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.EnumOptions.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (alwaysUseFieldBuilders) {
          getUninterpretedOptionFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        allowAlias_ = true;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return internal_static_google_protobuf_EnumOptions_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.EnumOptions getDefaultInstanceForType() {
        return getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.EnumOptions build() {
        com.google.protobuf.DescriptorProtos.EnumOptions result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.EnumOptions buildPartial() {
        com.google.protobuf.DescriptorProtos.EnumOptions result = new com.google.protobuf.DescriptorProtos.EnumOptions(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.allowAlias_ = allowAlias_;
        if (uninterpretedOptionBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.uninterpretedOption_ = uninterpretedOption_;
        } else {
          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.EnumOptions) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.EnumOptions)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.EnumOptions other) {
        if (other == getDefaultInstance()) return this;
        if (other.hasAllowAlias()) {
          setAllowAlias(other.getAllowAlias());
        }
        if (uninterpretedOptionBuilder_ == null) {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOption_.isEmpty()) {
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureUninterpretedOptionIsMutable();
              uninterpretedOption_.addAll(other.uninterpretedOption_);
            }
            onChanged();
          }
        } else {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOptionBuilder_.isEmpty()) {
              uninterpretedOptionBuilder_.dispose();
              uninterpretedOptionBuilder_ = null;
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000002);
              uninterpretedOptionBuilder_ = 
                alwaysUseFieldBuilders ?
                   getUninterpretedOptionFieldBuilder() : null;
            } else {
              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
            }
          }
        }
        this.mergeExtensionFields(other);
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

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

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

      // optional bool allow_alias = 2 [default = true];
      private boolean allowAlias_ = true;
      /**
       * <code>optional bool allow_alias = 2 [default = true];</code>
       *
       * <pre>
       * Set this option to false to disallow mapping different tag names to a same
       * value.
       * </pre>
       */
      public boolean hasAllowAlias() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional bool allow_alias = 2 [default = true];</code>
       *
       * <pre>
       * Set this option to false to disallow mapping different tag names to a same
       * value.
       * </pre>
       */
      public boolean getAllowAlias() {
        return allowAlias_;
      }
      /**
       * <code>optional bool allow_alias = 2 [default = true];</code>
       *
       * <pre>
       * Set this option to false to disallow mapping different tag names to a same
       * value.
       * </pre>
       */
      public Builder setAllowAlias(boolean value) {
        bitField0_ |= 0x00000001;
        allowAlias_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool allow_alias = 2 [default = true];</code>
       *
       * <pre>
       * Set this option to false to disallow mapping different tag names to a same
       * value.
       * </pre>
       */
      public Builder clearAllowAlias() {
        bitField0_ = (bitField0_ & ~0x00000001);
        allowAlias_ = true;
        onChanged();
        return this;
      }

      // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
        java.util.Collections.emptyList();
      private void ensureUninterpretedOptionIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>(uninterpretedOption_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;

      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
        if (uninterpretedOptionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        } else {
          return uninterpretedOptionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public int getUninterpretedOptionCount() {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.size();
        } else {
          return uninterpretedOptionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);
        } else {
          return uninterpretedOptionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addAllUninterpretedOption(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          super.addAll(values, uninterpretedOption_);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder clearUninterpretedOption() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder removeUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.remove(index);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
          int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);  } else {
          return uninterpretedOptionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
           getUninterpretedOptionOrBuilderList() {
        if (uninterpretedOptionBuilder_ != null) {
          return uninterpretedOptionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
           getUninterpretedOptionBuilderList() {
        return getUninterpretedOptionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
          getUninterpretedOptionFieldBuilder() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder>(
                  uninterpretedOption_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          uninterpretedOption_ = null;
        }
        return uninterpretedOptionBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.EnumOptions)
    }

    static {
      defaultInstance = new EnumOptions(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.EnumOptions)
  }

  public interface EnumValueOptionsOrBuilder extends
      com.google.protobuf.GeneratedMessage.
          ExtendableMessageOrBuilder<EnumValueOptions> {

    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
        getUninterpretedOptionList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    int getUninterpretedOptionCount();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code google.protobuf.EnumValueOptions}
   */
  public static final class EnumValueOptions extends
      com.google.protobuf.GeneratedMessage.ExtendableMessage<
        EnumValueOptions> implements EnumValueOptionsOrBuilder {
    // Use EnumValueOptions.newBuilder() to construct.
    private EnumValueOptions(com.google.protobuf.GeneratedMessage.ExtendableBuilder<com.google.protobuf.DescriptorProtos.EnumValueOptions, ?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private EnumValueOptions(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final EnumValueOptions defaultInstance;
    public static EnumValueOptions getDefaultInstance() {
      return defaultInstance;
    }

    public EnumValueOptions getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private EnumValueOptions(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      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 7994: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>();
                mutable_bitField0_ |= 0x00000001;
              }
              uninterpretedOption_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.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.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return internal_static_google_protobuf_EnumValueOptions_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return internal_static_google_protobuf_EnumValueOptions_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
                  com.google.protobuf.DescriptorProtos.EnumValueOptions.class, com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder.class);
    }

    public static com.google.protobuf.Parser<EnumValueOptions> PARSER =
        new com.google.protobuf.AbstractParser<EnumValueOptions>() {
      public EnumValueOptions parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new EnumValueOptions(input, extensionRegistry);
      }
    };

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

    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public int getUninterpretedOptionCount() {
      return uninterpretedOption_.size();
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
      return uninterpretedOption_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index) {
      return uninterpretedOption_.get(index);
    }

    private void initFields() {
      uninterpretedOption_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

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

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      com.google.protobuf.GeneratedMessage
        .ExtendableMessage<com.google.protobuf.DescriptorProtos.EnumValueOptions>.ExtensionWriter extensionWriter =
          newExtensionWriter();
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        output.writeMessage(999, uninterpretedOption_.get(i));
      }
      extensionWriter.writeUntil(536870912, output);
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(999, uninterpretedOption_.get(i));
      }
      size += extensionsSerializedSize();
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.EnumValueOptions prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.EnumValueOptions}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
          com.google.protobuf.DescriptorProtos.EnumValueOptions, Builder> implements com.google.protobuf.DescriptorProtos.EnumValueOptionsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return internal_static_google_protobuf_EnumValueOptions_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return internal_static_google_protobuf_EnumValueOptions_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                    com.google.protobuf.DescriptorProtos.EnumValueOptions.class, com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.EnumValueOptions.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (alwaysUseFieldBuilders) {
          getUninterpretedOptionFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return internal_static_google_protobuf_EnumValueOptions_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.EnumValueOptions getDefaultInstanceForType() {
        return getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.EnumValueOptions build() {
        com.google.protobuf.DescriptorProtos.EnumValueOptions result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.EnumValueOptions buildPartial() {
        com.google.protobuf.DescriptorProtos.EnumValueOptions result = new com.google.protobuf.DescriptorProtos.EnumValueOptions(this);
        int from_bitField0_ = bitField0_;
        if (uninterpretedOptionBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.uninterpretedOption_ = uninterpretedOption_;
        } else {
          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.EnumValueOptions) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.EnumValueOptions)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.EnumValueOptions other) {
        if (other == getDefaultInstance()) return this;
        if (uninterpretedOptionBuilder_ == null) {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOption_.isEmpty()) {
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureUninterpretedOptionIsMutable();
              uninterpretedOption_.addAll(other.uninterpretedOption_);
            }
            onChanged();
          }
        } else {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOptionBuilder_.isEmpty()) {
              uninterpretedOptionBuilder_.dispose();
              uninterpretedOptionBuilder_ = null;
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000001);
              uninterpretedOptionBuilder_ = 
                alwaysUseFieldBuilders ?
                   getUninterpretedOptionFieldBuilder() : null;
            } else {
              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
            }
          }
        }
        this.mergeExtensionFields(other);
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

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

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

      // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
        java.util.Collections.emptyList();
      private void ensureUninterpretedOptionIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>(uninterpretedOption_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;

      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
        if (uninterpretedOptionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        } else {
          return uninterpretedOptionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public int getUninterpretedOptionCount() {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.size();
        } else {
          return uninterpretedOptionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);
        } else {
          return uninterpretedOptionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addAllUninterpretedOption(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          super.addAll(values, uninterpretedOption_);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder clearUninterpretedOption() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder removeUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.remove(index);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
          int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);  } else {
          return uninterpretedOptionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
           getUninterpretedOptionOrBuilderList() {
        if (uninterpretedOptionBuilder_ != null) {
          return uninterpretedOptionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
           getUninterpretedOptionBuilderList() {
        return getUninterpretedOptionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
          getUninterpretedOptionFieldBuilder() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder>(
                  uninterpretedOption_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          uninterpretedOption_ = null;
        }
        return uninterpretedOptionBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.EnumValueOptions)
    }

    static {
      defaultInstance = new EnumValueOptions(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.EnumValueOptions)
  }

  public interface ServiceOptionsOrBuilder extends
      com.google.protobuf.GeneratedMessage.
          ExtendableMessageOrBuilder<ServiceOptions> {

    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
        getUninterpretedOptionList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    int getUninterpretedOptionCount();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code google.protobuf.ServiceOptions}
   */
  public static final class ServiceOptions extends
      com.google.protobuf.GeneratedMessage.ExtendableMessage<
        ServiceOptions> implements ServiceOptionsOrBuilder {
    // Use ServiceOptions.newBuilder() to construct.
    private ServiceOptions(com.google.protobuf.GeneratedMessage.ExtendableBuilder<com.google.protobuf.DescriptorProtos.ServiceOptions, ?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ServiceOptions(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ServiceOptions defaultInstance;
    public static ServiceOptions getDefaultInstance() {
      return defaultInstance;
    }

    public ServiceOptions getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ServiceOptions(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      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 7994: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>();
                mutable_bitField0_ |= 0x00000001;
              }
              uninterpretedOption_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.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.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return internal_static_google_protobuf_ServiceOptions_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return internal_static_google_protobuf_ServiceOptions_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
                  com.google.protobuf.DescriptorProtos.ServiceOptions.class, com.google.protobuf.DescriptorProtos.ServiceOptions.Builder.class);
    }

    public static com.google.protobuf.Parser<ServiceOptions> PARSER =
        new com.google.protobuf.AbstractParser<ServiceOptions>() {
      public ServiceOptions parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ServiceOptions(input, extensionRegistry);
      }
    };

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

    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public int getUninterpretedOptionCount() {
      return uninterpretedOption_.size();
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
      return uninterpretedOption_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index) {
      return uninterpretedOption_.get(index);
    }

    private void initFields() {
      uninterpretedOption_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

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

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      com.google.protobuf.GeneratedMessage
        .ExtendableMessage<com.google.protobuf.DescriptorProtos.ServiceOptions>.ExtensionWriter extensionWriter =
          newExtensionWriter();
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        output.writeMessage(999, uninterpretedOption_.get(i));
      }
      extensionWriter.writeUntil(536870912, output);
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(999, uninterpretedOption_.get(i));
      }
      size += extensionsSerializedSize();
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.ServiceOptions prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.ServiceOptions}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
          com.google.protobuf.DescriptorProtos.ServiceOptions, Builder> implements com.google.protobuf.DescriptorProtos.ServiceOptionsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return internal_static_google_protobuf_ServiceOptions_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return internal_static_google_protobuf_ServiceOptions_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                    com.google.protobuf.DescriptorProtos.ServiceOptions.class, com.google.protobuf.DescriptorProtos.ServiceOptions.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.ServiceOptions.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (alwaysUseFieldBuilders) {
          getUninterpretedOptionFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return internal_static_google_protobuf_ServiceOptions_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.ServiceOptions getDefaultInstanceForType() {
        return getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.ServiceOptions build() {
        com.google.protobuf.DescriptorProtos.ServiceOptions result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.ServiceOptions buildPartial() {
        com.google.protobuf.DescriptorProtos.ServiceOptions result = new com.google.protobuf.DescriptorProtos.ServiceOptions(this);
        int from_bitField0_ = bitField0_;
        if (uninterpretedOptionBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.uninterpretedOption_ = uninterpretedOption_;
        } else {
          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.ServiceOptions) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.ServiceOptions)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.ServiceOptions other) {
        if (other == getDefaultInstance()) return this;
        if (uninterpretedOptionBuilder_ == null) {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOption_.isEmpty()) {
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureUninterpretedOptionIsMutable();
              uninterpretedOption_.addAll(other.uninterpretedOption_);
            }
            onChanged();
          }
        } else {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOptionBuilder_.isEmpty()) {
              uninterpretedOptionBuilder_.dispose();
              uninterpretedOptionBuilder_ = null;
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000001);
              uninterpretedOptionBuilder_ = 
                alwaysUseFieldBuilders ?
                   getUninterpretedOptionFieldBuilder() : null;
            } else {
              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
            }
          }
        }
        this.mergeExtensionFields(other);
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

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

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

      // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
        java.util.Collections.emptyList();
      private void ensureUninterpretedOptionIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>(uninterpretedOption_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;

      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
        if (uninterpretedOptionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        } else {
          return uninterpretedOptionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public int getUninterpretedOptionCount() {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.size();
        } else {
          return uninterpretedOptionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);
        } else {
          return uninterpretedOptionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addAllUninterpretedOption(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          super.addAll(values, uninterpretedOption_);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder clearUninterpretedOption() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder removeUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.remove(index);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
          int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);  } else {
          return uninterpretedOptionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
           getUninterpretedOptionOrBuilderList() {
        if (uninterpretedOptionBuilder_ != null) {
          return uninterpretedOptionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
           getUninterpretedOptionBuilderList() {
        return getUninterpretedOptionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
          getUninterpretedOptionFieldBuilder() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder>(
                  uninterpretedOption_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          uninterpretedOption_ = null;
        }
        return uninterpretedOptionBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.ServiceOptions)
    }

    static {
      defaultInstance = new ServiceOptions(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.ServiceOptions)
  }

  public interface MethodOptionsOrBuilder extends
      com.google.protobuf.GeneratedMessage.
          ExtendableMessageOrBuilder<MethodOptions> {

    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
        getUninterpretedOptionList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    int getUninterpretedOptionCount();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code google.protobuf.MethodOptions}
   */
  public static final class MethodOptions extends
      com.google.protobuf.GeneratedMessage.ExtendableMessage<
        MethodOptions> implements MethodOptionsOrBuilder {
    // Use MethodOptions.newBuilder() to construct.
    private MethodOptions(com.google.protobuf.GeneratedMessage.ExtendableBuilder<com.google.protobuf.DescriptorProtos.MethodOptions, ?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private MethodOptions(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final MethodOptions defaultInstance;
    public static MethodOptions getDefaultInstance() {
      return defaultInstance;
    }

    public MethodOptions getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private MethodOptions(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      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 7994: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>();
                mutable_bitField0_ |= 0x00000001;
              }
              uninterpretedOption_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.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.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return internal_static_google_protobuf_MethodOptions_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return internal_static_google_protobuf_MethodOptions_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
                  com.google.protobuf.DescriptorProtos.MethodOptions.class, com.google.protobuf.DescriptorProtos.MethodOptions.Builder.class);
    }

    public static com.google.protobuf.Parser<MethodOptions> PARSER =
        new com.google.protobuf.AbstractParser<MethodOptions>() {
      public MethodOptions parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new MethodOptions(input, extensionRegistry);
      }
    };

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

    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public int getUninterpretedOptionCount() {
      return uninterpretedOption_.size();
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
      return uninterpretedOption_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index) {
      return uninterpretedOption_.get(index);
    }

    private void initFields() {
      uninterpretedOption_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

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

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      com.google.protobuf.GeneratedMessage
        .ExtendableMessage<com.google.protobuf.DescriptorProtos.MethodOptions>.ExtensionWriter extensionWriter =
          newExtensionWriter();
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        output.writeMessage(999, uninterpretedOption_.get(i));
      }
      extensionWriter.writeUntil(536870912, output);
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(999, uninterpretedOption_.get(i));
      }
      size += extensionsSerializedSize();
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.MethodOptions parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.MethodOptions parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.MethodOptions prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.MethodOptions}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
          com.google.protobuf.DescriptorProtos.MethodOptions, Builder> implements com.google.protobuf.DescriptorProtos.MethodOptionsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return internal_static_google_protobuf_MethodOptions_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return internal_static_google_protobuf_MethodOptions_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                    com.google.protobuf.DescriptorProtos.MethodOptions.class, com.google.protobuf.DescriptorProtos.MethodOptions.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.MethodOptions.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (alwaysUseFieldBuilders) {
          getUninterpretedOptionFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return internal_static_google_protobuf_MethodOptions_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.MethodOptions getDefaultInstanceForType() {
        return getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.MethodOptions build() {
        com.google.protobuf.DescriptorProtos.MethodOptions result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.MethodOptions buildPartial() {
        com.google.protobuf.DescriptorProtos.MethodOptions result = new com.google.protobuf.DescriptorProtos.MethodOptions(this);
        int from_bitField0_ = bitField0_;
        if (uninterpretedOptionBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.uninterpretedOption_ = uninterpretedOption_;
        } else {
          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.MethodOptions) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.MethodOptions)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.MethodOptions other) {
        if (other == getDefaultInstance()) return this;
        if (uninterpretedOptionBuilder_ == null) {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOption_.isEmpty()) {
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureUninterpretedOptionIsMutable();
              uninterpretedOption_.addAll(other.uninterpretedOption_);
            }
            onChanged();
          }
        } else {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOptionBuilder_.isEmpty()) {
              uninterpretedOptionBuilder_.dispose();
              uninterpretedOptionBuilder_ = null;
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000001);
              uninterpretedOptionBuilder_ = 
                alwaysUseFieldBuilders ?
                   getUninterpretedOptionFieldBuilder() : null;
            } else {
              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
            }
          }
        }
        this.mergeExtensionFields(other);
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

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

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

      // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
        java.util.Collections.emptyList();
      private void ensureUninterpretedOptionIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>(uninterpretedOption_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;

      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
        if (uninterpretedOptionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        } else {
          return uninterpretedOptionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public int getUninterpretedOptionCount() {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.size();
        } else {
          return uninterpretedOptionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);
        } else {
          return uninterpretedOptionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addAllUninterpretedOption(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          super.addAll(values, uninterpretedOption_);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder clearUninterpretedOption() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder removeUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.remove(index);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
          int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);  } else {
          return uninterpretedOptionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
           getUninterpretedOptionOrBuilderList() {
        if (uninterpretedOptionBuilder_ != null) {
          return uninterpretedOptionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
           getUninterpretedOptionBuilderList() {
        return getUninterpretedOptionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
          getUninterpretedOptionFieldBuilder() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder>(
                  uninterpretedOption_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          uninterpretedOption_ = null;
        }
        return uninterpretedOptionBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.MethodOptions)
    }

    static {
      defaultInstance = new MethodOptions(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.MethodOptions)
  }

  public interface UninterpretedOptionOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // repeated .google.protobuf.UninterpretedOption.NamePart name = 2;
    /**
     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> 
        getNameList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart getName(int index);
    /**
     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
     */
    int getNameCount();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder> 
        getNameOrBuilderList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder getNameOrBuilder(
        int index);

    // optional string identifier_value = 3;
    /**
     * <code>optional string identifier_value = 3;</code>
     *
     * <pre>
     * The value of the uninterpreted option, in whatever type the tokenizer
     * identified it as during parsing. Exactly one of these should be set.
     * </pre>
     */
    boolean hasIdentifierValue();
    /**
     * <code>optional string identifier_value = 3;</code>
     *
     * <pre>
     * The value of the uninterpreted option, in whatever type the tokenizer
     * identified it as during parsing. Exactly one of these should be set.
     * </pre>
     */
    java.lang.String getIdentifierValue();
    /**
     * <code>optional string identifier_value = 3;</code>
     *
     * <pre>
     * The value of the uninterpreted option, in whatever type the tokenizer
     * identified it as during parsing. Exactly one of these should be set.
     * </pre>
     */
    com.google.protobuf.ByteString
        getIdentifierValueBytes();

    // optional uint64 positive_int_value = 4;
    /**
     * <code>optional uint64 positive_int_value = 4;</code>
     */
    boolean hasPositiveIntValue();
    /**
     * <code>optional uint64 positive_int_value = 4;</code>
     */
    long getPositiveIntValue();

    // optional int64 negative_int_value = 5;
    /**
     * <code>optional int64 negative_int_value = 5;</code>
     */
    boolean hasNegativeIntValue();
    /**
     * <code>optional int64 negative_int_value = 5;</code>
     */
    long getNegativeIntValue();

    // optional double double_value = 6;
    /**
     * <code>optional double double_value = 6;</code>
     */
    boolean hasDoubleValue();
    /**
     * <code>optional double double_value = 6;</code>
     */
    double getDoubleValue();

    // optional bytes string_value = 7;
    /**
     * <code>optional bytes string_value = 7;</code>
     */
    boolean hasStringValue();
    /**
     * <code>optional bytes string_value = 7;</code>
     */
    com.google.protobuf.ByteString getStringValue();

    // optional string aggregate_value = 8;
    /**
     * <code>optional string aggregate_value = 8;</code>
     */
    boolean hasAggregateValue();
    /**
     * <code>optional string aggregate_value = 8;</code>
     */
    java.lang.String getAggregateValue();
    /**
     * <code>optional string aggregate_value = 8;</code>
     */
    com.google.protobuf.ByteString
        getAggregateValueBytes();
  }
  /**
   * Protobuf type {@code google.protobuf.UninterpretedOption}
   *
   * <pre>
   * A message representing a option the parser does not recognize. This only
   * appears in options protos created by the compiler::Parser class.
   * DescriptorPool resolves these when building Descriptor objects. Therefore,
   * options protos in descriptor objects (e.g. returned by Descriptor::options(),
   * or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
   * in them.
   * </pre>
   */
  public static final class UninterpretedOption extends
      com.google.protobuf.GeneratedMessage
      implements UninterpretedOptionOrBuilder {
    // Use UninterpretedOption.newBuilder() to construct.
    private UninterpretedOption(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private UninterpretedOption(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final UninterpretedOption defaultInstance;
    public static UninterpretedOption getDefaultInstance() {
      return defaultInstance;
    }

    public UninterpretedOption getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private UninterpretedOption(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      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 18: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                name_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart>();
                mutable_bitField0_ |= 0x00000001;
              }
              name_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.PARSER, extensionRegistry));
              break;
            }
            case 26: {
              bitField0_ |= 0x00000001;
              identifierValue_ = input.readBytes();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000002;
              positiveIntValue_ = input.readUInt64();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000004;
              negativeIntValue_ = input.readInt64();
              break;
            }
            case 49: {
              bitField0_ |= 0x00000008;
              doubleValue_ = input.readDouble();
              break;
            }
            case 58: {
              bitField0_ |= 0x00000010;
              stringValue_ = input.readBytes();
              break;
            }
            case 66: {
              bitField0_ |= 0x00000020;
              aggregateValue_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          name_ = java.util.Collections.unmodifiableList(name_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return internal_static_google_protobuf_UninterpretedOption_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return internal_static_google_protobuf_UninterpretedOption_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
                  com.google.protobuf.DescriptorProtos.UninterpretedOption.class, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder.class);
    }

    public static com.google.protobuf.Parser<UninterpretedOption> PARSER =
        new com.google.protobuf.AbstractParser<UninterpretedOption>() {
      public UninterpretedOption parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new UninterpretedOption(input, extensionRegistry);
      }
    };

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

    public interface NamePartOrBuilder
        extends com.google.protobuf.MessageOrBuilder {

      // required string name_part = 1;
      /**
       * <code>required string name_part = 1;</code>
       */
      boolean hasNamePart();
      /**
       * <code>required string name_part = 1;</code>
       */
      java.lang.String getNamePart();
      /**
       * <code>required string name_part = 1;</code>
       */
      com.google.protobuf.ByteString
          getNamePartBytes();

      // required bool is_extension = 2;
      /**
       * <code>required bool is_extension = 2;</code>
       */
      boolean hasIsExtension();
      /**
       * <code>required bool is_extension = 2;</code>
       */
      boolean getIsExtension();
    }
    /**
     * Protobuf type {@code google.protobuf.UninterpretedOption.NamePart}
     *
     * <pre>
     * The name of the uninterpreted option.  Each string represents a segment in
     * a dot-separated name.  is_extension is true iff a segment represents an
     * extension (denoted with parentheses in options specs in .proto files).
     * E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
     * "foo.(bar.baz).qux".
     * </pre>
     */
    public static final class NamePart extends
        com.google.protobuf.GeneratedMessage
        implements NamePartOrBuilder {
      // Use NamePart.newBuilder() to construct.
      private NamePart(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private NamePart(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

      private static final NamePart defaultInstance;
      public static NamePart getDefaultInstance() {
        return defaultInstance;
      }

      public NamePart getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private NamePart(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        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: {
                bitField0_ |= 0x00000001;
                namePart_ = input.readBytes();
                break;
              }
              case 16: {
                bitField0_ |= 0x00000002;
                isExtension_ = input.readBool();
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return internal_static_google_protobuf_UninterpretedOption_NamePart_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                    com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.class, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder.class);
      }

      public static com.google.protobuf.Parser<NamePart> PARSER =
          new com.google.protobuf.AbstractParser<NamePart>() {
        public NamePart parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new NamePart(input, extensionRegistry);
        }
      };

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

      private int bitField0_;
      // required string name_part = 1;
      public static final int NAME_PART_FIELD_NUMBER = 1;
      private java.lang.Object namePart_;
      /**
       * <code>required string name_part = 1;</code>
       */
      public boolean hasNamePart() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required string name_part = 1;</code>
       */
      public java.lang.String getNamePart() {
        java.lang.Object ref = namePart_;
        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()) {
            namePart_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string name_part = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNamePartBytes() {
        java.lang.Object ref = namePart_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          namePart_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      // required bool is_extension = 2;
      public static final int IS_EXTENSION_FIELD_NUMBER = 2;
      private boolean isExtension_;
      /**
       * <code>required bool is_extension = 2;</code>
       */
      public boolean hasIsExtension() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required bool is_extension = 2;</code>
       */
      public boolean getIsExtension() {
        return isExtension_;
      }

      private void initFields() {
        namePart_ = "";
        isExtension_ = false;
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;

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

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, getNamePartBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBool(2, isExtension_);
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, getNamePartBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBoolSize(2, isExtension_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }

      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code google.protobuf.UninterpretedOption.NamePart}
       *
       * <pre>
       * The name of the uninterpreted option.  Each string represents a segment in
       * a dot-separated name.  is_extension is true iff a segment represents an
       * extension (denoted with parentheses in options specs in .proto files).
       * E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
       * "foo.(bar.baz).qux".
       * </pre>
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return internal_static_google_protobuf_UninterpretedOption_NamePart_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                      com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.class, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder.class);
        }

        // Construct using com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }

        public Builder clear() {
          super.clear();
          namePart_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          isExtension_ = false;
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }

        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor;
        }

        public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart getDefaultInstanceForType() {
          return getDefaultInstance();
        }

        public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart build() {
          com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart buildPartial() {
          com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart result = new com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.namePart_ = namePart_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.isExtension_ = isExtension_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart) {
            return mergeFrom((com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart other) {
          if (other == getDefaultInstance()) return this;
          if (other.hasNamePart()) {
            bitField0_ |= 0x00000001;
            namePart_ = other.namePart_;
            onChanged();
          }
          if (other.hasIsExtension()) {
            setIsExtension(other.getIsExtension());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

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

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

        // required string name_part = 1;
        private java.lang.Object namePart_ = "";
        /**
         * <code>required string name_part = 1;</code>
         */
        public boolean hasNamePart() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required string name_part = 1;</code>
         */
        public java.lang.String getNamePart() {
          java.lang.Object ref = namePart_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            namePart_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string name_part = 1;</code>
         */
        public com.google.protobuf.ByteString
            getNamePartBytes() {
          java.lang.Object ref = namePart_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            namePart_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string name_part = 1;</code>
         */
        public Builder setNamePart(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          namePart_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string name_part = 1;</code>
         */
        public Builder clearNamePart() {
          bitField0_ = (bitField0_ & ~0x00000001);
          namePart_ = getDefaultInstance().getNamePart();
          onChanged();
          return this;
        }
        /**
         * <code>required string name_part = 1;</code>
         */
        public Builder setNamePartBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          namePart_ = value;
          onChanged();
          return this;
        }

        // required bool is_extension = 2;
        private boolean isExtension_ ;
        /**
         * <code>required bool is_extension = 2;</code>
         */
        public boolean hasIsExtension() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>required bool is_extension = 2;</code>
         */
        public boolean getIsExtension() {
          return isExtension_;
        }
        /**
         * <code>required bool is_extension = 2;</code>
         */
        public Builder setIsExtension(boolean value) {
          bitField0_ |= 0x00000002;
          isExtension_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required bool is_extension = 2;</code>
         */
        public Builder clearIsExtension() {
          bitField0_ = (bitField0_ & ~0x00000002);
          isExtension_ = false;
          onChanged();
          return this;
        }

        // @@protoc_insertion_point(builder_scope:google.protobuf.UninterpretedOption.NamePart)
      }

      static {
        defaultInstance = new NamePart(true);
        defaultInstance.initFields();
      }

      // @@protoc_insertion_point(class_scope:google.protobuf.UninterpretedOption.NamePart)
    }

    private int bitField0_;
    // repeated .google.protobuf.UninterpretedOption.NamePart name = 2;
    public static final int NAME_FIELD_NUMBER = 2;
    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> name_;
    /**
     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> getNameList() {
      return name_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder> 
        getNameOrBuilderList() {
      return name_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
     */
    public int getNameCount() {
      return name_.size();
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart getName(int index) {
      return name_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder getNameOrBuilder(
        int index) {
      return name_.get(index);
    }

    // optional string identifier_value = 3;
    public static final int IDENTIFIER_VALUE_FIELD_NUMBER = 3;
    private java.lang.Object identifierValue_;
    /**
     * <code>optional string identifier_value = 3;</code>
     *
     * <pre>
     * The value of the uninterpreted option, in whatever type the tokenizer
     * identified it as during parsing. Exactly one of these should be set.
     * </pre>
     */
    public boolean hasIdentifierValue() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string identifier_value = 3;</code>
     *
     * <pre>
     * The value of the uninterpreted option, in whatever type the tokenizer
     * identified it as during parsing. Exactly one of these should be set.
     * </pre>
     */
    public java.lang.String getIdentifierValue() {
      java.lang.Object ref = identifierValue_;
      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()) {
          identifierValue_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string identifier_value = 3;</code>
     *
     * <pre>
     * The value of the uninterpreted option, in whatever type the tokenizer
     * identified it as during parsing. Exactly one of these should be set.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getIdentifierValueBytes() {
      java.lang.Object ref = identifierValue_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        identifierValue_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional uint64 positive_int_value = 4;
    public static final int POSITIVE_INT_VALUE_FIELD_NUMBER = 4;
    private long positiveIntValue_;
    /**
     * <code>optional uint64 positive_int_value = 4;</code>
     */
    public boolean hasPositiveIntValue() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional uint64 positive_int_value = 4;</code>
     */
    public long getPositiveIntValue() {
      return positiveIntValue_;
    }

    // optional int64 negative_int_value = 5;
    public static final int NEGATIVE_INT_VALUE_FIELD_NUMBER = 5;
    private long negativeIntValue_;
    /**
     * <code>optional int64 negative_int_value = 5;</code>
     */
    public boolean hasNegativeIntValue() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 negative_int_value = 5;</code>
     */
    public long getNegativeIntValue() {
      return negativeIntValue_;
    }

    // optional double double_value = 6;
    public static final int DOUBLE_VALUE_FIELD_NUMBER = 6;
    private double doubleValue_;
    /**
     * <code>optional double double_value = 6;</code>
     */
    public boolean hasDoubleValue() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional double double_value = 6;</code>
     */
    public double getDoubleValue() {
      return doubleValue_;
    }

    // optional bytes string_value = 7;
    public static final int STRING_VALUE_FIELD_NUMBER = 7;
    private com.google.protobuf.ByteString stringValue_;
    /**
     * <code>optional bytes string_value = 7;</code>
     */
    public boolean hasStringValue() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional bytes string_value = 7;</code>
     */
    public com.google.protobuf.ByteString getStringValue() {
      return stringValue_;
    }

    // optional string aggregate_value = 8;
    public static final int AGGREGATE_VALUE_FIELD_NUMBER = 8;
    private java.lang.Object aggregateValue_;
    /**
     * <code>optional string aggregate_value = 8;</code>
     */
    public boolean hasAggregateValue() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional string aggregate_value = 8;</code>
     */
    public java.lang.String getAggregateValue() {
      java.lang.Object ref = aggregateValue_;
      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()) {
          aggregateValue_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string aggregate_value = 8;</code>
     */
    public com.google.protobuf.ByteString
        getAggregateValueBytes() {
      java.lang.Object ref = aggregateValue_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        aggregateValue_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      name_ = java.util.Collections.emptyList();
      identifierValue_ = "";
      positiveIntValue_ = 0L;
      negativeIntValue_ = 0L;
      doubleValue_ = 0D;
      stringValue_ = com.google.protobuf.ByteString.EMPTY;
      aggregateValue_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

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

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < name_.size(); i++) {
        output.writeMessage(2, name_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(3, getIdentifierValueBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt64(4, positiveIntValue_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(5, negativeIntValue_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeDouble(6, doubleValue_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(7, stringValue_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBytes(8, getAggregateValueBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < name_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, name_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getIdentifierValueBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(4, positiveIntValue_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(5, negativeIntValue_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(6, doubleValue_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, stringValue_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getAggregateValueBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.UninterpretedOption prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.UninterpretedOption}
     *
     * <pre>
     * A message representing a option the parser does not recognize. This only
     * appears in options protos created by the compiler::Parser class.
     * DescriptorPool resolves these when building Descriptor objects. Therefore,
     * options protos in descriptor objects (e.g. returned by Descriptor::options(),
     * or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
     * in them.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return internal_static_google_protobuf_UninterpretedOption_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return internal_static_google_protobuf_UninterpretedOption_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                    com.google.protobuf.DescriptorProtos.UninterpretedOption.class, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.UninterpretedOption.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (alwaysUseFieldBuilders) {
          getNameFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (nameBuilder_ == null) {
          name_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          nameBuilder_.clear();
        }
        identifierValue_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        positiveIntValue_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        negativeIntValue_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        doubleValue_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000010);
        stringValue_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        aggregateValue_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return internal_static_google_protobuf_UninterpretedOption_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.UninterpretedOption getDefaultInstanceForType() {
        return getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.UninterpretedOption build() {
        com.google.protobuf.DescriptorProtos.UninterpretedOption result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.UninterpretedOption buildPartial() {
        com.google.protobuf.DescriptorProtos.UninterpretedOption result = new com.google.protobuf.DescriptorProtos.UninterpretedOption(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (nameBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            name_ = java.util.Collections.unmodifiableList(name_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.name_ = name_;
        } else {
          result.name_ = nameBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000001;
        }
        result.identifierValue_ = identifierValue_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000002;
        }
        result.positiveIntValue_ = positiveIntValue_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000004;
        }
        result.negativeIntValue_ = negativeIntValue_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000008;
        }
        result.doubleValue_ = doubleValue_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000010;
        }
        result.stringValue_ = stringValue_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000020;
        }
        result.aggregateValue_ = aggregateValue_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.UninterpretedOption) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.UninterpretedOption)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.UninterpretedOption other) {
        if (other == getDefaultInstance()) return this;
        if (nameBuilder_ == null) {
          if (!other.name_.isEmpty()) {
            if (name_.isEmpty()) {
              name_ = other.name_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureNameIsMutable();
              name_.addAll(other.name_);
            }
            onChanged();
          }
        } else {
          if (!other.name_.isEmpty()) {
            if (nameBuilder_.isEmpty()) {
              nameBuilder_.dispose();
              nameBuilder_ = null;
              name_ = other.name_;
              bitField0_ = (bitField0_ & ~0x00000001);
              nameBuilder_ = 
                alwaysUseFieldBuilders ?
                   getNameFieldBuilder() : null;
            } else {
              nameBuilder_.addAllMessages(other.name_);
            }
          }
        }
        if (other.hasIdentifierValue()) {
          bitField0_ |= 0x00000002;
          identifierValue_ = other.identifierValue_;
          onChanged();
        }
        if (other.hasPositiveIntValue()) {
          setPositiveIntValue(other.getPositiveIntValue());
        }
        if (other.hasNegativeIntValue()) {
          setNegativeIntValue(other.getNegativeIntValue());
        }
        if (other.hasDoubleValue()) {
          setDoubleValue(other.getDoubleValue());
        }
        if (other.hasStringValue()) {
          setStringValue(other.getStringValue());
        }
        if (other.hasAggregateValue()) {
          bitField0_ |= 0x00000040;
          aggregateValue_ = other.aggregateValue_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

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

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

      // repeated .google.protobuf.UninterpretedOption.NamePart name = 2;
      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> name_ =
        java.util.Collections.emptyList();
      private void ensureNameIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          name_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart>(name_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder> nameBuilder_;

      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> getNameList() {
        if (nameBuilder_ == null) {
          return java.util.Collections.unmodifiableList(name_);
        } else {
          return nameBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public int getNameCount() {
        if (nameBuilder_ == null) {
          return name_.size();
        } else {
          return nameBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart getName(int index) {
        if (nameBuilder_ == null) {
          return name_.get(index);
        } else {
          return nameBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public Builder setName(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart value) {
        if (nameBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNameIsMutable();
          name_.set(index, value);
          onChanged();
        } else {
          nameBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public Builder setName(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder builderForValue) {
        if (nameBuilder_ == null) {
          ensureNameIsMutable();
          name_.set(index, builderForValue.build());
          onChanged();
        } else {
          nameBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public Builder addName(com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart value) {
        if (nameBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNameIsMutable();
          name_.add(value);
          onChanged();
        } else {
          nameBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public Builder addName(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart value) {
        if (nameBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNameIsMutable();
          name_.add(index, value);
          onChanged();
        } else {
          nameBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public Builder addName(
          com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder builderForValue) {
        if (nameBuilder_ == null) {
          ensureNameIsMutable();
          name_.add(builderForValue.build());
          onChanged();
        } else {
          nameBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public Builder addName(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder builderForValue) {
        if (nameBuilder_ == null) {
          ensureNameIsMutable();
          name_.add(index, builderForValue.build());
          onChanged();
        } else {
          nameBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public Builder addAllName(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> values) {
        if (nameBuilder_ == null) {
          ensureNameIsMutable();
          super.addAll(values, name_);
          onChanged();
        } else {
          nameBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public Builder clearName() {
        if (nameBuilder_ == null) {
          name_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          nameBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public Builder removeName(int index) {
        if (nameBuilder_ == null) {
          ensureNameIsMutable();
          name_.remove(index);
          onChanged();
        } else {
          nameBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder getNameBuilder(
          int index) {
        return getNameFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder getNameOrBuilder(
          int index) {
        if (nameBuilder_ == null) {
          return name_.get(index);  } else {
          return nameBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder> 
           getNameOrBuilderList() {
        if (nameBuilder_ != null) {
          return nameBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(name_);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder addNameBuilder() {
        return getNameFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder addNameBuilder(
          int index) {
        return getNameFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder> 
           getNameBuilderList() {
        return getNameFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder> 
          getNameFieldBuilder() {
        if (nameBuilder_ == null) {
          nameBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder>(
                  name_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          name_ = null;
        }
        return nameBuilder_;
      }

      // optional string identifier_value = 3;
      private java.lang.Object identifierValue_ = "";
      /**
       * <code>optional string identifier_value = 3;</code>
       *
       * <pre>
       * The value of the uninterpreted option, in whatever type the tokenizer
       * identified it as during parsing. Exactly one of these should be set.
       * </pre>
       */
      public boolean hasIdentifierValue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string identifier_value = 3;</code>
       *
       * <pre>
       * The value of the uninterpreted option, in whatever type the tokenizer
       * identified it as during parsing. Exactly one of these should be set.
       * </pre>
       */
      public java.lang.String getIdentifierValue() {
        java.lang.Object ref = identifierValue_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          identifierValue_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string identifier_value = 3;</code>
       *
       * <pre>
       * The value of the uninterpreted option, in whatever type the tokenizer
       * identified it as during parsing. Exactly one of these should be set.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getIdentifierValueBytes() {
        java.lang.Object ref = identifierValue_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          identifierValue_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string identifier_value = 3;</code>
       *
       * <pre>
       * The value of the uninterpreted option, in whatever type the tokenizer
       * identified it as during parsing. Exactly one of these should be set.
       * </pre>
       */
      public Builder setIdentifierValue(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        identifierValue_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string identifier_value = 3;</code>
       *
       * <pre>
       * The value of the uninterpreted option, in whatever type the tokenizer
       * identified it as during parsing. Exactly one of these should be set.
       * </pre>
       */
      public Builder clearIdentifierValue() {
        bitField0_ = (bitField0_ & ~0x00000002);
        identifierValue_ = getDefaultInstance().getIdentifierValue();
        onChanged();
        return this;
      }
      /**
       * <code>optional string identifier_value = 3;</code>
       *
       * <pre>
       * The value of the uninterpreted option, in whatever type the tokenizer
       * identified it as during parsing. Exactly one of these should be set.
       * </pre>
       */
      public Builder setIdentifierValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        identifierValue_ = value;
        onChanged();
        return this;
      }

      // optional uint64 positive_int_value = 4;
      private long positiveIntValue_ ;
      /**
       * <code>optional uint64 positive_int_value = 4;</code>
       */
      public boolean hasPositiveIntValue() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional uint64 positive_int_value = 4;</code>
       */
      public long getPositiveIntValue() {
        return positiveIntValue_;
      }
      /**
       * <code>optional uint64 positive_int_value = 4;</code>
       */
      public Builder setPositiveIntValue(long value) {
        bitField0_ |= 0x00000004;
        positiveIntValue_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint64 positive_int_value = 4;</code>
       */
      public Builder clearPositiveIntValue() {
        bitField0_ = (bitField0_ & ~0x00000004);
        positiveIntValue_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 negative_int_value = 5;
      private long negativeIntValue_ ;
      /**
       * <code>optional int64 negative_int_value = 5;</code>
       */
      public boolean hasNegativeIntValue() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 negative_int_value = 5;</code>
       */
      public long getNegativeIntValue() {
        return negativeIntValue_;
      }
      /**
       * <code>optional int64 negative_int_value = 5;</code>
       */
      public Builder setNegativeIntValue(long value) {
        bitField0_ |= 0x00000008;
        negativeIntValue_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 negative_int_value = 5;</code>
       */
      public Builder clearNegativeIntValue() {
        bitField0_ = (bitField0_ & ~0x00000008);
        negativeIntValue_ = 0L;
        onChanged();
        return this;
      }

      // optional double double_value = 6;
      private double doubleValue_ ;
      /**
       * <code>optional double double_value = 6;</code>
       */
      public boolean hasDoubleValue() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional double double_value = 6;</code>
       */
      public double getDoubleValue() {
        return doubleValue_;
      }
      /**
       * <code>optional double double_value = 6;</code>
       */
      public Builder setDoubleValue(double value) {
        bitField0_ |= 0x00000010;
        doubleValue_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional double double_value = 6;</code>
       */
      public Builder clearDoubleValue() {
        bitField0_ = (bitField0_ & ~0x00000010);
        doubleValue_ = 0D;
        onChanged();
        return this;
      }

      // optional bytes string_value = 7;
      private com.google.protobuf.ByteString stringValue_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes string_value = 7;</code>
       */
      public boolean hasStringValue() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional bytes string_value = 7;</code>
       */
      public com.google.protobuf.ByteString getStringValue() {
        return stringValue_;
      }
      /**
       * <code>optional bytes string_value = 7;</code>
       */
      public Builder setStringValue(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        stringValue_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes string_value = 7;</code>
       */
      public Builder clearStringValue() {
        bitField0_ = (bitField0_ & ~0x00000020);
        stringValue_ = getDefaultInstance().getStringValue();
        onChanged();
        return this;
      }

      // optional string aggregate_value = 8;
      private java.lang.Object aggregateValue_ = "";
      /**
       * <code>optional string aggregate_value = 8;</code>
       */
      public boolean hasAggregateValue() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional string aggregate_value = 8;</code>
       */
      public java.lang.String getAggregateValue() {
        java.lang.Object ref = aggregateValue_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          aggregateValue_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string aggregate_value = 8;</code>
       */
      public com.google.protobuf.ByteString
          getAggregateValueBytes() {
        java.lang.Object ref = aggregateValue_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          aggregateValue_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string aggregate_value = 8;</code>
       */
      public Builder setAggregateValue(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        aggregateValue_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string aggregate_value = 8;</code>
       */
      public Builder clearAggregateValue() {
        bitField0_ = (bitField0_ & ~0x00000040);
        aggregateValue_ = getDefaultInstance().getAggregateValue();
        onChanged();
        return this;
      }
      /**
       * <code>optional string aggregate_value = 8;</code>
       */
      public Builder setAggregateValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        aggregateValue_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.UninterpretedOption)
    }

    static {
      defaultInstance = new UninterpretedOption(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.UninterpretedOption)
  }

  public interface SourceCodeInfoOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // repeated .google.protobuf.SourceCodeInfo.Location location = 1;
    /**
     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
     *
     * <pre>
     * A Location identifies a piece of source code in a .proto file which
     * corresponds to a particular definition.  This information is intended
     * to be useful to IDEs, code indexers, documentation generators, and similar
     * tools.
     *
     * For example, say we have a file like:
     *   message Foo {
     *     optional string foo = 1;
     *   }
     * Let's look at just the field definition:
     *   optional string foo = 1;
     *   ^       ^^     ^^  ^  ^^^
     *   a       bc     de  f  ghi
     * We have the following locations:
     *   span   path               represents
     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     *
     * Notes:
     * - A location may refer to a repeated field itself (i.e. not to any
     *   particular index within it).  This is used whenever a set of elements are
     *   logically enclosed in a single code segment.  For example, an entire
     *   extend block (possibly containing multiple extension definitions) will
     *   have an outer location whose path refers to the "extensions" repeated
     *   field without an index.
     * - Multiple locations may have the same path.  This happens when a single
     *   logical declaration is spread out across multiple places.  The most
     *   obvious example is the "extend" block again -- there may be multiple
     *   extend blocks in the same scope, each of which will have the same path.
     * - A location's span is not always a subset of its parent's span.  For
     *   example, the "extendee" of an extension declaration appears at the
     *   beginning of the "extend" block and is shared by all extensions within
     *   the block.
     * - Just because a location's span is a subset of some other location's span
     *   does not mean that it is a descendent.  For example, a "group" defines
     *   both a type and a field in a single declaration.  Thus, the locations
     *   corresponding to the type and field and their components will overlap.
     * - Code which tries to interpret locations should probably be designed to
     *   ignore those that it doesn't understand, as more types of locations could
     *   be recorded in the future.
     * </pre>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> 
        getLocationList();
    /**
     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
     *
     * <pre>
     * A Location identifies a piece of source code in a .proto file which
     * corresponds to a particular definition.  This information is intended
     * to be useful to IDEs, code indexers, documentation generators, and similar
     * tools.
     *
     * For example, say we have a file like:
     *   message Foo {
     *     optional string foo = 1;
     *   }
     * Let's look at just the field definition:
     *   optional string foo = 1;
     *   ^       ^^     ^^  ^  ^^^
     *   a       bc     de  f  ghi
     * We have the following locations:
     *   span   path               represents
     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     *
     * Notes:
     * - A location may refer to a repeated field itself (i.e. not to any
     *   particular index within it).  This is used whenever a set of elements are
     *   logically enclosed in a single code segment.  For example, an entire
     *   extend block (possibly containing multiple extension definitions) will
     *   have an outer location whose path refers to the "extensions" repeated
     *   field without an index.
     * - Multiple locations may have the same path.  This happens when a single
     *   logical declaration is spread out across multiple places.  The most
     *   obvious example is the "extend" block again -- there may be multiple
     *   extend blocks in the same scope, each of which will have the same path.
     * - A location's span is not always a subset of its parent's span.  For
     *   example, the "extendee" of an extension declaration appears at the
     *   beginning of the "extend" block and is shared by all extensions within
     *   the block.
     * - Just because a location's span is a subset of some other location's span
     *   does not mean that it is a descendent.  For example, a "group" defines
     *   both a type and a field in a single declaration.  Thus, the locations
     *   corresponding to the type and field and their components will overlap.
     * - Code which tries to interpret locations should probably be designed to
     *   ignore those that it doesn't understand, as more types of locations could
     *   be recorded in the future.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location getLocation(int index);
    /**
     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
     *
     * <pre>
     * A Location identifies a piece of source code in a .proto file which
     * corresponds to a particular definition.  This information is intended
     * to be useful to IDEs, code indexers, documentation generators, and similar
     * tools.
     *
     * For example, say we have a file like:
     *   message Foo {
     *     optional string foo = 1;
     *   }
     * Let's look at just the field definition:
     *   optional string foo = 1;
     *   ^       ^^     ^^  ^  ^^^
     *   a       bc     de  f  ghi
     * We have the following locations:
     *   span   path               represents
     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     *
     * Notes:
     * - A location may refer to a repeated field itself (i.e. not to any
     *   particular index within it).  This is used whenever a set of elements are
     *   logically enclosed in a single code segment.  For example, an entire
     *   extend block (possibly containing multiple extension definitions) will
     *   have an outer location whose path refers to the "extensions" repeated
     *   field without an index.
     * - Multiple locations may have the same path.  This happens when a single
     *   logical declaration is spread out across multiple places.  The most
     *   obvious example is the "extend" block again -- there may be multiple
     *   extend blocks in the same scope, each of which will have the same path.
     * - A location's span is not always a subset of its parent's span.  For
     *   example, the "extendee" of an extension declaration appears at the
     *   beginning of the "extend" block and is shared by all extensions within
     *   the block.
     * - Just because a location's span is a subset of some other location's span
     *   does not mean that it is a descendent.  For example, a "group" defines
     *   both a type and a field in a single declaration.  Thus, the locations
     *   corresponding to the type and field and their components will overlap.
     * - Code which tries to interpret locations should probably be designed to
     *   ignore those that it doesn't understand, as more types of locations could
     *   be recorded in the future.
     * </pre>
     */
    int getLocationCount();
    /**
     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
     *
     * <pre>
     * A Location identifies a piece of source code in a .proto file which
     * corresponds to a particular definition.  This information is intended
     * to be useful to IDEs, code indexers, documentation generators, and similar
     * tools.
     *
     * For example, say we have a file like:
     *   message Foo {
     *     optional string foo = 1;
     *   }
     * Let's look at just the field definition:
     *   optional string foo = 1;
     *   ^       ^^     ^^  ^  ^^^
     *   a       bc     de  f  ghi
     * We have the following locations:
     *   span   path               represents
     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     *
     * Notes:
     * - A location may refer to a repeated field itself (i.e. not to any
     *   particular index within it).  This is used whenever a set of elements are
     *   logically enclosed in a single code segment.  For example, an entire
     *   extend block (possibly containing multiple extension definitions) will
     *   have an outer location whose path refers to the "extensions" repeated
     *   field without an index.
     * - Multiple locations may have the same path.  This happens when a single
     *   logical declaration is spread out across multiple places.  The most
     *   obvious example is the "extend" block again -- there may be multiple
     *   extend blocks in the same scope, each of which will have the same path.
     * - A location's span is not always a subset of its parent's span.  For
     *   example, the "extendee" of an extension declaration appears at the
     *   beginning of the "extend" block and is shared by all extensions within
     *   the block.
     * - Just because a location's span is a subset of some other location's span
     *   does not mean that it is a descendent.  For example, a "group" defines
     *   both a type and a field in a single declaration.  Thus, the locations
     *   corresponding to the type and field and their components will overlap.
     * - Code which tries to interpret locations should probably be designed to
     *   ignore those that it doesn't understand, as more types of locations could
     *   be recorded in the future.
     * </pre>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder> 
        getLocationOrBuilderList();
    /**
     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
     *
     * <pre>
     * A Location identifies a piece of source code in a .proto file which
     * corresponds to a particular definition.  This information is intended
     * to be useful to IDEs, code indexers, documentation generators, and similar
     * tools.
     *
     * For example, say we have a file like:
     *   message Foo {
     *     optional string foo = 1;
     *   }
     * Let's look at just the field definition:
     *   optional string foo = 1;
     *   ^       ^^     ^^  ^  ^^^
     *   a       bc     de  f  ghi
     * We have the following locations:
     *   span   path               represents
     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     *
     * Notes:
     * - A location may refer to a repeated field itself (i.e. not to any
     *   particular index within it).  This is used whenever a set of elements are
     *   logically enclosed in a single code segment.  For example, an entire
     *   extend block (possibly containing multiple extension definitions) will
     *   have an outer location whose path refers to the "extensions" repeated
     *   field without an index.
     * - Multiple locations may have the same path.  This happens when a single
     *   logical declaration is spread out across multiple places.  The most
     *   obvious example is the "extend" block again -- there may be multiple
     *   extend blocks in the same scope, each of which will have the same path.
     * - A location's span is not always a subset of its parent's span.  For
     *   example, the "extendee" of an extension declaration appears at the
     *   beginning of the "extend" block and is shared by all extensions within
     *   the block.
     * - Just because a location's span is a subset of some other location's span
     *   does not mean that it is a descendent.  For example, a "group" defines
     *   both a type and a field in a single declaration.  Thus, the locations
     *   corresponding to the type and field and their components will overlap.
     * - Code which tries to interpret locations should probably be designed to
     *   ignore those that it doesn't understand, as more types of locations could
     *   be recorded in the future.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder getLocationOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code google.protobuf.SourceCodeInfo}
   *
   * <pre>
   * Encapsulates information about the original source file from which a
   * FileDescriptorProto was generated.
   * </pre>
   */
  public static final class SourceCodeInfo extends
      com.google.protobuf.GeneratedMessage
      implements SourceCodeInfoOrBuilder {
    // Use SourceCodeInfo.newBuilder() to construct.
    private SourceCodeInfo(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private SourceCodeInfo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final SourceCodeInfo defaultInstance;
    public static SourceCodeInfo getDefaultInstance() {
      return defaultInstance;
    }

    public SourceCodeInfo getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private SourceCodeInfo(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      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)) {
                location_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location>();
                mutable_bitField0_ |= 0x00000001;
              }
              location_.add(input.readMessage(com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.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.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          location_ = java.util.Collections.unmodifiableList(location_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return internal_static_google_protobuf_SourceCodeInfo_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return internal_static_google_protobuf_SourceCodeInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
                  com.google.protobuf.DescriptorProtos.SourceCodeInfo.class, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder.class);
    }

    public static com.google.protobuf.Parser<SourceCodeInfo> PARSER =
        new com.google.protobuf.AbstractParser<SourceCodeInfo>() {
      public SourceCodeInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SourceCodeInfo(input, extensionRegistry);
      }
    };

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

    public interface LocationOrBuilder
        extends com.google.protobuf.MessageOrBuilder {

      // repeated int32 path = 1 [packed = true];
      /**
       * <code>repeated int32 path = 1 [packed = true];</code>
       *
       * <pre>
       * Identifies which part of the FileDescriptorProto was defined at this
       * location.
       *
       * Each element is a field number or an index.  They form a path from
       * the root FileDescriptorProto to the place where the definition.  For
       * example, this path:
       *   [ 4, 3, 2, 7, 1 ]
       * refers to:
       *   file.message_type(3)  // 4, 3
       *       .field(7)         // 2, 7
       *       .name()           // 1
       * This is because FileDescriptorProto.message_type has field number 4:
       *   repeated DescriptorProto message_type = 4;
       * and DescriptorProto.field has field number 2:
       *   repeated FieldDescriptorProto field = 2;
       * and FieldDescriptorProto.name has field number 1:
       *   optional string name = 1;
       *
       * Thus, the above path gives the location of a field name.  If we removed
       * the last element:
       *   [ 4, 3, 2, 7 ]
       * this path refers to the whole field declaration (from the beginning
       * of the label to the terminating semicolon).
       * </pre>
       */
      java.util.List<java.lang.Integer> getPathList();
      /**
       * <code>repeated int32 path = 1 [packed = true];</code>
       *
       * <pre>
       * Identifies which part of the FileDescriptorProto was defined at this
       * location.
       *
       * Each element is a field number or an index.  They form a path from
       * the root FileDescriptorProto to the place where the definition.  For
       * example, this path:
       *   [ 4, 3, 2, 7, 1 ]
       * refers to:
       *   file.message_type(3)  // 4, 3
       *       .field(7)         // 2, 7
       *       .name()           // 1
       * This is because FileDescriptorProto.message_type has field number 4:
       *   repeated DescriptorProto message_type = 4;
       * and DescriptorProto.field has field number 2:
       *   repeated FieldDescriptorProto field = 2;
       * and FieldDescriptorProto.name has field number 1:
       *   optional string name = 1;
       *
       * Thus, the above path gives the location of a field name.  If we removed
       * the last element:
       *   [ 4, 3, 2, 7 ]
       * this path refers to the whole field declaration (from the beginning
       * of the label to the terminating semicolon).
       * </pre>
       */
      int getPathCount();
      /**
       * <code>repeated int32 path = 1 [packed = true];</code>
       *
       * <pre>
       * Identifies which part of the FileDescriptorProto was defined at this
       * location.
       *
       * Each element is a field number or an index.  They form a path from
       * the root FileDescriptorProto to the place where the definition.  For
       * example, this path:
       *   [ 4, 3, 2, 7, 1 ]
       * refers to:
       *   file.message_type(3)  // 4, 3
       *       .field(7)         // 2, 7
       *       .name()           // 1
       * This is because FileDescriptorProto.message_type has field number 4:
       *   repeated DescriptorProto message_type = 4;
       * and DescriptorProto.field has field number 2:
       *   repeated FieldDescriptorProto field = 2;
       * and FieldDescriptorProto.name has field number 1:
       *   optional string name = 1;
       *
       * Thus, the above path gives the location of a field name.  If we removed
       * the last element:
       *   [ 4, 3, 2, 7 ]
       * this path refers to the whole field declaration (from the beginning
       * of the label to the terminating semicolon).
       * </pre>
       */
      int getPath(int index);

      // repeated int32 span = 2 [packed = true];
      /**
       * <code>repeated int32 span = 2 [packed = true];</code>
       *
       * <pre>
       * Always has exactly three or four elements: start line, start column,
       * end line (optional, otherwise assumed same as start line), end column.
       * These are packed into a single field for efficiency.  Note that line
       * and column numbers are zero-based -- typically you will want to add
       * 1 to each before displaying to a user.
       * </pre>
       */
      java.util.List<java.lang.Integer> getSpanList();
      /**
       * <code>repeated int32 span = 2 [packed = true];</code>
       *
       * <pre>
       * Always has exactly three or four elements: start line, start column,
       * end line (optional, otherwise assumed same as start line), end column.
       * These are packed into a single field for efficiency.  Note that line
       * and column numbers are zero-based -- typically you will want to add
       * 1 to each before displaying to a user.
       * </pre>
       */
      int getSpanCount();
      /**
       * <code>repeated int32 span = 2 [packed = true];</code>
       *
       * <pre>
       * Always has exactly three or four elements: start line, start column,
       * end line (optional, otherwise assumed same as start line), end column.
       * These are packed into a single field for efficiency.  Note that line
       * and column numbers are zero-based -- typically you will want to add
       * 1 to each before displaying to a user.
       * </pre>
       */
      int getSpan(int index);

      // optional string leading_comments = 3;
      /**
       * <code>optional string leading_comments = 3;</code>
       *
       * <pre>
       * If this SourceCodeInfo represents a complete declaration, these are any
       * comments appearing before and after the declaration which appear to be
       * attached to the declaration.
       *
       * A series of line comments appearing on consecutive lines, with no other
       * tokens appearing on those lines, will be treated as a single comment.
       *
       * Only the comment content is provided; comment markers (e.g. //) are
       * stripped out.  For block comments, leading whitespace and an asterisk
       * will be stripped from the beginning of each line other than the first.
       * Newlines are included in the output.
       *
       * Examples:
       *
       *   optional int32 foo = 1;  // Comment attached to foo.
       *   // Comment attached to bar.
       *   optional int32 bar = 2;
       *
       *   optional string baz = 3;
       *   // Comment attached to baz.
       *   // Another line attached to baz.
       *
       *   // Comment attached to qux.
       *   //
       *   // Another line attached to qux.
       *   optional double qux = 4;
       *
       *   optional string corge = 5;
       *   /&#42; Block comment attached
       *    * to corge.  Leading asterisks
       *    * will be removed. *&#47;
       *   /&#42; Block comment attached to
       *    * grault. *&#47;
       *   optional int32 grault = 6;
       * </pre>
       */
      boolean hasLeadingComments();
      /**
       * <code>optional string leading_comments = 3;</code>
       *
       * <pre>
       * If this SourceCodeInfo represents a complete declaration, these are any
       * comments appearing before and after the declaration which appear to be
       * attached to the declaration.
       *
       * A series of line comments appearing on consecutive lines, with no other
       * tokens appearing on those lines, will be treated as a single comment.
       *
       * Only the comment content is provided; comment markers (e.g. //) are
       * stripped out.  For block comments, leading whitespace and an asterisk
       * will be stripped from the beginning of each line other than the first.
       * Newlines are included in the output.
       *
       * Examples:
       *
       *   optional int32 foo = 1;  // Comment attached to foo.
       *   // Comment attached to bar.
       *   optional int32 bar = 2;
       *
       *   optional string baz = 3;
       *   // Comment attached to baz.
       *   // Another line attached to baz.
       *
       *   // Comment attached to qux.
       *   //
       *   // Another line attached to qux.
       *   optional double qux = 4;
       *
       *   optional string corge = 5;
       *   /&#42; Block comment attached
       *    * to corge.  Leading asterisks
       *    * will be removed. *&#47;
       *   /&#42; Block comment attached to
       *    * grault. *&#47;
       *   optional int32 grault = 6;
       * </pre>
       */
      java.lang.String getLeadingComments();
      /**
       * <code>optional string leading_comments = 3;</code>
       *
       * <pre>
       * If this SourceCodeInfo represents a complete declaration, these are any
       * comments appearing before and after the declaration which appear to be
       * attached to the declaration.
       *
       * A series of line comments appearing on consecutive lines, with no other
       * tokens appearing on those lines, will be treated as a single comment.
       *
       * Only the comment content is provided; comment markers (e.g. //) are
       * stripped out.  For block comments, leading whitespace and an asterisk
       * will be stripped from the beginning of each line other than the first.
       * Newlines are included in the output.
       *
       * Examples:
       *
       *   optional int32 foo = 1;  // Comment attached to foo.
       *   // Comment attached to bar.
       *   optional int32 bar = 2;
       *
       *   optional string baz = 3;
       *   // Comment attached to baz.
       *   // Another line attached to baz.
       *
       *   // Comment attached to qux.
       *   //
       *   // Another line attached to qux.
       *   optional double qux = 4;
       *
       *   optional string corge = 5;
       *   /&#42; Block comment attached
       *    * to corge.  Leading asterisks
       *    * will be removed. *&#47;
       *   /&#42; Block comment attached to
       *    * grault. *&#47;
       *   optional int32 grault = 6;
       * </pre>
       */
      com.google.protobuf.ByteString
          getLeadingCommentsBytes();

      // optional string trailing_comments = 4;
      /**
       * <code>optional string trailing_comments = 4;</code>
       */
      boolean hasTrailingComments();
      /**
       * <code>optional string trailing_comments = 4;</code>
       */
      java.lang.String getTrailingComments();
      /**
       * <code>optional string trailing_comments = 4;</code>
       */
      com.google.protobuf.ByteString
          getTrailingCommentsBytes();
    }
    /**
     * Protobuf type {@code google.protobuf.SourceCodeInfo.Location}
     */
    public static final class Location extends
        com.google.protobuf.GeneratedMessage
        implements LocationOrBuilder {
      // Use Location.newBuilder() to construct.
      private Location(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private Location(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

      private static final Location defaultInstance;
      public static Location getDefaultInstance() {
        return defaultInstance;
      }

      public Location getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private Location(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        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)) {
                  path_ = new java.util.ArrayList<java.lang.Integer>();
                  mutable_bitField0_ |= 0x00000001;
                }
                path_.add(input.readInt32());
                break;
              }
              case 10: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                if (!((mutable_bitField0_ & 0x00000001) == 0x00000001) && input.getBytesUntilLimit() > 0) {
                  path_ = new java.util.ArrayList<java.lang.Integer>();
                  mutable_bitField0_ |= 0x00000001;
                }
                while (input.getBytesUntilLimit() > 0) {
                  path_.add(input.readInt32());
                }
                input.popLimit(limit);
                break;
              }
              case 16: {
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  span_ = new java.util.ArrayList<java.lang.Integer>();
                  mutable_bitField0_ |= 0x00000002;
                }
                span_.add(input.readInt32());
                break;
              }
              case 18: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002) && input.getBytesUntilLimit() > 0) {
                  span_ = new java.util.ArrayList<java.lang.Integer>();
                  mutable_bitField0_ |= 0x00000002;
                }
                while (input.getBytesUntilLimit() > 0) {
                  span_.add(input.readInt32());
                }
                input.popLimit(limit);
                break;
              }
              case 26: {
                bitField0_ |= 0x00000001;
                leadingComments_ = input.readBytes();
                break;
              }
              case 34: {
                bitField0_ |= 0x00000002;
                trailingComments_ = input.readBytes();
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
            path_ = java.util.Collections.unmodifiableList(path_);
          }
          if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
            span_ = java.util.Collections.unmodifiableList(span_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return internal_static_google_protobuf_SourceCodeInfo_Location_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return internal_static_google_protobuf_SourceCodeInfo_Location_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                    com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.class, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder.class);
      }

      public static com.google.protobuf.Parser<Location> PARSER =
          new com.google.protobuf.AbstractParser<Location>() {
        public Location parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Location(input, extensionRegistry);
        }
      };

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

      private int bitField0_;
      // repeated int32 path = 1 [packed = true];
      public static final int PATH_FIELD_NUMBER = 1;
      private java.util.List<java.lang.Integer> path_;
      /**
       * <code>repeated int32 path = 1 [packed = true];</code>
       *
       * <pre>
       * Identifies which part of the FileDescriptorProto was defined at this
       * location.
       *
       * Each element is a field number or an index.  They form a path from
       * the root FileDescriptorProto to the place where the definition.  For
       * example, this path:
       *   [ 4, 3, 2, 7, 1 ]
       * refers to:
       *   file.message_type(3)  // 4, 3
       *       .field(7)         // 2, 7
       *       .name()           // 1
       * This is because FileDescriptorProto.message_type has field number 4:
       *   repeated DescriptorProto message_type = 4;
       * and DescriptorProto.field has field number 2:
       *   repeated FieldDescriptorProto field = 2;
       * and FieldDescriptorProto.name has field number 1:
       *   optional string name = 1;
       *
       * Thus, the above path gives the location of a field name.  If we removed
       * the last element:
       *   [ 4, 3, 2, 7 ]
       * this path refers to the whole field declaration (from the beginning
       * of the label to the terminating semicolon).
       * </pre>
       */
      public java.util.List<java.lang.Integer>
          getPathList() {
        return path_;
      }
      /**
       * <code>repeated int32 path = 1 [packed = true];</code>
       *
       * <pre>
       * Identifies which part of the FileDescriptorProto was defined at this
       * location.
       *
       * Each element is a field number or an index.  They form a path from
       * the root FileDescriptorProto to the place where the definition.  For
       * example, this path:
       *   [ 4, 3, 2, 7, 1 ]
       * refers to:
       *   file.message_type(3)  // 4, 3
       *       .field(7)         // 2, 7
       *       .name()           // 1
       * This is because FileDescriptorProto.message_type has field number 4:
       *   repeated DescriptorProto message_type = 4;
       * and DescriptorProto.field has field number 2:
       *   repeated FieldDescriptorProto field = 2;
       * and FieldDescriptorProto.name has field number 1:
       *   optional string name = 1;
       *
       * Thus, the above path gives the location of a field name.  If we removed
       * the last element:
       *   [ 4, 3, 2, 7 ]
       * this path refers to the whole field declaration (from the beginning
       * of the label to the terminating semicolon).
       * </pre>
       */
      public int getPathCount() {
        return path_.size();
      }
      /**
       * <code>repeated int32 path = 1 [packed = true];</code>
       *
       * <pre>
       * Identifies which part of the FileDescriptorProto was defined at this
       * location.
       *
       * Each element is a field number or an index.  They form a path from
       * the root FileDescriptorProto to the place where the definition.  For
       * example, this path:
       *   [ 4, 3, 2, 7, 1 ]
       * refers to:
       *   file.message_type(3)  // 4, 3
       *       .field(7)         // 2, 7
       *       .name()           // 1
       * This is because FileDescriptorProto.message_type has field number 4:
       *   repeated DescriptorProto message_type = 4;
       * and DescriptorProto.field has field number 2:
       *   repeated FieldDescriptorProto field = 2;
       * and FieldDescriptorProto.name has field number 1:
       *   optional string name = 1;
       *
       * Thus, the above path gives the location of a field name.  If we removed
       * the last element:
       *   [ 4, 3, 2, 7 ]
       * this path refers to the whole field declaration (from the beginning
       * of the label to the terminating semicolon).
       * </pre>
       */
      public int getPath(int index) {
        return path_.get(index);
      }
      private int pathMemoizedSerializedSize = -1;

      // repeated int32 span = 2 [packed = true];
      public static final int SPAN_FIELD_NUMBER = 2;
      private java.util.List<java.lang.Integer> span_;
      /**
       * <code>repeated int32 span = 2 [packed = true];</code>
       *
       * <pre>
       * Always has exactly three or four elements: start line, start column,
       * end line (optional, otherwise assumed same as start line), end column.
       * These are packed into a single field for efficiency.  Note that line
       * and column numbers are zero-based -- typically you will want to add
       * 1 to each before displaying to a user.
       * </pre>
       */
      public java.util.List<java.lang.Integer>
          getSpanList() {
        return span_;
      }
      /**
       * <code>repeated int32 span = 2 [packed = true];</code>
       *
       * <pre>
       * Always has exactly three or four elements: start line, start column,
       * end line (optional, otherwise assumed same as start line), end column.
       * These are packed into a single field for efficiency.  Note that line
       * and column numbers are zero-based -- typically you will want to add
       * 1 to each before displaying to a user.
       * </pre>
       */
      public int getSpanCount() {
        return span_.size();
      }
      /**
       * <code>repeated int32 span = 2 [packed = true];</code>
       *
       * <pre>
       * Always has exactly three or four elements: start line, start column,
       * end line (optional, otherwise assumed same as start line), end column.
       * These are packed into a single field for efficiency.  Note that line
       * and column numbers are zero-based -- typically you will want to add
       * 1 to each before displaying to a user.
       * </pre>
       */
      public int getSpan(int index) {
        return span_.get(index);
      }
      private int spanMemoizedSerializedSize = -1;

      // optional string leading_comments = 3;
      public static final int LEADING_COMMENTS_FIELD_NUMBER = 3;
      private java.lang.Object leadingComments_;
      /**
       * <code>optional string leading_comments = 3;</code>
       *
       * <pre>
       * If this SourceCodeInfo represents a complete declaration, these are any
       * comments appearing before and after the declaration which appear to be
       * attached to the declaration.
       *
       * A series of line comments appearing on consecutive lines, with no other
       * tokens appearing on those lines, will be treated as a single comment.
       *
       * Only the comment content is provided; comment markers (e.g. //) are
       * stripped out.  For block comments, leading whitespace and an asterisk
       * will be stripped from the beginning of each line other than the first.
       * Newlines are included in the output.
       *
       * Examples:
       *
       *   optional int32 foo = 1;  // Comment attached to foo.
       *   // Comment attached to bar.
       *   optional int32 bar = 2;
       *
       *   optional string baz = 3;
       *   // Comment attached to baz.
       *   // Another line attached to baz.
       *
       *   // Comment attached to qux.
       *   //
       *   // Another line attached to qux.
       *   optional double qux = 4;
       *
       *   optional string corge = 5;
       *   /&#42; Block comment attached
       *    * to corge.  Leading asterisks
       *    * will be removed. *&#47;
       *   /&#42; Block comment attached to
       *    * grault. *&#47;
       *   optional int32 grault = 6;
       * </pre>
       */
      public boolean hasLeadingComments() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string leading_comments = 3;</code>
       *
       * <pre>
       * If this SourceCodeInfo represents a complete declaration, these are any
       * comments appearing before and after the declaration which appear to be
       * attached to the declaration.
       *
       * A series of line comments appearing on consecutive lines, with no other
       * tokens appearing on those lines, will be treated as a single comment.
       *
       * Only the comment content is provided; comment markers (e.g. //) are
       * stripped out.  For block comments, leading whitespace and an asterisk
       * will be stripped from the beginning of each line other than the first.
       * Newlines are included in the output.
       *
       * Examples:
       *
       *   optional int32 foo = 1;  // Comment attached to foo.
       *   // Comment attached to bar.
       *   optional int32 bar = 2;
       *
       *   optional string baz = 3;
       *   // Comment attached to baz.
       *   // Another line attached to baz.
       *
       *   // Comment attached to qux.
       *   //
       *   // Another line attached to qux.
       *   optional double qux = 4;
       *
       *   optional string corge = 5;
       *   /&#42; Block comment attached
       *    * to corge.  Leading asterisks
       *    * will be removed. *&#47;
       *   /&#42; Block comment attached to
       *    * grault. *&#47;
       *   optional int32 grault = 6;
       * </pre>
       */
      public java.lang.String getLeadingComments() {
        java.lang.Object ref = leadingComments_;
        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()) {
            leadingComments_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string leading_comments = 3;</code>
       *
       * <pre>
       * If this SourceCodeInfo represents a complete declaration, these are any
       * comments appearing before and after the declaration which appear to be
       * attached to the declaration.
       *
       * A series of line comments appearing on consecutive lines, with no other
       * tokens appearing on those lines, will be treated as a single comment.
       *
       * Only the comment content is provided; comment markers (e.g. //) are
       * stripped out.  For block comments, leading whitespace and an asterisk
       * will be stripped from the beginning of each line other than the first.
       * Newlines are included in the output.
       *
       * Examples:
       *
       *   optional int32 foo = 1;  // Comment attached to foo.
       *   // Comment attached to bar.
       *   optional int32 bar = 2;
       *
       *   optional string baz = 3;
       *   // Comment attached to baz.
       *   // Another line attached to baz.
       *
       *   // Comment attached to qux.
       *   //
       *   // Another line attached to qux.
       *   optional double qux = 4;
       *
       *   optional string corge = 5;
       *   /&#42; Block comment attached
       *    * to corge.  Leading asterisks
       *    * will be removed. *&#47;
       *   /&#42; Block comment attached to
       *    * grault. *&#47;
       *   optional int32 grault = 6;
       * </pre>
       */
      public com.google.protobuf.ByteString
          getLeadingCommentsBytes() {
        java.lang.Object ref = leadingComments_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          leadingComments_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      // optional string trailing_comments = 4;
      public static final int TRAILING_COMMENTS_FIELD_NUMBER = 4;
      private java.lang.Object trailingComments_;
      /**
       * <code>optional string trailing_comments = 4;</code>
       */
      public boolean hasTrailingComments() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string trailing_comments = 4;</code>
       */
      public java.lang.String getTrailingComments() {
        java.lang.Object ref = trailingComments_;
        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()) {
            trailingComments_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string trailing_comments = 4;</code>
       */
      public com.google.protobuf.ByteString
          getTrailingCommentsBytes() {
        java.lang.Object ref = trailingComments_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          trailingComments_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      private void initFields() {
        path_ = java.util.Collections.emptyList();
        span_ = java.util.Collections.emptyList();
        leadingComments_ = "";
        trailingComments_ = "";
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (getPathList().size() > 0) {
          output.writeRawVarint32(10);
          output.writeRawVarint32(pathMemoizedSerializedSize);
        }
        for (int i = 0; i < path_.size(); i++) {
          output.writeInt32NoTag(path_.get(i));
        }
        if (getSpanList().size() > 0) {
          output.writeRawVarint32(18);
          output.writeRawVarint32(spanMemoizedSerializedSize);
        }
        for (int i = 0; i < span_.size(); i++) {
          output.writeInt32NoTag(span_.get(i));
        }
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(3, getLeadingCommentsBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(4, getTrailingCommentsBytes());
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        {
          int dataSize = 0;
          for (int i = 0; i < path_.size(); i++) {
            dataSize += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(path_.get(i));
          }
          size += dataSize;
          if (!getPathList().isEmpty()) {
            size += 1;
            size += com.google.protobuf.CodedOutputStream
                .computeInt32SizeNoTag(dataSize);
          }
          pathMemoizedSerializedSize = dataSize;
        }
        {
          int dataSize = 0;
          for (int i = 0; i < span_.size(); i++) {
            dataSize += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(span_.get(i));
          }
          size += dataSize;
          if (!getSpanList().isEmpty()) {
            size += 1;
            size += com.google.protobuf.CodedOutputStream
                .computeInt32SizeNoTag(dataSize);
          }
          spanMemoizedSerializedSize = dataSize;
        }
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(3, getLeadingCommentsBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(4, getTrailingCommentsBytes());
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }

      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code google.protobuf.SourceCodeInfo.Location}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return internal_static_google_protobuf_SourceCodeInfo_Location_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return internal_static_google_protobuf_SourceCodeInfo_Location_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                      com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.class, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder.class);
        }

        // Construct using com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }

        public Builder clear() {
          super.clear();
          path_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          span_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          leadingComments_ = "";
          bitField0_ = (bitField0_ & ~0x00000004);
          trailingComments_ = "";
          bitField0_ = (bitField0_ & ~0x00000008);
          return this;
        }

        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return internal_static_google_protobuf_SourceCodeInfo_Location_descriptor;
        }

        public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location getDefaultInstanceForType() {
          return getDefaultInstance();
        }

        public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location build() {
          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location buildPartial() {
          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location result = new com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            path_ = java.util.Collections.unmodifiableList(path_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.path_ = path_;
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            span_ = java.util.Collections.unmodifiableList(span_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.span_ = span_;
          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
            to_bitField0_ |= 0x00000001;
          }
          result.leadingComments_ = leadingComments_;
          if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
            to_bitField0_ |= 0x00000002;
          }
          result.trailingComments_ = trailingComments_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location) {
            return mergeFrom((com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location other) {
          if (other == getDefaultInstance()) return this;
          if (!other.path_.isEmpty()) {
            if (path_.isEmpty()) {
              path_ = other.path_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensurePathIsMutable();
              path_.addAll(other.path_);
            }
            onChanged();
          }
          if (!other.span_.isEmpty()) {
            if (span_.isEmpty()) {
              span_ = other.span_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureSpanIsMutable();
              span_.addAll(other.span_);
            }
            onChanged();
          }
          if (other.hasLeadingComments()) {
            bitField0_ |= 0x00000004;
            leadingComments_ = other.leadingComments_;
            onChanged();
          }
          if (other.hasTrailingComments()) {
            bitField0_ |= 0x00000008;
            trailingComments_ = other.trailingComments_;
            onChanged();
          }
          this.mergeUnknownFields(other.getUnknownFields());
          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 {
          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        // repeated int32 path = 1 [packed = true];
        private java.util.List<java.lang.Integer> path_ = java.util.Collections.emptyList();
        private void ensurePathIsMutable() {
          if (!((bitField0_ & 0x00000001) == 0x00000001)) {
            path_ = new java.util.ArrayList<java.lang.Integer>(path_);
            bitField0_ |= 0x00000001;
           }
        }
        /**
         * <code>repeated int32 path = 1 [packed = true];</code>
         *
         * <pre>
         * Identifies which part of the FileDescriptorProto was defined at this
         * location.
         *
         * Each element is a field number or an index.  They form a path from
         * the root FileDescriptorProto to the place where the definition.  For
         * example, this path:
         *   [ 4, 3, 2, 7, 1 ]
         * refers to:
         *   file.message_type(3)  // 4, 3
         *       .field(7)         // 2, 7
         *       .name()           // 1
         * This is because FileDescriptorProto.message_type has field number 4:
         *   repeated DescriptorProto message_type = 4;
         * and DescriptorProto.field has field number 2:
         *   repeated FieldDescriptorProto field = 2;
         * and FieldDescriptorProto.name has field number 1:
         *   optional string name = 1;
         *
         * Thus, the above path gives the location of a field name.  If we removed
         * the last element:
         *   [ 4, 3, 2, 7 ]
         * this path refers to the whole field declaration (from the beginning
         * of the label to the terminating semicolon).
         * </pre>
         */
        public java.util.List<java.lang.Integer>
            getPathList() {
          return java.util.Collections.unmodifiableList(path_);
        }
        /**
         * <code>repeated int32 path = 1 [packed = true];</code>
         *
         * <pre>
         * Identifies which part of the FileDescriptorProto was defined at this
         * location.
         *
         * Each element is a field number or an index.  They form a path from
         * the root FileDescriptorProto to the place where the definition.  For
         * example, this path:
         *   [ 4, 3, 2, 7, 1 ]
         * refers to:
         *   file.message_type(3)  // 4, 3
         *       .field(7)         // 2, 7
         *       .name()           // 1
         * This is because FileDescriptorProto.message_type has field number 4:
         *   repeated DescriptorProto message_type = 4;
         * and DescriptorProto.field has field number 2:
         *   repeated FieldDescriptorProto field = 2;
         * and FieldDescriptorProto.name has field number 1:
         *   optional string name = 1;
         *
         * Thus, the above path gives the location of a field name.  If we removed
         * the last element:
         *   [ 4, 3, 2, 7 ]
         * this path refers to the whole field declaration (from the beginning
         * of the label to the terminating semicolon).
         * </pre>
         */
        public int getPathCount() {
          return path_.size();
        }
        /**
         * <code>repeated int32 path = 1 [packed = true];</code>
         *
         * <pre>
         * Identifies which part of the FileDescriptorProto was defined at this
         * location.
         *
         * Each element is a field number or an index.  They form a path from
         * the root FileDescriptorProto to the place where the definition.  For
         * example, this path:
         *   [ 4, 3, 2, 7, 1 ]
         * refers to:
         *   file.message_type(3)  // 4, 3
         *       .field(7)         // 2, 7
         *       .name()           // 1
         * This is because FileDescriptorProto.message_type has field number 4:
         *   repeated DescriptorProto message_type = 4;
         * and DescriptorProto.field has field number 2:
         *   repeated FieldDescriptorProto field = 2;
         * and FieldDescriptorProto.name has field number 1:
         *   optional string name = 1;
         *
         * Thus, the above path gives the location of a field name.  If we removed
         * the last element:
         *   [ 4, 3, 2, 7 ]
         * this path refers to the whole field declaration (from the beginning
         * of the label to the terminating semicolon).
         * </pre>
         */
        public int getPath(int index) {
          return path_.get(index);
        }
        /**
         * <code>repeated int32 path = 1 [packed = true];</code>
         *
         * <pre>
         * Identifies which part of the FileDescriptorProto was defined at this
         * location.
         *
         * Each element is a field number or an index.  They form a path from
         * the root FileDescriptorProto to the place where the definition.  For
         * example, this path:
         *   [ 4, 3, 2, 7, 1 ]
         * refers to:
         *   file.message_type(3)  // 4, 3
         *       .field(7)         // 2, 7
         *       .name()           // 1
         * This is because FileDescriptorProto.message_type has field number 4:
         *   repeated DescriptorProto message_type = 4;
         * and DescriptorProto.field has field number 2:
         *   repeated FieldDescriptorProto field = 2;
         * and FieldDescriptorProto.name has field number 1:
         *   optional string name = 1;
         *
         * Thus, the above path gives the location of a field name.  If we removed
         * the last element:
         *   [ 4, 3, 2, 7 ]
         * this path refers to the whole field declaration (from the beginning
         * of the label to the terminating semicolon).
         * </pre>
         */
        public Builder setPath(
            int index, int value) {
          ensurePathIsMutable();
          path_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated int32 path = 1 [packed = true];</code>
         *
         * <pre>
         * Identifies which part of the FileDescriptorProto was defined at this
         * location.
         *
         * Each element is a field number or an index.  They form a path from
         * the root FileDescriptorProto to the place where the definition.  For
         * example, this path:
         *   [ 4, 3, 2, 7, 1 ]
         * refers to:
         *   file.message_type(3)  // 4, 3
         *       .field(7)         // 2, 7
         *       .name()           // 1
         * This is because FileDescriptorProto.message_type has field number 4:
         *   repeated DescriptorProto message_type = 4;
         * and DescriptorProto.field has field number 2:
         *   repeated FieldDescriptorProto field = 2;
         * and FieldDescriptorProto.name has field number 1:
         *   optional string name = 1;
         *
         * Thus, the above path gives the location of a field name.  If we removed
         * the last element:
         *   [ 4, 3, 2, 7 ]
         * this path refers to the whole field declaration (from the beginning
         * of the label to the terminating semicolon).
         * </pre>
         */
        public Builder addPath(int value) {
          ensurePathIsMutable();
          path_.add(value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated int32 path = 1 [packed = true];</code>
         *
         * <pre>
         * Identifies which part of the FileDescriptorProto was defined at this
         * location.
         *
         * Each element is a field number or an index.  They form a path from
         * the root FileDescriptorProto to the place where the definition.  For
         * example, this path:
         *   [ 4, 3, 2, 7, 1 ]
         * refers to:
         *   file.message_type(3)  // 4, 3
         *       .field(7)         // 2, 7
         *       .name()           // 1
         * This is because FileDescriptorProto.message_type has field number 4:
         *   repeated DescriptorProto message_type = 4;
         * and DescriptorProto.field has field number 2:
         *   repeated FieldDescriptorProto field = 2;
         * and FieldDescriptorProto.name has field number 1:
         *   optional string name = 1;
         *
         * Thus, the above path gives the location of a field name.  If we removed
         * the last element:
         *   [ 4, 3, 2, 7 ]
         * this path refers to the whole field declaration (from the beginning
         * of the label to the terminating semicolon).
         * </pre>
         */
        public Builder addAllPath(
            java.lang.Iterable<? extends java.lang.Integer> values) {
          ensurePathIsMutable();
          super.addAll(values, path_);
          onChanged();
          return this;
        }
        /**
         * <code>repeated int32 path = 1 [packed = true];</code>
         *
         * <pre>
         * Identifies which part of the FileDescriptorProto was defined at this
         * location.
         *
         * Each element is a field number or an index.  They form a path from
         * the root FileDescriptorProto to the place where the definition.  For
         * example, this path:
         *   [ 4, 3, 2, 7, 1 ]
         * refers to:
         *   file.message_type(3)  // 4, 3
         *       .field(7)         // 2, 7
         *       .name()           // 1
         * This is because FileDescriptorProto.message_type has field number 4:
         *   repeated DescriptorProto message_type = 4;
         * and DescriptorProto.field has field number 2:
         *   repeated FieldDescriptorProto field = 2;
         * and FieldDescriptorProto.name has field number 1:
         *   optional string name = 1;
         *
         * Thus, the above path gives the location of a field name.  If we removed
         * the last element:
         *   [ 4, 3, 2, 7 ]
         * this path refers to the whole field declaration (from the beginning
         * of the label to the terminating semicolon).
         * </pre>
         */
        public Builder clearPath() {
          path_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
          return this;
        }

        // repeated int32 span = 2 [packed = true];
        private java.util.List<java.lang.Integer> span_ = java.util.Collections.emptyList();
        private void ensureSpanIsMutable() {
          if (!((bitField0_ & 0x00000002) == 0x00000002)) {
            span_ = new java.util.ArrayList<java.lang.Integer>(span_);
            bitField0_ |= 0x00000002;
           }
        }
        /**
         * <code>repeated int32 span = 2 [packed = true];</code>
         *
         * <pre>
         * Always has exactly three or four elements: start line, start column,
         * end line (optional, otherwise assumed same as start line), end column.
         * These are packed into a single field for efficiency.  Note that line
         * and column numbers are zero-based -- typically you will want to add
         * 1 to each before displaying to a user.
         * </pre>
         */
        public java.util.List<java.lang.Integer>
            getSpanList() {
          return java.util.Collections.unmodifiableList(span_);
        }
        /**
         * <code>repeated int32 span = 2 [packed = true];</code>
         *
         * <pre>
         * Always has exactly three or four elements: start line, start column,
         * end line (optional, otherwise assumed same as start line), end column.
         * These are packed into a single field for efficiency.  Note that line
         * and column numbers are zero-based -- typically you will want to add
         * 1 to each before displaying to a user.
         * </pre>
         */
        public int getSpanCount() {
          return span_.size();
        }
        /**
         * <code>repeated int32 span = 2 [packed = true];</code>
         *
         * <pre>
         * Always has exactly three or four elements: start line, start column,
         * end line (optional, otherwise assumed same as start line), end column.
         * These are packed into a single field for efficiency.  Note that line
         * and column numbers are zero-based -- typically you will want to add
         * 1 to each before displaying to a user.
         * </pre>
         */
        public int getSpan(int index) {
          return span_.get(index);
        }
        /**
         * <code>repeated int32 span = 2 [packed = true];</code>
         *
         * <pre>
         * Always has exactly three or four elements: start line, start column,
         * end line (optional, otherwise assumed same as start line), end column.
         * These are packed into a single field for efficiency.  Note that line
         * and column numbers are zero-based -- typically you will want to add
         * 1 to each before displaying to a user.
         * </pre>
         */
        public Builder setSpan(
            int index, int value) {
          ensureSpanIsMutable();
          span_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated int32 span = 2 [packed = true];</code>
         *
         * <pre>
         * Always has exactly three or four elements: start line, start column,
         * end line (optional, otherwise assumed same as start line), end column.
         * These are packed into a single field for efficiency.  Note that line
         * and column numbers are zero-based -- typically you will want to add
         * 1 to each before displaying to a user.
         * </pre>
         */
        public Builder addSpan(int value) {
          ensureSpanIsMutable();
          span_.add(value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated int32 span = 2 [packed = true];</code>
         *
         * <pre>
         * Always has exactly three or four elements: start line, start column,
         * end line (optional, otherwise assumed same as start line), end column.
         * These are packed into a single field for efficiency.  Note that line
         * and column numbers are zero-based -- typically you will want to add
         * 1 to each before displaying to a user.
         * </pre>
         */
        public Builder addAllSpan(
            java.lang.Iterable<? extends java.lang.Integer> values) {
          ensureSpanIsMutable();
          super.addAll(values, span_);
          onChanged();
          return this;
        }
        /**
         * <code>repeated int32 span = 2 [packed = true];</code>
         *
         * <pre>
         * Always has exactly three or four elements: start line, start column,
         * end line (optional, otherwise assumed same as start line), end column.
         * These are packed into a single field for efficiency.  Note that line
         * and column numbers are zero-based -- typically you will want to add
         * 1 to each before displaying to a user.
         * </pre>
         */
        public Builder clearSpan() {
          span_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
          return this;
        }

        // optional string leading_comments = 3;
        private java.lang.Object leadingComments_ = "";
        /**
         * <code>optional string leading_comments = 3;</code>
         *
         * <pre>
         * If this SourceCodeInfo represents a complete declaration, these are any
         * comments appearing before and after the declaration which appear to be
         * attached to the declaration.
         *
         * A series of line comments appearing on consecutive lines, with no other
         * tokens appearing on those lines, will be treated as a single comment.
         *
         * Only the comment content is provided; comment markers (e.g. //) are
         * stripped out.  For block comments, leading whitespace and an asterisk
         * will be stripped from the beginning of each line other than the first.
         * Newlines are included in the output.
         *
         * Examples:
         *
         *   optional int32 foo = 1;  // Comment attached to foo.
         *   // Comment attached to bar.
         *   optional int32 bar = 2;
         *
         *   optional string baz = 3;
         *   // Comment attached to baz.
         *   // Another line attached to baz.
         *
         *   // Comment attached to qux.
         *   //
         *   // Another line attached to qux.
         *   optional double qux = 4;
         *
         *   optional string corge = 5;
         *   /&#42; Block comment attached
         *    * to corge.  Leading asterisks
         *    * will be removed. *&#47;
         *   /&#42; Block comment attached to
         *    * grault. *&#47;
         *   optional int32 grault = 6;
         * </pre>
         */
        public boolean hasLeadingComments() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional string leading_comments = 3;</code>
         *
         * <pre>
         * If this SourceCodeInfo represents a complete declaration, these are any
         * comments appearing before and after the declaration which appear to be
         * attached to the declaration.
         *
         * A series of line comments appearing on consecutive lines, with no other
         * tokens appearing on those lines, will be treated as a single comment.
         *
         * Only the comment content is provided; comment markers (e.g. //) are
         * stripped out.  For block comments, leading whitespace and an asterisk
         * will be stripped from the beginning of each line other than the first.
         * Newlines are included in the output.
         *
         * Examples:
         *
         *   optional int32 foo = 1;  // Comment attached to foo.
         *   // Comment attached to bar.
         *   optional int32 bar = 2;
         *
         *   optional string baz = 3;
         *   // Comment attached to baz.
         *   // Another line attached to baz.
         *
         *   // Comment attached to qux.
         *   //
         *   // Another line attached to qux.
         *   optional double qux = 4;
         *
         *   optional string corge = 5;
         *   /&#42; Block comment attached
         *    * to corge.  Leading asterisks
         *    * will be removed. *&#47;
         *   /&#42; Block comment attached to
         *    * grault. *&#47;
         *   optional int32 grault = 6;
         * </pre>
         */
        public java.lang.String getLeadingComments() {
          java.lang.Object ref = leadingComments_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            leadingComments_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string leading_comments = 3;</code>
         *
         * <pre>
         * If this SourceCodeInfo represents a complete declaration, these are any
         * comments appearing before and after the declaration which appear to be
         * attached to the declaration.
         *
         * A series of line comments appearing on consecutive lines, with no other
         * tokens appearing on those lines, will be treated as a single comment.
         *
         * Only the comment content is provided; comment markers (e.g. //) are
         * stripped out.  For block comments, leading whitespace and an asterisk
         * will be stripped from the beginning of each line other than the first.
         * Newlines are included in the output.
         *
         * Examples:
         *
         *   optional int32 foo = 1;  // Comment attached to foo.
         *   // Comment attached to bar.
         *   optional int32 bar = 2;
         *
         *   optional string baz = 3;
         *   // Comment attached to baz.
         *   // Another line attached to baz.
         *
         *   // Comment attached to qux.
         *   //
         *   // Another line attached to qux.
         *   optional double qux = 4;
         *
         *   optional string corge = 5;
         *   /&#42; Block comment attached
         *    * to corge.  Leading asterisks
         *    * will be removed. *&#47;
         *   /&#42; Block comment attached to
         *    * grault. *&#47;
         *   optional int32 grault = 6;
         * </pre>
         */
        public com.google.protobuf.ByteString
            getLeadingCommentsBytes() {
          java.lang.Object ref = leadingComments_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            leadingComments_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string leading_comments = 3;</code>
         *
         * <pre>
         * If this SourceCodeInfo represents a complete declaration, these are any
         * comments appearing before and after the declaration which appear to be
         * attached to the declaration.
         *
         * A series of line comments appearing on consecutive lines, with no other
         * tokens appearing on those lines, will be treated as a single comment.
         *
         * Only the comment content is provided; comment markers (e.g. //) are
         * stripped out.  For block comments, leading whitespace and an asterisk
         * will be stripped from the beginning of each line other than the first.
         * Newlines are included in the output.
         *
         * Examples:
         *
         *   optional int32 foo = 1;  // Comment attached to foo.
         *   // Comment attached to bar.
         *   optional int32 bar = 2;
         *
         *   optional string baz = 3;
         *   // Comment attached to baz.
         *   // Another line attached to baz.
         *
         *   // Comment attached to qux.
         *   //
         *   // Another line attached to qux.
         *   optional double qux = 4;
         *
         *   optional string corge = 5;
         *   /&#42; Block comment attached
         *    * to corge.  Leading asterisks
         *    * will be removed. *&#47;
         *   /&#42; Block comment attached to
         *    * grault. *&#47;
         *   optional int32 grault = 6;
         * </pre>
         */
        public Builder setLeadingComments(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
          leadingComments_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string leading_comments = 3;</code>
         *
         * <pre>
         * If this SourceCodeInfo represents a complete declaration, these are any
         * comments appearing before and after the declaration which appear to be
         * attached to the declaration.
         *
         * A series of line comments appearing on consecutive lines, with no other
         * tokens appearing on those lines, will be treated as a single comment.
         *
         * Only the comment content is provided; comment markers (e.g. //) are
         * stripped out.  For block comments, leading whitespace and an asterisk
         * will be stripped from the beginning of each line other than the first.
         * Newlines are included in the output.
         *
         * Examples:
         *
         *   optional int32 foo = 1;  // Comment attached to foo.
         *   // Comment attached to bar.
         *   optional int32 bar = 2;
         *
         *   optional string baz = 3;
         *   // Comment attached to baz.
         *   // Another line attached to baz.
         *
         *   // Comment attached to qux.
         *   //
         *   // Another line attached to qux.
         *   optional double qux = 4;
         *
         *   optional string corge = 5;
         *   /&#42; Block comment attached
         *    * to corge.  Leading asterisks
         *    * will be removed. *&#47;
         *   /&#42; Block comment attached to
         *    * grault. *&#47;
         *   optional int32 grault = 6;
         * </pre>
         */
        public Builder clearLeadingComments() {
          bitField0_ = (bitField0_ & ~0x00000004);
          leadingComments_ = getDefaultInstance().getLeadingComments();
          onChanged();
          return this;
        }
        /**
         * <code>optional string leading_comments = 3;</code>
         *
         * <pre>
         * If this SourceCodeInfo represents a complete declaration, these are any
         * comments appearing before and after the declaration which appear to be
         * attached to the declaration.
         *
         * A series of line comments appearing on consecutive lines, with no other
         * tokens appearing on those lines, will be treated as a single comment.
         *
         * Only the comment content is provided; comment markers (e.g. //) are
         * stripped out.  For block comments, leading whitespace and an asterisk
         * will be stripped from the beginning of each line other than the first.
         * Newlines are included in the output.
         *
         * Examples:
         *
         *   optional int32 foo = 1;  // Comment attached to foo.
         *   // Comment attached to bar.
         *   optional int32 bar = 2;
         *
         *   optional string baz = 3;
         *   // Comment attached to baz.
         *   // Another line attached to baz.
         *
         *   // Comment attached to qux.
         *   //
         *   // Another line attached to qux.
         *   optional double qux = 4;
         *
         *   optional string corge = 5;
         *   /&#42; Block comment attached
         *    * to corge.  Leading asterisks
         *    * will be removed. *&#47;
         *   /&#42; Block comment attached to
         *    * grault. *&#47;
         *   optional int32 grault = 6;
         * </pre>
         */
        public Builder setLeadingCommentsBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
          leadingComments_ = value;
          onChanged();
          return this;
        }

        // optional string trailing_comments = 4;
        private java.lang.Object trailingComments_ = "";
        /**
         * <code>optional string trailing_comments = 4;</code>
         */
        public boolean hasTrailingComments() {
          return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional string trailing_comments = 4;</code>
         */
        public java.lang.String getTrailingComments() {
          java.lang.Object ref = trailingComments_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            trailingComments_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string trailing_comments = 4;</code>
         */
        public com.google.protobuf.ByteString
            getTrailingCommentsBytes() {
          java.lang.Object ref = trailingComments_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            trailingComments_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string trailing_comments = 4;</code>
         */
        public Builder setTrailingComments(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
          trailingComments_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string trailing_comments = 4;</code>
         */
        public Builder clearTrailingComments() {
          bitField0_ = (bitField0_ & ~0x00000008);
          trailingComments_ = getDefaultInstance().getTrailingComments();
          onChanged();
          return this;
        }
        /**
         * <code>optional string trailing_comments = 4;</code>
         */
        public Builder setTrailingCommentsBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
          trailingComments_ = value;
          onChanged();
          return this;
        }

        // @@protoc_insertion_point(builder_scope:google.protobuf.SourceCodeInfo.Location)
      }

      static {
        defaultInstance = new Location(true);
        defaultInstance.initFields();
      }

      // @@protoc_insertion_point(class_scope:google.protobuf.SourceCodeInfo.Location)
    }

    // repeated .google.protobuf.SourceCodeInfo.Location location = 1;
    public static final int LOCATION_FIELD_NUMBER = 1;
    private java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> location_;
    /**
     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
     *
     * <pre>
     * A Location identifies a piece of source code in a .proto file which
     * corresponds to a particular definition.  This information is intended
     * to be useful to IDEs, code indexers, documentation generators, and similar
     * tools.
     *
     * For example, say we have a file like:
     *   message Foo {
     *     optional string foo = 1;
     *   }
     * Let's look at just the field definition:
     *   optional string foo = 1;
     *   ^       ^^     ^^  ^  ^^^
     *   a       bc     de  f  ghi
     * We have the following locations:
     *   span   path               represents
     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     *
     * Notes:
     * - A location may refer to a repeated field itself (i.e. not to any
     *   particular index within it).  This is used whenever a set of elements are
     *   logically enclosed in a single code segment.  For example, an entire
     *   extend block (possibly containing multiple extension definitions) will
     *   have an outer location whose path refers to the "extensions" repeated
     *   field without an index.
     * - Multiple locations may have the same path.  This happens when a single
     *   logical declaration is spread out across multiple places.  The most
     *   obvious example is the "extend" block again -- there may be multiple
     *   extend blocks in the same scope, each of which will have the same path.
     * - A location's span is not always a subset of its parent's span.  For
     *   example, the "extendee" of an extension declaration appears at the
     *   beginning of the "extend" block and is shared by all extensions within
     *   the block.
     * - Just because a location's span is a subset of some other location's span
     *   does not mean that it is a descendent.  For example, a "group" defines
     *   both a type and a field in a single declaration.  Thus, the locations
     *   corresponding to the type and field and their components will overlap.
     * - Code which tries to interpret locations should probably be designed to
     *   ignore those that it doesn't understand, as more types of locations could
     *   be recorded in the future.
     * </pre>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> getLocationList() {
      return location_;
    }
    /**
     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
     *
     * <pre>
     * A Location identifies a piece of source code in a .proto file which
     * corresponds to a particular definition.  This information is intended
     * to be useful to IDEs, code indexers, documentation generators, and similar
     * tools.
     *
     * For example, say we have a file like:
     *   message Foo {
     *     optional string foo = 1;
     *   }
     * Let's look at just the field definition:
     *   optional string foo = 1;
     *   ^       ^^     ^^  ^  ^^^
     *   a       bc     de  f  ghi
     * We have the following locations:
     *   span   path               represents
     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     *
     * Notes:
     * - A location may refer to a repeated field itself (i.e. not to any
     *   particular index within it).  This is used whenever a set of elements are
     *   logically enclosed in a single code segment.  For example, an entire
     *   extend block (possibly containing multiple extension definitions) will
     *   have an outer location whose path refers to the "extensions" repeated
     *   field without an index.
     * - Multiple locations may have the same path.  This happens when a single
     *   logical declaration is spread out across multiple places.  The most
     *   obvious example is the "extend" block again -- there may be multiple
     *   extend blocks in the same scope, each of which will have the same path.
     * - A location's span is not always a subset of its parent's span.  For
     *   example, the "extendee" of an extension declaration appears at the
     *   beginning of the "extend" block and is shared by all extensions within
     *   the block.
     * - Just because a location's span is a subset of some other location's span
     *   does not mean that it is a descendent.  For example, a "group" defines
     *   both a type and a field in a single declaration.  Thus, the locations
     *   corresponding to the type and field and their components will overlap.
     * - Code which tries to interpret locations should probably be designed to
     *   ignore those that it doesn't understand, as more types of locations could
     *   be recorded in the future.
     * </pre>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder> 
        getLocationOrBuilderList() {
      return location_;
    }
    /**
     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
     *
     * <pre>
     * A Location identifies a piece of source code in a .proto file which
     * corresponds to a particular definition.  This information is intended
     * to be useful to IDEs, code indexers, documentation generators, and similar
     * tools.
     *
     * For example, say we have a file like:
     *   message Foo {
     *     optional string foo = 1;
     *   }
     * Let's look at just the field definition:
     *   optional string foo = 1;
     *   ^       ^^     ^^  ^  ^^^
     *   a       bc     de  f  ghi
     * We have the following locations:
     *   span   path               represents
     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     *
     * Notes:
     * - A location may refer to a repeated field itself (i.e. not to any
     *   particular index within it).  This is used whenever a set of elements are
     *   logically enclosed in a single code segment.  For example, an entire
     *   extend block (possibly containing multiple extension definitions) will
     *   have an outer location whose path refers to the "extensions" repeated
     *   field without an index.
     * - Multiple locations may have the same path.  This happens when a single
     *   logical declaration is spread out across multiple places.  The most
     *   obvious example is the "extend" block again -- there may be multiple
     *   extend blocks in the same scope, each of which will have the same path.
     * - A location's span is not always a subset of its parent's span.  For
     *   example, the "extendee" of an extension declaration appears at the
     *   beginning of the "extend" block and is shared by all extensions within
     *   the block.
     * - Just because a location's span is a subset of some other location's span
     *   does not mean that it is a descendent.  For example, a "group" defines
     *   both a type and a field in a single declaration.  Thus, the locations
     *   corresponding to the type and field and their components will overlap.
     * - Code which tries to interpret locations should probably be designed to
     *   ignore those that it doesn't understand, as more types of locations could
     *   be recorded in the future.
     * </pre>
     */
    public int getLocationCount() {
      return location_.size();
    }
    /**
     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
     *
     * <pre>
     * A Location identifies a piece of source code in a .proto file which
     * corresponds to a particular definition.  This information is intended
     * to be useful to IDEs, code indexers, documentation generators, and similar
     * tools.
     *
     * For example, say we have a file like:
     *   message Foo {
     *     optional string foo = 1;
     *   }
     * Let's look at just the field definition:
     *   optional string foo = 1;
     *   ^       ^^     ^^  ^  ^^^
     *   a       bc     de  f  ghi
     * We have the following locations:
     *   span   path               represents
     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     *
     * Notes:
     * - A location may refer to a repeated field itself (i.e. not to any
     *   particular index within it).  This is used whenever a set of elements are
     *   logically enclosed in a single code segment.  For example, an entire
     *   extend block (possibly containing multiple extension definitions) will
     *   have an outer location whose path refers to the "extensions" repeated
     *   field without an index.
     * - Multiple locations may have the same path.  This happens when a single
     *   logical declaration is spread out across multiple places.  The most
     *   obvious example is the "extend" block again -- there may be multiple
     *   extend blocks in the same scope, each of which will have the same path.
     * - A location's span is not always a subset of its parent's span.  For
     *   example, the "extendee" of an extension declaration appears at the
     *   beginning of the "extend" block and is shared by all extensions within
     *   the block.
     * - Just because a location's span is a subset of some other location's span
     *   does not mean that it is a descendent.  For example, a "group" defines
     *   both a type and a field in a single declaration.  Thus, the locations
     *   corresponding to the type and field and their components will overlap.
     * - Code which tries to interpret locations should probably be designed to
     *   ignore those that it doesn't understand, as more types of locations could
     *   be recorded in the future.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location getLocation(int index) {
      return location_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
     *
     * <pre>
     * A Location identifies a piece of source code in a .proto file which
     * corresponds to a particular definition.  This information is intended
     * to be useful to IDEs, code indexers, documentation generators, and similar
     * tools.
     *
     * For example, say we have a file like:
     *   message Foo {
     *     optional string foo = 1;
     *   }
     * Let's look at just the field definition:
     *   optional string foo = 1;
     *   ^       ^^     ^^  ^  ^^^
     *   a       bc     de  f  ghi
     * We have the following locations:
     *   span   path               represents
     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     *
     * Notes:
     * - A location may refer to a repeated field itself (i.e. not to any
     *   particular index within it).  This is used whenever a set of elements are
     *   logically enclosed in a single code segment.  For example, an entire
     *   extend block (possibly containing multiple extension definitions) will
     *   have an outer location whose path refers to the "extensions" repeated
     *   field without an index.
     * - Multiple locations may have the same path.  This happens when a single
     *   logical declaration is spread out across multiple places.  The most
     *   obvious example is the "extend" block again -- there may be multiple
     *   extend blocks in the same scope, each of which will have the same path.
     * - A location's span is not always a subset of its parent's span.  For
     *   example, the "extendee" of an extension declaration appears at the
     *   beginning of the "extend" block and is shared by all extensions within
     *   the block.
     * - Just because a location's span is a subset of some other location's span
     *   does not mean that it is a descendent.  For example, a "group" defines
     *   both a type and a field in a single declaration.  Thus, the locations
     *   corresponding to the type and field and their components will overlap.
     * - Code which tries to interpret locations should probably be designed to
     *   ignore those that it doesn't understand, as more types of locations could
     *   be recorded in the future.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder getLocationOrBuilder(
        int index) {
      return location_.get(index);
    }

    private void initFields() {
      location_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < location_.size(); i++) {
        output.writeMessage(1, location_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < location_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, location_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.SourceCodeInfo prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.SourceCodeInfo}
     *
     * <pre>
     * Encapsulates information about the original source file from which a
     * FileDescriptorProto was generated.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.protobuf.DescriptorProtos.SourceCodeInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return internal_static_google_protobuf_SourceCodeInfo_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return internal_static_google_protobuf_SourceCodeInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                    com.google.protobuf.DescriptorProtos.SourceCodeInfo.class, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.SourceCodeInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (alwaysUseFieldBuilders) {
          getLocationFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (locationBuilder_ == null) {
          location_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          locationBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return internal_static_google_protobuf_SourceCodeInfo_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.SourceCodeInfo getDefaultInstanceForType() {
        return getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.SourceCodeInfo build() {
        com.google.protobuf.DescriptorProtos.SourceCodeInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.SourceCodeInfo buildPartial() {
        com.google.protobuf.DescriptorProtos.SourceCodeInfo result = new com.google.protobuf.DescriptorProtos.SourceCodeInfo(this);
        int from_bitField0_ = bitField0_;
        if (locationBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            location_ = java.util.Collections.unmodifiableList(location_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.location_ = location_;
        } else {
          result.location_ = locationBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.SourceCodeInfo) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.SourceCodeInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.SourceCodeInfo other) {
        if (other == getDefaultInstance()) return this;
        if (locationBuilder_ == null) {
          if (!other.location_.isEmpty()) {
            if (location_.isEmpty()) {
              location_ = other.location_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureLocationIsMutable();
              location_.addAll(other.location_);
            }
            onChanged();
          }
        } else {
          if (!other.location_.isEmpty()) {
            if (locationBuilder_.isEmpty()) {
              locationBuilder_.dispose();
              locationBuilder_ = null;
              location_ = other.location_;
              bitField0_ = (bitField0_ & ~0x00000001);
              locationBuilder_ = 
                alwaysUseFieldBuilders ?
                   getLocationFieldBuilder() : null;
            } else {
              locationBuilder_.addAllMessages(other.location_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        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 {
        com.google.protobuf.DescriptorProtos.SourceCodeInfo parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.protobuf.DescriptorProtos.SourceCodeInfo) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // repeated .google.protobuf.SourceCodeInfo.Location location = 1;
      private java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> location_ =
        java.util.Collections.emptyList();
      private void ensureLocationIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          location_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location>(location_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder, com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder> locationBuilder_;

      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       *
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       *
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> getLocationList() {
        if (locationBuilder_ == null) {
          return java.util.Collections.unmodifiableList(location_);
        } else {
          return locationBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       *
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       *
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public int getLocationCount() {
        if (locationBuilder_ == null) {
          return location_.size();
        } else {
          return locationBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       *
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       *
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location getLocation(int index) {
        if (locationBuilder_ == null) {
          return location_.get(index);
        } else {
          return locationBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       *
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       *
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public Builder setLocation(
          int index, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location value) {
        if (locationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureLocationIsMutable();
          location_.set(index, value);
          onChanged();
        } else {
          locationBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       *
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       *
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public Builder setLocation(
          int index, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder builderForValue) {
        if (locationBuilder_ == null) {
          ensureLocationIsMutable();
          location_.set(index, builderForValue.build());
          onChanged();
        } else {
          locationBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       *
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       *
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public Builder addLocation(com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location value) {
        if (locationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureLocationIsMutable();
          location_.add(value);
          onChanged();
        } else {
          locationBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       *
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       *
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public Builder addLocation(
          int index, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location value) {
        if (locationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureLocationIsMutable();
          location_.add(index, value);
          onChanged();
        } else {
          locationBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       *
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       *
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public Builder addLocation(
          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder builderForValue) {
        if (locationBuilder_ == null) {
          ensureLocationIsMutable();
          location_.add(builderForValue.build());
          onChanged();
        } else {
          locationBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       *
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       *
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public Builder addLocation(
          int index, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder builderForValue) {
        if (locationBuilder_ == null) {
          ensureLocationIsMutable();
          location_.add(index, builderForValue.build());
          onChanged();
        } else {
          locationBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       *
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       *
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public Builder addAllLocation(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> values) {
        if (locationBuilder_ == null) {
          ensureLocationIsMutable();
          super.addAll(values, location_);
          onChanged();
        } else {
          locationBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       *
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       *
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public Builder clearLocation() {
        if (locationBuilder_ == null) {
          location_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          locationBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       *
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       *
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public Builder removeLocation(int index) {
        if (locationBuilder_ == null) {
          ensureLocationIsMutable();
          location_.remove(index);
          onChanged();
        } else {
          locationBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       *
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       *
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder getLocationBuilder(
          int index) {
        return getLocationFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       *
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       *
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder getLocationOrBuilder(
          int index) {
        if (locationBuilder_ == null) {
          return location_.get(index);  } else {
          return locationBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       *
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       *
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder> 
           getLocationOrBuilderList() {
        if (locationBuilder_ != null) {
          return locationBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(location_);
        }
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       *
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       *
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder addLocationBuilder() {
        return getLocationFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       *
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       *
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder addLocationBuilder(
          int index) {
        return getLocationFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       *
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       *
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder> 
           getLocationBuilderList() {
        return getLocationFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder, com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder> 
          getLocationFieldBuilder() {
        if (locationBuilder_ == null) {
          locationBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder, com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder>(
                  location_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          location_ = null;
        }
        return locationBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.SourceCodeInfo)
    }

    static {
      defaultInstance = new SourceCodeInfo(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.SourceCodeInfo)
  }

  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_FileDescriptorSet_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_FileDescriptorProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_DescriptorProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_DescriptorProto_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_FieldDescriptorProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_FieldDescriptorProto_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_EnumDescriptorProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_EnumDescriptorProto_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_EnumValueDescriptorProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_EnumValueDescriptorProto_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_ServiceDescriptorProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_ServiceDescriptorProto_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_MethodDescriptorProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_MethodDescriptorProto_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_FileOptions_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_FileOptions_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_MessageOptions_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_MessageOptions_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_FieldOptions_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_FieldOptions_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_EnumOptions_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_EnumOptions_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_EnumValueOptions_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_EnumValueOptions_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_ServiceOptions_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_ServiceOptions_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_MethodOptions_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_MethodOptions_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_UninterpretedOption_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_UninterpretedOption_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_UninterpretedOption_NamePart_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_SourceCodeInfo_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_SourceCodeInfo_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_SourceCodeInfo_Location_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_SourceCodeInfo_Location_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n google/protobuf/descriptor.proto\022\017goog" +
      "le.protobuf\"G\n\021FileDescriptorSet\0222\n\004file" +
      "\030\001 \003(\0132$.google.protobuf.FileDescriptorP" +
      "roto\"\313\003\n\023FileDescriptorProto\022\014\n\004name\030\001 \001" +
      "(\t\022\017\n\007package\030\002 \001(\t\022\022\n\ndependency\030\003 \003(\t\022" +
      "\031\n\021public_dependency\030\n \003(\005\022\027\n\017weak_depen" +
      "dency\030\013 \003(\005\0226\n\014message_type\030\004 \003(\0132 .goog" +
      "le.protobuf.DescriptorProto\0227\n\tenum_type" +
      "\030\005 \003(\0132$.google.protobuf.EnumDescriptorP" +
      "roto\0228\n\007service\030\006 \003(\0132\'.google.protobuf.",
      "ServiceDescriptorProto\0228\n\textension\030\007 \003(" +
      "\0132%.google.protobuf.FieldDescriptorProto" +
      "\022-\n\007options\030\010 \001(\0132\034.google.protobuf.File" +
      "Options\0229\n\020source_code_info\030\t \001(\0132\037.goog" +
      "le.protobuf.SourceCodeInfo\"\251\003\n\017Descripto" +
      "rProto\022\014\n\004name\030\001 \001(\t\0224\n\005field\030\002 \003(\0132%.go" +
      "ogle.protobuf.FieldDescriptorProto\0228\n\tex" +
      "tension\030\006 \003(\0132%.google.protobuf.FieldDes" +
      "criptorProto\0225\n\013nested_type\030\003 \003(\0132 .goog" +
      "le.protobuf.DescriptorProto\0227\n\tenum_type",
      "\030\004 \003(\0132$.google.protobuf.EnumDescriptorP" +
      "roto\022H\n\017extension_range\030\005 \003(\0132/.google.p" +
      "rotobuf.DescriptorProto.ExtensionRange\0220" +
      "\n\007options\030\007 \001(\0132\037.google.protobuf.Messag" +
      "eOptions\032,\n\016ExtensionRange\022\r\n\005start\030\001 \001(" +
      "\005\022\013\n\003end\030\002 \001(\005\"\224\005\n\024FieldDescriptorProto\022" +
      "\014\n\004name\030\001 \001(\t\022\016\n\006number\030\003 \001(\005\022:\n\005label\030\004" +
      " \001(\0162+.google.protobuf.FieldDescriptorPr" +
      "oto.Label\0228\n\004type\030\005 \001(\0162*.google.protobu" +
      "f.FieldDescriptorProto.Type\022\021\n\ttype_name",
      "\030\006 \001(\t\022\020\n\010extendee\030\002 \001(\t\022\025\n\rdefault_valu" +
      "e\030\007 \001(\t\022.\n\007options\030\010 \001(\0132\035.google.protob" +
      "uf.FieldOptions\"\266\002\n\004Type\022\017\n\013TYPE_DOUBLE\020" +
      "\001\022\016\n\nTYPE_FLOAT\020\002\022\016\n\nTYPE_INT64\020\003\022\017\n\013TYP" +
      "E_UINT64\020\004\022\016\n\nTYPE_INT32\020\005\022\020\n\014TYPE_FIXED" +
      "64\020\006\022\020\n\014TYPE_FIXED32\020\007\022\r\n\tTYPE_BOOL\020\010\022\017\n" +
      "\013TYPE_STRING\020\t\022\016\n\nTYPE_GROUP\020\n\022\020\n\014TYPE_M" +
      "ESSAGE\020\013\022\016\n\nTYPE_BYTES\020\014\022\017\n\013TYPE_UINT32\020" +
      "\r\022\r\n\tTYPE_ENUM\020\016\022\021\n\rTYPE_SFIXED32\020\017\022\021\n\rT" +
      "YPE_SFIXED64\020\020\022\017\n\013TYPE_SINT32\020\021\022\017\n\013TYPE_",
      "SINT64\020\022\"C\n\005Label\022\022\n\016LABEL_OPTIONAL\020\001\022\022\n" +
      "\016LABEL_REQUIRED\020\002\022\022\n\016LABEL_REPEATED\020\003\"\214\001" +
      "\n\023EnumDescriptorProto\022\014\n\004name\030\001 \001(\t\0228\n\005v" +
      "alue\030\002 \003(\0132).google.protobuf.EnumValueDe" +
      "scriptorProto\022-\n\007options\030\003 \001(\0132\034.google." +
      "protobuf.EnumOptions\"l\n\030EnumValueDescrip" +
      "torProto\022\014\n\004name\030\001 \001(\t\022\016\n\006number\030\002 \001(\005\0222" +
      "\n\007options\030\003 \001(\0132!.google.protobuf.EnumVa" +
      "lueOptions\"\220\001\n\026ServiceDescriptorProto\022\014\n" +
      "\004name\030\001 \001(\t\0226\n\006method\030\002 \003(\0132&.google.pro",
      "tobuf.MethodDescriptorProto\0220\n\007options\030\003" +
      " \001(\0132\037.google.protobuf.ServiceOptions\"\177\n" +
      "\025MethodDescriptorProto\022\014\n\004name\030\001 \001(\t\022\022\n\n" +
      "input_type\030\002 \001(\t\022\023\n\013output_type\030\003 \001(\t\022/\n" +
      "\007options\030\004 \001(\0132\036.google.protobuf.MethodO" +
      "ptions\"\351\003\n\013FileOptions\022\024\n\014java_package\030\001" +
      " \001(\t\022\034\n\024java_outer_classname\030\010 \001(\t\022\"\n\023ja" +
      "va_multiple_files\030\n \001(\010:\005false\022,\n\035java_g" +
      "enerate_equals_and_hash\030\024 \001(\010:\005false\022F\n\014" +
      "optimize_for\030\t \001(\0162).google.protobuf.Fil",
      "eOptions.OptimizeMode:\005SPEED\022\022\n\ngo_packa" +
      "ge\030\013 \001(\t\022\"\n\023cc_generic_services\030\020 \001(\010:\005f" +
      "alse\022$\n\025java_generic_services\030\021 \001(\010:\005fal" +
      "se\022\"\n\023py_generic_services\030\022 \001(\010:\005false\022C" +
      "\n\024uninterpreted_option\030\347\007 \003(\0132$.google.p" +
      "rotobuf.UninterpretedOption\":\n\014OptimizeM" +
      "ode\022\t\n\005SPEED\020\001\022\r\n\tCODE_SIZE\020\002\022\020\n\014LITE_RU" +
      "NTIME\020\003*\t\010\350\007\020\200\200\200\200\002\"\270\001\n\016MessageOptions\022&\n" +
      "\027message_set_wire_format\030\001 \001(\010:\005false\022.\n" +
      "\037no_standard_descriptor_accessor\030\002 \001(\010:\005",
      "false\022C\n\024uninterpreted_option\030\347\007 \003(\0132$.g" +
      "oogle.protobuf.UninterpretedOption*\t\010\350\007\020" +
      "\200\200\200\200\002\"\276\002\n\014FieldOptions\022:\n\005ctype\030\001 \001(\0162#." +
      "google.protobuf.FieldOptions.CType:\006STRI" +
      "NG\022\016\n\006packed\030\002 \001(\010\022\023\n\004lazy\030\005 \001(\010:\005false\022" +
      "\031\n\ndeprecated\030\003 \001(\010:\005false\022\034\n\024experiment" +
      "al_map_key\030\t \001(\t\022\023\n\004weak\030\n \001(\010:\005false\022C\n" +
      "\024uninterpreted_option\030\347\007 \003(\0132$.google.pr" +
      "otobuf.UninterpretedOption\"/\n\005CType\022\n\n\006S" +
      "TRING\020\000\022\010\n\004CORD\020\001\022\020\n\014STRING_PIECE\020\002*\t\010\350\007",
      "\020\200\200\200\200\002\"x\n\013EnumOptions\022\031\n\013allow_alias\030\002 \001" +
      "(\010:\004true\022C\n\024uninterpreted_option\030\347\007 \003(\0132" +
      "$.google.protobuf.UninterpretedOption*\t\010" +
      "\350\007\020\200\200\200\200\002\"b\n\020EnumValueOptions\022C\n\024uninterp" +
      "reted_option\030\347\007 \003(\0132$.google.protobuf.Un" +
      "interpretedOption*\t\010\350\007\020\200\200\200\200\002\"`\n\016ServiceO" +
      "ptions\022C\n\024uninterpreted_option\030\347\007 \003(\0132$." +
      "google.protobuf.UninterpretedOption*\t\010\350\007" +
      "\020\200\200\200\200\002\"_\n\rMethodOptions\022C\n\024uninterpreted" +
      "_option\030\347\007 \003(\0132$.google.protobuf.Uninter",
      "pretedOption*\t\010\350\007\020\200\200\200\200\002\"\236\002\n\023Uninterprete" +
      "dOption\022;\n\004name\030\002 \003(\0132-.google.protobuf." +
      "UninterpretedOption.NamePart\022\030\n\020identifi" +
      "er_value\030\003 \001(\t\022\032\n\022positive_int_value\030\004 \001" +
      "(\004\022\032\n\022negative_int_value\030\005 \001(\003\022\024\n\014double" +
      "_value\030\006 \001(\001\022\024\n\014string_value\030\007 \001(\014\022\027\n\017ag" +
      "gregate_value\030\010 \001(\t\0323\n\010NamePart\022\021\n\tname_" +
      "part\030\001 \002(\t\022\024\n\014is_extension\030\002 \002(\010\"\261\001\n\016Sou" +
      "rceCodeInfo\022:\n\010location\030\001 \003(\0132(.google.p" +
      "rotobuf.SourceCodeInfo.Location\032c\n\010Locat",
      "ion\022\020\n\004path\030\001 \003(\005B\002\020\001\022\020\n\004span\030\002 \003(\005B\002\020\001\022" +
      "\030\n\020leading_comments\030\003 \001(\t\022\031\n\021trailing_co" +
      "mments\030\004 \001(\tB)\n\023com.google.protobufB\020Des" +
      "criptorProtosH\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;
          internal_static_google_protobuf_FileDescriptorSet_descriptor =
            getDescriptor().getMessageTypes().get(0);
          internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_google_protobuf_FileDescriptorSet_descriptor,
              new java.lang.String[] { "File", });
          internal_static_google_protobuf_FileDescriptorProto_descriptor =
            getDescriptor().getMessageTypes().get(1);
          internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_google_protobuf_FileDescriptorProto_descriptor,
              new java.lang.String[] { "Name", "Package", "Dependency", "PublicDependency", "WeakDependency", "MessageType", "EnumType", "Service", "Extension", "Options", "SourceCodeInfo", });
          internal_static_google_protobuf_DescriptorProto_descriptor =
            getDescriptor().getMessageTypes().get(2);
          internal_static_google_protobuf_DescriptorProto_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_google_protobuf_DescriptorProto_descriptor,
              new java.lang.String[] { "Name", "Field", "Extension", "NestedType", "EnumType", "ExtensionRange", "Options", });
          internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor =
            internal_static_google_protobuf_DescriptorProto_descriptor.getNestedTypes().get(0);
          internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor,
              new java.lang.String[] { "Start", "End", });
          internal_static_google_protobuf_FieldDescriptorProto_descriptor =
            getDescriptor().getMessageTypes().get(3);
          internal_static_google_protobuf_FieldDescriptorProto_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_google_protobuf_FieldDescriptorProto_descriptor,
              new java.lang.String[] { "Name", "Number", "Label", "Type", "TypeName", "Extendee", "DefaultValue", "Options", });
          internal_static_google_protobuf_EnumDescriptorProto_descriptor =
            getDescriptor().getMessageTypes().get(4);
          internal_static_google_protobuf_EnumDescriptorProto_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_google_protobuf_EnumDescriptorProto_descriptor,
              new java.lang.String[] { "Name", "Value", "Options", });
          internal_static_google_protobuf_EnumValueDescriptorProto_descriptor =
            getDescriptor().getMessageTypes().get(5);
          internal_static_google_protobuf_EnumValueDescriptorProto_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_google_protobuf_EnumValueDescriptorProto_descriptor,
              new java.lang.String[] { "Name", "Number", "Options", });
          internal_static_google_protobuf_ServiceDescriptorProto_descriptor =
            getDescriptor().getMessageTypes().get(6);
          internal_static_google_protobuf_ServiceDescriptorProto_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_google_protobuf_ServiceDescriptorProto_descriptor,
              new java.lang.String[] { "Name", "Method", "Options", });
          internal_static_google_protobuf_MethodDescriptorProto_descriptor =
            getDescriptor().getMessageTypes().get(7);
          internal_static_google_protobuf_MethodDescriptorProto_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_google_protobuf_MethodDescriptorProto_descriptor,
              new java.lang.String[] { "Name", "InputType", "OutputType", "Options", });
          internal_static_google_protobuf_FileOptions_descriptor =
            getDescriptor().getMessageTypes().get(8);
          internal_static_google_protobuf_FileOptions_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_google_protobuf_FileOptions_descriptor,
              new java.lang.String[] { "JavaPackage", "JavaOuterClassname", "JavaMultipleFiles", "JavaGenerateEqualsAndHash", "OptimizeFor", "GoPackage", "CcGenericServices", "JavaGenericServices", "PyGenericServices", "UninterpretedOption", });
          internal_static_google_protobuf_MessageOptions_descriptor =
            getDescriptor().getMessageTypes().get(9);
          internal_static_google_protobuf_MessageOptions_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_google_protobuf_MessageOptions_descriptor,
              new java.lang.String[] { "MessageSetWireFormat", "NoStandardDescriptorAccessor", "UninterpretedOption", });
          internal_static_google_protobuf_FieldOptions_descriptor =
            getDescriptor().getMessageTypes().get(10);
          internal_static_google_protobuf_FieldOptions_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_google_protobuf_FieldOptions_descriptor,
              new java.lang.String[] { "Ctype", "Packed", "Lazy", "Deprecated", "ExperimentalMapKey", "Weak", "UninterpretedOption", });
          internal_static_google_protobuf_EnumOptions_descriptor =
            getDescriptor().getMessageTypes().get(11);
          internal_static_google_protobuf_EnumOptions_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_google_protobuf_EnumOptions_descriptor,
              new java.lang.String[] { "AllowAlias", "UninterpretedOption", });
          internal_static_google_protobuf_EnumValueOptions_descriptor =
            getDescriptor().getMessageTypes().get(12);
          internal_static_google_protobuf_EnumValueOptions_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_google_protobuf_EnumValueOptions_descriptor,
              new java.lang.String[] { "UninterpretedOption", });
          internal_static_google_protobuf_ServiceOptions_descriptor =
            getDescriptor().getMessageTypes().get(13);
          internal_static_google_protobuf_ServiceOptions_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_google_protobuf_ServiceOptions_descriptor,
              new java.lang.String[] { "UninterpretedOption", });
          internal_static_google_protobuf_MethodOptions_descriptor =
            getDescriptor().getMessageTypes().get(14);
          internal_static_google_protobuf_MethodOptions_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_google_protobuf_MethodOptions_descriptor,
              new java.lang.String[] { "UninterpretedOption", });
          internal_static_google_protobuf_UninterpretedOption_descriptor =
            getDescriptor().getMessageTypes().get(15);
          internal_static_google_protobuf_UninterpretedOption_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_google_protobuf_UninterpretedOption_descriptor,
              new java.lang.String[] { "Name", "IdentifierValue", "PositiveIntValue", "NegativeIntValue", "DoubleValue", "StringValue", "AggregateValue", });
          internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor =
            internal_static_google_protobuf_UninterpretedOption_descriptor.getNestedTypes().get(0);
          internal_static_google_protobuf_UninterpretedOption_NamePart_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor,
              new java.lang.String[] { "NamePart", "IsExtension", });
          internal_static_google_protobuf_SourceCodeInfo_descriptor =
            getDescriptor().getMessageTypes().get(16);
          internal_static_google_protobuf_SourceCodeInfo_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_google_protobuf_SourceCodeInfo_descriptor,
              new java.lang.String[] { "Location", });
          internal_static_google_protobuf_SourceCodeInfo_Location_descriptor =
            internal_static_google_protobuf_SourceCodeInfo_descriptor.getNestedTypes().get(0);
          internal_static_google_protobuf_SourceCodeInfo_Location_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_google_protobuf_SourceCodeInfo_Location_descriptor,
              new java.lang.String[] { "Path", "Span", "LeadingComments", "TrailingComments", });
          return null;
        }
      };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        }