From 055c812a4fe33b982b9eef9c56b9a3696c762494 Mon Sep 17 00:00:00 2001 From: Lasse Folger <lassefolger@google.com> Date: Fri, 23 Feb 2024 13:03:15 +0100 Subject: [PATCH] encoding/prototext: add proto editions and fuzz tests Change-Id: I2afc5ae83bf68600def3568e1d3ad51ef00e7671 Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/566395 Auto-Submit: Lasse Folger <lassefolger@google.com> Reviewed-by: Michael Stapelberg <stapelberg@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> --- .../testdata/import_public/a.proto | 2 +- encoding/prototext/decode_test.go | 198 +++ encoding/prototext/encode_test.go | 218 ++- encoding/prototext/fuzz_test.go | 98 ++ .../testprotos/textpbeditions/test2.pb.go | 1269 ++++++++++------- .../testprotos/textpbeditions/test2.proto | 29 + 6 files changed, 1314 insertions(+), 500 deletions(-) create mode 100644 encoding/prototext/fuzz_test.go diff --git a/cmd/protoc-gen-go/testdata/import_public/a.proto b/cmd/protoc-gen-go/testdata/import_public/a.proto index aa79b1b8..91b8f3c0 100644 --- a/cmd/protoc-gen-go/testdata/import_public/a.proto +++ b/cmd/protoc-gen-go/testdata/import_public/a.proto @@ -9,7 +9,7 @@ package goproto.protoc.import_public; // Same Go package. import public "cmd/protoc-gen-go/testdata/import_public/b.proto"; -// Different Go package. +// Different Go package. import public "cmd/protoc-gen-go/testdata/import_public/sub/a.proto"; option go_package = "google.golang.org/protobuf/cmd/protoc-gen-go/testdata/import_public"; diff --git a/encoding/prototext/decode_test.go b/encoding/prototext/decode_test.go index 15a4b78f..52842dd8 100644 --- a/encoding/prototext/decode_test.go +++ b/encoding/prototext/decode_test.go @@ -18,6 +18,7 @@ import ( weakpb "google.golang.org/protobuf/internal/testprotos/test/weak1" pb2 "google.golang.org/protobuf/internal/testprotos/textpb2" pb3 "google.golang.org/protobuf/internal/testprotos/textpb3" + pbeditions "google.golang.org/protobuf/internal/testprotos/textpbeditions" "google.golang.org/protobuf/types/known/anypb" ) @@ -70,6 +71,62 @@ opt_string: "" OptBytes: []byte{}, OptString: proto.String(""), }, + }, { + desc: "protoeditions explicit scalars set to zero values", + inputMessage: &pbeditions.Scalars{}, + inputText: `opt_bool: false +opt_int32: 0 +opt_int64: 0 +opt_uint32: 0 +opt_uint64: 0 +opt_sint32: 0 +opt_sint64: 0 +opt_fixed32: 0 +opt_fixed64: 0 +opt_sfixed32: 0 +opt_sfixed64: 0 +opt_float: 0 +opt_double: 0 +opt_bytes: "" +opt_string: "" +`, + wantMessage: &pbeditions.Scalars{ + OptBool: proto.Bool(false), + OptInt32: proto.Int32(0), + OptInt64: proto.Int64(0), + OptUint32: proto.Uint32(0), + OptUint64: proto.Uint64(0), + OptSint32: proto.Int32(0), + OptSint64: proto.Int64(0), + OptFixed32: proto.Uint32(0), + OptFixed64: proto.Uint64(0), + OptSfixed32: proto.Int32(0), + OptSfixed64: proto.Int64(0), + OptFloat: proto.Float32(0), + OptDouble: proto.Float64(0), + OptBytes: []byte{}, + OptString: proto.String(""), + }, + }, { + desc: "protoeditions implicit scalars set to zero values", + inputMessage: &pbeditions.ImplicitScalars{}, + inputText: `s_bool: false +s_int32: 0 +s_int64: 0 +s_uint32: 0 +s_uint64: 0 +s_sint32: 0 +s_sint64: 0 +s_fixed32: 0 +s_fixed64: 0 +s_sfixed32: 0 +s_sfixed64: 0 +s_float: 0 +s_double: 0 +s_bytes: "" +s_string: "" +`, + wantMessage: &pbeditions.ImplicitScalars{}, }, { desc: "proto3 scalars set to zero values", inputMessage: &pb3.Scalars{}, @@ -150,6 +207,38 @@ opt_string: "谷歌" OptBytes: []byte("\xe8\xb0\xb7\xe6\xad\x8c"), OptString: proto.String("谷歌"), }, + }, { + desc: "protoeditions explicit scalars", + inputMessage: &pbeditions.Scalars{}, + inputText: `opt_bool: true +opt_int32: 255 +opt_int64: 3735928559 +opt_uint32: 0xff +opt_uint64: 0xdeadbeef +opt_sint32: -1001 +opt_sint64: - 0xffff +opt_fixed64: 64 +opt_sfixed32: - 32 +opt_float: 1.234 +opt_double: 1.23e+100 +opt_bytes: "\xe8\xb0\xb7\xe6\xad\x8c" +opt_string: "谷歌" +`, + wantMessage: &pbeditions.Scalars{ + OptBool: proto.Bool(true), + OptInt32: proto.Int32(0xff), + OptInt64: proto.Int64(0xdeadbeef), + OptUint32: proto.Uint32(0xff), + OptUint64: proto.Uint64(0xdeadbeef), + OptSint32: proto.Int32(-1001), + OptSint64: proto.Int64(-0xffff), + OptFixed64: proto.Uint64(64), + OptSfixed32: proto.Int32(-32), + OptFloat: proto.Float32(1.234), + OptDouble: proto.Float64(1.23e100), + OptBytes: []byte("\xe8\xb0\xb7\xe6\xad\x8c"), + OptString: proto.String("谷歌"), + }, }, { desc: "case sensitive", inputMessage: &pb3.Scalars{}, @@ -195,6 +284,13 @@ s_string: "谷歌" wantMessage: &pb2.Scalars{ OptString: proto.String("abc\xff"), }, + }, { + desc: "protoeditions unvalidated string with invalid UTF-8", + inputMessage: &pbeditions.Scalars{}, + inputText: `opt_string: "abc\xff"`, + wantMessage: &pbeditions.Scalars{ + OptString: proto.String("abc\xff"), + }, }, { desc: "proto3 string with invalid UTF-8", inputMessage: &pb3.Scalars{}, @@ -215,6 +311,11 @@ s_string: "谷歌" umo: prototext.UnmarshalOptions{DiscardUnknown: true}, inputMessage: &pb2.Scalars{}, inputText: `unknown_field:123 1000:"hello"`, + }, { + desc: "protoeditions message contains discarded unknown field", + umo: prototext.UnmarshalOptions{DiscardUnknown: true}, + inputMessage: &pbeditions.Scalars{}, + inputText: `unknown_field:123 1000:"hello"`, }, { desc: "proto3 message contains discarded unknown field", umo: prototext.UnmarshalOptions{DiscardUnknown: true}, @@ -408,6 +509,39 @@ opt_nested_enum: UNO OptEnum: pb2.Enum_ONE.Enum(), OptNestedEnum: pb2.Enums_UNO.Enum(), }, + }, { + desc: "protoeditions closed enum", + inputMessage: &pbeditions.Enums{}, + inputText: ` +opt_enum: ONE +opt_nested_enum: UNO +`, + wantMessage: &pbeditions.Enums{ + OptEnum: pbeditions.Enum_ONE.Enum(), + OptNestedEnum: pbeditions.Enums_UNO.Enum(), + }, + }, { + desc: "protoeditions open enum", + inputMessage: &pbeditions.Enums{}, + inputText: ` +implicit_enum: EINS +implicit_nested_enum: ZEHN +`, + wantMessage: &pbeditions.Enums{ + ImplicitEnum: pbeditions.OpenEnum_EINS, + ImplicitNestedEnum: pbeditions.Enums_ZEHN, + }, + }, { + desc: "protoeditions enum numeric value", + inputMessage: &pbeditions.Enums{}, + inputText: ` +implicit_enum: 1 +implicit_nested_enum: 10 +`, + wantMessage: &pbeditions.Enums{ + ImplicitEnum: pbeditions.OpenEnum_EINS, + ImplicitNestedEnum: pbeditions.Enums_ZEHN, + }, }, { desc: "proto2 enum set to numeric values", inputMessage: &pb2.Enums{}, @@ -482,6 +616,17 @@ OptGroup: {} OptNested: &pb2.Nested{}, Optgroup: &pb2.Nests_OptGroup{}, }, + }, { + desc: "protoeditions nested empty messages", + inputMessage: &pbeditions.Nests{}, + inputText: ` +opt_nested: {} +OptGroup: {} +`, + wantMessage: &pbeditions.Nests{ + OptNested: &pbeditions.Nested{}, + Optgroup: &pbeditions.Nests_OptGroup{}, + }, }, { desc: "message fields with no field separator", inputMessage: &pb2.Nests{}, @@ -493,11 +638,27 @@ OptGroup {} OptNested: &pb2.Nested{}, Optgroup: &pb2.Nests_OptGroup{}, }, + }, { + desc: "message fields with no field separator", + inputMessage: &pbeditions.Nests{}, + inputText: ` +opt_nested {} +OptGroup {} +`, + wantMessage: &pbeditions.Nests{ + OptNested: &pbeditions.Nested{}, + Optgroup: &pbeditions.Nests_OptGroup{}, + }, }, { desc: "group field name", inputMessage: &pb2.Nests{}, inputText: `optgroup: {}`, wantErr: "unknown field: optgroup", + }, { + desc: "delimited encoded message field name", + inputMessage: &pbeditions.Nests{}, + inputText: `optgroup: {}`, + wantErr: "unknown field: optgroup", }, { desc: "proto2 nested messages", inputMessage: &pb2.Nests{}, @@ -517,6 +678,25 @@ opt_nested: { }, }, }, + }, { + desc: "protoeditions delimited encoded nested messages", + inputMessage: &pbeditions.Nests{}, + inputText: ` +opt_nested: { + opt_string: "nested message" + opt_nested: { + opt_string: "another nested message" + } +} +`, + wantMessage: &pbeditions.Nests{ + OptNested: &pbeditions.Nested{ + OptString: proto.String("nested message"), + OptNested: &pbeditions.Nested{ + OptString: proto.String("another nested message"), + }, + }, + }, }, { desc: "proto3 nested empty message", inputMessage: &pb3.Nests{}, @@ -711,6 +891,24 @@ RptGroup: {} {}, }, }, + }, { + desc: "repeated delimited encoded message fields", + inputMessage: &pbeditions.Nests{}, + inputText: ` +RptGroup: { + rpt_string: "hello" + rpt_string: "world" +} +RptGroup: {} +`, + wantMessage: &pbeditions.Nests{ + Rptgroup: []*pbeditions.Nests_RptGroup{ + { + RptString: []string{"hello", "world"}, + }, + {}, + }, + }, }, { desc: "repeated message fields without field separator", inputMessage: &pb2.Nests{}, diff --git a/encoding/prototext/encode_test.go b/encoding/prototext/encode_test.go index 65b93cb4..e017faf9 100644 --- a/encoding/prototext/encode_test.go +++ b/encoding/prototext/encode_test.go @@ -20,6 +20,7 @@ import ( pb2 "google.golang.org/protobuf/internal/testprotos/textpb2" pb3 "google.golang.org/protobuf/internal/testprotos/textpb3" + pbeditions "google.golang.org/protobuf/internal/testprotos/textpbeditions" "google.golang.org/protobuf/types/known/anypb" ) @@ -40,6 +41,10 @@ func TestMarshal(t *testing.T) { desc: "proto2 optional scalars not set", input: &pb2.Scalars{}, want: "", + }, { + desc: "protoeditions optional scalars not set", + input: &pbeditions.Scalars{}, + want: "", }, { desc: "proto3 scalars not set", input: &pb3.Scalars{}, @@ -48,6 +53,10 @@ func TestMarshal(t *testing.T) { desc: "proto3 optional not set", input: &pb3.Proto3Optional{}, want: "", + }, { + desc: "protoeditions implicit not set", + input: &pbeditions.ImplicitScalars{}, + want: "", }, { desc: "proto2 optional scalars set to zero values", input: &pb2.Scalars{ @@ -82,6 +91,41 @@ opt_float: 0 opt_double: 0 opt_bytes: "" opt_string: "" +`, + }, { + desc: "protoeditions optional scalars set to zero values", + input: &pbeditions.Scalars{ + OptBool: proto.Bool(false), + OptInt32: proto.Int32(0), + OptInt64: proto.Int64(0), + OptUint32: proto.Uint32(0), + OptUint64: proto.Uint64(0), + OptSint32: proto.Int32(0), + OptSint64: proto.Int64(0), + OptFixed32: proto.Uint32(0), + OptFixed64: proto.Uint64(0), + OptSfixed32: proto.Int32(0), + OptSfixed64: proto.Int64(0), + OptFloat: proto.Float32(0), + OptDouble: proto.Float64(0), + OptBytes: []byte{}, + OptString: proto.String(""), + }, + want: `opt_bool: false +opt_int32: 0 +opt_int64: 0 +opt_uint32: 0 +opt_uint64: 0 +opt_sint32: 0 +opt_sint64: 0 +opt_fixed32: 0 +opt_fixed64: 0 +opt_sfixed32: 0 +opt_sfixed64: 0 +opt_float: 0 +opt_double: 0 +opt_bytes: "" +opt_string: "" `, }, { desc: "proto3 optional set to zero values", @@ -130,6 +174,26 @@ opt_message: {} SString: "", }, want: "", + }, { + desc: "protoeditions implicit scalars set to zero values", + input: &pbeditions.ImplicitScalars{ + SBool: false, + SInt32: 0, + SInt64: 0, + SUint32: 0, + SUint64: 0, + SSint32: 0, + SSint64: 0, + SFixed32: 0, + SFixed64: 0, + SSfixed32: 0, + SSfixed64: 0, + SFloat: 0, + SDouble: 0, + SBytes: []byte{}, + SString: "", + }, + want: "", }, { desc: "proto2 optional scalars set to some values", input: &pb2.Scalars{ @@ -160,6 +224,37 @@ opt_float: 1.02 opt_double: 1.0199999809265137 opt_bytes: "谷歌" opt_string: "谷歌" +`, + }, { + desc: "proto editions optional scalars set to some values", + input: &pbeditions.Scalars{ + OptBool: proto.Bool(true), + OptInt32: proto.Int32(0xff), + OptInt64: proto.Int64(0xdeadbeef), + OptUint32: proto.Uint32(47), + OptUint64: proto.Uint64(0xdeadbeef), + OptSint32: proto.Int32(-1001), + OptSint64: proto.Int64(-0xffff), + OptFixed64: proto.Uint64(64), + OptSfixed32: proto.Int32(-32), + OptFloat: proto.Float32(1.02), + OptDouble: proto.Float64(1.0199999809265137), + OptBytes: []byte("\xe8\xb0\xb7\xe6\xad\x8c"), + OptString: proto.String("谷歌"), + }, + want: `opt_bool: true +opt_int32: 255 +opt_int64: 3735928559 +opt_uint32: 47 +opt_uint64: 3735928559 +opt_sint32: -1001 +opt_sint64: -65535 +opt_fixed64: 64 +opt_sfixed32: -32 +opt_float: 1.02 +opt_double: 1.0199999809265137 +opt_bytes: "谷歌" +opt_string: "谷歌" `, }, { desc: "proto2 string with invalid UTF-8", @@ -167,6 +262,13 @@ opt_string: "谷歌" OptString: proto.String("abc\xff"), }, want: `opt_string: "abc\xff" +`, + }, { + desc: "protoeditions string with invalid UTF-8", + input: &pbeditions.Scalars{ + OptString: proto.String("abc\xff"), + }, + want: `opt_string: "abc\xff" `, }, { desc: "proto3 string with invalid UTF-8", @@ -174,6 +276,12 @@ opt_string: "谷歌" SString: "abc\xff", }, wantErr: true, + }, { + desc: "protoeditions utf8 validated string with invalid UTF-8", + input: &pbeditions.UTF8Validated{ + ValidatedString: "abc\xff", + }, + wantErr: true, }, { desc: "float nan", input: &pb3.Scalars{ @@ -222,6 +330,15 @@ opt_string: "谷歌" }, want: `opt_enum: 0 opt_nested_enum: 0 +`, + }, { + desc: "protoeditions enum set to zero value", + input: &pbeditions.Enums{ + OptEnum: pbeditions.Enum(0).Enum(), + OptNestedEnum: pbeditions.Enums_NestedEnum(0).Enum(), + }, + want: `opt_enum: 0 +opt_nested_enum: 0 `, }, { desc: "proto2 enum", @@ -231,6 +348,15 @@ opt_nested_enum: 0 }, want: `opt_enum: ONE opt_nested_enum: UNO +`, + }, { + desc: "protoeditions enum", + input: &pbeditions.Enums{ + OptEnum: pbeditions.Enum_ONE.Enum(), + OptNestedEnum: pbeditions.Enums_UNO.Enum(), + }, + want: `opt_enum: ONE +opt_nested_enum: UNO `, }, { desc: "proto2 enum set to numeric values", @@ -249,6 +375,15 @@ opt_nested_enum: DOS }, want: `opt_enum: 101 opt_nested_enum: -101 +`, + }, { + desc: "protoeditions enum set to unnamed numeric values", + input: &pbeditions.Enums{ + OptEnum: pbeditions.Enum(101).Enum(), + OptNestedEnum: pbeditions.Enums_NestedEnum(-101).Enum(), + }, + want: `opt_enum: 101 +opt_nested_enum: -101 `, }, { desc: "proto3 enum not set", @@ -261,6 +396,21 @@ opt_nested_enum: -101 SNestedEnum: pb3.Enums_CERO, }, want: "", + }, { + desc: "protoeditions implicit enum field set to default value", + input: &pbeditions.Enums{ + ImplicitEnum: pbeditions.OpenEnum_UNKNOWN, + }, + want: "", + }, { + desc: "protoeditions implicit enum field", + input: &pbeditions.Enums{ + ImplicitEnum: pbeditions.OpenEnum_EINS, + ImplicitNestedEnum: pbeditions.Enums_ZEHN, + }, + want: `implicit_enum: EINS +implicit_nested_enum: ZEHN +`, }, { desc: "proto3 enum", input: &pb3.Enums{ @@ -278,6 +428,15 @@ s_nested_enum: UNO }, want: `s_enum: TWO s_nested_enum: DOS +`, + }, { + desc: "protoeditions implicit enum set to unnamed numeric values", + input: &pbeditions.Enums{ + ImplicitEnum: -47, + ImplicitNestedEnum: 47, + }, + want: `implicit_enum: -47 +implicit_nested_enum: 47 `, }, { desc: "proto3 enum set to unnamed numeric values", @@ -300,6 +459,15 @@ s_nested_enum: 47 }, want: `opt_nested: {} OptGroup: {} +`, + }, { + desc: "protoeditions nested message set to empty", + input: &pbeditions.Nests{ + OptNested: &pbeditions.Nested{}, + Optgroup: &pbeditions.Nests_OptGroup{}, + }, + want: `opt_nested: {} +OptGroup: {} `, }, { desc: "proto2 nested messages", @@ -317,6 +485,23 @@ OptGroup: {} opt_string: "another nested message" } } +`, + }, { + desc: "protoeditions nested messages", + input: &pbeditions.Nests{ + OptNested: &pbeditions.Nested{ + OptString: proto.String("nested message"), + OptNested: &pbeditions.Nested{ + OptString: proto.String("another nested message"), + }, + }, + }, + want: `opt_nested: { + opt_string: "nested message" + opt_nested: { + opt_string: "another nested message" + } +} `, }, { desc: "proto2 groups", @@ -340,6 +525,29 @@ OptGroup: {} opt_fixed32: 47 } } +`, + }, { + desc: "protoeditions delimited encoded meesage field", + input: &pbeditions.Nests{ + Optgroup: &pbeditions.Nests_OptGroup{ + OptString: proto.String("inside a group"), + OptNested: &pbeditions.Nested{ + OptString: proto.String("nested message inside a group"), + }, + Optnestedgroup: &pbeditions.Nests_OptGroup_OptNestedGroup{ + OptFixed32: proto.Uint32(47), + }, + }, + }, + want: `OptGroup: { + opt_string: "inside a group" + opt_nested: { + opt_string: "nested message inside a group" + } + OptNestedGroup: { + opt_fixed32: 47 + } +} `, }, { desc: "proto3 nested message not set", @@ -376,6 +584,14 @@ OptGroup: {} }, }, wantErr: true, + }, { + desc: "protoeditions nested message contains invalid UTF-8", + input: &pbeditions.NestsUTF8Validated{ + ValidatedMessage: &pbeditions.UTF8Validated{ + ValidatedString: "abc\xff", + }, + }, + wantErr: true, }, { desc: "oneof not set", input: &pb3.Oneofs{}, @@ -1427,7 +1643,7 @@ value: "\x80" t.Error("Marshal() got nil error, want error\n") } got := string(b) - if tt.want != "" && got != tt.want { + if got != tt.want { t.Errorf("Marshal()\n<got>\n%v\n<want>\n%v\n", got, tt.want) if diff := cmp.Diff(tt.want, got); diff != "" { t.Errorf("Marshal() diff -want +got\n%v\n", diff) diff --git a/encoding/prototext/fuzz_test.go b/encoding/prototext/fuzz_test.go new file mode 100644 index 00000000..6e46d779 --- /dev/null +++ b/encoding/prototext/fuzz_test.go @@ -0,0 +1,98 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Go native fuzzing was added in go1.18. Remove this once we stop supporting +// go1.17. +//go:build go1.18 + +package prototext_test + +import ( + "math" + "testing" + + "github.com/google/go-cmp/cmp" + "google.golang.org/protobuf/encoding/prototext" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/testing/protocmp" + + testfuzzpb "google.golang.org/protobuf/internal/testprotos/editionsfuzztest" +) + +// roundTripAndCompareProto tests if a prototext.Marshal/Unmarshal roundtrip +// preserves the contents of the message. Note: wireBytes are a protocol +// buffer wire format message, not the proto in text format. We do this because +// a random stream of bytes (e.g. generated by the fuzz engine) is more likely +// to be valid proto wire format than that it is valid text format. +func roundTripAndCompareProto(t *testing.T, wireBytes []byte, messages ...proto.Message) { + for _, msg := range messages { + src := msg.ProtoReflect().Type().New().Interface() + + if err := proto.Unmarshal(wireBytes, src); err != nil { + // Ignoring invalid wire format since we want to test the prototext + // implementation, not the wireformat implementation. + return + } + + // Unknown fields are not marshaled by prototext so we strip them. + src.ProtoReflect().SetUnknown(nil) + var ranger func(protoreflect.FieldDescriptor, protoreflect.Value) bool + stripUnknown := func(m protoreflect.Message) { + m.SetUnknown(nil) + m.Range(ranger) + } + ranger = func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + switch { + case fd.IsMap(): + if fd.MapValue().Message() != nil { + v.Map().Range(func(_ protoreflect.MapKey, v protoreflect.Value) bool { + stripUnknown(v.Message()) + return true + }) + } + case fd.Message() != nil: + if fd.Cardinality() == protoreflect.Repeated { + l := v.List() + for i := 0; i < l.Len(); i++ { + stripUnknown(l.Get(i).Message()) + } + } else { + stripUnknown(v.Message()) + } + } + return true + } + stripUnknown(src.ProtoReflect()) + + textFormat, err := prototext.Marshal(src) + if err != nil { + t.Errorf("failed to marshal messsage to text format: %v\nmessage: %v", err, src) + } + dst := msg.ProtoReflect().Type().New().Interface() + + if err := (prototext.Unmarshal(textFormat, dst)); err != nil { + t.Errorf("failed to unmarshal messsage from text format: %v\ntext format: %s", err, textFormat) + } + + // The cmp package does not deal with NaN on its own and will report + // NaN != NaN. + optNaN64 := cmp.Comparer(func(x, y float32) bool { + return (math.IsNaN(float64(x)) && math.IsNaN(float64(y))) || x == y + }) + optNaN32 := cmp.Comparer(func(x, y float64) bool { + return (math.IsNaN(x) && math.IsNaN(y)) || x == y + }) + if diff := cmp.Diff(src, dst, protocmp.Transform(), optNaN64, optNaN32); diff != "" { + t.Error(diff) + } + } +} + +func FuzzEncodeDecodeRoundTrip(f *testing.F) { + f.Add([]byte("Hello World!")) + f.Fuzz(func(t *testing.T, in []byte) { + roundTripAndCompareProto(t, in, (*testfuzzpb.TestAllTypesProto2)(nil), (*testfuzzpb.TestAllTypesProto2Editions)(nil), (*testfuzzpb.TestAllTypesProto3)(nil), (*testfuzzpb.TestAllTypesProto3Editions)(nil)) + }) +} diff --git a/internal/testprotos/textpbeditions/test2.pb.go b/internal/testprotos/textpbeditions/test2.pb.go index aae27ba2..ac7c57ab 100644 --- a/internal/testprotos/textpbeditions/test2.pb.go +++ b/internal/testprotos/textpbeditions/test2.pb.go @@ -72,6 +72,58 @@ func (Enum) EnumDescriptor() ([]byte, []int) { return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{0} } +type OpenEnum int32 + +const ( + OpenEnum_UNKNOWN OpenEnum = 0 + OpenEnum_EINS OpenEnum = 1 + OpenEnum_ZWEI OpenEnum = 2 + OpenEnum_ZEHN OpenEnum = 10 +) + +// Enum value maps for OpenEnum. +var ( + OpenEnum_name = map[int32]string{ + 0: "UNKNOWN", + 1: "EINS", + 2: "ZWEI", + 10: "ZEHN", + } + OpenEnum_value = map[string]int32{ + "UNKNOWN": 0, + "EINS": 1, + "ZWEI": 2, + "ZEHN": 10, + } +) + +func (x OpenEnum) Enum() *OpenEnum { + p := new(OpenEnum) + *p = x + return p +} + +func (x OpenEnum) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (OpenEnum) Descriptor() protoreflect.EnumDescriptor { + return file_internal_testprotos_textpbeditions_test2_proto_enumTypes[1].Descriptor() +} + +func (OpenEnum) Type() protoreflect.EnumType { + return &file_internal_testprotos_textpbeditions_test2_proto_enumTypes[1] +} + +func (x OpenEnum) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use OpenEnum.Descriptor instead. +func (OpenEnum) EnumDescriptor() ([]byte, []int) { + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{1} +} + type Enums_NestedEnum int32 const ( @@ -105,11 +157,11 @@ func (x Enums_NestedEnum) String() string { } func (Enums_NestedEnum) Descriptor() protoreflect.EnumDescriptor { - return file_internal_testprotos_textpbeditions_test2_proto_enumTypes[1].Descriptor() + return file_internal_testprotos_textpbeditions_test2_proto_enumTypes[2].Descriptor() } func (Enums_NestedEnum) Type() protoreflect.EnumType { - return &file_internal_testprotos_textpbeditions_test2_proto_enumTypes[1] + return &file_internal_testprotos_textpbeditions_test2_proto_enumTypes[2] } func (x Enums_NestedEnum) Number() protoreflect.EnumNumber { @@ -118,7 +170,59 @@ func (x Enums_NestedEnum) Number() protoreflect.EnumNumber { // Deprecated: Use Enums_NestedEnum.Descriptor instead. func (Enums_NestedEnum) EnumDescriptor() ([]byte, []int) { - return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{2, 0} + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{4, 0} +} + +type Enums_NestedOpenEnum int32 + +const ( + Enums_UNKNOWN Enums_NestedOpenEnum = 0 + Enums_EINS Enums_NestedOpenEnum = 1 + Enums_ZWEI Enums_NestedOpenEnum = 2 + Enums_ZEHN Enums_NestedOpenEnum = 10 +) + +// Enum value maps for Enums_NestedOpenEnum. +var ( + Enums_NestedOpenEnum_name = map[int32]string{ + 0: "UNKNOWN", + 1: "EINS", + 2: "ZWEI", + 10: "ZEHN", + } + Enums_NestedOpenEnum_value = map[string]int32{ + "UNKNOWN": 0, + "EINS": 1, + "ZWEI": 2, + "ZEHN": 10, + } +) + +func (x Enums_NestedOpenEnum) Enum() *Enums_NestedOpenEnum { + p := new(Enums_NestedOpenEnum) + *p = x + return p +} + +func (x Enums_NestedOpenEnum) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Enums_NestedOpenEnum) Descriptor() protoreflect.EnumDescriptor { + return file_internal_testprotos_textpbeditions_test2_proto_enumTypes[3].Descriptor() +} + +func (Enums_NestedOpenEnum) Type() protoreflect.EnumType { + return &file_internal_testprotos_textpbeditions_test2_proto_enumTypes[3] +} + +func (x Enums_NestedOpenEnum) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Enums_NestedOpenEnum.Descriptor instead. +func (Enums_NestedOpenEnum) EnumDescriptor() ([]byte, []int) { + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{4, 1} } // Scalars contains scalar fields. @@ -441,22 +545,118 @@ func (x *ImplicitScalars) GetSString() string { return "" } +type UTF8Validated struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ValidatedString string `protobuf:"bytes,1,opt,name=validated_string,json=validatedString" json:"validated_string,omitempty"` +} + +func (x *UTF8Validated) Reset() { + *x = UTF8Validated{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UTF8Validated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UTF8Validated) ProtoMessage() {} + +func (x *UTF8Validated) ProtoReflect() protoreflect.Message { + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[2] + 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 UTF8Validated.ProtoReflect.Descriptor instead. +func (*UTF8Validated) Descriptor() ([]byte, []int) { + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{2} +} + +func (x *UTF8Validated) GetValidatedString() string { + if x != nil { + return x.ValidatedString + } + return "" +} + +type NestsUTF8Validated struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ValidatedMessage *UTF8Validated `protobuf:"bytes,1,opt,name=validated_message,json=validatedMessage" json:"validated_message,omitempty"` +} + +func (x *NestsUTF8Validated) Reset() { + *x = NestsUTF8Validated{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NestsUTF8Validated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NestsUTF8Validated) ProtoMessage() {} + +func (x *NestsUTF8Validated) ProtoReflect() protoreflect.Message { + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[3] + 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 NestsUTF8Validated.ProtoReflect.Descriptor instead. +func (*NestsUTF8Validated) Descriptor() ([]byte, []int) { + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{3} +} + +func (x *NestsUTF8Validated) GetValidatedMessage() *UTF8Validated { + if x != nil { + return x.ValidatedMessage + } + return nil +} + // Message contains enum fields. type Enums struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - OptEnum *Enum `protobuf:"varint,1,opt,name=opt_enum,json=optEnum,enum=pbeditions.Enum" json:"opt_enum,omitempty"` - RptEnum []Enum `protobuf:"varint,2,rep,packed,name=rpt_enum,json=rptEnum,enum=pbeditions.Enum" json:"rpt_enum,omitempty"` - OptNestedEnum *Enums_NestedEnum `protobuf:"varint,3,opt,name=opt_nested_enum,json=optNestedEnum,enum=pbeditions.Enums_NestedEnum" json:"opt_nested_enum,omitempty"` - RptNestedEnum []Enums_NestedEnum `protobuf:"varint,4,rep,packed,name=rpt_nested_enum,json=rptNestedEnum,enum=pbeditions.Enums_NestedEnum" json:"rpt_nested_enum,omitempty"` + OptEnum *Enum `protobuf:"varint,1,opt,name=opt_enum,json=optEnum,enum=pbeditions.Enum" json:"opt_enum,omitempty"` + RptEnum []Enum `protobuf:"varint,2,rep,packed,name=rpt_enum,json=rptEnum,enum=pbeditions.Enum" json:"rpt_enum,omitempty"` + ImplicitEnum OpenEnum `protobuf:"varint,5,opt,name=implicit_enum,json=implicitEnum,enum=pbeditions.OpenEnum" json:"implicit_enum,omitempty"` + OptNestedEnum *Enums_NestedEnum `protobuf:"varint,3,opt,name=opt_nested_enum,json=optNestedEnum,enum=pbeditions.Enums_NestedEnum" json:"opt_nested_enum,omitempty"` + RptNestedEnum []Enums_NestedEnum `protobuf:"varint,4,rep,packed,name=rpt_nested_enum,json=rptNestedEnum,enum=pbeditions.Enums_NestedEnum" json:"rpt_nested_enum,omitempty"` + ImplicitNestedEnum Enums_NestedOpenEnum `protobuf:"varint,6,opt,name=implicit_nested_enum,json=implicitNestedEnum,enum=pbeditions.Enums_NestedOpenEnum" json:"implicit_nested_enum,omitempty"` } func (x *Enums) Reset() { *x = Enums{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[2] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -469,7 +669,7 @@ func (x *Enums) String() string { func (*Enums) ProtoMessage() {} func (x *Enums) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[2] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -482,7 +682,7 @@ func (x *Enums) ProtoReflect() protoreflect.Message { // Deprecated: Use Enums.ProtoReflect.Descriptor instead. func (*Enums) Descriptor() ([]byte, []int) { - return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{2} + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{4} } func (x *Enums) GetOptEnum() Enum { @@ -499,6 +699,13 @@ func (x *Enums) GetRptEnum() []Enum { return nil } +func (x *Enums) GetImplicitEnum() OpenEnum { + if x != nil { + return x.ImplicitEnum + } + return OpenEnum_UNKNOWN +} + func (x *Enums) GetOptNestedEnum() Enums_NestedEnum { if x != nil && x.OptNestedEnum != nil { return *x.OptNestedEnum @@ -513,6 +720,13 @@ func (x *Enums) GetRptNestedEnum() []Enums_NestedEnum { return nil } +func (x *Enums) GetImplicitNestedEnum() Enums_NestedOpenEnum { + if x != nil { + return x.ImplicitNestedEnum + } + return Enums_UNKNOWN +} + // Message contains repeated fields. type Repeats struct { state protoimpl.MessageState @@ -533,7 +747,7 @@ type Repeats struct { func (x *Repeats) Reset() { *x = Repeats{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[3] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -546,7 +760,7 @@ func (x *Repeats) String() string { func (*Repeats) ProtoMessage() {} func (x *Repeats) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[3] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -559,7 +773,7 @@ func (x *Repeats) ProtoReflect() protoreflect.Message { // Deprecated: Use Repeats.ProtoReflect.Descriptor instead. func (*Repeats) Descriptor() ([]byte, []int) { - return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{3} + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{5} } func (x *Repeats) GetRptBool() []bool { @@ -638,7 +852,7 @@ type Maps struct { func (x *Maps) Reset() { *x = Maps{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[4] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -651,7 +865,7 @@ func (x *Maps) String() string { func (*Maps) ProtoMessage() {} func (x *Maps) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[4] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -664,7 +878,7 @@ func (x *Maps) ProtoReflect() protoreflect.Message { // Deprecated: Use Maps.ProtoReflect.Descriptor instead. func (*Maps) Descriptor() ([]byte, []int) { - return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{4} + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{6} } func (x *Maps) GetInt32ToStr() map[int32]string { @@ -694,7 +908,7 @@ type Nested struct { func (x *Nested) Reset() { *x = Nested{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[5] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -707,7 +921,7 @@ func (x *Nested) String() string { func (*Nested) ProtoMessage() {} func (x *Nested) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[5] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -720,7 +934,7 @@ func (x *Nested) ProtoReflect() protoreflect.Message { // Deprecated: Use Nested.ProtoReflect.Descriptor instead. func (*Nested) Descriptor() ([]byte, []int) { - return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{5} + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{7} } func (x *Nested) GetOptString() string { @@ -752,7 +966,7 @@ type Nests struct { func (x *Nests) Reset() { *x = Nests{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[6] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -765,7 +979,7 @@ func (x *Nests) String() string { func (*Nests) ProtoMessage() {} func (x *Nests) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[6] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -778,7 +992,7 @@ func (x *Nests) ProtoReflect() protoreflect.Message { // Deprecated: Use Nests.ProtoReflect.Descriptor instead. func (*Nests) Descriptor() ([]byte, []int) { - return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{6} + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{8} } func (x *Nests) GetOptNested() *Nested { @@ -826,7 +1040,7 @@ type Requireds struct { func (x *Requireds) Reset() { *x = Requireds{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[7] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -839,7 +1053,7 @@ func (x *Requireds) String() string { func (*Requireds) ProtoMessage() {} func (x *Requireds) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[7] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -852,7 +1066,7 @@ func (x *Requireds) ProtoReflect() protoreflect.Message { // Deprecated: Use Requireds.ProtoReflect.Descriptor instead. func (*Requireds) Descriptor() ([]byte, []int) { - return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{7} + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{9} } func (x *Requireds) GetReqBool() bool { @@ -910,7 +1124,7 @@ type PartialRequired struct { func (x *PartialRequired) Reset() { *x = PartialRequired{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[8] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -923,7 +1137,7 @@ func (x *PartialRequired) String() string { func (*PartialRequired) ProtoMessage() {} func (x *PartialRequired) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[8] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -936,7 +1150,7 @@ func (x *PartialRequired) ProtoReflect() protoreflect.Message { // Deprecated: Use PartialRequired.ProtoReflect.Descriptor instead. func (*PartialRequired) Descriptor() ([]byte, []int) { - return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{8} + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{10} } func (x *PartialRequired) GetReqString() string { @@ -964,7 +1178,7 @@ type NestedWithRequired struct { func (x *NestedWithRequired) Reset() { *x = NestedWithRequired{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[9] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -977,7 +1191,7 @@ func (x *NestedWithRequired) String() string { func (*NestedWithRequired) ProtoMessage() {} func (x *NestedWithRequired) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[9] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -990,7 +1204,7 @@ func (x *NestedWithRequired) ProtoReflect() protoreflect.Message { // Deprecated: Use NestedWithRequired.ProtoReflect.Descriptor instead. func (*NestedWithRequired) Descriptor() ([]byte, []int) { - return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{9} + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{11} } func (x *NestedWithRequired) GetReqString() string { @@ -1017,7 +1231,7 @@ type IndirectRequired struct { func (x *IndirectRequired) Reset() { *x = IndirectRequired{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[10] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1030,7 +1244,7 @@ func (x *IndirectRequired) String() string { func (*IndirectRequired) ProtoMessage() {} func (x *IndirectRequired) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[10] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1043,7 +1257,7 @@ func (x *IndirectRequired) ProtoReflect() protoreflect.Message { // Deprecated: Use IndirectRequired.ProtoReflect.Descriptor instead. func (*IndirectRequired) Descriptor() ([]byte, []int) { - return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{10} + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{12} } func (x *IndirectRequired) GetOptNested() *NestedWithRequired { @@ -1105,7 +1319,7 @@ type Extensions struct { func (x *Extensions) Reset() { *x = Extensions{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[11] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1118,7 +1332,7 @@ func (x *Extensions) String() string { func (*Extensions) ProtoMessage() {} func (x *Extensions) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[11] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1131,7 +1345,7 @@ func (x *Extensions) ProtoReflect() protoreflect.Message { // Deprecated: Use Extensions.ProtoReflect.Descriptor instead. func (*Extensions) Descriptor() ([]byte, []int) { - return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{11} + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{13} } func (x *Extensions) GetOptString() string { @@ -1164,7 +1378,7 @@ type ExtensionsContainer struct { func (x *ExtensionsContainer) Reset() { *x = ExtensionsContainer{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[12] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1177,7 +1391,7 @@ func (x *ExtensionsContainer) String() string { func (*ExtensionsContainer) ProtoMessage() {} func (x *ExtensionsContainer) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[12] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1190,7 +1404,7 @@ func (x *ExtensionsContainer) ProtoReflect() protoreflect.Message { // Deprecated: Use ExtensionsContainer.ProtoReflect.Descriptor instead. func (*ExtensionsContainer) Descriptor() ([]byte, []int) { - return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{12} + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{14} } type MessageSet struct { @@ -1203,7 +1417,7 @@ type MessageSet struct { func (x *MessageSet) Reset() { *x = MessageSet{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[13] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1216,7 +1430,7 @@ func (x *MessageSet) String() string { func (*MessageSet) ProtoMessage() {} func (x *MessageSet) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[13] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1229,7 +1443,7 @@ func (x *MessageSet) ProtoReflect() protoreflect.Message { // Deprecated: Use MessageSet.ProtoReflect.Descriptor instead. func (*MessageSet) Descriptor() ([]byte, []int) { - return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{13} + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{15} } type MessageSetExtension struct { @@ -1243,7 +1457,7 @@ type MessageSetExtension struct { func (x *MessageSetExtension) Reset() { *x = MessageSetExtension{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[14] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1256,7 +1470,7 @@ func (x *MessageSetExtension) String() string { func (*MessageSetExtension) ProtoMessage() {} func (x *MessageSetExtension) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[14] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1269,7 +1483,7 @@ func (x *MessageSetExtension) ProtoReflect() protoreflect.Message { // Deprecated: Use MessageSetExtension.ProtoReflect.Descriptor instead. func (*MessageSetExtension) Descriptor() ([]byte, []int) { - return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{14} + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{16} } func (x *MessageSetExtension) GetOptString() string { @@ -1289,7 +1503,7 @@ type FakeMessageSet struct { func (x *FakeMessageSet) Reset() { *x = FakeMessageSet{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[15] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1302,7 +1516,7 @@ func (x *FakeMessageSet) String() string { func (*FakeMessageSet) ProtoMessage() {} func (x *FakeMessageSet) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[15] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1315,7 +1529,7 @@ func (x *FakeMessageSet) ProtoReflect() protoreflect.Message { // Deprecated: Use FakeMessageSet.ProtoReflect.Descriptor instead. func (*FakeMessageSet) Descriptor() ([]byte, []int) { - return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{15} + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{17} } type FakeMessageSetExtension struct { @@ -1329,7 +1543,7 @@ type FakeMessageSetExtension struct { func (x *FakeMessageSetExtension) Reset() { *x = FakeMessageSetExtension{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[16] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1342,7 +1556,7 @@ func (x *FakeMessageSetExtension) String() string { func (*FakeMessageSetExtension) ProtoMessage() {} func (x *FakeMessageSetExtension) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[16] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1355,7 +1569,7 @@ func (x *FakeMessageSetExtension) ProtoReflect() protoreflect.Message { // Deprecated: Use FakeMessageSetExtension.ProtoReflect.Descriptor instead. func (*FakeMessageSetExtension) Descriptor() ([]byte, []int) { - return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{16} + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{18} } func (x *FakeMessageSetExtension) GetOptString() string { @@ -1394,7 +1608,7 @@ type KnownTypes struct { func (x *KnownTypes) Reset() { *x = KnownTypes{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[17] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1407,7 +1621,7 @@ func (x *KnownTypes) String() string { func (*KnownTypes) ProtoMessage() {} func (x *KnownTypes) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[17] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1420,7 +1634,7 @@ func (x *KnownTypes) ProtoReflect() protoreflect.Message { // Deprecated: Use KnownTypes.ProtoReflect.Descriptor instead. func (*KnownTypes) Descriptor() ([]byte, []int) { - return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{17} + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{19} } func (x *KnownTypes) GetOptBool() *wrapperspb.BoolValue { @@ -1562,7 +1776,7 @@ type Nests_OptGroup struct { func (x *Nests_OptGroup) Reset() { *x = Nests_OptGroup{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[20] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1575,7 +1789,7 @@ func (x *Nests_OptGroup) String() string { func (*Nests_OptGroup) ProtoMessage() {} func (x *Nests_OptGroup) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[20] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1588,7 +1802,7 @@ func (x *Nests_OptGroup) ProtoReflect() protoreflect.Message { // Deprecated: Use Nests_OptGroup.ProtoReflect.Descriptor instead. func (*Nests_OptGroup) Descriptor() ([]byte, []int) { - return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{6, 0} + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{8, 0} } func (x *Nests_OptGroup) GetOptString() string { @@ -1623,7 +1837,7 @@ type Nests_RptGroup struct { func (x *Nests_RptGroup) Reset() { *x = Nests_RptGroup{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[21] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1636,7 +1850,7 @@ func (x *Nests_RptGroup) String() string { func (*Nests_RptGroup) ProtoMessage() {} func (x *Nests_RptGroup) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[21] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1649,7 +1863,7 @@ func (x *Nests_RptGroup) ProtoReflect() protoreflect.Message { // Deprecated: Use Nests_RptGroup.ProtoReflect.Descriptor instead. func (*Nests_RptGroup) Descriptor() ([]byte, []int) { - return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{6, 1} + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{8, 1} } func (x *Nests_RptGroup) GetRptString() []string { @@ -1670,7 +1884,7 @@ type Nests_OptGroup_OptNestedGroup struct { func (x *Nests_OptGroup_OptNestedGroup) Reset() { *x = Nests_OptGroup_OptNestedGroup{} if protoimpl.UnsafeEnabled { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[22] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1683,7 +1897,7 @@ func (x *Nests_OptGroup_OptNestedGroup) String() string { func (*Nests_OptGroup_OptNestedGroup) ProtoMessage() {} func (x *Nests_OptGroup_OptNestedGroup) ProtoReflect() protoreflect.Message { - mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[22] + mi := &file_internal_testprotos_textpbeditions_test2_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1696,7 +1910,7 @@ func (x *Nests_OptGroup_OptNestedGroup) ProtoReflect() protoreflect.Message { // Deprecated: Use Nests_OptGroup_OptNestedGroup.ProtoReflect.Descriptor instead. func (*Nests_OptGroup_OptNestedGroup) Descriptor() ([]byte, []int) { - return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{6, 0, 0} + return file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP(), []int{8, 0, 0} } func (x *Nests_OptGroup_OptNestedGroup) GetOptFixed32() uint32 { @@ -2014,302 +2228,330 @@ var file_internal_testprotos_textpbeditions_test2_proto_rawDesc = []byte{ 0x01, 0x28, 0x0c, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x02, 0x52, 0x06, 0x73, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x08, 0x73, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x02, 0x52, 0x07, 0x73, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x22, 0x97, 0x02, 0x0a, 0x05, 0x45, 0x6e, 0x75, 0x6d, 0x73, 0x12, 0x2b, - 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x72, 0x69, 0x6e, 0x67, 0x22, 0x43, 0x0a, 0x0d, 0x55, 0x54, 0x46, 0x38, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x32, 0x0a, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x07, 0xaa, 0x01, 0x04, 0x08, 0x02, 0x20, 0x02, 0x52, 0x0f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x5c, 0x0a, 0x12, 0x4e, 0x65, 0x73, + 0x74, 0x73, 0x55, 0x54, 0x46, 0x38, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, + 0x46, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x65, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x55, 0x54, 0x46, 0x38, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xf7, 0x03, 0x0a, 0x05, 0x45, 0x6e, 0x75, 0x6d, + 0x73, 0x12, 0x2b, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x2b, + 0x0a, 0x08, 0x72, 0x70, 0x74, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x6e, - 0x75, 0x6d, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x08, 0x72, - 0x70, 0x74, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x10, 0x2e, - 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, - 0x07, 0x72, 0x70, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x44, 0x0a, 0x0f, 0x6f, 0x70, 0x74, 0x5f, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, - 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, - 0x0d, 0x6f, 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x44, - 0x0a, 0x0f, 0x72, 0x70, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, - 0x6d, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, + 0x75, 0x6d, 0x52, 0x07, 0x72, 0x70, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, 0x0a, 0x0d, 0x69, + 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x4f, 0x70, 0x65, 0x6e, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x02, 0x52, + 0x0c, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x44, 0x0a, + 0x0f, 0x6f, 0x70, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0d, 0x6f, 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, + 0x6e, 0x75, 0x6d, 0x12, 0x44, 0x0a, 0x0f, 0x72, 0x70, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x70, + 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x73, 0x2e, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0d, 0x72, 0x70, 0x74, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x59, 0x0a, 0x14, 0x69, 0x6d, 0x70, + 0x6c, 0x69, 0x63, 0x69, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, + 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0d, 0x72, 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x64, 0x4f, 0x70, 0x65, 0x6e, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x02, + 0x52, 0x12, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x22, 0x28, 0x0a, 0x0a, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x07, 0x0a, 0x03, 0x55, 0x4e, 0x4f, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x44, - 0x4f, 0x53, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x49, 0x45, 0x5a, 0x10, 0x0a, 0x22, 0x94, - 0x02, 0x0a, 0x07, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x70, - 0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x03, 0x28, 0x08, 0x52, 0x07, 0x72, 0x70, - 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x70, 0x74, 0x5f, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x72, 0x70, 0x74, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x70, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x08, 0x72, 0x70, 0x74, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, - 0x1d, 0x0a, 0x0a, 0x72, 0x70, 0x74, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x1d, - 0x0a, 0x0a, 0x72, 0x70, 0x74, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x04, 0x52, 0x09, 0x72, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x1b, 0x0a, - 0x09, 0x72, 0x70, 0x74, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x03, 0x28, 0x02, - 0x52, 0x08, 0x72, 0x70, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x70, - 0x74, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x01, 0x52, 0x09, - 0x72, 0x70, 0x74, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x70, 0x74, - 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, - 0x70, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x70, 0x74, 0x5f, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x70, 0x74, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xa4, 0x02, 0x0a, 0x04, 0x4d, 0x61, 0x70, 0x73, 0x12, 0x42, - 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x54, 0x6f, 0x53, 0x74, - 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x54, 0x6f, 0x53, - 0x74, 0x72, 0x12, 0x45, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x5f, 0x74, 0x6f, 0x5f, 0x6e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x62, 0x65, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x54, - 0x6f, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x73, 0x74, - 0x72, 0x54, 0x6f, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x1a, 0x3d, 0x0a, 0x0f, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x54, 0x6f, 0x53, 0x74, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x52, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x54, - 0x6f, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x28, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5a, 0x0a, 0x06, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x31, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x6e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x65, 0x64, + 0x4f, 0x53, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x49, 0x45, 0x5a, 0x10, 0x0a, 0x22, 0x41, + 0x0a, 0x0e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x65, 0x6e, 0x45, 0x6e, 0x75, 0x6d, + 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, + 0x04, 0x45, 0x49, 0x4e, 0x53, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x57, 0x45, 0x49, 0x10, + 0x02, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x48, 0x4e, 0x10, 0x0a, 0x1a, 0x04, 0x3a, 0x02, 0x10, + 0x01, 0x22, 0x94, 0x02, 0x0a, 0x07, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x12, 0x19, 0x0a, + 0x08, 0x72, 0x70, 0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x03, 0x28, 0x08, 0x52, + 0x07, 0x72, 0x70, 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x70, 0x74, 0x5f, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x72, 0x70, 0x74, + 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x70, 0x74, 0x5f, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x08, 0x72, 0x70, 0x74, 0x49, 0x6e, 0x74, + 0x36, 0x34, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x70, 0x74, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x70, 0x74, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x04, 0x52, 0x09, 0x72, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x70, 0x74, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x02, 0x52, 0x08, 0x72, 0x70, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x1d, 0x0a, + 0x0a, 0x72, 0x70, 0x74, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, + 0x01, 0x52, 0x09, 0x72, 0x70, 0x74, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x72, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x09, 0x72, 0x70, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x72, + 0x70, 0x74, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, + 0x72, 0x70, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xa4, 0x02, 0x0a, 0x04, 0x4d, 0x61, 0x70, + 0x73, 0x12, 0x42, 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x74, + 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x54, + 0x6f, 0x53, 0x74, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x54, 0x6f, 0x53, 0x74, 0x72, 0x12, 0x45, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x5f, 0x74, 0x6f, 0x5f, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, + 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x73, 0x2e, 0x53, + 0x74, 0x72, 0x54, 0x6f, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0b, 0x73, 0x74, 0x72, 0x54, 0x6f, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x1a, 0x3d, 0x0a, 0x0f, + 0x49, 0x6e, 0x74, 0x33, 0x32, 0x54, 0x6f, 0x53, 0x74, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x52, 0x0a, 0x10, 0x53, + 0x74, 0x72, 0x54, 0x6f, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x28, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x5a, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x70, 0x74, + 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, + 0x70, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x31, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, + 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x52, 0x09, 0x6f, 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0x94, 0x04, 0x0a, 0x05, + 0x4e, 0x65, 0x73, 0x74, 0x73, 0x12, 0x31, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x6e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x09, 0x6f, - 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0x94, 0x04, 0x0a, 0x05, 0x4e, 0x65, 0x73, - 0x74, 0x73, 0x12, 0x31, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x4e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x3d, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x28, 0x02, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x12, 0x31, 0x0a, 0x0a, 0x72, 0x70, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x09, 0x72, 0x70, - 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x3f, 0x0a, 0x08, 0x72, 0x70, 0x74, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x65, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x73, 0x2e, 0x52, 0x70, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x07, 0xaa, 0x01, 0x04, 0x18, 0x02, 0x28, 0x02, 0x52, 0x08, - 0x72, 0x70, 0x74, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0xe9, 0x01, 0x0a, 0x08, 0x4f, 0x70, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x12, 0x31, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x09, 0x6f, 0x70, - 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x58, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, - 0x74, 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4f, 0x70, 0x74, 0x4e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x28, - 0x02, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x1a, 0x31, 0x0a, 0x0e, 0x4f, 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x70, 0x74, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x33, 0x32, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0a, 0x6f, 0x70, 0x74, 0x46, 0x69, 0x78, - 0x65, 0x64, 0x33, 0x32, 0x1a, 0x29, 0x0a, 0x08, 0x52, 0x70, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x70, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, - 0x0e, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, - 0x91, 0x02, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x73, 0x12, 0x20, 0x0a, - 0x08, 0x72, 0x65, 0x71, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x42, - 0x05, 0xaa, 0x01, 0x02, 0x08, 0x03, 0x52, 0x07, 0x72, 0x65, 0x71, 0x42, 0x6f, 0x6f, 0x6c, 0x12, - 0x28, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x10, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x03, 0x52, 0x0b, 0x72, 0x65, - 0x71, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x24, 0x0a, 0x0a, 0x72, 0x65, 0x71, - 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x42, 0x05, 0xaa, - 0x01, 0x02, 0x08, 0x03, 0x52, 0x09, 0x72, 0x65, 0x71, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, - 0x24, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x03, 0x52, 0x09, 0x72, 0x65, 0x71, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x32, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x5f, 0x65, 0x6e, 0x75, - 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x03, - 0x52, 0x07, 0x72, 0x65, 0x71, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x71, - 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x03, 0x52, 0x09, 0x72, 0x65, 0x71, 0x4e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x22, 0x56, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x5f, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, - 0x03, 0x52, 0x09, 0x72, 0x65, 0x71, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x0a, 0x0a, - 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x6f, 0x70, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x0a, 0x12, 0x4e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x12, 0x24, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x03, 0x52, 0x09, 0x72, 0x65, - 0x71, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x98, 0x03, 0x0a, 0x10, 0x49, 0x6e, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x0a, - 0x6f, 0x70, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x03, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x12, 0x3d, 0x0a, 0x0a, 0x72, 0x70, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x52, 0x09, 0x72, 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x12, 0x51, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x5f, 0x74, 0x6f, 0x5f, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x6e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x72, 0x54, 0x6f, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x54, 0x6f, 0x4e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x12, 0x43, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x65, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x57, 0x69, - 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, - 0x65, 0x6f, 0x66, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x1a, 0x5e, 0x0a, 0x10, 0x53, 0x74, 0x72, - 0x54, 0x6f, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x34, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x75, 0x6e, 0x69, - 0x6f, 0x6e, 0x22, 0x69, 0x0a, 0x0a, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, - 0x19, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x65, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x70, - 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6f, - 0x70, 0x74, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x2a, 0x04, 0x08, 0x14, 0x10, 0x65, 0x22, 0xe4, 0x04, - 0x0a, 0x13, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x32, 0x38, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, - 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x33, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6f, 0x70, 0x74, 0x45, 0x78, 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x32, - 0x3c, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x34, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x6f, 0x70, 0x74, 0x45, 0x78, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x32, 0x4a, 0x0a, - 0x0c, 0x6f, 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x16, 0x2e, - 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x35, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x70, 0x62, - 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0a, 0x6f, - 0x70, 0x74, 0x45, 0x78, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x32, 0x50, 0x0a, 0x0e, 0x6f, 0x70, 0x74, - 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x16, 0x2e, 0x70, 0x62, - 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x36, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x65, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x0c, 0x6f, - 0x70, 0x74, 0x45, 0x78, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x32, 0x5b, 0x0a, 0x0f, 0x6f, - 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x16, - 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, - 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x37, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, - 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, - 0x6c, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x52, 0x0d, 0x6f, 0x70, 0x74, 0x45, 0x78, - 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x32, 0x3c, 0x0a, 0x0e, 0x72, 0x70, 0x74, 0x5f, - 0x65, 0x78, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x65, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x3d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x70, 0x74, 0x45, 0x78, 0x74, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x32, 0x4a, 0x0a, 0x0c, 0x72, 0x70, 0x74, 0x5f, 0x65, 0x78, - 0x74, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x3e, - 0x20, 0x03, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0a, 0x72, 0x70, 0x74, 0x45, 0x78, 0x74, 0x45, 0x6e, - 0x75, 0x6d, 0x32, 0x50, 0x0a, 0x0e, 0x72, 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x3f, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x0c, 0x72, 0x70, 0x74, 0x45, 0x78, 0x74, 0x4e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x22, 0x1a, 0x0a, 0x0a, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, - 0x65, 0x74, 0x2a, 0x08, 0x08, 0x04, 0x10, 0xff, 0xff, 0xff, 0xff, 0x07, 0x3a, 0x02, 0x08, 0x01, - 0x22, 0xe0, 0x02, 0x0a, 0x13, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x45, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, + 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x3d, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x65, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x73, 0x2e, 0x4f, 0x70, + 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x28, 0x02, 0x52, 0x08, 0x6f, + 0x70, 0x74, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x31, 0x0a, 0x0a, 0x72, 0x70, 0x74, 0x5f, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, + 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, + 0x09, 0x72, 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x3f, 0x0a, 0x08, 0x72, 0x70, + 0x74, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, + 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x73, 0x2e, + 0x52, 0x70, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x07, 0xaa, 0x01, 0x04, 0x18, 0x02, 0x28, + 0x02, 0x52, 0x08, 0x72, 0x70, 0x74, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0xe9, 0x01, 0x0a, 0x08, + 0x4f, 0x70, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, - 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x32, 0x6b, 0x0a, 0x15, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x16, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x13, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x32, 0x72, 0x0a, 0x19, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x16, 0x6e, 0x6f, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x45, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0x49, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x5f, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x18, 0x1e, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x09, 0x65, 0x78, 0x74, 0x4e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x22, 0x1a, 0x0a, 0x0e, 0x46, 0x61, 0x6b, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x53, 0x65, 0x74, 0x2a, 0x08, 0x08, 0x04, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, - 0xad, 0x01, 0x0a, 0x17, 0x46, 0x61, 0x6b, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, + 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x31, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, + 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, + 0x09, 0x6f, 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x58, 0x0a, 0x0e, 0x6f, 0x70, + 0x74, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x4e, 0x65, 0x73, 0x74, 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4f, + 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x05, 0xaa, + 0x01, 0x02, 0x28, 0x02, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x31, 0x0a, 0x0e, 0x4f, 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x70, 0x74, 0x5f, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0a, 0x6f, 0x70, 0x74, + 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x1a, 0x29, 0x0a, 0x08, 0x52, 0x70, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x70, 0x74, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x22, 0x91, 0x02, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x73, + 0x12, 0x20, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x03, 0x52, 0x07, 0x72, 0x65, 0x71, 0x42, 0x6f, + 0x6f, 0x6c, 0x12, 0x28, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x36, 0x34, 0x18, 0x02, 0x20, 0x01, 0x28, 0x10, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x03, 0x52, + 0x0b, 0x72, 0x65, 0x71, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x24, 0x0a, 0x0a, + 0x72, 0x65, 0x71, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, + 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x03, 0x52, 0x09, 0x72, 0x65, 0x71, 0x44, 0x6f, 0x75, 0x62, + 0x6c, 0x65, 0x12, 0x24, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x03, 0x52, 0x09, 0x72, + 0x65, 0x71, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x32, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x5f, + 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x65, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x05, 0xaa, 0x01, + 0x02, 0x08, 0x03, 0x52, 0x07, 0x72, 0x65, 0x71, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x38, 0x0a, 0x0a, + 0x72, 0x65, 0x71, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x03, 0x52, 0x09, 0x72, 0x65, 0x71, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0x56, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, + 0x6c, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0a, 0x72, 0x65, 0x71, + 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x05, 0xaa, + 0x01, 0x02, 0x08, 0x03, 0x52, 0x09, 0x72, 0x65, 0x71, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, + 0x1d, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x3a, + 0x0a, 0x12, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, + 0x69, 0x72, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x5f, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x03, 0x52, + 0x09, 0x72, 0x65, 0x71, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x98, 0x03, 0x0a, 0x10, 0x49, + 0x6e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, + 0x44, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x64, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x03, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x3d, 0x0a, 0x0a, 0x72, 0x70, 0x74, 0x5f, 0x6e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x65, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x57, 0x69, 0x74, + 0x68, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x52, 0x09, 0x72, 0x70, 0x74, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x12, 0x51, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x5f, 0x74, 0x6f, 0x5f, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x62, + 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x6e, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x72, 0x54, 0x6f, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x54, + 0x6f, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x43, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, + 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x48, 0x00, 0x52, + 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x1a, 0x5e, 0x0a, 0x10, + 0x53, 0x74, 0x72, 0x54, 0x6f, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x34, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x07, 0x0a, 0x05, + 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x22, 0x69, 0x0a, 0x0a, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x65, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x1b, 0x0a, + 0x09, 0x6f, 0x70, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x6f, 0x70, 0x74, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x2a, 0x04, 0x08, 0x14, 0x10, 0x65, + 0x22, 0xe4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x43, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x32, 0x38, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x5f, + 0x65, 0x78, 0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x33, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6f, 0x70, 0x74, 0x45, 0x78, 0x74, 0x42, 0x6f, + 0x6f, 0x6c, 0x32, 0x3c, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x34, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x70, 0x74, 0x45, 0x78, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x32, 0x4a, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x65, 0x6e, 0x75, 0x6d, + 0x12, 0x16, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x35, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, + 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x6e, 0x75, 0x6d, + 0x52, 0x0a, 0x6f, 0x70, 0x74, 0x45, 0x78, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x32, 0x50, 0x0a, 0x0e, + 0x6f, 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x16, + 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x36, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, + 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x52, 0x0c, 0x6f, 0x70, 0x74, 0x45, 0x78, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x32, 0x5b, + 0x0a, 0x0f, 0x6f, 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, + 0x6c, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x37, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x50, 0x61, 0x72, + 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x52, 0x0d, 0x6f, 0x70, + 0x74, 0x45, 0x78, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x32, 0x3c, 0x0a, 0x0e, 0x72, + 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x2e, + 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x3d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x70, 0x74, + 0x45, 0x78, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x32, 0x4a, 0x0a, 0x0c, 0x72, 0x70, 0x74, + 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x65, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x3e, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0a, 0x72, 0x70, 0x74, 0x45, 0x78, + 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x32, 0x50, 0x0a, 0x0e, 0x72, 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, + 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x3f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x0c, 0x72, 0x70, 0x74, 0x45, 0x78, + 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0x1a, 0x0a, 0x0a, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x53, 0x65, 0x74, 0x2a, 0x08, 0x08, 0x04, 0x10, 0xff, 0xff, 0xff, 0xff, 0x07, 0x3a, + 0x02, 0x08, 0x01, 0x22, 0xe0, 0x02, 0x0a, 0x13, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x6f, 0x70, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x32, 0x73, 0x0a, 0x15, 0x6d, 0x65, + 0x09, 0x6f, 0x70, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x32, 0x6b, 0x0a, 0x15, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x46, 0x61, 0x6b, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x46, 0x61, 0x6b, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, - 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, - 0x9e, 0x08, 0x0a, 0x0a, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x35, - 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x6f, 0x70, - 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x70, 0x74, 0x5f, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, - 0x38, 0x0a, 0x09, 0x6f, 0x70, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x08, 0x6f, 0x70, 0x74, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x3b, 0x0a, 0x0a, 0x6f, 0x70, 0x74, - 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x13, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x45, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0x72, 0x0a, 0x19, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x18, 0x14, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x16, 0x6e, 0x6f, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, + 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0x49, 0x0a, 0x0a, 0x65, + 0x78, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x65, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, + 0x74, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x09, 0x65, 0x78, 0x74, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0x1a, 0x0a, 0x0e, 0x46, 0x61, 0x6b, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x2a, 0x08, 0x08, 0x04, 0x10, 0x80, 0x80, 0x80, + 0x80, 0x02, 0x22, 0xad, 0x01, 0x0a, 0x17, 0x46, 0x61, 0x6b, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x53, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1d, + 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x32, 0x73, 0x0a, + 0x15, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x65, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x61, 0x6b, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, + 0x65, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x61, 0x6b, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x53, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0x9e, 0x08, 0x0a, 0x0a, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x73, 0x12, 0x35, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x07, 0x6f, 0x70, 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x70, 0x74, 0x5f, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, + 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x49, 0x6e, 0x74, + 0x33, 0x32, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x70, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x3b, 0x0a, 0x0a, + 0x6f, 0x70, 0x74, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, + 0x6f, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x3b, 0x0a, 0x0a, 0x6f, 0x70, 0x74, + 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x6f, 0x70, 0x74, - 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x3b, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x75, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, - 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x55, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x70, 0x74, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x3b, 0x0a, - 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x6f, 0x70, 0x74, + 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x70, 0x74, 0x5f, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, + 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, + 0x12, 0x3b, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x3b, 0x0a, + 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x09, 0x6f, 0x70, 0x74, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x6f, 0x70, - 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x6f, 0x70, - 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x70, 0x74, 0x5f, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, - 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x12, 0x3c, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0b, 0x6f, 0x70, 0x74, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x3f, 0x0a, 0x0d, 0x6f, 0x70, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0c, 0x6f, 0x70, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x12, 0x36, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0x19, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x09, 0x6f, - 0x70, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x35, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x5f, - 0x6c, 0x69, 0x73, 0x74, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x33, 0x0a, 0x09, 0x6f, 0x70, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1b, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, - 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x33, 0x0a, 0x09, 0x6f, - 0x70, 0x74, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x2d, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x5f, 0x61, 0x6e, 0x79, 0x18, 0x20, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x06, 0x6f, 0x70, 0x74, 0x41, 0x6e, 0x79, 0x12, - 0x3f, 0x0a, 0x0d, 0x6f, 0x70, 0x74, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x6d, 0x61, 0x73, 0x6b, - 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, - 0x73, 0x6b, 0x52, 0x0c, 0x6f, 0x70, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x6d, 0x61, 0x73, 0x6b, - 0x2a, 0x21, 0x0a, 0x04, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, - 0x01, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x57, 0x4f, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x45, - 0x4e, 0x10, 0x0a, 0x3a, 0x38, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x62, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x09, 0x6f, 0x70, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x70, + 0x74, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x42, + 0x79, 0x74, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x6f, 0x70, 0x74, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x0d, 0x6f, 0x70, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x6f, 0x70, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x12, 0x36, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x52, 0x09, 0x6f, 0x70, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x35, 0x0a, 0x08, 0x6f, + 0x70, 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x33, 0x0a, 0x09, 0x6f, 0x70, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6f, + 0x70, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x5f, 0x6e, + 0x75, 0x6c, 0x6c, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x33, + 0x0a, 0x09, 0x6f, 0x70, 0x74, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x1e, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x12, 0x2d, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x5f, 0x61, 0x6e, 0x79, 0x18, 0x20, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x06, 0x6f, 0x70, 0x74, 0x41, + 0x6e, 0x79, 0x12, 0x3f, 0x0a, 0x0d, 0x6f, 0x70, 0x74, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x6d, + 0x61, 0x73, 0x6b, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0c, 0x6f, 0x70, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x6d, + 0x61, 0x73, 0x6b, 0x2a, 0x21, 0x0a, 0x04, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x07, 0x0a, 0x03, 0x4f, + 0x4e, 0x45, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x57, 0x4f, 0x10, 0x02, 0x12, 0x07, 0x0a, + 0x03, 0x54, 0x45, 0x4e, 0x10, 0x0a, 0x2a, 0x3b, 0x0a, 0x08, 0x4f, 0x70, 0x65, 0x6e, 0x45, 0x6e, + 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, + 0x08, 0x0a, 0x04, 0x45, 0x49, 0x4e, 0x53, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x57, 0x45, + 0x49, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x48, 0x4e, 0x10, 0x0a, 0x1a, 0x04, 0x3a, + 0x02, 0x10, 0x01, 0x3a, 0x38, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6f, 0x70, 0x74, 0x45, 0x78, 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x3a, 0x3c, 0x0a, @@ -2353,12 +2595,12 @@ var file_internal_testprotos_textpbeditions_test2_proto_rawDesc = []byte{ 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x61, 0x6b, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, - 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x44, 0x5a, 0x3d, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x46, 0x5a, 0x3d, 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, 0x74, 0x65, 0x78, 0x74, 0x70, 0x62, 0x65, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x92, 0x03, 0x02, 0x10, 0x02, 0x62, 0x08, 0x65, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x70, 0xe8, 0x07, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x92, 0x03, 0x04, 0x10, 0x02, 0x20, 0x03, 0x62, 0x08, 0x65, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x70, 0xe8, 0x07, } var ( @@ -2373,135 +2615,142 @@ func file_internal_testprotos_textpbeditions_test2_proto_rawDescGZIP() []byte { return file_internal_testprotos_textpbeditions_test2_proto_rawDescData } -var file_internal_testprotos_textpbeditions_test2_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_internal_testprotos_textpbeditions_test2_proto_msgTypes = make([]protoimpl.MessageInfo, 24) +var file_internal_testprotos_textpbeditions_test2_proto_enumTypes = make([]protoimpl.EnumInfo, 4) +var file_internal_testprotos_textpbeditions_test2_proto_msgTypes = make([]protoimpl.MessageInfo, 26) var file_internal_testprotos_textpbeditions_test2_proto_goTypes = []interface{}{ (Enum)(0), // 0: pbeditions.Enum - (Enums_NestedEnum)(0), // 1: pbeditions.Enums.NestedEnum - (*Scalars)(nil), // 2: pbeditions.Scalars - (*ImplicitScalars)(nil), // 3: pbeditions.ImplicitScalars - (*Enums)(nil), // 4: pbeditions.Enums - (*Repeats)(nil), // 5: pbeditions.Repeats - (*Maps)(nil), // 6: pbeditions.Maps - (*Nested)(nil), // 7: pbeditions.Nested - (*Nests)(nil), // 8: pbeditions.Nests - (*Requireds)(nil), // 9: pbeditions.Requireds - (*PartialRequired)(nil), // 10: pbeditions.PartialRequired - (*NestedWithRequired)(nil), // 11: pbeditions.NestedWithRequired - (*IndirectRequired)(nil), // 12: pbeditions.IndirectRequired - (*Extensions)(nil), // 13: pbeditions.Extensions - (*ExtensionsContainer)(nil), // 14: pbeditions.ExtensionsContainer - (*MessageSet)(nil), // 15: pbeditions.MessageSet - (*MessageSetExtension)(nil), // 16: pbeditions.MessageSetExtension - (*FakeMessageSet)(nil), // 17: pbeditions.FakeMessageSet - (*FakeMessageSetExtension)(nil), // 18: pbeditions.FakeMessageSetExtension - (*KnownTypes)(nil), // 19: pbeditions.KnownTypes - nil, // 20: pbeditions.Maps.Int32ToStrEntry - nil, // 21: pbeditions.Maps.StrToNestedEntry - (*Nests_OptGroup)(nil), // 22: pbeditions.Nests.OptGroup - (*Nests_RptGroup)(nil), // 23: pbeditions.Nests.RptGroup - (*Nests_OptGroup_OptNestedGroup)(nil), // 24: pbeditions.Nests.OptGroup.OptNestedGroup - nil, // 25: pbeditions.IndirectRequired.StrToNestedEntry - (*wrapperspb.BoolValue)(nil), // 26: google.protobuf.BoolValue - (*wrapperspb.Int32Value)(nil), // 27: google.protobuf.Int32Value - (*wrapperspb.Int64Value)(nil), // 28: google.protobuf.Int64Value - (*wrapperspb.UInt32Value)(nil), // 29: google.protobuf.UInt32Value - (*wrapperspb.UInt64Value)(nil), // 30: google.protobuf.UInt64Value - (*wrapperspb.FloatValue)(nil), // 31: google.protobuf.FloatValue - (*wrapperspb.DoubleValue)(nil), // 32: google.protobuf.DoubleValue - (*wrapperspb.StringValue)(nil), // 33: google.protobuf.StringValue - (*wrapperspb.BytesValue)(nil), // 34: google.protobuf.BytesValue - (*durationpb.Duration)(nil), // 35: google.protobuf.Duration - (*timestamppb.Timestamp)(nil), // 36: google.protobuf.Timestamp - (*structpb.Struct)(nil), // 37: google.protobuf.Struct - (*structpb.ListValue)(nil), // 38: google.protobuf.ListValue - (*structpb.Value)(nil), // 39: google.protobuf.Value - (structpb.NullValue)(0), // 40: google.protobuf.NullValue - (*emptypb.Empty)(nil), // 41: google.protobuf.Empty - (*anypb.Any)(nil), // 42: google.protobuf.Any - (*fieldmaskpb.FieldMask)(nil), // 43: google.protobuf.FieldMask + (OpenEnum)(0), // 1: pbeditions.OpenEnum + (Enums_NestedEnum)(0), // 2: pbeditions.Enums.NestedEnum + (Enums_NestedOpenEnum)(0), // 3: pbeditions.Enums.NestedOpenEnum + (*Scalars)(nil), // 4: pbeditions.Scalars + (*ImplicitScalars)(nil), // 5: pbeditions.ImplicitScalars + (*UTF8Validated)(nil), // 6: pbeditions.UTF8Validated + (*NestsUTF8Validated)(nil), // 7: pbeditions.NestsUTF8Validated + (*Enums)(nil), // 8: pbeditions.Enums + (*Repeats)(nil), // 9: pbeditions.Repeats + (*Maps)(nil), // 10: pbeditions.Maps + (*Nested)(nil), // 11: pbeditions.Nested + (*Nests)(nil), // 12: pbeditions.Nests + (*Requireds)(nil), // 13: pbeditions.Requireds + (*PartialRequired)(nil), // 14: pbeditions.PartialRequired + (*NestedWithRequired)(nil), // 15: pbeditions.NestedWithRequired + (*IndirectRequired)(nil), // 16: pbeditions.IndirectRequired + (*Extensions)(nil), // 17: pbeditions.Extensions + (*ExtensionsContainer)(nil), // 18: pbeditions.ExtensionsContainer + (*MessageSet)(nil), // 19: pbeditions.MessageSet + (*MessageSetExtension)(nil), // 20: pbeditions.MessageSetExtension + (*FakeMessageSet)(nil), // 21: pbeditions.FakeMessageSet + (*FakeMessageSetExtension)(nil), // 22: pbeditions.FakeMessageSetExtension + (*KnownTypes)(nil), // 23: pbeditions.KnownTypes + nil, // 24: pbeditions.Maps.Int32ToStrEntry + nil, // 25: pbeditions.Maps.StrToNestedEntry + (*Nests_OptGroup)(nil), // 26: pbeditions.Nests.OptGroup + (*Nests_RptGroup)(nil), // 27: pbeditions.Nests.RptGroup + (*Nests_OptGroup_OptNestedGroup)(nil), // 28: pbeditions.Nests.OptGroup.OptNestedGroup + nil, // 29: pbeditions.IndirectRequired.StrToNestedEntry + (*wrapperspb.BoolValue)(nil), // 30: google.protobuf.BoolValue + (*wrapperspb.Int32Value)(nil), // 31: google.protobuf.Int32Value + (*wrapperspb.Int64Value)(nil), // 32: google.protobuf.Int64Value + (*wrapperspb.UInt32Value)(nil), // 33: google.protobuf.UInt32Value + (*wrapperspb.UInt64Value)(nil), // 34: google.protobuf.UInt64Value + (*wrapperspb.FloatValue)(nil), // 35: google.protobuf.FloatValue + (*wrapperspb.DoubleValue)(nil), // 36: google.protobuf.DoubleValue + (*wrapperspb.StringValue)(nil), // 37: google.protobuf.StringValue + (*wrapperspb.BytesValue)(nil), // 38: google.protobuf.BytesValue + (*durationpb.Duration)(nil), // 39: google.protobuf.Duration + (*timestamppb.Timestamp)(nil), // 40: google.protobuf.Timestamp + (*structpb.Struct)(nil), // 41: google.protobuf.Struct + (*structpb.ListValue)(nil), // 42: google.protobuf.ListValue + (*structpb.Value)(nil), // 43: google.protobuf.Value + (structpb.NullValue)(0), // 44: google.protobuf.NullValue + (*emptypb.Empty)(nil), // 45: google.protobuf.Empty + (*anypb.Any)(nil), // 46: google.protobuf.Any + (*fieldmaskpb.FieldMask)(nil), // 47: google.protobuf.FieldMask } var file_internal_testprotos_textpbeditions_test2_proto_depIdxs = []int32{ - 0, // 0: pbeditions.Enums.opt_enum:type_name -> pbeditions.Enum - 0, // 1: pbeditions.Enums.rpt_enum:type_name -> pbeditions.Enum - 1, // 2: pbeditions.Enums.opt_nested_enum:type_name -> pbeditions.Enums.NestedEnum - 1, // 3: pbeditions.Enums.rpt_nested_enum:type_name -> pbeditions.Enums.NestedEnum - 20, // 4: pbeditions.Maps.int32_to_str:type_name -> pbeditions.Maps.Int32ToStrEntry - 21, // 5: pbeditions.Maps.str_to_nested:type_name -> pbeditions.Maps.StrToNestedEntry - 7, // 6: pbeditions.Nested.opt_nested:type_name -> pbeditions.Nested - 7, // 7: pbeditions.Nests.opt_nested:type_name -> pbeditions.Nested - 22, // 8: pbeditions.Nests.optgroup:type_name -> pbeditions.Nests.OptGroup - 7, // 9: pbeditions.Nests.rpt_nested:type_name -> pbeditions.Nested - 23, // 10: pbeditions.Nests.rptgroup:type_name -> pbeditions.Nests.RptGroup - 0, // 11: pbeditions.Requireds.req_enum:type_name -> pbeditions.Enum - 7, // 12: pbeditions.Requireds.req_nested:type_name -> pbeditions.Nested - 11, // 13: pbeditions.IndirectRequired.opt_nested:type_name -> pbeditions.NestedWithRequired - 11, // 14: pbeditions.IndirectRequired.rpt_nested:type_name -> pbeditions.NestedWithRequired - 25, // 15: pbeditions.IndirectRequired.str_to_nested:type_name -> pbeditions.IndirectRequired.StrToNestedEntry - 11, // 16: pbeditions.IndirectRequired.oneof_nested:type_name -> pbeditions.NestedWithRequired - 26, // 17: pbeditions.KnownTypes.opt_bool:type_name -> google.protobuf.BoolValue - 27, // 18: pbeditions.KnownTypes.opt_int32:type_name -> google.protobuf.Int32Value - 28, // 19: pbeditions.KnownTypes.opt_int64:type_name -> google.protobuf.Int64Value - 29, // 20: pbeditions.KnownTypes.opt_uint32:type_name -> google.protobuf.UInt32Value - 30, // 21: pbeditions.KnownTypes.opt_uint64:type_name -> google.protobuf.UInt64Value - 31, // 22: pbeditions.KnownTypes.opt_float:type_name -> google.protobuf.FloatValue - 32, // 23: pbeditions.KnownTypes.opt_double:type_name -> google.protobuf.DoubleValue - 33, // 24: pbeditions.KnownTypes.opt_string:type_name -> google.protobuf.StringValue - 34, // 25: pbeditions.KnownTypes.opt_bytes:type_name -> google.protobuf.BytesValue - 35, // 26: pbeditions.KnownTypes.opt_duration:type_name -> google.protobuf.Duration - 36, // 27: pbeditions.KnownTypes.opt_timestamp:type_name -> google.protobuf.Timestamp - 37, // 28: pbeditions.KnownTypes.opt_struct:type_name -> google.protobuf.Struct - 38, // 29: pbeditions.KnownTypes.opt_list:type_name -> google.protobuf.ListValue - 39, // 30: pbeditions.KnownTypes.opt_value:type_name -> google.protobuf.Value - 40, // 31: pbeditions.KnownTypes.opt_null:type_name -> google.protobuf.NullValue - 41, // 32: pbeditions.KnownTypes.opt_empty:type_name -> google.protobuf.Empty - 42, // 33: pbeditions.KnownTypes.opt_any:type_name -> google.protobuf.Any - 43, // 34: pbeditions.KnownTypes.opt_fieldmask:type_name -> google.protobuf.FieldMask - 7, // 35: pbeditions.Maps.StrToNestedEntry.value:type_name -> pbeditions.Nested - 7, // 36: pbeditions.Nests.OptGroup.opt_nested:type_name -> pbeditions.Nested - 24, // 37: pbeditions.Nests.OptGroup.optnestedgroup:type_name -> pbeditions.Nests.OptGroup.OptNestedGroup - 11, // 38: pbeditions.IndirectRequired.StrToNestedEntry.value:type_name -> pbeditions.NestedWithRequired - 13, // 39: pbeditions.opt_ext_bool:extendee -> pbeditions.Extensions - 13, // 40: pbeditions.opt_ext_string:extendee -> pbeditions.Extensions - 13, // 41: pbeditions.opt_ext_enum:extendee -> pbeditions.Extensions - 13, // 42: pbeditions.opt_ext_nested:extendee -> pbeditions.Extensions - 13, // 43: pbeditions.opt_ext_partial:extendee -> pbeditions.Extensions - 13, // 44: pbeditions.rpt_ext_fixed32:extendee -> pbeditions.Extensions - 13, // 45: pbeditions.rpt_ext_enum:extendee -> pbeditions.Extensions - 13, // 46: pbeditions.rpt_ext_nested:extendee -> pbeditions.Extensions - 15, // 47: pbeditions.message_set_extension:extendee -> pbeditions.MessageSet - 13, // 48: pbeditions.ExtensionsContainer.opt_ext_bool:extendee -> pbeditions.Extensions - 13, // 49: pbeditions.ExtensionsContainer.opt_ext_string:extendee -> pbeditions.Extensions - 13, // 50: pbeditions.ExtensionsContainer.opt_ext_enum:extendee -> pbeditions.Extensions - 13, // 51: pbeditions.ExtensionsContainer.opt_ext_nested:extendee -> pbeditions.Extensions - 13, // 52: pbeditions.ExtensionsContainer.opt_ext_partial:extendee -> pbeditions.Extensions - 13, // 53: pbeditions.ExtensionsContainer.rpt_ext_string:extendee -> pbeditions.Extensions - 13, // 54: pbeditions.ExtensionsContainer.rpt_ext_enum:extendee -> pbeditions.Extensions - 13, // 55: pbeditions.ExtensionsContainer.rpt_ext_nested:extendee -> pbeditions.Extensions - 15, // 56: pbeditions.MessageSetExtension.message_set_extension:extendee -> pbeditions.MessageSet - 15, // 57: pbeditions.MessageSetExtension.not_message_set_extension:extendee -> pbeditions.MessageSet - 15, // 58: pbeditions.MessageSetExtension.ext_nested:extendee -> pbeditions.MessageSet - 17, // 59: pbeditions.FakeMessageSetExtension.message_set_extension:extendee -> pbeditions.FakeMessageSet - 0, // 60: pbeditions.opt_ext_enum:type_name -> pbeditions.Enum - 7, // 61: pbeditions.opt_ext_nested:type_name -> pbeditions.Nested - 10, // 62: pbeditions.opt_ext_partial:type_name -> pbeditions.PartialRequired - 0, // 63: pbeditions.rpt_ext_enum:type_name -> pbeditions.Enum - 7, // 64: pbeditions.rpt_ext_nested:type_name -> pbeditions.Nested - 18, // 65: pbeditions.message_set_extension:type_name -> pbeditions.FakeMessageSetExtension - 0, // 66: pbeditions.ExtensionsContainer.opt_ext_enum:type_name -> pbeditions.Enum - 7, // 67: pbeditions.ExtensionsContainer.opt_ext_nested:type_name -> pbeditions.Nested - 10, // 68: pbeditions.ExtensionsContainer.opt_ext_partial:type_name -> pbeditions.PartialRequired - 0, // 69: pbeditions.ExtensionsContainer.rpt_ext_enum:type_name -> pbeditions.Enum - 7, // 70: pbeditions.ExtensionsContainer.rpt_ext_nested:type_name -> pbeditions.Nested - 16, // 71: pbeditions.MessageSetExtension.message_set_extension:type_name -> pbeditions.MessageSetExtension - 16, // 72: pbeditions.MessageSetExtension.not_message_set_extension:type_name -> pbeditions.MessageSetExtension - 7, // 73: pbeditions.MessageSetExtension.ext_nested:type_name -> pbeditions.Nested - 18, // 74: pbeditions.FakeMessageSetExtension.message_set_extension:type_name -> pbeditions.FakeMessageSetExtension - 75, // [75:75] is the sub-list for method output_type - 75, // [75:75] is the sub-list for method input_type - 60, // [60:75] is the sub-list for extension type_name - 39, // [39:60] is the sub-list for extension extendee - 0, // [0:39] is the sub-list for field type_name + 6, // 0: pbeditions.NestsUTF8Validated.validated_message:type_name -> pbeditions.UTF8Validated + 0, // 1: pbeditions.Enums.opt_enum:type_name -> pbeditions.Enum + 0, // 2: pbeditions.Enums.rpt_enum:type_name -> pbeditions.Enum + 1, // 3: pbeditions.Enums.implicit_enum:type_name -> pbeditions.OpenEnum + 2, // 4: pbeditions.Enums.opt_nested_enum:type_name -> pbeditions.Enums.NestedEnum + 2, // 5: pbeditions.Enums.rpt_nested_enum:type_name -> pbeditions.Enums.NestedEnum + 3, // 6: pbeditions.Enums.implicit_nested_enum:type_name -> pbeditions.Enums.NestedOpenEnum + 24, // 7: pbeditions.Maps.int32_to_str:type_name -> pbeditions.Maps.Int32ToStrEntry + 25, // 8: pbeditions.Maps.str_to_nested:type_name -> pbeditions.Maps.StrToNestedEntry + 11, // 9: pbeditions.Nested.opt_nested:type_name -> pbeditions.Nested + 11, // 10: pbeditions.Nests.opt_nested:type_name -> pbeditions.Nested + 26, // 11: pbeditions.Nests.optgroup:type_name -> pbeditions.Nests.OptGroup + 11, // 12: pbeditions.Nests.rpt_nested:type_name -> pbeditions.Nested + 27, // 13: pbeditions.Nests.rptgroup:type_name -> pbeditions.Nests.RptGroup + 0, // 14: pbeditions.Requireds.req_enum:type_name -> pbeditions.Enum + 11, // 15: pbeditions.Requireds.req_nested:type_name -> pbeditions.Nested + 15, // 16: pbeditions.IndirectRequired.opt_nested:type_name -> pbeditions.NestedWithRequired + 15, // 17: pbeditions.IndirectRequired.rpt_nested:type_name -> pbeditions.NestedWithRequired + 29, // 18: pbeditions.IndirectRequired.str_to_nested:type_name -> pbeditions.IndirectRequired.StrToNestedEntry + 15, // 19: pbeditions.IndirectRequired.oneof_nested:type_name -> pbeditions.NestedWithRequired + 30, // 20: pbeditions.KnownTypes.opt_bool:type_name -> google.protobuf.BoolValue + 31, // 21: pbeditions.KnownTypes.opt_int32:type_name -> google.protobuf.Int32Value + 32, // 22: pbeditions.KnownTypes.opt_int64:type_name -> google.protobuf.Int64Value + 33, // 23: pbeditions.KnownTypes.opt_uint32:type_name -> google.protobuf.UInt32Value + 34, // 24: pbeditions.KnownTypes.opt_uint64:type_name -> google.protobuf.UInt64Value + 35, // 25: pbeditions.KnownTypes.opt_float:type_name -> google.protobuf.FloatValue + 36, // 26: pbeditions.KnownTypes.opt_double:type_name -> google.protobuf.DoubleValue + 37, // 27: pbeditions.KnownTypes.opt_string:type_name -> google.protobuf.StringValue + 38, // 28: pbeditions.KnownTypes.opt_bytes:type_name -> google.protobuf.BytesValue + 39, // 29: pbeditions.KnownTypes.opt_duration:type_name -> google.protobuf.Duration + 40, // 30: pbeditions.KnownTypes.opt_timestamp:type_name -> google.protobuf.Timestamp + 41, // 31: pbeditions.KnownTypes.opt_struct:type_name -> google.protobuf.Struct + 42, // 32: pbeditions.KnownTypes.opt_list:type_name -> google.protobuf.ListValue + 43, // 33: pbeditions.KnownTypes.opt_value:type_name -> google.protobuf.Value + 44, // 34: pbeditions.KnownTypes.opt_null:type_name -> google.protobuf.NullValue + 45, // 35: pbeditions.KnownTypes.opt_empty:type_name -> google.protobuf.Empty + 46, // 36: pbeditions.KnownTypes.opt_any:type_name -> google.protobuf.Any + 47, // 37: pbeditions.KnownTypes.opt_fieldmask:type_name -> google.protobuf.FieldMask + 11, // 38: pbeditions.Maps.StrToNestedEntry.value:type_name -> pbeditions.Nested + 11, // 39: pbeditions.Nests.OptGroup.opt_nested:type_name -> pbeditions.Nested + 28, // 40: pbeditions.Nests.OptGroup.optnestedgroup:type_name -> pbeditions.Nests.OptGroup.OptNestedGroup + 15, // 41: pbeditions.IndirectRequired.StrToNestedEntry.value:type_name -> pbeditions.NestedWithRequired + 17, // 42: pbeditions.opt_ext_bool:extendee -> pbeditions.Extensions + 17, // 43: pbeditions.opt_ext_string:extendee -> pbeditions.Extensions + 17, // 44: pbeditions.opt_ext_enum:extendee -> pbeditions.Extensions + 17, // 45: pbeditions.opt_ext_nested:extendee -> pbeditions.Extensions + 17, // 46: pbeditions.opt_ext_partial:extendee -> pbeditions.Extensions + 17, // 47: pbeditions.rpt_ext_fixed32:extendee -> pbeditions.Extensions + 17, // 48: pbeditions.rpt_ext_enum:extendee -> pbeditions.Extensions + 17, // 49: pbeditions.rpt_ext_nested:extendee -> pbeditions.Extensions + 19, // 50: pbeditions.message_set_extension:extendee -> pbeditions.MessageSet + 17, // 51: pbeditions.ExtensionsContainer.opt_ext_bool:extendee -> pbeditions.Extensions + 17, // 52: pbeditions.ExtensionsContainer.opt_ext_string:extendee -> pbeditions.Extensions + 17, // 53: pbeditions.ExtensionsContainer.opt_ext_enum:extendee -> pbeditions.Extensions + 17, // 54: pbeditions.ExtensionsContainer.opt_ext_nested:extendee -> pbeditions.Extensions + 17, // 55: pbeditions.ExtensionsContainer.opt_ext_partial:extendee -> pbeditions.Extensions + 17, // 56: pbeditions.ExtensionsContainer.rpt_ext_string:extendee -> pbeditions.Extensions + 17, // 57: pbeditions.ExtensionsContainer.rpt_ext_enum:extendee -> pbeditions.Extensions + 17, // 58: pbeditions.ExtensionsContainer.rpt_ext_nested:extendee -> pbeditions.Extensions + 19, // 59: pbeditions.MessageSetExtension.message_set_extension:extendee -> pbeditions.MessageSet + 19, // 60: pbeditions.MessageSetExtension.not_message_set_extension:extendee -> pbeditions.MessageSet + 19, // 61: pbeditions.MessageSetExtension.ext_nested:extendee -> pbeditions.MessageSet + 21, // 62: pbeditions.FakeMessageSetExtension.message_set_extension:extendee -> pbeditions.FakeMessageSet + 0, // 63: pbeditions.opt_ext_enum:type_name -> pbeditions.Enum + 11, // 64: pbeditions.opt_ext_nested:type_name -> pbeditions.Nested + 14, // 65: pbeditions.opt_ext_partial:type_name -> pbeditions.PartialRequired + 0, // 66: pbeditions.rpt_ext_enum:type_name -> pbeditions.Enum + 11, // 67: pbeditions.rpt_ext_nested:type_name -> pbeditions.Nested + 22, // 68: pbeditions.message_set_extension:type_name -> pbeditions.FakeMessageSetExtension + 0, // 69: pbeditions.ExtensionsContainer.opt_ext_enum:type_name -> pbeditions.Enum + 11, // 70: pbeditions.ExtensionsContainer.opt_ext_nested:type_name -> pbeditions.Nested + 14, // 71: pbeditions.ExtensionsContainer.opt_ext_partial:type_name -> pbeditions.PartialRequired + 0, // 72: pbeditions.ExtensionsContainer.rpt_ext_enum:type_name -> pbeditions.Enum + 11, // 73: pbeditions.ExtensionsContainer.rpt_ext_nested:type_name -> pbeditions.Nested + 20, // 74: pbeditions.MessageSetExtension.message_set_extension:type_name -> pbeditions.MessageSetExtension + 20, // 75: pbeditions.MessageSetExtension.not_message_set_extension:type_name -> pbeditions.MessageSetExtension + 11, // 76: pbeditions.MessageSetExtension.ext_nested:type_name -> pbeditions.Nested + 22, // 77: pbeditions.FakeMessageSetExtension.message_set_extension:type_name -> pbeditions.FakeMessageSetExtension + 78, // [78:78] is the sub-list for method output_type + 78, // [78:78] is the sub-list for method input_type + 63, // [63:78] is the sub-list for extension type_name + 42, // [42:63] is the sub-list for extension extendee + 0, // [0:42] is the sub-list for field type_name } func init() { file_internal_testprotos_textpbeditions_test2_proto_init() } @@ -2535,7 +2784,7 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { } } file_internal_testprotos_textpbeditions_test2_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Enums); i { + switch v := v.(*UTF8Validated); i { case 0: return &v.state case 1: @@ -2547,7 +2796,7 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { } } file_internal_testprotos_textpbeditions_test2_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Repeats); i { + switch v := v.(*NestsUTF8Validated); i { case 0: return &v.state case 1: @@ -2559,7 +2808,7 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { } } file_internal_testprotos_textpbeditions_test2_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Maps); i { + switch v := v.(*Enums); i { case 0: return &v.state case 1: @@ -2571,7 +2820,7 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { } } file_internal_testprotos_textpbeditions_test2_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Nested); i { + switch v := v.(*Repeats); i { case 0: return &v.state case 1: @@ -2583,7 +2832,7 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { } } file_internal_testprotos_textpbeditions_test2_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Nests); i { + switch v := v.(*Maps); i { case 0: return &v.state case 1: @@ -2595,7 +2844,7 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { } } file_internal_testprotos_textpbeditions_test2_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Requireds); i { + switch v := v.(*Nested); i { case 0: return &v.state case 1: @@ -2607,7 +2856,7 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { } } file_internal_testprotos_textpbeditions_test2_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PartialRequired); i { + switch v := v.(*Nests); i { case 0: return &v.state case 1: @@ -2619,7 +2868,7 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { } } file_internal_testprotos_textpbeditions_test2_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NestedWithRequired); i { + switch v := v.(*Requireds); i { case 0: return &v.state case 1: @@ -2631,7 +2880,7 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { } } file_internal_testprotos_textpbeditions_test2_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IndirectRequired); i { + switch v := v.(*PartialRequired); i { case 0: return &v.state case 1: @@ -2643,6 +2892,30 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { } } file_internal_testprotos_textpbeditions_test2_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NestedWithRequired); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_testprotos_textpbeditions_test2_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IndirectRequired); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_testprotos_textpbeditions_test2_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Extensions); i { case 0: return &v.state @@ -2656,7 +2929,7 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { return nil } } - file_internal_testprotos_textpbeditions_test2_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_internal_testprotos_textpbeditions_test2_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExtensionsContainer); i { case 0: return &v.state @@ -2668,7 +2941,7 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { return nil } } - file_internal_testprotos_textpbeditions_test2_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_internal_testprotos_textpbeditions_test2_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MessageSet); i { case 0: return &v.state @@ -2682,7 +2955,7 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { return nil } } - file_internal_testprotos_textpbeditions_test2_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_internal_testprotos_textpbeditions_test2_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MessageSetExtension); i { case 0: return &v.state @@ -2694,7 +2967,7 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { return nil } } - file_internal_testprotos_textpbeditions_test2_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_internal_testprotos_textpbeditions_test2_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FakeMessageSet); i { case 0: return &v.state @@ -2708,7 +2981,7 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { return nil } } - file_internal_testprotos_textpbeditions_test2_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_internal_testprotos_textpbeditions_test2_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FakeMessageSetExtension); i { case 0: return &v.state @@ -2720,7 +2993,7 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { return nil } } - file_internal_testprotos_textpbeditions_test2_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_internal_testprotos_textpbeditions_test2_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*KnownTypes); i { case 0: return &v.state @@ -2732,7 +3005,7 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { return nil } } - file_internal_testprotos_textpbeditions_test2_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_internal_testprotos_textpbeditions_test2_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Nests_OptGroup); i { case 0: return &v.state @@ -2744,7 +3017,7 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { return nil } } - file_internal_testprotos_textpbeditions_test2_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_internal_testprotos_textpbeditions_test2_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Nests_RptGroup); i { case 0: return &v.state @@ -2756,7 +3029,7 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { return nil } } - file_internal_testprotos_textpbeditions_test2_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_internal_testprotos_textpbeditions_test2_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Nests_OptGroup_OptNestedGroup); i { case 0: return &v.state @@ -2769,7 +3042,7 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { } } } - file_internal_testprotos_textpbeditions_test2_proto_msgTypes[10].OneofWrappers = []interface{}{ + file_internal_testprotos_textpbeditions_test2_proto_msgTypes[12].OneofWrappers = []interface{}{ (*IndirectRequired_OneofNested)(nil), } type x struct{} @@ -2777,8 +3050,8 @@ func file_internal_testprotos_textpbeditions_test2_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_internal_testprotos_textpbeditions_test2_proto_rawDesc, - NumEnums: 2, - NumMessages: 24, + NumEnums: 4, + NumMessages: 26, NumExtensions: 21, NumServices: 0, }, diff --git a/internal/testprotos/textpbeditions/test2.proto b/internal/testprotos/textpbeditions/test2.proto index 079f0897..286663e2 100644 --- a/internal/testprotos/textpbeditions/test2.proto +++ b/internal/testprotos/textpbeditions/test2.proto @@ -17,6 +17,7 @@ import "google/protobuf/wrappers.proto"; option go_package = "google.golang.org/protobuf/internal/testprotos/textpbeditions"; option features.enum_type = CLOSED; +option features.utf8_validation = NONE; // Scalars contains scalar fields. message Scalars { @@ -74,18 +75,46 @@ enum Enum { TEN = 10; } +enum OpenEnum { + option features.enum_type = OPEN; + + UNKNOWN = 0; + EINS = 1; + ZWEI = 2; + ZEHN = 10; +} + +message UTF8Validated { + string validated_string = 1 + [features.utf8_validation = VERIFY, features.field_presence = IMPLICIT]; +} + +message NestsUTF8Validated { + UTF8Validated validated_message = 1; +} + // Message contains enum fields. message Enums { Enum opt_enum = 1; repeated Enum rpt_enum = 2; + OpenEnum implicit_enum = 5 [features.field_presence = IMPLICIT]; enum NestedEnum { UNO = 1; DOS = 2; DIEZ = 10; } + enum NestedOpenEnum { + option features.enum_type = OPEN; + + UNKNOWN = 0; + EINS = 1; + ZWEI = 2; + ZEHN = 10; + } NestedEnum opt_nested_enum = 3; repeated NestedEnum rpt_nested_enum = 4; + NestedOpenEnum implicit_nested_enum = 6 [features.field_presence = IMPLICIT]; } // Message contains repeated fields.