proto: wire decoding support

Add proto.Unmarshal.

Test cases all produce identical results to the v1 unmarshaller.

Change-Id: I42259266018a14e88a650c5d83a043cb17a3a15d
Reviewed-on: https://go-review.googlesource.com/c/153918
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/internal/testprotos/test/test.pb.go b/internal/testprotos/test/test.pb.go
new file mode 100644
index 0000000..8311d81
--- /dev/null
+++ b/internal/testprotos/test/test.pb.go
@@ -0,0 +1,2667 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: test.proto
+
+package testpb
+
+import (
+	proto "github.com/golang/protobuf/proto"
+	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
+	prototype "github.com/golang/protobuf/v2/reflect/prototype"
+	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type TestAllTypes_NestedEnum int32
+
+const (
+	TestAllTypes_FOO TestAllTypes_NestedEnum = 0
+	TestAllTypes_BAR TestAllTypes_NestedEnum = 1
+	TestAllTypes_BAZ TestAllTypes_NestedEnum = 2
+	TestAllTypes_NEG TestAllTypes_NestedEnum = -1
+)
+
+type xxx_TestAllTypes_NestedEnum TestAllTypes_NestedEnum
+
+func (e TestAllTypes_NestedEnum) ProtoReflect() protoreflect.Enum {
+	return (xxx_TestAllTypes_NestedEnum)(e)
+}
+func (e xxx_TestAllTypes_NestedEnum) Type() protoreflect.EnumType {
+	return xxx_Test_ProtoFile_EnumTypes[0]
+}
+func (e xxx_TestAllTypes_NestedEnum) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(e)
+}
+
+var TestAllTypes_NestedEnum_name = map[int32]string{
+	0:  "FOO",
+	1:  "BAR",
+	2:  "BAZ",
+	-1: "NEG",
+}
+
+var TestAllTypes_NestedEnum_value = map[string]int32{
+	"FOO": 0,
+	"BAR": 1,
+	"BAZ": 2,
+	"NEG": -1,
+}
+
+func (x TestAllTypes_NestedEnum) Enum() *TestAllTypes_NestedEnum {
+	p := new(TestAllTypes_NestedEnum)
+	*p = x
+	return p
+}
+
+func (x TestAllTypes_NestedEnum) String() string {
+	return proto.EnumName(TestAllTypes_NestedEnum_name, int32(x))
+}
+
+func (x *TestAllTypes_NestedEnum) UnmarshalJSON(data []byte) error {
+	value, err := proto.UnmarshalJSONEnum(TestAllTypes_NestedEnum_value, data, "TestAllTypes_NestedEnum")
+	if err != nil {
+		return err
+	}
+	*x = TestAllTypes_NestedEnum(value)
+	return nil
+}
+
+func (TestAllTypes_NestedEnum) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c161fcfdc0c3ff1e, []int{0, 0}
+}
+
+type TestAllTypes struct {
+	OptionalInt32          *int32                                 `protobuf:"varint,1,opt,name=optional_int32,json=optionalInt32" json:"optional_int32,omitempty"`
+	OptionalInt64          *int64                                 `protobuf:"varint,2,opt,name=optional_int64,json=optionalInt64" json:"optional_int64,omitempty"`
+	OptionalUint32         *uint32                                `protobuf:"varint,3,opt,name=optional_uint32,json=optionalUint32" json:"optional_uint32,omitempty"`
+	OptionalUint64         *uint64                                `protobuf:"varint,4,opt,name=optional_uint64,json=optionalUint64" json:"optional_uint64,omitempty"`
+	OptionalSint32         *int32                                 `protobuf:"zigzag32,5,opt,name=optional_sint32,json=optionalSint32" json:"optional_sint32,omitempty"`
+	OptionalSint64         *int64                                 `protobuf:"zigzag64,6,opt,name=optional_sint64,json=optionalSint64" json:"optional_sint64,omitempty"`
+	OptionalFixed32        *uint32                                `protobuf:"fixed32,7,opt,name=optional_fixed32,json=optionalFixed32" json:"optional_fixed32,omitempty"`
+	OptionalFixed64        *uint64                                `protobuf:"fixed64,8,opt,name=optional_fixed64,json=optionalFixed64" json:"optional_fixed64,omitempty"`
+	OptionalSfixed32       *int32                                 `protobuf:"fixed32,9,opt,name=optional_sfixed32,json=optionalSfixed32" json:"optional_sfixed32,omitempty"`
+	OptionalSfixed64       *int64                                 `protobuf:"fixed64,10,opt,name=optional_sfixed64,json=optionalSfixed64" json:"optional_sfixed64,omitempty"`
+	OptionalFloat          *float32                               `protobuf:"fixed32,11,opt,name=optional_float,json=optionalFloat" json:"optional_float,omitempty"`
+	OptionalDouble         *float64                               `protobuf:"fixed64,12,opt,name=optional_double,json=optionalDouble" json:"optional_double,omitempty"`
+	OptionalBool           *bool                                  `protobuf:"varint,13,opt,name=optional_bool,json=optionalBool" json:"optional_bool,omitempty"`
+	OptionalString         *string                                `protobuf:"bytes,14,opt,name=optional_string,json=optionalString" json:"optional_string,omitempty"`
+	OptionalBytes          []byte                                 `protobuf:"bytes,15,opt,name=optional_bytes,json=optionalBytes" json:"optional_bytes,omitempty"`
+	Optionalgroup          *TestAllTypes_OptionalGroup            `protobuf:"group,16,opt,name=OptionalGroup,json=optionalgroup" json:"optionalgroup,omitempty"`
+	OptionalNestedMessage  *TestAllTypes_NestedMessage            `protobuf:"bytes,18,opt,name=optional_nested_message,json=optionalNestedMessage" json:"optional_nested_message,omitempty"`
+	OptionalNestedEnum     *TestAllTypes_NestedEnum               `protobuf:"varint,21,opt,name=optional_nested_enum,json=optionalNestedEnum,enum=goproto.proto.test.TestAllTypes_NestedEnum" json:"optional_nested_enum,omitempty"`
+	RepeatedInt32          []int32                                `protobuf:"varint,31,rep,name=repeated_int32,json=repeatedInt32" json:"repeated_int32,omitempty"`
+	RepeatedInt64          []int64                                `protobuf:"varint,32,rep,name=repeated_int64,json=repeatedInt64" json:"repeated_int64,omitempty"`
+	RepeatedUint32         []uint32                               `protobuf:"varint,33,rep,name=repeated_uint32,json=repeatedUint32" json:"repeated_uint32,omitempty"`
+	RepeatedUint64         []uint64                               `protobuf:"varint,34,rep,name=repeated_uint64,json=repeatedUint64" json:"repeated_uint64,omitempty"`
+	RepeatedSint32         []int32                                `protobuf:"zigzag32,35,rep,name=repeated_sint32,json=repeatedSint32" json:"repeated_sint32,omitempty"`
+	RepeatedSint64         []int64                                `protobuf:"zigzag64,36,rep,name=repeated_sint64,json=repeatedSint64" json:"repeated_sint64,omitempty"`
+	RepeatedFixed32        []uint32                               `protobuf:"fixed32,37,rep,name=repeated_fixed32,json=repeatedFixed32" json:"repeated_fixed32,omitempty"`
+	RepeatedFixed64        []uint64                               `protobuf:"fixed64,38,rep,name=repeated_fixed64,json=repeatedFixed64" json:"repeated_fixed64,omitempty"`
+	RepeatedSfixed32       []int32                                `protobuf:"fixed32,39,rep,name=repeated_sfixed32,json=repeatedSfixed32" json:"repeated_sfixed32,omitempty"`
+	RepeatedSfixed64       []int64                                `protobuf:"fixed64,40,rep,name=repeated_sfixed64,json=repeatedSfixed64" json:"repeated_sfixed64,omitempty"`
+	RepeatedFloat          []float32                              `protobuf:"fixed32,41,rep,name=repeated_float,json=repeatedFloat" json:"repeated_float,omitempty"`
+	RepeatedDouble         []float64                              `protobuf:"fixed64,42,rep,name=repeated_double,json=repeatedDouble" json:"repeated_double,omitempty"`
+	RepeatedBool           []bool                                 `protobuf:"varint,43,rep,name=repeated_bool,json=repeatedBool" json:"repeated_bool,omitempty"`
+	RepeatedString         []string                               `protobuf:"bytes,44,rep,name=repeated_string,json=repeatedString" json:"repeated_string,omitempty"`
+	RepeatedBytes          [][]byte                               `protobuf:"bytes,45,rep,name=repeated_bytes,json=repeatedBytes" json:"repeated_bytes,omitempty"`
+	Repeatedgroup          []*TestAllTypes_RepeatedGroup          `protobuf:"group,46,rep,name=RepeatedGroup,json=repeatedgroup" json:"repeatedgroup,omitempty"`
+	RepeatedNestedMessage  []*TestAllTypes_NestedMessage          `protobuf:"bytes,48,rep,name=repeated_nested_message,json=repeatedNestedMessage" json:"repeated_nested_message,omitempty"`
+	RepeatedNestedEnum     []TestAllTypes_NestedEnum              `protobuf:"varint,51,rep,name=repeated_nested_enum,json=repeatedNestedEnum,enum=goproto.proto.test.TestAllTypes_NestedEnum" json:"repeated_nested_enum,omitempty"`
+	MapInt32Int32          map[int32]int32                        `protobuf:"bytes,56,rep,name=map_int32_int32,json=mapInt32Int32" json:"map_int32_int32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
+	MapInt64Int64          map[int64]int64                        `protobuf:"bytes,57,rep,name=map_int64_int64,json=mapInt64Int64" json:"map_int64_int64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
+	MapUint32Uint32        map[uint32]uint32                      `protobuf:"bytes,58,rep,name=map_uint32_uint32,json=mapUint32Uint32" json:"map_uint32_uint32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
+	MapUint64Uint64        map[uint64]uint64                      `protobuf:"bytes,59,rep,name=map_uint64_uint64,json=mapUint64Uint64" json:"map_uint64_uint64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
+	MapSint32Sint32        map[int32]int32                        `protobuf:"bytes,60,rep,name=map_sint32_sint32,json=mapSint32Sint32" json:"map_sint32_sint32,omitempty" protobuf_key:"zigzag32,1,opt,name=key" protobuf_val:"zigzag32,2,opt,name=value"`
+	MapSint64Sint64        map[int64]int64                        `protobuf:"bytes,61,rep,name=map_sint64_sint64,json=mapSint64Sint64" json:"map_sint64_sint64,omitempty" protobuf_key:"zigzag64,1,opt,name=key" protobuf_val:"zigzag64,2,opt,name=value"`
+	MapFixed32Fixed32      map[uint32]uint32                      `protobuf:"bytes,62,rep,name=map_fixed32_fixed32,json=mapFixed32Fixed32" json:"map_fixed32_fixed32,omitempty" protobuf_key:"fixed32,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
+	MapFixed64Fixed64      map[uint64]uint64                      `protobuf:"bytes,63,rep,name=map_fixed64_fixed64,json=mapFixed64Fixed64" json:"map_fixed64_fixed64,omitempty" protobuf_key:"fixed64,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
+	MapSfixed32Sfixed32    map[int32]int32                        `protobuf:"bytes,64,rep,name=map_sfixed32_sfixed32,json=mapSfixed32Sfixed32" json:"map_sfixed32_sfixed32,omitempty" protobuf_key:"fixed32,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
+	MapSfixed64Sfixed64    map[int64]int64                        `protobuf:"bytes,65,rep,name=map_sfixed64_sfixed64,json=mapSfixed64Sfixed64" json:"map_sfixed64_sfixed64,omitempty" protobuf_key:"fixed64,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
+	MapInt32Float          map[int32]float32                      `protobuf:"bytes,66,rep,name=map_int32_float,json=mapInt32Float" json:"map_int32_float,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
+	MapInt32Double         map[int32]float64                      `protobuf:"bytes,67,rep,name=map_int32_double,json=mapInt32Double" json:"map_int32_double,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
+	MapBoolBool            map[bool]bool                          `protobuf:"bytes,68,rep,name=map_bool_bool,json=mapBoolBool" json:"map_bool_bool,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
+	MapStringString        map[string]string                      `protobuf:"bytes,69,rep,name=map_string_string,json=mapStringString" json:"map_string_string,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	MapStringBytes         map[string][]byte                      `protobuf:"bytes,70,rep,name=map_string_bytes,json=mapStringBytes" json:"map_string_bytes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	MapStringNestedMessage map[string]*TestAllTypes_NestedMessage `protobuf:"bytes,71,rep,name=map_string_nested_message,json=mapStringNestedMessage" json:"map_string_nested_message,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	MapStringNestedEnum    map[string]TestAllTypes_NestedEnum     `protobuf:"bytes,73,rep,name=map_string_nested_enum,json=mapStringNestedEnum" json:"map_string_nested_enum,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=goproto.proto.test.TestAllTypes_NestedEnum"`
+	// Types that are valid to be assigned to OneofField:
+	//	*TestAllTypes_OneofUint32
+	//	*TestAllTypes_OneofNestedMessage
+	//	*TestAllTypes_OneofString
+	//	*TestAllTypes_OneofBytes
+	//	*TestAllTypes_OneofBool
+	//	*TestAllTypes_OneofUint64
+	//	*TestAllTypes_OneofFloat
+	//	*TestAllTypes_OneofDouble
+	//	*TestAllTypes_OneofEnum
+	OneofField           isTestAllTypes_OneofField `protobuf_oneof:"oneof_field"`
+	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
+	XXX_unrecognized     []byte                    `json:"-"`
+	XXX_sizecache        int32                     `json:"-"`
+}
+
+type xxx_TestAllTypes struct{ m *TestAllTypes }
+
+func (m *TestAllTypes) ProtoReflect() protoreflect.Message {
+	return xxx_TestAllTypes{m}
+}
+func (m xxx_TestAllTypes) Type() protoreflect.MessageType {
+	return xxx_Test_ProtoFile_MessageTypes[0].Type
+}
+func (m xxx_TestAllTypes) KnownFields() protoreflect.KnownFields {
+	return xxx_Test_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+}
+func (m xxx_TestAllTypes) UnknownFields() protoreflect.UnknownFields {
+	return xxx_Test_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+}
+func (m xxx_TestAllTypes) Interface() protoreflect.ProtoMessage {
+	return m.m
+}
+
+func (m *TestAllTypes) Reset()         { *m = TestAllTypes{} }
+func (m *TestAllTypes) String() string { return proto.CompactTextString(m) }
+func (*TestAllTypes) ProtoMessage()    {}
+func (*TestAllTypes) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c161fcfdc0c3ff1e, []int{0}
+}
+
+func (m *TestAllTypes) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TestAllTypes.Unmarshal(m, b)
+}
+func (m *TestAllTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TestAllTypes.Marshal(b, m, deterministic)
+}
+func (m *TestAllTypes) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TestAllTypes.Merge(m, src)
+}
+func (m *TestAllTypes) XXX_Size() int {
+	return xxx_messageInfo_TestAllTypes.Size(m)
+}
+func (m *TestAllTypes) XXX_DiscardUnknown() {
+	xxx_messageInfo_TestAllTypes.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestAllTypes proto.InternalMessageInfo
+
+func (m *TestAllTypes) GetOptionalInt32() int32 {
+	if m != nil && m.OptionalInt32 != nil {
+		return *m.OptionalInt32
+	}
+	return 0
+}
+
+func (m *TestAllTypes) GetOptionalInt64() int64 {
+	if m != nil && m.OptionalInt64 != nil {
+		return *m.OptionalInt64
+	}
+	return 0
+}
+
+func (m *TestAllTypes) GetOptionalUint32() uint32 {
+	if m != nil && m.OptionalUint32 != nil {
+		return *m.OptionalUint32
+	}
+	return 0
+}
+
+func (m *TestAllTypes) GetOptionalUint64() uint64 {
+	if m != nil && m.OptionalUint64 != nil {
+		return *m.OptionalUint64
+	}
+	return 0
+}
+
+func (m *TestAllTypes) GetOptionalSint32() int32 {
+	if m != nil && m.OptionalSint32 != nil {
+		return *m.OptionalSint32
+	}
+	return 0
+}
+
+func (m *TestAllTypes) GetOptionalSint64() int64 {
+	if m != nil && m.OptionalSint64 != nil {
+		return *m.OptionalSint64
+	}
+	return 0
+}
+
+func (m *TestAllTypes) GetOptionalFixed32() uint32 {
+	if m != nil && m.OptionalFixed32 != nil {
+		return *m.OptionalFixed32
+	}
+	return 0
+}
+
+func (m *TestAllTypes) GetOptionalFixed64() uint64 {
+	if m != nil && m.OptionalFixed64 != nil {
+		return *m.OptionalFixed64
+	}
+	return 0
+}
+
+func (m *TestAllTypes) GetOptionalSfixed32() int32 {
+	if m != nil && m.OptionalSfixed32 != nil {
+		return *m.OptionalSfixed32
+	}
+	return 0
+}
+
+func (m *TestAllTypes) GetOptionalSfixed64() int64 {
+	if m != nil && m.OptionalSfixed64 != nil {
+		return *m.OptionalSfixed64
+	}
+	return 0
+}
+
+func (m *TestAllTypes) GetOptionalFloat() float32 {
+	if m != nil && m.OptionalFloat != nil {
+		return *m.OptionalFloat
+	}
+	return 0
+}
+
+func (m *TestAllTypes) GetOptionalDouble() float64 {
+	if m != nil && m.OptionalDouble != nil {
+		return *m.OptionalDouble
+	}
+	return 0
+}
+
+func (m *TestAllTypes) GetOptionalBool() bool {
+	if m != nil && m.OptionalBool != nil {
+		return *m.OptionalBool
+	}
+	return false
+}
+
+func (m *TestAllTypes) GetOptionalString() string {
+	if m != nil && m.OptionalString != nil {
+		return *m.OptionalString
+	}
+	return ""
+}
+
+func (m *TestAllTypes) GetOptionalBytes() []byte {
+	if m != nil {
+		return m.OptionalBytes
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetOptionalgroup() *TestAllTypes_OptionalGroup {
+	if m != nil {
+		return m.Optionalgroup
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetOptionalNestedMessage() *TestAllTypes_NestedMessage {
+	if m != nil {
+		return m.OptionalNestedMessage
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetOptionalNestedEnum() TestAllTypes_NestedEnum {
+	if m != nil && m.OptionalNestedEnum != nil {
+		return *m.OptionalNestedEnum
+	}
+	return TestAllTypes_FOO
+}
+
+func (m *TestAllTypes) GetRepeatedInt32() []int32 {
+	if m != nil {
+		return m.RepeatedInt32
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetRepeatedInt64() []int64 {
+	if m != nil {
+		return m.RepeatedInt64
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetRepeatedUint32() []uint32 {
+	if m != nil {
+		return m.RepeatedUint32
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetRepeatedUint64() []uint64 {
+	if m != nil {
+		return m.RepeatedUint64
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetRepeatedSint32() []int32 {
+	if m != nil {
+		return m.RepeatedSint32
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetRepeatedSint64() []int64 {
+	if m != nil {
+		return m.RepeatedSint64
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetRepeatedFixed32() []uint32 {
+	if m != nil {
+		return m.RepeatedFixed32
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetRepeatedFixed64() []uint64 {
+	if m != nil {
+		return m.RepeatedFixed64
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetRepeatedSfixed32() []int32 {
+	if m != nil {
+		return m.RepeatedSfixed32
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetRepeatedSfixed64() []int64 {
+	if m != nil {
+		return m.RepeatedSfixed64
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetRepeatedFloat() []float32 {
+	if m != nil {
+		return m.RepeatedFloat
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetRepeatedDouble() []float64 {
+	if m != nil {
+		return m.RepeatedDouble
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetRepeatedBool() []bool {
+	if m != nil {
+		return m.RepeatedBool
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetRepeatedString() []string {
+	if m != nil {
+		return m.RepeatedString
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetRepeatedBytes() [][]byte {
+	if m != nil {
+		return m.RepeatedBytes
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetRepeatedgroup() []*TestAllTypes_RepeatedGroup {
+	if m != nil {
+		return m.Repeatedgroup
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetRepeatedNestedMessage() []*TestAllTypes_NestedMessage {
+	if m != nil {
+		return m.RepeatedNestedMessage
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetRepeatedNestedEnum() []TestAllTypes_NestedEnum {
+	if m != nil {
+		return m.RepeatedNestedEnum
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetMapInt32Int32() map[int32]int32 {
+	if m != nil {
+		return m.MapInt32Int32
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetMapInt64Int64() map[int64]int64 {
+	if m != nil {
+		return m.MapInt64Int64
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetMapUint32Uint32() map[uint32]uint32 {
+	if m != nil {
+		return m.MapUint32Uint32
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetMapUint64Uint64() map[uint64]uint64 {
+	if m != nil {
+		return m.MapUint64Uint64
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetMapSint32Sint32() map[int32]int32 {
+	if m != nil {
+		return m.MapSint32Sint32
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetMapSint64Sint64() map[int64]int64 {
+	if m != nil {
+		return m.MapSint64Sint64
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetMapFixed32Fixed32() map[uint32]uint32 {
+	if m != nil {
+		return m.MapFixed32Fixed32
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetMapFixed64Fixed64() map[uint64]uint64 {
+	if m != nil {
+		return m.MapFixed64Fixed64
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetMapSfixed32Sfixed32() map[int32]int32 {
+	if m != nil {
+		return m.MapSfixed32Sfixed32
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetMapSfixed64Sfixed64() map[int64]int64 {
+	if m != nil {
+		return m.MapSfixed64Sfixed64
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetMapInt32Float() map[int32]float32 {
+	if m != nil {
+		return m.MapInt32Float
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetMapInt32Double() map[int32]float64 {
+	if m != nil {
+		return m.MapInt32Double
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetMapBoolBool() map[bool]bool {
+	if m != nil {
+		return m.MapBoolBool
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetMapStringString() map[string]string {
+	if m != nil {
+		return m.MapStringString
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetMapStringBytes() map[string][]byte {
+	if m != nil {
+		return m.MapStringBytes
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetMapStringNestedMessage() map[string]*TestAllTypes_NestedMessage {
+	if m != nil {
+		return m.MapStringNestedMessage
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetMapStringNestedEnum() map[string]TestAllTypes_NestedEnum {
+	if m != nil {
+		return m.MapStringNestedEnum
+	}
+	return nil
+}
+
+type isTestAllTypes_OneofField interface {
+	isTestAllTypes_OneofField()
+}
+
+type TestAllTypes_OneofUint32 struct {
+	OneofUint32 uint32 `protobuf:"varint,111,opt,name=oneof_uint32,json=oneofUint32,oneof"`
+}
+
+type TestAllTypes_OneofNestedMessage struct {
+	OneofNestedMessage *TestAllTypes_NestedMessage `protobuf:"bytes,112,opt,name=oneof_nested_message,json=oneofNestedMessage,oneof"`
+}
+
+type TestAllTypes_OneofString struct {
+	OneofString string `protobuf:"bytes,113,opt,name=oneof_string,json=oneofString,oneof"`
+}
+
+type TestAllTypes_OneofBytes struct {
+	OneofBytes []byte `protobuf:"bytes,114,opt,name=oneof_bytes,json=oneofBytes,oneof"`
+}
+
+type TestAllTypes_OneofBool struct {
+	OneofBool bool `protobuf:"varint,115,opt,name=oneof_bool,json=oneofBool,oneof"`
+}
+
+type TestAllTypes_OneofUint64 struct {
+	OneofUint64 uint64 `protobuf:"varint,116,opt,name=oneof_uint64,json=oneofUint64,oneof"`
+}
+
+type TestAllTypes_OneofFloat struct {
+	OneofFloat float32 `protobuf:"fixed32,117,opt,name=oneof_float,json=oneofFloat,oneof"`
+}
+
+type TestAllTypes_OneofDouble struct {
+	OneofDouble float64 `protobuf:"fixed64,118,opt,name=oneof_double,json=oneofDouble,oneof"`
+}
+
+type TestAllTypes_OneofEnum struct {
+	OneofEnum TestAllTypes_NestedEnum `protobuf:"varint,119,opt,name=oneof_enum,json=oneofEnum,enum=goproto.proto.test.TestAllTypes_NestedEnum,oneof"`
+}
+
+func (*TestAllTypes_OneofUint32) isTestAllTypes_OneofField() {}
+
+func (*TestAllTypes_OneofNestedMessage) isTestAllTypes_OneofField() {}
+
+func (*TestAllTypes_OneofString) isTestAllTypes_OneofField() {}
+
+func (*TestAllTypes_OneofBytes) isTestAllTypes_OneofField() {}
+
+func (*TestAllTypes_OneofBool) isTestAllTypes_OneofField() {}
+
+func (*TestAllTypes_OneofUint64) isTestAllTypes_OneofField() {}
+
+func (*TestAllTypes_OneofFloat) isTestAllTypes_OneofField() {}
+
+func (*TestAllTypes_OneofDouble) isTestAllTypes_OneofField() {}
+
+func (*TestAllTypes_OneofEnum) isTestAllTypes_OneofField() {}
+
+func (m *TestAllTypes) GetOneofField() isTestAllTypes_OneofField {
+	if m != nil {
+		return m.OneofField
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetOneofUint32() uint32 {
+	if x, ok := m.GetOneofField().(*TestAllTypes_OneofUint32); ok {
+		return x.OneofUint32
+	}
+	return 0
+}
+
+func (m *TestAllTypes) GetOneofNestedMessage() *TestAllTypes_NestedMessage {
+	if x, ok := m.GetOneofField().(*TestAllTypes_OneofNestedMessage); ok {
+		return x.OneofNestedMessage
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetOneofString() string {
+	if x, ok := m.GetOneofField().(*TestAllTypes_OneofString); ok {
+		return x.OneofString
+	}
+	return ""
+}
+
+func (m *TestAllTypes) GetOneofBytes() []byte {
+	if x, ok := m.GetOneofField().(*TestAllTypes_OneofBytes); ok {
+		return x.OneofBytes
+	}
+	return nil
+}
+
+func (m *TestAllTypes) GetOneofBool() bool {
+	if x, ok := m.GetOneofField().(*TestAllTypes_OneofBool); ok {
+		return x.OneofBool
+	}
+	return false
+}
+
+func (m *TestAllTypes) GetOneofUint64() uint64 {
+	if x, ok := m.GetOneofField().(*TestAllTypes_OneofUint64); ok {
+		return x.OneofUint64
+	}
+	return 0
+}
+
+func (m *TestAllTypes) GetOneofFloat() float32 {
+	if x, ok := m.GetOneofField().(*TestAllTypes_OneofFloat); ok {
+		return x.OneofFloat
+	}
+	return 0
+}
+
+func (m *TestAllTypes) GetOneofDouble() float64 {
+	if x, ok := m.GetOneofField().(*TestAllTypes_OneofDouble); ok {
+		return x.OneofDouble
+	}
+	return 0
+}
+
+func (m *TestAllTypes) GetOneofEnum() TestAllTypes_NestedEnum {
+	if x, ok := m.GetOneofField().(*TestAllTypes_OneofEnum); ok {
+		return x.OneofEnum
+	}
+	return TestAllTypes_FOO
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*TestAllTypes) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*TestAllTypes_OneofUint32)(nil),
+		(*TestAllTypes_OneofNestedMessage)(nil),
+		(*TestAllTypes_OneofString)(nil),
+		(*TestAllTypes_OneofBytes)(nil),
+		(*TestAllTypes_OneofBool)(nil),
+		(*TestAllTypes_OneofUint64)(nil),
+		(*TestAllTypes_OneofFloat)(nil),
+		(*TestAllTypes_OneofDouble)(nil),
+		(*TestAllTypes_OneofEnum)(nil),
+	}
+}
+
+type TestAllExtensions struct {
+	XXX_NoUnkeyedLiteral         struct{} `json:"-"`
+	proto.XXX_InternalExtensions `json:"-"`
+	XXX_unrecognized             []byte `json:"-"`
+	XXX_sizecache                int32  `json:"-"`
+}
+
+type xxx_TestAllExtensions struct{ m *TestAllExtensions }
+
+func (m *TestAllExtensions) ProtoReflect() protoreflect.Message {
+	return xxx_TestAllExtensions{m}
+}
+func (m xxx_TestAllExtensions) Type() protoreflect.MessageType {
+	return xxx_Test_ProtoFile_MessageTypes[1].Type
+}
+func (m xxx_TestAllExtensions) KnownFields() protoreflect.KnownFields {
+	return xxx_Test_ProtoFile_MessageTypes[1].KnownFieldsOf(m.m)
+}
+func (m xxx_TestAllExtensions) UnknownFields() protoreflect.UnknownFields {
+	return xxx_Test_ProtoFile_MessageTypes[1].UnknownFieldsOf(m.m)
+}
+func (m xxx_TestAllExtensions) Interface() protoreflect.ProtoMessage {
+	return m.m
+}
+
+func (m *TestAllExtensions) Reset()         { *m = TestAllExtensions{} }
+func (m *TestAllExtensions) String() string { return proto.CompactTextString(m) }
+func (*TestAllExtensions) ProtoMessage()    {}
+func (*TestAllExtensions) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c161fcfdc0c3ff1e, []int{1}
+}
+
+var extRange_TestAllExtensions = []proto.ExtensionRange{
+	{Start: 1, End: 536870911},
+}
+
+func (*TestAllExtensions) ExtensionRangeArray() []proto.ExtensionRange {
+	return extRange_TestAllExtensions
+}
+
+func (m *TestAllExtensions) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TestAllExtensions.Unmarshal(m, b)
+}
+func (m *TestAllExtensions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TestAllExtensions.Marshal(b, m, deterministic)
+}
+func (m *TestAllExtensions) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TestAllExtensions.Merge(m, src)
+}
+func (m *TestAllExtensions) XXX_Size() int {
+	return xxx_messageInfo_TestAllExtensions.Size(m)
+}
+func (m *TestAllExtensions) XXX_DiscardUnknown() {
+	xxx_messageInfo_TestAllExtensions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestAllExtensions proto.InternalMessageInfo
+
+type OptionalGroupExtension struct {
+	A                    *int32   `protobuf:"varint,17,opt,name=a" json:"a,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+type xxx_OptionalGroupExtension struct{ m *OptionalGroupExtension }
+
+func (m *OptionalGroupExtension) ProtoReflect() protoreflect.Message {
+	return xxx_OptionalGroupExtension{m}
+}
+func (m xxx_OptionalGroupExtension) Type() protoreflect.MessageType {
+	return xxx_Test_ProtoFile_MessageTypes[2].Type
+}
+func (m xxx_OptionalGroupExtension) KnownFields() protoreflect.KnownFields {
+	return xxx_Test_ProtoFile_MessageTypes[2].KnownFieldsOf(m.m)
+}
+func (m xxx_OptionalGroupExtension) UnknownFields() protoreflect.UnknownFields {
+	return xxx_Test_ProtoFile_MessageTypes[2].UnknownFieldsOf(m.m)
+}
+func (m xxx_OptionalGroupExtension) Interface() protoreflect.ProtoMessage {
+	return m.m
+}
+
+func (m *OptionalGroupExtension) Reset()         { *m = OptionalGroupExtension{} }
+func (m *OptionalGroupExtension) String() string { return proto.CompactTextString(m) }
+func (*OptionalGroupExtension) ProtoMessage()    {}
+func (*OptionalGroupExtension) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c161fcfdc0c3ff1e, []int{2}
+}
+
+func (m *OptionalGroupExtension) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OptionalGroupExtension.Unmarshal(m, b)
+}
+func (m *OptionalGroupExtension) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OptionalGroupExtension.Marshal(b, m, deterministic)
+}
+func (m *OptionalGroupExtension) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OptionalGroupExtension.Merge(m, src)
+}
+func (m *OptionalGroupExtension) XXX_Size() int {
+	return xxx_messageInfo_OptionalGroupExtension.Size(m)
+}
+func (m *OptionalGroupExtension) XXX_DiscardUnknown() {
+	xxx_messageInfo_OptionalGroupExtension.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OptionalGroupExtension proto.InternalMessageInfo
+
+func (m *OptionalGroupExtension) GetA() int32 {
+	if m != nil && m.A != nil {
+		return *m.A
+	}
+	return 0
+}
+
+type RepeatedGroupExtension struct {
+	A                    *int32   `protobuf:"varint,47,opt,name=a" json:"a,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+type xxx_RepeatedGroupExtension struct{ m *RepeatedGroupExtension }
+
+func (m *RepeatedGroupExtension) ProtoReflect() protoreflect.Message {
+	return xxx_RepeatedGroupExtension{m}
+}
+func (m xxx_RepeatedGroupExtension) Type() protoreflect.MessageType {
+	return xxx_Test_ProtoFile_MessageTypes[3].Type
+}
+func (m xxx_RepeatedGroupExtension) KnownFields() protoreflect.KnownFields {
+	return xxx_Test_ProtoFile_MessageTypes[3].KnownFieldsOf(m.m)
+}
+func (m xxx_RepeatedGroupExtension) UnknownFields() protoreflect.UnknownFields {
+	return xxx_Test_ProtoFile_MessageTypes[3].UnknownFieldsOf(m.m)
+}
+func (m xxx_RepeatedGroupExtension) Interface() protoreflect.ProtoMessage {
+	return m.m
+}
+
+func (m *RepeatedGroupExtension) Reset()         { *m = RepeatedGroupExtension{} }
+func (m *RepeatedGroupExtension) String() string { return proto.CompactTextString(m) }
+func (*RepeatedGroupExtension) ProtoMessage()    {}
+func (*RepeatedGroupExtension) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c161fcfdc0c3ff1e, []int{3}
+}
+
+func (m *RepeatedGroupExtension) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RepeatedGroupExtension.Unmarshal(m, b)
+}
+func (m *RepeatedGroupExtension) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RepeatedGroupExtension.Marshal(b, m, deterministic)
+}
+func (m *RepeatedGroupExtension) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RepeatedGroupExtension.Merge(m, src)
+}
+func (m *RepeatedGroupExtension) XXX_Size() int {
+	return xxx_messageInfo_RepeatedGroupExtension.Size(m)
+}
+func (m *RepeatedGroupExtension) XXX_DiscardUnknown() {
+	xxx_messageInfo_RepeatedGroupExtension.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RepeatedGroupExtension proto.InternalMessageInfo
+
+func (m *RepeatedGroupExtension) GetA() int32 {
+	if m != nil && m.A != nil {
+		return *m.A
+	}
+	return 0
+}
+
+type TestAllTypes_NestedMessage struct {
+	A                    *int32        `protobuf:"varint,1,opt,name=a" json:"a,omitempty"`
+	Corecursive          *TestAllTypes `protobuf:"bytes,2,opt,name=corecursive" json:"corecursive,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+type xxx_TestAllTypes_NestedMessage struct{ m *TestAllTypes_NestedMessage }
+
+func (m *TestAllTypes_NestedMessage) ProtoReflect() protoreflect.Message {
+	return xxx_TestAllTypes_NestedMessage{m}
+}
+func (m xxx_TestAllTypes_NestedMessage) Type() protoreflect.MessageType {
+	return xxx_Test_ProtoFile_MessageTypes[4].Type
+}
+func (m xxx_TestAllTypes_NestedMessage) KnownFields() protoreflect.KnownFields {
+	return xxx_Test_ProtoFile_MessageTypes[4].KnownFieldsOf(m.m)
+}
+func (m xxx_TestAllTypes_NestedMessage) UnknownFields() protoreflect.UnknownFields {
+	return xxx_Test_ProtoFile_MessageTypes[4].UnknownFieldsOf(m.m)
+}
+func (m xxx_TestAllTypes_NestedMessage) Interface() protoreflect.ProtoMessage {
+	return m.m
+}
+
+func (m *TestAllTypes_NestedMessage) Reset()         { *m = TestAllTypes_NestedMessage{} }
+func (m *TestAllTypes_NestedMessage) String() string { return proto.CompactTextString(m) }
+func (*TestAllTypes_NestedMessage) ProtoMessage()    {}
+func (*TestAllTypes_NestedMessage) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c161fcfdc0c3ff1e, []int{0, 0}
+}
+
+func (m *TestAllTypes_NestedMessage) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TestAllTypes_NestedMessage.Unmarshal(m, b)
+}
+func (m *TestAllTypes_NestedMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TestAllTypes_NestedMessage.Marshal(b, m, deterministic)
+}
+func (m *TestAllTypes_NestedMessage) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TestAllTypes_NestedMessage.Merge(m, src)
+}
+func (m *TestAllTypes_NestedMessage) XXX_Size() int {
+	return xxx_messageInfo_TestAllTypes_NestedMessage.Size(m)
+}
+func (m *TestAllTypes_NestedMessage) XXX_DiscardUnknown() {
+	xxx_messageInfo_TestAllTypes_NestedMessage.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestAllTypes_NestedMessage proto.InternalMessageInfo
+
+func (m *TestAllTypes_NestedMessage) GetA() int32 {
+	if m != nil && m.A != nil {
+		return *m.A
+	}
+	return 0
+}
+
+func (m *TestAllTypes_NestedMessage) GetCorecursive() *TestAllTypes {
+	if m != nil {
+		return m.Corecursive
+	}
+	return nil
+}
+
+type TestAllTypes_OptionalGroup struct {
+	A                    *int32   `protobuf:"varint,17,opt,name=a" json:"a,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+type xxx_TestAllTypes_OptionalGroup struct{ m *TestAllTypes_OptionalGroup }
+
+func (m *TestAllTypes_OptionalGroup) ProtoReflect() protoreflect.Message {
+	return xxx_TestAllTypes_OptionalGroup{m}
+}
+func (m xxx_TestAllTypes_OptionalGroup) Type() protoreflect.MessageType {
+	return xxx_Test_ProtoFile_MessageTypes[5].Type
+}
+func (m xxx_TestAllTypes_OptionalGroup) KnownFields() protoreflect.KnownFields {
+	return xxx_Test_ProtoFile_MessageTypes[5].KnownFieldsOf(m.m)
+}
+func (m xxx_TestAllTypes_OptionalGroup) UnknownFields() protoreflect.UnknownFields {
+	return xxx_Test_ProtoFile_MessageTypes[5].UnknownFieldsOf(m.m)
+}
+func (m xxx_TestAllTypes_OptionalGroup) Interface() protoreflect.ProtoMessage {
+	return m.m
+}
+
+func (m *TestAllTypes_OptionalGroup) Reset()         { *m = TestAllTypes_OptionalGroup{} }
+func (m *TestAllTypes_OptionalGroup) String() string { return proto.CompactTextString(m) }
+func (*TestAllTypes_OptionalGroup) ProtoMessage()    {}
+func (*TestAllTypes_OptionalGroup) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c161fcfdc0c3ff1e, []int{0, 1}
+}
+
+func (m *TestAllTypes_OptionalGroup) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TestAllTypes_OptionalGroup.Unmarshal(m, b)
+}
+func (m *TestAllTypes_OptionalGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TestAllTypes_OptionalGroup.Marshal(b, m, deterministic)
+}
+func (m *TestAllTypes_OptionalGroup) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TestAllTypes_OptionalGroup.Merge(m, src)
+}
+func (m *TestAllTypes_OptionalGroup) XXX_Size() int {
+	return xxx_messageInfo_TestAllTypes_OptionalGroup.Size(m)
+}
+func (m *TestAllTypes_OptionalGroup) XXX_DiscardUnknown() {
+	xxx_messageInfo_TestAllTypes_OptionalGroup.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestAllTypes_OptionalGroup proto.InternalMessageInfo
+
+func (m *TestAllTypes_OptionalGroup) GetA() int32 {
+	if m != nil && m.A != nil {
+		return *m.A
+	}
+	return 0
+}
+
+type TestAllTypes_RepeatedGroup struct {
+	A                    *int32   `protobuf:"varint,47,opt,name=a" json:"a,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+type xxx_TestAllTypes_RepeatedGroup struct{ m *TestAllTypes_RepeatedGroup }
+
+func (m *TestAllTypes_RepeatedGroup) ProtoReflect() protoreflect.Message {
+	return xxx_TestAllTypes_RepeatedGroup{m}
+}
+func (m xxx_TestAllTypes_RepeatedGroup) Type() protoreflect.MessageType {
+	return xxx_Test_ProtoFile_MessageTypes[6].Type
+}
+func (m xxx_TestAllTypes_RepeatedGroup) KnownFields() protoreflect.KnownFields {
+	return xxx_Test_ProtoFile_MessageTypes[6].KnownFieldsOf(m.m)
+}
+func (m xxx_TestAllTypes_RepeatedGroup) UnknownFields() protoreflect.UnknownFields {
+	return xxx_Test_ProtoFile_MessageTypes[6].UnknownFieldsOf(m.m)
+}
+func (m xxx_TestAllTypes_RepeatedGroup) Interface() protoreflect.ProtoMessage {
+	return m.m
+}
+
+func (m *TestAllTypes_RepeatedGroup) Reset()         { *m = TestAllTypes_RepeatedGroup{} }
+func (m *TestAllTypes_RepeatedGroup) String() string { return proto.CompactTextString(m) }
+func (*TestAllTypes_RepeatedGroup) ProtoMessage()    {}
+func (*TestAllTypes_RepeatedGroup) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c161fcfdc0c3ff1e, []int{0, 2}
+}
+
+func (m *TestAllTypes_RepeatedGroup) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TestAllTypes_RepeatedGroup.Unmarshal(m, b)
+}
+func (m *TestAllTypes_RepeatedGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TestAllTypes_RepeatedGroup.Marshal(b, m, deterministic)
+}
+func (m *TestAllTypes_RepeatedGroup) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TestAllTypes_RepeatedGroup.Merge(m, src)
+}
+func (m *TestAllTypes_RepeatedGroup) XXX_Size() int {
+	return xxx_messageInfo_TestAllTypes_RepeatedGroup.Size(m)
+}
+func (m *TestAllTypes_RepeatedGroup) XXX_DiscardUnknown() {
+	xxx_messageInfo_TestAllTypes_RepeatedGroup.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestAllTypes_RepeatedGroup proto.InternalMessageInfo
+
+func (m *TestAllTypes_RepeatedGroup) GetA() int32 {
+	if m != nil && m.A != nil {
+		return *m.A
+	}
+	return 0
+}
+
+var E_OptionalInt32Extension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: (*int32)(nil),
+	Field:         1,
+	Name:          "goproto.proto.test.optional_int32_extension",
+	Tag:           "varint,1,opt,name=optional_int32_extension",
+	Filename:      "test.proto",
+}
+
+var E_OptionalInt64Extension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: (*int64)(nil),
+	Field:         2,
+	Name:          "goproto.proto.test.optional_int64_extension",
+	Tag:           "varint,2,opt,name=optional_int64_extension",
+	Filename:      "test.proto",
+}
+
+var E_OptionalUint32Extension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: (*uint32)(nil),
+	Field:         3,
+	Name:          "goproto.proto.test.optional_uint32_extension",
+	Tag:           "varint,3,opt,name=optional_uint32_extension",
+	Filename:      "test.proto",
+}
+
+var E_OptionalUint64Extension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: (*uint64)(nil),
+	Field:         4,
+	Name:          "goproto.proto.test.optional_uint64_extension",
+	Tag:           "varint,4,opt,name=optional_uint64_extension",
+	Filename:      "test.proto",
+}
+
+var E_OptionalSint32Extension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: (*int32)(nil),
+	Field:         5,
+	Name:          "goproto.proto.test.optional_sint32_extension",
+	Tag:           "zigzag32,5,opt,name=optional_sint32_extension",
+	Filename:      "test.proto",
+}
+
+var E_OptionalSint64Extension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: (*int64)(nil),
+	Field:         6,
+	Name:          "goproto.proto.test.optional_sint64_extension",
+	Tag:           "zigzag64,6,opt,name=optional_sint64_extension",
+	Filename:      "test.proto",
+}
+
+var E_OptionalFixed32Extension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: (*uint32)(nil),
+	Field:         7,
+	Name:          "goproto.proto.test.optional_fixed32_extension",
+	Tag:           "fixed32,7,opt,name=optional_fixed32_extension",
+	Filename:      "test.proto",
+}
+
+var E_OptionalFixed64Extension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: (*uint64)(nil),
+	Field:         8,
+	Name:          "goproto.proto.test.optional_fixed64_extension",
+	Tag:           "fixed64,8,opt,name=optional_fixed64_extension",
+	Filename:      "test.proto",
+}
+
+var E_OptionalSfixed32Extension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: (*int32)(nil),
+	Field:         9,
+	Name:          "goproto.proto.test.optional_sfixed32_extension",
+	Tag:           "fixed32,9,opt,name=optional_sfixed32_extension",
+	Filename:      "test.proto",
+}
+
+var E_OptionalSfixed64Extension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: (*int64)(nil),
+	Field:         10,
+	Name:          "goproto.proto.test.optional_sfixed64_extension",
+	Tag:           "fixed64,10,opt,name=optional_sfixed64_extension",
+	Filename:      "test.proto",
+}
+
+var E_OptionalFloatExtension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: (*float32)(nil),
+	Field:         11,
+	Name:          "goproto.proto.test.optional_float_extension",
+	Tag:           "fixed32,11,opt,name=optional_float_extension",
+	Filename:      "test.proto",
+}
+
+var E_OptionalDoubleExtension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: (*float64)(nil),
+	Field:         12,
+	Name:          "goproto.proto.test.optional_double_extension",
+	Tag:           "fixed64,12,opt,name=optional_double_extension",
+	Filename:      "test.proto",
+}
+
+var E_OptionalBoolExtension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: (*bool)(nil),
+	Field:         13,
+	Name:          "goproto.proto.test.optional_bool_extension",
+	Tag:           "varint,13,opt,name=optional_bool_extension",
+	Filename:      "test.proto",
+}
+
+var E_OptionalStringExtension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: (*string)(nil),
+	Field:         14,
+	Name:          "goproto.proto.test.optional_string_extension",
+	Tag:           "bytes,14,opt,name=optional_string_extension",
+	Filename:      "test.proto",
+}
+
+var E_OptionalBytesExtension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: ([]byte)(nil),
+	Field:         15,
+	Name:          "goproto.proto.test.optional_bytes_extension",
+	Tag:           "bytes,15,opt,name=optional_bytes_extension",
+	Filename:      "test.proto",
+}
+
+var E_OptionalgroupExtension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: (*OptionalGroupExtension)(nil),
+	Field:         16,
+	Name:          "goproto.proto.test.optionalgroup_extension",
+	Tag:           "group,16,opt,name=OptionalGroup_extension",
+	Filename:      "test.proto",
+}
+
+var E_OptionalNestedMessageExtension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: (*TestAllTypes_NestedMessage)(nil),
+	Field:         18,
+	Name:          "goproto.proto.test.optional_nested_message_extension",
+	Tag:           "bytes,18,opt,name=optional_nested_message_extension",
+	Filename:      "test.proto",
+}
+
+var E_OptionalNestedEnumExtension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: (*TestAllTypes_NestedEnum)(nil),
+	Field:         21,
+	Name:          "goproto.proto.test.optional_nested_enum_extension",
+	Tag:           "varint,21,opt,name=optional_nested_enum_extension,enum=goproto.proto.test.TestAllTypes_NestedEnum",
+	Filename:      "test.proto",
+}
+
+var E_RepeatedInt32Extension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: ([]int32)(nil),
+	Field:         31,
+	Name:          "goproto.proto.test.repeated_int32_extension",
+	Tag:           "varint,31,rep,name=repeated_int32_extension",
+	Filename:      "test.proto",
+}
+
+var E_RepeatedInt64Extension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: ([]int64)(nil),
+	Field:         32,
+	Name:          "goproto.proto.test.repeated_int64_extension",
+	Tag:           "varint,32,rep,name=repeated_int64_extension",
+	Filename:      "test.proto",
+}
+
+var E_RepeatedUint32Extension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: ([]uint32)(nil),
+	Field:         33,
+	Name:          "goproto.proto.test.repeated_uint32_extension",
+	Tag:           "varint,33,rep,name=repeated_uint32_extension",
+	Filename:      "test.proto",
+}
+
+var E_RepeatedUint64Extension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: ([]uint64)(nil),
+	Field:         34,
+	Name:          "goproto.proto.test.repeated_uint64_extension",
+	Tag:           "varint,34,rep,name=repeated_uint64_extension",
+	Filename:      "test.proto",
+}
+
+var E_RepeatedSint32Extension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: ([]int32)(nil),
+	Field:         35,
+	Name:          "goproto.proto.test.repeated_sint32_extension",
+	Tag:           "zigzag32,35,rep,name=repeated_sint32_extension",
+	Filename:      "test.proto",
+}
+
+var E_RepeatedSint64Extension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: ([]int64)(nil),
+	Field:         36,
+	Name:          "goproto.proto.test.repeated_sint64_extension",
+	Tag:           "zigzag64,36,rep,name=repeated_sint64_extension",
+	Filename:      "test.proto",
+}
+
+var E_RepeatedFixed32Extension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: ([]uint32)(nil),
+	Field:         37,
+	Name:          "goproto.proto.test.repeated_fixed32_extension",
+	Tag:           "fixed32,37,rep,name=repeated_fixed32_extension",
+	Filename:      "test.proto",
+}
+
+var E_RepeatedFixed64Extension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: ([]uint64)(nil),
+	Field:         38,
+	Name:          "goproto.proto.test.repeated_fixed64_extension",
+	Tag:           "fixed64,38,rep,name=repeated_fixed64_extension",
+	Filename:      "test.proto",
+}
+
+var E_RepeatedSfixed32Extension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: ([]int32)(nil),
+	Field:         39,
+	Name:          "goproto.proto.test.repeated_sfixed32_extension",
+	Tag:           "fixed32,39,rep,name=repeated_sfixed32_extension",
+	Filename:      "test.proto",
+}
+
+var E_RepeatedSfixed64Extension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: ([]int64)(nil),
+	Field:         40,
+	Name:          "goproto.proto.test.repeated_sfixed64_extension",
+	Tag:           "fixed64,40,rep,name=repeated_sfixed64_extension",
+	Filename:      "test.proto",
+}
+
+var E_RepeatedFloatExtension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: ([]float32)(nil),
+	Field:         41,
+	Name:          "goproto.proto.test.repeated_float_extension",
+	Tag:           "fixed32,41,rep,name=repeated_float_extension",
+	Filename:      "test.proto",
+}
+
+var E_RepeatedDoubleExtension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: ([]float64)(nil),
+	Field:         42,
+	Name:          "goproto.proto.test.repeated_double_extension",
+	Tag:           "fixed64,42,rep,name=repeated_double_extension",
+	Filename:      "test.proto",
+}
+
+var E_RepeatedBoolExtension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: ([]bool)(nil),
+	Field:         43,
+	Name:          "goproto.proto.test.repeated_bool_extension",
+	Tag:           "varint,43,rep,name=repeated_bool_extension",
+	Filename:      "test.proto",
+}
+
+var E_RepeatedStringExtension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: ([]string)(nil),
+	Field:         44,
+	Name:          "goproto.proto.test.repeated_string_extension",
+	Tag:           "bytes,44,rep,name=repeated_string_extension",
+	Filename:      "test.proto",
+}
+
+var E_RepeatedBytesExtension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: ([][]byte)(nil),
+	Field:         45,
+	Name:          "goproto.proto.test.repeated_bytes_extension",
+	Tag:           "bytes,45,rep,name=repeated_bytes_extension",
+	Filename:      "test.proto",
+}
+
+var E_RepeatedgroupExtension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: ([]*RepeatedGroupExtension)(nil),
+	Field:         46,
+	Name:          "goproto.proto.test.repeatedgroup_extension",
+	Tag:           "group,46,rep,name=RepeatedGroup_extension",
+	Filename:      "test.proto",
+}
+
+var E_RepeatedNestedMessageExtension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: ([]*TestAllTypes_NestedMessage)(nil),
+	Field:         48,
+	Name:          "goproto.proto.test.repeated_nested_message_extension",
+	Tag:           "bytes,48,rep,name=repeated_nested_message_extension",
+	Filename:      "test.proto",
+}
+
+var E_RepeatedNestedEnumExtension = &proto.ExtensionDesc{
+	ExtendedType:  (*TestAllExtensions)(nil),
+	ExtensionType: ([]TestAllTypes_NestedEnum)(nil),
+	Field:         51,
+	Name:          "goproto.proto.test.repeated_nested_enum_extension",
+	Tag:           "varint,51,rep,name=repeated_nested_enum_extension,enum=goproto.proto.test.TestAllTypes_NestedEnum",
+	Filename:      "test.proto",
+}
+
+func init() {
+	proto.RegisterFile("test.proto", fileDescriptor_c161fcfdc0c3ff1e)
+	proto.RegisterEnum("goproto.proto.test.TestAllTypes_NestedEnum", TestAllTypes_NestedEnum_name, TestAllTypes_NestedEnum_value)
+	proto.RegisterType((*TestAllTypes)(nil), "goproto.proto.test.TestAllTypes")
+	proto.RegisterMapType((map[bool]bool)(nil), "goproto.proto.test.TestAllTypes.MapBoolBoolEntry")
+	proto.RegisterMapType((map[uint32]uint32)(nil), "goproto.proto.test.TestAllTypes.MapFixed32Fixed32Entry")
+	proto.RegisterMapType((map[uint64]uint64)(nil), "goproto.proto.test.TestAllTypes.MapFixed64Fixed64Entry")
+	proto.RegisterMapType((map[int32]float64)(nil), "goproto.proto.test.TestAllTypes.MapInt32DoubleEntry")
+	proto.RegisterMapType((map[int32]float32)(nil), "goproto.proto.test.TestAllTypes.MapInt32FloatEntry")
+	proto.RegisterMapType((map[int32]int32)(nil), "goproto.proto.test.TestAllTypes.MapInt32Int32Entry")
+	proto.RegisterMapType((map[int64]int64)(nil), "goproto.proto.test.TestAllTypes.MapInt64Int64Entry")
+	proto.RegisterMapType((map[int32]int32)(nil), "goproto.proto.test.TestAllTypes.MapSfixed32Sfixed32Entry")
+	proto.RegisterMapType((map[int64]int64)(nil), "goproto.proto.test.TestAllTypes.MapSfixed64Sfixed64Entry")
+	proto.RegisterMapType((map[int32]int32)(nil), "goproto.proto.test.TestAllTypes.MapSint32Sint32Entry")
+	proto.RegisterMapType((map[int64]int64)(nil), "goproto.proto.test.TestAllTypes.MapSint64Sint64Entry")
+	proto.RegisterMapType((map[string][]byte)(nil), "goproto.proto.test.TestAllTypes.MapStringBytesEntry")
+	proto.RegisterMapType((map[string]TestAllTypes_NestedEnum)(nil), "goproto.proto.test.TestAllTypes.MapStringNestedEnumEntry")
+	proto.RegisterMapType((map[string]*TestAllTypes_NestedMessage)(nil), "goproto.proto.test.TestAllTypes.MapStringNestedMessageEntry")
+	proto.RegisterMapType((map[string]string)(nil), "goproto.proto.test.TestAllTypes.MapStringStringEntry")
+	proto.RegisterMapType((map[uint32]uint32)(nil), "goproto.proto.test.TestAllTypes.MapUint32Uint32Entry")
+	proto.RegisterMapType((map[uint64]uint64)(nil), "goproto.proto.test.TestAllTypes.MapUint64Uint64Entry")
+	proto.RegisterType((*TestAllExtensions)(nil), "goproto.proto.test.TestAllExtensions")
+	proto.RegisterType((*OptionalGroupExtension)(nil), "goproto.proto.test.OptionalGroup_extension")
+	proto.RegisterType((*RepeatedGroupExtension)(nil), "goproto.proto.test.RepeatedGroup_extension")
+	proto.RegisterType((*TestAllTypes_NestedMessage)(nil), "goproto.proto.test.TestAllTypes.NestedMessage")
+	proto.RegisterType((*TestAllTypes_OptionalGroup)(nil), "goproto.proto.test.TestAllTypes.OptionalGroup")
+	proto.RegisterType((*TestAllTypes_RepeatedGroup)(nil), "goproto.proto.test.TestAllTypes.RepeatedGroup")
+	proto.RegisterExtension(E_OptionalInt32Extension)
+	proto.RegisterExtension(E_OptionalInt64Extension)
+	proto.RegisterExtension(E_OptionalUint32Extension)
+	proto.RegisterExtension(E_OptionalUint64Extension)
+	proto.RegisterExtension(E_OptionalSint32Extension)
+	proto.RegisterExtension(E_OptionalSint64Extension)
+	proto.RegisterExtension(E_OptionalFixed32Extension)
+	proto.RegisterExtension(E_OptionalFixed64Extension)
+	proto.RegisterExtension(E_OptionalSfixed32Extension)
+	proto.RegisterExtension(E_OptionalSfixed64Extension)
+	proto.RegisterExtension(E_OptionalFloatExtension)
+	proto.RegisterExtension(E_OptionalDoubleExtension)
+	proto.RegisterExtension(E_OptionalBoolExtension)
+	proto.RegisterExtension(E_OptionalStringExtension)
+	proto.RegisterExtension(E_OptionalBytesExtension)
+	proto.RegisterExtension(E_OptionalgroupExtension)
+	proto.RegisterExtension(E_OptionalNestedMessageExtension)
+	proto.RegisterExtension(E_OptionalNestedEnumExtension)
+	proto.RegisterExtension(E_RepeatedInt32Extension)
+	proto.RegisterExtension(E_RepeatedInt64Extension)
+	proto.RegisterExtension(E_RepeatedUint32Extension)
+	proto.RegisterExtension(E_RepeatedUint64Extension)
+	proto.RegisterExtension(E_RepeatedSint32Extension)
+	proto.RegisterExtension(E_RepeatedSint64Extension)
+	proto.RegisterExtension(E_RepeatedFixed32Extension)
+	proto.RegisterExtension(E_RepeatedFixed64Extension)
+	proto.RegisterExtension(E_RepeatedSfixed32Extension)
+	proto.RegisterExtension(E_RepeatedSfixed64Extension)
+	proto.RegisterExtension(E_RepeatedFloatExtension)
+	proto.RegisterExtension(E_RepeatedDoubleExtension)
+	proto.RegisterExtension(E_RepeatedBoolExtension)
+	proto.RegisterExtension(E_RepeatedStringExtension)
+	proto.RegisterExtension(E_RepeatedBytesExtension)
+	proto.RegisterExtension(E_RepeatedgroupExtension)
+	proto.RegisterExtension(E_RepeatedNestedMessageExtension)
+	proto.RegisterExtension(E_RepeatedNestedEnumExtension)
+}
+
+var fileDescriptor_c161fcfdc0c3ff1e = []byte{
+	// 2008 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x59, 0x6d, 0x53, 0xdb, 0xca,
+	0x15, 0x46, 0x88, 0xd7, 0x05, 0x83, 0x51, 0xc0, 0x16, 0x61, 0x92, 0x6c, 0x48, 0xd3, 0x28, 0x24,
+	0x35, 0x2d, 0xa8, 0x6a, 0x92, 0xa6, 0x69, 0x70, 0x81, 0x90, 0x99, 0x26, 0x99, 0x11, 0xc9, 0x97,
+	0x74, 0x52, 0xc6, 0x80, 0x70, 0x3d, 0xb5, 0x2d, 0xd7, 0x2f, 0x24, 0x7c, 0xe3, 0x7b, 0x7f, 0xc0,
+	0xfd, 0x7a, 0x7f, 0xd2, 0xfd, 0x47, 0xf7, 0xce, 0xee, 0xd1, 0xae, 0xf6, 0xac, 0xd7, 0x60, 0x29,
+	0x33, 0x31, 0xf6, 0xd1, 0xd1, 0xf3, 0xec, 0xae, 0xf6, 0xd9, 0xa3, 0xdd, 0x87, 0x90, 0x7e, 0xd4,
+	0xeb, 0x57, 0x3a, 0xdd, 0xb8, 0x1f, 0x3b, 0x4e, 0x3d, 0xe6, 0x5f, 0xe0, 0x67, 0x85, 0x5d, 0xd9,
+	0xfc, 0x65, 0x8b, 0x2c, 0x7e, 0x8e, 0x7a, 0xfd, 0xbd, 0x66, 0xf3, 0xf3, 0x55, 0x27, 0xea, 0x39,
+	0x8f, 0xc9, 0x52, 0xdc, 0xe9, 0x37, 0xe2, 0x76, 0xad, 0x79, 0xd2, 0x68, 0xf7, 0x77, 0x77, 0x5c,
+	0x8b, 0x5a, 0xde, 0x74, 0x58, 0x10, 0xd1, 0xf7, 0x2c, 0xa8, 0xa7, 0x05, 0xbe, 0x3b, 0x49, 0x2d,
+	0xcf, 0x46, 0x69, 0x81, 0xef, 0x3c, 0x21, 0xcb, 0x32, 0x6d, 0x00, 0x70, 0x36, 0xb5, 0xbc, 0x42,
+	0x28, 0xef, 0xfe, 0xc2, 0xa3, 0x43, 0x89, 0x81, 0xef, 0x4e, 0x51, 0xcb, 0x9b, 0xc2, 0x89, 0x1a,
+	0x62, 0x0f, 0x10, 0xa7, 0xa9, 0xe5, 0xad, 0xa4, 0x89, 0xc7, 0xc3, 0x88, 0x3d, 0x40, 0x9c, 0xa1,
+	0x96, 0xe7, 0xe0, 0xc4, 0xc0, 0x77, 0x9e, 0x92, 0xa2, 0x4c, 0xbc, 0x68, 0xfc, 0x88, 0xce, 0x77,
+	0x77, 0xdc, 0x59, 0x6a, 0x79, 0xb3, 0xa1, 0x04, 0x38, 0x84, 0xf0, 0x70, 0x6a, 0xe0, 0xbb, 0x73,
+	0xd4, 0xf2, 0x66, 0xb4, 0xd4, 0xc0, 0x77, 0x9e, 0x91, 0x95, 0x94, 0x5e, 0xc0, 0xce, 0x53, 0xcb,
+	0x5b, 0x0e, 0x25, 0xc6, 0x71, 0x12, 0x37, 0x24, 0x07, 0xbe, 0x4b, 0xa8, 0xe5, 0x15, 0xf5, 0xe4,
+	0xc0, 0x47, 0x43, 0x7f, 0xd1, 0x8c, 0x6b, 0x7d, 0x77, 0x81, 0x5a, 0xde, 0x64, 0x3a, 0xf4, 0x87,
+	0x2c, 0x88, 0xfa, 0x7f, 0x1e, 0x0f, 0x4e, 0x9b, 0x91, 0xbb, 0x48, 0x2d, 0xcf, 0x4a, 0xfb, 0xbf,
+	0xcf, 0xa3, 0xce, 0x23, 0x22, 0xef, 0x3c, 0x39, 0x8d, 0xe3, 0xa6, 0x5b, 0xa0, 0x96, 0x37, 0x17,
+	0x2e, 0x8a, 0x60, 0x35, 0x8e, 0x9b, 0x78, 0x34, 0xfb, 0xdd, 0x46, 0xbb, 0xee, 0x2e, 0x51, 0xcb,
+	0x9b, 0x57, 0x46, 0x93, 0x47, 0x51, 0xeb, 0x4e, 0xaf, 0xfa, 0x51, 0xcf, 0x5d, 0xa6, 0x96, 0xb7,
+	0x98, 0xb6, 0xae, 0xca, 0x82, 0xce, 0xe7, 0x94, 0xb4, 0xde, 0x8d, 0x07, 0x1d, 0xb7, 0x48, 0x2d,
+	0x8f, 0xec, 0x54, 0x2a, 0xc3, 0x73, 0xb4, 0xa2, 0xce, 0xcf, 0xca, 0xa7, 0xe4, 0xae, 0x77, 0xec,
+	0xae, 0x10, 0x83, 0x38, 0x17, 0xa4, 0x2c, 0xc9, 0xdb, 0x51, 0xaf, 0x1f, 0x9d, 0x9f, 0xb4, 0xa2,
+	0x5e, 0xaf, 0x56, 0x8f, 0x5c, 0x87, 0x5a, 0xde, 0xc2, 0x18, 0xf8, 0x1f, 0xf9, 0x6d, 0x1f, 0xe0,
+	0xae, 0x70, 0x4d, 0xc0, 0xa1, 0xb0, 0xf3, 0x8d, 0xac, 0xea, 0x3c, 0x51, 0x7b, 0xd0, 0x72, 0xd7,
+	0xa8, 0xe5, 0x2d, 0xed, 0x3c, 0x1b, 0x93, 0xe4, 0xa0, 0x3d, 0x68, 0x85, 0x0e, 0x66, 0x60, 0x31,
+	0x36, 0x86, 0xdd, 0xa8, 0x13, 0xd5, 0x18, 0x2e, 0x4c, 0xf1, 0x07, 0xd4, 0x66, 0x1a, 0x14, 0x51,
+	0xa9, 0x41, 0x35, 0x2d, 0xf0, 0x5d, 0x4a, 0x6d, 0xa6, 0x41, 0x25, 0x0d, 0x14, 0x23, 0xd3, 0x12,
+	0x0d, 0x3e, 0xa4, 0x36, 0xd3, 0xa0, 0x08, 0xa7, 0x1a, 0x44, 0x89, 0x81, 0xef, 0x6e, 0x52, 0x9b,
+	0x69, 0x50, 0x4d, 0xd4, 0x10, 0x13, 0x0d, 0x3e, 0xa2, 0x36, 0xd3, 0xa0, 0x08, 0x1f, 0x0f, 0x23,
+	0x26, 0x1a, 0xfc, 0x1d, 0xb5, 0x99, 0x06, 0xd5, 0x44, 0xd0, 0xa0, 0x4c, 0x14, 0x62, 0x79, 0x4c,
+	0x6d, 0xa6, 0x41, 0x11, 0x57, 0x34, 0x88, 0x53, 0x03, 0xdf, 0xfd, 0x3d, 0xb5, 0x99, 0x06, 0x51,
+	0x2a, 0x68, 0x30, 0xa5, 0x17, 0xb0, 0x4f, 0xa8, 0xcd, 0x34, 0x28, 0x1b, 0xa0, 0x68, 0x50, 0x4b,
+	0x0e, 0x7c, 0xd7, 0xa3, 0x36, 0xd3, 0x20, 0x4e, 0x06, 0x0d, 0xa6, 0x8d, 0xe0, 0x1a, 0x7c, 0x4a,
+	0x6d, 0xa6, 0x41, 0xd9, 0x04, 0xa1, 0x41, 0x99, 0x96, 0x68, 0x70, 0x8b, 0xda, 0x4c, 0x83, 0x22,
+	0x9c, 0x6a, 0x50, 0x26, 0x72, 0x0d, 0x3e, 0xa3, 0x36, 0xd3, 0xa0, 0x08, 0x0a, 0x0d, 0xa6, 0x2d,
+	0x04, 0x0d, 0x3e, 0xa7, 0x36, 0xd3, 0xa0, 0x6c, 0x9f, 0xd4, 0x60, 0x8a, 0xc6, 0x35, 0xf8, 0x07,
+	0x6a, 0x33, 0x0d, 0x4a, 0x38, 0xa1, 0x41, 0x11, 0x00, 0x0d, 0x56, 0xa8, 0x3d, 0x96, 0x06, 0xc3,
+	0xe4, 0xae, 0x44, 0x83, 0x08, 0x84, 0x69, 0x50, 0x92, 0x6b, 0x1a, 0xfc, 0x23, 0xb5, 0xf3, 0x68,
+	0x50, 0xc0, 0x0d, 0x69, 0x50, 0xe7, 0xe1, 0x1a, 0xdc, 0xa5, 0x76, 0x66, 0x0d, 0x62, 0x06, 0xae,
+	0xc1, 0x7f, 0x91, 0xe5, 0x56, 0xad, 0x03, 0xf2, 0x4b, 0x44, 0xf8, 0x82, 0x37, 0x7f, 0xf7, 0x56,
+	0xe4, 0x0f, 0xb5, 0x0e, 0x17, 0x28, 0xff, 0x38, 0x68, 0xf7, 0xbb, 0x57, 0x61, 0xa1, 0xa5, 0xc6,
+	0x14, 0xf0, 0xc0, 0x4f, 0xa4, 0xfb, 0x32, 0x13, 0x78, 0xe0, 0xf3, 0x0f, 0x04, 0x9e, 0xc4, 0x9c,
+	0x1a, 0x59, 0x61, 0xe0, 0x20, 0x75, 0xa1, 0xf8, 0x57, 0x1c, 0xfe, 0xcf, 0xe3, 0xc0, 0xc3, 0x6a,
+	0x00, 0x9f, 0x40, 0xc0, 0x1a, 0xab, 0x46, 0x55, 0x8a, 0xc0, 0x17, 0x6b, 0xc5, 0x5f, 0xb3, 0x51,
+	0x04, 0x3e, 0x7c, 0x62, 0x0a, 0x11, 0x15, 0x14, 0xb0, 0xbc, 0x88, 0x55, 0xe6, 0xf5, 0xf8, 0x14,
+	0xb0, 0x02, 0x1d, 0x6b, 0xbd, 0x50, 0xa3, 0x2a, 0x45, 0xe0, 0x8b, 0xf5, 0xe9, 0x6f, 0xd9, 0x28,
+	0x02, 0xff, 0x58, 0xeb, 0x85, 0x1a, 0x75, 0xea, 0xe4, 0x0e, 0xa3, 0x48, 0xd6, 0x18, 0xb9, 0xb4,
+	0xbd, 0xe1, 0x24, 0x7f, 0x19, 0x87, 0x24, 0x59, 0xf6, 0x92, 0x3f, 0x40, 0xc3, 0x9a, 0x8d, 0xe3,
+	0x88, 0x28, 0xf0, 0xe5, 0xc2, 0xf8, 0xf7, 0x8c, 0x44, 0x81, 0x9f, 0xfc, 0xd1, 0x88, 0x64, 0xdc,
+	0x69, 0x91, 0x35, 0x3e, 0x68, 0xa2, 0x4b, 0x72, 0x5d, 0x7d, 0xcb, 0xa9, 0x5e, 0x8e, 0x35, 0x70,
+	0xc9, 0x3d, 0xe2, 0x2f, 0x90, 0xb1, 0x0e, 0xe8, 0x57, 0x30, 0x1d, 0x7b, 0x4a, 0xa2, 0x67, 0x7b,
+	0x59, 0xe9, 0x02, 0x5f, 0xfc, 0xd5, 0xe9, 0xd2, 0x2b, 0x58, 0xf5, 0xb0, 0xb0, 0x57, 0x33, 0xaa,
+	0x9e, 0xaf, 0xfc, 0x9a, 0xea, 0xa1, 0x1a, 0xfc, 0x9b, 0x14, 0x53, 0xf0, 0xa4, 0x1c, 0xfc, 0x83,
+	0xa3, 0xfb, 0x63, 0xa3, 0x43, 0xbd, 0x00, 0xf8, 0xa5, 0x16, 0x0a, 0x3a, 0x5f, 0x08, 0x23, 0xe4,
+	0xf5, 0x03, 0x8a, 0xc8, 0x3e, 0x07, 0xff, 0xd3, 0x38, 0xe0, 0xac, 0xc0, 0xb0, 0xff, 0x80, 0xbc,
+	0xd0, 0x4a, 0x23, 0x52, 0x26, 0xbc, 0xb6, 0x88, 0xc2, 0x73, 0x90, 0x41, 0x26, 0xfc, 0x0e, 0xf8,
+	0x54, 0x64, 0xa2, 0x44, 0xc5, 0xc8, 0x24, 0x14, 0x50, 0xb2, 0x0e, 0xc7, 0x1f, 0x19, 0x40, 0xe1,
+	0x45, 0x2d, 0x1d, 0x19, 0x25, 0xe8, 0x7c, 0x27, 0xeb, 0x0a, 0xbe, 0x56, 0x95, 0xde, 0x71, 0xa2,
+	0xd7, 0xe3, 0x13, 0xa1, 0x3a, 0x04, 0x84, 0xa5, 0x96, 0xf1, 0xa2, 0xd3, 0x26, 0xa5, 0x61, 0x62,
+	0x5e, 0xa6, 0xde, 0x67, 0x98, 0xbf, 0x0a, 0x30, 0xab, 0x4d, 0xca, 0xfc, 0xd5, 0xae, 0x38, 0x8f,
+	0xc8, 0x62, 0xdc, 0x8e, 0xe2, 0x0b, 0xb1, 0xec, 0xc7, 0x6c, 0xb3, 0x75, 0x34, 0x11, 0x2e, 0xf0,
+	0x68, 0xb2, 0x7a, 0x9f, 0x92, 0x55, 0x48, 0xd2, 0x06, 0xa2, 0x93, 0xe7, 0x15, 0xf9, 0x68, 0x22,
+	0x74, 0x38, 0x1a, 0xee, 0xb8, 0x6c, 0x48, 0x32, 0x5f, 0xfe, 0xc7, 0x36, 0x0b, 0xb2, 0x21, 0xc9,
+	0x63, 0x7f, 0x48, 0xe0, 0x67, 0xf2, 0xc4, 0xbb, 0x6c, 0xa3, 0x70, 0x34, 0x11, 0x12, 0x1e, 0x84,
+	0x27, 0xf7, 0x80, 0x90, 0x24, 0x85, 0x4d, 0xe8, 0x1e, 0xdb, 0x99, 0x1c, 0x4d, 0x84, 0xf3, 0x90,
+	0xc1, 0x66, 0x27, 0xea, 0x71, 0xe0, 0xbb, 0x7d, 0xb6, 0x6b, 0x44, 0x3d, 0x0e, 0xfc, 0x94, 0x08,
+	0x24, 0x3d, 0x60, 0xfb, 0x25, 0x49, 0x04, 0xe2, 0x94, 0x38, 0x89, 0x30, 0x2f, 0xd9, 0x5e, 0x49,
+	0xe2, 0x24, 0x0a, 0xfb, 0xa7, 0x68, 0x0d, 0x7f, 0x84, 0xdf, 0x33, 0xbf, 0xed, 0xcb, 0xa6, 0xb3,
+	0x1f, 0x77, 0x6b, 0xa4, 0x80, 0x07, 0x6d, 0x91, 0x58, 0xb5, 0x64, 0xbb, 0x6d, 0xd5, 0x9c, 0x2a,
+	0x59, 0x38, 0x8b, 0xbb, 0xd1, 0xd9, 0xa0, 0xdb, 0x6b, 0x5c, 0x46, 0x7c, 0x7f, 0xbd, 0xb0, 0x43,
+	0x6f, 0x63, 0x0b, 0xd5, 0x9b, 0xee, 0xde, 0x23, 0x05, 0xb4, 0x61, 0x02, 0x8a, 0x95, 0x84, 0x82,
+	0x5d, 0x46, 0xef, 0x72, 0x70, 0x79, 0x5b, 0x5c, 0x7e, 0x4b, 0x9c, 0xe1, 0x77, 0x19, 0xa7, 0x48,
+	0xec, 0xff, 0x46, 0x57, 0x49, 0x3b, 0xd9, 0x57, 0x67, 0x95, 0x4c, 0x5f, 0xd6, 0x9a, 0x03, 0x68,
+	0xe3, 0x74, 0x08, 0x3f, 0x5e, 0x4d, 0xbe, 0xb0, 0x52, 0x04, 0xf5, 0x85, 0x45, 0x45, 0xb0, 0x0d,
+	0x08, 0xb6, 0x8a, 0x50, 0x25, 0xab, 0xa6, 0x77, 0x12, 0x15, 0xa3, 0x60, 0xc0, 0x28, 0x98, 0x31,
+	0xd0, 0x4b, 0x87, 0x8a, 0x31, 0x65, 0xc0, 0x98, 0x1a, 0xc6, 0x18, 0x7a, 0xab, 0x50, 0x31, 0x56,
+	0x0c, 0x18, 0x2b, 0x66, 0x0c, 0xf4, 0xda, 0xa0, 0x62, 0x38, 0x06, 0x0c, 0x47, 0xc5, 0xd8, 0x27,
+	0x25, 0xf3, 0x5b, 0x81, 0x8a, 0x32, 0x6b, 0x40, 0x99, 0x1d, 0x81, 0x82, 0x4b, 0xbe, 0x8a, 0x32,
+	0x63, 0x40, 0x99, 0x51, 0x51, 0x0e, 0x89, 0x3b, 0xaa, 0x9a, 0xab, 0x38, 0xcb, 0x06, 0x9c, 0xe5,
+	0x51, 0x38, 0x5a, 0x99, 0x56, 0x71, 0x8a, 0x06, 0x9c, 0xa2, 0x71, 0xb6, 0xa9, 0x55, 0xf8, 0xb6,
+	0xf9, 0x3a, 0xa9, 0x22, 0xec, 0x91, 0x3b, 0x86, 0x4a, 0x7b, 0x1b, 0x84, 0xa5, 0x42, 0xbc, 0x21,
+	0x45, 0xbd, 0x9e, 0xaa, 0xf7, 0xcf, 0x19, 0xee, 0x9f, 0x33, 0x4c, 0x12, 0xbd, 0x68, 0xaa, 0x18,
+	0xf3, 0x06, 0x8c, 0xf9, 0xe1, 0x6e, 0xe8, 0x65, 0xf1, 0x36, 0x88, 0x45, 0x15, 0xe2, 0x8a, 0x6c,
+	0xdc, 0x50, 0xf0, 0x0c, 0x50, 0xfb, 0x2a, 0x54, 0xf6, 0x5d, 0x9e, 0x42, 0xdd, 0x83, 0xe9, 0x60,
+	0xaa, 0x7a, 0x06, 0xde, 0x3d, 0x95, 0x37, 0xe3, 0xc6, 0x2f, 0x25, 0xdd, 0x7c, 0x49, 0x88, 0x52,
+	0x47, 0x67, 0x89, 0x7d, 0xf8, 0xe9, 0x53, 0x71, 0x82, 0x7d, 0xa9, 0xee, 0x85, 0x45, 0x0b, 0xbe,
+	0x7c, 0x2d, 0x4e, 0xb2, 0x16, 0x7c, 0x3c, 0x78, 0x57, 0xfc, 0x55, 0xfc, 0xb3, 0xaa, 0x05, 0x59,
+	0x5d, 0x1a, 0x51, 0xf3, 0x7c, 0xf3, 0x1e, 0x59, 0x49, 0xf8, 0x0e, 0x7e, 0xf4, 0xa3, 0x76, 0xaf,
+	0x11, 0xb7, 0x7b, 0x5b, 0x73, 0x73, 0x56, 0xf1, 0xfa, 0xfa, 0xfa, 0x7a, 0x72, 0xf3, 0x09, 0x29,
+	0xa3, 0x25, 0xf9, 0x24, 0x12, 0x59, 0x78, 0x71, 0x66, 0x89, 0x68, 0x71, 0xd6, 0x13, 0xc5, 0x32,
+	0xfd, 0xea, 0x84, 0xb8, 0xf8, 0xc8, 0x56, 0xc9, 0x7c, 0x7c, 0xc3, 0x70, 0xa4, 0xcd, 0x4b, 0x66,
+	0x76, 0x09, 0x9d, 0xf1, 0xca, 0xcb, 0x3a, 0x41, 0xe0, 0x67, 0x27, 0x80, 0x75, 0xbd, 0x84, 0x4e,
+	0x87, 0x53, 0x82, 0x1a, 0x59, 0xd7, 0x8e, 0x89, 0xb3, 0x33, 0xc0, 0xb9, 0x72, 0x19, 0x9f, 0x2b,
+	0x8f, 0xa6, 0xc8, 0xd3, 0x09, 0x38, 0x91, 0x2e, 0xe3, 0x13, 0x69, 0x33, 0x45, 0x2f, 0x67, 0x2f,
+	0xe0, 0x2c, 0xbb, 0x8c, 0xcf, 0xb2, 0x47, 0x53, 0xe4, 0xe9, 0x05, 0x9c, 0x82, 0x97, 0xf1, 0x29,
+	0x78, 0x4a, 0x71, 0x46, 0xee, 0xea, 0xc7, 0xe1, 0xd9, 0x39, 0xe0, 0xfc, 0xdc, 0xd5, 0xce, 0xcf,
+	0x6f, 0x20, 0xc9, 0xd3, 0x11, 0x38, 0x79, 0x77, 0xb5, 0x93, 0xf7, 0x94, 0x24, 0x22, 0x1b, 0x43,
+	0x47, 0xf0, 0xd9, 0x59, 0xe0, 0xcc, 0x7e, 0x5d, 0x3f, 0xb3, 0xbf, 0x89, 0x26, 0x4f, 0x67, 0xe0,
+	0xb4, 0x7f, 0x5d, 0x3f, 0xed, 0x37, 0x8b, 0x90, 0xbf, 0xc6, 0x66, 0xe7, 0x00, 0x9f, 0xa0, 0x84,
+	0x7c, 0x02, 0xf3, 0xdc, 0x82, 0x97, 0xe0, 0xec, 0x0c, 0xe0, 0x30, 0x94, 0xb1, 0xc3, 0x90, 0x52,
+	0x7c, 0x53, 0xce, 0xe7, 0xf9, 0x36, 0x35, 0x33, 0x01, 0x78, 0x13, 0x6b, 0xaa, 0x37, 0x31, 0x42,
+	0x1d, 0xb0, 0xe5, 0xca, 0x4c, 0x00, 0xae, 0x46, 0x19, 0xbb, 0x1a, 0xe6, 0xa7, 0xc0, 0x77, 0x2d,
+	0xd9, 0x19, 0xc0, 0x0f, 0x29, 0x21, 0x3f, 0x24, 0x25, 0xf8, 0xbf, 0x95, 0x8e, 0x51, 0x5d, 0x5b,
+	0xf6, 0xc7, 0x24, 0x00, 0x2b, 0xc5, 0x58, 0x08, 0x47, 0x54, 0x9e, 0xb4, 0x35, 0x9c, 0x32, 0x6d,
+	0xcd, 0xcf, 0x16, 0x79, 0x38, 0xc2, 0x51, 0xc9, 0xde, 0xae, 0x7c, 0x16, 0xcc, 0x7d, 0xa3, 0x05,
+	0x93, 0x36, 0xf1, 0x27, 0x8b, 0xdc, 0x37, 0x99, 0x31, 0xd9, 0xdb, 0x97, 0xc3, 0xbd, 0xd9, 0x18,
+	0x76, 0x6f, 0xd0, 0x5c, 0xc1, 0x36, 0x4e, 0xf6, 0x26, 0x81, 0xef, 0x53, 0x42, 0xbe, 0xcf, 0x48,
+	0x82, 0x3c, 0xcb, 0x0e, 0x38, 0x46, 0x25, 0xe4, 0x18, 0x21, 0x41, 0x69, 0xd6, 0x51, 0x76, 0x06,
+	0xf0, 0x9a, 0xca, 0xd8, 0x6b, 0x1a, 0x4d, 0x91, 0xa7, 0x13, 0xe0, 0x52, 0x95, 0xb1, 0x4b, 0x65,
+	0xa6, 0xc8, 0x5b, 0x97, 0xc1, 0xdf, 0x2a, 0x63, 0x7f, 0x6b, 0x34, 0x45, 0x9e, 0x5e, 0x80, 0x33,
+	0x56, 0xc6, 0xce, 0x18, 0x2a, 0x99, 0xba, 0x45, 0x96, 0x9d, 0x03, 0x3c, 0x35, 0x57, 0xf3, 0xd4,
+	0x6e, 0x20, 0xc9, 0xd3, 0x11, 0x70, 0xe3, 0x5c, 0xcd, 0x8d, 0x43, 0x05, 0x73, 0xc8, 0x96, 0xcb,
+	0xce, 0x02, 0x3e, 0xde, 0xba, 0xee, 0xe3, 0xdd, 0x44, 0x93, 0xa7, 0x33, 0xe0, 0x00, 0xae, 0xeb,
+	0x0e, 0xa0, 0x59, 0x84, 0x39, 0xeb, 0x32, 0x78, 0x87, 0x25, 0xe4, 0x1d, 0x9a, 0xe7, 0x56, 0xde,
+	0xba, 0x0c, 0xae, 0x63, 0x19, 0xbb, 0x8e, 0xa8, 0x2e, 0x23, 0xfb, 0x31, 0x3b, 0x01, 0xf8, 0x95,
+	0x6b, 0xaa, 0x5f, 0x39, 0x42, 0x1d, 0x39, 0xeb, 0x32, 0x38, 0x9d, 0x65, 0xec, 0x74, 0x9a, 0x9f,
+	0x42, 0xce, 0xba, 0x0c, 0x1e, 0x69, 0x09, 0x79, 0xa4, 0xb8, 0x2e, 0x23, 0xa3, 0x33, 0x3b, 0x01,
+	0xd8, 0xab, 0xc6, 0xfa, 0x32, 0x62, 0xa3, 0x97, 0xb6, 0xc6, 0x50, 0x97, 0x47, 0xb8, 0xac, 0xd9,
+	0xdb, 0x95, 0xcf, 0x96, 0xbd, 0x6f, 0xb4, 0x65, 0x71, 0x5d, 0x36, 0x19, 0xb4, 0xd9, 0xdb, 0x97,
+	0xc3, 0xd1, 0xdd, 0x18, 0x76, 0x74, 0x25, 0x60, 0xf5, 0xf9, 0xd7, 0xad, 0x7a, 0xa3, 0xff, 0x9f,
+	0xc1, 0x69, 0xe5, 0x2c, 0x6e, 0x6d, 0xd7, 0xe3, 0x66, 0xad, 0x5d, 0xdf, 0xe6, 0xa0, 0xa7, 0x83,
+	0x8b, 0xed, 0xcb, 0x1d, 0xf8, 0xbe, 0xcd, 0x08, 0x3a, 0xa7, 0xbf, 0x05, 0x00, 0x00, 0xff, 0xff,
+	0x98, 0xed, 0x53, 0x5d, 0x42, 0x25, 0x00, 0x00,
+}
+
+func init() {
+	xxx_Test_ProtoFile_FileDesc.Messages = xxx_Test_ProtoFile_MessageDescs[0:4]
+	xxx_Test_ProtoFile_MessageDescs[0].Enums = xxx_Test_ProtoFile_EnumDescs[0:1]
+	xxx_Test_ProtoFile_MessageDescs[0].Messages = xxx_Test_ProtoFile_MessageDescs[4:24]
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[15].MessageType = xxx_Test_ProtoFile_MessageTypes[5].Type
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[16].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[17].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[33].MessageType = xxx_Test_ProtoFile_MessageTypes[6].Type
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[34].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[35].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[36].MessageType = xxx_Test_ProtoFile_MessageDescs[7].Reference()
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[37].MessageType = xxx_Test_ProtoFile_MessageDescs[8].Reference()
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[38].MessageType = xxx_Test_ProtoFile_MessageDescs[9].Reference()
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[39].MessageType = xxx_Test_ProtoFile_MessageDescs[10].Reference()
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[40].MessageType = xxx_Test_ProtoFile_MessageDescs[11].Reference()
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[41].MessageType = xxx_Test_ProtoFile_MessageDescs[12].Reference()
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[42].MessageType = xxx_Test_ProtoFile_MessageDescs[13].Reference()
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[43].MessageType = xxx_Test_ProtoFile_MessageDescs[14].Reference()
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[44].MessageType = xxx_Test_ProtoFile_MessageDescs[15].Reference()
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[45].MessageType = xxx_Test_ProtoFile_MessageDescs[16].Reference()
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[46].MessageType = xxx_Test_ProtoFile_MessageDescs[17].Reference()
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[47].MessageType = xxx_Test_ProtoFile_MessageDescs[18].Reference()
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[48].MessageType = xxx_Test_ProtoFile_MessageDescs[19].Reference()
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[49].MessageType = xxx_Test_ProtoFile_MessageDescs[20].Reference()
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[50].MessageType = xxx_Test_ProtoFile_MessageDescs[21].Reference()
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[51].MessageType = xxx_Test_ProtoFile_MessageDescs[22].Reference()
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[52].MessageType = xxx_Test_ProtoFile_MessageDescs[23].Reference()
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[54].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
+	xxx_Test_ProtoFile_MessageDescs[0].Fields[61].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
+	xxx_Test_ProtoFile_MessageDescs[4].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[0].Type
+	xxx_Test_ProtoFile_MessageDescs[22].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
+	xxx_Test_ProtoFile_MessageDescs[23].Fields[1].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
+	var err error
+	Test_ProtoFile, err = prototype.NewFile(&xxx_Test_ProtoFile_FileDesc)
+	if err != nil {
+		panic(err)
+	}
+}
+
+const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
+
+var Test_ProtoFile protoreflect.FileDescriptor
+
+var xxx_Test_ProtoFile_FileDesc = prototype.File{
+	Syntax:  protoreflect.Proto2,
+	Path:    "test.proto",
+	Package: "goproto.proto.test",
+}
+var xxx_Test_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
+	prototype.GoEnum(
+		xxx_Test_ProtoFile_EnumDescs[0].Reference(),
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+			return TestAllTypes_NestedEnum(n)
+		},
+	),
+}
+var xxx_Test_ProtoFile_EnumDescs = [1]prototype.Enum{
+	{
+		Name: "NestedEnum",
+		Values: []prototype.EnumValue{
+			{Name: "FOO", Number: 0},
+			{Name: "BAR", Number: 1},
+			{Name: "BAZ", Number: 2},
+			{Name: "NEG", Number: -1},
+		},
+	},
+}
+var xxx_Test_ProtoFile_MessageTypes = [24]protoimpl.MessageType{
+	{Type: prototype.GoMessage(
+		xxx_Test_ProtoFile_MessageDescs[0].Reference(),
+		func(protoreflect.MessageType) protoreflect.ProtoMessage {
+			return new(TestAllTypes)
+		},
+	)},
+	{Type: prototype.GoMessage(
+		xxx_Test_ProtoFile_MessageDescs[1].Reference(),
+		func(protoreflect.MessageType) protoreflect.ProtoMessage {
+			return new(TestAllExtensions)
+		},
+	)},
+	{Type: prototype.GoMessage(
+		xxx_Test_ProtoFile_MessageDescs[2].Reference(),
+		func(protoreflect.MessageType) protoreflect.ProtoMessage {
+			return new(OptionalGroupExtension)
+		},
+	)},
+	{Type: prototype.GoMessage(
+		xxx_Test_ProtoFile_MessageDescs[3].Reference(),
+		func(protoreflect.MessageType) protoreflect.ProtoMessage {
+			return new(RepeatedGroupExtension)
+		},
+	)},
+	{Type: prototype.GoMessage(
+		xxx_Test_ProtoFile_MessageDescs[4].Reference(),
+		func(protoreflect.MessageType) protoreflect.ProtoMessage {
+			return new(TestAllTypes_NestedMessage)
+		},
+	)},
+	{Type: prototype.GoMessage(
+		xxx_Test_ProtoFile_MessageDescs[5].Reference(),
+		func(protoreflect.MessageType) protoreflect.ProtoMessage {
+			return new(TestAllTypes_OptionalGroup)
+		},
+	)},
+	{Type: prototype.GoMessage(
+		xxx_Test_ProtoFile_MessageDescs[6].Reference(),
+		func(protoreflect.MessageType) protoreflect.ProtoMessage {
+			return new(TestAllTypes_RepeatedGroup)
+		},
+	)},
+	{ /* no message type for TestAllTypes_MapInt32Int32Entry */ },
+	{ /* no message type for TestAllTypes_MapInt64Int64Entry */ },
+	{ /* no message type for TestAllTypes_MapUint32Uint32Entry */ },
+	{ /* no message type for TestAllTypes_MapUint64Uint64Entry */ },
+	{ /* no message type for TestAllTypes_MapSint32Sint32Entry */ },
+	{ /* no message type for TestAllTypes_MapSint64Sint64Entry */ },
+	{ /* no message type for TestAllTypes_MapFixed32Fixed32Entry */ },
+	{ /* no message type for TestAllTypes_MapFixed64Fixed64Entry */ },
+	{ /* no message type for TestAllTypes_MapSfixed32Sfixed32Entry */ },
+	{ /* no message type for TestAllTypes_MapSfixed64Sfixed64Entry */ },
+	{ /* no message type for TestAllTypes_MapInt32FloatEntry */ },
+	{ /* no message type for TestAllTypes_MapInt32DoubleEntry */ },
+	{ /* no message type for TestAllTypes_MapBoolBoolEntry */ },
+	{ /* no message type for TestAllTypes_MapStringStringEntry */ },
+	{ /* no message type for TestAllTypes_MapStringBytesEntry */ },
+	{ /* no message type for TestAllTypes_MapStringNestedMessageEntry */ },
+	{ /* no message type for TestAllTypes_MapStringNestedEnumEntry */ },
+}
+var xxx_Test_ProtoFile_MessageDescs = [24]prototype.Message{
+	{
+		Name: "TestAllTypes",
+		Fields: []prototype.Field{
+			{
+				Name:        "optional_int32",
+				Number:      1,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Int32Kind,
+				JSONName:    "optionalInt32",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "optional_int64",
+				Number:      2,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Int64Kind,
+				JSONName:    "optionalInt64",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "optional_uint32",
+				Number:      3,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Uint32Kind,
+				JSONName:    "optionalUint32",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "optional_uint64",
+				Number:      4,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Uint64Kind,
+				JSONName:    "optionalUint64",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "optional_sint32",
+				Number:      5,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Sint32Kind,
+				JSONName:    "optionalSint32",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "optional_sint64",
+				Number:      6,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Sint64Kind,
+				JSONName:    "optionalSint64",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "optional_fixed32",
+				Number:      7,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Fixed32Kind,
+				JSONName:    "optionalFixed32",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "optional_fixed64",
+				Number:      8,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Fixed64Kind,
+				JSONName:    "optionalFixed64",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "optional_sfixed32",
+				Number:      9,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Sfixed32Kind,
+				JSONName:    "optionalSfixed32",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "optional_sfixed64",
+				Number:      10,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Sfixed64Kind,
+				JSONName:    "optionalSfixed64",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "optional_float",
+				Number:      11,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.FloatKind,
+				JSONName:    "optionalFloat",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "optional_double",
+				Number:      12,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.DoubleKind,
+				JSONName:    "optionalDouble",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "optional_bool",
+				Number:      13,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.BoolKind,
+				JSONName:    "optionalBool",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "optional_string",
+				Number:      14,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.StringKind,
+				JSONName:    "optionalString",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "optional_bytes",
+				Number:      15,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.BytesKind,
+				JSONName:    "optionalBytes",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "optionalgroup",
+				Number:      16,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.GroupKind,
+				JSONName:    "optionalgroup",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "optional_nested_message",
+				Number:      18,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "optionalNestedMessage",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "optional_nested_enum",
+				Number:      21,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.EnumKind,
+				JSONName:    "optionalNestedEnum",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "repeated_int32",
+				Number:      31,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.Int32Kind,
+				JSONName:    "repeatedInt32",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "repeated_int64",
+				Number:      32,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.Int64Kind,
+				JSONName:    "repeatedInt64",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "repeated_uint32",
+				Number:      33,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.Uint32Kind,
+				JSONName:    "repeatedUint32",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "repeated_uint64",
+				Number:      34,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.Uint64Kind,
+				JSONName:    "repeatedUint64",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "repeated_sint32",
+				Number:      35,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.Sint32Kind,
+				JSONName:    "repeatedSint32",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "repeated_sint64",
+				Number:      36,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.Sint64Kind,
+				JSONName:    "repeatedSint64",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "repeated_fixed32",
+				Number:      37,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.Fixed32Kind,
+				JSONName:    "repeatedFixed32",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "repeated_fixed64",
+				Number:      38,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.Fixed64Kind,
+				JSONName:    "repeatedFixed64",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "repeated_sfixed32",
+				Number:      39,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.Sfixed32Kind,
+				JSONName:    "repeatedSfixed32",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "repeated_sfixed64",
+				Number:      40,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.Sfixed64Kind,
+				JSONName:    "repeatedSfixed64",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "repeated_float",
+				Number:      41,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.FloatKind,
+				JSONName:    "repeatedFloat",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "repeated_double",
+				Number:      42,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.DoubleKind,
+				JSONName:    "repeatedDouble",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "repeated_bool",
+				Number:      43,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.BoolKind,
+				JSONName:    "repeatedBool",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "repeated_string",
+				Number:      44,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.StringKind,
+				JSONName:    "repeatedString",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "repeated_bytes",
+				Number:      45,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.BytesKind,
+				JSONName:    "repeatedBytes",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "repeatedgroup",
+				Number:      46,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.GroupKind,
+				JSONName:    "repeatedgroup",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "repeated_nested_message",
+				Number:      48,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "repeatedNestedMessage",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "repeated_nested_enum",
+				Number:      51,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.EnumKind,
+				JSONName:    "repeatedNestedEnum",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "map_int32_int32",
+				Number:      56,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "mapInt32Int32",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "map_int64_int64",
+				Number:      57,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "mapInt64Int64",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "map_uint32_uint32",
+				Number:      58,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "mapUint32Uint32",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "map_uint64_uint64",
+				Number:      59,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "mapUint64Uint64",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "map_sint32_sint32",
+				Number:      60,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "mapSint32Sint32",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "map_sint64_sint64",
+				Number:      61,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "mapSint64Sint64",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "map_fixed32_fixed32",
+				Number:      62,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "mapFixed32Fixed32",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "map_fixed64_fixed64",
+				Number:      63,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "mapFixed64Fixed64",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "map_sfixed32_sfixed32",
+				Number:      64,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "mapSfixed32Sfixed32",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "map_sfixed64_sfixed64",
+				Number:      65,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "mapSfixed64Sfixed64",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "map_int32_float",
+				Number:      66,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "mapInt32Float",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "map_int32_double",
+				Number:      67,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "mapInt32Double",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "map_bool_bool",
+				Number:      68,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "mapBoolBool",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "map_string_string",
+				Number:      69,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "mapStringString",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "map_string_bytes",
+				Number:      70,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "mapStringBytes",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "map_string_nested_message",
+				Number:      71,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "mapStringNestedMessage",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "map_string_nested_enum",
+				Number:      73,
+				Cardinality: protoreflect.Repeated,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "mapStringNestedEnum",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "oneof_uint32",
+				Number:      111,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Uint32Kind,
+				JSONName:    "oneofUint32",
+				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "oneof_nested_message",
+				Number:      112,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "oneofNestedMessage",
+				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "oneof_string",
+				Number:      113,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.StringKind,
+				JSONName:    "oneofString",
+				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "oneof_bytes",
+				Number:      114,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.BytesKind,
+				JSONName:    "oneofBytes",
+				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "oneof_bool",
+				Number:      115,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.BoolKind,
+				JSONName:    "oneofBool",
+				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "oneof_uint64",
+				Number:      116,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Uint64Kind,
+				JSONName:    "oneofUint64",
+				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "oneof_float",
+				Number:      117,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.FloatKind,
+				JSONName:    "oneofFloat",
+				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "oneof_double",
+				Number:      118,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.DoubleKind,
+				JSONName:    "oneofDouble",
+				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "oneof_enum",
+				Number:      119,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.EnumKind,
+				JSONName:    "oneofEnum",
+				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
+			},
+		},
+		Oneofs: []prototype.Oneof{
+			{Name: "oneof_field"},
+		},
+	},
+	{
+		Name:            "TestAllExtensions",
+		ExtensionRanges: [][2]protoreflect.FieldNumber{{1, 536870912}},
+	},
+	{
+		Name: "OptionalGroup_extension",
+		Fields: []prototype.Field{
+			{
+				Name:        "a",
+				Number:      17,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Int32Kind,
+				JSONName:    "a",
+				IsPacked:    prototype.False,
+			},
+		},
+	},
+	{
+		Name: "RepeatedGroup_extension",
+		Fields: []prototype.Field{
+			{
+				Name:        "a",
+				Number:      47,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Int32Kind,
+				JSONName:    "a",
+				IsPacked:    prototype.False,
+			},
+		},
+	},
+	{
+		Name: "NestedMessage",
+		Fields: []prototype.Field{
+			{
+				Name:        "a",
+				Number:      1,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Int32Kind,
+				JSONName:    "a",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "corecursive",
+				Number:      2,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "corecursive",
+				IsPacked:    prototype.False,
+			},
+		},
+	},
+	{
+		Name: "OptionalGroup",
+		Fields: []prototype.Field{
+			{
+				Name:        "a",
+				Number:      17,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Int32Kind,
+				JSONName:    "a",
+				IsPacked:    prototype.False,
+			},
+		},
+	},
+	{
+		Name: "RepeatedGroup",
+		Fields: []prototype.Field{
+			{
+				Name:        "a",
+				Number:      47,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Int32Kind,
+				JSONName:    "a",
+				IsPacked:    prototype.False,
+			},
+		},
+	},
+	{
+		Name: "MapInt32Int32Entry",
+		Fields: []prototype.Field{
+			{
+				Name:        "key",
+				Number:      1,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Int32Kind,
+				JSONName:    "key",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "value",
+				Number:      2,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Int32Kind,
+				JSONName:    "value",
+				IsPacked:    prototype.False,
+			},
+		},
+		IsMapEntry: true,
+	},
+	{
+		Name: "MapInt64Int64Entry",
+		Fields: []prototype.Field{
+			{
+				Name:        "key",
+				Number:      1,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Int64Kind,
+				JSONName:    "key",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "value",
+				Number:      2,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Int64Kind,
+				JSONName:    "value",
+				IsPacked:    prototype.False,
+			},
+		},
+		IsMapEntry: true,
+	},
+	{
+		Name: "MapUint32Uint32Entry",
+		Fields: []prototype.Field{
+			{
+				Name:        "key",
+				Number:      1,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Uint32Kind,
+				JSONName:    "key",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "value",
+				Number:      2,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Uint32Kind,
+				JSONName:    "value",
+				IsPacked:    prototype.False,
+			},
+		},
+		IsMapEntry: true,
+	},
+	{
+		Name: "MapUint64Uint64Entry",
+		Fields: []prototype.Field{
+			{
+				Name:        "key",
+				Number:      1,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Uint64Kind,
+				JSONName:    "key",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "value",
+				Number:      2,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Uint64Kind,
+				JSONName:    "value",
+				IsPacked:    prototype.False,
+			},
+		},
+		IsMapEntry: true,
+	},
+	{
+		Name: "MapSint32Sint32Entry",
+		Fields: []prototype.Field{
+			{
+				Name:        "key",
+				Number:      1,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Sint32Kind,
+				JSONName:    "key",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "value",
+				Number:      2,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Sint32Kind,
+				JSONName:    "value",
+				IsPacked:    prototype.False,
+			},
+		},
+		IsMapEntry: true,
+	},
+	{
+		Name: "MapSint64Sint64Entry",
+		Fields: []prototype.Field{
+			{
+				Name:        "key",
+				Number:      1,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Sint64Kind,
+				JSONName:    "key",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "value",
+				Number:      2,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Sint64Kind,
+				JSONName:    "value",
+				IsPacked:    prototype.False,
+			},
+		},
+		IsMapEntry: true,
+	},
+	{
+		Name: "MapFixed32Fixed32Entry",
+		Fields: []prototype.Field{
+			{
+				Name:        "key",
+				Number:      1,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Fixed32Kind,
+				JSONName:    "key",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "value",
+				Number:      2,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Fixed32Kind,
+				JSONName:    "value",
+				IsPacked:    prototype.False,
+			},
+		},
+		IsMapEntry: true,
+	},
+	{
+		Name: "MapFixed64Fixed64Entry",
+		Fields: []prototype.Field{
+			{
+				Name:        "key",
+				Number:      1,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Fixed64Kind,
+				JSONName:    "key",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "value",
+				Number:      2,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Fixed64Kind,
+				JSONName:    "value",
+				IsPacked:    prototype.False,
+			},
+		},
+		IsMapEntry: true,
+	},
+	{
+		Name: "MapSfixed32Sfixed32Entry",
+		Fields: []prototype.Field{
+			{
+				Name:        "key",
+				Number:      1,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Sfixed32Kind,
+				JSONName:    "key",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "value",
+				Number:      2,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Sfixed32Kind,
+				JSONName:    "value",
+				IsPacked:    prototype.False,
+			},
+		},
+		IsMapEntry: true,
+	},
+	{
+		Name: "MapSfixed64Sfixed64Entry",
+		Fields: []prototype.Field{
+			{
+				Name:        "key",
+				Number:      1,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Sfixed64Kind,
+				JSONName:    "key",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "value",
+				Number:      2,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Sfixed64Kind,
+				JSONName:    "value",
+				IsPacked:    prototype.False,
+			},
+		},
+		IsMapEntry: true,
+	},
+	{
+		Name: "MapInt32FloatEntry",
+		Fields: []prototype.Field{
+			{
+				Name:        "key",
+				Number:      1,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Int32Kind,
+				JSONName:    "key",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "value",
+				Number:      2,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.FloatKind,
+				JSONName:    "value",
+				IsPacked:    prototype.False,
+			},
+		},
+		IsMapEntry: true,
+	},
+	{
+		Name: "MapInt32DoubleEntry",
+		Fields: []prototype.Field{
+			{
+				Name:        "key",
+				Number:      1,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.Int32Kind,
+				JSONName:    "key",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "value",
+				Number:      2,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.DoubleKind,
+				JSONName:    "value",
+				IsPacked:    prototype.False,
+			},
+		},
+		IsMapEntry: true,
+	},
+	{
+		Name: "MapBoolBoolEntry",
+		Fields: []prototype.Field{
+			{
+				Name:        "key",
+				Number:      1,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.BoolKind,
+				JSONName:    "key",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "value",
+				Number:      2,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.BoolKind,
+				JSONName:    "value",
+				IsPacked:    prototype.False,
+			},
+		},
+		IsMapEntry: true,
+	},
+	{
+		Name: "MapStringStringEntry",
+		Fields: []prototype.Field{
+			{
+				Name:        "key",
+				Number:      1,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.StringKind,
+				JSONName:    "key",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "value",
+				Number:      2,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.StringKind,
+				JSONName:    "value",
+				IsPacked:    prototype.False,
+			},
+		},
+		IsMapEntry: true,
+	},
+	{
+		Name: "MapStringBytesEntry",
+		Fields: []prototype.Field{
+			{
+				Name:        "key",
+				Number:      1,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.StringKind,
+				JSONName:    "key",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "value",
+				Number:      2,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.BytesKind,
+				JSONName:    "value",
+				IsPacked:    prototype.False,
+			},
+		},
+		IsMapEntry: true,
+	},
+	{
+		Name: "MapStringNestedMessageEntry",
+		Fields: []prototype.Field{
+			{
+				Name:        "key",
+				Number:      1,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.StringKind,
+				JSONName:    "key",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "value",
+				Number:      2,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.MessageKind,
+				JSONName:    "value",
+				IsPacked:    prototype.False,
+			},
+		},
+		IsMapEntry: true,
+	},
+	{
+		Name: "MapStringNestedEnumEntry",
+		Fields: []prototype.Field{
+			{
+				Name:        "key",
+				Number:      1,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.StringKind,
+				JSONName:    "key",
+				IsPacked:    prototype.False,
+			},
+			{
+				Name:        "value",
+				Number:      2,
+				Cardinality: protoreflect.Optional,
+				Kind:        protoreflect.EnumKind,
+				JSONName:    "value",
+				IsPacked:    prototype.False,
+			},
+		},
+		IsMapEntry: true,
+	},
+}