content: // Generated by the protocol buffer compiler.  DO NOT EDIT!
  // NO CHECKED-IN PROTOBUF GENCODE
  // source: messages.proto
  // Protobuf Java Version: 4.28.2
  
  package finsky.protos;
  
  /**
   * Protobuf type {@code finsky.protos.DocV2}
   */
  public  final class DocV2 extends
      com.google.protobuf.GeneratedMessageLite<
          DocV2, DocV2.Builder> implements
      // @@protoc_insertion_point(message_implements:finsky.protos.DocV2)
      DocV2OrBuilder {
    private DocV2() {
      docid_ = "";
      backendDocid_ = "";
      title_ = "";
      creator_ = "";
      descriptionHtml_ = "";
      offer_ = emptyProtobufList();
      image_ = emptyProtobufList();
      child_ = emptyProtobufList();
      detailsUrl_ = "";
      shareUrl_ = "";
      reviewsUrl_ = "";
      backendUrl_ = "";
      purchaseDetailsUrl_ = "";
      subtitle_ = "";
      promotionalDescription_ = "";
      reviewSnippetsUrl_ = "";
      reviewQuestionsUrl_ = "";
      reviewSummaryUrl_ = "";
    }
    public interface AggregateRatingOrBuilder extends
        // @@protoc_insertion_point(interface_extends:finsky.protos.DocV2.AggregateRating)
        com.google.protobuf.MessageLiteOrBuilder {
  
      /**
       * <code>optional int32 type = 1 [default = 1];</code>
       * @return Whether the type field is set.
       */
      boolean hasType();
      /**
       * <code>optional int32 type = 1 [default = 1];</code>
       * @return The type.
       */
      int getType();
  
      /**
       * <code>optional float starRating = 2;</code>
       * @return Whether the starRating field is set.
       */
      boolean hasStarRating();
      /**
       * <code>optional float starRating = 2;</code>
       * @return The starRating.
       */
      float getStarRating();
  
      /**
       * <code>optional uint64 ratingsCount = 3;</code>
       * @return Whether the ratingsCount field is set.
       */
      boolean hasRatingsCount();
      /**
       * <code>optional uint64 ratingsCount = 3;</code>
       * @return The ratingsCount.
       */
      long getRatingsCount();
  
      /**
       * <code>optional uint64 oneStarRatings = 4;</code>
       * @return Whether the oneStarRatings field is set.
       */
      boolean hasOneStarRatings();
      /**
       * <code>optional uint64 oneStarRatings = 4;</code>
       * @return The oneStarRatings.
       */
      long getOneStarRatings();
  
      /**
       * <code>optional uint64 twoStarRatings = 5;</code>
       * @return Whether the twoStarRatings field is set.
       */
      boolean hasTwoStarRatings();
      /**
       * <code>optional uint64 twoStarRatings = 5;</code>
       * @return The twoStarRatings.
       */
      long getTwoStarRatings();
  
      /**
       * <code>optional uint64 threeStarRatings = 6;</code>
       * @return Whether the threeStarRatings field is set.
       */
      boolean hasThreeStarRatings();
      /**
       * <code>optional uint64 threeStarRatings = 6;</code>
       * @return The threeStarRatings.
       */
      long getThreeStarRatings();
  
      /**
       * <code>optional uint64 fourStarRatings = 7;</code>
       * @return Whether the fourStarRatings field is set.
       */
      boolean hasFourStarRatings();
      /**
       * <code>optional uint64 fourStarRatings = 7;</code>
       * @return The fourStarRatings.
       */
      long getFourStarRatings();
  
      /**
       * <code>optional uint64 fiveStarRatings = 8;</code>
       * @return Whether the fiveStarRatings field is set.
       */
      boolean hasFiveStarRatings();
      /**
       * <code>optional uint64 fiveStarRatings = 8;</code>
       * @return The fiveStarRatings.
       */
      long getFiveStarRatings();
  
      /**
       * <code>optional uint64 thumbsUpCount = 9;</code>
       * @return Whether the thumbsUpCount field is set.
       */
      boolean hasThumbsUpCount();
      /**
       * <code>optional uint64 thumbsUpCount = 9;</code>
       * @return The thumbsUpCount.
       */
      long getThumbsUpCount();
  
      /**
       * <code>optional uint64 thumbsDownCount = 10;</code>
       * @return Whether the thumbsDownCount field is set.
       */
      boolean hasThumbsDownCount();
      /**
       * <code>optional uint64 thumbsDownCount = 10;</code>
       * @return The thumbsDownCount.
       */
      long getThumbsDownCount();
  
      /**
       * <code>optional uint64 commentCount = 11;</code>
       * @return Whether the commentCount field is set.
       */
      boolean hasCommentCount();
      /**
       * <code>optional uint64 commentCount = 11;</code>
       * @return The commentCount.
       */
      long getCommentCount();
  
      /**
       * <code>optional double bayesianMeanRating = 12;</code>
       * @return Whether the bayesianMeanRating field is set.
       */
      boolean hasBayesianMeanRating();
      /**
       * <code>optional double bayesianMeanRating = 12;</code>
       * @return The bayesianMeanRating.
       */
      double getBayesianMeanRating();
  
      /**
       * <pre>
       * repeated Tip tip = 13;
       * </pre>
       *
       * <code>optional string ratingLabel = 17;</code>
       * @return Whether the ratingLabel field is set.
       */
      boolean hasRatingLabel();
      /**
       * <pre>
       * repeated Tip tip = 13;
       * </pre>
       *
       * <code>optional string ratingLabel = 17;</code>
       * @return The ratingLabel.
       */
      java.lang.String getRatingLabel();
      /**
       * <pre>
       * repeated Tip tip = 13;
       * </pre>
       *
       * <code>optional string ratingLabel = 17;</code>
       * @return The bytes for ratingLabel.
       */
      com.google.protobuf.ByteString
          getRatingLabelBytes();
  
      /**
       * <code>optional string ratingCountLabelAbbreviated = 18;</code>
       * @return Whether the ratingCountLabelAbbreviated field is set.
       */
      boolean hasRatingCountLabelAbbreviated();
      /**
       * <code>optional string ratingCountLabelAbbreviated = 18;</code>
       * @return The ratingCountLabelAbbreviated.
       */
      java.lang.String getRatingCountLabelAbbreviated();
      /**
       * <code>optional string ratingCountLabelAbbreviated = 18;</code>
       * @return The bytes for ratingCountLabelAbbreviated.
       */
      com.google.protobuf.ByteString
          getRatingCountLabelAbbreviatedBytes();
  
      /**
       * <code>optional string ratingCountLabel = 19;</code>
       * @return Whether the ratingCountLabel field is set.
       */
      boolean hasRatingCountLabel();
      /**
       * <code>optional string ratingCountLabel = 19;</code>
       * @return The ratingCountLabel.
       */
      java.lang.String getRatingCountLabel();
      /**
       * <code>optional string ratingCountLabel = 19;</code>
       * @return The bytes for ratingCountLabel.
       */
      com.google.protobuf.ByteString
          getRatingCountLabelBytes();
    }
    /**
     * Protobuf type {@code finsky.protos.DocV2.AggregateRating}
     */
    public  static final class AggregateRating extends
        com.google.protobuf.GeneratedMessageLite<
            AggregateRating, AggregateRating.Builder> implements
        // @@protoc_insertion_point(message_implements:finsky.protos.DocV2.AggregateRating)
        AggregateRatingOrBuilder {
      private AggregateRating() {
        type_ = 1;
        ratingLabel_ = "";
        ratingCountLabelAbbreviated_ = "";
        ratingCountLabel_ = "";
      }
      private int bitField0_;
      public static final int TYPE_FIELD_NUMBER = 1;
      private int type_;
      /**
       * <code>optional int32 type = 1 [default = 1];</code>
       * @return Whether the type field is set.
       */
      @java.lang.Override
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional int32 type = 1 [default = 1];</code>
       * @return The type.
       */
      @java.lang.Override
      public int getType() {
        return type_;
      }
      /**
       * <code>optional int32 type = 1 [default = 1];</code>
       * @param value The type to set.
       */
      private void setType(int value) {
        bitField0_ |= 0x00000001;
        type_ = value;
      }
      /**
       * <code>optional int32 type = 1 [default = 1];</code>
       */
      private void clearType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = 1;
      }
  
      public static final int STARRATING_FIELD_NUMBER = 2;
      private float starRating_;
      /**
       * <code>optional float starRating = 2;</code>
       * @return Whether the starRating field is set.
       */
      @java.lang.Override
      public boolean hasStarRating() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional float starRating = 2;</code>
       * @return The starRating.
       */
      @java.lang.Override
      public float getStarRating() {
        return starRating_;
      }
      /**
       * <code>optional float starRating = 2;</code>
       * @param value The starRating to set.
       */
      private void setStarRating(float value) {
        bitField0_ |= 0x00000002;
        starRating_ = value;
      }
      /**
       * <code>optional float starRating = 2;</code>
       */
      private void clearStarRating() {
        bitField0_ = (bitField0_ & ~0x00000002);
        starRating_ = 0F;
      }
  
      public static final int RATINGSCOUNT_FIELD_NUMBER = 3;
      private long ratingsCount_;
      /**
       * <code>optional uint64 ratingsCount = 3;</code>
       * @return Whether the ratingsCount field is set.
       */
      @java.lang.Override
      public boolean hasRatingsCount() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional uint64 ratingsCount = 3;</code>
       * @return The ratingsCount.
       */
      @java.lang.Override
      public long getRatingsCount() {
        return ratingsCount_;
      }
      /**
       * <code>optional uint64 ratingsCount = 3;</code>
       * @param value The ratingsCount to set.
       */
      private void setRatingsCount(long value) {
        bitField0_ |= 0x00000004;
        ratingsCount_ = value;
      }
      /**
       * <code>optional uint64 ratingsCount = 3;</code>
       */
      private void clearRatingsCount() {
        bitField0_ = (bitField0_ & ~0x00000004);
        ratingsCount_ = 0L;
      }
  
      public static final int ONESTARRATINGS_FIELD_NUMBER = 4;
      private long oneStarRatings_;
      /**
       * <code>optional uint64 oneStarRatings = 4;</code>
       * @return Whether the oneStarRatings field is set.
       */
      @java.lang.Override
      public boolean hasOneStarRatings() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional uint64 oneStarRatings = 4;</code>
       * @return The oneStarRatings.
       */
      @java.lang.Override
      public long getOneStarRatings() {
        return oneStarRatings_;
      }
      /**
       * <code>optional uint64 oneStarRatings = 4;</code>
       * @param value The oneStarRatings to set.
       */
      private void setOneStarRatings(long value) {
        bitField0_ |= 0x00000008;
        oneStarRatings_ = value;
      }
      /**
       * <code>optional uint64 oneStarRatings = 4;</code>
       */
      private void clearOneStarRatings() {
        bitField0_ = (bitField0_ & ~0x00000008);
        oneStarRatings_ = 0L;
      }
  
      public static final int TWOSTARRATINGS_FIELD_NUMBER = 5;
      private long twoStarRatings_;
      /**
       * <code>optional uint64 twoStarRatings = 5;</code>
       * @return Whether the twoStarRatings field is set.
       */
      @java.lang.Override
      public boolean hasTwoStarRatings() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>optional uint64 twoStarRatings = 5;</code>
       * @return The twoStarRatings.
       */
      @java.lang.Override
      public long getTwoStarRatings() {
        return twoStarRatings_;
      }
      /**
       * <code>optional uint64 twoStarRatings = 5;</code>
       * @param value The twoStarRatings to set.
       */
      private void setTwoStarRatings(long value) {
        bitField0_ |= 0x00000010;
        twoStarRatings_ = value;
      }
      /**
       * <code>optional uint64 twoStarRatings = 5;</code>
       */
      private void clearTwoStarRatings() {
        bitField0_ = (bitField0_ & ~0x00000010);
        twoStarRatings_ = 0L;
      }
  
      public static final int THREESTARRATINGS_FIELD_NUMBER = 6;
      private long threeStarRatings_;
      /**
       * <code>optional uint64 threeStarRatings = 6;</code>
       * @return Whether the threeStarRatings field is set.
       */
      @java.lang.Override
      public boolean hasThreeStarRatings() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>optional uint64 threeStarRatings = 6;</code>
       * @return The threeStarRatings.
       */
      @java.lang.Override
      public long getThreeStarRatings() {
        return threeStarRatings_;
      }
      /**
       * <code>optional uint64 threeStarRatings = 6;</code>
       * @param value The threeStarRatings to set.
       */
      private void setThreeStarRatings(long value) {
        bitField0_ |= 0x00000020;
        threeStarRatings_ = value;
      }
      /**
       * <code>optional uint64 threeStarRatings = 6;</code>
       */
      private void clearThreeStarRatings() {
        bitField0_ = (bitField0_ & ~0x00000020);
        threeStarRatings_ = 0L;
      }
  
      public static final int FOURSTARRATINGS_FIELD_NUMBER = 7;
      private long fourStarRatings_;
      /**
       * <code>optional uint64 fourStarRatings = 7;</code>
       * @return Whether the fourStarRatings field is set.
       */
      @java.lang.Override
      public boolean hasFourStarRatings() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <code>optional uint64 fourStarRatings = 7;</code>
       * @return The fourStarRatings.
       */
      @java.lang.Override
      public long getFourStarRatings() {
        return fourStarRatings_;
      }
      /**
       * <code>optional uint64 fourStarRatings = 7;</code>
       * @param value The fourStarRatings to set.
       */
      private void setFourStarRatings(long value) {
        bitField0_ |= 0x00000040;
        fourStarRatings_ = value;
      }
      /**
       * <code>optional uint64 fourStarRatings = 7;</code>
       */
      private void clearFourStarRatings() {
        bitField0_ = (bitField0_ & ~0x00000040);
        fourStarRatings_ = 0L;
      }
  
      public static final int FIVESTARRATINGS_FIELD_NUMBER = 8;
      private long fiveStarRatings_;
      /**
       * <code>optional uint64 fiveStarRatings = 8;</code>
       * @return Whether the fiveStarRatings field is set.
       */
      @java.lang.Override
      public boolean hasFiveStarRatings() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <code>optional uint64 fiveStarRatings = 8;</code>
       * @return The fiveStarRatings.
       */
      @java.lang.Override
      public long getFiveStarRatings() {
        return fiveStarRatings_;
      }
      /**
       * <code>optional uint64 fiveStarRatings = 8;</code>
       * @param value The fiveStarRatings to set.
       */
      private void setFiveStarRatings(long value) {
        bitField0_ |= 0x00000080;
        fiveStarRatings_ = value;
      }
      /**
       * <code>optional uint64 fiveStarRatings = 8;</code>
       */
      private void clearFiveStarRatings() {
        bitField0_ = (bitField0_ & ~0x00000080);
        fiveStarRatings_ = 0L;
      }
  
      public static final int THUMBSUPCOUNT_FIELD_NUMBER = 9;
      private long thumbsUpCount_;
      /**
       * <code>optional uint64 thumbsUpCount = 9;</code>
       * @return Whether the thumbsUpCount field is set.
       */
      @java.lang.Override
      public boolean hasThumbsUpCount() {
        return ((bitField0_ & 0x00000100) != 0);
      }
      /**
       * <code>optional uint64 thumbsUpCount = 9;</code>
       * @return The thumbsUpCount.
       */
      @java.lang.Override
      public long getThumbsUpCount() {
        return thumbsUpCount_;
      }
      /**
       * <code>optional uint64 thumbsUpCount = 9;</code>
       * @param value The thumbsUpCount to set.
       */
      private void setThumbsUpCount(long value) {
        bitField0_ |= 0x00000100;
        thumbsUpCount_ = value;
      }
      /**
       * <code>optional uint64 thumbsUpCount = 9;</code>
       */
      private void clearThumbsUpCount() {
        bitField0_ = (bitField0_ & ~0x00000100);
        thumbsUpCount_ = 0L;
      }
  
      public static final int THUMBSDOWNCOUNT_FIELD_NUMBER = 10;
      private long thumbsDownCount_;
      /**
       * <code>optional uint64 thumbsDownCount = 10;</code>
       * @return Whether the thumbsDownCount field is set.
       */
      @java.lang.Override
      public boolean hasThumbsDownCount() {
        return ((bitField0_ & 0x00000200) != 0);
      }
      /**
       * <code>optional uint64 thumbsDownCount = 10;</code>
       * @return The thumbsDownCount.
       */
      @java.lang.Override
      public long getThumbsDownCount() {
        return thumbsDownCount_;
      }
      /**
       * <code>optional uint64 thumbsDownCount = 10;</code>
       * @param value The thumbsDownCount to set.
       */
      private void setThumbsDownCount(long value) {
        bitField0_ |= 0x00000200;
        thumbsDownCount_ = value;
      }
      /**
       * <code>optional uint64 thumbsDownCount = 10;</code>
       */
      private void clearThumbsDownCount() {
        bitField0_ = (bitField0_ & ~0x00000200);
        thumbsDownCount_ = 0L;
      }
  
      public static final int COMMENTCOUNT_FIELD_NUMBER = 11;
      private long commentCount_;
      /**
       * <code>optional uint64 commentCount = 11;</code>
       * @return Whether the commentCount field is set.
       */
      @java.lang.Override
      public boolean hasCommentCount() {
        return ((bitField0_ & 0x00000400) != 0);
      }
      /**
       * <code>optional uint64 commentCount = 11;</code>
       * @return The commentCount.
       */
      @java.lang.Override
      public long getCommentCount() {
        return commentCount_;
      }
      /**
       * <code>optional uint64 commentCount = 11;</code>
       * @param value The commentCount to set.
       */
      private void setCommentCount(long value) {
        bitField0_ |= 0x00000400;
        commentCount_ = value;
      }
      /**
       * <code>optional uint64 commentCount = 11;</code>
       */
      private void clearCommentCount() {
        bitField0_ = (bitField0_ & ~0x00000400);
        commentCount_ = 0L;
      }
  
      public static final int BAYESIANMEANRATING_FIELD_NUMBER = 12;
      private double bayesianMeanRating_;
      /**
       * <code>optional double bayesianMeanRating = 12;</code>
       * @return Whether the bayesianMeanRating field is set.
       */
      @java.lang.Override
      public boolean hasBayesianMeanRating() {
        return ((bitField0_ & 0x00000800) != 0);
      }
      /**
       * <code>optional double bayesianMeanRating = 12;</code>
       * @return The bayesianMeanRating.
       */
      @java.lang.Override
      public double getBayesianMeanRating() {
        return bayesianMeanRating_;
      }
      /**
       * <code>optional double bayesianMeanRating = 12;</code>
       * @param value The bayesianMeanRating to set.
       */
      private void setBayesianMeanRating(double value) {
        bitField0_ |= 0x00000800;
        bayesianMeanRating_ = value;
      }
      /**
       * <code>optional double bayesianMeanRating = 12;</code>
       */
      private void clearBayesianMeanRating() {
        bitField0_ = (bitField0_ & ~0x00000800);
        bayesianMeanRating_ = 0D;
      }
  
      public static final int RATINGLABEL_FIELD_NUMBER = 17;
      private java.lang.String ratingLabel_;
      /**
       * <pre>
       * repeated Tip tip = 13;
       * </pre>
       *
       * <code>optional string ratingLabel = 17;</code>
       * @return Whether the ratingLabel field is set.
       */
      @java.lang.Override
      public boolean hasRatingLabel() {
        return ((bitField0_ & 0x00001000) != 0);
      }
      /**
       * <pre>
       * repeated Tip tip = 13;
       * </pre>
       *
       * <code>optional string ratingLabel = 17;</code>
       * @return The ratingLabel.
       */
      @java.lang.Override
      public java.lang.String getRatingLabel() {
        return ratingLabel_;
      }
      /**
       * <pre>
       * repeated Tip tip = 13;
       * </pre>
       *
       * <code>optional string ratingLabel = 17;</code>
       * @return The bytes for ratingLabel.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getRatingLabelBytes() {
        return com.google.protobuf.ByteString.copyFromUtf8(ratingLabel_);
      }
      /**
       * <pre>
       * repeated Tip tip = 13;
       * </pre>
       *
       * <code>optional string ratingLabel = 17;</code>
       * @param value The ratingLabel to set.
       */
      private void setRatingLabel(
          java.lang.String value) {
        java.lang.Class<?> valueClass = value.getClass();
    bitField0_ |= 0x00001000;
        ratingLabel_ = value;
      }
      /**
       * <pre>
       * repeated Tip tip = 13;
       * </pre>
       *
       * <code>optional string ratingLabel = 17;</code>
       */
      private void clearRatingLabel() {
        bitField0_ = (bitField0_ & ~0x00001000);
        ratingLabel_ = getDefaultInstance().getRatingLabel();
      }
      /**
       * <pre>
       * repeated Tip tip = 13;
       * </pre>
       *
       * <code>optional string ratingLabel = 17;</code>
       * @param value The bytes for ratingLabel to set.
       */
      private void setRatingLabelBytes(
          com.google.protobuf.ByteString value) {
        ratingLabel_ = value.toStringUtf8();
        bitField0_ |= 0x00001000;
      }
  
      public static final int RATINGCOUNTLABELABBREVIATED_FIELD_NUMBER = 18;
      private java.lang.String ratingCountLabelAbbreviated_;
      /**
       * <code>optional string ratingCountLabelAbbreviated = 18;</code>
       * @return Whether the ratingCountLabelAbbreviated field is set.
       */
      @java.lang.Override
      public boolean hasRatingCountLabelAbbreviated() {
        return ((bitField0_ & 0x00002000) != 0);
      }
      /**
       * <code>optional string ratingCountLabelAbbreviated = 18;</code>
       * @return The ratingCountLabelAbbreviated.
       */
      @java.lang.Override
      public java.lang.String getRatingCountLabelAbbreviated() {
        return ratingCountLabelAbbreviated_;
      }
      /**
       * <code>optional string ratingCountLabelAbbreviated = 18;</code>
       * @return The bytes for ratingCountLabelAbbreviated.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getRatingCountLabelAbbreviatedBytes() {
        return com.google.protobuf.ByteString.copyFromUtf8(ratingCountLabelAbbreviated_);
      }
      /**
       * <code>optional string ratingCountLabelAbbreviated = 18;</code>
       * @param value The ratingCountLabelAbbreviated to set.
       */
      private void setRatingCountLabelAbbreviated(
          java.lang.String value) {
        java.lang.Class<?> valueClass = value.getClass();
    bitField0_ |= 0x00002000;
        ratingCountLabelAbbreviated_ = value;
      }
      /**
       * <code>optional string ratingCountLabelAbbreviated = 18;</code>
       */
      private void clearRatingCountLabelAbbreviated() {
        bitField0_ = (bitField0_ & ~0x00002000);
        ratingCountLabelAbbreviated_ = getDefaultInstance().getRatingCountLabelAbbreviated();
      }
      /**
       * <code>optional string ratingCountLabelAbbreviated = 18;</code>
       * @param value The bytes for ratingCountLabelAbbreviated to set.
       */
      private void setRatingCountLabelAbbreviatedBytes(
          com.google.protobuf.ByteString value) {
        ratingCountLabelAbbreviated_ = value.toStringUtf8();
        bitField0_ |= 0x00002000;
      }
  
      public static final int RATINGCOUNTLABEL_FIELD_NUMBER = 19;
      private java.lang.String ratingCountLabel_;
      /**
       * <code>optional string ratingCountLabel = 19;</code>
       * @return Whether the ratingCountLabel field is set.
       */
      @java.lang.Override
      public boolean hasRatingCountLabel() {
        return ((bitField0_ & 0x00004000) != 0);
      }
      /**
       * <code>optional string ratingCountLabel = 19;</code>
       * @return The ratingCountLabel.
       */
      @java.lang.Override
      public java.lang.String getRatingCountLabel() {
        return ratingCountLabel_;
      }
      /**
       * <code>optional string ratingCountLabel = 19;</code>
       * @return The bytes for ratingCountLabel.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getRatingCountLabelBytes() {
        return com.google.protobuf.ByteString.copyFromUtf8(ratingCountLabel_);
      }
      /**
       * <code>optional string ratingCountLabel = 19;</code>
       * @param value The ratingCountLabel to set.
       */
      private void setRatingCountLabel(
          java.lang.String value) {
        java.lang.Class<?> valueClass = value.getClass();
    bitField0_ |= 0x00004000;
        ratingCountLabel_ = value;
      }
      /**
       * <code>optional string ratingCountLabel = 19;</code>
       */
      private void clearRatingCountLabel() {
        bitField0_ = (bitField0_ & ~0x00004000);
        ratingCountLabel_ = getDefaultInstance().getRatingCountLabel();
      }
      /**
       * <code>optional string ratingCountLabel = 19;</code>
       * @param value The bytes for ratingCountLabel to set.
       */
      private void setRatingCountLabelBytes(
          com.google.protobuf.ByteString value) {
        ratingCountLabel_ = value.toStringUtf8();
        bitField0_ |= 0x00004000;
      }
  
      public static finsky.protos.DocV2.AggregateRating parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return com.google.protobuf.GeneratedMessageLite.parseFrom(
            DEFAULT_INSTANCE, data);
      }
      public static finsky.protos.DocV2.AggregateRating parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return com.google.protobuf.GeneratedMessageLite.parseFrom(
            DEFAULT_INSTANCE, data, extensionRegistry);
      }
      public static finsky.protos.DocV2.AggregateRating parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return com.google.protobuf.GeneratedMessageLite.parseFrom(
            DEFAULT_INSTANCE, data);
      }
      public static finsky.protos.DocV2.AggregateRating parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return com.google.protobuf.GeneratedMessageLite.parseFrom(
            DEFAULT_INSTANCE, data, extensionRegistry);
      }
      public static finsky.protos.DocV2.AggregateRating parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return com.google.protobuf.GeneratedMessageLite.parseFrom(
            DEFAULT_INSTANCE, data);
      }
      public static finsky.protos.DocV2.AggregateRating parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return com.google.protobuf.GeneratedMessageLite.parseFrom(
            DEFAULT_INSTANCE, data, extensionRegistry);
      }
      public static finsky.protos.DocV2.AggregateRating parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageLite.parseFrom(
            DEFAULT_INSTANCE, input);
      }
      public static finsky.protos.DocV2.AggregateRating parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageLite.parseFrom(
            DEFAULT_INSTANCE, input, extensionRegistry);
      }
  
      public static finsky.protos.DocV2.AggregateRating parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return parseDelimitedFrom(DEFAULT_INSTANCE, input);
      }
  
      public static finsky.protos.DocV2.AggregateRating parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry);
      }
      public static finsky.protos.DocV2.AggregateRating parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageLite.parseFrom(
            DEFAULT_INSTANCE, input);
      }
      public static finsky.protos.DocV2.AggregateRating parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageLite.parseFrom(
            DEFAULT_INSTANCE, input, extensionRegistry);
      }
  
      public static Builder newBuilder() {
        return (Builder) DEFAULT_INSTANCE.createBuilder();
      }
      public static Builder newBuilder(finsky.protos.DocV2.AggregateRating prototype) {
        return DEFAULT_INSTANCE.createBuilder(prototype);
      }
  
      /**
       * Protobuf type {@code finsky.protos.DocV2.AggregateRating}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageLite.Builder<
            finsky.protos.DocV2.AggregateRating, Builder> implements
          // @@protoc_insertion_point(builder_implements:finsky.protos.DocV2.AggregateRating)
          finsky.protos.DocV2.AggregateRatingOrBuilder {
        // Construct using finsky.protos.DocV2.AggregateRating.newBuilder()
        private Builder() {
          super(DEFAULT_INSTANCE);
        }
  
  
        /**
         * <code>optional int32 type = 1 [default = 1];</code>
         * @return Whether the type field is set.
         */
        @java.lang.Override
        public boolean hasType() {
          return instance.hasType();
        }
        /**
         * <code>optional int32 type = 1 [default = 1];</code>
         * @return The type.
         */
        @java.lang.Override
        public int getType() {
          return instance.getType();
        }
        /**
         * <code>optional int32 type = 1 [default = 1];</code>
         * @param value The type to set.
         * @return This builder for chaining.
         */
        public Builder setType(int value) {
          copyOnWrite();
          instance.setType(value);
          return this;
        }
        /**
         * <code>optional int32 type = 1 [default = 1];</code>
         * @return This builder for chaining.
         */
        public Builder clearType() {
          copyOnWrite();
          instance.clearType();
          return this;
        }
  
        /**
         * <code>optional float starRating = 2;</code>
         * @return Whether the starRating field is set.
         */
        @java.lang.Override
        public boolean hasStarRating() {
          return instance.hasStarRating();
        }
        /**
         * <code>optional float starRating = 2;</code>
         * @return The starRating.
         */
        @java.lang.Override
        public float getStarRating() {
          return instance.getStarRating();
        }
        /**
         * <code>optional float starRating = 2;</code>
         * @param value The starRating to set.
         * @return This builder for chaining.
         */
        public Builder setStarRating(float value) {
          copyOnWrite();
          instance.setStarRating(value);
          return this;
        }
        /**
         * <code>optional float starRating = 2;</code>
         * @return This builder for chaining.
         */
        public Builder clearStarRating() {
          copyOnWrite();
          instance.clearStarRating();
          return this;
        }
  
        /**
         * <code>optional uint64 ratingsCount = 3;</code>
         * @return Whether the ratingsCount field is set.
         */
        @java.lang.Override
        public boolean hasRatingsCount() {
          return instance.hasRatingsCount();
        }
        /**
         * <code>optional uint64 ratingsCount = 3;</code>
         * @return The ratingsCount.
         */
        @java.lang.Override
        public long getRatingsCount() {
          return instance.getRatingsCount();
        }
        /**
         * <code>optional uint64 ratingsCount = 3;</code>
         * @param value The ratingsCount to set.
         * @return This builder for chaining.
         */
        public Builder setRatingsCount(long value) {
          copyOnWrite();
          instance.setRatingsCount(value);
          return this;
        }
        /**
         * <code>optional uint64 ratingsCount = 3;</code>
         * @return This builder for chaining.
         */
        public Builder clearRatingsCount() {
          copyOnWrite();
          instance.clearRatingsCount();
          return this;
        }
  
        /**
         * <code>optional uint64 oneStarRatings = 4;</code>
         * @return Whether the oneStarRatings field is set.
         */
        @java.lang.Override
        public boolean hasOneStarRatings() {
          return instance.hasOneStarRatings();
        }
        /**
         * <code>optional uint64 oneStarRatings = 4;</code>
         * @return The oneStarRatings.
         */
        @java.lang.Override
        public long getOneStarRatings() {
          return instance.getOneStarRatings();
        }
        /**
         * <code>optional uint64 oneStarRatings = 4;</code>
         * @param value The oneStarRatings to set.
         * @return This builder for chaining.
         */
        public Builder setOneStarRatings(long value) {
          copyOnWrite();
          instance.setOneStarRatings(value);
          return this;
        }
        /**
         * <code>optional uint64 oneStarRatings = 4;</code>
         * @return This builder for chaining.
         */
        public Builder clearOneStarRatings() {
          copyOnWrite();
          instance.clearOneStarRatings();
          return this;
        }
  
        /**
         * <code>optional uint64 twoStarRatings = 5;</code>
         * @return Whether the twoStarRatings field is set.
         */
        @java.lang.Override
        public boolean hasTwoStarRatings() {
          return instance.hasTwoStarRatings();
        }
        /**
         * <code>optional uint64 twoStarRatings = 5;</code>
         * @return The twoStarRatings.
         */
        @java.lang.Override
        public long getTwoStarRatings() {
          return instance.getTwoStarRatings();
        }
        /**
         * <code>optional uint64 twoStarRatings = 5;</code>
         * @param value The twoStarRatings to set.
         * @return This builder for chaining.
         */
        public Builder setTwoStarRatings(long value) {
          copyOnWrite();
          instance.setTwoStarRatings(value);
          return this;
        }
        /**
         * <code>optional uint64 twoStarRatings = 5;</code>
         * @return This builder for chaining.
         */
        public Builder clearTwoStarRatings() {
          copyOnWrite();
          instance.clearTwoStarRatings();
          return this;
        }
  
        /**
         * <code>optional uint64 threeStarRatings = 6;</code>
         * @return Whether the threeStarRatings field is set.
         */
        @java.lang.Override
        public boolean hasThreeStarRatings() {
          return instance.hasThreeStarRatings();
        }
        /**
         * <code>optional uint64 threeStarRatings = 6;</code>
         * @return The threeStarRatings.
         */
        @java.lang.Override
        public long getThreeStarRatings() {
          return instance.getThreeStarRatings();
        }
        /**
         * <code>optional uint64 threeStarRatings = 6;</code>
         * @param value The threeStarRatings to set.
         * @return This builder for chaining.
         */
        public Builder setThreeStarRatings(long value) {
          copyOnWrite();
          instance.setThreeStarRatings(value);
          return this;
        }
        /**
         * <code>optional uint64 threeStarRatings = 6;</code>
         * @return This builder for chaining.
         */
        public Builder clearThreeStarRatings() {
          copyOnWrite();
          instance.clearThreeStarRatings();
          return this;
        }
  
        /**
         * <code>optional uint64 fourStarRatings = 7;</code>
         * @return Whether the fourStarRatings field is set.
         */
        @java.lang.Override
        public boolean hasFourStarRatings() {
          return instance.hasFourStarRatings();
        }
        /**
         * <code>optional uint64 fourStarRatings = 7;</code>
         * @return The fourStarRatings.
         */
        @java.lang.Override
        public long getFourStarRatings() {
          return instance.getFourStarRatings();
        }
        /**
         * <code>optional uint64 fourStarRatings = 7;</code>
         * @param value The fourStarRatings to set.
         * @return This builder for chaining.
         */
        public Builder setFourStarRatings(long value) {
          copyOnWrite();
          instance.setFourStarRatings(value);
          return this;
        }
        /**
         * <code>optional uint64 fourStarRatings = 7;</code>
         * @return This builder for chaining.
         */
        public Builder clearFourStarRatings() {
          copyOnWrite();
          instance.clearFourStarRatings();
          return this;
        }
  
        /**
         * <code>optional uint64 fiveStarRatings = 8;</code>
         * @return Whether the fiveStarRatings field is set.
         */
        @java.lang.Override
        public boolean hasFiveStarRatings() {
          return instance.hasFiveStarRatings();
        }
        /**
         * <code>optional uint64 fiveStarRatings = 8;</code>
         * @return The fiveStarRatings.
         */
        @java.lang.Override
        public long getFiveStarRatings() {
          return instance.getFiveStarRatings();
        }
        /**
         * <code>optional uint64 fiveStarRatings = 8;</code>
         * @param value The fiveStarRatings to set.
         * @return This builder for chaining.
         */
        public Builder setFiveStarRatings(long value) {
          copyOnWrite();
          instance.setFiveStarRatings(value);
          return this;
        }
        /**
         * <code>optional uint64 fiveStarRatings = 8;</code>
         * @return This builder for chaining.
         */
        public Builder clearFiveStarRatings() {
          copyOnWrite();
          instance.clearFiveStarRatings();
          return this;
        }
  
        /**
         * <code>optional uint64 thumbsUpCount = 9;</code>
         * @return Whether the thumbsUpCount field is set.
         */
        @java.lang.Override
        public boolean hasThumbsUpCount() {
          return instance.hasThumbsUpCount();
        }
        /**
         * <code>optional uint64 thumbsUpCount = 9;</code>
         * @return The thumbsUpCount.
         */
        @java.lang.Override
        public long getThumbsUpCount() {
          return instance.getThumbsUpCount();
        }
        /**
         * <code>optional uint64 thumbsUpCount = 9;</code>
         * @param value The thumbsUpCount to set.
         * @return This builder for chaining.
         */
        public Builder setThumbsUpCount(long value) {
          copyOnWrite();
          instance.setThumbsUpCount(value);
          return this;
        }
        /**
         * <code>optional uint64 thumbsUpCount = 9;</code>
         * @return This builder for chaining.
         */
        public Builder clearThumbsUpCount() {
          copyOnWrite();
          instance.clearThumbsUpCount();
          return this;
        }
  
        /**
         * <code>optional uint64 thumbsDownCount = 10;</code>
         * @return Whether the thumbsDownCount field is set.
         */
        @java.lang.Override
        public boolean hasThumbsDownCount() {
          return instance.hasThumbsDownCount();
        }
        /**
         * <code>optional uint64 thumbsDownCount = 10;</code>
         * @return The thumbsDownCount.
         */
        @java.lang.Override
        public long getThumbsDownCount() {
          return instance.getThumbsDownCount();
        }
        /**
         * <code>optional uint64 thumbsDownCount = 10;</code>
         * @param value The thumbsDownCount to set.
         * @return This builder for chaining.
         */
        public Builder setThumbsDownCount(long value) {
          copyOnWrite();
          instance.setThumbsDownCount(value);
          return this;
        }
        /**
         * <code>optional uint64 thumbsDownCount = 10;</code>
         * @return This builder for chaining.
         */
        public Builder clearThumbsDownCount() {
          copyOnWrite();
          instance.clearThumbsDownCount();
          return this;
        }
  
        /**
         * <code>optional uint64 commentCount = 11;</code>
         * @return Whether the commentCount field is set.
         */
        @java.lang.Override
        public boolean hasCommentCount() {
          return instance.hasCommentCount();
        }
        /**
         * <code>optional uint64 commentCount = 11;</code>
         * @return The commentCount.
         */
        @java.lang.Override
        public long getCommentCount() {
          return instance.getCommentCount();
        }
        /**
         * <code>optional uint64 commentCount = 11;</code>
         * @param value The commentCount to set.
         * @return This builder for chaining.
         */
        public Builder setCommentCount(long value) {
          copyOnWrite();
          instance.setCommentCount(value);
          return this;
        }
        /**
         * <code>optional uint64 commentCount = 11;</code>
         * @return This builder for chaining.
         */
        public Builder clearCommentCount() {
          copyOnWrite();
          instance.clearCommentCount();
          return this;
        }
  
        /**
         * <code>optional double bayesianMeanRating = 12;</code>
         * @return Whether the bayesianMeanRating field is set.
         */
        @java.lang.Override
        public boolean hasBayesianMeanRating() {
          return instance.hasBayesianMeanRating();
        }
        /**
         * <code>optional double bayesianMeanRating = 12;</code>
         * @return The bayesianMeanRating.
         */
        @java.lang.Override
        public double getBayesianMeanRating() {
          return instance.getBayesianMeanRating();
        }
        /**
         * <code>optional double bayesianMeanRating = 12;</code>
         * @param value The bayesianMeanRating to set.
         * @return This builder for chaining.
         */
        public Builder setBayesianMeanRating(double value) {
          copyOnWrite();
          instance.setBayesianMeanRating(value);
          return this;
        }
        /**
         * <code>optional double bayesianMeanRating = 12;</code>
         * @return This builder for chaining.
         */
        public Builder clearBayesianMeanRating() {
          copyOnWrite();
          instance.clearBayesianMeanRating();
          return this;
        }
  
        /**
         * <pre>
         * repeated Tip tip = 13;
         * </pre>
         *
         * <code>optional string ratingLabel = 17;</code>
         * @return Whether the ratingLabel field is set.
         */
        @java.lang.Override
        public boolean hasRatingLabel() {
          return instance.hasRatingLabel();
        }
        /**
         * <pre>
         * repeated Tip tip = 13;
         * </pre>
         *
         * <code>optional string ratingLabel = 17;</code>
         * @return The ratingLabel.
         */
        @java.lang.Override
        public java.lang.String getRatingLabel() {
          return instance.getRatingLabel();
        }
        /**
         * <pre>
         * repeated Tip tip = 13;
         * </pre>
         *
         * <code>optional string ratingLabel = 17;</code>
         * @return The bytes for ratingLabel.
         */
        @java.lang.Override
        public com.google.protobuf.ByteString
            getRatingLabelBytes() {
          return instance.getRatingLabelBytes();
        }
        /**
         * <pre>
         * repeated Tip tip = 13;
         * </pre>
         *
         * <code>optional string ratingLabel = 17;</code>
         * @param value The ratingLabel to set.
         * @return This builder for chaining.
         */
        public Builder setRatingLabel(
            java.lang.String value) {
          copyOnWrite();
          instance.setRatingLabel(value);
          return this;
        }
        /**
         * <pre>
         * repeated Tip tip = 13;
         * </pre>
         *
         * <code>optional string ratingLabel = 17;</code>
         * @return This builder for chaining.
         */
        public Builder clearRatingLabel() {
          copyOnWrite();
          instance.clearRatingLabel();
          return this;
        }
        /**
         * <pre>
         * repeated Tip tip = 13;
         * </pre>
         *
         * <code>optional string ratingLabel = 17;</code>
         * @param value The bytes for ratingLabel to set.
         * @return This builder for chaining.
         */
        public Builder setRatingLabelBytes(
            com.google.protobuf.ByteString value) {
          copyOnWrite();
          instance.setRatingLabelBytes(value);
          return this;
        }
  
        /**
         * <code>optional string ratingCountLabelAbbreviated = 18;</code>
         * @return Whether the ratingCountLabelAbbreviated field is set.
         */
        @java.lang.Override
        public boolean hasRatingCountLabelAbbreviated() {
          return instance.hasRatingCountLabelAbbreviated();
        }
        /**
         * <code>optional string ratingCountLabelAbbreviated = 18;</code>
         * @return The ratingCountLabelAbbreviated.
         */
        @java.lang.Override
        public java.lang.String getRatingCountLabelAbbreviated() {
          return instance.getRatingCountLabelAbbreviated();
        }
        /**
         * <code>optional string ratingCountLabelAbbreviated = 18;</code>
         * @return The bytes for ratingCountLabelAbbreviated.
         */
        @java.lang.Override
        public com.google.protobuf.ByteString
            getRatingCountLabelAbbreviatedBytes() {
          return instance.getRatingCountLabelAbbreviatedBytes();
        }
        /**
         * <code>optional string ratingCountLabelAbbreviated = 18;</code>
         * @param value The ratingCountLabelAbbreviated to set.
         * @return This builder for chaining.
         */
        public Builder setRatingCountLabelAbbreviated(
            java.lang.String value) {
          copyOnWrite();
          instance.setRatingCountLabelAbbreviated(value);
          return this;
        }
        /**
         * <code>optional string ratingCountLabelAbbreviated = 18;</code>
         * @return This builder for chaining.
         */
        public Builder clearRatingCountLabelAbbreviated() {
          copyOnWrite();
          instance.clearRatingCountLabelAbbreviated();
          return this;
        }
        /**
         * <code>optional string ratingCountLabelAbbreviated = 18;</code>
         * @param value The bytes for ratingCountLabelAbbreviated to set.
         * @return This builder for chaining.
         */
        public Builder setRatingCountLabelAbbreviatedBytes(
            com.google.protobuf.ByteString value) {
          copyOnWrite();
          instance.setRatingCountLabelAbbreviatedBytes(value);
          return this;
        }
  
        /**
         * <code>optional string ratingCountLabel = 19;</code>
         * @return Whether the ratingCountLabel field is set.
         */
        @java.lang.Override
        public boolean hasRatingCountLabel() {
          return instance.hasRatingCountLabel();
        }
        /**
         * <code>optional string ratingCountLabel = 19;</code>
         * @return The ratingCountLabel.
         */
        @java.lang.Override
        public java.lang.String getRatingCountLabel() {
          return instance.getRatingCountLabel();
        }
        /**
         * <code>optional string ratingCountLabel = 19;</code>
         * @return The bytes for ratingCountLabel.
         */
        @java.lang.Override
        public com.google.protobuf.ByteString
            getRatingCountLabelBytes() {
          return instance.getRatingCountLabelBytes();
        }
        /**
         * <code>optional string ratingCountLabel = 19;</code>
         * @param value The ratingCountLabel to set.
         * @return This builder for chaining.
         */
        public Builder setRatingCountLabel(
            java.lang.String value) {
          copyOnWrite();
          instance.setRatingCountLabel(value);
          return this;
        }
        /**
         * <code>optional string ratingCountLabel = 19;</code>
         * @return This builder for chaining.
         */
        public Builder clearRatingCountLabel() {
          copyOnWrite();
          instance.clearRatingCountLabel();
          return this;
        }
        /**
         * <code>optional string ratingCountLabel = 19;</code>
         * @param value The bytes for ratingCountLabel to set.
         * @return This builder for chaining.
         */
        public Builder setRatingCountLabelBytes(
            com.google.protobuf.ByteString value) {
          copyOnWrite();
          instance.setRatingCountLabelBytes(value);
          return this;
        }
  
        // @@protoc_insertion_point(builder_scope:finsky.protos.DocV2.AggregateRating)
      }
      @java.lang.Override
      @java.lang.SuppressWarnings({"unchecked", "fallthrough"})
      protected final java.lang.Object dynamicMethod(
          com.google.protobuf.GeneratedMessageLite.MethodToInvoke method,
          java.lang.Object arg0, java.lang.Object arg1) {
        switch (method) {
          case NEW_MUTABLE_INSTANCE: {
            return new finsky.protos.DocV2.AggregateRating();
          }
          case NEW_BUILDER: {
            return new Builder();
          }
          case BUILD_MESSAGE_INFO: {
              java.lang.Object[] objects = new java.lang.Object[] {
                "bitField0_",
                "type_",
                "starRating_",
                "ratingsCount_",
                "oneStarRatings_",
                "twoStarRatings_",
                "threeStarRatings_",
                "fourStarRatings_",
                "fiveStarRatings_",
                "thumbsUpCount_",
                "thumbsDownCount_",
                "commentCount_",
                "bayesianMeanRating_",
                "ratingLabel_",
                "ratingCountLabelAbbreviated_",
                "ratingCountLabel_",
              };
              java.lang.String info =
                  "\u0001\u000f\u0000\u0001\u0001\u0013\u000f\u0000\u0000\u0000\u0001\u1004\u0000\u0002" +
                  "\u1001\u0001\u0003\u1003\u0002\u0004\u1003\u0003\u0005\u1003\u0004\u0006\u1003\u0005" +
                  "\u0007\u1003\u0006\b\u1003\u0007\t\u1003\b\n\u1003\t\u000b\u1003\n\f\u1000\u000b" +
                  "\u0011\u1008\f\u0012\u1008\r\u0013\u1008\u000e";
              return newMessageInfo(DEFAULT_INSTANCE, info, objects);
          }
          // fall through
          case GET_DEFAULT_INSTANCE: {
            return DEFAULT_INSTANCE;
          }
          case GET_PARSER: {
            com.google.protobuf.Parser<finsky.protos.DocV2.AggregateRating> parser = PARSER;
            if (parser == null) {
              synchronized (finsky.protos.DocV2.AggregateRating.class) {
                parser = PARSER;
                if (parser == null) {
                  parser =
                      new DefaultInstanceBasedParser<finsky.protos.DocV2.AggregateRating>(
                          DEFAULT_INSTANCE);
                  PARSER = parser;
                }
              }
            }
            return parser;
        }
        case GET_MEMOIZED_IS_INITIALIZED: {
          return (byte) 1;
        }
        case SET_MEMOIZED_IS_INITIALIZED: {
          return null;
        }
        }
        throw new UnsupportedOperationException();
      }
  
  
      // @@protoc_insertion_point(class_scope:finsky.protos.DocV2.AggregateRating)
      private static final finsky.protos.DocV2.AggregateRating DEFAULT_INSTANCE;
      static {
        AggregateRating defaultInstance = new AggregateRating();
        // New instances are implicitly immutable so no need to make
        // immutable.
        DEFAULT_INSTANCE = defaultInstance;
        com.google.protobuf.GeneratedMessageLite.registerDefaultInstance(
          AggregateRating.class, defaultInstance);
      }
  
      public static finsky.protos.DocV2.AggregateRating getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }
  
      private static volatile com.google.protobuf.Parser<AggregateRating> PARSER;
  
      public static com.google.protobuf.Parser<AggregateRating> parser() {
        return DEFAULT_INSTANCE.getParserForType();
      }
    }
  
    private int bitField0_;
    public static final int DOCID_FIELD_NUMBER = 1;
    private java.lang.String docid_;
    /**
     * <code>optional string docid = 1;</code>
     * @return Whether the docid field is set.
     */
    @java.lang.Override
    public boolean hasDocid() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional string docid = 1;</code>
     * @return The docid.
     */
    @java.lang.Override
    public java.lang.String getDocid() {
      return docid_;
    }
    /**
     * <code>optional string docid = 1;</code>
     * @return The bytes for docid.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getDocidBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(docid_);
    }
    /**
     * <code>optional string docid = 1;</code>
     * @param value The docid to set.
     */
    private void setDocid(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
    bitField0_ |= 0x00000001;
      docid_ = value;
    }
    /**
     * <code>optional string docid = 1;</code>
     */
    private void clearDocid() {
      bitField0_ = (bitField0_ & ~0x00000001);
      docid_ = getDefaultInstance().getDocid();
    }
    /**
     * <code>optional string docid = 1;</code>
     * @param value The bytes for docid to set.
     */
    private void setDocidBytes(
        com.google.protobuf.ByteString value) {
      docid_ = value.toStringUtf8();
      bitField0_ |= 0x00000001;
    }
  
    public static final int BACKENDDOCID_FIELD_NUMBER = 2;
    private java.lang.String backendDocid_;
    /**
     * <code>optional string backendDocid = 2;</code>
     * @return Whether the backendDocid field is set.
     */
    @java.lang.Override
    public boolean hasBackendDocid() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional string backendDocid = 2;</code>
     * @return The backendDocid.
     */
    @java.lang.Override
    public java.lang.String getBackendDocid() {
      return backendDocid_;
    }
    /**
     * <code>optional string backendDocid = 2;</code>
     * @return The bytes for backendDocid.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getBackendDocidBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(backendDocid_);
    }
    /**
     * <code>optional string backendDocid = 2;</code>
     * @param value The backendDocid to set.
     */
    private void setBackendDocid(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
    bitField0_ |= 0x00000002;
      backendDocid_ = value;
    }
    /**
     * <code>optional string backendDocid = 2;</code>
     */
    private void clearBackendDocid() {
      bitField0_ = (bitField0_ & ~0x00000002);
      backendDocid_ = getDefaultInstance().getBackendDocid();
    }
    /**
     * <code>optional string backendDocid = 2;</code>
     * @param value The bytes for backendDocid to set.
     */
    private void setBackendDocidBytes(
        com.google.protobuf.ByteString value) {
      backendDocid_ = value.toStringUtf8();
      bitField0_ |= 0x00000002;
    }
  
    public static final int DOCTYPE_FIELD_NUMBER = 3;
    private int docType_;
    /**
     * <code>optional int32 docType = 3;</code>
     * @return Whether the docType field is set.
     */
    @java.lang.Override
    public boolean hasDocType() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional int32 docType = 3;</code>
     * @return The docType.
     */
    @java.lang.Override
    public int getDocType() {
      return docType_;
    }
    /**
     * <code>optional int32 docType = 3;</code>
     * @param value The docType to set.
     */
    private void setDocType(int value) {
      bitField0_ |= 0x00000004;
      docType_ = value;
    }
    /**
     * <code>optional int32 docType = 3;</code>
     */
    private void clearDocType() {
      bitField0_ = (bitField0_ & ~0x00000004);
      docType_ = 0;
    }
  
    public static final int BACKENDID_FIELD_NUMBER = 4;
    private int backendId_;
    /**
     * <code>optional int32 backendId = 4;</code>
     * @return Whether the backendId field is set.
     */
    @java.lang.Override
    public boolean hasBackendId() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional int32 backendId = 4;</code>
     * @return The backendId.
     */
    @java.lang.Override
    public int getBackendId() {
      return backendId_;
    }
    /**
     * <code>optional int32 backendId = 4;</code>
     * @param value The backendId to set.
     */
    private void setBackendId(int value) {
      bitField0_ |= 0x00000008;
      backendId_ = value;
    }
    /**
     * <code>optional int32 backendId = 4;</code>
     */
    private void clearBackendId() {
      bitField0_ = (bitField0_ & ~0x00000008);
      backendId_ = 0;
    }
  
    public static final int TITLE_FIELD_NUMBER = 5;
    private java.lang.String title_;
    /**
     * <code>optional string title = 5;</code>
     * @return Whether the title field is set.
     */
    @java.lang.Override
    public boolean hasTitle() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional string title = 5;</code>
     * @return The title.
     */
    @java.lang.Override
    public java.lang.String getTitle() {
      return title_;
    }
    /**
     * <code>optional string title = 5;</code>
     * @return The bytes for title.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getTitleBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(title_);
    }
    /**
     * <code>optional string title = 5;</code>
     * @param value The title to set.
     */
    private void setTitle(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
    bitField0_ |= 0x00000010;
      title_ = value;
    }
    /**
     * <code>optional string title = 5;</code>
     */
    private void clearTitle() {
      bitField0_ = (bitField0_ & ~0x00000010);
      title_ = getDefaultInstance().getTitle();
    }
    /**
     * <code>optional string title = 5;</code>
     * @param value The bytes for title to set.
     */
    private void setTitleBytes(
        com.google.protobuf.ByteString value) {
      title_ = value.toStringUtf8();
      bitField0_ |= 0x00000010;
    }
  
    public static final int CREATOR_FIELD_NUMBER = 6;
    private java.lang.String creator_;
    /**
     * <code>optional string creator = 6;</code>
     * @return Whether the creator field is set.
     */
    @java.lang.Override
    public boolean hasCreator() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>optional string creator = 6;</code>
     * @return The creator.
     */
    @java.lang.Override
    public java.lang.String getCreator() {
      return creator_;
    }
    /**
     * <code>optional string creator = 6;</code>
     * @return The bytes for creator.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getCreatorBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(creator_);
    }
    /**
     * <code>optional string creator = 6;</code>
     * @param value The creator to set.
     */
    private void setCreator(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
    bitField0_ |= 0x00000020;
      creator_ = value;
    }
    /**
     * <code>optional string creator = 6;</code>
     */
    private void clearCreator() {
      bitField0_ = (bitField0_ & ~0x00000020);
      creator_ = getDefaultInstance().getCreator();
    }
    /**
     * <code>optional string creator = 6;</code>
     * @param value The bytes for creator to set.
     */
    private void setCreatorBytes(
        com.google.protobuf.ByteString value) {
      creator_ = value.toStringUtf8();
      bitField0_ |= 0x00000020;
    }
  
    public static final int DESCRIPTIONHTML_FIELD_NUMBER = 7;
    private java.lang.String descriptionHtml_;
    /**
     * <code>optional string descriptionHtml = 7;</code>
     * @return Whether the descriptionHtml field is set.
     */
    @java.lang.Override
    public boolean hasDescriptionHtml() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <code>optional string descriptionHtml = 7;</code>
     * @return The descriptionHtml.
     */
    @java.lang.Override
    public java.lang.String getDescriptionHtml() {
      return descriptionHtml_;
    }
    /**
     * <code>optional string descriptionHtml = 7;</code>
     * @return The bytes for descriptionHtml.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getDescriptionHtmlBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(descriptionHtml_);
    }
    /**
     * <code>optional string descriptionHtml = 7;</code>
     * @param value The descriptionHtml to set.
     */
    private void setDescriptionHtml(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
    bitField0_ |= 0x00000040;
      descriptionHtml_ = value;
    }
    /**
     * <code>optional string descriptionHtml = 7;</code>
     */
    private void clearDescriptionHtml() {
      bitField0_ = (bitField0_ & ~0x00000040);
      descriptionHtml_ = getDefaultInstance().getDescriptionHtml();
    }
    /**
     * <code>optional string descriptionHtml = 7;</code>
     * @param value The bytes for descriptionHtml to set.
     */
    private void setDescriptionHtmlBytes(
        com.google.protobuf.ByteString value) {
      descriptionHtml_ = value.toStringUtf8();
      bitField0_ |= 0x00000040;
    }
  
    public static final int OFFER_FIELD_NUMBER = 8;
    private com.google.protobuf.Internal.ProtobufList<finsky.protos.Common.Offer> offer_;
    /**
     * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
     */
    @java.lang.Override
    public java.util.List<finsky.protos.Common.Offer> getOfferList() {
      return offer_;
    }
    /**
     * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
     */
    public java.util.List<? extends finsky.protos.Common.OfferOrBuilder> 
        getOfferOrBuilderList() {
      return offer_;
    }
    /**
     * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
     */
    @java.lang.Override
    public int getOfferCount() {
      return offer_.size();
    }
    /**
     * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
     */
    @java.lang.Override
    public finsky.protos.Common.Offer getOffer(int index) {
      return offer_.get(index);
    }
    /**
     * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
     */
    public finsky.protos.Common.OfferOrBuilder getOfferOrBuilder(
        int index) {
      return offer_.get(index);
    }
    private void ensureOfferIsMutable() {
      com.google.protobuf.Internal.ProtobufList<finsky.protos.Common.Offer> tmp = offer_;
      if (!tmp.isModifiable()) {
        offer_ =
            com.google.protobuf.GeneratedMessageLite.mutableCopy(tmp);
       }
    }
  
    /**
     * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
     */
    private void setOffer(
        int index, finsky.protos.Common.Offer value) {
      value.getClass();
    ensureOfferIsMutable();
      offer_.set(index, value);
    }
    /**
     * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
     */
    private void addOffer(finsky.protos.Common.Offer value) {
      value.getClass();
    ensureOfferIsMutable();
      offer_.add(value);
    }
    /**
     * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
     */
    private void addOffer(
        int index, finsky.protos.Common.Offer value) {
      value.getClass();
    ensureOfferIsMutable();
      offer_.add(index, value);
    }
    /**
     * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
     */
    private void addAllOffer(
        java.lang.Iterable<? extends finsky.protos.Common.Offer> values) {
      ensureOfferIsMutable();
      com.google.protobuf.AbstractMessageLite.addAll(
          values, offer_);
    }
    /**
     * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
     */
    private void clearOffer() {
      offer_ = emptyProtobufList();
    }
    /**
     * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
     */
    private void removeOffer(int index) {
      ensureOfferIsMutable();
      offer_.remove(index);
    }
  
    public static final int IMAGE_FIELD_NUMBER = 10;
    private com.google.protobuf.Internal.ProtobufList<finsky.protos.Common.Image> image_;
    /**
     * <pre>
     * optional Availability availability = 9;
     * </pre>
     *
     * <code>repeated .finsky.protos.Common.Image image = 10;</code>
     */
    @java.lang.Override
    public java.util.List<finsky.protos.Common.Image> getImageList() {
      return image_;
    }
    /**
     * <pre>
     * optional Availability availability = 9;
     * </pre>
     *
     * <code>repeated .finsky.protos.Common.Image image = 10;</code>
     */
    public java.util.List<? extends finsky.protos.Common.ImageOrBuilder> 
        getImageOrBuilderList() {
      return image_;
    }
    /**
     * <pre>
     * optional Availability availability = 9;
     * </pre>
     *
     * <code>repeated .finsky.protos.Common.Image image = 10;</code>
     */
    @java.lang.Override
    public int getImageCount() {
      return image_.size();
    }
    /**
     * <pre>
     * optional Availability availability = 9;
     * </pre>
     *
     * <code>repeated .finsky.protos.Common.Image image = 10;</code>
     */
    @java.lang.Override
    public finsky.protos.Common.Image getImage(int index) {
      return image_.get(index);
    }
    /**
     * <pre>
     * optional Availability availability = 9;
     * </pre>
     *
     * <code>repeated .finsky.protos.Common.Image image = 10;</code>
     */
    public finsky.protos.Common.ImageOrBuilder getImageOrBuilder(
        int index) {
      return image_.get(index);
    }
    private void ensureImageIsMutable() {
      com.google.protobuf.Internal.ProtobufList<finsky.protos.Common.Image> tmp = image_;
      if (!tmp.isModifiable()) {
        image_ =
            com.google.protobuf.GeneratedMessageLite.mutableCopy(tmp);
       }
    }
  
    /**
     * <pre>
     * optional Availability availability = 9;
     * </pre>
     *
     * <code>repeated .finsky.protos.Common.Image image = 10;</code>
     */
    private void setImage(
        int index, finsky.protos.Common.Image value) {
      value.getClass();
    ensureImageIsMutable();
      image_.set(index, value);
    }
    /**
     * <pre>
     * optional Availability availability = 9;
     * </pre>
     *
     * <code>repeated .finsky.protos.Common.Image image = 10;</code>
     */
    private void addImage(finsky.protos.Common.Image value) {
      value.getClass();
    ensureImageIsMutable();
      image_.add(value);
    }
    /**
     * <pre>
     * optional Availability availability = 9;
     * </pre>
     *
     * <code>repeated .finsky.protos.Common.Image image = 10;</code>
     */
    private void addImage(
        int index, finsky.protos.Common.Image value) {
      value.getClass();
    ensureImageIsMutable();
      image_.add(index, value);
    }
    /**
     * <pre>
     * optional Availability availability = 9;
     * </pre>
     *
     * <code>repeated .finsky.protos.Common.Image image = 10;</code>
     */
    private void addAllImage(
        java.lang.Iterable<? extends finsky.protos.Common.Image> values) {
      ensureImageIsMutable();
      com.google.protobuf.AbstractMessageLite.addAll(
          values, image_);
    }
    /**
     * <pre>
     * optional Availability availability = 9;
     * </pre>
     *
     * <code>repeated .finsky.protos.Common.Image image = 10;</code>
     */
    private void clearImage() {
      image_ = emptyProtobufList();
    }
    /**
     * <pre>
     * optional Availability availability = 9;
     * </pre>
     *
     * <code>repeated .finsky.protos.Common.Image image = 10;</code>
     */
    private void removeImage(int index) {
      ensureImageIsMutable();
      image_.remove(index);
    }
  
    public static final int CHILD_FIELD_NUMBER = 11;
    private com.google.protobuf.Internal.ProtobufList<finsky.protos.DocV2> child_;
    /**
     * <code>repeated .finsky.protos.DocV2 child = 11;</code>
     */
    @java.lang.Override
    public java.util.List<finsky.protos.DocV2> getChildList() {
      return child_;
    }
    /**
     * <code>repeated .finsky.protos.DocV2 child = 11;</code>
     */
    public java.util.List<? extends finsky.protos.DocV2OrBuilder> 
        getChildOrBuilderList() {
      return child_;
    }
    /**
     * <code>repeated .finsky.protos.DocV2 child = 11;</code>
     */
    @java.lang.Override
    public int getChildCount() {
      return child_.size();
    }
    /**
     * <code>repeated .finsky.protos.DocV2 child = 11;</code>
     */
    @java.lang.Override
    public finsky.protos.DocV2 getChild(int index) {
      return child_.get(index);
    }
    /**
     * <code>repeated .finsky.protos.DocV2 child = 11;</code>
     */
    public finsky.protos.DocV2OrBuilder getChildOrBuilder(
        int index) {
      return child_.get(index);
    }
    private void ensureChildIsMutable() {
      com.google.protobuf.Internal.ProtobufList<finsky.protos.DocV2> tmp = child_;
      if (!tmp.isModifiable()) {
        child_ =
            com.google.protobuf.GeneratedMessageLite.mutableCopy(tmp);
       }
    }
  
    /**
     * <code>repeated .finsky.protos.DocV2 child = 11;</code>
     */
    private void setChild(
        int index, finsky.protos.DocV2 value) {
      value.getClass();
    ensureChildIsMutable();
      child_.set(index, value);
    }
    /**
     * <code>repeated .finsky.protos.DocV2 child = 11;</code>
     */
    private void addChild(finsky.protos.DocV2 value) {
      value.getClass();
    ensureChildIsMutable();
      child_.add(value);
    }
    /**
     * <code>repeated .finsky.protos.DocV2 child = 11;</code>
     */
    private void addChild(
        int index, finsky.protos.DocV2 value) {
      value.getClass();
    ensureChildIsMutable();
      child_.add(index, value);
    }
    /**
     * <code>repeated .finsky.protos.DocV2 child = 11;</code>
     */
    private void addAllChild(
        java.lang.Iterable<? extends finsky.protos.DocV2> values) {
      ensureChildIsMutable();
      com.google.protobuf.AbstractMessageLite.addAll(
          values, child_);
    }
    /**
     * <code>repeated .finsky.protos.DocV2 child = 11;</code>
     */
    private void clearChild() {
      child_ = emptyProtobufList();
    }
    /**
     * <code>repeated .finsky.protos.DocV2 child = 11;</code>
     */
    private void removeChild(int index) {
      ensureChildIsMutable();
      child_.remove(index);
    }
  
    public static final int CONTAINERMETADATA_FIELD_NUMBER = 12;
    private finsky.protos.Containers.ContainerMetadata containerMetadata_;
    /**
     * <code>optional .finsky.protos.Containers.ContainerMetadata containerMetadata = 12;</code>
     */
    @java.lang.Override
    public boolean hasContainerMetadata() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <code>optional .finsky.protos.Containers.ContainerMetadata containerMetadata = 12;</code>
     */
    @java.lang.Override
    public finsky.protos.Containers.ContainerMetadata getContainerMetadata() {
      return containerMetadata_ == null ? finsky.protos.Containers.ContainerMetadata.getDefaultInstance() : containerMetadata_;
    }
    /**
     * <code>optional .finsky.protos.Containers.ContainerMetadata containerMetadata = 12;</code>
     */
    private void setContainerMetadata(finsky.protos.Containers.ContainerMetadata value) {
      value.getClass();
    containerMetadata_ = value;
      bitField0_ |= 0x00000080;
      }
    /**
     * <code>optional .finsky.protos.Containers.ContainerMetadata containerMetadata = 12;</code>
     */
    @java.lang.SuppressWarnings({"ReferenceEquality"})
    private void mergeContainerMetadata(finsky.protos.Containers.ContainerMetadata value) {
      value.getClass();
    if (containerMetadata_ != null &&
          containerMetadata_ != finsky.protos.Containers.ContainerMetadata.getDefaultInstance()) {
        containerMetadata_ =
          finsky.protos.Containers.ContainerMetadata.newBuilder(containerMetadata_).mergeFrom(value).buildPartial();
      } else {
        containerMetadata_ = value;
      }
      bitField0_ |= 0x00000080;
    }
    /**
     * <code>optional .finsky.protos.Containers.ContainerMetadata containerMetadata = 12;</code>
     */
    private void clearContainerMetadata() {  containerMetadata_ = null;
      bitField0_ = (bitField0_ & ~0x00000080);
    }
  
    public static final int DETAILS_FIELD_NUMBER = 13;
    private finsky.protos.DocDetails details_;
    /**
     * <code>optional .finsky.protos.DocDetails details = 13;</code>
     */
    @java.lang.Override
    public boolean hasDetails() {
      return ((bitField0_ & 0x00000100) != 0);
    }
    /**
     * <code>optional .finsky.protos.DocDetails details = 13;</code>
     */
    @java.lang.Override
    public finsky.protos.DocDetails getDetails() {
      return details_ == null ? finsky.protos.DocDetails.getDefaultInstance() : details_;
    }
    /**
     * <code>optional .finsky.protos.DocDetails details = 13;</code>
     */
    private void setDetails(finsky.protos.DocDetails value) {
      value.getClass();
    details_ = value;
      bitField0_ |= 0x00000100;
      }
    /**
     * <code>optional .finsky.protos.DocDetails details = 13;</code>
     */
    @java.lang.SuppressWarnings({"ReferenceEquality"})
    private void mergeDetails(finsky.protos.DocDetails value) {
      value.getClass();
    if (details_ != null &&
          details_ != finsky.protos.DocDetails.getDefaultInstance()) {
        details_ =
          finsky.protos.DocDetails.newBuilder(details_).mergeFrom(value).buildPartial();
      } else {
        details_ = value;
      }
      bitField0_ |= 0x00000100;
    }
    /**
     * <code>optional .finsky.protos.DocDetails details = 13;</code>
     */
    private void clearDetails() {  details_ = null;
      bitField0_ = (bitField0_ & ~0x00000100);
    }
  
    public static final int AGGREGATERATING_FIELD_NUMBER = 14;
    private finsky.protos.DocV2.AggregateRating aggregateRating_;
    /**
     * <code>optional .finsky.protos.DocV2.AggregateRating aggregateRating = 14;</code>
     */
    @java.lang.Override
    public boolean hasAggregateRating() {
      return ((bitField0_ & 0x00000200) != 0);
    }
    /**
     * <code>optional .finsky.protos.DocV2.AggregateRating aggregateRating = 14;</code>
     */
    @java.lang.Override
    public finsky.protos.DocV2.AggregateRating getAggregateRating() {
      return aggregateRating_ == null ? finsky.protos.DocV2.AggregateRating.getDefaultInstance() : aggregateRating_;
    }
    /**
     * <code>optional .finsky.protos.DocV2.AggregateRating aggregateRating = 14;</code>
     */
    private void setAggregateRating(finsky.protos.DocV2.AggregateRating value) {
      value.getClass();
    aggregateRating_ = value;
      bitField0_ |= 0x00000200;
      }
    /**
     * <code>optional .finsky.protos.DocV2.AggregateRating aggregateRating = 14;</code>
     */
    @java.lang.SuppressWarnings({"ReferenceEquality"})
    private void mergeAggregateRating(finsky.protos.DocV2.AggregateRating value) {
      value.getClass();
    if (aggregateRating_ != null &&
          aggregateRating_ != finsky.protos.DocV2.AggregateRating.getDefaultInstance()) {
        aggregateRating_ =
          finsky.protos.DocV2.AggregateRating.newBuilder(aggregateRating_).mergeFrom(value).buildPartial();
      } else {
        aggregateRating_ = value;
      }
      bitField0_ |= 0x00000200;
    }
    /**
     * <code>optional .finsky.protos.DocV2.AggregateRating aggregateRating = 14;</code>
     */
    private void clearAggregateRating() {  aggregateRating_ = null;
      bitField0_ = (bitField0_ & ~0x00000200);
    }
  
    public static final int ANNOTATIONS_FIELD_NUMBER = 15;
    private finsky.protos.Annotations annotations_;
    /**
     * <code>optional .finsky.protos.Annotations annotations = 15;</code>
     */
    @java.lang.Override
    public boolean hasAnnotations() {
      return ((bitField0_ & 0x00000400) != 0);
    }
    /**
     * <code>optional .finsky.protos.Annotations annotations = 15;</code>
     */
    @java.lang.Override
    public finsky.protos.Annotations getAnnotations() {
      return annotations_ == null ? finsky.protos.Annotations.getDefaultInstance() : annotations_;
    }
    /**
     * <code>optional .finsky.protos.Annotations annotations = 15;</code>
     */
    private void setAnnotations(finsky.protos.Annotations value) {
      value.getClass();
    annotations_ = value;
      bitField0_ |= 0x00000400;
      }
    /**
     * <code>optional .finsky.protos.Annotations annotations = 15;</code>
     */
    @java.lang.SuppressWarnings({"ReferenceEquality"})
    private void mergeAnnotations(finsky.protos.Annotations value) {
      value.getClass();
    if (annotations_ != null &&
          annotations_ != finsky.protos.Annotations.getDefaultInstance()) {
        annotations_ =
          finsky.protos.Annotations.newBuilder(annotations_).mergeFrom(value).buildPartial();
      } else {
        annotations_ = value;
      }
      bitField0_ |= 0x00000400;
    }
    /**
     * <code>optional .finsky.protos.Annotations annotations = 15;</code>
     */
    private void clearAnnotations() {  annotations_ = null;
      bitField0_ = (bitField0_ & ~0x00000400);
    }
  
    public static final int DETAILSURL_FIELD_NUMBER = 16;
    private java.lang.String detailsUrl_;
    /**
     * <code>optional string detailsUrl = 16;</code>
     * @return Whether the detailsUrl field is set.
     */
    @java.lang.Override
    public boolean hasDetailsUrl() {
      return ((bitField0_ & 0x00000800) != 0);
    }
    /**
     * <code>optional string detailsUrl = 16;</code>
     * @return The detailsUrl.
     */
    @java.lang.Override
    public java.lang.String getDetailsUrl() {
      return detailsUrl_;
    }
    /**
     * <code>optional string detailsUrl = 16;</code>
     * @return The bytes for detailsUrl.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getDetailsUrlBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(detailsUrl_);
    }
    /**
     * <code>optional string detailsUrl = 16;</code>
     * @param value The detailsUrl to set.
     */
    private void setDetailsUrl(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
    bitField0_ |= 0x00000800;
      detailsUrl_ = value;
    }
    /**
     * <code>optional string detailsUrl = 16;</code>
     */
    private void clearDetailsUrl() {
      bitField0_ = (bitField0_ & ~0x00000800);
      detailsUrl_ = getDefaultInstance().getDetailsUrl();
    }
    /**
     * <code>optional string detailsUrl = 16;</code>
     * @param value The bytes for detailsUrl to set.
     */
    private void setDetailsUrlBytes(
        com.google.protobuf.ByteString value) {
      detailsUrl_ = value.toStringUtf8();
      bitField0_ |= 0x00000800;
    }
  
    public static final int SHAREURL_FIELD_NUMBER = 17;
    private java.lang.String shareUrl_;
    /**
     * <code>optional string shareUrl = 17;</code>
     * @return Whether the shareUrl field is set.
     */
    @java.lang.Override
    public boolean hasShareUrl() {
      return ((bitField0_ & 0x00001000) != 0);
    }
    /**
     * <code>optional string shareUrl = 17;</code>
     * @return The shareUrl.
     */
    @java.lang.Override
    public java.lang.String getShareUrl() {
      return shareUrl_;
    }
    /**
     * <code>optional string shareUrl = 17;</code>
     * @return The bytes for shareUrl.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getShareUrlBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(shareUrl_);
    }
    /**
     * <code>optional string shareUrl = 17;</code>
     * @param value The shareUrl to set.
     */
    private void setShareUrl(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
    bitField0_ |= 0x00001000;
      shareUrl_ = value;
    }
    /**
     * <code>optional string shareUrl = 17;</code>
     */
    private void clearShareUrl() {
      bitField0_ = (bitField0_ & ~0x00001000);
      shareUrl_ = getDefaultInstance().getShareUrl();
    }
    /**
     * <code>optional string shareUrl = 17;</code>
     * @param value The bytes for shareUrl to set.
     */
    private void setShareUrlBytes(
        com.google.protobuf.ByteString value) {
      shareUrl_ = value.toStringUtf8();
      bitField0_ |= 0x00001000;
    }
  
    public static final int REVIEWSURL_FIELD_NUMBER = 18;
    private java.lang.String reviewsUrl_;
    /**
     * <code>optional string reviewsUrl = 18;</code>
     * @return Whether the reviewsUrl field is set.
     */
    @java.lang.Override
    public boolean hasReviewsUrl() {
      return ((bitField0_ & 0x00002000) != 0);
    }
    /**
     * <code>optional string reviewsUrl = 18;</code>
     * @return The reviewsUrl.
     */
    @java.lang.Override
    public java.lang.String getReviewsUrl() {
      return reviewsUrl_;
    }
    /**
     * <code>optional string reviewsUrl = 18;</code>
     * @return The bytes for reviewsUrl.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getReviewsUrlBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(reviewsUrl_);
    }
    /**
     * <code>optional string reviewsUrl = 18;</code>
     * @param value The reviewsUrl to set.
     */
    private void setReviewsUrl(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
    bitField0_ |= 0x00002000;
      reviewsUrl_ = value;
    }
    /**
     * <code>optional string reviewsUrl = 18;</code>
     */
    private void clearReviewsUrl() {
      bitField0_ = (bitField0_ & ~0x00002000);
      reviewsUrl_ = getDefaultInstance().getReviewsUrl();
    }
    /**
     * <code>optional string reviewsUrl = 18;</code>
     * @param value The bytes for reviewsUrl to set.
     */
    private void setReviewsUrlBytes(
        com.google.protobuf.ByteString value) {
      reviewsUrl_ = value.toStringUtf8();
      bitField0_ |= 0x00002000;
    }
  
    public static final int BACKENDURL_FIELD_NUMBER = 19;
    private java.lang.String backendUrl_;
    /**
     * <code>optional string backendUrl = 19;</code>
     * @return Whether the backendUrl field is set.
     */
    @java.lang.Override
    public boolean hasBackendUrl() {
      return ((bitField0_ & 0x00004000) != 0);
    }
    /**
     * <code>optional string backendUrl = 19;</code>
     * @return The backendUrl.
     */
    @java.lang.Override
    public java.lang.String getBackendUrl() {
      return backendUrl_;
    }
    /**
     * <code>optional string backendUrl = 19;</code>
     * @return The bytes for backendUrl.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getBackendUrlBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(backendUrl_);
    }
    /**
     * <code>optional string backendUrl = 19;</code>
     * @param value The backendUrl to set.
     */
    private void setBackendUrl(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
    bitField0_ |= 0x00004000;
      backendUrl_ = value;
    }
    /**
     * <code>optional string backendUrl = 19;</code>
     */
    private void clearBackendUrl() {
      bitField0_ = (bitField0_ & ~0x00004000);
      backendUrl_ = getDefaultInstance().getBackendUrl();
    }
    /**
     * <code>optional string backendUrl = 19;</code>
     * @param value The bytes for backendUrl to set.
     */
    private void setBackendUrlBytes(
        com.google.protobuf.ByteString value) {
      backendUrl_ = value.toStringUtf8();
      bitField0_ |= 0x00004000;
    }
  
    public static final int PURCHASEDETAILSURL_FIELD_NUMBER = 20;
    private java.lang.String purchaseDetailsUrl_;
    /**
     * <code>optional string purchaseDetailsUrl = 20;</code>
     * @return Whether the purchaseDetailsUrl field is set.
     */
    @java.lang.Override
    public boolean hasPurchaseDetailsUrl() {
      return ((bitField0_ & 0x00008000) != 0);
    }
    /**
     * <code>optional string purchaseDetailsUrl = 20;</code>
     * @return The purchaseDetailsUrl.
     */
    @java.lang.Override
    public java.lang.String getPurchaseDetailsUrl() {
      return purchaseDetailsUrl_;
    }
    /**
     * <code>optional string purchaseDetailsUrl = 20;</code>
     * @return The bytes for purchaseDetailsUrl.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getPurchaseDetailsUrlBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(purchaseDetailsUrl_);
    }
    /**
     * <code>optional string purchaseDetailsUrl = 20;</code>
     * @param value The purchaseDetailsUrl to set.
     */
    private void setPurchaseDetailsUrl(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
    bitField0_ |= 0x00008000;
      purchaseDetailsUrl_ = value;
    }
    /**
     * <code>optional string purchaseDetailsUrl = 20;</code>
     */
    private void clearPurchaseDetailsUrl() {
      bitField0_ = (bitField0_ & ~0x00008000);
      purchaseDetailsUrl_ = getDefaultInstance().getPurchaseDetailsUrl();
    }
    /**
     * <code>optional string purchaseDetailsUrl = 20;</code>
     * @param value The bytes for purchaseDetailsUrl to set.
     */
    private void setPurchaseDetailsUrlBytes(
        com.google.protobuf.ByteString value) {
      purchaseDetailsUrl_ = value.toStringUtf8();
      bitField0_ |= 0x00008000;
    }
  
    public static final int DETAILSREUSABLE_FIELD_NUMBER = 21;
    private boolean detailsReusable_;
    /**
     * <code>optional bool detailsReusable = 21;</code>
     * @return Whether the detailsReusable field is set.
     */
    @java.lang.Override
    public boolean hasDetailsReusable() {
      return ((bitField0_ & 0x00010000) != 0);
    }
    /**
     * <code>optional bool detailsReusable = 21;</code>
     * @return The detailsReusable.
     */
    @java.lang.Override
    public boolean getDetailsReusable() {
      return detailsReusable_;
    }
    /**
     * <code>optional bool detailsReusable = 21;</code>
     * @param value The detailsReusable to set.
     */
    private void setDetailsReusable(boolean value) {
      bitField0_ |= 0x00010000;
      detailsReusable_ = value;
    }
    /**
     * <code>optional bool detailsReusable = 21;</code>
     */
    private void clearDetailsReusable() {
      bitField0_ = (bitField0_ & ~0x00010000);
      detailsReusable_ = false;
    }
  
    public static final int SUBTITLE_FIELD_NUMBER = 22;
    private java.lang.String subtitle_;
    /**
     * <code>optional string subtitle = 22;</code>
     * @return Whether the subtitle field is set.
     */
    @java.lang.Override
    public boolean hasSubtitle() {
      return ((bitField0_ & 0x00020000) != 0);
    }
    /**
     * <code>optional string subtitle = 22;</code>
     * @return The subtitle.
     */
    @java.lang.Override
    public java.lang.String getSubtitle() {
      return subtitle_;
    }
    /**
     * <code>optional string subtitle = 22;</code>
     * @return The bytes for subtitle.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getSubtitleBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(subtitle_);
    }
    /**
     * <code>optional string subtitle = 22;</code>
     * @param value The subtitle to set.
     */
    private void setSubtitle(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
    bitField0_ |= 0x00020000;
      subtitle_ = value;
    }
    /**
     * <code>optional string subtitle = 22;</code>
     */
    private void clearSubtitle() {
      bitField0_ = (bitField0_ & ~0x00020000);
      subtitle_ = getDefaultInstance().getSubtitle();
    }
    /**
     * <code>optional string subtitle = 22;</code>
     * @param value The bytes for subtitle to set.
     */
    private void setSubtitleBytes(
        com.google.protobuf.ByteString value) {
      subtitle_ = value.toStringUtf8();
      bitField0_ |= 0x00020000;
    }
  
    public static final int APPINFO_FIELD_NUMBER = 25;
    private finsky.protos.AppInfo appInfo_;
    /**
     * <code>optional .finsky.protos.AppInfo appInfo = 25;</code>
     */
    @java.lang.Override
    public boolean hasAppInfo() {
      return ((bitField0_ & 0x00040000) != 0);
    }
    /**
     * <code>optional .finsky.protos.AppInfo appInfo = 25;</code>
     */
    @java.lang.Override
    public finsky.protos.AppInfo getAppInfo() {
      return appInfo_ == null ? finsky.protos.AppInfo.getDefaultInstance() : appInfo_;
    }
    /**
     * <code>optional .finsky.protos.AppInfo appInfo = 25;</code>
     */
    private void setAppInfo(finsky.protos.AppInfo value) {
      value.getClass();
    appInfo_ = value;
      bitField0_ |= 0x00040000;
      }
    /**
     * <code>optional .finsky.protos.AppInfo appInfo = 25;</code>
     */
    @java.lang.SuppressWarnings({"ReferenceEquality"})
    private void mergeAppInfo(finsky.protos.AppInfo value) {
      value.getClass();
    if (appInfo_ != null &&
          appInfo_ != finsky.protos.AppInfo.getDefaultInstance()) {
        appInfo_ =
          finsky.protos.AppInfo.newBuilder(appInfo_).mergeFrom(value).buildPartial();
      } else {
        appInfo_ = value;
      }
      bitField0_ |= 0x00040000;
    }
    /**
     * <code>optional .finsky.protos.AppInfo appInfo = 25;</code>
     */
    private void clearAppInfo() {  appInfo_ = null;
      bitField0_ = (bitField0_ & ~0x00040000);
    }
  
    public static final int MATURE_FIELD_NUMBER = 26;
    private boolean mature_;
    /**
     * <code>optional bool mature = 26;</code>
     * @return Whether the mature field is set.
     */
    @java.lang.Override
    public boolean hasMature() {
      return ((bitField0_ & 0x00080000) != 0);
    }
    /**
     * <code>optional bool mature = 26;</code>
     * @return The mature.
     */
    @java.lang.Override
    public boolean getMature() {
      return mature_;
    }
    /**
     * <code>optional bool mature = 26;</code>
     * @param value The mature to set.
     */
    private void setMature(boolean value) {
      bitField0_ |= 0x00080000;
      mature_ = value;
    }
    /**
     * <code>optional bool mature = 26;</code>
     */
    private void clearMature() {
      bitField0_ = (bitField0_ & ~0x00080000);
      mature_ = false;
    }
  
    public static final int PROMOTIONALDESCRIPTION_FIELD_NUMBER = 27;
    private java.lang.String promotionalDescription_;
    /**
     * <code>optional string promotionalDescription = 27;</code>
     * @return Whether the promotionalDescription field is set.
     */
    @java.lang.Override
    public boolean hasPromotionalDescription() {
      return ((bitField0_ & 0x00100000) != 0);
    }
    /**
     * <code>optional string promotionalDescription = 27;</code>
     * @return The promotionalDescription.
     */
    @java.lang.Override
    public java.lang.String getPromotionalDescription() {
      return promotionalDescription_;
    }
    /**
     * <code>optional string promotionalDescription = 27;</code>
     * @return The bytes for promotionalDescription.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getPromotionalDescriptionBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(promotionalDescription_);
    }
    /**
     * <code>optional string promotionalDescription = 27;</code>
     * @param value The promotionalDescription to set.
     */
    private void setPromotionalDescription(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
    bitField0_ |= 0x00100000;
      promotionalDescription_ = value;
    }
    /**
     * <code>optional string promotionalDescription = 27;</code>
     */
    private void clearPromotionalDescription() {
      bitField0_ = (bitField0_ & ~0x00100000);
      promotionalDescription_ = getDefaultInstance().getPromotionalDescription();
    }
    /**
     * <code>optional string promotionalDescription = 27;</code>
     * @param value The bytes for promotionalDescription to set.
     */
    private void setPromotionalDescriptionBytes(
        com.google.protobuf.ByteString value) {
      promotionalDescription_ = value.toStringUtf8();
      bitField0_ |= 0x00100000;
    }
  
    public static final int AVAILABLEFORPREREGISTRATION_FIELD_NUMBER = 29;
    private boolean availableForPreregistration_;
    /**
     * <code>optional bool availableForPreregistration = 29;</code>
     * @return Whether the availableForPreregistration field is set.
     */
    @java.lang.Override
    public boolean hasAvailableForPreregistration() {
      return ((bitField0_ & 0x00200000) != 0);
    }
    /**
     * <code>optional bool availableForPreregistration = 29;</code>
     * @return The availableForPreregistration.
     */
    @java.lang.Override
    public boolean getAvailableForPreregistration() {
      return availableForPreregistration_;
    }
    /**
     * <code>optional bool availableForPreregistration = 29;</code>
     * @param value The availableForPreregistration to set.
     */
    private void setAvailableForPreregistration(boolean value) {
      bitField0_ |= 0x00200000;
      availableForPreregistration_ = value;
    }
    /**
     * <code>optional bool availableForPreregistration = 29;</code>
     */
    private void clearAvailableForPreregistration() {
      bitField0_ = (bitField0_ & ~0x00200000);
      availableForPreregistration_ = false;
    }
  
    public static final int REVIEWSNIPPETSURL_FIELD_NUMBER = 31;
    private java.lang.String reviewSnippetsUrl_;
    /**
     * <code>optional string reviewSnippetsUrl = 31;</code>
     * @return Whether the reviewSnippetsUrl field is set.
     */
    @java.lang.Override
    public boolean hasReviewSnippetsUrl() {
      return ((bitField0_ & 0x00400000) != 0);
    }
    /**
     * <code>optional string reviewSnippetsUrl = 31;</code>
     * @return The reviewSnippetsUrl.
     */
    @java.lang.Override
    public java.lang.String getReviewSnippetsUrl() {
      return reviewSnippetsUrl_;
    }
    /**
     * <code>optional string reviewSnippetsUrl = 31;</code>
     * @return The bytes for reviewSnippetsUrl.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getReviewSnippetsUrlBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(reviewSnippetsUrl_);
    }
    /**
     * <code>optional string reviewSnippetsUrl = 31;</code>
     * @param value The reviewSnippetsUrl to set.
     */
    private void setReviewSnippetsUrl(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
    bitField0_ |= 0x00400000;
      reviewSnippetsUrl_ = value;
    }
    /**
     * <code>optional string reviewSnippetsUrl = 31;</code>
     */
    private void clearReviewSnippetsUrl() {
      bitField0_ = (bitField0_ & ~0x00400000);
      reviewSnippetsUrl_ = getDefaultInstance().getReviewSnippetsUrl();
    }
    /**
     * <code>optional string reviewSnippetsUrl = 31;</code>
     * @param value The bytes for reviewSnippetsUrl to set.
     */
    private void setReviewSnippetsUrlBytes(
        com.google.protobuf.ByteString value) {
      reviewSnippetsUrl_ = value.toStringUtf8();
      bitField0_ |= 0x00400000;
    }
  
    public static final int FORCESHAREABILITY_FIELD_NUMBER = 32;
    private boolean forceShareability_;
    /**
     * <code>optional bool forceShareability = 32;</code>
     * @return Whether the forceShareability field is set.
     */
    @java.lang.Override
    public boolean hasForceShareability() {
      return ((bitField0_ & 0x00800000) != 0);
    }
    /**
     * <code>optional bool forceShareability = 32;</code>
     * @return The forceShareability.
     */
    @java.lang.Override
    public boolean getForceShareability() {
      return forceShareability_;
    }
    /**
     * <code>optional bool forceShareability = 32;</code>
     * @param value The forceShareability to set.
     */
    private void setForceShareability(boolean value) {
      bitField0_ |= 0x00800000;
      forceShareability_ = value;
    }
    /**
     * <code>optional bool forceShareability = 32;</code>
     */
    private void clearForceShareability() {
      bitField0_ = (bitField0_ & ~0x00800000);
      forceShareability_ = false;
    }
  
    public static final int USEWISHLISTASPRIMARYACTION_FIELD_NUMBER = 33;
    private boolean useWishlistAsPrimaryAction_;
    /**
     * <code>optional bool useWishlistAsPrimaryAction = 33;</code>
     * @return Whether the useWishlistAsPrimaryAction field is set.
     */
    @java.lang.Override
    public boolean hasUseWishlistAsPrimaryAction() {
      return ((bitField0_ & 0x01000000) != 0);
    }
    /**
     * <code>optional bool useWishlistAsPrimaryAction = 33;</code>
     * @return The useWishlistAsPrimaryAction.
     */
    @java.lang.Override
    public boolean getUseWishlistAsPrimaryAction() {
      return useWishlistAsPrimaryAction_;
    }
    /**
     * <code>optional bool useWishlistAsPrimaryAction = 33;</code>
     * @param value The useWishlistAsPrimaryAction to set.
     */
    private void setUseWishlistAsPrimaryAction(boolean value) {
      bitField0_ |= 0x01000000;
      useWishlistAsPrimaryAction_ = value;
    }
    /**
     * <code>optional bool useWishlistAsPrimaryAction = 33;</code>
     */
    private void clearUseWishlistAsPrimaryAction() {
      bitField0_ = (bitField0_ & ~0x01000000);
      useWishlistAsPrimaryAction_ = false;
    }
  
    public static final int REVIEWQUESTIONSURL_FIELD_NUMBER = 34;
    private java.lang.String reviewQuestionsUrl_;
    /**
     * <code>optional string reviewQuestionsUrl = 34;</code>
     * @return Whether the reviewQuestionsUrl field is set.
     */
    @java.lang.Override
    public boolean hasReviewQuestionsUrl() {
      return ((bitField0_ & 0x02000000) != 0);
    }
    /**
     * <code>optional string reviewQuestionsUrl = 34;</code>
     * @return The reviewQuestionsUrl.
     */
    @java.lang.Override
    public java.lang.String getReviewQuestionsUrl() {
      return reviewQuestionsUrl_;
    }
    /**
     * <code>optional string reviewQuestionsUrl = 34;</code>
     * @return The bytes for reviewQuestionsUrl.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getReviewQuestionsUrlBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(reviewQuestionsUrl_);
    }
    /**
     * <code>optional string reviewQuestionsUrl = 34;</code>
     * @param value The reviewQuestionsUrl to set.
     */
    private void setReviewQuestionsUrl(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
    bitField0_ |= 0x02000000;
      reviewQuestionsUrl_ = value;
    }
    /**
     * <code>optional string reviewQuestionsUrl = 34;</code>
     */
    private void clearReviewQuestionsUrl() {
      bitField0_ = (bitField0_ & ~0x02000000);
      reviewQuestionsUrl_ = getDefaultInstance().getReviewQuestionsUrl();
    }
    /**
     * <code>optional string reviewQuestionsUrl = 34;</code>
     * @param value The bytes for reviewQuestionsUrl to set.
     */
    private void setReviewQuestionsUrlBytes(
        com.google.protobuf.ByteString value) {
      reviewQuestionsUrl_ = value.toStringUtf8();
      bitField0_ |= 0x02000000;
    }
  
    public static final int REVIEWSUMMARYURL_FIELD_NUMBER = 39;
    private java.lang.String reviewSummaryUrl_;
    /**
     * <code>optional string reviewSummaryUrl = 39;</code>
     * @return Whether the reviewSummaryUrl field is set.
     */
    @java.lang.Override
    public boolean hasReviewSummaryUrl() {
      return ((bitField0_ & 0x04000000) != 0);
    }
    /**
     * <code>optional string reviewSummaryUrl = 39;</code>
     * @return The reviewSummaryUrl.
     */
    @java.lang.Override
    public java.lang.String getReviewSummaryUrl() {
      return reviewSummaryUrl_;
    }
    /**
     * <code>optional string reviewSummaryUrl = 39;</code>
     * @return The bytes for reviewSummaryUrl.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getReviewSummaryUrlBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(reviewSummaryUrl_);
    }
    /**
     * <code>optional string reviewSummaryUrl = 39;</code>
     * @param value The reviewSummaryUrl to set.
     */
    private void setReviewSummaryUrl(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
    bitField0_ |= 0x04000000;
      reviewSummaryUrl_ = value;
    }
    /**
     * <code>optional string reviewSummaryUrl = 39;</code>
     */
    private void clearReviewSummaryUrl() {
      bitField0_ = (bitField0_ & ~0x04000000);
      reviewSummaryUrl_ = getDefaultInstance().getReviewSummaryUrl();
    }
    /**
     * <code>optional string reviewSummaryUrl = 39;</code>
     * @param value The bytes for reviewSummaryUrl to set.
     */
    private void setReviewSummaryUrlBytes(
        com.google.protobuf.ByteString value) {
      reviewSummaryUrl_ = value.toStringUtf8();
      bitField0_ |= 0x04000000;
    }
  
    public static finsky.protos.DocV2 parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static finsky.protos.DocV2 parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static finsky.protos.DocV2 parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static finsky.protos.DocV2 parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static finsky.protos.DocV2 parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static finsky.protos.DocV2 parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static finsky.protos.DocV2 parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static finsky.protos.DocV2 parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }
  
    public static finsky.protos.DocV2 parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input);
    }
  
    public static finsky.protos.DocV2 parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static finsky.protos.DocV2 parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static finsky.protos.DocV2 parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }
  
    public static Builder newBuilder() {
      return (Builder) DEFAULT_INSTANCE.createBuilder();
    }
    public static Builder newBuilder(finsky.protos.DocV2 prototype) {
      return DEFAULT_INSTANCE.createBuilder(prototype);
    }
  
    /**
     * Protobuf type {@code finsky.protos.DocV2}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          finsky.protos.DocV2, Builder> implements
        // @@protoc_insertion_point(builder_implements:finsky.protos.DocV2)
        finsky.protos.DocV2OrBuilder {
      // Construct using finsky.protos.DocV2.newBuilder()
      private Builder() {
        super(DEFAULT_INSTANCE);
      }
  
  
      /**
       * <code>optional string docid = 1;</code>
       * @return Whether the docid field is set.
       */
      @java.lang.Override
      public boolean hasDocid() {
        return instance.hasDocid();
      }
      /**
       * <code>optional string docid = 1;</code>
       * @return The docid.
       */
      @java.lang.Override
      public java.lang.String getDocid() {
        return instance.getDocid();
      }
      /**
       * <code>optional string docid = 1;</code>
       * @return The bytes for docid.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getDocidBytes() {
        return instance.getDocidBytes();
      }
      /**
       * <code>optional string docid = 1;</code>
       * @param value The docid to set.
       * @return This builder for chaining.
       */
      public Builder setDocid(
          java.lang.String value) {
        copyOnWrite();
        instance.setDocid(value);
        return this;
      }
      /**
       * <code>optional string docid = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearDocid() {
        copyOnWrite();
        instance.clearDocid();
        return this;
      }
      /**
       * <code>optional string docid = 1;</code>
       * @param value The bytes for docid to set.
       * @return This builder for chaining.
       */
      public Builder setDocidBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setDocidBytes(value);
        return this;
      }
  
      /**
       * <code>optional string backendDocid = 2;</code>
       * @return Whether the backendDocid field is set.
       */
      @java.lang.Override
      public boolean hasBackendDocid() {
        return instance.hasBackendDocid();
      }
      /**
       * <code>optional string backendDocid = 2;</code>
       * @return The backendDocid.
       */
      @java.lang.Override
      public java.lang.String getBackendDocid() {
        return instance.getBackendDocid();
      }
      /**
       * <code>optional string backendDocid = 2;</code>
       * @return The bytes for backendDocid.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getBackendDocidBytes() {
        return instance.getBackendDocidBytes();
      }
      /**
       * <code>optional string backendDocid = 2;</code>
       * @param value The backendDocid to set.
       * @return This builder for chaining.
       */
      public Builder setBackendDocid(
          java.lang.String value) {
        copyOnWrite();
        instance.setBackendDocid(value);
        return this;
      }
      /**
       * <code>optional string backendDocid = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearBackendDocid() {
        copyOnWrite();
        instance.clearBackendDocid();
        return this;
      }
      /**
       * <code>optional string backendDocid = 2;</code>
       * @param value The bytes for backendDocid to set.
       * @return This builder for chaining.
       */
      public Builder setBackendDocidBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setBackendDocidBytes(value);
        return this;
      }
  
      /**
       * <code>optional int32 docType = 3;</code>
       * @return Whether the docType field is set.
       */
      @java.lang.Override
      public boolean hasDocType() {
        return instance.hasDocType();
      }
      /**
       * <code>optional int32 docType = 3;</code>
       * @return The docType.
       */
      @java.lang.Override
      public int getDocType() {
        return instance.getDocType();
      }
      /**
       * <code>optional int32 docType = 3;</code>
       * @param value The docType to set.
       * @return This builder for chaining.
       */
      public Builder setDocType(int value) {
        copyOnWrite();
        instance.setDocType(value);
        return this;
      }
      /**
       * <code>optional int32 docType = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearDocType() {
        copyOnWrite();
        instance.clearDocType();
        return this;
      }
  
      /**
       * <code>optional int32 backendId = 4;</code>
       * @return Whether the backendId field is set.
       */
      @java.lang.Override
      public boolean hasBackendId() {
        return instance.hasBackendId();
      }
      /**
       * <code>optional int32 backendId = 4;</code>
       * @return The backendId.
       */
      @java.lang.Override
      public int getBackendId() {
        return instance.getBackendId();
      }
      /**
       * <code>optional int32 backendId = 4;</code>
       * @param value The backendId to set.
       * @return This builder for chaining.
       */
      public Builder setBackendId(int value) {
        copyOnWrite();
        instance.setBackendId(value);
        return this;
      }
      /**
       * <code>optional int32 backendId = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearBackendId() {
        copyOnWrite();
        instance.clearBackendId();
        return this;
      }
  
      /**
       * <code>optional string title = 5;</code>
       * @return Whether the title field is set.
       */
      @java.lang.Override
      public boolean hasTitle() {
        return instance.hasTitle();
      }
      /**
       * <code>optional string title = 5;</code>
       * @return The title.
       */
      @java.lang.Override
      public java.lang.String getTitle() {
        return instance.getTitle();
      }
      /**
       * <code>optional string title = 5;</code>
       * @return The bytes for title.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getTitleBytes() {
        return instance.getTitleBytes();
      }
      /**
       * <code>optional string title = 5;</code>
       * @param value The title to set.
       * @return This builder for chaining.
       */
      public Builder setTitle(
          java.lang.String value) {
        copyOnWrite();
        instance.setTitle(value);
        return this;
      }
      /**
       * <code>optional string title = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearTitle() {
        copyOnWrite();
        instance.clearTitle();
        return this;
      }
      /**
       * <code>optional string title = 5;</code>
       * @param value The bytes for title to set.
       * @return This builder for chaining.
       */
      public Builder setTitleBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setTitleBytes(value);
        return this;
      }
  
      /**
       * <code>optional string creator = 6;</code>
       * @return Whether the creator field is set.
       */
      @java.lang.Override
      public boolean hasCreator() {
        return instance.hasCreator();
      }
      /**
       * <code>optional string creator = 6;</code>
       * @return The creator.
       */
      @java.lang.Override
      public java.lang.String getCreator() {
        return instance.getCreator();
      }
      /**
       * <code>optional string creator = 6;</code>
       * @return The bytes for creator.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getCreatorBytes() {
        return instance.getCreatorBytes();
      }
      /**
       * <code>optional string creator = 6;</code>
       * @param value The creator to set.
       * @return This builder for chaining.
       */
      public Builder setCreator(
          java.lang.String value) {
        copyOnWrite();
        instance.setCreator(value);
        return this;
      }
      /**
       * <code>optional string creator = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearCreator() {
        copyOnWrite();
        instance.clearCreator();
        return this;
      }
      /**
       * <code>optional string creator = 6;</code>
       * @param value The bytes for creator to set.
       * @return This builder for chaining.
       */
      public Builder setCreatorBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setCreatorBytes(value);
        return this;
      }
  
      /**
       * <code>optional string descriptionHtml = 7;</code>
       * @return Whether the descriptionHtml field is set.
       */
      @java.lang.Override
      public boolean hasDescriptionHtml() {
        return instance.hasDescriptionHtml();
      }
      /**
       * <code>optional string descriptionHtml = 7;</code>
       * @return The descriptionHtml.
       */
      @java.lang.Override
      public java.lang.String getDescriptionHtml() {
        return instance.getDescriptionHtml();
      }
      /**
       * <code>optional string descriptionHtml = 7;</code>
       * @return The bytes for descriptionHtml.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getDescriptionHtmlBytes() {
        return instance.getDescriptionHtmlBytes();
      }
      /**
       * <code>optional string descriptionHtml = 7;</code>
       * @param value The descriptionHtml to set.
       * @return This builder for chaining.
       */
      public Builder setDescriptionHtml(
          java.lang.String value) {
        copyOnWrite();
        instance.setDescriptionHtml(value);
        return this;
      }
      /**
       * <code>optional string descriptionHtml = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearDescriptionHtml() {
        copyOnWrite();
        instance.clearDescriptionHtml();
        return this;
      }
      /**
       * <code>optional string descriptionHtml = 7;</code>
       * @param value The bytes for descriptionHtml to set.
       * @return This builder for chaining.
       */
      public Builder setDescriptionHtmlBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setDescriptionHtmlBytes(value);
        return this;
      }
  
      /**
       * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
       */
      @java.lang.Override
      public java.util.List<finsky.protos.Common.Offer> getOfferList() {
        return java.util.Collections.unmodifiableList(
            instance.getOfferList());
      }
      /**
       * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
       */
      @java.lang.Override
      public int getOfferCount() {
        return instance.getOfferCount();
      }/**
       * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
       */
      @java.lang.Override
      public finsky.protos.Common.Offer getOffer(int index) {
        return instance.getOffer(index);
      }
      /**
       * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
       */
      public Builder setOffer(
          int index, finsky.protos.Common.Offer value) {
        copyOnWrite();
        instance.setOffer(index, value);
        return this;
      }
      /**
       * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
       */
      public Builder setOffer(
          int index, finsky.protos.Common.Offer.Builder builderForValue) {
        copyOnWrite();
        instance.setOffer(index,
            builderForValue.build());
        return this;
      }
      /**
       * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
       */
      public Builder addOffer(finsky.protos.Common.Offer value) {
        copyOnWrite();
        instance.addOffer(value);
        return this;
      }
      /**
       * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
       */
      public Builder addOffer(
          int index, finsky.protos.Common.Offer value) {
        copyOnWrite();
        instance.addOffer(index, value);
        return this;
      }
      /**
       * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
       */
      public Builder addOffer(
          finsky.protos.Common.Offer.Builder builderForValue) {
        copyOnWrite();
        instance.addOffer(builderForValue.build());
        return this;
      }
      /**
       * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
       */
      public Builder addOffer(
          int index, finsky.protos.Common.Offer.Builder builderForValue) {
        copyOnWrite();
        instance.addOffer(index,
            builderForValue.build());
        return this;
      }
      /**
       * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
       */
      public Builder addAllOffer(
          java.lang.Iterable<? extends finsky.protos.Common.Offer> values) {
        copyOnWrite();
        instance.addAllOffer(values);
        return this;
      }
      /**
       * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
       */
      public Builder clearOffer() {
        copyOnWrite();
        instance.clearOffer();
        return this;
      }
      /**
       * <code>repeated .finsky.protos.Common.Offer offer = 8;</code>
       */
      public Builder removeOffer(int index) {
        copyOnWrite();
        instance.removeOffer(index);
        return this;
      }
  
      /**
       * <pre>
       * optional Availability availability = 9;
       * </pre>
       *
       * <code>repeated .finsky.protos.Common.Image image = 10;</code>
       */
      @java.lang.Override
      public java.util.List<finsky.protos.Common.Image> getImageList() {
        return java.util.Collections.unmodifiableList(
            instance.getImageList());
      }
      /**
       * <pre>
       * optional Availability availability = 9;
       * </pre>
       *
       * <code>repeated .finsky.protos.Common.Image image = 10;</code>
       */
      @java.lang.Override
      public int getImageCount() {
        return instance.getImageCount();
      }/**
       * <pre>
       * optional Availability availability = 9;
       * </pre>
       *
       * <code>repeated .finsky.protos.Common.Image image = 10;</code>
       */
      @java.lang.Override
      public finsky.protos.Common.Image getImage(int index) {
        return instance.getImage(index);
      }
      /**
       * <pre>
       * optional Availability availability = 9;
       * </pre>
       *
       * <code>repeated .finsky.protos.Common.Image image = 10;</code>
       */
      public Builder setImage(
          int index, finsky.protos.Common.Image value) {
        copyOnWrite();
        instance.setImage(index, value);
        return this;
      }
      /**
       * <pre>
       * optional Availability availability = 9;
       * </pre>
       *
       * <code>repeated .finsky.protos.Common.Image image = 10;</code>
       */
      public Builder setImage(
          int index, finsky.protos.Common.Image.Builder builderForValue) {
        copyOnWrite();
        instance.setImage(index,
            builderForValue.build());
        return this;
      }
      /**
       * <pre>
       * optional Availability availability = 9;
       * </pre>
       *
       * <code>repeated .finsky.protos.Common.Image image = 10;</code>
       */
      public Builder addImage(finsky.protos.Common.Image value) {
        copyOnWrite();
        instance.addImage(value);
        return this;
      }
      /**
       * <pre>
       * optional Availability availability = 9;
       * </pre>
       *
       * <code>repeated .finsky.protos.Common.Image image = 10;</code>
       */
      public Builder addImage(
          int index, finsky.protos.Common.Image value) {
        copyOnWrite();
        instance.addImage(index, value);
        return this;
      }
      /**
       * <pre>
       * optional Availability availability = 9;
       * </pre>
       *
       * <code>repeated .finsky.protos.Common.Image image = 10;</code>
       */
      public Builder addImage(
          finsky.protos.Common.Image.Builder builderForValue) {
        copyOnWrite();
        instance.addImage(builderForValue.build());
        return this;
      }
      /**
       * <pre>
       * optional Availability availability = 9;
       * </pre>
       *
       * <code>repeated .finsky.protos.Common.Image image = 10;</code>
       */
      public Builder addImage(
          int index, finsky.protos.Common.Image.Builder builderForValue) {
        copyOnWrite();
        instance.addImage(index,
            builderForValue.build());
        return this;
      }
      /**
       * <pre>
       * optional Availability availability = 9;
       * </pre>
       *
       * <code>repeated .finsky.protos.Common.Image image = 10;</code>
       */
      public Builder addAllImage(
          java.lang.Iterable<? extends finsky.protos.Common.Image> values) {
        copyOnWrite();
        instance.addAllImage(values);
        return this;
      }
      /**
       * <pre>
       * optional Availability availability = 9;
       * </pre>
       *
       * <code>repeated .finsky.protos.Common.Image image = 10;</code>
       */
      public Builder clearImage() {
        copyOnWrite();
        instance.clearImage();
        return this;
      }
      /**
       * <pre>
       * optional Availability availability = 9;
       * </pre>
       *
       * <code>repeated .finsky.protos.Common.Image image = 10;</code>
       */
      public Builder removeImage(int index) {
        copyOnWrite();
        instance.removeImage(index);
        return this;
      }
  
      /**
       * <code>repeated .finsky.protos.DocV2 child = 11;</code>
       */
      @java.lang.Override
      public java.util.List<finsky.protos.DocV2> getChildList() {
        return java.util.Collections.unmodifiableList(
            instance.getChildList());
      }
      /**
       * <code>repeated .finsky.protos.DocV2 child = 11;</code>
       */
      @java.lang.Override
      public int getChildCount() {
        return instance.getChildCount();
      }/**
       * <code>repeated .finsky.protos.DocV2 child = 11;</code>
       */
      @java.lang.Override
      public finsky.protos.DocV2 getChild(int index) {
        return instance.getChild(index);
      }
      /**
       * <code>repeated .finsky.protos.DocV2 child = 11;</code>
       */
      public Builder setChild(
          int index, finsky.protos.DocV2 value) {
        copyOnWrite();
        instance.setChild(index, value);
        return this;
      }
      /**
       * <code>repeated .finsky.protos.DocV2 child = 11;</code>
       */
      public Builder setChild(
          int index, finsky.protos.DocV2.Builder builderForValue) {
        copyOnWrite();
        instance.setChild(index,
            builderForValue.build());
        return this;
      }
      /**
       * <code>repeated .finsky.protos.DocV2 child = 11;</code>
       */
      public Builder addChild(finsky.protos.DocV2 value) {
        copyOnWrite();
        instance.addChild(value);
        return this;
      }
      /**
       * <code>repeated .finsky.protos.DocV2 child = 11;</code>
       */
      public Builder addChild(
          int index, finsky.protos.DocV2 value) {
        copyOnWrite();
        instance.addChild(index, value);
        return this;
      }
      /**
       * <code>repeated .finsky.protos.DocV2 child = 11;</code>
       */
      public Builder addChild(
          finsky.protos.DocV2.Builder builderForValue) {
        copyOnWrite();
        instance.addChild(builderForValue.build());
        return this;
      }
      /**
       * <code>repeated .finsky.protos.DocV2 child = 11;</code>
       */
      public Builder addChild(
          int index, finsky.protos.DocV2.Builder builderForValue) {
        copyOnWrite();
        instance.addChild(index,
            builderForValue.build());
        return this;
      }
      /**
       * <code>repeated .finsky.protos.DocV2 child = 11;</code>
       */
      public Builder addAllChild(
          java.lang.Iterable<? extends finsky.protos.DocV2> values) {
        copyOnWrite();
        instance.addAllChild(values);
        return this;
      }
      /**
       * <code>repeated .finsky.protos.DocV2 child = 11;</code>
       */
      public Builder clearChild() {
        copyOnWrite();
        instance.clearChild();
        return this;
      }
      /**
       * <code>repeated .finsky.protos.DocV2 child = 11;</code>
       */
      public Builder removeChild(int index) {
        copyOnWrite();
        instance.removeChild(index);
        return this;
      }
  
      /**
       * <code>optional .finsky.protos.Containers.ContainerMetadata containerMetadata = 12;</code>
       */
      @java.lang.Override
      public boolean hasContainerMetadata() {
        return instance.hasContainerMetadata();
      }
      /**
       * <code>optional .finsky.protos.Containers.ContainerMetadata containerMetadata = 12;</code>
       */
      @java.lang.Override
      public finsky.protos.Containers.ContainerMetadata getContainerMetadata() {
        return instance.getContainerMetadata();
      }
      /**
       * <code>optional .finsky.protos.Containers.ContainerMetadata containerMetadata = 12;</code>
       */
      public Builder setContainerMetadata(finsky.protos.Containers.ContainerMetadata value) {
        copyOnWrite();
        instance.setContainerMetadata(value);
        return this;
        }
      /**
       * <code>optional .finsky.protos.Containers.ContainerMetadata containerMetadata = 12;</code>
       */
      public Builder setContainerMetadata(
          finsky.protos.Containers.ContainerMetadata.Builder builderForValue) {
        copyOnWrite();
        instance.setContainerMetadata(builderForValue.build());
        return this;
      }
      /**
       * <code>optional .finsky.protos.Containers.ContainerMetadata containerMetadata = 12;</code>
       */
      public Builder mergeContainerMetadata(finsky.protos.Containers.ContainerMetadata value) {
        copyOnWrite();
        instance.mergeContainerMetadata(value);
        return this;
      }
      /**
       * <code>optional .finsky.protos.Containers.ContainerMetadata containerMetadata = 12;</code>
       */
      public Builder clearContainerMetadata() {  copyOnWrite();
        instance.clearContainerMetadata();
        return this;
      }
  
      /**
       * <code>optional .finsky.protos.DocDetails details = 13;</code>
       */
      @java.lang.Override
      public boolean hasDetails() {
        return instance.hasDetails();
      }
      /**
       * <code>optional .finsky.protos.DocDetails details = 13;</code>
       */
      @java.lang.Override
      public finsky.protos.DocDetails getDetails() {
        return instance.getDetails();
      }
      /**
       * <code>optional .finsky.protos.DocDetails details = 13;</code>
       */
      public Builder setDetails(finsky.protos.DocDetails value) {
        copyOnWrite();
        instance.setDetails(value);
        return this;
        }
      /**
       * <code>optional .finsky.protos.DocDetails details = 13;</code>
       */
      public Builder setDetails(
          finsky.protos.DocDetails.Builder builderForValue) {
        copyOnWrite();
        instance.setDetails(builderForValue.build());
        return this;
      }
      /**
       * <code>optional .finsky.protos.DocDetails details = 13;</code>
       */
      public Builder mergeDetails(finsky.protos.DocDetails value) {
        copyOnWrite();
        instance.mergeDetails(value);
        return this;
      }
      /**
       * <code>optional .finsky.protos.DocDetails details = 13;</code>
       */
      public Builder clearDetails() {  copyOnWrite();
        instance.clearDetails();
        return this;
      }
  
      /**
       * <code>optional .finsky.protos.DocV2.AggregateRating aggregateRating = 14;</code>
       */
      @java.lang.Override
      public boolean hasAggregateRating() {
        return instance.hasAggregateRating();
      }
      /**
       * <code>optional .finsky.protos.DocV2.AggregateRating aggregateRating = 14;</code>
       */
      @java.lang.Override
      public finsky.protos.DocV2.AggregateRating getAggregateRating() {
        return instance.getAggregateRating();
      }
      /**
       * <code>optional .finsky.protos.DocV2.AggregateRating aggregateRating = 14;</code>
       */
      public Builder setAggregateRating(finsky.protos.DocV2.AggregateRating value) {
        copyOnWrite();
        instance.setAggregateRating(value);
        return this;
        }
      /**
       * <code>optional .finsky.protos.DocV2.AggregateRating aggregateRating = 14;</code>
       */
      public Builder setAggregateRating(
          finsky.protos.DocV2.AggregateRating.Builder builderForValue) {
        copyOnWrite();
        instance.setAggregateRating(builderForValue.build());
        return this;
      }
      /**
       * <code>optional .finsky.protos.DocV2.AggregateRating aggregateRating = 14;</code>
       */
      public Builder mergeAggregateRating(finsky.protos.DocV2.AggregateRating value) {
        copyOnWrite();
        instance.mergeAggregateRating(value);
        return this;
      }
      /**
       * <code>optional .finsky.protos.DocV2.AggregateRating aggregateRating = 14;</code>
       */
      public Builder clearAggregateRating() {  copyOnWrite();
        instance.clearAggregateRating();
        return this;
      }
  
      /**
       * <code>optional .finsky.protos.Annotations annotations = 15;</code>
       */
      @java.lang.Override
      public boolean hasAnnotations() {
        return instance.hasAnnotations();
      }
      /**
       * <code>optional .finsky.protos.Annotations annotations = 15;</code>
       */
      @java.lang.Override
      public finsky.protos.Annotations getAnnotations() {
        return instance.getAnnotations();
      }
      /**
       * <code>optional .finsky.protos.Annotations annotations = 15;</code>
       */
      public Builder setAnnotations(finsky.protos.Annotations value) {
        copyOnWrite();
        instance.setAnnotations(value);
        return this;
        }
      /**
       * <code>optional .finsky.protos.Annotations annotations = 15;</code>
       */
      public Builder setAnnotations(
          finsky.protos.Annotations.Builder builderForValue) {
        copyOnWrite();
        instance.setAnnotations(builderForValue.build());
        return this;
      }
      /**
       * <code>optional .finsky.protos.Annotations annotations = 15;</code>
       */
      public Builder mergeAnnotations(finsky.protos.Annotations value) {
        copyOnWrite();
        instance.mergeAnnotations(value);
        return this;
      }
      /**
       * <code>optional .finsky.protos.Annotations annotations = 15;</code>
       */
      public Builder clearAnnotations() {  copyOnWrite();
        instance.clearAnnotations();
        return this;
      }
  
      /**
       * <code>optional string detailsUrl = 16;</code>
       * @return Whether the detailsUrl field is set.
       */
      @java.lang.Override
      public boolean hasDetailsUrl() {
        return instance.hasDetailsUrl();
      }
      /**
       * <code>optional string detailsUrl = 16;</code>
       * @return The detailsUrl.
       */
      @java.lang.Override
      public java.lang.String getDetailsUrl() {
        return instance.getDetailsUrl();
      }
      /**
       * <code>optional string detailsUrl = 16;</code>
       * @return The bytes for detailsUrl.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getDetailsUrlBytes() {
        return instance.getDetailsUrlBytes();
      }
      /**
       * <code>optional string detailsUrl = 16;</code>
       * @param value The detailsUrl to set.
       * @return This builder for chaining.
       */
      public Builder setDetailsUrl(
          java.lang.String value) {
        copyOnWrite();
        instance.setDetailsUrl(value);
        return this;
      }
      /**
       * <code>optional string detailsUrl = 16;</code>
       * @return This builder for chaining.
       */
      public Builder clearDetailsUrl() {
        copyOnWrite();
        instance.clearDetailsUrl();
        return this;
      }
      /**
       * <code>optional string detailsUrl = 16;</code>
       * @param value The bytes for detailsUrl to set.
       * @return This builder for chaining.
       */
      public Builder setDetailsUrlBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setDetailsUrlBytes(value);
        return this;
      }
  
      /**
       * <code>optional string shareUrl = 17;</code>
       * @return Whether the shareUrl field is set.
       */
      @java.lang.Override
      public boolean hasShareUrl() {
        return instance.hasShareUrl();
      }
      /**
       * <code>optional string shareUrl = 17;</code>
       * @return The shareUrl.
       */
      @java.lang.Override
      public java.lang.String getShareUrl() {
        return instance.getShareUrl();
      }
      /**
       * <code>optional string shareUrl = 17;</code>
       * @return The bytes for shareUrl.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getShareUrlBytes() {
        return instance.getShareUrlBytes();
      }
      /**
       * <code>optional string shareUrl = 17;</code>
       * @param value The shareUrl to set.
       * @return This builder for chaining.
       */
      public Builder setShareUrl(
          java.lang.String value) {
        copyOnWrite();
        instance.setShareUrl(value);
        return this;
      }
      /**
       * <code>optional string shareUrl = 17;</code>
       * @return This builder for chaining.
       */
      public Builder clearShareUrl() {
        copyOnWrite();
        instance.clearShareUrl();
        return this;
      }
      /**
       * <code>optional string shareUrl = 17;</code>
       * @param value The bytes for shareUrl to set.
       * @return This builder for chaining.
       */
      public Builder setShareUrlBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setShareUrlBytes(value);
        return this;
      }
  
      /**
       * <code>optional string reviewsUrl = 18;</code>
       * @return Whether the reviewsUrl field is set.
       */
      @java.lang.Override
      public boolean hasReviewsUrl() {
        return instance.hasReviewsUrl();
      }
      /**
       * <code>optional string reviewsUrl = 18;</code>
       * @return The reviewsUrl.
       */
      @java.lang.Override
      public java.lang.String getReviewsUrl() {
        return instance.getReviewsUrl();
      }
      /**
       * <code>optional string reviewsUrl = 18;</code>
       * @return The bytes for reviewsUrl.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getReviewsUrlBytes() {
        return instance.getReviewsUrlBytes();
      }
      /**
       * <code>optional string reviewsUrl = 18;</code>
       * @param value The reviewsUrl to set.
       * @return This builder for chaining.
       */
      public Builder setReviewsUrl(
          java.lang.String value) {
        copyOnWrite();
        instance.setReviewsUrl(value);
        return this;
      }
      /**
       * <code>optional string reviewsUrl = 18;</code>
       * @return This builder for chaining.
       */
      public Builder clearReviewsUrl() {
        copyOnWrite();
        instance.clearReviewsUrl();
        return this;
      }
      /**
       * <code>optional string reviewsUrl = 18;</code>
       * @param value The bytes for reviewsUrl to set.
       * @return This builder for chaining.
       */
      public Builder setReviewsUrlBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setReviewsUrlBytes(value);
        return this;
      }
  
      /**
       * <code>optional string backendUrl = 19;</code>
       * @return Whether the backendUrl field is set.
       */
      @java.lang.Override
      public boolean hasBackendUrl() {
        return instance.hasBackendUrl();
      }
      /**
       * <code>optional string backendUrl = 19;</code>
       * @return The backendUrl.
       */
      @java.lang.Override
      public java.lang.String getBackendUrl() {
        return instance.getBackendUrl();
      }
      /**
       * <code>optional string backendUrl = 19;</code>
       * @return The bytes for backendUrl.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getBackendUrlBytes() {
        return instance.getBackendUrlBytes();
      }
      /**
       * <code>optional string backendUrl = 19;</code>
       * @param value The backendUrl to set.
       * @return This builder for chaining.
       */
      public Builder setBackendUrl(
          java.lang.String value) {
        copyOnWrite();
        instance.setBackendUrl(value);
        return this;
      }
      /**
       * <code>optional string backendUrl = 19;</code>
       * @return This builder for chaining.
       */
      public Builder clearBackendUrl() {
        copyOnWrite();
        instance.clearBackendUrl();
        return this;
      }
      /**
       * <code>optional string backendUrl = 19;</code>
       * @param value The bytes for backendUrl to set.
       * @return This builder for chaining.
       */
      public Builder setBackendUrlBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setBackendUrlBytes(value);
        return this;
      }
  
      /**
       * <code>optional string purchaseDetailsUrl = 20;</code>
       * @return Whether the purchaseDetailsUrl field is set.
       */
      @java.lang.Override
      public boolean hasPurchaseDetailsUrl() {
        return instance.hasPurchaseDetailsUrl();
      }
      /**
       * <code>optional string purchaseDetailsUrl = 20;</code>
       * @return The purchaseDetailsUrl.
       */
      @java.lang.Override
      public java.lang.String getPurchaseDetailsUrl() {
        return instance.getPurchaseDetailsUrl();
      }
      /**
       * <code>optional string purchaseDetailsUrl = 20;</code>
       * @return The bytes for purchaseDetailsUrl.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getPurchaseDetailsUrlBytes() {
        return instance.getPurchaseDetailsUrlBytes();
      }
      /**
       * <code>optional string purchaseDetailsUrl = 20;</code>
       * @param value The purchaseDetailsUrl to set.
       * @return This builder for chaining.
       */
      public Builder setPurchaseDetailsUrl(
          java.lang.String value) {
        copyOnWrite();
        instance.setPurchaseDetailsUrl(value);
        return this;
      }
      /**
       * <code>optional string purchaseDetailsUrl = 20;</code>
       * @return This builder for chaining.
       */
      public Builder clearPurchaseDetailsUrl() {
        copyOnWrite();
        instance.clearPurchaseDetailsUrl();
        return this;
      }
      /**
       * <code>optional string purchaseDetailsUrl = 20;</code>
       * @param value The bytes for purchaseDetailsUrl to set.
       * @return This builder for chaining.
       */
      public Builder setPurchaseDetailsUrlBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setPurchaseDetailsUrlBytes(value);
        return this;
      }
  
      /**
       * <code>optional bool detailsReusable = 21;</code>
       * @return Whether the detailsReusable field is set.
       */
      @java.lang.Override
      public boolean hasDetailsReusable() {
        return instance.hasDetailsReusable();
      }
      /**
       * <code>optional bool detailsReusable = 21;</code>
       * @return The detailsReusable.
       */
      @java.lang.Override
      public boolean getDetailsReusable() {
        return instance.getDetailsReusable();
      }
      /**
       * <code>optional bool detailsReusable = 21;</code>
       * @param value The detailsReusable to set.
       * @return This builder for chaining.
       */
      public Builder setDetailsReusable(boolean value) {
        copyOnWrite();
        instance.setDetailsReusable(value);
        return this;
      }
      /**
       * <code>optional bool detailsReusable = 21;</code>
       * @return This builder for chaining.
       */
      public Builder clearDetailsReusable() {
        copyOnWrite();
        instance.clearDetailsReusable();
        return this;
      }
  
      /**
       * <code>optional string subtitle = 22;</code>
       * @return Whether the subtitle field is set.
       */
      @java.lang.Override
      public boolean hasSubtitle() {
        return instance.hasSubtitle();
      }
      /**
       * <code>optional string subtitle = 22;</code>
       * @return The subtitle.
       */
      @java.lang.Override
      public java.lang.String getSubtitle() {
        return instance.getSubtitle();
      }
      /**
       * <code>optional string subtitle = 22;</code>
       * @return The bytes for subtitle.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getSubtitleBytes() {
        return instance.getSubtitleBytes();
      }
      /**
       * <code>optional string subtitle = 22;</code>
       * @param value The subtitle to set.
       * @return This builder for chaining.
       */
      public Builder setSubtitle(
          java.lang.String value) {
        copyOnWrite();
        instance.setSubtitle(value);
        return this;
      }
      /**
       * <code>optional string subtitle = 22;</code>
       * @return This builder for chaining.
       */
      public Builder clearSubtitle() {
        copyOnWrite();
        instance.clearSubtitle();
        return this;
      }
      /**
       * <code>optional string subtitle = 22;</code>
       * @param value The bytes for subtitle to set.
       * @return This builder for chaining.
       */
      public Builder setSubtitleBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setSubtitleBytes(value);
        return this;
      }
  
      /**
       * <code>optional .finsky.protos.AppInfo appInfo = 25;</code>
       */
      @java.lang.Override
      public boolean hasAppInfo() {
        return instance.hasAppInfo();
      }
      /**
       * <code>optional .finsky.protos.AppInfo appInfo = 25;</code>
       */
      @java.lang.Override
      public finsky.protos.AppInfo getAppInfo() {
        return instance.getAppInfo();
      }
      /**
       * <code>optional .finsky.protos.AppInfo appInfo = 25;</code>
       */
      public Builder setAppInfo(finsky.protos.AppInfo value) {
        copyOnWrite();
        instance.setAppInfo(value);
        return this;
        }
      /**
       * <code>optional .finsky.protos.AppInfo appInfo = 25;</code>
       */
      public Builder setAppInfo(
          finsky.protos.AppInfo.Builder builderForValue) {
        copyOnWrite();
        instance.setAppInfo(builderForValue.build());
        return this;
      }
      /**
       * <code>optional .finsky.protos.AppInfo appInfo = 25;</code>
       */
      public Builder mergeAppInfo(finsky.protos.AppInfo value) {
        copyOnWrite();
        instance.mergeAppInfo(value);
        return this;
      }
      /**
       * <code>optional .finsky.protos.AppInfo appInfo = 25;</code>
       */
      public Builder clearAppInfo() {  copyOnWrite();
        instance.clearAppInfo();
        return this;
      }
  
      /**
       * <code>optional bool mature = 26;</code>
       * @return Whether the mature field is set.
       */
      @java.lang.Override
      public boolean hasMature() {
        return instance.hasMature();
      }
      /**
       * <code>optional bool mature = 26;</code>
       * @return The mature.
       */
      @java.lang.Override
      public boolean getMature() {
        return instance.getMature();
      }
      /**
       * <code>optional bool mature = 26;</code>
       * @param value The mature to set.
       * @return This builder for chaining.
       */
      public Builder setMature(boolean value) {
        copyOnWrite();
        instance.setMature(value);
        return this;
      }
      /**
       * <code>optional bool mature = 26;</code>
       * @return This builder for chaining.
       */
      public Builder clearMature() {
        copyOnWrite();
        instance.clearMature();
        return this;
      }
  
      /**
       * <code>optional string promotionalDescription = 27;</code>
       * @return Whether the promotionalDescription field is set.
       */
      @java.lang.Override
      public boolean hasPromotionalDescription() {
        return instance.hasPromotionalDescription();
      }
      /**
       * <code>optional string promotionalDescription = 27;</code>
       * @return The promotionalDescription.
       */
      @java.lang.Override
      public java.lang.String getPromotionalDescription() {
        return instance.getPromotionalDescription();
      }
      /**
       * <code>optional string promotionalDescription = 27;</code>
       * @return The bytes for promotionalDescription.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getPromotionalDescriptionBytes() {
        return instance.getPromotionalDescriptionBytes();
      }
      /**
       * <code>optional string promotionalDescription = 27;</code>
       * @param value The promotionalDescription to set.
       * @return This builder for chaining.
       */
      public Builder setPromotionalDescription(
          java.lang.String value) {
        copyOnWrite();
        instance.setPromotionalDescription(value);
        return this;
      }
      /**
       * <code>optional string promotionalDescription = 27;</code>
       * @return This builder for chaining.
       */
      public Builder clearPromotionalDescription() {
        copyOnWrite();
        instance.clearPromotionalDescription();
        return this;
      }
      /**
       * <code>optional string promotionalDescription = 27;</code>
       * @param value The bytes for promotionalDescription to set.
       * @return This builder for chaining.
       */
      public Builder setPromotionalDescriptionBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setPromotionalDescriptionBytes(value);
        return this;
      }
  
      /**
       * <code>optional bool availableForPreregistration = 29;</code>
       * @return Whether the availableForPreregistration field is set.
       */
      @java.lang.Override
      public boolean hasAvailableForPreregistration() {
        return instance.hasAvailableForPreregistration();
      }
      /**
       * <code>optional bool availableForPreregistration = 29;</code>
       * @return The availableForPreregistration.
       */
      @java.lang.Override
      public boolean getAvailableForPreregistration() {
        return instance.getAvailableForPreregistration();
      }
      /**
       * <code>optional bool availableForPreregistration = 29;</code>
       * @param value The availableForPreregistration to set.
       * @return This builder for chaining.
       */
      public Builder setAvailableForPreregistration(boolean value) {
        copyOnWrite();
        instance.setAvailableForPreregistration(value);
        return this;
      }
      /**
       * <code>optional bool availableForPreregistration = 29;</code>
       * @return This builder for chaining.
       */
      public Builder clearAvailableForPreregistration() {
        copyOnWrite();
        instance.clearAvailableForPreregistration();
        return this;
      }
  
      /**
       * <code>optional string reviewSnippetsUrl = 31;</code>
       * @return Whether the reviewSnippetsUrl field is set.
       */
      @java.lang.Override
      public boolean hasReviewSnippetsUrl() {
        return instance.hasReviewSnippetsUrl();
      }
      /**
       * <code>optional string reviewSnippetsUrl = 31;</code>
       * @return The reviewSnippetsUrl.
       */
      @java.lang.Override
      public java.lang.String getReviewSnippetsUrl() {
        return instance.getReviewSnippetsUrl();
      }
      /**
       * <code>optional string reviewSnippetsUrl = 31;</code>
       * @return The bytes for reviewSnippetsUrl.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getReviewSnippetsUrlBytes() {
        return instance.getReviewSnippetsUrlBytes();
      }
      /**
       * <code>optional string reviewSnippetsUrl = 31;</code>
       * @param value The reviewSnippetsUrl to set.
       * @return This builder for chaining.
       */
      public Builder setReviewSnippetsUrl(
          java.lang.String value) {
        copyOnWrite();
        instance.setReviewSnippetsUrl(value);
        return this;
      }
      /**
       * <code>optional string reviewSnippetsUrl = 31;</code>
       * @return This builder for chaining.
       */
      public Builder clearReviewSnippetsUrl() {
        copyOnWrite();
        instance.clearReviewSnippetsUrl();
        return this;
      }
      /**
       * <code>optional string reviewSnippetsUrl = 31;</code>
       * @param value The bytes for reviewSnippetsUrl to set.
       * @return This builder for chaining.
       */
      public Builder setReviewSnippetsUrlBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setReviewSnippetsUrlBytes(value);
        return this;
      }
  
      /**
       * <code>optional bool forceShareability = 32;</code>
       * @return Whether the forceShareability field is set.
       */
      @java.lang.Override
      public boolean hasForceShareability() {
        return instance.hasForceShareability();
      }
      /**
       * <code>optional bool forceShareability = 32;</code>
       * @return The forceShareability.
       */
      @java.lang.Override
      public boolean getForceShareability() {
        return instance.getForceShareability();
      }
      /**
       * <code>optional bool forceShareability = 32;</code>
       * @param value The forceShareability to set.
       * @return This builder for chaining.
       */
      public Builder setForceShareability(boolean value) {
        copyOnWrite();
        instance.setForceShareability(value);
        return this;
      }
      /**
       * <code>optional bool forceShareability = 32;</code>
       * @return This builder for chaining.
       */
      public Builder clearForceShareability() {
        copyOnWrite();
        instance.clearForceShareability();
        return this;
      }
  
      /**
       * <code>optional bool useWishlistAsPrimaryAction = 33;</code>
       * @return Whether the useWishlistAsPrimaryAction field is set.
       */
      @java.lang.Override
      public boolean hasUseWishlistAsPrimaryAction() {
        return instance.hasUseWishlistAsPrimaryAction();
      }
      /**
       * <code>optional bool useWishlistAsPrimaryAction = 33;</code>
       * @return The useWishlistAsPrimaryAction.
       */
      @java.lang.Override
      public boolean getUseWishlistAsPrimaryAction() {
        return instance.getUseWishlistAsPrimaryAction();
      }
      /**
       * <code>optional bool useWishlistAsPrimaryAction = 33;</code>
       * @param value The useWishlistAsPrimaryAction to set.
       * @return This builder for chaining.
       */
      public Builder setUseWishlistAsPrimaryAction(boolean value) {
        copyOnWrite();
        instance.setUseWishlistAsPrimaryAction(value);
        return this;
      }
      /**
       * <code>optional bool useWishlistAsPrimaryAction = 33;</code>
       * @return This builder for chaining.
       */
      public Builder clearUseWishlistAsPrimaryAction() {
        copyOnWrite();
        instance.clearUseWishlistAsPrimaryAction();
        return this;
      }
  
      /**
       * <code>optional string reviewQuestionsUrl = 34;</code>
       * @return Whether the reviewQuestionsUrl field is set.
       */
      @java.lang.Override
      public boolean hasReviewQuestionsUrl() {
        return instance.hasReviewQuestionsUrl();
      }
      /**
       * <code>optional string reviewQuestionsUrl = 34;</code>
       * @return The reviewQuestionsUrl.
       */
      @java.lang.Override
      public java.lang.String getReviewQuestionsUrl() {
        return instance.getReviewQuestionsUrl();
      }
      /**
       * <code>optional string reviewQuestionsUrl = 34;</code>
       * @return The bytes for reviewQuestionsUrl.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getReviewQuestionsUrlBytes() {
        return instance.getReviewQuestionsUrlBytes();
      }
      /**
       * <code>optional string reviewQuestionsUrl = 34;</code>
       * @param value The reviewQuestionsUrl to set.
       * @return This builder for chaining.
       */
      public Builder setReviewQuestionsUrl(
          java.lang.String value) {
        copyOnWrite();
        instance.setReviewQuestionsUrl(value);
        return this;
      }
      /**
       * <code>optional string reviewQuestionsUrl = 34;</code>
       * @return This builder for chaining.
       */
      public Builder clearReviewQuestionsUrl() {
        copyOnWrite();
        instance.clearReviewQuestionsUrl();
        return this;
      }
      /**
       * <code>optional string reviewQuestionsUrl = 34;</code>
       * @param value The bytes for reviewQuestionsUrl to set.
       * @return This builder for chaining.
       */
      public Builder setReviewQuestionsUrlBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setReviewQuestionsUrlBytes(value);
        return this;
      }
  
      /**
       * <code>optional string reviewSummaryUrl = 39;</code>
       * @return Whether the reviewSummaryUrl field is set.
       */
      @java.lang.Override
      public boolean hasReviewSummaryUrl() {
        return instance.hasReviewSummaryUrl();
      }
      /**
       * <code>optional string reviewSummaryUrl = 39;</code>
       * @return The reviewSummaryUrl.
       */
      @java.lang.Override
      public java.lang.String getReviewSummaryUrl() {
        return instance.getReviewSummaryUrl();
      }
      /**
       * <code>optional string reviewSummaryUrl = 39;</code>
       * @return The bytes for reviewSummaryUrl.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getReviewSummaryUrlBytes() {
        return instance.getReviewSummaryUrlBytes();
      }
      /**
       * <code>optional string reviewSummaryUrl = 39;</code>
       * @param value The reviewSummaryUrl to set.
       * @return This builder for chaining.
       */
      public Builder setReviewSummaryUrl(
          java.lang.String value) {
        copyOnWrite();
        instance.setReviewSummaryUrl(value);
        return this;
      }
      /**
       * <code>optional string reviewSummaryUrl = 39;</code>
       * @return This builder for chaining.
       */
      public Builder clearReviewSummaryUrl() {
        copyOnWrite();
        instance.clearReviewSummaryUrl();
        return this;
      }
      /**
       * <code>optional string reviewSummaryUrl = 39;</code>
       * @param value The bytes for reviewSummaryUrl to set.
       * @return This builder for chaining.
       */
      public Builder setReviewSummaryUrlBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setReviewSummaryUrlBytes(value);
        return this;
      }
  
      // @@protoc_insertion_point(builder_scope:finsky.protos.DocV2)
    }
    @java.lang.Override
    @java.lang.SuppressWarnings({"unchecked", "fallthrough"})
    protected final java.lang.Object dynamicMethod(
        com.google.protobuf.GeneratedMessageLite.MethodToInvoke method,
        java.lang.Object arg0, java.lang.Object arg1) {
      switch (method) {
        case NEW_MUTABLE_INSTANCE: {
          return new finsky.protos.DocV2();
        }
        case NEW_BUILDER: {
          return new Builder();
        }
        case BUILD_MESSAGE_INFO: {
            java.lang.Object[] objects = new java.lang.Object[] {
              "bitField0_",
              "docid_",
              "backendDocid_",
              "docType_",
              "backendId_",
              "title_",
              "creator_",
              "descriptionHtml_",
              "offer_",
              finsky.protos.Common.Offer.class,
              "image_",
              finsky.protos.Common.Image.class,
              "child_",
              finsky.protos.DocV2.class,
              "containerMetadata_",
              "details_",
              "aggregateRating_",
              "annotations_",
              "detailsUrl_",
              "shareUrl_",
              "reviewsUrl_",
              "backendUrl_",
              "purchaseDetailsUrl_",
              "detailsReusable_",
              "subtitle_",
              "appInfo_",
              "mature_",
              "promotionalDescription_",
              "availableForPreregistration_",
              "reviewSnippetsUrl_",
              "forceShareability_",
              "useWishlistAsPrimaryAction_",
              "reviewQuestionsUrl_",
              "reviewSummaryUrl_",
            };
            java.lang.String info =
                "\u0001\u001e\u0000\u0001\u0001\'\u001e\u0000\u0003\u0000\u0001\u1008\u0000\u0002" +
                "\u1008\u0001\u0003\u1004\u0002\u0004\u1004\u0003\u0005\u1008\u0004\u0006\u1008\u0005" +
                "\u0007\u1008\u0006\b\u001b\n\u001b\u000b\u001b\f\u1009\u0007\r\u1009\b\u000e\u1009" +
                "\t\u000f\u1009\n\u0010\u1008\u000b\u0011\u1008\f\u0012\u1008\r\u0013\u1008\u000e" +
                "\u0014\u1008\u000f\u0015\u1007\u0010\u0016\u1008\u0011\u0019\u1009\u0012\u001a\u1007" +
                "\u0013\u001b\u1008\u0014\u001d\u1007\u0015\u001f\u1008\u0016 \u1007\u0017!\u1007" +
                "\u0018\"\u1008\u0019\'\u1008\u001a";
            return newMessageInfo(DEFAULT_INSTANCE, info, objects);
        }
        // fall through
        case GET_DEFAULT_INSTANCE: {
          return DEFAULT_INSTANCE;
        }
        case GET_PARSER: {
          com.google.protobuf.Parser<finsky.protos.DocV2> parser = PARSER;
          if (parser == null) {
            synchronized (finsky.protos.DocV2.class) {
              parser = PARSER;
              if (parser == null) {
                parser =
                    new DefaultInstanceBasedParser<finsky.protos.DocV2>(
                        DEFAULT_INSTANCE);
                PARSER = parser;
              }
            }
          }
          return parser;
      }
      case GET_MEMOIZED_IS_INITIALIZED: {
        return (byte) 1;
      }
      case SET_MEMOIZED_IS_INITIALIZED: {
        return null;
      }
      }
      throw new UnsupportedOperationException();
    }
  
  
    // @@protoc_insertion_point(class_scope:finsky.protos.DocV2)
    private static final finsky.protos.DocV2 DEFAULT_INSTANCE;
    static {
      DocV2 defaultInstance = new DocV2();
      // New instances are implicitly immutable so no need to make
      // immutable.
      DEFAULT_INSTANCE = defaultInstance;
      com.google.protobuf.GeneratedMessageLite.registerDefaultInstance(
        DocV2.class, defaultInstance);
    }
  
    public static finsky.protos.DocV2 getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }
  
    private static volatile com.google.protobuf.Parser<DocV2> PARSER;
  
    public static com.google.protobuf.Parser<DocV2> parser() {
      return DEFAULT_INSTANCE.getParserForType();
    }
  }
  
  