// Benchmark messages for proto2.

// Code generated by protoc-gen-go. DO NOT EDIT.
// source: datasets/google_message1/proto2/benchmark_message1_proto2.proto

package proto2

import (
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
)

type GoogleMessage1 struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Field1   *string                   `protobuf:"bytes,1,req,name=field1" json:"field1,omitempty"`
	Field9   *string                   `protobuf:"bytes,9,opt,name=field9" json:"field9,omitempty"`
	Field18  *string                   `protobuf:"bytes,18,opt,name=field18" json:"field18,omitempty"`
	Field80  *bool                     `protobuf:"varint,80,opt,name=field80,def=0" json:"field80,omitempty"`
	Field81  *bool                     `protobuf:"varint,81,opt,name=field81,def=1" json:"field81,omitempty"`
	Field2   *int32                    `protobuf:"varint,2,req,name=field2" json:"field2,omitempty"`
	Field3   *int32                    `protobuf:"varint,3,req,name=field3" json:"field3,omitempty"`
	Field280 *int32                    `protobuf:"varint,280,opt,name=field280" json:"field280,omitempty"`
	Field6   *int32                    `protobuf:"varint,6,opt,name=field6,def=0" json:"field6,omitempty"`
	Field22  *int64                    `protobuf:"varint,22,opt,name=field22" json:"field22,omitempty"`
	Field4   *string                   `protobuf:"bytes,4,opt,name=field4" json:"field4,omitempty"`
	Field5   []uint64                  `protobuf:"fixed64,5,rep,name=field5" json:"field5,omitempty"`
	Field59  *bool                     `protobuf:"varint,59,opt,name=field59,def=0" json:"field59,omitempty"`
	Field7   *string                   `protobuf:"bytes,7,opt,name=field7" json:"field7,omitempty"`
	Field16  *int32                    `protobuf:"varint,16,opt,name=field16" json:"field16,omitempty"`
	Field130 *int32                    `protobuf:"varint,130,opt,name=field130,def=0" json:"field130,omitempty"`
	Field12  *bool                     `protobuf:"varint,12,opt,name=field12,def=1" json:"field12,omitempty"`
	Field17  *bool                     `protobuf:"varint,17,opt,name=field17,def=1" json:"field17,omitempty"`
	Field13  *bool                     `protobuf:"varint,13,opt,name=field13,def=1" json:"field13,omitempty"`
	Field14  *bool                     `protobuf:"varint,14,opt,name=field14,def=1" json:"field14,omitempty"`
	Field104 *int32                    `protobuf:"varint,104,opt,name=field104,def=0" json:"field104,omitempty"`
	Field100 *int32                    `protobuf:"varint,100,opt,name=field100,def=0" json:"field100,omitempty"`
	Field101 *int32                    `protobuf:"varint,101,opt,name=field101,def=0" json:"field101,omitempty"`
	Field102 *string                   `protobuf:"bytes,102,opt,name=field102" json:"field102,omitempty"`
	Field103 *string                   `protobuf:"bytes,103,opt,name=field103" json:"field103,omitempty"`
	Field29  *int32                    `protobuf:"varint,29,opt,name=field29,def=0" json:"field29,omitempty"`
	Field30  *bool                     `protobuf:"varint,30,opt,name=field30,def=0" json:"field30,omitempty"`
	Field60  *int32                    `protobuf:"varint,60,opt,name=field60,def=-1" json:"field60,omitempty"`
	Field271 *int32                    `protobuf:"varint,271,opt,name=field271,def=-1" json:"field271,omitempty"`
	Field272 *int32                    `protobuf:"varint,272,opt,name=field272,def=-1" json:"field272,omitempty"`
	Field150 *int32                    `protobuf:"varint,150,opt,name=field150" json:"field150,omitempty"`
	Field23  *int32                    `protobuf:"varint,23,opt,name=field23,def=0" json:"field23,omitempty"`
	Field24  *bool                     `protobuf:"varint,24,opt,name=field24,def=0" json:"field24,omitempty"`
	Field25  *int32                    `protobuf:"varint,25,opt,name=field25,def=0" json:"field25,omitempty"`
	Field15  *GoogleMessage1SubMessage `protobuf:"bytes,15,opt,name=field15" json:"field15,omitempty"`
	Field78  *bool                     `protobuf:"varint,78,opt,name=field78" json:"field78,omitempty"`
	Field67  *int32                    `protobuf:"varint,67,opt,name=field67,def=0" json:"field67,omitempty"`
	Field68  *int32                    `protobuf:"varint,68,opt,name=field68" json:"field68,omitempty"`
	Field128 *int32                    `protobuf:"varint,128,opt,name=field128,def=0" json:"field128,omitempty"`
	Field129 *string                   `protobuf:"bytes,129,opt,name=field129,def=xxxxxxxxxxxxxxxxxxxxx" json:"field129,omitempty"`
	Field131 *int32                    `protobuf:"varint,131,opt,name=field131,def=0" json:"field131,omitempty"`
}

