chore: update deps to latest

This commit is contained in:
Zach Kelling
2025-12-27 03:01:07 -08:00
parent 4d15ed700c
commit bd178f910b
8 changed files with 9 additions and 477 deletions
-172
View File
@@ -1,172 +0,0 @@
// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package formatting
import (
"bytes"
"encoding/hex"
"errors"
"fmt"
"math"
"strings"
"github.com/luxfi/crypto/hash"
)
const (
hexPrefix = "0x"
checksumLen = 4
)
var (
errEncodingOverFlow = errors.New("encoding overflow")
errInvalidEncoding = errors.New("invalid encoding")
errUnsupportedEncodingInMethod = errors.New("unsupported encoding in method")
errMissingChecksum = errors.New("input string is smaller than the checksum size")
errBadChecksum = errors.New("invalid input checksum")
errMissingHexPrefix = errors.New("missing 0x prefix to hex encoding")
)
// Encoding defines how bytes are converted to a string and vice versa
type Encoding uint8
const (
// Hex specifies a hex plus 4 byte checksum encoding format
Hex Encoding = iota
// HexNC specifies a hex encoding format
HexNC
// HexC specifies a hex plus 4 byte checksum encoding format
HexC
// JSON specifies the JSON encoding format
JSON
)
func (enc Encoding) String() string {
switch enc {
case Hex:
return "hex"
case HexNC:
return "hexnc"
case HexC:
return "hexc"
case JSON:
return "json"
default:
return errInvalidEncoding.Error()
}
}
func (enc Encoding) valid() bool {
switch enc {
case Hex, HexNC, HexC, JSON:
return true
}
return false
}
func (enc Encoding) MarshalJSON() ([]byte, error) {
if !enc.valid() {
return nil, errInvalidEncoding
}
return []byte(`"` + enc.String() + `"`), nil
}
func (enc *Encoding) UnmarshalJSON(b []byte) error {
str := string(b)
if str == "null" {
return nil
}
switch strings.ToLower(str) {
case `"hex"`:
*enc = Hex
case `"hexnc"`:
*enc = HexNC
case `"hexc"`:
*enc = HexC
case `"json"`:
*enc = JSON
default:
return errInvalidEncoding
}
return nil
}
// Encode [bytes] to a string using the given encoding format [bytes] may be
// nil, in which case it will be treated the same as an empty slice.
func Encode(encoding Encoding, bytes []byte) (string, error) {
if !encoding.valid() {
return "", errInvalidEncoding
}
switch encoding {
case Hex, HexC:
bytesLen := len(bytes)
if bytesLen > math.MaxInt32-checksumLen {
return "", errEncodingOverFlow
}
checked := make([]byte, bytesLen+checksumLen)
copy(checked, bytes)
copy(checked[len(bytes):], hash.Checksum(bytes, checksumLen))
bytes = checked
}
switch encoding {
case Hex, HexNC, HexC:
return fmt.Sprintf("0x%x", bytes), nil
case JSON:
// JSON Marshal does not support []byte input and we rely on the
// router's json marshalling to marshal our interface{} into JSON
// in response. Therefore it is not supported in this call.
return "", errUnsupportedEncodingInMethod
default:
return "", errInvalidEncoding
}
}
// Decode [str] to bytes using the given encoding
// If [str] is the empty string, returns a nil byte slice and nil error
func Decode(encoding Encoding, str string) ([]byte, error) {
switch {
case !encoding.valid():
return nil, errInvalidEncoding
case len(str) == 0:
return nil, nil
}
var (
decodedBytes []byte
err error
)
switch encoding {
case Hex, HexNC, HexC:
if !strings.HasPrefix(str, hexPrefix) {
return nil, errMissingHexPrefix
}
decodedBytes, err = hex.DecodeString(str[2:])
case JSON:
// JSON unmarshalling requires interface and has no return values
// contrary to this method, therefore it is not supported in this call
return nil, errUnsupportedEncodingInMethod
default:
return nil, errInvalidEncoding
}
if err != nil {
return nil, err
}
switch encoding {
case Hex, HexC:
if len(decodedBytes) < checksumLen {
return nil, errMissingChecksum
}
// Verify the checksum
rawBytes := decodedBytes[:len(decodedBytes)-checksumLen]
checksum := decodedBytes[len(decodedBytes)-checksumLen:]
if !bytes.Equal(checksum, hash.Checksum(rawBytes, checksumLen)) {
return nil, errBadChecksum
}
decodedBytes = rawBytes
}
return decodedBytes, nil
}
@@ -1,68 +0,0 @@
// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package formatting
import (
"fmt"
"math/rand"
"testing"
"github.com/stretchr/testify/require"
"github.com/luxfi/constants"
)
func BenchmarkEncodings(b *testing.B) {
benchmarks := []struct {
encoding Encoding
size int
}{
{
encoding: Hex,
size: 1 * constants.KiB, // 1kb
},
{
encoding: Hex,
size: 4 * constants.KiB, // 4kb
},
{
encoding: Hex,
size: 32 * constants.KiB, // 32kb
},
{
encoding: Hex,
size: 128 * constants.KiB, // 128kb
},
{
encoding: Hex,
size: 256 * constants.KiB, // 256kb
},
{
encoding: Hex,
size: 512 * constants.KiB, // 512kb
},
{
encoding: Hex,
size: 1 * constants.MiB, // 1mb
},
{
encoding: Hex,
size: 2 * constants.MiB, // 2mb
},
{
encoding: Hex,
size: 4 * constants.MiB, // 4mb
},
}
for _, benchmark := range benchmarks {
bytes := make([]byte, benchmark.size)
_, _ = rand.Read(bytes) // #nosec G404
b.Run(fmt.Sprintf("%s-%d bytes", benchmark.encoding, benchmark.size), func(b *testing.B) {
for n := 0; n < b.N; n++ {
_, err := Encode(benchmark.encoding, bytes)
require.NoError(b, err)
}
})
}
}
-153
View File
@@ -1,153 +0,0 @@
// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package formatting
import (
"encoding/hex"
"encoding/json"
"testing"
"github.com/stretchr/testify/require"
)
func TestEncodingMarshalJSON(t *testing.T) {
require := require.New(t)
enc := Hex
jsonBytes, err := enc.MarshalJSON()
require.NoError(err)
require.JSONEq(`"hex"`, string(jsonBytes))
}
func TestEncodingUnmarshalJSON(t *testing.T) {
require := require.New(t)
jsonBytes := []byte(`"hex"`)
var enc Encoding
require.NoError(json.Unmarshal(jsonBytes, &enc))
require.Equal(Hex, enc)
var serr *json.SyntaxError
jsonBytes = []byte("")
require.ErrorAs(json.Unmarshal(jsonBytes, &enc), &serr)
jsonBytes = []byte(`""`)
err := json.Unmarshal(jsonBytes, &enc)
require.ErrorIs(err, errInvalidEncoding)
}
func TestEncodingString(t *testing.T) {
enc := Hex
require.Equal(t, "hex", enc.String())
}
// Test encoding bytes to a string and decoding back to bytes
func TestEncodeDecode(t *testing.T) {
require := require.New(t)
type test struct {
encoding Encoding
bytes []byte
str string
}
id := [32]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32}
tests := []test{
{
Hex,
[]byte{},
"0x7852b855",
},
{
Hex,
[]byte{0},
"0x0017afa01d",
},
{
Hex,
[]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 255},
"0x00010203040506070809ff4482539c",
},
{
Hex,
id[:],
"0x0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20b7a612c9",
},
}
for _, test := range tests {
// Encode the bytes
strResult, err := Encode(test.encoding, test.bytes)
require.NoError(err)
// Make sure the string repr. is what we expected
require.Equal(test.str, strResult)
// Decode the string
bytesResult, err := Decode(test.encoding, strResult)
require.NoError(err)
// Make sure we got the same bytes back
require.Equal(test.bytes, bytesResult)
}
}
// Test that encoding nil bytes works
func TestEncodeNil(t *testing.T) {
require := require.New(t)
str, err := Encode(Hex, nil)
require.NoError(err)
require.Equal("0x7852b855", str)
}
func TestDecodeHexInvalid(t *testing.T) {
tests := []struct {
inputStr string
expectedErr error
}{
{
inputStr: "0",
expectedErr: errMissingHexPrefix,
},
{
inputStr: "x",
expectedErr: errMissingHexPrefix,
},
{
inputStr: "0xg",
expectedErr: hex.InvalidByteError('g'),
},
{
inputStr: "0x0017afa0Zd",
expectedErr: hex.InvalidByteError('Z'),
},
{
inputStr: "0xafafafafaf",
expectedErr: errBadChecksum,
},
}
for _, test := range tests {
_, err := Decode(Hex, test.inputStr)
require.ErrorIs(t, err, test.expectedErr)
}
}
func TestDecodeNil(t *testing.T) {
require := require.New(t)
result, err := Decode(Hex, "")
require.NoError(err)
require.Empty(result)
}
func FuzzEncodeDecode(f *testing.F) {
f.Fuzz(func(t *testing.T, bytes []byte) {
require := require.New(t)
str, err := Encode(Hex, bytes)
require.NoError(err)
decoded, err := Decode(Hex, str)
require.NoError(err)
require.Equal(bytes, decoded)
})
}
-17
View File
@@ -1,17 +0,0 @@
// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package formatting
import (
"fmt"
"math"
)
func IntFormat(maxValue int) string {
log := 1
if maxValue > 0 {
log = int(math.Ceil(math.Log10(float64(maxValue + 1))))
}
return fmt.Sprintf("%%0%dd", log)
}
-27
View File
@@ -1,27 +0,0 @@
// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package formatting
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestIntFormat(t *testing.T) {
require := require.New(t)
require.Equal("%01d", IntFormat(0))
require.Equal("%01d", IntFormat(9))
require.Equal("%02d", IntFormat(10))
require.Equal("%02d", IntFormat(99))
require.Equal("%03d", IntFormat(100))
require.Equal("%03d", IntFormat(999))
require.Equal("%04d", IntFormat(1000))
require.Equal("%04d", IntFormat(9999))
require.Equal("%05d", IntFormat(10000))
require.Equal("%05d", IntFormat(99999))
require.Equal("%06d", IntFormat(100000))
require.Equal("%06d", IntFormat(999999))
}
-13
View File
@@ -1,13 +0,0 @@
// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package formatting
import "fmt"
// PrefixedStringer extends a stringer that adds a prefix
type PrefixedStringer interface {
fmt.Stringer
PrefixedString(prefix string) string
}
+3 -7
View File
@@ -20,9 +20,8 @@ require (
github.com/jedisct1/go-minisign v0.0.0-20241212093149-d2f9f49435c7
github.com/leanovate/gopter v0.2.11
github.com/luxfi/cache v1.1.0
github.com/luxfi/constants v1.4.2
github.com/luxfi/gpu v0.30.0
github.com/luxfi/ids v1.2.7
github.com/luxfi/ids v1.2.9
github.com/luxfi/log v1.2.1
github.com/luxfi/mock v0.1.0
github.com/mr-tron/base58 v1.2.0
@@ -33,23 +32,20 @@ require (
golang.org/x/crypto v0.46.0
golang.org/x/sync v0.19.0
golang.org/x/sys v0.39.0
lukechampine.com/blake3 v1.2.1
lukechampine.com/blake3 v1.4.0
)
require (
github.com/bits-and-blooms/bitset v1.24.4 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/gorilla/rpc v1.2.1 // indirect
github.com/holiman/uint256 v1.3.2 // indirect
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
github.com/luxfi/math v0.1.4 // indirect
github.com/luxfi/node v1.20.3 // indirect
github.com/luxfi/utils v1.1.0 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/zeebo/assert v1.3.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.1 // indirect
golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93 // indirect
gonum.org/v1/gonum v0.16.0 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
+6 -20
View File
@@ -197,8 +197,6 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k=
github.com/gorilla/rpc v1.2.1 h1:yC+LMV5esttgpVvNORL/xX4jvTTEUE30UZhZ5JF7K9k=
github.com/gorilla/rpc v1.2.1/go.mod h1:uNpOihAlF5xRFLuTYhfR0yfCTm0WTQSQttkMSptRfGk=
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
@@ -253,20 +251,14 @@ github.com/leanovate/gopter v0.2.11 h1:vRjThO1EKPb/1NsDXuDrzldR28RLkBflWYcU9CvzW
github.com/leanovate/gopter v0.2.11/go.mod h1:aK3tzZP/C+p1m3SPRE4SYZFGP7jjkuSI4f7Xvpt0S9c=
github.com/luxfi/cache v1.1.0 h1:6LUyGGZ+rrMAJBbAU6+UwkcamXj3zsboRUodIof2Ong=
github.com/luxfi/cache v1.1.0/go.mod h1:9GvlEEE9rFPaaWxvVpSPwW8ZMo2+8VMNNcuPa4AwzPg=
github.com/luxfi/constants v1.4.2 h1:hxp2cITYxNCKG3xOdjnEesOoCR4GI9Lb5RQ4120ke6E=
github.com/luxfi/constants v1.4.2/go.mod h1:xk+0eA7UY1GkHrmI7yqR+9LDe4TUe3p1VfRvs6cJbNM=
github.com/luxfi/gpu v0.30.0 h1:k+7EDp/WHTa0176zXet1UXTl8IcZcp1ZkS8GUJ5l2iU=
github.com/luxfi/gpu v0.30.0/go.mod h1:7pFsHqra1Vrmy2aGXVEPKeKsPR+Bn+QmBXuByK3fdPA=
github.com/luxfi/ids v1.2.7 h1:3B42EbzR2cdY3veo1yOFOOIeEE+HULnCye2Ye32nXqI=
github.com/luxfi/ids v1.2.7/go.mod h1:svLsj7e6ixJVfRYaQqv9RWjBIW11Vz738+d08BVpeCg=
github.com/luxfi/ids v1.2.9 h1:+yjdhXW99drnd2Zlp1u/p8k3G23W3/1btJQ4ogHawUI=
github.com/luxfi/ids v1.2.9/go.mod h1:khJOEdOPxd22yn0jcVrnbX1ADa0GHn5Y74gvCzN5BYc=
github.com/luxfi/log v1.2.1 h1:L2JM8MjGPF8rBnY+EXODS9x5OQTGSgeQ1SPFmeB+oPY=
github.com/luxfi/log v1.2.1/go.mod h1:0vJzb4Hl9fvgwWDMKcbCD/SYH3bO0iSmgZMcYdfdl1o=
github.com/luxfi/math v0.1.4 h1:yPoXwHttm2M0HQ8a+SNZcN0MDz617en4+tyiQ9Iq8cA=
github.com/luxfi/math v0.1.4/go.mod h1:hGzbdMPfhX6zobJXz+Crja7AY9kHMqIL2L60kYUzyUc=
github.com/luxfi/mock v0.1.0 h1:IwElfNu+T9sXvzFX6tudPDx1vqPuACRSRdxpD5lxW+o=
github.com/luxfi/mock v0.1.0/go.mod h1:izF+9K0gGzFC9zERn6Po37v46eLdPB+EIsDjL3GLk+U=
github.com/luxfi/node v1.20.3 h1:T8zo9Q5hBDJ31t42t6SDHYhQcvIjfx0iIUAHQqTSYwo=
github.com/luxfi/node v1.20.3/go.mod h1:8+nlZVYI8dDBYxC4Bj7mqeL4rHrIQfoB+atVZhABtEA=
github.com/luxfi/utils v1.1.0 h1:ti7HvjNwJd4ILDMERJtOAWE9mF8l+zqDVkgWnF7Agic=
github.com/luxfi/utils v1.1.0/go.mod h1:ABqhBdGNig0CaDcnNYldv1byS0BTNi5IKPbJSPF1p98=
github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
@@ -312,8 +304,6 @@ github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0t
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/sanity-io/litter v1.5.1 h1:dwnrSypP6q56o3lFxTU+t2fwQ9A+U5qrXVO4Qg9KwVU=
github.com/sanity-io/litter v1.5.1/go.mod h1:5Z71SvaYy5kcGtyglXOC9rrUi3c1E8CamFWjQsazTh0=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk=
github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
@@ -348,16 +338,14 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69
github.com/supranational/blst v0.3.16 h1:bTDadT+3fK497EvLdWRQEjiGnUtzJ7jjIUMF0jqwYhE=
github.com/supranational/blst v0.3.16/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw=
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc=
github.com/thepudds/fzgen v0.4.3 h1:srUP/34BulQaEwPP/uHZkdjUcUjIzL7Jkf4CBVryiP8=
github.com/thepudds/fzgen v0.4.3/go.mod h1:BhhwtRhzgvLWAjjcHDJ9pEiLD2Z9hrVIFjBCHJ//zJ4=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/zeebo/assert v1.1.0 h1:hU1L1vLTHsnO8x8c9KAR5GmM5QscxHg5RNU5z5qbUWY=
github.com/zeebo/assert v1.1.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ=
github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
github.com/zeebo/blake3 v0.2.4 h1:KYQPkhpRtcqh0ssGYcKLG1JYvddkEA8QwCM/yBqhaZI=
github.com/zeebo/blake3 v0.2.4/go.mod h1:7eeQ6d2iXWRGF6npfaxl2CU+xy2Fjo2gxeyZGCRUjcE=
github.com/zeebo/pcg v1.0.1 h1:lyqfGeWiv4ahac6ttHs+I5hwtH/+1mrhlCtVNQM2kHo=
@@ -636,8 +624,6 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
@@ -769,8 +755,8 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI=
lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k=
lukechampine.com/blake3 v1.4.0 h1:xDbKOZCVbnZsfzM6mHSYcGRHZ3YrLDzqz8XnV4uaD5w=
lukechampine.com/blake3 v1.4.0/go.mod h1:MQJNQCTnR+kwOP/JEZSxj3MaQjp80FOFSNMMHXcSeX0=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=