// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: src/osmformat.proto

package crosby.binary;

public final class Osmformat {
  private Osmformat() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
  }
  public static final class HeaderBlock extends
      com.google.protobuf.GeneratedMessage {
    // Use HeaderBlock.newBuilder() to construct.
    private HeaderBlock() {
      initFields();
    }
    private HeaderBlock(boolean noInit) {}
    
    private static final HeaderBlock defaultInstance;
    public static HeaderBlock getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public HeaderBlock getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return crosby.binary.Osmformat.internal_static_HeaderBlock_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return crosby.binary.Osmformat.internal_static_HeaderBlock_fieldAccessorTable;
    }
    
    // optional .HeaderBBox bbox = 1;
    public static final int BBOX_FIELD_NUMBER = 1;
    private boolean hasBbox;
    private crosby.binary.Osmformat.HeaderBBox bbox_;
    public boolean hasBbox() { return hasBbox; }
    public crosby.binary.Osmformat.HeaderBBox getBbox() { return bbox_; }
    
    // repeated string required_features = 4;
    public static final int REQUIRED_FEATURES_FIELD_NUMBER = 4;
    private java.util.List<java.lang.String> requiredFeatures_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.String> getRequiredFeaturesList() {
      return requiredFeatures_;
    }
    public int getRequiredFeaturesCount() { return requiredFeatures_.size(); }
    public java.lang.String getRequiredFeatures(int index) {
      return requiredFeatures_.get(index);
    }
    
    // repeated string optional_features = 5;
    public static final int OPTIONAL_FEATURES_FIELD_NUMBER = 5;
    private java.util.List<java.lang.String> optionalFeatures_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.String> getOptionalFeaturesList() {
      return optionalFeatures_;
    }
    public int getOptionalFeaturesCount() { return optionalFeatures_.size(); }
    public java.lang.String getOptionalFeatures(int index) {
      return optionalFeatures_.get(index);
    }
    
    // optional string writingprogram = 16;
    public static final int WRITINGPROGRAM_FIELD_NUMBER = 16;
    private boolean hasWritingprogram;
    private java.lang.String writingprogram_ = "";
    public boolean hasWritingprogram() { return hasWritingprogram; }
    public java.lang.String getWritingprogram() { return writingprogram_; }
    
    // optional string source = 17;
    public static final int SOURCE_FIELD_NUMBER = 17;
    private boolean hasSource;
    private java.lang.String source_ = "";
    public boolean hasSource() { return hasSource; }
    public java.lang.String getSource() { return source_; }
    
    private void initFields() {
      bbox_ = crosby.binary.Osmformat.HeaderBBox.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      if (hasBbox()) {
        if (!getBbox().isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasBbox()) {
        output.writeMessage(1, getBbox());
      }
      for (java.lang.String element : getRequiredFeaturesList()) {
        output.writeString(4, element);
      }
      for (java.lang.String element : getOptionalFeaturesList()) {
        output.writeString(5, element);
      }
      if (hasWritingprogram()) {
        output.writeString(16, getWritingprogram());
      }
      if (hasSource()) {
        output.writeString(17, getSource());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasBbox()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getBbox());
      }
      {
        int dataSize = 0;
        for (java.lang.String element : getRequiredFeaturesList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeStringSizeNoTag(element);
        }
        size += dataSize;
        size += 1 * getRequiredFeaturesList().size();
      }
      {
        int dataSize = 0;
        for (java.lang.String element : getOptionalFeaturesList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeStringSizeNoTag(element);
        }
        size += dataSize;
        size += 1 * getOptionalFeaturesList().size();
      }
      if (hasWritingprogram()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(16, getWritingprogram());
      }
      if (hasSource()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(17, getSource());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static crosby.binary.Osmformat.HeaderBlock parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.HeaderBlock parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.HeaderBlock parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.HeaderBlock parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.HeaderBlock parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.HeaderBlock parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.HeaderBlock parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.HeaderBlock parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.HeaderBlock parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.HeaderBlock parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.HeaderBlock prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private crosby.binary.Osmformat.HeaderBlock result;
      
      // Construct using crosby.binary.Osmformat.HeaderBlock.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new crosby.binary.Osmformat.HeaderBlock();
        return builder;
      }
      
      @Override
	protected crosby.binary.Osmformat.HeaderBlock internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new crosby.binary.Osmformat.HeaderBlock();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return crosby.binary.Osmformat.HeaderBlock.getDescriptor();
      }
      
      @Override
	public crosby.binary.Osmformat.HeaderBlock getDefaultInstanceForType() {
        return crosby.binary.Osmformat.HeaderBlock.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public crosby.binary.Osmformat.HeaderBlock build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private crosby.binary.Osmformat.HeaderBlock buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public crosby.binary.Osmformat.HeaderBlock buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.requiredFeatures_ != java.util.Collections.EMPTY_LIST) {
          result.requiredFeatures_ =
            java.util.Collections.unmodifiableList(result.requiredFeatures_);
        }
        if (result.optionalFeatures_ != java.util.Collections.EMPTY_LIST) {
          result.optionalFeatures_ =
            java.util.Collections.unmodifiableList(result.optionalFeatures_);
        }
        crosby.binary.Osmformat.HeaderBlock returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof crosby.binary.Osmformat.HeaderBlock) {
          return mergeFrom((crosby.binary.Osmformat.HeaderBlock)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(crosby.binary.Osmformat.HeaderBlock other) {
        if (other == crosby.binary.Osmformat.HeaderBlock.getDefaultInstance()) return this;
        if (other.hasBbox()) {
          mergeBbox(other.getBbox());
        }
        if (!other.requiredFeatures_.isEmpty()) {
          if (result.requiredFeatures_.isEmpty()) {
            result.requiredFeatures_ = new java.util.ArrayList<java.lang.String>();
          }
          result.requiredFeatures_.addAll(other.requiredFeatures_);
        }
        if (!other.optionalFeatures_.isEmpty()) {
          if (result.optionalFeatures_.isEmpty()) {
            result.optionalFeatures_ = new java.util.ArrayList<java.lang.String>();
          }
          result.optionalFeatures_.addAll(other.optionalFeatures_);
        }
        if (other.hasWritingprogram()) {
          setWritingprogram(other.getWritingprogram());
        }
        if (other.hasSource()) {
          setSource(other.getSource());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              crosby.binary.Osmformat.HeaderBBox.Builder subBuilder = crosby.binary.Osmformat.HeaderBBox.newBuilder();
              if (hasBbox()) {
                subBuilder.mergeFrom(getBbox());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setBbox(subBuilder.buildPartial());
              break;
            }
            case 34: {
              addRequiredFeatures(input.readString());
              break;
            }
            case 42: {
              addOptionalFeatures(input.readString());
              break;
            }
            case 130: {
              setWritingprogram(input.readString());
              break;
            }
            case 138: {
              setSource(input.readString());
              break;
            }
          }
        }
      }
      
      
      // optional .HeaderBBox bbox = 1;
      public boolean hasBbox() {
        return result.hasBbox();
      }
      public crosby.binary.Osmformat.HeaderBBox getBbox() {
        return result.getBbox();
      }
      public Builder setBbox(crosby.binary.Osmformat.HeaderBBox value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasBbox = true;
        result.bbox_ = value;
        return this;
      }
      public Builder setBbox(crosby.binary.Osmformat.HeaderBBox.Builder builderForValue) {
        result.hasBbox = true;
        result.bbox_ = builderForValue.build();
        return this;
      }
      public Builder mergeBbox(crosby.binary.Osmformat.HeaderBBox value) {
        if (result.hasBbox() &&
            result.bbox_ != crosby.binary.Osmformat.HeaderBBox.getDefaultInstance()) {
          result.bbox_ =
            crosby.binary.Osmformat.HeaderBBox.newBuilder(result.bbox_).mergeFrom(value).buildPartial();
        } else {
          result.bbox_ = value;
        }
        result.hasBbox = true;
        return this;
      }
      public Builder clearBbox() {
        result.hasBbox = false;
        result.bbox_ = crosby.binary.Osmformat.HeaderBBox.getDefaultInstance();
        return this;
      }
      
      // repeated string required_features = 4;
      public java.util.List<java.lang.String> getRequiredFeaturesList() {
        return java.util.Collections.unmodifiableList(result.requiredFeatures_);
      }
      public int getRequiredFeaturesCount() {
        return result.getRequiredFeaturesCount();
      }
      public java.lang.String getRequiredFeatures(int index) {
        return result.getRequiredFeatures(index);
      }
      public Builder setRequiredFeatures(int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.requiredFeatures_.set(index, value);
        return this;
      }
      public Builder addRequiredFeatures(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  if (result.requiredFeatures_.isEmpty()) {
          result.requiredFeatures_ = new java.util.ArrayList<java.lang.String>();
        }
        result.requiredFeatures_.add(value);
        return this;
      }
      public Builder addAllRequiredFeatures(
          java.lang.Iterable<? extends java.lang.String> values) {
        if (result.requiredFeatures_.isEmpty()) {
          result.requiredFeatures_ = new java.util.ArrayList<java.lang.String>();
        }
        super.addAll(values, result.requiredFeatures_);
        return this;
      }
      public Builder clearRequiredFeatures() {
        result.requiredFeatures_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated string optional_features = 5;
      public java.util.List<java.lang.String> getOptionalFeaturesList() {
        return java.util.Collections.unmodifiableList(result.optionalFeatures_);
      }
      public int getOptionalFeaturesCount() {
        return result.getOptionalFeaturesCount();
      }
      public java.lang.String getOptionalFeatures(int index) {
        return result.getOptionalFeatures(index);
      }
      public Builder setOptionalFeatures(int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.optionalFeatures_.set(index, value);
        return this;
      }
      public Builder addOptionalFeatures(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  if (result.optionalFeatures_.isEmpty()) {
          result.optionalFeatures_ = new java.util.ArrayList<java.lang.String>();
        }
        result.optionalFeatures_.add(value);
        return this;
      }
      public Builder addAllOptionalFeatures(
          java.lang.Iterable<? extends java.lang.String> values) {
        if (result.optionalFeatures_.isEmpty()) {
          result.optionalFeatures_ = new java.util.ArrayList<java.lang.String>();
        }
        super.addAll(values, result.optionalFeatures_);
        return this;
      }
      public Builder clearOptionalFeatures() {
        result.optionalFeatures_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional string writingprogram = 16;
      public boolean hasWritingprogram() {
        return result.hasWritingprogram();
      }
      public java.lang.String getWritingprogram() {
        return result.getWritingprogram();
      }
      public Builder setWritingprogram(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasWritingprogram = true;
        result.writingprogram_ = value;
        return this;
      }
      public Builder clearWritingprogram() {
        result.hasWritingprogram = false;
        result.writingprogram_ = getDefaultInstance().getWritingprogram();
        return this;
      }
      
      // optional string source = 17;
      public boolean hasSource() {
        return result.hasSource();
      }
      public java.lang.String getSource() {
        return result.getSource();
      }
      public Builder setSource(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasSource = true;
        result.source_ = value;
        return this;
      }
      public Builder clearSource() {
        result.hasSource = false;
        result.source_ = getDefaultInstance().getSource();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:HeaderBlock)
    }
    
    static {
      defaultInstance = new HeaderBlock(true);
      crosby.binary.Osmformat.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:HeaderBlock)
  }
  
  public static final class HeaderBBox extends
      com.google.protobuf.GeneratedMessage {
    // Use HeaderBBox.newBuilder() to construct.
    private HeaderBBox() {
      initFields();
    }
    private HeaderBBox(boolean noInit) {}
    
    private static final HeaderBBox defaultInstance;
    public static HeaderBBox getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public HeaderBBox getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return crosby.binary.Osmformat.internal_static_HeaderBBox_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return crosby.binary.Osmformat.internal_static_HeaderBBox_fieldAccessorTable;
    }
    
    // required sint64 left = 1;
    public static final int LEFT_FIELD_NUMBER = 1;
    private boolean hasLeft;
    private long left_ = 0L;
    public boolean hasLeft() { return hasLeft; }
    public long getLeft() { return left_; }
    
    // required sint64 right = 2;
    public static final int RIGHT_FIELD_NUMBER = 2;
    private boolean hasRight;
    private long right_ = 0L;
    public boolean hasRight() { return hasRight; }
    public long getRight() { return right_; }
    
    // required sint64 top = 3;
    public static final int TOP_FIELD_NUMBER = 3;
    private boolean hasTop;
    private long top_ = 0L;
    public boolean hasTop() { return hasTop; }
    public long getTop() { return top_; }
    
    // required sint64 bottom = 4;
    public static final int BOTTOM_FIELD_NUMBER = 4;
    private boolean hasBottom;
    private long bottom_ = 0L;
    public boolean hasBottom() { return hasBottom; }
    public long getBottom() { return bottom_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasLeft) return false;
      if (!hasRight) return false;
      if (!hasTop) return false;
      if (!hasBottom) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasLeft()) {
        output.writeSInt64(1, getLeft());
      }
      if (hasRight()) {
        output.writeSInt64(2, getRight());
      }
      if (hasTop()) {
        output.writeSInt64(3, getTop());
      }
      if (hasBottom()) {
        output.writeSInt64(4, getBottom());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasLeft()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt64Size(1, getLeft());
      }
      if (hasRight()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt64Size(2, getRight());
      }
      if (hasTop()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt64Size(3, getTop());
      }
      if (hasBottom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt64Size(4, getBottom());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.HeaderBBox parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.HeaderBBox parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.HeaderBBox parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.HeaderBBox parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.HeaderBBox prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private crosby.binary.Osmformat.HeaderBBox result;
      
      // Construct using crosby.binary.Osmformat.HeaderBBox.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new crosby.binary.Osmformat.HeaderBBox();
        return builder;
      }
      
      @Override
	protected crosby.binary.Osmformat.HeaderBBox internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new crosby.binary.Osmformat.HeaderBBox();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return crosby.binary.Osmformat.HeaderBBox.getDescriptor();
      }
      
      @Override
	public crosby.binary.Osmformat.HeaderBBox getDefaultInstanceForType() {
        return crosby.binary.Osmformat.HeaderBBox.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public crosby.binary.Osmformat.HeaderBBox build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private crosby.binary.Osmformat.HeaderBBox buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public crosby.binary.Osmformat.HeaderBBox buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        crosby.binary.Osmformat.HeaderBBox returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof crosby.binary.Osmformat.HeaderBBox) {
          return mergeFrom((crosby.binary.Osmformat.HeaderBBox)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(crosby.binary.Osmformat.HeaderBBox other) {
        if (other == crosby.binary.Osmformat.HeaderBBox.getDefaultInstance()) return this;
        if (other.hasLeft()) {
          setLeft(other.getLeft());
        }
        if (other.hasRight()) {
          setRight(other.getRight());
        }
        if (other.hasTop()) {
          setTop(other.getTop());
        }
        if (other.hasBottom()) {
          setBottom(other.getBottom());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setLeft(input.readSInt64());
              break;
            }
            case 16: {
              setRight(input.readSInt64());
              break;
            }
            case 24: {
              setTop(input.readSInt64());
              break;
            }
            case 32: {
              setBottom(input.readSInt64());
              break;
            }
          }
        }
      }
      
      
      // required sint64 left = 1;
      public boolean hasLeft() {
        return result.hasLeft();
      }
      public long getLeft() {
        return result.getLeft();
      }
      public Builder setLeft(long value) {
        result.hasLeft = true;
        result.left_ = value;
        return this;
      }
      public Builder clearLeft() {
        result.hasLeft = false;
        result.left_ = 0L;
        return this;
      }
      
      // required sint64 right = 2;
      public boolean hasRight() {
        return result.hasRight();
      }
      public long getRight() {
        return result.getRight();
      }
      public Builder setRight(long value) {
        result.hasRight = true;
        result.right_ = value;
        return this;
      }
      public Builder clearRight() {
        result.hasRight = false;
        result.right_ = 0L;
        return this;
      }
      
      // required sint64 top = 3;
      public boolean hasTop() {
        return result.hasTop();
      }
      public long getTop() {
        return result.getTop();
      }
      public Builder setTop(long value) {
        result.hasTop = true;
        result.top_ = value;
        return this;
      }
      public Builder clearTop() {
        result.hasTop = false;
        result.top_ = 0L;
        return this;
      }
      
      // required sint64 bottom = 4;
      public boolean hasBottom() {
        return result.hasBottom();
      }
      public long getBottom() {
        return result.getBottom();
      }
      public Builder setBottom(long value) {
        result.hasBottom = true;
        result.bottom_ = value;
        return this;
      }
      public Builder clearBottom() {
        result.hasBottom = false;
        result.bottom_ = 0L;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:HeaderBBox)
    }
    
    static {
      defaultInstance = new HeaderBBox(true);
      crosby.binary.Osmformat.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:HeaderBBox)
  }
  
  public static final class PrimitiveBlock extends
      com.google.protobuf.GeneratedMessage {
    // Use PrimitiveBlock.newBuilder() to construct.
    private PrimitiveBlock() {
      initFields();
    }
    private PrimitiveBlock(boolean noInit) {}
    
    private static final PrimitiveBlock defaultInstance;
    public static PrimitiveBlock getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public PrimitiveBlock getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return crosby.binary.Osmformat.internal_static_PrimitiveBlock_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return crosby.binary.Osmformat.internal_static_PrimitiveBlock_fieldAccessorTable;
    }
    
    // required .StringTable stringtable = 1;
    public static final int STRINGTABLE_FIELD_NUMBER = 1;
    private boolean hasStringtable;
    private crosby.binary.Osmformat.StringTable stringtable_;
    public boolean hasStringtable() { return hasStringtable; }
    public crosby.binary.Osmformat.StringTable getStringtable() { return stringtable_; }
    
    // repeated .PrimitiveGroup primitivegroup = 2;
    public static final int PRIMITIVEGROUP_FIELD_NUMBER = 2;
    private java.util.List<crosby.binary.Osmformat.PrimitiveGroup> primitivegroup_ =
      java.util.Collections.emptyList();
    public java.util.List<crosby.binary.Osmformat.PrimitiveGroup> getPrimitivegroupList() {
      return primitivegroup_;
    }
    public int getPrimitivegroupCount() { return primitivegroup_.size(); }
    public crosby.binary.Osmformat.PrimitiveGroup getPrimitivegroup(int index) {
      return primitivegroup_.get(index);
    }
    
    // optional int32 granularity = 17 [default = 100];
    public static final int GRANULARITY_FIELD_NUMBER = 17;
    private boolean hasGranularity;
    private int granularity_ = 100;
    public boolean hasGranularity() { return hasGranularity; }
    public int getGranularity() { return granularity_; }
    
    // optional int64 lat_offset = 19 [default = 0];
    public static final int LAT_OFFSET_FIELD_NUMBER = 19;
    private boolean hasLatOffset;
    private long latOffset_ = 0L;
    public boolean hasLatOffset() { return hasLatOffset; }
    public long getLatOffset() { return latOffset_; }
    
    // optional int64 lon_offset = 20 [default = 0];
    public static final int LON_OFFSET_FIELD_NUMBER = 20;
    private boolean hasLonOffset;
    private long lonOffset_ = 0L;
    public boolean hasLonOffset() { return hasLonOffset; }
    public long getLonOffset() { return lonOffset_; }
    
    // optional int32 date_granularity = 18 [default = 1000];
    public static final int DATE_GRANULARITY_FIELD_NUMBER = 18;
    private boolean hasDateGranularity;
    private int dateGranularity_ = 1000;
    public boolean hasDateGranularity() { return hasDateGranularity; }
    public int getDateGranularity() { return dateGranularity_; }
    
    private void initFields() {
      stringtable_ = crosby.binary.Osmformat.StringTable.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      if (!hasStringtable) return false;
      for (crosby.binary.Osmformat.PrimitiveGroup element : getPrimitivegroupList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasStringtable()) {
        output.writeMessage(1, getStringtable());
      }
      for (crosby.binary.Osmformat.PrimitiveGroup element : getPrimitivegroupList()) {
        output.writeMessage(2, element);
      }
      if (hasGranularity()) {
        output.writeInt32(17, getGranularity());
      }
      if (hasDateGranularity()) {
        output.writeInt32(18, getDateGranularity());
      }
      if (hasLatOffset()) {
        output.writeInt64(19, getLatOffset());
      }
      if (hasLonOffset()) {
        output.writeInt64(20, getLonOffset());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasStringtable()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getStringtable());
      }
      for (crosby.binary.Osmformat.PrimitiveGroup element : getPrimitivegroupList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, element);
      }
      if (hasGranularity()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(17, getGranularity());
      }
      if (hasDateGranularity()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(18, getDateGranularity());
      }
      if (hasLatOffset()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(19, getLatOffset());
      }
      if (hasLonOffset()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(20, getLonOffset());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.PrimitiveBlock parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.PrimitiveBlock parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.PrimitiveBlock prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private crosby.binary.Osmformat.PrimitiveBlock result;
      
      // Construct using crosby.binary.Osmformat.PrimitiveBlock.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new crosby.binary.Osmformat.PrimitiveBlock();
        return builder;
      }
      
      @Override
	protected crosby.binary.Osmformat.PrimitiveBlock internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new crosby.binary.Osmformat.PrimitiveBlock();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return crosby.binary.Osmformat.PrimitiveBlock.getDescriptor();
      }
      
      @Override
	public crosby.binary.Osmformat.PrimitiveBlock getDefaultInstanceForType() {
        return crosby.binary.Osmformat.PrimitiveBlock.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public crosby.binary.Osmformat.PrimitiveBlock build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private crosby.binary.Osmformat.PrimitiveBlock buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public crosby.binary.Osmformat.PrimitiveBlock buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.primitivegroup_ != java.util.Collections.EMPTY_LIST) {
          result.primitivegroup_ =
            java.util.Collections.unmodifiableList(result.primitivegroup_);
        }
        crosby.binary.Osmformat.PrimitiveBlock returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof crosby.binary.Osmformat.PrimitiveBlock) {
          return mergeFrom((crosby.binary.Osmformat.PrimitiveBlock)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(crosby.binary.Osmformat.PrimitiveBlock other) {
        if (other == crosby.binary.Osmformat.PrimitiveBlock.getDefaultInstance()) return this;
        if (other.hasStringtable()) {
          mergeStringtable(other.getStringtable());
        }
        if (!other.primitivegroup_.isEmpty()) {
          if (result.primitivegroup_.isEmpty()) {
            result.primitivegroup_ = new java.util.ArrayList<crosby.binary.Osmformat.PrimitiveGroup>();
          }
          result.primitivegroup_.addAll(other.primitivegroup_);
        }
        if (other.hasGranularity()) {
          setGranularity(other.getGranularity());
        }
        if (other.hasLatOffset()) {
          setLatOffset(other.getLatOffset());
        }
        if (other.hasLonOffset()) {
          setLonOffset(other.getLonOffset());
        }
        if (other.hasDateGranularity()) {
          setDateGranularity(other.getDateGranularity());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              crosby.binary.Osmformat.StringTable.Builder subBuilder = crosby.binary.Osmformat.StringTable.newBuilder();
              if (hasStringtable()) {
                subBuilder.mergeFrom(getStringtable());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setStringtable(subBuilder.buildPartial());
              break;
            }
            case 18: {
              crosby.binary.Osmformat.PrimitiveGroup.Builder subBuilder = crosby.binary.Osmformat.PrimitiveGroup.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addPrimitivegroup(subBuilder.buildPartial());
              break;
            }
            case 136: {
              setGranularity(input.readInt32());
              break;
            }
            case 144: {
              setDateGranularity(input.readInt32());
              break;
            }
            case 152: {
              setLatOffset(input.readInt64());
              break;
            }
            case 160: {
              setLonOffset(input.readInt64());
              break;
            }
          }
        }
      }
      
      
      // required .StringTable stringtable = 1;
      public boolean hasStringtable() {
        return result.hasStringtable();
      }
      public crosby.binary.Osmformat.StringTable getStringtable() {
        return result.getStringtable();
      }
      public Builder setStringtable(crosby.binary.Osmformat.StringTable value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasStringtable = true;
        result.stringtable_ = value;
        return this;
      }
      public Builder setStringtable(crosby.binary.Osmformat.StringTable.Builder builderForValue) {
        result.hasStringtable = true;
        result.stringtable_ = builderForValue.build();
        return this;
      }
      public Builder mergeStringtable(crosby.binary.Osmformat.StringTable value) {
        if (result.hasStringtable() &&
            result.stringtable_ != crosby.binary.Osmformat.StringTable.getDefaultInstance()) {
          result.stringtable_ =
            crosby.binary.Osmformat.StringTable.newBuilder(result.stringtable_).mergeFrom(value).buildPartial();
        } else {
          result.stringtable_ = value;
        }
        result.hasStringtable = true;
        return this;
      }
      public Builder clearStringtable() {
        result.hasStringtable = false;
        result.stringtable_ = crosby.binary.Osmformat.StringTable.getDefaultInstance();
        return this;
      }
      
      // repeated .PrimitiveGroup primitivegroup = 2;
      public java.util.List<crosby.binary.Osmformat.PrimitiveGroup> getPrimitivegroupList() {
        return java.util.Collections.unmodifiableList(result.primitivegroup_);
      }
      public int getPrimitivegroupCount() {
        return result.getPrimitivegroupCount();
      }
      public crosby.binary.Osmformat.PrimitiveGroup getPrimitivegroup(int index) {
        return result.getPrimitivegroup(index);
      }
      public Builder setPrimitivegroup(int index, crosby.binary.Osmformat.PrimitiveGroup value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.primitivegroup_.set(index, value);
        return this;
      }
      public Builder setPrimitivegroup(int index, crosby.binary.Osmformat.PrimitiveGroup.Builder builderForValue) {
        result.primitivegroup_.set(index, builderForValue.build());
        return this;
      }
      public Builder addPrimitivegroup(crosby.binary.Osmformat.PrimitiveGroup value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.primitivegroup_.isEmpty()) {
          result.primitivegroup_ = new java.util.ArrayList<crosby.binary.Osmformat.PrimitiveGroup>();
        }
        result.primitivegroup_.add(value);
        return this;
      }
      public Builder addPrimitivegroup(crosby.binary.Osmformat.PrimitiveGroup.Builder builderForValue) {
        if (result.primitivegroup_.isEmpty()) {
          result.primitivegroup_ = new java.util.ArrayList<crosby.binary.Osmformat.PrimitiveGroup>();
        }
        result.primitivegroup_.add(builderForValue.build());
        return this;
      }
      public Builder addAllPrimitivegroup(
          java.lang.Iterable<? extends crosby.binary.Osmformat.PrimitiveGroup> values) {
        if (result.primitivegroup_.isEmpty()) {
          result.primitivegroup_ = new java.util.ArrayList<crosby.binary.Osmformat.PrimitiveGroup>();
        }
        super.addAll(values, result.primitivegroup_);
        return this;
      }
      public Builder clearPrimitivegroup() {
        result.primitivegroup_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional int32 granularity = 17 [default = 100];
      public boolean hasGranularity() {
        return result.hasGranularity();
      }
      public int getGranularity() {
        return result.getGranularity();
      }
      public Builder setGranularity(int value) {
        result.hasGranularity = true;
        result.granularity_ = value;
        return this;
      }
      public Builder clearGranularity() {
        result.hasGranularity = false;
        result.granularity_ = 100;
        return this;
      }
      
      // optional int64 lat_offset = 19 [default = 0];
      public boolean hasLatOffset() {
        return result.hasLatOffset();
      }
      public long getLatOffset() {
        return result.getLatOffset();
      }
      public Builder setLatOffset(long value) {
        result.hasLatOffset = true;
        result.latOffset_ = value;
        return this;
      }
      public Builder clearLatOffset() {
        result.hasLatOffset = false;
        result.latOffset_ = 0L;
        return this;
      }
      
      // optional int64 lon_offset = 20 [default = 0];
      public boolean hasLonOffset() {
        return result.hasLonOffset();
      }
      public long getLonOffset() {
        return result.getLonOffset();
      }
      public Builder setLonOffset(long value) {
        result.hasLonOffset = true;
        result.lonOffset_ = value;
        return this;
      }
      public Builder clearLonOffset() {
        result.hasLonOffset = false;
        result.lonOffset_ = 0L;
        return this;
      }
      
      // optional int32 date_granularity = 18 [default = 1000];
      public boolean hasDateGranularity() {
        return result.hasDateGranularity();
      }
      public int getDateGranularity() {
        return result.getDateGranularity();
      }
      public Builder setDateGranularity(int value) {
        result.hasDateGranularity = true;
        result.dateGranularity_ = value;
        return this;
      }
      public Builder clearDateGranularity() {
        result.hasDateGranularity = false;
        result.dateGranularity_ = 1000;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:PrimitiveBlock)
    }
    
    static {
      defaultInstance = new PrimitiveBlock(true);
      crosby.binary.Osmformat.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:PrimitiveBlock)
  }
  
  public static final class PrimitiveGroup extends
      com.google.protobuf.GeneratedMessage {
    // Use PrimitiveGroup.newBuilder() to construct.
    private PrimitiveGroup() {
      initFields();
    }
    private PrimitiveGroup(boolean noInit) {}
    
    private static final PrimitiveGroup defaultInstance;
    public static PrimitiveGroup getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public PrimitiveGroup getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return crosby.binary.Osmformat.internal_static_PrimitiveGroup_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return crosby.binary.Osmformat.internal_static_PrimitiveGroup_fieldAccessorTable;
    }
    
    // repeated .Node nodes = 1;
    public static final int NODES_FIELD_NUMBER = 1;
    private java.util.List<crosby.binary.Osmformat.Node> nodes_ =
      java.util.Collections.emptyList();
    public java.util.List<crosby.binary.Osmformat.Node> getNodesList() {
      return nodes_;
    }
    public int getNodesCount() { return nodes_.size(); }
    public crosby.binary.Osmformat.Node getNodes(int index) {
      return nodes_.get(index);
    }
    
    // optional .DenseNodes dense = 2;
    public static final int DENSE_FIELD_NUMBER = 2;
    private boolean hasDense;
    private crosby.binary.Osmformat.DenseNodes dense_;
    public boolean hasDense() { return hasDense; }
    public crosby.binary.Osmformat.DenseNodes getDense() { return dense_; }
    
    // repeated .Way ways = 3;
    public static final int WAYS_FIELD_NUMBER = 3;
    private java.util.List<crosby.binary.Osmformat.Way> ways_ =
      java.util.Collections.emptyList();
    public java.util.List<crosby.binary.Osmformat.Way> getWaysList() {
      return ways_;
    }
    public int getWaysCount() { return ways_.size(); }
    public crosby.binary.Osmformat.Way getWays(int index) {
      return ways_.get(index);
    }
    
    // repeated .Relation relations = 4;
    public static final int RELATIONS_FIELD_NUMBER = 4;
    private java.util.List<crosby.binary.Osmformat.Relation> relations_ =
      java.util.Collections.emptyList();
    public java.util.List<crosby.binary.Osmformat.Relation> getRelationsList() {
      return relations_;
    }
    public int getRelationsCount() { return relations_.size(); }
    public crosby.binary.Osmformat.Relation getRelations(int index) {
      return relations_.get(index);
    }
    
    // repeated .ChangeSet changesets = 5;
    public static final int CHANGESETS_FIELD_NUMBER = 5;
    private java.util.List<crosby.binary.Osmformat.ChangeSet> changesets_ =
      java.util.Collections.emptyList();
    public java.util.List<crosby.binary.Osmformat.ChangeSet> getChangesetsList() {
      return changesets_;
    }
    public int getChangesetsCount() { return changesets_.size(); }
    public crosby.binary.Osmformat.ChangeSet getChangesets(int index) {
      return changesets_.get(index);
    }
    
    private void initFields() {
      dense_ = crosby.binary.Osmformat.DenseNodes.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      for (crosby.binary.Osmformat.Node element : getNodesList()) {
        if (!element.isInitialized()) return false;
      }
      for (crosby.binary.Osmformat.Way element : getWaysList()) {
        if (!element.isInitialized()) return false;
      }
      for (crosby.binary.Osmformat.Relation element : getRelationsList()) {
        if (!element.isInitialized()) return false;
      }
      for (crosby.binary.Osmformat.ChangeSet element : getChangesetsList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (crosby.binary.Osmformat.Node element : getNodesList()) {
        output.writeMessage(1, element);
      }
      if (hasDense()) {
        output.writeMessage(2, getDense());
      }
      for (crosby.binary.Osmformat.Way element : getWaysList()) {
        output.writeMessage(3, element);
      }
      for (crosby.binary.Osmformat.Relation element : getRelationsList()) {
        output.writeMessage(4, element);
      }
      for (crosby.binary.Osmformat.ChangeSet element : getChangesetsList()) {
        output.writeMessage(5, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      for (crosby.binary.Osmformat.Node element : getNodesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, element);
      }
      if (hasDense()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getDense());
      }
      for (crosby.binary.Osmformat.Way element : getWaysList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, element);
      }
      for (crosby.binary.Osmformat.Relation element : getRelationsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, element);
      }
      for (crosby.binary.Osmformat.ChangeSet element : getChangesetsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.PrimitiveGroup parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.PrimitiveGroup parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.PrimitiveGroup prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private crosby.binary.Osmformat.PrimitiveGroup result;
      
      // Construct using crosby.binary.Osmformat.PrimitiveGroup.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new crosby.binary.Osmformat.PrimitiveGroup();
        return builder;
      }
      
      @Override
	protected crosby.binary.Osmformat.PrimitiveGroup internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new crosby.binary.Osmformat.PrimitiveGroup();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return crosby.binary.Osmformat.PrimitiveGroup.getDescriptor();
      }
      
      @Override
	public crosby.binary.Osmformat.PrimitiveGroup getDefaultInstanceForType() {
        return crosby.binary.Osmformat.PrimitiveGroup.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public crosby.binary.Osmformat.PrimitiveGroup build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private crosby.binary.Osmformat.PrimitiveGroup buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public crosby.binary.Osmformat.PrimitiveGroup buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.nodes_ != java.util.Collections.EMPTY_LIST) {
          result.nodes_ =
            java.util.Collections.unmodifiableList(result.nodes_);
        }
        if (result.ways_ != java.util.Collections.EMPTY_LIST) {
          result.ways_ =
            java.util.Collections.unmodifiableList(result.ways_);
        }
        if (result.relations_ != java.util.Collections.EMPTY_LIST) {
          result.relations_ =
            java.util.Collections.unmodifiableList(result.relations_);
        }
        if (result.changesets_ != java.util.Collections.EMPTY_LIST) {
          result.changesets_ =
            java.util.Collections.unmodifiableList(result.changesets_);
        }
        crosby.binary.Osmformat.PrimitiveGroup returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof crosby.binary.Osmformat.PrimitiveGroup) {
          return mergeFrom((crosby.binary.Osmformat.PrimitiveGroup)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(crosby.binary.Osmformat.PrimitiveGroup other) {
        if (other == crosby.binary.Osmformat.PrimitiveGroup.getDefaultInstance()) return this;
        if (!other.nodes_.isEmpty()) {
          if (result.nodes_.isEmpty()) {
            result.nodes_ = new java.util.ArrayList<crosby.binary.Osmformat.Node>();
          }
          result.nodes_.addAll(other.nodes_);
        }
        if (other.hasDense()) {
          mergeDense(other.getDense());
        }
        if (!other.ways_.isEmpty()) {
          if (result.ways_.isEmpty()) {
            result.ways_ = new java.util.ArrayList<crosby.binary.Osmformat.Way>();
          }
          result.ways_.addAll(other.ways_);
        }
        if (!other.relations_.isEmpty()) {
          if (result.relations_.isEmpty()) {
            result.relations_ = new java.util.ArrayList<crosby.binary.Osmformat.Relation>();
          }
          result.relations_.addAll(other.relations_);
        }
        if (!other.changesets_.isEmpty()) {
          if (result.changesets_.isEmpty()) {
            result.changesets_ = new java.util.ArrayList<crosby.binary.Osmformat.ChangeSet>();
          }
          result.changesets_.addAll(other.changesets_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              crosby.binary.Osmformat.Node.Builder subBuilder = crosby.binary.Osmformat.Node.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addNodes(subBuilder.buildPartial());
              break;
            }
            case 18: {
              crosby.binary.Osmformat.DenseNodes.Builder subBuilder = crosby.binary.Osmformat.DenseNodes.newBuilder();
              if (hasDense()) {
                subBuilder.mergeFrom(getDense());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setDense(subBuilder.buildPartial());
              break;
            }
            case 26: {
              crosby.binary.Osmformat.Way.Builder subBuilder = crosby.binary.Osmformat.Way.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addWays(subBuilder.buildPartial());
              break;
            }
            case 34: {
              crosby.binary.Osmformat.Relation.Builder subBuilder = crosby.binary.Osmformat.Relation.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addRelations(subBuilder.buildPartial());
              break;
            }
            case 42: {
              crosby.binary.Osmformat.ChangeSet.Builder subBuilder = crosby.binary.Osmformat.ChangeSet.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addChangesets(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // repeated .Node nodes = 1;
      public java.util.List<crosby.binary.Osmformat.Node> getNodesList() {
        return java.util.Collections.unmodifiableList(result.nodes_);
      }
      public int getNodesCount() {
        return result.getNodesCount();
      }
      public crosby.binary.Osmformat.Node getNodes(int index) {
        return result.getNodes(index);
      }
      public Builder setNodes(int index, crosby.binary.Osmformat.Node value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.nodes_.set(index, value);
        return this;
      }
      public Builder setNodes(int index, crosby.binary.Osmformat.Node.Builder builderForValue) {
        result.nodes_.set(index, builderForValue.build());
        return this;
      }
      public Builder addNodes(crosby.binary.Osmformat.Node value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.nodes_.isEmpty()) {
          result.nodes_ = new java.util.ArrayList<crosby.binary.Osmformat.Node>();
        }
        result.nodes_.add(value);
        return this;
      }
      public Builder addNodes(crosby.binary.Osmformat.Node.Builder builderForValue) {
        if (result.nodes_.isEmpty()) {
          result.nodes_ = new java.util.ArrayList<crosby.binary.Osmformat.Node>();
        }
        result.nodes_.add(builderForValue.build());
        return this;
      }
      public Builder addAllNodes(
          java.lang.Iterable<? extends crosby.binary.Osmformat.Node> values) {
        if (result.nodes_.isEmpty()) {
          result.nodes_ = new java.util.ArrayList<crosby.binary.Osmformat.Node>();
        }
        super.addAll(values, result.nodes_);
        return this;
      }
      public Builder clearNodes() {
        result.nodes_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional .DenseNodes dense = 2;
      public boolean hasDense() {
        return result.hasDense();
      }
      public crosby.binary.Osmformat.DenseNodes getDense() {
        return result.getDense();
      }
      public Builder setDense(crosby.binary.Osmformat.DenseNodes value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasDense = true;
        result.dense_ = value;
        return this;
      }
      public Builder setDense(crosby.binary.Osmformat.DenseNodes.Builder builderForValue) {
        result.hasDense = true;
        result.dense_ = builderForValue.build();
        return this;
      }
      public Builder mergeDense(crosby.binary.Osmformat.DenseNodes value) {
        if (result.hasDense() &&
            result.dense_ != crosby.binary.Osmformat.DenseNodes.getDefaultInstance()) {
          result.dense_ =
            crosby.binary.Osmformat.DenseNodes.newBuilder(result.dense_).mergeFrom(value).buildPartial();
        } else {
          result.dense_ = value;
        }
        result.hasDense = true;
        return this;
      }
      public Builder clearDense() {
        result.hasDense = false;
        result.dense_ = crosby.binary.Osmformat.DenseNodes.getDefaultInstance();
        return this;
      }
      
      // repeated .Way ways = 3;
      public java.util.List<crosby.binary.Osmformat.Way> getWaysList() {
        return java.util.Collections.unmodifiableList(result.ways_);
      }
      public int getWaysCount() {
        return result.getWaysCount();
      }
      public crosby.binary.Osmformat.Way getWays(int index) {
        return result.getWays(index);
      }
      public Builder setWays(int index, crosby.binary.Osmformat.Way value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.ways_.set(index, value);
        return this;
      }
      public Builder setWays(int index, crosby.binary.Osmformat.Way.Builder builderForValue) {
        result.ways_.set(index, builderForValue.build());
        return this;
      }
      public Builder addWays(crosby.binary.Osmformat.Way value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.ways_.isEmpty()) {
          result.ways_ = new java.util.ArrayList<crosby.binary.Osmformat.Way>();
        }
        result.ways_.add(value);
        return this;
      }
      public Builder addWays(crosby.binary.Osmformat.Way.Builder builderForValue) {
        if (result.ways_.isEmpty()) {
          result.ways_ = new java.util.ArrayList<crosby.binary.Osmformat.Way>();
        }
        result.ways_.add(builderForValue.build());
        return this;
      }
      public Builder addAllWays(
          java.lang.Iterable<? extends crosby.binary.Osmformat.Way> values) {
        if (result.ways_.isEmpty()) {
          result.ways_ = new java.util.ArrayList<crosby.binary.Osmformat.Way>();
        }
        super.addAll(values, result.ways_);
        return this;
      }
      public Builder clearWays() {
        result.ways_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .Relation relations = 4;
      public java.util.List<crosby.binary.Osmformat.Relation> getRelationsList() {
        return java.util.Collections.unmodifiableList(result.relations_);
      }
      public int getRelationsCount() {
        return result.getRelationsCount();
      }
      public crosby.binary.Osmformat.Relation getRelations(int index) {
        return result.getRelations(index);
      }
      public Builder setRelations(int index, crosby.binary.Osmformat.Relation value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.relations_.set(index, value);
        return this;
      }
      public Builder setRelations(int index, crosby.binary.Osmformat.Relation.Builder builderForValue) {
        result.relations_.set(index, builderForValue.build());
        return this;
      }
      public Builder addRelations(crosby.binary.Osmformat.Relation value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.relations_.isEmpty()) {
          result.relations_ = new java.util.ArrayList<crosby.binary.Osmformat.Relation>();
        }
        result.relations_.add(value);
        return this;
      }
      public Builder addRelations(crosby.binary.Osmformat.Relation.Builder builderForValue) {
        if (result.relations_.isEmpty()) {
          result.relations_ = new java.util.ArrayList<crosby.binary.Osmformat.Relation>();
        }
        result.relations_.add(builderForValue.build());
        return this;
      }
      public Builder addAllRelations(
          java.lang.Iterable<? extends crosby.binary.Osmformat.Relation> values) {
        if (result.relations_.isEmpty()) {
          result.relations_ = new java.util.ArrayList<crosby.binary.Osmformat.Relation>();
        }
        super.addAll(values, result.relations_);
        return this;
      }
      public Builder clearRelations() {
        result.relations_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .ChangeSet changesets = 5;
      public java.util.List<crosby.binary.Osmformat.ChangeSet> getChangesetsList() {
        return java.util.Collections.unmodifiableList(result.changesets_);
      }
      public int getChangesetsCount() {
        return result.getChangesetsCount();
      }
      public crosby.binary.Osmformat.ChangeSet getChangesets(int index) {
        return result.getChangesets(index);
      }
      public Builder setChangesets(int index, crosby.binary.Osmformat.ChangeSet value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.changesets_.set(index, value);
        return this;
      }
      public Builder setChangesets(int index, crosby.binary.Osmformat.ChangeSet.Builder builderForValue) {
        result.changesets_.set(index, builderForValue.build());
        return this;
      }
      public Builder addChangesets(crosby.binary.Osmformat.ChangeSet value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.changesets_.isEmpty()) {
          result.changesets_ = new java.util.ArrayList<crosby.binary.Osmformat.ChangeSet>();
        }
        result.changesets_.add(value);
        return this;
      }
      public Builder addChangesets(crosby.binary.Osmformat.ChangeSet.Builder builderForValue) {
        if (result.changesets_.isEmpty()) {
          result.changesets_ = new java.util.ArrayList<crosby.binary.Osmformat.ChangeSet>();
        }
        result.changesets_.add(builderForValue.build());
        return this;
      }
      public Builder addAllChangesets(
          java.lang.Iterable<? extends crosby.binary.Osmformat.ChangeSet> values) {
        if (result.changesets_.isEmpty()) {
          result.changesets_ = new java.util.ArrayList<crosby.binary.Osmformat.ChangeSet>();
        }
        super.addAll(values, result.changesets_);
        return this;
      }
      public Builder clearChangesets() {
        result.changesets_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:PrimitiveGroup)
    }
    
    static {
      defaultInstance = new PrimitiveGroup(true);
      crosby.binary.Osmformat.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:PrimitiveGroup)
  }
  
  public static final class StringTable extends
      com.google.protobuf.GeneratedMessage {
    // Use StringTable.newBuilder() to construct.
    private StringTable() {
      initFields();
    }
    private StringTable(boolean noInit) {}
    
    private static final StringTable defaultInstance;
    public static StringTable getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public StringTable getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return crosby.binary.Osmformat.internal_static_StringTable_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return crosby.binary.Osmformat.internal_static_StringTable_fieldAccessorTable;
    }
    
    // repeated bytes s = 1;
    public static final int S_FIELD_NUMBER = 1;
    private java.util.List<com.google.protobuf.ByteString> s_ =
      java.util.Collections.emptyList();
    public java.util.List<com.google.protobuf.ByteString> getSList() {
      return s_;
    }
    public int getSCount() { return s_.size(); }
    public com.google.protobuf.ByteString getS(int index) {
      return s_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (com.google.protobuf.ByteString element : getSList()) {
        output.writeBytes(1, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      {
        int dataSize = 0;
        for (com.google.protobuf.ByteString element : getSList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(element);
        }
        size += dataSize;
        size += 1 * getSList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static crosby.binary.Osmformat.StringTable parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.StringTable parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.StringTable parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.StringTable parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.StringTable parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.StringTable parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.StringTable parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.StringTable parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.StringTable parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.StringTable parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.StringTable prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private crosby.binary.Osmformat.StringTable result;
      
      // Construct using crosby.binary.Osmformat.StringTable.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new crosby.binary.Osmformat.StringTable();
        return builder;
      }
      
      @Override
	protected crosby.binary.Osmformat.StringTable internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new crosby.binary.Osmformat.StringTable();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return crosby.binary.Osmformat.StringTable.getDescriptor();
      }
      
      @Override
	public crosby.binary.Osmformat.StringTable getDefaultInstanceForType() {
        return crosby.binary.Osmformat.StringTable.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public crosby.binary.Osmformat.StringTable build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private crosby.binary.Osmformat.StringTable buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public crosby.binary.Osmformat.StringTable buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.s_ != java.util.Collections.EMPTY_LIST) {
          result.s_ =
            java.util.Collections.unmodifiableList(result.s_);
        }
        crosby.binary.Osmformat.StringTable returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof crosby.binary.Osmformat.StringTable) {
          return mergeFrom((crosby.binary.Osmformat.StringTable)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(crosby.binary.Osmformat.StringTable other) {
        if (other == crosby.binary.Osmformat.StringTable.getDefaultInstance()) return this;
        if (!other.s_.isEmpty()) {
          if (result.s_.isEmpty()) {
            result.s_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
          }
          result.s_.addAll(other.s_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              addS(input.readBytes());
              break;
            }
          }
        }
      }
      
      
      // repeated bytes s = 1;
      public java.util.List<com.google.protobuf.ByteString> getSList() {
        return java.util.Collections.unmodifiableList(result.s_);
      }
      public int getSCount() {
        return result.getSCount();
      }
      public com.google.protobuf.ByteString getS(int index) {
        return result.getS(index);
      }
      public Builder setS(int index, com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.s_.set(index, value);
        return this;
      }
      public Builder addS(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  if (result.s_.isEmpty()) {
          result.s_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
        }
        result.s_.add(value);
        return this;
      }
      public Builder addAllS(
          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
        if (result.s_.isEmpty()) {
          result.s_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
        }
        super.addAll(values, result.s_);
        return this;
      }
      public Builder clearS() {
        result.s_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:StringTable)
    }
    
    static {
      defaultInstance = new StringTable(true);
      crosby.binary.Osmformat.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:StringTable)
  }
  
  public static final class Info extends
      com.google.protobuf.GeneratedMessage {
    // Use Info.newBuilder() to construct.
    private Info() {
      initFields();
    }
    private Info(boolean noInit) {}
    
    private static final Info defaultInstance;
    public static Info getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public Info getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return crosby.binary.Osmformat.internal_static_Info_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return crosby.binary.Osmformat.internal_static_Info_fieldAccessorTable;
    }
    
    // optional int32 version = 1 [default = -1];
    public static final int VERSION_FIELD_NUMBER = 1;
    private boolean hasVersion;
    private int version_ = -1;
    public boolean hasVersion() { return hasVersion; }
    public int getVersion() { return version_; }
    
    // optional int64 timestamp = 2;
    public static final int TIMESTAMP_FIELD_NUMBER = 2;
    private boolean hasTimestamp;
    private long timestamp_ = 0L;
    public boolean hasTimestamp() { return hasTimestamp; }
    public long getTimestamp() { return timestamp_; }
    
    // optional int64 changeset = 3;
    public static final int CHANGESET_FIELD_NUMBER = 3;
    private boolean hasChangeset;
    private long changeset_ = 0L;
    public boolean hasChangeset() { return hasChangeset; }
    public long getChangeset() { return changeset_; }
    
    // optional int32 uid = 4;
    public static final int UID_FIELD_NUMBER = 4;
    private boolean hasUid;
    private int uid_ = 0;
    public boolean hasUid() { return hasUid; }
    public int getUid() { return uid_; }
    
    // optional int32 user_sid = 5;
    public static final int USER_SID_FIELD_NUMBER = 5;
    private boolean hasUserSid;
    private int userSid_ = 0;
    public boolean hasUserSid() { return hasUserSid; }
    public int getUserSid() { return userSid_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasVersion()) {
        output.writeInt32(1, getVersion());
      }
      if (hasTimestamp()) {
        output.writeInt64(2, getTimestamp());
      }
      if (hasChangeset()) {
        output.writeInt64(3, getChangeset());
      }
      if (hasUid()) {
        output.writeInt32(4, getUid());
      }
      if (hasUserSid()) {
        output.writeInt32(5, getUserSid());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasVersion()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, getVersion());
      }
      if (hasTimestamp()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, getTimestamp());
      }
      if (hasChangeset()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, getChangeset());
      }
      if (hasUid()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, getUid());
      }
      if (hasUserSid()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, getUserSid());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static crosby.binary.Osmformat.Info parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.Info parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.Info parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.Info parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.Info parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.Info parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.Info parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.Info parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.Info parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.Info parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.Info prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private crosby.binary.Osmformat.Info result;
      
      // Construct using crosby.binary.Osmformat.Info.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new crosby.binary.Osmformat.Info();
        return builder;
      }
      
      @Override
	protected crosby.binary.Osmformat.Info internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new crosby.binary.Osmformat.Info();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return crosby.binary.Osmformat.Info.getDescriptor();
      }
      
      @Override
	public crosby.binary.Osmformat.Info getDefaultInstanceForType() {
        return crosby.binary.Osmformat.Info.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public crosby.binary.Osmformat.Info build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private crosby.binary.Osmformat.Info buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public crosby.binary.Osmformat.Info buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        crosby.binary.Osmformat.Info returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof crosby.binary.Osmformat.Info) {
          return mergeFrom((crosby.binary.Osmformat.Info)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(crosby.binary.Osmformat.Info other) {
        if (other == crosby.binary.Osmformat.Info.getDefaultInstance()) return this;
        if (other.hasVersion()) {
          setVersion(other.getVersion());
        }
        if (other.hasTimestamp()) {
          setTimestamp(other.getTimestamp());
        }
        if (other.hasChangeset()) {
          setChangeset(other.getChangeset());
        }
        if (other.hasUid()) {
          setUid(other.getUid());
        }
        if (other.hasUserSid()) {
          setUserSid(other.getUserSid());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setVersion(input.readInt32());
              break;
            }
            case 16: {
              setTimestamp(input.readInt64());
              break;
            }
            case 24: {
              setChangeset(input.readInt64());
              break;
            }
            case 32: {
              setUid(input.readInt32());
              break;
            }
            case 40: {
              setUserSid(input.readInt32());
              break;
            }
          }
        }
      }
      
      
      // optional int32 version = 1 [default = -1];
      public boolean hasVersion() {
        return result.hasVersion();
      }
      public int getVersion() {
        return result.getVersion();
      }
      public Builder setVersion(int value) {
        result.hasVersion = true;
        result.version_ = value;
        return this;
      }
      public Builder clearVersion() {
        result.hasVersion = false;
        result.version_ = -1;
        return this;
      }
      
      // optional int64 timestamp = 2;
      public boolean hasTimestamp() {
        return result.hasTimestamp();
      }
      public long getTimestamp() {
        return result.getTimestamp();
      }
      public Builder setTimestamp(long value) {
        result.hasTimestamp = true;
        result.timestamp_ = value;
        return this;
      }
      public Builder clearTimestamp() {
        result.hasTimestamp = false;
        result.timestamp_ = 0L;
        return this;
      }
      
      // optional int64 changeset = 3;
      public boolean hasChangeset() {
        return result.hasChangeset();
      }
      public long getChangeset() {
        return result.getChangeset();
      }
      public Builder setChangeset(long value) {
        result.hasChangeset = true;
        result.changeset_ = value;
        return this;
      }
      public Builder clearChangeset() {
        result.hasChangeset = false;
        result.changeset_ = 0L;
        return this;
      }
      
      // optional int32 uid = 4;
      public boolean hasUid() {
        return result.hasUid();
      }
      public int getUid() {
        return result.getUid();
      }
      public Builder setUid(int value) {
        result.hasUid = true;
        result.uid_ = value;
        return this;
      }
      public Builder clearUid() {
        result.hasUid = false;
        result.uid_ = 0;
        return this;
      }
      
      // optional int32 user_sid = 5;
      public boolean hasUserSid() {
        return result.hasUserSid();
      }
      public int getUserSid() {
        return result.getUserSid();
      }
      public Builder setUserSid(int value) {
        result.hasUserSid = true;
        result.userSid_ = value;
        return this;
      }
      public Builder clearUserSid() {
        result.hasUserSid = false;
        result.userSid_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:Info)
    }
    
    static {
      defaultInstance = new Info(true);
      crosby.binary.Osmformat.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:Info)
  }
  
  public static final class DenseInfo extends
      com.google.protobuf.GeneratedMessage {
    // Use DenseInfo.newBuilder() to construct.
    private DenseInfo() {
      initFields();
    }
    private DenseInfo(boolean noInit) {}
    
    private static final DenseInfo defaultInstance;
    public static DenseInfo getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public DenseInfo getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return crosby.binary.Osmformat.internal_static_DenseInfo_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return crosby.binary.Osmformat.internal_static_DenseInfo_fieldAccessorTable;
    }
    
    // repeated int32 version = 1 [packed = true];
    public static final int VERSION_FIELD_NUMBER = 1;
    private java.util.List<java.lang.Integer> version_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getVersionList() {
      return version_;
    }
    public int getVersionCount() { return version_.size(); }
    public int getVersion(int index) {
      return version_.get(index);
    }
    private int versionMemoizedSerializedSize = -1;
    
    // repeated sint64 timestamp = 2 [packed = true];
    public static final int TIMESTAMP_FIELD_NUMBER = 2;
    private java.util.List<java.lang.Long> timestamp_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Long> getTimestampList() {
      return timestamp_;
    }
    public int getTimestampCount() { return timestamp_.size(); }
    public long getTimestamp(int index) {
      return timestamp_.get(index);
    }
    private int timestampMemoizedSerializedSize = -1;
    
    // repeated sint64 changeset = 3 [packed = true];
    public static final int CHANGESET_FIELD_NUMBER = 3;
    private java.util.List<java.lang.Long> changeset_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Long> getChangesetList() {
      return changeset_;
    }
    public int getChangesetCount() { return changeset_.size(); }
    public long getChangeset(int index) {
      return changeset_.get(index);
    }
    private int changesetMemoizedSerializedSize = -1;
    
    // repeated sint32 uid = 4 [packed = true];
    public static final int UID_FIELD_NUMBER = 4;
    private java.util.List<java.lang.Integer> uid_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getUidList() {
      return uid_;
    }
    public int getUidCount() { return uid_.size(); }
    public int getUid(int index) {
      return uid_.get(index);
    }
    private int uidMemoizedSerializedSize = -1;
    
    // repeated sint32 user_sid = 5 [packed = true];
    public static final int USER_SID_FIELD_NUMBER = 5;
    private java.util.List<java.lang.Integer> userSid_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getUserSidList() {
      return userSid_;
    }
    public int getUserSidCount() { return userSid_.size(); }
    public int getUserSid(int index) {
      return userSid_.get(index);
    }
    private int userSidMemoizedSerializedSize = -1;
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (getVersionList().size() > 0) {
        output.writeRawVarint32(10);
        output.writeRawVarint32(versionMemoizedSerializedSize);
      }
      for (int element : getVersionList()) {
        output.writeInt32NoTag(element);
      }
      if (getTimestampList().size() > 0) {
        output.writeRawVarint32(18);
        output.writeRawVarint32(timestampMemoizedSerializedSize);
      }
      for (long element : getTimestampList()) {
        output.writeSInt64NoTag(element);
      }
      if (getChangesetList().size() > 0) {
        output.writeRawVarint32(26);
        output.writeRawVarint32(changesetMemoizedSerializedSize);
      }
      for (long element : getChangesetList()) {
        output.writeSInt64NoTag(element);
      }
      if (getUidList().size() > 0) {
        output.writeRawVarint32(34);
        output.writeRawVarint32(uidMemoizedSerializedSize);
      }
      for (int element : getUidList()) {
        output.writeSInt32NoTag(element);
      }
      if (getUserSidList().size() > 0) {
        output.writeRawVarint32(42);
        output.writeRawVarint32(userSidMemoizedSerializedSize);
      }
      for (int element : getUserSidList()) {
        output.writeSInt32NoTag(element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      {
        int dataSize = 0;
        for (int element : getVersionList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(element);
        }
        size += dataSize;
        if (!getVersionList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        versionMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (long element : getTimestampList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeSInt64SizeNoTag(element);
        }
        size += dataSize;
        if (!getTimestampList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        timestampMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (long element : getChangesetList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeSInt64SizeNoTag(element);
        }
        size += dataSize;
        if (!getChangesetList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        changesetMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int element : getUidList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeSInt32SizeNoTag(element);
        }
        size += dataSize;
        if (!getUidList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        uidMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int element : getUserSidList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeSInt32SizeNoTag(element);
        }
        size += dataSize;
        if (!getUserSidList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        userSidMemoizedSerializedSize = dataSize;
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static crosby.binary.Osmformat.DenseInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.DenseInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.DenseInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.DenseInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.DenseInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.DenseInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.DenseInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.DenseInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.DenseInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.DenseInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.DenseInfo prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private crosby.binary.Osmformat.DenseInfo result;
      
      // Construct using crosby.binary.Osmformat.DenseInfo.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new crosby.binary.Osmformat.DenseInfo();
        return builder;
      }
      
      @Override
	protected crosby.binary.Osmformat.DenseInfo internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new crosby.binary.Osmformat.DenseInfo();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return crosby.binary.Osmformat.DenseInfo.getDescriptor();
      }
      
      @Override
	public crosby.binary.Osmformat.DenseInfo getDefaultInstanceForType() {
        return crosby.binary.Osmformat.DenseInfo.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public crosby.binary.Osmformat.DenseInfo build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private crosby.binary.Osmformat.DenseInfo buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public crosby.binary.Osmformat.DenseInfo buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.version_ != java.util.Collections.EMPTY_LIST) {
          result.version_ =
            java.util.Collections.unmodifiableList(result.version_);
        }
        if (result.timestamp_ != java.util.Collections.EMPTY_LIST) {
          result.timestamp_ =
            java.util.Collections.unmodifiableList(result.timestamp_);
        }
        if (result.changeset_ != java.util.Collections.EMPTY_LIST) {
          result.changeset_ =
            java.util.Collections.unmodifiableList(result.changeset_);
        }
        if (result.uid_ != java.util.Collections.EMPTY_LIST) {
          result.uid_ =
            java.util.Collections.unmodifiableList(result.uid_);
        }
        if (result.userSid_ != java.util.Collections.EMPTY_LIST) {
          result.userSid_ =
            java.util.Collections.unmodifiableList(result.userSid_);
        }
        crosby.binary.Osmformat.DenseInfo returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof crosby.binary.Osmformat.DenseInfo) {
          return mergeFrom((crosby.binary.Osmformat.DenseInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(crosby.binary.Osmformat.DenseInfo other) {
        if (other == crosby.binary.Osmformat.DenseInfo.getDefaultInstance()) return this;
        if (!other.version_.isEmpty()) {
          if (result.version_.isEmpty()) {
            result.version_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.version_.addAll(other.version_);
        }
        if (!other.timestamp_.isEmpty()) {
          if (result.timestamp_.isEmpty()) {
            result.timestamp_ = new java.util.ArrayList<java.lang.Long>();
          }
          result.timestamp_.addAll(other.timestamp_);
        }
        if (!other.changeset_.isEmpty()) {
          if (result.changeset_.isEmpty()) {
            result.changeset_ = new java.util.ArrayList<java.lang.Long>();
          }
          result.changeset_.addAll(other.changeset_);
        }
        if (!other.uid_.isEmpty()) {
          if (result.uid_.isEmpty()) {
            result.uid_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.uid_.addAll(other.uid_);
        }
        if (!other.userSid_.isEmpty()) {
          if (result.userSid_.isEmpty()) {
            result.userSid_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.userSid_.addAll(other.userSid_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              addVersion(input.readInt32());
              break;
            }
            case 10: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addVersion(input.readInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 16: {
              addTimestamp(input.readSInt64());
              break;
            }
            case 18: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addTimestamp(input.readSInt64());
              }
              input.popLimit(limit);
              break;
            }
            case 24: {
              addChangeset(input.readSInt64());
              break;
            }
            case 26: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addChangeset(input.readSInt64());
              }
              input.popLimit(limit);
              break;
            }
            case 32: {
              addUid(input.readSInt32());
              break;
            }
            case 34: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addUid(input.readSInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 40: {
              addUserSid(input.readSInt32());
              break;
            }
            case 42: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addUserSid(input.readSInt32());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      }
      
      
      // repeated int32 version = 1 [packed = true];
      public java.util.List<java.lang.Integer> getVersionList() {
        return java.util.Collections.unmodifiableList(result.version_);
      }
      public int getVersionCount() {
        return result.getVersionCount();
      }
      public int getVersion(int index) {
        return result.getVersion(index);
      }
      public Builder setVersion(int index, int value) {
        result.version_.set(index, value);
        return this;
      }
      public Builder addVersion(int value) {
        if (result.version_.isEmpty()) {
          result.version_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.version_.add(value);
        return this;
      }
      public Builder addAllVersion(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.version_.isEmpty()) {
          result.version_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.version_);
        return this;
      }
      public Builder clearVersion() {
        result.version_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated sint64 timestamp = 2 [packed = true];
      public java.util.List<java.lang.Long> getTimestampList() {
        return java.util.Collections.unmodifiableList(result.timestamp_);
      }
      public int getTimestampCount() {
        return result.getTimestampCount();
      }
      public long getTimestamp(int index) {
        return result.getTimestamp(index);
      }
      public Builder setTimestamp(int index, long value) {
        result.timestamp_.set(index, value);
        return this;
      }
      public Builder addTimestamp(long value) {
        if (result.timestamp_.isEmpty()) {
          result.timestamp_ = new java.util.ArrayList<java.lang.Long>();
        }
        result.timestamp_.add(value);
        return this;
      }
      public Builder addAllTimestamp(
          java.lang.Iterable<? extends java.lang.Long> values) {
        if (result.timestamp_.isEmpty()) {
          result.timestamp_ = new java.util.ArrayList<java.lang.Long>();
        }
        super.addAll(values, result.timestamp_);
        return this;
      }
      public Builder clearTimestamp() {
        result.timestamp_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated sint64 changeset = 3 [packed = true];
      public java.util.List<java.lang.Long> getChangesetList() {
        return java.util.Collections.unmodifiableList(result.changeset_);
      }
      public int getChangesetCount() {
        return result.getChangesetCount();
      }
      public long getChangeset(int index) {
        return result.getChangeset(index);
      }
      public Builder setChangeset(int index, long value) {
        result.changeset_.set(index, value);
        return this;
      }
      public Builder addChangeset(long value) {
        if (result.changeset_.isEmpty()) {
          result.changeset_ = new java.util.ArrayList<java.lang.Long>();
        }
        result.changeset_.add(value);
        return this;
      }
      public Builder addAllChangeset(
          java.lang.Iterable<? extends java.lang.Long> values) {
        if (result.changeset_.isEmpty()) {
          result.changeset_ = new java.util.ArrayList<java.lang.Long>();
        }
        super.addAll(values, result.changeset_);
        return this;
      }
      public Builder clearChangeset() {
        result.changeset_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated sint32 uid = 4 [packed = true];
      public java.util.List<java.lang.Integer> getUidList() {
        return java.util.Collections.unmodifiableList(result.uid_);
      }
      public int getUidCount() {
        return result.getUidCount();
      }
      public int getUid(int index) {
        return result.getUid(index);
      }
      public Builder setUid(int index, int value) {
        result.uid_.set(index, value);
        return this;
      }
      public Builder addUid(int value) {
        if (result.uid_.isEmpty()) {
          result.uid_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.uid_.add(value);
        return this;
      }
      public Builder addAllUid(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.uid_.isEmpty()) {
          result.uid_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.uid_);
        return this;
      }
      public Builder clearUid() {
        result.uid_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated sint32 user_sid = 5 [packed = true];
      public java.util.List<java.lang.Integer> getUserSidList() {
        return java.util.Collections.unmodifiableList(result.userSid_);
      }
      public int getUserSidCount() {
        return result.getUserSidCount();
      }
      public int getUserSid(int index) {
        return result.getUserSid(index);
      }
      public Builder setUserSid(int index, int value) {
        result.userSid_.set(index, value);
        return this;
      }
      public Builder addUserSid(int value) {
        if (result.userSid_.isEmpty()) {
          result.userSid_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.userSid_.add(value);
        return this;
      }
      public Builder addAllUserSid(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.userSid_.isEmpty()) {
          result.userSid_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.userSid_);
        return this;
      }
      public Builder clearUserSid() {
        result.userSid_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:DenseInfo)
    }
    
    static {
      defaultInstance = new DenseInfo(true);
      crosby.binary.Osmformat.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:DenseInfo)
  }
  
  public static final class ChangeSet extends
      com.google.protobuf.GeneratedMessage {
    // Use ChangeSet.newBuilder() to construct.
    private ChangeSet() {
      initFields();
    }
    private ChangeSet(boolean noInit) {}
    
    private static final ChangeSet defaultInstance;
    public static ChangeSet getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public ChangeSet getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return crosby.binary.Osmformat.internal_static_ChangeSet_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return crosby.binary.Osmformat.internal_static_ChangeSet_fieldAccessorTable;
    }
    
    // required int64 id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasId) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasId()) {
        output.writeInt64(1, getId());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, getId());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static crosby.binary.Osmformat.ChangeSet parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.ChangeSet parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.ChangeSet parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.ChangeSet parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.ChangeSet parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.ChangeSet parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.ChangeSet parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.ChangeSet parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.ChangeSet parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.ChangeSet parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.ChangeSet prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private crosby.binary.Osmformat.ChangeSet result;
      
      // Construct using crosby.binary.Osmformat.ChangeSet.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new crosby.binary.Osmformat.ChangeSet();
        return builder;
      }
      
      @Override
	protected crosby.binary.Osmformat.ChangeSet internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new crosby.binary.Osmformat.ChangeSet();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return crosby.binary.Osmformat.ChangeSet.getDescriptor();
      }
      
      @Override
	public crosby.binary.Osmformat.ChangeSet getDefaultInstanceForType() {
        return crosby.binary.Osmformat.ChangeSet.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public crosby.binary.Osmformat.ChangeSet build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private crosby.binary.Osmformat.ChangeSet buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public crosby.binary.Osmformat.ChangeSet buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        crosby.binary.Osmformat.ChangeSet returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof crosby.binary.Osmformat.ChangeSet) {
          return mergeFrom((crosby.binary.Osmformat.ChangeSet)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(crosby.binary.Osmformat.ChangeSet other) {
        if (other == crosby.binary.Osmformat.ChangeSet.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setId(input.readInt64());
              break;
            }
          }
        }
      }
      
      
      // required int64 id = 1;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:ChangeSet)
    }
    
    static {
      defaultInstance = new ChangeSet(true);
      crosby.binary.Osmformat.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:ChangeSet)
  }
  
  public static final class Node extends
      com.google.protobuf.GeneratedMessage {
    // Use Node.newBuilder() to construct.
    private Node() {
      initFields();
    }
    private Node(boolean noInit) {}
    
    private static final Node defaultInstance;
    public static Node getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public Node getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return crosby.binary.Osmformat.internal_static_Node_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return crosby.binary.Osmformat.internal_static_Node_fieldAccessorTable;
    }
    
    // required sint64 id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    // repeated uint32 keys = 2 [packed = true];
    public static final int KEYS_FIELD_NUMBER = 2;
    private java.util.List<java.lang.Integer> keys_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getKeysList() {
      return keys_;
    }
    public int getKeysCount() { return keys_.size(); }
    public int getKeys(int index) {
      return keys_.get(index);
    }
    private int keysMemoizedSerializedSize = -1;
    
    // repeated uint32 vals = 3 [packed = true];
    public static final int VALS_FIELD_NUMBER = 3;
    private java.util.List<java.lang.Integer> vals_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getValsList() {
      return vals_;
    }
    public int getValsCount() { return vals_.size(); }
    public int getVals(int index) {
      return vals_.get(index);
    }
    private int valsMemoizedSerializedSize = -1;
    
    // optional .Info info = 4;
    public static final int INFO_FIELD_NUMBER = 4;
    private boolean hasInfo;
    private crosby.binary.Osmformat.Info info_;
    public boolean hasInfo() { return hasInfo; }
    public crosby.binary.Osmformat.Info getInfo() { return info_; }
    
    // required sint64 lat = 8;
    public static final int LAT_FIELD_NUMBER = 8;
    private boolean hasLat;
    private long lat_ = 0L;
    public boolean hasLat() { return hasLat; }
    public long getLat() { return lat_; }
    
    // required sint64 lon = 9;
    public static final int LON_FIELD_NUMBER = 9;
    private boolean hasLon;
    private long lon_ = 0L;
    public boolean hasLon() { return hasLon; }
    public long getLon() { return lon_; }
    
    private void initFields() {
      info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      if (!hasId) return false;
      if (!hasLat) return false;
      if (!hasLon) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasId()) {
        output.writeSInt64(1, getId());
      }
      if (getKeysList().size() > 0) {
        output.writeRawVarint32(18);
        output.writeRawVarint32(keysMemoizedSerializedSize);
      }
      for (int element : getKeysList()) {
        output.writeUInt32NoTag(element);
      }
      if (getValsList().size() > 0) {
        output.writeRawVarint32(26);
        output.writeRawVarint32(valsMemoizedSerializedSize);
      }
      for (int element : getValsList()) {
        output.writeUInt32NoTag(element);
      }
      if (hasInfo()) {
        output.writeMessage(4, getInfo());
      }
      if (hasLat()) {
        output.writeSInt64(8, getLat());
      }
      if (hasLon()) {
        output.writeSInt64(9, getLon());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt64Size(1, getId());
      }
      {
        int dataSize = 0;
        for (int element : getKeysList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(element);
        }
        size += dataSize;
        if (!getKeysList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        keysMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int element : getValsList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(element);
        }
        size += dataSize;
        if (!getValsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        valsMemoizedSerializedSize = dataSize;
      }
      if (hasInfo()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getInfo());
      }
      if (hasLat()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt64Size(8, getLat());
      }
      if (hasLon()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt64Size(9, getLon());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static crosby.binary.Osmformat.Node parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.Node parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.Node parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.Node parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.Node parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.Node parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.Node parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.Node parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.Node parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.Node parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.Node prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private crosby.binary.Osmformat.Node result;
      
      // Construct using crosby.binary.Osmformat.Node.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new crosby.binary.Osmformat.Node();
        return builder;
      }
      
      @Override
	protected crosby.binary.Osmformat.Node internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new crosby.binary.Osmformat.Node();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return crosby.binary.Osmformat.Node.getDescriptor();
      }
      
      @Override
	public crosby.binary.Osmformat.Node getDefaultInstanceForType() {
        return crosby.binary.Osmformat.Node.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public crosby.binary.Osmformat.Node build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private crosby.binary.Osmformat.Node buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public crosby.binary.Osmformat.Node buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.keys_ != java.util.Collections.EMPTY_LIST) {
          result.keys_ =
            java.util.Collections.unmodifiableList(result.keys_);
        }
        if (result.vals_ != java.util.Collections.EMPTY_LIST) {
          result.vals_ =
            java.util.Collections.unmodifiableList(result.vals_);
        }
        crosby.binary.Osmformat.Node returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof crosby.binary.Osmformat.Node) {
          return mergeFrom((crosby.binary.Osmformat.Node)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(crosby.binary.Osmformat.Node other) {
        if (other == crosby.binary.Osmformat.Node.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (!other.keys_.isEmpty()) {
          if (result.keys_.isEmpty()) {
            result.keys_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.keys_.addAll(other.keys_);
        }
        if (!other.vals_.isEmpty()) {
          if (result.vals_.isEmpty()) {
            result.vals_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.vals_.addAll(other.vals_);
        }
        if (other.hasInfo()) {
          mergeInfo(other.getInfo());
        }
        if (other.hasLat()) {
          setLat(other.getLat());
        }
        if (other.hasLon()) {
          setLon(other.getLon());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setId(input.readSInt64());
              break;
            }
            case 16: {
              addKeys(input.readUInt32());
              break;
            }
            case 18: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addKeys(input.readUInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 24: {
              addVals(input.readUInt32());
              break;
            }
            case 26: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addVals(input.readUInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 34: {
              crosby.binary.Osmformat.Info.Builder subBuilder = crosby.binary.Osmformat.Info.newBuilder();
              if (hasInfo()) {
                subBuilder.mergeFrom(getInfo());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setInfo(subBuilder.buildPartial());
              break;
            }
            case 64: {
              setLat(input.readSInt64());
              break;
            }
            case 72: {
              setLon(input.readSInt64());
              break;
            }
          }
        }
      }
      
      
      // required sint64 id = 1;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // repeated uint32 keys = 2 [packed = true];
      public java.util.List<java.lang.Integer> getKeysList() {
        return java.util.Collections.unmodifiableList(result.keys_);
      }
      public int getKeysCount() {
        return result.getKeysCount();
      }
      public int getKeys(int index) {
        return result.getKeys(index);
      }
      public Builder setKeys(int index, int value) {
        result.keys_.set(index, value);
        return this;
      }
      public Builder addKeys(int value) {
        if (result.keys_.isEmpty()) {
          result.keys_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.keys_.add(value);
        return this;
      }
      public Builder addAllKeys(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.keys_.isEmpty()) {
          result.keys_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.keys_);
        return this;
      }
      public Builder clearKeys() {
        result.keys_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated uint32 vals = 3 [packed = true];
      public java.util.List<java.lang.Integer> getValsList() {
        return java.util.Collections.unmodifiableList(result.vals_);
      }
      public int getValsCount() {
        return result.getValsCount();
      }
      public int getVals(int index) {
        return result.getVals(index);
      }
      public Builder setVals(int index, int value) {
        result.vals_.set(index, value);
        return this;
      }
      public Builder addVals(int value) {
        if (result.vals_.isEmpty()) {
          result.vals_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.vals_.add(value);
        return this;
      }
      public Builder addAllVals(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.vals_.isEmpty()) {
          result.vals_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.vals_);
        return this;
      }
      public Builder clearVals() {
        result.vals_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional .Info info = 4;
      public boolean hasInfo() {
        return result.hasInfo();
      }
      public crosby.binary.Osmformat.Info getInfo() {
        return result.getInfo();
      }
      public Builder setInfo(crosby.binary.Osmformat.Info value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasInfo = true;
        result.info_ = value;
        return this;
      }
      public Builder setInfo(crosby.binary.Osmformat.Info.Builder builderForValue) {
        result.hasInfo = true;
        result.info_ = builderForValue.build();
        return this;
      }
      public Builder mergeInfo(crosby.binary.Osmformat.Info value) {
        if (result.hasInfo() &&
            result.info_ != crosby.binary.Osmformat.Info.getDefaultInstance()) {
          result.info_ =
            crosby.binary.Osmformat.Info.newBuilder(result.info_).mergeFrom(value).buildPartial();
        } else {
          result.info_ = value;
        }
        result.hasInfo = true;
        return this;
      }
      public Builder clearInfo() {
        result.hasInfo = false;
        result.info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
        return this;
      }
      
      // required sint64 lat = 8;
      public boolean hasLat() {
        return result.hasLat();
      }
      public long getLat() {
        return result.getLat();
      }
      public Builder setLat(long value) {
        result.hasLat = true;
        result.lat_ = value;
        return this;
      }
      public Builder clearLat() {
        result.hasLat = false;
        result.lat_ = 0L;
        return this;
      }
      
      // required sint64 lon = 9;
      public boolean hasLon() {
        return result.hasLon();
      }
      public long getLon() {
        return result.getLon();
      }
      public Builder setLon(long value) {
        result.hasLon = true;
        result.lon_ = value;
        return this;
      }
      public Builder clearLon() {
        result.hasLon = false;
        result.lon_ = 0L;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:Node)
    }
    
    static {
      defaultInstance = new Node(true);
      crosby.binary.Osmformat.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:Node)
  }
  
  public static final class DenseNodes extends
      com.google.protobuf.GeneratedMessage {
    // Use DenseNodes.newBuilder() to construct.
    private DenseNodes() {
      initFields();
    }
    private DenseNodes(boolean noInit) {}
    
    private static final DenseNodes defaultInstance;
    public static DenseNodes getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public DenseNodes getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return crosby.binary.Osmformat.internal_static_DenseNodes_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return crosby.binary.Osmformat.internal_static_DenseNodes_fieldAccessorTable;
    }
    
    // repeated sint64 id = 1 [packed = true];
    public static final int ID_FIELD_NUMBER = 1;
    private java.util.List<java.lang.Long> id_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Long> getIdList() {
      return id_;
    }
    public int getIdCount() { return id_.size(); }
    public long getId(int index) {
      return id_.get(index);
    }
    private int idMemoizedSerializedSize = -1;
    
    // optional .DenseInfo denseinfo = 5;
    public static final int DENSEINFO_FIELD_NUMBER = 5;
    private boolean hasDenseinfo;
    private crosby.binary.Osmformat.DenseInfo denseinfo_;
    public boolean hasDenseinfo() { return hasDenseinfo; }
    public crosby.binary.Osmformat.DenseInfo getDenseinfo() { return denseinfo_; }
    
    // repeated sint64 lat = 8 [packed = true];
    public static final int LAT_FIELD_NUMBER = 8;
    private java.util.List<java.lang.Long> lat_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Long> getLatList() {
      return lat_;
    }
    public int getLatCount() { return lat_.size(); }
    public long getLat(int index) {
      return lat_.get(index);
    }
    private int latMemoizedSerializedSize = -1;
    
    // repeated sint64 lon = 9 [packed = true];
    public static final int LON_FIELD_NUMBER = 9;
    private java.util.List<java.lang.Long> lon_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Long> getLonList() {
      return lon_;
    }
    public int getLonCount() { return lon_.size(); }
    public long getLon(int index) {
      return lon_.get(index);
    }
    private int lonMemoizedSerializedSize = -1;
    
    // repeated int32 keys_vals = 10 [packed = true];
    public static final int KEYS_VALS_FIELD_NUMBER = 10;
    private java.util.List<java.lang.Integer> keysVals_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getKeysValsList() {
      return keysVals_;
    }
    public int getKeysValsCount() { return keysVals_.size(); }
    public int getKeysVals(int index) {
      return keysVals_.get(index);
    }
    private int keysValsMemoizedSerializedSize = -1;
    
    private void initFields() {
      denseinfo_ = crosby.binary.Osmformat.DenseInfo.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (getIdList().size() > 0) {
        output.writeRawVarint32(10);
        output.writeRawVarint32(idMemoizedSerializedSize);
      }
      for (long element : getIdList()) {
        output.writeSInt64NoTag(element);
      }
      if (hasDenseinfo()) {
        output.writeMessage(5, getDenseinfo());
      }
      if (getLatList().size() > 0) {
        output.writeRawVarint32(66);
        output.writeRawVarint32(latMemoizedSerializedSize);
      }
      for (long element : getLatList()) {
        output.writeSInt64NoTag(element);
      }
      if (getLonList().size() > 0) {
        output.writeRawVarint32(74);
        output.writeRawVarint32(lonMemoizedSerializedSize);
      }
      for (long element : getLonList()) {
        output.writeSInt64NoTag(element);
      }
      if (getKeysValsList().size() > 0) {
        output.writeRawVarint32(82);
        output.writeRawVarint32(keysValsMemoizedSerializedSize);
      }
      for (int element : getKeysValsList()) {
        output.writeInt32NoTag(element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      {
        int dataSize = 0;
        for (long element : getIdList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeSInt64SizeNoTag(element);
        }
        size += dataSize;
        if (!getIdList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        idMemoizedSerializedSize = dataSize;
      }
      if (hasDenseinfo()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, getDenseinfo());
      }
      {
        int dataSize = 0;
        for (long element : getLatList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeSInt64SizeNoTag(element);
        }
        size += dataSize;
        if (!getLatList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        latMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (long element : getLonList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeSInt64SizeNoTag(element);
        }
        size += dataSize;
        if (!getLonList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        lonMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int element : getKeysValsList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(element);
        }
        size += dataSize;
        if (!getKeysValsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        keysValsMemoizedSerializedSize = dataSize;
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static crosby.binary.Osmformat.DenseNodes parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.DenseNodes parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.DenseNodes parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.DenseNodes parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.DenseNodes parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.DenseNodes parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.DenseNodes parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.DenseNodes parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.DenseNodes parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.DenseNodes parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.DenseNodes prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private crosby.binary.Osmformat.DenseNodes result;
      
      // Construct using crosby.binary.Osmformat.DenseNodes.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new crosby.binary.Osmformat.DenseNodes();
        return builder;
      }
      
      @Override
	protected crosby.binary.Osmformat.DenseNodes internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new crosby.binary.Osmformat.DenseNodes();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return crosby.binary.Osmformat.DenseNodes.getDescriptor();
      }
      
      @Override
	public crosby.binary.Osmformat.DenseNodes getDefaultInstanceForType() {
        return crosby.binary.Osmformat.DenseNodes.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public crosby.binary.Osmformat.DenseNodes build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private crosby.binary.Osmformat.DenseNodes buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public crosby.binary.Osmformat.DenseNodes buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.id_ != java.util.Collections.EMPTY_LIST) {
          result.id_ =
            java.util.Collections.unmodifiableList(result.id_);
        }
        if (result.lat_ != java.util.Collections.EMPTY_LIST) {
          result.lat_ =
            java.util.Collections.unmodifiableList(result.lat_);
        }
        if (result.lon_ != java.util.Collections.EMPTY_LIST) {
          result.lon_ =
            java.util.Collections.unmodifiableList(result.lon_);
        }
        if (result.keysVals_ != java.util.Collections.EMPTY_LIST) {
          result.keysVals_ =
            java.util.Collections.unmodifiableList(result.keysVals_);
        }
        crosby.binary.Osmformat.DenseNodes returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof crosby.binary.Osmformat.DenseNodes) {
          return mergeFrom((crosby.binary.Osmformat.DenseNodes)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(crosby.binary.Osmformat.DenseNodes other) {
        if (other == crosby.binary.Osmformat.DenseNodes.getDefaultInstance()) return this;
        if (!other.id_.isEmpty()) {
          if (result.id_.isEmpty()) {
            result.id_ = new java.util.ArrayList<java.lang.Long>();
          }
          result.id_.addAll(other.id_);
        }
        if (other.hasDenseinfo()) {
          mergeDenseinfo(other.getDenseinfo());
        }
        if (!other.lat_.isEmpty()) {
          if (result.lat_.isEmpty()) {
            result.lat_ = new java.util.ArrayList<java.lang.Long>();
          }
          result.lat_.addAll(other.lat_);
        }
        if (!other.lon_.isEmpty()) {
          if (result.lon_.isEmpty()) {
            result.lon_ = new java.util.ArrayList<java.lang.Long>();
          }
          result.lon_.addAll(other.lon_);
        }
        if (!other.keysVals_.isEmpty()) {
          if (result.keysVals_.isEmpty()) {
            result.keysVals_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.keysVals_.addAll(other.keysVals_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              addId(input.readSInt64());
              break;
            }
            case 10: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addId(input.readSInt64());
              }
              input.popLimit(limit);
              break;
            }
            case 42: {
              crosby.binary.Osmformat.DenseInfo.Builder subBuilder = crosby.binary.Osmformat.DenseInfo.newBuilder();
              if (hasDenseinfo()) {
                subBuilder.mergeFrom(getDenseinfo());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setDenseinfo(subBuilder.buildPartial());
              break;
            }
            case 64: {
              addLat(input.readSInt64());
              break;
            }
            case 66: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addLat(input.readSInt64());
              }
              input.popLimit(limit);
              break;
            }
            case 72: {
              addLon(input.readSInt64());
              break;
            }
            case 74: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addLon(input.readSInt64());
              }
              input.popLimit(limit);
              break;
            }
            case 80: {
              addKeysVals(input.readInt32());
              break;
            }
            case 82: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addKeysVals(input.readInt32());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      }
      
      
      // repeated sint64 id = 1 [packed = true];
      public java.util.List<java.lang.Long> getIdList() {
        return java.util.Collections.unmodifiableList(result.id_);
      }
      public int getIdCount() {
        return result.getIdCount();
      }
      public long getId(int index) {
        return result.getId(index);
      }
      public Builder setId(int index, long value) {
        result.id_.set(index, value);
        return this;
      }
      public Builder addId(long value) {
        if (result.id_.isEmpty()) {
          result.id_ = new java.util.ArrayList<java.lang.Long>();
        }
        result.id_.add(value);
        return this;
      }
      public Builder addAllId(
          java.lang.Iterable<? extends java.lang.Long> values) {
        if (result.id_.isEmpty()) {
          result.id_ = new java.util.ArrayList<java.lang.Long>();
        }
        super.addAll(values, result.id_);
        return this;
      }
      public Builder clearId() {
        result.id_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional .DenseInfo denseinfo = 5;
      public boolean hasDenseinfo() {
        return result.hasDenseinfo();
      }
      public crosby.binary.Osmformat.DenseInfo getDenseinfo() {
        return result.getDenseinfo();
      }
      public Builder setDenseinfo(crosby.binary.Osmformat.DenseInfo value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasDenseinfo = true;
        result.denseinfo_ = value;
        return this;
      }
      public Builder setDenseinfo(crosby.binary.Osmformat.DenseInfo.Builder builderForValue) {
        result.hasDenseinfo = true;
        result.denseinfo_ = builderForValue.build();
        return this;
      }
      public Builder mergeDenseinfo(crosby.binary.Osmformat.DenseInfo value) {
        if (result.hasDenseinfo() &&
            result.denseinfo_ != crosby.binary.Osmformat.DenseInfo.getDefaultInstance()) {
          result.denseinfo_ =
            crosby.binary.Osmformat.DenseInfo.newBuilder(result.denseinfo_).mergeFrom(value).buildPartial();
        } else {
          result.denseinfo_ = value;
        }
        result.hasDenseinfo = true;
        return this;
      }
      public Builder clearDenseinfo() {
        result.hasDenseinfo = false;
        result.denseinfo_ = crosby.binary.Osmformat.DenseInfo.getDefaultInstance();
        return this;
      }
      
      // repeated sint64 lat = 8 [packed = true];
      public java.util.List<java.lang.Long> getLatList() {
        return java.util.Collections.unmodifiableList(result.lat_);
      }
      public int getLatCount() {
        return result.getLatCount();
      }
      public long getLat(int index) {
        return result.getLat(index);
      }
      public Builder setLat(int index, long value) {
        result.lat_.set(index, value);
        return this;
      }
      public Builder addLat(long value) {
        if (result.lat_.isEmpty()) {
          result.lat_ = new java.util.ArrayList<java.lang.Long>();
        }
        result.lat_.add(value);
        return this;
      }
      public Builder addAllLat(
          java.lang.Iterable<? extends java.lang.Long> values) {
        if (result.lat_.isEmpty()) {
          result.lat_ = new java.util.ArrayList<java.lang.Long>();
        }
        super.addAll(values, result.lat_);
        return this;
      }
      public Builder clearLat() {
        result.lat_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated sint64 lon = 9 [packed = true];
      public java.util.List<java.lang.Long> getLonList() {
        return java.util.Collections.unmodifiableList(result.lon_);
      }
      public int getLonCount() {
        return result.getLonCount();
      }
      public long getLon(int index) {
        return result.getLon(index);
      }
      public Builder setLon(int index, long value) {
        result.lon_.set(index, value);
        return this;
      }
      public Builder addLon(long value) {
        if (result.lon_.isEmpty()) {
          result.lon_ = new java.util.ArrayList<java.lang.Long>();
        }
        result.lon_.add(value);
        return this;
      }
      public Builder addAllLon(
          java.lang.Iterable<? extends java.lang.Long> values) {
        if (result.lon_.isEmpty()) {
          result.lon_ = new java.util.ArrayList<java.lang.Long>();
        }
        super.addAll(values, result.lon_);
        return this;
      }
      public Builder clearLon() {
        result.lon_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated int32 keys_vals = 10 [packed = true];
      public java.util.List<java.lang.Integer> getKeysValsList() {
        return java.util.Collections.unmodifiableList(result.keysVals_);
      }
      public int getKeysValsCount() {
        return result.getKeysValsCount();
      }
      public int getKeysVals(int index) {
        return result.getKeysVals(index);
      }
      public Builder setKeysVals(int index, int value) {
        result.keysVals_.set(index, value);
        return this;
      }
      public Builder addKeysVals(int value) {
        if (result.keysVals_.isEmpty()) {
          result.keysVals_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.keysVals_.add(value);
        return this;
      }
      public Builder addAllKeysVals(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.keysVals_.isEmpty()) {
          result.keysVals_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.keysVals_);
        return this;
      }
      public Builder clearKeysVals() {
        result.keysVals_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:DenseNodes)
    }
    
    static {
      defaultInstance = new DenseNodes(true);
      crosby.binary.Osmformat.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:DenseNodes)
  }
  
  public static final class Way extends
      com.google.protobuf.GeneratedMessage {
    // Use Way.newBuilder() to construct.
    private Way() {
      initFields();
    }
    private Way(boolean noInit) {}
    
    private static final Way defaultInstance;
    public static Way getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public Way getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return crosby.binary.Osmformat.internal_static_Way_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return crosby.binary.Osmformat.internal_static_Way_fieldAccessorTable;
    }
    
    // required int64 id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    // repeated uint32 keys = 2 [packed = true];
    public static final int KEYS_FIELD_NUMBER = 2;
    private java.util.List<java.lang.Integer> keys_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getKeysList() {
      return keys_;
    }
    public int getKeysCount() { return keys_.size(); }
    public int getKeys(int index) {
      return keys_.get(index);
    }
    private int keysMemoizedSerializedSize = -1;
    
    // repeated uint32 vals = 3 [packed = true];
    public static final int VALS_FIELD_NUMBER = 3;
    private java.util.List<java.lang.Integer> vals_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getValsList() {
      return vals_;
    }
    public int getValsCount() { return vals_.size(); }
    public int getVals(int index) {
      return vals_.get(index);
    }
    private int valsMemoizedSerializedSize = -1;
    
    // optional .Info info = 4;
    public static final int INFO_FIELD_NUMBER = 4;
    private boolean hasInfo;
    private crosby.binary.Osmformat.Info info_;
    public boolean hasInfo() { return hasInfo; }
    public crosby.binary.Osmformat.Info getInfo() { return info_; }
    
    // repeated sint64 refs = 8 [packed = true];
    public static final int REFS_FIELD_NUMBER = 8;
    private java.util.List<java.lang.Long> refs_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Long> getRefsList() {
      return refs_;
    }
    public int getRefsCount() { return refs_.size(); }
    public long getRefs(int index) {
      return refs_.get(index);
    }
    private int refsMemoizedSerializedSize = -1;
    
    private void initFields() {
      info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      if (!hasId) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasId()) {
        output.writeInt64(1, getId());
      }
      if (getKeysList().size() > 0) {
        output.writeRawVarint32(18);
        output.writeRawVarint32(keysMemoizedSerializedSize);
      }
      for (int element : getKeysList()) {
        output.writeUInt32NoTag(element);
      }
      if (getValsList().size() > 0) {
        output.writeRawVarint32(26);
        output.writeRawVarint32(valsMemoizedSerializedSize);
      }
      for (int element : getValsList()) {
        output.writeUInt32NoTag(element);
      }
      if (hasInfo()) {
        output.writeMessage(4, getInfo());
      }
      if (getRefsList().size() > 0) {
        output.writeRawVarint32(66);
        output.writeRawVarint32(refsMemoizedSerializedSize);
      }
      for (long element : getRefsList()) {
        output.writeSInt64NoTag(element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, getId());
      }
      {
        int dataSize = 0;
        for (int element : getKeysList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(element);
        }
        size += dataSize;
        if (!getKeysList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        keysMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int element : getValsList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(element);
        }
        size += dataSize;
        if (!getValsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        valsMemoizedSerializedSize = dataSize;
      }
      if (hasInfo()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getInfo());
      }
      {
        int dataSize = 0;
        for (long element : getRefsList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeSInt64SizeNoTag(element);
        }
        size += dataSize;
        if (!getRefsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        refsMemoizedSerializedSize = dataSize;
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static crosby.binary.Osmformat.Way parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.Way parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.Way parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.Way parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.Way parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.Way parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.Way parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.Way parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.Way parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.Way parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.Way prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private crosby.binary.Osmformat.Way result;
      
      // Construct using crosby.binary.Osmformat.Way.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new crosby.binary.Osmformat.Way();
        return builder;
      }
      
      @Override
	protected crosby.binary.Osmformat.Way internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new crosby.binary.Osmformat.Way();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return crosby.binary.Osmformat.Way.getDescriptor();
      }
      
      @Override
	public crosby.binary.Osmformat.Way getDefaultInstanceForType() {
        return crosby.binary.Osmformat.Way.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public crosby.binary.Osmformat.Way build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private crosby.binary.Osmformat.Way buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public crosby.binary.Osmformat.Way buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.keys_ != java.util.Collections.EMPTY_LIST) {
          result.keys_ =
            java.util.Collections.unmodifiableList(result.keys_);
        }
        if (result.vals_ != java.util.Collections.EMPTY_LIST) {
          result.vals_ =
            java.util.Collections.unmodifiableList(result.vals_);
        }
        if (result.refs_ != java.util.Collections.EMPTY_LIST) {
          result.refs_ =
            java.util.Collections.unmodifiableList(result.refs_);
        }
        crosby.binary.Osmformat.Way returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof crosby.binary.Osmformat.Way) {
          return mergeFrom((crosby.binary.Osmformat.Way)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(crosby.binary.Osmformat.Way other) {
        if (other == crosby.binary.Osmformat.Way.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (!other.keys_.isEmpty()) {
          if (result.keys_.isEmpty()) {
            result.keys_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.keys_.addAll(other.keys_);
        }
        if (!other.vals_.isEmpty()) {
          if (result.vals_.isEmpty()) {
            result.vals_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.vals_.addAll(other.vals_);
        }
        if (other.hasInfo()) {
          mergeInfo(other.getInfo());
        }
        if (!other.refs_.isEmpty()) {
          if (result.refs_.isEmpty()) {
            result.refs_ = new java.util.ArrayList<java.lang.Long>();
          }
          result.refs_.addAll(other.refs_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setId(input.readInt64());
              break;
            }
            case 16: {
              addKeys(input.readUInt32());
              break;
            }
            case 18: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addKeys(input.readUInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 24: {
              addVals(input.readUInt32());
              break;
            }
            case 26: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addVals(input.readUInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 34: {
              crosby.binary.Osmformat.Info.Builder subBuilder = crosby.binary.Osmformat.Info.newBuilder();
              if (hasInfo()) {
                subBuilder.mergeFrom(getInfo());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setInfo(subBuilder.buildPartial());
              break;
            }
            case 64: {
              addRefs(input.readSInt64());
              break;
            }
            case 66: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addRefs(input.readSInt64());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      }
      
      
      // required int64 id = 1;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // repeated uint32 keys = 2 [packed = true];
      public java.util.List<java.lang.Integer> getKeysList() {
        return java.util.Collections.unmodifiableList(result.keys_);
      }
      public int getKeysCount() {
        return result.getKeysCount();
      }
      public int getKeys(int index) {
        return result.getKeys(index);
      }
      public Builder setKeys(int index, int value) {
        result.keys_.set(index, value);
        return this;
      }
      public Builder addKeys(int value) {
        if (result.keys_.isEmpty()) {
          result.keys_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.keys_.add(value);
        return this;
      }
      public Builder addAllKeys(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.keys_.isEmpty()) {
          result.keys_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.keys_);
        return this;
      }
      public Builder clearKeys() {
        result.keys_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated uint32 vals = 3 [packed = true];
      public java.util.List<java.lang.Integer> getValsList() {
        return java.util.Collections.unmodifiableList(result.vals_);
      }
      public int getValsCount() {
        return result.getValsCount();
      }
      public int getVals(int index) {
        return result.getVals(index);
      }
      public Builder setVals(int index, int value) {
        result.vals_.set(index, value);
        return this;
      }
      public Builder addVals(int value) {
        if (result.vals_.isEmpty()) {
          result.vals_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.vals_.add(value);
        return this;
      }
      public Builder addAllVals(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.vals_.isEmpty()) {
          result.vals_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.vals_);
        return this;
      }
      public Builder clearVals() {
        result.vals_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional .Info info = 4;
      public boolean hasInfo() {
        return result.hasInfo();
      }
      public crosby.binary.Osmformat.Info getInfo() {
        return result.getInfo();
      }
      public Builder setInfo(crosby.binary.Osmformat.Info value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasInfo = true;
        result.info_ = value;
        return this;
      }
      public Builder setInfo(crosby.binary.Osmformat.Info.Builder builderForValue) {
        result.hasInfo = true;
        result.info_ = builderForValue.build();
        return this;
      }
      public Builder mergeInfo(crosby.binary.Osmformat.Info value) {
        if (result.hasInfo() &&
            result.info_ != crosby.binary.Osmformat.Info.getDefaultInstance()) {
          result.info_ =
            crosby.binary.Osmformat.Info.newBuilder(result.info_).mergeFrom(value).buildPartial();
        } else {
          result.info_ = value;
        }
        result.hasInfo = true;
        return this;
      }
      public Builder clearInfo() {
        result.hasInfo = false;
        result.info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
        return this;
      }
      
      // repeated sint64 refs = 8 [packed = true];
      public java.util.List<java.lang.Long> getRefsList() {
        return java.util.Collections.unmodifiableList(result.refs_);
      }
      public int getRefsCount() {
        return result.getRefsCount();
      }
      public long getRefs(int index) {
        return result.getRefs(index);
      }
      public Builder setRefs(int index, long value) {
        result.refs_.set(index, value);
        return this;
      }
      public Builder addRefs(long value) {
        if (result.refs_.isEmpty()) {
          result.refs_ = new java.util.ArrayList<java.lang.Long>();
        }
        result.refs_.add(value);
        return this;
      }
      public Builder addAllRefs(
          java.lang.Iterable<? extends java.lang.Long> values) {
        if (result.refs_.isEmpty()) {
          result.refs_ = new java.util.ArrayList<java.lang.Long>();
        }
        super.addAll(values, result.refs_);
        return this;
      }
      public Builder clearRefs() {
        result.refs_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:Way)
    }
    
    static {
      defaultInstance = new Way(true);
      crosby.binary.Osmformat.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:Way)
  }
  
  public static final class Relation extends
      com.google.protobuf.GeneratedMessage {
    // Use Relation.newBuilder() to construct.
    private Relation() {
      initFields();
    }
    private Relation(boolean noInit) {}
    
    private static final Relation defaultInstance;
    public static Relation getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public Relation getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return crosby.binary.Osmformat.internal_static_Relation_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return crosby.binary.Osmformat.internal_static_Relation_fieldAccessorTable;
    }
    
    public enum MemberType
        implements com.google.protobuf.ProtocolMessageEnum {
      NODE(0, 0),
      WAY(1, 1),
      RELATION(2, 2),
      ;
      
      
      @Override
	public final int getNumber() { return value; }
      
      public static MemberType valueOf(int value) {
        switch (value) {
          case 0: return NODE;
          case 1: return WAY;
          case 2: return RELATION;
          default: return null;
        }
      }
      
      public static com.google.protobuf.Internal.EnumLiteMap<MemberType>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<MemberType>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<MemberType>() {
              @Override
			public MemberType findValueByNumber(int number) {
                return MemberType.valueOf(number)
      ;        }
            };
      
      @Override
	public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      @Override
	public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return crosby.binary.Osmformat.Relation.getDescriptor().getEnumTypes().get(0);
      }
      
      private static final MemberType[] VALUES = {
        NODE, WAY, RELATION, 
      };
      public static MemberType 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 MemberType(int index, int value) {
        this.index = index;
        this.value = value;
      }
      
      static {
        crosby.binary.Osmformat.getDescriptor();
      }
      
      // @@protoc_insertion_point(enum_scope:Relation.MemberType)
    }
    
    // required int64 id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    // repeated uint32 keys = 2 [packed = true];
    public static final int KEYS_FIELD_NUMBER = 2;
    private java.util.List<java.lang.Integer> keys_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getKeysList() {
      return keys_;
    }
    public int getKeysCount() { return keys_.size(); }
    public int getKeys(int index) {
      return keys_.get(index);
    }
    private int keysMemoizedSerializedSize = -1;
    
    // repeated uint32 vals = 3 [packed = true];
    public static final int VALS_FIELD_NUMBER = 3;
    private java.util.List<java.lang.Integer> vals_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getValsList() {
      return vals_;
    }
    public int getValsCount() { return vals_.size(); }
    public int getVals(int index) {
      return vals_.get(index);
    }
    private int valsMemoizedSerializedSize = -1;
    
    // optional .Info info = 4;
    public static final int INFO_FIELD_NUMBER = 4;
    private boolean hasInfo;
    private crosby.binary.Osmformat.Info info_;
    public boolean hasInfo() { return hasInfo; }
    public crosby.binary.Osmformat.Info getInfo() { return info_; }
    
    // repeated int32 roles_sid = 8 [packed = true];
    public static final int ROLES_SID_FIELD_NUMBER = 8;
    private java.util.List<java.lang.Integer> rolesSid_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getRolesSidList() {
      return rolesSid_;
    }
    public int getRolesSidCount() { return rolesSid_.size(); }
    public int getRolesSid(int index) {
      return rolesSid_.get(index);
    }
    private int rolesSidMemoizedSerializedSize = -1;
    
    // repeated sint64 memids = 9 [packed = true];
    public static final int MEMIDS_FIELD_NUMBER = 9;
    private java.util.List<java.lang.Long> memids_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Long> getMemidsList() {
      return memids_;
    }
    public int getMemidsCount() { return memids_.size(); }
    public long getMemids(int index) {
      return memids_.get(index);
    }
    private int memidsMemoizedSerializedSize = -1;
    
    // repeated .Relation.MemberType types = 10 [packed = true];
    public static final int TYPES_FIELD_NUMBER = 10;
    private java.util.List<crosby.binary.Osmformat.Relation.MemberType> types_ =
      java.util.Collections.emptyList();
    public java.util.List<crosby.binary.Osmformat.Relation.MemberType> getTypesList() {
      return types_;
    }
    public int getTypesCount() { return types_.size(); }
    public crosby.binary.Osmformat.Relation.MemberType getTypes(int index) {
      return types_.get(index);
    }
    private int typesMemoizedSerializedSize;
    
    private void initFields() {
      info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      if (!hasId) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasId()) {
        output.writeInt64(1, getId());
      }
      if (getKeysList().size() > 0) {
        output.writeRawVarint32(18);
        output.writeRawVarint32(keysMemoizedSerializedSize);
      }
      for (int element : getKeysList()) {
        output.writeUInt32NoTag(element);
      }
      if (getValsList().size() > 0) {
        output.writeRawVarint32(26);
        output.writeRawVarint32(valsMemoizedSerializedSize);
      }
      for (int element : getValsList()) {
        output.writeUInt32NoTag(element);
      }
      if (hasInfo()) {
        output.writeMessage(4, getInfo());
      }
      if (getRolesSidList().size() > 0) {
        output.writeRawVarint32(66);
        output.writeRawVarint32(rolesSidMemoizedSerializedSize);
      }
      for (int element : getRolesSidList()) {
        output.writeInt32NoTag(element);
      }
      if (getMemidsList().size() > 0) {
        output.writeRawVarint32(74);
        output.writeRawVarint32(memidsMemoizedSerializedSize);
      }
      for (long element : getMemidsList()) {
        output.writeSInt64NoTag(element);
      }
      if (getTypesList().size() > 0) {
        output.writeRawVarint32(82);
        output.writeRawVarint32(typesMemoizedSerializedSize);
      }
      for (crosby.binary.Osmformat.Relation.MemberType element : getTypesList()) {
        output.writeEnumNoTag(element.getNumber());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, getId());
      }
      {
        int dataSize = 0;
        for (int element : getKeysList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(element);
        }
        size += dataSize;
        if (!getKeysList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        keysMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int element : getValsList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(element);
        }
        size += dataSize;
        if (!getValsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        valsMemoizedSerializedSize = dataSize;
      }
      if (hasInfo()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getInfo());
      }
      {
        int dataSize = 0;
        for (int element : getRolesSidList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(element);
        }
        size += dataSize;
        if (!getRolesSidList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        rolesSidMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (long element : getMemidsList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeSInt64SizeNoTag(element);
        }
        size += dataSize;
        if (!getMemidsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        memidsMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (crosby.binary.Osmformat.Relation.MemberType element : getTypesList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeEnumSizeNoTag(element.getNumber());
        }
        size += dataSize;
        if (!getTypesList().isEmpty()) {  size += 1;
          size += com.google.protobuf.CodedOutputStream
            .computeRawVarint32Size(dataSize);
        }typesMemoizedSerializedSize = dataSize;
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static crosby.binary.Osmformat.Relation parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.Relation parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.Relation parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static crosby.binary.Osmformat.Relation parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.Relation parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.Relation parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static crosby.binary.Osmformat.Relation parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.Relation parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static crosby.binary.Osmformat.Relation parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static crosby.binary.Osmformat.Relation parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(crosby.binary.Osmformat.Relation prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private crosby.binary.Osmformat.Relation result;
      
      // Construct using crosby.binary.Osmformat.Relation.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new crosby.binary.Osmformat.Relation();
        return builder;
      }
      
      @Override
	protected crosby.binary.Osmformat.Relation internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new crosby.binary.Osmformat.Relation();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return crosby.binary.Osmformat.Relation.getDescriptor();
      }
      
      @Override
	public crosby.binary.Osmformat.Relation getDefaultInstanceForType() {
        return crosby.binary.Osmformat.Relation.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public crosby.binary.Osmformat.Relation build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private crosby.binary.Osmformat.Relation buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public crosby.binary.Osmformat.Relation buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.keys_ != java.util.Collections.EMPTY_LIST) {
          result.keys_ =
            java.util.Collections.unmodifiableList(result.keys_);
        }
        if (result.vals_ != java.util.Collections.EMPTY_LIST) {
          result.vals_ =
            java.util.Collections.unmodifiableList(result.vals_);
        }
        if (result.rolesSid_ != java.util.Collections.EMPTY_LIST) {
          result.rolesSid_ =
            java.util.Collections.unmodifiableList(result.rolesSid_);
        }
        if (result.memids_ != java.util.Collections.EMPTY_LIST) {
          result.memids_ =
            java.util.Collections.unmodifiableList(result.memids_);
        }
        if (result.types_ != java.util.Collections.EMPTY_LIST) {
          result.types_ =
            java.util.Collections.unmodifiableList(result.types_);
        }
        crosby.binary.Osmformat.Relation returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof crosby.binary.Osmformat.Relation) {
          return mergeFrom((crosby.binary.Osmformat.Relation)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(crosby.binary.Osmformat.Relation other) {
        if (other == crosby.binary.Osmformat.Relation.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (!other.keys_.isEmpty()) {
          if (result.keys_.isEmpty()) {
            result.keys_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.keys_.addAll(other.keys_);
        }
        if (!other.vals_.isEmpty()) {
          if (result.vals_.isEmpty()) {
            result.vals_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.vals_.addAll(other.vals_);
        }
        if (other.hasInfo()) {
          mergeInfo(other.getInfo());
        }
        if (!other.rolesSid_.isEmpty()) {
          if (result.rolesSid_.isEmpty()) {
            result.rolesSid_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.rolesSid_.addAll(other.rolesSid_);
        }
        if (!other.memids_.isEmpty()) {
          if (result.memids_.isEmpty()) {
            result.memids_ = new java.util.ArrayList<java.lang.Long>();
          }
          result.memids_.addAll(other.memids_);
        }
        if (!other.types_.isEmpty()) {
          if (result.types_.isEmpty()) {
            result.types_ = new java.util.ArrayList<crosby.binary.Osmformat.Relation.MemberType>();
          }
          result.types_.addAll(other.types_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setId(input.readInt64());
              break;
            }
            case 16: {
              addKeys(input.readUInt32());
              break;
            }
            case 18: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addKeys(input.readUInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 24: {
              addVals(input.readUInt32());
              break;
            }
            case 26: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addVals(input.readUInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 34: {
              crosby.binary.Osmformat.Info.Builder subBuilder = crosby.binary.Osmformat.Info.newBuilder();
              if (hasInfo()) {
                subBuilder.mergeFrom(getInfo());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setInfo(subBuilder.buildPartial());
              break;
            }
            case 64: {
              addRolesSid(input.readInt32());
              break;
            }
            case 66: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addRolesSid(input.readInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 72: {
              addMemids(input.readSInt64());
              break;
            }
            case 74: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addMemids(input.readSInt64());
              }
              input.popLimit(limit);
              break;
            }
            case 80: {
              int rawValue = input.readEnum();
              crosby.binary.Osmformat.Relation.MemberType value = crosby.binary.Osmformat.Relation.MemberType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(10, rawValue);
              } else {
                addTypes(value);
              }
              break;
            }
            case 82: {
              int length = input.readRawVarint32();
              int oldLimit = input.pushLimit(length);
              while(input.getBytesUntilLimit() > 0) {
                int rawValue = input.readEnum();
                crosby.binary.Osmformat.Relation.MemberType value = crosby.binary.Osmformat.Relation.MemberType.valueOf(rawValue);
                if (value == null) {
                  unknownFields.mergeVarintField(10, rawValue);
                } else {
                  addTypes(value);
                }
              }
              input.popLimit(oldLimit);
              break;
            }
          }
        }
      }
      
      
      // required int64 id = 1;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // repeated uint32 keys = 2 [packed = true];
      public java.util.List<java.lang.Integer> getKeysList() {
        return java.util.Collections.unmodifiableList(result.keys_);
      }
      public int getKeysCount() {
        return result.getKeysCount();
      }
      public int getKeys(int index) {
        return result.getKeys(index);
      }
      public Builder setKeys(int index, int value) {
        result.keys_.set(index, value);
        return this;
      }
      public Builder addKeys(int value) {
        if (result.keys_.isEmpty()) {
          result.keys_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.keys_.add(value);
        return this;
      }
      public Builder addAllKeys(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.keys_.isEmpty()) {
          result.keys_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.keys_);
        return this;
      }
      public Builder clearKeys() {
        result.keys_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated uint32 vals = 3 [packed = true];
      public java.util.List<java.lang.Integer> getValsList() {
        return java.util.Collections.unmodifiableList(result.vals_);
      }
      public int getValsCount() {
        return result.getValsCount();
      }
      public int getVals(int index) {
        return result.getVals(index);
      }
      public Builder setVals(int index, int value) {
        result.vals_.set(index, value);
        return this;
      }
      public Builder addVals(int value) {
        if (result.vals_.isEmpty()) {
          result.vals_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.vals_.add(value);
        return this;
      }
      public Builder addAllVals(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.vals_.isEmpty()) {
          result.vals_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.vals_);
        return this;
      }
      public Builder clearVals() {
        result.vals_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional .Info info = 4;
      public boolean hasInfo() {
        return result.hasInfo();
      }
      public crosby.binary.Osmformat.Info getInfo() {
        return result.getInfo();
      }
      public Builder setInfo(crosby.binary.Osmformat.Info value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasInfo = true;
        result.info_ = value;
        return this;
      }
      public Builder setInfo(crosby.binary.Osmformat.Info.Builder builderForValue) {
        result.hasInfo = true;
        result.info_ = builderForValue.build();
        return this;
      }
      public Builder mergeInfo(crosby.binary.Osmformat.Info value) {
        if (result.hasInfo() &&
            result.info_ != crosby.binary.Osmformat.Info.getDefaultInstance()) {
          result.info_ =
            crosby.binary.Osmformat.Info.newBuilder(result.info_).mergeFrom(value).buildPartial();
        } else {
          result.info_ = value;
        }
        result.hasInfo = true;
        return this;
      }
      public Builder clearInfo() {
        result.hasInfo = false;
        result.info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
        return this;
      }
      
      // repeated int32 roles_sid = 8 [packed = true];
      public java.util.List<java.lang.Integer> getRolesSidList() {
        return java.util.Collections.unmodifiableList(result.rolesSid_);
      }
      public int getRolesSidCount() {
        return result.getRolesSidCount();
      }
      public int getRolesSid(int index) {
        return result.getRolesSid(index);
      }
      public Builder setRolesSid(int index, int value) {
        result.rolesSid_.set(index, value);
        return this;
      }
      public Builder addRolesSid(int value) {
        if (result.rolesSid_.isEmpty()) {
          result.rolesSid_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.rolesSid_.add(value);
        return this;
      }
      public Builder addAllRolesSid(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.rolesSid_.isEmpty()) {
          result.rolesSid_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.rolesSid_);
        return this;
      }
      public Builder clearRolesSid() {
        result.rolesSid_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated sint64 memids = 9 [packed = true];
      public java.util.List<java.lang.Long> getMemidsList() {
        return java.util.Collections.unmodifiableList(result.memids_);
      }
      public int getMemidsCount() {
        return result.getMemidsCount();
      }
      public long getMemids(int index) {
        return result.getMemids(index);
      }
      public Builder setMemids(int index, long value) {
        result.memids_.set(index, value);
        return this;
      }
      public Builder addMemids(long value) {
        if (result.memids_.isEmpty()) {
          result.memids_ = new java.util.ArrayList<java.lang.Long>();
        }
        result.memids_.add(value);
        return this;
      }
      public Builder addAllMemids(
          java.lang.Iterable<? extends java.lang.Long> values) {
        if (result.memids_.isEmpty()) {
          result.memids_ = new java.util.ArrayList<java.lang.Long>();
        }
        super.addAll(values, result.memids_);
        return this;
      }
      public Builder clearMemids() {
        result.memids_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .Relation.MemberType types = 10 [packed = true];
      public java.util.List<crosby.binary.Osmformat.Relation.MemberType> getTypesList() {
        return java.util.Collections.unmodifiableList(result.types_);
      }
      public int getTypesCount() {
        return result.getTypesCount();
      }
      public crosby.binary.Osmformat.Relation.MemberType getTypes(int index) {
        return result.getTypes(index);
      }
      public Builder setTypes(int index, crosby.binary.Osmformat.Relation.MemberType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.types_.set(index, value);
        return this;
      }
      public Builder addTypes(crosby.binary.Osmformat.Relation.MemberType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.types_.isEmpty()) {
          result.types_ = new java.util.ArrayList<crosby.binary.Osmformat.Relation.MemberType>();
        }
        result.types_.add(value);
        return this;
      }
      public Builder addAllTypes(
          java.lang.Iterable<? extends crosby.binary.Osmformat.Relation.MemberType> values) {
        if (result.types_.isEmpty()) {
          result.types_ = new java.util.ArrayList<crosby.binary.Osmformat.Relation.MemberType>();
        }
        super.addAll(values, result.types_);
        return this;
      }
      public Builder clearTypes() {
        result.types_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:Relation)
    }
    
    static {
      defaultInstance = new Relation(true);
      crosby.binary.Osmformat.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:Relation)
  }
  
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_HeaderBlock_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_HeaderBlock_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_HeaderBBox_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_HeaderBBox_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_PrimitiveBlock_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_PrimitiveBlock_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_PrimitiveGroup_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_PrimitiveGroup_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_StringTable_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_StringTable_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Info_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Info_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_DenseInfo_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_DenseInfo_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_ChangeSet_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_ChangeSet_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Node_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Node_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_DenseNodes_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_DenseNodes_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Way_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Way_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Relation_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Relation_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\023src/osmformat.proto\"\206\001\n\013HeaderBlock\022\031\n" +
      "\004bbox\030\001 \001(\0132\013.HeaderBBox\022\031\n\021required_fea" +
      "tures\030\004 \003(\t\022\031\n\021optional_features\030\005 \003(\t\022\026" +
      "\n\016writingprogram\030\020 \001(\t\022\016\n\006source\030\021 \001(\t\"F" +
      "\n\nHeaderBBox\022\014\n\004left\030\001 \002(\022\022\r\n\005right\030\002 \002(" +
      "\022\022\013\n\003top\030\003 \002(\022\022\016\n\006bottom\030\004 \002(\022\"\304\001\n\016Primi" +
      "tiveBlock\022!\n\013stringtable\030\001 \002(\0132\014.StringT" +
      "able\022\'\n\016primitivegroup\030\002 \003(\0132\017.Primitive" +
      "Group\022\030\n\013granularity\030\021 \001(\005:\003100\022\025\n\nlat_o" +
      "ffset\030\023 \001(\003:\0010\022\025\n\nlon_offset\030\024 \001(\003:\0010\022\036\n",
      "\020date_granularity\030\022 \001(\005:\0041000\"\224\001\n\016Primit" +
      "iveGroup\022\024\n\005nodes\030\001 \003(\0132\005.Node\022\032\n\005dense\030" +
      "\002 \001(\0132\013.DenseNodes\022\022\n\004ways\030\003 \003(\0132\004.Way\022\034" +
      "\n\trelations\030\004 \003(\0132\t.Relation\022\036\n\nchangese" +
      "ts\030\005 \003(\0132\n.ChangeSet\"\030\n\013StringTable\022\t\n\001s" +
      "\030\001 \003(\014\"`\n\004Info\022\023\n\007version\030\001 \001(\005:\002-1\022\021\n\tt" +
      "imestamp\030\002 \001(\003\022\021\n\tchangeset\030\003 \001(\003\022\013\n\003uid" +
      "\030\004 \001(\005\022\020\n\010user_sid\030\005 \001(\005\"u\n\tDenseInfo\022\023\n" +
      "\007version\030\001 \003(\005B\002\020\001\022\025\n\ttimestamp\030\002 \003(\022B\002\020" +
      "\001\022\025\n\tchangeset\030\003 \003(\022B\002\020\001\022\017\n\003uid\030\004 \003(\021B\002\020",
      "\001\022\024\n\010user_sid\030\005 \003(\021B\002\020\001\"\027\n\tChangeSet\022\n\n\002" +
      "id\030\001 \002(\003\"e\n\004Node\022\n\n\002id\030\001 \002(\022\022\020\n\004keys\030\002 \003" +
      "(\rB\002\020\001\022\020\n\004vals\030\003 \003(\rB\002\020\001\022\023\n\004info\030\004 \001(\0132\005" +
      ".Info\022\013\n\003lat\030\010 \002(\022\022\013\n\003lon\030\t \002(\022\"t\n\nDense" +
      "Nodes\022\016\n\002id\030\001 \003(\022B\002\020\001\022\035\n\tdenseinfo\030\005 \001(\013" +
      "2\n.DenseInfo\022\017\n\003lat\030\010 \003(\022B\002\020\001\022\017\n\003lon\030\t \003" +
      "(\022B\002\020\001\022\025\n\tkeys_vals\030\n \003(\005B\002\020\001\"\\\n\003Way\022\n\n\002" +
      "id\030\001 \002(\003\022\020\n\004keys\030\002 \003(\rB\002\020\001\022\020\n\004vals\030\003 \003(\r" +
      "B\002\020\001\022\023\n\004info\030\004 \001(\0132\005.Info\022\020\n\004refs\030\010 \003(\022B" +
      "\002\020\001\"\322\001\n\010Relation\022\n\n\002id\030\001 \002(\003\022\020\n\004keys\030\002 \003",
      "(\rB\002\020\001\022\020\n\004vals\030\003 \003(\rB\002\020\001\022\023\n\004info\030\004 \001(\0132\005" +
      ".Info\022\025\n\troles_sid\030\010 \003(\005B\002\020\001\022\022\n\006memids\030\t" +
      " \003(\022B\002\020\001\022\'\n\005types\030\n \003(\0162\024.Relation.Membe" +
      "rTypeB\002\020\001\"-\n\nMemberType\022\010\n\004NODE\020\000\022\007\n\003WAY" +
      "\020\001\022\014\n\010RELATION\020\002B\017\n\rcrosby.binary"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
      new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
        @Override
		public com.google.protobuf.ExtensionRegistry assignDescriptors(
            com.google.protobuf.Descriptors.FileDescriptor root) {
          descriptor = root;
          internal_static_HeaderBlock_descriptor =
            getDescriptor().getMessageTypes().get(0);
          internal_static_HeaderBlock_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_HeaderBlock_descriptor,
              new java.lang.String[] { "Bbox", "RequiredFeatures", "OptionalFeatures", "Writingprogram", "Source", },
              crosby.binary.Osmformat.HeaderBlock.class,
              crosby.binary.Osmformat.HeaderBlock.Builder.class);
          internal_static_HeaderBBox_descriptor =
            getDescriptor().getMessageTypes().get(1);
          internal_static_HeaderBBox_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_HeaderBBox_descriptor,
              new java.lang.String[] { "Left", "Right", "Top", "Bottom", },
              crosby.binary.Osmformat.HeaderBBox.class,
              crosby.binary.Osmformat.HeaderBBox.Builder.class);
          internal_static_PrimitiveBlock_descriptor =
            getDescriptor().getMessageTypes().get(2);
          internal_static_PrimitiveBlock_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_PrimitiveBlock_descriptor,
              new java.lang.String[] { "Stringtable", "Primitivegroup", "Granularity", "LatOffset", "LonOffset", "DateGranularity", },
              crosby.binary.Osmformat.PrimitiveBlock.class,
              crosby.binary.Osmformat.PrimitiveBlock.Builder.class);
          internal_static_PrimitiveGroup_descriptor =
            getDescriptor().getMessageTypes().get(3);
          internal_static_PrimitiveGroup_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_PrimitiveGroup_descriptor,
              new java.lang.String[] { "Nodes", "Dense", "Ways", "Relations", "Changesets", },
              crosby.binary.Osmformat.PrimitiveGroup.class,
              crosby.binary.Osmformat.PrimitiveGroup.Builder.class);
          internal_static_StringTable_descriptor =
            getDescriptor().getMessageTypes().get(4);
          internal_static_StringTable_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_StringTable_descriptor,
              new java.lang.String[] { "S", },
              crosby.binary.Osmformat.StringTable.class,
              crosby.binary.Osmformat.StringTable.Builder.class);
          internal_static_Info_descriptor =
            getDescriptor().getMessageTypes().get(5);
          internal_static_Info_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Info_descriptor,
              new java.lang.String[] { "Version", "Timestamp", "Changeset", "Uid", "UserSid", },
              crosby.binary.Osmformat.Info.class,
              crosby.binary.Osmformat.Info.Builder.class);
          internal_static_DenseInfo_descriptor =
            getDescriptor().getMessageTypes().get(6);
          internal_static_DenseInfo_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_DenseInfo_descriptor,
              new java.lang.String[] { "Version", "Timestamp", "Changeset", "Uid", "UserSid", },
              crosby.binary.Osmformat.DenseInfo.class,
              crosby.binary.Osmformat.DenseInfo.Builder.class);
          internal_static_ChangeSet_descriptor =
            getDescriptor().getMessageTypes().get(7);
          internal_static_ChangeSet_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_ChangeSet_descriptor,
              new java.lang.String[] { "Id", },
              crosby.binary.Osmformat.ChangeSet.class,
              crosby.binary.Osmformat.ChangeSet.Builder.class);
          internal_static_Node_descriptor =
            getDescriptor().getMessageTypes().get(8);
          internal_static_Node_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Node_descriptor,
              new java.lang.String[] { "Id", "Keys", "Vals", "Info", "Lat", "Lon", },
              crosby.binary.Osmformat.Node.class,
              crosby.binary.Osmformat.Node.Builder.class);
          internal_static_DenseNodes_descriptor =
            getDescriptor().getMessageTypes().get(9);
          internal_static_DenseNodes_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_DenseNodes_descriptor,
              new java.lang.String[] { "Id", "Denseinfo", "Lat", "Lon", "KeysVals", },
              crosby.binary.Osmformat.DenseNodes.class,
              crosby.binary.Osmformat.DenseNodes.Builder.class);
          internal_static_Way_descriptor =
            getDescriptor().getMessageTypes().get(10);
          internal_static_Way_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Way_descriptor,
              new java.lang.String[] { "Id", "Keys", "Vals", "Info", "Refs", },
              crosby.binary.Osmformat.Way.class,
              crosby.binary.Osmformat.Way.Builder.class);
          internal_static_Relation_descriptor =
            getDescriptor().getMessageTypes().get(11);
          internal_static_Relation_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Relation_descriptor,
              new java.lang.String[] { "Id", "Keys", "Vals", "Info", "RolesSid", "Memids", "Types", },
              crosby.binary.Osmformat.Relation.class,
              crosby.binary.Osmformat.Relation.Builder.class);
          return null;
        }
      };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        }, assigner);
  }
  
  public static void internalForceInit() {}
  
  // @@protoc_insertion_point(outer_class_scope)
}