// Default values for GoogleMessage1 fields.
const (
	Default_GoogleMessage1_Field80  = bool(false)
	Default_GoogleMessage1_Field81  = bool(true)
	Default_GoogleMessage1_Field6   = int32(0)
	Default_GoogleMessage1_Field59  = bool(false)
	Default_GoogleMessage1_Field130 = int32(0)
	Default_GoogleMessage1_Field12  = bool(true)
	Default_GoogleMessage1_Field17  = bool(true)
	Default_GoogleMessage1_Field13  = bool(true)
	Default_GoogleMessage1_Field14  = bool(true)
	Default_GoogleMessage1_Field104 = int32(0)
	Default_GoogleMessage1_Field100 = int32(0)
	Default_GoogleMessage1_Field101 = int32(0)
	Default_GoogleMessage1_Field29  = int32(0)
	Default_GoogleMessage1_Field30  = bool(false)
	Default_GoogleMessage1_Field60  = int32(-1)
	Default_GoogleMessage1_Field271 = int32(-1)
	Default_GoogleMessage1_Field272 = int32(-1)
	Default_GoogleMessage1_Field23  = int32(0)
	Default_GoogleMessage1_Field24  = bool(false)
	Default_GoogleMessage1_Field25  = int32(0)
	Default_GoogleMessage1_Field67  = int32(0)
	Default_GoogleMessage1_Field128 = int32(0)
	Default_GoogleMessage1_Field129 = string("xxxxxxxxxxxxxxxxxxxxx")
	Default_GoogleMessage1_Field131 = int32(0)
)

func (x *GoogleMessage1) Reset() {
	*x = GoogleMessage1{}
}

func (x *GoogleMessage1) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GoogleMessage1) ProtoMessage() {}

