github.com/whiteCcinn/protobuf-go@v1.0.9/internal/impl/codec_gen.go (about)

     1  // Copyright 2018 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // Code generated by generate-types. DO NOT EDIT.
     6  
     7  package impl
     8  
     9  import (
    10  	"math"
    11  	"unicode/utf8"
    12  
    13  	"github.com/whiteCcinn/protobuf-go/encoding/protowire"
    14  	"github.com/whiteCcinn/protobuf-go/reflect/protoreflect"
    15  )
    16  
    17  // sizeBool returns the size of wire encoding a bool pointer as a Bool.
    18  func sizeBool(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
    19  	v := *p.Bool()
    20  	return f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v))
    21  }
    22  
    23  // appendBool wire encodes a bool pointer as a Bool.
    24  func appendBool(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
    25  	v := *p.Bool()
    26  	b = protowire.AppendVarint(b, f.wiretag)
    27  	b = protowire.AppendVarint(b, protowire.EncodeBool(v))
    28  	return b, nil
    29  }
    30  
    31  // consumeBool wire decodes a bool pointer as a Bool.
    32  func consumeBool(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
    33  	if wtyp != protowire.VarintType {
    34  		return out, errUnknown
    35  	}
    36  	var v uint64
    37  	var n int
    38  	if len(b) >= 1 && b[0] < 0x80 {
    39  		v = uint64(b[0])
    40  		n = 1
    41  	} else if len(b) >= 2 && b[1] < 128 {
    42  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
    43  		n = 2
    44  	} else {
    45  		v, n = protowire.ConsumeVarint(b)
    46  	}
    47  	if n < 0 {
    48  		return out, errDecode
    49  	}
    50  	*p.Bool() = protowire.DecodeBool(v)
    51  	out.n = n
    52  	return out, nil
    53  }
    54  
    55  var coderBool = pointerCoderFuncs{
    56  	size:      sizeBool,
    57  	marshal:   appendBool,
    58  	unmarshal: consumeBool,
    59  	merge:     mergeBool,
    60  }
    61  
    62  // sizeBoolNoZero returns the size of wire encoding a bool pointer as a Bool.
    63  // The zero value is not encoded.
    64  func sizeBoolNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
    65  	v := *p.Bool()
    66  	if v == false {
    67  		return 0
    68  	}
    69  	return f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v))
    70  }
    71  
    72  // appendBoolNoZero wire encodes a bool pointer as a Bool.
    73  // The zero value is not encoded.
    74  func appendBoolNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
    75  	v := *p.Bool()
    76  	if v == false {
    77  		return b, nil
    78  	}
    79  	b = protowire.AppendVarint(b, f.wiretag)
    80  	b = protowire.AppendVarint(b, protowire.EncodeBool(v))
    81  	return b, nil
    82  }
    83  
    84  var coderBoolNoZero = pointerCoderFuncs{
    85  	size:      sizeBoolNoZero,
    86  	marshal:   appendBoolNoZero,
    87  	unmarshal: consumeBool,
    88  	merge:     mergeBoolNoZero,
    89  }
    90  
    91  // sizeBoolPtr returns the size of wire encoding a *bool pointer as a Bool.
    92  // It panics if the pointer is nil.
    93  func sizeBoolPtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
    94  	v := **p.BoolPtr()
    95  	return f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v))
    96  }
    97  
    98  // appendBoolPtr wire encodes a *bool pointer as a Bool.
    99  // It panics if the pointer is nil.
   100  func appendBoolPtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
   101  	v := **p.BoolPtr()
   102  	b = protowire.AppendVarint(b, f.wiretag)
   103  	b = protowire.AppendVarint(b, protowire.EncodeBool(v))
   104  	return b, nil
   105  }
   106  
   107  // consumeBoolPtr wire decodes a *bool pointer as a Bool.
   108  func consumeBoolPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
   109  	if wtyp != protowire.VarintType {
   110  		return out, errUnknown
   111  	}
   112  	var v uint64
   113  	var n int
   114  	if len(b) >= 1 && b[0] < 0x80 {
   115  		v = uint64(b[0])
   116  		n = 1
   117  	} else if len(b) >= 2 && b[1] < 128 {
   118  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
   119  		n = 2
   120  	} else {
   121  		v, n = protowire.ConsumeVarint(b)
   122  	}
   123  	if n < 0 {
   124  		return out, errDecode
   125  	}
   126  	vp := p.BoolPtr()
   127  	if *vp == nil {
   128  		*vp = new(bool)
   129  	}
   130  	**vp = protowire.DecodeBool(v)
   131  	out.n = n
   132  	return out, nil
   133  }
   134  
   135  var coderBoolPtr = pointerCoderFuncs{
   136  	size:      sizeBoolPtr,
   137  	marshal:   appendBoolPtr,
   138  	unmarshal: consumeBoolPtr,
   139  	merge:     mergeBoolPtr,
   140  }
   141  
   142  // sizeBoolSlice returns the size of wire encoding a []bool pointer as a repeated Bool.
   143  func sizeBoolSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
   144  	s := *p.BoolSlice()
   145  	for _, v := range s {
   146  		size += f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v))
   147  	}
   148  	return size
   149  }
   150  
   151  // appendBoolSlice encodes a []bool pointer as a repeated Bool.
   152  func appendBoolSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
   153  	s := *p.BoolSlice()
   154  	for _, v := range s {
   155  		b = protowire.AppendVarint(b, f.wiretag)
   156  		b = protowire.AppendVarint(b, protowire.EncodeBool(v))
   157  	}
   158  	return b, nil
   159  }
   160  
   161  // consumeBoolSlice wire decodes a []bool pointer as a repeated Bool.
   162  func consumeBoolSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
   163  	sp := p.BoolSlice()
   164  	if wtyp == protowire.BytesType {
   165  		s := *sp
   166  		b, n := protowire.ConsumeBytes(b)
   167  		if n < 0 {
   168  			return out, errDecode
   169  		}
   170  		for len(b) > 0 {
   171  			var v uint64
   172  			var n int
   173  			if len(b) >= 1 && b[0] < 0x80 {
   174  				v = uint64(b[0])
   175  				n = 1
   176  			} else if len(b) >= 2 && b[1] < 128 {
   177  				v = uint64(b[0]&0x7f) + uint64(b[1])<<7
   178  				n = 2
   179  			} else {
   180  				v, n = protowire.ConsumeVarint(b)
   181  			}
   182  			if n < 0 {
   183  				return out, errDecode
   184  			}
   185  			s = append(s, protowire.DecodeBool(v))
   186  			b = b[n:]
   187  		}
   188  		*sp = s
   189  		out.n = n
   190  		return out, nil
   191  	}
   192  	if wtyp != protowire.VarintType {
   193  		return out, errUnknown
   194  	}
   195  	var v uint64
   196  	var n int
   197  	if len(b) >= 1 && b[0] < 0x80 {
   198  		v = uint64(b[0])
   199  		n = 1
   200  	} else if len(b) >= 2 && b[1] < 128 {
   201  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
   202  		n = 2
   203  	} else {
   204  		v, n = protowire.ConsumeVarint(b)
   205  	}
   206  	if n < 0 {
   207  		return out, errDecode
   208  	}
   209  	*sp = append(*sp, protowire.DecodeBool(v))
   210  	out.n = n
   211  	return out, nil
   212  }
   213  
   214  var coderBoolSlice = pointerCoderFuncs{
   215  	size:      sizeBoolSlice,
   216  	marshal:   appendBoolSlice,
   217  	unmarshal: consumeBoolSlice,
   218  	merge:     mergeBoolSlice,
   219  }
   220  
   221  // sizeBoolPackedSlice returns the size of wire encoding a []bool pointer as a packed repeated Bool.
   222  func sizeBoolPackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
   223  	s := *p.BoolSlice()
   224  	if len(s) == 0 {
   225  		return 0
   226  	}
   227  	n := 0
   228  	for _, v := range s {
   229  		n += protowire.SizeVarint(protowire.EncodeBool(v))
   230  	}
   231  	return f.tagsize + protowire.SizeBytes(n)
   232  }
   233  
   234  // appendBoolPackedSlice encodes a []bool pointer as a packed repeated Bool.
   235  func appendBoolPackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
   236  	s := *p.BoolSlice()
   237  	if len(s) == 0 {
   238  		return b, nil
   239  	}
   240  	b = protowire.AppendVarint(b, f.wiretag)
   241  	n := 0
   242  	for _, v := range s {
   243  		n += protowire.SizeVarint(protowire.EncodeBool(v))
   244  	}
   245  	b = protowire.AppendVarint(b, uint64(n))
   246  	for _, v := range s {
   247  		b = protowire.AppendVarint(b, protowire.EncodeBool(v))
   248  	}
   249  	return b, nil
   250  }
   251  
   252  var coderBoolPackedSlice = pointerCoderFuncs{
   253  	size:      sizeBoolPackedSlice,
   254  	marshal:   appendBoolPackedSlice,
   255  	unmarshal: consumeBoolSlice,
   256  	merge:     mergeBoolSlice,
   257  }
   258  
   259  // sizeBoolValue returns the size of wire encoding a bool value as a Bool.
   260  func sizeBoolValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {
   261  	return tagsize + protowire.SizeVarint(protowire.EncodeBool(v.Bool()))
   262  }
   263  
   264  // appendBoolValue encodes a bool value as a Bool.
   265  func appendBoolValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
   266  	b = protowire.AppendVarint(b, wiretag)
   267  	b = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool()))
   268  	return b, nil
   269  }
   270  
   271  // consumeBoolValue decodes a bool value as a Bool.
   272  func consumeBoolValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
   273  	if wtyp != protowire.VarintType {
   274  		return protoreflect.Value{}, out, errUnknown
   275  	}
   276  	var v uint64
   277  	var n int
   278  	if len(b) >= 1 && b[0] < 0x80 {
   279  		v = uint64(b[0])
   280  		n = 1
   281  	} else if len(b) >= 2 && b[1] < 128 {
   282  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
   283  		n = 2
   284  	} else {
   285  		v, n = protowire.ConsumeVarint(b)
   286  	}
   287  	if n < 0 {
   288  		return protoreflect.Value{}, out, errDecode
   289  	}
   290  	out.n = n
   291  	return protoreflect.ValueOfBool(protowire.DecodeBool(v)), out, nil
   292  }
   293  
   294  var coderBoolValue = valueCoderFuncs{
   295  	size:      sizeBoolValue,
   296  	marshal:   appendBoolValue,
   297  	unmarshal: consumeBoolValue,
   298  	merge:     mergeScalarValue,
   299  }
   300  
   301  // sizeBoolSliceValue returns the size of wire encoding a []bool value as a repeated Bool.
   302  func sizeBoolSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
   303  	list := listv.List()
   304  	for i, llen := 0, list.Len(); i < llen; i++ {
   305  		v := list.Get(i)
   306  		size += tagsize + protowire.SizeVarint(protowire.EncodeBool(v.Bool()))
   307  	}
   308  	return size
   309  }
   310  
   311  // appendBoolSliceValue encodes a []bool value as a repeated Bool.
   312  func appendBoolSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
   313  	list := listv.List()
   314  	for i, llen := 0, list.Len(); i < llen; i++ {
   315  		v := list.Get(i)
   316  		b = protowire.AppendVarint(b, wiretag)
   317  		b = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool()))
   318  	}
   319  	return b, nil
   320  }
   321  
   322  // consumeBoolSliceValue wire decodes a []bool value as a repeated Bool.
   323  func consumeBoolSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
   324  	list := listv.List()
   325  	if wtyp == protowire.BytesType {
   326  		b, n := protowire.ConsumeBytes(b)
   327  		if n < 0 {
   328  			return protoreflect.Value{}, out, errDecode
   329  		}
   330  		for len(b) > 0 {
   331  			var v uint64
   332  			var n int
   333  			if len(b) >= 1 && b[0] < 0x80 {
   334  				v = uint64(b[0])
   335  				n = 1
   336  			} else if len(b) >= 2 && b[1] < 128 {
   337  				v = uint64(b[0]&0x7f) + uint64(b[1])<<7
   338  				n = 2
   339  			} else {
   340  				v, n = protowire.ConsumeVarint(b)
   341  			}
   342  			if n < 0 {
   343  				return protoreflect.Value{}, out, errDecode
   344  			}
   345  			list.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v)))
   346  			b = b[n:]
   347  		}
   348  		out.n = n
   349  		return listv, out, nil
   350  	}
   351  	if wtyp != protowire.VarintType {
   352  		return protoreflect.Value{}, out, errUnknown
   353  	}
   354  	var v uint64
   355  	var n int
   356  	if len(b) >= 1 && b[0] < 0x80 {
   357  		v = uint64(b[0])
   358  		n = 1
   359  	} else if len(b) >= 2 && b[1] < 128 {
   360  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
   361  		n = 2
   362  	} else {
   363  		v, n = protowire.ConsumeVarint(b)
   364  	}
   365  	if n < 0 {
   366  		return protoreflect.Value{}, out, errDecode
   367  	}
   368  	list.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v)))
   369  	out.n = n
   370  	return listv, out, nil
   371  }
   372  
   373  var coderBoolSliceValue = valueCoderFuncs{
   374  	size:      sizeBoolSliceValue,
   375  	marshal:   appendBoolSliceValue,
   376  	unmarshal: consumeBoolSliceValue,
   377  	merge:     mergeListValue,
   378  }
   379  
   380  // sizeBoolPackedSliceValue returns the size of wire encoding a []bool value as a packed repeated Bool.
   381  func sizeBoolPackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
   382  	list := listv.List()
   383  	llen := list.Len()
   384  	if llen == 0 {
   385  		return 0
   386  	}
   387  	n := 0
   388  	for i, llen := 0, llen; i < llen; i++ {
   389  		v := list.Get(i)
   390  		n += protowire.SizeVarint(protowire.EncodeBool(v.Bool()))
   391  	}
   392  	return tagsize + protowire.SizeBytes(n)
   393  }
   394  
   395  // appendBoolPackedSliceValue encodes a []bool value as a packed repeated Bool.
   396  func appendBoolPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
   397  	list := listv.List()
   398  	llen := list.Len()
   399  	if llen == 0 {
   400  		return b, nil
   401  	}
   402  	b = protowire.AppendVarint(b, wiretag)
   403  	n := 0
   404  	for i := 0; i < llen; i++ {
   405  		v := list.Get(i)
   406  		n += protowire.SizeVarint(protowire.EncodeBool(v.Bool()))
   407  	}
   408  	b = protowire.AppendVarint(b, uint64(n))
   409  	for i := 0; i < llen; i++ {
   410  		v := list.Get(i)
   411  		b = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool()))
   412  	}
   413  	return b, nil
   414  }
   415  
   416  var coderBoolPackedSliceValue = valueCoderFuncs{
   417  	size:      sizeBoolPackedSliceValue,
   418  	marshal:   appendBoolPackedSliceValue,
   419  	unmarshal: consumeBoolSliceValue,
   420  	merge:     mergeListValue,
   421  }
   422  
   423  // sizeEnumValue returns the size of wire encoding a  value as a Enum.
   424  func sizeEnumValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {
   425  	return tagsize + protowire.SizeVarint(uint64(v.Enum()))
   426  }
   427  
   428  // appendEnumValue encodes a  value as a Enum.
   429  func appendEnumValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
   430  	b = protowire.AppendVarint(b, wiretag)
   431  	b = protowire.AppendVarint(b, uint64(v.Enum()))
   432  	return b, nil
   433  }
   434  
   435  // consumeEnumValue decodes a  value as a Enum.
   436  func consumeEnumValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
   437  	if wtyp != protowire.VarintType {
   438  		return protoreflect.Value{}, out, errUnknown
   439  	}
   440  	var v uint64
   441  	var n int
   442  	if len(b) >= 1 && b[0] < 0x80 {
   443  		v = uint64(b[0])
   444  		n = 1
   445  	} else if len(b) >= 2 && b[1] < 128 {
   446  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
   447  		n = 2
   448  	} else {
   449  		v, n = protowire.ConsumeVarint(b)
   450  	}
   451  	if n < 0 {
   452  		return protoreflect.Value{}, out, errDecode
   453  	}
   454  	out.n = n
   455  	return protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)), out, nil
   456  }
   457  
   458  var coderEnumValue = valueCoderFuncs{
   459  	size:      sizeEnumValue,
   460  	marshal:   appendEnumValue,
   461  	unmarshal: consumeEnumValue,
   462  	merge:     mergeScalarValue,
   463  }
   464  
   465  // sizeEnumSliceValue returns the size of wire encoding a [] value as a repeated Enum.
   466  func sizeEnumSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
   467  	list := listv.List()
   468  	for i, llen := 0, list.Len(); i < llen; i++ {
   469  		v := list.Get(i)
   470  		size += tagsize + protowire.SizeVarint(uint64(v.Enum()))
   471  	}
   472  	return size
   473  }
   474  
   475  // appendEnumSliceValue encodes a [] value as a repeated Enum.
   476  func appendEnumSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
   477  	list := listv.List()
   478  	for i, llen := 0, list.Len(); i < llen; i++ {
   479  		v := list.Get(i)
   480  		b = protowire.AppendVarint(b, wiretag)
   481  		b = protowire.AppendVarint(b, uint64(v.Enum()))
   482  	}
   483  	return b, nil
   484  }
   485  
   486  // consumeEnumSliceValue wire decodes a [] value as a repeated Enum.
   487  func consumeEnumSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
   488  	list := listv.List()
   489  	if wtyp == protowire.BytesType {
   490  		b, n := protowire.ConsumeBytes(b)
   491  		if n < 0 {
   492  			return protoreflect.Value{}, out, errDecode
   493  		}
   494  		for len(b) > 0 {
   495  			var v uint64
   496  			var n int
   497  			if len(b) >= 1 && b[0] < 0x80 {
   498  				v = uint64(b[0])
   499  				n = 1
   500  			} else if len(b) >= 2 && b[1] < 128 {
   501  				v = uint64(b[0]&0x7f) + uint64(b[1])<<7
   502  				n = 2
   503  			} else {
   504  				v, n = protowire.ConsumeVarint(b)
   505  			}
   506  			if n < 0 {
   507  				return protoreflect.Value{}, out, errDecode
   508  			}
   509  			list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)))
   510  			b = b[n:]
   511  		}
   512  		out.n = n
   513  		return listv, out, nil
   514  	}
   515  	if wtyp != protowire.VarintType {
   516  		return protoreflect.Value{}, out, errUnknown
   517  	}
   518  	var v uint64
   519  	var n int
   520  	if len(b) >= 1 && b[0] < 0x80 {
   521  		v = uint64(b[0])
   522  		n = 1
   523  	} else if len(b) >= 2 && b[1] < 128 {
   524  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
   525  		n = 2
   526  	} else {
   527  		v, n = protowire.ConsumeVarint(b)
   528  	}
   529  	if n < 0 {
   530  		return protoreflect.Value{}, out, errDecode
   531  	}
   532  	list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)))
   533  	out.n = n
   534  	return listv, out, nil
   535  }
   536  
   537  var coderEnumSliceValue = valueCoderFuncs{
   538  	size:      sizeEnumSliceValue,
   539  	marshal:   appendEnumSliceValue,
   540  	unmarshal: consumeEnumSliceValue,
   541  	merge:     mergeListValue,
   542  }
   543  
   544  // sizeEnumPackedSliceValue returns the size of wire encoding a [] value as a packed repeated Enum.
   545  func sizeEnumPackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
   546  	list := listv.List()
   547  	llen := list.Len()
   548  	if llen == 0 {
   549  		return 0
   550  	}
   551  	n := 0
   552  	for i, llen := 0, llen; i < llen; i++ {
   553  		v := list.Get(i)
   554  		n += protowire.SizeVarint(uint64(v.Enum()))
   555  	}
   556  	return tagsize + protowire.SizeBytes(n)
   557  }
   558  
   559  // appendEnumPackedSliceValue encodes a [] value as a packed repeated Enum.
   560  func appendEnumPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
   561  	list := listv.List()
   562  	llen := list.Len()
   563  	if llen == 0 {
   564  		return b, nil
   565  	}
   566  	b = protowire.AppendVarint(b, wiretag)
   567  	n := 0
   568  	for i := 0; i < llen; i++ {
   569  		v := list.Get(i)
   570  		n += protowire.SizeVarint(uint64(v.Enum()))
   571  	}
   572  	b = protowire.AppendVarint(b, uint64(n))
   573  	for i := 0; i < llen; i++ {
   574  		v := list.Get(i)
   575  		b = protowire.AppendVarint(b, uint64(v.Enum()))
   576  	}
   577  	return b, nil
   578  }
   579  
   580  var coderEnumPackedSliceValue = valueCoderFuncs{
   581  	size:      sizeEnumPackedSliceValue,
   582  	marshal:   appendEnumPackedSliceValue,
   583  	unmarshal: consumeEnumSliceValue,
   584  	merge:     mergeListValue,
   585  }
   586  
   587  // sizeInt32 returns the size of wire encoding a int32 pointer as a Int32.
   588  func sizeInt32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
   589  	v := *p.Int32()
   590  	return f.tagsize + protowire.SizeVarint(uint64(v))
   591  }
   592  
   593  // appendInt32 wire encodes a int32 pointer as a Int32.
   594  func appendInt32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
   595  	v := *p.Int32()
   596  	b = protowire.AppendVarint(b, f.wiretag)
   597  	b = protowire.AppendVarint(b, uint64(v))
   598  	return b, nil
   599  }
   600  
   601  // consumeInt32 wire decodes a int32 pointer as a Int32.
   602  func consumeInt32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
   603  	if wtyp != protowire.VarintType {
   604  		return out, errUnknown
   605  	}
   606  	var v uint64
   607  	var n int
   608  	if len(b) >= 1 && b[0] < 0x80 {
   609  		v = uint64(b[0])
   610  		n = 1
   611  	} else if len(b) >= 2 && b[1] < 128 {
   612  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
   613  		n = 2
   614  	} else {
   615  		v, n = protowire.ConsumeVarint(b)
   616  	}
   617  	if n < 0 {
   618  		return out, errDecode
   619  	}
   620  	*p.Int32() = int32(v)
   621  	out.n = n
   622  	return out, nil
   623  }
   624  
   625  var coderInt32 = pointerCoderFuncs{
   626  	size:      sizeInt32,
   627  	marshal:   appendInt32,
   628  	unmarshal: consumeInt32,
   629  	merge:     mergeInt32,
   630  }
   631  
   632  // sizeInt32NoZero returns the size of wire encoding a int32 pointer as a Int32.
   633  // The zero value is not encoded.
   634  func sizeInt32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
   635  	v := *p.Int32()
   636  	if v == 0 {
   637  		return 0
   638  	}
   639  	return f.tagsize + protowire.SizeVarint(uint64(v))
   640  }
   641  
   642  // appendInt32NoZero wire encodes a int32 pointer as a Int32.
   643  // The zero value is not encoded.
   644  func appendInt32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
   645  	v := *p.Int32()
   646  	if v == 0 {
   647  		return b, nil
   648  	}
   649  	b = protowire.AppendVarint(b, f.wiretag)
   650  	b = protowire.AppendVarint(b, uint64(v))
   651  	return b, nil
   652  }
   653  
   654  var coderInt32NoZero = pointerCoderFuncs{
   655  	size:      sizeInt32NoZero,
   656  	marshal:   appendInt32NoZero,
   657  	unmarshal: consumeInt32,
   658  	merge:     mergeInt32NoZero,
   659  }
   660  
   661  // sizeInt32Ptr returns the size of wire encoding a *int32 pointer as a Int32.
   662  // It panics if the pointer is nil.
   663  func sizeInt32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
   664  	v := **p.Int32Ptr()
   665  	return f.tagsize + protowire.SizeVarint(uint64(v))
   666  }
   667  
   668  // appendInt32Ptr wire encodes a *int32 pointer as a Int32.
   669  // It panics if the pointer is nil.
   670  func appendInt32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
   671  	v := **p.Int32Ptr()
   672  	b = protowire.AppendVarint(b, f.wiretag)
   673  	b = protowire.AppendVarint(b, uint64(v))
   674  	return b, nil
   675  }
   676  
   677  // consumeInt32Ptr wire decodes a *int32 pointer as a Int32.
   678  func consumeInt32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
   679  	if wtyp != protowire.VarintType {
   680  		return out, errUnknown
   681  	}
   682  	var v uint64
   683  	var n int
   684  	if len(b) >= 1 && b[0] < 0x80 {
   685  		v = uint64(b[0])
   686  		n = 1
   687  	} else if len(b) >= 2 && b[1] < 128 {
   688  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
   689  		n = 2
   690  	} else {
   691  		v, n = protowire.ConsumeVarint(b)
   692  	}
   693  	if n < 0 {
   694  		return out, errDecode
   695  	}
   696  	vp := p.Int32Ptr()
   697  	if *vp == nil {
   698  		*vp = new(int32)
   699  	}
   700  	**vp = int32(v)
   701  	out.n = n
   702  	return out, nil
   703  }
   704  
   705  var coderInt32Ptr = pointerCoderFuncs{
   706  	size:      sizeInt32Ptr,
   707  	marshal:   appendInt32Ptr,
   708  	unmarshal: consumeInt32Ptr,
   709  	merge:     mergeInt32Ptr,
   710  }
   711  
   712  // sizeInt32Slice returns the size of wire encoding a []int32 pointer as a repeated Int32.
   713  func sizeInt32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
   714  	s := *p.Int32Slice()
   715  	for _, v := range s {
   716  		size += f.tagsize + protowire.SizeVarint(uint64(v))
   717  	}
   718  	return size
   719  }
   720  
   721  // appendInt32Slice encodes a []int32 pointer as a repeated Int32.
   722  func appendInt32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
   723  	s := *p.Int32Slice()
   724  	for _, v := range s {
   725  		b = protowire.AppendVarint(b, f.wiretag)
   726  		b = protowire.AppendVarint(b, uint64(v))
   727  	}
   728  	return b, nil
   729  }
   730  
   731  // consumeInt32Slice wire decodes a []int32 pointer as a repeated Int32.
   732  func consumeInt32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
   733  	sp := p.Int32Slice()
   734  	if wtyp == protowire.BytesType {
   735  		s := *sp
   736  		b, n := protowire.ConsumeBytes(b)
   737  		if n < 0 {
   738  			return out, errDecode
   739  		}
   740  		for len(b) > 0 {
   741  			var v uint64
   742  			var n int
   743  			if len(b) >= 1 && b[0] < 0x80 {
   744  				v = uint64(b[0])
   745  				n = 1
   746  			} else if len(b) >= 2 && b[1] < 128 {
   747  				v = uint64(b[0]&0x7f) + uint64(b[1])<<7
   748  				n = 2
   749  			} else {
   750  				v, n = protowire.ConsumeVarint(b)
   751  			}
   752  			if n < 0 {
   753  				return out, errDecode
   754  			}
   755  			s = append(s, int32(v))
   756  			b = b[n:]
   757  		}
   758  		*sp = s
   759  		out.n = n
   760  		return out, nil
   761  	}
   762  	if wtyp != protowire.VarintType {
   763  		return out, errUnknown
   764  	}
   765  	var v uint64
   766  	var n int
   767  	if len(b) >= 1 && b[0] < 0x80 {
   768  		v = uint64(b[0])
   769  		n = 1
   770  	} else if len(b) >= 2 && b[1] < 128 {
   771  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
   772  		n = 2
   773  	} else {
   774  		v, n = protowire.ConsumeVarint(b)
   775  	}
   776  	if n < 0 {
   777  		return out, errDecode
   778  	}
   779  	*sp = append(*sp, int32(v))
   780  	out.n = n
   781  	return out, nil
   782  }
   783  
   784  var coderInt32Slice = pointerCoderFuncs{
   785  	size:      sizeInt32Slice,
   786  	marshal:   appendInt32Slice,
   787  	unmarshal: consumeInt32Slice,
   788  	merge:     mergeInt32Slice,
   789  }
   790  
   791  // sizeInt32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Int32.
   792  func sizeInt32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
   793  	s := *p.Int32Slice()
   794  	if len(s) == 0 {
   795  		return 0
   796  	}
   797  	n := 0
   798  	for _, v := range s {
   799  		n += protowire.SizeVarint(uint64(v))
   800  	}
   801  	return f.tagsize + protowire.SizeBytes(n)
   802  }
   803  
   804  // appendInt32PackedSlice encodes a []int32 pointer as a packed repeated Int32.
   805  func appendInt32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
   806  	s := *p.Int32Slice()
   807  	if len(s) == 0 {
   808  		return b, nil
   809  	}
   810  	b = protowire.AppendVarint(b, f.wiretag)
   811  	n := 0
   812  	for _, v := range s {
   813  		n += protowire.SizeVarint(uint64(v))
   814  	}
   815  	b = protowire.AppendVarint(b, uint64(n))
   816  	for _, v := range s {
   817  		b = protowire.AppendVarint(b, uint64(v))
   818  	}
   819  	return b, nil
   820  }
   821  
   822  var coderInt32PackedSlice = pointerCoderFuncs{
   823  	size:      sizeInt32PackedSlice,
   824  	marshal:   appendInt32PackedSlice,
   825  	unmarshal: consumeInt32Slice,
   826  	merge:     mergeInt32Slice,
   827  }
   828  
   829  // sizeInt32Value returns the size of wire encoding a int32 value as a Int32.
   830  func sizeInt32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {
   831  	return tagsize + protowire.SizeVarint(uint64(int32(v.Int())))
   832  }
   833  
   834  // appendInt32Value encodes a int32 value as a Int32.
   835  func appendInt32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
   836  	b = protowire.AppendVarint(b, wiretag)
   837  	b = protowire.AppendVarint(b, uint64(int32(v.Int())))
   838  	return b, nil
   839  }
   840  
   841  // consumeInt32Value decodes a int32 value as a Int32.
   842  func consumeInt32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
   843  	if wtyp != protowire.VarintType {
   844  		return protoreflect.Value{}, out, errUnknown
   845  	}
   846  	var v uint64
   847  	var n int
   848  	if len(b) >= 1 && b[0] < 0x80 {
   849  		v = uint64(b[0])
   850  		n = 1
   851  	} else if len(b) >= 2 && b[1] < 128 {
   852  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
   853  		n = 2
   854  	} else {
   855  		v, n = protowire.ConsumeVarint(b)
   856  	}
   857  	if n < 0 {
   858  		return protoreflect.Value{}, out, errDecode
   859  	}
   860  	out.n = n
   861  	return protoreflect.ValueOfInt32(int32(v)), out, nil
   862  }
   863  
   864  var coderInt32Value = valueCoderFuncs{
   865  	size:      sizeInt32Value,
   866  	marshal:   appendInt32Value,
   867  	unmarshal: consumeInt32Value,
   868  	merge:     mergeScalarValue,
   869  }
   870  
   871  // sizeInt32SliceValue returns the size of wire encoding a []int32 value as a repeated Int32.
   872  func sizeInt32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
   873  	list := listv.List()
   874  	for i, llen := 0, list.Len(); i < llen; i++ {
   875  		v := list.Get(i)
   876  		size += tagsize + protowire.SizeVarint(uint64(int32(v.Int())))
   877  	}
   878  	return size
   879  }
   880  
   881  // appendInt32SliceValue encodes a []int32 value as a repeated Int32.
   882  func appendInt32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
   883  	list := listv.List()
   884  	for i, llen := 0, list.Len(); i < llen; i++ {
   885  		v := list.Get(i)
   886  		b = protowire.AppendVarint(b, wiretag)
   887  		b = protowire.AppendVarint(b, uint64(int32(v.Int())))
   888  	}
   889  	return b, nil
   890  }
   891  
   892  // consumeInt32SliceValue wire decodes a []int32 value as a repeated Int32.
   893  func consumeInt32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
   894  	list := listv.List()
   895  	if wtyp == protowire.BytesType {
   896  		b, n := protowire.ConsumeBytes(b)
   897  		if n < 0 {
   898  			return protoreflect.Value{}, out, errDecode
   899  		}
   900  		for len(b) > 0 {
   901  			var v uint64
   902  			var n int
   903  			if len(b) >= 1 && b[0] < 0x80 {
   904  				v = uint64(b[0])
   905  				n = 1
   906  			} else if len(b) >= 2 && b[1] < 128 {
   907  				v = uint64(b[0]&0x7f) + uint64(b[1])<<7
   908  				n = 2
   909  			} else {
   910  				v, n = protowire.ConsumeVarint(b)
   911  			}
   912  			if n < 0 {
   913  				return protoreflect.Value{}, out, errDecode
   914  			}
   915  			list.Append(protoreflect.ValueOfInt32(int32(v)))
   916  			b = b[n:]
   917  		}
   918  		out.n = n
   919  		return listv, out, nil
   920  	}
   921  	if wtyp != protowire.VarintType {
   922  		return protoreflect.Value{}, out, errUnknown
   923  	}
   924  	var v uint64
   925  	var n int
   926  	if len(b) >= 1 && b[0] < 0x80 {
   927  		v = uint64(b[0])
   928  		n = 1
   929  	} else if len(b) >= 2 && b[1] < 128 {
   930  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
   931  		n = 2
   932  	} else {
   933  		v, n = protowire.ConsumeVarint(b)
   934  	}
   935  	if n < 0 {
   936  		return protoreflect.Value{}, out, errDecode
   937  	}
   938  	list.Append(protoreflect.ValueOfInt32(int32(v)))
   939  	out.n = n
   940  	return listv, out, nil
   941  }
   942  
   943  var coderInt32SliceValue = valueCoderFuncs{
   944  	size:      sizeInt32SliceValue,
   945  	marshal:   appendInt32SliceValue,
   946  	unmarshal: consumeInt32SliceValue,
   947  	merge:     mergeListValue,
   948  }
   949  
   950  // sizeInt32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Int32.
   951  func sizeInt32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
   952  	list := listv.List()
   953  	llen := list.Len()
   954  	if llen == 0 {
   955  		return 0
   956  	}
   957  	n := 0
   958  	for i, llen := 0, llen; i < llen; i++ {
   959  		v := list.Get(i)
   960  		n += protowire.SizeVarint(uint64(int32(v.Int())))
   961  	}
   962  	return tagsize + protowire.SizeBytes(n)
   963  }
   964  
   965  // appendInt32PackedSliceValue encodes a []int32 value as a packed repeated Int32.
   966  func appendInt32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
   967  	list := listv.List()
   968  	llen := list.Len()
   969  	if llen == 0 {
   970  		return b, nil
   971  	}
   972  	b = protowire.AppendVarint(b, wiretag)
   973  	n := 0
   974  	for i := 0; i < llen; i++ {
   975  		v := list.Get(i)
   976  		n += protowire.SizeVarint(uint64(int32(v.Int())))
   977  	}
   978  	b = protowire.AppendVarint(b, uint64(n))
   979  	for i := 0; i < llen; i++ {
   980  		v := list.Get(i)
   981  		b = protowire.AppendVarint(b, uint64(int32(v.Int())))
   982  	}
   983  	return b, nil
   984  }
   985  
   986  var coderInt32PackedSliceValue = valueCoderFuncs{
   987  	size:      sizeInt32PackedSliceValue,
   988  	marshal:   appendInt32PackedSliceValue,
   989  	unmarshal: consumeInt32SliceValue,
   990  	merge:     mergeListValue,
   991  }
   992  
   993  // sizeSint32 returns the size of wire encoding a int32 pointer as a Sint32.
   994  func sizeSint32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
   995  	v := *p.Int32()
   996  	return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v)))
   997  }
   998  
   999  // appendSint32 wire encodes a int32 pointer as a Sint32.
  1000  func appendSint32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  1001  	v := *p.Int32()
  1002  	b = protowire.AppendVarint(b, f.wiretag)
  1003  	b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v)))
  1004  	return b, nil
  1005  }
  1006  
  1007  // consumeSint32 wire decodes a int32 pointer as a Sint32.
  1008  func consumeSint32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  1009  	if wtyp != protowire.VarintType {
  1010  		return out, errUnknown
  1011  	}
  1012  	var v uint64
  1013  	var n int
  1014  	if len(b) >= 1 && b[0] < 0x80 {
  1015  		v = uint64(b[0])
  1016  		n = 1
  1017  	} else if len(b) >= 2 && b[1] < 128 {
  1018  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  1019  		n = 2
  1020  	} else {
  1021  		v, n = protowire.ConsumeVarint(b)
  1022  	}
  1023  	if n < 0 {
  1024  		return out, errDecode
  1025  	}
  1026  	*p.Int32() = int32(protowire.DecodeZigZag(v & math.MaxUint32))
  1027  	out.n = n
  1028  	return out, nil
  1029  }
  1030  
  1031  var coderSint32 = pointerCoderFuncs{
  1032  	size:      sizeSint32,
  1033  	marshal:   appendSint32,
  1034  	unmarshal: consumeSint32,
  1035  	merge:     mergeInt32,
  1036  }
  1037  
  1038  // sizeSint32NoZero returns the size of wire encoding a int32 pointer as a Sint32.
  1039  // The zero value is not encoded.
  1040  func sizeSint32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  1041  	v := *p.Int32()
  1042  	if v == 0 {
  1043  		return 0
  1044  	}
  1045  	return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v)))
  1046  }
  1047  
  1048  // appendSint32NoZero wire encodes a int32 pointer as a Sint32.
  1049  // The zero value is not encoded.
  1050  func appendSint32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  1051  	v := *p.Int32()
  1052  	if v == 0 {
  1053  		return b, nil
  1054  	}
  1055  	b = protowire.AppendVarint(b, f.wiretag)
  1056  	b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v)))
  1057  	return b, nil
  1058  }
  1059  
  1060  var coderSint32NoZero = pointerCoderFuncs{
  1061  	size:      sizeSint32NoZero,
  1062  	marshal:   appendSint32NoZero,
  1063  	unmarshal: consumeSint32,
  1064  	merge:     mergeInt32NoZero,
  1065  }
  1066  
  1067  // sizeSint32Ptr returns the size of wire encoding a *int32 pointer as a Sint32.
  1068  // It panics if the pointer is nil.
  1069  func sizeSint32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  1070  	v := **p.Int32Ptr()
  1071  	return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v)))
  1072  }
  1073  
  1074  // appendSint32Ptr wire encodes a *int32 pointer as a Sint32.
  1075  // It panics if the pointer is nil.
  1076  func appendSint32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  1077  	v := **p.Int32Ptr()
  1078  	b = protowire.AppendVarint(b, f.wiretag)
  1079  	b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v)))
  1080  	return b, nil
  1081  }
  1082  
  1083  // consumeSint32Ptr wire decodes a *int32 pointer as a Sint32.
  1084  func consumeSint32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  1085  	if wtyp != protowire.VarintType {
  1086  		return out, errUnknown
  1087  	}
  1088  	var v uint64
  1089  	var n int
  1090  	if len(b) >= 1 && b[0] < 0x80 {
  1091  		v = uint64(b[0])
  1092  		n = 1
  1093  	} else if len(b) >= 2 && b[1] < 128 {
  1094  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  1095  		n = 2
  1096  	} else {
  1097  		v, n = protowire.ConsumeVarint(b)
  1098  	}
  1099  	if n < 0 {
  1100  		return out, errDecode
  1101  	}
  1102  	vp := p.Int32Ptr()
  1103  	if *vp == nil {
  1104  		*vp = new(int32)
  1105  	}
  1106  	**vp = int32(protowire.DecodeZigZag(v & math.MaxUint32))
  1107  	out.n = n
  1108  	return out, nil
  1109  }
  1110  
  1111  var coderSint32Ptr = pointerCoderFuncs{
  1112  	size:      sizeSint32Ptr,
  1113  	marshal:   appendSint32Ptr,
  1114  	unmarshal: consumeSint32Ptr,
  1115  	merge:     mergeInt32Ptr,
  1116  }
  1117  
  1118  // sizeSint32Slice returns the size of wire encoding a []int32 pointer as a repeated Sint32.
  1119  func sizeSint32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  1120  	s := *p.Int32Slice()
  1121  	for _, v := range s {
  1122  		size += f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v)))
  1123  	}
  1124  	return size
  1125  }
  1126  
  1127  // appendSint32Slice encodes a []int32 pointer as a repeated Sint32.
  1128  func appendSint32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  1129  	s := *p.Int32Slice()
  1130  	for _, v := range s {
  1131  		b = protowire.AppendVarint(b, f.wiretag)
  1132  		b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v)))
  1133  	}
  1134  	return b, nil
  1135  }
  1136  
  1137  // consumeSint32Slice wire decodes a []int32 pointer as a repeated Sint32.
  1138  func consumeSint32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  1139  	sp := p.Int32Slice()
  1140  	if wtyp == protowire.BytesType {
  1141  		s := *sp
  1142  		b, n := protowire.ConsumeBytes(b)
  1143  		if n < 0 {
  1144  			return out, errDecode
  1145  		}
  1146  		for len(b) > 0 {
  1147  			var v uint64
  1148  			var n int
  1149  			if len(b) >= 1 && b[0] < 0x80 {
  1150  				v = uint64(b[0])
  1151  				n = 1
  1152  			} else if len(b) >= 2 && b[1] < 128 {
  1153  				v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  1154  				n = 2
  1155  			} else {
  1156  				v, n = protowire.ConsumeVarint(b)
  1157  			}
  1158  			if n < 0 {
  1159  				return out, errDecode
  1160  			}
  1161  			s = append(s, int32(protowire.DecodeZigZag(v&math.MaxUint32)))
  1162  			b = b[n:]
  1163  		}
  1164  		*sp = s
  1165  		out.n = n
  1166  		return out, nil
  1167  	}
  1168  	if wtyp != protowire.VarintType {
  1169  		return out, errUnknown
  1170  	}
  1171  	var v uint64
  1172  	var n int
  1173  	if len(b) >= 1 && b[0] < 0x80 {
  1174  		v = uint64(b[0])
  1175  		n = 1
  1176  	} else if len(b) >= 2 && b[1] < 128 {
  1177  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  1178  		n = 2
  1179  	} else {
  1180  		v, n = protowire.ConsumeVarint(b)
  1181  	}
  1182  	if n < 0 {
  1183  		return out, errDecode
  1184  	}
  1185  	*sp = append(*sp, int32(protowire.DecodeZigZag(v&math.MaxUint32)))
  1186  	out.n = n
  1187  	return out, nil
  1188  }
  1189  
  1190  var coderSint32Slice = pointerCoderFuncs{
  1191  	size:      sizeSint32Slice,
  1192  	marshal:   appendSint32Slice,
  1193  	unmarshal: consumeSint32Slice,
  1194  	merge:     mergeInt32Slice,
  1195  }
  1196  
  1197  // sizeSint32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Sint32.
  1198  func sizeSint32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  1199  	s := *p.Int32Slice()
  1200  	if len(s) == 0 {
  1201  		return 0
  1202  	}
  1203  	n := 0
  1204  	for _, v := range s {
  1205  		n += protowire.SizeVarint(protowire.EncodeZigZag(int64(v)))
  1206  	}
  1207  	return f.tagsize + protowire.SizeBytes(n)
  1208  }
  1209  
  1210  // appendSint32PackedSlice encodes a []int32 pointer as a packed repeated Sint32.
  1211  func appendSint32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  1212  	s := *p.Int32Slice()
  1213  	if len(s) == 0 {
  1214  		return b, nil
  1215  	}
  1216  	b = protowire.AppendVarint(b, f.wiretag)
  1217  	n := 0
  1218  	for _, v := range s {
  1219  		n += protowire.SizeVarint(protowire.EncodeZigZag(int64(v)))
  1220  	}
  1221  	b = protowire.AppendVarint(b, uint64(n))
  1222  	for _, v := range s {
  1223  		b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v)))
  1224  	}
  1225  	return b, nil
  1226  }
  1227  
  1228  var coderSint32PackedSlice = pointerCoderFuncs{
  1229  	size:      sizeSint32PackedSlice,
  1230  	marshal:   appendSint32PackedSlice,
  1231  	unmarshal: consumeSint32Slice,
  1232  	merge:     mergeInt32Slice,
  1233  }
  1234  
  1235  // sizeSint32Value returns the size of wire encoding a int32 value as a Sint32.
  1236  func sizeSint32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {
  1237  	return tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int()))))
  1238  }
  1239  
  1240  // appendSint32Value encodes a int32 value as a Sint32.
  1241  func appendSint32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  1242  	b = protowire.AppendVarint(b, wiretag)
  1243  	b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int()))))
  1244  	return b, nil
  1245  }
  1246  
  1247  // consumeSint32Value decodes a int32 value as a Sint32.
  1248  func consumeSint32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  1249  	if wtyp != protowire.VarintType {
  1250  		return protoreflect.Value{}, out, errUnknown
  1251  	}
  1252  	var v uint64
  1253  	var n int
  1254  	if len(b) >= 1 && b[0] < 0x80 {
  1255  		v = uint64(b[0])
  1256  		n = 1
  1257  	} else if len(b) >= 2 && b[1] < 128 {
  1258  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  1259  		n = 2
  1260  	} else {
  1261  		v, n = protowire.ConsumeVarint(b)
  1262  	}
  1263  	if n < 0 {
  1264  		return protoreflect.Value{}, out, errDecode
  1265  	}
  1266  	out.n = n
  1267  	return protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))), out, nil
  1268  }
  1269  
  1270  var coderSint32Value = valueCoderFuncs{
  1271  	size:      sizeSint32Value,
  1272  	marshal:   appendSint32Value,
  1273  	unmarshal: consumeSint32Value,
  1274  	merge:     mergeScalarValue,
  1275  }
  1276  
  1277  // sizeSint32SliceValue returns the size of wire encoding a []int32 value as a repeated Sint32.
  1278  func sizeSint32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  1279  	list := listv.List()
  1280  	for i, llen := 0, list.Len(); i < llen; i++ {
  1281  		v := list.Get(i)
  1282  		size += tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int()))))
  1283  	}
  1284  	return size
  1285  }
  1286  
  1287  // appendSint32SliceValue encodes a []int32 value as a repeated Sint32.
  1288  func appendSint32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  1289  	list := listv.List()
  1290  	for i, llen := 0, list.Len(); i < llen; i++ {
  1291  		v := list.Get(i)
  1292  		b = protowire.AppendVarint(b, wiretag)
  1293  		b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int()))))
  1294  	}
  1295  	return b, nil
  1296  }
  1297  
  1298  // consumeSint32SliceValue wire decodes a []int32 value as a repeated Sint32.
  1299  func consumeSint32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  1300  	list := listv.List()
  1301  	if wtyp == protowire.BytesType {
  1302  		b, n := protowire.ConsumeBytes(b)
  1303  		if n < 0 {
  1304  			return protoreflect.Value{}, out, errDecode
  1305  		}
  1306  		for len(b) > 0 {
  1307  			var v uint64
  1308  			var n int
  1309  			if len(b) >= 1 && b[0] < 0x80 {
  1310  				v = uint64(b[0])
  1311  				n = 1
  1312  			} else if len(b) >= 2 && b[1] < 128 {
  1313  				v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  1314  				n = 2
  1315  			} else {
  1316  				v, n = protowire.ConsumeVarint(b)
  1317  			}
  1318  			if n < 0 {
  1319  				return protoreflect.Value{}, out, errDecode
  1320  			}
  1321  			list.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))))
  1322  			b = b[n:]
  1323  		}
  1324  		out.n = n
  1325  		return listv, out, nil
  1326  	}
  1327  	if wtyp != protowire.VarintType {
  1328  		return protoreflect.Value{}, out, errUnknown
  1329  	}
  1330  	var v uint64
  1331  	var n int
  1332  	if len(b) >= 1 && b[0] < 0x80 {
  1333  		v = uint64(b[0])
  1334  		n = 1
  1335  	} else if len(b) >= 2 && b[1] < 128 {
  1336  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  1337  		n = 2
  1338  	} else {
  1339  		v, n = protowire.ConsumeVarint(b)
  1340  	}
  1341  	if n < 0 {
  1342  		return protoreflect.Value{}, out, errDecode
  1343  	}
  1344  	list.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))))
  1345  	out.n = n
  1346  	return listv, out, nil
  1347  }
  1348  
  1349  var coderSint32SliceValue = valueCoderFuncs{
  1350  	size:      sizeSint32SliceValue,
  1351  	marshal:   appendSint32SliceValue,
  1352  	unmarshal: consumeSint32SliceValue,
  1353  	merge:     mergeListValue,
  1354  }
  1355  
  1356  // sizeSint32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Sint32.
  1357  func sizeSint32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  1358  	list := listv.List()
  1359  	llen := list.Len()
  1360  	if llen == 0 {
  1361  		return 0
  1362  	}
  1363  	n := 0
  1364  	for i, llen := 0, llen; i < llen; i++ {
  1365  		v := list.Get(i)
  1366  		n += protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int()))))
  1367  	}
  1368  	return tagsize + protowire.SizeBytes(n)
  1369  }
  1370  
  1371  // appendSint32PackedSliceValue encodes a []int32 value as a packed repeated Sint32.
  1372  func appendSint32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  1373  	list := listv.List()
  1374  	llen := list.Len()
  1375  	if llen == 0 {
  1376  		return b, nil
  1377  	}
  1378  	b = protowire.AppendVarint(b, wiretag)
  1379  	n := 0
  1380  	for i := 0; i < llen; i++ {
  1381  		v := list.Get(i)
  1382  		n += protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int()))))
  1383  	}
  1384  	b = protowire.AppendVarint(b, uint64(n))
  1385  	for i := 0; i < llen; i++ {
  1386  		v := list.Get(i)
  1387  		b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int()))))
  1388  	}
  1389  	return b, nil
  1390  }
  1391  
  1392  var coderSint32PackedSliceValue = valueCoderFuncs{
  1393  	size:      sizeSint32PackedSliceValue,
  1394  	marshal:   appendSint32PackedSliceValue,
  1395  	unmarshal: consumeSint32SliceValue,
  1396  	merge:     mergeListValue,
  1397  }
  1398  
  1399  // sizeUint32 returns the size of wire encoding a uint32 pointer as a Uint32.
  1400  func sizeUint32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  1401  	v := *p.Uint32()
  1402  	return f.tagsize + protowire.SizeVarint(uint64(v))
  1403  }
  1404  
  1405  // appendUint32 wire encodes a uint32 pointer as a Uint32.
  1406  func appendUint32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  1407  	v := *p.Uint32()
  1408  	b = protowire.AppendVarint(b, f.wiretag)
  1409  	b = protowire.AppendVarint(b, uint64(v))
  1410  	return b, nil
  1411  }
  1412  
  1413  // consumeUint32 wire decodes a uint32 pointer as a Uint32.
  1414  func consumeUint32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  1415  	if wtyp != protowire.VarintType {
  1416  		return out, errUnknown
  1417  	}
  1418  	var v uint64
  1419  	var n int
  1420  	if len(b) >= 1 && b[0] < 0x80 {
  1421  		v = uint64(b[0])
  1422  		n = 1
  1423  	} else if len(b) >= 2 && b[1] < 128 {
  1424  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  1425  		n = 2
  1426  	} else {
  1427  		v, n = protowire.ConsumeVarint(b)
  1428  	}
  1429  	if n < 0 {
  1430  		return out, errDecode
  1431  	}
  1432  	*p.Uint32() = uint32(v)
  1433  	out.n = n
  1434  	return out, nil
  1435  }
  1436  
  1437  var coderUint32 = pointerCoderFuncs{
  1438  	size:      sizeUint32,
  1439  	marshal:   appendUint32,
  1440  	unmarshal: consumeUint32,
  1441  	merge:     mergeUint32,
  1442  }
  1443  
  1444  // sizeUint32NoZero returns the size of wire encoding a uint32 pointer as a Uint32.
  1445  // The zero value is not encoded.
  1446  func sizeUint32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  1447  	v := *p.Uint32()
  1448  	if v == 0 {
  1449  		return 0
  1450  	}
  1451  	return f.tagsize + protowire.SizeVarint(uint64(v))
  1452  }
  1453  
  1454  // appendUint32NoZero wire encodes a uint32 pointer as a Uint32.
  1455  // The zero value is not encoded.
  1456  func appendUint32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  1457  	v := *p.Uint32()
  1458  	if v == 0 {
  1459  		return b, nil
  1460  	}
  1461  	b = protowire.AppendVarint(b, f.wiretag)
  1462  	b = protowire.AppendVarint(b, uint64(v))
  1463  	return b, nil
  1464  }
  1465  
  1466  var coderUint32NoZero = pointerCoderFuncs{
  1467  	size:      sizeUint32NoZero,
  1468  	marshal:   appendUint32NoZero,
  1469  	unmarshal: consumeUint32,
  1470  	merge:     mergeUint32NoZero,
  1471  }
  1472  
  1473  // sizeUint32Ptr returns the size of wire encoding a *uint32 pointer as a Uint32.
  1474  // It panics if the pointer is nil.
  1475  func sizeUint32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  1476  	v := **p.Uint32Ptr()
  1477  	return f.tagsize + protowire.SizeVarint(uint64(v))
  1478  }
  1479  
  1480  // appendUint32Ptr wire encodes a *uint32 pointer as a Uint32.
  1481  // It panics if the pointer is nil.
  1482  func appendUint32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  1483  	v := **p.Uint32Ptr()
  1484  	b = protowire.AppendVarint(b, f.wiretag)
  1485  	b = protowire.AppendVarint(b, uint64(v))
  1486  	return b, nil
  1487  }
  1488  
  1489  // consumeUint32Ptr wire decodes a *uint32 pointer as a Uint32.
  1490  func consumeUint32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  1491  	if wtyp != protowire.VarintType {
  1492  		return out, errUnknown
  1493  	}
  1494  	var v uint64
  1495  	var n int
  1496  	if len(b) >= 1 && b[0] < 0x80 {
  1497  		v = uint64(b[0])
  1498  		n = 1
  1499  	} else if len(b) >= 2 && b[1] < 128 {
  1500  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  1501  		n = 2
  1502  	} else {
  1503  		v, n = protowire.ConsumeVarint(b)
  1504  	}
  1505  	if n < 0 {
  1506  		return out, errDecode
  1507  	}
  1508  	vp := p.Uint32Ptr()
  1509  	if *vp == nil {
  1510  		*vp = new(uint32)
  1511  	}
  1512  	**vp = uint32(v)
  1513  	out.n = n
  1514  	return out, nil
  1515  }
  1516  
  1517  var coderUint32Ptr = pointerCoderFuncs{
  1518  	size:      sizeUint32Ptr,
  1519  	marshal:   appendUint32Ptr,
  1520  	unmarshal: consumeUint32Ptr,
  1521  	merge:     mergeUint32Ptr,
  1522  }
  1523  
  1524  // sizeUint32Slice returns the size of wire encoding a []uint32 pointer as a repeated Uint32.
  1525  func sizeUint32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  1526  	s := *p.Uint32Slice()
  1527  	for _, v := range s {
  1528  		size += f.tagsize + protowire.SizeVarint(uint64(v))
  1529  	}
  1530  	return size
  1531  }
  1532  
  1533  // appendUint32Slice encodes a []uint32 pointer as a repeated Uint32.
  1534  func appendUint32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  1535  	s := *p.Uint32Slice()
  1536  	for _, v := range s {
  1537  		b = protowire.AppendVarint(b, f.wiretag)
  1538  		b = protowire.AppendVarint(b, uint64(v))
  1539  	}
  1540  	return b, nil
  1541  }
  1542  
  1543  // consumeUint32Slice wire decodes a []uint32 pointer as a repeated Uint32.
  1544  func consumeUint32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  1545  	sp := p.Uint32Slice()
  1546  	if wtyp == protowire.BytesType {
  1547  		s := *sp
  1548  		b, n := protowire.ConsumeBytes(b)
  1549  		if n < 0 {
  1550  			return out, errDecode
  1551  		}
  1552  		for len(b) > 0 {
  1553  			var v uint64
  1554  			var n int
  1555  			if len(b) >= 1 && b[0] < 0x80 {
  1556  				v = uint64(b[0])
  1557  				n = 1
  1558  			} else if len(b) >= 2 && b[1] < 128 {
  1559  				v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  1560  				n = 2
  1561  			} else {
  1562  				v, n = protowire.ConsumeVarint(b)
  1563  			}
  1564  			if n < 0 {
  1565  				return out, errDecode
  1566  			}
  1567  			s = append(s, uint32(v))
  1568  			b = b[n:]
  1569  		}
  1570  		*sp = s
  1571  		out.n = n
  1572  		return out, nil
  1573  	}
  1574  	if wtyp != protowire.VarintType {
  1575  		return out, errUnknown
  1576  	}
  1577  	var v uint64
  1578  	var n int
  1579  	if len(b) >= 1 && b[0] < 0x80 {
  1580  		v = uint64(b[0])
  1581  		n = 1
  1582  	} else if len(b) >= 2 && b[1] < 128 {
  1583  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  1584  		n = 2
  1585  	} else {
  1586  		v, n = protowire.ConsumeVarint(b)
  1587  	}
  1588  	if n < 0 {
  1589  		return out, errDecode
  1590  	}
  1591  	*sp = append(*sp, uint32(v))
  1592  	out.n = n
  1593  	return out, nil
  1594  }
  1595  
  1596  var coderUint32Slice = pointerCoderFuncs{
  1597  	size:      sizeUint32Slice,
  1598  	marshal:   appendUint32Slice,
  1599  	unmarshal: consumeUint32Slice,
  1600  	merge:     mergeUint32Slice,
  1601  }
  1602  
  1603  // sizeUint32PackedSlice returns the size of wire encoding a []uint32 pointer as a packed repeated Uint32.
  1604  func sizeUint32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  1605  	s := *p.Uint32Slice()
  1606  	if len(s) == 0 {
  1607  		return 0
  1608  	}
  1609  	n := 0
  1610  	for _, v := range s {
  1611  		n += protowire.SizeVarint(uint64(v))
  1612  	}
  1613  	return f.tagsize + protowire.SizeBytes(n)
  1614  }
  1615  
  1616  // appendUint32PackedSlice encodes a []uint32 pointer as a packed repeated Uint32.
  1617  func appendUint32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  1618  	s := *p.Uint32Slice()
  1619  	if len(s) == 0 {
  1620  		return b, nil
  1621  	}
  1622  	b = protowire.AppendVarint(b, f.wiretag)
  1623  	n := 0
  1624  	for _, v := range s {
  1625  		n += protowire.SizeVarint(uint64(v))
  1626  	}
  1627  	b = protowire.AppendVarint(b, uint64(n))
  1628  	for _, v := range s {
  1629  		b = protowire.AppendVarint(b, uint64(v))
  1630  	}
  1631  	return b, nil
  1632  }
  1633  
  1634  var coderUint32PackedSlice = pointerCoderFuncs{
  1635  	size:      sizeUint32PackedSlice,
  1636  	marshal:   appendUint32PackedSlice,
  1637  	unmarshal: consumeUint32Slice,
  1638  	merge:     mergeUint32Slice,
  1639  }
  1640  
  1641  // sizeUint32Value returns the size of wire encoding a uint32 value as a Uint32.
  1642  func sizeUint32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {
  1643  	return tagsize + protowire.SizeVarint(uint64(uint32(v.Uint())))
  1644  }
  1645  
  1646  // appendUint32Value encodes a uint32 value as a Uint32.
  1647  func appendUint32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  1648  	b = protowire.AppendVarint(b, wiretag)
  1649  	b = protowire.AppendVarint(b, uint64(uint32(v.Uint())))
  1650  	return b, nil
  1651  }
  1652  
  1653  // consumeUint32Value decodes a uint32 value as a Uint32.
  1654  func consumeUint32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  1655  	if wtyp != protowire.VarintType {
  1656  		return protoreflect.Value{}, out, errUnknown
  1657  	}
  1658  	var v uint64
  1659  	var n int
  1660  	if len(b) >= 1 && b[0] < 0x80 {
  1661  		v = uint64(b[0])
  1662  		n = 1
  1663  	} else if len(b) >= 2 && b[1] < 128 {
  1664  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  1665  		n = 2
  1666  	} else {
  1667  		v, n = protowire.ConsumeVarint(b)
  1668  	}
  1669  	if n < 0 {
  1670  		return protoreflect.Value{}, out, errDecode
  1671  	}
  1672  	out.n = n
  1673  	return protoreflect.ValueOfUint32(uint32(v)), out, nil
  1674  }
  1675  
  1676  var coderUint32Value = valueCoderFuncs{
  1677  	size:      sizeUint32Value,
  1678  	marshal:   appendUint32Value,
  1679  	unmarshal: consumeUint32Value,
  1680  	merge:     mergeScalarValue,
  1681  }
  1682  
  1683  // sizeUint32SliceValue returns the size of wire encoding a []uint32 value as a repeated Uint32.
  1684  func sizeUint32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  1685  	list := listv.List()
  1686  	for i, llen := 0, list.Len(); i < llen; i++ {
  1687  		v := list.Get(i)
  1688  		size += tagsize + protowire.SizeVarint(uint64(uint32(v.Uint())))
  1689  	}
  1690  	return size
  1691  }
  1692  
  1693  // appendUint32SliceValue encodes a []uint32 value as a repeated Uint32.
  1694  func appendUint32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  1695  	list := listv.List()
  1696  	for i, llen := 0, list.Len(); i < llen; i++ {
  1697  		v := list.Get(i)
  1698  		b = protowire.AppendVarint(b, wiretag)
  1699  		b = protowire.AppendVarint(b, uint64(uint32(v.Uint())))
  1700  	}
  1701  	return b, nil
  1702  }
  1703  
  1704  // consumeUint32SliceValue wire decodes a []uint32 value as a repeated Uint32.
  1705  func consumeUint32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  1706  	list := listv.List()
  1707  	if wtyp == protowire.BytesType {
  1708  		b, n := protowire.ConsumeBytes(b)
  1709  		if n < 0 {
  1710  			return protoreflect.Value{}, out, errDecode
  1711  		}
  1712  		for len(b) > 0 {
  1713  			var v uint64
  1714  			var n int
  1715  			if len(b) >= 1 && b[0] < 0x80 {
  1716  				v = uint64(b[0])
  1717  				n = 1
  1718  			} else if len(b) >= 2 && b[1] < 128 {
  1719  				v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  1720  				n = 2
  1721  			} else {
  1722  				v, n = protowire.ConsumeVarint(b)
  1723  			}
  1724  			if n < 0 {
  1725  				return protoreflect.Value{}, out, errDecode
  1726  			}
  1727  			list.Append(protoreflect.ValueOfUint32(uint32(v)))
  1728  			b = b[n:]
  1729  		}
  1730  		out.n = n
  1731  		return listv, out, nil
  1732  	}
  1733  	if wtyp != protowire.VarintType {
  1734  		return protoreflect.Value{}, out, errUnknown
  1735  	}
  1736  	var v uint64
  1737  	var n int
  1738  	if len(b) >= 1 && b[0] < 0x80 {
  1739  		v = uint64(b[0])
  1740  		n = 1
  1741  	} else if len(b) >= 2 && b[1] < 128 {
  1742  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  1743  		n = 2
  1744  	} else {
  1745  		v, n = protowire.ConsumeVarint(b)
  1746  	}
  1747  	if n < 0 {
  1748  		return protoreflect.Value{}, out, errDecode
  1749  	}
  1750  	list.Append(protoreflect.ValueOfUint32(uint32(v)))
  1751  	out.n = n
  1752  	return listv, out, nil
  1753  }
  1754  
  1755  var coderUint32SliceValue = valueCoderFuncs{
  1756  	size:      sizeUint32SliceValue,
  1757  	marshal:   appendUint32SliceValue,
  1758  	unmarshal: consumeUint32SliceValue,
  1759  	merge:     mergeListValue,
  1760  }
  1761  
  1762  // sizeUint32PackedSliceValue returns the size of wire encoding a []uint32 value as a packed repeated Uint32.
  1763  func sizeUint32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  1764  	list := listv.List()
  1765  	llen := list.Len()
  1766  	if llen == 0 {
  1767  		return 0
  1768  	}
  1769  	n := 0
  1770  	for i, llen := 0, llen; i < llen; i++ {
  1771  		v := list.Get(i)
  1772  		n += protowire.SizeVarint(uint64(uint32(v.Uint())))
  1773  	}
  1774  	return tagsize + protowire.SizeBytes(n)
  1775  }
  1776  
  1777  // appendUint32PackedSliceValue encodes a []uint32 value as a packed repeated Uint32.
  1778  func appendUint32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  1779  	list := listv.List()
  1780  	llen := list.Len()
  1781  	if llen == 0 {
  1782  		return b, nil
  1783  	}
  1784  	b = protowire.AppendVarint(b, wiretag)
  1785  	n := 0
  1786  	for i := 0; i < llen; i++ {
  1787  		v := list.Get(i)
  1788  		n += protowire.SizeVarint(uint64(uint32(v.Uint())))
  1789  	}
  1790  	b = protowire.AppendVarint(b, uint64(n))
  1791  	for i := 0; i < llen; i++ {
  1792  		v := list.Get(i)
  1793  		b = protowire.AppendVarint(b, uint64(uint32(v.Uint())))
  1794  	}
  1795  	return b, nil
  1796  }
  1797  
  1798  var coderUint32PackedSliceValue = valueCoderFuncs{
  1799  	size:      sizeUint32PackedSliceValue,
  1800  	marshal:   appendUint32PackedSliceValue,
  1801  	unmarshal: consumeUint32SliceValue,
  1802  	merge:     mergeListValue,
  1803  }
  1804  
  1805  // sizeInt64 returns the size of wire encoding a int64 pointer as a Int64.
  1806  func sizeInt64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  1807  	v := *p.Int64()
  1808  	return f.tagsize + protowire.SizeVarint(uint64(v))
  1809  }
  1810  
  1811  // appendInt64 wire encodes a int64 pointer as a Int64.
  1812  func appendInt64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  1813  	v := *p.Int64()
  1814  	b = protowire.AppendVarint(b, f.wiretag)
  1815  	b = protowire.AppendVarint(b, uint64(v))
  1816  	return b, nil
  1817  }
  1818  
  1819  // consumeInt64 wire decodes a int64 pointer as a Int64.
  1820  func consumeInt64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  1821  	if wtyp != protowire.VarintType {
  1822  		return out, errUnknown
  1823  	}
  1824  	var v uint64
  1825  	var n int
  1826  	if len(b) >= 1 && b[0] < 0x80 {
  1827  		v = uint64(b[0])
  1828  		n = 1
  1829  	} else if len(b) >= 2 && b[1] < 128 {
  1830  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  1831  		n = 2
  1832  	} else {
  1833  		v, n = protowire.ConsumeVarint(b)
  1834  	}
  1835  	if n < 0 {
  1836  		return out, errDecode
  1837  	}
  1838  	*p.Int64() = int64(v)
  1839  	out.n = n
  1840  	return out, nil
  1841  }
  1842  
  1843  var coderInt64 = pointerCoderFuncs{
  1844  	size:      sizeInt64,
  1845  	marshal:   appendInt64,
  1846  	unmarshal: consumeInt64,
  1847  	merge:     mergeInt64,
  1848  }
  1849  
  1850  // sizeInt64NoZero returns the size of wire encoding a int64 pointer as a Int64.
  1851  // The zero value is not encoded.
  1852  func sizeInt64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  1853  	v := *p.Int64()
  1854  	if v == 0 {
  1855  		return 0
  1856  	}
  1857  	return f.tagsize + protowire.SizeVarint(uint64(v))
  1858  }
  1859  
  1860  // appendInt64NoZero wire encodes a int64 pointer as a Int64.
  1861  // The zero value is not encoded.
  1862  func appendInt64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  1863  	v := *p.Int64()
  1864  	if v == 0 {
  1865  		return b, nil
  1866  	}
  1867  	b = protowire.AppendVarint(b, f.wiretag)
  1868  	b = protowire.AppendVarint(b, uint64(v))
  1869  	return b, nil
  1870  }
  1871  
  1872  var coderInt64NoZero = pointerCoderFuncs{
  1873  	size:      sizeInt64NoZero,
  1874  	marshal:   appendInt64NoZero,
  1875  	unmarshal: consumeInt64,
  1876  	merge:     mergeInt64NoZero,
  1877  }
  1878  
  1879  // sizeInt64Ptr returns the size of wire encoding a *int64 pointer as a Int64.
  1880  // It panics if the pointer is nil.
  1881  func sizeInt64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  1882  	v := **p.Int64Ptr()
  1883  	return f.tagsize + protowire.SizeVarint(uint64(v))
  1884  }
  1885  
  1886  // appendInt64Ptr wire encodes a *int64 pointer as a Int64.
  1887  // It panics if the pointer is nil.
  1888  func appendInt64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  1889  	v := **p.Int64Ptr()
  1890  	b = protowire.AppendVarint(b, f.wiretag)
  1891  	b = protowire.AppendVarint(b, uint64(v))
  1892  	return b, nil
  1893  }
  1894  
  1895  // consumeInt64Ptr wire decodes a *int64 pointer as a Int64.
  1896  func consumeInt64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  1897  	if wtyp != protowire.VarintType {
  1898  		return out, errUnknown
  1899  	}
  1900  	var v uint64
  1901  	var n int
  1902  	if len(b) >= 1 && b[0] < 0x80 {
  1903  		v = uint64(b[0])
  1904  		n = 1
  1905  	} else if len(b) >= 2 && b[1] < 128 {
  1906  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  1907  		n = 2
  1908  	} else {
  1909  		v, n = protowire.ConsumeVarint(b)
  1910  	}
  1911  	if n < 0 {
  1912  		return out, errDecode
  1913  	}
  1914  	vp := p.Int64Ptr()
  1915  	if *vp == nil {
  1916  		*vp = new(int64)
  1917  	}
  1918  	**vp = int64(v)
  1919  	out.n = n
  1920  	return out, nil
  1921  }
  1922  
  1923  var coderInt64Ptr = pointerCoderFuncs{
  1924  	size:      sizeInt64Ptr,
  1925  	marshal:   appendInt64Ptr,
  1926  	unmarshal: consumeInt64Ptr,
  1927  	merge:     mergeInt64Ptr,
  1928  }
  1929  
  1930  // sizeInt64Slice returns the size of wire encoding a []int64 pointer as a repeated Int64.
  1931  func sizeInt64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  1932  	s := *p.Int64Slice()
  1933  	for _, v := range s {
  1934  		size += f.tagsize + protowire.SizeVarint(uint64(v))
  1935  	}
  1936  	return size
  1937  }
  1938  
  1939  // appendInt64Slice encodes a []int64 pointer as a repeated Int64.
  1940  func appendInt64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  1941  	s := *p.Int64Slice()
  1942  	for _, v := range s {
  1943  		b = protowire.AppendVarint(b, f.wiretag)
  1944  		b = protowire.AppendVarint(b, uint64(v))
  1945  	}
  1946  	return b, nil
  1947  }
  1948  
  1949  // consumeInt64Slice wire decodes a []int64 pointer as a repeated Int64.
  1950  func consumeInt64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  1951  	sp := p.Int64Slice()
  1952  	if wtyp == protowire.BytesType {
  1953  		s := *sp
  1954  		b, n := protowire.ConsumeBytes(b)
  1955  		if n < 0 {
  1956  			return out, errDecode
  1957  		}
  1958  		for len(b) > 0 {
  1959  			var v uint64
  1960  			var n int
  1961  			if len(b) >= 1 && b[0] < 0x80 {
  1962  				v = uint64(b[0])
  1963  				n = 1
  1964  			} else if len(b) >= 2 && b[1] < 128 {
  1965  				v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  1966  				n = 2
  1967  			} else {
  1968  				v, n = protowire.ConsumeVarint(b)
  1969  			}
  1970  			if n < 0 {
  1971  				return out, errDecode
  1972  			}
  1973  			s = append(s, int64(v))
  1974  			b = b[n:]
  1975  		}
  1976  		*sp = s
  1977  		out.n = n
  1978  		return out, nil
  1979  	}
  1980  	if wtyp != protowire.VarintType {
  1981  		return out, errUnknown
  1982  	}
  1983  	var v uint64
  1984  	var n int
  1985  	if len(b) >= 1 && b[0] < 0x80 {
  1986  		v = uint64(b[0])
  1987  		n = 1
  1988  	} else if len(b) >= 2 && b[1] < 128 {
  1989  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  1990  		n = 2
  1991  	} else {
  1992  		v, n = protowire.ConsumeVarint(b)
  1993  	}
  1994  	if n < 0 {
  1995  		return out, errDecode
  1996  	}
  1997  	*sp = append(*sp, int64(v))
  1998  	out.n = n
  1999  	return out, nil
  2000  }
  2001  
  2002  var coderInt64Slice = pointerCoderFuncs{
  2003  	size:      sizeInt64Slice,
  2004  	marshal:   appendInt64Slice,
  2005  	unmarshal: consumeInt64Slice,
  2006  	merge:     mergeInt64Slice,
  2007  }
  2008  
  2009  // sizeInt64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Int64.
  2010  func sizeInt64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  2011  	s := *p.Int64Slice()
  2012  	if len(s) == 0 {
  2013  		return 0
  2014  	}
  2015  	n := 0
  2016  	for _, v := range s {
  2017  		n += protowire.SizeVarint(uint64(v))
  2018  	}
  2019  	return f.tagsize + protowire.SizeBytes(n)
  2020  }
  2021  
  2022  // appendInt64PackedSlice encodes a []int64 pointer as a packed repeated Int64.
  2023  func appendInt64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  2024  	s := *p.Int64Slice()
  2025  	if len(s) == 0 {
  2026  		return b, nil
  2027  	}
  2028  	b = protowire.AppendVarint(b, f.wiretag)
  2029  	n := 0
  2030  	for _, v := range s {
  2031  		n += protowire.SizeVarint(uint64(v))
  2032  	}
  2033  	b = protowire.AppendVarint(b, uint64(n))
  2034  	for _, v := range s {
  2035  		b = protowire.AppendVarint(b, uint64(v))
  2036  	}
  2037  	return b, nil
  2038  }
  2039  
  2040  var coderInt64PackedSlice = pointerCoderFuncs{
  2041  	size:      sizeInt64PackedSlice,
  2042  	marshal:   appendInt64PackedSlice,
  2043  	unmarshal: consumeInt64Slice,
  2044  	merge:     mergeInt64Slice,
  2045  }
  2046  
  2047  // sizeInt64Value returns the size of wire encoding a int64 value as a Int64.
  2048  func sizeInt64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {
  2049  	return tagsize + protowire.SizeVarint(uint64(v.Int()))
  2050  }
  2051  
  2052  // appendInt64Value encodes a int64 value as a Int64.
  2053  func appendInt64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  2054  	b = protowire.AppendVarint(b, wiretag)
  2055  	b = protowire.AppendVarint(b, uint64(v.Int()))
  2056  	return b, nil
  2057  }
  2058  
  2059  // consumeInt64Value decodes a int64 value as a Int64.
  2060  func consumeInt64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  2061  	if wtyp != protowire.VarintType {
  2062  		return protoreflect.Value{}, out, errUnknown
  2063  	}
  2064  	var v uint64
  2065  	var n int
  2066  	if len(b) >= 1 && b[0] < 0x80 {
  2067  		v = uint64(b[0])
  2068  		n = 1
  2069  	} else if len(b) >= 2 && b[1] < 128 {
  2070  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  2071  		n = 2
  2072  	} else {
  2073  		v, n = protowire.ConsumeVarint(b)
  2074  	}
  2075  	if n < 0 {
  2076  		return protoreflect.Value{}, out, errDecode
  2077  	}
  2078  	out.n = n
  2079  	return protoreflect.ValueOfInt64(int64(v)), out, nil
  2080  }
  2081  
  2082  var coderInt64Value = valueCoderFuncs{
  2083  	size:      sizeInt64Value,
  2084  	marshal:   appendInt64Value,
  2085  	unmarshal: consumeInt64Value,
  2086  	merge:     mergeScalarValue,
  2087  }
  2088  
  2089  // sizeInt64SliceValue returns the size of wire encoding a []int64 value as a repeated Int64.
  2090  func sizeInt64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  2091  	list := listv.List()
  2092  	for i, llen := 0, list.Len(); i < llen; i++ {
  2093  		v := list.Get(i)
  2094  		size += tagsize + protowire.SizeVarint(uint64(v.Int()))
  2095  	}
  2096  	return size
  2097  }
  2098  
  2099  // appendInt64SliceValue encodes a []int64 value as a repeated Int64.
  2100  func appendInt64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  2101  	list := listv.List()
  2102  	for i, llen := 0, list.Len(); i < llen; i++ {
  2103  		v := list.Get(i)
  2104  		b = protowire.AppendVarint(b, wiretag)
  2105  		b = protowire.AppendVarint(b, uint64(v.Int()))
  2106  	}
  2107  	return b, nil
  2108  }
  2109  
  2110  // consumeInt64SliceValue wire decodes a []int64 value as a repeated Int64.
  2111  func consumeInt64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  2112  	list := listv.List()
  2113  	if wtyp == protowire.BytesType {
  2114  		b, n := protowire.ConsumeBytes(b)
  2115  		if n < 0 {
  2116  			return protoreflect.Value{}, out, errDecode
  2117  		}
  2118  		for len(b) > 0 {
  2119  			var v uint64
  2120  			var n int
  2121  			if len(b) >= 1 && b[0] < 0x80 {
  2122  				v = uint64(b[0])
  2123  				n = 1
  2124  			} else if len(b) >= 2 && b[1] < 128 {
  2125  				v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  2126  				n = 2
  2127  			} else {
  2128  				v, n = protowire.ConsumeVarint(b)
  2129  			}
  2130  			if n < 0 {
  2131  				return protoreflect.Value{}, out, errDecode
  2132  			}
  2133  			list.Append(protoreflect.ValueOfInt64(int64(v)))
  2134  			b = b[n:]
  2135  		}
  2136  		out.n = n
  2137  		return listv, out, nil
  2138  	}
  2139  	if wtyp != protowire.VarintType {
  2140  		return protoreflect.Value{}, out, errUnknown
  2141  	}
  2142  	var v uint64
  2143  	var n int
  2144  	if len(b) >= 1 && b[0] < 0x80 {
  2145  		v = uint64(b[0])
  2146  		n = 1
  2147  	} else if len(b) >= 2 && b[1] < 128 {
  2148  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  2149  		n = 2
  2150  	} else {
  2151  		v, n = protowire.ConsumeVarint(b)
  2152  	}
  2153  	if n < 0 {
  2154  		return protoreflect.Value{}, out, errDecode
  2155  	}
  2156  	list.Append(protoreflect.ValueOfInt64(int64(v)))
  2157  	out.n = n
  2158  	return listv, out, nil
  2159  }
  2160  
  2161  var coderInt64SliceValue = valueCoderFuncs{
  2162  	size:      sizeInt64SliceValue,
  2163  	marshal:   appendInt64SliceValue,
  2164  	unmarshal: consumeInt64SliceValue,
  2165  	merge:     mergeListValue,
  2166  }
  2167  
  2168  // sizeInt64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Int64.
  2169  func sizeInt64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  2170  	list := listv.List()
  2171  	llen := list.Len()
  2172  	if llen == 0 {
  2173  		return 0
  2174  	}
  2175  	n := 0
  2176  	for i, llen := 0, llen; i < llen; i++ {
  2177  		v := list.Get(i)
  2178  		n += protowire.SizeVarint(uint64(v.Int()))
  2179  	}
  2180  	return tagsize + protowire.SizeBytes(n)
  2181  }
  2182  
  2183  // appendInt64PackedSliceValue encodes a []int64 value as a packed repeated Int64.
  2184  func appendInt64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  2185  	list := listv.List()
  2186  	llen := list.Len()
  2187  	if llen == 0 {
  2188  		return b, nil
  2189  	}
  2190  	b = protowire.AppendVarint(b, wiretag)
  2191  	n := 0
  2192  	for i := 0; i < llen; i++ {
  2193  		v := list.Get(i)
  2194  		n += protowire.SizeVarint(uint64(v.Int()))
  2195  	}
  2196  	b = protowire.AppendVarint(b, uint64(n))
  2197  	for i := 0; i < llen; i++ {
  2198  		v := list.Get(i)
  2199  		b = protowire.AppendVarint(b, uint64(v.Int()))
  2200  	}
  2201  	return b, nil
  2202  }
  2203  
  2204  var coderInt64PackedSliceValue = valueCoderFuncs{
  2205  	size:      sizeInt64PackedSliceValue,
  2206  	marshal:   appendInt64PackedSliceValue,
  2207  	unmarshal: consumeInt64SliceValue,
  2208  	merge:     mergeListValue,
  2209  }
  2210  
  2211  // sizeSint64 returns the size of wire encoding a int64 pointer as a Sint64.
  2212  func sizeSint64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  2213  	v := *p.Int64()
  2214  	return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v))
  2215  }
  2216  
  2217  // appendSint64 wire encodes a int64 pointer as a Sint64.
  2218  func appendSint64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  2219  	v := *p.Int64()
  2220  	b = protowire.AppendVarint(b, f.wiretag)
  2221  	b = protowire.AppendVarint(b, protowire.EncodeZigZag(v))
  2222  	return b, nil
  2223  }
  2224  
  2225  // consumeSint64 wire decodes a int64 pointer as a Sint64.
  2226  func consumeSint64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  2227  	if wtyp != protowire.VarintType {
  2228  		return out, errUnknown
  2229  	}
  2230  	var v uint64
  2231  	var n int
  2232  	if len(b) >= 1 && b[0] < 0x80 {
  2233  		v = uint64(b[0])
  2234  		n = 1
  2235  	} else if len(b) >= 2 && b[1] < 128 {
  2236  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  2237  		n = 2
  2238  	} else {
  2239  		v, n = protowire.ConsumeVarint(b)
  2240  	}
  2241  	if n < 0 {
  2242  		return out, errDecode
  2243  	}
  2244  	*p.Int64() = protowire.DecodeZigZag(v)
  2245  	out.n = n
  2246  	return out, nil
  2247  }
  2248  
  2249  var coderSint64 = pointerCoderFuncs{
  2250  	size:      sizeSint64,
  2251  	marshal:   appendSint64,
  2252  	unmarshal: consumeSint64,
  2253  	merge:     mergeInt64,
  2254  }
  2255  
  2256  // sizeSint64NoZero returns the size of wire encoding a int64 pointer as a Sint64.
  2257  // The zero value is not encoded.
  2258  func sizeSint64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  2259  	v := *p.Int64()
  2260  	if v == 0 {
  2261  		return 0
  2262  	}
  2263  	return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v))
  2264  }
  2265  
  2266  // appendSint64NoZero wire encodes a int64 pointer as a Sint64.
  2267  // The zero value is not encoded.
  2268  func appendSint64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  2269  	v := *p.Int64()
  2270  	if v == 0 {
  2271  		return b, nil
  2272  	}
  2273  	b = protowire.AppendVarint(b, f.wiretag)
  2274  	b = protowire.AppendVarint(b, protowire.EncodeZigZag(v))
  2275  	return b, nil
  2276  }
  2277  
  2278  var coderSint64NoZero = pointerCoderFuncs{
  2279  	size:      sizeSint64NoZero,
  2280  	marshal:   appendSint64NoZero,
  2281  	unmarshal: consumeSint64,
  2282  	merge:     mergeInt64NoZero,
  2283  }
  2284  
  2285  // sizeSint64Ptr returns the size of wire encoding a *int64 pointer as a Sint64.
  2286  // It panics if the pointer is nil.
  2287  func sizeSint64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  2288  	v := **p.Int64Ptr()
  2289  	return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v))
  2290  }
  2291  
  2292  // appendSint64Ptr wire encodes a *int64 pointer as a Sint64.
  2293  // It panics if the pointer is nil.
  2294  func appendSint64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  2295  	v := **p.Int64Ptr()
  2296  	b = protowire.AppendVarint(b, f.wiretag)
  2297  	b = protowire.AppendVarint(b, protowire.EncodeZigZag(v))
  2298  	return b, nil
  2299  }
  2300  
  2301  // consumeSint64Ptr wire decodes a *int64 pointer as a Sint64.
  2302  func consumeSint64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  2303  	if wtyp != protowire.VarintType {
  2304  		return out, errUnknown
  2305  	}
  2306  	var v uint64
  2307  	var n int
  2308  	if len(b) >= 1 && b[0] < 0x80 {
  2309  		v = uint64(b[0])
  2310  		n = 1
  2311  	} else if len(b) >= 2 && b[1] < 128 {
  2312  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  2313  		n = 2
  2314  	} else {
  2315  		v, n = protowire.ConsumeVarint(b)
  2316  	}
  2317  	if n < 0 {
  2318  		return out, errDecode
  2319  	}
  2320  	vp := p.Int64Ptr()
  2321  	if *vp == nil {
  2322  		*vp = new(int64)
  2323  	}
  2324  	**vp = protowire.DecodeZigZag(v)
  2325  	out.n = n
  2326  	return out, nil
  2327  }
  2328  
  2329  var coderSint64Ptr = pointerCoderFuncs{
  2330  	size:      sizeSint64Ptr,
  2331  	marshal:   appendSint64Ptr,
  2332  	unmarshal: consumeSint64Ptr,
  2333  	merge:     mergeInt64Ptr,
  2334  }
  2335  
  2336  // sizeSint64Slice returns the size of wire encoding a []int64 pointer as a repeated Sint64.
  2337  func sizeSint64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  2338  	s := *p.Int64Slice()
  2339  	for _, v := range s {
  2340  		size += f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v))
  2341  	}
  2342  	return size
  2343  }
  2344  
  2345  // appendSint64Slice encodes a []int64 pointer as a repeated Sint64.
  2346  func appendSint64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  2347  	s := *p.Int64Slice()
  2348  	for _, v := range s {
  2349  		b = protowire.AppendVarint(b, f.wiretag)
  2350  		b = protowire.AppendVarint(b, protowire.EncodeZigZag(v))
  2351  	}
  2352  	return b, nil
  2353  }
  2354  
  2355  // consumeSint64Slice wire decodes a []int64 pointer as a repeated Sint64.
  2356  func consumeSint64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  2357  	sp := p.Int64Slice()
  2358  	if wtyp == protowire.BytesType {
  2359  		s := *sp
  2360  		b, n := protowire.ConsumeBytes(b)
  2361  		if n < 0 {
  2362  			return out, errDecode
  2363  		}
  2364  		for len(b) > 0 {
  2365  			var v uint64
  2366  			var n int
  2367  			if len(b) >= 1 && b[0] < 0x80 {
  2368  				v = uint64(b[0])
  2369  				n = 1
  2370  			} else if len(b) >= 2 && b[1] < 128 {
  2371  				v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  2372  				n = 2
  2373  			} else {
  2374  				v, n = protowire.ConsumeVarint(b)
  2375  			}
  2376  			if n < 0 {
  2377  				return out, errDecode
  2378  			}
  2379  			s = append(s, protowire.DecodeZigZag(v))
  2380  			b = b[n:]
  2381  		}
  2382  		*sp = s
  2383  		out.n = n
  2384  		return out, nil
  2385  	}
  2386  	if wtyp != protowire.VarintType {
  2387  		return out, errUnknown
  2388  	}
  2389  	var v uint64
  2390  	var n int
  2391  	if len(b) >= 1 && b[0] < 0x80 {
  2392  		v = uint64(b[0])
  2393  		n = 1
  2394  	} else if len(b) >= 2 && b[1] < 128 {
  2395  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  2396  		n = 2
  2397  	} else {
  2398  		v, n = protowire.ConsumeVarint(b)
  2399  	}
  2400  	if n < 0 {
  2401  		return out, errDecode
  2402  	}
  2403  	*sp = append(*sp, protowire.DecodeZigZag(v))
  2404  	out.n = n
  2405  	return out, nil
  2406  }
  2407  
  2408  var coderSint64Slice = pointerCoderFuncs{
  2409  	size:      sizeSint64Slice,
  2410  	marshal:   appendSint64Slice,
  2411  	unmarshal: consumeSint64Slice,
  2412  	merge:     mergeInt64Slice,
  2413  }
  2414  
  2415  // sizeSint64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Sint64.
  2416  func sizeSint64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  2417  	s := *p.Int64Slice()
  2418  	if len(s) == 0 {
  2419  		return 0
  2420  	}
  2421  	n := 0
  2422  	for _, v := range s {
  2423  		n += protowire.SizeVarint(protowire.EncodeZigZag(v))
  2424  	}
  2425  	return f.tagsize + protowire.SizeBytes(n)
  2426  }
  2427  
  2428  // appendSint64PackedSlice encodes a []int64 pointer as a packed repeated Sint64.
  2429  func appendSint64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  2430  	s := *p.Int64Slice()
  2431  	if len(s) == 0 {
  2432  		return b, nil
  2433  	}
  2434  	b = protowire.AppendVarint(b, f.wiretag)
  2435  	n := 0
  2436  	for _, v := range s {
  2437  		n += protowire.SizeVarint(protowire.EncodeZigZag(v))
  2438  	}
  2439  	b = protowire.AppendVarint(b, uint64(n))
  2440  	for _, v := range s {
  2441  		b = protowire.AppendVarint(b, protowire.EncodeZigZag(v))
  2442  	}
  2443  	return b, nil
  2444  }
  2445  
  2446  var coderSint64PackedSlice = pointerCoderFuncs{
  2447  	size:      sizeSint64PackedSlice,
  2448  	marshal:   appendSint64PackedSlice,
  2449  	unmarshal: consumeSint64Slice,
  2450  	merge:     mergeInt64Slice,
  2451  }
  2452  
  2453  // sizeSint64Value returns the size of wire encoding a int64 value as a Sint64.
  2454  func sizeSint64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {
  2455  	return tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v.Int()))
  2456  }
  2457  
  2458  // appendSint64Value encodes a int64 value as a Sint64.
  2459  func appendSint64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  2460  	b = protowire.AppendVarint(b, wiretag)
  2461  	b = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int()))
  2462  	return b, nil
  2463  }
  2464  
  2465  // consumeSint64Value decodes a int64 value as a Sint64.
  2466  func consumeSint64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  2467  	if wtyp != protowire.VarintType {
  2468  		return protoreflect.Value{}, out, errUnknown
  2469  	}
  2470  	var v uint64
  2471  	var n int
  2472  	if len(b) >= 1 && b[0] < 0x80 {
  2473  		v = uint64(b[0])
  2474  		n = 1
  2475  	} else if len(b) >= 2 && b[1] < 128 {
  2476  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  2477  		n = 2
  2478  	} else {
  2479  		v, n = protowire.ConsumeVarint(b)
  2480  	}
  2481  	if n < 0 {
  2482  		return protoreflect.Value{}, out, errDecode
  2483  	}
  2484  	out.n = n
  2485  	return protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)), out, nil
  2486  }
  2487  
  2488  var coderSint64Value = valueCoderFuncs{
  2489  	size:      sizeSint64Value,
  2490  	marshal:   appendSint64Value,
  2491  	unmarshal: consumeSint64Value,
  2492  	merge:     mergeScalarValue,
  2493  }
  2494  
  2495  // sizeSint64SliceValue returns the size of wire encoding a []int64 value as a repeated Sint64.
  2496  func sizeSint64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  2497  	list := listv.List()
  2498  	for i, llen := 0, list.Len(); i < llen; i++ {
  2499  		v := list.Get(i)
  2500  		size += tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v.Int()))
  2501  	}
  2502  	return size
  2503  }
  2504  
  2505  // appendSint64SliceValue encodes a []int64 value as a repeated Sint64.
  2506  func appendSint64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  2507  	list := listv.List()
  2508  	for i, llen := 0, list.Len(); i < llen; i++ {
  2509  		v := list.Get(i)
  2510  		b = protowire.AppendVarint(b, wiretag)
  2511  		b = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int()))
  2512  	}
  2513  	return b, nil
  2514  }
  2515  
  2516  // consumeSint64SliceValue wire decodes a []int64 value as a repeated Sint64.
  2517  func consumeSint64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  2518  	list := listv.List()
  2519  	if wtyp == protowire.BytesType {
  2520  		b, n := protowire.ConsumeBytes(b)
  2521  		if n < 0 {
  2522  			return protoreflect.Value{}, out, errDecode
  2523  		}
  2524  		for len(b) > 0 {
  2525  			var v uint64
  2526  			var n int
  2527  			if len(b) >= 1 && b[0] < 0x80 {
  2528  				v = uint64(b[0])
  2529  				n = 1
  2530  			} else if len(b) >= 2 && b[1] < 128 {
  2531  				v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  2532  				n = 2
  2533  			} else {
  2534  				v, n = protowire.ConsumeVarint(b)
  2535  			}
  2536  			if n < 0 {
  2537  				return protoreflect.Value{}, out, errDecode
  2538  			}
  2539  			list.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)))
  2540  			b = b[n:]
  2541  		}
  2542  		out.n = n
  2543  		return listv, out, nil
  2544  	}
  2545  	if wtyp != protowire.VarintType {
  2546  		return protoreflect.Value{}, out, errUnknown
  2547  	}
  2548  	var v uint64
  2549  	var n int
  2550  	if len(b) >= 1 && b[0] < 0x80 {
  2551  		v = uint64(b[0])
  2552  		n = 1
  2553  	} else if len(b) >= 2 && b[1] < 128 {
  2554  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  2555  		n = 2
  2556  	} else {
  2557  		v, n = protowire.ConsumeVarint(b)
  2558  	}
  2559  	if n < 0 {
  2560  		return protoreflect.Value{}, out, errDecode
  2561  	}
  2562  	list.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)))
  2563  	out.n = n
  2564  	return listv, out, nil
  2565  }
  2566  
  2567  var coderSint64SliceValue = valueCoderFuncs{
  2568  	size:      sizeSint64SliceValue,
  2569  	marshal:   appendSint64SliceValue,
  2570  	unmarshal: consumeSint64SliceValue,
  2571  	merge:     mergeListValue,
  2572  }
  2573  
  2574  // sizeSint64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Sint64.
  2575  func sizeSint64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  2576  	list := listv.List()
  2577  	llen := list.Len()
  2578  	if llen == 0 {
  2579  		return 0
  2580  	}
  2581  	n := 0
  2582  	for i, llen := 0, llen; i < llen; i++ {
  2583  		v := list.Get(i)
  2584  		n += protowire.SizeVarint(protowire.EncodeZigZag(v.Int()))
  2585  	}
  2586  	return tagsize + protowire.SizeBytes(n)
  2587  }
  2588  
  2589  // appendSint64PackedSliceValue encodes a []int64 value as a packed repeated Sint64.
  2590  func appendSint64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  2591  	list := listv.List()
  2592  	llen := list.Len()
  2593  	if llen == 0 {
  2594  		return b, nil
  2595  	}
  2596  	b = protowire.AppendVarint(b, wiretag)
  2597  	n := 0
  2598  	for i := 0; i < llen; i++ {
  2599  		v := list.Get(i)
  2600  		n += protowire.SizeVarint(protowire.EncodeZigZag(v.Int()))
  2601  	}
  2602  	b = protowire.AppendVarint(b, uint64(n))
  2603  	for i := 0; i < llen; i++ {
  2604  		v := list.Get(i)
  2605  		b = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int()))
  2606  	}
  2607  	return b, nil
  2608  }
  2609  
  2610  var coderSint64PackedSliceValue = valueCoderFuncs{
  2611  	size:      sizeSint64PackedSliceValue,
  2612  	marshal:   appendSint64PackedSliceValue,
  2613  	unmarshal: consumeSint64SliceValue,
  2614  	merge:     mergeListValue,
  2615  }
  2616  
  2617  // sizeUint64 returns the size of wire encoding a uint64 pointer as a Uint64.
  2618  func sizeUint64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  2619  	v := *p.Uint64()
  2620  	return f.tagsize + protowire.SizeVarint(v)
  2621  }
  2622  
  2623  // appendUint64 wire encodes a uint64 pointer as a Uint64.
  2624  func appendUint64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  2625  	v := *p.Uint64()
  2626  	b = protowire.AppendVarint(b, f.wiretag)
  2627  	b = protowire.AppendVarint(b, v)
  2628  	return b, nil
  2629  }
  2630  
  2631  // consumeUint64 wire decodes a uint64 pointer as a Uint64.
  2632  func consumeUint64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  2633  	if wtyp != protowire.VarintType {
  2634  		return out, errUnknown
  2635  	}
  2636  	var v uint64
  2637  	var n int
  2638  	if len(b) >= 1 && b[0] < 0x80 {
  2639  		v = uint64(b[0])
  2640  		n = 1
  2641  	} else if len(b) >= 2 && b[1] < 128 {
  2642  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  2643  		n = 2
  2644  	} else {
  2645  		v, n = protowire.ConsumeVarint(b)
  2646  	}
  2647  	if n < 0 {
  2648  		return out, errDecode
  2649  	}
  2650  	*p.Uint64() = v
  2651  	out.n = n
  2652  	return out, nil
  2653  }
  2654  
  2655  var coderUint64 = pointerCoderFuncs{
  2656  	size:      sizeUint64,
  2657  	marshal:   appendUint64,
  2658  	unmarshal: consumeUint64,
  2659  	merge:     mergeUint64,
  2660  }
  2661  
  2662  // sizeUint64NoZero returns the size of wire encoding a uint64 pointer as a Uint64.
  2663  // The zero value is not encoded.
  2664  func sizeUint64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  2665  	v := *p.Uint64()
  2666  	if v == 0 {
  2667  		return 0
  2668  	}
  2669  	return f.tagsize + protowire.SizeVarint(v)
  2670  }
  2671  
  2672  // appendUint64NoZero wire encodes a uint64 pointer as a Uint64.
  2673  // The zero value is not encoded.
  2674  func appendUint64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  2675  	v := *p.Uint64()
  2676  	if v == 0 {
  2677  		return b, nil
  2678  	}
  2679  	b = protowire.AppendVarint(b, f.wiretag)
  2680  	b = protowire.AppendVarint(b, v)
  2681  	return b, nil
  2682  }
  2683  
  2684  var coderUint64NoZero = pointerCoderFuncs{
  2685  	size:      sizeUint64NoZero,
  2686  	marshal:   appendUint64NoZero,
  2687  	unmarshal: consumeUint64,
  2688  	merge:     mergeUint64NoZero,
  2689  }
  2690  
  2691  // sizeUint64Ptr returns the size of wire encoding a *uint64 pointer as a Uint64.
  2692  // It panics if the pointer is nil.
  2693  func sizeUint64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  2694  	v := **p.Uint64Ptr()
  2695  	return f.tagsize + protowire.SizeVarint(v)
  2696  }
  2697  
  2698  // appendUint64Ptr wire encodes a *uint64 pointer as a Uint64.
  2699  // It panics if the pointer is nil.
  2700  func appendUint64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  2701  	v := **p.Uint64Ptr()
  2702  	b = protowire.AppendVarint(b, f.wiretag)
  2703  	b = protowire.AppendVarint(b, v)
  2704  	return b, nil
  2705  }
  2706  
  2707  // consumeUint64Ptr wire decodes a *uint64 pointer as a Uint64.
  2708  func consumeUint64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  2709  	if wtyp != protowire.VarintType {
  2710  		return out, errUnknown
  2711  	}
  2712  	var v uint64
  2713  	var n int
  2714  	if len(b) >= 1 && b[0] < 0x80 {
  2715  		v = uint64(b[0])
  2716  		n = 1
  2717  	} else if len(b) >= 2 && b[1] < 128 {
  2718  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  2719  		n = 2
  2720  	} else {
  2721  		v, n = protowire.ConsumeVarint(b)
  2722  	}
  2723  	if n < 0 {
  2724  		return out, errDecode
  2725  	}
  2726  	vp := p.Uint64Ptr()
  2727  	if *vp == nil {
  2728  		*vp = new(uint64)
  2729  	}
  2730  	**vp = v
  2731  	out.n = n
  2732  	return out, nil
  2733  }
  2734  
  2735  var coderUint64Ptr = pointerCoderFuncs{
  2736  	size:      sizeUint64Ptr,
  2737  	marshal:   appendUint64Ptr,
  2738  	unmarshal: consumeUint64Ptr,
  2739  	merge:     mergeUint64Ptr,
  2740  }
  2741  
  2742  // sizeUint64Slice returns the size of wire encoding a []uint64 pointer as a repeated Uint64.
  2743  func sizeUint64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  2744  	s := *p.Uint64Slice()
  2745  	for _, v := range s {
  2746  		size += f.tagsize + protowire.SizeVarint(v)
  2747  	}
  2748  	return size
  2749  }
  2750  
  2751  // appendUint64Slice encodes a []uint64 pointer as a repeated Uint64.
  2752  func appendUint64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  2753  	s := *p.Uint64Slice()
  2754  	for _, v := range s {
  2755  		b = protowire.AppendVarint(b, f.wiretag)
  2756  		b = protowire.AppendVarint(b, v)
  2757  	}
  2758  	return b, nil
  2759  }
  2760  
  2761  // consumeUint64Slice wire decodes a []uint64 pointer as a repeated Uint64.
  2762  func consumeUint64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  2763  	sp := p.Uint64Slice()
  2764  	if wtyp == protowire.BytesType {
  2765  		s := *sp
  2766  		b, n := protowire.ConsumeBytes(b)
  2767  		if n < 0 {
  2768  			return out, errDecode
  2769  		}
  2770  		for len(b) > 0 {
  2771  			var v uint64
  2772  			var n int
  2773  			if len(b) >= 1 && b[0] < 0x80 {
  2774  				v = uint64(b[0])
  2775  				n = 1
  2776  			} else if len(b) >= 2 && b[1] < 128 {
  2777  				v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  2778  				n = 2
  2779  			} else {
  2780  				v, n = protowire.ConsumeVarint(b)
  2781  			}
  2782  			if n < 0 {
  2783  				return out, errDecode
  2784  			}
  2785  			s = append(s, v)
  2786  			b = b[n:]
  2787  		}
  2788  		*sp = s
  2789  		out.n = n
  2790  		return out, nil
  2791  	}
  2792  	if wtyp != protowire.VarintType {
  2793  		return out, errUnknown
  2794  	}
  2795  	var v uint64
  2796  	var n int
  2797  	if len(b) >= 1 && b[0] < 0x80 {
  2798  		v = uint64(b[0])
  2799  		n = 1
  2800  	} else if len(b) >= 2 && b[1] < 128 {
  2801  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  2802  		n = 2
  2803  	} else {
  2804  		v, n = protowire.ConsumeVarint(b)
  2805  	}
  2806  	if n < 0 {
  2807  		return out, errDecode
  2808  	}
  2809  	*sp = append(*sp, v)
  2810  	out.n = n
  2811  	return out, nil
  2812  }
  2813  
  2814  var coderUint64Slice = pointerCoderFuncs{
  2815  	size:      sizeUint64Slice,
  2816  	marshal:   appendUint64Slice,
  2817  	unmarshal: consumeUint64Slice,
  2818  	merge:     mergeUint64Slice,
  2819  }
  2820  
  2821  // sizeUint64PackedSlice returns the size of wire encoding a []uint64 pointer as a packed repeated Uint64.
  2822  func sizeUint64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  2823  	s := *p.Uint64Slice()
  2824  	if len(s) == 0 {
  2825  		return 0
  2826  	}
  2827  	n := 0
  2828  	for _, v := range s {
  2829  		n += protowire.SizeVarint(v)
  2830  	}
  2831  	return f.tagsize + protowire.SizeBytes(n)
  2832  }
  2833  
  2834  // appendUint64PackedSlice encodes a []uint64 pointer as a packed repeated Uint64.
  2835  func appendUint64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  2836  	s := *p.Uint64Slice()
  2837  	if len(s) == 0 {
  2838  		return b, nil
  2839  	}
  2840  	b = protowire.AppendVarint(b, f.wiretag)
  2841  	n := 0
  2842  	for _, v := range s {
  2843  		n += protowire.SizeVarint(v)
  2844  	}
  2845  	b = protowire.AppendVarint(b, uint64(n))
  2846  	for _, v := range s {
  2847  		b = protowire.AppendVarint(b, v)
  2848  	}
  2849  	return b, nil
  2850  }
  2851  
  2852  var coderUint64PackedSlice = pointerCoderFuncs{
  2853  	size:      sizeUint64PackedSlice,
  2854  	marshal:   appendUint64PackedSlice,
  2855  	unmarshal: consumeUint64Slice,
  2856  	merge:     mergeUint64Slice,
  2857  }
  2858  
  2859  // sizeUint64Value returns the size of wire encoding a uint64 value as a Uint64.
  2860  func sizeUint64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {
  2861  	return tagsize + protowire.SizeVarint(v.Uint())
  2862  }
  2863  
  2864  // appendUint64Value encodes a uint64 value as a Uint64.
  2865  func appendUint64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  2866  	b = protowire.AppendVarint(b, wiretag)
  2867  	b = protowire.AppendVarint(b, v.Uint())
  2868  	return b, nil
  2869  }
  2870  
  2871  // consumeUint64Value decodes a uint64 value as a Uint64.
  2872  func consumeUint64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  2873  	if wtyp != protowire.VarintType {
  2874  		return protoreflect.Value{}, out, errUnknown
  2875  	}
  2876  	var v uint64
  2877  	var n int
  2878  	if len(b) >= 1 && b[0] < 0x80 {
  2879  		v = uint64(b[0])
  2880  		n = 1
  2881  	} else if len(b) >= 2 && b[1] < 128 {
  2882  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  2883  		n = 2
  2884  	} else {
  2885  		v, n = protowire.ConsumeVarint(b)
  2886  	}
  2887  	if n < 0 {
  2888  		return protoreflect.Value{}, out, errDecode
  2889  	}
  2890  	out.n = n
  2891  	return protoreflect.ValueOfUint64(v), out, nil
  2892  }
  2893  
  2894  var coderUint64Value = valueCoderFuncs{
  2895  	size:      sizeUint64Value,
  2896  	marshal:   appendUint64Value,
  2897  	unmarshal: consumeUint64Value,
  2898  	merge:     mergeScalarValue,
  2899  }
  2900  
  2901  // sizeUint64SliceValue returns the size of wire encoding a []uint64 value as a repeated Uint64.
  2902  func sizeUint64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  2903  	list := listv.List()
  2904  	for i, llen := 0, list.Len(); i < llen; i++ {
  2905  		v := list.Get(i)
  2906  		size += tagsize + protowire.SizeVarint(v.Uint())
  2907  	}
  2908  	return size
  2909  }
  2910  
  2911  // appendUint64SliceValue encodes a []uint64 value as a repeated Uint64.
  2912  func appendUint64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  2913  	list := listv.List()
  2914  	for i, llen := 0, list.Len(); i < llen; i++ {
  2915  		v := list.Get(i)
  2916  		b = protowire.AppendVarint(b, wiretag)
  2917  		b = protowire.AppendVarint(b, v.Uint())
  2918  	}
  2919  	return b, nil
  2920  }
  2921  
  2922  // consumeUint64SliceValue wire decodes a []uint64 value as a repeated Uint64.
  2923  func consumeUint64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  2924  	list := listv.List()
  2925  	if wtyp == protowire.BytesType {
  2926  		b, n := protowire.ConsumeBytes(b)
  2927  		if n < 0 {
  2928  			return protoreflect.Value{}, out, errDecode
  2929  		}
  2930  		for len(b) > 0 {
  2931  			var v uint64
  2932  			var n int
  2933  			if len(b) >= 1 && b[0] < 0x80 {
  2934  				v = uint64(b[0])
  2935  				n = 1
  2936  			} else if len(b) >= 2 && b[1] < 128 {
  2937  				v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  2938  				n = 2
  2939  			} else {
  2940  				v, n = protowire.ConsumeVarint(b)
  2941  			}
  2942  			if n < 0 {
  2943  				return protoreflect.Value{}, out, errDecode
  2944  			}
  2945  			list.Append(protoreflect.ValueOfUint64(v))
  2946  			b = b[n:]
  2947  		}
  2948  		out.n = n
  2949  		return listv, out, nil
  2950  	}
  2951  	if wtyp != protowire.VarintType {
  2952  		return protoreflect.Value{}, out, errUnknown
  2953  	}
  2954  	var v uint64
  2955  	var n int
  2956  	if len(b) >= 1 && b[0] < 0x80 {
  2957  		v = uint64(b[0])
  2958  		n = 1
  2959  	} else if len(b) >= 2 && b[1] < 128 {
  2960  		v = uint64(b[0]&0x7f) + uint64(b[1])<<7
  2961  		n = 2
  2962  	} else {
  2963  		v, n = protowire.ConsumeVarint(b)
  2964  	}
  2965  	if n < 0 {
  2966  		return protoreflect.Value{}, out, errDecode
  2967  	}
  2968  	list.Append(protoreflect.ValueOfUint64(v))
  2969  	out.n = n
  2970  	return listv, out, nil
  2971  }
  2972  
  2973  var coderUint64SliceValue = valueCoderFuncs{
  2974  	size:      sizeUint64SliceValue,
  2975  	marshal:   appendUint64SliceValue,
  2976  	unmarshal: consumeUint64SliceValue,
  2977  	merge:     mergeListValue,
  2978  }
  2979  
  2980  // sizeUint64PackedSliceValue returns the size of wire encoding a []uint64 value as a packed repeated Uint64.
  2981  func sizeUint64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  2982  	list := listv.List()
  2983  	llen := list.Len()
  2984  	if llen == 0 {
  2985  		return 0
  2986  	}
  2987  	n := 0
  2988  	for i, llen := 0, llen; i < llen; i++ {
  2989  		v := list.Get(i)
  2990  		n += protowire.SizeVarint(v.Uint())
  2991  	}
  2992  	return tagsize + protowire.SizeBytes(n)
  2993  }
  2994  
  2995  // appendUint64PackedSliceValue encodes a []uint64 value as a packed repeated Uint64.
  2996  func appendUint64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  2997  	list := listv.List()
  2998  	llen := list.Len()
  2999  	if llen == 0 {
  3000  		return b, nil
  3001  	}
  3002  	b = protowire.AppendVarint(b, wiretag)
  3003  	n := 0
  3004  	for i := 0; i < llen; i++ {
  3005  		v := list.Get(i)
  3006  		n += protowire.SizeVarint(v.Uint())
  3007  	}
  3008  	b = protowire.AppendVarint(b, uint64(n))
  3009  	for i := 0; i < llen; i++ {
  3010  		v := list.Get(i)
  3011  		b = protowire.AppendVarint(b, v.Uint())
  3012  	}
  3013  	return b, nil
  3014  }
  3015  
  3016  var coderUint64PackedSliceValue = valueCoderFuncs{
  3017  	size:      sizeUint64PackedSliceValue,
  3018  	marshal:   appendUint64PackedSliceValue,
  3019  	unmarshal: consumeUint64SliceValue,
  3020  	merge:     mergeListValue,
  3021  }
  3022  
  3023  // sizeSfixed32 returns the size of wire encoding a int32 pointer as a Sfixed32.
  3024  func sizeSfixed32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  3025  
  3026  	return f.tagsize + protowire.SizeFixed32()
  3027  }
  3028  
  3029  // appendSfixed32 wire encodes a int32 pointer as a Sfixed32.
  3030  func appendSfixed32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  3031  	v := *p.Int32()
  3032  	b = protowire.AppendVarint(b, f.wiretag)
  3033  	b = protowire.AppendFixed32(b, uint32(v))
  3034  	return b, nil
  3035  }
  3036  
  3037  // consumeSfixed32 wire decodes a int32 pointer as a Sfixed32.
  3038  func consumeSfixed32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  3039  	if wtyp != protowire.Fixed32Type {
  3040  		return out, errUnknown
  3041  	}
  3042  	v, n := protowire.ConsumeFixed32(b)
  3043  	if n < 0 {
  3044  		return out, errDecode
  3045  	}
  3046  	*p.Int32() = int32(v)
  3047  	out.n = n
  3048  	return out, nil
  3049  }
  3050  
  3051  var coderSfixed32 = pointerCoderFuncs{
  3052  	size:      sizeSfixed32,
  3053  	marshal:   appendSfixed32,
  3054  	unmarshal: consumeSfixed32,
  3055  	merge:     mergeInt32,
  3056  }
  3057  
  3058  // sizeSfixed32NoZero returns the size of wire encoding a int32 pointer as a Sfixed32.
  3059  // The zero value is not encoded.
  3060  func sizeSfixed32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  3061  	v := *p.Int32()
  3062  	if v == 0 {
  3063  		return 0
  3064  	}
  3065  	return f.tagsize + protowire.SizeFixed32()
  3066  }
  3067  
  3068  // appendSfixed32NoZero wire encodes a int32 pointer as a Sfixed32.
  3069  // The zero value is not encoded.
  3070  func appendSfixed32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  3071  	v := *p.Int32()
  3072  	if v == 0 {
  3073  		return b, nil
  3074  	}
  3075  	b = protowire.AppendVarint(b, f.wiretag)
  3076  	b = protowire.AppendFixed32(b, uint32(v))
  3077  	return b, nil
  3078  }
  3079  
  3080  var coderSfixed32NoZero = pointerCoderFuncs{
  3081  	size:      sizeSfixed32NoZero,
  3082  	marshal:   appendSfixed32NoZero,
  3083  	unmarshal: consumeSfixed32,
  3084  	merge:     mergeInt32NoZero,
  3085  }
  3086  
  3087  // sizeSfixed32Ptr returns the size of wire encoding a *int32 pointer as a Sfixed32.
  3088  // It panics if the pointer is nil.
  3089  func sizeSfixed32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  3090  	return f.tagsize + protowire.SizeFixed32()
  3091  }
  3092  
  3093  // appendSfixed32Ptr wire encodes a *int32 pointer as a Sfixed32.
  3094  // It panics if the pointer is nil.
  3095  func appendSfixed32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  3096  	v := **p.Int32Ptr()
  3097  	b = protowire.AppendVarint(b, f.wiretag)
  3098  	b = protowire.AppendFixed32(b, uint32(v))
  3099  	return b, nil
  3100  }
  3101  
  3102  // consumeSfixed32Ptr wire decodes a *int32 pointer as a Sfixed32.
  3103  func consumeSfixed32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  3104  	if wtyp != protowire.Fixed32Type {
  3105  		return out, errUnknown
  3106  	}
  3107  	v, n := protowire.ConsumeFixed32(b)
  3108  	if n < 0 {
  3109  		return out, errDecode
  3110  	}
  3111  	vp := p.Int32Ptr()
  3112  	if *vp == nil {
  3113  		*vp = new(int32)
  3114  	}
  3115  	**vp = int32(v)
  3116  	out.n = n
  3117  	return out, nil
  3118  }
  3119  
  3120  var coderSfixed32Ptr = pointerCoderFuncs{
  3121  	size:      sizeSfixed32Ptr,
  3122  	marshal:   appendSfixed32Ptr,
  3123  	unmarshal: consumeSfixed32Ptr,
  3124  	merge:     mergeInt32Ptr,
  3125  }
  3126  
  3127  // sizeSfixed32Slice returns the size of wire encoding a []int32 pointer as a repeated Sfixed32.
  3128  func sizeSfixed32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  3129  	s := *p.Int32Slice()
  3130  	size = len(s) * (f.tagsize + protowire.SizeFixed32())
  3131  	return size
  3132  }
  3133  
  3134  // appendSfixed32Slice encodes a []int32 pointer as a repeated Sfixed32.
  3135  func appendSfixed32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  3136  	s := *p.Int32Slice()
  3137  	for _, v := range s {
  3138  		b = protowire.AppendVarint(b, f.wiretag)
  3139  		b = protowire.AppendFixed32(b, uint32(v))
  3140  	}
  3141  	return b, nil
  3142  }
  3143  
  3144  // consumeSfixed32Slice wire decodes a []int32 pointer as a repeated Sfixed32.
  3145  func consumeSfixed32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  3146  	sp := p.Int32Slice()
  3147  	if wtyp == protowire.BytesType {
  3148  		s := *sp
  3149  		b, n := protowire.ConsumeBytes(b)
  3150  		if n < 0 {
  3151  			return out, errDecode
  3152  		}
  3153  		for len(b) > 0 {
  3154  			v, n := protowire.ConsumeFixed32(b)
  3155  			if n < 0 {
  3156  				return out, errDecode
  3157  			}
  3158  			s = append(s, int32(v))
  3159  			b = b[n:]
  3160  		}
  3161  		*sp = s
  3162  		out.n = n
  3163  		return out, nil
  3164  	}
  3165  	if wtyp != protowire.Fixed32Type {
  3166  		return out, errUnknown
  3167  	}
  3168  	v, n := protowire.ConsumeFixed32(b)
  3169  	if n < 0 {
  3170  		return out, errDecode
  3171  	}
  3172  	*sp = append(*sp, int32(v))
  3173  	out.n = n
  3174  	return out, nil
  3175  }
  3176  
  3177  var coderSfixed32Slice = pointerCoderFuncs{
  3178  	size:      sizeSfixed32Slice,
  3179  	marshal:   appendSfixed32Slice,
  3180  	unmarshal: consumeSfixed32Slice,
  3181  	merge:     mergeInt32Slice,
  3182  }
  3183  
  3184  // sizeSfixed32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Sfixed32.
  3185  func sizeSfixed32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  3186  	s := *p.Int32Slice()
  3187  	if len(s) == 0 {
  3188  		return 0
  3189  	}
  3190  	n := len(s) * protowire.SizeFixed32()
  3191  	return f.tagsize + protowire.SizeBytes(n)
  3192  }
  3193  
  3194  // appendSfixed32PackedSlice encodes a []int32 pointer as a packed repeated Sfixed32.
  3195  func appendSfixed32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  3196  	s := *p.Int32Slice()
  3197  	if len(s) == 0 {
  3198  		return b, nil
  3199  	}
  3200  	b = protowire.AppendVarint(b, f.wiretag)
  3201  	n := len(s) * protowire.SizeFixed32()
  3202  	b = protowire.AppendVarint(b, uint64(n))
  3203  	for _, v := range s {
  3204  		b = protowire.AppendFixed32(b, uint32(v))
  3205  	}
  3206  	return b, nil
  3207  }
  3208  
  3209  var coderSfixed32PackedSlice = pointerCoderFuncs{
  3210  	size:      sizeSfixed32PackedSlice,
  3211  	marshal:   appendSfixed32PackedSlice,
  3212  	unmarshal: consumeSfixed32Slice,
  3213  	merge:     mergeInt32Slice,
  3214  }
  3215  
  3216  // sizeSfixed32Value returns the size of wire encoding a int32 value as a Sfixed32.
  3217  func sizeSfixed32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {
  3218  	return tagsize + protowire.SizeFixed32()
  3219  }
  3220  
  3221  // appendSfixed32Value encodes a int32 value as a Sfixed32.
  3222  func appendSfixed32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  3223  	b = protowire.AppendVarint(b, wiretag)
  3224  	b = protowire.AppendFixed32(b, uint32(v.Int()))
  3225  	return b, nil
  3226  }
  3227  
  3228  // consumeSfixed32Value decodes a int32 value as a Sfixed32.
  3229  func consumeSfixed32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  3230  	if wtyp != protowire.Fixed32Type {
  3231  		return protoreflect.Value{}, out, errUnknown
  3232  	}
  3233  	v, n := protowire.ConsumeFixed32(b)
  3234  	if n < 0 {
  3235  		return protoreflect.Value{}, out, errDecode
  3236  	}
  3237  	out.n = n
  3238  	return protoreflect.ValueOfInt32(int32(v)), out, nil
  3239  }
  3240  
  3241  var coderSfixed32Value = valueCoderFuncs{
  3242  	size:      sizeSfixed32Value,
  3243  	marshal:   appendSfixed32Value,
  3244  	unmarshal: consumeSfixed32Value,
  3245  	merge:     mergeScalarValue,
  3246  }
  3247  
  3248  // sizeSfixed32SliceValue returns the size of wire encoding a []int32 value as a repeated Sfixed32.
  3249  func sizeSfixed32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  3250  	list := listv.List()
  3251  	size = list.Len() * (tagsize + protowire.SizeFixed32())
  3252  	return size
  3253  }
  3254  
  3255  // appendSfixed32SliceValue encodes a []int32 value as a repeated Sfixed32.
  3256  func appendSfixed32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  3257  	list := listv.List()
  3258  	for i, llen := 0, list.Len(); i < llen; i++ {
  3259  		v := list.Get(i)
  3260  		b = protowire.AppendVarint(b, wiretag)
  3261  		b = protowire.AppendFixed32(b, uint32(v.Int()))
  3262  	}
  3263  	return b, nil
  3264  }
  3265  
  3266  // consumeSfixed32SliceValue wire decodes a []int32 value as a repeated Sfixed32.
  3267  func consumeSfixed32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  3268  	list := listv.List()
  3269  	if wtyp == protowire.BytesType {
  3270  		b, n := protowire.ConsumeBytes(b)
  3271  		if n < 0 {
  3272  			return protoreflect.Value{}, out, errDecode
  3273  		}
  3274  		for len(b) > 0 {
  3275  			v, n := protowire.ConsumeFixed32(b)
  3276  			if n < 0 {
  3277  				return protoreflect.Value{}, out, errDecode
  3278  			}
  3279  			list.Append(protoreflect.ValueOfInt32(int32(v)))
  3280  			b = b[n:]
  3281  		}
  3282  		out.n = n
  3283  		return listv, out, nil
  3284  	}
  3285  	if wtyp != protowire.Fixed32Type {
  3286  		return protoreflect.Value{}, out, errUnknown
  3287  	}
  3288  	v, n := protowire.ConsumeFixed32(b)
  3289  	if n < 0 {
  3290  		return protoreflect.Value{}, out, errDecode
  3291  	}
  3292  	list.Append(protoreflect.ValueOfInt32(int32(v)))
  3293  	out.n = n
  3294  	return listv, out, nil
  3295  }
  3296  
  3297  var coderSfixed32SliceValue = valueCoderFuncs{
  3298  	size:      sizeSfixed32SliceValue,
  3299  	marshal:   appendSfixed32SliceValue,
  3300  	unmarshal: consumeSfixed32SliceValue,
  3301  	merge:     mergeListValue,
  3302  }
  3303  
  3304  // sizeSfixed32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Sfixed32.
  3305  func sizeSfixed32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  3306  	list := listv.List()
  3307  	llen := list.Len()
  3308  	if llen == 0 {
  3309  		return 0
  3310  	}
  3311  	n := llen * protowire.SizeFixed32()
  3312  	return tagsize + protowire.SizeBytes(n)
  3313  }
  3314  
  3315  // appendSfixed32PackedSliceValue encodes a []int32 value as a packed repeated Sfixed32.
  3316  func appendSfixed32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  3317  	list := listv.List()
  3318  	llen := list.Len()
  3319  	if llen == 0 {
  3320  		return b, nil
  3321  	}
  3322  	b = protowire.AppendVarint(b, wiretag)
  3323  	n := llen * protowire.SizeFixed32()
  3324  	b = protowire.AppendVarint(b, uint64(n))
  3325  	for i := 0; i < llen; i++ {
  3326  		v := list.Get(i)
  3327  		b = protowire.AppendFixed32(b, uint32(v.Int()))
  3328  	}
  3329  	return b, nil
  3330  }
  3331  
  3332  var coderSfixed32PackedSliceValue = valueCoderFuncs{
  3333  	size:      sizeSfixed32PackedSliceValue,
  3334  	marshal:   appendSfixed32PackedSliceValue,
  3335  	unmarshal: consumeSfixed32SliceValue,
  3336  	merge:     mergeListValue,
  3337  }
  3338  
  3339  // sizeFixed32 returns the size of wire encoding a uint32 pointer as a Fixed32.
  3340  func sizeFixed32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  3341  
  3342  	return f.tagsize + protowire.SizeFixed32()
  3343  }
  3344  
  3345  // appendFixed32 wire encodes a uint32 pointer as a Fixed32.
  3346  func appendFixed32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  3347  	v := *p.Uint32()
  3348  	b = protowire.AppendVarint(b, f.wiretag)
  3349  	b = protowire.AppendFixed32(b, v)
  3350  	return b, nil
  3351  }
  3352  
  3353  // consumeFixed32 wire decodes a uint32 pointer as a Fixed32.
  3354  func consumeFixed32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  3355  	if wtyp != protowire.Fixed32Type {
  3356  		return out, errUnknown
  3357  	}
  3358  	v, n := protowire.ConsumeFixed32(b)
  3359  	if n < 0 {
  3360  		return out, errDecode
  3361  	}
  3362  	*p.Uint32() = v
  3363  	out.n = n
  3364  	return out, nil
  3365  }
  3366  
  3367  var coderFixed32 = pointerCoderFuncs{
  3368  	size:      sizeFixed32,
  3369  	marshal:   appendFixed32,
  3370  	unmarshal: consumeFixed32,
  3371  	merge:     mergeUint32,
  3372  }
  3373  
  3374  // sizeFixed32NoZero returns the size of wire encoding a uint32 pointer as a Fixed32.
  3375  // The zero value is not encoded.
  3376  func sizeFixed32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  3377  	v := *p.Uint32()
  3378  	if v == 0 {
  3379  		return 0
  3380  	}
  3381  	return f.tagsize + protowire.SizeFixed32()
  3382  }
  3383  
  3384  // appendFixed32NoZero wire encodes a uint32 pointer as a Fixed32.
  3385  // The zero value is not encoded.
  3386  func appendFixed32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  3387  	v := *p.Uint32()
  3388  	if v == 0 {
  3389  		return b, nil
  3390  	}
  3391  	b = protowire.AppendVarint(b, f.wiretag)
  3392  	b = protowire.AppendFixed32(b, v)
  3393  	return b, nil
  3394  }
  3395  
  3396  var coderFixed32NoZero = pointerCoderFuncs{
  3397  	size:      sizeFixed32NoZero,
  3398  	marshal:   appendFixed32NoZero,
  3399  	unmarshal: consumeFixed32,
  3400  	merge:     mergeUint32NoZero,
  3401  }
  3402  
  3403  // sizeFixed32Ptr returns the size of wire encoding a *uint32 pointer as a Fixed32.
  3404  // It panics if the pointer is nil.
  3405  func sizeFixed32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  3406  	return f.tagsize + protowire.SizeFixed32()
  3407  }
  3408  
  3409  // appendFixed32Ptr wire encodes a *uint32 pointer as a Fixed32.
  3410  // It panics if the pointer is nil.
  3411  func appendFixed32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  3412  	v := **p.Uint32Ptr()
  3413  	b = protowire.AppendVarint(b, f.wiretag)
  3414  	b = protowire.AppendFixed32(b, v)
  3415  	return b, nil
  3416  }
  3417  
  3418  // consumeFixed32Ptr wire decodes a *uint32 pointer as a Fixed32.
  3419  func consumeFixed32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  3420  	if wtyp != protowire.Fixed32Type {
  3421  		return out, errUnknown
  3422  	}
  3423  	v, n := protowire.ConsumeFixed32(b)
  3424  	if n < 0 {
  3425  		return out, errDecode
  3426  	}
  3427  	vp := p.Uint32Ptr()
  3428  	if *vp == nil {
  3429  		*vp = new(uint32)
  3430  	}
  3431  	**vp = v
  3432  	out.n = n
  3433  	return out, nil
  3434  }
  3435  
  3436  var coderFixed32Ptr = pointerCoderFuncs{
  3437  	size:      sizeFixed32Ptr,
  3438  	marshal:   appendFixed32Ptr,
  3439  	unmarshal: consumeFixed32Ptr,
  3440  	merge:     mergeUint32Ptr,
  3441  }
  3442  
  3443  // sizeFixed32Slice returns the size of wire encoding a []uint32 pointer as a repeated Fixed32.
  3444  func sizeFixed32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  3445  	s := *p.Uint32Slice()
  3446  	size = len(s) * (f.tagsize + protowire.SizeFixed32())
  3447  	return size
  3448  }
  3449  
  3450  // appendFixed32Slice encodes a []uint32 pointer as a repeated Fixed32.
  3451  func appendFixed32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  3452  	s := *p.Uint32Slice()
  3453  	for _, v := range s {
  3454  		b = protowire.AppendVarint(b, f.wiretag)
  3455  		b = protowire.AppendFixed32(b, v)
  3456  	}
  3457  	return b, nil
  3458  }
  3459  
  3460  // consumeFixed32Slice wire decodes a []uint32 pointer as a repeated Fixed32.
  3461  func consumeFixed32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  3462  	sp := p.Uint32Slice()
  3463  	if wtyp == protowire.BytesType {
  3464  		s := *sp
  3465  		b, n := protowire.ConsumeBytes(b)
  3466  		if n < 0 {
  3467  			return out, errDecode
  3468  		}
  3469  		for len(b) > 0 {
  3470  			v, n := protowire.ConsumeFixed32(b)
  3471  			if n < 0 {
  3472  				return out, errDecode
  3473  			}
  3474  			s = append(s, v)
  3475  			b = b[n:]
  3476  		}
  3477  		*sp = s
  3478  		out.n = n
  3479  		return out, nil
  3480  	}
  3481  	if wtyp != protowire.Fixed32Type {
  3482  		return out, errUnknown
  3483  	}
  3484  	v, n := protowire.ConsumeFixed32(b)
  3485  	if n < 0 {
  3486  		return out, errDecode
  3487  	}
  3488  	*sp = append(*sp, v)
  3489  	out.n = n
  3490  	return out, nil
  3491  }
  3492  
  3493  var coderFixed32Slice = pointerCoderFuncs{
  3494  	size:      sizeFixed32Slice,
  3495  	marshal:   appendFixed32Slice,
  3496  	unmarshal: consumeFixed32Slice,
  3497  	merge:     mergeUint32Slice,
  3498  }
  3499  
  3500  // sizeFixed32PackedSlice returns the size of wire encoding a []uint32 pointer as a packed repeated Fixed32.
  3501  func sizeFixed32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  3502  	s := *p.Uint32Slice()
  3503  	if len(s) == 0 {
  3504  		return 0
  3505  	}
  3506  	n := len(s) * protowire.SizeFixed32()
  3507  	return f.tagsize + protowire.SizeBytes(n)
  3508  }
  3509  
  3510  // appendFixed32PackedSlice encodes a []uint32 pointer as a packed repeated Fixed32.
  3511  func appendFixed32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  3512  	s := *p.Uint32Slice()
  3513  	if len(s) == 0 {
  3514  		return b, nil
  3515  	}
  3516  	b = protowire.AppendVarint(b, f.wiretag)
  3517  	n := len(s) * protowire.SizeFixed32()
  3518  	b = protowire.AppendVarint(b, uint64(n))
  3519  	for _, v := range s {
  3520  		b = protowire.AppendFixed32(b, v)
  3521  	}
  3522  	return b, nil
  3523  }
  3524  
  3525  var coderFixed32PackedSlice = pointerCoderFuncs{
  3526  	size:      sizeFixed32PackedSlice,
  3527  	marshal:   appendFixed32PackedSlice,
  3528  	unmarshal: consumeFixed32Slice,
  3529  	merge:     mergeUint32Slice,
  3530  }
  3531  
  3532  // sizeFixed32Value returns the size of wire encoding a uint32 value as a Fixed32.
  3533  func sizeFixed32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {
  3534  	return tagsize + protowire.SizeFixed32()
  3535  }
  3536  
  3537  // appendFixed32Value encodes a uint32 value as a Fixed32.
  3538  func appendFixed32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  3539  	b = protowire.AppendVarint(b, wiretag)
  3540  	b = protowire.AppendFixed32(b, uint32(v.Uint()))
  3541  	return b, nil
  3542  }
  3543  
  3544  // consumeFixed32Value decodes a uint32 value as a Fixed32.
  3545  func consumeFixed32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  3546  	if wtyp != protowire.Fixed32Type {
  3547  		return protoreflect.Value{}, out, errUnknown
  3548  	}
  3549  	v, n := protowire.ConsumeFixed32(b)
  3550  	if n < 0 {
  3551  		return protoreflect.Value{}, out, errDecode
  3552  	}
  3553  	out.n = n
  3554  	return protoreflect.ValueOfUint32(uint32(v)), out, nil
  3555  }
  3556  
  3557  var coderFixed32Value = valueCoderFuncs{
  3558  	size:      sizeFixed32Value,
  3559  	marshal:   appendFixed32Value,
  3560  	unmarshal: consumeFixed32Value,
  3561  	merge:     mergeScalarValue,
  3562  }
  3563  
  3564  // sizeFixed32SliceValue returns the size of wire encoding a []uint32 value as a repeated Fixed32.
  3565  func sizeFixed32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  3566  	list := listv.List()
  3567  	size = list.Len() * (tagsize + protowire.SizeFixed32())
  3568  	return size
  3569  }
  3570  
  3571  // appendFixed32SliceValue encodes a []uint32 value as a repeated Fixed32.
  3572  func appendFixed32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  3573  	list := listv.List()
  3574  	for i, llen := 0, list.Len(); i < llen; i++ {
  3575  		v := list.Get(i)
  3576  		b = protowire.AppendVarint(b, wiretag)
  3577  		b = protowire.AppendFixed32(b, uint32(v.Uint()))
  3578  	}
  3579  	return b, nil
  3580  }
  3581  
  3582  // consumeFixed32SliceValue wire decodes a []uint32 value as a repeated Fixed32.
  3583  func consumeFixed32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  3584  	list := listv.List()
  3585  	if wtyp == protowire.BytesType {
  3586  		b, n := protowire.ConsumeBytes(b)
  3587  		if n < 0 {
  3588  			return protoreflect.Value{}, out, errDecode
  3589  		}
  3590  		for len(b) > 0 {
  3591  			v, n := protowire.ConsumeFixed32(b)
  3592  			if n < 0 {
  3593  				return protoreflect.Value{}, out, errDecode
  3594  			}
  3595  			list.Append(protoreflect.ValueOfUint32(uint32(v)))
  3596  			b = b[n:]
  3597  		}
  3598  		out.n = n
  3599  		return listv, out, nil
  3600  	}
  3601  	if wtyp != protowire.Fixed32Type {
  3602  		return protoreflect.Value{}, out, errUnknown
  3603  	}
  3604  	v, n := protowire.ConsumeFixed32(b)
  3605  	if n < 0 {
  3606  		return protoreflect.Value{}, out, errDecode
  3607  	}
  3608  	list.Append(protoreflect.ValueOfUint32(uint32(v)))
  3609  	out.n = n
  3610  	return listv, out, nil
  3611  }
  3612  
  3613  var coderFixed32SliceValue = valueCoderFuncs{
  3614  	size:      sizeFixed32SliceValue,
  3615  	marshal:   appendFixed32SliceValue,
  3616  	unmarshal: consumeFixed32SliceValue,
  3617  	merge:     mergeListValue,
  3618  }
  3619  
  3620  // sizeFixed32PackedSliceValue returns the size of wire encoding a []uint32 value as a packed repeated Fixed32.
  3621  func sizeFixed32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  3622  	list := listv.List()
  3623  	llen := list.Len()
  3624  	if llen == 0 {
  3625  		return 0
  3626  	}
  3627  	n := llen * protowire.SizeFixed32()
  3628  	return tagsize + protowire.SizeBytes(n)
  3629  }
  3630  
  3631  // appendFixed32PackedSliceValue encodes a []uint32 value as a packed repeated Fixed32.
  3632  func appendFixed32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  3633  	list := listv.List()
  3634  	llen := list.Len()
  3635  	if llen == 0 {
  3636  		return b, nil
  3637  	}
  3638  	b = protowire.AppendVarint(b, wiretag)
  3639  	n := llen * protowire.SizeFixed32()
  3640  	b = protowire.AppendVarint(b, uint64(n))
  3641  	for i := 0; i < llen; i++ {
  3642  		v := list.Get(i)
  3643  		b = protowire.AppendFixed32(b, uint32(v.Uint()))
  3644  	}
  3645  	return b, nil
  3646  }
  3647  
  3648  var coderFixed32PackedSliceValue = valueCoderFuncs{
  3649  	size:      sizeFixed32PackedSliceValue,
  3650  	marshal:   appendFixed32PackedSliceValue,
  3651  	unmarshal: consumeFixed32SliceValue,
  3652  	merge:     mergeListValue,
  3653  }
  3654  
  3655  // sizeFloat returns the size of wire encoding a float32 pointer as a Float.
  3656  func sizeFloat(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  3657  
  3658  	return f.tagsize + protowire.SizeFixed32()
  3659  }
  3660  
  3661  // appendFloat wire encodes a float32 pointer as a Float.
  3662  func appendFloat(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  3663  	v := *p.Float32()
  3664  	b = protowire.AppendVarint(b, f.wiretag)
  3665  	b = protowire.AppendFixed32(b, math.Float32bits(v))
  3666  	return b, nil
  3667  }
  3668  
  3669  // consumeFloat wire decodes a float32 pointer as a Float.
  3670  func consumeFloat(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  3671  	if wtyp != protowire.Fixed32Type {
  3672  		return out, errUnknown
  3673  	}
  3674  	v, n := protowire.ConsumeFixed32(b)
  3675  	if n < 0 {
  3676  		return out, errDecode
  3677  	}
  3678  	*p.Float32() = math.Float32frombits(v)
  3679  	out.n = n
  3680  	return out, nil
  3681  }
  3682  
  3683  var coderFloat = pointerCoderFuncs{
  3684  	size:      sizeFloat,
  3685  	marshal:   appendFloat,
  3686  	unmarshal: consumeFloat,
  3687  	merge:     mergeFloat32,
  3688  }
  3689  
  3690  // sizeFloatNoZero returns the size of wire encoding a float32 pointer as a Float.
  3691  // The zero value is not encoded.
  3692  func sizeFloatNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  3693  	v := *p.Float32()
  3694  	if v == 0 && !math.Signbit(float64(v)) {
  3695  		return 0
  3696  	}
  3697  	return f.tagsize + protowire.SizeFixed32()
  3698  }
  3699  
  3700  // appendFloatNoZero wire encodes a float32 pointer as a Float.
  3701  // The zero value is not encoded.
  3702  func appendFloatNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  3703  	v := *p.Float32()
  3704  	if v == 0 && !math.Signbit(float64(v)) {
  3705  		return b, nil
  3706  	}
  3707  	b = protowire.AppendVarint(b, f.wiretag)
  3708  	b = protowire.AppendFixed32(b, math.Float32bits(v))
  3709  	return b, nil
  3710  }
  3711  
  3712  var coderFloatNoZero = pointerCoderFuncs{
  3713  	size:      sizeFloatNoZero,
  3714  	marshal:   appendFloatNoZero,
  3715  	unmarshal: consumeFloat,
  3716  	merge:     mergeFloat32NoZero,
  3717  }
  3718  
  3719  // sizeFloatPtr returns the size of wire encoding a *float32 pointer as a Float.
  3720  // It panics if the pointer is nil.
  3721  func sizeFloatPtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  3722  	return f.tagsize + protowire.SizeFixed32()
  3723  }
  3724  
  3725  // appendFloatPtr wire encodes a *float32 pointer as a Float.
  3726  // It panics if the pointer is nil.
  3727  func appendFloatPtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  3728  	v := **p.Float32Ptr()
  3729  	b = protowire.AppendVarint(b, f.wiretag)
  3730  	b = protowire.AppendFixed32(b, math.Float32bits(v))
  3731  	return b, nil
  3732  }
  3733  
  3734  // consumeFloatPtr wire decodes a *float32 pointer as a Float.
  3735  func consumeFloatPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  3736  	if wtyp != protowire.Fixed32Type {
  3737  		return out, errUnknown
  3738  	}
  3739  	v, n := protowire.ConsumeFixed32(b)
  3740  	if n < 0 {
  3741  		return out, errDecode
  3742  	}
  3743  	vp := p.Float32Ptr()
  3744  	if *vp == nil {
  3745  		*vp = new(float32)
  3746  	}
  3747  	**vp = math.Float32frombits(v)
  3748  	out.n = n
  3749  	return out, nil
  3750  }
  3751  
  3752  var coderFloatPtr = pointerCoderFuncs{
  3753  	size:      sizeFloatPtr,
  3754  	marshal:   appendFloatPtr,
  3755  	unmarshal: consumeFloatPtr,
  3756  	merge:     mergeFloat32Ptr,
  3757  }
  3758  
  3759  // sizeFloatSlice returns the size of wire encoding a []float32 pointer as a repeated Float.
  3760  func sizeFloatSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  3761  	s := *p.Float32Slice()
  3762  	size = len(s) * (f.tagsize + protowire.SizeFixed32())
  3763  	return size
  3764  }
  3765  
  3766  // appendFloatSlice encodes a []float32 pointer as a repeated Float.
  3767  func appendFloatSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  3768  	s := *p.Float32Slice()
  3769  	for _, v := range s {
  3770  		b = protowire.AppendVarint(b, f.wiretag)
  3771  		b = protowire.AppendFixed32(b, math.Float32bits(v))
  3772  	}
  3773  	return b, nil
  3774  }
  3775  
  3776  // consumeFloatSlice wire decodes a []float32 pointer as a repeated Float.
  3777  func consumeFloatSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  3778  	sp := p.Float32Slice()
  3779  	if wtyp == protowire.BytesType {
  3780  		s := *sp
  3781  		b, n := protowire.ConsumeBytes(b)
  3782  		if n < 0 {
  3783  			return out, errDecode
  3784  		}
  3785  		for len(b) > 0 {
  3786  			v, n := protowire.ConsumeFixed32(b)
  3787  			if n < 0 {
  3788  				return out, errDecode
  3789  			}
  3790  			s = append(s, math.Float32frombits(v))
  3791  			b = b[n:]
  3792  		}
  3793  		*sp = s
  3794  		out.n = n
  3795  		return out, nil
  3796  	}
  3797  	if wtyp != protowire.Fixed32Type {
  3798  		return out, errUnknown
  3799  	}
  3800  	v, n := protowire.ConsumeFixed32(b)
  3801  	if n < 0 {
  3802  		return out, errDecode
  3803  	}
  3804  	*sp = append(*sp, math.Float32frombits(v))
  3805  	out.n = n
  3806  	return out, nil
  3807  }
  3808  
  3809  var coderFloatSlice = pointerCoderFuncs{
  3810  	size:      sizeFloatSlice,
  3811  	marshal:   appendFloatSlice,
  3812  	unmarshal: consumeFloatSlice,
  3813  	merge:     mergeFloat32Slice,
  3814  }
  3815  
  3816  // sizeFloatPackedSlice returns the size of wire encoding a []float32 pointer as a packed repeated Float.
  3817  func sizeFloatPackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  3818  	s := *p.Float32Slice()
  3819  	if len(s) == 0 {
  3820  		return 0
  3821  	}
  3822  	n := len(s) * protowire.SizeFixed32()
  3823  	return f.tagsize + protowire.SizeBytes(n)
  3824  }
  3825  
  3826  // appendFloatPackedSlice encodes a []float32 pointer as a packed repeated Float.
  3827  func appendFloatPackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  3828  	s := *p.Float32Slice()
  3829  	if len(s) == 0 {
  3830  		return b, nil
  3831  	}
  3832  	b = protowire.AppendVarint(b, f.wiretag)
  3833  	n := len(s) * protowire.SizeFixed32()
  3834  	b = protowire.AppendVarint(b, uint64(n))
  3835  	for _, v := range s {
  3836  		b = protowire.AppendFixed32(b, math.Float32bits(v))
  3837  	}
  3838  	return b, nil
  3839  }
  3840  
  3841  var coderFloatPackedSlice = pointerCoderFuncs{
  3842  	size:      sizeFloatPackedSlice,
  3843  	marshal:   appendFloatPackedSlice,
  3844  	unmarshal: consumeFloatSlice,
  3845  	merge:     mergeFloat32Slice,
  3846  }
  3847  
  3848  // sizeFloatValue returns the size of wire encoding a float32 value as a Float.
  3849  func sizeFloatValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {
  3850  	return tagsize + protowire.SizeFixed32()
  3851  }
  3852  
  3853  // appendFloatValue encodes a float32 value as a Float.
  3854  func appendFloatValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  3855  	b = protowire.AppendVarint(b, wiretag)
  3856  	b = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float())))
  3857  	return b, nil
  3858  }
  3859  
  3860  // consumeFloatValue decodes a float32 value as a Float.
  3861  func consumeFloatValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  3862  	if wtyp != protowire.Fixed32Type {
  3863  		return protoreflect.Value{}, out, errUnknown
  3864  	}
  3865  	v, n := protowire.ConsumeFixed32(b)
  3866  	if n < 0 {
  3867  		return protoreflect.Value{}, out, errDecode
  3868  	}
  3869  	out.n = n
  3870  	return protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))), out, nil
  3871  }
  3872  
  3873  var coderFloatValue = valueCoderFuncs{
  3874  	size:      sizeFloatValue,
  3875  	marshal:   appendFloatValue,
  3876  	unmarshal: consumeFloatValue,
  3877  	merge:     mergeScalarValue,
  3878  }
  3879  
  3880  // sizeFloatSliceValue returns the size of wire encoding a []float32 value as a repeated Float.
  3881  func sizeFloatSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  3882  	list := listv.List()
  3883  	size = list.Len() * (tagsize + protowire.SizeFixed32())
  3884  	return size
  3885  }
  3886  
  3887  // appendFloatSliceValue encodes a []float32 value as a repeated Float.
  3888  func appendFloatSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  3889  	list := listv.List()
  3890  	for i, llen := 0, list.Len(); i < llen; i++ {
  3891  		v := list.Get(i)
  3892  		b = protowire.AppendVarint(b, wiretag)
  3893  		b = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float())))
  3894  	}
  3895  	return b, nil
  3896  }
  3897  
  3898  // consumeFloatSliceValue wire decodes a []float32 value as a repeated Float.
  3899  func consumeFloatSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  3900  	list := listv.List()
  3901  	if wtyp == protowire.BytesType {
  3902  		b, n := protowire.ConsumeBytes(b)
  3903  		if n < 0 {
  3904  			return protoreflect.Value{}, out, errDecode
  3905  		}
  3906  		for len(b) > 0 {
  3907  			v, n := protowire.ConsumeFixed32(b)
  3908  			if n < 0 {
  3909  				return protoreflect.Value{}, out, errDecode
  3910  			}
  3911  			list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))))
  3912  			b = b[n:]
  3913  		}
  3914  		out.n = n
  3915  		return listv, out, nil
  3916  	}
  3917  	if wtyp != protowire.Fixed32Type {
  3918  		return protoreflect.Value{}, out, errUnknown
  3919  	}
  3920  	v, n := protowire.ConsumeFixed32(b)
  3921  	if n < 0 {
  3922  		return protoreflect.Value{}, out, errDecode
  3923  	}
  3924  	list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))))
  3925  	out.n = n
  3926  	return listv, out, nil
  3927  }
  3928  
  3929  var coderFloatSliceValue = valueCoderFuncs{
  3930  	size:      sizeFloatSliceValue,
  3931  	marshal:   appendFloatSliceValue,
  3932  	unmarshal: consumeFloatSliceValue,
  3933  	merge:     mergeListValue,
  3934  }
  3935  
  3936  // sizeFloatPackedSliceValue returns the size of wire encoding a []float32 value as a packed repeated Float.
  3937  func sizeFloatPackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  3938  	list := listv.List()
  3939  	llen := list.Len()
  3940  	if llen == 0 {
  3941  		return 0
  3942  	}
  3943  	n := llen * protowire.SizeFixed32()
  3944  	return tagsize + protowire.SizeBytes(n)
  3945  }
  3946  
  3947  // appendFloatPackedSliceValue encodes a []float32 value as a packed repeated Float.
  3948  func appendFloatPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  3949  	list := listv.List()
  3950  	llen := list.Len()
  3951  	if llen == 0 {
  3952  		return b, nil
  3953  	}
  3954  	b = protowire.AppendVarint(b, wiretag)
  3955  	n := llen * protowire.SizeFixed32()
  3956  	b = protowire.AppendVarint(b, uint64(n))
  3957  	for i := 0; i < llen; i++ {
  3958  		v := list.Get(i)
  3959  		b = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float())))
  3960  	}
  3961  	return b, nil
  3962  }
  3963  
  3964  var coderFloatPackedSliceValue = valueCoderFuncs{
  3965  	size:      sizeFloatPackedSliceValue,
  3966  	marshal:   appendFloatPackedSliceValue,
  3967  	unmarshal: consumeFloatSliceValue,
  3968  	merge:     mergeListValue,
  3969  }
  3970  
  3971  // sizeSfixed64 returns the size of wire encoding a int64 pointer as a Sfixed64.
  3972  func sizeSfixed64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  3973  
  3974  	return f.tagsize + protowire.SizeFixed64()
  3975  }
  3976  
  3977  // appendSfixed64 wire encodes a int64 pointer as a Sfixed64.
  3978  func appendSfixed64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  3979  	v := *p.Int64()
  3980  	b = protowire.AppendVarint(b, f.wiretag)
  3981  	b = protowire.AppendFixed64(b, uint64(v))
  3982  	return b, nil
  3983  }
  3984  
  3985  // consumeSfixed64 wire decodes a int64 pointer as a Sfixed64.
  3986  func consumeSfixed64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  3987  	if wtyp != protowire.Fixed64Type {
  3988  		return out, errUnknown
  3989  	}
  3990  	v, n := protowire.ConsumeFixed64(b)
  3991  	if n < 0 {
  3992  		return out, errDecode
  3993  	}
  3994  	*p.Int64() = int64(v)
  3995  	out.n = n
  3996  	return out, nil
  3997  }
  3998  
  3999  var coderSfixed64 = pointerCoderFuncs{
  4000  	size:      sizeSfixed64,
  4001  	marshal:   appendSfixed64,
  4002  	unmarshal: consumeSfixed64,
  4003  	merge:     mergeInt64,
  4004  }
  4005  
  4006  // sizeSfixed64NoZero returns the size of wire encoding a int64 pointer as a Sfixed64.
  4007  // The zero value is not encoded.
  4008  func sizeSfixed64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  4009  	v := *p.Int64()
  4010  	if v == 0 {
  4011  		return 0
  4012  	}
  4013  	return f.tagsize + protowire.SizeFixed64()
  4014  }
  4015  
  4016  // appendSfixed64NoZero wire encodes a int64 pointer as a Sfixed64.
  4017  // The zero value is not encoded.
  4018  func appendSfixed64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  4019  	v := *p.Int64()
  4020  	if v == 0 {
  4021  		return b, nil
  4022  	}
  4023  	b = protowire.AppendVarint(b, f.wiretag)
  4024  	b = protowire.AppendFixed64(b, uint64(v))
  4025  	return b, nil
  4026  }
  4027  
  4028  var coderSfixed64NoZero = pointerCoderFuncs{
  4029  	size:      sizeSfixed64NoZero,
  4030  	marshal:   appendSfixed64NoZero,
  4031  	unmarshal: consumeSfixed64,
  4032  	merge:     mergeInt64NoZero,
  4033  }
  4034  
  4035  // sizeSfixed64Ptr returns the size of wire encoding a *int64 pointer as a Sfixed64.
  4036  // It panics if the pointer is nil.
  4037  func sizeSfixed64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  4038  	return f.tagsize + protowire.SizeFixed64()
  4039  }
  4040  
  4041  // appendSfixed64Ptr wire encodes a *int64 pointer as a Sfixed64.
  4042  // It panics if the pointer is nil.
  4043  func appendSfixed64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  4044  	v := **p.Int64Ptr()
  4045  	b = protowire.AppendVarint(b, f.wiretag)
  4046  	b = protowire.AppendFixed64(b, uint64(v))
  4047  	return b, nil
  4048  }
  4049  
  4050  // consumeSfixed64Ptr wire decodes a *int64 pointer as a Sfixed64.
  4051  func consumeSfixed64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  4052  	if wtyp != protowire.Fixed64Type {
  4053  		return out, errUnknown
  4054  	}
  4055  	v, n := protowire.ConsumeFixed64(b)
  4056  	if n < 0 {
  4057  		return out, errDecode
  4058  	}
  4059  	vp := p.Int64Ptr()
  4060  	if *vp == nil {
  4061  		*vp = new(int64)
  4062  	}
  4063  	**vp = int64(v)
  4064  	out.n = n
  4065  	return out, nil
  4066  }
  4067  
  4068  var coderSfixed64Ptr = pointerCoderFuncs{
  4069  	size:      sizeSfixed64Ptr,
  4070  	marshal:   appendSfixed64Ptr,
  4071  	unmarshal: consumeSfixed64Ptr,
  4072  	merge:     mergeInt64Ptr,
  4073  }
  4074  
  4075  // sizeSfixed64Slice returns the size of wire encoding a []int64 pointer as a repeated Sfixed64.
  4076  func sizeSfixed64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  4077  	s := *p.Int64Slice()
  4078  	size = len(s) * (f.tagsize + protowire.SizeFixed64())
  4079  	return size
  4080  }
  4081  
  4082  // appendSfixed64Slice encodes a []int64 pointer as a repeated Sfixed64.
  4083  func appendSfixed64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  4084  	s := *p.Int64Slice()
  4085  	for _, v := range s {
  4086  		b = protowire.AppendVarint(b, f.wiretag)
  4087  		b = protowire.AppendFixed64(b, uint64(v))
  4088  	}
  4089  	return b, nil
  4090  }
  4091  
  4092  // consumeSfixed64Slice wire decodes a []int64 pointer as a repeated Sfixed64.
  4093  func consumeSfixed64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  4094  	sp := p.Int64Slice()
  4095  	if wtyp == protowire.BytesType {
  4096  		s := *sp
  4097  		b, n := protowire.ConsumeBytes(b)
  4098  		if n < 0 {
  4099  			return out, errDecode
  4100  		}
  4101  		for len(b) > 0 {
  4102  			v, n := protowire.ConsumeFixed64(b)
  4103  			if n < 0 {
  4104  				return out, errDecode
  4105  			}
  4106  			s = append(s, int64(v))
  4107  			b = b[n:]
  4108  		}
  4109  		*sp = s
  4110  		out.n = n
  4111  		return out, nil
  4112  	}
  4113  	if wtyp != protowire.Fixed64Type {
  4114  		return out, errUnknown
  4115  	}
  4116  	v, n := protowire.ConsumeFixed64(b)
  4117  	if n < 0 {
  4118  		return out, errDecode
  4119  	}
  4120  	*sp = append(*sp, int64(v))
  4121  	out.n = n
  4122  	return out, nil
  4123  }
  4124  
  4125  var coderSfixed64Slice = pointerCoderFuncs{
  4126  	size:      sizeSfixed64Slice,
  4127  	marshal:   appendSfixed64Slice,
  4128  	unmarshal: consumeSfixed64Slice,
  4129  	merge:     mergeInt64Slice,
  4130  }
  4131  
  4132  // sizeSfixed64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Sfixed64.
  4133  func sizeSfixed64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  4134  	s := *p.Int64Slice()
  4135  	if len(s) == 0 {
  4136  		return 0
  4137  	}
  4138  	n := len(s) * protowire.SizeFixed64()
  4139  	return f.tagsize + protowire.SizeBytes(n)
  4140  }
  4141  
  4142  // appendSfixed64PackedSlice encodes a []int64 pointer as a packed repeated Sfixed64.
  4143  func appendSfixed64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  4144  	s := *p.Int64Slice()
  4145  	if len(s) == 0 {
  4146  		return b, nil
  4147  	}
  4148  	b = protowire.AppendVarint(b, f.wiretag)
  4149  	n := len(s) * protowire.SizeFixed64()
  4150  	b = protowire.AppendVarint(b, uint64(n))
  4151  	for _, v := range s {
  4152  		b = protowire.AppendFixed64(b, uint64(v))
  4153  	}
  4154  	return b, nil
  4155  }
  4156  
  4157  var coderSfixed64PackedSlice = pointerCoderFuncs{
  4158  	size:      sizeSfixed64PackedSlice,
  4159  	marshal:   appendSfixed64PackedSlice,
  4160  	unmarshal: consumeSfixed64Slice,
  4161  	merge:     mergeInt64Slice,
  4162  }
  4163  
  4164  // sizeSfixed64Value returns the size of wire encoding a int64 value as a Sfixed64.
  4165  func sizeSfixed64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {
  4166  	return tagsize + protowire.SizeFixed64()
  4167  }
  4168  
  4169  // appendSfixed64Value encodes a int64 value as a Sfixed64.
  4170  func appendSfixed64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  4171  	b = protowire.AppendVarint(b, wiretag)
  4172  	b = protowire.AppendFixed64(b, uint64(v.Int()))
  4173  	return b, nil
  4174  }
  4175  
  4176  // consumeSfixed64Value decodes a int64 value as a Sfixed64.
  4177  func consumeSfixed64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  4178  	if wtyp != protowire.Fixed64Type {
  4179  		return protoreflect.Value{}, out, errUnknown
  4180  	}
  4181  	v, n := protowire.ConsumeFixed64(b)
  4182  	if n < 0 {
  4183  		return protoreflect.Value{}, out, errDecode
  4184  	}
  4185  	out.n = n
  4186  	return protoreflect.ValueOfInt64(int64(v)), out, nil
  4187  }
  4188  
  4189  var coderSfixed64Value = valueCoderFuncs{
  4190  	size:      sizeSfixed64Value,
  4191  	marshal:   appendSfixed64Value,
  4192  	unmarshal: consumeSfixed64Value,
  4193  	merge:     mergeScalarValue,
  4194  }
  4195  
  4196  // sizeSfixed64SliceValue returns the size of wire encoding a []int64 value as a repeated Sfixed64.
  4197  func sizeSfixed64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  4198  	list := listv.List()
  4199  	size = list.Len() * (tagsize + protowire.SizeFixed64())
  4200  	return size
  4201  }
  4202  
  4203  // appendSfixed64SliceValue encodes a []int64 value as a repeated Sfixed64.
  4204  func appendSfixed64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  4205  	list := listv.List()
  4206  	for i, llen := 0, list.Len(); i < llen; i++ {
  4207  		v := list.Get(i)
  4208  		b = protowire.AppendVarint(b, wiretag)
  4209  		b = protowire.AppendFixed64(b, uint64(v.Int()))
  4210  	}
  4211  	return b, nil
  4212  }
  4213  
  4214  // consumeSfixed64SliceValue wire decodes a []int64 value as a repeated Sfixed64.
  4215  func consumeSfixed64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  4216  	list := listv.List()
  4217  	if wtyp == protowire.BytesType {
  4218  		b, n := protowire.ConsumeBytes(b)
  4219  		if n < 0 {
  4220  			return protoreflect.Value{}, out, errDecode
  4221  		}
  4222  		for len(b) > 0 {
  4223  			v, n := protowire.ConsumeFixed64(b)
  4224  			if n < 0 {
  4225  				return protoreflect.Value{}, out, errDecode
  4226  			}
  4227  			list.Append(protoreflect.ValueOfInt64(int64(v)))
  4228  			b = b[n:]
  4229  		}
  4230  		out.n = n
  4231  		return listv, out, nil
  4232  	}
  4233  	if wtyp != protowire.Fixed64Type {
  4234  		return protoreflect.Value{}, out, errUnknown
  4235  	}
  4236  	v, n := protowire.ConsumeFixed64(b)
  4237  	if n < 0 {
  4238  		return protoreflect.Value{}, out, errDecode
  4239  	}
  4240  	list.Append(protoreflect.ValueOfInt64(int64(v)))
  4241  	out.n = n
  4242  	return listv, out, nil
  4243  }
  4244  
  4245  var coderSfixed64SliceValue = valueCoderFuncs{
  4246  	size:      sizeSfixed64SliceValue,
  4247  	marshal:   appendSfixed64SliceValue,
  4248  	unmarshal: consumeSfixed64SliceValue,
  4249  	merge:     mergeListValue,
  4250  }
  4251  
  4252  // sizeSfixed64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Sfixed64.
  4253  func sizeSfixed64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  4254  	list := listv.List()
  4255  	llen := list.Len()
  4256  	if llen == 0 {
  4257  		return 0
  4258  	}
  4259  	n := llen * protowire.SizeFixed64()
  4260  	return tagsize + protowire.SizeBytes(n)
  4261  }
  4262  
  4263  // appendSfixed64PackedSliceValue encodes a []int64 value as a packed repeated Sfixed64.
  4264  func appendSfixed64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  4265  	list := listv.List()
  4266  	llen := list.Len()
  4267  	if llen == 0 {
  4268  		return b, nil
  4269  	}
  4270  	b = protowire.AppendVarint(b, wiretag)
  4271  	n := llen * protowire.SizeFixed64()
  4272  	b = protowire.AppendVarint(b, uint64(n))
  4273  	for i := 0; i < llen; i++ {
  4274  		v := list.Get(i)
  4275  		b = protowire.AppendFixed64(b, uint64(v.Int()))
  4276  	}
  4277  	return b, nil
  4278  }
  4279  
  4280  var coderSfixed64PackedSliceValue = valueCoderFuncs{
  4281  	size:      sizeSfixed64PackedSliceValue,
  4282  	marshal:   appendSfixed64PackedSliceValue,
  4283  	unmarshal: consumeSfixed64SliceValue,
  4284  	merge:     mergeListValue,
  4285  }
  4286  
  4287  // sizeFixed64 returns the size of wire encoding a uint64 pointer as a Fixed64.
  4288  func sizeFixed64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  4289  
  4290  	return f.tagsize + protowire.SizeFixed64()
  4291  }
  4292  
  4293  // appendFixed64 wire encodes a uint64 pointer as a Fixed64.
  4294  func appendFixed64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  4295  	v := *p.Uint64()
  4296  	b = protowire.AppendVarint(b, f.wiretag)
  4297  	b = protowire.AppendFixed64(b, v)
  4298  	return b, nil
  4299  }
  4300  
  4301  // consumeFixed64 wire decodes a uint64 pointer as a Fixed64.
  4302  func consumeFixed64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  4303  	if wtyp != protowire.Fixed64Type {
  4304  		return out, errUnknown
  4305  	}
  4306  	v, n := protowire.ConsumeFixed64(b)
  4307  	if n < 0 {
  4308  		return out, errDecode
  4309  	}
  4310  	*p.Uint64() = v
  4311  	out.n = n
  4312  	return out, nil
  4313  }
  4314  
  4315  var coderFixed64 = pointerCoderFuncs{
  4316  	size:      sizeFixed64,
  4317  	marshal:   appendFixed64,
  4318  	unmarshal: consumeFixed64,
  4319  	merge:     mergeUint64,
  4320  }
  4321  
  4322  // sizeFixed64NoZero returns the size of wire encoding a uint64 pointer as a Fixed64.
  4323  // The zero value is not encoded.
  4324  func sizeFixed64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  4325  	v := *p.Uint64()
  4326  	if v == 0 {
  4327  		return 0
  4328  	}
  4329  	return f.tagsize + protowire.SizeFixed64()
  4330  }
  4331  
  4332  // appendFixed64NoZero wire encodes a uint64 pointer as a Fixed64.
  4333  // The zero value is not encoded.
  4334  func appendFixed64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  4335  	v := *p.Uint64()
  4336  	if v == 0 {
  4337  		return b, nil
  4338  	}
  4339  	b = protowire.AppendVarint(b, f.wiretag)
  4340  	b = protowire.AppendFixed64(b, v)
  4341  	return b, nil
  4342  }
  4343  
  4344  var coderFixed64NoZero = pointerCoderFuncs{
  4345  	size:      sizeFixed64NoZero,
  4346  	marshal:   appendFixed64NoZero,
  4347  	unmarshal: consumeFixed64,
  4348  	merge:     mergeUint64NoZero,
  4349  }
  4350  
  4351  // sizeFixed64Ptr returns the size of wire encoding a *uint64 pointer as a Fixed64.
  4352  // It panics if the pointer is nil.
  4353  func sizeFixed64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  4354  	return f.tagsize + protowire.SizeFixed64()
  4355  }
  4356  
  4357  // appendFixed64Ptr wire encodes a *uint64 pointer as a Fixed64.
  4358  // It panics if the pointer is nil.
  4359  func appendFixed64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  4360  	v := **p.Uint64Ptr()
  4361  	b = protowire.AppendVarint(b, f.wiretag)
  4362  	b = protowire.AppendFixed64(b, v)
  4363  	return b, nil
  4364  }
  4365  
  4366  // consumeFixed64Ptr wire decodes a *uint64 pointer as a Fixed64.
  4367  func consumeFixed64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  4368  	if wtyp != protowire.Fixed64Type {
  4369  		return out, errUnknown
  4370  	}
  4371  	v, n := protowire.ConsumeFixed64(b)
  4372  	if n < 0 {
  4373  		return out, errDecode
  4374  	}
  4375  	vp := p.Uint64Ptr()
  4376  	if *vp == nil {
  4377  		*vp = new(uint64)
  4378  	}
  4379  	**vp = v
  4380  	out.n = n
  4381  	return out, nil
  4382  }
  4383  
  4384  var coderFixed64Ptr = pointerCoderFuncs{
  4385  	size:      sizeFixed64Ptr,
  4386  	marshal:   appendFixed64Ptr,
  4387  	unmarshal: consumeFixed64Ptr,
  4388  	merge:     mergeUint64Ptr,
  4389  }
  4390  
  4391  // sizeFixed64Slice returns the size of wire encoding a []uint64 pointer as a repeated Fixed64.
  4392  func sizeFixed64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  4393  	s := *p.Uint64Slice()
  4394  	size = len(s) * (f.tagsize + protowire.SizeFixed64())
  4395  	return size
  4396  }
  4397  
  4398  // appendFixed64Slice encodes a []uint64 pointer as a repeated Fixed64.
  4399  func appendFixed64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  4400  	s := *p.Uint64Slice()
  4401  	for _, v := range s {
  4402  		b = protowire.AppendVarint(b, f.wiretag)
  4403  		b = protowire.AppendFixed64(b, v)
  4404  	}
  4405  	return b, nil
  4406  }
  4407  
  4408  // consumeFixed64Slice wire decodes a []uint64 pointer as a repeated Fixed64.
  4409  func consumeFixed64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  4410  	sp := p.Uint64Slice()
  4411  	if wtyp == protowire.BytesType {
  4412  		s := *sp
  4413  		b, n := protowire.ConsumeBytes(b)
  4414  		if n < 0 {
  4415  			return out, errDecode
  4416  		}
  4417  		for len(b) > 0 {
  4418  			v, n := protowire.ConsumeFixed64(b)
  4419  			if n < 0 {
  4420  				return out, errDecode
  4421  			}
  4422  			s = append(s, v)
  4423  			b = b[n:]
  4424  		}
  4425  		*sp = s
  4426  		out.n = n
  4427  		return out, nil
  4428  	}
  4429  	if wtyp != protowire.Fixed64Type {
  4430  		return out, errUnknown
  4431  	}
  4432  	v, n := protowire.ConsumeFixed64(b)
  4433  	if n < 0 {
  4434  		return out, errDecode
  4435  	}
  4436  	*sp = append(*sp, v)
  4437  	out.n = n
  4438  	return out, nil
  4439  }
  4440  
  4441  var coderFixed64Slice = pointerCoderFuncs{
  4442  	size:      sizeFixed64Slice,
  4443  	marshal:   appendFixed64Slice,
  4444  	unmarshal: consumeFixed64Slice,
  4445  	merge:     mergeUint64Slice,
  4446  }
  4447  
  4448  // sizeFixed64PackedSlice returns the size of wire encoding a []uint64 pointer as a packed repeated Fixed64.
  4449  func sizeFixed64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  4450  	s := *p.Uint64Slice()
  4451  	if len(s) == 0 {
  4452  		return 0
  4453  	}
  4454  	n := len(s) * protowire.SizeFixed64()
  4455  	return f.tagsize + protowire.SizeBytes(n)
  4456  }
  4457  
  4458  // appendFixed64PackedSlice encodes a []uint64 pointer as a packed repeated Fixed64.
  4459  func appendFixed64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  4460  	s := *p.Uint64Slice()
  4461  	if len(s) == 0 {
  4462  		return b, nil
  4463  	}
  4464  	b = protowire.AppendVarint(b, f.wiretag)
  4465  	n := len(s) * protowire.SizeFixed64()
  4466  	b = protowire.AppendVarint(b, uint64(n))
  4467  	for _, v := range s {
  4468  		b = protowire.AppendFixed64(b, v)
  4469  	}
  4470  	return b, nil
  4471  }
  4472  
  4473  var coderFixed64PackedSlice = pointerCoderFuncs{
  4474  	size:      sizeFixed64PackedSlice,
  4475  	marshal:   appendFixed64PackedSlice,
  4476  	unmarshal: consumeFixed64Slice,
  4477  	merge:     mergeUint64Slice,
  4478  }
  4479  
  4480  // sizeFixed64Value returns the size of wire encoding a uint64 value as a Fixed64.
  4481  func sizeFixed64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {
  4482  	return tagsize + protowire.SizeFixed64()
  4483  }
  4484  
  4485  // appendFixed64Value encodes a uint64 value as a Fixed64.
  4486  func appendFixed64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  4487  	b = protowire.AppendVarint(b, wiretag)
  4488  	b = protowire.AppendFixed64(b, v.Uint())
  4489  	return b, nil
  4490  }
  4491  
  4492  // consumeFixed64Value decodes a uint64 value as a Fixed64.
  4493  func consumeFixed64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  4494  	if wtyp != protowire.Fixed64Type {
  4495  		return protoreflect.Value{}, out, errUnknown
  4496  	}
  4497  	v, n := protowire.ConsumeFixed64(b)
  4498  	if n < 0 {
  4499  		return protoreflect.Value{}, out, errDecode
  4500  	}
  4501  	out.n = n
  4502  	return protoreflect.ValueOfUint64(v), out, nil
  4503  }
  4504  
  4505  var coderFixed64Value = valueCoderFuncs{
  4506  	size:      sizeFixed64Value,
  4507  	marshal:   appendFixed64Value,
  4508  	unmarshal: consumeFixed64Value,
  4509  	merge:     mergeScalarValue,
  4510  }
  4511  
  4512  // sizeFixed64SliceValue returns the size of wire encoding a []uint64 value as a repeated Fixed64.
  4513  func sizeFixed64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  4514  	list := listv.List()
  4515  	size = list.Len() * (tagsize + protowire.SizeFixed64())
  4516  	return size
  4517  }
  4518  
  4519  // appendFixed64SliceValue encodes a []uint64 value as a repeated Fixed64.
  4520  func appendFixed64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  4521  	list := listv.List()
  4522  	for i, llen := 0, list.Len(); i < llen; i++ {
  4523  		v := list.Get(i)
  4524  		b = protowire.AppendVarint(b, wiretag)
  4525  		b = protowire.AppendFixed64(b, v.Uint())
  4526  	}
  4527  	return b, nil
  4528  }
  4529  
  4530  // consumeFixed64SliceValue wire decodes a []uint64 value as a repeated Fixed64.
  4531  func consumeFixed64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  4532  	list := listv.List()
  4533  	if wtyp == protowire.BytesType {
  4534  		b, n := protowire.ConsumeBytes(b)
  4535  		if n < 0 {
  4536  			return protoreflect.Value{}, out, errDecode
  4537  		}
  4538  		for len(b) > 0 {
  4539  			v, n := protowire.ConsumeFixed64(b)
  4540  			if n < 0 {
  4541  				return protoreflect.Value{}, out, errDecode
  4542  			}
  4543  			list.Append(protoreflect.ValueOfUint64(v))
  4544  			b = b[n:]
  4545  		}
  4546  		out.n = n
  4547  		return listv, out, nil
  4548  	}
  4549  	if wtyp != protowire.Fixed64Type {
  4550  		return protoreflect.Value{}, out, errUnknown
  4551  	}
  4552  	v, n := protowire.ConsumeFixed64(b)
  4553  	if n < 0 {
  4554  		return protoreflect.Value{}, out, errDecode
  4555  	}
  4556  	list.Append(protoreflect.ValueOfUint64(v))
  4557  	out.n = n
  4558  	return listv, out, nil
  4559  }
  4560  
  4561  var coderFixed64SliceValue = valueCoderFuncs{
  4562  	size:      sizeFixed64SliceValue,
  4563  	marshal:   appendFixed64SliceValue,
  4564  	unmarshal: consumeFixed64SliceValue,
  4565  	merge:     mergeListValue,
  4566  }
  4567  
  4568  // sizeFixed64PackedSliceValue returns the size of wire encoding a []uint64 value as a packed repeated Fixed64.
  4569  func sizeFixed64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  4570  	list := listv.List()
  4571  	llen := list.Len()
  4572  	if llen == 0 {
  4573  		return 0
  4574  	}
  4575  	n := llen * protowire.SizeFixed64()
  4576  	return tagsize + protowire.SizeBytes(n)
  4577  }
  4578  
  4579  // appendFixed64PackedSliceValue encodes a []uint64 value as a packed repeated Fixed64.
  4580  func appendFixed64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  4581  	list := listv.List()
  4582  	llen := list.Len()
  4583  	if llen == 0 {
  4584  		return b, nil
  4585  	}
  4586  	b = protowire.AppendVarint(b, wiretag)
  4587  	n := llen * protowire.SizeFixed64()
  4588  	b = protowire.AppendVarint(b, uint64(n))
  4589  	for i := 0; i < llen; i++ {
  4590  		v := list.Get(i)
  4591  		b = protowire.AppendFixed64(b, v.Uint())
  4592  	}
  4593  	return b, nil
  4594  }
  4595  
  4596  var coderFixed64PackedSliceValue = valueCoderFuncs{
  4597  	size:      sizeFixed64PackedSliceValue,
  4598  	marshal:   appendFixed64PackedSliceValue,
  4599  	unmarshal: consumeFixed64SliceValue,
  4600  	merge:     mergeListValue,
  4601  }
  4602  
  4603  // sizeDouble returns the size of wire encoding a float64 pointer as a Double.
  4604  func sizeDouble(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  4605  
  4606  	return f.tagsize + protowire.SizeFixed64()
  4607  }
  4608  
  4609  // appendDouble wire encodes a float64 pointer as a Double.
  4610  func appendDouble(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  4611  	v := *p.Float64()
  4612  	b = protowire.AppendVarint(b, f.wiretag)
  4613  	b = protowire.AppendFixed64(b, math.Float64bits(v))
  4614  	return b, nil
  4615  }
  4616  
  4617  // consumeDouble wire decodes a float64 pointer as a Double.
  4618  func consumeDouble(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  4619  	if wtyp != protowire.Fixed64Type {
  4620  		return out, errUnknown
  4621  	}
  4622  	v, n := protowire.ConsumeFixed64(b)
  4623  	if n < 0 {
  4624  		return out, errDecode
  4625  	}
  4626  	*p.Float64() = math.Float64frombits(v)
  4627  	out.n = n
  4628  	return out, nil
  4629  }
  4630  
  4631  var coderDouble = pointerCoderFuncs{
  4632  	size:      sizeDouble,
  4633  	marshal:   appendDouble,
  4634  	unmarshal: consumeDouble,
  4635  	merge:     mergeFloat64,
  4636  }
  4637  
  4638  // sizeDoubleNoZero returns the size of wire encoding a float64 pointer as a Double.
  4639  // The zero value is not encoded.
  4640  func sizeDoubleNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  4641  	v := *p.Float64()
  4642  	if v == 0 && !math.Signbit(float64(v)) {
  4643  		return 0
  4644  	}
  4645  	return f.tagsize + protowire.SizeFixed64()
  4646  }
  4647  
  4648  // appendDoubleNoZero wire encodes a float64 pointer as a Double.
  4649  // The zero value is not encoded.
  4650  func appendDoubleNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  4651  	v := *p.Float64()
  4652  	if v == 0 && !math.Signbit(float64(v)) {
  4653  		return b, nil
  4654  	}
  4655  	b = protowire.AppendVarint(b, f.wiretag)
  4656  	b = protowire.AppendFixed64(b, math.Float64bits(v))
  4657  	return b, nil
  4658  }
  4659  
  4660  var coderDoubleNoZero = pointerCoderFuncs{
  4661  	size:      sizeDoubleNoZero,
  4662  	marshal:   appendDoubleNoZero,
  4663  	unmarshal: consumeDouble,
  4664  	merge:     mergeFloat64NoZero,
  4665  }
  4666  
  4667  // sizeDoublePtr returns the size of wire encoding a *float64 pointer as a Double.
  4668  // It panics if the pointer is nil.
  4669  func sizeDoublePtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  4670  	return f.tagsize + protowire.SizeFixed64()
  4671  }
  4672  
  4673  // appendDoublePtr wire encodes a *float64 pointer as a Double.
  4674  // It panics if the pointer is nil.
  4675  func appendDoublePtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  4676  	v := **p.Float64Ptr()
  4677  	b = protowire.AppendVarint(b, f.wiretag)
  4678  	b = protowire.AppendFixed64(b, math.Float64bits(v))
  4679  	return b, nil
  4680  }
  4681  
  4682  // consumeDoublePtr wire decodes a *float64 pointer as a Double.
  4683  func consumeDoublePtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  4684  	if wtyp != protowire.Fixed64Type {
  4685  		return out, errUnknown
  4686  	}
  4687  	v, n := protowire.ConsumeFixed64(b)
  4688  	if n < 0 {
  4689  		return out, errDecode
  4690  	}
  4691  	vp := p.Float64Ptr()
  4692  	if *vp == nil {
  4693  		*vp = new(float64)
  4694  	}
  4695  	**vp = math.Float64frombits(v)
  4696  	out.n = n
  4697  	return out, nil
  4698  }
  4699  
  4700  var coderDoublePtr = pointerCoderFuncs{
  4701  	size:      sizeDoublePtr,
  4702  	marshal:   appendDoublePtr,
  4703  	unmarshal: consumeDoublePtr,
  4704  	merge:     mergeFloat64Ptr,
  4705  }
  4706  
  4707  // sizeDoubleSlice returns the size of wire encoding a []float64 pointer as a repeated Double.
  4708  func sizeDoubleSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  4709  	s := *p.Float64Slice()
  4710  	size = len(s) * (f.tagsize + protowire.SizeFixed64())
  4711  	return size
  4712  }
  4713  
  4714  // appendDoubleSlice encodes a []float64 pointer as a repeated Double.
  4715  func appendDoubleSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  4716  	s := *p.Float64Slice()
  4717  	for _, v := range s {
  4718  		b = protowire.AppendVarint(b, f.wiretag)
  4719  		b = protowire.AppendFixed64(b, math.Float64bits(v))
  4720  	}
  4721  	return b, nil
  4722  }
  4723  
  4724  // consumeDoubleSlice wire decodes a []float64 pointer as a repeated Double.
  4725  func consumeDoubleSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  4726  	sp := p.Float64Slice()
  4727  	if wtyp == protowire.BytesType {
  4728  		s := *sp
  4729  		b, n := protowire.ConsumeBytes(b)
  4730  		if n < 0 {
  4731  			return out, errDecode
  4732  		}
  4733  		for len(b) > 0 {
  4734  			v, n := protowire.ConsumeFixed64(b)
  4735  			if n < 0 {
  4736  				return out, errDecode
  4737  			}
  4738  			s = append(s, math.Float64frombits(v))
  4739  			b = b[n:]
  4740  		}
  4741  		*sp = s
  4742  		out.n = n
  4743  		return out, nil
  4744  	}
  4745  	if wtyp != protowire.Fixed64Type {
  4746  		return out, errUnknown
  4747  	}
  4748  	v, n := protowire.ConsumeFixed64(b)
  4749  	if n < 0 {
  4750  		return out, errDecode
  4751  	}
  4752  	*sp = append(*sp, math.Float64frombits(v))
  4753  	out.n = n
  4754  	return out, nil
  4755  }
  4756  
  4757  var coderDoubleSlice = pointerCoderFuncs{
  4758  	size:      sizeDoubleSlice,
  4759  	marshal:   appendDoubleSlice,
  4760  	unmarshal: consumeDoubleSlice,
  4761  	merge:     mergeFloat64Slice,
  4762  }
  4763  
  4764  // sizeDoublePackedSlice returns the size of wire encoding a []float64 pointer as a packed repeated Double.
  4765  func sizeDoublePackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  4766  	s := *p.Float64Slice()
  4767  	if len(s) == 0 {
  4768  		return 0
  4769  	}
  4770  	n := len(s) * protowire.SizeFixed64()
  4771  	return f.tagsize + protowire.SizeBytes(n)
  4772  }
  4773  
  4774  // appendDoublePackedSlice encodes a []float64 pointer as a packed repeated Double.
  4775  func appendDoublePackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  4776  	s := *p.Float64Slice()
  4777  	if len(s) == 0 {
  4778  		return b, nil
  4779  	}
  4780  	b = protowire.AppendVarint(b, f.wiretag)
  4781  	n := len(s) * protowire.SizeFixed64()
  4782  	b = protowire.AppendVarint(b, uint64(n))
  4783  	for _, v := range s {
  4784  		b = protowire.AppendFixed64(b, math.Float64bits(v))
  4785  	}
  4786  	return b, nil
  4787  }
  4788  
  4789  var coderDoublePackedSlice = pointerCoderFuncs{
  4790  	size:      sizeDoublePackedSlice,
  4791  	marshal:   appendDoublePackedSlice,
  4792  	unmarshal: consumeDoubleSlice,
  4793  	merge:     mergeFloat64Slice,
  4794  }
  4795  
  4796  // sizeDoubleValue returns the size of wire encoding a float64 value as a Double.
  4797  func sizeDoubleValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {
  4798  	return tagsize + protowire.SizeFixed64()
  4799  }
  4800  
  4801  // appendDoubleValue encodes a float64 value as a Double.
  4802  func appendDoubleValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  4803  	b = protowire.AppendVarint(b, wiretag)
  4804  	b = protowire.AppendFixed64(b, math.Float64bits(v.Float()))
  4805  	return b, nil
  4806  }
  4807  
  4808  // consumeDoubleValue decodes a float64 value as a Double.
  4809  func consumeDoubleValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  4810  	if wtyp != protowire.Fixed64Type {
  4811  		return protoreflect.Value{}, out, errUnknown
  4812  	}
  4813  	v, n := protowire.ConsumeFixed64(b)
  4814  	if n < 0 {
  4815  		return protoreflect.Value{}, out, errDecode
  4816  	}
  4817  	out.n = n
  4818  	return protoreflect.ValueOfFloat64(math.Float64frombits(v)), out, nil
  4819  }
  4820  
  4821  var coderDoubleValue = valueCoderFuncs{
  4822  	size:      sizeDoubleValue,
  4823  	marshal:   appendDoubleValue,
  4824  	unmarshal: consumeDoubleValue,
  4825  	merge:     mergeScalarValue,
  4826  }
  4827  
  4828  // sizeDoubleSliceValue returns the size of wire encoding a []float64 value as a repeated Double.
  4829  func sizeDoubleSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  4830  	list := listv.List()
  4831  	size = list.Len() * (tagsize + protowire.SizeFixed64())
  4832  	return size
  4833  }
  4834  
  4835  // appendDoubleSliceValue encodes a []float64 value as a repeated Double.
  4836  func appendDoubleSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  4837  	list := listv.List()
  4838  	for i, llen := 0, list.Len(); i < llen; i++ {
  4839  		v := list.Get(i)
  4840  		b = protowire.AppendVarint(b, wiretag)
  4841  		b = protowire.AppendFixed64(b, math.Float64bits(v.Float()))
  4842  	}
  4843  	return b, nil
  4844  }
  4845  
  4846  // consumeDoubleSliceValue wire decodes a []float64 value as a repeated Double.
  4847  func consumeDoubleSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  4848  	list := listv.List()
  4849  	if wtyp == protowire.BytesType {
  4850  		b, n := protowire.ConsumeBytes(b)
  4851  		if n < 0 {
  4852  			return protoreflect.Value{}, out, errDecode
  4853  		}
  4854  		for len(b) > 0 {
  4855  			v, n := protowire.ConsumeFixed64(b)
  4856  			if n < 0 {
  4857  				return protoreflect.Value{}, out, errDecode
  4858  			}
  4859  			list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v)))
  4860  			b = b[n:]
  4861  		}
  4862  		out.n = n
  4863  		return listv, out, nil
  4864  	}
  4865  	if wtyp != protowire.Fixed64Type {
  4866  		return protoreflect.Value{}, out, errUnknown
  4867  	}
  4868  	v, n := protowire.ConsumeFixed64(b)
  4869  	if n < 0 {
  4870  		return protoreflect.Value{}, out, errDecode
  4871  	}
  4872  	list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v)))
  4873  	out.n = n
  4874  	return listv, out, nil
  4875  }
  4876  
  4877  var coderDoubleSliceValue = valueCoderFuncs{
  4878  	size:      sizeDoubleSliceValue,
  4879  	marshal:   appendDoubleSliceValue,
  4880  	unmarshal: consumeDoubleSliceValue,
  4881  	merge:     mergeListValue,
  4882  }
  4883  
  4884  // sizeDoublePackedSliceValue returns the size of wire encoding a []float64 value as a packed repeated Double.
  4885  func sizeDoublePackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  4886  	list := listv.List()
  4887  	llen := list.Len()
  4888  	if llen == 0 {
  4889  		return 0
  4890  	}
  4891  	n := llen * protowire.SizeFixed64()
  4892  	return tagsize + protowire.SizeBytes(n)
  4893  }
  4894  
  4895  // appendDoublePackedSliceValue encodes a []float64 value as a packed repeated Double.
  4896  func appendDoublePackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  4897  	list := listv.List()
  4898  	llen := list.Len()
  4899  	if llen == 0 {
  4900  		return b, nil
  4901  	}
  4902  	b = protowire.AppendVarint(b, wiretag)
  4903  	n := llen * protowire.SizeFixed64()
  4904  	b = protowire.AppendVarint(b, uint64(n))
  4905  	for i := 0; i < llen; i++ {
  4906  		v := list.Get(i)
  4907  		b = protowire.AppendFixed64(b, math.Float64bits(v.Float()))
  4908  	}
  4909  	return b, nil
  4910  }
  4911  
  4912  var coderDoublePackedSliceValue = valueCoderFuncs{
  4913  	size:      sizeDoublePackedSliceValue,
  4914  	marshal:   appendDoublePackedSliceValue,
  4915  	unmarshal: consumeDoubleSliceValue,
  4916  	merge:     mergeListValue,
  4917  }
  4918  
  4919  // sizeString returns the size of wire encoding a string pointer as a String.
  4920  func sizeString(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  4921  	v := *p.String()
  4922  	return f.tagsize + protowire.SizeBytes(len(v))
  4923  }
  4924  
  4925  // appendString wire encodes a string pointer as a String.
  4926  func appendString(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  4927  	v := *p.String()
  4928  	b = protowire.AppendVarint(b, f.wiretag)
  4929  	b = protowire.AppendString(b, v)
  4930  	return b, nil
  4931  }
  4932  
  4933  // consumeString wire decodes a string pointer as a String.
  4934  func consumeString(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  4935  	if wtyp != protowire.BytesType {
  4936  		return out, errUnknown
  4937  	}
  4938  	v, n := protowire.ConsumeBytes(b)
  4939  	if n < 0 {
  4940  		return out, errDecode
  4941  	}
  4942  	*p.String() = string(v)
  4943  	out.n = n
  4944  	return out, nil
  4945  }
  4946  
  4947  var coderString = pointerCoderFuncs{
  4948  	size:      sizeString,
  4949  	marshal:   appendString,
  4950  	unmarshal: consumeString,
  4951  	merge:     mergeString,
  4952  }
  4953  
  4954  // appendStringValidateUTF8 wire encodes a string pointer as a String.
  4955  func appendStringValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  4956  	v := *p.String()
  4957  	b = protowire.AppendVarint(b, f.wiretag)
  4958  	b = protowire.AppendString(b, v)
  4959  	if !utf8.ValidString(v) {
  4960  		return b, errInvalidUTF8{}
  4961  	}
  4962  	return b, nil
  4963  }
  4964  
  4965  // consumeStringValidateUTF8 wire decodes a string pointer as a String.
  4966  func consumeStringValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  4967  	if wtyp != protowire.BytesType {
  4968  		return out, errUnknown
  4969  	}
  4970  	v, n := protowire.ConsumeBytes(b)
  4971  	if n < 0 {
  4972  		return out, errDecode
  4973  	}
  4974  	if !utf8.Valid(v) {
  4975  		return out, errInvalidUTF8{}
  4976  	}
  4977  	*p.String() = string(v)
  4978  	out.n = n
  4979  	return out, nil
  4980  }
  4981  
  4982  var coderStringValidateUTF8 = pointerCoderFuncs{
  4983  	size:      sizeString,
  4984  	marshal:   appendStringValidateUTF8,
  4985  	unmarshal: consumeStringValidateUTF8,
  4986  	merge:     mergeString,
  4987  }
  4988  
  4989  // sizeStringNoZero returns the size of wire encoding a string pointer as a String.
  4990  // The zero value is not encoded.
  4991  func sizeStringNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  4992  	v := *p.String()
  4993  	if len(v) == 0 {
  4994  		return 0
  4995  	}
  4996  	return f.tagsize + protowire.SizeBytes(len(v))
  4997  }
  4998  
  4999  // appendStringNoZero wire encodes a string pointer as a String.
  5000  // The zero value is not encoded.
  5001  func appendStringNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  5002  	v := *p.String()
  5003  	if len(v) == 0 {
  5004  		return b, nil
  5005  	}
  5006  	b = protowire.AppendVarint(b, f.wiretag)
  5007  	b = protowire.AppendString(b, v)
  5008  	return b, nil
  5009  }
  5010  
  5011  var coderStringNoZero = pointerCoderFuncs{
  5012  	size:      sizeStringNoZero,
  5013  	marshal:   appendStringNoZero,
  5014  	unmarshal: consumeString,
  5015  	merge:     mergeStringNoZero,
  5016  }
  5017  
  5018  // appendStringNoZeroValidateUTF8 wire encodes a string pointer as a String.
  5019  // The zero value is not encoded.
  5020  func appendStringNoZeroValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  5021  	v := *p.String()
  5022  	if len(v) == 0 {
  5023  		return b, nil
  5024  	}
  5025  	b = protowire.AppendVarint(b, f.wiretag)
  5026  	b = protowire.AppendString(b, v)
  5027  	if !utf8.ValidString(v) {
  5028  		return b, errInvalidUTF8{}
  5029  	}
  5030  	return b, nil
  5031  }
  5032  
  5033  var coderStringNoZeroValidateUTF8 = pointerCoderFuncs{
  5034  	size:      sizeStringNoZero,
  5035  	marshal:   appendStringNoZeroValidateUTF8,
  5036  	unmarshal: consumeStringValidateUTF8,
  5037  	merge:     mergeStringNoZero,
  5038  }
  5039  
  5040  // sizeStringPtr returns the size of wire encoding a *string pointer as a String.
  5041  // It panics if the pointer is nil.
  5042  func sizeStringPtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  5043  	v := **p.StringPtr()
  5044  	return f.tagsize + protowire.SizeBytes(len(v))
  5045  }
  5046  
  5047  // appendStringPtr wire encodes a *string pointer as a String.
  5048  // It panics if the pointer is nil.
  5049  func appendStringPtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  5050  	v := **p.StringPtr()
  5051  	b = protowire.AppendVarint(b, f.wiretag)
  5052  	b = protowire.AppendString(b, v)
  5053  	return b, nil
  5054  }
  5055  
  5056  // consumeStringPtr wire decodes a *string pointer as a String.
  5057  func consumeStringPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  5058  	if wtyp != protowire.BytesType {
  5059  		return out, errUnknown
  5060  	}
  5061  	v, n := protowire.ConsumeBytes(b)
  5062  	if n < 0 {
  5063  		return out, errDecode
  5064  	}
  5065  	vp := p.StringPtr()
  5066  	if *vp == nil {
  5067  		*vp = new(string)
  5068  	}
  5069  	**vp = string(v)
  5070  	out.n = n
  5071  	return out, nil
  5072  }
  5073  
  5074  var coderStringPtr = pointerCoderFuncs{
  5075  	size:      sizeStringPtr,
  5076  	marshal:   appendStringPtr,
  5077  	unmarshal: consumeStringPtr,
  5078  	merge:     mergeStringPtr,
  5079  }
  5080  
  5081  // appendStringPtrValidateUTF8 wire encodes a *string pointer as a String.
  5082  // It panics if the pointer is nil.
  5083  func appendStringPtrValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  5084  	v := **p.StringPtr()
  5085  	b = protowire.AppendVarint(b, f.wiretag)
  5086  	b = protowire.AppendString(b, v)
  5087  	if !utf8.ValidString(v) {
  5088  		return b, errInvalidUTF8{}
  5089  	}
  5090  	return b, nil
  5091  }
  5092  
  5093  // consumeStringPtrValidateUTF8 wire decodes a *string pointer as a String.
  5094  func consumeStringPtrValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  5095  	if wtyp != protowire.BytesType {
  5096  		return out, errUnknown
  5097  	}
  5098  	v, n := protowire.ConsumeBytes(b)
  5099  	if n < 0 {
  5100  		return out, errDecode
  5101  	}
  5102  	if !utf8.Valid(v) {
  5103  		return out, errInvalidUTF8{}
  5104  	}
  5105  	vp := p.StringPtr()
  5106  	if *vp == nil {
  5107  		*vp = new(string)
  5108  	}
  5109  	**vp = string(v)
  5110  	out.n = n
  5111  	return out, nil
  5112  }
  5113  
  5114  var coderStringPtrValidateUTF8 = pointerCoderFuncs{
  5115  	size:      sizeStringPtr,
  5116  	marshal:   appendStringPtrValidateUTF8,
  5117  	unmarshal: consumeStringPtrValidateUTF8,
  5118  	merge:     mergeStringPtr,
  5119  }
  5120  
  5121  // sizeStringSlice returns the size of wire encoding a []string pointer as a repeated String.
  5122  func sizeStringSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  5123  	s := *p.StringSlice()
  5124  	for _, v := range s {
  5125  		size += f.tagsize + protowire.SizeBytes(len(v))
  5126  	}
  5127  	return size
  5128  }
  5129  
  5130  // appendStringSlice encodes a []string pointer as a repeated String.
  5131  func appendStringSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  5132  	s := *p.StringSlice()
  5133  	for _, v := range s {
  5134  		b = protowire.AppendVarint(b, f.wiretag)
  5135  		b = protowire.AppendString(b, v)
  5136  	}
  5137  	return b, nil
  5138  }
  5139  
  5140  // consumeStringSlice wire decodes a []string pointer as a repeated String.
  5141  func consumeStringSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  5142  	sp := p.StringSlice()
  5143  	if wtyp != protowire.BytesType {
  5144  		return out, errUnknown
  5145  	}
  5146  	v, n := protowire.ConsumeBytes(b)
  5147  	if n < 0 {
  5148  		return out, errDecode
  5149  	}
  5150  	*sp = append(*sp, string(v))
  5151  	out.n = n
  5152  	return out, nil
  5153  }
  5154  
  5155  var coderStringSlice = pointerCoderFuncs{
  5156  	size:      sizeStringSlice,
  5157  	marshal:   appendStringSlice,
  5158  	unmarshal: consumeStringSlice,
  5159  	merge:     mergeStringSlice,
  5160  }
  5161  
  5162  // appendStringSliceValidateUTF8 encodes a []string pointer as a repeated String.
  5163  func appendStringSliceValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  5164  	s := *p.StringSlice()
  5165  	for _, v := range s {
  5166  		b = protowire.AppendVarint(b, f.wiretag)
  5167  		b = protowire.AppendString(b, v)
  5168  		if !utf8.ValidString(v) {
  5169  			return b, errInvalidUTF8{}
  5170  		}
  5171  	}
  5172  	return b, nil
  5173  }
  5174  
  5175  // consumeStringSliceValidateUTF8 wire decodes a []string pointer as a repeated String.
  5176  func consumeStringSliceValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  5177  	if wtyp != protowire.BytesType {
  5178  		return out, errUnknown
  5179  	}
  5180  	v, n := protowire.ConsumeBytes(b)
  5181  	if n < 0 {
  5182  		return out, errDecode
  5183  	}
  5184  	if !utf8.Valid(v) {
  5185  		return out, errInvalidUTF8{}
  5186  	}
  5187  	sp := p.StringSlice()
  5188  	*sp = append(*sp, string(v))
  5189  	out.n = n
  5190  	return out, nil
  5191  }
  5192  
  5193  var coderStringSliceValidateUTF8 = pointerCoderFuncs{
  5194  	size:      sizeStringSlice,
  5195  	marshal:   appendStringSliceValidateUTF8,
  5196  	unmarshal: consumeStringSliceValidateUTF8,
  5197  	merge:     mergeStringSlice,
  5198  }
  5199  
  5200  // sizeStringValue returns the size of wire encoding a string value as a String.
  5201  func sizeStringValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {
  5202  	return tagsize + protowire.SizeBytes(len(v.String()))
  5203  }
  5204  
  5205  // appendStringValue encodes a string value as a String.
  5206  func appendStringValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  5207  	b = protowire.AppendVarint(b, wiretag)
  5208  	b = protowire.AppendString(b, v.String())
  5209  	return b, nil
  5210  }
  5211  
  5212  // consumeStringValue decodes a string value as a String.
  5213  func consumeStringValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  5214  	if wtyp != protowire.BytesType {
  5215  		return protoreflect.Value{}, out, errUnknown
  5216  	}
  5217  	v, n := protowire.ConsumeBytes(b)
  5218  	if n < 0 {
  5219  		return protoreflect.Value{}, out, errDecode
  5220  	}
  5221  	out.n = n
  5222  	return protoreflect.ValueOfString(string(v)), out, nil
  5223  }
  5224  
  5225  var coderStringValue = valueCoderFuncs{
  5226  	size:      sizeStringValue,
  5227  	marshal:   appendStringValue,
  5228  	unmarshal: consumeStringValue,
  5229  	merge:     mergeScalarValue,
  5230  }
  5231  
  5232  // appendStringValueValidateUTF8 encodes a string value as a String.
  5233  func appendStringValueValidateUTF8(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  5234  	b = protowire.AppendVarint(b, wiretag)
  5235  	b = protowire.AppendString(b, v.String())
  5236  	if !utf8.ValidString(v.String()) {
  5237  		return b, errInvalidUTF8{}
  5238  	}
  5239  	return b, nil
  5240  }
  5241  
  5242  // consumeStringValueValidateUTF8 decodes a string value as a String.
  5243  func consumeStringValueValidateUTF8(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  5244  	if wtyp != protowire.BytesType {
  5245  		return protoreflect.Value{}, out, errUnknown
  5246  	}
  5247  	v, n := protowire.ConsumeBytes(b)
  5248  	if n < 0 {
  5249  		return protoreflect.Value{}, out, errDecode
  5250  	}
  5251  	if !utf8.Valid(v) {
  5252  		return protoreflect.Value{}, out, errInvalidUTF8{}
  5253  	}
  5254  	out.n = n
  5255  	return protoreflect.ValueOfString(string(v)), out, nil
  5256  }
  5257  
  5258  var coderStringValueValidateUTF8 = valueCoderFuncs{
  5259  	size:      sizeStringValue,
  5260  	marshal:   appendStringValueValidateUTF8,
  5261  	unmarshal: consumeStringValueValidateUTF8,
  5262  	merge:     mergeScalarValue,
  5263  }
  5264  
  5265  // sizeStringSliceValue returns the size of wire encoding a []string value as a repeated String.
  5266  func sizeStringSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  5267  	list := listv.List()
  5268  	for i, llen := 0, list.Len(); i < llen; i++ {
  5269  		v := list.Get(i)
  5270  		size += tagsize + protowire.SizeBytes(len(v.String()))
  5271  	}
  5272  	return size
  5273  }
  5274  
  5275  // appendStringSliceValue encodes a []string value as a repeated String.
  5276  func appendStringSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  5277  	list := listv.List()
  5278  	for i, llen := 0, list.Len(); i < llen; i++ {
  5279  		v := list.Get(i)
  5280  		b = protowire.AppendVarint(b, wiretag)
  5281  		b = protowire.AppendString(b, v.String())
  5282  	}
  5283  	return b, nil
  5284  }
  5285  
  5286  // consumeStringSliceValue wire decodes a []string value as a repeated String.
  5287  func consumeStringSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  5288  	list := listv.List()
  5289  	if wtyp != protowire.BytesType {
  5290  		return protoreflect.Value{}, out, errUnknown
  5291  	}
  5292  	v, n := protowire.ConsumeBytes(b)
  5293  	if n < 0 {
  5294  		return protoreflect.Value{}, out, errDecode
  5295  	}
  5296  	list.Append(protoreflect.ValueOfString(string(v)))
  5297  	out.n = n
  5298  	return listv, out, nil
  5299  }
  5300  
  5301  var coderStringSliceValue = valueCoderFuncs{
  5302  	size:      sizeStringSliceValue,
  5303  	marshal:   appendStringSliceValue,
  5304  	unmarshal: consumeStringSliceValue,
  5305  	merge:     mergeListValue,
  5306  }
  5307  
  5308  // sizeBytes returns the size of wire encoding a []byte pointer as a Bytes.
  5309  func sizeBytes(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  5310  	v := *p.Bytes()
  5311  	return f.tagsize + protowire.SizeBytes(len(v))
  5312  }
  5313  
  5314  // appendBytes wire encodes a []byte pointer as a Bytes.
  5315  func appendBytes(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  5316  	v := *p.Bytes()
  5317  	b = protowire.AppendVarint(b, f.wiretag)
  5318  	b = protowire.AppendBytes(b, v)
  5319  	return b, nil
  5320  }
  5321  
  5322  // consumeBytes wire decodes a []byte pointer as a Bytes.
  5323  func consumeBytes(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  5324  	if wtyp != protowire.BytesType {
  5325  		return out, errUnknown
  5326  	}
  5327  	v, n := protowire.ConsumeBytes(b)
  5328  	if n < 0 {
  5329  		return out, errDecode
  5330  	}
  5331  	*p.Bytes() = append(emptyBuf[:], v...)
  5332  	out.n = n
  5333  	return out, nil
  5334  }
  5335  
  5336  var coderBytes = pointerCoderFuncs{
  5337  	size:      sizeBytes,
  5338  	marshal:   appendBytes,
  5339  	unmarshal: consumeBytes,
  5340  	merge:     mergeBytes,
  5341  }
  5342  
  5343  // appendBytesValidateUTF8 wire encodes a []byte pointer as a Bytes.
  5344  func appendBytesValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  5345  	v := *p.Bytes()
  5346  	b = protowire.AppendVarint(b, f.wiretag)
  5347  	b = protowire.AppendBytes(b, v)
  5348  	if !utf8.Valid(v) {
  5349  		return b, errInvalidUTF8{}
  5350  	}
  5351  	return b, nil
  5352  }
  5353  
  5354  // consumeBytesValidateUTF8 wire decodes a []byte pointer as a Bytes.
  5355  func consumeBytesValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  5356  	if wtyp != protowire.BytesType {
  5357  		return out, errUnknown
  5358  	}
  5359  	v, n := protowire.ConsumeBytes(b)
  5360  	if n < 0 {
  5361  		return out, errDecode
  5362  	}
  5363  	if !utf8.Valid(v) {
  5364  		return out, errInvalidUTF8{}
  5365  	}
  5366  	*p.Bytes() = append(emptyBuf[:], v...)
  5367  	out.n = n
  5368  	return out, nil
  5369  }
  5370  
  5371  var coderBytesValidateUTF8 = pointerCoderFuncs{
  5372  	size:      sizeBytes,
  5373  	marshal:   appendBytesValidateUTF8,
  5374  	unmarshal: consumeBytesValidateUTF8,
  5375  	merge:     mergeBytes,
  5376  }
  5377  
  5378  // sizeBytesNoZero returns the size of wire encoding a []byte pointer as a Bytes.
  5379  // The zero value is not encoded.
  5380  func sizeBytesNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  5381  	v := *p.Bytes()
  5382  	if len(v) == 0 {
  5383  		return 0
  5384  	}
  5385  	return f.tagsize + protowire.SizeBytes(len(v))
  5386  }
  5387  
  5388  // appendBytesNoZero wire encodes a []byte pointer as a Bytes.
  5389  // The zero value is not encoded.
  5390  func appendBytesNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  5391  	v := *p.Bytes()
  5392  	if len(v) == 0 {
  5393  		return b, nil
  5394  	}
  5395  	b = protowire.AppendVarint(b, f.wiretag)
  5396  	b = protowire.AppendBytes(b, v)
  5397  	return b, nil
  5398  }
  5399  
  5400  // consumeBytesNoZero wire decodes a []byte pointer as a Bytes.
  5401  // The zero value is not decoded.
  5402  func consumeBytesNoZero(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  5403  	if wtyp != protowire.BytesType {
  5404  		return out, errUnknown
  5405  	}
  5406  	v, n := protowire.ConsumeBytes(b)
  5407  	if n < 0 {
  5408  		return out, errDecode
  5409  	}
  5410  	*p.Bytes() = append(([]byte)(nil), v...)
  5411  	out.n = n
  5412  	return out, nil
  5413  }
  5414  
  5415  var coderBytesNoZero = pointerCoderFuncs{
  5416  	size:      sizeBytesNoZero,
  5417  	marshal:   appendBytesNoZero,
  5418  	unmarshal: consumeBytesNoZero,
  5419  	merge:     mergeBytesNoZero,
  5420  }
  5421  
  5422  // appendBytesNoZeroValidateUTF8 wire encodes a []byte pointer as a Bytes.
  5423  // The zero value is not encoded.
  5424  func appendBytesNoZeroValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  5425  	v := *p.Bytes()
  5426  	if len(v) == 0 {
  5427  		return b, nil
  5428  	}
  5429  	b = protowire.AppendVarint(b, f.wiretag)
  5430  	b = protowire.AppendBytes(b, v)
  5431  	if !utf8.Valid(v) {
  5432  		return b, errInvalidUTF8{}
  5433  	}
  5434  	return b, nil
  5435  }
  5436  
  5437  // consumeBytesNoZeroValidateUTF8 wire decodes a []byte pointer as a Bytes.
  5438  func consumeBytesNoZeroValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  5439  	if wtyp != protowire.BytesType {
  5440  		return out, errUnknown
  5441  	}
  5442  	v, n := protowire.ConsumeBytes(b)
  5443  	if n < 0 {
  5444  		return out, errDecode
  5445  	}
  5446  	if !utf8.Valid(v) {
  5447  		return out, errInvalidUTF8{}
  5448  	}
  5449  	*p.Bytes() = append(([]byte)(nil), v...)
  5450  	out.n = n
  5451  	return out, nil
  5452  }
  5453  
  5454  var coderBytesNoZeroValidateUTF8 = pointerCoderFuncs{
  5455  	size:      sizeBytesNoZero,
  5456  	marshal:   appendBytesNoZeroValidateUTF8,
  5457  	unmarshal: consumeBytesNoZeroValidateUTF8,
  5458  	merge:     mergeBytesNoZero,
  5459  }
  5460  
  5461  // sizeBytesSlice returns the size of wire encoding a [][]byte pointer as a repeated Bytes.
  5462  func sizeBytesSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
  5463  	s := *p.BytesSlice()
  5464  	for _, v := range s {
  5465  		size += f.tagsize + protowire.SizeBytes(len(v))
  5466  	}
  5467  	return size
  5468  }
  5469  
  5470  // appendBytesSlice encodes a [][]byte pointer as a repeated Bytes.
  5471  func appendBytesSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  5472  	s := *p.BytesSlice()
  5473  	for _, v := range s {
  5474  		b = protowire.AppendVarint(b, f.wiretag)
  5475  		b = protowire.AppendBytes(b, v)
  5476  	}
  5477  	return b, nil
  5478  }
  5479  
  5480  // consumeBytesSlice wire decodes a [][]byte pointer as a repeated Bytes.
  5481  func consumeBytesSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  5482  	sp := p.BytesSlice()
  5483  	if wtyp != protowire.BytesType {
  5484  		return out, errUnknown
  5485  	}
  5486  	v, n := protowire.ConsumeBytes(b)
  5487  	if n < 0 {
  5488  		return out, errDecode
  5489  	}
  5490  	*sp = append(*sp, append(emptyBuf[:], v...))
  5491  	out.n = n
  5492  	return out, nil
  5493  }
  5494  
  5495  var coderBytesSlice = pointerCoderFuncs{
  5496  	size:      sizeBytesSlice,
  5497  	marshal:   appendBytesSlice,
  5498  	unmarshal: consumeBytesSlice,
  5499  	merge:     mergeBytesSlice,
  5500  }
  5501  
  5502  // appendBytesSliceValidateUTF8 encodes a [][]byte pointer as a repeated Bytes.
  5503  func appendBytesSliceValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
  5504  	s := *p.BytesSlice()
  5505  	for _, v := range s {
  5506  		b = protowire.AppendVarint(b, f.wiretag)
  5507  		b = protowire.AppendBytes(b, v)
  5508  		if !utf8.Valid(v) {
  5509  			return b, errInvalidUTF8{}
  5510  		}
  5511  	}
  5512  	return b, nil
  5513  }
  5514  
  5515  // consumeBytesSliceValidateUTF8 wire decodes a [][]byte pointer as a repeated Bytes.
  5516  func consumeBytesSliceValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
  5517  	if wtyp != protowire.BytesType {
  5518  		return out, errUnknown
  5519  	}
  5520  	v, n := protowire.ConsumeBytes(b)
  5521  	if n < 0 {
  5522  		return out, errDecode
  5523  	}
  5524  	if !utf8.Valid(v) {
  5525  		return out, errInvalidUTF8{}
  5526  	}
  5527  	sp := p.BytesSlice()
  5528  	*sp = append(*sp, append(emptyBuf[:], v...))
  5529  	out.n = n
  5530  	return out, nil
  5531  }
  5532  
  5533  var coderBytesSliceValidateUTF8 = pointerCoderFuncs{
  5534  	size:      sizeBytesSlice,
  5535  	marshal:   appendBytesSliceValidateUTF8,
  5536  	unmarshal: consumeBytesSliceValidateUTF8,
  5537  	merge:     mergeBytesSlice,
  5538  }
  5539  
  5540  // sizeBytesValue returns the size of wire encoding a []byte value as a Bytes.
  5541  func sizeBytesValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {
  5542  	return tagsize + protowire.SizeBytes(len(v.Bytes()))
  5543  }
  5544  
  5545  // appendBytesValue encodes a []byte value as a Bytes.
  5546  func appendBytesValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  5547  	b = protowire.AppendVarint(b, wiretag)
  5548  	b = protowire.AppendBytes(b, v.Bytes())
  5549  	return b, nil
  5550  }
  5551  
  5552  // consumeBytesValue decodes a []byte value as a Bytes.
  5553  func consumeBytesValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  5554  	if wtyp != protowire.BytesType {
  5555  		return protoreflect.Value{}, out, errUnknown
  5556  	}
  5557  	v, n := protowire.ConsumeBytes(b)
  5558  	if n < 0 {
  5559  		return protoreflect.Value{}, out, errDecode
  5560  	}
  5561  	out.n = n
  5562  	return protoreflect.ValueOfBytes(append(emptyBuf[:], v...)), out, nil
  5563  }
  5564  
  5565  var coderBytesValue = valueCoderFuncs{
  5566  	size:      sizeBytesValue,
  5567  	marshal:   appendBytesValue,
  5568  	unmarshal: consumeBytesValue,
  5569  	merge:     mergeBytesValue,
  5570  }
  5571  
  5572  // sizeBytesSliceValue returns the size of wire encoding a [][]byte value as a repeated Bytes.
  5573  func sizeBytesSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
  5574  	list := listv.List()
  5575  	for i, llen := 0, list.Len(); i < llen; i++ {
  5576  		v := list.Get(i)
  5577  		size += tagsize + protowire.SizeBytes(len(v.Bytes()))
  5578  	}
  5579  	return size
  5580  }
  5581  
  5582  // appendBytesSliceValue encodes a [][]byte value as a repeated Bytes.
  5583  func appendBytesSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
  5584  	list := listv.List()
  5585  	for i, llen := 0, list.Len(); i < llen; i++ {
  5586  		v := list.Get(i)
  5587  		b = protowire.AppendVarint(b, wiretag)
  5588  		b = protowire.AppendBytes(b, v.Bytes())
  5589  	}
  5590  	return b, nil
  5591  }
  5592  
  5593  // consumeBytesSliceValue wire decodes a [][]byte value as a repeated Bytes.
  5594  func consumeBytesSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
  5595  	list := listv.List()
  5596  	if wtyp != protowire.BytesType {
  5597  		return protoreflect.Value{}, out, errUnknown
  5598  	}
  5599  	v, n := protowire.ConsumeBytes(b)
  5600  	if n < 0 {
  5601  		return protoreflect.Value{}, out, errDecode
  5602  	}
  5603  	list.Append(protoreflect.ValueOfBytes(append(emptyBuf[:], v...)))
  5604  	out.n = n
  5605  	return listv, out, nil
  5606  }
  5607  
  5608  var coderBytesSliceValue = valueCoderFuncs{
  5609  	size:      sizeBytesSliceValue,
  5610  	marshal:   appendBytesSliceValue,
  5611  	unmarshal: consumeBytesSliceValue,
  5612  	merge:     mergeBytesListValue,
  5613  }
  5614  
  5615  // We append to an empty array rather than a nil []byte to get non-nil zero-length byte slices.
  5616  var emptyBuf [0]byte
  5617  
  5618  var wireTypes = map[protoreflect.Kind]protowire.Type{
  5619  	protoreflect.BoolKind:     protowire.VarintType,
  5620  	protoreflect.EnumKind:     protowire.VarintType,
  5621  	protoreflect.Int32Kind:    protowire.VarintType,
  5622  	protoreflect.Sint32Kind:   protowire.VarintType,
  5623  	protoreflect.Uint32Kind:   protowire.VarintType,
  5624  	protoreflect.Int64Kind:    protowire.VarintType,
  5625  	protoreflect.Sint64Kind:   protowire.VarintType,
  5626  	protoreflect.Uint64Kind:   protowire.VarintType,
  5627  	protoreflect.Sfixed32Kind: protowire.Fixed32Type,
  5628  	protoreflect.Fixed32Kind:  protowire.Fixed32Type,
  5629  	protoreflect.FloatKind:    protowire.Fixed32Type,
  5630  	protoreflect.Sfixed64Kind: protowire.Fixed64Type,
  5631  	protoreflect.Fixed64Kind:  protowire.Fixed64Type,
  5632  	protoreflect.DoubleKind:   protowire.Fixed64Type,
  5633  	protoreflect.StringKind:   protowire.BytesType,
  5634  	protoreflect.BytesKind:    protowire.BytesType,
  5635  	protoreflect.MessageKind:  protowire.BytesType,
  5636  	protoreflect.GroupKind:    protowire.StartGroupType,
  5637  }