func (x *GoogleMessage1) ProtoReflect() protoreflect.Message {
	mi := &file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_msgTypes[0]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GoogleMessage1.ProtoReflect.Descriptor instead.
func (*GoogleMessage1) Descriptor() ([]byte, []int) {
	return file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDescGZIP(), []int{0}
}

func (x *GoogleMessage1) GetField1() string {
	if x != nil && x.Field1 != nil {
		return *x.Field1
	}
	return ""
}

func (x *GoogleMessage1) GetField9() string {
	if x != nil && x.Field9 != nil {
		return *x.Field9
	}
	return ""
}

func (x *GoogleMessage1) GetField18() string {
	if x != nil && x.Field18 != nil {
		return *x.Field18
	}
	return ""
}

func (x *GoogleMessage1) GetField80() bool {
	if x != nil && x.Field80 != nil {
		return *x.Field80
	}
	return Default_GoogleMessage1_Field80
}

func (x *GoogleMessage1) GetField81() bool {
	if x != nil && x.Field81 != nil {
		return *x.Field81
	}
	return Default_GoogleMessage1_Field81
}

func (x *GoogleMessage1) GetField2() int32 {
	if x != nil && x.Field2 != nil {
		return *x.Field2
	}
	return 0
}

func (x *GoogleMessage1) GetField3() int32 {
	if x != nil && x.Field3 != nil {
		return *x.Field3
	}
	return 0
}

func (x *GoogleMessage1) GetField280() int32 {
	if x != nil && x.Field280 != nil {
		return *x.Field280
	}
	return 0
}

func (x *GoogleMessage1) GetField6() int32 {
	if x != nil && x.Field6 != nil {
		return *x.Field6
	}
	return Default_GoogleMessage1_Field6
}

func (x *GoogleMessage1) GetField22() int64 {
	if x != nil && x.Field22 != nil {
		return *x.Field22
	}
	return 0
}

func (x *GoogleMessage1) GetField4() string {
	if x != nil && x.Field4 != nil {
		return *x.Field4
	}
	return ""
}

func (x *GoogleMessage1) GetField5() []uint64 {
	if x != nil {
		return x.Field5
	}
	return nil
}

func (x *GoogleMessage1) GetField59() bool {
	if x != nil && x.Field59 != nil {
		return *x.Field59
	}
	return Default_GoogleMessage1_Field59
}

func (x *GoogleMessage1) GetField7() string {
	if x != nil && x.Field7 != nil {
		return *x.Field7
	}
	return ""
}

func (x *GoogleMessage1) GetField16() int32 {
	if x != nil && x.Field16 != nil {
		return *x.Field16
	}
	return 0
}

func (x *GoogleMessage1) GetField130() int32 {
	if x != nil && x.Field130 != nil {
		return *x.Field130
	}
	return Default_GoogleMessage1_Field130
}

func (x *GoogleMessage1) GetField12() bool {
	if x != nil && x.Field12 != nil {
		return *x.Field12
	}
	return Default_GoogleMessage1_Field12
}

func (x *GoogleMessage1) GetField17() bool {
	if x != nil && x.Field17 != nil {
		return *x.Field17
	}
	return Default_GoogleMessage1_Field17
}

func (x *GoogleMessage1) GetField13() bool {
	if x != nil && x.Field13 != nil {
		return *x.Field13
	}
	return Default_GoogleMessage1_Field13
}

func (x *GoogleMessage1) GetField14() bool {
	if x != nil && x.Field14 != nil {
		return *x.Field14
	}
	return Default_GoogleMessage1_Field14
}

func (x *GoogleMessage1) GetField104() int32 {
	if x != nil && x.Field104 != nil {
		return *x.Field104
	}
	return Default_GoogleMessage1_Field104
}

func (x *GoogleMessage1) GetField100() int32 {
	if x != nil && x.Field100 != nil {
		return *x.Field100
	}
	return Default_GoogleMessage1_Field100
}

func (x *GoogleMessage1) GetField101() int32 {
	if x != nil && x.Field101 != nil {
		return *x.Field101
	}
	return Default_GoogleMessage1_Field101
}

func (x *GoogleMessage1) GetField102() string {
	if x != nil && x.Field102 != nil {
		return *x.Field102
	}
	return ""
}

func (x *GoogleMessage1) GetField103() string {
	if x != nil && x.Field103 != nil {
		return *x.Field103
	}
	return ""
}

func (x *GoogleMessage1) GetField29() int32 {
	if x != nil && x.Field29 != nil {
		return *x.Field29
	}
	return Default_GoogleMessage1_Field29
}

func (x *GoogleMessage1) GetField30() bool {
	if x != nil && x.Field30 != nil {
		return *x.Field30
	}
	return Default_GoogleMessage1_Field30
}

func (x *GoogleMessage1) GetField60() int32 {
	if x != nil && x.Field60 != nil {
		return *x.Field60
	}
	return Default_GoogleMessage1_Field60
}

func (x *GoogleMessage1) GetField271() int32 {
	if x != nil && x.Field271 != nil {
		return *x.Field271
	}
	return Default_GoogleMessage1_Field271
}

func (x *GoogleMessage1) GetField272() int32 {
	if x != nil && x.Field272 != nil {
		return *x.Field272
	}
	return Default_GoogleMessage1_Field272
}

func (x *GoogleMessage1) GetField150() int32 {
	if x != nil && x.Field150 != nil {
		return *x.Field150
	}
	return 0
}

func (x *GoogleMessage1) GetField23() int32 {
	if x != nil && x.Field23 != nil {
		return *x.Field23
	}
	return Default_GoogleMessage1_Field23
}

func (x *GoogleMessage1) GetField24() bool {
	if x != nil && x.Field24 != nil {
		return *x.Field24
	}
	return Default_GoogleMessage1_Field24
}

func (x *GoogleMessage1) GetField25() int32 {
	if x != nil && x.Field25 != nil {
		return *x.Field25
	}
	return Default_GoogleMessage1_Field25
}

func (x *GoogleMessage1) GetField15() *GoogleMessage1SubMessage {
	if x != nil {
		return x.Field15
	}
	return nil
}

func (x *GoogleMessage1) GetField78() bool {
	if x != nil && x.Field78 != nil {
		return *x.Field78
	}
	return false
}

func (x *GoogleMessage1) GetField67() int32 {
	if x != nil && x.Field67 != nil {
		return *x.Field67
	}
	return Default_GoogleMessage1_Field67
}

func (x *GoogleMessage1) GetField68() int32 {
	if x != nil && x.Field68 != nil {
		return *x.Field68
	}
	return 0
}

func (x *GoogleMessage1) GetField128() int32 {
	if x != nil && x.Field128 != nil {
		return *x.Field128
	}
	return Default_GoogleMessage1_Field128
}

func (x *GoogleMessage1) GetField129() string {
	if x != nil && x.Field129 != nil {
		return *x.Field129
	}
	return Default_GoogleMessage1_Field129
}

func (x *GoogleMessage1) GetField131() int32 {
	if x != nil && x.Field131 != nil {
		return *x.Field131
	}
	return Default_GoogleMessage1_Field131
}

type GoogleMessage1SubMessage struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Field1   *int32  `protobuf:"varint,1,opt,name=field1,def=0" json:"field1,omitempty"`
	Field2   *int32  `protobuf:"varint,2,opt,name=field2,def=0" json:"field2,omitempty"`
	Field3   *int32  `protobuf:"varint,3,opt,name=field3,def=0" json:"field3,omitempty"`
	Field15  *string `protobuf:"bytes,15,opt,name=field15" json:"field15,omitempty"`
	Field12  *bool   `protobuf:"varint,12,opt,name=field12,def=1" json:"field12,omitempty"`
	Field13  *int64  `protobuf:"varint,13,opt,name=field13" json:"field13,omitempty"`
	Field14  *int64  `protobuf:"varint,14,opt,name=field14" json:"field14,omitempty"`
	Field16  *int32  `protobuf:"varint,16,opt,name=field16" json:"field16,omitempty"`
	Field19  *int32  `protobuf:"varint,19,opt,name=field19,def=2" json:"field19,omitempty"`
	Field20  *bool   `protobuf:"varint,20,opt,name=field20,def=1" json:"field20,omitempty"`
	Field28  *bool   `protobuf:"varint,28,opt,name=field28,def=1" json:"field28,omitempty"`
	Field21  *uint64 `protobuf:"fixed64,21,opt,name=field21" json:"field21,omitempty"`
	Field22  *int32  `protobuf:"varint,22,opt,name=field22" json:"field22,omitempty"`
	Field23  *bool   `protobuf:"varint,23,opt,name=field23,def=0" json:"field23,omitempty"`
	Field206 *bool   `protobuf:"varint,206,opt,name=field206,def=0" json:"field206,omitempty"`
	Field203 *uint32 `protobuf:"fixed32,203,opt,name=field203" json:"field203,omitempty"`
	Field204 *int32  `protobuf:"varint,204,opt,name=field204" json:"field204,omitempty"`
	Field205 *string `protobuf:"bytes,205,opt,name=field205" json:"field205,omitempty"`
	Field207 *uint64 `protobuf:"varint,207,opt,name=field207" json:"field207,omitempty"`
	Field300 *uint64 `protobuf:"varint,300,opt,name=field300" json:"field300,omitempty"`
}

// Default values for GoogleMessage1SubMessage fields.
const (
	Default_GoogleMessage1SubMessage_Field1   = int32(0)
	Default_GoogleMessage1SubMessage_Field2   = int32(0)
	Default_GoogleMessage1SubMessage_Field3   = int32(0)
	Default_GoogleMessage1SubMessage_Field12  = bool(true)
	Default_GoogleMessage1SubMessage_Field19  = int32(2)
	Default_GoogleMessage1SubMessage_Field20  = bool(true)
	Default_GoogleMessage1SubMessage_Field28  = bool(true)
	Default_GoogleMessage1SubMessage_Field23  = bool(false)
	Default_GoogleMessage1SubMessage_Field206 = bool(false)
)

func (x *GoogleMessage1SubMessage) Reset() {
	*x = GoogleMessage1SubMessage{}
}

func (x *GoogleMessage1SubMessage) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GoogleMessage1SubMessage) ProtoMessage() {}

func (x *GoogleMessage1SubMessage) ProtoReflect() protoreflect.Message {
	mi := &file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_msgTypes[1]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GoogleMessage1SubMessage.ProtoReflect.Descriptor instead.
func (*GoogleMessage1SubMessage) Descriptor() ([]byte, []int) {
	return file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDescGZIP(), []int{1}
}

func (x *GoogleMessage1SubMessage) GetField1() int32 {
	if x != nil && x.Field1 != nil {
		return *x.Field1
	}
	return Default_GoogleMessage1SubMessage_Field1
}

func (x *GoogleMessage1SubMessage) GetField2() int32 {
	if x != nil && x.Field2 != nil {
		return *x.Field2
	}
	return Default_GoogleMessage1SubMessage_Field2
}

func (x *GoogleMessage1SubMessage) GetField3() int32 {
	if x != nil && x.Field3 != nil {
		return *x.Field3
	}
	return Default_GoogleMessage1SubMessage_Field3
}

func (x *GoogleMessage1SubMessage) GetField15() string {
	if x != nil && x.Field15 != nil {
		return *x.Field15
	}
	return ""
}

func (x *GoogleMessage1SubMessage) GetField12() bool {
	if x != nil && x.Field12 != nil {
		return *x.Field12
	}
	return Default_GoogleMessage1SubMessage_Field12
}

func (x *GoogleMessage1SubMessage) GetField13() int64 {
	if x != nil && x.Field13 != nil {
		return *x.Field13
	}
	return 0
}

func (x *GoogleMessage1SubMessage) GetField14() int64 {
	if x != nil && x.Field14 != nil {
		return *x.Field14
	}
	return 0
}

func (x *GoogleMessage1SubMessage) GetField16() int32 {
	if x != nil && x.Field16 != nil {
		return *x.Field16
	}
	return 0
}

func (x *GoogleMessage1SubMessage) GetField19() int32 {
	if x != nil && x.Field19 != nil {
		return *x.Field19
	}
	return Default_GoogleMessage1SubMessage_Field19
}

func (x *GoogleMessage1SubMessage) GetField20() bool {
	if x != nil && x.Field20 != nil {
		return *x.Field20
	}
	return Default_GoogleMessage1SubMessage_Field20
}

func (x *GoogleMessage1SubMessage) GetField28() bool {
	if x != nil && x.Field28 != nil {
		return *x.Field28
	}
	return Default_GoogleMessage1SubMessage_Field28
}

func (x *GoogleMessage1SubMessage) GetField21() uint64 {
	if x != nil && x.Field21 != nil {
		return *x.Field21
	}
	return 0
}

func (x *GoogleMessage1SubMessage) GetField22() int32 {
	if x != nil && x.Field22 != nil {
		return *x.Field22
	}
	return 0
}

func (x *GoogleMessage1SubMessage) GetField23() bool {
	if x != nil && x.Field23 != nil {
		return *x.Field23
	}
	return Default_GoogleMessage1SubMessage_Field23
}

func (x *GoogleMessage1SubMessage) GetField206() bool {
	if x != nil && x.Field206 != nil {
		return *x.Field206
	}
	return Default_GoogleMessage1SubMessage_Field206
}

func (x *GoogleMessage1SubMessage) GetField203() uint32 {
	if x != nil && x.Field203 != nil {
		return *x.Field203
	}
	return 0
}

func (x *GoogleMessage1SubMessage) GetField204() int32 {
	if x != nil && x.Field204 != nil {
		return *x.Field204
	}
	return 0
}

func (x *GoogleMessage1SubMessage) GetField205() string {
	if x != nil && x.Field205 != nil {
		return *x.Field205
	}
	return ""
}

func (x *GoogleMessage1SubMessage) GetField207() uint64 {
	if x != nil && x.Field207 != nil {
		return *x.Field207
	}
	return 0
}

func (x *GoogleMessage1SubMessage) GetField300() uint64 {
	if x != nil && x.Field300 != nil {
		return *x.Field300
	}
	return 0
}

var File_datasets_google_message1_proto2_benchmark_message1_proto2_proto protoreflect.FileDescriptor

var file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDesc = []byte{
	0x0a, 0x3f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x32, 0x2f, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x5f, 0x6d, 0x65, 0x73, 0x73,
	0x61, 0x67, 0x65, 0x31, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x12, 0x11, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x32, 0x22, 0xf7, 0x09, 0x0a, 0x0e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x4d,
	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x31, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x31, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x12,
	0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x39, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x39, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x31, 0x38, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31,
	0x38, 0x12, 0x1f, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x38, 0x30, 0x18, 0x50, 0x20, 0x01,
	0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x38, 0x30, 0x12, 0x1e, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x38, 0x31, 0x18, 0x51, 0x20,
	0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x38, 0x31, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x18, 0x02, 0x20, 0x02,
	0x28, 0x05, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x33, 0x18, 0x03, 0x20, 0x02, 0x28, 0x05, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c,
	0x64, 0x33, 0x12, 0x1b, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x38, 0x30, 0x18, 0x98,
	0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x38, 0x30, 0x12,
	0x19, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x36, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x3a,
	0x01, 0x30, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x36, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x32, 0x32, 0x18, 0x16, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x32, 0x32, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x34, 0x18, 0x04,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x34, 0x12, 0x16, 0x0a, 0x06,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x35, 0x18, 0x05, 0x20, 0x03, 0x28, 0x06, 0x52, 0x06, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x35, 0x12, 0x1f, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x35, 0x39, 0x18,
	0x3b, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x07, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x35, 0x39, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x37, 0x18,
	0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x37, 0x12, 0x18, 0x0a,
	0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x36, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x36, 0x12, 0x1e, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x31, 0x33, 0x30, 0x18, 0x82, 0x01, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52, 0x08, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x31, 0x33, 0x30, 0x12, 0x1e, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x31, 0x32, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x32, 0x12, 0x1e, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x31, 0x37, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x37, 0x12, 0x1e, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x31, 0x33, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x33, 0x12, 0x1e, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x31, 0x34, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x34, 0x12, 0x1d, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x31, 0x30, 0x34, 0x18, 0x68, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52, 0x08, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x31, 0x30, 0x34, 0x12, 0x1d, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31,
	0x30, 0x30, 0x18, 0x64, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52, 0x08, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x31, 0x30, 0x30, 0x12, 0x1d, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x30,
	0x31, 0x18, 0x65, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c,
	0x64, 0x31, 0x30, 0x31, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x30, 0x32,
	0x18, 0x66, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x30, 0x32,
	0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x30, 0x33, 0x18, 0x67, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x30, 0x33, 0x12, 0x1b, 0x0a, 0x07,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x39, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30,
	0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x39, 0x12, 0x1f, 0x0a, 0x07, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x33, 0x30, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73,
	0x65, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x33, 0x30, 0x12, 0x1c, 0x0a, 0x07, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x36, 0x30, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x02, 0x2d, 0x31, 0x52,
	0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x36, 0x30, 0x12, 0x1f, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c,
	0x64, 0x32, 0x37, 0x31, 0x18, 0x8f, 0x02, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x02, 0x2d, 0x31, 0x52,
	0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x37, 0x31, 0x12, 0x1f, 0x0a, 0x08, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x32, 0x37, 0x32, 0x18, 0x90, 0x02, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x02, 0x2d, 0x31,
	0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x37, 0x32, 0x12, 0x1b, 0x0a, 0x08, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x31, 0x35, 0x30, 0x18, 0x96, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x31, 0x35, 0x30, 0x12, 0x1b, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x32, 0x33, 0x18, 0x17, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52, 0x07, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x32, 0x33, 0x12, 0x1f, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x34, 0x18,
	0x18, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x07, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x32, 0x34, 0x12, 0x1b, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x35,
	0x18, 0x19, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x32, 0x35, 0x12, 0x45, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x35, 0x18, 0x0f, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x73,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x4d, 0x65,
	0x73, 0x73, 0x61, 0x67, 0x65, 0x31, 0x53, 0x75, 0x62, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
	0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x35, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x37, 0x38, 0x18, 0x4e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c,
	0x64, 0x37, 0x38, 0x12, 0x1b, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x36, 0x37, 0x18, 0x43,
	0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x36, 0x37,
	0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x36, 0x38, 0x18, 0x44, 0x20, 0x01, 0x28,
	0x05, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x36, 0x38, 0x12, 0x1e, 0x0a, 0x08, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x31, 0x32, 0x38, 0x18, 0x80, 0x01, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30,
	0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x32, 0x38, 0x12, 0x32, 0x0a, 0x08, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x31, 0x32, 0x39, 0x18, 0x81, 0x01, 0x20, 0x01, 0x28, 0x09, 0x3a, 0x15, 0x78,
	0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
	0x78, 0x78, 0x78, 0x78, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x32, 0x39, 0x12, 0x1e,
	0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x33, 0x31, 0x18, 0x83, 0x01, 0x20, 0x01, 0x28,
	0x05, 0x3a, 0x01, 0x30, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x33, 0x31, 0x22, 0xda,
	0x04, 0x0a, 0x18, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
	0x31, 0x53, 0x75, 0x62, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x19, 0x0a, 0x06, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52, 0x06,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x12, 0x19, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x32, 0x12, 0x19, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x33, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x05, 0x3a, 0x01, 0x30, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x33, 0x12, 0x18, 0x0a, 0x07,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x35, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x31, 0x35, 0x12, 0x1e, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31,
	0x32, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x31, 0x32, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31,
	0x33, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x33,
	0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x34, 0x18, 0x0e, 0x20, 0x01, 0x28,
	0x03, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x34, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x31, 0x36, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x31, 0x36, 0x12, 0x1b, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x39, 0x18,
	0x13, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x32, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31,
	0x39, 0x12, 0x1e, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x30, 0x18, 0x14, 0x20, 0x01,
	0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32,
	0x30, 0x12, 0x1e, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x38, 0x18, 0x1c, 0x20, 0x01,
	0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32,
	0x38, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x31, 0x18, 0x15, 0x20, 0x01,
	0x28, 0x06, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x31, 0x12, 0x18, 0x0a, 0x07, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x32, 0x32, 0x18, 0x16, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x32, 0x32, 0x12, 0x1f, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x33,
	0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x07, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x32, 0x33, 0x12, 0x22, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32,
	0x30, 0x36, 0x18, 0xce, 0x01, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65,
	0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x30, 0x36, 0x12, 0x1b, 0x0a, 0x08, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x32, 0x30, 0x33, 0x18, 0xcb, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x08, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x32, 0x30, 0x33, 0x12, 0x1b, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x32, 0x30, 0x34, 0x18, 0xcc, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c,
	0x64, 0x32, 0x30, 0x34, 0x12, 0x1b, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x30, 0x35,
	0x18, 0xcd, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x30,
	0x35, 0x12, 0x1b, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x30, 0x37, 0x18, 0xcf, 0x01,
	0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x30, 0x37, 0x12, 0x1b,
	0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x33, 0x30, 0x30, 0x18, 0xac, 0x02, 0x20, 0x01, 0x28,
	0x04, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x33, 0x30, 0x30, 0x42, 0x80, 0x01, 0x0a, 0x1e,
	0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x62, 0x75, 0x66, 0x2e, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x48, 0x01,
	0x5a, 0x59, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e,
	0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x69, 0x6e, 0x74,
	0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73,
	0x2f, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x2f, 0x64, 0x61, 0x74, 0x61,
	0x73, 0x65, 0x74, 0x73, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73,
	0x61, 0x67, 0x65, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xf8, 0x01, 0x01,
}

var (
	file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDescOnce sync.Once
	file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDescData = file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDesc
)

func file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDescGZIP() []byte {
	file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDescOnce.Do(func() {
		file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDescData = protoimpl.X.CompressGZIP(file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDescData)
	})
	return file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDescData
}

var file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
var file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_goTypes = []interface{}{
	(*GoogleMessage1)(nil),           // 0: benchmarks.proto2.GoogleMessage1
	(*GoogleMessage1SubMessage)(nil), // 1: benchmarks.proto2.GoogleMessage1SubMessage
}
var file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_depIdxs = []int32{
	1, // 0: benchmarks.proto2.GoogleMessage1.field15:type_name -> benchmarks.proto2.GoogleMessage1SubMessage
	1, // [1:1] is the sub-list for method output_type
	1, // [1:1] is the sub-list for method input_type
	1, // [1:1] is the sub-list for extension type_name
	1, // [1:1] is the sub-list for extension extendee
	0, // [0:1] is the sub-list for field type_name
}

func init() { file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_init() }
func file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_init() {
	if File_datasets_google_message1_proto2_benchmark_message1_proto2_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GoogleMessage1); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GoogleMessage1SubMessage); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDesc,
			NumEnums:      0,
			NumMessages:   2,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_goTypes,
		DependencyIndexes: file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_depIdxs,
		MessageInfos:      file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_msgTypes,
	}.Build()
	File_datasets_google_message1_proto2_benchmark_message1_proto2_proto = out.File
	file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDesc = nil
	file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_goTypes = nil
	file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_depIdxs = nil
}
