From d87733fe1cc7b921583b1ab72316f98d86042334 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 20 May 2022 14:45:24 +0300 Subject: [PATCH] vendor: `make vendor-update` --- go.mod | 30 +- go.sum | 438 +- .../go/storage/.release-please-manifest.json | 2 +- vendor/cloud.google.com/go/storage/CHANGES.md | 8 + vendor/cloud.google.com/go/storage/acl.go | 28 +- vendor/cloud.google.com/go/storage/bucket.go | 118 +- vendor/cloud.google.com/go/storage/client.go | 6 +- vendor/cloud.google.com/go/storage/copy.go | 4 +- .../go/storage/grpc_client.go | 327 +- vendor/cloud.google.com/go/storage/hmac.go | 10 +- .../go/storage/http_client.go | 246 +- vendor/cloud.google.com/go/storage/iam.go | 6 +- .../go/storage/internal/version.go | 2 +- vendor/cloud.google.com/go/storage/invoke.go | 38 +- .../go/storage/notifications.go | 6 +- vendor/cloud.google.com/go/storage/reader.go | 14 +- vendor/cloud.google.com/go/storage/storage.go | 59 +- vendor/cloud.google.com/go/storage/writer.go | 31 +- .../github.com/antzucaro/matchr/COPYING.txt | 19 + vendor/github.com/antzucaro/matchr/README.md | 12 + .../antzucaro/matchr/damerau_levenshtein.go | 112 + .../matchr/double_metaphone_corpus.txt.gz | Bin 0 -> 553365 bytes vendor/github.com/antzucaro/matchr/hamming.go | 25 + .../antzucaro/matchr/jarowinkler.go | 135 + .../antzucaro/matchr/levenshtein.go | 48 + .../matchr/longestcommonsubsequence.go | 30 + .../github.com/antzucaro/matchr/metaphone.go | 721 ++++ vendor/github.com/antzucaro/matchr/nysiis.go | 156 + vendor/github.com/antzucaro/matchr/osa.go | 56 + vendor/github.com/antzucaro/matchr/phonex.go | 128 + .../github.com/antzucaro/matchr/runestring.go | 44 + .../antzucaro/matchr/smithwaterman.go | 87 + vendor/github.com/antzucaro/matchr/soundex.go | 72 + vendor/github.com/antzucaro/matchr/utf8.go | 215 + vendor/github.com/antzucaro/matchr/util.go | 119 + .../aws/aws-sdk-go/aws/endpoints/defaults.go | 82 + .../github.com/aws/aws-sdk-go/aws/version.go | 2 +- .../aws/aws-sdk-go/service/sts/api.go | 6 + vendor/github.com/go-kit/log/README.md | 5 + vendor/github.com/go-kit/log/json_logger.go | 4 +- vendor/github.com/go-kit/log/level/doc.go | 11 + vendor/github.com/go-kit/log/level/level.go | 53 +- vendor/github.com/go-kit/log/staticcheck.conf | 1 + vendor/github.com/google/uuid/.travis.yml | 9 + vendor/github.com/google/uuid/CONTRIBUTING.md | 10 + vendor/github.com/google/uuid/CONTRIBUTORS | 9 + vendor/github.com/google/uuid/LICENSE | 27 + vendor/github.com/google/uuid/README.md | 19 + vendor/github.com/google/uuid/dce.go | 80 + vendor/github.com/google/uuid/doc.go | 12 + vendor/github.com/google/uuid/hash.go | 53 + vendor/github.com/google/uuid/marshal.go | 38 + vendor/github.com/google/uuid/node.go | 90 + vendor/github.com/google/uuid/node_js.go | 12 + vendor/github.com/google/uuid/node_net.go | 33 + vendor/github.com/google/uuid/null.go | 118 + vendor/github.com/google/uuid/sql.go | 59 + vendor/github.com/google/uuid/time.go | 123 + vendor/github.com/google/uuid/util.go | 43 + vendor/github.com/google/uuid/uuid.go | 294 ++ vendor/github.com/google/uuid/version1.go | 44 + vendor/github.com/google/uuid/version4.go | 76 + .../gax-go/v2/.release-please-manifest.json | 3 + .../googleapis/gax-go/v2/CHANGES.md | 18 + .../googleapis/gax-go/v2/apierror/apierror.go | 4 +- .../googleapis/gax-go/v2/call_option.go | 37 + vendor/github.com/googleapis/gax-go/v2/gax.go | 4 +- .../googleapis/gax-go/v2/internal/version.go | 33 + .../gax-go/v2/release-please-config.json | 10 + .../github.com/klauspost/compress/README.md | 4 + .../klauspost/compress/flate/inflate_gen.go | 100 +- .../klauspost/compress/huff0/autogen.go | 5 - .../compress/huff0/decompress_8b_amd64.s | 488 --- .../compress/huff0/decompress_8b_amd64.s.in | 197 - .../compress/huff0/decompress_amd64.go | 95 +- .../compress/huff0/decompress_amd64.s | 982 +++-- .../compress/huff0/decompress_amd64.s.in | 195 - .../klauspost/compress/zstd/decoder.go | 14 +- .../klauspost/compress/zstd/framedec.go | 2 +- .../klauspost/compress/zstd/fuzz.go | 11 - .../klauspost/compress/zstd/fuzz_none.go | 11 - .../klauspost/compress/zstd/seqdec_amd64.s | 124 +- .../client_golang/prometheus/go_collector.go | 10 +- .../prometheus/go_collector_go116.go | 17 +- ...lector_go117.go => go_collector_latest.go} | 237 +- .../prometheus/internal/go_runtime_metrics.go | 14 +- vendor/github.com/urfave/cli/v2/.gitignore | 2 +- vendor/github.com/urfave/cli/v2/Makefile | 40 + vendor/github.com/urfave/cli/v2/README.md | 2 +- vendor/github.com/urfave/cli/v2/app.go | 12 + vendor/github.com/urfave/cli/v2/cli.go | 2 +- vendor/github.com/urfave/cli/v2/command.go | 6 + .../github.com/urfave/cli/v2/flag-spec.yaml | 50 + vendor/github.com/urfave/cli/v2/flag.go | 2 +- vendor/github.com/urfave/cli/v2/flag_bool.go | 41 - .../github.com/urfave/cli/v2/flag_duration.go | 41 - .../github.com/urfave/cli/v2/flag_float64.go | 41 - .../urfave/cli/v2/flag_float64_slice.go | 34 - .../github.com/urfave/cli/v2/flag_generic.go | 41 - vendor/github.com/urfave/cli/v2/flag_int.go | 41 - vendor/github.com/urfave/cli/v2/flag_int64.go | 41 - .../urfave/cli/v2/flag_int64_slice.go | 34 - .../urfave/cli/v2/flag_int_slice.go | 34 - vendor/github.com/urfave/cli/v2/flag_path.go | 41 +- .../github.com/urfave/cli/v2/flag_string.go | 42 - .../urfave/cli/v2/flag_string_slice.go | 36 - .../urfave/cli/v2/flag_timestamp.go | 42 - vendor/github.com/urfave/cli/v2/flag_uint.go | 41 - .../github.com/urfave/cli/v2/flag_uint64.go | 41 - .../urfave/cli/v2/godoc-current.txt | 2092 ++++++++++ vendor/github.com/urfave/cli/v2/help.go | 21 +- .../urfave/cli/v2/mkdocs-requirements.txt | 5 + vendor/github.com/urfave/cli/v2/mkdocs.yml | 62 + vendor/github.com/urfave/cli/v2/parse.go | 18 +- .../github.com/urfave/cli/v2/suggestions.go | 75 + .../urfave/cli/v2/zz_generated.flags.go | 657 +++ .../golang.org/x/net/http2/hpack/huffman.go | 87 +- vendor/golang.org/x/net/http2/server.go | 43 +- vendor/golang.org/x/sync/errgroup/errgroup.go | 69 +- vendor/golang.org/x/sys/unix/ifreq_linux.go | 9 +- .../golang.org/x/sys/unix/syscall_darwin.go | 2 +- .../x/sys/unix/zerrors_linux_386.go | 2 +- .../x/sys/unix/zerrors_linux_amd64.go | 2 +- .../x/sys/unix/zerrors_linux_arm.go | 2 +- .../x/sys/unix/zerrors_linux_arm64.go | 2 +- .../x/sys/unix/zerrors_linux_loong64.go | 2 +- .../x/sys/unix/zerrors_linux_mips.go | 2 +- .../x/sys/unix/zerrors_linux_mips64.go | 2 +- .../x/sys/unix/zerrors_linux_mips64le.go | 2 +- .../x/sys/unix/zerrors_linux_mipsle.go | 2 +- .../x/sys/unix/zerrors_linux_ppc.go | 2 +- .../x/sys/unix/zerrors_linux_ppc64.go | 2 +- .../x/sys/unix/zerrors_linux_ppc64le.go | 2 +- .../x/sys/unix/zerrors_linux_riscv64.go | 2 +- .../x/sys/unix/zerrors_linux_s390x.go | 2 +- .../x/sys/unix/zerrors_linux_sparc64.go | 2 +- .../x/sys/unix/zsyscall_darwin_amd64.go | 24 + .../x/sys/unix/zsyscall_darwin_amd64.s | 6 + .../x/sys/unix/zsyscall_darwin_arm64.go | 24 + .../x/sys/unix/zsyscall_darwin_arm64.s | 6 + .../golang.org/x/sys/unix/ztypes_linux_386.go | 2 +- .../x/sys/unix/ztypes_linux_amd64.go | 2 +- .../golang.org/x/sys/unix/ztypes_linux_arm.go | 2 +- .../x/sys/unix/ztypes_linux_arm64.go | 2 +- .../x/sys/unix/ztypes_linux_loong64.go | 2 +- .../x/sys/unix/ztypes_linux_mips.go | 2 +- .../x/sys/unix/ztypes_linux_mips64.go | 2 +- .../x/sys/unix/ztypes_linux_mips64le.go | 2 +- .../x/sys/unix/ztypes_linux_mipsle.go | 2 +- .../golang.org/x/sys/unix/ztypes_linux_ppc.go | 2 +- .../x/sys/unix/ztypes_linux_ppc64.go | 2 +- .../x/sys/unix/ztypes_linux_ppc64le.go | 2 +- .../x/sys/unix/ztypes_linux_riscv64.go | 2 +- .../x/sys/unix/ztypes_linux_s390x.go | 2 +- .../x/sys/unix/ztypes_linux_sparc64.go | 2 +- .../google.golang.org/api/internal/version.go | 2 +- .../api/storage/v1/storage-api.json | 18 +- .../api/storage/v1/storage-gen.go | 10 + .../googleapis/storage/v2/storage.pb.go | 3537 ++++++++--------- vendor/google.golang.org/grpc/clientconn.go | 6 +- .../grpc/internal/transport/http2_client.go | 20 +- .../google.golang.org/grpc/picker_wrapper.go | 8 +- vendor/google.golang.org/grpc/stream.go | 197 +- vendor/google.golang.org/grpc/version.go | 2 +- vendor/modules.txt | 37 +- 165 files changed, 10127 insertions(+), 4957 deletions(-) create mode 100644 vendor/github.com/antzucaro/matchr/COPYING.txt create mode 100644 vendor/github.com/antzucaro/matchr/README.md create mode 100644 vendor/github.com/antzucaro/matchr/damerau_levenshtein.go create mode 100644 vendor/github.com/antzucaro/matchr/double_metaphone_corpus.txt.gz create mode 100644 vendor/github.com/antzucaro/matchr/hamming.go create mode 100644 vendor/github.com/antzucaro/matchr/jarowinkler.go create mode 100644 vendor/github.com/antzucaro/matchr/levenshtein.go create mode 100644 vendor/github.com/antzucaro/matchr/longestcommonsubsequence.go create mode 100644 vendor/github.com/antzucaro/matchr/metaphone.go create mode 100644 vendor/github.com/antzucaro/matchr/nysiis.go create mode 100644 vendor/github.com/antzucaro/matchr/osa.go create mode 100644 vendor/github.com/antzucaro/matchr/phonex.go create mode 100644 vendor/github.com/antzucaro/matchr/runestring.go create mode 100644 vendor/github.com/antzucaro/matchr/smithwaterman.go create mode 100644 vendor/github.com/antzucaro/matchr/soundex.go create mode 100644 vendor/github.com/antzucaro/matchr/utf8.go create mode 100644 vendor/github.com/antzucaro/matchr/util.go create mode 100644 vendor/github.com/go-kit/log/staticcheck.conf create mode 100644 vendor/github.com/google/uuid/.travis.yml create mode 100644 vendor/github.com/google/uuid/CONTRIBUTING.md create mode 100644 vendor/github.com/google/uuid/CONTRIBUTORS create mode 100644 vendor/github.com/google/uuid/LICENSE create mode 100644 vendor/github.com/google/uuid/README.md create mode 100644 vendor/github.com/google/uuid/dce.go create mode 100644 vendor/github.com/google/uuid/doc.go create mode 100644 vendor/github.com/google/uuid/hash.go create mode 100644 vendor/github.com/google/uuid/marshal.go create mode 100644 vendor/github.com/google/uuid/node.go create mode 100644 vendor/github.com/google/uuid/node_js.go create mode 100644 vendor/github.com/google/uuid/node_net.go create mode 100644 vendor/github.com/google/uuid/null.go create mode 100644 vendor/github.com/google/uuid/sql.go create mode 100644 vendor/github.com/google/uuid/time.go create mode 100644 vendor/github.com/google/uuid/util.go create mode 100644 vendor/github.com/google/uuid/uuid.go create mode 100644 vendor/github.com/google/uuid/version1.go create mode 100644 vendor/github.com/google/uuid/version4.go create mode 100644 vendor/github.com/googleapis/gax-go/v2/.release-please-manifest.json create mode 100644 vendor/github.com/googleapis/gax-go/v2/CHANGES.md create mode 100644 vendor/github.com/googleapis/gax-go/v2/internal/version.go create mode 100644 vendor/github.com/googleapis/gax-go/v2/release-please-config.json delete mode 100644 vendor/github.com/klauspost/compress/huff0/autogen.go delete mode 100644 vendor/github.com/klauspost/compress/huff0/decompress_8b_amd64.s delete mode 100644 vendor/github.com/klauspost/compress/huff0/decompress_8b_amd64.s.in delete mode 100644 vendor/github.com/klauspost/compress/huff0/decompress_amd64.s.in delete mode 100644 vendor/github.com/klauspost/compress/zstd/fuzz.go delete mode 100644 vendor/github.com/klauspost/compress/zstd/fuzz_none.go rename vendor/github.com/prometheus/client_golang/prometheus/{go_collector_go117.go => go_collector_latest.go} (59%) create mode 100644 vendor/github.com/urfave/cli/v2/Makefile create mode 100644 vendor/github.com/urfave/cli/v2/flag-spec.yaml create mode 100644 vendor/github.com/urfave/cli/v2/godoc-current.txt create mode 100644 vendor/github.com/urfave/cli/v2/mkdocs-requirements.txt create mode 100644 vendor/github.com/urfave/cli/v2/mkdocs.yml create mode 100644 vendor/github.com/urfave/cli/v2/suggestions.go create mode 100644 vendor/github.com/urfave/cli/v2/zz_generated.flags.go diff --git a/go.mod b/go.mod index 9d5d33dd6..c1751f029 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/VictoriaMetrics/VictoriaMetrics go 1.17 require ( - cloud.google.com/go/storage v1.22.0 + cloud.google.com/go/storage v1.22.1 github.com/VictoriaMetrics/fastcache v1.10.0 // Do not use the original github.com/valyala/fasthttp because of issues @@ -11,7 +11,7 @@ require ( github.com/VictoriaMetrics/fasthttp v1.1.0 github.com/VictoriaMetrics/metrics v1.18.1 github.com/VictoriaMetrics/metricsql v0.43.0 - github.com/aws/aws-sdk-go v1.44.9 + github.com/aws/aws-sdk-go v1.44.18 github.com/cespare/xxhash/v2 v2.1.2 // TODO: switch back to https://github.com/cheggaaa/pb/v3 when v3-pooling branch @@ -20,18 +20,18 @@ require ( github.com/dmitryk-dk/pb/v3 v3.0.9 github.com/golang/snappy v0.0.4 github.com/influxdata/influxdb v1.9.7 - github.com/klauspost/compress v1.15.3 + github.com/klauspost/compress v1.15.4 github.com/prometheus/prometheus v1.8.2-0.20201119142752-3ad25a6dc3d9 - github.com/urfave/cli/v2 v2.6.0 + github.com/urfave/cli/v2 v2.7.1 github.com/valyala/fastjson v1.6.3 github.com/valyala/fastrand v1.1.0 github.com/valyala/fasttemplate v1.2.1 github.com/valyala/gozstd v1.17.0 github.com/valyala/quicktemplate v1.7.0 - golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 + golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 - golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6 - google.golang.org/api v0.78.0 + golang.org/x/sys v0.0.0-20220519141025-dcacdad47464 + google.golang.org/api v0.80.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -40,16 +40,18 @@ require ( cloud.google.com/go/compute v1.6.1 // indirect cloud.google.com/go/iam v0.3.0 // indirect github.com/VividCortex/ewma v1.2.0 // indirect + github.com/antzucaro/matchr v0.0.0-20210222213004-b04723ef80f0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/fatih/color v1.13.0 // indirect github.com/go-kit/kit v0.12.0 // indirect - github.com/go-kit/log v0.2.0 // indirect + github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/google/go-cmp v0.5.8 // indirect - github.com/googleapis/gax-go/v2 v2.3.0 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/googleapis/gax-go/v2 v2.4.0 // indirect github.com/googleapis/go-type-adapters v1.0.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/mattn/go-colorable v0.1.12 // indirect @@ -58,7 +60,7 @@ require ( github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect github.com/oklog/ulid v1.3.1 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/prometheus/client_golang v1.12.1 // indirect + github.com/prometheus/client_golang v1.12.2 // indirect github.com/prometheus/client_model v0.2.0 // indirect github.com/prometheus/common v0.34.0 // indirect github.com/prometheus/procfs v0.7.3 // indirect @@ -69,12 +71,12 @@ require ( go.opencensus.io v0.23.0 // indirect go.uber.org/atomic v1.9.0 // indirect go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 // indirect - golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect + golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 // indirect golang.org/x/text v0.3.7 // indirect - golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f // indirect + golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3 // indirect - google.golang.org/grpc v1.46.0 // indirect + google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd // indirect + google.golang.org/grpc v1.46.2 // indirect google.golang.org/protobuf v1.28.0 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect ) diff --git a/go.sum b/go.sum index a44233d28..2676cd05b 100644 --- a/go.sum +++ b/go.sum @@ -20,7 +20,6 @@ cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmW cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.82.0/go.mod h1:vlKccHJGuFBFufnAnuB08dfEH9Y3H7dzDzRECFdC2TA= cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= @@ -39,7 +38,6 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= -cloud.google.com/go/bigtable v1.10.1/go.mod h1:cyHeKlx6dcZCO0oSQucYdauseD8kIENGuDOJPKMCVg8= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= @@ -59,30 +57,20 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.22.0 h1:NUV0NNp9nkBuW66BFRLuMgldN60C57ET3dhbwLIYio8= cloud.google.com/go/storage v1.22.0/go.mod h1:GbaLEoMqbVm6sx3Z0R++gSiBlgMv6yUi2q1DeGFKQgE= +cloud.google.com/go/storage v1.22.1 h1:F6IlQJZrZM++apn9V5/VfS3gbTUYg98PS3EMQAzqtfg= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20201218220906-28db891af037/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= -github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k= -github.com/Azure/azure-sdk-for-go v41.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v48.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-storage-blob-go v0.14.0/go.mod h1:SMqIBi+SuiQH32bvyjngEewEeXoPfKMgWlBDaYf6fck= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= -github.com/Azure/go-autorest/autorest v0.10.0/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= -github.com/Azure/go-autorest/autorest v0.11.9/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw= github.com/Azure/go-autorest/autorest v0.11.11/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= -github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= -github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= -github.com/Azure/go-autorest/autorest/azure/auth v0.5.3/go.mod h1:4bJZhUhcq8LB20TruwHbAQsmUs2Xh+QR7utuJpLXX3A= -github.com/Azure/go-autorest/autorest/azure/cli v0.4.2/go.mod h1:7qkJkT+j6b+hIpzMOwPChJhTqS8VbsqqgULzMNRugoM= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= @@ -94,22 +82,14 @@ github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsI github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/HdrHistogram/hdrhistogram-go v0.9.0/go.mod h1:nxrse8/Tzg2tg3DZcZjm6qEclQKK70g0KxO61gFFZD4= -github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= -github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= -github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/sprig v2.16.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= @@ -118,7 +98,6 @@ github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/SAP/go-hdb v0.14.1/go.mod h1:7fdQLVC2lER3urZLjZCm0AuMQfApof92n3aylBPEkMo= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/VictoriaMetrics/fastcache v1.10.0 h1:5hDJnLsKLpnUEToub7ETuRu8RCkb40woBZAUiKonXzY= @@ -129,7 +108,6 @@ github.com/VictoriaMetrics/metrics v1.18.1 h1:OZ0+kTTto8oPfHnVAnTOoyl0XlRhRkoQrD github.com/VictoriaMetrics/metrics v1.18.1/go.mod h1:ArjwVz7WpgpegX/JpB0zpNF2h2232kErkEnzH1sxMmA= github.com/VictoriaMetrics/metricsql v0.43.0 h1:pFkzfExn9GJ1w3tE1pFTkjlyPd4kr/onh5CBAJAZf+s= github.com/VictoriaMetrics/metricsql v0.43.0/go.mod h1:6pP1ZeLVJHqJrHlF6Ij3gmpQIznSsgktEcZgsAWYel0= -github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA= github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow= github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= @@ -146,20 +124,15 @@ github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= +github.com/antzucaro/matchr v0.0.0-20210222213004-b04723ef80f0 h1:R/qAiUxFT3mNgQaNqJe0IVznjKRNm23ohAIh9lgtlzc= +github.com/antzucaro/matchr v0.0.0-20210222213004-b04723ef80f0/go.mod h1:v3ZDlfVAL1OrkKHbGSFFK60k0/7hruHPDq2XMs9Gu6U= github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= -github.com/apache/arrow/go/arrow v0.0.0-20211112161151-bc219186db40/go.mod h1:Q7yQnSMnLvcXlZ8RV+jwz/6y1rQTqbX6C82SndT52Zs= -github.com/apache/arrow/go/v7 v7.0.0/go.mod h1:vG2y+fH8mEUcX29tM6hOULGE06/XqEI8sG5fANM6T5w= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.15.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-metrics v0.3.3/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= -github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= @@ -170,36 +143,11 @@ github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:o github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.29.16/go.mod h1:1KvfttTE3SPKMpo8g2c6jL3ZKfXtFvKscTgahTma5Xg= -github.com/aws/aws-sdk-go v1.30.12/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= github.com/aws/aws-sdk-go v1.35.31/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= -github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= -github.com/aws/aws-sdk-go v1.44.9 h1:s3lsEFbc8i7ghQmcEpcdyvoO/WMwyCVa9pUq3Lq//Ok= -github.com/aws/aws-sdk-go v1.44.9/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.18 h1:rPDxVLNZL9R76yifC0kYOnfnkMswLfy89c8LBJSyvgY= +github.com/aws/aws-sdk-go v1.44.18/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= -github.com/aws/aws-sdk-go-v2 v1.11.0/go.mod h1:SQfA+m2ltnu1cA0soUkj4dRSsmITiVQUJvBIZjzfPyQ= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.0.0/go.mod h1:Xn6sxgRuIDflLRJFj5Ev7UxABIkNbccFPV/p8itDReM= -github.com/aws/aws-sdk-go-v2/config v1.10.1/go.mod h1:auIv5pIIn3jIBHNRcVQcsczn6Pfa6Dyv80Fai0ueoJU= -github.com/aws/aws-sdk-go-v2/credentials v1.6.1/go.mod h1:QyvQk1IYTqBWSi1T6UgT/W8DMxBVa5pVuLFSRLLhGf8= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.8.0/go.mod h1:5E1J3/TTYy6z909QNR0QnXGBpfESYGDqd3O0zqONghU= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.7.1/go.mod h1:wN/mvkow08GauDwJ70jnzJ1e+hE+Q3Q7TwpYLXOe9oI= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.0/go.mod h1:NO3Q5ZTTQtO2xIg2+xTXYDiT7knSejfeDm7WGDaOo0U= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.0.0/go.mod h1:anlUzBoEWglcUxUQwZA7HQOEVEnQALVZsizAapB2hq8= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.0/go.mod h1:6oXGy4GLpypD3uCh8wcqztigGgmhLToMfjavgh+VySg= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.5.0/go.mod h1:80NaCIH9YU3rzTTs/J/ECATjXuRqzo/wB6ukO6MZ0XY= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.5.0/go.mod h1:Mq6AEc+oEjCUlBuLiK5YwW4shSOAKCQ3tXN0sQeYoBA= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.9.0/go.mod h1:xKCZ4YFSF2s4Hnb/J0TLeOsKuGzICzcElaOKNGrVnx4= -github.com/aws/aws-sdk-go-v2/service/s3 v1.19.0/go.mod h1:Gwz3aVctJe6mUY9T//bcALArPUaFmNAy2rTB9qN4No8= -github.com/aws/aws-sdk-go-v2/service/sso v1.6.0/go.mod h1:Q/l0ON1annSU+mc0JybDy1Gy6dnJxIcWjphO6qJPzvM= -github.com/aws/aws-sdk-go-v2/service/sts v1.10.0/go.mod h1:jLKCFqS+1T4i7HDqCP9GM4Uk75YW1cS0o82LdxpMyOE= -github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/aws/smithy-go v1.9.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benbjohnson/immutable v0.3.0/go.mod h1:uc6OHo6PN2++n98KHLxW8ef4W42ylHiQSENghE1ezxI= -github.com/benbjohnson/tmpl v1.0.0/go.mod h1:igT620JFIi44B6awvU9IsDhR77IXWtFigTLil/RPdps= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -207,20 +155,12 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/bonitoo-io/go-sql-bigquery v0.3.4-1.4.0/go.mod h1:J4Y6YJm0qTWB9aFziB7cPeSyc6dOZFyJdteSeybVpXQ= -github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= -github.com/cactus/go-statsd-client/statsd v0.0.0-20191106001114-12b4e2b38748/go.mod h1:l/bIBLeOl9eX+wxJAzxS4TveKRtAqlyDpHjhkfO0MEI= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= -github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.0.2/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg= -github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tjxl5dIMyVM= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -229,7 +169,6 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= -github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= @@ -244,36 +183,22 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/containerd/containerd v1.3.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= -github.com/denisenkom/go-mssqldb v0.10.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dgryski/go-sip13 v0.0.0-20190329191031-25c5027a8c7b/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dgryski/go-sip13 v0.0.0-20200911182023-62edffca9245/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/digitalocean/godo v1.52.0/go.mod h1:p7dOjjtSBqCTUksqtA5Fd3uaKs9kyTq2xcz76ulEJRU= -github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= github.com/dmitryk-dk/pb/v3 v3.0.9 h1:wpWkldo8V6NeONVgmuCvsDIDjSRkJfbTbdoVigKYJ2I= github.com/dmitryk-dk/pb/v3 v3.0.9/go.mod h1:o9xpZcwYZHNdNaAlJVvWTA+YH+IlPciBs1myroBOxyM= github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= @@ -284,13 +209,11 @@ github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDD github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= @@ -304,39 +227,23 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= -github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/form3tech-oss/jwt-go v3.2.5+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/foxcpp/go-mockdns v0.0.0-20201212160233-ede2f9158d15/go.mod h1:tPg4cp4nseejPd+UKxtCVQ2hUxNTZ7qQZJa7CLriIeo= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/gabriel-vasile/mimetype v1.4.0/go.mod h1:fA8fi6KUiG7MgQQ+mEWotXoEOvmxRtOJlERCzSmRvr8= -github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= -github.com/glycerine/go-unsnap-stream v0.0.0-20181221182339-f9677308dec2/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= -github.com/go-chi/chi v4.1.0+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= -github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= -github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= -github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= -github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= -github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -346,9 +253,9 @@ github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgO github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0 h1:7i2K3eKTos3Vc0enKCfnVcgHh2olr/MyfboYq7cAcFw= github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= +github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= @@ -356,7 +263,6 @@ github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNV github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -405,7 +311,6 @@ github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsd github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= github.com/go-openapi/spec v0.19.6/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= -github.com/go-openapi/spec v0.19.7/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= github.com/go-openapi/spec v0.19.8/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= github.com/go-openapi/spec v0.19.14/go.mod h1:gwrgJS15eCUgjLpMjBJmbZezCsw88LmgeEip0M63doA= github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= @@ -436,8 +341,6 @@ github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= @@ -462,25 +365,16 @@ github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWe github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= -github.com/goccy/go-json v0.7.10/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.2.2-0.20190730201129-28a6bbf47e48/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= -github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -495,7 +389,6 @@ github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -520,13 +413,9 @@ github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/flatbuffers v2.0.0+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/flatbuffers v2.0.5+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -557,7 +446,6 @@ github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OI github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200417002340-c6e0a841f49a/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -565,7 +453,6 @@ github.com/google/pprof v0.0.0-20201117184057-ae444373da19/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210506205249-923b5ab0fc1a/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -573,57 +460,41 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4 github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -github.com/googleapis/gax-go/v2 v2.3.0 h1:nRJtk3y8Fm770D42QV6T90ZnvFZyk7agSo3Q+Z9p3WI= github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= -github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.4.0/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= +github.com/googleapis/gax-go/v2 v2.4.0 h1:dS9eYAjhrE2RjmzYw2XAPvcXfmcQLtFEQWn0CR82awk= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gophercloud/gophercloud v0.10.0/go.mod h1:gmC5oQqMDOMO1t1gq5DquX/yAU808e/4mzjjDA76+Ss= github.com/gophercloud/gophercloud v0.14.0/go.mod h1:VX0Ibx85B60B5XOrZr6kaNwrmPUzcmMpwxvQ1WQIIWM= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.14.4/go.mod h1:6CwZWGDSPRJidgKAtJVvND6soZe6fT7iteq8wDPdhb0= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/api v1.4.0/go.mod h1:xc8u05kyMa3Wjr9eEAsIAo3dg8+LywT5E/Cl7cNS5nU= github.com/hashicorp/consul/api v1.7.0/go.mod h1:1NSuaUUkFaJzMasbfq/11wKYWSR67Xn6r2DXKhuDNFg= -github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/consul/sdk v0.4.0/go.mod h1:fY08Y9z5SvJqevyZNy6WWPXiG3KwBPAvlcdx16zZ0fM= github.com/hashicorp/consul/sdk v0.6.0/go.mod h1:fY08Y9z5SvJqevyZNy6WWPXiG3KwBPAvlcdx16zZ0fM= -github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v0.12.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.2.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= @@ -640,55 +511,33 @@ github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/memberlist v0.1.4/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/memberlist v0.2.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/serf v0.9.0/go.mod h1:YL0HO+FifKOW2u1ke99DGVu1zhcpZzNwrLIqBC7vbYU= github.com/hashicorp/serf v0.9.3/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= -github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/hetznercloud/hcloud-go v1.23.1/go.mod h1:xng8lbDUg+xM1dgc0yGHX5EeqbwIq7UYlMWMTx3SQVg= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/flux v0.65.0/go.mod h1:BwN2XG2lMszOoquQaFdPET8FRQfrXiZsWmcMO9rkaVY= github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= -github.com/influxdata/flux v0.161.0/go.mod h1:dALQQHRj+70b+o/9RtaHAAXH3toMs2M58gfY66oEll8= -github.com/influxdata/gosnowflake v1.6.9/go.mod h1:9W/BvCXOKx2gJtQ+jdi1Vudev9t9/UDOEHnlJZ/y1nU= -github.com/influxdata/httprouter v1.3.1-0.20191122104820-ee83e2772f69/go.mod h1:pwymjR6SrP3gD3pRj9RJwdl1j5s3doEEV8gS4X9qSzA= -github.com/influxdata/influxdb v1.8.0/go.mod h1:SIzcnsjaHRFpmlxpJ4S3NT64qtEKYweNTUMb/vh0OMQ= github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= github.com/influxdata/influxdb v1.9.7 h1:asjvZJ8NFFmxkSw+kOJj1ItGLQdU1nvRQE3jvdQXeRU= github.com/influxdata/influxdb v1.9.7/go.mod h1:YZMcI9MYeMGLcg7Td7z5YRk52tL85r5bF4qX6WCnSt4= -github.com/influxdata/influxdb-client-go/v2 v2.3.1-0.20210518120617-5d1fff431040/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/influxql v1.1.0/go.mod h1:KpVI7okXjK6PRi3Z5B+mtKZli+R1DnZgb3N+tzevNgo= github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= -github.com/influxdata/influxql v1.1.1-0.20211004132434-7e7d61973256/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= -github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/pkg-config v0.2.11/go.mod h1:EMS7Ll0S4qkzDk53XS3Z72/egBsPInt+BeRxb0WeSwk= github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= -github.com/influxdata/tdigest v0.0.2-0.20210216194612-fc98d27c9e8b/go.mod h1:Z0kXnxzbTC2qrx4NaIzYkE1k66+6oEDQTvL95hQFh5Y= github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= @@ -707,28 +556,22 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= -github.com/jsternberg/zap-logfmt v1.2.0/go.mod h1:kz+1CUmCutPWABnNkOu9hOHKdT2q3TDYCcsFy9hpqb0= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/asmfmt v1.3.1/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.13.1/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.3 h1:wmfu2iqj9q22SyMINp1uQ8C2/V4M1phJdmH9fG4nba0= -github.com/klauspost/compress v1.15.3/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.15.4 h1:1kn4/7MepF/CHmYub99/nNX8az0IJjfSOU/jbnTVfqQ= +github.com/klauspost/compress v1.15.4/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= @@ -744,16 +587,11 @@ github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= -github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -764,49 +602,31 @@ github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7 github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= -github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.14.7/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.22/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.29/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= -github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= -github.com/mileusna/useragent v0.0.0-20190129205925-3e331f0949a5/go.mod h1:JWhYAp2EXqUtsxTKdeGlY8Wp44M7VxThC9FEoNGi2IE= -github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= -github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= -github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= -github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= @@ -817,10 +637,8 @@ github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS4 github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.2.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= @@ -835,21 +653,13 @@ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRW github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/jwt v1.2.2/go.mod h1:/xX356yQA6LuXI9xWW7mZNpxgF2mBmGecH+Fj34sP5Q= -github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats-server/v2 v2.5.0/go.mod h1:Kj86UtrXAL6LwYRA6H4RqzkHhK0Vcv2ZnKD5WbQ1t3g= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= -github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= @@ -859,21 +669,14 @@ github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:v github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9/go.mod h1:PLldrQSroqzH70Xl+1DQcGnefIbqsKR7UDaiux3zV+w= github.com/opentracing-contrib/go-stdlib v1.0.0/go.mod h1:qtI1ogk+2JhVPIXVc6q+NHziSmy2W5GbdQZFUHADCBU= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -884,28 +687,19 @@ github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxS github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= -github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= -github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pierrec/lz4/v4 v4.1.8/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pierrec/lz4/v4 v4.1.9/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pierrec/lz4/v4 v4.1.11/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -916,22 +710,19 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/prometheus/alertmanager v0.20.0/go.mod h1:9g2i48FAyZW6BtbsnvHtMHQXl2aVtrORKwKVCQ+nbrg= github.com/prometheus/alertmanager v0.21.0/go.mod h1:h7tJ81NA0VLWvWEayi1QltevFkLF3KxmC/malTcT8Go= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.2.1/go.mod h1:XMU6Z2MjaRKVu/dC1qupJI9SiNkDYzz3xecMgSW/F+U= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.6.0/go.mod h1:ZLOG9ck3JLRdB5MgO8f+lLTe83AXG6ro35rLTxvnIl4= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.8.0/go.mod h1:O9VU6huf47PktckDQfMTX0Y8tY0/7TSWwj+ITvv0TnM= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= +github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -939,9 +730,7 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= @@ -950,15 +739,12 @@ github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB8 github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.34.0 h1:RBmGO9d/FVjqHT0yUGQwBJhkwKV+wPCn7KGpvfab0uE= github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= @@ -966,13 +752,10 @@ github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/prometheus v0.0.0-20200609090129-a6600f564e3c/go.mod h1:S5n0C6tSgdnwWshBUceRx5G1OsjLv/EeZ9t3wIfEtsY= github.com/prometheus/prometheus v1.8.2-0.20201119142752-3ad25a6dc3d9 h1:F2A86PGVYqn3P7oWbrSmSlJHae9y6wwpAdoWb/pZi6Q= github.com/prometheus/prometheus v1.8.2-0.20201119142752-3ad25a6dc3d9/go.mod h1:1MDE/bXgu4gqd5w/otko6WQpXZX9vu8QX4KbitCmaPg= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= -github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= @@ -980,26 +763,19 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/zerolog v1.21.0/go.mod h1:ZPhntP/xmq1nnND05hhpAh2QMhSsA4UN3MGZ6O2J3hM= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/samuel/go-zookeeper v0.0.0-20200724154423-2164a8ac840e/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/satori/go.uuid v0.0.0-20160603004225-b111a074d5ef/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= @@ -1009,29 +785,21 @@ github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/assertions v1.0.1/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= @@ -1045,24 +813,14 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= -github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/uber-go/tally v3.3.15+incompatible/go.mod h1:YDTIBxdXyOU/sCWilKB4bgyufu1cEi0jdVnRdxvjnmU= -github.com/uber/athenadriver v1.1.4/go.mod h1:tQjho4NzXw55LGfSZEcETuYydpY1vtmixUabHkC1K/E= -github.com/uber/jaeger-client-go v2.23.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= -github.com/uber/jaeger-client-go v2.28.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= -github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/uber/jaeger-lib v2.4.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= -github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli/v2 v2.6.0 h1:yj2Drkflh8X/zUrkWlWlUjZYHyWN7WMmpVxyxXIUyv8= -github.com/urfave/cli/v2 v2.6.0/go.mod h1:oDzoM7pVwz6wHn5ogWgFUU1s4VJayeQS+aEZDqXIEJs= +github.com/urfave/cli/v2 v2.7.1 h1:DsAOFeI9T0vmUW4LiGR5mhuCIn5kqGIE4WMU2ytmH00= +github.com/urfave/cli/v2 v2.7.1/go.mod h1:TYFbtzt/azQoJOrGH5mDfZtS0jIkl/OeFwlRWPR9KRM= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= @@ -1070,7 +828,6 @@ github.com/valyala/fastjson v1.6.3 h1:tAKFnnwmeMGPbwJ7IwxcTPCNr3uIzoIj3/Fh90ra4x github.com/valyala/fastjson v1.6.3/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY= github.com/valyala/fastrand v1.1.0 h1:f+5HkLW4rsgzdNoleUOB69hyT9IlD2ZQh9GyDMfb5G8= github.com/valyala/fastrand v1.1.0/go.mod h1:HWqCzkrkg6QXT8V2EXWvXCoow7vLwOFN002oeRzjapQ= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1 h1:TVEnxayobAdVkhQfrfes2IzOB6o+z4roRkPF52WA1u4= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/valyala/gozstd v1.17.0 h1:M4Ds4MIrw+pD+s6vYtuFZ8D3iEw9htzfdytOV3C3iQU= @@ -1081,34 +838,23 @@ github.com/valyala/quicktemplate v1.7.0 h1:LUPTJmlVcb46OOUY3IeD9DojFpAVbsG+5WFTc github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= -github.com/vertica/vertica-sql-go v1.1.1/go.mod h1:fGr44VWdEvL+f+Qt5LkKLOT7GoxaWdoUCnPBU9h6t04= github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/willf/bitset v1.1.9/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xlab/treeprint v1.0.0/go.mod h1:IoImgRak9i3zJyuxOKUP1v4UZd1tMoKkq/Cimt1uhCg= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= 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.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/zeebo/xxh3 v0.13.0/go.mod h1:AQY73TOrhF3jNsdiM9zZOb8MThrYbZONHj7ryDBaLpg= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.3.0/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= -go.mongodb.org/mongo-driver v1.3.2/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= go.mongodb.org/mongo-driver v1.3.4/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= go.mongodb.org/mongo-driver v1.4.3/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -1121,17 +867,9 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= -go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= -go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= -go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= -go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= @@ -1140,25 +878,14 @@ go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 h1:sHOAIxRGBp443oHZIPB+ go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.14.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -golang.org/x/crypto v0.0.0-20180505025534-4ec37c66abab/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -1170,45 +897,25 @@ golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191202143827-86a70503ff7e/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200422194213-44a606286825/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20211028214138-64b4c8e87d1a/go.mod h1:a3o/VtDNHN+dCVLEpzjjUHOzR+Ln3DHX056ZPzoZGGA= -golang.org/x/exp v0.0.0-20211216164055-b2b84827b756/go.mod h1:b9TAUYHmRtqA6klRHApnXMnj+OyLce4yF5cZCUbk2ps= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1223,21 +930,15 @@ golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPI golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mobile v0.0.0-20201217150744-e6ae53a27f4f/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.1-0.20210830214625-1b1db11ec8f4/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= -golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1254,7 +955,6 @@ golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1263,10 +963,6 @@ golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1274,11 +970,9 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= @@ -1292,22 +986,16 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211118161319-6a13c67c3ce4/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 h1:HVyaeDAYux4pnY+D/SiwmLOR36ewZ4iGQIIrtnuCjFA= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 h1:NWy5+hlRbC7HK+PmcXVUmW1IMyFce7to56IUvhUFm7Y= +golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1319,7 +1007,6 @@ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= @@ -1340,9 +1027,9 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 h1:w8s32wxx3sY+OjLlv9qltkLU5yvJzxjjgiHWLjdIcw4= +golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1351,8 +1038,6 @@ golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1368,18 +1053,13 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191128015809-6d18c012aee9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1404,46 +1084,32 @@ golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200727154430-2d971f7391a4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200828194041-157a740278f4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210503080704-8803ae5d1324/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210601080250-7ecdf8ef093b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1455,12 +1121,11 @@ golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220405052023-b1e9470b6e64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6 h1:nonptSpoQ4vQjyraW20DXPAglgQfVnM9ZC6MmNLMR60= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/sys v0.0.0-20220519141025-dcacdad47464 h1:MpIuURY70f0iKp/oooEFtB2oENcHITo/z1b6u41pKCw= +golang.org/x/sys v0.0.0-20220519141025-dcacdad47464/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1475,11 +1140,7 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1506,11 +1167,9 @@ golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190813034749-528a2984e271/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1520,13 +1179,11 @@ golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191203134012-c197fd4bf371/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1535,17 +1192,14 @@ golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304024140-c4206d458c3f/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200422205258-72e4a01eba43/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200513201620-d5fe73897c97/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= @@ -1554,32 +1208,26 @@ golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20201119054027-25dc3e1ccc3c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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= -golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f h1:GGU+dLjvlC3qDwqYgL6UgRmHXhOOgns0bZu2Ty5mm6U= golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df h1:5Pf6pFKu98ODmgnpvkJ3kFUOQGGLIzLIkbzUHp47618= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= -gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= -gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= 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= @@ -1602,7 +1250,6 @@ google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34q google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.46.0/go.mod h1:ceL4oozhkAiTID8XMmJBsIxID/9wMXJVVFXPg4ylg3I= google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= @@ -1619,8 +1266,9 @@ google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.78.0 h1:5ewPyCwP43C3i8B6C2Kb+eVAevbnke2xR8VbcSWjS4I= google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0 h1:IQWaGVCYnsm4MO3hh+WtSXMzMzuyFx/fuR8qkN3A0Qo= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1640,7 +1288,6 @@ google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= @@ -1655,7 +1302,6 @@ google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200420144010-e5e8543f8aeb/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -1676,15 +1322,11 @@ google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210429181445-86c259c2b4ab/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210517163617-5e0236093d7a/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210601144548-a796c710e9b6/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210630183607-d20f26d13c79/go.mod h1:yiaVoXHpRzHGyxV3o4DktVWY4mSUErTKaeEOq6C3t3U= google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= @@ -1695,7 +1337,6 @@ google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEc google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= @@ -1715,8 +1356,10 @@ google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3 h1:q1kiSVscqoDeqTF27eQ2NnLLDmqF0I373qQNXYMy0fo= google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd h1:e0TwkXOdbnH/1x5rc5MZ/VYyiZ4v+RdVfrGMqEwT68I= +google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1726,13 +1369,11 @@ google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ij google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= @@ -1750,11 +1391,11 @@ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.46.0 h1:oCjezcn6g6A75TGoKYBPgKmVBLexhYLM6MebdrPApP8= google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2 h1:u+MLGgVf7vRdjEYZ8wDFhAVNmhkbJ5hmrA1LMWK1CAQ= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1777,8 +1418,6 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= @@ -1794,7 +1433,6 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= @@ -1813,32 +1451,20 @@ 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= -honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -honnef.co/go/tools v0.2.0/go.mod h1:lPVVZ2BS5TfnjLyizF7o7hv7j9/L+8cZY2hLyjP9cGY= -k8s.io/api v0.17.5/go.mod h1:0zV5/ungglgy2Rlm3QK8fbxkXVs+BSJWpJP/+8gUVLY= k8s.io/api v0.19.4/go.mod h1:SbtJ2aHCItirzdJ36YslycFNzWADYH3tgOhvBEFtZAk= -k8s.io/apimachinery v0.17.5/go.mod h1:ioIo1G/a+uONV7Tv+ZmCbMG1/a3kVw5YcDdncd8ugQ0= k8s.io/apimachinery v0.19.4/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= -k8s.io/client-go v0.17.5/go.mod h1:S8uZpBpjJJdEH/fEyxcqg7Rn0P5jH+ilkgBHjriSmNo= k8s.io/client-go v0.19.4/go.mod h1:ZrEy7+wj9PjH5VMBCuu/BDlvtUAku0oVFk4MmnW9mWA= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/kube-openapi v0.0.0-20200316234421-82d701f24f9d/go.mod h1:F+5wygcW0wmRTnM3cOgIqGivxkwSWIWT5YdsDbeAOaU= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= -k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -k8s.io/utils v0.0.0-20200414100711-2df71ebbae66/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/structured-merge-diff/v2 v2.0.1/go.mod h1:Wb7vfKAodbKgf6tn1Kl0VvGj7mRH6DGaRcixXEJXTsE= sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/vendor/cloud.google.com/go/storage/.release-please-manifest.json b/vendor/cloud.google.com/go/storage/.release-please-manifest.json index 2ad271007..a068903e0 100644 --- a/vendor/cloud.google.com/go/storage/.release-please-manifest.json +++ b/vendor/cloud.google.com/go/storage/.release-please-manifest.json @@ -1,3 +1,3 @@ { - "storage": "1.22.0" + "storage": "1.22.1" } \ No newline at end of file diff --git a/vendor/cloud.google.com/go/storage/CHANGES.md b/vendor/cloud.google.com/go/storage/CHANGES.md index 1f51830f4..d88a1b2c8 100644 --- a/vendor/cloud.google.com/go/storage/CHANGES.md +++ b/vendor/cloud.google.com/go/storage/CHANGES.md @@ -1,6 +1,14 @@ # Changes +### [1.22.1](https://github.com/googleapis/google-cloud-go/compare/storage/v1.22.0...storage/v1.22.1) (2022-05-19) + + +### Bug Fixes + +* **storage:** bump genproto, remove deadcode ([#6059](https://github.com/googleapis/google-cloud-go/issues/6059)) ([bb10f9f](https://github.com/googleapis/google-cloud-go/commit/bb10f9faca57dc3b987e0fb601090887b3507f07)) +* **storage:** remove field that no longer exists ([#6061](https://github.com/googleapis/google-cloud-go/issues/6061)) ([ee150cf](https://github.com/googleapis/google-cloud-go/commit/ee150cfd194463ddfcb59898cfb0237e47777973)) + ## [1.22.0](https://github.com/googleapis/google-cloud-go/compare/storage/v1.21.0...storage/v1.22.0) (2022-03-31) diff --git a/vendor/cloud.google.com/go/storage/acl.go b/vendor/cloud.google.com/go/storage/acl.go index c59c380ee..0c2374008 100644 --- a/vendor/cloud.google.com/go/storage/acl.go +++ b/vendor/cloud.google.com/go/storage/acl.go @@ -121,12 +121,12 @@ func (a *ACLHandle) List(ctx context.Context) (rules []ACLRule, err error) { func (a *ACLHandle) bucketDefaultList(ctx context.Context) ([]ACLRule, error) { var acls *raw.ObjectAccessControls var err error + req := a.c.raw.DefaultObjectAccessControls.List(a.bucket) + a.configureCall(ctx, req) err = run(ctx, func() error { - req := a.c.raw.DefaultObjectAccessControls.List(a.bucket) - a.configureCall(ctx, req) acls, err = req.Do() return err - }, a.retry, true) + }, a.retry, true, setRetryHeaderHTTP(req)) if err != nil { return nil, err } @@ -139,18 +139,18 @@ func (a *ACLHandle) bucketDefaultDelete(ctx context.Context, entity ACLEntity) e return run(ctx, func() error { return req.Do() - }, a.retry, false) + }, a.retry, false, setRetryHeaderHTTP(req)) } func (a *ACLHandle) bucketList(ctx context.Context) ([]ACLRule, error) { var acls *raw.BucketAccessControls var err error + req := a.c.raw.BucketAccessControls.List(a.bucket) + a.configureCall(ctx, req) err = run(ctx, func() error { - req := a.c.raw.BucketAccessControls.List(a.bucket) - a.configureCall(ctx, req) acls, err = req.Do() return err - }, a.retry, true) + }, a.retry, true, setRetryHeaderHTTP(req)) if err != nil { return nil, err } @@ -168,7 +168,7 @@ func (a *ACLHandle) bucketSet(ctx context.Context, entity ACLEntity, role ACLRol return run(ctx, func() error { _, err := req.Do() return err - }, a.retry, false) + }, a.retry, false, setRetryHeaderHTTP(req)) } func (a *ACLHandle) bucketDelete(ctx context.Context, entity ACLEntity) error { @@ -176,18 +176,18 @@ func (a *ACLHandle) bucketDelete(ctx context.Context, entity ACLEntity) error { a.configureCall(ctx, req) return run(ctx, func() error { return req.Do() - }, a.retry, false) + }, a.retry, false, setRetryHeaderHTTP(req)) } func (a *ACLHandle) objectList(ctx context.Context) ([]ACLRule, error) { var acls *raw.ObjectAccessControls var err error + req := a.c.raw.ObjectAccessControls.List(a.bucket, a.object) + a.configureCall(ctx, req) err = run(ctx, func() error { - req := a.c.raw.ObjectAccessControls.List(a.bucket, a.object) - a.configureCall(ctx, req) acls, err = req.Do() return err - }, a.retry, true) + }, a.retry, true, setRetryHeaderHTTP(req)) if err != nil { return nil, err } @@ -215,7 +215,7 @@ func (a *ACLHandle) objectSet(ctx context.Context, entity ACLEntity, role ACLRol return run(ctx, func() error { _, err := req.Do() return err - }, a.retry, false) + }, a.retry, false, setRetryHeaderHTTP(req)) } func (a *ACLHandle) objectDelete(ctx context.Context, entity ACLEntity) error { @@ -223,7 +223,7 @@ func (a *ACLHandle) objectDelete(ctx context.Context, entity ACLEntity) error { a.configureCall(ctx, req) return run(ctx, func() error { return req.Do() - }, a.retry, false) + }, a.retry, false, setRetryHeaderHTTP(req)) } func (a *ACLHandle) configureCall(ctx context.Context, call interface{ Header() http.Header }) { diff --git a/vendor/cloud.google.com/go/storage/bucket.go b/vendor/cloud.google.com/go/storage/bucket.go index 3ac58114f..101f695b5 100644 --- a/vendor/cloud.google.com/go/storage/bucket.go +++ b/vendor/cloud.google.com/go/storage/bucket.go @@ -28,7 +28,6 @@ import ( "cloud.google.com/go/internal/optional" "cloud.google.com/go/internal/trace" "github.com/googleapis/go-type-adapters/adapters" - "golang.org/x/xerrors" "google.golang.org/api/googleapi" "google.golang.org/api/iamcredentials/v1" "google.golang.org/api/iterator" @@ -104,7 +103,7 @@ func (b *BucketHandle) Create(ctx context.Context, projectID string, attrs *Buck if attrs != nil && attrs.PredefinedDefaultObjectACL != "" { req.PredefinedDefaultObjectAcl(attrs.PredefinedDefaultObjectACL) } - return run(ctx, func() error { _, err := req.Context(ctx).Do(); return err }, b.retry, true) + return run(ctx, func() error { _, err := req.Context(ctx).Do(); return err }, b.retry, true, setRetryHeaderHTTP(req)) } // Delete deletes the Bucket. @@ -117,7 +116,7 @@ func (b *BucketHandle) Delete(ctx context.Context) (err error) { return err } - return run(ctx, func() error { return req.Context(ctx).Do() }, b.retry, true) + return run(ctx, func() error { return req.Context(ctx).Do() }, b.retry, true, setRetryHeaderHTTP(req)) } func (b *BucketHandle) newDeleteCall() (*raw.BucketsDeleteCall, error) { @@ -185,9 +184,9 @@ func (b *BucketHandle) Attrs(ctx context.Context) (attrs *BucketAttrs, err error err = run(ctx, func() error { resp, err = req.Context(ctx).Do() return err - }, b.retry, true) + }, b.retry, true, setRetryHeaderHTTP(req)) var e *googleapi.Error - if ok := xerrors.As(err, &e); ok && e.Code == http.StatusNotFound { + if ok := errors.As(err, &e); ok && e.Code == http.StatusNotFound { return nil, ErrBucketNotExist } if err != nil { @@ -233,7 +232,7 @@ func (b *BucketHandle) Update(ctx context.Context, uattrs BucketAttrsToUpdate) ( return err } - if err := run(ctx, call, b.retry, isIdempotent); err != nil { + if err := run(ctx, call, b.retry, isIdempotent, setRetryHeaderHTTP(req)); err != nil { return nil, err } return newBucket(rawBucket) @@ -921,11 +920,9 @@ func (b *BucketAttrs) toProtoBucket() *storagepb.Bucket { Enabled: true, } } - // TODO(noahdietz): This will be switched to a string. - // - // if b.PublicAccessPrevention != PublicAccessPreventionUnknown { - // bktIAM.PublicAccessPrevention = b.PublicAccessPrevention.String() - // } + if b.PublicAccessPrevention != PublicAccessPreventionUnknown { + bktIAM.PublicAccessPrevention = b.PublicAccessPrevention.String() + } } return &storagepb.Bucket{ @@ -948,6 +945,81 @@ func (b *BucketAttrs) toProtoBucket() *storagepb.Bucket { } } +func (ua *BucketAttrsToUpdate) toProtoBucket() *storagepb.Bucket { + if ua == nil { + return &storagepb.Bucket{} + } + + // TODO(cathyo): Handle labels. Pending b/230510191. + + var v *storagepb.Bucket_Versioning + if ua.VersioningEnabled != nil { + v = &storagepb.Bucket_Versioning{Enabled: optional.ToBool(ua.VersioningEnabled)} + } + var bb *storagepb.Bucket_Billing + if ua.RequesterPays != nil { + bb = &storage.Bucket_Billing{RequesterPays: optional.ToBool(ua.RequesterPays)} + } + var bktIAM *storagepb.Bucket_IamConfig + var ublaEnabled bool + var bktPolicyOnlyEnabled bool + if ua.UniformBucketLevelAccess != nil { + ublaEnabled = optional.ToBool(ua.UniformBucketLevelAccess.Enabled) + } + if ua.BucketPolicyOnly != nil { + bktPolicyOnlyEnabled = optional.ToBool(ua.BucketPolicyOnly.Enabled) + } + if ublaEnabled || bktPolicyOnlyEnabled { + bktIAM.UniformBucketLevelAccess = &storagepb.Bucket_IamConfig_UniformBucketLevelAccess{ + Enabled: true, + } + } + if ua.PublicAccessPrevention != PublicAccessPreventionUnknown { + bktIAM.PublicAccessPrevention = ua.PublicAccessPrevention.String() + } + var defaultHold bool + if ua.DefaultEventBasedHold != nil { + defaultHold = optional.ToBool(ua.DefaultEventBasedHold) + } + var lifecycle Lifecycle + if ua.Lifecycle != nil { + lifecycle = *ua.Lifecycle + } + var bktACL []*storagepb.BucketAccessControl + if ua.acl != nil { + bktACL = toProtoBucketACL(ua.acl) + } + if ua.PredefinedACL != "" { + // Clear ACL or the call will fail. + bktACL = nil + } + var bktDefaultObjectACL []*storagepb.ObjectAccessControl + if ua.defaultObjectACL != nil { + bktDefaultObjectACL = toProtoObjectACL(ua.defaultObjectACL) + } + if ua.PredefinedDefaultObjectACL != "" { + // Clear ACLs or the call will fail. + bktDefaultObjectACL = nil + } + + return &storagepb.Bucket{ + StorageClass: ua.StorageClass, + Acl: bktACL, + DefaultObjectAcl: bktDefaultObjectACL, + DefaultEventBasedHold: defaultHold, + Versioning: v, + Billing: bb, + Lifecycle: toProtoLifecycle(lifecycle), + RetentionPolicy: ua.RetentionPolicy.toProtoRetentionPolicy(), + Cors: toProtoCORS(ua.CORS), + Encryption: ua.Encryption.toProtoBucketEncryption(), + Logging: ua.Logging.toProtoBucketLogging(), + Website: ua.Website.toProtoBucketWebsite(), + IamConfig: bktIAM, + Rpo: ua.RPO.String(), + } +} + // CORS is the bucket's Cross-Origin Resource Sharing (CORS) configuration. type CORS struct { // MaxAge is the value to return in the Access-Control-Max-Age @@ -1060,6 +1132,17 @@ type BucketAttrsToUpdate struct { // more information. RPO RPO + // acl is the list of access control rules on the bucket. + // It is unexported and only used internally by the gRPC client. + // Library users should use ACLHandle methods directly. + acl []ACLRule + + // defaultObjectACL is the list of access controls to + // apply to new objects when no object ACL is provided. + // It is unexported and only used internally by the gRPC client. + // Library users should use ACLHandle methods directly. + defaultObjectACL []ACLRule + setLabels map[string]string deleteLabels map[string]bool } @@ -1258,7 +1341,7 @@ func (b *BucketHandle) LockRetentionPolicy(ctx context.Context) error { return run(ctx, func() error { _, err := req.Context(ctx).Do() return err - }, b.retry, true) + }, b.retry, true, setRetryHeaderHTTP(req)) } // applyBucketConds modifies the provided call using the conditions in conds. @@ -1329,7 +1412,7 @@ func (rp *RetentionPolicy) toProtoRetentionPolicy() *storagepb.Bucket_RetentionP } func toRetentionPolicy(rp *raw.BucketRetentionPolicy) (*RetentionPolicy, error) { - if rp == nil { + if rp == nil || rp.EffectiveTime == "" { return nil, nil } t, err := time.Parse(time.RFC3339, rp.EffectiveTime) @@ -1916,10 +1999,10 @@ func (it *ObjectIterator) fetch(pageSize int, pageToken string) (string, error) err = run(it.ctx, func() error { resp, err = req.Context(it.ctx).Do() return err - }, it.bucket.retry, true) + }, it.bucket.retry, true, setRetryHeaderHTTP(req)) if err != nil { var e *googleapi.Error - if ok := xerrors.As(err, &e); ok && e.Code == http.StatusNotFound { + if ok := errors.As(err, &e); ok && e.Code == http.StatusNotFound { err = ErrBucketNotExist } return "", err @@ -1987,6 +2070,9 @@ func (it *BucketIterator) Next() (*BucketAttrs, error) { // Note: This method is not safe for concurrent operations without explicit synchronization. func (it *BucketIterator) PageInfo() *iterator.PageInfo { return it.pageInfo } +// TODO: When the transport-agnostic client interface is integrated into the Veneer, +// this method should be removed, and the iterator should be initialized by the +// transport-specific client implementations. func (it *BucketIterator) fetch(pageSize int, pageToken string) (token string, err error) { req := it.client.raw.Buckets.List(it.projectID) setClientHeader(req.Header()) @@ -2000,7 +2086,7 @@ func (it *BucketIterator) fetch(pageSize int, pageToken string) (token string, e err = run(it.ctx, func() error { resp, err = req.Context(it.ctx).Do() return err - }, it.client.retry, true) + }, it.client.retry, true, setRetryHeaderHTTP(req)) if err != nil { return "", err } diff --git a/vendor/cloud.google.com/go/storage/client.go b/vendor/cloud.google.com/go/storage/client.go index 7155a91f7..87ee41927 100644 --- a/vendor/cloud.google.com/go/storage/client.go +++ b/vendor/cloud.google.com/go/storage/client.go @@ -43,16 +43,16 @@ type storageClient interface { GetServiceAccount(ctx context.Context, project string, opts ...storageOption) (string, error) CreateBucket(ctx context.Context, project string, attrs *BucketAttrs, opts ...storageOption) (*BucketAttrs, error) - ListBuckets(ctx context.Context, project string, opts ...storageOption) (*BucketIterator, error) + ListBuckets(ctx context.Context, project string, opts ...storageOption) *BucketIterator Close() error // Bucket methods. DeleteBucket(ctx context.Context, bucket string, conds *BucketConditions, opts ...storageOption) error GetBucket(ctx context.Context, bucket string, conds *BucketConditions, opts ...storageOption) (*BucketAttrs, error) - UpdateBucket(ctx context.Context, uattrs *BucketAttrsToUpdate, conds *BucketConditions, opts ...storageOption) (*BucketAttrs, error) + UpdateBucket(ctx context.Context, bucket string, uattrs *BucketAttrsToUpdate, conds *BucketConditions, opts ...storageOption) (*BucketAttrs, error) LockBucketRetentionPolicy(ctx context.Context, bucket string, conds *BucketConditions, opts ...storageOption) error - ListObjects(ctx context.Context, bucket string, q *Query, opts ...storageOption) (*ObjectIterator, error) + ListObjects(ctx context.Context, bucket string, q *Query, opts ...storageOption) *ObjectIterator // Object metadata methods. diff --git a/vendor/cloud.google.com/go/storage/copy.go b/vendor/cloud.google.com/go/storage/copy.go index f18075352..26865fa47 100644 --- a/vendor/cloud.google.com/go/storage/copy.go +++ b/vendor/cloud.google.com/go/storage/copy.go @@ -142,7 +142,7 @@ func (c *Copier) callRewrite(ctx context.Context, rawObj *raw.Object) (*raw.Rewr retryCall := func() error { res, err = call.Do(); return err } isIdempotent := c.dst.conds != nil && (c.dst.conds.GenerationMatch != 0 || c.dst.conds.DoesNotExist) - if err := run(ctx, retryCall, c.dst.retry, isIdempotent); err != nil { + if err := run(ctx, retryCall, c.dst.retry, isIdempotent, setRetryHeaderHTTP(call)); err != nil { return nil, err } c.RewriteToken = res.RewriteToken @@ -237,7 +237,7 @@ func (c *Composer) Run(ctx context.Context) (attrs *ObjectAttrs, err error) { retryCall := func() error { obj, err = call.Do(); return err } isIdempotent := c.dst.conds != nil && (c.dst.conds.GenerationMatch != 0 || c.dst.conds.DoesNotExist) - if err := run(ctx, retryCall, c.dst.retry, isIdempotent); err != nil { + if err := run(ctx, retryCall, c.dst.retry, isIdempotent, setRetryHeaderHTTP(call)); err != nil { return nil, err } return newObject(obj), nil diff --git a/vendor/cloud.google.com/go/storage/grpc_client.go b/vendor/cloud.google.com/go/storage/grpc_client.go index 2cd3c613b..db914d61f 100644 --- a/vendor/cloud.google.com/go/storage/grpc_client.go +++ b/vendor/cloud.google.com/go/storage/grpc_client.go @@ -19,12 +19,15 @@ import ( "os" gapic "cloud.google.com/go/storage/internal/apiv2" + "google.golang.org/api/iterator" "google.golang.org/api/option" iampb "google.golang.org/genproto/googleapis/iam/v1" storagepb "google.golang.org/genproto/googleapis/storage/v2" "google.golang.org/grpc" "google.golang.org/grpc/codes" + "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" + fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" ) const ( @@ -110,8 +113,22 @@ func (c *grpcStorageClient) Close() error { // Top-level methods. func (c *grpcStorageClient) GetServiceAccount(ctx context.Context, project string, opts ...storageOption) (string, error) { - return "", errMethodNotSupported + s := callSettings(c.settings, opts...) + req := &storagepb.GetServiceAccountRequest{ + Project: toProjectResource(project), + } + var resp *storagepb.ServiceAccount + err := run(ctx, func() error { + var err error + resp, err = c.raw.GetServiceAccount(ctx, req, s.gax...) + return err + }, s.retry, s.idempotent, setRetryHeaderGRPC(ctx)) + if err != nil { + return "", err + } + return resp.EmailAddress, err } + func (c *grpcStorageClient) CreateBucket(ctx context.Context, project string, attrs *BucketAttrs, opts ...storageOption) (*BucketAttrs, error) { s := callSettings(c.settings, opts...) b := attrs.toProtoBucket() @@ -123,13 +140,11 @@ func (c *grpcStorageClient) CreateBucket(ctx context.Context, project string, at } req := &storagepb.CreateBucketRequest{ - Parent: toProjectResource(project), - Bucket: b, - BucketId: b.GetName(), - // TODO(noahdietz): This will be switched to a string. - // - // PredefinedAcl: attrs.PredefinedACL, - // PredefinedDefaultObjectAcl: attrs.PredefinedDefaultObjectACL, + Parent: toProjectResource(project), + Bucket: b, + BucketId: b.GetName(), + PredefinedAcl: attrs.PredefinedACL, + PredefinedDefaultObjectAcl: attrs.PredefinedDefaultObjectACL, } var battrs *BucketAttrs @@ -139,13 +154,57 @@ func (c *grpcStorageClient) CreateBucket(ctx context.Context, project string, at battrs = newBucketFromProto(res) return err - }, s.retry, s.idempotent) + }, s.retry, s.idempotent, setRetryHeaderGRPC(ctx)) return battrs, err } -func (c *grpcStorageClient) ListBuckets(ctx context.Context, project string, opts ...storageOption) (*BucketIterator, error) { - return nil, errMethodNotSupported +func (c *grpcStorageClient) ListBuckets(ctx context.Context, project string, opts ...storageOption) *BucketIterator { + s := callSettings(c.settings, opts...) + it := &BucketIterator{ + ctx: ctx, + projectID: project, + } + + var gitr *gapic.BucketIterator + fetch := func(pageSize int, pageToken string) (token string, err error) { + // Initialize GAPIC-based iterator when pageToken is empty, which + // indicates that this fetch call is attempting to get the first page. + // + // Note: Initializing the GAPIC-based iterator lazily is necessary to + // capture the BucketIterator.Prefix set by the user *after* the + // BucketIterator is returned to them from the veneer. + if pageToken == "" { + req := &storagepb.ListBucketsRequest{ + Parent: toProjectResource(it.projectID), + Prefix: it.Prefix, + } + gitr = c.raw.ListBuckets(it.ctx, req, s.gax...) + } + + var buckets []*storagepb.Bucket + var next string + err = run(it.ctx, func() error { + buckets, next, err = gitr.InternalFetch(pageSize, pageToken) + return err + }, s.retry, s.idempotent, setRetryHeaderGRPC(ctx)) + if err != nil { + return "", err + } + + for _, bkt := range buckets { + b := newBucketFromProto(bkt) + it.buckets = append(it.buckets, b) + } + + return next, nil + } + it.pageInfo, it.nextFunc = iterator.NewPageInfo( + fetch, + func() int { return len(it.buckets) }, + func() interface{} { b := it.buckets; it.buckets = nil; return b }) + + return it } // Bucket methods. @@ -159,14 +218,12 @@ func (c *grpcStorageClient) DeleteBucket(ctx context.Context, bucket string, con return err } if s.userProject != "" { - req.CommonRequestParams = &storagepb.CommonRequestParams{ - UserProject: toProjectResource(s.userProject), - } + ctx = setUserProjectMetadata(ctx, s.userProject) } return run(ctx, func() error { return c.raw.DeleteBucket(ctx, req, s.gax...) - }, s.retry, s.idempotent) + }, s.retry, s.idempotent, setRetryHeaderGRPC(ctx)) } func (c *grpcStorageClient) GetBucket(ctx context.Context, bucket string, conds *BucketConditions, opts ...storageOption) (*BucketAttrs, error) { @@ -178,9 +235,7 @@ func (c *grpcStorageClient) GetBucket(ctx context.Context, bucket string, conds return nil, err } if s.userProject != "" { - req.CommonRequestParams = &storagepb.CommonRequestParams{ - UserProject: toProjectResource(s.userProject), - } + ctx = setUserProjectMetadata(ctx, s.userProject) } var battrs *BucketAttrs @@ -190,7 +245,7 @@ func (c *grpcStorageClient) GetBucket(ctx context.Context, bucket string, conds battrs = newBucketFromProto(res) return err - }, s.retry, s.idempotent) + }, s.retry, s.idempotent, setRetryHeaderGRPC(ctx)) if s, ok := status.FromError(err); ok && s.Code() == codes.NotFound { return nil, ErrBucketNotExist @@ -198,14 +253,153 @@ func (c *grpcStorageClient) GetBucket(ctx context.Context, bucket string, conds return battrs, err } -func (c *grpcStorageClient) UpdateBucket(ctx context.Context, uattrs *BucketAttrsToUpdate, conds *BucketConditions, opts ...storageOption) (*BucketAttrs, error) { - return nil, errMethodNotSupported +func (c *grpcStorageClient) UpdateBucket(ctx context.Context, bucket string, uattrs *BucketAttrsToUpdate, conds *BucketConditions, opts ...storageOption) (*BucketAttrs, error) { + s := callSettings(c.settings, opts...) + b := uattrs.toProtoBucket() + b.Name = bucketResourceName(globalProjectAlias, bucket) + req := &storagepb.UpdateBucketRequest{ + Bucket: b, + PredefinedAcl: uattrs.PredefinedACL, + PredefinedDefaultObjectAcl: uattrs.PredefinedDefaultObjectACL, + } + if err := applyBucketCondsProto("grpcStorageClient.UpdateBucket", conds, req); err != nil { + return nil, err + } + if s.userProject != "" { + ctx = setUserProjectMetadata(ctx, s.userProject) + } + + var paths []string + fieldMask := &fieldmaskpb.FieldMask{ + Paths: paths, + } + if uattrs.CORS != nil { + fieldMask.Paths = append(fieldMask.Paths, "cors") + } + if uattrs.DefaultEventBasedHold != nil { + fieldMask.Paths = append(fieldMask.Paths, "default_event_based_hold") + } + if uattrs.RetentionPolicy != nil { + fieldMask.Paths = append(fieldMask.Paths, "retention_policy") + } + if uattrs.VersioningEnabled != nil { + fieldMask.Paths = append(fieldMask.Paths, "versioning") + } + if uattrs.RequesterPays != nil { + fieldMask.Paths = append(fieldMask.Paths, "billing") + } + if uattrs.BucketPolicyOnly != nil || uattrs.UniformBucketLevelAccess != nil || uattrs.PublicAccessPrevention != PublicAccessPreventionUnknown { + fieldMask.Paths = append(fieldMask.Paths, "iam_config") + } + if uattrs.Encryption != nil { + fieldMask.Paths = append(fieldMask.Paths, "encryption") + } + if uattrs.Lifecycle != nil { + fieldMask.Paths = append(fieldMask.Paths, "lifecycle") + } + if uattrs.Logging != nil { + fieldMask.Paths = append(fieldMask.Paths, "logging") + } + if uattrs.Website != nil { + fieldMask.Paths = append(fieldMask.Paths, "website") + } + if uattrs.PredefinedACL != "" { + // In cases where PredefinedACL is set, Acl is cleared. + fieldMask.Paths = append(fieldMask.Paths, "acl") + } + if uattrs.PredefinedDefaultObjectACL != "" { + // In cases where PredefinedDefaultObjectACL is set, DefaultObjectAcl is cleared. + fieldMask.Paths = append(fieldMask.Paths, "default_object_acl") + } + if uattrs.acl != nil { + // In cases where acl is set by UpdateBucketACL method. + fieldMask.Paths = append(fieldMask.Paths, "acl") + } + if uattrs.defaultObjectACL != nil { + // In cases where defaultObjectACL is set by UpdateBucketACL method. + fieldMask.Paths = append(fieldMask.Paths, "default_object_acl") + } + if uattrs.StorageClass != "" { + fieldMask.Paths = append(fieldMask.Paths, "storage_class") + } + if uattrs.RPO != RPOUnknown { + fieldMask.Paths = append(fieldMask.Paths, "rpo") + } + // TODO(cathyo): Handle labels. Pending b/230510191. + req.UpdateMask = fieldMask + + var battrs *BucketAttrs + err := run(ctx, func() error { + res, err := c.raw.UpdateBucket(ctx, req, s.gax...) + battrs = newBucketFromProto(res) + return err + }, s.retry, s.idempotent, setRetryHeaderGRPC(ctx)) + + return battrs, err } func (c *grpcStorageClient) LockBucketRetentionPolicy(ctx context.Context, bucket string, conds *BucketConditions, opts ...storageOption) error { - return errMethodNotSupported + s := callSettings(c.settings, opts...) + req := &storagepb.LockBucketRetentionPolicyRequest{ + Bucket: bucketResourceName(globalProjectAlias, bucket), + } + if err := applyBucketCondsProto("grpcStorageClient.LockBucketRetentionPolicy", conds, req); err != nil { + return err + } + + return run(ctx, func() error { + _, err := c.raw.LockBucketRetentionPolicy(ctx, req, s.gax...) + return err + }, s.retry, s.idempotent, setRetryHeaderGRPC(ctx)) + } -func (c *grpcStorageClient) ListObjects(ctx context.Context, bucket string, q *Query, opts ...storageOption) (*ObjectIterator, error) { - return nil, errMethodNotSupported +func (c *grpcStorageClient) ListObjects(ctx context.Context, bucket string, q *Query, opts ...storageOption) *ObjectIterator { + s := callSettings(c.settings, opts...) + it := &ObjectIterator{ + ctx: ctx, + } + if q != nil { + it.query = *q + } + req := &storagepb.ListObjectsRequest{ + Parent: bucketResourceName(globalProjectAlias, bucket), + Prefix: it.query.Prefix, + Delimiter: it.query.Delimiter, + Versions: it.query.Versions, + LexicographicStart: it.query.StartOffset, + LexicographicEnd: it.query.EndOffset, + // TODO(noahietz): Convert a projection to a FieldMask. + // ReadMask: q.Projection, + } + if s.userProject != "" { + ctx = setUserProjectMetadata(ctx, s.userProject) + } + gitr := c.raw.ListObjects(it.ctx, req, s.gax...) + fetch := func(pageSize int, pageToken string) (token string, err error) { + var objects []*storagepb.Object + err = run(it.ctx, func() error { + objects, token, err = gitr.InternalFetch(pageSize, pageToken) + return err + }, s.retry, s.idempotent, setRetryHeaderGRPC(ctx)) + if err != nil { + if st, ok := status.FromError(err); ok && st.Code() == codes.NotFound { + err = ErrBucketNotExist + } + return "", err + } + + for _, obj := range objects { + b := newObjectFromProto(obj) + it.items = append(it.items, b) + } + + return token, nil + } + it.pageInfo, it.nextFunc = iterator.NewPageInfo( + fetch, + func() int { return len(it.items) }, + func() interface{} { b := it.items; it.items = nil; return b }) + + return it } // Object metadata methods. @@ -223,10 +417,32 @@ func (c *grpcStorageClient) UpdateObject(ctx context.Context, bucket, object str // Default Object ACL methods. func (c *grpcStorageClient) DeleteDefaultObjectACL(ctx context.Context, bucket string, entity ACLEntity, opts ...storageOption) error { - return errMethodNotSupported + // There is no separate API for PATCH in gRPC. + // Make a GET call first to retrieve BucketAttrs. + attrs, err := c.GetBucket(ctx, bucket, nil, opts...) + if err != nil { + return err + } + // Delete the entity and copy other remaining ACL entities. + var acl []ACLRule + for _, a := range attrs.DefaultObjectACL { + if a.Entity != entity { + acl = append(acl, a) + } + } + uattrs := &BucketAttrsToUpdate{defaultObjectACL: acl} + // Call UpdateBucket with a MetagenerationMatch precondition set. + if _, err = c.UpdateBucket(ctx, bucket, uattrs, &BucketConditions{MetagenerationMatch: attrs.MetaGeneration}, opts...); err != nil { + return err + } + return nil } func (c *grpcStorageClient) ListDefaultObjectACLs(ctx context.Context, bucket string, opts ...storageOption) ([]ACLRule, error) { - return nil, errMethodNotSupported + attrs, err := c.GetBucket(ctx, bucket, nil, opts...) + if err != nil { + return nil, err + } + return attrs.DefaultObjectACL, nil } func (c *grpcStorageClient) UpdateDefaultObjectACL(ctx context.Context, opts ...storageOption) (*ACLRule, error) { return nil, errMethodNotSupported @@ -235,13 +451,51 @@ func (c *grpcStorageClient) UpdateDefaultObjectACL(ctx context.Context, opts ... // Bucket ACL methods. func (c *grpcStorageClient) DeleteBucketACL(ctx context.Context, bucket string, entity ACLEntity, opts ...storageOption) error { - return errMethodNotSupported + // There is no separate API for PATCH in gRPC. + // Make a GET call first to retrieve BucketAttrs. + attrs, err := c.GetBucket(ctx, bucket, nil, opts...) + if err != nil { + return err + } + // Delete the entity and copy other remaining ACL entities. + var acl []ACLRule + for _, a := range attrs.ACL { + if a.Entity != entity { + acl = append(acl, a) + } + } + uattrs := &BucketAttrsToUpdate{acl: acl} + // Call UpdateBucket with a MetagenerationMatch precondition set. + if _, err = c.UpdateBucket(ctx, bucket, uattrs, &BucketConditions{MetagenerationMatch: attrs.MetaGeneration}, opts...); err != nil { + return err + } + return nil } func (c *grpcStorageClient) ListBucketACLs(ctx context.Context, bucket string, opts ...storageOption) ([]ACLRule, error) { - return nil, errMethodNotSupported + attrs, err := c.GetBucket(ctx, bucket, nil, opts...) + if err != nil { + return nil, err + } + return attrs.ACL, nil } + func (c *grpcStorageClient) UpdateBucketACL(ctx context.Context, bucket string, entity ACLEntity, role ACLRole, opts ...storageOption) (*ACLRule, error) { - return nil, errMethodNotSupported + // There is no separate API for PATCH in gRPC. + // Make a GET call first to retrieve BucketAttrs. + attrs, err := c.GetBucket(ctx, bucket, nil, opts...) + if err != nil { + return nil, err + } + var acl []ACLRule + aclRule := ACLRule{Entity: entity, Role: role} + acl = append(attrs.ACL, aclRule) + uattrs := &BucketAttrsToUpdate{acl: acl} + // Call UpdateBucket with a MetagenerationMatch precondition set. + _, err = c.UpdateBucket(ctx, bucket, uattrs, &BucketConditions{MetagenerationMatch: attrs.MetaGeneration}, opts...) + if err != nil { + return nil, err + } + return &aclRule, err } // Object ACL methods. @@ -288,7 +542,7 @@ func (c *grpcStorageClient) GetIamPolicy(ctx context.Context, resource string, v var err error rp, err = c.raw.GetIamPolicy(ctx, req, s.gax...) return err - }, s.retry, s.idempotent) + }, s.retry, s.idempotent, setRetryHeaderGRPC(ctx)) return rp, err } @@ -305,7 +559,7 @@ func (c *grpcStorageClient) SetIamPolicy(ctx context.Context, resource string, p return run(ctx, func() error { _, err := c.raw.SetIamPolicy(ctx, req, s.gax...) return err - }, s.retry, s.idempotent) + }, s.retry, s.idempotent, setRetryHeaderGRPC(ctx)) } func (c *grpcStorageClient) TestIamPermissions(ctx context.Context, resource string, permissions []string, opts ...storageOption) ([]string, error) { @@ -320,7 +574,7 @@ func (c *grpcStorageClient) TestIamPermissions(ctx context.Context, resource str var err error res, err = c.raw.TestIamPermissions(ctx, req, s.gax...) return err - }, s.retry, s.idempotent) + }, s.retry, s.idempotent, setRetryHeaderGRPC(ctx)) if err != nil { return nil, err } @@ -344,3 +598,12 @@ func (c *grpcStorageClient) CreateHMACKey(ctx context.Context, desc *hmacKeyDesc func (c *grpcStorageClient) DeleteHMACKey(ctx context.Context, desc *hmacKeyDesc, opts ...storageOption) error { return errMethodNotSupported } + +// setUserProjectMetadata appends a project ID to the outgoing Context metadata +// via the x-goog-user-project system parameter defined at +// https://cloud.google.com/apis/docs/system-parameters. This is only for +// billing purposes, and is generally optional, except for requester-pays +// buckets. +func setUserProjectMetadata(ctx context.Context, project string) context.Context { + return metadata.AppendToOutgoingContext(ctx, "x-goog-user-project", project) +} diff --git a/vendor/cloud.google.com/go/storage/hmac.go b/vendor/cloud.google.com/go/storage/hmac.go index 6f834d4e9..2de721e81 100644 --- a/vendor/cloud.google.com/go/storage/hmac.go +++ b/vendor/cloud.google.com/go/storage/hmac.go @@ -130,7 +130,7 @@ func (hkh *HMACKeyHandle) Get(ctx context.Context, opts ...HMACKeyOption) (*HMAC err = run(ctx, func() error { metadata, err = call.Context(ctx).Do() return err - }, hkh.retry, true) + }, hkh.retry, true, setRetryHeaderHTTP(call)) if err != nil { return nil, err } @@ -159,7 +159,7 @@ func (hkh *HMACKeyHandle) Delete(ctx context.Context, opts ...HMACKeyOption) err return run(ctx, func() error { return delCall.Context(ctx).Do() - }, hkh.retry, true) + }, hkh.retry, true, setRetryHeaderHTTP(delCall)) } func pbHmacKeyToHMACKey(pb *raw.HmacKey, updatedTimeCanBeNil bool) (*HMACKey, error) { @@ -221,7 +221,7 @@ func (c *Client) CreateHMACKey(ctx context.Context, projectID, serviceAccountEma h, err := call.Context(ctx).Do() hkPb = h return err - }, c.retry, false); err != nil { + }, c.retry, false, setRetryHeaderHTTP(call)); err != nil { return nil, err } @@ -267,7 +267,7 @@ func (h *HMACKeyHandle) Update(ctx context.Context, au HMACKeyAttrsToUpdate, opt err = run(ctx, func() error { metadata, err = call.Context(ctx).Do() return err - }, h.retry, isIdempotent) + }, h.retry, isIdempotent, setRetryHeaderHTTP(call)) if err != nil { return nil, err @@ -373,7 +373,7 @@ func (it *HMACKeysIterator) fetch(pageSize int, pageToken string) (token string, err = run(it.ctx, func() error { resp, err = call.Context(ctx).Do() return err - }, it.retry, true) + }, it.retry, true, setRetryHeaderHTTP(call)) if err != nil { return "", err } diff --git a/vendor/cloud.google.com/go/storage/http_client.go b/vendor/cloud.google.com/go/storage/http_client.go index 8069db9ee..1ec55150f 100644 --- a/vendor/cloud.google.com/go/storage/http_client.go +++ b/vendor/cloud.google.com/go/storage/http_client.go @@ -21,10 +21,12 @@ import ( "net/http" "net/url" "os" + "reflect" "strings" "golang.org/x/oauth2/google" "google.golang.org/api/googleapi" + "google.golang.org/api/iterator" "google.golang.org/api/option" "google.golang.org/api/option/internaloption" raw "google.golang.org/api/storage/v1" @@ -136,7 +138,18 @@ func (c *httpStorageClient) Close() error { // Top-level methods. func (c *httpStorageClient) GetServiceAccount(ctx context.Context, project string, opts ...storageOption) (string, error) { - return "", errMethodNotSupported + s := callSettings(c.settings, opts...) + call := c.raw.Projects.ServiceAccount.Get(project) + var res *raw.ServiceAccount + err := run(ctx, func() error { + var err error + res, err = call.Context(ctx).Do() + return err + }, s.retry, s.idempotent, setRetryHeaderHTTP(call)) + if err != nil { + return "", err + } + return res.EmailAddress, nil } func (c *httpStorageClient) CreateBucket(ctx context.Context, project string, attrs *BucketAttrs, opts ...storageOption) (*BucketAttrs, error) { @@ -169,12 +182,50 @@ func (c *httpStorageClient) CreateBucket(ctx context.Context, project string, at } battrs, err = newBucket(b) return err - }, s.retry, s.idempotent) + }, s.retry, s.idempotent, setRetryHeaderHTTP(req)) return battrs, err } -func (c *httpStorageClient) ListBuckets(ctx context.Context, project string, opts ...storageOption) (*BucketIterator, error) { - return nil, errMethodNotSupported +func (c *httpStorageClient) ListBuckets(ctx context.Context, project string, opts ...storageOption) *BucketIterator { + s := callSettings(c.settings, opts...) + it := &BucketIterator{ + ctx: ctx, + projectID: project, + } + + fetch := func(pageSize int, pageToken string) (token string, err error) { + req := c.raw.Buckets.List(it.projectID) + setClientHeader(req.Header()) + req.Projection("full") + req.Prefix(it.Prefix) + req.PageToken(pageToken) + if pageSize > 0 { + req.MaxResults(int64(pageSize)) + } + var resp *raw.Buckets + err = run(it.ctx, func() error { + resp, err = req.Context(it.ctx).Do() + return err + }, s.retry, s.idempotent, setRetryHeaderHTTP(req)) + if err != nil { + return "", err + } + for _, item := range resp.Items { + b, err := newBucket(item) + if err != nil { + return "", err + } + it.buckets = append(it.buckets, b) + } + return resp.NextPageToken, nil + } + + it.pageInfo, it.nextFunc = iterator.NewPageInfo( + fetch, + func() int { return len(it.buckets) }, + func() interface{} { b := it.buckets; it.buckets = nil; return b }) + + return it } // Bucket methods. @@ -190,7 +241,7 @@ func (c *httpStorageClient) DeleteBucket(ctx context.Context, bucket string, con req.UserProject(s.userProject) } - return run(ctx, func() error { return req.Context(ctx).Do() }, s.retry, s.idempotent) + return run(ctx, func() error { return req.Context(ctx).Do() }, s.retry, s.idempotent, setRetryHeaderHTTP(req)) } func (c *httpStorageClient) GetBucket(ctx context.Context, bucket string, conds *BucketConditions, opts ...storageOption) (*BucketAttrs, error) { @@ -209,7 +260,7 @@ func (c *httpStorageClient) GetBucket(ctx context.Context, bucket string, conds err = run(ctx, func() error { resp, err = req.Context(ctx).Do() return err - }, s.retry, s.idempotent) + }, s.retry, s.idempotent, setRetryHeaderHTTP(req)) var e *googleapi.Error if ok := errors.As(err, &e); ok && e.Code == http.StatusNotFound { @@ -220,14 +271,109 @@ func (c *httpStorageClient) GetBucket(ctx context.Context, bucket string, conds } return newBucket(resp) } -func (c *httpStorageClient) UpdateBucket(ctx context.Context, uattrs *BucketAttrsToUpdate, conds *BucketConditions, opts ...storageOption) (*BucketAttrs, error) { - return nil, errMethodNotSupported +func (c *httpStorageClient) UpdateBucket(ctx context.Context, bucket string, uattrs *BucketAttrsToUpdate, conds *BucketConditions, opts ...storageOption) (*BucketAttrs, error) { + s := callSettings(c.settings, opts...) + rb := uattrs.toRawBucket() + req := c.raw.Buckets.Patch(bucket, rb).Projection("full") + setClientHeader(req.Header()) + err := applyBucketConds("httpStorageClient.UpdateBucket", conds, req) + if err != nil { + return nil, err + } + if s.userProject != "" { + req.UserProject(s.userProject) + } + if uattrs != nil && uattrs.PredefinedACL != "" { + req.PredefinedAcl(uattrs.PredefinedACL) + } + if uattrs != nil && uattrs.PredefinedDefaultObjectACL != "" { + req.PredefinedDefaultObjectAcl(uattrs.PredefinedDefaultObjectACL) + } + + var rawBucket *raw.Bucket + err = run(ctx, func() error { + rawBucket, err = req.Context(ctx).Do() + return err + }, s.retry, s.idempotent, setRetryHeaderHTTP(req)) + if err != nil { + return nil, err + } + return newBucket(rawBucket) } + func (c *httpStorageClient) LockBucketRetentionPolicy(ctx context.Context, bucket string, conds *BucketConditions, opts ...storageOption) error { - return errMethodNotSupported + s := callSettings(c.settings, opts...) + + var metageneration int64 + if conds != nil { + metageneration = conds.MetagenerationMatch + } + req := c.raw.Buckets.LockRetentionPolicy(bucket, metageneration) + + return run(ctx, func() error { + _, err := req.Context(ctx).Do() + return err + }, s.retry, s.idempotent, setRetryHeaderHTTP(req)) } -func (c *httpStorageClient) ListObjects(ctx context.Context, bucket string, q *Query, opts ...storageOption) (*ObjectIterator, error) { - return nil, errMethodNotSupported +func (c *httpStorageClient) ListObjects(ctx context.Context, bucket string, q *Query, opts ...storageOption) *ObjectIterator { + s := callSettings(c.settings, opts...) + it := &ObjectIterator{ + ctx: ctx, + } + if q != nil { + it.query = *q + } + fetch := func(pageSize int, pageToken string) (string, error) { + req := c.raw.Objects.List(bucket) + setClientHeader(req.Header()) + projection := it.query.Projection + if projection == ProjectionDefault { + projection = ProjectionFull + } + req.Projection(projection.String()) + req.Delimiter(it.query.Delimiter) + req.Prefix(it.query.Prefix) + req.StartOffset(it.query.StartOffset) + req.EndOffset(it.query.EndOffset) + req.Versions(it.query.Versions) + req.IncludeTrailingDelimiter(it.query.IncludeTrailingDelimiter) + if len(it.query.fieldSelection) > 0 { + req.Fields("nextPageToken", googleapi.Field(it.query.fieldSelection)) + } + req.PageToken(pageToken) + if s.userProject != "" { + req.UserProject(s.userProject) + } + if pageSize > 0 { + req.MaxResults(int64(pageSize)) + } + var resp *raw.Objects + var err error + err = run(it.ctx, func() error { + resp, err = req.Context(it.ctx).Do() + return err + }, s.retry, s.idempotent, setRetryHeaderHTTP(req)) + if err != nil { + var e *googleapi.Error + if ok := errors.As(err, &e); ok && e.Code == http.StatusNotFound { + err = ErrBucketNotExist + } + return "", err + } + for _, item := range resp.Items { + it.items = append(it.items, newObject(item)) + } + for _, prefix := range resp.Prefixes { + it.items = append(it.items, &ObjectAttrs{Prefix: prefix}) + } + return resp.NextPageToken, nil + } + it.pageInfo, it.nextFunc = iterator.NewPageInfo( + fetch, + func() int { return len(it.items) }, + func() interface{} { b := it.items; it.items = nil; return b }) + + return it } // Object metadata methods. @@ -245,10 +391,26 @@ func (c *httpStorageClient) UpdateObject(ctx context.Context, bucket, object str // Default Object ACL methods. func (c *httpStorageClient) DeleteDefaultObjectACL(ctx context.Context, bucket string, entity ACLEntity, opts ...storageOption) error { - return errMethodNotSupported + s := callSettings(c.settings, opts...) + req := c.raw.DefaultObjectAccessControls.Delete(bucket, string(entity)) + configureACLCall(ctx, s.userProject, req) + return run(ctx, func() error { return req.Context(ctx).Do() }, s.retry, s.idempotent, setRetryHeaderHTTP(req)) } + func (c *httpStorageClient) ListDefaultObjectACLs(ctx context.Context, bucket string, opts ...storageOption) ([]ACLRule, error) { - return nil, errMethodNotSupported + s := callSettings(c.settings, opts...) + var acls *raw.ObjectAccessControls + var err error + req := c.raw.DefaultObjectAccessControls.List(bucket) + configureACLCall(ctx, s.userProject, req) + err = run(ctx, func() error { + acls, err = req.Do() + return err + }, s.retry, true, setRetryHeaderHTTP(req)) + if err != nil { + return nil, err + } + return toObjectACLRules(acls.Items), nil } func (c *httpStorageClient) UpdateDefaultObjectACL(ctx context.Context, opts ...storageOption) (*ACLRule, error) { return nil, errMethodNotSupported @@ -257,13 +419,59 @@ func (c *httpStorageClient) UpdateDefaultObjectACL(ctx context.Context, opts ... // Bucket ACL methods. func (c *httpStorageClient) DeleteBucketACL(ctx context.Context, bucket string, entity ACLEntity, opts ...storageOption) error { - return errMethodNotSupported + s := callSettings(c.settings, opts...) + req := c.raw.BucketAccessControls.Delete(bucket, string(entity)) + configureACLCall(ctx, s.userProject, req) + return run(ctx, func() error { return req.Context(ctx).Do() }, s.retry, s.idempotent, setRetryHeaderHTTP(req)) } + func (c *httpStorageClient) ListBucketACLs(ctx context.Context, bucket string, opts ...storageOption) ([]ACLRule, error) { - return nil, errMethodNotSupported + s := callSettings(c.settings, opts...) + var acls *raw.BucketAccessControls + var err error + req := c.raw.BucketAccessControls.List(bucket) + configureACLCall(ctx, s.userProject, req) + err = run(ctx, func() error { + acls, err = req.Do() + return err + }, s.retry, true, setRetryHeaderHTTP(req)) + if err != nil { + return nil, err + } + return toBucketACLRules(acls.Items), nil } + func (c *httpStorageClient) UpdateBucketACL(ctx context.Context, bucket string, entity ACLEntity, role ACLRole, opts ...storageOption) (*ACLRule, error) { - return nil, errMethodNotSupported + s := callSettings(c.settings, opts...) + acl := &raw.BucketAccessControl{ + Bucket: bucket, + Entity: string(entity), + Role: string(role), + } + req := c.raw.BucketAccessControls.Update(bucket, string(entity), acl) + configureACLCall(ctx, s.userProject, req) + var aclRule ACLRule + var err error + err = run(ctx, func() error { + acl, err = req.Do() + aclRule = toBucketACLRule(acl) + return err + }, s.retry, s.idempotent, setRetryHeaderHTTP(req)) + if err != nil { + return nil, err + } + return &aclRule, nil +} + +// configureACLCall sets the context, user project and headers on the apiary library call. +// This will panic if the call does not have the correct methods. +func configureACLCall(ctx context.Context, userProject string, call interface{ Header() http.Header }) { + vc := reflect.ValueOf(call) + vc.MethodByName("Context").Call([]reflect.Value{reflect.ValueOf(ctx)}) + if userProject != "" { + vc.MethodByName("UserProject").Call([]reflect.Value{reflect.ValueOf(userProject)}) + } + setClientHeader(call.Header()) } // Object ACL methods. @@ -308,7 +516,7 @@ func (c *httpStorageClient) GetIamPolicy(ctx context.Context, resource string, v var err error rp, err = call.Context(ctx).Do() return err - }, s.retry, s.idempotent) + }, s.retry, s.idempotent, setRetryHeaderHTTP(call)) if err != nil { return nil, err } @@ -328,7 +536,7 @@ func (c *httpStorageClient) SetIamPolicy(ctx context.Context, resource string, p return run(ctx, func() error { _, err := call.Context(ctx).Do() return err - }, s.retry, s.idempotent) + }, s.retry, s.idempotent, setRetryHeaderHTTP(call)) } func (c *httpStorageClient) TestIamPermissions(ctx context.Context, resource string, permissions []string, opts ...storageOption) ([]string, error) { @@ -343,7 +551,7 @@ func (c *httpStorageClient) TestIamPermissions(ctx context.Context, resource str var err error res, err = call.Context(ctx).Do() return err - }, s.retry, s.idempotent) + }, s.retry, s.idempotent, setRetryHeaderHTTP(call)) if err != nil { return nil, err } diff --git a/vendor/cloud.google.com/go/storage/iam.go b/vendor/cloud.google.com/go/storage/iam.go index a870ab8ee..cf9f899a4 100644 --- a/vendor/cloud.google.com/go/storage/iam.go +++ b/vendor/cloud.google.com/go/storage/iam.go @@ -57,7 +57,7 @@ func (c *iamClient) GetWithVersion(ctx context.Context, resource string, request err = run(ctx, func() error { rp, err = call.Context(ctx).Do() return err - }, c.retry, true) + }, c.retry, true, setRetryHeaderHTTP(call)) if err != nil { return nil, err } @@ -78,7 +78,7 @@ func (c *iamClient) Set(ctx context.Context, resource string, p *iampb.Policy) ( return run(ctx, func() error { _, err := call.Context(ctx).Do() return err - }, c.retry, isIdempotent) + }, c.retry, isIdempotent, setRetryHeaderHTTP(call)) } func (c *iamClient) Test(ctx context.Context, resource string, perms []string) (permissions []string, err error) { @@ -94,7 +94,7 @@ func (c *iamClient) Test(ctx context.Context, resource string, perms []string) ( err = run(ctx, func() error { res, err = call.Context(ctx).Do() return err - }, c.retry, true) + }, c.retry, true, setRetryHeaderHTTP(call)) if err != nil { return nil, err } diff --git a/vendor/cloud.google.com/go/storage/internal/version.go b/vendor/cloud.google.com/go/storage/internal/version.go index eddfee04b..08bddba74 100644 --- a/vendor/cloud.google.com/go/storage/internal/version.go +++ b/vendor/cloud.google.com/go/storage/internal/version.go @@ -15,4 +15,4 @@ package internal // Version is the current tagged release of the library. -const Version = "1.22.0" +const Version = "1.22.1" diff --git a/vendor/cloud.google.com/go/storage/invoke.go b/vendor/cloud.google.com/go/storage/invoke.go index aab893d08..d0f0dd8d1 100644 --- a/vendor/cloud.google.com/go/storage/invoke.go +++ b/vendor/cloud.google.com/go/storage/invoke.go @@ -16,29 +16,39 @@ package storage import ( "context" + "errors" + "fmt" "io" "net" + "net/http" "net/url" "strings" "cloud.google.com/go/internal" + "cloud.google.com/go/internal/version" + sinternal "cloud.google.com/go/storage/internal" + "github.com/google/uuid" gax "github.com/googleapis/gax-go/v2" - "golang.org/x/xerrors" "google.golang.org/api/googleapi" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) var defaultRetry *retryConfig = &retryConfig{} +var xGoogDefaultHeader = fmt.Sprintf("gl-go/%s gccl/%s", version.Go(), sinternal.Version) // run determines whether a retry is necessary based on the config and // idempotency information. It then calls the function with or without retries // as appropriate, using the configured settings. -func run(ctx context.Context, call func() error, retry *retryConfig, isIdempotent bool) error { +func run(ctx context.Context, call func() error, retry *retryConfig, isIdempotent bool, setHeader func(string, int)) error { + attempts := 1 + invocationID := uuid.New().String() + if retry == nil { retry = defaultRetry } if (retry.policy == RetryIdempotent && !isIdempotent) || retry.policy == RetryNever { + setHeader(invocationID, attempts) return call() } bo := gax.Backoff{} @@ -51,17 +61,39 @@ func run(ctx context.Context, call func() error, retry *retryConfig, isIdempoten if retry.shouldRetry != nil { errorFunc = retry.shouldRetry } + return internal.Retry(ctx, bo, func() (stop bool, err error) { + setHeader(invocationID, attempts) err = call() + attempts++ return !errorFunc(err), err }) } +func setRetryHeaderHTTP(req interface{ Header() http.Header }) func(string, int) { + return func(invocationID string, attempts int) { + if req == nil { + return + } + header := req.Header() + invocationHeader := fmt.Sprintf("gccl-invocation-id/%v gccl-attempt-count/%v", invocationID, attempts) + xGoogHeader := strings.Join([]string{invocationHeader, xGoogDefaultHeader}, " ") + header.Set("x-goog-api-client", xGoogHeader) + } +} + +// TODO: Implement method setting header via context for gRPC +func setRetryHeaderGRPC(_ context.Context) func(string, int) { + return func(_ string, _ int) { + return + } +} + func shouldRetry(err error) bool { if err == nil { return false } - if xerrors.Is(err, io.ErrUnexpectedEOF) { + if errors.Is(err, io.ErrUnexpectedEOF) { return true } diff --git a/vendor/cloud.google.com/go/storage/notifications.go b/vendor/cloud.google.com/go/storage/notifications.go index 333664f92..dd43822b6 100644 --- a/vendor/cloud.google.com/go/storage/notifications.go +++ b/vendor/cloud.google.com/go/storage/notifications.go @@ -142,7 +142,7 @@ func (b *BucketHandle) AddNotification(ctx context.Context, n *Notification) (re err = run(ctx, func() error { rn, err = call.Context(ctx).Do() return err - }, b.retry, false) + }, b.retry, false, setRetryHeaderHTTP(call)) if err != nil { return nil, err } @@ -164,7 +164,7 @@ func (b *BucketHandle) Notifications(ctx context.Context) (n map[string]*Notific err = run(ctx, func() error { res, err = call.Context(ctx).Do() return err - }, b.retry, true) + }, b.retry, true, setRetryHeaderHTTP(call)) if err != nil { return nil, err } @@ -191,5 +191,5 @@ func (b *BucketHandle) DeleteNotification(ctx context.Context, id string) (err e } return run(ctx, func() error { return call.Context(ctx).Do() - }, b.retry, true) + }, b.retry, true, setRetryHeaderHTTP(call)) } diff --git a/vendor/cloud.google.com/go/storage/reader.go b/vendor/cloud.google.com/go/storage/reader.go index 86153256c..ab108b039 100644 --- a/vendor/cloud.google.com/go/storage/reader.go +++ b/vendor/cloud.google.com/go/storage/reader.go @@ -210,7 +210,7 @@ func (o *ObjectHandle) NewRangeReader(ctx context.Context, offset, length int64) gen = gen64 } return nil - }, o.retry, true) + }, o.retry, true, setRetryHeaderHTTP(&readerRequestWrapper{req})) if err != nil { return nil, err } @@ -356,6 +356,16 @@ func setConditionsHeaders(headers http.Header, conds *Conditions) error { return nil } +// Wrap a request to look similar to an apiary library request, in order to +// be used by run(). +type readerRequestWrapper struct { + req *http.Request +} + +func (w *readerRequestWrapper) Header() http.Header { + return w.req.Header +} + var emptyBody = ioutil.NopCloser(strings.NewReader("")) // Reader reads a Cloud Storage object. @@ -492,7 +502,7 @@ func (o *ObjectHandle) newRangeReaderWithGRPC(ctx context.Context, offset, lengt msg, err = stream.Recv() return err - }, o.retry, true) + }, o.retry, true, setRetryHeaderGRPC(ctx)) if err != nil { // Close the stream context we just created to ensure we don't leak // resources. diff --git a/vendor/cloud.google.com/go/storage/storage.go b/vendor/cloud.google.com/go/storage/storage.go index 2a5eaaa5a..719f39723 100644 --- a/vendor/cloud.google.com/go/storage/storage.go +++ b/vendor/cloud.google.com/go/storage/storage.go @@ -39,12 +39,10 @@ import ( "cloud.google.com/go/internal/optional" "cloud.google.com/go/internal/trace" - "cloud.google.com/go/internal/version" "cloud.google.com/go/storage/internal" gapic "cloud.google.com/go/storage/internal/apiv2" "github.com/googleapis/gax-go/v2" "golang.org/x/oauth2/google" - "golang.org/x/xerrors" "google.golang.org/api/googleapi" "google.golang.org/api/option" "google.golang.org/api/option/internaloption" @@ -88,10 +86,9 @@ const ( ScopeReadWrite = raw.DevstorageReadWriteScope ) -var xGoogHeader = fmt.Sprintf("gl-go/%s gccl/%s", version.Go(), internal.Version) - +// TODO: remove this once header with invocation ID is applied to all methods. func setClientHeader(headers http.Header) { - headers.Set("x-goog-api-client", xGoogHeader) + headers.Set("x-goog-api-client", xGoogDefaultHeader) } // Client is a client for interacting with Google Cloud Storage. @@ -122,6 +119,13 @@ type Client struct { // Clients should be reused instead of created as needed. The methods of Client // are safe for concurrent use by multiple goroutines. func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error) { + + // Use the experimental gRPC client if the env var is set. + // This is an experimental API and not intended for public use. + if withGRPC := os.Getenv("STORAGE_USE_GRPC"); withGRPC != "" { + return newGRPCClient(ctx, opts...) + } + var creds *google.Credentials // In general, it is recommended to use raw.NewService instead of htransport.NewClient @@ -195,34 +199,18 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error }, nil } -// hybridClientOptions carries the set of client options for HTTP and gRPC clients. -type hybridClientOptions struct { - HTTPOpts []option.ClientOption - GRPCOpts []option.ClientOption -} - -// newHybridClient creates a new Storage client that initializes a gRPC-based client -// for media upload and download operations. +// newGRPCClient creates a new Storage client that initializes a gRPC-based +// client. Calls that have not been implemented in gRPC will panic. // // This is an experimental API and not intended for public use. -func newHybridClient(ctx context.Context, opts *hybridClientOptions) (*Client, error) { - if opts == nil { - opts = &hybridClientOptions{} - } - opts.GRPCOpts = append(defaultGRPCOptions(), opts.GRPCOpts...) - - c, err := NewClient(ctx, opts.HTTPOpts...) +func newGRPCClient(ctx context.Context, opts ...option.ClientOption) (*Client, error) { + opts = append(defaultGRPCOptions(), opts...) + g, err := gapic.NewClient(ctx, opts...) if err != nil { return nil, err } - g, err := gapic.NewClient(ctx, opts.GRPCOpts...) - if err != nil { - return nil, err - } - c.gc = g - - return c, nil + return &Client{gc: g}, nil } // Close closes the Client. @@ -926,9 +914,9 @@ func (o *ObjectHandle) Attrs(ctx context.Context) (attrs *ObjectAttrs, err error } var obj *raw.Object setClientHeader(call.Header()) - err = run(ctx, func() error { obj, err = call.Do(); return err }, o.retry, true) + err = run(ctx, func() error { obj, err = call.Do(); return err }, o.retry, true, setRetryHeaderHTTP(call)) var e *googleapi.Error - if ok := xerrors.As(err, &e); ok && e.Code == http.StatusNotFound { + if errors.As(err, &e) && e.Code == http.StatusNotFound { return nil, ErrObjectNotExist } if err != nil { @@ -1031,9 +1019,9 @@ func (o *ObjectHandle) Update(ctx context.Context, uattrs ObjectAttrsToUpdate) ( if o.conds != nil && o.conds.MetagenerationMatch != 0 { isIdempotent = true } - err = run(ctx, func() error { obj, err = call.Do(); return err }, o.retry, isIdempotent) + err = run(ctx, func() error { obj, err = call.Do(); return err }, o.retry, isIdempotent, setRetryHeaderHTTP(call)) var e *googleapi.Error - if ok := xerrors.As(err, &e); ok && e.Code == http.StatusNotFound { + if errors.As(err, &e) && e.Code == http.StatusNotFound { return nil, ErrObjectNotExist } if err != nil { @@ -1101,9 +1089,9 @@ func (o *ObjectHandle) Delete(ctx context.Context) error { if (o.conds != nil && o.conds.GenerationMatch != 0) || o.gen >= 0 { isIdempotent = true } - err := run(ctx, func() error { return call.Do() }, o.retry, isIdempotent) + err := run(ctx, func() error { return call.Do() }, o.retry, isIdempotent, setRetryHeaderHTTP(call)) var e *googleapi.Error - if ok := xerrors.As(err, &e); ok && e.Code == http.StatusNotFound { + if errors.As(err, &e) && e.Code == http.StatusNotFound { return ErrObjectNotExist } return err @@ -1129,6 +1117,9 @@ func (o *ObjectHandle) ReadCompressed(compressed bool) *ObjectHandle { // attribute is specified, the content type will be automatically sniffed // using net/http.DetectContentType. // +// Note that each Writer allocates an internal buffer of size Writer.ChunkSize. +// See the ChunkSize docs for more information. +// // It is the caller's responsibility to call Close when writing is done. To // stop writing without saving the data, cancel the context. func (o *ObjectHandle) NewWriter(ctx context.Context) *Writer { @@ -2016,7 +2007,7 @@ func (c *Client) ServiceAccount(ctx context.Context, projectID string) (string, err = run(ctx, func() error { res, err = r.Context(ctx).Do() return err - }, c.retry, true) + }, c.retry, true, setRetryHeaderHTTP(r)) if err != nil { return "", err } diff --git a/vendor/cloud.google.com/go/storage/writer.go b/vendor/cloud.google.com/go/storage/writer.go index 66959efd0..c616603e4 100644 --- a/vendor/cloud.google.com/go/storage/writer.go +++ b/vendor/cloud.google.com/go/storage/writer.go @@ -25,7 +25,6 @@ import ( "unicode/utf8" "github.com/golang/protobuf/proto" - "golang.org/x/xerrors" "google.golang.org/api/googleapi" raw "google.golang.org/api/storage/v1" storagepb "google.golang.org/genproto/googleapis/storage/v2" @@ -62,21 +61,26 @@ type Writer struct { // ChunkSize controls the maximum number of bytes of the object that the // Writer will attempt to send to the server in a single request. Objects // smaller than the size will be sent in a single request, while larger - // objects will be split over multiple requests. The size will be rounded up - // to the nearest multiple of 256K. + // objects will be split over multiple requests. The value will be rounded up + // to the nearest multiple of 256K. The default ChunkSize is 16MiB. // - // ChunkSize will default to a reasonable value. If you perform many - // concurrent writes of small objects (under ~8MB), you may wish set ChunkSize - // to a value that matches your objects' sizes to avoid consuming large - // amounts of memory. See + // Each Writer will internally allocate a buffer of size ChunkSize. This is + // used to buffer input data and allow for the input to be sent again if a + // request must be retried. + // + // If you upload small objects (< 16MiB), you should set ChunkSize + // to a value slightly larger than the objects' sizes to avoid memory bloat. + // This is especially important if you are uploading many small objects + // concurrently. See // https://cloud.google.com/storage/docs/json_api/v1/how-tos/upload#size // for more information about performance trade-offs related to ChunkSize. // // If ChunkSize is set to zero, chunking will be disabled and the object will // be uploaded in a single request without the use of a buffer. This will // further reduce memory used during uploads, but will also prevent the writer - // from retrying in case of a transient error from the server, since a buffer - // is required in order to retry the failed request. + // from retrying in case of a transient error from the server or resuming an + // upload that fails midway through, since the buffer is required in order to + // retry the failed request. // // ChunkSize must be set before the first Write call. ChunkSize int @@ -261,7 +265,7 @@ func (w *Writer) Write(p []byte) (n int, err error) { // Preserve existing functionality that when context is canceled, Write will return // context.Canceled instead of "io: read/write on closed pipe". This hides the // pipe implementation detail from users and makes Write seem as though it's an RPC. - if xerrors.Is(werr, context.Canceled) || xerrors.Is(werr, context.DeadlineExceeded) { + if errors.Is(werr, context.Canceled) || errors.Is(werr, context.DeadlineExceeded) { return n, werr } } @@ -452,17 +456,12 @@ func (w *Writer) openGRPC() error { // // This is an experimental API and not intended for public use. func (w *Writer) startResumableUpload() error { - var common *storagepb.CommonRequestParams - if w.o.userProject != "" { - common = &storagepb.CommonRequestParams{UserProject: w.o.userProject} - } spec, err := w.writeObjectSpec() if err != nil { return err } upres, err := w.o.c.gc.StartResumableWrite(w.ctx, &storagepb.StartResumableWriteRequest{ - WriteObjectSpec: spec, - CommonRequestParams: common, + WriteObjectSpec: spec, }) w.upid = upres.GetUploadId() diff --git a/vendor/github.com/antzucaro/matchr/COPYING.txt b/vendor/github.com/antzucaro/matchr/COPYING.txt new file mode 100644 index 000000000..169aa50db --- /dev/null +++ b/vendor/github.com/antzucaro/matchr/COPYING.txt @@ -0,0 +1,19 @@ +Matchr: an approximate string matching library for the Go programming language + +Copyright (C) 2013-2014 Ant Zucaro + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +You can contact Ant Zucaro at azucaro at gmail dot com. diff --git a/vendor/github.com/antzucaro/matchr/README.md b/vendor/github.com/antzucaro/matchr/README.md new file mode 100644 index 000000000..5aabfb1a8 --- /dev/null +++ b/vendor/github.com/antzucaro/matchr/README.md @@ -0,0 +1,12 @@ +# matchr + +An approximate string matching library for the [Go programming language](http://www.golang.org). + +## Rationale + +Data used in record linkage can often be of dubious quality. Typographical +errors or changing data elements (to name a few things) make establishing similarity between two sets of data +difficult. Rather than use exact string comparison in such situations, it is +vital to have a means to identify how similar two strings are. Similarity functions can cater +to certain data sets in order to make better matching decisions. The matchr library provides +several of these similarity functions. diff --git a/vendor/github.com/antzucaro/matchr/damerau_levenshtein.go b/vendor/github.com/antzucaro/matchr/damerau_levenshtein.go new file mode 100644 index 000000000..23c76cecb --- /dev/null +++ b/vendor/github.com/antzucaro/matchr/damerau_levenshtein.go @@ -0,0 +1,112 @@ +package matchr + +// DamerauLevenshtein computes the Damerau-Levenshtein distance between two +// strings. The returned value - distance - is the number of insertions, +// deletions, substitutions, and transpositions it takes to transform one +// string (s1) into another (s2). Each step in the transformation "costs" +// one distance point. It is similar to the Optimal String Alignment, +// algorithm, but is more complex because it allows multiple edits on +// substrings. +// +// This implementation is based off of the one found on Wikipedia at +// http://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance#Distance_with_adjacent_transpositions +// as well as KevinStern's Java implementation found at +// https://github.com/KevinStern/software-and-algorithms. +func DamerauLevenshtein(s1 string, s2 string) (distance int) { + // index by code point, not byte + r1 := []rune(s1) + r2 := []rune(s2) + + // the maximum possible distance + inf := len(r1) + len(r2) + + // if one string is blank, we needs insertions + // for all characters in the other one + if len(r1) == 0 { + return len(r2) + } + + if len(r2) == 0 { + return len(r1) + } + + // construct the edit-tracking matrix + matrix := make([][]int, len(r1)) + for i := range matrix { + matrix[i] = make([]int, len(r2)) + } + + // seen characters + seenRunes := make(map[rune]int) + + if r1[0] != r2[0] { + matrix[0][0] = 1 + } + + seenRunes[r1[0]] = 0 + for i := 1; i < len(r1); i++ { + deleteDist := matrix[i-1][0] + 1 + insertDist := (i+1)*1 + 1 + var matchDist int + if r1[i] == r2[0] { + matchDist = i + } else { + matchDist = i + 1 + } + matrix[i][0] = min(min(deleteDist, insertDist), matchDist) + } + + for j := 1; j < len(r2); j++ { + deleteDist := (j + 1) * 2 + insertDist := matrix[0][j-1] + 1 + var matchDist int + if r1[0] == r2[j] { + matchDist = j + } else { + matchDist = j + 1 + } + + matrix[0][j] = min(min(deleteDist, insertDist), matchDist) + } + + for i := 1; i < len(r1); i++ { + var maxSrcMatchIndex int + if r1[i] == r2[0] { + maxSrcMatchIndex = 0 + } else { + maxSrcMatchIndex = -1 + } + + for j := 1; j < len(r2); j++ { + swapIndex, ok := seenRunes[r2[j]] + jSwap := maxSrcMatchIndex + deleteDist := matrix[i-1][j] + 1 + insertDist := matrix[i][j-1] + 1 + matchDist := matrix[i-1][j-1] + if r1[i] != r2[j] { + matchDist += 1 + } else { + maxSrcMatchIndex = j + } + + // for transpositions + var swapDist int + if ok && jSwap != -1 { + iSwap := swapIndex + var preSwapCost int + if iSwap == 0 && jSwap == 0 { + preSwapCost = 0 + } else { + preSwapCost = matrix[maxI(0, iSwap-1)][maxI(0, jSwap-1)] + } + swapDist = i + j + preSwapCost - iSwap - jSwap - 1 + } else { + swapDist = inf + } + matrix[i][j] = min(min(min(deleteDist, insertDist), matchDist), swapDist) + } + seenRunes[r1[i]] = i + } + + return matrix[len(r1)-1][len(r2)-1] +} diff --git a/vendor/github.com/antzucaro/matchr/double_metaphone_corpus.txt.gz b/vendor/github.com/antzucaro/matchr/double_metaphone_corpus.txt.gz new file mode 100644 index 0000000000000000000000000000000000000000..7902feabf70ea88801ce9cdd9cb920e4c1c17f8c GIT binary patch literal 553365 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�!*rHb$ti-75grbshCETF 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

ob-w_bVIZSxi*!fdJ2QKL}$P3?(o8m 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

#qV9Fi+-BDR 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

U3FUbL|g%43Vic1*Em` z+|M4#p1->{nggJfD9f%oUhoByOxC1Kz*n=YcB@2&ul04bfLLIB2p4?RKNz=iCgU2v ztNWG!b}2%DzTk)5H_N4N51@#nblxduO9W=mZk**iuQiTkNiqfP*{Q1$Y9=!vTs}RWFRbW>o3c5-kS%oG` zt1fJ~or22ARY%1;RpEtJ#AV zeN*1@X?dpGk9c8$=bS%6xCqKshxZj|6w04vRkFSei*F24JDV0UWdyVh<12=COH~}I zCQg~`@9_dAX#jeR#I$@^Hy1&Pt^!bEkN8ww*;l|w*D3Uh&$~?!65|8kzi7WWnz2%p zFa|E(FFm(SeRGMEd2Hc&H; ztM<&$D@=<|0*`85Xs<`_^=JdFD+FMttlfTF;aMVRDzsGTtCn+CGLw~o%%>r>AU{&5 z_7GAAlQ#$qUp^Z`NvKRxh%JbiMo>U%4eW+793-yhDV-H6rDY8JQu`=q#h>~hhCFk( zUtz#x&rKs6<&(!Ymi7`v*_Fi($~{AhAJ=Tf=onYov~Z1e=~$%I{yN;Dj%DQ}eBCh+C* zoK8;p^Aw>JFm84Xy-@pP{ZkpSR6$I9+Tcm2>-FS<=MKtxH6|hERpm~0iNYB|8k(td z7YlR7Rl(i+x?I-JNJEb;P0h8#K{GMHPaJiGb944d^YwCh@_?5bxZJmRIz7(|1 zL1`W9H@-Sfv(NPUbRm;y9!+^AW>ch5U6!hbQ0*~3w=T1^O+rV zWwfoMw+-Ili}Nqg`wqkcWc&poFx9NKho(QyHjJ3~q7`%i_|1WD4otpgOS)HEwDp}J zEnGq9R7;nqUI-JM^bYKZv)AN?S+{-{R?aGCNz99KPUbeX;Ow51=XtzH$Et3vdON5x z6uRQkglwf$1P*=cI2mWs?yGWY;b|0RBpu9jR5!WjS8nVf4>-?)qp*wgze;VBN@kUC z@TyP+r9vuq@#(GIyx36JN!qne+;JboeGzo&wN_1x{XYgTs;lP zzmyA>uOtCx`^)%|6f5c+V>t@g(k1dfgj7McP)U-F+B3}CU+_%w-2orX>7n#OpO99B zK2KDCj1={NjY4H#PrMDWqn8j;5ioj}AoyWX{!6@hX@X-~Wu@m|q#&`yu|4Uk1zjw9ki zp`&Rmi@Z|9Qz3RIoGkbtPxBmkKH{-5J8YtQ|Dd<`gGgWKONi!~+GL}#gkcai&C_^R z2%2E64BK~)ton6wsEpNS`cl3((#)t3R@!3AAIh}|Q`lB-qol>9*&=k*^r5UVF<%0; zGz_zJ@p0t}6kXbmi2_I#8ow=3Y;vZyQ<0Bw zj6<438o{?vG}QXvYx3D2Sr7#UDP>?yE02GT*9Ax00UdO4#o-!PWR>LOSAeusJTp`vb_zIiwg{DGYNCE78 z29GSMb4rcP;o^n!Gaa&w|OA(4KotsYv}R zdjliy26;CwIuK^8*09MI144$_1f-rOK*k@x2oo|F6FCt2F(TSss-ID^PCBAgaJg+T zr8!6uYvYfz@h7YpN6BCi3)^+M;>iz{(pa9@uzrofRih5OQeO{hLRv{>CRRm4_?+4X zfyl&8%x$8j%fZPjngl}7I9hM~QL=oTZ{H+0SQ7QSABzFoF?UyKuUQ9f*SouKh}Jh4 zsMuJT+M@@AMzwKH32O=@%vLI_2t#apbud(ny+=&%Op(D{zfD73B59c2*8rDC`H!o= zM?99Gt%F;C7vsUPSTP552^ftvB~0ey0?049RF45F+yBk0bud%a5*#D~V5H8A;`UsIB?CZ}ATN?VGu ztg=_8-EA2K!kJtw_wyru;=6+4I-oXONlN#!h(PY4WR(rM#SDImn87)1sz9vLo~~I- zNulD93v=-_3HF0)GVAX}{H&3IxUAZq;%re{dkU;31=gMdU+-fJ^Xol*FYWg*bw#-^xl} zU-(!KCr8O^se&bGp4a0Ww6puiJG=;p@$gvDG%mD%%N{;D*~3RCgsuYJ=Dg6sT3xD? zrpc{#eIbt>txkK%CZnoqCv%P5;wwDt>5AsG03Z@oYU=`x}I7fehLxj`v zLhpNiyYsuR%da=EG}&9BBF}KC#vUFV%cU`@;Fhv+mPU}*yER_2^&JjSDi!079dI8u z8;6b0Ct6z#3v6N4?X=Lh$}s%c!|w37j+*a6U8UE8Vm;9u7U&<538u>w2N_cK2Ku>>jNk76FRO9xsdriMV6{ zd)n=L;ZQMHc=@+- z`H%kvKkxB^V~G=f$iLs*X@tpRp<0#a-i=MUW}U6dRm>D)vAFZx3%zvmu?!Q z2sS(NQvoob!C}#ME&L994||{NxBJcpO@Dr*B*wF{K~dZM3K4(Y2HMT||WUVmpA;fDC= zB-cf_7VW@67rZdo<7=)}3g3>alKzoulhTwX{&0lAj>uIAEQ|83JXb!K%FO1k~2EER=H>xfw@YKTTWqo}`c#jv`e`#{Pw7rS#E zgqSEFeISnU@;1|M8isP@Rf%Z?MUiaVEuna!6)lMQ(?YO?{{qYaDe(*|W;wg%VE$0jrP%q^l*{nV+m)g#C-%2e#h z@ROq8b0}W%)1{Il5W!zG*{`G2jbSkXO~;9wyr!r^>aQHG^(MSAs9Pn~zsrNUd?yEp z`&EsSMeSq)OBcbY6@cXndw9LSf8vU)2oF|~?X?uz>*Q$cXsLwMG30fz+1nG&(wc4& zH+8gREDU<#7kr>qe<%KVJHB@b{B*g#I=(cC%lO_zE~)>-Q5%$QY*H>XEITx34ej>d z+mAo0=hW4w7QXnUe#&4{>K^kk_dB;~7GHW5hx|INIK`J)35L3?T}J{xB_r)qv+%Y5 zyq%7@Q5?+l-%`)i@8|&XQN;#VEsEnh@aZWMTxaU&LaA+#&J=Oq+B9hGJPEg zQ_wI2-6H*eY6iZpjs4%ozH1cVJq`bSeE;_b^Q9))fBgx`{r4Zm^~WuRJ|%qXdVp7? zhmID>MjoLb9`EsjWg5NCE;`+M&#T}o>+Q>Tdv8`GLPh_R_`Vq$t zBfO(-lr{#RW)8O-yi@{BVQ2iMqXAl`MDdlfry;UjfA~o1sZF(k))v)-V};cxjLv`% zN`|%M&wRSzrcBma`^99ZDn(Jr>vWzL+PCy@yTyySLB{Z{mfum{@B(53BX;z~g;y{4 zG@jnzg(*Cb!RL_w4zGvU0V#s-h7Nah^C0e_M~V-;1U$e?!1YL{9^Api^c|iEQDXR3 z9x@>H?pUltdQGZt{41~UofuAT9qyp`|8r;WU{b~RF2CRTpM1GnFPY8&JKR6wrO|7^ zIG-XOiXnHAh3TY_LIM!}7k{~{jK z>u<`B0(0>u(LG)&lcpntVij8Iv(X+bV7E*i_HVP*aSi)bt6a*u?&sUNxMevoUA)b zcUHk)WL#El+e$HO5xLNrwFh|DeArNP0*H*Qki;;l4O>FLLyRTG!jMks<$}w5VqUYQ zYC`J?VFWm_sc^%~>;t^ahVTqpy%c*~EUVVbykpZ9BB?!I7)e5zI5;##EPG~2wjn|+ zsUuY=<5}L_XX#MJQ~FU~z^~R=tO3-TH-u%}Fc#B>R6%WV4VU^x4jD7|R377`Xoo{! z)5WGTJJEIoZf zGxz|1=<##J50nmY?qa!6lt0(gW%}aw_F;n;dj}QQd!*?MjxAn@Bu8jMqO%EvE}leE z5>ZS@YL6E}6XYlyL0K-P1{H(xp|BE)L!w7o3t>Ab4>9ip$`!yXA)~4ZWRzxPmSWwo zU$CUFd@k|<*Hh5?4!b!4FFz0>w3QkN;Dm0nI+FDPdkARK_C*lrVhKzU7&0H-_79g8 zHxKIs&O+4NFs%6PH5*)>?vr+xl+ocJ5>aH8^n`E1;b(lN)MK8@zzUu!wL->o%mWMB z4a~{-)-QKB_rp8C-S~|keJ){v)dhm>#}wOkwg`xmS!Y^y-Zq%1Y>Z$EC5I)Hjj^II zcgXKJ4!9Nv&&E31BreuFq4ruvGJ2t-h*y8)x>ZZUD$`s|1>dp`_ zjj;OYG$OVHWqpX?Vr!Z-jVs#_FpaX8%0`INn~LKBFBqkB#;M$n=F7S6hoz!Ko9{`6 za&~JJk_;&BC`1!Vo`=m6--wczbp3uu-@sUM4Kq=vL^E)S62t{|ZXdGifOHaHzRC}H zZhnN{G#x0W-o8d?77vgAfXksFnxZpMvhqNB$zP}O{6S4^o%&PUO%(DvGS6a31utJb zN4dodNzD@u8dQvcxhY1Z3PNHSfX+Q$IMPQ%2a5CUc*RX;>P-K?@BZ#H_TvTDrnR>K z$1Fr&wUb^Mh}*03{8(z345+v#?N+yM+x9gF_`1AYD#{+wP|3=9h|lEk;rRi+JpYYg zN75L?g7@hTAcbKuJ(WaQiBt0OLt3S5=;G}P5Iuf*I0PDvQU5a>!oULasrbUz>Ie8* zJ++Nu8oT|^-C_3!*5(~vxX4iud%QrgQ*KV1h$(Ma1dY@$Nc+oPs??1czv&cczRWy7 z%(hoFD7boKS8FR*fWffIGbe`1IIj&dQ6S^=PCeLb&FLk5UFek_ODi5GMWkDAnFE6K zyzS(UHi0HB#|WQ5Jap!yS||++(n&KaHPC(R@b&3|%QLpw9o4OWIznam#B4lr`8L`X z?{|tIw;9HFU?0BhIlzVk2iS3-LGtggqV%l-yr`!4)Pr($2fU$H_hz%-3!gsKwrqj- z)r0hZQ2}wM*PY6x?`cPtE>5}TUhxHfbtkPUNmaK=#;3TXpmHSsno*P#K$a*k7o{88 z5Z#L5n{kzZfE+M;KP6gO(}KBNoMpUok07hcx3tPkopb_ur<6Trb+he@)Wd4KB55Rj zWfRNSNe8Kfef%aHzgyghsQSPc`=<6EZC>F!ei01s6e66;i| zG9aTDonDlbTDm9=CE-g)`Xg(lf1Qr&3mqbOfQ4R%rya`9xsg2$ z5|&JvT@ica3d>%bx?%AOJKOK5!%)Q#i3GR2lUSFa3K}tmN+xOm^D{Vfp${B*b(SNO zL6Z{#%|{8KO}ebFuaZHRbD{OsUT_HM;{4M)J0W<1Rj;RrS(QXROkV*CJma@gB4IG` zhJY<5{gM%T#4>srWfFe|NjX4x9!GpWnCA&ucz2|x~*5pS!+2x zBwNE>(wxKdl9rGX)3V_%is@3deE5y{1BW=keYGkxg^z(i;Cvtm_HCGYD!P(amBk-@ zOye_hlapO|Z=$*{=3KWtKrFYf#>r=+7k5y1Q(GZjvkG|BnxYntQQy5Bv{ke=l%H2+ z#7nd$^xP(4;TntcnJpxR&+F|YOl8*~)^~PK`VME>SGQPWzM0d7*%p^#GJiVB#$(Ze zIR1pnVI+8b) z*k}G-4kf|JA~|tyh2L}iJryr^((%l0R>W(;I6&k1VbvhsckNIPp~uf%J^4Ti=K+PFhrg7U zoFfN9S@W>XB^>)2o;Q!U6c#Ldi|rG5)-M!bQ-Vq^y}`w?wx@ zvr#Nsj9>-XG6W@}goxKj721I;xW%O~g%EqRyPhpPJu=fN#g%6Jn-7R!CJ`r~);24T z4Jnc%b|B{t7nt!*ua#KB>NT_IBhqvEXL>mH{Isr!+baVt3pDIdjX4?-oJ91zDaHS` zP>j2c9`lF@fi3qgi|k%yw|36v_S~G@@hrS;9ps2Kg2y@8iC#&%V{=lV^PZl3u7qm= zH$Xl%facTNrky9a&ot6_-sb)mc};+JrtMF(re5A~A@kZ@a$fNn-e=ka_RR0`0&$(O z6vkTEV;o3^Yy_f0GROfcl1{QLO}m~SER7vq%les+E|NZdM@skP|sCH zqPv04HvLVT^>1}>clUq)3+#>#E=?*^Nu~CI_kdIVq$5jlkJM9*TC*n9x!*XnvK(NV zM}9FMUs^_nH#HFCvq~|QAT`(eZdrDT8N&VV-+!Fa-~I6W{`dVKr}EEu`F+1h|EC+D zgzgf{Kkm~AmWBA=`@qif&rrOc!q|RReWB=UKeC?x;(tcgQ~t?n$K#1_M|PKgT4*s# z#?VmAx=(R#u!K9ahx@r0Fy}B%a}I0HMtt5ViCF6Y{?Gll-|4>;|7#Na^Y{G@ktW9` zxzcd-KB!yuH#k|B24?rW4c`;)`;fE@Rn2MCchkHv4Q}dP@{DhG-v9ZqP7)7m%A@Ov z-rP)n2yNDse?UPn4ws||2$@tcgjA+oIC*uDOQrXoHpgVvK{Wg7!Jc>e5LJRZf;$0O zR%05@C-_Y8xg_mPruF4|Jze4pr683A1xaHEJ9@gz#~$;7tZ_?dn~@~BEO6pdtT!dr zT_zE{LWn>XvF_&NQl-q{qNFWMQ-?@r)K)DFsF6yDvO0~giWG+i!REEcsB~^Aqqe1% z@Yhvc(&W#kcDcf+6xT@UL3*hs(5z>mkO)*aY}}DOIW~cwemVpbcksDu?0oA{jK03$ z3wh^06tQaEo-GBuem@s^dG;!FGWQs{kr3F7w{noKM|=a=@Yd7PVhvx>8A087V^1`$dlrQhe@kX$*zM(H^8FKS3$_bi^uIMqR=aI)wsZlE;b;6ysNl z?g|%#L@(N<0G4!Fkax1RzzTz-;od;)E{oN+ScjnVVb>xUiT4RPZ1}gg{Ehb1+USG7lSEsGul;fet6e z{`us5#6>{Z?XjX11e&fV>KmWXH?rj%onmT+lZ(&Pi4X_8#ic^UIA$!Da+qH#$>sfFPTTCZ>+@{UGo{e(*fFIh^#$%`RglF^JKIUaB+ zBrDSp>26pDaR`}}Sjsq6Hpz&VB;x$B2`3>ZuaYY&7g{BiS{nH^eUPJ#O)}M)#Y+cr zLRgJcPvz9rx#;5_MZ!4);(MPe#i<*-&_scImpd*=mnaBH(A(Xu-C{qiW{XQkk`zUY z9#m|8xr`n-^#iJ^LtQzg?nb8t(C-~CoEMiguE30xpRr=mp(-{Q71<=?c9Gn0Di@7^Si=?~$5Yz&)?Ve^Z2 z$z*&Pr~M4D!lj}`4+aIPOWTJ$niHAH--Gmw2PIa}m4*B&QC3(>0TgJV+qC-wL%^aF@hwtD)!*Dqa zcueX{_&M83m7F>fgB8v@JKj;tG$c9isKgCo*JJ-0=EL zxxd;LrVuso7`s2wipbM;R}nXU21<56j6c$V`i|FMFTYaJr0Fa>Xuh4DCwkA5#ZJNe zPFZ!gp+7iBxU2J4CFz?3RWelwQc?m7DzM~(mbLGH;GYx!bN^rer>Gih`1kS05An0a z7O#<$=M>F5&>&YRMPKgu78KQ{;!zEmUk=q z<1qG@;m4KyuW%8Nvay2|C4G=vZE;D-^l_SxJQKKEZEz8AA@P06#?;K-JV>!!L)2H%quC%Vq07?GK8N1RC4MQ1%j6eJt2PV-C^1)v`%yd94_=#O&TFni@muM48yNR;ho}5{qG&dT9(`o zKgNI3Ps*k(ca{jQxT)J>ty^4x6gc6)f#QSvOSX86OGb_uKU}7^Ai0<-5$arxT0)Yb zlhwusZ$Gw!7O(LJCW-Nm&VvvrYP1Eon|SFD@-R$p~@&Kc-rpa<23xk6?MD8g%;~Zej4r#z^&aLl~1a1!kIGD=;dJ?O@ZlPHW0M1yEQJEaPB#_ zP_&FvX_k72*)xw%i#x|$H^ITkP@8rA#}lm?X@Ej05l0Pi%Vqg9;CPG{;mVA@$~6wy znR1{0r`g3Rz7A=WbH94TC6W1ddOy7=s2%37rbEJJN_cUs{r&a#KNK(^( zBAtuzPGpOV!YnUuq(V3U2u?m@B~L?V`Wz~y)tb_3z1s;$rJ;kl0DN&{p>83~C`1Y{ z8It}@|B*qbm~vu=XV!3#KRhrmDUFhMPh--1j7f=+o#ctOyPzpecUSmHb$})>G^H7i z`NsWl92!rq<1n^cv@0k3A7AJC`{(cbcv0{_*q1KgQ;VJ}-Eyj$_;BbQ-Ij^i!A+ zo9`%m-^UjGDITlH@u)nDuwx4$3M=C4sC>lcA=Qmj4X$~|Z|%i6t;TBfzmOvLbF*qb zwqG0{{+Sg}n$IduwC!pvTd|I@+H~YSRV&)>w8E;}vFxj9EbQkODg#gSN2&F~1@LKw zOCj)Nm_o_TtDq}-Seh+jp1GoM0D zQA~LmoAWgOgzd`}{beVm(-P^1ln;9@{?Z3({FI7JdgdPOTz zE84k1(b5R!)W>SZ--0&V~F{DRzq>v+Q;TD&SG(pC&RLL4<9x0EUVcH`z zkEBP$A4RhfL{%A|nMb3RqusH`^DuQ;Uoz-KqKF;HkR2}6HJ|6(RS=FtM}{NcSO_U! zX!J&dx8ZecuGF*5!j+QXExuDprM15mt^K8Hj8(%`Az6sF2P_TaR>pXRF_pm>Mq6Ci zAVpx5CZ$bY(I{!P=HBHU9W-f1a||o1i-v_uc2Qb#i{5-+Sl@;`Y~bV5h2TgU<p`Y*y&!$IHO88ccJvlZH3wmCKata=hf#%ci2jg~TbrFZp2MnArZG{z6LXzBvpHgUvja(FC9&uEUoC*uY$l{4U z)3BGcj{FR=gxuuJE?S3R_Z?4il?tBdE~KASgC-uURwoZ$L4dS;b6}>dZl>9?a=!-S zl%CVfS>46X-wio8t8Jb&n*{hY2|&%4RPp(`&`#mX({7zdq11^jkJUr24D6(l%0d|x z{%#SVbVqjzO0m?GE3ZfC(1{RLX-Eysge91Am(~fCDgx3&bgA$a zQYD6n(Q9HKUyW0{q%bWyDCZG743le{*Ay1Q8KvI&sQk^rI&~Qce-B4`nzo{?Xe(?* z1EDQXma$LG9JyMJth*p?4s|jz(}XDc zt1YjXV!@gKHsTCMfEL0?KoE~ov7B=HS9FBT(#qs?v~+swQ?}l4ZDEF8NySp09m0Nm z<1*~266TyUxz11rpBFS}Jp;=bsmG(oC@Xqsvf40F0%;^O(}OVr=|ZEBJssq&#s!yG z9@=FYbVW_cec0pqdvjvP`)aqrg=U@>9ALzfR$Y?1O$$%$222PT2dPAzEIFdL&^J_^6Ngn5`+!4?F z8c!i%ylK*u3xs3?zn5j1MUhKwMQkJY_SHhLsZ%!8sF8D@1Kr}1OMtTj?Y{8Qd? zCMjK*%;Ny3t@nq{r47N|xq# zpE#toWmQ2s{|M5a{M9r46*pvPcOt#HjwnbOG|kDqEbdQzKQ)$cC+9OS21sdkV{-mX zJ=60;2_cuc=QS=xucK8qC{E*{Q=}=^^Aj!=acm4!jCBSX>ok+b!4=bhCrLFi(%6Y# zDP2A9aH)ucF;FqQca-8xTkghl2-0yAj`q9BpNsUV{UnOF-|LOkn9PEyED+PgY8LuVOFa^eZp zLyq*V*`AXBEPl$g2_ohpw4V!sTY~V%6q@IjBqUWMIHoX$ni(lyT0V|VZ~IBKzD zmt4f?f#<^$=fd!k>T;AY3!o?;AeQtBy?AZ)Q~WUhp2U zLg583g+I^(*9UswS{QpSbU4%geND!f8QONZP@Ur^y4F`u)8tjLSXP$V!^Kd8c? z(j^CNVK1%}k@?pk-STeo$j`SQ?w)X|2mx5=*oD6Tty$gj{y^J(9_}`hqI`6CE}viA zS;%`S0e*~l-2ZU5q{|Au(+^q|d7y3eAX$igYB6S6kWvdnst4LU{eVr}=N}*8{rzU* zmDoOb_Ra;_(wj>^`0t8-M(j&yH&UMc7*QT;f@HL?sl;H53unCtT80XMC(ai#aEA*$ z;66v%jV8$X$8~%Q9W+^n(>WYk^yDTV=%T|Ux+m+eCx50-7_wYO#-6N{4gc^2^MRh%J>dCd>URG<Xy6zy_mp{tR`8bp>geqS2<5O|a5^+J#*WZynT?Q;e$; z7Z<8=w8~4>iG2#9Whgd(3yECKl&{PbO67H7fpU{x9d@#MKg<}RRjL2PwEjX(Am{x6 z&pTWSVXvAglp29^ZNg|u5}K3e3m6q-K-0+c{1Y=GG)E8j0#2F^{9U@_T;sw_wuBs> zZZP2wC7pJOJYbhds>8HxMqtH)MzHlGXT$D-J z;a2n^*E|S@jPJ^Z*%}d?Ss@sbiqSwvT2@ow4$>XowQJB$C9B-0aCYG*5|zH2NR(*B zQ%hyYOy(KlWG+lvT9KWvgO2u@HzY|!LMS0NtGTMwgl0IY+&JgK2kmHizy_i-9vfD` znY@^Mu6CG1qeeL+m9aT1l@&QVEel>O^rS55NfA>K=R96?nDKctLbOPc=cSJ6P@@<0 zs7Nh(au%je(QC|5%g$$)^0~z6Oyd%U5v5M8GM;p_XME^MUVDrSv!&gTuD)CzWZ|MU zQJ@FfCiOsjtTMvrw!l*l(h{Wc%S20YpgP5>IyTw`J$1wG$@U}{JvjC3Ty$v%_5@WZ z;rx+)(SRM}^$(7=)!XDo7&=CMw4JPTZ$j4i1ndf z{3HK4bc6KbV}|d2*=DM^@rK8~4^NM{RK#)yIu>$wE+O{>VxjS))K$YQ%DFD{hO=A} zxVN}qaP%=?X|k*x5{Y^xlGHev;h@(XnK=~gqGN`VrP20q8ELsUFWQs)CY{b5jC)i9 zcm^?Ib&TH7dD!e4gEfWn(+W;+dQbcTr{}>MmfPY&EjY1RGM4M2g@ZSXx-4|qXa%b+ zD7cR1lH27SJy$5%$>cy@SCpmLYli$l5r~v+^Fu`ePWd=P;ndPb_`;QQLu3OHJW^3X zoP+YiYgg^&O$(2~xV6*CI}geSo;pSgjPq0bH`2zbWv82R>eM-#fTQxOt=5j9)T%%( zIR!+LU&;#^3OT}u6;{L#Np;ZzvSjQ?jb2Q~;ATn{o~&vmK&sLNlh{F~3XM5)N6^4R zJB0<*n^-4HgXGbOHVMycmCCcu!JvxHeK6)ar;?q9=HiFIvHL%z&-V2uqPX4X2HM>4LI9zQ2wFQ9C;C$M?MM-@}+t z^lwaG+*y2eW9nGb73Kk)_XV^Sb1DHwg3ZXwYRIiv}m4ulS|jqNmOe>4n$T{~RzUKWS=@REk26-ot8 zdm=YxI?_*`pjwnSAyrJHohvredB)~j+JW!En#cPToLEmI&y=k1MGsCs*14Q&$i>T~ zsSZ2Cj>biYIb*bWRFdecr7Cjg{mm3-J`Wp9@(>U%8Wmnq73*Ct2FTf^yxY z>x|vdZ8*=<3^VK(Ax2?t%Bh1+iVg@$emo2}sZ6=keHqfHN~hFYN>#IrBYH|Hdx5j% zNV1F1Qh1;fV$+3_<>kUFJ07C^6-?gwD949g*(sF~%NZycGK06AKhUP=bZIOY7>n!i{fh}pX=V^*<=gPe$@GYe!js^sIv(&+$HT5{981-T z+nP#B;np}=enq{nfC`-iWS&ulI{S`;RYbila59v?rYAyRYdHB|A} zU{M9dHMlfl++efDEiSpy?jTFNKQwA;;ex|l*u2l>R1mA`s@)VF6B$B^1P0YtZrQcw z)|M*^3hoOlt<(T4ED4U>EIHe>DZPMBu+gT)sMCVG1D&E@Axn%NYBY3MUo+!X+lYR` zm6&Us#x8St&1DkZitKI`rB)w1I1OQCni)j)o2H7P4k49a-govpZQyiR2wPZo?4ma3b6a{>!?D2{ID79ba%aML>aG})f z6KJd~I;lAkfE6wo@OdK*7F|>fd zfxM1q4&(usBFLq~dN0L8@Tvomt6ILmZ0tKCy2holn`D$WTxhKrXS$<3cvGS&g@0Vo z{?VTPM|@@=h2jtiu}33j;SYTI$&ldDq2n=Vh_9@tKvD_229-mNQ?7S!1f3)Dj=XU% zZp>fb(8?(4Fm#Ix1CHYk7ivIHGjfVXL5~;(fgpl~aevEiWwshnp{^JeTZ(=1kED{u zUvJoA|F~r5Y;Lpr)&P~%<2mMUv^~-``NtKP)E-WCd!PD9#Edq}Kdv4HWLbw5#biD! zSmVM*Gg=nJhB`S~I_J+NHPJ@V>RXP-(w6eVcTaZVIBy<*q`lXVt4(7ZTT2ZL$4mTt zmyC0aJ#TR-Od(_>8>5gSb4SnOkra6P){1!v)zx67G$chJ;J3lDSO;Uo_-*f6FVv#0)qmJ?8oOC&i#K%XUL zt)5F<^a@#8qkkLD!)<7-ZU(A-C~WFLU9>Z_1u8W|mozS=$MBDs3g@YFA2)F*@7|fd z&}4mlJ7!n*AoltaADrU&_Pkevskv{hG zxJLeI69H~5O(Q9hYEzw%X-=+SoGO6XCBjWANUk8%S(kRa;4Jz_`bhI5eWW>~Niq)a zWu#@g7OO_}oS<<%Rk-9se@*tL(ThysH~Q)p`I4T7Ji~3NKELnh^E~NP&d{1Oyr(*H z=&?o5!hw4zYh(|0nf5+Ygrc#OB=IHG79&PFn#g%{9Q2io$MpjvO(=VD-ik!;9l()Q zND;OlCvb~|PW6u(K>8rZczP_iVKW|Ybj?>r>%a3L|8D<)f9 zas#EzEA3AYhF(NMhw(RVweOC?TSuQ}xq<31hw{rmw%zJ58@b$eIcRLI?boCmuy8BM zpHsE6g`r~~nsoxSfJO?fps@zb)E|0`plvB^;ixJIH&-;Mu4qqvVt|v-0=0bj+RLK{ zWnviyc<*J{#wOtD3!d|-e`hi2M4)7`>^%>>P15vO z#|EC2*+g787`5;FKs60dLdAF}GrLgtp`Xiyw~ycD;SMeTDF+{DBcEA(lml%X>@oes zBQ+f#yr@SU#HQ284>g`~X^bT^<&_tH`i94E8-B<~KJ#(EG8h8MkKxDs)M6GzJDp<1>{|fi%p`)5xgt`peg-uki zB>#V5Ns*`==T)|V(iP*Qx@y5>l8C(F^n%9?9;QB4#DN;97_v5}=o%N6GpLBMLQ6f& zGrCe-3Y3hC5Q}YbVKjG$l0p*99b%>8C0a2cUIsEScicVf^>XKBQCCheP6kzQVu!?( zPuvyiClU*85$Gw%7?FHOxM7XP3B%%*u~)%*Lg|yXAy!Su>UwLLTXbkjL#^gD9#U zik8dqtk+>hDLL`2x<@*_{Beub_P60Oz5c|mW|a@q9>*o2$tvPSL$237yf8Q7Kes&n zm2e7w&m0j4(U5rT^fK;K9)Whb(t{b%G~#GWRkj122KY$lw?A$lgqW@tsrt_}BA^ZU zkK1(y970A&nh%zG!X=kY(=O0PCA5FE|LYO^zux$ri$>D$agROw3K?%K#A%z^JvVCn z%7kp#3bjq(bj@9rGUhUOSd#0BmR`-#N!yx?zl1B6lRGqgA?;P?dTZF!Nxel6Dwc*3 z^sa>qnxAqzX7h-tNtCQ}(F@2&5?ZaHg?DjZxUb=$ZAkM&lL3XfI54)U#neVE%gVs$ zIR?4O$)$2=PV~ISdAUXmVargC7`+ZsWiIftA@>G{{b(K3lU>DqbZxv7qxgu*!z>Mi ziw>!Oq2}ahG=Cp<^9qZK0Gg zJT#)$ARcj!{pBs>*|(quMG5F^9M>-l59uDq^n%ru5_^_}e5cBc31| znCDSWlvBas9`&Nwge;Q_d!`?0y8fJ<@I>d)KhiPv!zmS>l%>?~i(fRGY(R=WLH#@_pxf1 zzk>Lg@`l!o*EH{Jkv)muiAO0#-{vlcNeA5t>K0m6c5eV~O?Z~}++JvdB|WQJKXDqq zP}8%fO{QyXGQGUh7T5#yKj9)EN_xS?JHe{p9(G3<@@D8r66>;!Jj`z#}QKg$?fhl*_i zukx-5WPaz*a4XV+rNqnGx4OdxAy|~9kSi8SmQsvAR=r+9|Edu7+1Qab39o6>;~EDE z6JVK)P}KMw;Wh1STw}juX1Nuxm=##sg*4`9GzE{x)0zZF_-Tz|YzpmWT(5HD_sSkK zqHNCg7LvTZ<9i?L^@B!GZ=q#*>QV#EZ0gv-<_bA_J8@0N`L5|WUw}yvDt9=WNfwvm z#g(9AN9L>$YFdtWW~`i>1?g4EXKhRwz=AxnY~S{7sp+*@3-NjBklrAG;2d|nB)qfW#D>%J|Fj?|($lD`z_ zpi)MSEf@46RSwH+{&J(MQw=R`2U(({OJrezb(`2xqpkhSK7VGLKliiuWzCzdF|#&? zn#_MraV8hKqh)UExiGd2!NZL;ZA)I`pk~_Z0g*x|X$}%3kwZKhl3$jzOrn%M_-+c? zs)szxqd69V&6)=~`NaB$QiFVsdmLH4rhT{T2lS=!JfA6Y4^Z|{5sauXHFIYy8m(zx z-TGl&5zAHho)5oS)3&-bw$&wD_;Gf%C5@M{yM#7=taE4a7BRM@C%Eg!bz^7|9py%= zBaE;+yo>w7eGLaeX>3o%k~0sv*&uZGc{r^*tW&YMh(HH-Lt9*E4wev&+%{_rZ`TEd ze>~#_NGGUhvg`vd`mgB;>>7_&LD&=nCyx;8%2G~#j30LJOvsIV3A$142Oa3KrU#^J zyj;a-5-gP;dd^uU3FHdOdHXHq8RI}-QEu*d8JqhA_YYdQSa0rdX>1aZ3i1VO;cJ=& zrb|YeIKaM;gT|j>4#5oW{WmanQxNy<7NV+n$T}VF(I6owEBoH!!pM=ECY<1kK|fDZ zgc#+6S0Ap(oE$9G_G#HAEqPfN9S>+w~j18s;cMQ7ua8mOHK(RvyF=%IQ z0jv8xcftY~cg_w0tXn%x0MUqRS96?(OWs*TVAIG#visqNomWLe$otHSlH|r?9C802 zaTg!3}G`Wl?J4ynvKn)#I z!icme-H@m}DqW*8AnIat>baFTFT%-ssKvEQdcEY$cQsiP(J9{p%EzqA+^jM(6^I}F zQKmILe_Z3KBtu?mYZ#H5_pfIp+X@#+IS|h!rV>x@W3B0#-5TFqMuA1sT3D*t6OW-P zfj1673n`X{V-xKKS<{hx>+NF(ETfPlP);KTdKkFI^T8w{L9U3reZD4ZFjB0C15=t5 z$`LLV!Beducm-@s(6x`hxFsvhKS5WK?CqdR3hz!_)1#mDc9#K0bsF6ip=CevXB3@p z-XGhb)$1UK@q+D&8`>_nSz}O5<&N&NgD2i_V_l10AQ!i#Yo-JLq>H_7*e_bRAe5ug z!jq;N_$UHTsYr)+73q=BQm^Xh_NatsDQxB(qcm+amZb(khLnf2&2>A3&jRj{1Duh? z>S)t2&N3b?G{zgjt|uc@2{uA)@3Y zgrf;8;UF}#sH}5J#>WD#>2ck9_rNH2Q7#RJa<~RshWB;X^yG1kPjx3U|M<~CISfOm z9$WM%mn8|$!}QT(-aAnXk9Y)Pi1T{nE?J^+KiFUieFU2jpg!7J*aek&4|iqz{#`0v zh96fa*@0l4Od{-4l&CkLD?4_D0ll?@PnZ4R(j*~eern$TJ=2FeU0ED19pm}q;yv$+ zFSu3l8ZP_O7;HH&*acZ`NKU;a##^#F@kCY<4Cyqu2tvICz8-9dSMxGldd$^wPzQYz zQNHfdAbQSo9wL-Zt3sA_SW-@sjzv8yy^WzGHTkq!cy{aflno^fAi^6y0kNj@C)afT zWMS+#Q;d4}S&c@)qdeiPFe#+{Oh%61E;VR8bdU>zp|g*1k9I{Z%SB<03lHTC;;~yE zlef{E5lab(*8!S88W|Z?PC1hOolnH-K#qa2jVo1!6bO&;9aG-fK&>&Gs3C`<{W8-L zY;a*i|KOE0IX)od$7w|E=z^FUYth=mAurC=$`!sq9Wp4Cb*Tzmv~{6p`LT$B9rm{; zy5UICz3{V1i@I{A(K(doc5-w-U%0*su|%*OW5ujG$k~>S>EyllkoKGk$R!s|gSv9T zM=u<-+@VXjC9`bu@JAjodTLYq^D=6uhu^1uW{)Ku#=H)Oo|td z7%$G|(V0BHUu{4t3Yb7^i9BuYLd|>zMVCL+CL2|=iEAhEzd|Y%XB#(@J(z+oY*5p$ zGzSe`=nE2#sC4LJ^9Ao$Ix+6qq;Yxdp-_15cr9IE2m2`3v5GON3wvsLSW^T8iffe3 zLS?QQpFT>PEp>j>%@!VaDyNqmJ}nxxm5>UGP!%fej;b_QmFks^UD&B~guB$+ea!=G z%leWIhN~A0y2&ZAbb{QIV7ZB#MSfD>2vr~@lUuKY83<}2s;!zhJqWy%SO*stm(2i% zS@aoyan%s3CL?d7)!mgxW7z`h1bz8E<#ncKTq?_j+Edoxc@KxKaF7s>L_PzS*?8we zCGcE#9Hi{S^FH#22YbSmTIc;Kwwv*NI?dThM-nMna`6k$>*unSt1txVXcwXgR7&P> zoJw&mAb<@fz?Nj~WP>J3g|Z4SDFjluM)`35R34X2dHDx#D>(-2-?H}|3`8NvT&s3+MXw{-p8pCz*!r#b;Za@7=q3kx2vUKC& zay{KHc)|RMzIgdWFG@hX(4H{HEj@X@@r4(J-S=e8B6Bejdirxqa9iQnhl>u*Z`(Zm zxg)$&n8sM`#`y6v(Cq1njH_;=GF)EbnUZybBK1^R=rG!9;~=NLqdge9qB);D{YqNm z`|$BH)5`@<^uoXsUV`{|!K({&lEl-xNU$<314a$U6LuDWDU>P+9&|j>>Bmnv{TKuZ zZ5a3YJ-X;{g(zx2@UF)b?OA%FjZDN+pMM?Cc(&NTf%fnVKhu|Y4qvK^@BiV}!fD*k zFEDL|OJkFT$MbC;xcUkn1*XmFPpb!s_g~;i^QL_1KXy5WaweWAwzAY|=uvfwM1Gc4lrX`0D7*09$!2Pv!r)~{R6+2VC{y2xv z6Q?nqS^4z9%^`i{_L4t=_(X@KK0V}QK9BT<#}gg=@w9npEY~B8ryk_$Q|OStuKh$~ z(wZ|0GRhJUEV+5`j$z1v0pyzcTAX^-F!wV42F^hF;)e2qG|9mtU23Fl+GIfv zv5ID@AyOXeRn0rt-5;>A}tg1SNKhy8W@<;EvW-3SF3 zuP^tx9$SQu;WElW=RL{h;Zqr70=@reK3&h6H6BIfbQZPONTzNXO+vTMVF;Vj}rNB)KDdH3&0H3y~2P8aCwNM@3jJ3x8wou=~x+WYnHt^A}D;5>?8n z?0C+Y9{<{hx{;c=11%XM6~xLM!%5KlVg9)C;qp(kr|1bE^39ABB2y#;20gS*<_X)1 zKv=3UTBi%|X`rGZB~GgU+!U4c5qQ!(>-a+T)YZ+S52w3~Hq?zv{5ajZbhM@v=`Xa5 zJW=-Yd9qz@P``Y*;MsD^k_s177b}WFcST3KD~q3nEhMF$njbHfHG~ZGq?pzwPLX!> z&}8*lt_Wqk|B6FV_s&;0ln+{y87})1hQIXQ8jUs^Tu4mKI3Jvn{^u6hPlNteqQL95q4~Tr~m#qUHG55MdbdH=Gt`l$>z^hy0=?3loGi? ziq?yI#1mdnfHqWuHhkpFWyJRyExL82^2>QWyihlCKwa3=AldzRi7zufa@jmR;!+Xo z%Mki5!^Z~JaN`Y>G-Jht z^%9Z3?4)YxZ|Ah8b@B}@t*1&!E9mq+xejD?9Xx%-7yUbuQiHPR!fesP!dEZ%+LPO# z^T!fB)E3Q@DCo#H^b}x&FZ*T2l9npSNzQ^>TnbYNNi9jv4C65&dY67fCqis+NCXH= zX(kah+}u7rYoj2_89JmFFZ`_!z1cu-zoPA&Gk#f8{#hR_Zd0#N~4qtz0jE5RwO5yx6F z^hp-6NzHS@u%D_Uh==VSJKj zgTWo09n{&`Fu{uCUHdCskRmho!~Djva={8vV?RoP)F&xt9IZ1bce{%!Yn59vS_9{c z4v+5hlWMExrL63Gp5Np4{0n?=DNy>#^&Kvhl5}{LGJ}z^A=21t=5-+1)l;^bXWmAtS zL?dCF8inc9n5`Wk#;`E+yT)xpBN&Dcb%*uiIdb>Aw~}> zs1Nm^j+!yd0qW#|CkoYh;pv3DjqqtXYqQxF5yhwkBEiUAoQU*xg9{pyg^~!$b;;-M zN|hHrbhm{Jw6Ok~8v+aC*5dpIt^!*AChudSrOg7;WaL*cs;9BMf3evDABxqe@y#-h}t$#G?%19AkDrV|pjGN4$j6T$gA915%k3@llJW zf7VHXX`%{ZmU+Z8M|nSKPe1V?fKG1b)$t82gm1P_0%glo^hV)^UNdBtKlt0l$UAW( znU^N_P;!S0L*xprV{iDV@^bq5ZkbW)B?c!|&qFti1J!Km1i*4j4HZM0plHxrznk4d zNf*s1Uk><^@<>HX3+3X~ zh01HBteksD`=$35bIC#(+!e&jmImgcmLcqmyc*${k|gh+c#E617U!xQKi!BtFKibmIhG; zdibnD9aEoo8s8A^BQA}>=0d9q1^V{{&N$Zk@WXLBwlEVH-`4}c&duVCOkGc2`H(|V&ja1igna!0;ihF#GvJ6!knUre{6=w z7(|}OILYjaIzW}QEA8>In5&4bIbQx#(F-Ugiy=Kc@#2DV44O|z>~9<>G_|3=;=~&;Fa3u`yaL`jqXl} zHof+-#mk}~5G)Lle2Jv=iT*g@`86~-Z(wF;6Xf;p4hlUv<@rAR^AgWzM1Ypch92ZGiN!f^4KKGI>v`|74hqur`(b*a zRf#P!u;|^pG(RS)C#DlAwe9r(8`d& zx@>XrWgS~wD(o=&yw;W;5N@%VB{TMIsfM3Z3^;mhOV8Z4ce%m(!PBBUT-YzrmR_jY z-sNJ77k31L$2{SyURm2>^7^>x*BV*U1=EF-4?IjKA9$Ef3uhB0Jvr}jVV!&;+V=hd zm&TAj9SW;Dyo>w73Zm)bB214Xcd#qj`iWN;b<6Wvx7&N}+p|yJe%VpM(`Sj>AW5Z7 zZGzAomySf#`Nl~JPfx1~L=DXVJwUB7JC!L%6-+aFe3OG#XYfhEf5PjC_H;%5Fx;EM zkv3AW2z>)&Y97de{GvB#wm6)A;*W|bauXq3{z>|Njr1mLT@(^jtstek{YnRQZRwfj z7GDD)phzkJX>dz}^XCU#*ap;}B80@-p99)&54jL@Im(g0)2B#rW2#cXOrvZ+57}i5 z*r+uwnef=pv4y8c&B(;p5I#6(o^WY22i3u>#oowuvBMSS!o{LnTndw@l({M=i=FnI zp<*b2EG7zEwnP<5>uq6yb@S4e2%hqpTYq{yy~TUp(<|qC0Y!+lTdH763tH%*b9!-_ z?>{K&>^fN&7w9aSsteW~A8^S7YwkoUA~K|LqJU{gn8x3vmY$|>H~0_(e=f9nB&)bU z&@<{So>3=T-f91gLx`n?no%TKY>P`qk|63vrc0D3N(62#T%5nap5~_wI(-msNug9_ z&sb61(!=EKL&>*;Ajy6sLu51rdN@wnpJSt8C_d+WhLWalF^|t5|D=ne(9z)?{EKs( zo?xd79X!UT*=*_i5nFs!A|)44TXzQv8qHZsc$~9TMKnLsLODD(*o3Ip`f~tEGVAO5 zo^ofdY-Ze3%-g!R^iY2Ln5+ETIOUVU`aJkML)qos;~h*Z!dv=2VapP{ByAbLLhfk? zUW0jhKI)|U(OJKBVlN%H)S1hB zDNR1kye1~6R`gmNrc83u4LB*9z3cHb&DlPvMdXDWhs~f|@-G#Ac|-F1arzkWs!f|q zXEb?+GbcJwPubJ>g+E8LeL|W&RWwNki!M4Lne}3O=|{C}#?VTqg((gFW+_)tN9QHZ2c?mZjc$`{J~3KMx~GqEA0$D!TXcka%%S{zO-#!(ym@%; zAT!Zt*kgFA(xXNLmHYgKPBk_Bs9)%8m=+;PYhKEu6um_Hy2F;Xvu!tzjqxz1Qut)H z#f1a842O}Y@pVnMQeIo|d?7j3?A5COXMU>P0s_+HA1CvV7NJ3*QtO<;#f$N5*A|z& zAm2ff@Z$SIqiIqhjk$|wXI^ktwrA$jRtFw!*tEK=7SDCKQ3iYRp`KizSa?<{I&R^_ zy0F#>WXWhe-K0*eHDvdWb0$xm=#l<5ZxfjEHUW_sqd@~aksowA82_*55C~CrN>uWJc#^9-bN9Tn;hfvR7pKghj^jy2-Fx= zhHS6#ObL6%691N-_;2wbf8relTY9t)l42K+*lydT3S)JaDwxAq^x)(}X1S$e3Q_lU zy`5F=P-#NjPa6%kyF3!P;-q7l@K;R8n-Brcd4WcBEs_|SnTP{Qgi?a{xI4y=p}iL%>=go4u;kvNODAV} zZdPr^de#x^q?koL{Z{?l5u3jd>m|!*c4}4HiS5Ce%;OXtN>9q?Q{8-2X=;kc!-(qs zhzrWs@P@tTp0Qs`6{Mbkri-+dXN&DU(>0f@N~lR^R$Fyyq_r5e)KO`2B4~{*a(YtR zsukT^z(!juiA^phJfC%JA?ZEGxrdY-9kQ1Xc5&?Hl0tjsZmUdmYu8n&s!ll#w1(Lk zS&)uQ$7`{1Vbg+7n6ZM_4m!&SqW`;Ma!T9cw!5c_I0yq3qXv=NsnXTmsE?<;M531` zAlm9o}E}$l#C9cae2b9lc;>d>dmwtUY~Yg@T{9?LkIGSnjP2+eV;piPy5o> zPC41vhQ03bpbnJgf4cLhI?94uT$o6}qxXeHH{%P#^d8fQntHsjAqVgSzujt(Bs_}O zLxNCKq-YOi5LE08bs<-#kMa{8pfS8@EnV2u7f;$7h)$+x3?yJZEi6zTW*c%I@GrWl ziuzC!kuA!-m^L$L@07t@=8V|E77PGPHA*f8H5sEE&_Zb5d4^JulZl@6)#S)H$PIxB za_X?2PVV}jaS@P{*kMJf`}rJyQ0(Z@%UvUW{|8a%yxZbZ=&#@*PEFs^+tAz1sxhu4 zmC~++*meMwUtxEyzUv7#&Uy|G3$lFbtf%!!&E}s=WW)nq^drStPQ0D$7@gU&=XWT@9FIU z+P9HvNcoi*ZQ-L<2s84LR`;{acsYo-5r#BSueUDh-3fkqj&y7=fxqxaL|FjGX&i1! z{wCDYci-BrtGXlJjiATlIdH=DXEQ#zr1L&G#~RBk7J91VRyEAW6EFJgvJwK~_BG5x zXJ|>Ne@Z)&Q)*1kTa%P27gXfQrP2-LCIzldkBWI%)cg!J1Jh6Sdz8OJa|qt-3{BxE zw2VS}Y+6qF(>>WC;+U$1DIFFh3HcgL5V;m)t_6{6;dU6RV?4B9LHrcyGlnK}ZNF3+ zMwK&qFZKKNfK5LHM$6N7|uIax& zQhv}s_y7CQlCwKR>!iAz| z03@i@GiWh6Z^0ui1q*Ps#hnZayF&jEK&-2A@Gv}I;TPsVmnxutzUYpODw zGrI}FU(UlqOQ_buMs>)M=L^o9sb^0o+5vmJjF}7N8))j7uHutg_g^DLg^mbHmkg*T z+$|M>cFh=NkJRg8&+v|hkvkejGNGYmW2p-hFaE; ztj@gRWc1b*r^3@{;Kzv1DhoqX%BPX?wIilON(udO!pRgnI>2amw{DCjEw%8+i039d z+PA&C!&vE>4`iyA$3)N}(8)`?yImn%Gz%;~RqV3lKvl_NP%AoA2lIb>_F9ON<-VZ!$|h;vvdcx2FERu=wJ}m)gd>Ak)8P z^NG`xwuCKt*Ivp_ZUAU+_inXrY?2W9uG0YJigxmI$-1jT+ML6`Q(;M^Y>P|vhLS;( z^QC}_aXIE3+Tv1}K|k@5+HSeU1w;di(J%$+3jua)kfc@>wxLv(tW6n_Sp96dlFXDF z&dv?AW*sg=OmlU77o47n;gMK!jX|r#->sQ~Y&wv*pf(h|isG;esc3-YW zFU|h&T)S8@^0Vh1eN<#e9~Fss%3V~Di>JsB^}Y;ZKHwwi)pe#qi8c<--b>idfD-#ZuRCp5Msvhzm;%Zyy~rNyZ)*9i|Xv z+4!y^i(KPFw`%+;1fU)5kl#J5E4oOQGm490rIg$jT{6;1Y!DJedyH59c8n#HH_ZfD zVmfuAx|lkV<@)I2+k;(6$9O7b#SBXZ4LmQC=9GDp)i?D#+t@JG@jm3w+VAMSgdJXH z;Og$-%^=iipJF_EE@B*P9!^xT;KXu?Q6Y?FS3#}cj3g;_e9?oBsThDLfc9YFktS#q zbiA2))RCH8bK-L;e{{$t7`I(EW#4V;3cl#2`@7Aeh8HI94(Gh$MsIEG=&g;MQCwUL zL@H@=VPfLy3Uv8eZ1Y*Dg!jA0hu`@RC68DAX_Lif#|!tUn-aT6PRsTtMi(!>x)I!s`hrFWe?jpg$rm@Yru>X_ zN29hKA8T^p1(Y=|8E{{b(LHvsIB->c|QI$9T#(@|P+Q>;C+q#O$An9`T4K!>?tJNlfuJY>#|H@z#f!@Dw-E+prwc?6)v|JDUYacCbv@l;W$Ev7CuUOM}JFjNM5~XoT27mFXXE( ziwC@0#FUHC}tHFR3Aak7H0- zi-w5aG}+MyzSE`2>7ugRJ^jZ2l=~n2wb=G-CnH{3H&C(RiZ3y$CnSbI#6E7}F9up~ z?qQ1&O9_#`a_5lsdi}UW`gnkP){sAowxc(dcKmU%L;cc`rwURy>bVJkefaPZ)x(T5 zBf*Zw`e^!!!)wa}^xNSgZaP=gE_}9{R@QcOy4wz)N68qUk?dj^SZ>gR%ggYBXZ7@L ziXD9lxiFT@6e>PW@rA9w!$r`2mkz8$@*fc^A)1|M-qqp;Huw%9ZwQOoo z`TfZq?MB<-!@l%Ers4R`=cP8DMcKa+4teW`ftOnsexcwC+@bqZehK-D8%h(m^CALm_Oud z`jK-!{m0|b>2>n=T|4yPC~rIOz*5ZJ4X-)2>@0oaP`s-H3!;jfC0c_v-?r0XG0mBdof}qnAQe(jd2;ej<+|`osN(c;mv+G>Uht_GT=E5-VnHSu?bTi=r*rGXBB0&Isgf?g z_9UEA)|64~=C(k2uMdPIkRC1v+uDDHEHMdv(Fe}cR^^2y|7ah|&HKhxWK1awrj%hn zxdXyI4mgZnIawYA3!-@rTtr+M9ZeBEjjBZ%ugc-d)@UnJ-lMM5mzhI4h4ZFV0aQte zvToo($HD@UmeF{2P9^K&5M4x_Q1<4ebT~5kXlK2N^2K}sA=>(_70@>Og$3F@${rxz zq&fFVSNh4n7WA7O+q~~yhdY~QWmfT;WfhyRvkc^RP=$OxP|laltTpijwvAN^nZIr+ z+O)&8A1<_tSWjv#jKebYS1^=ymM05MZ{xO0N_sBCOa3-V!Caj%DyCBucQ{3Hy#6zu z0po3YsdKl@&k1S8&uQg znvo4!v*LB?`0d!8Hyb%>VDir|WOQIh!G*VSsobHL)bqnSSqZ|``wv&08vODMIr&XJ zvH?11?`bHboENiEdsMek$F9|VPdflGhs*clVEvaDe~JM0cp4~kqVun# zhrXh@@Bg3O|M|VU`@Q3xve*1BmDpK*t?yFRJ+?#MNWR0K$h?;m2T`auV)8i@mMN5a zzJU*-P$?F3$Aj*qHo;eka?&k2O!=gf@B@7shE^}1#irIwCxbub%Y0!F&J^#@;TPVo zpuY-8!`&7a8uxzU%@*G0&d#B_DGBHuWxdFer4W^}dzYC;sVIK(cY@`X#Lx0ET(!5W zzR4`cUNNb}c1XE%gpl7)@|kx@TE@>+#pC@1?W0ygFx*1LC?)vIlJW(D&+^?z1L5Xo_|a76q-o@(Z9MEN>hao(SRSDyHGZ=?HrK$Z8weLx84R$eJ(ypo zkv0KNJv$fH0R9RTy_3JoL!sJ=6lEX}&7Q}{q5=~&12g-T_u+s_+?7t-UOS>$2!$&s<{DjcOx z%3kS`dWO&TN;bt+zBr%U;+66sB-8J!{4E@#a7h0tT&vu!3giIQGRbGSTDJkC0ZvDB z0iE!jJ+vQm*6ZE#rXu!epkl*i6326p3-yfJl@0FG?R1xJUialU9nK-o{2*_)rY2?I zp1&kRdT3BGHoy2C@;#Up>0T;?_)JL^n}rt&n%|LsrkBy5`7L&46h}`bybsgq7uAVp zdQ&uA3W3+cVApA+;r%mtTs1<*(n~|nB`OJ`>O9kXT+b`vnNruu2EZ*Y4Iaq7!-ee* zh#-f3Pg48H1V}L0U1;&D!k~=A6WH>l63(NuCn!plrR)yjEh%}VKe$KjOt%p{?V?VX zEMm}jMH}=?se|+3`1?K2)YLq$v&|aOalU*i*!nk4thesbd7;u`iPy` zg&;j0t~4t_DxfxCqGQzF-sr znuC;D#QL6K5Y7zMSqGIypj54k@TnT$Q2&*bO1xZwvP z$iv&fgQwwkqedXL0gu^%F$WDfFi22Cj9Z}3PVfN3+!+FYHmVFSZXI`X-rwf;!;r>- zG~J@zs_cdbiu;=T*!JPY+pr(s=|ghcHGMRNCTJcNsiDI{hmAeKu_u|o&|r0T>DU(@ z`_c-Y{u5M;zy8X@mD?Z(GU0Lyz%?r5`u;lNJ5-zuEc9&j03rBE#~}Sk=UWvbw)wR+s<%Yi4Kp zC**&t0{HvmJFZ9m&2jlYH-m5gok7uYtiQhJ$Q<*(-~Zp=OZq3^pJSR({a&({ z5b~Xv|AmTWx|4cX_Iv-Y->HvJJ^c6oV(%Q)?~&~|#!wB&sc@uEu9jc)KJW@gaf*Kb z-<%uY=Q01AMf1PQ6v($fe&V_u0=wAYZ=3Y%lgM4Vb<4N%zabQvWhgR{wZu^V&9ddk zG8Vx9u3!OY`Dz%;zeD~pSHz~SLM;HR5Ra#vPOH!;3%=%mSK0r6eap__#6RE>emPTD zIVE5JhyUTyvHHLK4=ei@uK(uiJd}U)&0NC%J%?&d`km?jaGm+&nEv1YN!8}tD*d0T z2sKHoKYypOAb#J3Bgo&%kwW-01+m+}If`4Olq<^iahR{C*nFijoLa}#Cf!Z5n4?zt zorF<}{)GEDlJGJMe~+PA_C1ms{5-aw%Rusf{{FU0IaldQM0F)%w-PZ}$r!9e3{uWF zMPsPHUmO1S+${Ku;zuXlrzkGT>=jHMQ(NY1GR|`6{)EsHW|5dNR$7B)`Zp>y$6GCMr`GM0*zi5wvqb)9K1QvRnLD8 zMllo_+Gv*$CDg;VqJ@MdUFdzEF8xYc;*yZGeXmOw+KyyK3T^jDf2n!qS0z$*E&tpQ z+cY?w1*CYs4ey84zx??~@qAooWu%|pHKhy6Ck=*Hf37K0*Q;FFxVoXfr3#no+l5-J zQUS@0Y9QS0HdU`nBwJDq;}&4J(Dyo%09mqGR~8JTgEKnFdJP?~-e*tfCWT6~!wFF3 zoX=wpQcA5lv08Ov#Y_de>cnc*i4`;FwIkILy1BT+S`;pq3yy}aZ1_^v!LDRi@Mc)Y zZ%zL`oqE}_=+V%jCj3=5_N#8}O9naEm82}`!A_(w?QHe0K*@5QWI3wLX)c=UrDs}< z>t{ksLf;6Lnve$ONp44SsaKw_Bsg3J%cgY2I1oz}q+W`Stffwhh9ISRfLAhan@1T2 zgkZr%MG44=j1CyL45TE0(psQqGsR)%IBY2nTOO`(*P98algfxZYEdCz=t4QsJQ9(B z$1}oIYQ>GSxsJ+3IgNa#Y~FH#7hYE;)mApuRwmWRZJaU@F$j|GF(~)z=$s-RNfw{h zq;_jdz1a3qK=zk$Ek~T@xg=GpAysm)mWRy7E;A*db7&KRN>rYqRH`w$EYkbo<@f3-{ZGFr zubwva_Xl2sOkJHf*U2ARH*rh&58|i5LhC3*ni65$ zcS`BzDhd5PTo9kl6D>E86(b_Ce4=0F=W(pbykwaiU>3VIxq^>1yS~R}XpA!Tj@tP% zrQh=D_qQkdMK@Ad$(3%5^#%pNKbNsW`AhmsBDBI##7FT{Xekn_VW=6tD(SN-u~-FJ zWL9HJwxFD&b_&^8^Y33p?d$M@^dU!bg_l9N=pNObr>8A0OcWpw3r8eKCFln&V6UF; zwzw1mZ-z;f3i!({&5Fq8`v+VagJ(x2Oj(f70lDz7OX>QsYm9nDPbEZyP~HPdsdtZy z!sruvH#C2F!A$=t&B~wBr1^jSMgQV=vYXoQ?4nx2YXT&?NhBrr{5n>Ff6d_~?6q%d z+MiYrxD;}}S%x$;1Sx2kMA@7-tUnZs8sx}loFfU9OUl00wlImZZ{?L1AL(fDROeSR z)@)w($T3$a`wNrsnb|_JWCqfRV)ekTK{}B%?D~s*pSc%!zy-~^kYFb@6b~C*{`l*^ z|JQ#%i2JEFo|XU47ut+b1dfB!_g#g5G_DJrRo5|9{4pzE0%+ro&bZ}FaZhEMiu4~p zQy$Z~lEuAB>D(-P9hI`x{Bow%&FuX5tZ!$x3=9>$t@w*(H~#1tW^OLTFY>1YS#2~ zTh&6y%U31@Ns!a@W;FbLljwXC5Vhe<=XT_5+%&{N)V$5KLJXOyF0tGe7e<~KklP+b zBq;Te+X+<@FWM|-9%=nRDgdgqT7>GY36Id^>$1@eCJ|S0Nxr)%ANxdu3lmfSi;>HQ zCf6qDWIFm}I=VDT^UN2HutUnw)LG)_$R&|)M9|7CB*`sJk4c0ENGaz=sDmWorb!8v z=14`mzz*v~=v_xjP!)|_nDF+1D`NTmfi8C?{y@KXxRBg%zG`4ZxL6rt!G%dHGGhW+ z?-C+jZ)_p}oZwOW?1j56u%T#6D5Wi3ah7n_*fGPZuI+z03Vn-`>$FuW|V!AGXs#n(PhI zN3ToO(GR?jKLSp7uxb7!-y1Z)@6R^N5}VI> zJnkeHRwbwp=XUNO?HO5_6LMJ+l9DZ_0;0Ljg%E{&y~QOXLvp{bhz2N~E&@0L+1l!) z;``)^u?mk1uJVVXt4u(YCtrM(H!i@`;5MHq!nFO{AY}q35bys)SG0@N5>j6wNpkr` z~3F+wh8kzQ?&}_c*71N70uzrcShUE0(3{ zQDc=n(kj^dfRCo0eNyqGk1Ac#6wrwF4C~qC>sNd)bAFWrS|N}mIlUL%Fb+Q2_$H&X zFn^V?lXR+A5_DlKy-@d8*S%iw?05OJ!NL{x*Wi;(45p^Feh9Vmhg zPu@FcLROG+=E52HfD2Xr%NROj@F;lH@!0d(^*Z(hqh(4Ro6j*a=JsId!M^AhvSVL3 zc4-fKX2RbSi##^0awA3aI$W47m0aKV)bn0Mmx@YA2}*|{w`xkg!G(w21@USyw?Z2l z%Ou8Sm^;`Fb+CBQ3}vd;7j+6^#BrJ55Az$ZMAL;UkE24CtCZ&&r<%ZZ4VA4DHXt+9 zM<(0fJj*5`L8+u%(P}kiC>f0*E}VTkTzE8-P`sGf5xj;jRkEDm=t(v-LQgt#$OpJ6 z;9Uurqfvtfo4VGh^lP|B`N31q%&ronB^Q|KL>4@g$7b`gZ1EPCj3oK%e{HLWzmzIGT(G6YSi?`Cgf9ZddDCtkgmy{6OIF-0 zrKearHh7YyRD5#uik38Tl(%OWquC~J0>+1O>3h;~dC|5dAl>|oOnB#KV-^^<@nFQQ zKC4b@JIazlPtBBQDiz9l8Y()VqJsx%r8X>EvCoOQq{QS0XE~tdQyw7C%}oLe?bNQD z_8in*=`-rcs)BWt1&g1_sX}o43i$>REgucNX@^V7fPX0T&dCR2qU>DR|_CJkNZKkr(kqgZ;wCdk9l9;#e6d8KvZvK4W+3!bM+JX+<(DJd%Wp zQJNsoZs(^hjS9A##wG!&w?nRyM@*CAwYso`z$v%Gg?k$zPD|xiai4)Evyq_=VZ7v# z1dj)1sgz=Km999-o0k`!BV}zz9RX?+^?hmqS>2MISsE@K9XMOiKUsAWOlbvYyb9M1 zv1o%IS_hNjqjE)c^EKS~Gqx=e3gX=eZSX{245OjN?g5vIPyz}((jeGk%$uyR+VZq1@MfeCt+IQDktd~pGZZ$U z;d(->BBnae^q0n0mlrxV;};eEXS&c*%=mJfz@DD(aA^#N6iN-w{)BG*nP$tYbww;^ zpk&nNoajKB<7MedIN zXflrWXmhv0g>P#>;@K;1(H*`q4$b-3@GH*3c~^oiHtef0cmG{b{P80M=@1IYd8_xv z>N{S3%+>yVoR2kTu~{0GrO8z_%{5U{C;20M7FBSIlp)v1DUlN*fm=(sneX1QvHvIQ zJhn8apF#d^2Blfcud0b0;ijC@^{c9=vHKoU+WcPf?@|4vWylgpa?-_ESWhoF!?$$B&cnf3(gTlX>_x)ZZCjJq<0vT z$7K1pyVQ2qpNWo$MRL&FHJl)HBa{@#j$83OR+*op#J{R^Y(M``{;>+7W+;BQ$gM)L zb~VW^jmm;S!p(W|9DUWa;zJ>z57$q6PQ0`geWSE{Mu^*mfBoI8-< z11|bbmn)o#1Rb_UPpCZ6+;;cp2@BuxLF zgOgGo{~E&O<1}K& zH&XvI{-Q@sOLA8yZL6x_1`o=4Mg@M@5ZV;h{G^1#(`b??77yqBK(nqp+Rk=|?QEGL z2^@7WB>~5(=%f~(Hk9GHcS)_E6x;EgOj(mH>q3xchAD(d@V1!_RNhk$HJroyl?++q zQW2Y2AlZGn*@U>@)F}@`59ZRR@fbY2DY;gZxW=2pWV~b3)gA5Uxx+ReDngQ^UYrWm zC{Gbw$x-bcntcLkV zMArOAy8${&XIhM!kud6J8i+yph-~Q z`z~F0(pF8w@JShaj3ynw1H_9!#}1l*F<5VKpQ~mZ=R1+{90bZjsG3$xGLF|9x7s?V2%-n|m>Ud-CFOdP6A{T;B$;X7 z!}~sT;X>=ANWs*ivLGE$p`308_885m8_ewn``+SG+76XtnN6-i!7~=wrX;rT$dJ)w zG$*090!Wiz!OHv!T4eU7bL(QzuR&`<8)J#Fh}#-2X9aP4V;HwNJ*Xwo_85Rfw(Spg zmNluu7MfBzv!pIuMbfrTUFex2XvHScjL{Si+uRU~Z)6D?DrFlQD@*b_=^9xQ9l4nz zP)Z@jT`uCmS5&S5J6ww3K}h{Yg$kRps#Hci=rWK;T@_L}I^co4XG*drI31GP$p=3F zwtvG$Dg^rAX`1`(aA}OEik2#v8faR{vMWkANoXW6U(js*=Jk+YwDY65XnBLq(^x7X z+;b`s!UIk1L-Fvf0`0c<ctek}9PREvklwap_Z@O9?E3-x~C+CuhY_A{8pJK-03r zh0|3L&QXI#i>RB1{bW8b6gSsj!#I4L1`pT=*cL0w3n_ES&#+AXbdVzeTU@yP)!8?& z9|e^4(9m4tpcU}Sv_>lWXvZ8dZetXXQi=6yrDgnKoFctw6?-8gPP5)LVMA!o4I=v&RG|eSr!vsJ=f*|8S*Pw8J*$0kgjaz)$$H>jhxqNTtJypb`^n{XfVbKs`o$j^W^5FVmSr)ZMtd(`QW#(Ksn zT^}c>@8e|BJ^m6tXeobT+|o%)`U?xRTiyPpUBYoI1vf=LjS|xs91A{MTJR}gq0z4) zC+@fGRIah5b#8`3Nn1$3$qGQW`FVoW8ESqO=S{h-mBCs06J@0NA-8r(jr4@VI7M(# z-Q-6UDmQ^d3a^4pZ+dhgoS4chr)h2Q=t6lIwTIDoIEGZ3ZWCV0Pgc^DWV>o~>cWM@ z+@;dyDcj8^#)}(0?0aS2ZY6tH%G>?Ov-vFzJD%5)ay&g(IJIr{eHPi^G33cqy-}k$ zVokDitP+>f=Wa;O4=U+lcT5FE8B)m~ttP++~VtF^V%U3^tFX9%g8y2x3(h1mpnp+ExTIe(frxLy_p!kvrPZ zbcbC|iH!jh!OEz*T<41_H^nb&l)i~NNGhkEPVUZ&)$4jE*TjzUU~Aa(9Qab zm#a*cQcJWM{|RbFX>C*g$_r*SP(liz)+ptp_wxStxBEX{|0kcqe7ea~p;jl_ z3Ymt7c=7EH7Xiscfp7j5jU-B2TJLEs=^hJAAV>rYv6kI|q_TrMw1X%qoM$d6U9192 z2^4?PZjJl9lt>iCnKmk+;N*K$M($~Nc2C1Cx-W)Le+{SjO6}wQivIq1Jq>iW5l*>I zUCb#S>#dZimsi?Pvmy1H)mHT{*7va^$9Xn(+}28n18q7O14SRn&AK&I(_Q?fwZ1^di+4qf1vaj5+gt9K7<}9R%hCnKyGqo z352d?poyLbKRh61&-A>Co|@B<#&AM{R(T)R!a$70$sc|9sZt5E_nKuhlv7(=DA5)`}6fH^9sv^{f0ueJLGsXTMFVvrcCOL-eFS8uW!oGoJ<9o2ff=6CT z5l#$g+A3R5?lr27bv9Q?C5~H3r)$Ila9ub?LYc!L^l3WbW?n)ipF z;zugS`S?UQ(ME{3>Q3}oO!;Qo2_v%B1LW1XW-=L&ka3}}?EZLF|ECW}W!fxIl z!l#7TthdcClEV1DcF_6eAbf6d$%LA58WGSZzE-EpJe~5k-e>9|pH~9Hnu59aTUdqk z;TuKp#u@EQyJu%}Q7?&HqD(@e_=k2AZ8vnd=H`#r`+t7pta(;E(T2n1?GBfU5JwAn zpwz_+d4rnyiRvTGO1JCcCK>vg5nZxbKsXhYErT0QDi`!&o}`gd5uF|;fHhUAu;H9m z0@;msV0Lt>==X3r;kAtoy#>3$TOX$(4Z@PTZ}(^&FKLuVZwu4G?dehx@}t14hfkC# zsv3lB!E7;-f{OqBu0%o+#Dg=q#^l7qbQ?FeWcxdxX#1JZU{xr;e6cH8`pMt2FCd$$ z?EIOUD-58?sBdHx(#8`BvZAX`hO1J(I(-h8@t?QUt!%cBY-eSVER;qh(}~vg(**eb znT9OScap-O!nw3z97M(H{&`&y7rqQrF78h>slvX;6-~f!5Us!%T8JCB8_kN7RgcAm z{*Jmk%EA2*^Y~>y9O#+bGX0+hF8L>6_4C$#V~Zn+)3lIwgl07t`XCE!zNF`I$Nbe9 z`t%Lor*F5lpHM=d1HngY_OG{gFN&Yd_c8zaE4Cop&%baURHpSO(IBu0lWvXjo^V`_ zl+Q~<~wqGSu-&+zNhgtmoe67NtDy7I> zQtB9z{@=^|JG_dY*tT7~B=;@f`yR$4GH*k-Y31u!??mbybJXAp$+>LK(KrX=HsZJH zJciFBeJqE$```1Z9HFW@R(?F@{Q9<{;Ewaq zoIka5Nfoa6Yk~d@sbEs>ecP}DC4friH!7J#ZtZ>v`R6EpDH~#oa{Ea%+yt)!;Rt*o()GK5-=*?TFHh{H^c7HM0i-zCJ=@N>v5+3K&H>#zIz zHKf`Ay@q3jqDH?K`Z_kz^ixzoa*oD*tD?2BS&dSyag+(p;Fiuq|0SZzta zYY6|E2Wc1G8jbtbya@wR859b2?BK2qVRC7IT&!Ay2h{4&a!7#Q`Ca{)GGkZV)Zx)7 z=-<$DkHbE`P+3Vs=hYKc3Oc(wxxN+GsGU(bUxnI5?QdH>pi|Ezq&}H-`OIAI+7j z#>^Iz3x&40tmp-j70%9O!~tiBR0}jArE~Va(ZPJ2t{uVwWJcw0NYf$O0fe?ptB&t3wD_*{r`~CJ zxm~HLqQxkFDVuVTUc@H!jSxq$NC6d(Q^)6G5`qOz9erIvT5+wAvL7##(aKcnTT?@b zH$dnWl5cp21OSROl7x)?70*{jE4-SLO!zp(cWOasFDCC)XNL88N3mM&C>HK3MeFi| zKA^qAmM_}#m7~CNTU-j0h(?G%#^dQq&K)j|adqlpR%>tcsf6F>%PW18EjMic8vmUp z4%AH20*xyasX1%U+F9MxKVZH}q_e)U`cs1jGZR4oALw zjI8xoQfk8TJ7RgMkz>b8np<2-3}JnXWA@04mhii6R6;63X&QI^Cxu(QR|Xra(&2(Z zR2qe?a47^GOJ!+n#wXIRFj%90I=;@-TvMY-pC$Y`Bp1mqY4~wW&NR?| z#VM>b{=}O{lzHDM_Zkd+3KgC!oFl?7QIwbvd8H#mNs!uEdMi0I&TC6^SeAC+uO9q? zl2Tx^X;R6%f8Af`3!&Wc=P4K=~J}q@o<|_=cQ$ z#3dJ5euZX9@LoaGw}PvG)><_XM8`@`dscWyGWiEu61wNl6CCsB36Rl*kW*;ciboV2 ztqbKtd!$x1oNw>!@!KjRZm1QpGET%v)CS+N;9<}6?Onqo&b&-)*;pqKr|zdp9Y)ck z*`ZbH%FcLMtfpZ}F!UED$vpFN9kGs->;N6^(cAkM*wCDW7^>SuG@>2!%g<@K4>ZGHX9V|z8lfvhfVDGZHo5+BQ9@jj zPasLS*Oc11nB~9k3RXF<}xNnN^~co>C-=K*r;YH^*&%sv?v7R2@O?`e`p`n?z~$ zjY}?-wgU<5aLI-AKxKoTK;cbr)bVSOQklhzgtT^lmddy!9b5sS(RP)IOoXr5`uZt- zeOuuxV2;d|6eDvls;%t8%dN*aWlhXO55~*n6)ZZetMTCFG~=e>g!8gj56`$r${~5K zaZVI^e%7N(3D&0GXgEtl96CR8Kfhs{6}FCGs+ z!`twNMb$@yOhc~W_{QrXMPo*sl?Dc7Pk}vl5G==+R|u%yJm%Hcw{X4E8tWtF#p6yu zmd%(ZNf_+WhP)N+BN>kG^cavfq^#)3>YwvF-KIZ!5XiO{X?pU9=gV0fb0#J6S0Ym3 z-n%1mwm4k~o?P(8c zFvgCYk~*Gf2K6puK61>LEnfVvO#6c-ELarfiA1HygW06%k$U3T3PV{2LD=6``0N9e zEJ?{XQt~tWq)kuD)I)525;Pl1j(T&*8*5fF_> z!GFc$`>_8lYK(UCeeAEo3QZO1AW1kKG1sk0OIbR^4ta;PWf3QBIN_}#3MEDfsk<0Snjo`)_}vS=NqeR!u){Cc~tML*L~ zQ>qZEl2f(8XNs`DlQ(!$MZ(~zp(8Jz3BX@FD&YG-NqC*5#k|zbbKS(KR+b{3KOw%9w)Cg@B{n>*#18vma$165Su6K8a(fVbj^aSUfzW=_g zo(tlG=S*^8NxdMpx=6w9V@a}im7T~AE;=GZ_@hNDlm1iQgsXBu6%UaIT;zQ&82*KL zU%I9;uuuFiu%bvAUhUC&To!u@&DlaDtMxOA^mAkMfWcFAq=jN+|Is#EtWs$hKCmZ^ zK^9QY>x&R_q(JJCKIk11^*H-OJqM??vX9})A86W82pfc1Dd$t>StEy%b!ImCVBE9t z5BBWKD?olObUHt(2kju)JP9}nO1t7N1I}1o;<#8kFSfv2hoOdeh{qj0 zeC{d9iz*)XC|+##wkZwYhy7*#n|`lw$p8sn5G8oH;4yYvdt=0M21@pQNc9;LDcUuT zf{jgNJXkJ;Jxj5+B9|u0m*M>|$VyR|u0VxK_a@RSf>oq9FuR*#l`(X-Vp8=D} zlZ9c&7#uM&^L~~=k&`U};c>Y%E$;UzKT?WdK}mUr(|Uf@o?n$K8r5;oPIFhfj_TgA zIcR6|LOZ3TPH1y8<}VzYQZ5NLLo5BX{cxeRbb$6@ZX2g|-PGMQltvCNOAZn-Ajd*% zslMc`28H~UzdP6pLJw#+ZOb-^Lr4*9)|U1HH1~I13yy=xINqhL-3#p$F50$@R!+F3 zGaPZWhXAj}*<8G#o7;*lwJc?V#xs_j0*o9P2QM{te2yOR)IpM)65>7I%4`C{aNY*K zkc0y&2|OO9_wgttJI3==t-~~u`SM*=#iK6GM^&0>E;7hMg}vl_AjMLmg(DJR&-p^@ znUA98E;j`^(#qcVxwT|?vNLhod|Pdco0AS`o42Pgnh=0-FSHKh)Ur42H|3*o+t3ox zVE*TyF}v{%5d(NjJP!p3;bU8AY8$wGuvJH?kv7R&`96|l$-P%oW76rbZA*nftqKbL zH_Eu5N0~&Uw-?9|?L|BAiUgc@d2_v#1`w9T)`%3h5jRfdqOS!ur?)*i+oMeF_%r63 zO7G(R%zclPezo3JI{!rH)zpdh3TeBXF&;qx%PsHqUl_M^s&t)&rSv{PX|$8%>t0lF zdL2MGU&B$mq@?L#_?-aNqcE~WC>&MaOHL8McsZWNe`*N3LdHQeYeoksw{Fs2Rg;Dx zZ*%g%wln^f1TP>c6~+P(4aU75RAi!n(=ysFJefM@R~6{YqI6-nk8dwM#sONYVG3h^ z!G}uJ(1DmAP!R3HyclmWKlE+(?{8?rxeYJq@84}FWQ(IQJ&7SUMX+=|`1U~QS-4VT zX1S#;ZQHydZ5q$NIMp6-k(ARYa~?qRx;d85w!CqOx5;m5?$yYz@r=!LJ?%cU6J8KqORmUL>?YP-u(#+UV0h2JNN57#7rs<@{N9#A{Q8wa)FoJy&1&U=(`&l& zqNsze-^rhTY{nGErN`3AS~Ok5M~^MKk`iJZc)jpAr6nQQM~`v&u~fmLa?zy{))FI4 z%6V!7Lau6v(#uOzwY31lf=m(H4|`g(p_lDZY|}V{wh!&-4+|gJg`3!-UPNh|2fd~* z-B+x%HX!8xiu-FAW^r3QI`e5XyXAAH7h0w?By@_X)@E&kuv*$GDUf?yZa+={?Bf9UaJ$6 z37kGxSJ8fY#FG+!wj%uH2P;K!wX->~=DVW}YCF7Zo8Kv^LG7C*)Wnc~iugB**w0Zb zj5;3C+*LPcl(c0^lW$Aj|0V9yh69l|7-~wV$^2JcdU$D5xwX^!r=oft=y;$Necv-( za^hfgv7^z&?x9Md-6(PeYKDa8kp-PvmoBB?#LstMniAyYg^W4y+|}=>^6u6GE+po_ zuXcyj@kr;d(VI^@G!DChXm6}wY%y`D%P zLR;ZOXpB&0EL1F2w@-Z7p&o|9z${oZl#Du{&lK;A=!5q0b5GyP!<6rNgG=6MhNK{a zc|Yy`H2h#GdR~Z6dlrb0J(hGe9OHBv@gmdnBQA}x|4ez@#>duRM)kaIY!Z-Hb?74- z%jGk@#Q*%%7|L#;n2?>gp{BVG&xK0FIrJR$h9zB%uk(!tU+Mq6w5GTCv4B{#!0_!R zy3L;jlur6DdLB=&Wc{(PzY+`W=h*HG0eXsA@gR8=Hz=p*jRSlyE;(;PaFoA;@I)_o zlH(4yniqQUFdrXCjzPKTv$4{7Q_fM}jmjlOZ!Io0U23e)!`R}pKM&2$^Kh%u_2*yb zP!s8lj|i5eIEUD7R4x1SSkvS@#`;tIs>yVYEx@^ER!yvZY}p#e8iD_QD8FL6E$)76 zaA=aD(a-`o3k_!(xhS(!I{40oU7LKbI_d7MN!A34!qlh=R8;mv8LHAHb2wG38sGF& z_`fwDbBkO1Ni;~27O%O5wx2~QB?sOQCyO`yMM>m0-^VwFISClBKr{CH5K8FZhf)44 zK_7>)2K~Ke`BDBF+U@46{`}r5^-=!}LT}BD;}Fl{r^t=(!`uwKiBNAMtef_6JICfc za$J{5F4Tr&NjFZhsUEA)$YJo$LXYhy(NX>mLZ&*tk2&vfCGj2yNTXf$#>`-M)CWWe=o->vPAlc-$6L4d<BR1!rCvI;GfpvE3>-o(98{vM=5YN$TO zT1{7DkUy(*%Coul_N!6eXb~K1?WLd6zEOrewvdxtX?kC4xGnu&qbLXQRJF^WP2eVf zRuv*^Zq0}^_O2byzh;qtX(|$AKGQqSO|ZrA-{SY@YwI7+@k*`MpTF@s9l3&ba`Om4 zBc()Q75JVSfWi95r0n5OI@_66QZk}Ju!aF-`x}QZm!Mc|!=V)@8C$S$em#*O8@lK) z=PyinpT9?Q)V#D0o%t8|;PD4-f$YGZ<`2AHU?_C%h?IPsPHBRRh&&U1R+#m6Zb(iO zkC*iGiT+6H1ur^2&^cY{LStQddp5Vzu<_+q@27Fg_%c@KF}dK#zpGdBnR@OQAsJsn zb)~lPMLL9m)EJ2XQx(h1}F8@LZoKurELNPibzE>&o?wuifMRm!y+LRdW$%U8B!Ga+y#e}Tn@CyEK22&_ToBr z?J?z>H+0BdH`eL(% z7v4!&Oy_VKmFf2on2-C~%}Wq9$572TjZ@ymduyUx?0L z77{z^b-`p$~ zMv0zs*m$p0E2tO?$9>KXS?|u&G0;S%iT9(}QxPwVKA!sV>|?7%+~{flDiII8IL7yW z95rv!-T3gbc3;gGrvE1|xn=(1mbD<=i>m9yAjWi?C|$1hhl_6!yqN2Or5i&YCBefU zg)pG;!~!QF-82kZ7+|8w!y$ucNaTg(s>U48BUSt{nJ_@0wAcIH2qiE2qR3QVUN#Ezu+JyF$Y-+73 z%_ng(tnkSGa7LH4VSMixmQSzh$SMpAuNV4?*hK`_aBjzXoE5n{rM`4-NS^ac$>tpM zUD$XzbfIJ=-+IvwJs5k?vDvbD^hTCU^gShvG+8@dWu!}PtAv;l#-tk927T)`Oc)G2 z<5CgpG;m?ykMxV?7KZMQ7mF_9U(YmxrzeaKQ*EkA2H{mlCQe)t3z)^+t-G+2L-$c3|qsRer zDB16GI7{JK2-D*7s8!SI9?opukPJP%pcB!?A1ZekwG{oI8dy3)Diyf8W1{$rm-9p!3gHJHxZL4M#zP@2RTw>$ z&|)+o_{Hmy1#wkKDfUBEhXUC~hbM1Mp5_>f>P)9_dgA&k&)x+~BX7r8&iZCaMN704 zr01)t=${Wg)|XUpm{We7<0n@FPZwWED|0DN(*zXj*R{n+%_kN)YMlVkl`2KvqLlW^ zS3Kh&bb->i^4H+OXh^Uk${K3FbkNi;X|l4O()dt=R|}48%3jBtQ-{7P)e2dos_?M_ zI!#P9OATL?aw)DFCV4~hmRIjOvkINMcwz9byjUf&GS!(qLBXNduaHT@M0hF9WV~WkZqfDav+FC-YmcdNP-)-42`Y7|IOEkbQzZ)S z`p2kW1~pt{^Ub-hM+M{M{NpkPI*g_E-VI{op~sTuU>3fZ@k~inFZ~VAzuZ?n_g(UF z>L5dSl|%y@*e|VyM~}vAFcXvEmlF&5^Y#X5{lP>f0c8=T(ZZ3NLu0UdevKX&Z{rUe zdY2eazid#^$342J$DTK>Ick#`7?W>S4fT%0K1iW>wg&MqSfTIU?4vXCXpO}9c;Scw z7$^r4>`C$<09AKh@X$3>%20*8NAGPXhcah*Czp{3@I zPi9V;iankt;0xwyKJrZSk>|$3)T0YYdH!|ESwl+*by9Y!Mmj8Mo_pGX?J!<`#oK_d z(LT@_L+PS0RQns(K9$0>Vdccz-e^evPyyS3uT4L!DGHkWT#7csyhNE?Js!-YoY^a-1Esfgt=q?IIo_DiRcf5VyE znIM0*fPzZ+9U3VL^jX++!SLY}BL*7uDg*7=U?C1Qi)A)-eDY`{`z=s1TGZli_Ow`3 zrs9T8x2G`R2q}Ifxcy01;`nc zTZR`^==3$p>X_xNc*a0jxL$A4edcADWp#()DD5Uu@}&)FdWEj9iBfgYMdAjNY zEA!Cq9Ul`O9$AK`(k=sdugKEK@*1|)z`a+8s=TQ-^bE^Sj6Lqg;?RZN(0GlsL%ZSS z#ZH@^SP`Pr^wTBf>M-x)+aM5H!M7ndybf|u6;p%$hE7_x>4}97%e{1^)grC5;;Cb) z68%1&kHcHQGn&MfiWN!FzqtK_rF7`%1J1%f$GBGrJzy>Z1)a-*-vZ@>%}vi`rQ+aG zM=Bpo{;;fQc2eA@yi2Lvt$4w346i8PY_;EMW$ONF^qc*;5rFV)&% zNmKqEd9_XSJ<0rh>S_=7g?Y@;(V@B#d85y7U&!;?WtV^LL*1a7o3~v#w&+S4z5C(9 z=gd`@Q_mWZ2IJg^pipizS{Ot}4hc6#=|&TnLrTv%?@1Ma5A(A~5+2lZyDi80hNOYM zB53h>2=c9^6R7M-!(MNYQ(M?39H6{$kPaJGWaWEl8 zXH2xl;0#gWo}HK3dii@aPUWU)h}OVuD>tH=S%mqC^9<@>M`Q3BsRws{X;z~`DKnd< zak(wC8)MF=%g;RN;nl(1KNV=%%?k4TNQFW3^1p8a94)A`C{-MZhGQ(MvK$emp8Hc} z1f$7KuyABzP0l>&T1fUiSr(=8R9bi=UbU5`W-6yJJ(Cvk3{6>-=V;3CJWnG;WSggI zGRrVqlVQE4uw3c=rQN?q>$c@vR>fC}@w)@sQXtoO+7_0NX4BcM3o91|FQpMOK?`v< z_(q1$k7{z9&2*51$!2s#4gN)g`71Wf(L3x9IKznA`hz6rd{~Sie9nz+N3~2G9Pu)I zij5$%kx4_aW1fu_nbLL~EZko`;W?XRX^;nfO99i!QHPN$`oWJ_75knBX2&@jvLv5e zdJjeaa>u3jU;<2*<(DW{o=zS7t0$YcJ$u~Mkmtr7y!b-Clb*m|%J=!TYh-ynqTHY= zu;*vMR+fjGCciW-MOmrLg{Nn3nMPaMffk{#NSI4OQMeR-T_J_%PRT8ka#>kEBi1j) zaFCfDBr?^IMnj*mH+lYycKS>TM%BD?tHLwiXIv^`GYiZa#7(Dwv2MDu{_~EC9$rjc z)n8ysqu89);W|(n2hzDBc5KM!iioi%y?BeSRzKjK%zWGg5`o^*e85ox=aJtV3pm&IkYY@(xx*PP}n{wjuPwI2&fx`oBT;rwLWDJTyd1z7) zB5I*zIr7|v*XYmT%vo3-xbPb^8Ja{{NWq*iiea;xQOF6j(1>E{ks&vSg7x&PMc-%3H+vKwM)$O-8e%kQZZol2CK$;c3DF?nM zDcw?51w7LExDSs{xWFxZ#`zreeMhigW^Nj>){$*rK43Mi-8`mJC0*lNjWxyUc;=aK zxt&}p)*v?_Fuy5>PD0w|eI8~JACQ1GNC__VZS{xEBQAfe;`t^-=y9hAB_>y#@!r-W zJqdW+HHPeWR6@!&ejipQxF)pD^!9?yh8jgpW+Mbmd3C1>Uq`{{%7hUlecCWrcJMcJ}rp$;K8%WrjOG%cEzSnLM%Ltmd!oE z1m_+ya;Ur}1;1oI5(i5TbU>qO3+6ZMb$`6WrI4KN4JOaS`~ypTp7I2#BfXfs>JDN% zGfO?g+l@v}k1JeYI5v@MkWEyK?NDgp5eFwx9=RG8E?-ftG#QMphdvSf@c58he}%Yd zG-x*7(h&MB*S9q;P@Uu1$o%$xlZ2|h5rP34MW~X>Q;`ci#1upWR96r1l6gVsB6MIW zwic~MO1<}=!zK19Cuxf%DR5Co`t&4&VQ;zDx5)ZUkr}ODV!S|W5?y=dG&aFhsAQ=_ z54_RFB04fycn7>WIjbxxQu6lFgUT!C_`)!YIFma_l9KJ3alS8l(6HzduR-H~wz*l5 zl3Tfy%A}hWd~T}4CW|>cIw`@kYsdPMz4ChSWsVmy9E=xb67})#S7-Xw+1-%|&N^+! zOeIE}v2warG~(=qcfR$^*L64>!tYc%7`##gvxQ$N?d0jzwHW_jxYHcuC4)}h^cs}% zJl|%TZ9f1z7Kd&$=05Dn_Sn=(#^7tq)zqocv6dv=vUBKIIrO~q0)xw0O@;8H7lZ%6 zd&xDpCY%-#+6XBc_w3!H8Kx$5Qy}TIqt@ur>{0UQ#G)iNh3TB) zFdSPz@wobNi%VJNu=Wvi$oS)BX$hn|FL^8+yE$a^q_92Fen#tOew%W&mFOlwUKCOO z^1?`AOUTivM@fNbfOKu;Vap>M<7-x)>e9!;(U3PbX?S_#5p!JxL6Q3>#wxkX3nR)i z7Dqhs$#s^gL)pOZ#T(K|=Q31tP{~$v1>KdL;?|@npoKV1cyUd!y!2!kEihSSY4n9B z8jrgiCh0$Dkn-Uw2}=AylQ&CJZ_Xp9LL#QYdHj}PDpRQ^x)#AD7M`dCDP=j|n;hto zX_Tf>2Yq#B@U+#SyoFR_-m=@H*cICq=PdIcCT~dQU;8jO+6$!~_C@nLR*x$Wobh?C zr(teFH8ip0GSOq&tUyWKL!BfDJ*H4CK}xcgp+c9Y%qZzvYWh?{6eb(ToIwSu){nZoL%frevbh z$z!YHnoSUN@UkJJ&5gUN#o{-(0@7=+3te2g^#mJfL&t#IRr@hI=p;n44NRCLy;>d4X6k?$)0 z(m{8OYtYV77;X!D0#W+DX@>~Y)r#+`4p7T#RJ&}ZcgFC23L@W_e4;#4G9>WFG9aCc z^Jh-y=3z-1nmAH@Fz%q;Hv=eRmD}9MHy(={Cz2cYO}i-nT6@%yjarq~G;2fP z9E>{{x0QDujE^9}PYX!GXb^Yl7!+9xSGpFy4yxJ1x#6(f@YGopv* zqR7%)l)A{Rf@+CyqPH}9tkpC-m7BKtX?=+ZaajRY=P)W)lrGt5uTt|F<=vYy@uun> z&fV5F;Dl|BaL~5xWb-r8^%E}KEB+YqkhpcHgXvxe*S!w!uS#O%b5$g;09c`J^Xm^lYU$*G)8&d3s^1esn@6^u!W-@1Wzsol>^5%Yg`&zNQ!B` z&bs>Lil%Ms^nau8|7?LdN2e)@cN-ae+7!)CPO3f8COXgT9Wr5IhHr`Uxc{0tuU?x? zDP|pH)W^KhLkLA@LytIcGcxgPi&aL(C|*8Lr9Ceo=w^VKM7*k?)y+P2W|tDYo&f7w zn1wAo)m59<9+W~}aZm_L5|)fcD6d8Im_;2aEtD4}7LJ*c!AlVZEejeA%S#ekj8`QV z6WrO5b3Q9ag2}qI?VYCS=$odaZE$$;V&TvjI;=yylq1$o543xZR>#c-ee)sToPD>B zeK%*{%>dUP<@J)BKi>%PlF33LUKZ)Fj@+#SxtJN&ksAji$IB(2-8|#iOXh=(KGc|7 z!iIiw>o|3p_1p>7+Qus_9TqyQE7+IpFo%NmTNY)kU?*JTGq2C6;%bRKzh92}2q40j-=QcZBG71VI zx(7u@-h@~HjiIkfAX*Q zBQ2CjjTGO%>HDQsq%T<{_Kg_YHYLSm6ohKH3VD^HeHdSZN4c;YInF}^d+gwojTdxk z3{#@y&z9+AIEM~W;UddR?(}Ac2;Z3I}MSpA%D23hqY#LqZeY=49`MOFla&4=7mQtyN!Wd zfxFN!uGUtPsfMWSiw;u=^Di5A&LLGixJasA{`fVUY=faoKs|(C5my`sBQsW;(%&|> zBf1WAtI=Vj$rjj@_homes@*k(bu)mN2HiG}`2cUWkyXC)c9QioF4POW?;GGn>ki-+ zy&_t)GdYsQ6%Atb&IV5R%^ZSWDBt)HU_^7VeAiSp5;KO{gG^3kC_4|~bB8MtZsq_*D z_2sObavqOeQ84pWyn;C_OD!ycIq7m^>Y1_V(r$q2<9Bql%E!RR<&>|ZR<@87Cg|^5 zqS#mzE#lH+SVt^nN?$#jVW4Db?EevN7yX?+PBEPoRj`-1`lEo!n#*|gMEhhWQK^_L zx5cGa&MuTJ`M!NjQA=6E=JujskqVCMxGN~m+i1K+?WV&EKGa7BIfJDTw-73}l;aL4 zH`)Se3K1!R#(@uGdZLwvg7_?^im1)-L;`9^bWlVVooJR1_ZrHDO6Qr)+pkzJF?;M_ z(yF}kQCS?$AF+#c{!z)0U+3dY*CZOkS*np2q8yXpHKp^F=9_r^s6+Q(U{0sbjW4*8 zr%KIp5<`qsh#$lCGN^bbxeIrb2KD_an({MVu)&QA5r41uqMQh_&8iSK%Zix3Fq$*?CTMy?_cB>(zI{S zl{{O}yEA>Is^=wiq(e{c(2+Yhx%`y^lMWhkQrN@e6`*I6mwYTbpOmyjAsAl==M9@q zEaD@A4CLJ$9m)x#cn3-HSBgUXyJsdL0tJuClDSdWW0N(}giy?0IKez#wW+h{Ky6Kl zhl9bwYEYkA|9QPq#qb?_yiBCI#ZVz1R2iwv*;rRMY$#pWW4vhIp5BZmtOi;Y z4=!}Vlo5xLETfLX8VX*_dCf21Rzhhg0ap&~%Vih{?{!uF7M9$cB29QKqmj#bA}P6a zic)QxaQ>V%irXwJ*efR8GSGuoGI+^iq%WbtW-FQP?h&OM;* z`b{SwvkSVnTU-cne6~em)Xwt|EwJw9+?(5bf4j7|tv@;E@m8q}L~bUGF<4+i;pVKl zwQIIcn+9hSpmJT#dH?Aam%N?Tqnkscmx`WP;3TZ#o6ZC3e{It-i5QcMmzn`KOjHtp z+@#7`Dd2IZxM_WVE|mPIGVi8uTBme{K^KMuR8&J$p2MecO4(7B+;a@tseDEeLAa1y z8&0pksCe;tSXJUCbtzSIFit6{;vQ4woAyBgb6>hf;i7%8@}91C>L$(K^vy6^r_Ro( zD7${|`jA0@8)45f>B0t89 zaVq_>b=>T-%Cu+gk`7m-8CkN>exxn4&XHN&)V&e5JL}+p0AxU$zl=yUB0-J}mN2On zgXIHU!f}eqBDjVAv0AibXHYKdthE5T`@s0n>d!{pIJN9e`&F`e#IUTDfsg~z&HKR@ z_`+w7{LCF+0ckkCZ@vFBtxgZRd;6}23rFu#gNN^K@Nn#tn^f{oP%fqMSkCh<_v2(- zMm)OUq7E*8YJIX|>i+qt`e(dBuWkcqcRp0S0V6M6x}U-U-wWdw<(A&1I4vxY^0rl) zZ2-DSQBC;KG~x8BKk6J+H(FjT$dX)`%7h@AcHM;V zvQ$+CjN3Ss{}|4Lach0FFWyR=orHDUFqD(ax^R!yEt4baFCN&M^}FC31oqjxEXRY5xwcA zdS!ZcxRtdbcrZ$xbRL9pYH95|Rbex9ScUUG+=R$^KWbO$dY<7_qRRN-RwsaNMn;(r zV6}|KJ&i%RjmAlvKPmG?zqT4xU$YvG{bSI#(>z_xo>!(=n^OHcy7)6vDKeV)zK*hw zS&ce&^i^Hs6vAqiVda(;R=TjgMqTaT7XIT&6(s94ew9~K%yprDHD&y!69A`wSa);& zYc_QRM}x@w<5_#}xSJDCb+4zu$7pQnTM*lwq|+C8VQzeJXPFv-=_Oo_JjVQnF(-}Y zUeYLvM`2I6G|DTEJ_zurLTZQnx2gSjC+a5{9o{D)ie4ifLjeD0t{Pi}IignYV*F);MP z&#i#RU8-T6!jDw6uv%@yI`q8vp*JOWQh#@!(T2%v;MLpz!=GV97trbLZp4@yM=+zm(TJ zMI&_?XKeCPkz?Ala5AU3F07U)^8FkJt(|L`@pdy&Omj!_wIuK@M{i&A zxC~HDUO~lCZ9gK>*iP)1r=)loOFxHBwlddGjo!850Oddyran^wAOj-o0M}v zv784+F7|ZBzD{J1Vw^!dam`tj+r|9me1|G&5mg(3>792#n|wa>66&hF(oCG+&`d1- z?JA2sRssg4Jf=;~+(SxTUW9L^J#Pw=h?nL~p4ueCYPtoZ_x8`IBaX~89 zF8o5)(_j=((U#=ckt(?^+4q!fsj&05Y7ezN)OYaEYljPO$eFHDAT$yaZ!%MC<~MdE zvj`<#lQ*Dd@m*f1G$qd@_*qM$j1>Q-aL7`HMJ2;Tdpi#;l;pTxwN=S_oLiHFCFeL8x4j>Q!Z2Kg zE6T87_xX$f4xAYS(oz z?jV(&`PF*0YuifjcYbO_=%6sK{OJ_S{RBW z>tQuxt0xSisH;a+sgg_F(skx2E6MkGmIl}=L$^mIEE*FygL2-4OO`m=eq&rZjb>Gk z$$8Z-)x3b*gn%w#Gz`$kSKG}1XrH-%gr%iJo|o6!i9`+Ae^t8yfxsko7Q z!&@_iaySR$_8=&r@1IAiYfGvu->9;ze20-y5Qv`qi}a%B%7>ux15cxs#8o+z@W19^ zP|Xsa%L?!GQK(Vm7oN+i`%*t#t`y=yX>vW`QW5&-0;$D+Nv#W?CsHUC>X*y7f9)|2 z$5I|Ac7#=Mf_HIWxUWGPjLtKS?=e~NP)E69MN^YK{>o2WcXzlTupeV?O)ZHIZ-P0=6lB;bK6nr* z0F7e?6&LCV<9YCCG$?;sLZO=i)a2Q8x{gW+oz*$!`sbiZ&>E*MU6^E^5Ba&GjoG3H zJ8bSUm&MmkFy+e-&Bk~w10RDHHsX9-=k5^~l)?OrvY;%)9*vk}X@q_a^eJ{e%A|+2 zjx;zK@*_pZlq9_}cZhs;%WjPezyEdR=YnFIqzTQE@|joFA5Vqe9eN);3L4$`FqcB8 zz8LK^JGweFd#Tw_MK}@7tVdyk$oR}Fj#miMz4v943p_0nMAdQ zmDH4VOnc^RSH>h{j4ntUjhYr`&z#uU5liXXh0gOezIV_~$#G?M$Yye`jE;TYOt7^= zet|8$+5*v_(ctW4BuTEsiw={h)a-t0o623%TVrm(xVx_9GuiXLxGLW$BSBa9AidFT%nkE|1vP70N^0W9#(l}NVdMS;j<594@IB{bHsd+%hhNHWx*O|El&o^hEmdr@YRqvcI4v%^7Pw!6n$_uA`TMR6}*n>|y{AQyVL zbeTdZBV!L~uUve4Y;vh+#F$A`3%U|)1>0d1?M2T@9Xyu+Rd#X#(2PxzD5q@-z9#Li zz#<5i13svLxd1E-8q3^Zi%WTQVHh4?=I6xM!zgwmN2~WHwr6pVBv%(6>($ zR6MJY@Qh^P$aUzjU^R_8`7*Im=W>p)J}c+oP+tF$KI`g_YPX|~Hb0@U26rt!m)ayy z99#bQZbr#${mi55&N6ezd$hnr9gmPYNRpo@fGBF;$i1wspJF2vHIyG3S$54Yh?l2D zj4V;Q`2o_xvkvOYU4w&O4$qhX?NcVzeV6A<8U~ZFV+h ztt$=P1mI^=qiPWH^Qwhr-k{7J@*Y(?jUIbH;KK;juHhWUL!9>UD~vr=U0!B7PJd^h zKzRBh+{ITnY%jz6E>+tY-$Dn;l&2~^y^YtCt@eghIp08hO*;EKoi8_YGPo7j?Pr48S_oI@$pSA@~qx!tt2G4wVl?B1D%+9l#My^*&W+yWn86F^7G#(r>s%U^yz!G4z zfQAm`@n!KPG_yOJ(6K_K2z4dAuKwKk zy3L5(tJ~~Rw5sS+r65f`Kh2ZFjM%eyF!ed)$N$-HWhxkc2*XckpK(Dwa^z|VPK)9* zt?3U_yUXX$&WXo)Qw-Aolzmbh2hDs&T5F-#KUWpNxYZVy3KdI=KH~+ahvx&Y3*uq5 zfs)ZVfB6eU?c3yr9P10>g{0p16OV^zy>DFv_=87E1mU+20aAqBd6%EToLZXGjcwol zUe!ZeKlz-&b|w|4Cj^O=Ae2YW7QGidMOtkX4AKc5YKuw=%0vjT!a^?WYmE@&0Y0z0i zUsZL;!RPYAEUTm!dWF(qKl-!3lSCHnneE&tlfUqSqg zO_Wlp{2tp+{W}OplfS&t#*at(`{S<~Qu*;$tVsSE#Lv)vzodVk=#LzNQ?@;B=#N}N zk5nWKjBl}W8V+Ui_H*(2eW*U^XNk?RB@q2=p(Yo~&SP;^??;gsNfjMVLcj0mMpYZ$ zelPQ{*nVcqmNX(8-%`kY<9o@%W3_g!S$LeqFJ;r*>^R;aw0!(yIgG6L8~+}QzBTVRp*H=Nj;1ZB-`Y`B z{S?2K<6HYB#77}6ey>^ycvWS1mGXs3l5pOdYb?pX8e8pHjiT_a#+DJUMfx?WAZ~^K ztK{{+TJ1VK>i4kF1oBD>@KuCVC5HC~11{Xn*HC$n-DdGJo0ok-E1>`qEN`kS#c; zGyB(RFA-;0N6Hc$AKVBMcj8#cOjEj%Yg#wwTaQgPmBQq6Q+dq!=~+2F(dTK8jy>ol zyQy?=MjwRH)Q+ZMWg231*g{4RH3_Zy(<3g0aG07Yl$rtTF?^&?ftXU-ttq?rkZE;})u)_r)UarPhBEcqcV*G|&hu-?Kxdwc3$Jv_hox47AvODO) z&1FnRj?0*dZtw{O+JQa6p5KFDX*wBB_)G5lM_dGi%7SUp1FwZXt~R(3!3cpSSM-h6 zG+Cr+*@i&6V0nOEFI{Gd?7me%llXBz!2RuUg^*uk)krg33ZN;xy}h3BsnW;QntZJ* zf~giNmUQnUrj0A8Usc3@4U`NK#h{Ir;T~yOjtTPBFz!)2A7JXkdn-mfDP5m zAe@=|NY6OarBn{i7F|79f0oNkqMT1f>>DwzC<__FE0q*{<0PY9MMADY$x}@?o9=QBcn$hsdI2B3PKB2{3mj~OG2wZzQ+`sS7=@_ z$wFvin_TgVf^R%?7{)uDPG)`c`JmqTa7zR=OAVHtfI<9*>_C6 z0}m*xN3PXecB#>S;EuqN;7I=9kVckRO}Tn2t5!Y_O0CzK$L$w}?<&(VC8bAvkNj#2 ziCtygNxdB%NVBX$NSrcH^^jY=jM+1<0JcC7ESsm<)U!q96)WUqQDJz3xphI5z;85& zr6)A}2*^24)lKHmDh8zuo^L!pH3q{Sm5?S?wH~19<#r;8#tWWvKjM)}e&)y&vrvyY znL8Y_7|$_g=xOhB%rrXMu`tr*i@u_~d|7UAdLy46srWu_OCooeLU?@4v7?9D>B2<; zgYY#j0J()%BnYy1gk+*tbHh0j zPjS&M(EbJ@%WNWf`2CH1EsKc;-4t5c((yW`gorAi=J)a6a}dF^)jV;{HfFhfUYC%$ zp7E`V%lhOOcTiv4J*=>G=vUGm{BL}b(8Y+GOB<(aH%i>-c+8DXm*;`bm-qS+xcZuu z&FYKiwWr>VK1Vy&36^U_kAGz-w`1}Ktqs}q;7R@C`T>{hAFB@*DLJY>Bji*TQ3x`H z9$L6vV{Bw;Lt!q2B6Ok-&R>e=7fCuimtm*c;khHuEe0M#npPw~h_r>3(*bpNO%F_n zaW-bQ?=afOk~9wQJ-=*^rBhGkqD!YWB%c&eWR$YeBI;G zhe{|8 zel5-0R_IdEscW*(P>s$lzOHYnmGeyk(Y(knt%%bHc04L07&_Y+OUhPE^Q8>@R1y)t zeucSjH%ThfD3_R0LB6&2dY@<6rPa-z555_kuATg`nQR$n!_`C+Qg|F>bAt>po(v$ZEY^ipByC&Hl9Ajbk9c89U6I+CkS&$i0FWe1cP2`2;~lQr>e_QcX@~ zQ?GtaoeHKsXE>Q^M=9nTgdV%*-owIZTM9}b>Af0xFjFLW@7A~cHQJ5^y|Pp%*`9ZC zFT!<(-N7B@hc>?!JidPhHFf^0LVCI0OgtTy(rV@@Z%kk4>C9~ZlLxDRc*pyekLzc; ztXgwc))|+wyp2&0WQzjUnpG4iSsqjkqThSQCY|KWTlJGe@8nN_pI1ILaBK2WdQOgD z-vjt)d;5=L5?%@izkZPw6S&peKj$p_Ejw7WZ1tR*=L&9BeiejOX|DTWcGee!bSRJ_ z_G9ENXLq<%#Bv5omJ<78_&5D-FCTmi<5BK(Zcy%8mZBVt!)H4+5il zp(2xuL7X^k8~(?LZ8i1X0m^4QeAjx07pMFj{`SO&7yed3W|rgb;9w)gSXYgT`&7MY zQ0(f6=8Q7_uRUvXKka3`VP#p`LH%+|ll6*AadDzwP@lkUmAHrdMt9RQ53RLu4~8}h z_QD+=+IZ8;cX*cXWltS%dF&(F7aqI9p$=cXu*0!EO*P!3KG_FeBK5GZ)n!G3zIb-xORSqV{WR#LfF+}SVXVLo z^YKgZP&3@k<`3@pnea|`ee0DqHt1l3FgNm2z zl#zlvjcBiXy7oFw-yn|XZXXmnkP4}TuVOadBlpl!A1AVZxzP(p-TNx6Uta`OhIhR?rT6~o-q&GuZydT%zboB%Uq$FDDII!`e`RERcQ@kO zIJsmZ*s&3^UN>-`TFZxvS36ufN!Q7QX^M8O@zSw9$#o0a^kqq!{zEyMI;AK@V(O&* z)Jw8nIMf8jv?d49GeCAxb8CDu{ont+@UP`sS-5u^zptbD|ck`y7 z4P}+f^L`GSRL7e5!Xrtjn^rHz+N(ekit6hd8O=&ms5-?jQnVB0%uuVvzJi zqvb_@+rI+o{vK`GWTNcjCH=)@7WHx1w<7Xj0b17|r7;W^7Af!-4aT?OqF&~2(B;uw zYN$?e4`Y|j7oVW>r5B7nrhr0mjB>+eHo*?FLF8GZAfrdqcn#jPL&r4BVhv2pdJe@bQ8{PgW12^aiW%oy&yWtink>r+;4A8Q?PSFlF!pk2EKQUSzax2- zs6=vdv2-U-AP{%-M4{Z`dEPa(w0N@csPheC4_wU&6CeD}zG`or%-kavfv7N)^DF?+ zE|>!@K8AYyhtLFgbLs~#IhO+hoOjM)L+d!fsOa$`KYp!gVeeF3?#^(zmc@UWtX-OA zU0;`Zrysr6Rd}!5cPHlLk1T7>`AP7~Wm3h@d!;3?z0DUunW9;rOBeS21@2Ox9~@X$ z$F;{?fw^AjGdY(&b$T=RrQ$M18{Ui$T>0`%qP~m(ccNiYJ|)6bP^T|?pYyd7q50}# zGkd?`+G#pUpP;RC!^pYs*Bx$CsLP_v{joRlPNxX8R^8#QqE3+?zNTD7d%PckZUtz~ zwpY|^VXQbk1)2A!fM?INL!><(O4CLv^PSIM$5V^_@zizj|!KIId zg$~R6?h2*%IPs}Nd7@b&8j)>-B>$SJ_G`R^MNF2L_;{asFfI; zNDBte@Ql$DUOJ;Ek1SOXbA~i-|ImqDh$O+%QZkq;S&~|YT2(Ig?y=aP|IkrwMCe$t z%HYV@0?%WLDe2T2A{HUq_6?|3fNB29XE=uD2`k}KgHiqZ%D#qC-Grp`8?D_5g?U*i z_o$s8oJ;|X+l1GVX_pdQjEh7O&@MColG}R1WOuTNd5Dhzy1ECq!U8*IA|* zfbmx@8(Jn84}6y1iB9QhF6rn-ub&twHyi=oifB*0GaPtd#TwPafkky2940T|~FmAoqV3b5SW=mnvQdo+;&pY5E>; z%z!|7Xv)aPPDLJ9jNHf3;_NKsS5nI}Y3TuDiXFHRT81XZhD(UOs~Xs-Goy0FCfeiJ zo6!Py*Wd#T<-!1$sRE5g2paQl+$Y)Jc53fsELVFt|k>m*{YVw5dS;Rk=0EeKpCzsbB&R#q6<*!sIRLL!wA=V@3Z z5SC7$;kWdj@q*c~zcc}G&eBDjO3nE(&c-?8q41sLy>`9NCMfB4|ky6L+6{_VN>-+k}D@tv16i)2H65-~wt!VU?_;+cm#;U2Xcha0JG zQ>Fr7nwW@xw9UTfN4!v0<7%Ng#kP|4nbh4;XS@Zt>C(s<%)wY~s7Oflg1wgKl5iQU(W8nvzN= z&i;Q93aA!26;r5#jH^oo7z)HLvj`4w?XbE`ozWx3WLpIllyu?DVI7``26OxZ;`w|J>6K%fo2 z+gC2I(@<)`jOWB6+XzPbnBta)KJE=SF*Lft_kD_~@Z{|X#|*&EHtv6SE`BBPvs4N= z6$lOm8crvC^Yx)QFI_O#K&29&;B!nZiu0+vcFJ`F2Rf00+%3$bjP)jW5AmzTmQN?~ zQwKyln%^jY%kWtTy7XB3PdYgf4)wvKm4qoGJHY{WkEHVqKcDad2VtwMDNg)sSr;Ek zzKdU!w{R`ephGXv zj{{}%8ZfD(pZI}_hs{%QuHnUP1BwLIK9c5QV8^BZ&h;mVKl~{_@(72Y)uL6E@X#B< zA0RS-mJffv(a+R=cS?mxKZSp~^xvZp8HJ1tsyuqwOV^oNq(A#lpo91= zrAO&dQc6t9b+tmCYAF2_0#f3Xl60Jl%)>tcU|%~!tN3TBLeJDfg&Xo!iesir_oYODHHp zX$V)G72;I?6_%_I@XF}}zJ_`_E%g0Z!Ae;CYO4#0(Kb1TQxI0i%P_J9SGi6luW75>|~`5)yDu!(JqSrh`n)BoQfUs2mb7 zypE`Ji-FzTD#dsfU!BPtODptfLr9ECFYXSv9 zNM#t7$(Vk@4B{5c1q;R^D9P~`^&pNNFA>FU$`F&8Ju)%?J4$PUf>^uGhh!>T#$Mod zgBMI>-jSglK{(Da6_S}2q(`}Rr6x+2dmiFh!yn@TU#C%)0;8LJ4m;CG!4$!Lq_$SI zh_50wy{eh~aLN1I2<3Nc*DpG_$)F&+{|-Xh^!(z3l{~ZQ_?33EC%FG%6SX&q8ePbe zDrd-U<}T1cm#{H{XiH=>ZoOM*(dZE$_GHCeg-E-gHV{lMa{^gRj)Qp@R5A{4TVRXr za)pnsYPS%swpO339x=Zn9%O1D%vo>+Tbg%aJF7f41dqGuysVGLU-%pejF?Y2pq@`Z zj%9Tz7;GB;STMKm@lpx3KV}&Bk*cmid&M9EoL997N+Lxd4qhGP(z8>9_S8=`@*%|YZoUA0|Wy;Go7<#v;VCqn|e zaDfxy)pW(fMY+_$%t4=yr440<%3QCtawQ9_Ld8n;8jfkQ(f?YGlSW*pS2lD#!ODi_ zS7Q{$m~{D8X$Q$FmoJ^$tm!^iJmxDn7Pk~KB$nIM)qU{C`Bb_|vI(S7kFyGE3(b9nN6jlf3!+`=>X8=lb%{E2zA8=F^ zL|X_vf`rEb@|6Iz*LeGY7a(P9;ELASuVkfu@$RlbpsH3dPst$9J&s}zSsfKTwUJdG z;yHvgXlZ*Vms3MzLTwKQ2F#+-s~b-{pLl}SM7GC8J_actPds4h6k0^bOP1>^7)>L&xmLO&Nk zcuh9Y8*GsMIA=F&0OYj-jRLy?7GN|EHtuq)`8b=KkMgKBCs_H=1IP~IleDgyMOoxB z2rFMyNNx@U+u9hBt*Ep}G*wl@u?hy&RYl$^tfE|HS5Y?cQ?gN>(D?<|eC#q16YWZS zfX~?Y8CB(@uW>bmv9>I=5Nz?nVC7LjsCTFgEp-K^!x70g+(HXtO^gr}v#k%Kj}h<4 zSUH3NGq!<{+xWg%p?q0+BnjQ-p^DZ~O@P1IqpBa>?x}&lL14b+Q^U%eKAr{8OH%p0 z4!d_(r~re~2W(4nnQGT8;5hAgJ#L{Zb)?+mdErZ_*xJCtwnQoqF*PP<2=$x+j+NKm z(Nv$KYLS?CCW+K`e7aKv7tbIXKTe?F@!~}XJtx~6dAZS6?`TO2~0Y%h*MZJ}Y{uq6HH z-mo3qg~#!7)yu8@wO??zPxxN*yc)`l4f6~Smfk+&g<94=d2%*rnT-&1<$H}vq&{i0 zn$F_jeR!Kiz=~9q0Q16v>K+=uCu?KjH)1^=k8Z#g9)3TfuGCc89YYnWKd8y@!N+~; zC3GJ1EZ0FY%3)8ro3Sj?>IK{0fD0bP4>+W;Y?OeRZ{!C!%$&L3&X0Xm)X;sUQf-Hw z4e_7on6Bt>$%=TBcRBu_sIDMFM;K*L8vj{*A4f`^Sj4aBuYHH~D1Ap%H_ssqm_>_A z1$7ufZ#KKRBtW$;C>aayso|4Q>sxr>_*TG`!mZCyrgt3CP&7!TErG=q3Z}=7OUoP; z(=z))f(J;-e2AW#+}z@&&1Te$iU;+fvzIz?$%f$!$1P<0*}rbu1UQ&!M02-xBCt1X ziY!}&bP5fQMm{s{wa9q)iFHVw$@$h{JlRPRiNJ<%mFKb zgMC_nS7iAUNP&_o*wY-e#!L2%@!~3Z)(D#7+W-Zy`3|k{dnJ^a%*urCy}k+q7hI?h z2i!SZ!(~J7iycOZ;1w_w0)Xz*Zjo9_k;=ERPKQCcdW>t5&C(m63vI5S9LxU#$Gh|~ zhUXJJ8ZF3SP;X$Jeh#c^4X@y+7j?Sc($R>7f$PG4Yj7#S_ff}J$ffziBKN($hEZJa zLwA)`>`pnA`{#J-A%8BXU4NZpz3_`&?DZ~v-tpPT4J?2+_+o$u_!dDAJt~3sQKSzX zI(?f$vhwe#-N+2xs1p5a8FT@kOM+gpBGuYdYR@a(P})4=r7@~y0i{}O_!X)lMo$}1 z%>ZN)LEU*>_)Hb0aloe)M7IM3XHB0cLpW;2Dcn=09s?E?+DXq;7&4%flT2z2(6|tT1p;A z-0`H%*=2knXoIzf%*EG-+$Kjany}eVEtjWt^ zSSJ`Lr1^x)0Hj`YW#VTXSyiP?=~r=q4~g;+9){T5Q*VxBqX{(_X3*G<_|gcH`+xid zfYtII>Olo(OD+;X|34ljS&SC!(p1cl>?5~mgD86pGz?P9x31ToQkDsRgp(nu>TW#d z>Kn*gQ<}#$zP}O!)sN8QS{$`T=;U#eQ03RnzkguV<16TAmEr;sQZ(Y5pxvShhm%ZL zMb7d>6Xj|h&M%H>GT9EbaI)(7bsUOyTdN&)RJtm9H2KQ73fSao=*lBWuibds{0@E>a)Ej1swbhV5OwMQu?G`@kSuB^d@5PQEJQ89KBpQzo<< zoX~bkIpg^xahZkVat+^)!_yJUq(K6ly>c2m`bqE9;VbCtMsT_$*t-q~Rg7CsB{?7_ z6wC&>*}w~H8+-%wK(EQKnc!Sb$-IwN4|duo989Iz_}RZ-Lr7CBOC6i%F-|eAI|rdh z7y}R5o?erVa2RK{WhuUq7;%H)OavPCM4drKb0((ng63cFHa`h(tT4^(oQ^t?TkF~< zs?GX=>oK*ODu+lCs@qzqR$Q0V%%AABP@=MMc^~n4I=y4r<S3#d+ zduUm$Vk-CR8}gY2F5}(sj<*)Y()cGg9$s@ZIco&#=PXxz?_XS)3vhc$Vc<(14~g z;m~hiMe_f_gLcra`l-CRF}_iDMt&|_m|Ate?5giI&#R#n$Gs?52D|0#;m@`#)74iC zLaRK}GpM#ohk{|;wLLm|v1wYoC_&#C>rP=czgns?s=|QL!$5(hHm56h1+YZYj6-^f zRl91oXjT)k4+9^gOuRxz-B7T$=zQR=&!wuqc(&=4h1g0`Y6z3Bs*`VK(-c(c2rjOq zu;W#QUtz!uq8{4DLR7+9%U2PM4F4ET5ltZ-qV_yZpDBMHeZLAG=PBqG`GE>69YQ{z zFyf(&?Q}v@UtBdjCp#2i&2)YH!aHxe9QVF>RM48`VYI%M4|9DpJ;1@>L>}1=_Dzw? zN#-tf97A?l**tuSH!s^QoRhZ|6MS-wt6|r-oYU<4vU3X4$Gi$os}LSR`Iy=z{2VmSkhaO~&&s84YMqE%;y+l@$9c;=07`I9Q-ssY{Ep<`D0B>Q{SiUiN zA2h*RSr$14n;6FZw{*fyE*$`f(z;**6?m_Eb9@7fkR(4tGA0|>`JqYj5A?R`C(1){sCDj3_uyK4s0n#P#Ht3WL}1&OkyfY9|e^WahK z{|t0p^29fuWE^GPH|+D-M$OpU#2$fe9$y_)-P8?KnX?_UHDQ_L5#44IBlSQP<{2;4 z@f&cW^F|Dz1T%yDqKv5^d!Q9Vk4UxW8LG-NbyW_`4kWq{#;kNiyJ3`y-^Vx!{2-^L zzhXE=l;^+!UP*Zv_vZZWiITeE;Jamx=_;~;I;on6m?7LHafWbZ82qZ8sqcS?TU_SJ zC!UOV8%TH#MYU~0#T4Uxh`Gy+xXqC6GwDpBy>eA?>PESTlGS!&HUEf_;G-Xhud2LYyU-0sec0Xhd=o_FecjOeYY}ac0c*br{Af7wuI!^t79%}`a z9NW=vz9{y78P0n%zXPu0cDEuk%jQZIoI6i`JK{g5=!eF)6nOaG0`w z5(U86A4R!;A|xM0fy0D_6?jrGWGdwHH^^l;M?misz0ZS9s2=|-D=;J>jK8Er*Y*>mP-tn?HBM#^_X^D4K#u?9N zzkk3BHa4j5Cy_~1FzWFVI0g5J+lDS6ZFh*ai&Vh{szOnS`?pO&rz^=hD#fsaA+p5_ z5d)x?Q9{&hScF}Nf!KYhl(g=`)8i1ZF@#IV0?9BQZ4q}E)$%o1&OL-m4IVnLbBp>4 zswA+SswiYBU>;c#hV*h5uPsHfrjS90Vws23(@d@#(L&Ufz{5~ZmQAYDaXCy# zlQRqT-UpE+tQ?l5E=Ia5>2ShzzrfU`(OUUlB@VlbZgms%eI3GTc@GUAH}huAky+H) zGz#Y_9Me3*4e$GByzsz|D<3mT0$VpZDnI#rRMSRzZuO~5mXCULorUHP7=7SrrSIf~ z)IGqLhsp(W=VRap;rWrK#%Q8tse~~8fAECkJ6>QyMt54iKi~x#rUyv^J{cdR)}ZGb z=&3MCxG6ztm87+!rCuGCm=3E%aj^(rNC)Q=Uf`(h4?Oy#ktRi9wVYy<-&h3jf!+uF zVCD%w-z~^^f{)1Ku!$Z6ID$X8;S|G1!8MFB~we?>69E2saZDxIBAhSSwa%{ahg#i0KPsm;ujsdyMVEQ z!zfH!qt5(g%z!Vv$ReR{xd^*l@?iYJXa3+3DwzBB?ML)=9;$I!FPV7eydTe_J^=qly8?3#|d3#WPK!sHC&< zAK+m42R_-JAP06F8=c27#hrtSZ>WIj4Xsx38zjZOF}COEMU%bGaMJHWE1gYNL5g1m z=k|cB09;7$;ja2Ce_?8KFf6sW~Dn9Hzqi%~4R^d4a z$DKi?`Lvw&=j9_}WT2%IHUn27og%weA)TDQlK)Xilz~M5Q5p@}td<4|r(^gI0((j_TVY z&?S8?0a-~#iCbwgNFen$I*C}LYa*FVF5RSzQ_hA#eu~eTeC97YIfXVF}U-&S7cVm>e5PX6T;%QR}@75VQ2~?J; z=ka}<-Ufo-G+a#~mK5@57-8P=bdML#0oXq@gp6Uv;jj>m+~kA8H(WpRHNLtUBJ`L; z7%Q10I$t74o1k7cQartlpD|U^^hr{l&DPp61Ptp{d(4i$ShSqZ?bD49c&Us8J*2|W znA@bI5<*wZ&(y-li_3*tS%9do5vY9zLNhJLjncAnHtMKxPOf!Qrm_@ewnwmrSBUSB zDk4E^yQ|5!US$}y;IW4O*4bqx8Mkc3s%_MIjKMs=j&P8`iEFNfV~S;!3T&{@k;Avq z%Y{L5Bnv_nIPG2i)d)*u#(t6mGNMlzR))2_KA(w|oIZER$%0$1MQoExK@G~(jkTTC zkH3OAX|-xnNyVwt88C%vvZg3qtB^|A(pE)P>Qqdd>yht;Ms6Rv?*Mf`ioal}3Ix89 zTSkhvn$w$BMszdy3C7o_7XhiicbH6fSkf97&4oBN_yjfrsC-*=b{BpWo7&tKFGM7O zciXV%+dkn1Uw^Zpc5S`m;ciWUm5i3wqt&F7bmAwqSH`WRwWoGTLD=myi3`z~bb`+( zEptN}DT@A5U+*hNo7}AOe3w<8XPp;WB|fu(-95_0=aY>ckqmN!U-`B`>pbN$sHa7i zBHjw~s`J?rquE5Qq0~1$XSgZge0M_kULG|F3G~ikC8he2PPB7 z>b>yRNlnD1ZJTTnZTW-cD#r;)ayN{!evs3t=>q7&2U%(WQycID=-RDZE+1)>(L^VX z-O4KZa=JNvyO}xZnfyviKIRcmkBZg}!6VeF=S=UdfEyBQ~ue&>@@()rKq3jTpXWuiNnA z2B5<=WQpo^7L`ZVB^}Ub%dQo^Ago4E0K&N*#@3U3W4Cg)=E2TnoYOQY_eJ}UCO8Zq z(rMI<##P()H^|_%Xsj&Z6lCMF3bgcMTvl2q=AsjyOx~oy`HvR35H5%hBb-0IQ_33c zMU~9$)H*hHTJcj#7M$x+jFyhcnD-Nb4r3!R&Wj0t(f(OGwM&E?=?xX}9uBnGx0Mo6 zwt(9>h4Rr@l1<@eQ@Gg{ZnlM+ZQ*8`xhuEvSI%Vp-%JE=)`T}}!kaBGB1Yt5B`!vZ zacXH3Sc_`aqpeW&cn?ja3SFk?)=uTp*`agWW|pp~S#>>Gr)oKgc7#rP^b)|!6OoG) z;FtXwwfbTZD1(x!9PL}gr3(5&t@=^~e0Ezvf1zPT~e&37yCZUi=FvIcIo#NUiIYetyp=WhC2e=N9Zpe2`wHKDbi!)G=#PMD}3AM@J4uJag|38*kV~;Cpe02tnWKr z^|K*&iQZV--r@xVq%)zq(MM8zM3E3=dWmTLZb9rpR{hoBOeZ*Su6BW%Snqg*?+I z);vFlX65>MtI#L*ILGA#QCv}VzQ*IE;VZupj@5803h-6=Yy4W&_0#27e6GgB$3n>} zStfCZRzfdy2kkP^r<%4Kyx;fIbB0QV@x9?Jx-=$&H4SiJpyGUEv{~Lr9I; zVLFZ}vCohlpULZ>H;!au4b~1);q0h5wxhPo z&Z)8V*7YKqkc6!bDaDOS$W4nD3!-tQ-BSB>W!KWX^vdDp8W#UOUTB~h0z$Xo1S{j| zVAzytq-FyB{(>(!T9i$=<>-LX4J*c@A(OKFE}wo6N;6J`>CH_wH$ED|GA6-w+M$wX zAS7ov{)!Nlp0=OfzpyYxur89cO|{?iG?M0OuM(gcY<(WC$K;EdkG=LVs1o(i>md0y!h8%UXW$hTt_YahYK>VN)$7@IdQ5|a zgi*QDDZS9%mk-fwyR4!$DBiiPZk&d&d)x>1)(Bndsz=PPBxf`oSGCgNCVnN}I>iVy zg>}aVzz(FI$mnr2F!l2obq{+CQo!vdNSLES$5rKFor$yOKk}ffg=ab===1Rd>(Y0; zRB{#w?*8HXv_QTA!5b}v>YWxC2S3L7O@yn6Vl;4aan^Z=gI<)YIWt&baCu9TPEokY z2VD6GK5Gl}G!)K0E-|6^+~azZRzL$Kz~`7o!l8zMNyMd26LC}SD|wHN!|t8B5ANq2 zq)C{?x=_2cxAUWRL{3Fe4j;png7_GMlGvrQ-K;1}U2vFn^4>DB^2V1KCwv2P3$GP! z@wG$);I3HK!~nXdgwKCg1a~)vlZXgckMP7JHy+0DtVgOAt*hX0!iO5@^YaBJHf=N8SPGg_R;a5-s zEGg%K-D@gSB%cGN3d!9QsxQ>mRE^Py>WpCyQ6;enF6tJSV+386k;#0dlJ{_#NjQoz zWG*~X6`nGL-i~NVtxTnsb6sr?lTK4DI^zjxRf3u5p_L@Hpf9^d9;Q zMi1^C9Toe95^E!clE{)iwF^9AE_yT-Z9ZM&S0bpLsw&?(KsH9KMkTnbG>wN96@5-| zU2T4@%6*PIKK@+Z-eF4dcwS?PecX+tPx!oA46n#0ubyrfXvB3vL;B#I4IC(}-#Yf; zy;WnYkVfx5mgJ4s&?CrIQBgfNc$a9KR+Gg>$k0Xx*x#??eOry(T|b6VOyOO?KE-2- zPpwV#*4!3elf%9T9>F}<(XsVNjp~~g_{IQNSY}Nt^@psNUN+D-s}Om0K@4W_+KqUC zcD-rO^cNnHo<{R9upun7 z3ZyI>7o#4Et3KGUrUyRh=~HEWg_7}ek~N0BNttyvhx*X|{299giJY&Z>c zob~n@FL-DMA7?Gli4V{cD5udP?Jhm%Zp1eLJ1Uvz$v9hbHusK!WZ8iNnzh}~Y3&Ud z_c|dkH#fS^oHWymjZzhy>x4;JH^eJ%d3-lD`8^4J10j6KOl8Wy7cf(jl9W;ayjm1? zUSY7ce~B^Ii$H!gMG>w7@oUsTD33!{Z_M357dYpGER&i^`1ZLxdYyy&$5e<*%z2M* z5OxdBU>7`9qu*Zw=0+)`8WtwE6J=`k7GdOLJxYxl7yB3l!6<KtK4Uy^kjZ9LS0 za3}3j6lK-OPma1o1x-Nft;{zr%UbHGrs-GnW_tC}WeZIgOvd=TS#y2SMtt_cnab?9 z&X$&0rsg&t=0KP)m!K1{bQ5Z5ro~1C9epVqw^dN@S820McVAV~Dj>kepeSbrtK#t# z!XczVr71MK-s0R&c{iD(quc!N6n`GCdqkyot+vnY0bj4`3Xh7`soBKht}ijWF#He+wcd9hZ&Y$li$Fm|>5 zyhKxo^SGNMmhD8TgbyT_Ym(RE;`=sM{5p;jvXhU4Uh#@@5I;CUw{b#`>tVt?3Tgn# z2Y76sEC_grLsLQ>ORQswbd0;8DuQT0$6ZuGF@;yL>3zGJIPJmoscO1X7S{trh17hm zYO9N)zG}hcjxR%KR#C|gV~`hD1g~oK*3~!OEey(O80|pHFi14usB4MxAY4BA&Jbu+ zr>+He4Vrn-o`sJ~3;Fq)*!cAjCb6*MT}2rXLc?&`YXuQTGak2Y3ef1v4Op<^%F&EB z2P~2crp12ngB%N%H^F)=)d?-iRX7DJWOZ-4LVdrQ@@nt%%AwKqTaY$4fy|y!SX&n< zw7myKvc7(H9!wkN`tjZX2TOC7zoN*sZ=#WKFj<+GXnaK+%wa%9tXO9CO;ZufVg4ib zLqzlNV}0`qEfU|kzUmj|sQT#i70>y)G3}0f;Ct0WbKHkG!=XubbK*>=8}(Nc%Sg~3 zm=aIMw5O#s3!axL)qivg{`yHDy`?JIix8wj6QYdy_LujtdzB)9+k@_2vCowNmX1c2 z&UvgiIrw?2;Pyv*=&E*Ubl*a4$}rP6d7EGyTy?Q!n1SX4H?Q5qJTGeCNI+$^SKcQW{4PzgPh zqEyNbP<~w;4=$3%94sJ-IVl+(qcyk;)q8v`z5=+}2HV&iAYpzAXZO2%OH%bX2tPQ- zo|CqIz%Lkz>VH=p0+Q+-dzZ~&XyIwVUgw~Lk_9?yJfjgeHDlD#FEm{^N#cM;S zF#HrKSZw(5z>jL0BA#UVGFnYRrBYeOWgekbYz|cpXOO8gRk}8Vb>!jlCjC7dErrlS zjUKuf3wAaaX3(DQtQbP89BIClf^_ousDtw7x=rB0QIc(gZ0KR_-?zIp4#sMJ(UIY? ze5joos5V|hn%5nm^E&Ca01E1qC=g!R9%bD9on*eyZ7Uv?e_Lm+3xYe;H*i`MhMpSir{*cT2&=53Bjj-3>gQ{XoTr( zPU+|gjX0XQkRyJ{SCRl&MOq82fvMx@WKSQ4)?`!}MXSuJ>Kh_h<|(p)Wu(+iz>=g0 z)PI%T2z2a-WC73uNg-U<@OPVuVR@%xnU%}bHHeQ#1(fQL<%6M67Qd8{l>2zDk}VQ| zlb}63_b852rFYoc##qvuQhJaLyNJ289n*0q<-X6>KZ!aLmhR3ZbjSgniZg%wM**t~6?- zUV#@o>c&DSkTL`Zi6G$`!7!mqgf=#hT+ng}OWzD?g-o5ht0W_RP+3=zN%!Z_d+Sz7 z%%jm{NTU*RpS|+Tp=89UD-UX!HIRoqd{Wt@O(Gr%Cf^mokarua;vyypWJP&!=Ru6}d zk>92csEw}jAiCPySQxq9sN@AQ{88we7HqmYSkoqghPx~l6JfU)tI^M*i zn$#Yn3Kh9@rH{{}FHxermk@E+ku;w;f~b*w9)kj4ypOfG9BTYZ!h*ag9{D`fvmCDY zMCn66-bjgkA|r~Qt)~_Hj<^a7hCp5YXHlCKjBdve2 zNx|8fMn5ZB1Nw#tlA{sqO{)abooB5I@BJ#{=^pQCu*eIIUdUx=J2=MVO+X=c42AXG z>Ak*|9$~61fk$nXSG-o%lb;Z?28B#VN|dHp^-dVxa6b(n*~L<)3pzV2ZK8plZJhQh zR+gh-igwei@VKD5VE14E(=8e%<5 zdyv4}xVplx;Jxa1$aY%^Vs_B51rF+EOb_){>_CN2v%^g~$e^n<%zH&^uWl=M{qBHa zCMdp=m>dh5N`Q3gMlS{P!_$-kWV-V`e-zU7`Yu=62LlZZDqT=<7v1~ecwlVGI!C{lZ#8Z)yqy2Ov*`bo<;l?l;a6BAi=$Wy6gR7zG{SvXLsoR01 z)=zpeJD{tmHWwb$q-bJNs&827T-6~O!Khel zhO^2WczuHIN>>26bWX#f!bS{^&$AJzCsFSP0}d9z-6lL{Ok}SHaCb*VgFu!DY(DIV z^TpZr>Nh+*Sk7x8^g2XzS~ui&6A{fZxXhtewZ#i&nfUQr5~=ara(iuKDsC11_; z4e(bV$0P35SD&cjMs4VqeS(>wV;Ka4DuUJgTFxldwNfWnol&=~UoFniXqQtU>pJ#x zd)V9Bu#aqLyV%~t*DvIu$wBW!DIAX1xVqg{dkWrCls!4${na@=oDWN#FvmVo`BXpY zRpVGiFwl|y9zH&gL7QO@UpsemfXuK#=7o~3fU0cJEd%w%S?J=+fvCOdNIIhFNWg1S zf+o3(hN=2|rBfV9Ml%_Y+2E+74|tOfEp}aqP!m=s7X+5uXMSc-DIa|^2*^>5p8Rgz zNDpuF>vdIfh??!uyb4pz2~z7`cp>N;_wg9@p@;+Obsp)(R~y)u;*rm1aMb1e`4T*$ zP+*Fnz2S~8Ihl%l8q4%>9Bf_5ixs4D*AO3(LeW9ZOPf|5f2Bcv!jp2_2KE)da8A-g zMx}b%!>r183+xfK>Kf*{HeY~MUC`#b*LC~i)&~o+QmqduoWe-oK=bEPH>m?0^n9P8 z@t;@h{){Ja!8+qS29cdd^L~-UL3Cy|dIK==v%Z$a!RN?`G)HyjJev1}Xcf59vGJNO z2=Ci$P;c#vhJzEM^`Vz?Zzxhg^-}iC=SV9ljqole-bd~oEG;MfY(Up9UQ%jn>pC+U zE7J4{D~3Zfaj0I=pp-u2aXz(gw*(&1sF$u)V4jC?zKT4aSD{xpzd#?K z+WokTCcY>g^vnA(p1JMuEHz&q#G@{2KSoov{TR;5_G3K%+K<;}VEZwcgHaKAV-h^| z;zWrC%cpi+R)j-apt@d5LG%01A%pr`52o=rn!WVnX{<-k7{_q4$5}~dsSw)Yg^(h2 z!V02x5(gqlU`!ZjSni5SAv%(*?mc&$Qpj3V^3i~cQ{#wxZ5ffBqT3bAHROnkE?eLv zOd{sRrgNE-L2$eaAaRHaoZ({Y+TN|O_SzhL)huZOXF(Vt=oei*&WoGgFO${2hxpa)##ML3+H@u-=LL)o+yxQe}hEjT81NU zlnfngql)CtSFbg93mDrs2uDZSc;rbWH7CV*QNEH>MrIP>DL5wJLVcq~GtXNka^YrW zRSL{%=j0fA+Uq3Ic{u?x!2(@;l8z3`ci0S3;pj{qt!oKXEhi&|M1qYQZ#HfW;A40! zn+;e_R)!AU@ob(g)1aQOqbgyA0gD1FG@evL*yPgn{ubch17?c_N-v$jqYyp{W60=* zMkDlBOkAKPAg1qz(TGpqDrEXKYR*~1o7ns)pUjDs%w zI;SbR^NE$GeQ3+f_X|RgI08O_G30*oP%`c_*j+0t@Mv4D$l9qhbU=QlY8cPF>^zIV z$z!KD3f3Vt$?>v|9pQiy^pLv8!VW}_wsf`#eSXD5J27A^=?zXlcggG>K&nl}nfaYa zoexro&e&5@HEsJ~w44RQ11VHUK90=Anc4?o4D}sCs^3rW(3UdesG60f*Sp$4t2yST z+Gz^)21w^ER6GQDXc8ZLNoTn+**QWo$;r@-2Z_>NlbOENE{PU_(x*4^JAuK?2+iuS z$ue#7TNyG0RSrphGFb!phJ+v6>4e8s8H^5|qK&PFAe=Y3yK;=cpdju*kS;Hs!d|5KA&*K7;G$A}zhxlt7B7*-OsJ+Z`No=IW8ex;C+1 zp6PfRm^-_|AS&Tq$>y)&1V<6dXD%i7bt;{|Qaxuw)}FTKB&%f=jw&1Z*eO`srFy|j zXVe9CN)6G_ADto&ab=i-7} z@=p)07q@!)y%81&`2+7U%ScGM^+WM?mpNwh9=f(x7qS0>TqNbLBTm-8vX3IA*O zGT%4&GGD3tmw`LkP3pf(hkU`o7+ftVZjd|`R>HD;mjR~;LK>(65~>VSfSu>VmXRc+ z))EtpQi%-pqjEyKy??^XKW;vc z-BgES!WfETip^1UH6NV9bY zsnXXM@C`ueSZ%N}5-oh(r-+f%V+Cd2AFWXpMxr;$BpV_L-XG4W@M;gq?$c zDiRK=BOX5Cc*gTZluTvRn>sp&vfRnGT0s?+*cLBbSyciFS(3a^azZ&DCs(Ugd|b1& z4OqJaqzP7Xl^|vwt$avD7H0-3yM!Wn~09ML+)V^&g_ z;yEeA?+~1U{TO0*I;?}c>jVI0ZFC9ik5K?0z)f?jge10;)G0POx&PTh7J=>J25U?_JZ&?6#nd< zFfG^0VG^wgPK`B!-tzP|91^BvZ6TJ2#OG6~#31|hfENL$fG#myNlf{K)8A?pru)Q+ z#q`yZCWE$kp{n4C0iSim(ZwAgLjtMAMTkg|#RsG$N`mDK#{jJ%;I~KIH~6Ftx<-D+ zL;^1MRis*5HQMl*k5>r{e{Pe=PCwWj1Ov>Ru!c|%nDQA%(Ph)%f?i} zG7nvN>-iBjwXo8s3&H?}a@-nTY5`Z3l%Wn!q25)DLmI-piVW5@d|v0{6K;DvN=l7~ zd1)1JSV3FsexAqXqA(Zf7P2sR%HVFBIXC2kzNHQ=#k1}jK+ybIx`e#w^%^v3d<*6A z33`bqT=bmb6GY`V0W=Dp<&796#!?Ae93)y}A?uHFFA7nL+415iPre!}DLjsp>Gyc) zp>g8pMaiN-c%?MM)*98b+T~H2G`oSVsq-lNR@w%M#Z(tc8Hc8C@dA+=f-)4U%0PWE z1T#jPPfQ}J9M~~ELH|PWm6`B_1ER2j7^lEu9d)H4#1^7bvP(AjHRjRCwHV4I|?eG+{q4XS&g@*w>jp;U*v!D1N21 zmMGP(MLDN<~Aqlj8a z+3#cthlvXs-;5`@MKo%vGu|3^`4g9JSpR5x{`69-FRR77sV>`VL-x|Kadcx+^^UgL zCf80-0^Hck;MZev*^0R zUt1AQAG<+*$a1$ zWLe{#Bq@Ip1q-7*5b|DwQN?j-u7h&X{U$Xz_(=`8_!c)gy9@3@3BTf6X=itBpmC4Q zNW4KMj7GO`;*Ba*euONML8!S4XLr%vhc7qpgL-@f^)2?>QaX5Q=OhKch4{nMs@N+85{tp=sBeKmv!_xGQ(_)KM z*qW9Q+DIrVkK22^FiMh8--lBfEk)A_6Otm;EI@mKpwUo{e24n|ojSM=x=ShhJbaPY zpnBV~wr12tMl@}o6Px;gmzpG=g#~n_c$sx@+qU`)6s*fXspp-w{^R1-(#tCGi=W+iL3b=g7B^-U(3=m71V zUYgTypYc-JMIy+#y#SD4n#~uo27)cRA*qNa=t9-7qt69PL3rQ5653F$h$btAe%ZBM ziGxmpvkECgG;^qK=27k7eb14Oo7Xpq3@S-HSe5Rm) zlw5^IA(k~b>2~KVT^Uz}71^}}G_!fnp>G#-n z)-`IU@uj-i;)e;C^#A%Cgt?z0QOoBj1g%SIISktMC7pN6Cp;TfJufZf`tcd3BCyv9 zTb;#~N+UV%FEDihQdUIk5-+4+4Jr5rDJZjyrCVI42-0!+9D2++%y%a}m?9E^IsZBw zTxk?`pj}yqdA~Ifr|vZH2ze}hMTM>}e1gm)d~E#@zWz=G>$hPZ(cXq-R7Dk}j?fBH z@9b1Y@o*dV*wfkzI154zRD{+rTrme!skkZ40efKhPH(v|AQ?t*TNzK8dV~+gJ>sY6 zKKWz1ok6EIXD6iy%Z%8adq}bBI3hOr(5ryCkO3NwxRDXSC}P~k2q5KPfK48CuPfRe zt+$39Fm#9dic-0gHtvk7%(-KPJwB%f!uXGO2M$=efky3t47Po8Xa0t2tM z0g*}`l!=xBA_0!BN~8{=v;&}rQDkZ$RY7U|^!cI(Agm}fI^aOs5h<$>n|W<^FL)7< zWF3|i%Nw5?l~2U6MnkARRaiq}Bt|k~0m7Q6*<$NiTf$h#tCa|wBLBSD$5RV(4?|q2 zD;8^sOYKz+)3fn6yuVofFTclgZofPJ_VnMKCjPn8KXEDqE^>Ak1iAF!qxd<9->Lr= zCY;63Bt)bd750pep*K6E6MQe-; zsmNz(P%}9%DslNs1gX*O&che|Ec2N2aOt>d6#00Dmo=M6Y9V(j+s;{d$lp!-(z9xj zSyf!EjPZAic@b$hzjK#4i=RCc7nxU!F5=}Zt!lsTdR@H})$wjnBJF3QQd;9r{W}TA zrT?x!572_2nKq?|LLD# z^fL`pujOZZ&1!tji*#qvcTfbwaX$+76Z)CgWjxMMHuq3CGPH`Pg;%un z|M@i!9}xaKg#QjoEvizm&Tw)elnfi;Yoc2)^&vwn68(@PNNIHNQdB4kHT{#1AWc&c z#cJ{zwPc4%7G`}VedZ~jPV+g$xUm;;N=KmP5_04gj%ct1nisEmQJS&yr*^%CHoT<)K#@%mkzvs7a`hEY0+R+sYzf&k z5AP{rJ{G-`fh8r$!O0YIDP6{SuW}&;Y%w8W68Bnaex%HnAkis`!&O^4$X{0X;Rk@* zKeTikesxz_vkX6ez}%bN=i&3M`)XNmLAP{^%L%mW*F|`b>4$Quu;7$|%PQqZ7f08a zv|H-VS!pXynseM%Qwq6=;70sc(tbJ_%MWSzLLW72{-vDqFJmcAQEy?6di&fEmV||p z!M@5bxJLvFhFh48+-@k#VaL2U6v5}D9m82frClM#tyNAwJhiI|p=$iXi4eRE{B(;i zuO)nm*pee%4h`89bc+{8ia^F|P?S$N_DeMG zB;f%cCt!w2bO&S{r22}KS=fd=G2mBi#BJ<1rlX8iqeUo;lNp_!i;*d_5>G6!7Bch5 z1*8Q@w-VGEtg=WUwt^e7gEnnH+EXGX7MBU*H7FT2l9h|vlgZ_hmH9QyMl&`H)k$(w zFhP+yh^B}}$%6P($siNGID^dQ?mZ#o4)$Y0R8MYXygA2#G>v}7EPQ|uSk_-wb z);R{vcc{l3$NYGSeQc&)e$WB3w=a0Xrv?C#T!$!^BB&&>-@6QIBx=k|shFCX;M)Li zPX6mVUO-9%l1QGQa?KPvTtk|q%UfRH%%Z1%J>aD?3Tvr^_>>9Vg@Ub@4L$O~8$25% z@aTq=D7gqnnpIzL;Q)hoN9l2mL-Q`ZSy83}gZo^;6G>d8KItsJ<3V_);a$5%6L&!} zbV^EIxNhh(-ObOq-jlQ`t7x;2Hp^&>Qz^rP{c5x&Gj~JJ-NT?V7j6W1VYpGHT*gxw zjc(ygZ|4zCFs;rSc1^Atv^s@L<@ue;wc=7<2kpvPW(yJxMiIQsX|zLE3?vsR@Gcz7 zzUA8bAMYg-@en@t-lTJ0hFy1`hj)C61f93Vouy|!^wM0za{`M7SjYJuDICxDM2D89 z!$|wE>swOW*d!qYrt=1$;Gnsu&2wjyh3Wj0TUT#Ql}-Y~zA5ab!u{UOJzn5m)IhJ* zH3ESH!nIeiiz3jnG=gW9jCMqewxKc^!NHk9rHv7+89^Do4c&M}KA zB1=O^aaDS*-;8~Nqm`fFaAmAZ28~`Sd#TcIYJ{C7p>;*2TQE}iC;%KGwFdO9={hB9 zSyKOrkF)etLrRum@U9H4Kh_SeG{!t2*^PtB0BRaWZ-+{6P3a_)3Qt182Nee)2#=G& z#~=q0QDZBYR5)|E_jE)ii#~DDZP6-{(=0=Wb`hN!jw9KjOwU~D(S#-@3dwMgsP}xP zF2l0b!%x>|(Bp}nF!IoIn*+rI3 zs+PZ%zjE>b> z!kw)N*pXNfm~scbfI}wSXb2227QAaW%(#2@uPc&-=ixFOPsNpPnvNTktxP`1=G{7C zg?e{Eb4k~W)NwTQP?hN&@&vxBcobH2=-Li_8d23?(=e95S5`tN@p3*~e$(smY{qk4 zAmgO2_jS0?rHP(w;fC=VN{1bAo`zy|p#eSbE+Dij&@5ZF9B9W#FI)8LrkHEU=wyJ* zo@g5&ktSR=nr@KHS{3w3drz$LzZPQx5|upaV?fus5}0u+?bHyO%o=we--kI5K0oU+ zQd4>=(!V#(JG4qB;Tb)Y!^# z#dPu+U=??&Rg?i@#~-ru(3sq0uc!zqJ&F_ISPMUj6Y#pP>b-tn_0sKtdjlIW!k`%H zKw@bCEy8|67XUZ#RY(IE2})F(zOB?y*CIB%>Q7WcYPrL*@-PokW+Yv@+|g*rlKUu& z_TC~_WH5Ke@59wy)Xu_rcHw%|qb5xi^Z5xC7xqu zfNrh3IFD-Xm1# zBElq@>~oTtwA0SAfXO{i?(vmO{6t0*U(!*#Ow>?-h8$68A30uDNN z(Ao9DT)YQ9C>PAZrL6~0q+Llk^VdiswMJOrkL#%pWN85R2f|h@ucnG%s!01=*E+VRfDc(3@05LtX@r4W2p=g^lYT>K3VA5g&*m% zbs&P8an1113yxsq5<{IC(3$ZR+c70sD~V*aO5k3KtrRMBtriygjH^|{!i&w#Ry}Z@ zC7MCzZ}s$ng&93=VkynND&;8$u`OQkhTxI&h!Iwpl_C5M8;w#5m`66kh`2yYKy0vc za+=P`s=}PKMnU!j%%Y1S*=Ha!ZADB>p!O1~U}MBGeL~qH8$q^VnHdzAW^CihmZ~|- z9O7ChLu!z02?0^b!I{{~BNNIB?VJ!#+Kkkaj72yzGl@ec(V^6a<(O3+taG*+!5ZKp zC^Tj&EKJ!}j;K%;@Wf85#_3#u9MK@V5@qI)4!4-%JJ|eeQ^ZwBCFIE?^{4P!BC(pM z8eS~qiKL1KCzFy&7MX_4s@)DS8KkaEx4f+PsT^b0(#N|i}4A^ArnMmUB#-MCV=9rFbixH*lWSLupxA! zynC&>7=viKN@MpkUTAND4%X`odsQWcZC;b29-q9f!B?ty54|LM? ztUDMa8HtEMNU|W*|ETD(YmsD4QDLBO46+4=)C{A2XPb?@@$4|ord0}gDy|aQ=3q=) z=}a!`$ADc{lPeI5vO%p-v>+7=b#=<@K^aI)qp^y);!$i}gWBx3$g!3yQAMUrIrtvk z)BTI2WTfW`m;8a}AK;lBd?ZIZK5$dw`x9R9W{vbOF7Ho!LEi)Zq)HRt@HT}m1%*9V?G1;>YcCpVrm)!dL|mj@cFL5l47|mbgj4=#9-VvDyf{Wu$85Opp)ZDp%_;SoQKtF z0MB*;q=!SOe^Ip6HS0lrpXZan&{{rKr#UJ&^w7?&M?6G!p!{?L-sgDqLcXK_^drfq z9U+RzHef+GB~|GNh0H*LOrkqfKPX1_n?bijuhNsr8mCnii6tOz@cr~82<8UzPd7Fe zIg_iSBPCq2BWgXP+c1rAl8&Vig;3G*uV~q(k@;i8nD1a*vB}1!_iq?o|C8EV}HKGvbdsG$<1tF7B z4{IljTqp;$d;Fk{nXbcRz`^Cw!HVFL$B5uU#v~M(Lq4Dcya1y98ultH8?$hnFsg2%_SB8xE`(wn)W#4}1p;2M==5J8NR%{z=ss_Wi!YrV|Q5e>2zVX$#sY%^{Rw zTuO>%I&j)TA2`=798amVJP&d5R3XlfRlueoOQ_*-rc@{yM1lA6W~UOFR5OBIC90m8ye7H{)g*C3taNxO_^YEHNpj^zuVVkj598GMr7=P@f~ z7vajRJX{zl-CsKnQez}qQ9 z&G~{WNFC&4wA^JG3w#!!yAHNw;pVIG1{bYx9w{z{=N#NxULWA2tRE}zEkZQMVHb1%VfV9w8! z48dE!C)m7&RW3dTBT~Q7{l!N07aQGQY;=FIQQgBvbq5=&H`bjbkTJcdi>WCaRju$7 z0NN=6t2Xp*I|Be&0zBP6=yC8I)CV};^Z}0qDgf^lJUmN;8{bw6du=O6kR>?=8Xi21 zMW;xGVpv^Y>70OvN4#`Kl9ozXD*q|dj=4oa;B=fLCIz7@eC6*vSVkkalU!+ohSM*8 zl=k5kFBB0SqgoLdX~kMlQm6xS+(x64Y&wJRW5PSQ3cls@Ni}O`6x`APE_l4*!xk?B zk^+Y%h0J>w^%vb#>m?aIx(EO{rbeTK1tigxtYM48hADs}S__$r2!xFpH|<;VhE}@M zCSy_$bOegBc{fZclB0~Wbc%wnLh2xGoOLvw=&%Y+Y_t>$ znu3Uw?VLZVcxw(tM$Rc<-0ZDn7m1;Xm|LGRMEkd<*_ES@4rsbR|YttQVVZ?qDtW>>hDa0(Km1Zn-vcH^9rR)Chk z>ji|?y(6GGZwP7%Bs)@U{XGc88%0*^ zVhC;+Ib==9-q7p}r41z2sqz+*59xzuBSy%P+K0%pb+U2N%Gc9KGL*9r_MWuG zF|pt@dUP?WlPNgbu#%Ig8(S%G3(FG=bmY+OEFL&D7fXCW5Oc_c`*KEq>2`y=Wm*Ql z)`{Pu?yE7{GQ&M%yJ=R#u0gPFoM}j#XR4y&_L+(nx6t$&5UczYAup%ZW4CPA^u zi;t>?6|&Xk&R3U%M|U6^Q&H)ZM3(jrLHrHcy%!OT}Nsta98tT%X^JV*~Se` z8$UE{{Lr*E3{n0*zpdMAGl-WE-rEH=5vpGaHf=DQgls&iMh} zMZoRel7C7Kbhv{`>wym~RBk*PK$Ej0i$%PVA@{Y7gmb%yW)qPuEZBCn2>_BD8I7jV zBy)6$8c#Yd>R}C8P97*dcTflyC9~*+W0z=>PAs22ySV6H`@yKO$K)yny{;qb#cBTo zzV+)$mFV#ja~o;%NUjPIS9dxD4=t?1>z<;w>{D5o)jHBM-db*V%yf^&QxknIIS&Uy zU1alQ=l?;d;4`9MyQDzBq~d%p^Vq zHhI}0WM1VEL^DLlc8`sQ3TD&Lpg?pJrtXw)GwSa1q-$8|E~75Tvc<;GdOMB(B5Y$R zcAwJcTl$KrPbG1OmlK^h?x9zKc#3Qby1SFDrOX1$#!^x`x&%Yq1pxlI0mEPem@2y ztk26Ul9(D_9{V9Eq*yH_Jd!3KUrb;5{2s!fNWX?)!n%7Kk1i(=o|9`b$fL^gmekIR zpx30MZpGH|lulnc?;~cHF@=shTwlVI)(@M`NRlbse;G)wJ)lu$oH8H*$|!}#fL#Qk z+o@C61?QZOMmf$q>Ro)6V)c}GCn)TH5qJs|@N8IH-RHwP57b6@O|%c6B%<`Jf>^kZ z)Is+GZQwzP%WxP(tc@94;Le1*wO-JK%gVZU$jIJ1gRUQL72{KipGmoBfO>qw3z5-C zP$@qOiHi^@W0`gtg@qUeg(wBeqWq~GR$E?_|6+9)B6TlD!9k_JRL@W07_}p5msT@= z8h#>X|}dizUg1g9`77L)nukx)bg>nqXAWT8eU8v&ko# z`g{*faExXO%(HTf6@=p?_~5U{EncW&rGS!Hz|(%y-MVm}qYLR|v>W@~mDb%>8KyIK zAq{W|Nj4#)1=vxW=(A64w#mpQZtBpjB7}}vRg2NJ1U43D&e8NiXLD?^pfVaL3;rDSX-4vtp{Em;4I_5Rz1Ad?W9P>+zy&07o zV^kE^BfsJiWB_=4gz$>&irWluJASp^+0)98$<+?z{2^A&tW z-qZ*(unyavDlKezltdSqk6wZs)bu+mV>*mtNIInqU1O@VwmR%^2~d8&;6*@+$YDic zynoA?dl{xQQoZFlmRw!YFhwe~@N%XUKmwlraR{Igbva zBGmn~#YL zC2~_UtE*LUrfJZg##eZgI~j3Oj)X)mI#J_b+{TCbM1oR02`J#%1h38-J6Z%ao;4`DR^(va220)D8e9gi@D` zdX+eE8|P%5gK_KH0#AdR7)<`fz=SXwjK+%!zW8z^rqP#;_DfgP^Dr5gs#I{C@=6JO z37gKtMSEV9>vvKv+Kt*a#lJ7YI}M_C-<;F#B3-Jq&M7I^cz9D*B$cA1?N49Q<+9La zpf05Is2#c%K)o1~5}0H%@=j(*o>YbuZ)LZ0>BbI3_b-mX;r%M#vPyf_8Ix7Ps&LCF zd!ERttIVQ`vb1yM{N2MY{Mc4=+TvJjGhbx8#t%SAOBYkwBe!;D7QsUUN`g)7@F+>muvNdC?ASGt8}JZ*f@8i*X9qrA@!q?CdT$|BY+( zH*${Jc^;Dm#(hz48k414`E$J&ZmmCS_1VUs&sLvuo~2_cy~*$9{JAL0iZhcmf=VP< zmuwtXDu|41qZbEw_?>ZU=V-)7>u;Q5qP8(p>W!XKZ{YQYHv_EtbGAV)+O3?)y0v-9 z>Q84UV4O9c;%Gc$;Ngk8#8g*=!w%t zW(pqPEC)|I&sj+%Ban>$sImgx-3c=*JfMF2h!>hzz2a`FM)^x1=-6J<@E#zF%fLyg zTXwvkXwfQ?o17{1F$ZfNJsag{3MoGw<@CnXLw-ET<{EE$IE-5gn#Sx3jMM^`Hc(Lp z3E<;cEesO%6$tWhR9UI{Wh#%aXl!rsLUQ>R4P%X!!uxS?WaLkS8~V3EH;ibL%nE8M zWXW{Tr&!7A3XgD#pjJ?`|yg&p{i!J5j( zYH(pxd*v>|SLHP?15;a?JIMLtc#6d-gBVkJDJ!UW2-O10WsU4I)8{ ztIi+?!fer5QbX^f`12{IS}pEn;>%Lod%V=`O@*NPQg_hF@6nKKWoXf^7_ANQs3b%$ z_q?J~QioC?^=sJh_e4Z~K)Mv9GO-B!{!N{^BD_>nOh;wSE=vT+k@NvI9lrW38BM2| zatu_W%5?LU)(%$&Q+O&8kwuB06Y5%_05ofIDs+>Ksf4xcR}u6qMS{r+29h`w@Jnj8 z9(2K%R;ng2ma9i&3ga+^%k-pUSKLN7*)QU?_-2)Wv6#9ays7&@%EVDt&h%Za?RUI1 zbPgD$$iSMQ0IwnsvYjE_bK!dXfEO-K!=RBH0&Ufx>~z7tq(*mmkAk`+Muz~M>#^m6 zSnUUA)xleJ@Kzms0`JcGHy&SG!Fwv<=$Kk-rpuaMt1Md?`g`<}zsEq5Y!0DgPGycF zr!LsacB-UnAt`wHPf#%`7cEC6qoeQ8$of4ZlQ7&hyygS`sH zY67V>Gu)H{KIJ_vM{OK&%mJJu$$5$lvNeI|6q&U0^ioz;?=dxs#|a+d?JKR~PG?I- zkK|GvTI#2Ds~|`QyVfph;O+Z;2+azxVn>e`XRTVJV$>RKNXm!f8t9<6B@%U#9FGnS z_bjK+eA+7;VXyhK%%A5_)U3KC*U4`_{IYxOam66;GCtKKHp}sbZ4AxhTFfrQ|1QWB zXWun7L2jRO{vjyrxlW(wg|co9{F~!62lPHO917ZfxEc9s<90PZ`GsfGbj;q>a4n?Y zCi$%IAL}MP%@&OTGubp4LJZ=rcu0(PL0FD(TKhqwJ*k z5fKIX`2xf64!&VtA9dn5(mdm(_QMK61=RrRlp%S_v~9?!^pg}<7g28L?B>CO(Sc;i zMJdhJe(Z4!ndk^GL(T@x);)TWi?ZfoQ*bc`(<48l3U$i4 zbsl4y;0GSGCI~zvr_wm899km6yWy%WX(3Cnf*+G3x|tHY*xXT?s8VZUV`FkmmK}9h zQW{wid-s+f#fvhr*X61Y-Lkr(PnEItyzX}~;n?s{8@=BgP%WGwHzwEY2HO-bj_s~9 ziMYspWsll*vWyEbqMjMKTD44ts<$su!5Bg{nApU_Yk5I=yP zeD$QSg6YxE8nIX-D4SiU=DWEuKml=sinf%72p#SMM1{MYjq;j%zVGM5a&3M^Fh$T* zP0Sx%*E2YkQgyE>DkItMiR>&(!18^IXvhu(Q|v$mkdMHMb!!DJ#p zzNQ5|tIx7Bw;gQ%L-2}hR5G(-R42^>WU>T{*&;2pSxN^ve2F)^pu_y)@m${Z|7t^} zr4quu(64;7w?_d5f$7j;b$1Jxy(2<2fb>{%UD9$=+%`~&{p|Jt4k=`5^c zw=|DJ2n}gK3)am7_%KNVPzAb$>!${?CRXN63Q@ww^RNiD8J*2i)ga1(MLT+u?!Z;5 zkoHz71aMISluIMV58d+E(Lsd$r?&6lDnS@#)J2jmG+79#IzAVOC!*o_@~HhS!N zFU_O}=GPPU0@Qcv$^CD5J7GUaeu4^>v+WNe@h_&#s&f@44Kf+UQ8(`JhvG1ay>INlBAMoIajh$hpouOj(JtP8c&rp z6;OaQN&DqUx7JOu)sX9++e#Vbca%L53nMjUjOn0*a6DXv8cbd&9_1a~qVq7wroGe4 zov~#)>;Myf+**BpzzZ)9xqK@-*S9x1Nfz;1jRw!oXjfQ-qb*qp$^uqgw-_8Q?yh&7QfM zsT$Ud;R2*m?Ri?Cbkyj#Oj9c_6_!fOXe-fjqf^XAI*%@3J~`Xq!9Z>YmMKXt%*p3~ z6`Mn`KuVKRgN-4LnXveVrxRu9WCIfkN=8-8h+&no@l>c}xpo94z&(;>VFd}`?;(V) zVCW%Ni57Yp$4dD!<%d^oSSPsf+d0~nnLae{q3fWS2k8ME)3n!km=}EEvhVJUGkmsD zpaZz)Gfh8v+1l6?!j;6lC&bB8dv2U09XEBbeYL(H&k8lM8jBJP;iQ67qE``|oQafS zHY;c+*Co8}xker;OJLDUl3TnGF(5gSq(tgI?aIOk8Ady>0a5{JBX;Fkvdrq@OAQed|&yZ2#_P%iZj1w*+DXd_jY|{h?znB4v0`s?|%r8_Ev=6nimGZD77-o zr3AOJj7i8O!VO`gDw}!*laG}nD$LWf_Frs(#a2xq3M{@b7FQb7G3Z1QQ;is>07@4k z!+7r)nch9NL1Scfm0IqkvMqxO0~Q6gapWk9AYIwm!n@SCsBCGaE#{hju{UjzXKy;J z*r29$YmGKD5|;4(vrfmk-Hz@(alIL>h!5tJU!05sHq6DEX!@{&?@kV`J2}|uic>5N zl5SfE*W7tm+eC%TA#HOqHs85E;m&u?Fy1*}+_M#!t=k*yI+}y)Xb!fcxr5cq5)d0~ zo^$fZN-ZwBMH_w*<+X04cP}&`Uu5^vci?L^{{{hZ7v7T5ksw$QjyfBQJPY(^gOZCe zIib4$KA8>pai1bNiD)NYKKG&I=LT5gSLVz#&kXR?l$rPhz2k5R?LuE>0LM?mV@Tp|6vGX9S z5Zr>H`#XX-k;Tb4HS?mQr(RqO!M2AXvy~~`mL?Yw*}CUPy>X;6Y2X`72DbZ25vN+G ze0bTV^2oErLaq~9Au$~XRstVw?TZccED+NK>H^=O(e*=xV{RxlE+JkYbO9J?8bh6(#w4%{U91R;|Og=^wN$!LQ^{1+;cwhYXeoVOiW6IFo$^gj+aWX z2rJ_Q&-!sHFLWRYf2;6?5$!<9;y9pg7-XYs|0&j{- z^@l(`-A<^6tw9VkUukFZrc9+|Q`R=Pc*uc2mNUM!6=BNcs-$KzwJ(#WTJ%3b$!cCp zM%9HoSr3)Yn&Sqhy31%YUCGsK7cp%VT`A55QXv*eg_6}mQE@R0Glb^I0lg+2<2j~R zl*~FOhG}}M-*uG7A26jN_grG`2`RqTdm-}(33giBS_xK?QD=}mvQmqb+H7kNYOGki z70YDRFFwY_#z-A5Wk*NW`h&NNdsZCyUSOHI+1B25CFQ7x4Ycv9q^A?I5k{q#XS_gW zlsM-~HjPk+-`On1UOKvHw(Nv{3<+I(f93P#nR8JZaq!`8AmMbcc%u#D9?!^O+Be4B z)=G`dqMhn&s8zsbMF6KDd#uV?35sZR4&~A?>ggc$VemMHP|ENdS&lf(} z_4WxbolO!JbVw(>MYV226|*UXD}_PnaO_h<_|`_oGYjif(YQH)o;)&?j1`$lCNdY) z&i#rM)E}@BEjRv)3qpr8Tb8`$qL}i92ed)EU6b?Izi`I zmUkZh{<8t;4SN3#zGwp)k(113a_Zot`s_!}XXEMv9K0)(b2Gm94Wra`lY7|+vHok( zNm*P{M2_XJu1hAc|GvpRCvW<%rlJ2pPxuXY*HVuI_cJNfa^8*gQ&6~!mKAV0Ye!P9 ztny$H>L>YA7;*Fe{n`F0OSB>N+FTssxB9?@b#+G({5=R)({LEXFA?({e_M&`=%Idf zWZRsVWC;;mvDwfQPycIeH-S#g~zI^y40*$g9UF%6v$Xi<`7xra!#sfaylzlm&+nd zZau~!%er)sLM`Ub8rpuVXi2S%@VCgpyJhS_>1#<8dYSq!Su;d&FTLl(-y&?Q9|!UK zZV?5of7hSufphxX7T(HOiH~#CqQy^t3{;#b^(8`l)t_rPKq+;HkWs(;&)>hr&k<|L zpKs44i@<%UeklnvimL`HlXVyqx{q?Mp#Z8Ne9NN$PV%>MT!dqkzoitW1zhCpVS28t zQ_q#$v$y;fIbj`LYTUK>vItxZ|JSzsk3Ug@e_#6Vu}gQO%XCEiZU*Ozh)3F@ez*8L zT)Khyo0|4FD7fOR1^GhG8r^2twGn(npI<7!U*LDgV{gL6A%Dvj^sb$oGTj)PoM$tk@YnL#a81tz3}mI z;q^G2c0&ls6s-_@pQ@6XL^yiCE+3y5_B&n}!iSQ;{e+he@n)IFRBJ1y0wlD>3nNKx z>X&31p`s0tB%6HxeR-YU$C{_lg7w`zsz%fB3v%lg{GQ4R(QV11 zTO28VpzB}NH7F;`cBl0I&0#^)PndfAO3e)=oPYf2){!ad>ns=_oFh{LJ%G*!jwEKu zupe})N)R}tNzuEv;rFlM1gm9W8^y4UD&>48w#7?j5>d`l95A@uZaF_I`d34ae7%kgT;!PW-K*+`MXvfh%}oXcgHTYKRy% zLuFJ_^*p8iot8>hlPUzVWeSX$yfu`g+8$)uBDj|hmc#Cxrqru@PMRApu?=VFP&XL= z6E&2>8E#{GHVMcg#Zj>}| zuztZ871X}ehnUU+1~Ra6khL!uOJnPO`49W8w*a6eY6}Ai9vJ9L~sTLFf+e@ z>3QeO;3)u zfJsDs7iF46$)iZj$^CZPmKs#pL7f;e?#7sTBm+|4wz9}%D@?hM_)UuK{WD%T7w3yY zkd32ar9mC(#IKGP{)U*;h3Y9z11BFTP0_3+CN$Y%McG0nTWt)XWM%F%e!v0%wg+IA zJi#Z7wWkj(K2X@2PV{S6Y4M$S$D#H zABl_D7lt9VFE|0wVqy+R(OD|3{U{A;{hJ)(I2*i#x{2U9e=KJ z3sb)>&B8}GHn#aMRsffgN+ql!K?Vb1DBQNzpQ%Ko9}34k8;+{&;b5DP+d8pnVa&Q6L$WvGg_WvMoXdJ-56 zM0jQV~BF%W6(BY4`#cK-%0L&!!xDSmy(5Byi_I;b+IN|=wwa6 z`axaY)gBzlK3q1$OHq={$8{TA1z02MoV(mhhnhhb-C}M%v@vF)Z;)6LArq3iUt=#+ z04q0*Cry4Q3w)HngD7bLh?pv5?DLD%7M>=4fv1VN-&aM7&*GVA8&h#$Z%=&$?35G9 zjx3g3tPu6>^c0k1N)r40X2dgf3Dn7pM67wI)TE+Al?)mZR$3CD%)oQd0vOiYy={qo z76AP_md9|0NgLiqdU*QB-H4+Djx;P*hKAHgA3^qxD4A;6EFy&NdI#ra!7;NUhC?a^ zvVTh>3$K-e<3*^rgRcXg=JXk{ev7J(UVFSpCD2ut0(P-%2?A%sHbEpM;gFKENp*#E znyRzhCg(rV2&Pc<;^`9V&5mwD8)}uIMxiTBWwP3MX5==@?-SkD0d3fzh^zwkE)lfE z`SSbJbXG{s6(d;La0A8wI-cw5cmcHKP}i;Gd9kQTmbB7)n|+j z7LWvHtVWXywem<3$Uj=SJwD(C^Nc1Gm6S2>vy7+t9I-2+*bzE92}s3}O-2;*D?pSA zQEtOID@GN=p`;O14g%Xh^sLk}eMkZc7_B<6=78MYgvVf2z>l&f0 zL<()ZrJFdx_*~KBGhP@_Q8J=5?@jtr6pC~k=vg2(`3Oyx{{9@`t#SE~A0d)!j}4Zw z4Ez52vJAXCgZE1r;ENUNg(rM%z+c;9RbFPxziehah>pkffk^ig8ielIb=lRZSx z5Y1*F&p@6lnIyuLCHdVTddUk^L4oc5mYm8_#4IbwH@#5E_}&rrQBmO zZtZmPE`SSxhjwWC_U5Sd0Y4g8vy353j}m5vUOCORcI`R|oZnRe4#U0vx5zrLlTaj{^v z)&?WeWRj`G7qOJu()rRUSnZuDEkD`XaTt_Fe8*}fLr?_G`?m}KTUV|FeKNcTfH$R9 z^im1CfAd(>0wB`lBFtQOBniA6B^ARH&eGDX>I1&>q;rbiT+)dl=8;fTKO`^RBEJ^X zs1FE?z)HJi16~g;zwjj-d{4uH?uLC(dA%Xxt{iB3$t1ko3(x{(rICI4{~gn&6{$F2-A#0(;BCO>YL(YWxi<3L!^q zpzg$XhD6EZdqdUzf^O|S+UiP3l6Nok?u77_BBgmUhD;u)O1&{7)uz_c3h*r=Ic6Xb zZhFl}h8SIIB;<&QcC>ckJ3%WIj~%_}tsWH-Ax)Bu2sZs!+G+biW*!OaV1H$q-eH=G z4_?DV)RmEXrts7V-L8Z8=C?5E!9629f1?je>2DNj0}s7dtHRNHvI^1rh!Z>k2p{Qu z=9($c%l5gx$fS)Rv+!-d+f8jmL`d6V5jEo{bCnkCziBI}C8jc7VmdyB!Z@Qg zX~5kh$5xZ45u1DlLf4KsK;(xW8l{t zJ5avH3pWHNXfBai^-U z3KDL@hcw~0>IUlTHmF)q8u&fOX;y&uu@-!wBjl@C5kFvGJvdF1%dwS2HGd|NK~Q1F zLrdO9G8$bggaP!h(B7(*Y}ue_nnI&Ji>*DhL~Ra=FU)!aY<9INyx0phh}U zEvS;d!8&nH1AJ0BqE31|rhpx@PBSV9kP69_ZRPSn+fF4r1tsZ2))|(mas~#HWZqti zC1@Nhv+joMg&{0c?N|#Y5l-}vt+NycFZc$*^LM;da+U~YU>^28|@2;8R0Se|O5&kt%epFT^HSM``<{ zF4bYVj~}G86>ai0P3y;*LLILhRI*erHR38))1fMzf>be7de=IvtP25)!sdV}1k(_H zjLsq@$CZh0pqT2U5?tXFR5BI1R;mbkHU{jX8Em?huyjm}EBTeKApp~UFcqn=ITCX< z4g^D}${vQ=Pn@kjLRLP~;HwDBkS@(8A5fy7%ioAfw*ZO#w!sYrV%X(43X>EM_fdFS z7sq@RsTp})+&m!f@bR3sIaQK?U$+FZ=KU`EkY$s>%5%=|DPY`@SV_t`OGCJK*3jyL z%_*Vgb2_S!NK6#SB*FpXoM|3pnG~c=$FojJ+sHE*4Q#AuSU%;Cq{1`2L{Md~pu_PR zKZbgAK6f0_OCX$1@R?BjWZN~LAk=u8al{DB{mlD_1xgB)5Nqa`BD8WaYkgFQD_aXD z5p)J;o~N~~azwI0aBa}lvQ~zmvR1TiTfJZK?Nuq)pxYJxI_Jn9Q|D^L_VEK+xquqL4Bm{cfF$9YF-jBPkTKe)DH-)p^Hr_`v7xMy+Qxc&M#sOn z9B54{rU6tMnJM&UZ9}2}-8Wn}K=)r1;(IXk3_-mMLrftUNpx&LB%s?bMrN8)gmgHY z>vYG(Bde&ka6uffN-j!bJ^VeKXPS~c!Ia^tp_PPmcZM>q-cm_ar8TK}`wg`J#2o5w zx}~%7NCnEHRg*`fhwlDVp?{Ik;!PyxkkP&v?YO6$q=+LZ;{r`9ixv-*49%)l6R&rd zR5?|snXQt4*(%9*p41|Y7`{{PnUds;(7AP;NyHoTbk0ZXJLqQYB=0QK-9*}DV==rR zNB8HPHs4|6xPy1m>dkIVpuaRXwBIHU9 zB(I*YXR=(6oWv~3`-@gb**?j9C$yI-g5@E82~XU2tsjb0)r!9r*LzaRADYm-fVP*; zD0dsp71Pbm7xe7X6c0nj^`TVUJ-iwk zqxCqVO0-N7fkjBm)!1!BQ~sh&R5vCwX1UBt+5bcc3a3N3c_%w{?C{E<7t0AOE zOL-{HHN)eGhN5Bcy?|Ik(;ql<@dXa~hEf4daNyz#7hs-_`PcCNXZy0f2dR67$Kk5S z>AKH!)oXRlOLF|ifjNEQ+kgFmBNJg`WzWBM;@4Sx91>2Sh3AgyS2%C*9n$XG9pIxx zcNTyIeXjAjO3cj=7;QLy39!7C zX_v0HTfRuc!FB0AqmWW!UscngwXO0?R)E7WrdBPBV-`P!*qv;V;1ERs&Rzru+vEv-0|?$+~Ml{`;7MtJzKmcWP|=DL@_2*;x~-?;^vtFlAx^`rMZ@U!(BcezWnyv_oupRK@j zyS`KH`jC4}_!uk)Sy~@<$g&NgD@kV$uj@r|wp^|Z&7~5 znY$N0b6ZwydQ+Y@jqaNz${e^4E#U-IXr z{~oK}H1}U~6Dako8u4>P%h#~ThbKpI++eZX^sI5DXuq4HoaUB=+;(e?wY*UJ?Ls>uHvF{LmxdoXU6~9vV?gos~fKeLIe{bZN{GPw& z{6#*u|9EfNCmZiZj(PtcWXt*Yf7dC^Uvv9WBl>G;T@!qPvg<&XYPU$T5J-J6{%aY< z&(=NTZ;^k+t)du(V9Tt3FJtShfola>gvs*fAbuzLyN8Cl3`c4`|FhJ}XLb(FUHahS z9A1m;Bm6Z0i-2c%WBwW5n5R&%v-JE=_(s=rWeSz)=2??Cd~InK2g`DQ(5ph4DUbBux+BhzZgw zpOoLMU^Yd@u0lFRX}}zEsgSTV0{;F^3oQ)A4MDa{XgOI+!-d+Q3=U7es`dd4PF!` zC4qNimkuql*p;ec3Pkq)IIvZeBm= z=DTg9h@-}f9+FqpB+SZ7f&Dn+q@Y$8A{R>};5vqHx0`UB6Iz#N7R~dIGrpPRnUds~ zBc>5nc@o>=r80@QC8!LkHC{)-FkmVQYz!-pB)OwTprokTC`3&Md-Yow_X_%V5E8nq z5zdr^cO%Xs9nfOnXomN6@~ z2fW~p*VkK0SjX@2(isn<7E{StYT*7YA9FqE;RU}n8L4&#RqYYcPNQ3=@)Y8?iy z0zrkyzE!|X$YFQ9Odk=0T=8@`M%3CvG%ymYjuON#jy-R_lHxcf}I4F&N!t zBZV)GeZHB7N|1U-71!Nz*uCMov=UU&*|O!vy#Js-K+%p#--cHWdD ztw-Lczd^?qFWiM|McFB$j@>9KW69q#SGjNR8Hhsy!GNLMx|xAYBHFG8TmRr*B@7cd zm4eU0fdGyT6dMPj@j)RTBUJH27APS~i>^61ZonfS=REGOdi;klrpD0*EhdI;tL=X- zbPEDE!Pn0<5B3#pa7VGdZw+C;2?&pWJ4m%Ul3htm_D~*Ji>O?hO-waR`=u?};J*Ab z+?nr`+Og*pA@j{xO7yZ!Z%YW3EZ#|#lggW6KH`c8Mk5@I=3zW4H@?g!+(#*12K=LO zO7U#<<^5iU&*Ln@|VEzP;yAkjN$gg5DcoYE|p=A+6f+{bm%(B=bt@UL7rD|k)jA$ENp zuOz-1N^Tute*S#F!3z&?^zjn4G#ZaQ6K{;)eQrT9Zxy*)$}0R=67y?3U%_OL^4Ja3 z-UF(nt5qW&Bit<``QayiV)gkR77F+Ol9aSCuX&(US2%?^;})2hH!-z~#<6|sCB$x# zIra~|$gD4=iJy^rzWCf7j}q7t}!iH z>r6}~tW^o8U$rt-IQa^uG}a0gLBr<32cA zsf8VY<0tkGk9gtEefdm=rDN6*gQm~vV%aCxG0mnZj+Lbpiw_U+L=?A}0;oh`;&v>P zA2mo2$XZPTFWeqvRQBY@iqX5S3@Hg!sH>D>n(*?JMdh$8@^2rHCYf$3F-7U>F?e^8B5i zF8rWX_;rA;2CKQO2aXu!JzhFHg>Z`KO48l1 z|Dbu~cQo=lu3LtW{2|i8LKM)5QN}evf|A_~sU!yNd%#PTItihY;DV$ObYQeds)QAh z6-JdZ0-j>};C1Em(|5d7eJV7T&uPCHl~Al_iuwsJosp!a5^}X5!7X069w@}U*fFqN-%8?3Hk=c;aKO4QMN7|ZgMqnRqiK;B{M0XO_ zFM|z2NR=$C-%J^}a{5W;uAlKUsQ_?5kG}voV+0woEdUc(dWHm=1+w(PmszTxpiR>?*;cy#ubyGes=L-@e2%Ai89B{YHA`m2%w zrxu`RV!H&ook&0&%3jL$7NTB_J>sP^?7kb#`{e|m!+M6VzLrZRB*hGK>wQo? z+dP~OxOw*s-!fHXy>8Ju9-ur$z^&=KQ#W$O=1Qyf09 zK77XuccUM9ncrecwtKEI>D^04V^K6LSOz+|V6oD)KG!sG>KhfKmNu#;@)t~;&L`T3 ze0so3t(Q8Qrcvc*(>aAoF+;lAiX|<>>}mKE)epcZ0kpHh1A6vAh8p;Ie=B$mPA>e) zBTGgtMA~?Y>kN#khd$a*svst)WdEk@#5a{~9&1>pxb#7VXZ(^Wex$3A--94GSiFNQ z+lqn)q$>eU$gCKjXlIZkk(3src^PG8vme?!EruP_k~C-2y$UgnaN1^q?tRGf-WrTZ z*-O(mokcWXQ~GJnW}>`;bU2>9nHXrY7C>VQcNh_~sO~!(WP-v0cC;XAM#I2jiigq4 zKwmn7cYSb-0ie=wR6%(=Xy&z3kHNr`&LOgL*ZH%U_Rt&RE zl9`XxG)NMjD>!6oR%0te=h>90v%A3ia89hIq*QXS~!QLWyyA zs}S@dBObcYf^sEM>Trd^i-j6PGx>ONw(vtrUA98XABU$%v7JrV_@+3IR#&*hH66-~ z3PU4;jQ*nM+;u9x>VxebOG<5$9=3t+RhNrMu-@|$IPQV*Fr*OMF@J#>IlmnFUytqg zAxR&Y_IwV1!!~h!hp!?`S%WZZ{e%Zw@JZ)KywLN{0flEzK9}PM9ayxHZ@yJ|T6lOp z1`kCIzEOAohhF1jL@NeM$z%f~h811D8u*z`&~e}!gAaHSc#i2L@FDL%hck=v3w(`{ zS(Zvzw0@2WyV>^M9h4x2ltcn7N-e^ALa2h49RI{`N_7N}3|Piut0?Rg1zv?z!ZJ(v zgjc5fi!Mx7lV=i@z8%gjswa9touTLM5zq-Ubc>rM;6C9w%je~AcYYK~%Hn@HTld)C zLoR6UFD29as$+jCzoJWfOCR6o9$N@_XZt+%H>up>1s+D*pGjMLIpI8?$2~od$GO5%6w=D6+W?JfSRx+q1Q_uO1R|r7pk&yA zo%zYmcId>+CpbUD$Fj?%A>2Qzkh1ZJ&rn)M{ez>li{dHS>G`B=U{h6&G&%(-h_t3K zt`x$(hfwQP)+jEuz#^K?u5P!X@D>6wlK{6I=7qT+R$H=$X z^b7v5U34B)UXZr;K?f~$@N_t)04_W_J6XH;$2g)(8?lWMUPn5eMyjBeQXlAPtb=Z< z_fo?uvC?d=AH4U~Lcv-wLTExq8nMDC*s6@p6(4!6B0>H+K`)o0czRW_H)*l5xJ}(N z?Ht)+odXnAirKN{ld2j|)GE7pmc8Iu0w3@>-T?2eU^QQq9#{C_0~7<{{gcRWe2Jf0 zV-(`5s{J)xG|*U|FosZjs2QJz@i0s&JuYHsq&3moCyqv1X;Eu(8}8(*OvQPcnuZ|J z04HxG)TeL248r-A2|Cwj4jbc{o*9J*PJaGp0{b{`FnKJO&PpVmQbzCaBgidyhpQN?6g88SFrC|lJ0p$NIWC-*4Dg#0 zjDzbb=NV4)$NdF4MWinuw70$QV3|JP;bIM?GHY1)z!x~Pt&+i`BoOt*N;{3-bf^rx zX4Vf$QU}UV|3=S`)u4^l*{0=`1(pVo7Zwgi3Kni3OnWA(DqS;8X{ec0B~>;>a12=_ zsaeiYvv9!yyBJTKhR7au*C69>=~{KaopmY4vP+|IpZDgWBtn*q>I?(8 z^_72TL3Zst9sx`c`}ouD8q(8NJSKBxnT^Z??Vh_gi!i)>Wf=Dbx`e6f*0kN_Qok) zr3ly%E}}VE;A5U0uxe(VeCJdy?WY{` zV5`SGyBagkw#vW_SALbRr5)IGvB-U9!Z9 zOe>45+F2)mQN;i*+UY_-N9p3*EnPsh5pXM~uJVhn@yo0nt`HYnh;$t9$|FO%S~{_J zrGSlxkR>KechP~qDj)Ccc!8(cpZ94hI_%`FC z1A>*%ovf625-{$$3b%D$nwt*`Ug1s9niFtfaLtJ|li8D=qa8Woz(tWmnx*ZoLg9JB zB6)Xja*%=(hF98YL{*1Qrx2?E07Q^cN{>c)miCOEfJ1(=9>GBoJlx;dZ(17&uBrOeS1Rh*37=KQ%I-% zex;ok?H;vLYD%+qDaSk}?N)l>*k~Deq#WwY=QYoQTL_-TO1E|@{cxJJ)SqYN;7?Sw z*nVagKO8VEHDV)aDi#`LmHb|dr@^?jbF}W2QlGW2cB!P|`P3?~PWmE}{%)62?`A0l zZz79&xH0|UMvt&~fVFmy#(&gK?Q+sqTq#eolSP;6Qt9Yx6~O2-!yTP|ty(G}OJqyM zW3i1AG04H;+Q!#Jsa?{cvi5zHlb4N}f4y6m64aT1Pv|Eju+r{}kyp8HS2A>5w+OJv z^rK4^OCi4(_6L1-;MkaPV`C@o8$WU1*oixC6{?biO(KyDa4MIZeKK<>tB43W;$_8>90Is*>T!kwIWCg|2q zmrS+nEwlUS6-U-bywHSodR_2^4-YA>iZQT4n`K^p<4YjhTdIvWu%LtI1S;F!c1B^D za@fwE>wF)NyWGOf`7J*5Grf;^rjbPy)IiB_7D>k-Rs=nSCRJz^g`9j)Eyo5=!eV$L ze20&rZSV2&4?G8L%15^|keBHwSI1=%`x~A>YGF$iO7rjG2)kWUqr_xTiwYx;*c4b~ z=CKsJ3JkN5;RBKfhf;38)7hYtB=klSp1ZmIju)P1e$X3c+d9=mmI78E^<_$N(vYiT zjo1{JLP=m_II*YX@_*6>mYF|Q+y}hSq-(;r!?tkyeT$FWYEWh9E`6muK|PIldWV^| z0*$7#z$I>WtITONr#^Nc@gT%xGP%*oWdY?LX9A%q$d<|F%Ss{$nBdG57ZC4>7%>-T zVG_Z%F+XV5I;0}?Nl(vKbnvK3$&h#o;D{eGe1=cKKEFIQ#$|o{bV%F}bvvST-%RK_)7ME|k&Y2Gd!@9!rxn6po!J9MX7u5fo?fcb zHVu_NCxX}LDzP}_Pb~Ef2xU5KnlgLg`AyG|XC@NR_;1Hz7_n7+O*jaA*`bK5;}Z_^Lbl8KQ}1^2f!GF1vL9?-`kB-8H&Ekr4dc7;ihRr z_$ekWwK$_FKgT)Q3=PCeM>P-hr3Ew5102o(=i!%nSnsY(9q|?BrWxj}W08~HF-uWR zuySt3i&WLqGJ~DwbN+lwxPHww)X>)`r*hetVNZ{$ zdLy$|w^&1#nLet*XU-2QzJoI6kV?Kl6J+Oz(XX2>*kD!QZiKG^;TN&$k@kaBUj{Jz z5KO<>4q(>6ix?R^BLhBji5qSBxGvsL-)E7o#g-E8{E4(JDx-d)onZDicF{NN$h}U* zcf^m1H83jhlfE+DoLM^;<;0zY9ye_xNcXH=(n%fBED}b&o0NdzW1l3@{@J>9p_e*0 zC0aOeaa zV^wY!u_=JmSyal#)VXM@HjS<(YbFo7c;EuO6gPCqPO&$kn0U-bA^~?XT826m6)CrO z&9Fgh{fH!~4U-J35L+Wn-&K3GC=zpWqE(VH+%5%|7@MoInj2j;k-jd*4bQ^SL27^s zaZ^#b#cZ~eT^ozhIAJBR{WJ+#^fwxhdg2htup10txnzvJr}mz>y? zV$uN@=gJWQlGVbbgECbqCgR&k8tBDY>0Q6F8VV_KW_s{N52eWOzU=AcIGPyYO+w** zH~u(rQu8e1k26yI9>oh@Y798Fe7VO3q&gxhNU;yy^T2i!=Rgv&Nz*> zlqPQs@lmpA6m#nr+BxJWgyD1M&-gucw2 z%w9ytg{+5`G=g))!r-%n(2y@leDV|SfYpz$!cC(3ZA`q|V*3ROt2VGO{Hos-LmjeD zfV{r&=M3dDPnY&wi=`TVVKw;!g)!!@V%{IvkNq0)$ENfYulQ|P_{`wra|59H5lnc* z`!HYQk29{%Z=u=WLf=r?Bw&dxpYaooPZ;Iqsi8@*O&NH`1$Jd|41qzUB8a!ayE0;o z@Fq1Jae80!I(?#U4&?a4SDlIr9jX1+KTo4_B_3(7~xj^#Pc&P-X z6x+S!FQPAS*`UGK#QV43Fznha+@?Q_73_FP8$e8j2(J-`F@ z0LaFWB@ZuwAScoXk8wmVo`UHFIX&3Z(moF~k0)v_^^FDiBRAwFWF@slSkINFRvpk1 zVe1s~5PEBfp$N09I-u`eNk@|^)nqCiY5Bc@zXnhmWi~ac)T1h`ynSB!ro?krCL3py zgldY%DzM*A)WXY)bfLLq`(}2jzw@8^HEnRzk97b0|M~By=l{1!{`Ccq4x0G&hhhl% zGy6MUNsmn`Gv-;$*(=bqaSU#r+eK!!9<0SE}Oyo-Dl)et`7{dg;{DkS4`kB7Saf>c|G!2|^ zH)t9&R#Oz5V0Q)UY?)^5x`y%_!#rUibPFZuzOeAkuv7;gIR;ub^t+psmyQ=@5IC!< zQeZng=M?g;EMa<@4iHIAHaXZl{GM8I=jxe8T-LmlJp0ETXFX`>)*SM@BN22gB1aEP zms%#72M2BTL72Tx5IvMIoP5*@`=|a1bDg5=TL}z8C7oO+ieu4^x9-BtMkxByhltYJ zv{b?uwvzIhFc9}jsh8?zls=o>O5{DOl>W8!eE;`S(zXnoJAW->&ni#=UygryEUrha zXY?WW7dY+Y1wNt92-<^#lHH)H;R8Mv|MK`9^nDkQ!ZW6532gyEBF|7g;fBr&d}eoZ z+Yk)|m14d9d^->D-PafR`0mT?lcbZtRRy+Yt5>o^Sxc1i{4xJo6MN}$IO;e-Xy;9| zQ3*F=3IB$l@NU5yQx-wJ9=;&kAu~7CjTwZ^9KO3pOd?D)erO98*)Py<@7|876aah; zbkp3)f-^Xt@WKrdMuiuWxhd}Dh_lZZ`0~gGJ}Ocfnp7!N1NxA`3+x!Z+;@{!5mbyU z!8Ho7O=lXFhE0dVnq~~A*T$7rSDrv+_t7p$uXOPBu_IewIK8cLQ7oLq6Z9X*jQg+ z)`p9m`jJf}FAp0YhAhG@AlRtEeVRqPvr`M*%E%J0SYKiJQZD~^U%JTVfx2rQRq5#q zNx#5#iO8g-%q(&P<_2No^WZ$)ikwvFQaCeJ^G%%VxJ~u>i21>?LTiA@@$t};{siD9=%L^Q)QtB*z z-2!)BVC#kEaG?~A996DGfTqAidxNJzU?f=5u;P2cyAGgHA+#6+LO4#TbWY9r!p^Ui z1=`K;)}bXY-4cmlm1DFBCoX8PoSOH<1qbC;fpp{I#>9%uBN-1Yb5!D?6^SRVaj=ou z0d5fhI~tsMR)3vcStk?vAf;_l+GwqWJqIN0>1B({UKu@&E74>z-pHH7%~@>G!{90qjY0&As#aV~== z8t}d5tpL_Z{z$gGLK9VQBQqG%#)~s0V!~jLBC-SBQpM<0WK}WVv&~?fAqbVcs1spm zVdsFa?DSk&ebkE~-*4;Bxpusg9^3#Z8q~Y3TMKX>=mnlOd)e|>q!D#n4Q=otKqrO$ z5p-A}!p>PZr{??e{EwSbnc)GPKgIpRs{k1|D`{$u(i_|~3Rd!^LL78-Sj)TfC#hc- z=eL(fnoiw0Y?tAFS*c6&d4yYAFK}O}Tsp%{t&~C&f_#4Fu6mZFroV^*dwJgW zMCqWFYKWQur6%cDh73;6b~*4x*Nl+jN3S&STu$Ng=WxhzST6GR73AUR&-&rd zw+H%N9Y6C$-h6@#mEqo#QggSIW+2>bj<~b3bA-&YAi*HbfDD3e9yVYrknWO`pUb(_ z0ytpx@u>ljd4%!l5$7;?cbT@{psXN@E$zDs$DI^|+SVLv^5L5lsWl?u^*Z;DXX2K4(s<-dO%@p}J_{uzkXf5!8l`=|1M z@yIN&B>wRQ|K1iM{&7ECI28SR&w`1S@xR6WR(~|@DX~oZw|X7Z$kJmCKOU+AwkcH$ zSd=A?V~=2D#r@xfe{dMi49bmT=6^VX%))trsBbZ@yi{FzX~yPiN#;D@fXhHX?g{@t z7ck`8{hwRNuDR&^=b!s${F&tMqW7Og@iSzDcHgJ@ZD3LOoy704dK^cgZ`As-h&Ic3 zvx#Uic9eL}hYNr;kWEG7E@JpJmf*#Te1OxC3*3OpGPre!5qW$GDMlD!jx+Eoopc;+ zX%(?Y%&&;Y^m0x4USiHylvTM{YUDploq4`zC#H=7l&Nv&W5&|C2OamD#&8SRV~Vg* zi~-3O$d(CwxT~;dV9%XV*h-5=I3o7`pWh4kUfn439khMlVx^`+C`08vJQ8(Zq!#$T z6)-?l0ksfU{u4Y7UUCQIo*pEnT=QJw7SjndV_XtWf?~enFjN?rUdEfoR+6^xiq<3$ ztchT#7+QLV7vPaNiu5DL`bp&MquvT4gzZ%LxRN1E{YxAi9bSP-r6Lemv{TAeIB_%^Vw>VAkEN5ZRpts*C?rRLY zAxF6pg?y!aT8B2lXZrok)l z;DlZCT1n6Q;q}k`WBI?BDSknpN530<{o-Hu>Gc(+7vvb5fc*6eqh*=;mp>4BO_whJ zI?CTd(Q6aB|39j#{MvsFU1xF0D8PB?f~o!ddd-b5I>_?cqfW0s&cpIC9(QHzf4qId zi{_AP-Di0nevR}vNC7W+`N#eLQHH8V`1@ZV@tR>sc-+7r_@Rcf27ycUN4DAG1@gTt zH}4`w<4}M;xe$!6T-gURH`02xI!=cld)GT|Qo6qa2)%co7hTHe5;; zJ~(}X%=wO&&QP*aii84h@d8Z-148yZU}eV&;FHmGgWO!Z9 zCrn?HVMGQRC|N1m;gr!vG_ny4*%+jQ$QCao1?zl?#@EyMTaaVPrqcw?!i#BbrNGbF zk#LIxcb474S$LKlIl~Ht+_&hRe&H85z-=Mr0pqgFD|~pT=Dop7gOsfSB^8w~ujeui zJ~3na`22czk1^VIM_?6(^utF%%|tPql|(qIw-> zG$2KE74QJzgfDcTC`rRESwwS9$<6_h zfV+lOz!a)RPz|)S*1?F|_|b43A2tJ(#1{cYlnu`pAHLSY8r4vex~C@pj2Eu2)HP^i z#bCjay%_fu6+$v0>_xyDZK9gw=@e<;YTy*Fra(yury!jHGoc%ug7jO-Go7UB7`##y z!6-bwROKz*2YF3hSA7(tgqbQ~#9(!o7Iw7H8d}V_#(K zCAZUbfGy|8?FKImQ5c3`*NjsWSP?$LijW93RRgh}8Aj?fQ)oE9W_T0g{t2c}Pc+$j zMO7fe6?T@LKq2EkcY&2kiqz>k6Z;M9TZ@NGy{;l-fp`4!C5l+Z(~;sOKMi;Ur}l=_vSF2ZkWWi`C< z%OBpM`XSxWuy*I+2V^ST;wzWVP*J6%2odaC-fp&4nPw$fcruU-TA5Z@sg9*|$w%mp z@9|QmzUT%g-h=-7u~;Y8aR#NEJZhKpEgjU6`bz{)M1(-jpKlpkQ3W;xWX|!Z1#Ap& z)I#q6g%<%a{T?d{HrG1%pLGt3g!^ zOSVytgrF*0LR-Al;zVW&G+-8uUfak|Ul^7w%cqlORLIl@9kY_Z(kVce*z_|~S%Nh~ z8wbdeY~mYjbfeQu^+pHFR;rfMG~=z)n6IveFcA_yg)qf*6{|2&melTXe(>;&7tV0( zcq%Hngg2AA%xFcbBCf%PhN5JMfs>1Nr4h(|LELU>$~%oXs8&>^NMDr$eV^D7ZXfZ|&?H#vA}H_^_Y$}(iZguJe7%LuSJ-ki zRkU1_LNLCCE6yeO0IOWN=W&szY`)W2f4EZlgT z=l1ytFW9XLffB!VO5gj0`!UteIFwoty(n+#`ZX%8zlzbyR|=0Zn$bi9WgyHgU4n3B zot7*W6$cF-&#Wjb3$s#N+KtMTA2V<8KHuU6?aH{b+XxF`=~_7XpsRoxl;*ldeBR)N za&Fu$Q^Z!1V$R@N<@p{jlmnVT6ypchp6_^Rh;$jKSV`GO#wJtIJ=Qgx+CKMfWnMKm zk}avhC`u(pD-FlAWSKM2lLWmguKs5!nT}th7xNPm#HSZ!V`xtiSV;YBQ%Wt3*cLCX zbtyr}8P>;Q&@@yq0`RV)B`y)vscNa& zXdXi$m(qc{Ic$>LG3+JC7EmCrY#LJW7$yV5U6QZi2i}UREwVA!#J^~lS=N9r-cIg} ztfA)df)@cvWyPhv;Y+u$4EV!q0YWr&Fi^8!3D4^2_tOZtsn^$X#(aN5xhDZB5{1i( zEMl>wf@Q{lYXV5y3p=qZeR;wQBkY)7?(u@XF&#n8Y;(_IRGM%@_x9z18Fv#Nt~|zU zc-i8mq1iKx`57;G2h(nj{eZU+#kkvuZnXI=oepQ%<@y(d{TGC-3?w@p-r(5N`+q&b zA3IS3%Ise-Eqoi`K3;M0Z}5fr+LqnYnP+%h7R-3AP7r@?uLBIbKd?y;`vx$dXg}e; zWp$KUSScsCAA+|-4$bFK`5HLv__N0uR>ZJ;ePY)ce!@coD0x0)aHIGA0QH+4N9nk~ zsru4@&#_cTweubxUA+iCN;`|Y`|ZJ?V$T}hk8J5oho%WlT-Tt71F34xOBc-T=XiLl z?^QOHEpx_}on<}6u>+RBdyb9o()97K#!KEW%4f;lc|R`iLyaZ(^6Ni=CV^!vdDoJX zMgFMYEjhWHoeu}4rexO8{V?O!SS9ZN=k9-c_}qV9So}V}kB#Pc@l!-_zwBxnk4sNu z`8jH-Ufk;Uq5rB$xL;JwT~vbZm+>$*!Jc~yzPec}^&)HSg6DQ~4W~SLrS!n-73ES1 zv^~odN{10|nXlol^9JrZBe_U2zSC{>O(UgX4Z8oiydHnT+xy~;ips!>{`v%|qrP)v zBB`C{Mw!F6*0n_p14&R2$gWI$Ddfum9!2*s;dj4PF#RmCd7ci$Bg8 z_IEc;XJsU5sfJ_`mYao>vlFMd8`wbD;BE~u$PgG3H@G;%^iY1njg<}D*D00uEukEU zJ#)VTca)(SKI5fHq17;qZE&twB@tKIjunOBr@g86wEh<~(SPCafcv%^Xz0{A{)E@@ zHx@$g}hiTA1GnUT>hD!lWd(7q%^M#4J8y=LnBTY_Rb|_F(GR zg-w;+rLof^3~(qZTnGt?yp!RO z8gWcuBbj$z^8N;zA^w4?1@=#>Gwf$W}BdcEEc)a9}K45F`ue z?v6yu2R}I6;dmJEpjnSrk(^UVMG0>d!ZELe6oK@u95En&3U#i67B=tqFeU>hm28G0i*DKC{ZhcGf6xF zfI~oWonov=Rt+vLwBl4+BRsbO=RLv&WIVxqSaaN?OKxde!nV;G4|D%P2xP0^J|C37 z%bwETnJ5>hqmUE4B}rOtaa6H^T&_XHujvdscbkVtymUzI&|zwc4G%j!5m%Ky5bixx zCb2zeA=ZP_IDCGVn$fi}f;b-FQBOq`#A3nM;MQ=98opFQ>_kUT7|L&}MY5|aTw$!l zlytOUTkA1}RyEm*Wqby{5w6Zgstn{bR6VV0@l>`_6zesODlK$nS|`?bE6FU7JP^~Z zMIvr4Gy~!0!AzoKAa)GJxGz}?JLr9ZPN=zQ%ZO=oI3?_fd%*W()6Qt+paDKY8y`1n zr3ss{)}4bIf=$;LR+-lK{}c9Z+l}K&p7;Gc#oXz(UZG}pyK`HI@h53@yDw=8X`?I& z-XfVUdga4^h=1S^5rBJEm6?hk0)g{^AP91kZez=zxKO1>UtN!3Q1^`;B{3#v{4U@| zA8OrH@XmWqs!F)O@-fAmJu$9oWH`04q_+X%29~`hHOvGXMNYj^?Vz!VKBrruu}u;> z3f!H@G@!whRAj2*>3#l)-l*q!N+RDK9&kxWl9(cTFFh|-M2X(d$cr)a>0YHcSr@9* zci#Q5L~M&oCak5I zLcBPc0?AF97tLB24BHGbD{r{3GYETz8a>^Y45xb-F@>j<+4VjZ4J!%aoI&o?lQeH;A!O(j~~{wC25WKUXfD8lJB8|*k1OF1#)>m4WMP?tR%|LRVRxL(k7(v zD*Qk06Oka+*-$+|Vru~KAf5jrWxDVGktFnv2Y>^XiBw$pt~X0}EH~`Q`@VngMgI;mmbja-y#-&V?lv7d#ri0M|#mUD*%Wz-?VAFN;N{%Iz$lkgd(RD zuCAnX&11g^l6!%s3yG}lRXQDw>fh*LhD?qZrHe-w+5nI;KtveW1liu&B)J=}%d z$9Hho!nqe?EOKqAK5w2SWy6L4?XcQPMM%ZNjpZHW)jn z51ihtre`1Xy`8gt%y-4+zh|uWmB|``n4P!-Y9R+~@YG|M)~ahg^J2MTODBx{e7T`H zZ+pBK*Qt}N^mMt=?0P@<{Bt3-RL3Ari{&_kxu~z`IZsdZ%>m6Mr5Vf~^?(*h1B{JU zwm#-Ywi+g4;a~G`$_1Dc5KJ1w-)8Kkaa^P2`5U`j;>B{txyZW?E9FEvK1thjx8%>L z14mra{m`WDhW_RURz(Hdnb=T4v@OY?`8}MLNg1aZx>BMEs|Lx=V_dzekJkWW9wL;wjje4GgcZNO&DKX4aJ|j{TjmNYn zM0yVIMpT|>9n`En&nB-C(X{dE_=F2HZW6RHcugCFX^Rfck7-N(`iO^9lf&$kHsG&m z13s6!UJ!HhDIHw3rk(X`Y_^ZHi?h4Z$6DiEPSGrs*A*)FlfPo|;jx-vvpfh`%5_r& zmkhwJ#hA9X@UrwU&qZ79zTtD%1SW?)Y@!#l7f(-V&-EI6u3z(jOK%ITkNoJ{qHt;u zo8n9<#=sPc_t(?%q3Z!7_G+MF(Hv&vDu77t5>ae>S}D3(&A?=?Nd&*sh>UCjZowY$0il97+*Gtag);Pz|15{oggnws%|hPFq>o6qK;NWLaP)M z@r^fhiK`YV5>D1zC}-@7%1IsO%Ba2La0*3YPuOThrcvmqg+?uoX~TK&W4a0Na&&gW zh01SbtW0SjKnI))<}8VC31yS3o_w`DcEqo@-FQBY;S(2 z_f@VP#N(ua`MFUC+sB9;mV$9Y^65vhLLR3|pS)!-&6Z+oP=MBmKjjA2>_t`L?9H|; zc=}rRAu=bD7G%0}web<{@x42}2z%t_z5yegK#jKz6h^SFG zbIo^B=VW4EW6xd?A&r2m? z7=8UJ>lou!X(^#=o7@zu$`Bg@cz4f-CGR4?;%-M(dFImw?rX7e@Rg>ENdm*vsG2 zfh7`IUXt6z*Tj2C^UqCiml~rQ`%Ac7Dy=@n?@gG6-%I%9?ZdQtm_Hp>HKihi68E_p zm}`i$2xY#^RU`l0EY-wPb?IFN%F;jL-!X|)8Sr%(e3d3z9_X_lbj~OpG#b+rUhe)i z_L2nlxF`(&*@69InvQcu`GjBCTq#DmLGLHhiGDbO@-v^nfY|f$O&S0z$K@m!+LraH4J6XgJa9IZ%!)a!X~i|^OjM+M%%rxyK953R|Zg^U4o`u zy}=(xOqo)scvX4~J9<68J)cG|HqDRHfLY|)L8k@taltXeKUfJ`PX%!!HPEs|Qd36p zeb9mg4zK3Zt4Rs%Dx<8$0T{^D`{@}MYCs(-blFDB6^^4C^eC1zE&t@#36hMFPPp?3 zXMvKvRq#f^x?5+j;WjTWu>AJ zln-srs7jFsUPJq>j=y$z}W;4$7HQ+MWMUsa26ePuEH41 z=~3+Fu*ocSlr;6*;4#;yJXf-EOhITdd_xPl8?3w2!Nl}HljZ~A;-*20UW*qj^3rFR z>4MBeBTovm(x-e8t`rh?L$pqX4?jkN_|c66ebdc{=DLY zvRQUH(D+M)baB@b2m0-**40a4sY=qUFNxXsYRJnN`x@i;bE&^EZ{2b<{54dEq9Zcs z5^A=^pVDs>vyV-vfngUd)1}b=S}xJ#pHX<=IKS|*@-?#f^4ykYo?DzFeSHbaSxEG~ zGO0{JmVw7pZD&=6SJ+tNl05x|BL}whN_D&lNL8nU6^#|-omRn%O{zcPPRA{J88+*| zVhNqu*!Rq;A}f%bJ{{Xs>X4!$50+bcqj`%rny>lWZreQybDNp#Fm6Yc#(1LXZ)pay z#RuME%ngc4?nbNrN{h}39aW4ARH@6}87iAoOD=6NP2nfBM-@Q;?&Usk>8ZG+bSSUP zXxsG`+pd#e8)c@pK;WHoFdInmVVGl-pk!1f?(=vGO)SyxTXt^KOo+PCEw(WeTF~p8 zV3*Y8cCd{PC;EU33ZMZ}&MjRlA-c92ghnS=&}b+bQRY+}a7joJieGB9GRmcW8fe)t z(yFdSsm>U^p5L<#;}ZvoYCXC+-_oplOSA7t8o+iEpi*&nTOWef3DjrG3X+I#(PA26 zjL+CaXw{;zjg#)OQiwg+V~cKI%auMmzI~uSmI6kphb=Az!Iy;%W32-&NsBizbl^9- zEu|;OTRL)JOGge68t~Y)Wut(YgYYo4#)YPQSN>MxmUd!paqP;~z55GQTw1KyVzGh| zqE{fia)qSV8@G6W?z0}|U1$oH8;l8<6?4!DN*3ES?-}0G_K__%ZG)^Ni|y}9n{l^m z1>jGkl|lo5ka$aJqNT;_Oy4h1B0SJsdW)Nk=z+fBOX3li$~Z3?%mys&LbRkp<0OdI zcj#s1?JkMV$W(Il#^e@nOkOz(wBWMEyOGz1eDY|VZG7@ToW(`EF4A@5-ju6rjJs=4 z?%}pn(OYeQ70PigXPjph_F{q#x7YiC0bYfkY(NcRT0-xS^WM9bp`bLqFEW1_;jYm_ z?m|RKq*r^kbW^b9n}YIIkA&%@a)CbcJgB0@A}$N9#pSUwd2;3VD0Mbjk9by4LCiKK zbKz*qR6N>Dc{RVrvWa(ALZegAjVG7NrGr}|aF`m?Bc5@#Fcn&(Yl|bgv5zW;|J`cUT|p#5Nf+LJ3cbgg*d&w1MThIM>-9_ve85?-$WXuy&{H2F|%GEJYP;M&SpNs z2kyI2_D`9x&&0^*-I@6^5qoDy%p!Zg@nLRmKFl3IA#=ZDY|KU>+WZK7qbSX4f-0|3 z^4CO=U=vAsmjN&t;FZSQ@xq4#8SeJUng$w45M~Q~9 zUrQyV$tu3^p4a{2obvAVWIrK25l>LEWJ}%QViK?Kd53fhL^6w2BK0pP9h=)@r~GP5 z!jNmir4>!7PO|cF<);b)ELzsS=f?i5;!10v(!bZir-P$~sHMfYE=mkSvN@`=l$JqP zT9i`IjzQ+(qN0c;(kTB);GsmC&mG&+dtciFRtX23k+r3FakhtTCTvMFg<_)S5i1|` z1YvtXzX{}ejO|$}VYa9>DRa2Lr#CmYcmV{6M?C{mDJ00%69jpZDkSwN^oV1NM;upg z2$rR-l1tyPX&Hx@X|zw>5s61$%ok$x!Y#kb%9S>oO9_KBZF<~d(_?7V(?Trmx!&T? z^Tcld179^RJjT+4m+f&^&?p!+Pe0wAh)zaqF2|9Q&*XqhPIHeLCq;>E%x?Z#qrb~tSA(w0r5FIl?rqMCS7@LuMp7rAipHR)db8j8Cxa&r<7q8Pj^N!}SmxBFPDx#20- zj#lM%kL((Xb2KVKtpSkWYb0yN`jUAU@iSKPqETQNIZf^pV8smB#AvGVrO|JG!OZ;g&K(=(bqVSb)5ov7=kU z9Ua}g`uE#Uyx+Q`vvPM29L`T{HQv#>^$wp-3AZ;qRM^oYrro|G1e+mMrgHjiRUKqa zjsi{<=cbH?#qI%+`$x!L_k4KT>m zSV1?^2;K&-A|DYSvM$hk6VYN(nVDrETG`!RX=CVa{Rdr+38V~DY-zPFEki$MQR;~d z9b1Dux#`hW%lR}m13P*hi`PV{Nq3%ctETu_OAy2w5Sq@u;wovT{)%mFpt6;1{eqB_YRI@G5Vu zGwz7Bz4ZBt2I>gWiDh^G4t%M%6|N+X2HyGL?H#?#fWk_M^$b*udJk^IYqS7vtcD~d zwr1eidR=vxM3jyTreXBxZHGs1xA%(#8*bMAB9-F!c)A2`o|bW#mP$x{SGe3-vg&9l zMA608*9NT`J-#_^)6r;NXYR+gxFDPGL`W0YkRio4v202~QcQi!4j1k@F>tG%la(He z(%hhyus4)eVKk=XzRI$dr5(jqFU7Z3^c3TC0;o*|w>%w1i{4Th8l=OGIY(zYs!k3^ zI99>~E}s-C#?S=08s~9tNKvEbvpYPWh2E;;S0W6;+9L*HPG&+>RjrP*N{Jbi<}oF> zNUWt6NICkL|Ca7)WNynV!nO=&9$K=oU~`E-5U=EXQdu+dYlg92caO|kr1E6G*^KL{ z=vdAsmdovLn?=qh18KLu8lb|7mFPqpVD7pey{AE25N{BTOCXQc)a!W0EPpN0)S`2^ z*;tg%73+eUVk1hujVRD@x;r;@VLx@P;kvX^3{DC^AQTlMMcvmlpPh;^Gmn?@x|n-pYlG{wr51h;OVdlG zsmn7i>=ooOlcbc2Ug(YV)vGj^HQ4oW9@dO;*M(;Ru|Pq2LSySDiI|i!KnHj+BJxUr zI{+PM8!uQ=xF|1irXyz}SQ8K$Q4TT=UPlQcrmM*y$$U!zux9{yK!(3k<3#trG7Y%F zmEp0h5*aQI_q?=ec!y2NjF7Db4mWyZiG&?4nXp!7h+nGHEmXQWzZo8INl+u?sYN{& z8lRkf9jMXLiAc(*9#kw92|CNdVwAZS(=MIemha@b0xOd0u4HN7g=D@(u6)#?rDMmp z)%1Y_`KT`@}{G-H`4=aU0CvI=D01@34M@6RHg-};dL^Cle%JF>ogHnQ z*|4RW&4%ff<>Gw3L+<3VgO~2x0BH(Nxn%@XcLa8;!&55eR|f_q|&B}G^a)n z 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 z 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%0D7I}Bc-Mc-B*mRgZ@4d2pMv<1op5=(&Aji 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%0Dw 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 r2Length { + minLength = r1Length + } else { + minLength = r2Length + } + + searchRange := minLength + searchRange = (searchRange / 2) - 1 + if searchRange < 0 { + searchRange = 0 + } + var lowLim, hiLim, transCount, commonChars int + var i, j, k int + + r1Flag := make([]bool, r1Length+1) + r2Flag := make([]bool, r2Length+1) + + // find the common chars within the acceptable range + commonChars = 0 + for i, _ = range r1 { + if i >= searchRange { + lowLim = i - searchRange + } else { + lowLim = 0 + } + + if (i + searchRange) <= (r2Length - 1) { + hiLim = i + searchRange + } else { + hiLim = r2Length - 1 + } + + for j := lowLim; j <= hiLim; j++ { + if !r2Flag[j] && r2[j] == r1[i] { + r2Flag[j] = true + r1Flag[i] = true + commonChars++ + + break + } + } + } + + // if we have nothing in common at this point, nothing else can be done + if commonChars == 0 { + return + } + + // otherwise we count the transpositions + k = 0 + transCount = 0 + for i, _ := range r1 { + if r1Flag[i] { + for j = k; j < r2Length; j++ { + if r2Flag[j] { + k = j + 1 + break + } + } + if r1[i] != r2[j] { + transCount++ + } + } + } + transCount /= 2 + + // adjust for similarities in nonmatched characters + distance = float64(commonChars)/float64(r1Length) + + float64(commonChars)/float64(r2Length) + + (float64(commonChars-transCount))/float64(commonChars) + distance /= 3.0 + + // give more weight to already-similar strings + if winklerize && distance > 0.7 { + + // the first 4 characters in common + if minLength >= 4 { + j = 4 + } else { + j = minLength + } + + for i = 0; i < j && len(r1) > i && len(r2) > i && r1[i] == r2[i] && nan(r1[i]); i++ { + } + + if i > 0 { + distance += float64(i) * 0.1 * (1.0 - distance) + } + + if longTolerance && (minLength > 4) && (commonChars > i+1) && + (2*commonChars >= minLength+i) { + if nan(r1[0]) { + distance += (1.0 - distance) * (float64(commonChars-i-1) / + (float64(r1Length) + float64(r2Length) - float64(i*2) + 2)) + } + } + } + + return +} + +// Jaro computes the Jaro edit distance between two strings. It represents +// this with a float64 between 0 and 1 inclusive, with 0 indicating the two +// strings are not at all similar and 1 indicating the two strings are exact +// matches. +// +// See http://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance for a +// full description. +func Jaro(r1 string, r2 string) (distance float64) { + return jaroWinklerBase(r1, r2, false, false) +} + +// JaroWinkler computes the Jaro-Winkler edit distance between two strings. +// This is a modification of the Jaro algorithm that gives additional weight +// to prefix matches. +func JaroWinkler(r1 string, r2 string, longTolerance bool) (distance float64) { + return jaroWinklerBase(r1, r2, longTolerance, true) +} diff --git a/vendor/github.com/antzucaro/matchr/levenshtein.go b/vendor/github.com/antzucaro/matchr/levenshtein.go new file mode 100644 index 000000000..5f3ad0f8b --- /dev/null +++ b/vendor/github.com/antzucaro/matchr/levenshtein.go @@ -0,0 +1,48 @@ +package matchr + +// Levenshtein computes the Levenshtein distance between two +// strings. The returned value - distance - is the number of insertions, +// deletions, and substitutions it takes to transform one +// string (s1) into another (s2). Each step in the transformation "costs" +// one distance point. +func Levenshtein(s1 string, s2 string) (distance int) { + // index by code point, not byte + r1 := []rune(s1) + r2 := []rune(s2) + + rows := len(r1) + 1 + cols := len(r2) + 1 + + var d1 int + var d2 int + var d3 int + var i int + var j int + dist := make([]int, rows*cols) + + for i = 0; i < rows; i++ { + dist[i*cols] = i + } + + for j = 0; j < cols; j++ { + dist[j] = j + } + + for j = 1; j < cols; j++ { + for i = 1; i < rows; i++ { + if r1[i-1] == r2[j-1] { + dist[(i*cols)+j] = dist[((i-1)*cols)+(j-1)] + } else { + d1 = dist[((i-1)*cols)+j] + 1 + d2 = dist[(i*cols)+(j-1)] + 1 + d3 = dist[((i-1)*cols)+(j-1)] + 1 + + dist[(i*cols)+j] = min(d1, min(d2, d3)) + } + } + } + + distance = dist[(cols*rows)-1] + + return +} diff --git a/vendor/github.com/antzucaro/matchr/longestcommonsubsequence.go b/vendor/github.com/antzucaro/matchr/longestcommonsubsequence.go new file mode 100644 index 000000000..97c1224e1 --- /dev/null +++ b/vendor/github.com/antzucaro/matchr/longestcommonsubsequence.go @@ -0,0 +1,30 @@ +package matchr + +// LongestCommonSubsequence computes the longest substring +// between two strings. The returned value is the length +// of the substring, which contains letters from both +// strings, while maintaining the order of the letters. +func LongestCommonSubsequence(s1, s2 string) int { + r1 := []rune(s1) + r2 := []rune(s2) + table := make([][]int, len(s1)+1) + + // Construct 2D table + for i := range table { + table[i] = make([]int, len(s2)+1) + } + + var i int + var j int + + for i = len(r1) - 1; i >= 0; i-- { + for j = len(r2) - 1; j >= 0; j-- { + if r1[i] == r2[j] { + table[i][j] = 1 + table[i+1][j+1] + } else { + table[i][j] = maxI(table[i+1][j], table[i][j+1]) + } + } + } + return table[0][0] +} diff --git a/vendor/github.com/antzucaro/matchr/metaphone.go b/vendor/github.com/antzucaro/matchr/metaphone.go new file mode 100644 index 000000000..484d0f4d1 --- /dev/null +++ b/vendor/github.com/antzucaro/matchr/metaphone.go @@ -0,0 +1,721 @@ +package matchr + +import ( + "bytes" + "strings" +) + +type metaphoneresult struct { + // the maximum number of code values to calculate + maxLength int + + // whether to calculate an alternate + calcAlternate bool + + // no direct modifications - only through add() + primary bytes.Buffer + alternate bytes.Buffer + + // length of the private buffers + PrimaryLength int + AlternateLength int +} + +func newMetaphoneresult(maxLength int, calcAlternate bool) (r *metaphoneresult) { + r = &metaphoneresult{maxLength: maxLength, calcAlternate: calcAlternate} + return +} + +func (r *metaphoneresult) add(c1 string, c2 string) { + if c1 != "" { + r.primary.WriteString(c1) + r.PrimaryLength += len(c1) + } + + if c2 != "" && r.calcAlternate { + r.alternate.WriteString(c2) + r.AlternateLength += len(c2) + } +} + +func (r *metaphoneresult) isComplete() bool { + return r.PrimaryLength >= r.maxLength && r.AlternateLength >= r.maxLength +} + +func (r *metaphoneresult) result() (primary string, alternate string) { + primary = r.primary.String() + if len(primary) > r.maxLength { + primary = primary[0:r.maxLength] + } + alternate = r.alternate.String() + if len(alternate) > r.maxLength { + alternate = alternate[0:r.maxLength] + } + return +} + +// utility functions for checking things within a string +func isSlavoGermanic(value string) bool { + return strings.Contains(value, "W") || strings.Contains(value, "K") || + strings.Contains(value, "CZ") || strings.Contains(value, "WITZ") +} + +func isSilentStart(input runestring) bool { + SILENT_START := [...]string{"GN", "KN", "PN", "WR", "PS"} + + prefix := input.SafeSubstr(0, 2) + + for _, criteria := range SILENT_START { + if prefix == criteria { + return true + } + } + + return false +} + +func handleVowel(result *metaphoneresult, index int) int { + if index == 0 { + result.add("A", "A") + } + + return index + 1 +} + +/****************************************************************************** + * Entry handlers for letters. + *****************************************************************************/ +func handleC(input runestring, result *metaphoneresult, index int) int { + if conditionC0(input, index) { + result.add("K", "K") + index += 2 + } else if index == 0 && input.Contains(index, 6, "CAESAR") { + result.add("S", "S") + index += 2 + } else if input.Contains(index, 2, "CH") { + index = handleCH(input, result, index) + } else if input.Contains(index, 2, "CZ") && + !input.Contains(index-2, 4, "WICZ") { + result.add("S", "X") + index += 2 + } else if input.Contains(index+1, 3, "CIA") { + result.add("X", "X") + index += 3 + } else if input.Contains(index, 2, "CC") && + !(index == 1 && input.SafeAt(0) == 'M') { + return handleCC(input, result, index) + } else if input.Contains(index, 2, "CK") || + input.Contains(index, 2, "CG") || + input.Contains(index, 2, "CQ") { + result.add("K", "K") + index += 2 + } else if input.Contains(index, 2, "CI") || + input.Contains(index, 2, "CE") || + input.Contains(index, 2, "CY") { + if input.Contains(index, 3, "CIO") || + input.Contains(index, 3, "CIE") || + input.Contains(index, 3, "CIA") { + result.add("S", "X") + } else { + result.add("S", "S") + } + index += 2 + } else { + result.add("K", "K") + if input.Contains(index+1, 2, " C") || + input.Contains(index+1, 2, " Q") || + input.Contains(index+1, 2, " G") { + index += 3 + } else if (input.Contains(index+1, 1, "C") || + input.Contains(index+1, 1, "K") || + input.Contains(index+1, 1, "Q")) && + !(input.Contains(index+1, 2, "CE") || + input.Contains(index+1, 2, "CI")) { + index += 2 + } else { + index++ + } + } + + return index +} + +func handleCC(input runestring, result *metaphoneresult, index int) int { + if input.Contains(index+2, 1, "I", "E", "H") && + !input.Contains(index+2, 2, "HU") { + if (index == 1 && input.SafeAt(index-1) == 'A') || + (input.Contains(index-1, 5, "UCCEE", "UCCES")) { + result.add("KS", "KS") + } else { + result.add("X", "X") + } + index += 3 + } else { + result.add("K", "K") + index += 2 + } + return index +} + +func handleCH(input runestring, result *metaphoneresult, index int) int { + if index > 0 && input.Contains(index, 4, "CHAE") { + result.add("K", "X") + return index + 2 + } else if conditionCH0(input, index) { + result.add("K", "K") + return index + 2 + // TODO: combine this condition with the one above? + } else if conditionCH1(input, index) { + result.add("K", "K") + return index + 2 + } else { + if index > 0 { + if input.Contains(0, 2, "MC") { + result.add("K", "K") + } else { + result.add("X", "K") + } + } else { + result.add("X", "X") + } + return index + 2 + } +} + +func handleD(input runestring, result *metaphoneresult, index int) int { + if input.Contains(index, 2, "DG") { + if input.Contains(index+2, 1, "I", "E", "Y") { + result.add("J", "J") + index += 3 + } else { + result.add("TK", "TK") + index += 2 + } + } else if input.Contains(index, 2, "DT", "DD") { + result.add("T", "T") + index += 2 + } else { + result.add("T", "T") + index++ + } + return index +} + +func handleG(input runestring, result *metaphoneresult, index int, slavoGermanic bool) int { + if input.SafeAt(index+1) == 'H' { + index = handleGH(input, result, index) + } else if input.SafeAt(index+1) == 'N' { + if index == 1 && isVowel(input.SafeAt(0)) && !slavoGermanic { + result.add("KN", "N") + } else if !input.Contains(index+2, 2, "EY") && input.SafeAt(index+1) != 'Y' && !slavoGermanic { + result.add("N", "KN") + } else { + result.add("KN", "KN") + } + index += 2 + } else if input.Contains(index+1, 2, "LI") && !slavoGermanic { + result.add("KL", "L") + index += 2 + } else if index == 0 && (input.SafeAt(index+1) == 'Y' || + input.Contains(index+1, 2, "ES", "EP", "EB", "EL", "EY", "IB", "IL", "IN", "IE", "EI", "ER")) { + result.add("K", "J") + index += 2 + } else if (input.Contains(index+1, 2, "ER") || + input.SafeAt(index+1) == 'Y') && + !input.Contains(0, 6, "DANGER", "RANGER", "MANGER") && + !input.Contains(index-1, 1, "E", "I") && + !input.Contains(index-1, 3, "RGY", "OGY") { + result.add("K", "J") + index += 2 + } else if input.Contains(index+1, 1, "E", "I", "Y") || + input.Contains(index-1, 4, "AGGI", "OGGI") { + if input.Contains(0, 4, "VAN ", "VON ") || + input.Contains(0, 3, "SCH") || + input.Contains(index+1, 2, "ET") { + result.add("K", "K") + } else if input.Contains(index+1, 3, "IER") { + result.add("J", "J") + } else { + result.add("J", "K") + } + index += 2 + } else if input.SafeAt(index+1) == 'G' { + result.add("K", "K") + index += 2 + } else { + result.add("K", "K") + index++ + } + return index +} + +func handleGH(input runestring, result *metaphoneresult, index int) int { + if index > 0 && !isVowel(input.SafeAt(index-1)) { + result.add("K", "K") + index += 2 + } else if index == 0 { + if input.SafeAt(index+2) == 'I' { + result.add("J", "J") + } else { + result.add("K", "K") + } + index += 2 + } else if (index > 1 && input.Contains(index-2, 1, "B", "H", "D")) || + (index > 2 && input.Contains(index-3, 1, "B", "H", "D")) || + (index > 3 && input.Contains(index-4, 1, "B", "H")) { + index += 2 + } else { + if index > 2 && input.SafeAt(index-1) == 'U' && + input.Contains(index-3, 1, "C", "G", "L", "R", "T") { + result.add("F", "F") + } else if index > 0 && input.SafeAt(index-1) != 'I' { + result.add("K", "K") + } + index += 2 + } + return index +} + +func handleH(input runestring, result *metaphoneresult, index int) int { + if (index == 0 || isVowel(input.SafeAt(index-1))) && + isVowel(input.SafeAt(index+1)) { + result.add("H", "H") + index += 2 + } else { + index++ + } + return index +} + +func handleJ(input runestring, result *metaphoneresult, index int, slavoGermanic bool) int { + if input.Contains(index, 4, "JOSE") || input.Contains(0, 4, "SAN ") { + if (index == 0 && (input.SafeAt(index+4) == ' ') || + len(input) == 4) || input.Contains(0, 4, "SAN ") { + result.add("H", "H") + } else { + result.add("J", "H") + } + index++ + } else { + if index == 0 && !input.Contains(index, 4, "JOSE") { + result.add("J", "A") + } else if isVowel(input.SafeAt(index-1)) && !slavoGermanic && + (input.SafeAt(index+1) == 'A' || input.SafeAt(index+1) == 'O') { + result.add("J", "H") + } else if index == (len(input) - 1) { + result.add("J", " ") + } else if !input.Contains(index+1, 1, + "L", "T", "K", "S", "N", "M", "B", "Z") && + !input.Contains(index-1, 1, "S", "K", "L") { + result.add("J", "J") + } + + if input.SafeAt(index+1) == 'J' { + index += 2 + } else { + index++ + } + } + return index +} + +func handleL(input runestring, result *metaphoneresult, index int) int { + if input.SafeAt(index+1) == 'L' { + if conditionL0(input, index) { + result.add("L", "") + } else { + result.add("L", "L") + } + index += 2 + } else { + result.add("L", "L") + index++ + } + return index +} + +func handleP(input runestring, result *metaphoneresult, index int) int { + if input.SafeAt(index+1) == 'H' { + result.add("F", "F") + index += 2 + } else { + result.add("P", "P") + if input.Contains(index+1, 1, "P", "B") { + index += 2 + } else { + index++ + } + } + return index +} + +func handleR(input runestring, result *metaphoneresult, index int, slavoGermanic bool) int { + if index == (len(input)-1) && !slavoGermanic && + input.Contains(index-2, 2, "IE") && + !input.Contains(index-4, 2, "ME", "MA") { + result.add("", "R") + } else { + result.add("R", "R") + } + + if input.SafeAt(index+1) == 'R' { + index += 2 + } else { + index++ + } + return index +} + +func handleS(input runestring, result *metaphoneresult, index int, slavoGermanic bool) int { + if input.Contains(index-1, 3, "ISL", "YSL") { + index++ + } else if index == 0 && input.Contains(index, 5, "SUGAR") { + result.add("X", "S") + index++ + } else if input.Contains(index, 2, "SH") { + if input.Contains(index+1, 4, "HEIM", "HOEK", "HOLM", "HOLZ") { + result.add("S", "S") + } else { + result.add("X", "X") + } + index += 2 + } else if input.Contains(index, 3, "SIO", "SIA") || + input.Contains(index, 4, "SIAN") { + if slavoGermanic { + result.add("S", "S") + } else { + result.add("S", "X") + } + index += 3 + } else if (index == 0 && input.Contains(index+1, 1, "M", "N", "L", "W")) || + input.Contains(index+1, 1, "Z") { + result.add("S", "X") + if input.Contains(index+1, 1, "Z") { + index += 2 + } else { + index++ + } + } else if input.Contains(index, 2, "SC") { + index = handleSC(input, result, index) + } else { + if index == len(input)-1 && + input.Contains(index-2, 2, "AI", "OI") { + result.add("", "S") + } else { + result.add("S", "S") + } + + if input.Contains(index+1, 1, "S", "Z") { + index += 2 + } else { + index++ + } + } + return index +} + +func handleSC(input runestring, result *metaphoneresult, index int) int { + if input.SafeAt(index+2) == 'H' { + if input.Contains(index+3, 2, "OO", "ER", "EN", "UY", "ED", "EM") { + if input.Contains(index+3, 2, "ER", "EN") { + result.add("X", "SK") + } else { + result.add("SK", "SK") + } + } else { + if index == 0 && !isVowel(input.SafeAt(3)) && input.SafeAt(3) != 'W' { + result.add("X", "S") + } else { + result.add("X", "X") + } + } + } else if input.Contains(index+2, 1, "I", "E", "Y") { + result.add("S", "S") + } else { + result.add("SK", "SK") + } + index += 3 + + return index +} + +func handleT(input runestring, result *metaphoneresult, index int) int { + if input.Contains(index, 4, "TION") { + result.add("X", "X") + index += 3 + } else if input.Contains(index, 3, "TIA", "TCH") { + result.add("X", "X") + index += 3 + } else if input.Contains(index, 2, "TH") || input.Contains(index, 3, "TTH") { + if input.Contains(index+2, 2, "OM", "AM") || + input.Contains(0, 4, "VAN ", "VON ") || + input.Contains(0, 3, "SCH") { + result.add("T", "T") + } else { + result.add("0", "T") + } + index += 2 + } else { + result.add("T", "T") + if input.Contains(index+1, 1, "T", "D") { + index += 2 + } else { + index++ + } + } + return index +} + +func handleW(input runestring, result *metaphoneresult, index int) int { + if input.Contains(index, 2, "WR") { + result.add("R", "R") + index += 2 + } else { + if index == 0 && (isVowel(input.SafeAt(index+1)) || + input.Contains(index, 2, "WH")) { + if isVowel(input.SafeAt(index + 1)) { + result.add("A", "F") + } else { + result.add("A", "A") + } + index++ + } else if (index == len(input)-1 && isVowel(input.SafeAt(index-1))) || + input.Contains(index-1, 5, "EWSKI", "EWSKY", "OWSKI", "OWSKY") || + input.Contains(0, 3, "SCH") { + result.add("", "F") + index++ + } else if input.Contains(index, 4, "WICZ", "WITZ") { + result.add("TS", "FX") + index += 4 + } else { + index++ + } + } + return index +} + +func handleX(input runestring, result *metaphoneresult, index int) int { + if index == 0 { + result.add("S", "S") + index++ + } else { + if !((index == len(input)-1) && + (input.Contains(index-3, 3, "IAU", "EAU") || + input.Contains(index-2, 2, "AU", "OU"))) { + result.add("KS", "KS") + } + + if input.Contains(index+1, 1, "C", "X") { + index += 2 + } else { + index++ + } + } + return index +} + +func handleZ(input runestring, result *metaphoneresult, index int, slavoGermanic bool) int { + if input.SafeAt(index+1) == 'H' { + result.add("J", "J") + } else { + if input.Contains(index+1, 2, "ZO", "ZI", "ZA") || + (slavoGermanic && (index > 0 && input.SafeAt(index-1) != 'T')) { + result.add("S", "TS") + } else { + result.add("S", "S") + } + } + + if input.SafeAt(index+1) == 'Z' { + index += 2 + } else { + index++ + } + return index +} + +/****************************************************************************** + * Complex conditional handlers for letters + *****************************************************************************/ +func conditionC0(input runestring, index int) bool { + if input.Contains(index, 4, "CHIA") { + return true + } else if index <= 1 { + return false + } else if isVowel(input.SafeAt(index - 2)) { + return false + } else if !input.Contains(index-1, 3, "ACH") { + return false + } else { + c := input.SafeAt(index + 2) + return (c != 'I' && c != 'E') || + (input.Contains(index-2, 6, "BACHER") || + input.Contains(index-2, 6, "MACHER")) + } +} + +func conditionCH0(input runestring, index int) bool { + if index != 0 { + return false + } else if !input.Contains(index+1, 5, "HARAC", "HARIS") && + !input.Contains(index+1, 3, "HOR", "HYM", "HIA", "HEM") { + return false + } else if input.Contains(0, 5, "CHORE") { + return false + } else { + return true + } +} + +func conditionCH1(input runestring, index int) bool { + // good god this is ugly + return (input.Contains(0, 4, "VAN ", "VON ") || input.Contains(0, 3, "SCH")) || + input.Contains(index-2, 6, "ORCHES", "ARCHIT", "ORCHID") || + input.Contains(index+2, 1, "T", "S") || + ((input.Contains(index-1, 1, "A", "O", "U", "E") || index == 0) && + (input.Contains(index+2, 1, "L", "R", "N", "M", "B", "H", "F", "V", "W", " ") || + index+1 == len(input)-1)) +} + +func conditionL0(input runestring, index int) bool { + if index == (len(input)-3) && + input.Contains(index-1, 4, "ILLO", "ILLA", "ALLE") { + return true + } else if (input.Contains(len(input)-2, 2, "AS", "OS") || + input.Contains(len(input)-1, 1, "A", "O")) && + (input.Contains(index-1, 4, "ALLE")) { + return true + } else { + return false + } +} + +func conditionM0(input runestring, index int) bool { + if input.SafeAt(index+1) == 'M' { + return true + } + + return input.Contains(index-1, 3, "UMB") && + ((index+1) == (len(input)-1) || + input.Contains(index+2, 2, "ER")) +} + +// DoubleMetaphone computes the Double-Metaphone value of the input string. +// This value is a phonetic representation of how the string sounds, with +// affordances for many different language dialects. It was originally +// developed by Lawrence Phillips in the 1990s. +// +// More information about this algorithm can be found on Wikipedia at +// http://en.wikipedia.org/wiki/Metaphone. +func DoubleMetaphone(s1 string) (string, string) { + // trim, upper space + s1 = cleanInput(s1) + + // structure to traverse the string by code point, not byte + input := runestring(s1) + + slavoGermanic := isSlavoGermanic(s1) + + // where we are in the string + index := 0 + + if isSilentStart(input) { + index += 1 + } + + result := newMetaphoneresult(4, true) + + for !result.isComplete() && index <= len(input)-1 { + c := rune(input.SafeAt(index)) + switch c { + case 'A', 'E', 'I', 'O', 'U', 'Y': + index = handleVowel(result, index) + case 'B': + result.add("P", "P") + if input.SafeAt(index+1) == 'B' { + index += 2 + } else { + index++ + } + case 'Ç': + result.add("S", "S") + index++ + case 'C': + index = handleC(input, result, index) + case 'D': + index = handleD(input, result, index) + case 'F': + result.add("F", "F") + if input.SafeAt(index+1) == 'F' { + index += 2 + } else { + index++ + } + case 'G': + index = handleG(input, result, index, slavoGermanic) + case 'H': + index = handleH(input, result, index) + case 'J': + index = handleJ(input, result, index, slavoGermanic) + case 'K': + result.add("K", "K") + if input.SafeAt(index+1) == 'K' { + index += 2 + } else { + index++ + } + case 'L': + index = handleL(input, result, index) + case 'M': + result.add("M", "M") + if conditionM0(input, index) { + index += 2 + } else { + index++ + } + case 'N': + result.add("N", "N") + if input.SafeAt(index+1) == 'N' { + index += 2 + } else { + index++ + } + case 'Ñ': + result.add("N", "N") + index++ + case 'P': + index = handleP(input, result, index) + case 'Q': + result.add("K", "K") + if input.SafeAt(index+1) == 'Q' { + index += 2 + } else { + index++ + } + case 'R': + index = handleR(input, result, index, slavoGermanic) + case 'S': + index = handleS(input, result, index, slavoGermanic) + case 'T': + index = handleT(input, result, index) + case 'V': + result.add("F", "F") + if input.SafeAt(index+1) == 'V' { + index += 2 + } else { + index++ + } + case 'W': + index = handleW(input, result, index) + case 'X': + index = handleX(input, result, index) + case 'Z': + index = handleZ(input, result, index, slavoGermanic) + default: + index++ + } + + } + + return result.result() +} diff --git a/vendor/github.com/antzucaro/matchr/nysiis.go b/vendor/github.com/antzucaro/matchr/nysiis.go new file mode 100644 index 000000000..bbf699d57 --- /dev/null +++ b/vendor/github.com/antzucaro/matchr/nysiis.go @@ -0,0 +1,156 @@ +package matchr + +// NYSIIS computes the NYSIIS phonetic encoding of the input string. It is a +// modification of the traditional Soundex algorithm. +func NYSIIS(s1 string) string { + cleans1 := runestring(cleanInput(s1)) + input := runestring(make([]rune, 0, len(s1))) + + // The output can't be larger than the string itself + output := runestring(make([]rune, 0, len(s1))) + + // 0. Remove all non-ASCII characters + for _, v := range cleans1 { + if v >= 65 && v <= 90 { + input = append(input, v) + } + } + + if len(input) == 0 { + return "" + } + + // 1. Transcoding first characters + switch input[0] { + case 'M': + if input.SafeSubstr(0, 3) == "MAC" { + // MAC -> MCC + input[1] = 'C' + } + case 'K': + if input.SafeSubstr(0, 2) == "KN" { + // KN -> NN + input[0] = 'N' + } else { + // K -> C + input[0] = 'C' + } + case 'P': + next := input.SafeAt(1) + if next == 'H' { + // PH -> FF + input[0] = 'F' + input[1] = 'F' + } else if next == 'F' { + // PF -> FF + input[0] = 'F' + } + case 'S': + if input.SafeSubstr(0, 3) == "SCH" { + input[1] = 'S' + input[2] = 'S' + } + } + + // 2. Transcoding last characters + switch input.SafeSubstr(len(input)-2, 2) { + case "EE", "IE": + // EE, IE -> Y + input.Del(len(input) - 2) + input[len(input)-1] = 'Y' + case "DT", "RT", "RD", "NT", "ND": + // DT, RT, RD, NT, ND -> D + input.Del(len(input) - 2) + input[len(input)-1] = 'D' + } + + // 3. First character of key = first character of name + output = append(output, input[0]) + last := input[0] + + for i := 1; i < len(input); i++ { + c := input[i] + switch c { + case 'A', 'I', 'O', 'U': + // A, E, I, O, U -> A (E is separate) + input[i] = 'A' + case 'E': + // EV -> AF, else A + if input.SafeAt(i+1) == 'V' { + input[i+1] = 'F' + } + input[i] = 'A' + case 'Q': + // Q -> G + input[i] = 'G' + case 'Z': + // Z -> S + input[i] = 'S' + case 'M': + // M -> N + input[i] = 'N' + case 'K': + // KN -> N, else K -> C + if input.SafeAt(i+1) == 'N' { + input.Del(i) + } else { + input[i] = 'C' + } + case 'S': + // SCH -> SSS + if input.SafeSubstr(i, 3) == "SCH" { + input[i+1] = 'S' + input[i+2] = 'S' + } + case 'P': + // PH -> FF + if input.SafeAt(i+1) == 'H' { + input[i] = 'F' + input[i+1] = 'F' + } + case 'H': + // H -> $(previous character) if previous character or + // next character is a non-vowel + prev := input.SafeAt(i - 1) + next := input.SafeAt(i + 1) + if !isVowelNoY(prev) || !isVowelNoY(next) { + input[i] = prev + } + case 'W': + prev := input.SafeAt(i - 1) + if isVowelNoY(prev) { + input[i] = prev + } + } + + if input[i] != last && input[i] != 0 { + output = append(output, input[i]) + } + last = input[i] + } + + // have to be careful here because we've already added the first + // key value + if len(output) > 1 { + // remove trailing s + if output.SafeAt(len(output)-1) == 'S' { + output.Del(len(output) - 1) + } + + // trailing AY -> Y + if len(output) > 2 && output.SafeSubstr(len(output)-2, 2) == "AY" { + output.Del(len(output) - 2) + } + + // trailing A -> remove it + if output.SafeAt(len(output)-1) == 'A' { + output.Del(len(output) - 1) + } + } + + if len(output) > 6 { + return string(output[0:6]) + } else { + return string(output) + } +} diff --git a/vendor/github.com/antzucaro/matchr/osa.go b/vendor/github.com/antzucaro/matchr/osa.go new file mode 100644 index 000000000..8e5de2ee7 --- /dev/null +++ b/vendor/github.com/antzucaro/matchr/osa.go @@ -0,0 +1,56 @@ +package matchr + +// OSA computes the Optimal String Alignment distance between two +// strings. The returned value - distance - is the number of insertions, +// deletions, substitutions, and transpositions it takes to transform one +// string (s1) into another (s2). Each step in the transformation "costs" +// one distance point. It is similar to Damerau-Levenshtein, but is simpler +// because it does not allow multiple edits on any substring. +func OSA(s1 string, s2 string) (distance int) { + // index by code point, not byte + r1 := []rune(s1) + r2 := []rune(s2) + + rows := len(r1) + 1 + cols := len(r2) + 1 + + var i, j, d1, d2, d3, d_now, cost int + + dist := make([]int, rows*cols) + + for i = 0; i < rows; i++ { + dist[i*cols] = i + } + + for j = 0; j < cols; j++ { + dist[j] = j + } + + for i = 1; i < rows; i++ { + for j = 1; j < cols; j++ { + if r1[i-1] == r2[j-1] { + cost = 0 + } else { + cost = 1 + } + + d1 = dist[((i-1)*cols)+j] + 1 + d2 = dist[(i*cols)+(j-1)] + 1 + d3 = dist[((i-1)*cols)+(j-1)] + cost + + d_now = min(d1, min(d2, d3)) + + if i > 2 && j > 2 && r1[i-1] == r2[j-2] && + r1[i-2] == r2[j-1] { + d1 = dist[((i-2)*cols)+(j-2)] + cost + d_now = min(d_now, d1) + } + + dist[(i*cols)+j] = d_now + } + } + + distance = dist[(cols*rows)-1] + + return +} diff --git a/vendor/github.com/antzucaro/matchr/phonex.go b/vendor/github.com/antzucaro/matchr/phonex.go new file mode 100644 index 000000000..78f4982a4 --- /dev/null +++ b/vendor/github.com/antzucaro/matchr/phonex.go @@ -0,0 +1,128 @@ +package matchr + +func preProcess(input []rune) []rune { + output := runestring(make([]rune, 0, len(input))) + + // 0. Remove all non-ASCII characters + for _, v := range input { + if v >= 65 && v <= 90 { + output = append(output, v) + } + } + + // 1. Remove all trailing 'S' characters at the end of the name + for i := len(output) - 1; i >= 0 && output[i] == 'S'; i-- { + output.Del(i) + } + + // 2. Convert leading letter pairs as follows + // KN -> N, PH -> F, WR -> R + switch output.SafeSubstr(0, 2) { + case "KN": + output = output[1:] + case "PH": + output[0] = 'F' // H will be ignored anyway + case "WR": + output = output[1:] + } + + // 3a. Convert leading single letters as follows: + // H -> Remove + if output.SafeAt(0) == 'H' { + output = output[1:] + } + + // 3a. Convert leading single letters as follows: + // E,I,O,U,Y -> A + // P -> B + // V -> F + // K,Q -> C + // J -> G + // Z -> S + switch output.SafeAt(0) { + case 'E', 'I', 'O', 'U', 'Y': + output[0] = 'A' + case 'P': + output[0] = 'B' + case 'V': + output[0] = 'F' + case 'K', 'Q': + output[0] = 'C' + case 'J': + output[0] = 'G' + case 'Z': + output[0] = 'S' + } + + return output +} + +// Phonex computes the Phonex phonetic encoding of the input string. Phonex is +// a modification of the venerable Soundex algorithm. It accounts for a few +// more letter combinations to improve accuracy on some data sets. +// +// This implementation is based off of the original C implementation by the +// creator - A. J. Lait - as found in his research paper entitled "An +// Assessment of Name Matching Algorithms." +func Phonex(s1 string) string { + + // preprocess + s1 = cleanInput(s1) + + input := runestring(preProcess([]rune(s1))) + + result := make([]rune, 0, len(input)) + + last := rune(0) + code := rune(0) + for i := 0; i < len(input) && + input[i] != ' ' && + input[i] != ',' && + len(result) < 4; i++ { + switch input[i] { + case 'B', 'P', 'F', 'V': + code = '1' + case 'C', 'S', 'K', 'G', 'J', 'Q', 'X', 'Z': + code = '2' + case 'D', 'T': + if input.SafeAt(i+1) != 'C' { + code = '3' + } + case 'L': + if isVowel(input.SafeAt(i+1)) || i == len(input)-1 { + code = '4' + } + case 'M', 'N': + nextChar := input.SafeAt(i + 1) + if nextChar == 'D' || nextChar == 'G' { + // ignore next character + i++ + } + code = '5' + case 'R': + if isVowel(input.SafeAt(i+1)) || i == len(input)-1 { + code = '6' + } + default: + code = 0 + } + + if last != code && code != 0 && i != 0 { + result = append(result, code) + } + + // special case for 1st character: we use the actual character + if i == 0 { + result = append(result, input[i]) + last = code + } else { + last = result[len(result)-1] + } + } + + for len(result) < 4 { + result = append(result, '0') + } + + return string(result) +} diff --git a/vendor/github.com/antzucaro/matchr/runestring.go b/vendor/github.com/antzucaro/matchr/runestring.go new file mode 100644 index 000000000..41af3da32 --- /dev/null +++ b/vendor/github.com/antzucaro/matchr/runestring.go @@ -0,0 +1,44 @@ +package matchr + +type runestring []rune + +// A safe way to index a runestring. It will return a null rune if you try +// to index outside of the bounds of the runestring. +func (r *runestring) SafeAt(pos int) rune { + if pos < 0 || pos >= len(*r) { + return 0 + } else { + return (*r)[pos] + } +} + +// A safe way to obtain a substring of a runestring. It will return a null +// string ("") if you index somewhere outside its bounds. +func (r *runestring) SafeSubstr(pos int, length int) string { + if pos < 0 || pos > len(*r) || (pos+length) > len(*r) { + return "" + } else { + return string((*r)[pos : pos+length]) + } +} + +// Delete characters at positions pos. It will do nothing if you provide +// an index outside the bounds of the runestring. +func (r *runestring) Del(pos ...int) { + for _, i := range pos { + if i >= 0 && i <= len(*r) { + *r = append((*r)[:i], (*r)[i+1:]...) + } + } +} + +// A helper to determine if any substrings exist within the given runestring. +func (r *runestring) Contains(start int, length int, criteria ...string) bool { + substring := r.SafeSubstr(start, length) + for _, c := range criteria { + if substring == c { + return true + } + } + return false +} diff --git a/vendor/github.com/antzucaro/matchr/smithwaterman.go b/vendor/github.com/antzucaro/matchr/smithwaterman.go new file mode 100644 index 000000000..161d86b59 --- /dev/null +++ b/vendor/github.com/antzucaro/matchr/smithwaterman.go @@ -0,0 +1,87 @@ +package matchr + +const GAP_COST = float64(0.5) + +func getCost(r1 []rune, r1Index int, r2 []rune, r2Index int) float64 { + if r1[r1Index] == r2[r2Index] { + return 1.0 + } else { + return -2.0 + } +} + +// SmithWaterman computes the Smith-Waterman local sequence alignment for the +// two input strings. This was originally designed to find similar regions in +// strings representing DNA or protein sequences. +func SmithWaterman(s1 string, s2 string) float64 { + var cost float64 + + // index by code point, not byte + r1 := []rune(s1) + r2 := []rune(s2) + + r1Len := len(r1) + r2Len := len(r2) + + if r1Len == 0 { + return float64(r2Len) + } + + if r2Len == 0 { + return float64(r1Len) + } + + d := make([][]float64, r1Len) + for i := range d { + d[i] = make([]float64, r2Len) + } + + var maxSoFar float64 + for i := 0; i < r1Len; i++ { + // substitution cost + cost = getCost(r1, i, r2, 0) + if i == 0 { + d[0][0] = max(0.0, max(-GAP_COST, cost)) + } else { + d[i][0] = max(0.0, max(d[i-1][0]-GAP_COST, cost)) + } + + // save if it is the biggest thus far + if d[i][0] > maxSoFar { + maxSoFar = d[i][0] + } + } + + for j := 0; j < r2Len; j++ { + // substitution cost + cost = getCost(r1, 0, r2, j) + if j == 0 { + d[0][0] = max(0, max(-GAP_COST, cost)) + } else { + d[0][j] = max(0, max(d[0][j-1]-GAP_COST, cost)) + } + + // save if it is the biggest thus far + if d[0][j] > maxSoFar { + maxSoFar = d[0][j] + } + } + + for i := 1; i < r1Len; i++ { + for j := 1; j < r2Len; j++ { + cost = getCost(r1, i, r2, j) + + // find the lowest cost + d[i][j] = max( + max(0, d[i-1][j]-GAP_COST), + max(d[i][j-1]-GAP_COST, d[i-1][j-1]+cost)) + + // save if it is the biggest thus far + if d[i][j] > maxSoFar { + maxSoFar = d[i][j] + } + } + } + + return maxSoFar +} diff --git a/vendor/github.com/antzucaro/matchr/soundex.go b/vendor/github.com/antzucaro/matchr/soundex.go new file mode 100644 index 000000000..919eda8ae --- /dev/null +++ b/vendor/github.com/antzucaro/matchr/soundex.go @@ -0,0 +1,72 @@ +package matchr + +import "strings" + +// Soundex computes the Soundex phonetic representation of the input string. It +// attempts to encode homophones with the same characters. More information can +// be found at http://en.wikipedia.org/wiki/Soundex. +func Soundex(s1 string) string { + if len(s1) == 0 { + return "" + } + + // we should work with all uppercase + s1 = strings.ToUpper(s1) + + input := NewString(s1) + + // the encoded value + enc := input.Slice(0, 1) + + c := "" + prev := "" + hw := false + + for i := 0; i < input.RuneCount(); i++ { + switch rune(input.At(i)) { + case 'B', 'F', 'P', 'V': + c = "1" + case 'C', 'G', 'J', 'K', 'Q', 'S', 'X', 'Z': + c = "2" + case 'D', 'T': + c = "3" + case 'L': + c = "4" + case 'M', 'N': + c = "5" + case 'R': + c = "6" + case 'H', 'W': + hw = true + default: + c = "" + } + + // don't encode the first position, but we need its code value + // to prevent repeats + if c != "" && c != prev && i > 0 { + // if the next encoded digit is different, we can add it right away + // if it is the same, though, it must not have been preceded + // by an 'H' or a 'W' + if enc[len(enc)-1:len(enc)] != c || !hw { + enc = enc + c + } + + // we're done when we reach four encoded characters + if len(enc) == 4 { + break + } + } + + prev = c + hw = false + } + + // if we've fallen short of 4 "real" encoded characters, + // it gets padded with zeros + for len(enc) < 4 { + enc = enc + "0" + } + + return enc +} diff --git a/vendor/github.com/antzucaro/matchr/utf8.go b/vendor/github.com/antzucaro/matchr/utf8.go new file mode 100644 index 000000000..d8c409502 --- /dev/null +++ b/vendor/github.com/antzucaro/matchr/utf8.go @@ -0,0 +1,215 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package matchr + +import ( + "errors" + "unicode/utf8" +) + +// String wraps a regular string with a small structure that provides more +// efficient indexing by code point index, as opposed to byte index. +// Scanning incrementally forwards or backwards is O(1) per index operation +// (although not as fast a range clause going forwards). Random access is +// O(N) in the length of the string, but the overhead is less than always +// scanning from the beginning. +// If the string is ASCII, random access is O(1). +// Unlike the built-in string type, String has internal mutable state and +// is not thread-safe. +type String struct { + str string + numRunes int + // If width > 0, the rune at runePos starts at bytePos and has the specified width. + width int + bytePos int + runePos int + nonASCII int // byte index of the first non-ASCII rune. +} + +// NewString returns a new UTF-8 string with the provided contents. +func NewString(contents string) *String { + return new(String).Init(contents) +} + +// Init initializes an existing String to hold the provided contents. +// It returns a pointer to the initialized String. +func (s *String) Init(contents string) *String { + s.str = contents + s.bytePos = 0 + s.runePos = 0 + for i := 0; i < len(contents); i++ { + if contents[i] >= utf8.RuneSelf { + // Not ASCII. + s.numRunes = utf8.RuneCountInString(contents) + _, s.width = utf8.DecodeRuneInString(contents) + s.nonASCII = i + return s + } + } + // ASCII is simple. Also, the empty string is ASCII. + s.numRunes = len(contents) + s.width = 0 + s.nonASCII = len(contents) + return s +} + +// String returns the contents of the String. This method also means the +// String is directly printable by fmt.Print. +func (s *String) String() string { + return s.str +} + +// RuneCount returns the number of runes (Unicode code points) in the String. +func (s *String) RuneCount() int { + return s.numRunes +} + +// IsASCII returns a boolean indicating whether the String contains only ASCII bytes. +func (s *String) IsASCII() bool { + return s.width == 0 +} + +// Slice returns the string sliced at rune positions [i:j]. +func (s *String) Slice(i, j int) string { + // ASCII is easy. Let the compiler catch the indexing error if there is one. + if j < s.nonASCII { + return s.str[i:j] + } + if i < 0 || j > s.numRunes || i > j { + panic(errors.New("utf8.String: slice index out of range")) + } + if i == j { + return "" + } + // For non-ASCII, after At(i), bytePos is always the position of the indexed character. + var low, high int + switch { + case i < s.nonASCII: + low = i + case i == s.numRunes: + low = len(s.str) + default: + s.At(i) + low = s.bytePos + } + switch { + case j == s.numRunes: + high = len(s.str) + default: + s.At(j) + high = s.bytePos + } + return s.str[low:high] +} + +// At returns the rune with index i in the String. The sequence of runes is the same +// as iterating over the contents with a "for range" clause. +func (s *String) At(i int) int { + // ASCII is easy. Let the compiler catch the indexing error if there is one. + if i < s.nonASCII { + return int(s.str[i]) + } + + // Now we do need to know the index is valid. + if i < 0 || i >= s.numRunes { + panic(errors.New("utf8.String: index out of range")) + } + + var r rune + + // Five easy common cases: within 1 spot of bytePos/runePos, or the beginning, or the end. + // With these cases, all scans from beginning or end work in O(1) time per rune. + switch { + + case i == s.runePos-1: // backing up one rune + r, s.width = utf8.DecodeLastRuneInString(s.str[0:s.bytePos]) + s.runePos = i + s.bytePos -= s.width + return int(r) + case i == s.runePos+1: // moving ahead one rune + s.runePos = i + s.bytePos += s.width + fallthrough + case i == s.runePos: + r, s.width = utf8.DecodeRuneInString(s.str[s.bytePos:]) + return int(r) + case i == 0: // start of string + r, s.width = utf8.DecodeRuneInString(s.str) + s.runePos = 0 + s.bytePos = 0 + return int(r) + + case i == s.numRunes-1: // last rune in string + r, s.width = utf8.DecodeLastRuneInString(s.str) + s.runePos = i + s.bytePos = len(s.str) - s.width + return int(r) + } + + // We need to do a linear scan. There are three places to start from: + // 1) The beginning + // 2) bytePos/runePos. + // 3) The end + // Choose the closest in rune count, scanning backwards if necessary. + forward := true + if i < s.runePos { + // Between beginning and pos. Which is closer? + // Since both i and runePos are guaranteed >= nonASCII, that's the + // lowest location we need to start from. + if i < (s.runePos-s.nonASCII)/2 { + // Scan forward from beginning + s.bytePos, s.runePos = s.nonASCII, s.nonASCII + } else { + // Scan backwards from where we are + forward = false + } + } else { + // Between pos and end. Which is closer? + if i-s.runePos < (s.numRunes-s.runePos)/2 { + // Scan forward from pos + } else { + // Scan backwards from end + s.bytePos, s.runePos = len(s.str), s.numRunes + forward = false + } + } + if forward { + // TODO: Is it much faster to use a range loop for this scan? + for { + r, s.width = utf8.DecodeRuneInString(s.str[s.bytePos:]) + if s.runePos == i { + break + } + s.runePos++ + s.bytePos += s.width + } + } else { + for { + r, s.width = utf8.DecodeLastRuneInString(s.str[0:s.bytePos]) + s.runePos-- + s.bytePos -= s.width + if s.runePos == i { + break + } + } + } + return int(r) +} + +// We want the panic in At(i) to satisfy os.Error, because that's what +// runtime panics satisfy, but we can't import os. This is our solution. + +// error is the type of the error returned if a user calls String.At(i) with i out of range. +// It satisfies os.Error and runtime.Error. +// type error string + +/* +func (err error) String() string { + return string(err) +} + +func (err error) RunTimeError() { +} +*/ diff --git a/vendor/github.com/antzucaro/matchr/util.go b/vendor/github.com/antzucaro/matchr/util.go new file mode 100644 index 000000000..520e587bd --- /dev/null +++ b/vendor/github.com/antzucaro/matchr/util.go @@ -0,0 +1,119 @@ +package matchr + +import ( + "math" + "strings" +) + +// min of two integers +func min(a int, b int) (res int) { + if a < b { + res = a + } else { + res = b + } + + return +} + +// max of two integers +func maxI(a int, b int) (res int) { + if a < b { + res = b + } else { + res = a + } + + return +} + +// max of two float64s +func max(a float64, b float64) (res float64) { + if a < b { + res = b + } else { + res = a + } + + return +} + +// is this string index outside of the ASCII numeric code points? +func nan(c rune) bool { + return ((c > 57) || (c < 48)) +} + +// Round a float64 to the given precision +// +// http://play.golang.org/p/S654PxAe_N +// +// (via Rory McGuire at +// https://groups.google.com/forum/#!topic/golang-nuts/ITZV08gAugI) +func round(x float64, prec int) float64 { + if math.IsNaN(x) || math.IsInf(x, 0) { + return x + } + + sign := 1.0 + if x < 0 { + sign = -1 + x *= -1 + } + + var rounder float64 + pow := math.Pow(10, float64(prec)) + intermed := x * pow + _, frac := math.Modf(intermed) + + if frac >= 0.5 { + rounder = math.Ceil(intermed) + } else { + rounder = math.Floor(intermed) + } + + return rounder / pow * sign +} + +// A helper to determine if any substrings exist within the given string +func contains(value *String, start int, length int, criteria ...string) bool { + substring := substring(value, start, length) + for _, c := range criteria { + if substring == c { + return true + } + } + return false +} + +// A fault-tolerant version of Slice. It will return nothing ("") if the index +// is out of bounds. This allows substring-ing without having to bound check +// every time. +func substring(value *String, start int, length int) string { + if start >= 0 && start+length <= value.RuneCount() { + return value.Slice(start, start+length) + } else { + return "" + } +} + +func isVowel(c rune) bool { + switch c { + case 'A', 'E', 'I', 'O', 'U', 'Y': + return true + default: + return false + } +} + +func isVowelNoY(c rune) bool { + switch c { + case 'A', 'E', 'I', 'O', 'U': + return true + default: + return false + } +} + +func cleanInput(input string) string { + return strings.ToUpper(strings.TrimSpace(input)) +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go index 3acb1ffa9..0609da3ee 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go @@ -8857,6 +8857,9 @@ var awsPartition = partition{ endpointKey{ Region: "ap-southeast-2", }: endpoint{}, + endpointKey{ + Region: "ap-southeast-3", + }: endpoint{}, endpointKey{ Region: "ca-central-1", }: endpoint{}, @@ -10472,6 +10475,14 @@ var awsPartition = partition{ }, }, "health": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + Defaults: endpointDefaults{ + defaultKey{}: endpoint{ + SSLCommonName: "health.us-east-1.amazonaws.com", + Protocols: []string{"https"}, + }, + }, Endpoints: serviceEndpoints{ endpointKey{ Region: "fips-us-east-2", @@ -16611,6 +16622,70 @@ var awsPartition = partition{ }, }, }, + "resiliencehub": service{ + Endpoints: serviceEndpoints{ + endpointKey{ + Region: "af-south-1", + }: endpoint{}, + endpointKey{ + Region: "ap-east-1", + }: endpoint{}, + endpointKey{ + Region: "ap-northeast-1", + }: endpoint{}, + endpointKey{ + Region: "ap-northeast-2", + }: endpoint{}, + endpointKey{ + Region: "ap-south-1", + }: endpoint{}, + endpointKey{ + Region: "ap-southeast-1", + }: endpoint{}, + endpointKey{ + Region: "ap-southeast-2", + }: endpoint{}, + endpointKey{ + Region: "ca-central-1", + }: endpoint{}, + endpointKey{ + Region: "eu-central-1", + }: endpoint{}, + endpointKey{ + Region: "eu-north-1", + }: endpoint{}, + endpointKey{ + Region: "eu-south-1", + }: endpoint{}, + endpointKey{ + Region: "eu-west-1", + }: endpoint{}, + endpointKey{ + Region: "eu-west-2", + }: endpoint{}, + endpointKey{ + Region: "eu-west-3", + }: endpoint{}, + endpointKey{ + Region: "me-south-1", + }: endpoint{}, + endpointKey{ + Region: "sa-east-1", + }: endpoint{}, + endpointKey{ + Region: "us-east-1", + }: endpoint{}, + endpointKey{ + Region: "us-east-2", + }: endpoint{}, + endpointKey{ + Region: "us-west-1", + }: endpoint{}, + endpointKey{ + Region: "us-west-2", + }: endpoint{}, + }, + }, "resource-groups": service{ Endpoints: serviceEndpoints{ endpointKey{ @@ -29236,6 +29311,13 @@ var awsisoPartition = partition{ }: endpoint{}, }, }, + "appconfigdata": service{ + Endpoints: serviceEndpoints{ + endpointKey{ + Region: "us-iso-west-1", + }: endpoint{}, + }, + }, "application-autoscaling": service{ Defaults: endpointDefaults{ defaultKey{}: endpoint{ diff --git a/vendor/github.com/aws/aws-sdk-go/aws/version.go b/vendor/github.com/aws/aws-sdk-go/aws/version.go index 0f5a41d58..d7f4047bb 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/version.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/version.go @@ -5,4 +5,4 @@ package aws const SDKName = "aws-sdk-go" // SDKVersion is the version of this SDK -const SDKVersion = "1.44.9" +const SDKVersion = "1.44.18" diff --git a/vendor/github.com/aws/aws-sdk-go/service/sts/api.go b/vendor/github.com/aws/aws-sdk-go/service/sts/api.go index 718409b54..f1a7bfdd4 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/sts/api.go +++ b/vendor/github.com/aws/aws-sdk-go/service/sts/api.go @@ -1279,6 +1279,12 @@ func (c *STS) GetSessionTokenRequest(input *GetSessionTokenInput) (req *request. // and Comparing the Amazon Web Services STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) // in the IAM User Guide. // +// No permissions are required for users to perform this operation. The purpose +// of the sts:GetSessionToken operation is to authenticate the user using MFA. +// You cannot use policies to control authentication operations. For more information, +// see Permissions for GetSessionToken (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_getsessiontoken.html) +// in the IAM User Guide. +// // Session Duration // // The GetSessionToken operation must be called by using the long-term Amazon diff --git a/vendor/github.com/go-kit/log/README.md b/vendor/github.com/go-kit/log/README.md index a0931951d..806779465 100644 --- a/vendor/github.com/go-kit/log/README.md +++ b/vendor/github.com/go-kit/log/README.md @@ -1,5 +1,10 @@ # package log +[![Go Reference](https://pkg.go.dev/badge/github.com/go-kit/log.svg)](https://pkg.go.dev/github.com/go-kit/log) +[![Go Report Card](https://goreportcard.com/badge/go-kit/log)](https://goreportcard.com/report/go-kit/log) +[![GitHub Actions](https://github.com/go-kit/log/actions/workflows/test.yml/badge.svg)](https://github.com/go-kit/log/actions/workflows/test.yml) +[![Coverage Status](https://coveralls.io/repos/github/go-kit/log/badge.svg?branch=main)](https://coveralls.io/github/go-kit/log?branch=main) + `package log` provides a minimal interface for structured logging in services. It may be wrapped to encode conventions, enforce type-safety, provide leveled logging, and so on. It can be used for both typical application log events, diff --git a/vendor/github.com/go-kit/log/json_logger.go b/vendor/github.com/go-kit/log/json_logger.go index 0cedbf824..d0faed4f0 100644 --- a/vendor/github.com/go-kit/log/json_logger.go +++ b/vendor/github.com/go-kit/log/json_logger.go @@ -68,7 +68,7 @@ func safeString(str fmt.Stringer) (s string) { if v := reflect.ValueOf(str); v.Kind() == reflect.Ptr && v.IsNil() { s = "NULL" } else { - panic(panicVal) + s = fmt.Sprintf("PANIC in String method: %v", panicVal) } } }() @@ -82,7 +82,7 @@ func safeError(err error) (s interface{}) { if v := reflect.ValueOf(err); v.Kind() == reflect.Ptr && v.IsNil() { s = nil } else { - panic(panicVal) + s = fmt.Sprintf("PANIC in Error method: %v", panicVal) } } }() diff --git a/vendor/github.com/go-kit/log/level/doc.go b/vendor/github.com/go-kit/log/level/doc.go index 505d307b1..fd681dcf9 100644 --- a/vendor/github.com/go-kit/log/level/doc.go +++ b/vendor/github.com/go-kit/log/level/doc.go @@ -7,6 +7,17 @@ // logger = level.NewFilter(logger, level.AllowInfo()) // <-- // logger = log.With(logger, "ts", log.DefaultTimestampUTC) // +// It's also possible to configure log level from a string. For instance from +// a flag, environment variable or configuration file. +// +// fs := flag.NewFlagSet("myprogram") +// lvl := fs.String("log", "info", "debug, info, warn, error") +// +// var logger log.Logger +// logger = log.NewLogfmtLogger(os.Stderr) +// logger = level.NewFilter(logger, level.Allow(level.ParseDefault(*lvl, level.InfoValue()))) // <-- +// logger = log.With(logger, "ts", log.DefaultTimestampUTC) +// // Then, at the callsites, use one of the level.Debug, Info, Warn, or Error // helper methods to emit leveled log events. // diff --git a/vendor/github.com/go-kit/log/level/level.go b/vendor/github.com/go-kit/log/level/level.go index c94756c6b..c641d9855 100644 --- a/vendor/github.com/go-kit/log/level/level.go +++ b/vendor/github.com/go-kit/log/level/level.go @@ -1,6 +1,14 @@ package level -import "github.com/go-kit/log" +import ( + "errors" + "strings" + + "github.com/go-kit/log" +) + +// ErrInvalidLevelString is returned whenever an invalid string is passed to Parse. +var ErrInvalidLevelString = errors.New("invalid level string") // Error returns a logger that includes a Key/ErrorValue pair. func Error(logger log.Logger) log.Logger { @@ -66,6 +74,22 @@ func (l *logger) Log(keyvals ...interface{}) error { // Option sets a parameter for the leveled logger. type Option func(*logger) +// Allow the provided log level to pass. +func Allow(v Value) Option { + switch v { + case debugValue: + return AllowDebug() + case infoValue: + return AllowInfo() + case warnValue: + return AllowWarn() + case errorValue: + return AllowError() + default: + return AllowNone() + } +} + // AllowAll is an alias for AllowDebug. func AllowAll() Option { return AllowDebug() @@ -100,6 +124,33 @@ func allowed(allowed level) Option { return func(l *logger) { l.allowed = allowed } } +// Parse a string to its corresponding level value. Valid strings are "debug", +// "info", "warn", and "error". Strings are normalized via strings.TrimSpace and +// strings.ToLower. +func Parse(level string) (Value, error) { + switch strings.TrimSpace(strings.ToLower(level)) { + case debugValue.name: + return debugValue, nil + case infoValue.name: + return infoValue, nil + case warnValue.name: + return warnValue, nil + case errorValue.name: + return errorValue, nil + default: + return nil, ErrInvalidLevelString + } +} + +// ParseDefault calls Parse and returns the default Value on error. +func ParseDefault(level string, def Value) Value { + v, err := Parse(level) + if err != nil { + return def + } + return v +} + // ErrNotAllowed sets the error to return from Log when it squelches a log // event disallowed by the configured Allow[Level] option. By default, // ErrNotAllowed is nil; in this case the log event is squelched with no diff --git a/vendor/github.com/go-kit/log/staticcheck.conf b/vendor/github.com/go-kit/log/staticcheck.conf new file mode 100644 index 000000000..528438b97 --- /dev/null +++ b/vendor/github.com/go-kit/log/staticcheck.conf @@ -0,0 +1 @@ +checks = ["all"] diff --git a/vendor/github.com/google/uuid/.travis.yml b/vendor/github.com/google/uuid/.travis.yml new file mode 100644 index 000000000..d8156a60b --- /dev/null +++ b/vendor/github.com/google/uuid/.travis.yml @@ -0,0 +1,9 @@ +language: go + +go: + - 1.4.3 + - 1.5.3 + - tip + +script: + - go test -v ./... diff --git a/vendor/github.com/google/uuid/CONTRIBUTING.md b/vendor/github.com/google/uuid/CONTRIBUTING.md new file mode 100644 index 000000000..04fdf09f1 --- /dev/null +++ b/vendor/github.com/google/uuid/CONTRIBUTING.md @@ -0,0 +1,10 @@ +# How to contribute + +We definitely welcome patches and contribution to this project! + +### Legal requirements + +In order to protect both you and ourselves, you will need to sign the +[Contributor License Agreement](https://cla.developers.google.com/clas). + +You may have already signed it for other Google projects. diff --git a/vendor/github.com/google/uuid/CONTRIBUTORS b/vendor/github.com/google/uuid/CONTRIBUTORS new file mode 100644 index 000000000..b4bb97f6b --- /dev/null +++ b/vendor/github.com/google/uuid/CONTRIBUTORS @@ -0,0 +1,9 @@ +Paul Borman +bmatsuo +shawnps +theory +jboverfelt +dsymonds +cd1 +wallclockbuilder +dansouza diff --git a/vendor/github.com/google/uuid/LICENSE b/vendor/github.com/google/uuid/LICENSE new file mode 100644 index 000000000..5dc68268d --- /dev/null +++ b/vendor/github.com/google/uuid/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009,2014 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/google/uuid/README.md b/vendor/github.com/google/uuid/README.md new file mode 100644 index 000000000..f765a46f9 --- /dev/null +++ b/vendor/github.com/google/uuid/README.md @@ -0,0 +1,19 @@ +# uuid ![build status](https://travis-ci.org/google/uuid.svg?branch=master) +The uuid package generates and inspects UUIDs based on +[RFC 4122](http://tools.ietf.org/html/rfc4122) +and DCE 1.1: Authentication and Security Services. + +This package is based on the github.com/pborman/uuid package (previously named +code.google.com/p/go-uuid). It differs from these earlier packages in that +a UUID is a 16 byte array rather than a byte slice. One loss due to this +change is the ability to represent an invalid UUID (vs a NIL UUID). + +###### Install +`go get github.com/google/uuid` + +###### Documentation +[![GoDoc](https://godoc.org/github.com/google/uuid?status.svg)](http://godoc.org/github.com/google/uuid) + +Full `go doc` style documentation for the package can be viewed online without +installing this package by using the GoDoc site here: +http://pkg.go.dev/github.com/google/uuid diff --git a/vendor/github.com/google/uuid/dce.go b/vendor/github.com/google/uuid/dce.go new file mode 100644 index 000000000..fa820b9d3 --- /dev/null +++ b/vendor/github.com/google/uuid/dce.go @@ -0,0 +1,80 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "encoding/binary" + "fmt" + "os" +) + +// A Domain represents a Version 2 domain +type Domain byte + +// Domain constants for DCE Security (Version 2) UUIDs. +const ( + Person = Domain(0) + Group = Domain(1) + Org = Domain(2) +) + +// NewDCESecurity returns a DCE Security (Version 2) UUID. +// +// The domain should be one of Person, Group or Org. +// On a POSIX system the id should be the users UID for the Person +// domain and the users GID for the Group. The meaning of id for +// the domain Org or on non-POSIX systems is site defined. +// +// For a given domain/id pair the same token may be returned for up to +// 7 minutes and 10 seconds. +func NewDCESecurity(domain Domain, id uint32) (UUID, error) { + uuid, err := NewUUID() + if err == nil { + uuid[6] = (uuid[6] & 0x0f) | 0x20 // Version 2 + uuid[9] = byte(domain) + binary.BigEndian.PutUint32(uuid[0:], id) + } + return uuid, err +} + +// NewDCEPerson returns a DCE Security (Version 2) UUID in the person +// domain with the id returned by os.Getuid. +// +// NewDCESecurity(Person, uint32(os.Getuid())) +func NewDCEPerson() (UUID, error) { + return NewDCESecurity(Person, uint32(os.Getuid())) +} + +// NewDCEGroup returns a DCE Security (Version 2) UUID in the group +// domain with the id returned by os.Getgid. +// +// NewDCESecurity(Group, uint32(os.Getgid())) +func NewDCEGroup() (UUID, error) { + return NewDCESecurity(Group, uint32(os.Getgid())) +} + +// Domain returns the domain for a Version 2 UUID. Domains are only defined +// for Version 2 UUIDs. +func (uuid UUID) Domain() Domain { + return Domain(uuid[9]) +} + +// ID returns the id for a Version 2 UUID. IDs are only defined for Version 2 +// UUIDs. +func (uuid UUID) ID() uint32 { + return binary.BigEndian.Uint32(uuid[0:4]) +} + +func (d Domain) String() string { + switch d { + case Person: + return "Person" + case Group: + return "Group" + case Org: + return "Org" + } + return fmt.Sprintf("Domain%d", int(d)) +} diff --git a/vendor/github.com/google/uuid/doc.go b/vendor/github.com/google/uuid/doc.go new file mode 100644 index 000000000..5b8a4b9af --- /dev/null +++ b/vendor/github.com/google/uuid/doc.go @@ -0,0 +1,12 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package uuid generates and inspects UUIDs. +// +// UUIDs are based on RFC 4122 and DCE 1.1: Authentication and Security +// Services. +// +// A UUID is a 16 byte (128 bit) array. UUIDs may be used as keys to +// maps or compared directly. +package uuid diff --git a/vendor/github.com/google/uuid/hash.go b/vendor/github.com/google/uuid/hash.go new file mode 100644 index 000000000..b404f4bec --- /dev/null +++ b/vendor/github.com/google/uuid/hash.go @@ -0,0 +1,53 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "crypto/md5" + "crypto/sha1" + "hash" +) + +// Well known namespace IDs and UUIDs +var ( + NameSpaceDNS = Must(Parse("6ba7b810-9dad-11d1-80b4-00c04fd430c8")) + NameSpaceURL = Must(Parse("6ba7b811-9dad-11d1-80b4-00c04fd430c8")) + NameSpaceOID = Must(Parse("6ba7b812-9dad-11d1-80b4-00c04fd430c8")) + NameSpaceX500 = Must(Parse("6ba7b814-9dad-11d1-80b4-00c04fd430c8")) + Nil UUID // empty UUID, all zeros +) + +// NewHash returns a new UUID derived from the hash of space concatenated with +// data generated by h. The hash should be at least 16 byte in length. The +// first 16 bytes of the hash are used to form the UUID. The version of the +// UUID will be the lower 4 bits of version. NewHash is used to implement +// NewMD5 and NewSHA1. +func NewHash(h hash.Hash, space UUID, data []byte, version int) UUID { + h.Reset() + h.Write(space[:]) //nolint:errcheck + h.Write(data) //nolint:errcheck + s := h.Sum(nil) + var uuid UUID + copy(uuid[:], s) + uuid[6] = (uuid[6] & 0x0f) | uint8((version&0xf)<<4) + uuid[8] = (uuid[8] & 0x3f) | 0x80 // RFC 4122 variant + return uuid +} + +// NewMD5 returns a new MD5 (Version 3) UUID based on the +// supplied name space and data. It is the same as calling: +// +// NewHash(md5.New(), space, data, 3) +func NewMD5(space UUID, data []byte) UUID { + return NewHash(md5.New(), space, data, 3) +} + +// NewSHA1 returns a new SHA1 (Version 5) UUID based on the +// supplied name space and data. It is the same as calling: +// +// NewHash(sha1.New(), space, data, 5) +func NewSHA1(space UUID, data []byte) UUID { + return NewHash(sha1.New(), space, data, 5) +} diff --git a/vendor/github.com/google/uuid/marshal.go b/vendor/github.com/google/uuid/marshal.go new file mode 100644 index 000000000..14bd34072 --- /dev/null +++ b/vendor/github.com/google/uuid/marshal.go @@ -0,0 +1,38 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import "fmt" + +// MarshalText implements encoding.TextMarshaler. +func (uuid UUID) MarshalText() ([]byte, error) { + var js [36]byte + encodeHex(js[:], uuid) + return js[:], nil +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (uuid *UUID) UnmarshalText(data []byte) error { + id, err := ParseBytes(data) + if err != nil { + return err + } + *uuid = id + return nil +} + +// MarshalBinary implements encoding.BinaryMarshaler. +func (uuid UUID) MarshalBinary() ([]byte, error) { + return uuid[:], nil +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler. +func (uuid *UUID) UnmarshalBinary(data []byte) error { + if len(data) != 16 { + return fmt.Errorf("invalid UUID (got %d bytes)", len(data)) + } + copy(uuid[:], data) + return nil +} diff --git a/vendor/github.com/google/uuid/node.go b/vendor/github.com/google/uuid/node.go new file mode 100644 index 000000000..d651a2b06 --- /dev/null +++ b/vendor/github.com/google/uuid/node.go @@ -0,0 +1,90 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "sync" +) + +var ( + nodeMu sync.Mutex + ifname string // name of interface being used + nodeID [6]byte // hardware for version 1 UUIDs + zeroID [6]byte // nodeID with only 0's +) + +// NodeInterface returns the name of the interface from which the NodeID was +// derived. The interface "user" is returned if the NodeID was set by +// SetNodeID. +func NodeInterface() string { + defer nodeMu.Unlock() + nodeMu.Lock() + return ifname +} + +// SetNodeInterface selects the hardware address to be used for Version 1 UUIDs. +// If name is "" then the first usable interface found will be used or a random +// Node ID will be generated. If a named interface cannot be found then false +// is returned. +// +// SetNodeInterface never fails when name is "". +func SetNodeInterface(name string) bool { + defer nodeMu.Unlock() + nodeMu.Lock() + return setNodeInterface(name) +} + +func setNodeInterface(name string) bool { + iname, addr := getHardwareInterface(name) // null implementation for js + if iname != "" && addr != nil { + ifname = iname + copy(nodeID[:], addr) + return true + } + + // We found no interfaces with a valid hardware address. If name + // does not specify a specific interface generate a random Node ID + // (section 4.1.6) + if name == "" { + ifname = "random" + randomBits(nodeID[:]) + return true + } + return false +} + +// NodeID returns a slice of a copy of the current Node ID, setting the Node ID +// if not already set. +func NodeID() []byte { + defer nodeMu.Unlock() + nodeMu.Lock() + if nodeID == zeroID { + setNodeInterface("") + } + nid := nodeID + return nid[:] +} + +// SetNodeID sets the Node ID to be used for Version 1 UUIDs. The first 6 bytes +// of id are used. If id is less than 6 bytes then false is returned and the +// Node ID is not set. +func SetNodeID(id []byte) bool { + if len(id) < 6 { + return false + } + defer nodeMu.Unlock() + nodeMu.Lock() + copy(nodeID[:], id) + ifname = "user" + return true +} + +// NodeID returns the 6 byte node id encoded in uuid. It returns nil if uuid is +// not valid. The NodeID is only well defined for version 1 and 2 UUIDs. +func (uuid UUID) NodeID() []byte { + var node [6]byte + copy(node[:], uuid[10:]) + return node[:] +} diff --git a/vendor/github.com/google/uuid/node_js.go b/vendor/github.com/google/uuid/node_js.go new file mode 100644 index 000000000..24b78edc9 --- /dev/null +++ b/vendor/github.com/google/uuid/node_js.go @@ -0,0 +1,12 @@ +// Copyright 2017 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build js + +package uuid + +// getHardwareInterface returns nil values for the JS version of the code. +// This remvoves the "net" dependency, because it is not used in the browser. +// Using the "net" library inflates the size of the transpiled JS code by 673k bytes. +func getHardwareInterface(name string) (string, []byte) { return "", nil } diff --git a/vendor/github.com/google/uuid/node_net.go b/vendor/github.com/google/uuid/node_net.go new file mode 100644 index 000000000..0cbbcddbd --- /dev/null +++ b/vendor/github.com/google/uuid/node_net.go @@ -0,0 +1,33 @@ +// Copyright 2017 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !js + +package uuid + +import "net" + +var interfaces []net.Interface // cached list of interfaces + +// getHardwareInterface returns the name and hardware address of interface name. +// If name is "" then the name and hardware address of one of the system's +// interfaces is returned. If no interfaces are found (name does not exist or +// there are no interfaces) then "", nil is returned. +// +// Only addresses of at least 6 bytes are returned. +func getHardwareInterface(name string) (string, []byte) { + if interfaces == nil { + var err error + interfaces, err = net.Interfaces() + if err != nil { + return "", nil + } + } + for _, ifs := range interfaces { + if len(ifs.HardwareAddr) >= 6 && (name == "" || name == ifs.Name) { + return ifs.Name, ifs.HardwareAddr + } + } + return "", nil +} diff --git a/vendor/github.com/google/uuid/null.go b/vendor/github.com/google/uuid/null.go new file mode 100644 index 000000000..d7fcbf286 --- /dev/null +++ b/vendor/github.com/google/uuid/null.go @@ -0,0 +1,118 @@ +// Copyright 2021 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "bytes" + "database/sql/driver" + "encoding/json" + "fmt" +) + +var jsonNull = []byte("null") + +// NullUUID represents a UUID that may be null. +// NullUUID implements the SQL driver.Scanner interface so +// it can be used as a scan destination: +// +// var u uuid.NullUUID +// err := db.QueryRow("SELECT name FROM foo WHERE id=?", id).Scan(&u) +// ... +// if u.Valid { +// // use u.UUID +// } else { +// // NULL value +// } +// +type NullUUID struct { + UUID UUID + Valid bool // Valid is true if UUID is not NULL +} + +// Scan implements the SQL driver.Scanner interface. +func (nu *NullUUID) Scan(value interface{}) error { + if value == nil { + nu.UUID, nu.Valid = Nil, false + return nil + } + + err := nu.UUID.Scan(value) + if err != nil { + nu.Valid = false + return err + } + + nu.Valid = true + return nil +} + +// Value implements the driver Valuer interface. +func (nu NullUUID) Value() (driver.Value, error) { + if !nu.Valid { + return nil, nil + } + // Delegate to UUID Value function + return nu.UUID.Value() +} + +// MarshalBinary implements encoding.BinaryMarshaler. +func (nu NullUUID) MarshalBinary() ([]byte, error) { + if nu.Valid { + return nu.UUID[:], nil + } + + return []byte(nil), nil +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler. +func (nu *NullUUID) UnmarshalBinary(data []byte) error { + if len(data) != 16 { + return fmt.Errorf("invalid UUID (got %d bytes)", len(data)) + } + copy(nu.UUID[:], data) + nu.Valid = true + return nil +} + +// MarshalText implements encoding.TextMarshaler. +func (nu NullUUID) MarshalText() ([]byte, error) { + if nu.Valid { + return nu.UUID.MarshalText() + } + + return jsonNull, nil +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (nu *NullUUID) UnmarshalText(data []byte) error { + id, err := ParseBytes(data) + if err != nil { + nu.Valid = false + return err + } + nu.UUID = id + nu.Valid = true + return nil +} + +// MarshalJSON implements json.Marshaler. +func (nu NullUUID) MarshalJSON() ([]byte, error) { + if nu.Valid { + return json.Marshal(nu.UUID) + } + + return jsonNull, nil +} + +// UnmarshalJSON implements json.Unmarshaler. +func (nu *NullUUID) UnmarshalJSON(data []byte) error { + if bytes.Equal(data, jsonNull) { + *nu = NullUUID{} + return nil // valid null UUID + } + err := json.Unmarshal(data, &nu.UUID) + nu.Valid = err == nil + return err +} diff --git a/vendor/github.com/google/uuid/sql.go b/vendor/github.com/google/uuid/sql.go new file mode 100644 index 000000000..2e02ec06c --- /dev/null +++ b/vendor/github.com/google/uuid/sql.go @@ -0,0 +1,59 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "database/sql/driver" + "fmt" +) + +// Scan implements sql.Scanner so UUIDs can be read from databases transparently. +// Currently, database types that map to string and []byte are supported. Please +// consult database-specific driver documentation for matching types. +func (uuid *UUID) Scan(src interface{}) error { + switch src := src.(type) { + case nil: + return nil + + case string: + // if an empty UUID comes from a table, we return a null UUID + if src == "" { + return nil + } + + // see Parse for required string format + u, err := Parse(src) + if err != nil { + return fmt.Errorf("Scan: %v", err) + } + + *uuid = u + + case []byte: + // if an empty UUID comes from a table, we return a null UUID + if len(src) == 0 { + return nil + } + + // assumes a simple slice of bytes if 16 bytes + // otherwise attempts to parse + if len(src) != 16 { + return uuid.Scan(string(src)) + } + copy((*uuid)[:], src) + + default: + return fmt.Errorf("Scan: unable to scan type %T into UUID", src) + } + + return nil +} + +// Value implements sql.Valuer so that UUIDs can be written to databases +// transparently. Currently, UUIDs map to strings. Please consult +// database-specific driver documentation for matching types. +func (uuid UUID) Value() (driver.Value, error) { + return uuid.String(), nil +} diff --git a/vendor/github.com/google/uuid/time.go b/vendor/github.com/google/uuid/time.go new file mode 100644 index 000000000..e6ef06cdc --- /dev/null +++ b/vendor/github.com/google/uuid/time.go @@ -0,0 +1,123 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "encoding/binary" + "sync" + "time" +) + +// A Time represents a time as the number of 100's of nanoseconds since 15 Oct +// 1582. +type Time int64 + +const ( + lillian = 2299160 // Julian day of 15 Oct 1582 + unix = 2440587 // Julian day of 1 Jan 1970 + epoch = unix - lillian // Days between epochs + g1582 = epoch * 86400 // seconds between epochs + g1582ns100 = g1582 * 10000000 // 100s of a nanoseconds between epochs +) + +var ( + timeMu sync.Mutex + lasttime uint64 // last time we returned + clockSeq uint16 // clock sequence for this run + + timeNow = time.Now // for testing +) + +// UnixTime converts t the number of seconds and nanoseconds using the Unix +// epoch of 1 Jan 1970. +func (t Time) UnixTime() (sec, nsec int64) { + sec = int64(t - g1582ns100) + nsec = (sec % 10000000) * 100 + sec /= 10000000 + return sec, nsec +} + +// GetTime returns the current Time (100s of nanoseconds since 15 Oct 1582) and +// clock sequence as well as adjusting the clock sequence as needed. An error +// is returned if the current time cannot be determined. +func GetTime() (Time, uint16, error) { + defer timeMu.Unlock() + timeMu.Lock() + return getTime() +} + +func getTime() (Time, uint16, error) { + t := timeNow() + + // If we don't have a clock sequence already, set one. + if clockSeq == 0 { + setClockSequence(-1) + } + now := uint64(t.UnixNano()/100) + g1582ns100 + + // If time has gone backwards with this clock sequence then we + // increment the clock sequence + if now <= lasttime { + clockSeq = ((clockSeq + 1) & 0x3fff) | 0x8000 + } + lasttime = now + return Time(now), clockSeq, nil +} + +// ClockSequence returns the current clock sequence, generating one if not +// already set. The clock sequence is only used for Version 1 UUIDs. +// +// The uuid package does not use global static storage for the clock sequence or +// the last time a UUID was generated. Unless SetClockSequence is used, a new +// random clock sequence is generated the first time a clock sequence is +// requested by ClockSequence, GetTime, or NewUUID. (section 4.2.1.1) +func ClockSequence() int { + defer timeMu.Unlock() + timeMu.Lock() + return clockSequence() +} + +func clockSequence() int { + if clockSeq == 0 { + setClockSequence(-1) + } + return int(clockSeq & 0x3fff) +} + +// SetClockSequence sets the clock sequence to the lower 14 bits of seq. Setting to +// -1 causes a new sequence to be generated. +func SetClockSequence(seq int) { + defer timeMu.Unlock() + timeMu.Lock() + setClockSequence(seq) +} + +func setClockSequence(seq int) { + if seq == -1 { + var b [2]byte + randomBits(b[:]) // clock sequence + seq = int(b[0])<<8 | int(b[1]) + } + oldSeq := clockSeq + clockSeq = uint16(seq&0x3fff) | 0x8000 // Set our variant + if oldSeq != clockSeq { + lasttime = 0 + } +} + +// Time returns the time in 100s of nanoseconds since 15 Oct 1582 encoded in +// uuid. The time is only defined for version 1 and 2 UUIDs. +func (uuid UUID) Time() Time { + time := int64(binary.BigEndian.Uint32(uuid[0:4])) + time |= int64(binary.BigEndian.Uint16(uuid[4:6])) << 32 + time |= int64(binary.BigEndian.Uint16(uuid[6:8])&0xfff) << 48 + return Time(time) +} + +// ClockSequence returns the clock sequence encoded in uuid. +// The clock sequence is only well defined for version 1 and 2 UUIDs. +func (uuid UUID) ClockSequence() int { + return int(binary.BigEndian.Uint16(uuid[8:10])) & 0x3fff +} diff --git a/vendor/github.com/google/uuid/util.go b/vendor/github.com/google/uuid/util.go new file mode 100644 index 000000000..5ea6c7378 --- /dev/null +++ b/vendor/github.com/google/uuid/util.go @@ -0,0 +1,43 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "io" +) + +// randomBits completely fills slice b with random data. +func randomBits(b []byte) { + if _, err := io.ReadFull(rander, b); err != nil { + panic(err.Error()) // rand should never fail + } +} + +// xvalues returns the value of a byte as a hexadecimal digit or 255. +var xvalues = [256]byte{ + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 255, 255, 255, 255, 255, 255, + 255, 10, 11, 12, 13, 14, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 10, 11, 12, 13, 14, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +} + +// xtob converts hex characters x1 and x2 into a byte. +func xtob(x1, x2 byte) (byte, bool) { + b1 := xvalues[x1] + b2 := xvalues[x2] + return (b1 << 4) | b2, b1 != 255 && b2 != 255 +} diff --git a/vendor/github.com/google/uuid/uuid.go b/vendor/github.com/google/uuid/uuid.go new file mode 100644 index 000000000..a57207aeb --- /dev/null +++ b/vendor/github.com/google/uuid/uuid.go @@ -0,0 +1,294 @@ +// Copyright 2018 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "bytes" + "crypto/rand" + "encoding/hex" + "errors" + "fmt" + "io" + "strings" + "sync" +) + +// A UUID is a 128 bit (16 byte) Universal Unique IDentifier as defined in RFC +// 4122. +type UUID [16]byte + +// A Version represents a UUID's version. +type Version byte + +// A Variant represents a UUID's variant. +type Variant byte + +// Constants returned by Variant. +const ( + Invalid = Variant(iota) // Invalid UUID + RFC4122 // The variant specified in RFC4122 + Reserved // Reserved, NCS backward compatibility. + Microsoft // Reserved, Microsoft Corporation backward compatibility. + Future // Reserved for future definition. +) + +const randPoolSize = 16 * 16 + +var ( + rander = rand.Reader // random function + poolEnabled = false + poolMu sync.Mutex + poolPos = randPoolSize // protected with poolMu + pool [randPoolSize]byte // protected with poolMu +) + +type invalidLengthError struct{ len int } + +func (err invalidLengthError) Error() string { + return fmt.Sprintf("invalid UUID length: %d", err.len) +} + +// IsInvalidLengthError is matcher function for custom error invalidLengthError +func IsInvalidLengthError(err error) bool { + _, ok := err.(invalidLengthError) + return ok +} + +// Parse decodes s into a UUID or returns an error. Both the standard UUID +// forms of xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx and +// urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx are decoded as well as the +// Microsoft encoding {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} and the raw hex +// encoding: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. +func Parse(s string) (UUID, error) { + var uuid UUID + switch len(s) { + // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + case 36: + + // urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + case 36 + 9: + if strings.ToLower(s[:9]) != "urn:uuid:" { + return uuid, fmt.Errorf("invalid urn prefix: %q", s[:9]) + } + s = s[9:] + + // {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} + case 36 + 2: + s = s[1:] + + // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + case 32: + var ok bool + for i := range uuid { + uuid[i], ok = xtob(s[i*2], s[i*2+1]) + if !ok { + return uuid, errors.New("invalid UUID format") + } + } + return uuid, nil + default: + return uuid, invalidLengthError{len(s)} + } + // s is now at least 36 bytes long + // it must be of the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + if s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-' { + return uuid, errors.New("invalid UUID format") + } + for i, x := range [16]int{ + 0, 2, 4, 6, + 9, 11, + 14, 16, + 19, 21, + 24, 26, 28, 30, 32, 34} { + v, ok := xtob(s[x], s[x+1]) + if !ok { + return uuid, errors.New("invalid UUID format") + } + uuid[i] = v + } + return uuid, nil +} + +// ParseBytes is like Parse, except it parses a byte slice instead of a string. +func ParseBytes(b []byte) (UUID, error) { + var uuid UUID + switch len(b) { + case 36: // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + case 36 + 9: // urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + if !bytes.Equal(bytes.ToLower(b[:9]), []byte("urn:uuid:")) { + return uuid, fmt.Errorf("invalid urn prefix: %q", b[:9]) + } + b = b[9:] + case 36 + 2: // {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} + b = b[1:] + case 32: // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + var ok bool + for i := 0; i < 32; i += 2 { + uuid[i/2], ok = xtob(b[i], b[i+1]) + if !ok { + return uuid, errors.New("invalid UUID format") + } + } + return uuid, nil + default: + return uuid, invalidLengthError{len(b)} + } + // s is now at least 36 bytes long + // it must be of the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + if b[8] != '-' || b[13] != '-' || b[18] != '-' || b[23] != '-' { + return uuid, errors.New("invalid UUID format") + } + for i, x := range [16]int{ + 0, 2, 4, 6, + 9, 11, + 14, 16, + 19, 21, + 24, 26, 28, 30, 32, 34} { + v, ok := xtob(b[x], b[x+1]) + if !ok { + return uuid, errors.New("invalid UUID format") + } + uuid[i] = v + } + return uuid, nil +} + +// MustParse is like Parse but panics if the string cannot be parsed. +// It simplifies safe initialization of global variables holding compiled UUIDs. +func MustParse(s string) UUID { + uuid, err := Parse(s) + if err != nil { + panic(`uuid: Parse(` + s + `): ` + err.Error()) + } + return uuid +} + +// FromBytes creates a new UUID from a byte slice. Returns an error if the slice +// does not have a length of 16. The bytes are copied from the slice. +func FromBytes(b []byte) (uuid UUID, err error) { + err = uuid.UnmarshalBinary(b) + return uuid, err +} + +// Must returns uuid if err is nil and panics otherwise. +func Must(uuid UUID, err error) UUID { + if err != nil { + panic(err) + } + return uuid +} + +// String returns the string form of uuid, xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx +// , or "" if uuid is invalid. +func (uuid UUID) String() string { + var buf [36]byte + encodeHex(buf[:], uuid) + return string(buf[:]) +} + +// URN returns the RFC 2141 URN form of uuid, +// urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, or "" if uuid is invalid. +func (uuid UUID) URN() string { + var buf [36 + 9]byte + copy(buf[:], "urn:uuid:") + encodeHex(buf[9:], uuid) + return string(buf[:]) +} + +func encodeHex(dst []byte, uuid UUID) { + hex.Encode(dst, uuid[:4]) + dst[8] = '-' + hex.Encode(dst[9:13], uuid[4:6]) + dst[13] = '-' + hex.Encode(dst[14:18], uuid[6:8]) + dst[18] = '-' + hex.Encode(dst[19:23], uuid[8:10]) + dst[23] = '-' + hex.Encode(dst[24:], uuid[10:]) +} + +// Variant returns the variant encoded in uuid. +func (uuid UUID) Variant() Variant { + switch { + case (uuid[8] & 0xc0) == 0x80: + return RFC4122 + case (uuid[8] & 0xe0) == 0xc0: + return Microsoft + case (uuid[8] & 0xe0) == 0xe0: + return Future + default: + return Reserved + } +} + +// Version returns the version of uuid. +func (uuid UUID) Version() Version { + return Version(uuid[6] >> 4) +} + +func (v Version) String() string { + if v > 15 { + return fmt.Sprintf("BAD_VERSION_%d", v) + } + return fmt.Sprintf("VERSION_%d", v) +} + +func (v Variant) String() string { + switch v { + case RFC4122: + return "RFC4122" + case Reserved: + return "Reserved" + case Microsoft: + return "Microsoft" + case Future: + return "Future" + case Invalid: + return "Invalid" + } + return fmt.Sprintf("BadVariant%d", int(v)) +} + +// SetRand sets the random number generator to r, which implements io.Reader. +// If r.Read returns an error when the package requests random data then +// a panic will be issued. +// +// Calling SetRand with nil sets the random number generator to the default +// generator. +func SetRand(r io.Reader) { + if r == nil { + rander = rand.Reader + return + } + rander = r +} + +// EnableRandPool enables internal randomness pool used for Random +// (Version 4) UUID generation. The pool contains random bytes read from +// the random number generator on demand in batches. Enabling the pool +// may improve the UUID generation throughput significantly. +// +// Since the pool is stored on the Go heap, this feature may be a bad fit +// for security sensitive applications. +// +// Both EnableRandPool and DisableRandPool are not thread-safe and should +// only be called when there is no possibility that New or any other +// UUID Version 4 generation function will be called concurrently. +func EnableRandPool() { + poolEnabled = true +} + +// DisableRandPool disables the randomness pool if it was previously +// enabled with EnableRandPool. +// +// Both EnableRandPool and DisableRandPool are not thread-safe and should +// only be called when there is no possibility that New or any other +// UUID Version 4 generation function will be called concurrently. +func DisableRandPool() { + poolEnabled = false + defer poolMu.Unlock() + poolMu.Lock() + poolPos = randPoolSize +} diff --git a/vendor/github.com/google/uuid/version1.go b/vendor/github.com/google/uuid/version1.go new file mode 100644 index 000000000..463109629 --- /dev/null +++ b/vendor/github.com/google/uuid/version1.go @@ -0,0 +1,44 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "encoding/binary" +) + +// NewUUID returns a Version 1 UUID based on the current NodeID and clock +// sequence, and the current time. If the NodeID has not been set by SetNodeID +// or SetNodeInterface then it will be set automatically. If the NodeID cannot +// be set NewUUID returns nil. If clock sequence has not been set by +// SetClockSequence then it will be set automatically. If GetTime fails to +// return the current NewUUID returns nil and an error. +// +// In most cases, New should be used. +func NewUUID() (UUID, error) { + var uuid UUID + now, seq, err := GetTime() + if err != nil { + return uuid, err + } + + timeLow := uint32(now & 0xffffffff) + timeMid := uint16((now >> 32) & 0xffff) + timeHi := uint16((now >> 48) & 0x0fff) + timeHi |= 0x1000 // Version 1 + + binary.BigEndian.PutUint32(uuid[0:], timeLow) + binary.BigEndian.PutUint16(uuid[4:], timeMid) + binary.BigEndian.PutUint16(uuid[6:], timeHi) + binary.BigEndian.PutUint16(uuid[8:], seq) + + nodeMu.Lock() + if nodeID == zeroID { + setNodeInterface("") + } + copy(uuid[10:], nodeID[:]) + nodeMu.Unlock() + + return uuid, nil +} diff --git a/vendor/github.com/google/uuid/version4.go b/vendor/github.com/google/uuid/version4.go new file mode 100644 index 000000000..7697802e4 --- /dev/null +++ b/vendor/github.com/google/uuid/version4.go @@ -0,0 +1,76 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import "io" + +// New creates a new random UUID or panics. New is equivalent to +// the expression +// +// uuid.Must(uuid.NewRandom()) +func New() UUID { + return Must(NewRandom()) +} + +// NewString creates a new random UUID and returns it as a string or panics. +// NewString is equivalent to the expression +// +// uuid.New().String() +func NewString() string { + return Must(NewRandom()).String() +} + +// NewRandom returns a Random (Version 4) UUID. +// +// The strength of the UUIDs is based on the strength of the crypto/rand +// package. +// +// Uses the randomness pool if it was enabled with EnableRandPool. +// +// A note about uniqueness derived from the UUID Wikipedia entry: +// +// Randomly generated UUIDs have 122 random bits. One's annual risk of being +// hit by a meteorite is estimated to be one chance in 17 billion, that +// means the probability is about 0.00000000006 (6 × 10−11), +// equivalent to the odds of creating a few tens of trillions of UUIDs in a +// year and having one duplicate. +func NewRandom() (UUID, error) { + if !poolEnabled { + return NewRandomFromReader(rander) + } + return newRandomFromPool() +} + +// NewRandomFromReader returns a UUID based on bytes read from a given io.Reader. +func NewRandomFromReader(r io.Reader) (UUID, error) { + var uuid UUID + _, err := io.ReadFull(r, uuid[:]) + if err != nil { + return Nil, err + } + uuid[6] = (uuid[6] & 0x0f) | 0x40 // Version 4 + uuid[8] = (uuid[8] & 0x3f) | 0x80 // Variant is 10 + return uuid, nil +} + +func newRandomFromPool() (UUID, error) { + var uuid UUID + poolMu.Lock() + if poolPos == randPoolSize { + _, err := io.ReadFull(rander, pool[:]) + if err != nil { + poolMu.Unlock() + return Nil, err + } + poolPos = 0 + } + copy(uuid[:], pool[poolPos:(poolPos+16)]) + poolPos += 16 + poolMu.Unlock() + + uuid[6] = (uuid[6] & 0x0f) | 0x40 // Version 4 + uuid[8] = (uuid[8] & 0x3f) | 0x80 // Variant is 10 + return uuid, nil +} diff --git a/vendor/github.com/googleapis/gax-go/v2/.release-please-manifest.json b/vendor/github.com/googleapis/gax-go/v2/.release-please-manifest.json new file mode 100644 index 000000000..0e643a05b --- /dev/null +++ b/vendor/github.com/googleapis/gax-go/v2/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + "v2": "2.4.0" +} diff --git a/vendor/github.com/googleapis/gax-go/v2/CHANGES.md b/vendor/github.com/googleapis/gax-go/v2/CHANGES.md new file mode 100644 index 000000000..b42ace44c --- /dev/null +++ b/vendor/github.com/googleapis/gax-go/v2/CHANGES.md @@ -0,0 +1,18 @@ +# Changelog + +## [2.4.0](https://github.com/googleapis/gax-go/compare/v2.3.0...v2.4.0) (2022-05-09) + + +### Features + +* **v2:** add OnHTTPCodes CallOption ([#188](https://github.com/googleapis/gax-go/issues/188)) ([ba7c534](https://github.com/googleapis/gax-go/commit/ba7c5348363ab6c33e1cee3c03c0be68a46ca07c)) + + +### Bug Fixes + +* **v2/apierror:** use errors.As in FromError ([#189](https://github.com/googleapis/gax-go/issues/189)) ([f30f05b](https://github.com/googleapis/gax-go/commit/f30f05be583828f4c09cca4091333ea88ff8d79e)) + + +### Miscellaneous Chores + +* **v2:** bump release-please processing ([#192](https://github.com/googleapis/gax-go/issues/192)) ([56172f9](https://github.com/googleapis/gax-go/commit/56172f971d1141d7687edaac053ad3470af76719)) diff --git a/vendor/github.com/googleapis/gax-go/v2/apierror/apierror.go b/vendor/github.com/googleapis/gax-go/v2/apierror/apierror.go index e33316d88..7d0128a0c 100644 --- a/vendor/github.com/googleapis/gax-go/v2/apierror/apierror.go +++ b/vendor/github.com/googleapis/gax-go/v2/apierror/apierror.go @@ -32,6 +32,7 @@ package apierror import ( + "errors" "fmt" "strings" @@ -215,7 +216,8 @@ func FromError(err error) (*APIError, bool) { ae := APIError{err: err} st, isStatus := status.FromError(err) - herr, isHTTPErr := err.(*googleapi.Error) + var herr *googleapi.Error + isHTTPErr := errors.As(err, &herr) switch { case isStatus: diff --git a/vendor/github.com/googleapis/gax-go/v2/call_option.go b/vendor/github.com/googleapis/gax-go/v2/call_option.go index 3011ba442..e09200556 100644 --- a/vendor/github.com/googleapis/gax-go/v2/call_option.go +++ b/vendor/github.com/googleapis/gax-go/v2/call_option.go @@ -30,9 +30,11 @@ package gax import ( + "errors" "math/rand" "time" + "google.golang.org/api/googleapi" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -119,6 +121,41 @@ func (r *boRetryer) Retry(err error) (time.Duration, bool) { return 0, false } +// OnHTTPCodes returns a Retryer that retries if and only if +// the previous attempt returns a googleapi.Error whose status code is stored in +// cc. Pause times between retries are specified by bo. +// +// bo is only used for its parameters; each Retryer has its own copy. +func OnHTTPCodes(bo Backoff, cc ...int) Retryer { + codes := make(map[int]bool, len(cc)) + for _, c := range cc { + codes[c] = true + } + + return &httpRetryer{ + backoff: bo, + codes: codes, + } +} + +type httpRetryer struct { + backoff Backoff + codes map[int]bool +} + +func (r *httpRetryer) Retry(err error) (time.Duration, bool) { + var gerr *googleapi.Error + if !errors.As(err, &gerr) { + return 0, false + } + + if r.codes[gerr.Code] { + return r.backoff.Pause(), true + } + + return 0, false +} + // Backoff implements exponential backoff. The wait time between retries is a // random value between 0 and the "retry period" - the time between retries. The // retry period starts at Initial and increases by the factor of Multiplier diff --git a/vendor/github.com/googleapis/gax-go/v2/gax.go b/vendor/github.com/googleapis/gax-go/v2/gax.go index 9272b3e40..36cdfa33e 100644 --- a/vendor/github.com/googleapis/gax-go/v2/gax.go +++ b/vendor/github.com/googleapis/gax-go/v2/gax.go @@ -35,5 +35,7 @@ // to simplify code generation and to provide more convenient and idiomatic API surfaces. package gax +import "github.com/googleapis/gax-go/v2/internal" + // Version specifies the gax-go version being used. -const Version = "2.3.0" +const Version = internal.Version diff --git a/vendor/github.com/googleapis/gax-go/v2/internal/version.go b/vendor/github.com/googleapis/gax-go/v2/internal/version.go new file mode 100644 index 000000000..bf272a504 --- /dev/null +++ b/vendor/github.com/googleapis/gax-go/v2/internal/version.go @@ -0,0 +1,33 @@ +// Copyright 2022, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package internal + +// Version is the current tagged release of the library. +const Version = "2.4.0" diff --git a/vendor/github.com/googleapis/gax-go/v2/release-please-config.json b/vendor/github.com/googleapis/gax-go/v2/release-please-config.json new file mode 100644 index 000000000..61ee266a1 --- /dev/null +++ b/vendor/github.com/googleapis/gax-go/v2/release-please-config.json @@ -0,0 +1,10 @@ +{ + "release-type": "go-yoshi", + "separate-pull-requests": true, + "include-component-in-tag": false, + "packages": { + "v2": { + "component": "v2" + } + } +} diff --git a/vendor/github.com/klauspost/compress/README.md b/vendor/github.com/klauspost/compress/README.md index 0734862b8..c3ec9d8a7 100644 --- a/vendor/github.com/klauspost/compress/README.md +++ b/vendor/github.com/klauspost/compress/README.md @@ -17,6 +17,10 @@ This package provides various compression algorithms. # changelog +* May 5, 2022 (v1.15.3) + * zstd: Allow to ignore checksum checking by @WojciechMula [#572](https://github.com/klauspost/compress/pull/572) + * s2: Fix incorrect seek for io.SeekEnd in [#575](https://github.com/klauspost/compress/pull/575) + * Apr 26, 2022 (v1.15.2) * zstd: Add x86-64 assembly for decompression on streams and blocks. Contributed by [@WojciechMula](https://github.com/WojciechMula). Typically 2x faster. [#528](https://github.com/klauspost/compress/pull/528) [#531](https://github.com/klauspost/compress/pull/531) [#545](https://github.com/klauspost/compress/pull/545) [#537](https://github.com/klauspost/compress/pull/537) * zstd: Add options to ZipDecompressor and fixes [#539](https://github.com/klauspost/compress/pull/539) diff --git a/vendor/github.com/klauspost/compress/flate/inflate_gen.go b/vendor/github.com/klauspost/compress/flate/inflate_gen.go index 8d632cea0..61342b6b8 100644 --- a/vendor/github.com/klauspost/compress/flate/inflate_gen.go +++ b/vendor/github.com/klauspost/compress/flate/inflate_gen.go @@ -24,7 +24,7 @@ func (f *decompressor) huffmanBytesBuffer() { // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, // but is smart enough to keep local variables in registers, so use nb and b, // inline call to moreBits and reassign b,nb back to f on return. - fnb, fb := f.nb, f.b + fnb, fb, dict := f.nb, f.b, &f.dict switch f.stepState { case stateInit: @@ -82,9 +82,9 @@ readLiteral: var length int switch { case v < 256: - f.dict.writeByte(byte(v)) - if f.dict.availWrite() == 0 { - f.toRead = f.dict.readFlush() + dict.writeByte(byte(v)) + if dict.availWrite() == 0 { + f.toRead = dict.readFlush() f.step = (*decompressor).huffmanBytesBuffer f.stepState = stateInit f.b, f.nb = fb, fnb @@ -227,10 +227,10 @@ readLiteral: } // No check on length; encoding can be prescient. - if dist > uint32(f.dict.histSize()) { + if dist > uint32(dict.histSize()) { f.b, f.nb = fb, fnb if debugDecode { - fmt.Println("dist > f.dict.histSize():", dist, f.dict.histSize()) + fmt.Println("dist > dict.histSize():", dist, dict.histSize()) } f.err = CorruptInputError(f.roffset) return @@ -243,14 +243,14 @@ readLiteral: copyHistory: // Perform a backwards copy according to RFC section 3.2.3. { - cnt := f.dict.tryWriteCopy(f.copyDist, f.copyLen) + cnt := dict.tryWriteCopy(f.copyDist, f.copyLen) if cnt == 0 { - cnt = f.dict.writeCopy(f.copyDist, f.copyLen) + cnt = dict.writeCopy(f.copyDist, f.copyLen) } f.copyLen -= cnt - if f.dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = f.dict.readFlush() + if dict.availWrite() == 0 || f.copyLen > 0 { + f.toRead = dict.readFlush() f.step = (*decompressor).huffmanBytesBuffer // We need to continue this work f.stepState = stateDict f.b, f.nb = fb, fnb @@ -275,7 +275,7 @@ func (f *decompressor) huffmanBytesReader() { // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, // but is smart enough to keep local variables in registers, so use nb and b, // inline call to moreBits and reassign b,nb back to f on return. - fnb, fb := f.nb, f.b + fnb, fb, dict := f.nb, f.b, &f.dict switch f.stepState { case stateInit: @@ -333,9 +333,9 @@ readLiteral: var length int switch { case v < 256: - f.dict.writeByte(byte(v)) - if f.dict.availWrite() == 0 { - f.toRead = f.dict.readFlush() + dict.writeByte(byte(v)) + if dict.availWrite() == 0 { + f.toRead = dict.readFlush() f.step = (*decompressor).huffmanBytesReader f.stepState = stateInit f.b, f.nb = fb, fnb @@ -478,10 +478,10 @@ readLiteral: } // No check on length; encoding can be prescient. - if dist > uint32(f.dict.histSize()) { + if dist > uint32(dict.histSize()) { f.b, f.nb = fb, fnb if debugDecode { - fmt.Println("dist > f.dict.histSize():", dist, f.dict.histSize()) + fmt.Println("dist > dict.histSize():", dist, dict.histSize()) } f.err = CorruptInputError(f.roffset) return @@ -494,14 +494,14 @@ readLiteral: copyHistory: // Perform a backwards copy according to RFC section 3.2.3. { - cnt := f.dict.tryWriteCopy(f.copyDist, f.copyLen) + cnt := dict.tryWriteCopy(f.copyDist, f.copyLen) if cnt == 0 { - cnt = f.dict.writeCopy(f.copyDist, f.copyLen) + cnt = dict.writeCopy(f.copyDist, f.copyLen) } f.copyLen -= cnt - if f.dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = f.dict.readFlush() + if dict.availWrite() == 0 || f.copyLen > 0 { + f.toRead = dict.readFlush() f.step = (*decompressor).huffmanBytesReader // We need to continue this work f.stepState = stateDict f.b, f.nb = fb, fnb @@ -526,7 +526,7 @@ func (f *decompressor) huffmanBufioReader() { // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, // but is smart enough to keep local variables in registers, so use nb and b, // inline call to moreBits and reassign b,nb back to f on return. - fnb, fb := f.nb, f.b + fnb, fb, dict := f.nb, f.b, &f.dict switch f.stepState { case stateInit: @@ -584,9 +584,9 @@ readLiteral: var length int switch { case v < 256: - f.dict.writeByte(byte(v)) - if f.dict.availWrite() == 0 { - f.toRead = f.dict.readFlush() + dict.writeByte(byte(v)) + if dict.availWrite() == 0 { + f.toRead = dict.readFlush() f.step = (*decompressor).huffmanBufioReader f.stepState = stateInit f.b, f.nb = fb, fnb @@ -729,10 +729,10 @@ readLiteral: } // No check on length; encoding can be prescient. - if dist > uint32(f.dict.histSize()) { + if dist > uint32(dict.histSize()) { f.b, f.nb = fb, fnb if debugDecode { - fmt.Println("dist > f.dict.histSize():", dist, f.dict.histSize()) + fmt.Println("dist > dict.histSize():", dist, dict.histSize()) } f.err = CorruptInputError(f.roffset) return @@ -745,14 +745,14 @@ readLiteral: copyHistory: // Perform a backwards copy according to RFC section 3.2.3. { - cnt := f.dict.tryWriteCopy(f.copyDist, f.copyLen) + cnt := dict.tryWriteCopy(f.copyDist, f.copyLen) if cnt == 0 { - cnt = f.dict.writeCopy(f.copyDist, f.copyLen) + cnt = dict.writeCopy(f.copyDist, f.copyLen) } f.copyLen -= cnt - if f.dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = f.dict.readFlush() + if dict.availWrite() == 0 || f.copyLen > 0 { + f.toRead = dict.readFlush() f.step = (*decompressor).huffmanBufioReader // We need to continue this work f.stepState = stateDict f.b, f.nb = fb, fnb @@ -777,7 +777,7 @@ func (f *decompressor) huffmanStringsReader() { // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, // but is smart enough to keep local variables in registers, so use nb and b, // inline call to moreBits and reassign b,nb back to f on return. - fnb, fb := f.nb, f.b + fnb, fb, dict := f.nb, f.b, &f.dict switch f.stepState { case stateInit: @@ -835,9 +835,9 @@ readLiteral: var length int switch { case v < 256: - f.dict.writeByte(byte(v)) - if f.dict.availWrite() == 0 { - f.toRead = f.dict.readFlush() + dict.writeByte(byte(v)) + if dict.availWrite() == 0 { + f.toRead = dict.readFlush() f.step = (*decompressor).huffmanStringsReader f.stepState = stateInit f.b, f.nb = fb, fnb @@ -980,10 +980,10 @@ readLiteral: } // No check on length; encoding can be prescient. - if dist > uint32(f.dict.histSize()) { + if dist > uint32(dict.histSize()) { f.b, f.nb = fb, fnb if debugDecode { - fmt.Println("dist > f.dict.histSize():", dist, f.dict.histSize()) + fmt.Println("dist > dict.histSize():", dist, dict.histSize()) } f.err = CorruptInputError(f.roffset) return @@ -996,14 +996,14 @@ readLiteral: copyHistory: // Perform a backwards copy according to RFC section 3.2.3. { - cnt := f.dict.tryWriteCopy(f.copyDist, f.copyLen) + cnt := dict.tryWriteCopy(f.copyDist, f.copyLen) if cnt == 0 { - cnt = f.dict.writeCopy(f.copyDist, f.copyLen) + cnt = dict.writeCopy(f.copyDist, f.copyLen) } f.copyLen -= cnt - if f.dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = f.dict.readFlush() + if dict.availWrite() == 0 || f.copyLen > 0 { + f.toRead = dict.readFlush() f.step = (*decompressor).huffmanStringsReader // We need to continue this work f.stepState = stateDict f.b, f.nb = fb, fnb @@ -1028,7 +1028,7 @@ func (f *decompressor) huffmanGenericReader() { // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, // but is smart enough to keep local variables in registers, so use nb and b, // inline call to moreBits and reassign b,nb back to f on return. - fnb, fb := f.nb, f.b + fnb, fb, dict := f.nb, f.b, &f.dict switch f.stepState { case stateInit: @@ -1086,9 +1086,9 @@ readLiteral: var length int switch { case v < 256: - f.dict.writeByte(byte(v)) - if f.dict.availWrite() == 0 { - f.toRead = f.dict.readFlush() + dict.writeByte(byte(v)) + if dict.availWrite() == 0 { + f.toRead = dict.readFlush() f.step = (*decompressor).huffmanGenericReader f.stepState = stateInit f.b, f.nb = fb, fnb @@ -1231,10 +1231,10 @@ readLiteral: } // No check on length; encoding can be prescient. - if dist > uint32(f.dict.histSize()) { + if dist > uint32(dict.histSize()) { f.b, f.nb = fb, fnb if debugDecode { - fmt.Println("dist > f.dict.histSize():", dist, f.dict.histSize()) + fmt.Println("dist > dict.histSize():", dist, dict.histSize()) } f.err = CorruptInputError(f.roffset) return @@ -1247,14 +1247,14 @@ readLiteral: copyHistory: // Perform a backwards copy according to RFC section 3.2.3. { - cnt := f.dict.tryWriteCopy(f.copyDist, f.copyLen) + cnt := dict.tryWriteCopy(f.copyDist, f.copyLen) if cnt == 0 { - cnt = f.dict.writeCopy(f.copyDist, f.copyLen) + cnt = dict.writeCopy(f.copyDist, f.copyLen) } f.copyLen -= cnt - if f.dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = f.dict.readFlush() + if dict.availWrite() == 0 || f.copyLen > 0 { + f.toRead = dict.readFlush() f.step = (*decompressor).huffmanGenericReader // We need to continue this work f.stepState = stateDict f.b, f.nb = fb, fnb diff --git a/vendor/github.com/klauspost/compress/huff0/autogen.go b/vendor/github.com/klauspost/compress/huff0/autogen.go deleted file mode 100644 index ff2c69d60..000000000 --- a/vendor/github.com/klauspost/compress/huff0/autogen.go +++ /dev/null @@ -1,5 +0,0 @@ -package huff0 - -//go:generate go run generate.go -//go:generate asmfmt -w decompress_amd64.s -//go:generate asmfmt -w decompress_8b_amd64.s diff --git a/vendor/github.com/klauspost/compress/huff0/decompress_8b_amd64.s b/vendor/github.com/klauspost/compress/huff0/decompress_8b_amd64.s deleted file mode 100644 index 0d6cb1a96..000000000 --- a/vendor/github.com/klauspost/compress/huff0/decompress_8b_amd64.s +++ /dev/null @@ -1,488 +0,0 @@ -// +build !appengine -// +build gc -// +build !noasm - -#include "textflag.h" -#include "funcdata.h" -#include "go_asm.h" - -#define bufoff 256 // see decompress.go, we're using [4][256]byte table - -// func decompress4x_main_loop_x86(pbr0, pbr1, pbr2, pbr3 *bitReaderShifted, -// peekBits uint8, buf *byte, tbl *dEntrySingle) (int, bool) -TEXT ·decompress4x_8b_loop_x86(SB), NOSPLIT, $8 -#define off R8 -#define buffer DI -#define table SI - -#define br_bits_read R9 -#define br_value R10 -#define br_offset R11 -#define peek_bits R12 -#define exhausted DX - -#define br0 R13 -#define br1 R14 -#define br2 R15 -#define br3 BP - - MOVQ BP, 0(SP) - - XORQ exhausted, exhausted // exhausted = false - XORQ off, off // off = 0 - - MOVBQZX peekBits+32(FP), peek_bits - MOVQ buf+40(FP), buffer - MOVQ tbl+48(FP), table - - MOVQ pbr0+0(FP), br0 - MOVQ pbr1+8(FP), br1 - MOVQ pbr2+16(FP), br2 - MOVQ pbr3+24(FP), br3 - -main_loop: - - // const stream = 0 - // br0.fillFast() - MOVBQZX bitReaderShifted_bitsRead(br0), br_bits_read - MOVQ bitReaderShifted_value(br0), br_value - MOVQ bitReaderShifted_off(br0), br_offset - - // if b.bitsRead >= 32 { - CMPQ br_bits_read, $32 - JB skip_fill0 - - SUBQ $32, br_bits_read // b.bitsRead -= 32 - SUBQ $4, br_offset // b.off -= 4 - - // v := b.in[b.off-4 : b.off] - // v = v[:4] - // low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24) - MOVQ bitReaderShifted_in(br0), AX - MOVL 0(br_offset)(AX*1), AX // AX = uint32(b.in[b.off:b.off+4]) - - // b.value |= uint64(low) << (b.bitsRead & 63) - MOVQ br_bits_read, CX - SHLQ CL, AX - ORQ AX, br_value - - // exhausted = exhausted || (br0.off < 4) - CMPQ br_offset, $4 - SETLT DL - ORB DL, DH - - // } -skip_fill0: - - // val0 := br0.peekTopBits(peekBits) - MOVQ br_value, AX - MOVQ peek_bits, CX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - - // v0 := table[val0&mask] - MOVW 0(table)(AX*2), AX // AX - v0 - - // br0.advance(uint8(v0.entry)) - MOVB AH, BL // BL = uint8(v0.entry >> 8) - MOVBQZX AL, CX - SHLQ CL, br_value // value <<= n - ADDQ CX, br_bits_read // bits_read += n - - // val1 := br0.peekTopBits(peekBits) - MOVQ peek_bits, CX - MOVQ br_value, AX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - - // v1 := table[val1&mask] - MOVW 0(table)(AX*2), AX // AX - v1 - - // br0.advance(uint8(v1.entry)) - MOVB AH, BH // BH = uint8(v1.entry >> 8) - MOVBQZX AL, CX - SHLQ CX, br_value // value <<= n - ADDQ CX, br_bits_read // bits_read += n - - // these two writes get coalesced - // buf[stream][off] = uint8(v0.entry >> 8) - // buf[stream][off+1] = uint8(v1.entry >> 8) - MOVW BX, 0(buffer)(off*1) - - // SECOND PART: - // val2 := br0.peekTopBits(peekBits) - MOVQ br_value, AX - MOVQ peek_bits, CX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - - // v2 := table[val0&mask] - MOVW 0(table)(AX*2), AX // AX - v0 - - // br0.advance(uint8(v0.entry)) - MOVB AH, BL // BL = uint8(v0.entry >> 8) - MOVBQZX AL, CX - SHLQ CL, br_value // value <<= n - ADDQ CX, br_bits_read // bits_read += n - - // val3 := br0.peekTopBits(peekBits) - MOVQ peek_bits, CX - MOVQ br_value, AX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - - // v3 := table[val1&mask] - MOVW 0(table)(AX*2), AX // AX - v1 - - // br0.advance(uint8(v1.entry)) - MOVB AH, BH // BH = uint8(v1.entry >> 8) - MOVBQZX AL, CX - SHLQ CX, br_value // value <<= n - ADDQ CX, br_bits_read // bits_read += n - - // these two writes get coalesced - // buf[stream][off+2] = uint8(v2.entry >> 8) - // buf[stream][off+3] = uint8(v3.entry >> 8) - MOVW BX, 0+2(buffer)(off*1) - - // update the bitrader reader structure - MOVB br_bits_read, bitReaderShifted_bitsRead(br0) - MOVQ br_value, bitReaderShifted_value(br0) - MOVQ br_offset, bitReaderShifted_off(br0) - - // const stream = 1 - // br1.fillFast() - MOVBQZX bitReaderShifted_bitsRead(br1), br_bits_read - MOVQ bitReaderShifted_value(br1), br_value - MOVQ bitReaderShifted_off(br1), br_offset - - // if b.bitsRead >= 32 { - CMPQ br_bits_read, $32 - JB skip_fill1 - - SUBQ $32, br_bits_read // b.bitsRead -= 32 - SUBQ $4, br_offset // b.off -= 4 - - // v := b.in[b.off-4 : b.off] - // v = v[:4] - // low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24) - MOVQ bitReaderShifted_in(br1), AX - MOVL 0(br_offset)(AX*1), AX // AX = uint32(b.in[b.off:b.off+4]) - - // b.value |= uint64(low) << (b.bitsRead & 63) - MOVQ br_bits_read, CX - SHLQ CL, AX - ORQ AX, br_value - - // exhausted = exhausted || (br1.off < 4) - CMPQ br_offset, $4 - SETLT DL - ORB DL, DH - - // } -skip_fill1: - - // val0 := br1.peekTopBits(peekBits) - MOVQ br_value, AX - MOVQ peek_bits, CX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - - // v0 := table[val0&mask] - MOVW 0(table)(AX*2), AX // AX - v0 - - // br1.advance(uint8(v0.entry)) - MOVB AH, BL // BL = uint8(v0.entry >> 8) - MOVBQZX AL, CX - SHLQ CL, br_value // value <<= n - ADDQ CX, br_bits_read // bits_read += n - - // val1 := br1.peekTopBits(peekBits) - MOVQ peek_bits, CX - MOVQ br_value, AX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - - // v1 := table[val1&mask] - MOVW 0(table)(AX*2), AX // AX - v1 - - // br1.advance(uint8(v1.entry)) - MOVB AH, BH // BH = uint8(v1.entry >> 8) - MOVBQZX AL, CX - SHLQ CX, br_value // value <<= n - ADDQ CX, br_bits_read // bits_read += n - - // these two writes get coalesced - // buf[stream][off] = uint8(v0.entry >> 8) - // buf[stream][off+1] = uint8(v1.entry >> 8) - MOVW BX, 256(buffer)(off*1) - - // SECOND PART: - // val2 := br1.peekTopBits(peekBits) - MOVQ br_value, AX - MOVQ peek_bits, CX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - - // v2 := table[val0&mask] - MOVW 0(table)(AX*2), AX // AX - v0 - - // br1.advance(uint8(v0.entry)) - MOVB AH, BL // BL = uint8(v0.entry >> 8) - MOVBQZX AL, CX - SHLQ CL, br_value // value <<= n - ADDQ CX, br_bits_read // bits_read += n - - // val3 := br1.peekTopBits(peekBits) - MOVQ peek_bits, CX - MOVQ br_value, AX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - - // v3 := table[val1&mask] - MOVW 0(table)(AX*2), AX // AX - v1 - - // br1.advance(uint8(v1.entry)) - MOVB AH, BH // BH = uint8(v1.entry >> 8) - MOVBQZX AL, CX - SHLQ CX, br_value // value <<= n - ADDQ CX, br_bits_read // bits_read += n - - // these two writes get coalesced - // buf[stream][off+2] = uint8(v2.entry >> 8) - // buf[stream][off+3] = uint8(v3.entry >> 8) - MOVW BX, 256+2(buffer)(off*1) - - // update the bitrader reader structure - MOVB br_bits_read, bitReaderShifted_bitsRead(br1) - MOVQ br_value, bitReaderShifted_value(br1) - MOVQ br_offset, bitReaderShifted_off(br1) - - // const stream = 2 - // br2.fillFast() - MOVBQZX bitReaderShifted_bitsRead(br2), br_bits_read - MOVQ bitReaderShifted_value(br2), br_value - MOVQ bitReaderShifted_off(br2), br_offset - - // if b.bitsRead >= 32 { - CMPQ br_bits_read, $32 - JB skip_fill2 - - SUBQ $32, br_bits_read // b.bitsRead -= 32 - SUBQ $4, br_offset // b.off -= 4 - - // v := b.in[b.off-4 : b.off] - // v = v[:4] - // low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24) - MOVQ bitReaderShifted_in(br2), AX - MOVL 0(br_offset)(AX*1), AX // AX = uint32(b.in[b.off:b.off+4]) - - // b.value |= uint64(low) << (b.bitsRead & 63) - MOVQ br_bits_read, CX - SHLQ CL, AX - ORQ AX, br_value - - // exhausted = exhausted || (br2.off < 4) - CMPQ br_offset, $4 - SETLT DL - ORB DL, DH - - // } -skip_fill2: - - // val0 := br2.peekTopBits(peekBits) - MOVQ br_value, AX - MOVQ peek_bits, CX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - - // v0 := table[val0&mask] - MOVW 0(table)(AX*2), AX // AX - v0 - - // br2.advance(uint8(v0.entry)) - MOVB AH, BL // BL = uint8(v0.entry >> 8) - MOVBQZX AL, CX - SHLQ CL, br_value // value <<= n - ADDQ CX, br_bits_read // bits_read += n - - // val1 := br2.peekTopBits(peekBits) - MOVQ peek_bits, CX - MOVQ br_value, AX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - - // v1 := table[val1&mask] - MOVW 0(table)(AX*2), AX // AX - v1 - - // br2.advance(uint8(v1.entry)) - MOVB AH, BH // BH = uint8(v1.entry >> 8) - MOVBQZX AL, CX - SHLQ CX, br_value // value <<= n - ADDQ CX, br_bits_read // bits_read += n - - // these two writes get coalesced - // buf[stream][off] = uint8(v0.entry >> 8) - // buf[stream][off+1] = uint8(v1.entry >> 8) - MOVW BX, 512(buffer)(off*1) - - // SECOND PART: - // val2 := br2.peekTopBits(peekBits) - MOVQ br_value, AX - MOVQ peek_bits, CX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - - // v2 := table[val0&mask] - MOVW 0(table)(AX*2), AX // AX - v0 - - // br2.advance(uint8(v0.entry)) - MOVB AH, BL // BL = uint8(v0.entry >> 8) - MOVBQZX AL, CX - SHLQ CL, br_value // value <<= n - ADDQ CX, br_bits_read // bits_read += n - - // val3 := br2.peekTopBits(peekBits) - MOVQ peek_bits, CX - MOVQ br_value, AX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - - // v3 := table[val1&mask] - MOVW 0(table)(AX*2), AX // AX - v1 - - // br2.advance(uint8(v1.entry)) - MOVB AH, BH // BH = uint8(v1.entry >> 8) - MOVBQZX AL, CX - SHLQ CX, br_value // value <<= n - ADDQ CX, br_bits_read // bits_read += n - - // these two writes get coalesced - // buf[stream][off+2] = uint8(v2.entry >> 8) - // buf[stream][off+3] = uint8(v3.entry >> 8) - MOVW BX, 512+2(buffer)(off*1) - - // update the bitrader reader structure - MOVB br_bits_read, bitReaderShifted_bitsRead(br2) - MOVQ br_value, bitReaderShifted_value(br2) - MOVQ br_offset, bitReaderShifted_off(br2) - - // const stream = 3 - // br3.fillFast() - MOVBQZX bitReaderShifted_bitsRead(br3), br_bits_read - MOVQ bitReaderShifted_value(br3), br_value - MOVQ bitReaderShifted_off(br3), br_offset - - // if b.bitsRead >= 32 { - CMPQ br_bits_read, $32 - JB skip_fill3 - - SUBQ $32, br_bits_read // b.bitsRead -= 32 - SUBQ $4, br_offset // b.off -= 4 - - // v := b.in[b.off-4 : b.off] - // v = v[:4] - // low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24) - MOVQ bitReaderShifted_in(br3), AX - MOVL 0(br_offset)(AX*1), AX // AX = uint32(b.in[b.off:b.off+4]) - - // b.value |= uint64(low) << (b.bitsRead & 63) - MOVQ br_bits_read, CX - SHLQ CL, AX - ORQ AX, br_value - - // exhausted = exhausted || (br3.off < 4) - CMPQ br_offset, $4 - SETLT DL - ORB DL, DH - - // } -skip_fill3: - - // val0 := br3.peekTopBits(peekBits) - MOVQ br_value, AX - MOVQ peek_bits, CX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - - // v0 := table[val0&mask] - MOVW 0(table)(AX*2), AX // AX - v0 - - // br3.advance(uint8(v0.entry)) - MOVB AH, BL // BL = uint8(v0.entry >> 8) - MOVBQZX AL, CX - SHLQ CL, br_value // value <<= n - ADDQ CX, br_bits_read // bits_read += n - - // val1 := br3.peekTopBits(peekBits) - MOVQ peek_bits, CX - MOVQ br_value, AX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - - // v1 := table[val1&mask] - MOVW 0(table)(AX*2), AX // AX - v1 - - // br3.advance(uint8(v1.entry)) - MOVB AH, BH // BH = uint8(v1.entry >> 8) - MOVBQZX AL, CX - SHLQ CX, br_value // value <<= n - ADDQ CX, br_bits_read // bits_read += n - - // these two writes get coalesced - // buf[stream][off] = uint8(v0.entry >> 8) - // buf[stream][off+1] = uint8(v1.entry >> 8) - MOVW BX, 768(buffer)(off*1) - - // SECOND PART: - // val2 := br3.peekTopBits(peekBits) - MOVQ br_value, AX - MOVQ peek_bits, CX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - - // v2 := table[val0&mask] - MOVW 0(table)(AX*2), AX // AX - v0 - - // br3.advance(uint8(v0.entry)) - MOVB AH, BL // BL = uint8(v0.entry >> 8) - MOVBQZX AL, CX - SHLQ CL, br_value // value <<= n - ADDQ CX, br_bits_read // bits_read += n - - // val3 := br3.peekTopBits(peekBits) - MOVQ peek_bits, CX - MOVQ br_value, AX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - - // v3 := table[val1&mask] - MOVW 0(table)(AX*2), AX // AX - v1 - - // br3.advance(uint8(v1.entry)) - MOVB AH, BH // BH = uint8(v1.entry >> 8) - MOVBQZX AL, CX - SHLQ CX, br_value // value <<= n - ADDQ CX, br_bits_read // bits_read += n - - // these two writes get coalesced - // buf[stream][off+2] = uint8(v2.entry >> 8) - // buf[stream][off+3] = uint8(v3.entry >> 8) - MOVW BX, 768+2(buffer)(off*1) - - // update the bitrader reader structure - MOVB br_bits_read, bitReaderShifted_bitsRead(br3) - MOVQ br_value, bitReaderShifted_value(br3) - MOVQ br_offset, bitReaderShifted_off(br3) - - ADDQ $4, off // off += 2 - - TESTB DH, DH // any br[i].ofs < 4? - JNZ end - - CMPQ off, $bufoff - JL main_loop - -end: - MOVQ 0(SP), BP - - MOVB off, ret+56(FP) - RET - -#undef off -#undef buffer -#undef table - -#undef br_bits_read -#undef br_value -#undef br_offset -#undef peek_bits -#undef exhausted - -#undef br0 -#undef br1 -#undef br2 -#undef br3 diff --git a/vendor/github.com/klauspost/compress/huff0/decompress_8b_amd64.s.in b/vendor/github.com/klauspost/compress/huff0/decompress_8b_amd64.s.in deleted file mode 100644 index 6d477a2c1..000000000 --- a/vendor/github.com/klauspost/compress/huff0/decompress_8b_amd64.s.in +++ /dev/null @@ -1,197 +0,0 @@ -// +build !appengine -// +build gc -// +build !noasm - -#include "textflag.h" -#include "funcdata.h" -#include "go_asm.h" - - -#define bufoff 256 // see decompress.go, we're using [4][256]byte table - -//func decompress4x_main_loop_x86(pbr0, pbr1, pbr2, pbr3 *bitReaderShifted, -// peekBits uint8, buf *byte, tbl *dEntrySingle) (int, bool) -TEXT ·decompress4x_8b_loop_x86(SB), NOSPLIT, $8 -#define off R8 -#define buffer DI -#define table SI - -#define br_bits_read R9 -#define br_value R10 -#define br_offset R11 -#define peek_bits R12 -#define exhausted DX - -#define br0 R13 -#define br1 R14 -#define br2 R15 -#define br3 BP - - MOVQ BP, 0(SP) - - XORQ exhausted, exhausted // exhausted = false - XORQ off, off // off = 0 - - MOVBQZX peekBits+32(FP), peek_bits - MOVQ buf+40(FP), buffer - MOVQ tbl+48(FP), table - - MOVQ pbr0+0(FP), br0 - MOVQ pbr1+8(FP), br1 - MOVQ pbr2+16(FP), br2 - MOVQ pbr3+24(FP), br3 - -main_loop: -{{ define "decode_2_values_x86" }} - // const stream = {{ var "id" }} - // br{{ var "id"}}.fillFast() - MOVBQZX bitReaderShifted_bitsRead(br{{ var "id" }}), br_bits_read - MOVQ bitReaderShifted_value(br{{ var "id" }}), br_value - MOVQ bitReaderShifted_off(br{{ var "id" }}), br_offset - - // if b.bitsRead >= 32 { - CMPQ br_bits_read, $32 - JB skip_fill{{ var "id" }} - - SUBQ $32, br_bits_read // b.bitsRead -= 32 - SUBQ $4, br_offset // b.off -= 4 - - // v := b.in[b.off-4 : b.off] - // v = v[:4] - // low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24) - MOVQ bitReaderShifted_in(br{{ var "id" }}), AX - MOVL 0(br_offset)(AX*1), AX // AX = uint32(b.in[b.off:b.off+4]) - - // b.value |= uint64(low) << (b.bitsRead & 63) - MOVQ br_bits_read, CX - SHLQ CL, AX - ORQ AX, br_value - - // exhausted = exhausted || (br{{ var "id"}}.off < 4) - CMPQ br_offset, $4 - SETLT DL - ORB DL, DH - // } -skip_fill{{ var "id" }}: - - // val0 := br{{ var "id"}}.peekTopBits(peekBits) - MOVQ br_value, AX - MOVQ peek_bits, CX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - - // v0 := table[val0&mask] - MOVW 0(table)(AX*2), AX // AX - v0 - - // br{{ var "id"}}.advance(uint8(v0.entry)) - MOVB AH, BL // BL = uint8(v0.entry >> 8) - MOVBQZX AL, CX - SHLQ CL, br_value // value <<= n - ADDQ CX, br_bits_read // bits_read += n - - // val1 := br{{ var "id"}}.peekTopBits(peekBits) - MOVQ peek_bits, CX - MOVQ br_value, AX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - - // v1 := table[val1&mask] - MOVW 0(table)(AX*2), AX // AX - v1 - - // br{{ var "id"}}.advance(uint8(v1.entry)) - MOVB AH, BH // BH = uint8(v1.entry >> 8) - MOVBQZX AL, CX - SHLQ CX, br_value // value <<= n - ADDQ CX, br_bits_read // bits_read += n - - - // these two writes get coalesced - // buf[stream][off] = uint8(v0.entry >> 8) - // buf[stream][off+1] = uint8(v1.entry >> 8) - MOVW BX, {{ var "bufofs" }}(buffer)(off*1) - - // SECOND PART: - // val2 := br{{ var "id"}}.peekTopBits(peekBits) - MOVQ br_value, AX - MOVQ peek_bits, CX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - - // v2 := table[val0&mask] - MOVW 0(table)(AX*2), AX // AX - v0 - - // br{{ var "id"}}.advance(uint8(v0.entry)) - MOVB AH, BL // BL = uint8(v0.entry >> 8) - MOVBQZX AL, CX - SHLQ CL, br_value // value <<= n - ADDQ CX, br_bits_read // bits_read += n - - // val3 := br{{ var "id"}}.peekTopBits(peekBits) - MOVQ peek_bits, CX - MOVQ br_value, AX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - - // v3 := table[val1&mask] - MOVW 0(table)(AX*2), AX // AX - v1 - - // br{{ var "id"}}.advance(uint8(v1.entry)) - MOVB AH, BH // BH = uint8(v1.entry >> 8) - MOVBQZX AL, CX - SHLQ CX, br_value // value <<= n - ADDQ CX, br_bits_read // bits_read += n - - - // these two writes get coalesced - // buf[stream][off+2] = uint8(v2.entry >> 8) - // buf[stream][off+3] = uint8(v3.entry >> 8) - MOVW BX, {{ var "bufofs" }}+2(buffer)(off*1) - - // update the bitrader reader structure - MOVB br_bits_read, bitReaderShifted_bitsRead(br{{ var "id" }}) - MOVQ br_value, bitReaderShifted_value(br{{ var "id" }}) - MOVQ br_offset, bitReaderShifted_off(br{{ var "id" }}) -{{ end }} - - {{ set "id" "0" }} - {{ set "ofs" "0" }} - {{ set "bufofs" "0" }} {{/* id * bufoff */}} - {{ template "decode_2_values_x86" . }} - - {{ set "id" "1" }} - {{ set "ofs" "8" }} - {{ set "bufofs" "256" }} - {{ template "decode_2_values_x86" . }} - - {{ set "id" "2" }} - {{ set "ofs" "16" }} - {{ set "bufofs" "512" }} - {{ template "decode_2_values_x86" . }} - - {{ set "id" "3" }} - {{ set "ofs" "24" }} - {{ set "bufofs" "768" }} - {{ template "decode_2_values_x86" . }} - - ADDQ $4, off // off += 2 - - TESTB DH, DH // any br[i].ofs < 4? - JNZ end - - CMPQ off, $bufoff - JL main_loop -end: - MOVQ 0(SP), BP - - MOVB off, ret+56(FP) - RET -#undef off -#undef buffer -#undef table - -#undef br_bits_read -#undef br_value -#undef br_offset -#undef peek_bits -#undef exhausted - -#undef br0 -#undef br1 -#undef br2 -#undef br3 diff --git a/vendor/github.com/klauspost/compress/huff0/decompress_amd64.go b/vendor/github.com/klauspost/compress/huff0/decompress_amd64.go index ce8e93bcd..3415e5da2 100644 --- a/vendor/github.com/klauspost/compress/huff0/decompress_amd64.go +++ b/vendor/github.com/klauspost/compress/huff0/decompress_amd64.go @@ -13,19 +13,30 @@ import ( // decompress4x_main_loop_x86 is an x86 assembler implementation // of Decompress4X when tablelog > 8. //go:noescape -func decompress4x_main_loop_x86(pbr0, pbr1, pbr2, pbr3 *bitReaderShifted, - peekBits uint8, buf *byte, tbl *dEntrySingle) uint8 +func decompress4x_main_loop_amd64(ctx *decompress4xContext) // decompress4x_8b_loop_x86 is an x86 assembler implementation // of Decompress4X when tablelog <= 8 which decodes 4 entries // per loop. //go:noescape -func decompress4x_8b_loop_x86(pbr0, pbr1, pbr2, pbr3 *bitReaderShifted, - peekBits uint8, buf *byte, tbl *dEntrySingle) uint8 +func decompress4x_8b_main_loop_amd64(ctx *decompress4xContext) // fallback8BitSize is the size where using Go version is faster. const fallback8BitSize = 800 +type decompress4xContext struct { + pbr0 *bitReaderShifted + pbr1 *bitReaderShifted + pbr2 *bitReaderShifted + pbr3 *bitReaderShifted + peekBits uint8 + out *byte + dstEvery int + tbl *dEntrySingle + decoded int + limit *byte +} + // Decompress4X will decompress a 4X encoded stream. // The length of the supplied input must match the end of a block exactly. // The *capacity* of the dst slice must match the destination size of @@ -42,6 +53,7 @@ func (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) { if cap(dst) < fallback8BitSize && use8BitTables { return d.decompress4X8bit(dst, src) } + var br [4]bitReaderShifted // Decode "jump table" start := 6 @@ -71,70 +83,28 @@ func (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) { const tlMask = tlSize - 1 single := d.dt.single[:tlSize] - // Use temp table to avoid bound checks/append penalty. - buf := d.buffer() - var off uint8 var decoded int - const debug = false - - // see: bitReaderShifted.peekBitsFast() - peekBits := uint8((64 - d.actualTableLog) & 63) - - // Decode 2 values from each decoder/loop. - const bufoff = 256 - for { - if br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4 { - break + if len(out) > 4*4 && !(br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4) { + ctx := decompress4xContext{ + pbr0: &br[0], + pbr1: &br[1], + pbr2: &br[2], + pbr3: &br[3], + peekBits: uint8((64 - d.actualTableLog) & 63), // see: bitReaderShifted.peekBitsFast() + out: &out[0], + dstEvery: dstEvery, + tbl: &single[0], + limit: &out[dstEvery-4], // Always stop decoding when first buffer gets here to avoid writing OOB on last. } - if use8BitTables { - off = decompress4x_8b_loop_x86(&br[0], &br[1], &br[2], &br[3], peekBits, &buf[0][0], &single[0]) + decompress4x_8b_main_loop_amd64(&ctx) } else { - off = decompress4x_main_loop_x86(&br[0], &br[1], &br[2], &br[3], peekBits, &buf[0][0], &single[0]) - } - if debug { - fmt.Print("DEBUG: ") - fmt.Printf("off=%d,", off) - for i := 0; i < 4; i++ { - fmt.Printf(" br[%d]={bitsRead=%d, value=%x, off=%d}", - i, br[i].bitsRead, br[i].value, br[i].off) - } - fmt.Println("") + decompress4x_main_loop_amd64(&ctx) } - if off != 0 { - break - } - - if bufoff > dstEvery { - d.bufs.Put(buf) - return nil, errors.New("corruption detected: stream overrun 1") - } - copy(out, buf[0][:]) - copy(out[dstEvery:], buf[1][:]) - copy(out[dstEvery*2:], buf[2][:]) - copy(out[dstEvery*3:], buf[3][:]) - out = out[bufoff:] - decoded += bufoff * 4 - // There must at least be 3 buffers left. - if len(out) < dstEvery*3 { - d.bufs.Put(buf) - return nil, errors.New("corruption detected: stream overrun 2") - } - } - if off > 0 { - ioff := int(off) - if len(out) < dstEvery*3+ioff { - d.bufs.Put(buf) - return nil, errors.New("corruption detected: stream overrun 3") - } - copy(out, buf[0][:off]) - copy(out[dstEvery:], buf[1][:off]) - copy(out[dstEvery*2:], buf[2][:off]) - copy(out[dstEvery*3:], buf[3][:off]) - decoded += int(off) * 4 - out = out[off:] + decoded = ctx.decoded + out = out[decoded/4:] } // Decode remaining. @@ -150,7 +120,6 @@ func (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) { for bitsLeft > 0 { br.fill() if offset >= endsAt { - d.bufs.Put(buf) return nil, errors.New("corruption detected: stream overrun 4") } @@ -164,7 +133,6 @@ func (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) { offset++ } if offset != endsAt { - d.bufs.Put(buf) return nil, fmt.Errorf("corruption detected: short output block %d, end %d != %d", i, offset, endsAt) } decoded += offset - dstEvery*i @@ -173,7 +141,6 @@ func (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) { return nil, err } } - d.bufs.Put(buf) if dstSize != decoded { return nil, errors.New("corruption detected: short output block") } diff --git a/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s b/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s index 2edad3ea5..06287f568 100644 --- a/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s +++ b/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s @@ -1,506 +1,662 @@ -// +build !appengine -// +build gc -// +build !noasm +// Code generated by command: go run gen.go -out ../decompress_amd64.s -pkg=huff0. DO NOT EDIT. -#include "textflag.h" -#include "funcdata.h" -#include "go_asm.h" +//go:build amd64 && !appengine && !noasm && gc +// +build amd64,!appengine,!noasm,gc -#ifdef GOAMD64_v4 -#ifndef GOAMD64_v3 -#define GOAMD64_v3 -#endif -#endif +// func decompress4x_main_loop_amd64(ctx *decompress4xContext) +TEXT ·decompress4x_main_loop_amd64(SB), $8-8 + XORQ DX, DX -#define bufoff 256 // see decompress.go, we're using [4][256]byte table - -// func decompress4x_main_loop_x86(pbr0, pbr1, pbr2, pbr3 *bitReaderShifted, -// peekBits uint8, buf *byte, tbl *dEntrySingle) (int, bool) -TEXT ·decompress4x_main_loop_x86(SB), NOSPLIT, $8 -#define off R8 -#define buffer DI -#define table SI - -#define br_bits_read R9 -#define br_value R10 -#define br_offset R11 -#define peek_bits R12 -#define exhausted DX - -#define br0 R13 -#define br1 R14 -#define br2 R15 -#define br3 BP - - MOVQ BP, 0(SP) - - XORQ exhausted, exhausted // exhausted = false - XORQ off, off // off = 0 - - MOVBQZX peekBits+32(FP), peek_bits - MOVQ buf+40(FP), buffer - MOVQ tbl+48(FP), table - - MOVQ pbr0+0(FP), br0 - MOVQ pbr1+8(FP), br1 - MOVQ pbr2+16(FP), br2 - MOVQ pbr3+24(FP), br3 + // Preload values + MOVQ ctx+0(FP), AX + MOVBQZX 32(AX), SI + MOVQ 40(AX), DI + MOVQ DI, BX + MOVQ 72(AX), CX + MOVQ CX, (SP) + MOVQ 48(AX), R8 + MOVQ 56(AX), R9 + MOVQ (AX), R10 + MOVQ 8(AX), R11 + MOVQ 16(AX), R12 + MOVQ 24(AX), R13 + // Main loop main_loop: + MOVQ BX, DI + CMPQ DI, (SP) + SETGE DL - // const stream = 0 - // br0.fillFast() - MOVBQZX bitReaderShifted_bitsRead(br0), br_bits_read - MOVQ bitReaderShifted_value(br0), br_value - MOVQ bitReaderShifted_off(br0), br_offset - - // We must have at least 2 * max tablelog left - CMPQ br_bits_read, $64-22 - JBE skip_fill0 - - SUBQ $32, br_bits_read // b.bitsRead -= 32 - SUBQ $4, br_offset // b.off -= 4 - - // v := b.in[b.off-4 : b.off] - // v = v[:4] - // low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24) - MOVQ bitReaderShifted_in(br0), AX + // br0.fillFast32() + MOVQ 32(R10), R14 + MOVBQZX 40(R10), R15 + CMPQ R15, $0x20 + JBE skip_fill0 + MOVQ 24(R10), AX + SUBQ $0x20, R15 + SUBQ $0x04, AX + MOVQ (R10), BP // b.value |= uint64(low) << (b.bitsRead & 63) -#ifdef GOAMD64_v3 - SHLXQ br_bits_read, 0(br_offset)(AX*1), AX // AX = uint32(b.in[b.off:b.off+4]) << (b.bitsRead & 63) - -#else - MOVL 0(br_offset)(AX*1), AX // AX = uint32(b.in[b.off:b.off+4]) - MOVQ br_bits_read, CX - SHLQ CL, AX - -#endif - - ORQ AX, br_value + MOVL (AX)(BP*1), BP + MOVQ R15, CX + SHLQ CL, BP + MOVQ AX, 24(R10) + ORQ BP, R14 // exhausted = exhausted || (br0.off < 4) - CMPQ br_offset, $4 - SETLT DL - ORB DL, DH + CMPQ AX, $0x04 + SETLT AL + ORB AL, DL - // } skip_fill0: - // val0 := br0.peekTopBits(peekBits) -#ifdef GOAMD64_v3 - SHRXQ peek_bits, br_value, AX // AX = (value >> peek_bits) & mask - -#else - MOVQ br_value, AX - MOVQ peek_bits, CX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - -#endif + MOVQ R14, BP + MOVQ SI, CX + SHRQ CL, BP // v0 := table[val0&mask] - MOVW 0(table)(AX*2), AX // AX - v0 + MOVW (R9)(BP*2), CX - // br0.advance(uint8(v0.entry)) - MOVB AH, BL // BL = uint8(v0.entry >> 8) + // br0.advance(uint8(v0.entry) + MOVB CH, AL + SHLQ CL, R14 + ADDB CL, R15 -#ifdef GOAMD64_v3 - MOVBQZX AL, CX - SHLXQ AX, br_value, br_value // value <<= n - -#else - MOVBQZX AL, CX - SHLQ CL, br_value // value <<= n - -#endif - - ADDQ CX, br_bits_read // bits_read += n - -#ifdef GOAMD64_v3 - SHRXQ peek_bits, br_value, AX // AX = (value >> peek_bits) & mask - -#else // val1 := br0.peekTopBits(peekBits) - MOVQ peek_bits, CX - MOVQ br_value, AX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - -#endif + MOVQ SI, CX + MOVQ R14, BP + SHRQ CL, BP // v1 := table[val1&mask] - MOVW 0(table)(AX*2), AX // AX - v1 + MOVW (R9)(BP*2), CX // br0.advance(uint8(v1.entry)) - MOVB AH, BH // BH = uint8(v1.entry >> 8) - -#ifdef GOAMD64_v3 - MOVBQZX AL, CX - SHLXQ AX, br_value, br_value // value <<= n - -#else - MOVBQZX AL, CX - SHLQ CL, br_value // value <<= n - -#endif - - ADDQ CX, br_bits_read // bits_read += n + MOVB CH, AH + SHLQ CL, R14 + ADDB CL, R15 // these two writes get coalesced - // buf[stream][off] = uint8(v0.entry >> 8) - // buf[stream][off+1] = uint8(v1.entry >> 8) - MOVW BX, 0(buffer)(off*1) + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + MOVW AX, (DI) // update the bitrader reader structure - MOVB br_bits_read, bitReaderShifted_bitsRead(br0) - MOVQ br_value, bitReaderShifted_value(br0) - MOVQ br_offset, bitReaderShifted_off(br0) + MOVQ R14, 32(R10) + MOVB R15, 40(R10) + ADDQ R8, DI - // const stream = 1 - // br1.fillFast() - MOVBQZX bitReaderShifted_bitsRead(br1), br_bits_read - MOVQ bitReaderShifted_value(br1), br_value - MOVQ bitReaderShifted_off(br1), br_offset - - // We must have at least 2 * max tablelog left - CMPQ br_bits_read, $64-22 - JBE skip_fill1 - - SUBQ $32, br_bits_read // b.bitsRead -= 32 - SUBQ $4, br_offset // b.off -= 4 - - // v := b.in[b.off-4 : b.off] - // v = v[:4] - // low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24) - MOVQ bitReaderShifted_in(br1), AX + // br1.fillFast32() + MOVQ 32(R11), R14 + MOVBQZX 40(R11), R15 + CMPQ R15, $0x20 + JBE skip_fill1 + MOVQ 24(R11), AX + SUBQ $0x20, R15 + SUBQ $0x04, AX + MOVQ (R11), BP // b.value |= uint64(low) << (b.bitsRead & 63) -#ifdef GOAMD64_v3 - SHLXQ br_bits_read, 0(br_offset)(AX*1), AX // AX = uint32(b.in[b.off:b.off+4]) << (b.bitsRead & 63) - -#else - MOVL 0(br_offset)(AX*1), AX // AX = uint32(b.in[b.off:b.off+4]) - MOVQ br_bits_read, CX - SHLQ CL, AX - -#endif - - ORQ AX, br_value + MOVL (AX)(BP*1), BP + MOVQ R15, CX + SHLQ CL, BP + MOVQ AX, 24(R11) + ORQ BP, R14 // exhausted = exhausted || (br1.off < 4) - CMPQ br_offset, $4 - SETLT DL - ORB DL, DH + CMPQ AX, $0x04 + SETLT AL + ORB AL, DL - // } skip_fill1: - // val0 := br1.peekTopBits(peekBits) -#ifdef GOAMD64_v3 - SHRXQ peek_bits, br_value, AX // AX = (value >> peek_bits) & mask - -#else - MOVQ br_value, AX - MOVQ peek_bits, CX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - -#endif + MOVQ R14, BP + MOVQ SI, CX + SHRQ CL, BP // v0 := table[val0&mask] - MOVW 0(table)(AX*2), AX // AX - v0 + MOVW (R9)(BP*2), CX - // br1.advance(uint8(v0.entry)) - MOVB AH, BL // BL = uint8(v0.entry >> 8) + // br1.advance(uint8(v0.entry) + MOVB CH, AL + SHLQ CL, R14 + ADDB CL, R15 -#ifdef GOAMD64_v3 - MOVBQZX AL, CX - SHLXQ AX, br_value, br_value // value <<= n - -#else - MOVBQZX AL, CX - SHLQ CL, br_value // value <<= n - -#endif - - ADDQ CX, br_bits_read // bits_read += n - -#ifdef GOAMD64_v3 - SHRXQ peek_bits, br_value, AX // AX = (value >> peek_bits) & mask - -#else // val1 := br1.peekTopBits(peekBits) - MOVQ peek_bits, CX - MOVQ br_value, AX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - -#endif + MOVQ SI, CX + MOVQ R14, BP + SHRQ CL, BP // v1 := table[val1&mask] - MOVW 0(table)(AX*2), AX // AX - v1 + MOVW (R9)(BP*2), CX // br1.advance(uint8(v1.entry)) - MOVB AH, BH // BH = uint8(v1.entry >> 8) - -#ifdef GOAMD64_v3 - MOVBQZX AL, CX - SHLXQ AX, br_value, br_value // value <<= n - -#else - MOVBQZX AL, CX - SHLQ CL, br_value // value <<= n - -#endif - - ADDQ CX, br_bits_read // bits_read += n + MOVB CH, AH + SHLQ CL, R14 + ADDB CL, R15 // these two writes get coalesced - // buf[stream][off] = uint8(v0.entry >> 8) - // buf[stream][off+1] = uint8(v1.entry >> 8) - MOVW BX, 256(buffer)(off*1) + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + MOVW AX, (DI) // update the bitrader reader structure - MOVB br_bits_read, bitReaderShifted_bitsRead(br1) - MOVQ br_value, bitReaderShifted_value(br1) - MOVQ br_offset, bitReaderShifted_off(br1) + MOVQ R14, 32(R11) + MOVB R15, 40(R11) + ADDQ R8, DI - // const stream = 2 - // br2.fillFast() - MOVBQZX bitReaderShifted_bitsRead(br2), br_bits_read - MOVQ bitReaderShifted_value(br2), br_value - MOVQ bitReaderShifted_off(br2), br_offset - - // We must have at least 2 * max tablelog left - CMPQ br_bits_read, $64-22 - JBE skip_fill2 - - SUBQ $32, br_bits_read // b.bitsRead -= 32 - SUBQ $4, br_offset // b.off -= 4 - - // v := b.in[b.off-4 : b.off] - // v = v[:4] - // low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24) - MOVQ bitReaderShifted_in(br2), AX + // br2.fillFast32() + MOVQ 32(R12), R14 + MOVBQZX 40(R12), R15 + CMPQ R15, $0x20 + JBE skip_fill2 + MOVQ 24(R12), AX + SUBQ $0x20, R15 + SUBQ $0x04, AX + MOVQ (R12), BP // b.value |= uint64(low) << (b.bitsRead & 63) -#ifdef GOAMD64_v3 - SHLXQ br_bits_read, 0(br_offset)(AX*1), AX // AX = uint32(b.in[b.off:b.off+4]) << (b.bitsRead & 63) - -#else - MOVL 0(br_offset)(AX*1), AX // AX = uint32(b.in[b.off:b.off+4]) - MOVQ br_bits_read, CX - SHLQ CL, AX - -#endif - - ORQ AX, br_value + MOVL (AX)(BP*1), BP + MOVQ R15, CX + SHLQ CL, BP + MOVQ AX, 24(R12) + ORQ BP, R14 // exhausted = exhausted || (br2.off < 4) - CMPQ br_offset, $4 - SETLT DL - ORB DL, DH + CMPQ AX, $0x04 + SETLT AL + ORB AL, DL - // } skip_fill2: - // val0 := br2.peekTopBits(peekBits) -#ifdef GOAMD64_v3 - SHRXQ peek_bits, br_value, AX // AX = (value >> peek_bits) & mask - -#else - MOVQ br_value, AX - MOVQ peek_bits, CX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - -#endif + MOVQ R14, BP + MOVQ SI, CX + SHRQ CL, BP // v0 := table[val0&mask] - MOVW 0(table)(AX*2), AX // AX - v0 + MOVW (R9)(BP*2), CX - // br2.advance(uint8(v0.entry)) - MOVB AH, BL // BL = uint8(v0.entry >> 8) + // br2.advance(uint8(v0.entry) + MOVB CH, AL + SHLQ CL, R14 + ADDB CL, R15 -#ifdef GOAMD64_v3 - MOVBQZX AL, CX - SHLXQ AX, br_value, br_value // value <<= n - -#else - MOVBQZX AL, CX - SHLQ CL, br_value // value <<= n - -#endif - - ADDQ CX, br_bits_read // bits_read += n - -#ifdef GOAMD64_v3 - SHRXQ peek_bits, br_value, AX // AX = (value >> peek_bits) & mask - -#else // val1 := br2.peekTopBits(peekBits) - MOVQ peek_bits, CX - MOVQ br_value, AX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - -#endif + MOVQ SI, CX + MOVQ R14, BP + SHRQ CL, BP // v1 := table[val1&mask] - MOVW 0(table)(AX*2), AX // AX - v1 + MOVW (R9)(BP*2), CX // br2.advance(uint8(v1.entry)) - MOVB AH, BH // BH = uint8(v1.entry >> 8) - -#ifdef GOAMD64_v3 - MOVBQZX AL, CX - SHLXQ AX, br_value, br_value // value <<= n - -#else - MOVBQZX AL, CX - SHLQ CL, br_value // value <<= n - -#endif - - ADDQ CX, br_bits_read // bits_read += n + MOVB CH, AH + SHLQ CL, R14 + ADDB CL, R15 // these two writes get coalesced - // buf[stream][off] = uint8(v0.entry >> 8) - // buf[stream][off+1] = uint8(v1.entry >> 8) - MOVW BX, 512(buffer)(off*1) + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + MOVW AX, (DI) // update the bitrader reader structure - MOVB br_bits_read, bitReaderShifted_bitsRead(br2) - MOVQ br_value, bitReaderShifted_value(br2) - MOVQ br_offset, bitReaderShifted_off(br2) + MOVQ R14, 32(R12) + MOVB R15, 40(R12) + ADDQ R8, DI - // const stream = 3 - // br3.fillFast() - MOVBQZX bitReaderShifted_bitsRead(br3), br_bits_read - MOVQ bitReaderShifted_value(br3), br_value - MOVQ bitReaderShifted_off(br3), br_offset - - // We must have at least 2 * max tablelog left - CMPQ br_bits_read, $64-22 - JBE skip_fill3 - - SUBQ $32, br_bits_read // b.bitsRead -= 32 - SUBQ $4, br_offset // b.off -= 4 - - // v := b.in[b.off-4 : b.off] - // v = v[:4] - // low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24) - MOVQ bitReaderShifted_in(br3), AX + // br3.fillFast32() + MOVQ 32(R13), R14 + MOVBQZX 40(R13), R15 + CMPQ R15, $0x20 + JBE skip_fill3 + MOVQ 24(R13), AX + SUBQ $0x20, R15 + SUBQ $0x04, AX + MOVQ (R13), BP // b.value |= uint64(low) << (b.bitsRead & 63) -#ifdef GOAMD64_v3 - SHLXQ br_bits_read, 0(br_offset)(AX*1), AX // AX = uint32(b.in[b.off:b.off+4]) << (b.bitsRead & 63) - -#else - MOVL 0(br_offset)(AX*1), AX // AX = uint32(b.in[b.off:b.off+4]) - MOVQ br_bits_read, CX - SHLQ CL, AX - -#endif - - ORQ AX, br_value + MOVL (AX)(BP*1), BP + MOVQ R15, CX + SHLQ CL, BP + MOVQ AX, 24(R13) + ORQ BP, R14 // exhausted = exhausted || (br3.off < 4) - CMPQ br_offset, $4 - SETLT DL - ORB DL, DH + CMPQ AX, $0x04 + SETLT AL + ORB AL, DL - // } skip_fill3: - // val0 := br3.peekTopBits(peekBits) -#ifdef GOAMD64_v3 - SHRXQ peek_bits, br_value, AX // AX = (value >> peek_bits) & mask - -#else - MOVQ br_value, AX - MOVQ peek_bits, CX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - -#endif + MOVQ R14, BP + MOVQ SI, CX + SHRQ CL, BP // v0 := table[val0&mask] - MOVW 0(table)(AX*2), AX // AX - v0 + MOVW (R9)(BP*2), CX - // br3.advance(uint8(v0.entry)) - MOVB AH, BL // BL = uint8(v0.entry >> 8) + // br3.advance(uint8(v0.entry) + MOVB CH, AL + SHLQ CL, R14 + ADDB CL, R15 -#ifdef GOAMD64_v3 - MOVBQZX AL, CX - SHLXQ AX, br_value, br_value // value <<= n - -#else - MOVBQZX AL, CX - SHLQ CL, br_value // value <<= n - -#endif - - ADDQ CX, br_bits_read // bits_read += n - -#ifdef GOAMD64_v3 - SHRXQ peek_bits, br_value, AX // AX = (value >> peek_bits) & mask - -#else // val1 := br3.peekTopBits(peekBits) - MOVQ peek_bits, CX - MOVQ br_value, AX - SHRQ CL, AX // AX = (value >> peek_bits) & mask - -#endif + MOVQ SI, CX + MOVQ R14, BP + SHRQ CL, BP // v1 := table[val1&mask] - MOVW 0(table)(AX*2), AX // AX - v1 + MOVW (R9)(BP*2), CX // br3.advance(uint8(v1.entry)) - MOVB AH, BH // BH = uint8(v1.entry >> 8) - -#ifdef GOAMD64_v3 - MOVBQZX AL, CX - SHLXQ AX, br_value, br_value // value <<= n - -#else - MOVBQZX AL, CX - SHLQ CL, br_value // value <<= n - -#endif - - ADDQ CX, br_bits_read // bits_read += n + MOVB CH, AH + SHLQ CL, R14 + ADDB CL, R15 // these two writes get coalesced - // buf[stream][off] = uint8(v0.entry >> 8) - // buf[stream][off+1] = uint8(v1.entry >> 8) - MOVW BX, 768(buffer)(off*1) + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + MOVW AX, (DI) // update the bitrader reader structure - MOVB br_bits_read, bitReaderShifted_bitsRead(br3) - MOVQ br_value, bitReaderShifted_value(br3) - MOVQ br_offset, bitReaderShifted_off(br3) - - ADDQ $2, off // off += 2 - - TESTB DH, DH // any br[i].ofs < 4? - JNZ end - - CMPQ off, $bufoff - JL main_loop - -end: - MOVQ 0(SP), BP - - MOVB off, ret+56(FP) + MOVQ R14, 32(R13) + MOVB R15, 40(R13) + ADDQ $0x02, BX + TESTB DL, DL + JZ main_loop + MOVQ ctx+0(FP), AX + MOVQ 40(AX), CX + MOVQ BX, DX + SUBQ CX, DX + SHLQ $0x02, DX + MOVQ DX, 64(AX) RET -#undef off -#undef buffer -#undef table +// func decompress4x_8b_main_loop_amd64(ctx *decompress4xContext) +TEXT ·decompress4x_8b_main_loop_amd64(SB), $16-8 + XORQ DX, DX -#undef br_bits_read -#undef br_value -#undef br_offset -#undef peek_bits -#undef exhausted + // Preload values + MOVQ ctx+0(FP), CX + MOVBQZX 32(CX), BX + MOVQ 40(CX), SI + MOVQ SI, (SP) + MOVQ 72(CX), DX + MOVQ DX, 8(SP) + MOVQ 48(CX), DI + MOVQ 56(CX), R8 + MOVQ (CX), R9 + MOVQ 8(CX), R10 + MOVQ 16(CX), R11 + MOVQ 24(CX), R12 -#undef br0 -#undef br1 -#undef br2 -#undef br3 + // Main loop +main_loop: + MOVQ (SP), SI + CMPQ SI, 8(SP) + SETGE DL + + // br1000.fillFast32() + MOVQ 32(R9), R13 + MOVBQZX 40(R9), R14 + CMPQ R14, $0x20 + JBE skip_fill1000 + MOVQ 24(R9), R15 + SUBQ $0x20, R14 + SUBQ $0x04, R15 + MOVQ (R9), BP + + // b.value |= uint64(low) << (b.bitsRead & 63) + MOVL (R15)(BP*1), BP + MOVQ R14, CX + SHLQ CL, BP + MOVQ R15, 24(R9) + ORQ BP, R13 + + // exhausted = exhausted || (br1000.off < 4) + CMPQ R15, $0x04 + SETLT AL + ORB AL, DL + +skip_fill1000: + // val0 := br0.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v0 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br0.advance(uint8(v0.entry) + MOVB CH, AL + SHLQ CL, R13 + ADDB CL, R14 + + // val1 := br0.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v1 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br0.advance(uint8(v1.entry) + MOVB CH, AH + SHLQ CL, R13 + ADDB CL, R14 + BSWAPL AX + + // val2 := br0.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v2 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br0.advance(uint8(v2.entry) + MOVB CH, AH + SHLQ CL, R13 + ADDB CL, R14 + + // val3 := br0.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v3 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br0.advance(uint8(v3.entry) + MOVB CH, AL + SHLQ CL, R13 + ADDB CL, R14 + BSWAPL AX + + // these four writes get coalesced + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + // out[id * dstEvery + 3] = uint8(v2.entry >> 8) + // out[id * dstEvery + 4] = uint8(v3.entry >> 8) + MOVL AX, (SI) + + // update the bitreader reader structure + MOVQ R13, 32(R9) + MOVB R14, 40(R9) + ADDQ DI, SI + + // br1001.fillFast32() + MOVQ 32(R10), R13 + MOVBQZX 40(R10), R14 + CMPQ R14, $0x20 + JBE skip_fill1001 + MOVQ 24(R10), R15 + SUBQ $0x20, R14 + SUBQ $0x04, R15 + MOVQ (R10), BP + + // b.value |= uint64(low) << (b.bitsRead & 63) + MOVL (R15)(BP*1), BP + MOVQ R14, CX + SHLQ CL, BP + MOVQ R15, 24(R10) + ORQ BP, R13 + + // exhausted = exhausted || (br1001.off < 4) + CMPQ R15, $0x04 + SETLT AL + ORB AL, DL + +skip_fill1001: + // val0 := br1.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v0 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br1.advance(uint8(v0.entry) + MOVB CH, AL + SHLQ CL, R13 + ADDB CL, R14 + + // val1 := br1.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v1 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br1.advance(uint8(v1.entry) + MOVB CH, AH + SHLQ CL, R13 + ADDB CL, R14 + BSWAPL AX + + // val2 := br1.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v2 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br1.advance(uint8(v2.entry) + MOVB CH, AH + SHLQ CL, R13 + ADDB CL, R14 + + // val3 := br1.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v3 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br1.advance(uint8(v3.entry) + MOVB CH, AL + SHLQ CL, R13 + ADDB CL, R14 + BSWAPL AX + + // these four writes get coalesced + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + // out[id * dstEvery + 3] = uint8(v2.entry >> 8) + // out[id * dstEvery + 4] = uint8(v3.entry >> 8) + MOVL AX, (SI) + + // update the bitreader reader structure + MOVQ R13, 32(R10) + MOVB R14, 40(R10) + ADDQ DI, SI + + // br1002.fillFast32() + MOVQ 32(R11), R13 + MOVBQZX 40(R11), R14 + CMPQ R14, $0x20 + JBE skip_fill1002 + MOVQ 24(R11), R15 + SUBQ $0x20, R14 + SUBQ $0x04, R15 + MOVQ (R11), BP + + // b.value |= uint64(low) << (b.bitsRead & 63) + MOVL (R15)(BP*1), BP + MOVQ R14, CX + SHLQ CL, BP + MOVQ R15, 24(R11) + ORQ BP, R13 + + // exhausted = exhausted || (br1002.off < 4) + CMPQ R15, $0x04 + SETLT AL + ORB AL, DL + +skip_fill1002: + // val0 := br2.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v0 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br2.advance(uint8(v0.entry) + MOVB CH, AL + SHLQ CL, R13 + ADDB CL, R14 + + // val1 := br2.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v1 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br2.advance(uint8(v1.entry) + MOVB CH, AH + SHLQ CL, R13 + ADDB CL, R14 + BSWAPL AX + + // val2 := br2.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v2 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br2.advance(uint8(v2.entry) + MOVB CH, AH + SHLQ CL, R13 + ADDB CL, R14 + + // val3 := br2.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v3 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br2.advance(uint8(v3.entry) + MOVB CH, AL + SHLQ CL, R13 + ADDB CL, R14 + BSWAPL AX + + // these four writes get coalesced + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + // out[id * dstEvery + 3] = uint8(v2.entry >> 8) + // out[id * dstEvery + 4] = uint8(v3.entry >> 8) + MOVL AX, (SI) + + // update the bitreader reader structure + MOVQ R13, 32(R11) + MOVB R14, 40(R11) + ADDQ DI, SI + + // br1003.fillFast32() + MOVQ 32(R12), R13 + MOVBQZX 40(R12), R14 + CMPQ R14, $0x20 + JBE skip_fill1003 + MOVQ 24(R12), R15 + SUBQ $0x20, R14 + SUBQ $0x04, R15 + MOVQ (R12), BP + + // b.value |= uint64(low) << (b.bitsRead & 63) + MOVL (R15)(BP*1), BP + MOVQ R14, CX + SHLQ CL, BP + MOVQ R15, 24(R12) + ORQ BP, R13 + + // exhausted = exhausted || (br1003.off < 4) + CMPQ R15, $0x04 + SETLT AL + ORB AL, DL + +skip_fill1003: + // val0 := br3.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v0 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br3.advance(uint8(v0.entry) + MOVB CH, AL + SHLQ CL, R13 + ADDB CL, R14 + + // val1 := br3.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v1 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br3.advance(uint8(v1.entry) + MOVB CH, AH + SHLQ CL, R13 + ADDB CL, R14 + BSWAPL AX + + // val2 := br3.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v2 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br3.advance(uint8(v2.entry) + MOVB CH, AH + SHLQ CL, R13 + ADDB CL, R14 + + // val3 := br3.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v3 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br3.advance(uint8(v3.entry) + MOVB CH, AL + SHLQ CL, R13 + ADDB CL, R14 + BSWAPL AX + + // these four writes get coalesced + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + // out[id * dstEvery + 3] = uint8(v2.entry >> 8) + // out[id * dstEvery + 4] = uint8(v3.entry >> 8) + MOVL AX, (SI) + + // update the bitreader reader structure + MOVQ R13, 32(R12) + MOVB R14, 40(R12) + ADDQ $0x04, (SP) + TESTB DL, DL + JZ main_loop + MOVQ ctx+0(FP), AX + MOVQ 40(AX), CX + MOVQ (SP), DX + SUBQ CX, DX + SHLQ $0x02, DX + MOVQ DX, 64(AX) + RET diff --git a/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s.in b/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s.in deleted file mode 100644 index 330d86ae1..000000000 --- a/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s.in +++ /dev/null @@ -1,195 +0,0 @@ -// +build !appengine -// +build gc -// +build !noasm - -#include "textflag.h" -#include "funcdata.h" -#include "go_asm.h" - -#ifdef GOAMD64_v4 -#ifndef GOAMD64_v3 -#define GOAMD64_v3 -#endif -#endif - -#define bufoff 256 // see decompress.go, we're using [4][256]byte table - -//func decompress4x_main_loop_x86(pbr0, pbr1, pbr2, pbr3 *bitReaderShifted, -// peekBits uint8, buf *byte, tbl *dEntrySingle) (int, bool) -TEXT ·decompress4x_main_loop_x86(SB), NOSPLIT, $8 -#define off R8 -#define buffer DI -#define table SI - -#define br_bits_read R9 -#define br_value R10 -#define br_offset R11 -#define peek_bits R12 -#define exhausted DX - -#define br0 R13 -#define br1 R14 -#define br2 R15 -#define br3 BP - - MOVQ BP, 0(SP) - - XORQ exhausted, exhausted // exhausted = false - XORQ off, off // off = 0 - - MOVBQZX peekBits+32(FP), peek_bits - MOVQ buf+40(FP), buffer - MOVQ tbl+48(FP), table - - MOVQ pbr0+0(FP), br0 - MOVQ pbr1+8(FP), br1 - MOVQ pbr2+16(FP), br2 - MOVQ pbr3+24(FP), br3 - -main_loop: -{{ define "decode_2_values_x86" }} - // const stream = {{ var "id" }} - // br{{ var "id"}}.fillFast() - MOVBQZX bitReaderShifted_bitsRead(br{{ var "id" }}), br_bits_read - MOVQ bitReaderShifted_value(br{{ var "id" }}), br_value - MOVQ bitReaderShifted_off(br{{ var "id" }}), br_offset - - // We must have at least 2 * max tablelog left - CMPQ br_bits_read, $64-22 - JBE skip_fill{{ var "id" }} - - SUBQ $32, br_bits_read // b.bitsRead -= 32 - SUBQ $4, br_offset // b.off -= 4 - - // v := b.in[b.off-4 : b.off] - // v = v[:4] - // low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24) - MOVQ bitReaderShifted_in(br{{ var "id" }}), AX - - // b.value |= uint64(low) << (b.bitsRead & 63) -#ifdef GOAMD64_v3 - SHLXQ br_bits_read, 0(br_offset)(AX*1), AX // AX = uint32(b.in[b.off:b.off+4]) << (b.bitsRead & 63) -#else - MOVL 0(br_offset)(AX*1), AX // AX = uint32(b.in[b.off:b.off+4]) - MOVQ br_bits_read, CX - SHLQ CL, AX -#endif - - ORQ AX, br_value - - // exhausted = exhausted || (br{{ var "id"}}.off < 4) - CMPQ br_offset, $4 - SETLT DL - ORB DL, DH - // } -skip_fill{{ var "id" }}: - - // val0 := br{{ var "id"}}.peekTopBits(peekBits) -#ifdef GOAMD64_v3 - SHRXQ peek_bits, br_value, AX // AX = (value >> peek_bits) & mask -#else - MOVQ br_value, AX - MOVQ peek_bits, CX - SHRQ CL, AX // AX = (value >> peek_bits) & mask -#endif - - // v0 := table[val0&mask] - MOVW 0(table)(AX*2), AX // AX - v0 - - // br{{ var "id"}}.advance(uint8(v0.entry)) - MOVB AH, BL // BL = uint8(v0.entry >> 8) - -#ifdef GOAMD64_v3 - MOVBQZX AL, CX - SHLXQ AX, br_value, br_value // value <<= n -#else - MOVBQZX AL, CX - SHLQ CL, br_value // value <<= n -#endif - - ADDQ CX, br_bits_read // bits_read += n - - -#ifdef GOAMD64_v3 - SHRXQ peek_bits, br_value, AX // AX = (value >> peek_bits) & mask -#else - // val1 := br{{ var "id"}}.peekTopBits(peekBits) - MOVQ peek_bits, CX - MOVQ br_value, AX - SHRQ CL, AX // AX = (value >> peek_bits) & mask -#endif - - // v1 := table[val1&mask] - MOVW 0(table)(AX*2), AX // AX - v1 - - // br{{ var "id"}}.advance(uint8(v1.entry)) - MOVB AH, BH // BH = uint8(v1.entry >> 8) - -#ifdef GOAMD64_v3 - MOVBQZX AL, CX - SHLXQ AX, br_value, br_value // value <<= n -#else - MOVBQZX AL, CX - SHLQ CL, br_value // value <<= n -#endif - - ADDQ CX, br_bits_read // bits_read += n - - - // these two writes get coalesced - // buf[stream][off] = uint8(v0.entry >> 8) - // buf[stream][off+1] = uint8(v1.entry >> 8) - MOVW BX, {{ var "bufofs" }}(buffer)(off*1) - - // update the bitrader reader structure - MOVB br_bits_read, bitReaderShifted_bitsRead(br{{ var "id" }}) - MOVQ br_value, bitReaderShifted_value(br{{ var "id" }}) - MOVQ br_offset, bitReaderShifted_off(br{{ var "id" }}) -{{ end }} - - {{ set "id" "0" }} - {{ set "ofs" "0" }} - {{ set "bufofs" "0" }} {{/* id * bufoff */}} - {{ template "decode_2_values_x86" . }} - - {{ set "id" "1" }} - {{ set "ofs" "8" }} - {{ set "bufofs" "256" }} - {{ template "decode_2_values_x86" . }} - - {{ set "id" "2" }} - {{ set "ofs" "16" }} - {{ set "bufofs" "512" }} - {{ template "decode_2_values_x86" . }} - - {{ set "id" "3" }} - {{ set "ofs" "24" }} - {{ set "bufofs" "768" }} - {{ template "decode_2_values_x86" . }} - - ADDQ $2, off // off += 2 - - TESTB DH, DH // any br[i].ofs < 4? - JNZ end - - CMPQ off, $bufoff - JL main_loop -end: - MOVQ 0(SP), BP - - MOVB off, ret+56(FP) - RET -#undef off -#undef buffer -#undef table - -#undef br_bits_read -#undef br_value -#undef br_offset -#undef peek_bits -#undef exhausted - -#undef br0 -#undef br1 -#undef br2 -#undef br3 diff --git a/vendor/github.com/klauspost/compress/zstd/decoder.go b/vendor/github.com/klauspost/compress/zstd/decoder.go index b04e36f2f..36119f385 100644 --- a/vendor/github.com/klauspost/compress/zstd/decoder.go +++ b/vendor/github.com/klauspost/compress/zstd/decoder.go @@ -451,7 +451,7 @@ func (d *Decoder) nextBlock(blocking bool) (ok bool) { got := d.current.crc.Sum64() var tmp [4]byte binary.LittleEndian.PutUint32(tmp[:], uint32(got)) - if !d.o.ignoreChecksum && !bytes.Equal(tmp[:], next.d.checkCRC) && !ignoreCRC { + if !d.o.ignoreChecksum && !bytes.Equal(tmp[:], next.d.checkCRC) { if debugDecoder { println("CRC Check Failed:", tmp[:], " (got) !=", next.d.checkCRC, "(on stream)") } @@ -534,10 +534,16 @@ func (d *Decoder) nextBlockSync() (ok bool) { } // Update/Check CRC - if !d.o.ignoreChecksum && d.frame.HasCheckSum { - d.frame.crc.Write(d.current.b) + if d.frame.HasCheckSum { + if !d.o.ignoreChecksum { + d.frame.crc.Write(d.current.b) + } if d.current.d.Last { - d.current.err = d.frame.checkCRC() + if !d.o.ignoreChecksum { + d.current.err = d.frame.checkCRC() + } else { + d.current.err = d.frame.consumeCRC() + } if d.current.err != nil { println("CRC error:", d.current.err) return false diff --git a/vendor/github.com/klauspost/compress/zstd/framedec.go b/vendor/github.com/klauspost/compress/zstd/framedec.go index 4b15b2acc..3ff109cce 100644 --- a/vendor/github.com/klauspost/compress/zstd/framedec.go +++ b/vendor/github.com/klauspost/compress/zstd/framedec.go @@ -310,7 +310,7 @@ func (d *frameDec) checkCRC() error { tmp[2] = byte(got >> 16) tmp[3] = byte(got >> 24) - if !bytes.Equal(tmp[:], want) && !ignoreCRC { + if !bytes.Equal(tmp[:], want) { if debugDecoder { println("CRC Check Failed:", tmp[:], "!=", want) } diff --git a/vendor/github.com/klauspost/compress/zstd/fuzz.go b/vendor/github.com/klauspost/compress/zstd/fuzz.go deleted file mode 100644 index 7f2210e05..000000000 --- a/vendor/github.com/klauspost/compress/zstd/fuzz.go +++ /dev/null @@ -1,11 +0,0 @@ -//go:build ignorecrc -// +build ignorecrc - -// Copyright 2019+ Klaus Post. All rights reserved. -// License information can be found in the LICENSE file. -// Based on work by Yann Collet, released under BSD License. - -package zstd - -// ignoreCRC can be used for fuzz testing to ignore CRC values... -const ignoreCRC = true diff --git a/vendor/github.com/klauspost/compress/zstd/fuzz_none.go b/vendor/github.com/klauspost/compress/zstd/fuzz_none.go deleted file mode 100644 index 6811c68a8..000000000 --- a/vendor/github.com/klauspost/compress/zstd/fuzz_none.go +++ /dev/null @@ -1,11 +0,0 @@ -//go:build !ignorecrc -// +build !ignorecrc - -// Copyright 2019+ Klaus Post. All rights reserved. -// License information can be found in the LICENSE file. -// Based on work by Yann Collet, released under BSD License. - -package zstd - -// ignoreCRC can be used for fuzz testing to ignore CRC values... -const ignoreCRC = false diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s index 01cc23fa8..2585b2e98 100644 --- a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s @@ -1326,30 +1326,30 @@ copy_match: JA copy_overlapping_match // Copy non-overlapping match - XORQ R12, R12 + ADDQ R13, DI + MOVQ BX, R12 + ADDQ R13, BX copy_2: - MOVUPS (R11)(R12*1), X0 - MOVUPS X0, (BX)(R12*1) + MOVUPS (R11), X0 + MOVUPS X0, (R12) + ADDQ $0x10, R11 ADDQ $0x10, R12 - CMPQ R12, R13 - JB copy_2 - ADDQ R13, BX - ADDQ R13, DI + SUBQ $0x10, R13 + JHI copy_2 JMP handle_loop // Copy overlapping match copy_overlapping_match: - XORQ R12, R12 + ADDQ R13, DI copy_slow_3: - MOVB (R11)(R12*1), R14 - MOVB R14, (BX)(R12*1) - INCQ R12 - CMPQ R12, R13 - JB copy_slow_3 - ADDQ R13, BX - ADDQ R13, DI + MOVB (R11), R12 + MOVB R12, (BX) + INCQ R11 + INCQ BX + DECQ R13 + JNZ copy_slow_3 handle_loop: ADDQ $0x18, AX @@ -1826,30 +1826,30 @@ copy_match: JA copy_overlapping_match // Copy non-overlapping match - XORQ CX, CX + ADDQ R13, R12 + MOVQ R10, CX + ADDQ R13, R10 copy_2: - MOVUPS (AX)(CX*1), X0 - MOVUPS X0, (R10)(CX*1) + MOVUPS (AX), X0 + MOVUPS X0, (CX) + ADDQ $0x10, AX ADDQ $0x10, CX - CMPQ CX, R13 - JB copy_2 - ADDQ R13, R10 - ADDQ R13, R12 + SUBQ $0x10, R13 + JHI copy_2 JMP handle_loop // Copy overlapping match copy_overlapping_match: - XORQ CX, CX + ADDQ R13, R12 copy_slow_3: - MOVB (AX)(CX*1), R14 - MOVB R14, (R10)(CX*1) - INCQ CX - CMPQ CX, R13 - JB copy_slow_3 - ADDQ R13, R10 - ADDQ R13, R12 + MOVB (AX), CL + MOVB CL, (R10) + INCQ AX + INCQ R10 + DECQ R13 + JNZ copy_slow_3 handle_loop: MOVQ ctx+16(FP), AX @@ -2333,30 +2333,30 @@ copy_match: JA copy_overlapping_match // Copy non-overlapping match - XORQ R12, R12 + ADDQ R13, R11 + MOVQ R9, R12 + ADDQ R13, R9 copy_2: - MOVUPS (CX)(R12*1), X0 - MOVUPS X0, (R9)(R12*1) + MOVUPS (CX), X0 + MOVUPS X0, (R12) + ADDQ $0x10, CX ADDQ $0x10, R12 - CMPQ R12, R13 - JB copy_2 - ADDQ R13, R9 - ADDQ R13, R11 + SUBQ $0x10, R13 + JHI copy_2 JMP handle_loop // Copy overlapping match copy_overlapping_match: - XORQ R12, R12 + ADDQ R13, R11 copy_slow_3: - MOVB (CX)(R12*1), R14 - MOVB R14, (R9)(R12*1) - INCQ R12 - CMPQ R12, R13 - JB copy_slow_3 - ADDQ R13, R9 - ADDQ R13, R11 + MOVB (CX), R12 + MOVB R12, (R9) + INCQ CX + INCQ R9 + DECQ R13 + JNZ copy_slow_3 handle_loop: MOVQ ctx+16(FP), CX @@ -2862,6 +2862,7 @@ copy_match: JA copy_overlapping_match // Copy non-overlapping match + ADDQ R13, R12 XORQ CX, CX TESTQ $0x00000001, R13 JZ copy_2_word @@ -2900,21 +2901,19 @@ copy_2_test: CMPQ CX, R13 JB copy_2 ADDQ R13, R10 - ADDQ R13, R12 JMP handle_loop // Copy overlapping match copy_overlapping_match: - XORQ CX, CX + ADDQ R13, R12 copy_slow_3: - MOVB (AX)(CX*1), R14 - MOVB R14, (R10)(CX*1) - INCQ CX - CMPQ CX, R13 - JB copy_slow_3 - ADDQ R13, R10 - ADDQ R13, R12 + MOVB (AX), CL + MOVB CL, (R10) + INCQ AX + INCQ R10 + DECQ R13 + JNZ copy_slow_3 handle_loop: MOVQ ctx+16(FP), AX @@ -3398,6 +3397,7 @@ copy_match: JA copy_overlapping_match // Copy non-overlapping match + ADDQ R13, R11 XORQ R12, R12 TESTQ $0x00000001, R13 JZ copy_2_word @@ -3436,21 +3436,19 @@ copy_2_test: CMPQ R12, R13 JB copy_2 ADDQ R13, R9 - ADDQ R13, R11 JMP handle_loop // Copy overlapping match copy_overlapping_match: - XORQ R12, R12 + ADDQ R13, R11 copy_slow_3: - MOVB (CX)(R12*1), R14 - MOVB R14, (R9)(R12*1) - INCQ R12 - CMPQ R12, R13 - JB copy_slow_3 - ADDQ R13, R9 - ADDQ R13, R11 + MOVB (CX), R12 + MOVB R12, (R9) + INCQ CX + INCQ R9 + DECQ R13 + JNZ copy_slow_3 handle_loop: MOVQ ctx+16(FP), CX diff --git a/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go index 08195b410..4d792aa29 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go @@ -197,14 +197,6 @@ func goRuntimeMemStats() memStatsMetrics { ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.NextGC) }, valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("gc_cpu_fraction"), - "The fraction of this program's available CPU time used by the GC since the program started.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return ms.GCCPUFraction }, - valType: GaugeValue, }, } } @@ -268,7 +260,6 @@ func (c *baseGoCollector) Collect(ch chan<- Metric) { quantiles[0.0] = stats.PauseQuantiles[0].Seconds() ch <- MustNewConstSummary(c.gcDesc, uint64(stats.NumGC), stats.PauseTotal.Seconds(), quantiles) ch <- MustNewConstMetric(c.gcLastTimeDesc, GaugeValue, float64(stats.LastGC.UnixNano())/1e9) - ch <- MustNewConstMetric(c.goInfoDesc, GaugeValue, 1) } @@ -278,6 +269,7 @@ func memstatNamespace(s string) string { // memStatsMetrics provide description, evaluator, runtime/metrics name, and // value type for memstat metrics. +// TODO(bwplotka): Remove with end Go 1.16 EOL and replace with runtime/metrics.Description type memStatsMetrics []struct { desc *Desc eval func(*runtime.MemStats) float64 diff --git a/vendor/github.com/prometheus/client_golang/prometheus/go_collector_go116.go b/vendor/github.com/prometheus/client_golang/prometheus/go_collector_go116.go index 24526131e..897a6e906 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/go_collector_go116.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/go_collector_go116.go @@ -40,13 +40,28 @@ type goCollector struct { // // Deprecated: Use collectors.NewGoCollector instead. func NewGoCollector() Collector { + msMetrics := goRuntimeMemStats() + msMetrics = append(msMetrics, struct { + desc *Desc + eval func(*runtime.MemStats) float64 + valType ValueType + }{ + // This metric is omitted in Go1.17+, see https://github.com/prometheus/client_golang/issues/842#issuecomment-861812034 + desc: NewDesc( + memstatNamespace("gc_cpu_fraction"), + "The fraction of this program's available CPU time used by the GC since the program started.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return ms.GCCPUFraction }, + valType: GaugeValue, + }) return &goCollector{ base: newBaseGoCollector(), msLast: &runtime.MemStats{}, msRead: runtime.ReadMemStats, msMaxWait: time.Second, msMaxAge: 5 * time.Minute, - msMetrics: goRuntimeMemStats(), + msMetrics: msMetrics, } } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/go_collector_go117.go b/vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go similarity index 59% rename from vendor/github.com/prometheus/client_golang/prometheus/go_collector_go117.go rename to vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go index d43bdcdda..a0fe95eb1 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/go_collector_go117.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go @@ -25,11 +25,71 @@ import ( //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. "github.com/golang/protobuf/proto" - "github.com/prometheus/client_golang/prometheus/internal" dto "github.com/prometheus/client_model/go" + + "github.com/prometheus/client_golang/prometheus/internal" ) +const ( + goGCHeapTinyAllocsObjects = "/gc/heap/tiny/allocs:objects" + goGCHeapAllocsObjects = "/gc/heap/allocs:objects" + goGCHeapFreesObjects = "/gc/heap/frees:objects" + goGCHeapAllocsBytes = "/gc/heap/allocs:bytes" + goGCHeapObjects = "/gc/heap/objects:objects" + goGCHeapGoalBytes = "/gc/heap/goal:bytes" + goMemoryClassesTotalBytes = "/memory/classes/total:bytes" + goMemoryClassesHeapObjectsBytes = "/memory/classes/heap/objects:bytes" + goMemoryClassesHeapUnusedBytes = "/memory/classes/heap/unused:bytes" + goMemoryClassesHeapReleasedBytes = "/memory/classes/heap/released:bytes" + goMemoryClassesHeapFreeBytes = "/memory/classes/heap/free:bytes" + goMemoryClassesHeapStacksBytes = "/memory/classes/heap/stacks:bytes" + goMemoryClassesOSStacksBytes = "/memory/classes/os-stacks:bytes" + goMemoryClassesMetadataMSpanInuseBytes = "/memory/classes/metadata/mspan/inuse:bytes" + goMemoryClassesMetadataMSPanFreeBytes = "/memory/classes/metadata/mspan/free:bytes" + goMemoryClassesMetadataMCacheInuseBytes = "/memory/classes/metadata/mcache/inuse:bytes" + goMemoryClassesMetadataMCacheFreeBytes = "/memory/classes/metadata/mcache/free:bytes" + goMemoryClassesProfilingBucketsBytes = "/memory/classes/profiling/buckets:bytes" + goMemoryClassesMetadataOtherBytes = "/memory/classes/metadata/other:bytes" + goMemoryClassesOtherBytes = "/memory/classes/other:bytes" +) + +// runtime/metrics names required for runtimeMemStats like logic. +var rmForMemStats = []string{goGCHeapTinyAllocsObjects, + goGCHeapAllocsObjects, + goGCHeapFreesObjects, + goGCHeapAllocsBytes, + goGCHeapObjects, + goGCHeapGoalBytes, + goMemoryClassesTotalBytes, + goMemoryClassesHeapObjectsBytes, + goMemoryClassesHeapUnusedBytes, + goMemoryClassesHeapReleasedBytes, + goMemoryClassesHeapFreeBytes, + goMemoryClassesHeapStacksBytes, + goMemoryClassesOSStacksBytes, + goMemoryClassesMetadataMSpanInuseBytes, + goMemoryClassesMetadataMSPanFreeBytes, + goMemoryClassesMetadataMCacheInuseBytes, + goMemoryClassesMetadataMCacheFreeBytes, + goMemoryClassesProfilingBucketsBytes, + goMemoryClassesMetadataOtherBytes, + goMemoryClassesOtherBytes, +} + +func bestEffortLookupRM(lookup []string) []metrics.Description { + ret := make([]metrics.Description, 0, len(lookup)) + for _, rm := range metrics.All() { + for _, m := range lookup { + if m == rm.Name { + ret = append(ret, rm) + } + } + } + return ret +} + type goCollector struct { + opt GoCollectorOptions base baseGoCollector // mu protects updates to all fields ensuring a consistent @@ -51,12 +111,46 @@ type goCollector struct { msMetrics memStatsMetrics } +const ( + // Those are not exposed due to need to move Go collector to another package in v2. + // See issue https://github.com/prometheus/client_golang/issues/1030. + goRuntimeMemStatsCollection uint32 = 1 << iota + goRuntimeMetricsCollection +) + +// GoCollectorOptions should not be used be directly by anything, except `collectors` package. +// Use it via collectors package instead. See issue +// https://github.com/prometheus/client_golang/issues/1030. +// +// Deprecated: Use collectors.WithGoCollections +type GoCollectorOptions struct { + // EnabledCollection sets what type of collections collector should expose on top of base collection. + // By default it's goMemStatsCollection | goRuntimeMetricsCollection. + EnabledCollections uint32 +} + +func (c GoCollectorOptions) isEnabled(flag uint32) bool { + return c.EnabledCollections&flag != 0 +} + +const defaultGoCollections = goRuntimeMemStatsCollection + // NewGoCollector is the obsolete version of collectors.NewGoCollector. // See there for documentation. // // Deprecated: Use collectors.NewGoCollector instead. -func NewGoCollector() Collector { - descriptions := metrics.All() +func NewGoCollector(opts ...func(o *GoCollectorOptions)) Collector { + opt := GoCollectorOptions{EnabledCollections: defaultGoCollections} + for _, o := range opts { + o(&opt) + } + + var descriptions []metrics.Description + if opt.isEnabled(goRuntimeMetricsCollection) { + descriptions = metrics.All() + } else if opt.isEnabled(goRuntimeMemStatsCollection) { + descriptions = bestEffortLookupRM(rmForMemStats) + } // Collect all histogram samples so that we can get their buckets. // The API guarantees that the buckets are always fixed for the lifetime @@ -67,7 +161,11 @@ func NewGoCollector() Collector { histograms = append(histograms, metrics.Sample{Name: d.Name}) } } - metrics.Read(histograms) + + if len(histograms) > 0 { + metrics.Read(histograms) + } + bucketsMap := make(map[string][]float64) for i := range histograms { bucketsMap[histograms[i].Name] = histograms[i].Value.Float64Histogram().Buckets @@ -83,7 +181,7 @@ func NewGoCollector() Collector { if !ok { // Just ignore this metric; we can't do anything with it here. // If a user decides to use the latest version of Go, we don't want - // to fail here. This condition is tested elsewhere. + // to fail here. This condition is tested in TestExpectedRuntimeMetrics. continue } @@ -123,12 +221,18 @@ func NewGoCollector() Collector { } metricSet = append(metricSet, m) } + + var msMetrics memStatsMetrics + if opt.isEnabled(goRuntimeMemStatsCollection) { + msMetrics = goRuntimeMemStats() + } return &goCollector{ + opt: opt, base: newBaseGoCollector(), rmSampleBuf: sampleBuf, rmSampleMap: sampleMap, rmMetrics: metricSet, - msMetrics: goRuntimeMemStats(), + msMetrics: msMetrics, } } @@ -163,40 +267,47 @@ func (c *goCollector) Collect(ch chan<- Metric) { c.mu.Lock() defer c.mu.Unlock() - // Populate runtime/metrics sample buffer. - metrics.Read(c.rmSampleBuf) + if len(c.rmSampleBuf) > 0 { + // Populate runtime/metrics sample buffer. + metrics.Read(c.rmSampleBuf) + } - // Update all our metrics from rmSampleBuf. - for i, sample := range c.rmSampleBuf { - // N.B. switch on concrete type because it's significantly more efficient - // than checking for the Counter and Gauge interface implementations. In - // this case, we control all the types here. - switch m := c.rmMetrics[i].(type) { - case *counter: - // Guard against decreases. This should never happen, but a failure - // to do so will result in a panic, which is a harsh consequence for - // a metrics collection bug. - v0, v1 := m.get(), unwrapScalarRMValue(sample.Value) - if v1 > v0 { - m.Add(unwrapScalarRMValue(sample.Value) - m.get()) + if c.opt.isEnabled(goRuntimeMetricsCollection) { + // Collect all our metrics from rmSampleBuf. + for i, sample := range c.rmSampleBuf { + // N.B. switch on concrete type because it's significantly more efficient + // than checking for the Counter and Gauge interface implementations. In + // this case, we control all the types here. + switch m := c.rmMetrics[i].(type) { + case *counter: + // Guard against decreases. This should never happen, but a failure + // to do so will result in a panic, which is a harsh consequence for + // a metrics collection bug. + v0, v1 := m.get(), unwrapScalarRMValue(sample.Value) + if v1 > v0 { + m.Add(unwrapScalarRMValue(sample.Value) - m.get()) + } + m.Collect(ch) + case *gauge: + m.Set(unwrapScalarRMValue(sample.Value)) + m.Collect(ch) + case *batchHistogram: + m.update(sample.Value.Float64Histogram(), c.exactSumFor(sample.Name)) + m.Collect(ch) + default: + panic("unexpected metric type") } - m.Collect(ch) - case *gauge: - m.Set(unwrapScalarRMValue(sample.Value)) - m.Collect(ch) - case *batchHistogram: - m.update(sample.Value.Float64Histogram(), c.exactSumFor(sample.Name)) - m.Collect(ch) - default: - panic("unexpected metric type") } } + // ms is a dummy MemStats that we populate ourselves so that we can - // populate the old metrics from it. - var ms runtime.MemStats - memStatsFromRM(&ms, c.rmSampleMap) - for _, i := range c.msMetrics { - ch <- MustNewConstMetric(i.desc, i.valType, i.eval(&ms)) + // populate the old metrics from it if goMemStatsCollection is enabled. + if c.opt.isEnabled(goRuntimeMemStatsCollection) { + var ms runtime.MemStats + memStatsFromRM(&ms, c.rmSampleMap) + for _, i := range c.msMetrics { + ch <- MustNewConstMetric(i.desc, i.valType, i.eval(&ms)) + } } } @@ -261,35 +372,30 @@ func memStatsFromRM(ms *runtime.MemStats, rm map[string]*metrics.Sample) { // while having Mallocs - Frees still represent a live object count. // Unfortunately, MemStats doesn't actually export a large allocation count, // so it's impossible to pull this number out directly. - tinyAllocs := lookupOrZero("/gc/heap/tiny/allocs:objects") - ms.Mallocs = lookupOrZero("/gc/heap/allocs:objects") + tinyAllocs - ms.Frees = lookupOrZero("/gc/heap/frees:objects") + tinyAllocs + tinyAllocs := lookupOrZero(goGCHeapTinyAllocsObjects) + ms.Mallocs = lookupOrZero(goGCHeapAllocsObjects) + tinyAllocs + ms.Frees = lookupOrZero(goGCHeapFreesObjects) + tinyAllocs - ms.TotalAlloc = lookupOrZero("/gc/heap/allocs:bytes") - ms.Sys = lookupOrZero("/memory/classes/total:bytes") + ms.TotalAlloc = lookupOrZero(goGCHeapAllocsBytes) + ms.Sys = lookupOrZero(goMemoryClassesTotalBytes) ms.Lookups = 0 // Already always zero. - ms.HeapAlloc = lookupOrZero("/memory/classes/heap/objects:bytes") + ms.HeapAlloc = lookupOrZero(goMemoryClassesHeapObjectsBytes) ms.Alloc = ms.HeapAlloc - ms.HeapInuse = ms.HeapAlloc + lookupOrZero("/memory/classes/heap/unused:bytes") - ms.HeapReleased = lookupOrZero("/memory/classes/heap/released:bytes") - ms.HeapIdle = ms.HeapReleased + lookupOrZero("/memory/classes/heap/free:bytes") + ms.HeapInuse = ms.HeapAlloc + lookupOrZero(goMemoryClassesHeapUnusedBytes) + ms.HeapReleased = lookupOrZero(goMemoryClassesHeapReleasedBytes) + ms.HeapIdle = ms.HeapReleased + lookupOrZero(goMemoryClassesHeapFreeBytes) ms.HeapSys = ms.HeapInuse + ms.HeapIdle - ms.HeapObjects = lookupOrZero("/gc/heap/objects:objects") - ms.StackInuse = lookupOrZero("/memory/classes/heap/stacks:bytes") - ms.StackSys = ms.StackInuse + lookupOrZero("/memory/classes/os-stacks:bytes") - ms.MSpanInuse = lookupOrZero("/memory/classes/metadata/mspan/inuse:bytes") - ms.MSpanSys = ms.MSpanInuse + lookupOrZero("/memory/classes/metadata/mspan/free:bytes") - ms.MCacheInuse = lookupOrZero("/memory/classes/metadata/mcache/inuse:bytes") - ms.MCacheSys = ms.MCacheInuse + lookupOrZero("/memory/classes/metadata/mcache/free:bytes") - ms.BuckHashSys = lookupOrZero("/memory/classes/profiling/buckets:bytes") - ms.GCSys = lookupOrZero("/memory/classes/metadata/other:bytes") - ms.OtherSys = lookupOrZero("/memory/classes/other:bytes") - ms.NextGC = lookupOrZero("/gc/heap/goal:bytes") - - // N.B. LastGC is omitted because runtime.GCStats already has this. - // See https://github.com/prometheus/client_golang/issues/842#issuecomment-861812034 - // for more details. - ms.LastGC = 0 + ms.HeapObjects = lookupOrZero(goGCHeapObjects) + ms.StackInuse = lookupOrZero(goMemoryClassesHeapStacksBytes) + ms.StackSys = ms.StackInuse + lookupOrZero(goMemoryClassesOSStacksBytes) + ms.MSpanInuse = lookupOrZero(goMemoryClassesMetadataMSpanInuseBytes) + ms.MSpanSys = ms.MSpanInuse + lookupOrZero(goMemoryClassesMetadataMSPanFreeBytes) + ms.MCacheInuse = lookupOrZero(goMemoryClassesMetadataMCacheInuseBytes) + ms.MCacheSys = ms.MCacheInuse + lookupOrZero(goMemoryClassesMetadataMCacheFreeBytes) + ms.BuckHashSys = lookupOrZero(goMemoryClassesProfilingBucketsBytes) + ms.GCSys = lookupOrZero(goMemoryClassesMetadataOtherBytes) + ms.OtherSys = lookupOrZero(goMemoryClassesOtherBytes) + ms.NextGC = lookupOrZero(goGCHeapGoalBytes) // N.B. GCCPUFraction is intentionally omitted. This metric is not useful, // and often misleading due to the fact that it's an average over the lifetime @@ -324,6 +430,11 @@ type batchHistogram struct { // buckets must always be from the runtime/metrics package, following // the same conventions. func newBatchHistogram(desc *Desc, buckets []float64, hasSum bool) *batchHistogram { + // We need to remove -Inf values. runtime/metrics keeps them around. + // But -Inf bucket should not be allowed for prometheus histograms. + if buckets[0] == math.Inf(-1) { + buckets = buckets[1:] + } h := &batchHistogram{ desc: desc, buckets: buckets, @@ -382,8 +493,10 @@ func (h *batchHistogram) Write(out *dto.Metric) error { for i, count := range h.counts { totalCount += count if !h.hasSum { - // N.B. This computed sum is an underestimate. - sum += h.buckets[i] * float64(count) + if count != 0 { + // N.B. This computed sum is an underestimate. + sum += h.buckets[i] * float64(count) + } } // Skip the +Inf bucket, but only for the bucket list. diff --git a/vendor/github.com/prometheus/client_golang/prometheus/internal/go_runtime_metrics.go b/vendor/github.com/prometheus/client_golang/prometheus/internal/go_runtime_metrics.go index fe0a52180..6cbe063a2 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/internal/go_runtime_metrics.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/internal/go_runtime_metrics.go @@ -62,7 +62,7 @@ func RuntimeMetricsToProm(d *metrics.Description) (string, string, string, bool) // other data. name = strings.ReplaceAll(name, "-", "_") name = name + "_" + unit - if d.Cumulative { + if d.Cumulative && d.Kind != metrics.KindFloat64Histogram { name = name + "_total" } @@ -84,12 +84,12 @@ func RuntimeMetricsToProm(d *metrics.Description) (string, string, string, bool) func RuntimeMetricsBucketsForUnit(buckets []float64, unit string) []float64 { switch unit { case "bytes": - // Rebucket as powers of 2. - return rebucketExp(buckets, 2) + // Re-bucket as powers of 2. + return reBucketExp(buckets, 2) case "seconds": - // Rebucket as powers of 10 and then merge all buckets greater + // Re-bucket as powers of 10 and then merge all buckets greater // than 1 second into the +Inf bucket. - b := rebucketExp(buckets, 10) + b := reBucketExp(buckets, 10) for i := range b { if b[i] <= 1 { continue @@ -103,11 +103,11 @@ func RuntimeMetricsBucketsForUnit(buckets []float64, unit string) []float64 { return buckets } -// rebucketExp takes a list of bucket boundaries (lower bound inclusive) and +// reBucketExp takes a list of bucket boundaries (lower bound inclusive) and // downsamples the buckets to those a multiple of base apart. The end result // is a roughly exponential (in many cases, perfectly exponential) bucketing // scheme. -func rebucketExp(buckets []float64, base float64) []float64 { +func reBucketExp(buckets []float64, base float64) []float64 { bucket := buckets[0] var newBuckets []float64 // We may see a -Inf here, in which case, add it and skip it diff --git a/vendor/github.com/urfave/cli/v2/.gitignore b/vendor/github.com/urfave/cli/v2/.gitignore index e0c50aba4..c04fcc538 100644 --- a/vendor/github.com/urfave/cli/v2/.gitignore +++ b/vendor/github.com/urfave/cli/v2/.gitignore @@ -1,10 +1,10 @@ *.coverprofile *.orig -node_modules/ vendor .idea internal/*/built-example coverage.txt /.local/ +/site/ *.exe diff --git a/vendor/github.com/urfave/cli/v2/Makefile b/vendor/github.com/urfave/cli/v2/Makefile new file mode 100644 index 000000000..3b0e5e0bb --- /dev/null +++ b/vendor/github.com/urfave/cli/v2/Makefile @@ -0,0 +1,40 @@ +# NOTE: this Makefile is meant to provide a simplified entry point for humans to +# run all of the critical steps to verify one's changes are harmonious in +# nature. Keeping target bodies to one line each and abstaining from make magic +# are very important so that maintainers and contributors can focus their +# attention on files that are primarily Go. + +.PHONY: all +all: generate vet tag-test test check-binary-size tag-check-binary-size gfmrun v2diff + +# NOTE: this is a special catch-all rule to run any of the commands +# defined in internal/build/build.go with optional arguments passed +# via GFLAGS (global flags) and FLAGS (command-specific flags), e.g.: +# +# $ make test GFLAGS='--packages cli' +%: + go run internal/build/build.go $(GFLAGS) $* $(FLAGS) + +.PHONY: tag-test +tag-test: + go run internal/build/build.go -tags urfave_cli_no_docs test + +.PHONY: tag-check-binary-size +tag-check-binary-size: + go run internal/build/build.go -tags urfave_cli_no_docs check-binary-size + +.PHONY: gfmrun +gfmrun: + go run internal/build/build.go gfmrun docs/v2/manual.md + +.PHONY: docs +docs: + mkdocs build + +.PHONY: docs-deps +docs-deps: + pip install -r mkdocs-requirements.txt + +.PHONY: serve-docs +serve-docs: + mkdocs serve diff --git a/vendor/github.com/urfave/cli/v2/README.md b/vendor/github.com/urfave/cli/v2/README.md index 6e4d698c2..beb5963e2 100644 --- a/vendor/github.com/urfave/cli/v2/README.md +++ b/vendor/github.com/urfave/cli/v2/README.md @@ -63,7 +63,7 @@ You can use the following build tags: When set, this removes `ToMarkdown` and `ToMan` methods, so your application won't be able to call those. This reduces the resulting binary size by about -300-400 KB (measured using Go 1.18.1 on Linux/amd64), due to less dependencies. +300-400 KB (measured using Go 1.18.1 on Linux/amd64), due to fewer dependencies. ### GOPATH diff --git a/vendor/github.com/urfave/cli/v2/app.go b/vendor/github.com/urfave/cli/v2/app.go index 52ef1b0fa..463437a58 100644 --- a/vendor/github.com/urfave/cli/v2/app.go +++ b/vendor/github.com/urfave/cli/v2/app.go @@ -94,6 +94,8 @@ type App struct { // single-character bool arguments into one // i.e. foobar -o -v -> foobar -ov UseShortOptionHandling bool + // Enable suggestions for commands and flags + Suggest bool didSetup bool } @@ -264,6 +266,11 @@ func (a *App) RunContext(ctx context.Context, arguments []string) (err error) { return err } _, _ = fmt.Fprintf(a.Writer, "%s %s\n\n", "Incorrect Usage.", err.Error()) + if a.Suggest { + if suggestion, err := a.suggestFlagFromError(err, ""); err == nil { + fmt.Fprintf(a.Writer, suggestion) + } + } _ = ShowAppHelp(cCtx) return err } @@ -383,6 +390,11 @@ func (a *App) RunAsSubcommand(ctx *Context) (err error) { return err } _, _ = fmt.Fprintf(a.Writer, "%s %s\n\n", "Incorrect Usage.", err.Error()) + if a.Suggest { + if suggestion, err := a.suggestFlagFromError(err, cCtx.Command.Name); err == nil { + fmt.Fprintf(a.Writer, suggestion) + } + } _ = ShowSubcommandHelp(cCtx) return err } diff --git a/vendor/github.com/urfave/cli/v2/cli.go b/vendor/github.com/urfave/cli/v2/cli.go index 62a5bc22d..2a11c5ad4 100644 --- a/vendor/github.com/urfave/cli/v2/cli.go +++ b/vendor/github.com/urfave/cli/v2/cli.go @@ -20,4 +20,4 @@ // } package cli -//go:generate go run flag-gen/main.go flag-gen/assets_vfsdata.go +//go:generate go run internal/genflags/cmd/genflags/main.go diff --git a/vendor/github.com/urfave/cli/v2/command.go b/vendor/github.com/urfave/cli/v2/command.go index ba0169bb1..3b9b83703 100644 --- a/vendor/github.com/urfave/cli/v2/command.go +++ b/vendor/github.com/urfave/cli/v2/command.go @@ -119,6 +119,11 @@ func (c *Command) Run(ctx *Context) (err error) { } _, _ = fmt.Fprintln(cCtx.App.Writer, "Incorrect Usage:", err.Error()) _, _ = fmt.Fprintln(cCtx.App.Writer) + if ctx.App.Suggest { + if suggestion, err := ctx.App.suggestFlagFromError(err, c.Name); err == nil { + fmt.Fprintf(cCtx.App.Writer, suggestion) + } + } _ = ShowCommandHelp(cCtx, c.Name) return err } @@ -249,6 +254,7 @@ func (c *Command) startApp(ctx *Context) error { app.ErrWriter = ctx.App.ErrWriter app.ExitErrHandler = ctx.App.ExitErrHandler app.UseShortOptionHandling = ctx.App.UseShortOptionHandling + app.Suggest = ctx.App.Suggest app.categories = newCommandCategories() for _, command := range c.Subcommands { diff --git a/vendor/github.com/urfave/cli/v2/flag-spec.yaml b/vendor/github.com/urfave/cli/v2/flag-spec.yaml new file mode 100644 index 000000000..d85fa30bd --- /dev/null +++ b/vendor/github.com/urfave/cli/v2/flag-spec.yaml @@ -0,0 +1,50 @@ +# NOTE: this file is used by the tool defined in +# ./internal/genflags/cmd/genflags/main.go which uses the +# `genflags.Spec` type that maps to this file structure. + +flag_types: + bool: {} + float64: {} + int64: {} + int: {} + time.Duration: {} + uint64: {} + uint: {} + + string: + struct_fields: + - { name: TakesFile, type: bool } + Generic: + struct_fields: + - { name: TakesFile, type: bool } + Path: + struct_fields: + - { name: TakesFile, type: bool } + + Float64Slice: + value_pointer: true + skip_interfaces: + - fmt.Stringer + Int64Slice: + value_pointer: true + skip_interfaces: + - fmt.Stringer + IntSlice: + value_pointer: true + skip_interfaces: + - fmt.Stringer + StringSlice: + value_pointer: true + skip_interfaces: + - fmt.Stringer + struct_fields: + - { name: TakesFile, type: bool } + Timestamp: + value_pointer: true + struct_fields: + - { name: Layout, type: string } + + # TODO: enable UintSlice + # UintSlice: {} + # TODO: enable Uint64Slice once #1334 lands + # Uint64Slice: {} diff --git a/vendor/github.com/urfave/cli/v2/flag.go b/vendor/github.com/urfave/cli/v2/flag.go index d2a33f01f..0c61d002a 100644 --- a/vendor/github.com/urfave/cli/v2/flag.go +++ b/vendor/github.com/urfave/cli/v2/flag.go @@ -258,7 +258,7 @@ func withEnvHint(envVars []string, str string) string { return str + envText } -func flagNames(name string, aliases []string) []string { +func FlagNames(name string, aliases []string) []string { var ret []string for _, part := range append([]string{name}, aliases...) { diff --git a/vendor/github.com/urfave/cli/v2/flag_bool.go b/vendor/github.com/urfave/cli/v2/flag_bool.go index 018f9afcc..12775043f 100644 --- a/vendor/github.com/urfave/cli/v2/flag_bool.go +++ b/vendor/github.com/urfave/cli/v2/flag_bool.go @@ -6,42 +6,6 @@ import ( "strconv" ) -// BoolFlag is a flag with type bool -type BoolFlag struct { - Name string - Aliases []string - Usage string - EnvVars []string - FilePath string - Required bool - Hidden bool - Value bool - DefaultText string - Destination *bool - HasBeenSet bool -} - -// IsSet returns whether or not the flag has been set through env or file -func (f *BoolFlag) IsSet() bool { - return f.HasBeenSet -} - -// String returns a readable representation of this value -// (for usage defaults) -func (f *BoolFlag) String() string { - return FlagStringer(f) -} - -// Names returns the names of the flag -func (f *BoolFlag) Names() []string { - return flagNames(f.Name, f.Aliases) -} - -// IsRequired returns whether or not the flag is required -func (f *BoolFlag) IsRequired() bool { - return f.Required -} - // TakesValue returns true of the flag takes a value, otherwise false func (f *BoolFlag) TakesValue() bool { return false @@ -58,11 +22,6 @@ func (f *BoolFlag) GetValue() string { return "" } -// IsVisible returns true if the flag is not hidden, otherwise false -func (f *BoolFlag) IsVisible() bool { - return !f.Hidden -} - // GetDefaultText returns the default text for this flag func (f *BoolFlag) GetDefaultText() string { if f.DefaultText != "" { diff --git a/vendor/github.com/urfave/cli/v2/flag_duration.go b/vendor/github.com/urfave/cli/v2/flag_duration.go index 9c6dde7b9..236056cd4 100644 --- a/vendor/github.com/urfave/cli/v2/flag_duration.go +++ b/vendor/github.com/urfave/cli/v2/flag_duration.go @@ -6,42 +6,6 @@ import ( "time" ) -// DurationFlag is a flag with type time.Duration (see https://golang.org/pkg/time/#ParseDuration) -type DurationFlag struct { - Name string - Aliases []string - Usage string - EnvVars []string - FilePath string - Required bool - Hidden bool - Value time.Duration - DefaultText string - Destination *time.Duration - HasBeenSet bool -} - -// IsSet returns whether or not the flag has been set through env or file -func (f *DurationFlag) IsSet() bool { - return f.HasBeenSet -} - -// String returns a readable representation of this value -// (for usage defaults) -func (f *DurationFlag) String() string { - return FlagStringer(f) -} - -// Names returns the names of the flag -func (f *DurationFlag) Names() []string { - return flagNames(f.Name, f.Aliases) -} - -// IsRequired returns whether or not the flag is required -func (f *DurationFlag) IsRequired() bool { - return f.Required -} - // TakesValue returns true of the flag takes a value, otherwise false func (f *DurationFlag) TakesValue() bool { return true @@ -58,11 +22,6 @@ func (f *DurationFlag) GetValue() string { return f.Value.String() } -// IsVisible returns true if the flag is not hidden, otherwise false -func (f *DurationFlag) IsVisible() bool { - return !f.Hidden -} - // GetDefaultText returns the default text for this flag func (f *DurationFlag) GetDefaultText() string { if f.DefaultText != "" { diff --git a/vendor/github.com/urfave/cli/v2/flag_float64.go b/vendor/github.com/urfave/cli/v2/flag_float64.go index 62fdb13a4..aa2f35946 100644 --- a/vendor/github.com/urfave/cli/v2/flag_float64.go +++ b/vendor/github.com/urfave/cli/v2/flag_float64.go @@ -6,42 +6,6 @@ import ( "strconv" ) -// Float64Flag is a flag with type float64 -type Float64Flag struct { - Name string - Aliases []string - Usage string - EnvVars []string - FilePath string - Required bool - Hidden bool - Value float64 - DefaultText string - Destination *float64 - HasBeenSet bool -} - -// IsSet returns whether or not the flag has been set through env or file -func (f *Float64Flag) IsSet() bool { - return f.HasBeenSet -} - -// String returns a readable representation of this value -// (for usage defaults) -func (f *Float64Flag) String() string { - return FlagStringer(f) -} - -// Names returns the names of the flag -func (f *Float64Flag) Names() []string { - return flagNames(f.Name, f.Aliases) -} - -// IsRequired returns whether or not the flag is required -func (f *Float64Flag) IsRequired() bool { - return f.Required -} - // TakesValue returns true of the flag takes a value, otherwise false func (f *Float64Flag) TakesValue() bool { return true @@ -71,11 +35,6 @@ func (f *Float64Flag) GetEnvVars() []string { return f.EnvVars } -// IsVisible returns true if the flag is not hidden, otherwise false -func (f *Float64Flag) IsVisible() bool { - return !f.Hidden -} - // Apply populates the flag given the flag set and environment func (f *Float64Flag) Apply(set *flag.FlagSet) error { if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok { diff --git a/vendor/github.com/urfave/cli/v2/flag_float64_slice.go b/vendor/github.com/urfave/cli/v2/flag_float64_slice.go index 8be586c40..e2bfc4c97 100644 --- a/vendor/github.com/urfave/cli/v2/flag_float64_slice.go +++ b/vendor/github.com/urfave/cli/v2/flag_float64_slice.go @@ -75,41 +75,12 @@ func (f *Float64Slice) Get() interface{} { return *f } -// Float64SliceFlag is a flag with type *Float64Slice -type Float64SliceFlag struct { - Name string - Aliases []string - Usage string - EnvVars []string - FilePath string - Required bool - Hidden bool - Value *Float64Slice - DefaultText string - HasBeenSet bool -} - -// IsSet returns whether or not the flag has been set through env or file -func (f *Float64SliceFlag) IsSet() bool { - return f.HasBeenSet -} - // String returns a readable representation of this value // (for usage defaults) func (f *Float64SliceFlag) String() string { return withEnvHint(f.GetEnvVars(), stringifyFloat64SliceFlag(f)) } -// Names returns the names of the flag -func (f *Float64SliceFlag) Names() []string { - return flagNames(f.Name, f.Aliases) -} - -// IsRequired returns whether or not the flag is required -func (f *Float64SliceFlag) IsRequired() bool { - return f.Required -} - // TakesValue returns true if the flag takes a value, otherwise false func (f *Float64SliceFlag) TakesValue() bool { return true @@ -129,11 +100,6 @@ func (f *Float64SliceFlag) GetValue() string { return "" } -// IsVisible returns true if the flag is not hidden, otherwise false -func (f *Float64SliceFlag) IsVisible() bool { - return !f.Hidden -} - // GetDefaultText returns the default text for this flag func (f *Float64SliceFlag) GetDefaultText() string { if f.DefaultText != "" { diff --git a/vendor/github.com/urfave/cli/v2/flag_generic.go b/vendor/github.com/urfave/cli/v2/flag_generic.go index ae594d4d8..8be32b872 100644 --- a/vendor/github.com/urfave/cli/v2/flag_generic.go +++ b/vendor/github.com/urfave/cli/v2/flag_generic.go @@ -11,42 +11,6 @@ type Generic interface { String() string } -// GenericFlag is a flag with type Generic -type GenericFlag struct { - Name string - Aliases []string - Usage string - EnvVars []string - FilePath string - Required bool - Hidden bool - TakesFile bool - Value Generic - DefaultText string - HasBeenSet bool -} - -// IsSet returns whether or not the flag has been set through env or file -func (f *GenericFlag) IsSet() bool { - return f.HasBeenSet -} - -// String returns a readable representation of this value -// (for usage defaults) -func (f *GenericFlag) String() string { - return FlagStringer(f) -} - -// Names returns the names of the flag -func (f *GenericFlag) Names() []string { - return flagNames(f.Name, f.Aliases) -} - -// IsRequired returns whether or not the flag is required -func (f *GenericFlag) IsRequired() bool { - return f.Required -} - // TakesValue returns true of the flag takes a value, otherwise false func (f *GenericFlag) TakesValue() bool { return true @@ -66,11 +30,6 @@ func (f *GenericFlag) GetValue() string { return "" } -// IsVisible returns true if the flag is not hidden, otherwise false -func (f *GenericFlag) IsVisible() bool { - return !f.Hidden -} - // GetDefaultText returns the default text for this flag func (f *GenericFlag) GetDefaultText() string { if f.DefaultText != "" { diff --git a/vendor/github.com/urfave/cli/v2/flag_int.go b/vendor/github.com/urfave/cli/v2/flag_int.go index 63ec9a48d..3f5dec551 100644 --- a/vendor/github.com/urfave/cli/v2/flag_int.go +++ b/vendor/github.com/urfave/cli/v2/flag_int.go @@ -6,42 +6,6 @@ import ( "strconv" ) -// IntFlag is a flag with type int -type IntFlag struct { - Name string - Aliases []string - Usage string - EnvVars []string - FilePath string - Required bool - Hidden bool - Value int - DefaultText string - Destination *int - HasBeenSet bool -} - -// IsSet returns whether or not the flag has been set through env or file -func (f *IntFlag) IsSet() bool { - return f.HasBeenSet -} - -// String returns a readable representation of this value -// (for usage defaults) -func (f *IntFlag) String() string { - return FlagStringer(f) -} - -// Names returns the names of the flag -func (f *IntFlag) Names() []string { - return flagNames(f.Name, f.Aliases) -} - -// IsRequired returns whether or not the flag is required -func (f *IntFlag) IsRequired() bool { - return f.Required -} - // TakesValue returns true of the flag takes a value, otherwise false func (f *IntFlag) TakesValue() bool { return true @@ -58,11 +22,6 @@ func (f *IntFlag) GetValue() string { return fmt.Sprintf("%d", f.Value) } -// IsVisible returns true if the flag is not hidden, otherwise false -func (f *IntFlag) IsVisible() bool { - return !f.Hidden -} - // GetDefaultText returns the default text for this flag func (f *IntFlag) GetDefaultText() string { if f.DefaultText != "" { diff --git a/vendor/github.com/urfave/cli/v2/flag_int64.go b/vendor/github.com/urfave/cli/v2/flag_int64.go index 929e2d8d9..d00586625 100644 --- a/vendor/github.com/urfave/cli/v2/flag_int64.go +++ b/vendor/github.com/urfave/cli/v2/flag_int64.go @@ -6,42 +6,6 @@ import ( "strconv" ) -// Int64Flag is a flag with type int64 -type Int64Flag struct { - Name string - Aliases []string - Usage string - EnvVars []string - FilePath string - Required bool - Hidden bool - Value int64 - DefaultText string - Destination *int64 - HasBeenSet bool -} - -// IsSet returns whether or not the flag has been set through env or file -func (f *Int64Flag) IsSet() bool { - return f.HasBeenSet -} - -// String returns a readable representation of this value -// (for usage defaults) -func (f *Int64Flag) String() string { - return FlagStringer(f) -} - -// Names returns the names of the flag -func (f *Int64Flag) Names() []string { - return flagNames(f.Name, f.Aliases) -} - -// IsRequired returns whether or not the flag is required -func (f *Int64Flag) IsRequired() bool { - return f.Required -} - // TakesValue returns true of the flag takes a value, otherwise false func (f *Int64Flag) TakesValue() bool { return true @@ -58,11 +22,6 @@ func (f *Int64Flag) GetValue() string { return fmt.Sprintf("%d", f.Value) } -// IsVisible returns true if the flag is not hidden, otherwise false -func (f *Int64Flag) IsVisible() bool { - return !f.Hidden -} - // GetDefaultText returns the default text for this flag func (f *Int64Flag) GetDefaultText() string { if f.DefaultText != "" { diff --git a/vendor/github.com/urfave/cli/v2/flag_int64_slice.go b/vendor/github.com/urfave/cli/v2/flag_int64_slice.go index 08f03ddfb..b61bd7f85 100644 --- a/vendor/github.com/urfave/cli/v2/flag_int64_slice.go +++ b/vendor/github.com/urfave/cli/v2/flag_int64_slice.go @@ -76,41 +76,12 @@ func (i *Int64Slice) Get() interface{} { return *i } -// Int64SliceFlag is a flag with type *Int64Slice -type Int64SliceFlag struct { - Name string - Aliases []string - Usage string - EnvVars []string - FilePath string - Required bool - Hidden bool - Value *Int64Slice - DefaultText string - HasBeenSet bool -} - -// IsSet returns whether or not the flag has been set through env or file -func (f *Int64SliceFlag) IsSet() bool { - return f.HasBeenSet -} - // String returns a readable representation of this value // (for usage defaults) func (f *Int64SliceFlag) String() string { return withEnvHint(f.GetEnvVars(), stringifyInt64SliceFlag(f)) } -// Names returns the names of the flag -func (f *Int64SliceFlag) Names() []string { - return flagNames(f.Name, f.Aliases) -} - -// IsRequired returns whether or not the flag is required -func (f *Int64SliceFlag) IsRequired() bool { - return f.Required -} - // TakesValue returns true of the flag takes a value, otherwise false func (f *Int64SliceFlag) TakesValue() bool { return true @@ -130,11 +101,6 @@ func (f *Int64SliceFlag) GetValue() string { return "" } -// IsVisible returns true if the flag is not hidden, otherwise false -func (f *Int64SliceFlag) IsVisible() bool { - return !f.Hidden -} - // GetDefaultText returns the default text for this flag func (f *Int64SliceFlag) GetDefaultText() string { if f.DefaultText != "" { diff --git a/vendor/github.com/urfave/cli/v2/flag_int_slice.go b/vendor/github.com/urfave/cli/v2/flag_int_slice.go index e5b9e21e5..f9713cc4d 100644 --- a/vendor/github.com/urfave/cli/v2/flag_int_slice.go +++ b/vendor/github.com/urfave/cli/v2/flag_int_slice.go @@ -87,41 +87,12 @@ func (i *IntSlice) Get() interface{} { return *i } -// IntSliceFlag is a flag with type *IntSlice -type IntSliceFlag struct { - Name string - Aliases []string - Usage string - EnvVars []string - FilePath string - Required bool - Hidden bool - Value *IntSlice - DefaultText string - HasBeenSet bool -} - -// IsSet returns whether or not the flag has been set through env or file -func (f *IntSliceFlag) IsSet() bool { - return f.HasBeenSet -} - // String returns a readable representation of this value // (for usage defaults) func (f *IntSliceFlag) String() string { return withEnvHint(f.GetEnvVars(), stringifyIntSliceFlag(f)) } -// Names returns the names of the flag -func (f *IntSliceFlag) Names() []string { - return flagNames(f.Name, f.Aliases) -} - -// IsRequired returns whether or not the flag is required -func (f *IntSliceFlag) IsRequired() bool { - return f.Required -} - // TakesValue returns true of the flag takes a value, otherwise false func (f *IntSliceFlag) TakesValue() bool { return true @@ -141,11 +112,6 @@ func (f *IntSliceFlag) GetValue() string { return "" } -// IsVisible returns true if the flag is not hidden, otherwise false -func (f *IntSliceFlag) IsVisible() bool { - return !f.Hidden -} - // GetDefaultText returns the default text for this flag func (f *IntSliceFlag) GetDefaultText() string { if f.DefaultText != "" { diff --git a/vendor/github.com/urfave/cli/v2/flag_path.go b/vendor/github.com/urfave/cli/v2/flag_path.go index a7a213e87..b0c2215b2 100644 --- a/vendor/github.com/urfave/cli/v2/flag_path.go +++ b/vendor/github.com/urfave/cli/v2/flag_path.go @@ -5,41 +5,7 @@ import ( "fmt" ) -type PathFlag struct { - Name string - Aliases []string - Usage string - EnvVars []string - FilePath string - Required bool - Hidden bool - TakesFile bool - Value string - DefaultText string - Destination *string - HasBeenSet bool -} - -// IsSet returns whether or not the flag has been set through env or file -func (f *PathFlag) IsSet() bool { - return f.HasBeenSet -} - -// String returns a readable representation of this value -// (for usage defaults) -func (f *PathFlag) String() string { - return FlagStringer(f) -} - -// Names returns the names of the flag -func (f *PathFlag) Names() []string { - return flagNames(f.Name, f.Aliases) -} - -// IsRequired returns whether or not the flag is required -func (f *PathFlag) IsRequired() bool { - return f.Required -} +type Path = string // TakesValue returns true of the flag takes a value, otherwise false func (f *PathFlag) TakesValue() bool { @@ -57,11 +23,6 @@ func (f *PathFlag) GetValue() string { return f.Value } -// IsVisible returns true if the flag is not hidden, otherwise false -func (f *PathFlag) IsVisible() bool { - return !f.Hidden -} - // GetDefaultText returns the default text for this flag func (f *PathFlag) GetDefaultText() string { if f.DefaultText != "" { diff --git a/vendor/github.com/urfave/cli/v2/flag_string.go b/vendor/github.com/urfave/cli/v2/flag_string.go index 0365762d6..24adbe905 100644 --- a/vendor/github.com/urfave/cli/v2/flag_string.go +++ b/vendor/github.com/urfave/cli/v2/flag_string.go @@ -5,43 +5,6 @@ import ( "fmt" ) -// StringFlag is a flag with type string -type StringFlag struct { - Name string - Aliases []string - Usage string - EnvVars []string - FilePath string - Required bool - Hidden bool - TakesFile bool - Value string - DefaultText string - Destination *string - HasBeenSet bool -} - -// IsSet returns whether or not the flag has been set through env or file -func (f *StringFlag) IsSet() bool { - return f.HasBeenSet -} - -// String returns a readable representation of this value -// (for usage defaults) -func (f *StringFlag) String() string { - return FlagStringer(f) -} - -// Names returns the names of the flag -func (f *StringFlag) Names() []string { - return flagNames(f.Name, f.Aliases) -} - -// IsRequired returns whether or not the flag is required -func (f *StringFlag) IsRequired() bool { - return f.Required -} - // TakesValue returns true of the flag takes a value, otherwise false func (f *StringFlag) TakesValue() bool { return true @@ -58,11 +21,6 @@ func (f *StringFlag) GetValue() string { return f.Value } -// IsVisible returns true if the flag is not hidden, otherwise false -func (f *StringFlag) IsVisible() bool { - return !f.Hidden -} - // GetDefaultText returns the default text for this flag func (f *StringFlag) GetDefaultText() string { if f.DefaultText != "" { diff --git a/vendor/github.com/urfave/cli/v2/flag_string_slice.go b/vendor/github.com/urfave/cli/v2/flag_string_slice.go index 82aa1a492..d0195d547 100644 --- a/vendor/github.com/urfave/cli/v2/flag_string_slice.go +++ b/vendor/github.com/urfave/cli/v2/flag_string_slice.go @@ -70,43 +70,12 @@ func (s *StringSlice) Get() interface{} { return *s } -// StringSliceFlag is a flag with type *StringSlice -type StringSliceFlag struct { - Name string - Aliases []string - Usage string - EnvVars []string - FilePath string - Required bool - Hidden bool - TakesFile bool - Value *StringSlice - DefaultText string - HasBeenSet bool - Destination *StringSlice -} - -// IsSet returns whether or not the flag has been set through env or file -func (f *StringSliceFlag) IsSet() bool { - return f.HasBeenSet -} - // String returns a readable representation of this value // (for usage defaults) func (f *StringSliceFlag) String() string { return withEnvHint(f.GetEnvVars(), stringifyStringSliceFlag(f)) } -// Names returns the names of the flag -func (f *StringSliceFlag) Names() []string { - return flagNames(f.Name, f.Aliases) -} - -// IsRequired returns whether or not the flag is required -func (f *StringSliceFlag) IsRequired() bool { - return f.Required -} - // TakesValue returns true of the flag takes a value, otherwise false func (f *StringSliceFlag) TakesValue() bool { return true @@ -126,11 +95,6 @@ func (f *StringSliceFlag) GetValue() string { return "" } -// IsVisible returns true if the flag is not hidden, otherwise false -func (f *StringSliceFlag) IsVisible() bool { - return !f.Hidden -} - // GetDefaultText returns the default text for this flag func (f *StringSliceFlag) GetDefaultText() string { if f.DefaultText != "" { diff --git a/vendor/github.com/urfave/cli/v2/flag_timestamp.go b/vendor/github.com/urfave/cli/v2/flag_timestamp.go index 7bda8ee22..ed480cfc9 100644 --- a/vendor/github.com/urfave/cli/v2/flag_timestamp.go +++ b/vendor/github.com/urfave/cli/v2/flag_timestamp.go @@ -58,43 +58,6 @@ func (t *Timestamp) Get() interface{} { return *t } -// TimestampFlag is a flag with type time -type TimestampFlag struct { - Name string - Aliases []string - Usage string - EnvVars []string - FilePath string - Required bool - Hidden bool - Layout string - Value *Timestamp - DefaultText string - HasBeenSet bool - Destination *Timestamp -} - -// IsSet returns whether or not the flag has been set through env or file -func (f *TimestampFlag) IsSet() bool { - return f.HasBeenSet -} - -// String returns a readable representation of this value -// (for usage defaults) -func (f *TimestampFlag) String() string { - return FlagStringer(f) -} - -// Names returns the names of the flag -func (f *TimestampFlag) Names() []string { - return flagNames(f.Name, f.Aliases) -} - -// IsRequired returns whether or not the flag is required -func (f *TimestampFlag) IsRequired() bool { - return f.Required -} - // TakesValue returns true of the flag takes a value, otherwise false func (f *TimestampFlag) TakesValue() bool { return true @@ -114,11 +77,6 @@ func (f *TimestampFlag) GetValue() string { return "" } -// IsVisible returns true if the flag is not hidden, otherwise false -func (f *TimestampFlag) IsVisible() bool { - return !f.Hidden -} - // GetDefaultText returns the default text for this flag func (f *TimestampFlag) GetDefaultText() string { if f.DefaultText != "" { diff --git a/vendor/github.com/urfave/cli/v2/flag_uint.go b/vendor/github.com/urfave/cli/v2/flag_uint.go index 0fd0777d7..1ec9713f8 100644 --- a/vendor/github.com/urfave/cli/v2/flag_uint.go +++ b/vendor/github.com/urfave/cli/v2/flag_uint.go @@ -6,42 +6,6 @@ import ( "strconv" ) -// UintFlag is a flag with type uint -type UintFlag struct { - Name string - Aliases []string - Usage string - EnvVars []string - FilePath string - Required bool - Hidden bool - Value uint - DefaultText string - Destination *uint - HasBeenSet bool -} - -// IsSet returns whether or not the flag has been set through env or file -func (f *UintFlag) IsSet() bool { - return f.HasBeenSet -} - -// String returns a readable representation of this value -// (for usage defaults) -func (f *UintFlag) String() string { - return FlagStringer(f) -} - -// Names returns the names of the flag -func (f *UintFlag) Names() []string { - return flagNames(f.Name, f.Aliases) -} - -// IsRequired returns whether or not the flag is required -func (f *UintFlag) IsRequired() bool { - return f.Required -} - // TakesValue returns true of the flag takes a value, otherwise false func (f *UintFlag) TakesValue() bool { return true @@ -52,11 +16,6 @@ func (f *UintFlag) GetUsage() string { return f.Usage } -// IsVisible returns true if the flag is not hidden, otherwise false -func (f *UintFlag) IsVisible() bool { - return !f.Hidden -} - // Apply populates the flag given the flag set and environment func (f *UintFlag) Apply(set *flag.FlagSet) error { if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok { diff --git a/vendor/github.com/urfave/cli/v2/flag_uint64.go b/vendor/github.com/urfave/cli/v2/flag_uint64.go index c8314ac00..55ba08a0c 100644 --- a/vendor/github.com/urfave/cli/v2/flag_uint64.go +++ b/vendor/github.com/urfave/cli/v2/flag_uint64.go @@ -6,42 +6,6 @@ import ( "strconv" ) -// Uint64Flag is a flag with type uint64 -type Uint64Flag struct { - Name string - Aliases []string - Usage string - EnvVars []string - FilePath string - Required bool - Hidden bool - Value uint64 - DefaultText string - Destination *uint64 - HasBeenSet bool -} - -// IsSet returns whether or not the flag has been set through env or file -func (f *Uint64Flag) IsSet() bool { - return f.HasBeenSet -} - -// String returns a readable representation of this value -// (for usage defaults) -func (f *Uint64Flag) String() string { - return FlagStringer(f) -} - -// Names returns the names of the flag -func (f *Uint64Flag) Names() []string { - return flagNames(f.Name, f.Aliases) -} - -// IsRequired returns whether or not the flag is required -func (f *Uint64Flag) IsRequired() bool { - return f.Required -} - // TakesValue returns true of the flag takes a value, otherwise false func (f *Uint64Flag) TakesValue() bool { return true @@ -52,11 +16,6 @@ func (f *Uint64Flag) GetUsage() string { return f.Usage } -// IsVisible returns true if the flag is not hidden, otherwise false -func (f *Uint64Flag) IsVisible() bool { - return !f.Hidden -} - // Apply populates the flag given the flag set and environment func (f *Uint64Flag) Apply(set *flag.FlagSet) error { if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok { diff --git a/vendor/github.com/urfave/cli/v2/godoc-current.txt b/vendor/github.com/urfave/cli/v2/godoc-current.txt new file mode 100644 index 000000000..90700ebde --- /dev/null +++ b/vendor/github.com/urfave/cli/v2/godoc-current.txt @@ -0,0 +1,2092 @@ +package cli // import "github.com/urfave/cli/v2" + +Package cli provides a minimal framework for creating and organizing command +line Go applications. cli is designed to be easy to understand and write, +the most simple cli application can be written as follows: + + func main() { + (&cli.App{}).Run(os.Args) + } + +Of course this application does not do much, so let's make this an actual +application: + + func main() { + app := &cli.App{ + Name: "greet", + Usage: "say a greeting", + Action: func(c *cli.Context) error { + fmt.Println("Greetings") + return nil + }, + } + + app.Run(os.Args) + } + +VARIABLES + +var AppHelpTemplate = `NAME: + {{.Name}}{{if .Usage}} - {{.Usage}}{{end}} + +USAGE: + {{if .UsageText}}{{.UsageText | nindent 3 | trim}}{{else}}{{.HelpName}} {{if .VisibleFlags}}[global options]{{end}}{{if .Commands}} command [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{end}}{{if .Version}}{{if not .HideVersion}} + +VERSION: + {{.Version}}{{end}}{{end}}{{if .Description}} + +DESCRIPTION: + {{.Description | nindent 3 | trim}}{{end}}{{if len .Authors}} + +AUTHOR{{with $length := len .Authors}}{{if ne 1 $length}}S{{end}}{{end}}: + {{range $index, $author := .Authors}}{{if $index}} + {{end}}{{$author}}{{end}}{{end}}{{if .VisibleCommands}} + +COMMANDS:{{range .VisibleCategories}}{{if .Name}} + {{.Name}}:{{range .VisibleCommands}} + {{join .Names ", "}}{{"\t"}}{{.Usage}}{{end}}{{else}}{{range .VisibleCommands}} + {{join .Names ", "}}{{"\t"}}{{.Usage}}{{end}}{{end}}{{end}}{{end}}{{if .VisibleFlags}} + +GLOBAL OPTIONS: + {{range $index, $option := .VisibleFlags}}{{if $index}} + {{end}}{{$option}}{{end}}{{end}}{{if .Copyright}} + +COPYRIGHT: + {{.Copyright}}{{end}} +` + AppHelpTemplate is the text template for the Default help topic. cli.go uses + text/template to render templates. You can render custom help text by + setting this variable. + +var CommandHelpTemplate = `NAME: + {{.HelpName}} - {{.Usage}} + +USAGE: + {{if .UsageText}}{{.UsageText | nindent 3 | trim}}{{else}}{{.HelpName}}{{if .VisibleFlags}} [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{end}}{{if .Category}} + +CATEGORY: + {{.Category}}{{end}}{{if .Description}} + +DESCRIPTION: + {{.Description | nindent 3 | trim}}{{end}}{{if .VisibleFlags}} + +OPTIONS: + {{range .VisibleFlags}}{{.}} + {{end}}{{end}} +` + CommandHelpTemplate is the text template for the command help topic. cli.go + uses text/template to render templates. You can render custom help text by + setting this variable. + +var ErrWriter io.Writer = os.Stderr + ErrWriter is used to write errors to the user. This can be anything + implementing the io.Writer interface and defaults to os.Stderr. + +var FishCompletionTemplate = `# {{ .App.Name }} fish shell completion + +function __fish_{{ .App.Name }}_no_subcommand --description 'Test if there has been any subcommand yet' + for i in (commandline -opc) + if contains -- $i{{ range $v := .AllCommands }} {{ $v }}{{ end }} + return 1 + end + end + return 0 +end + +{{ range $v := .Completions }}{{ $v }} +{{ end }}` +var MarkdownDocTemplate = `{{if gt .SectionNum 0}}% {{ .App.Name }} {{ .SectionNum }} + +{{end}}# NAME + +{{ .App.Name }}{{ if .App.Usage }} - {{ .App.Usage }}{{ end }} + +# SYNOPSIS + +{{ .App.Name }} +{{ if .SynopsisArgs }} +` + "```" + ` +{{ range $v := .SynopsisArgs }}{{ $v }}{{ end }}` + "```" + ` +{{ end }}{{ if .App.Description }} +# DESCRIPTION + +{{ .App.Description }} +{{ end }} +**Usage**: + +` + "```" + `{{ if .App.UsageText }} +{{ .App.UsageText }} +{{ else }} +{{ .App.Name }} [GLOBAL OPTIONS] command [COMMAND OPTIONS] [ARGUMENTS...] +{{ end }}` + "```" + ` +{{ if .GlobalArgs }} +# GLOBAL OPTIONS +{{ range $v := .GlobalArgs }} +{{ $v }}{{ end }} +{{ end }}{{ if .Commands }} +# COMMANDS +{{ range $v := .Commands }} +{{ $v }}{{ end }}{{ end }}` +var OsExiter = os.Exit + OsExiter is the function used when the app exits. If not set defaults to + os.Exit. + +var SubcommandHelpTemplate = `NAME: + {{.HelpName}} - {{.Usage}} + +USAGE: + {{if .UsageText}}{{.UsageText | nindent 3 | trim}}{{else}}{{.HelpName}} command{{if .VisibleFlags}} [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{end}}{{if .Description}} + +DESCRIPTION: + {{.Description | nindent 3 | trim}}{{end}} + +COMMANDS:{{range .VisibleCategories}}{{if .Name}} + {{.Name}}:{{range .VisibleCommands}} + {{join .Names ", "}}{{"\t"}}{{.Usage}}{{end}}{{else}}{{range .VisibleCommands}} + {{join .Names ", "}}{{"\t"}}{{.Usage}}{{end}}{{end}}{{end}}{{if .VisibleFlags}} + +OPTIONS: + {{range .VisibleFlags}}{{.}} + {{end}}{{end}} +` + SubcommandHelpTemplate is the text template for the subcommand help topic. + cli.go uses text/template to render templates. You can render custom help + text by setting this variable. + +var VersionPrinter = printVersion + VersionPrinter prints the version for the App + +var HelpPrinter helpPrinter = printHelp + HelpPrinter is a function that writes the help output. If not set + explicitly, this calls HelpPrinterCustom using only the default template + functions. + + If custom logic for printing help is required, this function can be + overridden. If the ExtraInfo field is defined on an App, this function + should not be modified, as HelpPrinterCustom will be used directly in order + to capture the extra information. + +var HelpPrinterCustom helpPrinterCustom = printHelpCustom + HelpPrinterCustom is a function that writes the help output. It is used as + the default implementation of HelpPrinter, and may be called directly if the + ExtraInfo field is set on an App. + + +FUNCTIONS + +func DefaultAppComplete(cCtx *Context) + DefaultAppComplete prints the list of subcommands as the default app + completion method + +func DefaultCompleteWithFlags(cmd *Command) func(cCtx *Context) +func FlagNames(name string, aliases []string) []string +func HandleAction(action interface{}, cCtx *Context) (err error) + HandleAction attempts to figure out which Action signature was used. If it's + an ActionFunc or a func with the legacy signature for Action, the func is + run! + +func HandleExitCoder(err error) + HandleExitCoder handles errors implementing ExitCoder by printing their + message and calling OsExiter with the given exit code. + + If the given error instead implements MultiError, each error will be checked + for the ExitCoder interface, and OsExiter will be called with the last exit + code found, or exit code 1 if no ExitCoder is found. + + This function is the default error-handling behavior for an App. + +func ShowAppHelp(cCtx *Context) error + ShowAppHelp is an action that displays the help. + +func ShowAppHelpAndExit(c *Context, exitCode int) + ShowAppHelpAndExit - Prints the list of subcommands for the app and exits + with exit code. + +func ShowCommandCompletions(ctx *Context, command string) + ShowCommandCompletions prints the custom completions for a given command + +func ShowCommandHelp(ctx *Context, command string) error + ShowCommandHelp prints help for the given command + +func ShowCommandHelpAndExit(c *Context, command string, code int) + ShowCommandHelpAndExit - exits with code after showing help + +func ShowCompletions(cCtx *Context) + ShowCompletions prints the lists of commands within a given context + +func ShowSubcommandHelp(cCtx *Context) error + ShowSubcommandHelp prints help for the given subcommand + +func ShowSubcommandHelpAndExit(c *Context, exitCode int) + ShowSubcommandHelpAndExit - Prints help for the given subcommand and exits + with exit code. + +func ShowVersion(cCtx *Context) + ShowVersion prints the version number of the App + + +TYPES + +type ActionFunc func(*Context) error + ActionFunc is the action to execute when no subcommands are specified + +type AfterFunc func(*Context) error + AfterFunc is an action to execute after any subcommands are run, but after + the subcommand has finished it is run even if Action() panics + +type App struct { + // The name of the program. Defaults to path.Base(os.Args[0]) + Name string + // Full name of command for help, defaults to Name + HelpName string + // Description of the program. + Usage string + // Text to override the USAGE section of help + UsageText string + // Description of the program argument format. + ArgsUsage string + // Version of the program + Version string + // Description of the program + Description string + // List of commands to execute + Commands []*Command + // List of flags to parse + Flags []Flag + // Boolean to enable bash completion commands + EnableBashCompletion bool + // Boolean to hide built-in help command and help flag + HideHelp bool + // Boolean to hide built-in help command but keep help flag. + // Ignored if HideHelp is true. + HideHelpCommand bool + // Boolean to hide built-in version flag and the VERSION section of help + HideVersion bool + + // An action to execute when the shell completion flag is set + BashComplete BashCompleteFunc + // An action to execute before any subcommands are run, but after the context is ready + // If a non-nil error is returned, no subcommands are run + Before BeforeFunc + // An action to execute after any subcommands are run, but after the subcommand has finished + // It is run even if Action() panics + After AfterFunc + // The action to execute when no subcommands are specified + Action ActionFunc + // Execute this function if the proper command cannot be found + CommandNotFound CommandNotFoundFunc + // Execute this function if a usage error occurs + OnUsageError OnUsageErrorFunc + // Compilation date + Compiled time.Time + // List of all authors who contributed + Authors []*Author + // Copyright of the binary if any + Copyright string + // Reader reader to write input to (useful for tests) + Reader io.Reader + // Writer writer to write output to + Writer io.Writer + // ErrWriter writes error output + ErrWriter io.Writer + // ExitErrHandler processes any error encountered while running an App before + // it is returned to the caller. If no function is provided, HandleExitCoder + // is used as the default behavior. + ExitErrHandler ExitErrHandlerFunc + // Other custom info + Metadata map[string]interface{} + // Carries a function which returns app specific info. + ExtraInfo func() map[string]string + // CustomAppHelpTemplate the text template for app help topic. + // cli.go uses text/template to render templates. You can + // render custom help text by setting this variable. + CustomAppHelpTemplate string + // Boolean to enable short-option handling so user can combine several + // single-character bool arguments into one + // i.e. foobar -o -v -> foobar -ov + UseShortOptionHandling bool + // Enable suggestions for commands and flags + Suggest bool + + // Has unexported fields. +} + App is the main structure of a cli application. It is recommended that an + app be created with the cli.NewApp() function + +func NewApp() *App + NewApp creates a new cli Application with some reasonable defaults for Name, + Usage, Version and Action. + +func (a *App) Command(name string) *Command + Command returns the named command on App. Returns nil if the command does + not exist + +func (a *App) Run(arguments []string) (err error) + Run is the entry point to the cli app. Parses the arguments slice and routes + to the proper flag/args combination + +func (a *App) RunAndExitOnError() + RunAndExitOnError calls .Run() and exits non-zero if an error was returned + + Deprecated: instead you should return an error that fulfills cli.ExitCoder + to cli.App.Run. This will cause the application to exit with the given error + code in the cli.ExitCoder + +func (a *App) RunAsSubcommand(ctx *Context) (err error) + RunAsSubcommand invokes the subcommand given the context, parses ctx.Args() + to generate command-specific flags + +func (a *App) RunContext(ctx context.Context, arguments []string) (err error) + RunContext is like Run except it takes a Context that will be passed to its + commands and sub-commands. Through this, you can propagate timeouts and + cancellation requests + +func (a *App) Setup() + Setup runs initialization code to ensure all data structures are ready for + `Run` or inspection prior to `Run`. It is internally called by `Run`, but + will return early if setup has already happened. + +func (a *App) ToFishCompletion() (string, error) + ToFishCompletion creates a fish completion string for the `*App` The + function errors if either parsing or writing of the string fails. + +func (a *App) ToMan() (string, error) + ToMan creates a man page string for the `*App` The function errors if either + parsing or writing of the string fails. + +func (a *App) ToManWithSection(sectionNumber int) (string, error) + ToMan creates a man page string with section number for the `*App` The + function errors if either parsing or writing of the string fails. + +func (a *App) ToMarkdown() (string, error) + ToMarkdown creates a markdown string for the `*App` The function errors if + either parsing or writing of the string fails. + +func (a *App) VisibleCategories() []CommandCategory + VisibleCategories returns a slice of categories and commands that are + Hidden=false + +func (a *App) VisibleCommands() []*Command + VisibleCommands returns a slice of the Commands with Hidden=false + +func (a *App) VisibleFlags() []Flag + VisibleFlags returns a slice of the Flags with Hidden=false + +type Args interface { + // Get returns the nth argument, or else a blank string + Get(n int) string + // First returns the first argument, or else a blank string + First() string + // Tail returns the rest of the arguments (not the first one) + // or else an empty string slice + Tail() []string + // Len returns the length of the wrapped slice + Len() int + // Present checks if there are any arguments present + Present() bool + // Slice returns a copy of the internal slice + Slice() []string +} + +type Author struct { + Name string // The Authors name + Email string // The Authors email +} + Author represents someone who has contributed to a cli project. + +func (a *Author) String() string + String makes Author comply to the Stringer interface, to allow an easy print + in the templating process + +type BashCompleteFunc func(*Context) + BashCompleteFunc is an action to execute when the shell completion flag is + set + +type BeforeFunc func(*Context) error + BeforeFunc is an action to execute before any subcommands are run, but after + the context is ready if a non-nil error is returned, no subcommands are run + +type BoolFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value bool + Destination *bool + + Aliases []string + EnvVars []string +} + BoolFlag is a flag with type bool + +func (f *BoolFlag) Apply(set *flag.FlagSet) error + Apply populates the flag given the flag set and environment + +func (f *BoolFlag) Get(ctx *Context) bool + Get returns the flag’s value in the given Context. + +func (f *BoolFlag) GetDefaultText() string + GetDefaultText returns the default text for this flag + +func (f *BoolFlag) GetEnvVars() []string + GetEnvVars returns the env vars for this flag + +func (f *BoolFlag) GetUsage() string + GetUsage returns the usage string for the flag + +func (f *BoolFlag) GetValue() string + GetValue returns the flags value as string representation and an empty + string if the flag takes no value at all. + +func (f *BoolFlag) IsRequired() bool + IsRequired returns whether or not the flag is required + +func (f *BoolFlag) IsSet() bool + IsSet returns whether or not the flag has been set through env or file + +func (f *BoolFlag) IsVisible() bool + IsVisible returns true if the flag is not hidden, otherwise false + +func (f *BoolFlag) Names() []string + Names returns the names of the flag + +func (f *BoolFlag) String() string + String returns a readable representation of this value (for usage defaults) + +func (f *BoolFlag) TakesValue() bool + TakesValue returns true of the flag takes a value, otherwise false + +type Command struct { + // The name of the command + Name string + // A list of aliases for the command + Aliases []string + // A short description of the usage of this command + Usage string + // Custom text to show on USAGE section of help + UsageText string + // A longer explanation of how the command works + Description string + // A short description of the arguments of this command + ArgsUsage string + // The category the command is part of + Category string + // The function to call when checking for bash command completions + BashComplete BashCompleteFunc + // An action to execute before any sub-subcommands are run, but after the context is ready + // If a non-nil error is returned, no sub-subcommands are run + Before BeforeFunc + // An action to execute after any subcommands are run, but after the subcommand has finished + // It is run even if Action() panics + After AfterFunc + // The function to call when this command is invoked + Action ActionFunc + // Execute this function if a usage error occurs. + OnUsageError OnUsageErrorFunc + // List of child commands + Subcommands []*Command + // List of flags to parse + Flags []Flag + // Treat all flags as normal arguments if true + SkipFlagParsing bool + // Boolean to hide built-in help command and help flag + HideHelp bool + // Boolean to hide built-in help command but keep help flag + // Ignored if HideHelp is true. + HideHelpCommand bool + // Boolean to hide this command from help or completion + Hidden bool + // Boolean to enable short-option handling so user can combine several + // single-character bool arguments into one + // i.e. foobar -o -v -> foobar -ov + UseShortOptionHandling bool + + // Full name of command for help, defaults to full command name, including parent commands. + HelpName string + + // CustomHelpTemplate the text template for the command help topic. + // cli.go uses text/template to render templates. You can + // render custom help text by setting this variable. + CustomHelpTemplate string + // Has unexported fields. +} + Command is a subcommand for a cli.App. + +func (c *Command) FullName() string + FullName returns the full name of the command. For subcommands this ensures + that parent commands are part of the command path + +func (c *Command) HasName(name string) bool + HasName returns true if Command.Name matches given name + +func (c *Command) Names() []string + Names returns the names including short names and aliases. + +func (c *Command) Run(ctx *Context) (err error) + Run invokes the command given the context, parses ctx.Args() to generate + command-specific flags + +func (c *Command) VisibleFlags() []Flag + VisibleFlags returns a slice of the Flags with Hidden=false + +type CommandCategories interface { + // AddCommand adds a command to a category, creating a new category if necessary. + AddCommand(category string, command *Command) + // categories returns a copy of the category slice + Categories() []CommandCategory +} + CommandCategories interface allows for category manipulation + +type CommandCategory interface { + // Name returns the category name string + Name() string + // VisibleCommands returns a slice of the Commands with Hidden=false + VisibleCommands() []*Command +} + CommandCategory is a category containing commands. + +type CommandNotFoundFunc func(*Context, string) + CommandNotFoundFunc is executed if the proper command cannot be found + +type Commands []*Command + +type CommandsByName []*Command + +func (c CommandsByName) Len() int + +func (c CommandsByName) Less(i, j int) bool + +func (c CommandsByName) Swap(i, j int) + +type Context struct { + context.Context + App *App + Command *Command + + // Has unexported fields. +} + Context is a type that is passed through to each Handler action in a cli + application. Context can be used to retrieve context-specific args and + parsed command-line options. + +func NewContext(app *App, set *flag.FlagSet, parentCtx *Context) *Context + NewContext creates a new context. For use in when invoking an App or Command + action. + +func (cCtx *Context) Args() Args + Args returns the command line arguments associated with the context. + +func (cCtx *Context) Bool(name string) bool + Bool looks up the value of a local BoolFlag, returns false if not found + +func (cCtx *Context) Duration(name string) time.Duration + Duration looks up the value of a local DurationFlag, returns 0 if not found + +func (cCtx *Context) FlagNames() []string + FlagNames returns a slice of flag names used by the this context and all of + its parent contexts. + +func (cCtx *Context) Float64(name string) float64 + Float64 looks up the value of a local Float64Flag, returns 0 if not found + +func (cCtx *Context) Float64Slice(name string) []float64 + Float64Slice looks up the value of a local Float64SliceFlag, returns nil if + not found + +func (cCtx *Context) Generic(name string) interface{} + Generic looks up the value of a local GenericFlag, returns nil if not found + +func (cCtx *Context) Int(name string) int + Int looks up the value of a local IntFlag, returns 0 if not found + +func (cCtx *Context) Int64(name string) int64 + Int64 looks up the value of a local Int64Flag, returns 0 if not found + +func (cCtx *Context) Int64Slice(name string) []int64 + Int64Slice looks up the value of a local Int64SliceFlag, returns nil if not + found + +func (cCtx *Context) IntSlice(name string) []int + IntSlice looks up the value of a local IntSliceFlag, returns nil if not + found + +func (cCtx *Context) IsSet(name string) bool + IsSet determines if the flag was actually set + +func (cCtx *Context) Lineage() []*Context + Lineage returns *this* context and all of its ancestor contexts in order + from child to parent + +func (cCtx *Context) LocalFlagNames() []string + LocalFlagNames returns a slice of flag names used in this context. + +func (cCtx *Context) NArg() int + NArg returns the number of the command line arguments. + +func (cCtx *Context) NumFlags() int + NumFlags returns the number of flags set + +func (cCtx *Context) Path(name string) string + Path looks up the value of a local PathFlag, returns "" if not found + +func (cCtx *Context) Set(name, value string) error + Set sets a context flag to a value. + +func (cCtx *Context) String(name string) string + String looks up the value of a local StringFlag, returns "" if not found + +func (cCtx *Context) StringSlice(name string) []string + StringSlice looks up the value of a local StringSliceFlag, returns nil if + not found + +func (cCtx *Context) Timestamp(name string) *time.Time + Timestamp gets the timestamp from a flag name + +func (cCtx *Context) Uint(name string) uint + Uint looks up the value of a local UintFlag, returns 0 if not found + +func (cCtx *Context) Uint64(name string) uint64 + Uint64 looks up the value of a local Uint64Flag, returns 0 if not found + +func (cCtx *Context) Value(name string) interface{} + Value returns the value of the flag corresponding to `name` + +type DocGenerationFlag interface { + Flag + + // TakesValue returns true if the flag takes a value, otherwise false + TakesValue() bool + + // GetUsage returns the usage string for the flag + GetUsage() string + + // GetValue returns the flags value as string representation and an empty + // string if the flag takes no value at all. + GetValue() string + + // GetDefaultText returns the default text for this flag + GetDefaultText() string + + // GetEnvVars returns the env vars for this flag + GetEnvVars() []string +} + DocGenerationFlag is an interface that allows documentation generation for + the flag + +type DurationFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value time.Duration + Destination *time.Duration + + Aliases []string + EnvVars []string +} + DurationFlag is a flag with type time.Duration + +func (f *DurationFlag) Apply(set *flag.FlagSet) error + Apply populates the flag given the flag set and environment + +func (f *DurationFlag) Get(ctx *Context) time.Duration + Get returns the flag’s value in the given Context. + +func (f *DurationFlag) GetDefaultText() string + GetDefaultText returns the default text for this flag + +func (f *DurationFlag) GetEnvVars() []string + GetEnvVars returns the env vars for this flag + +func (f *DurationFlag) GetUsage() string + GetUsage returns the usage string for the flag + +func (f *DurationFlag) GetValue() string + GetValue returns the flags value as string representation and an empty + string if the flag takes no value at all. + +func (f *DurationFlag) IsRequired() bool + IsRequired returns whether or not the flag is required + +func (f *DurationFlag) IsSet() bool + IsSet returns whether or not the flag has been set through env or file + +func (f *DurationFlag) IsVisible() bool + IsVisible returns true if the flag is not hidden, otherwise false + +func (f *DurationFlag) Names() []string + Names returns the names of the flag + +func (f *DurationFlag) String() string + String returns a readable representation of this value (for usage defaults) + +func (f *DurationFlag) TakesValue() bool + TakesValue returns true of the flag takes a value, otherwise false + +type ErrorFormatter interface { + Format(s fmt.State, verb rune) +} + ErrorFormatter is the interface that will suitably format the error output + +type ExitCoder interface { + error + ExitCode() int +} + ExitCoder is the interface checked by `App` and `Command` for a custom exit + code + +func Exit(message interface{}, exitCode int) ExitCoder + Exit wraps a message and exit code into an error, which by default is + handled with a call to os.Exit during default error handling. + + This is the simplest way to trigger a non-zero exit code for an App without + having to call os.Exit manually. During testing, this behavior can be + avoided by overiding the ExitErrHandler function on an App or the + package-global OsExiter function. + +func NewExitError(message interface{}, exitCode int) ExitCoder + NewExitError calls Exit to create a new ExitCoder. + + Deprecated: This function is a duplicate of Exit and will eventually be + removed. + +type ExitErrHandlerFunc func(cCtx *Context, err error) + ExitErrHandlerFunc is executed if provided in order to handle exitError + values returned by Actions and Before/After functions. + +type Flag interface { + fmt.Stringer + // Apply Flag settings to the given flag set + Apply(*flag.FlagSet) error + Names() []string + IsSet() bool +} + Flag is a common interface related to parsing flags in cli. For more + advanced flag parsing techniques, it is recommended that this interface be + implemented. + +var BashCompletionFlag Flag = &BoolFlag{ + Name: "generate-bash-completion", + Hidden: true, +} + BashCompletionFlag enables bash-completion for all commands and subcommands + +var HelpFlag Flag = &BoolFlag{ + Name: "help", + Aliases: []string{"h"}, + Usage: "show help", +} + HelpFlag prints the help for all commands and subcommands. Set to nil to + disable the flag. The subcommand will still be added unless HideHelp or + HideHelpCommand is set to true. + +var VersionFlag Flag = &BoolFlag{ + Name: "version", + Aliases: []string{"v"}, + Usage: "print the version", +} + VersionFlag prints the version for the application + +type FlagEnvHintFunc func(envVars []string, str string) string + FlagEnvHintFunc is used by the default FlagStringFunc to annotate flag help + with the environment variable details. + +var FlagEnvHinter FlagEnvHintFunc = withEnvHint + FlagEnvHinter annotates flag help message with the environment variable + details. This is used by the default FlagStringer. + +type FlagFileHintFunc func(filePath, str string) string + FlagFileHintFunc is used by the default FlagStringFunc to annotate flag help + with the file path details. + +var FlagFileHinter FlagFileHintFunc = withFileHint + FlagFileHinter annotates flag help message with the environment variable + details. This is used by the default FlagStringer. + +type FlagNamePrefixFunc func(fullName []string, placeholder string) string + FlagNamePrefixFunc is used by the default FlagStringFunc to create prefix + text for a flag's full name. + +var FlagNamePrefixer FlagNamePrefixFunc = prefixedNames + FlagNamePrefixer converts a full flag name and its placeholder into the help + message flag prefix. This is used by the default FlagStringer. + +type FlagStringFunc func(Flag) string + FlagStringFunc is used by the help generation to display a flag, which is + expected to be a single line. + +var FlagStringer FlagStringFunc = stringifyFlag + FlagStringer converts a flag definition to a string. This is used by help to + display a flag. + +type FlagsByName []Flag + FlagsByName is a slice of Flag. + +func (f FlagsByName) Len() int + +func (f FlagsByName) Less(i, j int) bool + +func (f FlagsByName) Swap(i, j int) + +type Float64Flag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value float64 + Destination *float64 + + Aliases []string + EnvVars []string +} + Float64Flag is a flag with type float64 + +func (f *Float64Flag) Apply(set *flag.FlagSet) error + Apply populates the flag given the flag set and environment + +func (f *Float64Flag) Get(ctx *Context) float64 + Get returns the flag’s value in the given Context. + +func (f *Float64Flag) GetDefaultText() string + GetDefaultText returns the default text for this flag + +func (f *Float64Flag) GetEnvVars() []string + GetEnvVars returns the env vars for this flag + +func (f *Float64Flag) GetUsage() string + GetUsage returns the usage string for the flag + +func (f *Float64Flag) GetValue() string + GetValue returns the flags value as string representation and an empty + string if the flag takes no value at all. + +func (f *Float64Flag) IsRequired() bool + IsRequired returns whether or not the flag is required + +func (f *Float64Flag) IsSet() bool + IsSet returns whether or not the flag has been set through env or file + +func (f *Float64Flag) IsVisible() bool + IsVisible returns true if the flag is not hidden, otherwise false + +func (f *Float64Flag) Names() []string + Names returns the names of the flag + +func (f *Float64Flag) String() string + String returns a readable representation of this value (for usage defaults) + +func (f *Float64Flag) TakesValue() bool + TakesValue returns true of the flag takes a value, otherwise false + +type Float64Slice struct { + // Has unexported fields. +} + Float64Slice wraps []float64 to satisfy flag.Value + +func NewFloat64Slice(defaults ...float64) *Float64Slice + NewFloat64Slice makes a *Float64Slice with default values + +func (f *Float64Slice) Get() interface{} + Get returns the slice of float64s set by this flag + +func (f *Float64Slice) Serialize() string + Serialize allows Float64Slice to fulfill Serializer + +func (f *Float64Slice) Set(value string) error + Set parses the value into a float64 and appends it to the list of values + +func (f *Float64Slice) String() string + String returns a readable representation of this value (for usage defaults) + +func (f *Float64Slice) Value() []float64 + Value returns the slice of float64s set by this flag + +type Float64SliceFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value *Float64Slice + Destination *Float64Slice + + Aliases []string + EnvVars []string +} + Float64SliceFlag is a flag with type *Float64Slice + +func (f *Float64SliceFlag) Apply(set *flag.FlagSet) error + Apply populates the flag given the flag set and environment + +func (f *Float64SliceFlag) Get(ctx *Context) []float64 + Get returns the flag’s value in the given Context. + +func (f *Float64SliceFlag) GetDefaultText() string + GetDefaultText returns the default text for this flag + +func (f *Float64SliceFlag) GetEnvVars() []string + GetEnvVars returns the env vars for this flag + +func (f *Float64SliceFlag) GetUsage() string + GetUsage returns the usage string for the flag + +func (f *Float64SliceFlag) GetValue() string + GetValue returns the flags value as string representation and an empty + string if the flag takes no value at all. + +func (f *Float64SliceFlag) IsRequired() bool + IsRequired returns whether or not the flag is required + +func (f *Float64SliceFlag) IsSet() bool + IsSet returns whether or not the flag has been set through env or file + +func (f *Float64SliceFlag) IsVisible() bool + IsVisible returns true if the flag is not hidden, otherwise false + +func (f *Float64SliceFlag) Names() []string + Names returns the names of the flag + +func (f *Float64SliceFlag) String() string + String returns a readable representation of this value (for usage defaults) + +func (f *Float64SliceFlag) TakesValue() bool + TakesValue returns true if the flag takes a value, otherwise false + +type Generic interface { + Set(value string) error + String() string +} + Generic is a generic parseable type identified by a specific flag + +type GenericFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value Generic + Destination *Generic + + Aliases []string + EnvVars []string + + TakesFile bool +} + GenericFlag is a flag with type Generic + +func (f GenericFlag) Apply(set *flag.FlagSet) error + Apply takes the flagset and calls Set on the generic flag with the value + provided by the user for parsing by the flag + +func (f *GenericFlag) Get(ctx *Context) interface{} + Get returns the flag’s value in the given Context. + +func (f *GenericFlag) GetDefaultText() string + GetDefaultText returns the default text for this flag + +func (f *GenericFlag) GetEnvVars() []string + GetEnvVars returns the env vars for this flag + +func (f *GenericFlag) GetUsage() string + GetUsage returns the usage string for the flag + +func (f *GenericFlag) GetValue() string + GetValue returns the flags value as string representation and an empty + string if the flag takes no value at all. + +func (f *GenericFlag) IsRequired() bool + IsRequired returns whether or not the flag is required + +func (f *GenericFlag) IsSet() bool + IsSet returns whether or not the flag has been set through env or file + +func (f *GenericFlag) IsVisible() bool + IsVisible returns true if the flag is not hidden, otherwise false + +func (f *GenericFlag) Names() []string + Names returns the names of the flag + +func (f *GenericFlag) String() string + String returns a readable representation of this value (for usage defaults) + +func (f *GenericFlag) TakesValue() bool + TakesValue returns true of the flag takes a value, otherwise false + +type Int64Flag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value int64 + Destination *int64 + + Aliases []string + EnvVars []string +} + Int64Flag is a flag with type int64 + +func (f *Int64Flag) Apply(set *flag.FlagSet) error + Apply populates the flag given the flag set and environment + +func (f *Int64Flag) Get(ctx *Context) int64 + Get returns the flag’s value in the given Context. + +func (f *Int64Flag) GetDefaultText() string + GetDefaultText returns the default text for this flag + +func (f *Int64Flag) GetEnvVars() []string + GetEnvVars returns the env vars for this flag + +func (f *Int64Flag) GetUsage() string + GetUsage returns the usage string for the flag + +func (f *Int64Flag) GetValue() string + GetValue returns the flags value as string representation and an empty + string if the flag takes no value at all. + +func (f *Int64Flag) IsRequired() bool + IsRequired returns whether or not the flag is required + +func (f *Int64Flag) IsSet() bool + IsSet returns whether or not the flag has been set through env or file + +func (f *Int64Flag) IsVisible() bool + IsVisible returns true if the flag is not hidden, otherwise false + +func (f *Int64Flag) Names() []string + Names returns the names of the flag + +func (f *Int64Flag) String() string + String returns a readable representation of this value (for usage defaults) + +func (f *Int64Flag) TakesValue() bool + TakesValue returns true of the flag takes a value, otherwise false + +type Int64Slice struct { + // Has unexported fields. +} + Int64Slice wraps []int64 to satisfy flag.Value + +func NewInt64Slice(defaults ...int64) *Int64Slice + NewInt64Slice makes an *Int64Slice with default values + +func (i *Int64Slice) Get() interface{} + Get returns the slice of ints set by this flag + +func (i *Int64Slice) Serialize() string + Serialize allows Int64Slice to fulfill Serializer + +func (i *Int64Slice) Set(value string) error + Set parses the value into an integer and appends it to the list of values + +func (i *Int64Slice) String() string + String returns a readable representation of this value (for usage defaults) + +func (i *Int64Slice) Value() []int64 + Value returns the slice of ints set by this flag + +type Int64SliceFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value *Int64Slice + Destination *Int64Slice + + Aliases []string + EnvVars []string +} + Int64SliceFlag is a flag with type *Int64Slice + +func (f *Int64SliceFlag) Apply(set *flag.FlagSet) error + Apply populates the flag given the flag set and environment + +func (f *Int64SliceFlag) Get(ctx *Context) []int64 + Get returns the flag’s value in the given Context. + +func (f *Int64SliceFlag) GetDefaultText() string + GetDefaultText returns the default text for this flag + +func (f *Int64SliceFlag) GetEnvVars() []string + GetEnvVars returns the env vars for this flag + +func (f Int64SliceFlag) GetUsage() string + GetUsage returns the usage string for the flag + +func (f *Int64SliceFlag) GetValue() string + GetValue returns the flags value as string representation and an empty + string if the flag takes no value at all. + +func (f *Int64SliceFlag) IsRequired() bool + IsRequired returns whether or not the flag is required + +func (f *Int64SliceFlag) IsSet() bool + IsSet returns whether or not the flag has been set through env or file + +func (f *Int64SliceFlag) IsVisible() bool + IsVisible returns true if the flag is not hidden, otherwise false + +func (f *Int64SliceFlag) Names() []string + Names returns the names of the flag + +func (f *Int64SliceFlag) String() string + String returns a readable representation of this value (for usage defaults) + +func (f *Int64SliceFlag) TakesValue() bool + TakesValue returns true of the flag takes a value, otherwise false + +type IntFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value int + Destination *int + + Aliases []string + EnvVars []string +} + IntFlag is a flag with type int + +func (f *IntFlag) Apply(set *flag.FlagSet) error + Apply populates the flag given the flag set and environment + +func (f *IntFlag) Get(ctx *Context) int + Get returns the flag’s value in the given Context. + +func (f *IntFlag) GetDefaultText() string + GetDefaultText returns the default text for this flag + +func (f *IntFlag) GetEnvVars() []string + GetEnvVars returns the env vars for this flag + +func (f *IntFlag) GetUsage() string + GetUsage returns the usage string for the flag + +func (f *IntFlag) GetValue() string + GetValue returns the flags value as string representation and an empty + string if the flag takes no value at all. + +func (f *IntFlag) IsRequired() bool + IsRequired returns whether or not the flag is required + +func (f *IntFlag) IsSet() bool + IsSet returns whether or not the flag has been set through env or file + +func (f *IntFlag) IsVisible() bool + IsVisible returns true if the flag is not hidden, otherwise false + +func (f *IntFlag) Names() []string + Names returns the names of the flag + +func (f *IntFlag) String() string + String returns a readable representation of this value (for usage defaults) + +func (f *IntFlag) TakesValue() bool + TakesValue returns true of the flag takes a value, otherwise false + +type IntSlice struct { + // Has unexported fields. +} + IntSlice wraps []int to satisfy flag.Value + +func NewIntSlice(defaults ...int) *IntSlice + NewIntSlice makes an *IntSlice with default values + +func (i *IntSlice) Get() interface{} + Get returns the slice of ints set by this flag + +func (i *IntSlice) Serialize() string + Serialize allows IntSlice to fulfill Serializer + +func (i *IntSlice) Set(value string) error + Set parses the value into an integer and appends it to the list of values + +func (i *IntSlice) SetInt(value int) + TODO: Consistently have specific Set function for Int64 and Float64 ? SetInt + directly adds an integer to the list of values + +func (i *IntSlice) String() string + String returns a readable representation of this value (for usage defaults) + +func (i *IntSlice) Value() []int + Value returns the slice of ints set by this flag + +type IntSliceFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value *IntSlice + Destination *IntSlice + + Aliases []string + EnvVars []string +} + IntSliceFlag is a flag with type *IntSlice + +func (f *IntSliceFlag) Apply(set *flag.FlagSet) error + Apply populates the flag given the flag set and environment + +func (f *IntSliceFlag) Get(ctx *Context) []int + Get returns the flag’s value in the given Context. + +func (f *IntSliceFlag) GetDefaultText() string + GetDefaultText returns the default text for this flag + +func (f *IntSliceFlag) GetEnvVars() []string + GetEnvVars returns the env vars for this flag + +func (f IntSliceFlag) GetUsage() string + GetUsage returns the usage string for the flag + +func (f *IntSliceFlag) GetValue() string + GetValue returns the flags value as string representation and an empty + string if the flag takes no value at all. + +func (f *IntSliceFlag) IsRequired() bool + IsRequired returns whether or not the flag is required + +func (f *IntSliceFlag) IsSet() bool + IsSet returns whether or not the flag has been set through env or file + +func (f *IntSliceFlag) IsVisible() bool + IsVisible returns true if the flag is not hidden, otherwise false + +func (f *IntSliceFlag) Names() []string + Names returns the names of the flag + +func (f *IntSliceFlag) String() string + String returns a readable representation of this value (for usage defaults) + +func (f *IntSliceFlag) TakesValue() bool + TakesValue returns true of the flag takes a value, otherwise false + +type MultiError interface { + error + Errors() []error +} + MultiError is an error that wraps multiple errors. + +type OnUsageErrorFunc func(cCtx *Context, err error, isSubcommand bool) error + OnUsageErrorFunc is executed if a usage error occurs. This is useful for + displaying customized usage error messages. This function is able to replace + the original error messages. If this function is not set, the "Incorrect + usage" is displayed and the execution is interrupted. + +type Path = string + +type PathFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value Path + Destination *Path + + Aliases []string + EnvVars []string + + TakesFile bool +} + PathFlag is a flag with type Path + +func (f *PathFlag) Apply(set *flag.FlagSet) error + Apply populates the flag given the flag set and environment + +func (f *PathFlag) Get(ctx *Context) string + Get returns the flag’s value in the given Context. + +func (f *PathFlag) GetDefaultText() string + GetDefaultText returns the default text for this flag + +func (f *PathFlag) GetEnvVars() []string + GetEnvVars returns the env vars for this flag + +func (f *PathFlag) GetUsage() string + GetUsage returns the usage string for the flag + +func (f *PathFlag) GetValue() string + GetValue returns the flags value as string representation and an empty + string if the flag takes no value at all. + +func (f *PathFlag) IsRequired() bool + IsRequired returns whether or not the flag is required + +func (f *PathFlag) IsSet() bool + IsSet returns whether or not the flag has been set through env or file + +func (f *PathFlag) IsVisible() bool + IsVisible returns true if the flag is not hidden, otherwise false + +func (f *PathFlag) Names() []string + Names returns the names of the flag + +func (f *PathFlag) String() string + String returns a readable representation of this value (for usage defaults) + +func (f *PathFlag) TakesValue() bool + TakesValue returns true of the flag takes a value, otherwise false + +type RequiredFlag interface { + Flag + + IsRequired() bool +} + RequiredFlag is an interface that allows us to mark flags as required it + allows flags required flags to be backwards compatible with the Flag + interface + +type Serializer interface { + Serialize() string +} + Serializer is used to circumvent the limitations of flag.FlagSet.Set + +type StringFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value string + Destination *string + + Aliases []string + EnvVars []string + + TakesFile bool +} + StringFlag is a flag with type string + +func (f *StringFlag) Apply(set *flag.FlagSet) error + Apply populates the flag given the flag set and environment + +func (f *StringFlag) Get(ctx *Context) string + Get returns the flag’s value in the given Context. + +func (f *StringFlag) GetDefaultText() string + GetDefaultText returns the default text for this flag + +func (f *StringFlag) GetEnvVars() []string + GetEnvVars returns the env vars for this flag + +func (f *StringFlag) GetUsage() string + GetUsage returns the usage string for the flag + +func (f *StringFlag) GetValue() string + GetValue returns the flags value as string representation and an empty + string if the flag takes no value at all. + +func (f *StringFlag) IsRequired() bool + IsRequired returns whether or not the flag is required + +func (f *StringFlag) IsSet() bool + IsSet returns whether or not the flag has been set through env or file + +func (f *StringFlag) IsVisible() bool + IsVisible returns true if the flag is not hidden, otherwise false + +func (f *StringFlag) Names() []string + Names returns the names of the flag + +func (f *StringFlag) String() string + String returns a readable representation of this value (for usage defaults) + +func (f *StringFlag) TakesValue() bool + TakesValue returns true of the flag takes a value, otherwise false + +type StringSlice struct { + // Has unexported fields. +} + StringSlice wraps a []string to satisfy flag.Value + +func NewStringSlice(defaults ...string) *StringSlice + NewStringSlice creates a *StringSlice with default values + +func (s *StringSlice) Get() interface{} + Get returns the slice of strings set by this flag + +func (s *StringSlice) Serialize() string + Serialize allows StringSlice to fulfill Serializer + +func (s *StringSlice) Set(value string) error + Set appends the string value to the list of values + +func (s *StringSlice) String() string + String returns a readable representation of this value (for usage defaults) + +func (s *StringSlice) Value() []string + Value returns the slice of strings set by this flag + +type StringSliceFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value *StringSlice + Destination *StringSlice + + Aliases []string + EnvVars []string + + TakesFile bool +} + StringSliceFlag is a flag with type *StringSlice + +func (f *StringSliceFlag) Apply(set *flag.FlagSet) error + Apply populates the flag given the flag set and environment + +func (f *StringSliceFlag) Get(ctx *Context) []string + Get returns the flag’s value in the given Context. + +func (f *StringSliceFlag) GetDefaultText() string + GetDefaultText returns the default text for this flag + +func (f *StringSliceFlag) GetEnvVars() []string + GetEnvVars returns the env vars for this flag + +func (f *StringSliceFlag) GetUsage() string + GetUsage returns the usage string for the flag + +func (f *StringSliceFlag) GetValue() string + GetValue returns the flags value as string representation and an empty + string if the flag takes no value at all. + +func (f *StringSliceFlag) IsRequired() bool + IsRequired returns whether or not the flag is required + +func (f *StringSliceFlag) IsSet() bool + IsSet returns whether or not the flag has been set through env or file + +func (f *StringSliceFlag) IsVisible() bool + IsVisible returns true if the flag is not hidden, otherwise false + +func (f *StringSliceFlag) Names() []string + Names returns the names of the flag + +func (f *StringSliceFlag) String() string + String returns a readable representation of this value (for usage defaults) + +func (f *StringSliceFlag) TakesValue() bool + TakesValue returns true of the flag takes a value, otherwise false + +type Timestamp struct { + // Has unexported fields. +} + Timestamp wrap to satisfy golang's flag interface. + +func NewTimestamp(timestamp time.Time) *Timestamp + Timestamp constructor + +func (t *Timestamp) Get() interface{} + Get returns the flag structure + +func (t *Timestamp) Set(value string) error + Parses the string value to timestamp + +func (t *Timestamp) SetLayout(layout string) + Set the timestamp string layout for future parsing + +func (t *Timestamp) SetTimestamp(value time.Time) + Set the timestamp value directly + +func (t *Timestamp) String() string + String returns a readable representation of this value (for usage defaults) + +func (t *Timestamp) Value() *time.Time + Value returns the timestamp value stored in the flag + +type TimestampFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value *Timestamp + Destination *Timestamp + + Aliases []string + EnvVars []string + + Layout string +} + TimestampFlag is a flag with type *Timestamp + +func (f *TimestampFlag) Apply(set *flag.FlagSet) error + Apply populates the flag given the flag set and environment + +func (f *TimestampFlag) Get(ctx *Context) *time.Time + Get returns the flag’s value in the given Context. + +func (f *TimestampFlag) GetDefaultText() string + GetDefaultText returns the default text for this flag + +func (f *TimestampFlag) GetEnvVars() []string + GetEnvVars returns the env vars for this flag + +func (f *TimestampFlag) GetUsage() string + GetUsage returns the usage string for the flag + +func (f *TimestampFlag) GetValue() string + GetValue returns the flags value as string representation and an empty + string if the flag takes no value at all. + +func (f *TimestampFlag) IsRequired() bool + IsRequired returns whether or not the flag is required + +func (f *TimestampFlag) IsSet() bool + IsSet returns whether or not the flag has been set through env or file + +func (f *TimestampFlag) IsVisible() bool + IsVisible returns true if the flag is not hidden, otherwise false + +func (f *TimestampFlag) Names() []string + Names returns the names of the flag + +func (f *TimestampFlag) String() string + String returns a readable representation of this value (for usage defaults) + +func (f *TimestampFlag) TakesValue() bool + TakesValue returns true of the flag takes a value, otherwise false + +type Uint64Flag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value uint64 + Destination *uint64 + + Aliases []string + EnvVars []string +} + Uint64Flag is a flag with type uint64 + +func (f *Uint64Flag) Apply(set *flag.FlagSet) error + Apply populates the flag given the flag set and environment + +func (f *Uint64Flag) Get(ctx *Context) uint64 + Get returns the flag’s value in the given Context. + +func (f *Uint64Flag) GetDefaultText() string + GetDefaultText returns the default text for this flag + +func (f *Uint64Flag) GetEnvVars() []string + GetEnvVars returns the env vars for this flag + +func (f *Uint64Flag) GetUsage() string + GetUsage returns the usage string for the flag + +func (f *Uint64Flag) GetValue() string + GetValue returns the flags value as string representation and an empty + string if the flag takes no value at all. + +func (f *Uint64Flag) IsRequired() bool + IsRequired returns whether or not the flag is required + +func (f *Uint64Flag) IsSet() bool + IsSet returns whether or not the flag has been set through env or file + +func (f *Uint64Flag) IsVisible() bool + IsVisible returns true if the flag is not hidden, otherwise false + +func (f *Uint64Flag) Names() []string + Names returns the names of the flag + +func (f *Uint64Flag) String() string + String returns a readable representation of this value (for usage defaults) + +func (f *Uint64Flag) TakesValue() bool + TakesValue returns true of the flag takes a value, otherwise false + +type UintFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value uint + Destination *uint + + Aliases []string + EnvVars []string +} + UintFlag is a flag with type uint + +func (f *UintFlag) Apply(set *flag.FlagSet) error + Apply populates the flag given the flag set and environment + +func (f *UintFlag) Get(ctx *Context) uint + Get returns the flag’s value in the given Context. + +func (f *UintFlag) GetDefaultText() string + GetDefaultText returns the default text for this flag + +func (f *UintFlag) GetEnvVars() []string + GetEnvVars returns the env vars for this flag + +func (f *UintFlag) GetUsage() string + GetUsage returns the usage string for the flag + +func (f *UintFlag) GetValue() string + GetValue returns the flags value as string representation and an empty + string if the flag takes no value at all. + +func (f *UintFlag) IsRequired() bool + IsRequired returns whether or not the flag is required + +func (f *UintFlag) IsSet() bool + IsSet returns whether or not the flag has been set through env or file + +func (f *UintFlag) IsVisible() bool + IsVisible returns true if the flag is not hidden, otherwise false + +func (f *UintFlag) Names() []string + Names returns the names of the flag + +func (f *UintFlag) String() string + String returns a readable representation of this value (for usage defaults) + +func (f *UintFlag) TakesValue() bool + TakesValue returns true of the flag takes a value, otherwise false + +type VisibleFlag interface { + Flag + + // IsVisible returns true if the flag is not hidden, otherwise false + IsVisible() bool +} + VisibleFlag is an interface that allows to check if a flag is visible + +package altsrc // import "github.com/urfave/cli/v2/altsrc" + + +FUNCTIONS + +func ApplyInputSourceValues(cCtx *cli.Context, inputSourceContext InputSourceContext, flags []cli.Flag) error + ApplyInputSourceValues iterates over all provided flags and executes + ApplyInputSourceValue on flags implementing the FlagInputSourceExtension + interface to initialize these flags to an alternate input source. + +func InitInputSource(flags []cli.Flag, createInputSource func() (InputSourceContext, error)) cli.BeforeFunc + InitInputSource is used to to setup an InputSourceContext on a cli.Command + Before method. It will create a new input source based on the func provided. + If there is no error it will then apply the new input source to any flags + that are supported by the input source + +func InitInputSourceWithContext(flags []cli.Flag, createInputSource func(cCtx *cli.Context) (InputSourceContext, error)) cli.BeforeFunc + InitInputSourceWithContext is used to to setup an InputSourceContext on a + cli.Command Before method. It will create a new input source based on the + func provided with potentially using existing cli.Context values to + initialize itself. If there is no error it will then apply the new input + source to any flags that are supported by the input source + +func NewJSONSourceFromFlagFunc(flag string) func(c *cli.Context) (InputSourceContext, error) + NewJSONSourceFromFlagFunc returns a func that takes a cli.Context and + returns an InputSourceContext suitable for retrieving config variables from + a file containing JSON data with the file name defined by the given flag. + +func NewTomlSourceFromFlagFunc(flagFileName string) func(cCtx *cli.Context) (InputSourceContext, error) + NewTomlSourceFromFlagFunc creates a new TOML InputSourceContext from a + provided flag name and source context. + +func NewYamlSourceFromFlagFunc(flagFileName string) func(cCtx *cli.Context) (InputSourceContext, error) + NewYamlSourceFromFlagFunc creates a new Yaml InputSourceContext from a + provided flag name and source context. + + +TYPES + +type BoolFlag struct { + *cli.BoolFlag + // Has unexported fields. +} + BoolFlag is the flag type that wraps cli.BoolFlag to allow for other values + to be specified + +func NewBoolFlag(fl *cli.BoolFlag) *BoolFlag + NewBoolFlag creates a new BoolFlag + +func (f *BoolFlag) Apply(set *flag.FlagSet) error + Apply saves the flagSet for later usage calls, then calls the wrapped + BoolFlag.Apply + +func (f *BoolFlag) ApplyInputSourceValue(cCtx *cli.Context, isc InputSourceContext) error + ApplyInputSourceValue applies a Bool value to the flagSet if required + +type DurationFlag struct { + *cli.DurationFlag + // Has unexported fields. +} + DurationFlag is the flag type that wraps cli.DurationFlag to allow for other + values to be specified + +func NewDurationFlag(fl *cli.DurationFlag) *DurationFlag + NewDurationFlag creates a new DurationFlag + +func (f *DurationFlag) Apply(set *flag.FlagSet) error + Apply saves the flagSet for later usage calls, then calls the wrapped + DurationFlag.Apply + +func (f *DurationFlag) ApplyInputSourceValue(cCtx *cli.Context, isc InputSourceContext) error + ApplyInputSourceValue applies a Duration value to the flagSet if required + +type FlagInputSourceExtension interface { + cli.Flag + ApplyInputSourceValue(cCtx *cli.Context, isc InputSourceContext) error +} + FlagInputSourceExtension is an extension interface of cli.Flag that allows a + value to be set on the existing parsed flags. + +type Float64Flag struct { + *cli.Float64Flag + // Has unexported fields. +} + Float64Flag is the flag type that wraps cli.Float64Flag to allow for other + values to be specified + +func NewFloat64Flag(fl *cli.Float64Flag) *Float64Flag + NewFloat64Flag creates a new Float64Flag + +func (f *Float64Flag) Apply(set *flag.FlagSet) error + Apply saves the flagSet for later usage calls, then calls the wrapped + Float64Flag.Apply + +func (f *Float64Flag) ApplyInputSourceValue(cCtx *cli.Context, isc InputSourceContext) error + ApplyInputSourceValue applies a Float64 value to the flagSet if required + +type Float64SliceFlag struct { + *cli.Float64SliceFlag + // Has unexported fields. +} + Float64SliceFlag is the flag type that wraps cli.Float64SliceFlag to allow + for other values to be specified + +func NewFloat64SliceFlag(fl *cli.Float64SliceFlag) *Float64SliceFlag + NewFloat64SliceFlag creates a new Float64SliceFlag + +func (f *Float64SliceFlag) Apply(set *flag.FlagSet) error + Apply saves the flagSet for later usage calls, then calls the wrapped + Float64SliceFlag.Apply + +type GenericFlag struct { + *cli.GenericFlag + // Has unexported fields. +} + GenericFlag is the flag type that wraps cli.GenericFlag to allow for other + values to be specified + +func NewGenericFlag(fl *cli.GenericFlag) *GenericFlag + NewGenericFlag creates a new GenericFlag + +func (f *GenericFlag) Apply(set *flag.FlagSet) error + Apply saves the flagSet for later usage calls, then calls the wrapped + GenericFlag.Apply + +func (f *GenericFlag) ApplyInputSourceValue(cCtx *cli.Context, isc InputSourceContext) error + ApplyInputSourceValue applies a generic value to the flagSet if required + +type InputSourceContext interface { + Source() string + + Int(name string) (int, error) + Duration(name string) (time.Duration, error) + Float64(name string) (float64, error) + String(name string) (string, error) + StringSlice(name string) ([]string, error) + IntSlice(name string) ([]int, error) + Generic(name string) (cli.Generic, error) + Bool(name string) (bool, error) + + // Has unexported methods. +} + InputSourceContext is an interface used to allow other input sources to be + implemented as needed. + + Source returns an identifier for the input source. In case of file source it + should return path to the file. + +func NewJSONSource(data []byte) (InputSourceContext, error) + NewJSONSource returns an InputSourceContext suitable for retrieving config + variables from raw JSON data. + +func NewJSONSourceFromFile(f string) (InputSourceContext, error) + NewJSONSourceFromFile returns an InputSourceContext suitable for retrieving + config variables from a file (or url) containing JSON data. + +func NewJSONSourceFromReader(r io.Reader) (InputSourceContext, error) + NewJSONSourceFromReader returns an InputSourceContext suitable for + retrieving config variables from an io.Reader that returns JSON data. + +func NewTomlSourceFromFile(file string) (InputSourceContext, error) + NewTomlSourceFromFile creates a new TOML InputSourceContext from a filepath. + +func NewYamlSourceFromFile(file string) (InputSourceContext, error) + NewYamlSourceFromFile creates a new Yaml InputSourceContext from a filepath. + +type Int64Flag struct { + *cli.Int64Flag + // Has unexported fields. +} + Int64Flag is the flag type that wraps cli.Int64Flag to allow for other + values to be specified + +func NewInt64Flag(fl *cli.Int64Flag) *Int64Flag + NewInt64Flag creates a new Int64Flag + +func (f *Int64Flag) Apply(set *flag.FlagSet) error + Apply saves the flagSet for later usage calls, then calls the wrapped + Int64Flag.Apply + +type Int64SliceFlag struct { + *cli.Int64SliceFlag + // Has unexported fields. +} + Int64SliceFlag is the flag type that wraps cli.Int64SliceFlag to allow for + other values to be specified + +func NewInt64SliceFlag(fl *cli.Int64SliceFlag) *Int64SliceFlag + NewInt64SliceFlag creates a new Int64SliceFlag + +func (f *Int64SliceFlag) Apply(set *flag.FlagSet) error + Apply saves the flagSet for later usage calls, then calls the wrapped + Int64SliceFlag.Apply + +type IntFlag struct { + *cli.IntFlag + // Has unexported fields. +} + IntFlag is the flag type that wraps cli.IntFlag to allow for other values to + be specified + +func NewIntFlag(fl *cli.IntFlag) *IntFlag + NewIntFlag creates a new IntFlag + +func (f *IntFlag) Apply(set *flag.FlagSet) error + Apply saves the flagSet for later usage calls, then calls the wrapped + IntFlag.Apply + +func (f *IntFlag) ApplyInputSourceValue(cCtx *cli.Context, isc InputSourceContext) error + ApplyInputSourceValue applies a int value to the flagSet if required + +type IntSliceFlag struct { + *cli.IntSliceFlag + // Has unexported fields. +} + IntSliceFlag is the flag type that wraps cli.IntSliceFlag to allow for other + values to be specified + +func NewIntSliceFlag(fl *cli.IntSliceFlag) *IntSliceFlag + NewIntSliceFlag creates a new IntSliceFlag + +func (f *IntSliceFlag) Apply(set *flag.FlagSet) error + Apply saves the flagSet for later usage calls, then calls the wrapped + IntSliceFlag.Apply + +func (f *IntSliceFlag) ApplyInputSourceValue(cCtx *cli.Context, isc InputSourceContext) error + ApplyInputSourceValue applies a IntSlice value if required + +type MapInputSource struct { + // Has unexported fields. +} + MapInputSource implements InputSourceContext to return data from the map + that is loaded. + +func NewMapInputSource(file string, valueMap map[interface{}]interface{}) *MapInputSource + NewMapInputSource creates a new MapInputSource for implementing custom input + sources. + +func (fsm *MapInputSource) Bool(name string) (bool, error) + Bool returns an bool from the map otherwise returns false + +func (fsm *MapInputSource) Duration(name string) (time.Duration, error) + Duration returns a duration from the map if it exists otherwise returns 0 + +func (fsm *MapInputSource) Float64(name string) (float64, error) + Float64 returns an float64 from the map if it exists otherwise returns 0 + +func (fsm *MapInputSource) Generic(name string) (cli.Generic, error) + Generic returns an cli.Generic from the map if it exists otherwise returns + nil + +func (fsm *MapInputSource) Int(name string) (int, error) + Int returns an int from the map if it exists otherwise returns 0 + +func (fsm *MapInputSource) IntSlice(name string) ([]int, error) + IntSlice returns an []int from the map if it exists otherwise returns nil + +func (fsm *MapInputSource) Source() string + Source returns the path of the source file + +func (fsm *MapInputSource) String(name string) (string, error) + String returns a string from the map if it exists otherwise returns an empty + string + +func (fsm *MapInputSource) StringSlice(name string) ([]string, error) + StringSlice returns an []string from the map if it exists otherwise returns + nil + +type PathFlag struct { + *cli.PathFlag + // Has unexported fields. +} + PathFlag is the flag type that wraps cli.PathFlag to allow for other values + to be specified + +func NewPathFlag(fl *cli.PathFlag) *PathFlag + NewPathFlag creates a new PathFlag + +func (f *PathFlag) Apply(set *flag.FlagSet) error + Apply saves the flagSet for later usage calls, then calls the wrapped + PathFlag.Apply + +func (f *PathFlag) ApplyInputSourceValue(cCtx *cli.Context, isc InputSourceContext) error + ApplyInputSourceValue applies a Path value to the flagSet if required + +type StringFlag struct { + *cli.StringFlag + // Has unexported fields. +} + StringFlag is the flag type that wraps cli.StringFlag to allow for other + values to be specified + +func NewStringFlag(fl *cli.StringFlag) *StringFlag + NewStringFlag creates a new StringFlag + +func (f *StringFlag) Apply(set *flag.FlagSet) error + Apply saves the flagSet for later usage calls, then calls the wrapped + StringFlag.Apply + +func (f *StringFlag) ApplyInputSourceValue(cCtx *cli.Context, isc InputSourceContext) error + ApplyInputSourceValue applies a String value to the flagSet if required + +type StringSliceFlag struct { + *cli.StringSliceFlag + // Has unexported fields. +} + StringSliceFlag is the flag type that wraps cli.StringSliceFlag to allow for + other values to be specified + +func NewStringSliceFlag(fl *cli.StringSliceFlag) *StringSliceFlag + NewStringSliceFlag creates a new StringSliceFlag + +func (f *StringSliceFlag) Apply(set *flag.FlagSet) error + Apply saves the flagSet for later usage calls, then calls the wrapped + StringSliceFlag.Apply + +func (f *StringSliceFlag) ApplyInputSourceValue(cCtx *cli.Context, isc InputSourceContext) error + ApplyInputSourceValue applies a StringSlice value to the flagSet if required + +type Uint64Flag struct { + *cli.Uint64Flag + // Has unexported fields. +} + Uint64Flag is the flag type that wraps cli.Uint64Flag to allow for other + values to be specified + +func NewUint64Flag(fl *cli.Uint64Flag) *Uint64Flag + NewUint64Flag creates a new Uint64Flag + +func (f *Uint64Flag) Apply(set *flag.FlagSet) error + Apply saves the flagSet for later usage calls, then calls the wrapped + Uint64Flag.Apply + +type UintFlag struct { + *cli.UintFlag + // Has unexported fields. +} + UintFlag is the flag type that wraps cli.UintFlag to allow for other values + to be specified + +func NewUintFlag(fl *cli.UintFlag) *UintFlag + NewUintFlag creates a new UintFlag + +func (f *UintFlag) Apply(set *flag.FlagSet) error + Apply saves the flagSet for later usage calls, then calls the wrapped + UintFlag.Apply + diff --git a/vendor/github.com/urfave/cli/v2/help.go b/vendor/github.com/urfave/cli/v2/help.go index 2f8156fca..51033928c 100644 --- a/vendor/github.com/urfave/cli/v2/help.go +++ b/vendor/github.com/urfave/cli/v2/help.go @@ -10,9 +10,14 @@ import ( "unicode/utf8" ) +const ( + helpName = "help" + helpAlias = "h" +) + var helpCommand = &Command{ - Name: "help", - Aliases: []string{"h"}, + Name: helpName, + Aliases: []string{helpAlias}, Usage: "Shows a list of commands or help for one command", ArgsUsage: "[command]", Action: func(cCtx *Context) error { @@ -27,8 +32,8 @@ var helpCommand = &Command{ } var helpSubcommand = &Command{ - Name: "help", - Aliases: []string{"h"}, + Name: helpName, + Aliases: []string{helpAlias}, Usage: "Shows a list of commands or help for one command", ArgsUsage: "[command]", Action: func(cCtx *Context) error { @@ -214,7 +219,13 @@ func ShowCommandHelp(ctx *Context, command string) error { } if ctx.App.CommandNotFound == nil { - return Exit(fmt.Sprintf("No help topic for '%v'", command), 3) + errMsg := fmt.Sprintf("No help topic for '%v'", command) + if ctx.App.Suggest { + if suggestion := suggestCommand(ctx.App.Commands, command); suggestion != "" { + errMsg += ". " + suggestion + } + } + return Exit(errMsg, 3) } ctx.App.CommandNotFound(ctx, command) diff --git a/vendor/github.com/urfave/cli/v2/mkdocs-requirements.txt b/vendor/github.com/urfave/cli/v2/mkdocs-requirements.txt new file mode 100644 index 000000000..482ad0622 --- /dev/null +++ b/vendor/github.com/urfave/cli/v2/mkdocs-requirements.txt @@ -0,0 +1,5 @@ +mkdocs-git-revision-date-localized-plugin~=1.0 +mkdocs-material-extensions~=1.0 +mkdocs-material~=8.2 +mkdocs~=1.3 +pygments~=2.12 diff --git a/vendor/github.com/urfave/cli/v2/mkdocs.yml b/vendor/github.com/urfave/cli/v2/mkdocs.yml new file mode 100644 index 000000000..73b88c509 --- /dev/null +++ b/vendor/github.com/urfave/cli/v2/mkdocs.yml @@ -0,0 +1,62 @@ +# NOTE: the mkdocs dependencies will need to be installed out of +# band until this whole thing gets more automated: +# +# pip install -r mkdocs-requirements.txt +# + +site_name: urfave/cli +site_url: https://cli.urfave.org/ +repo_url: https://github.com/urfave/cli +edit_uri: edit/main/docs/ +nav: + - Home: index.md + - v2 Manual: v2/index.md + - v1 Manual: v1/index.md +theme: + name: material + palette: + - media: "(prefers-color-scheme: light)" + scheme: default + toggle: + icon: material/brightness-4 + name: dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + toggle: + icon: material/brightness-7 + name: light mode +plugins: + - git-revision-date-localized + - search +# NOTE: this is the recommended configuration from +# https://squidfunk.github.io/mkdocs-material/setup/extensions/#recommended-configuration +markdown_extensions: + - abbr + - admonition + - attr_list + - def_list + - footnotes + - meta + - md_in_html + - toc: + permalink: true + - pymdownx.arithmatex: + generic: true + - pymdownx.betterem: + smart_enable: all + - pymdownx.caret + - pymdownx.details + - pymdownx.emoji: + emoji_index: !!python/name:materialx.emoji.twemoji + emoji_generator: !!python/name:materialx.emoji.to_svg + - pymdownx.highlight + - pymdownx.inlinehilite + - pymdownx.keys + - pymdownx.mark + - pymdownx.smartsymbols + - pymdownx.superfences + - pymdownx.tabbed: + alternate_style: true + - pymdownx.tasklist: + custom_checkbox: true + - pymdownx.tilde diff --git a/vendor/github.com/urfave/cli/v2/parse.go b/vendor/github.com/urfave/cli/v2/parse.go index 7df17296a..a2db306e1 100644 --- a/vendor/github.com/urfave/cli/v2/parse.go +++ b/vendor/github.com/urfave/cli/v2/parse.go @@ -26,9 +26,8 @@ func parseIter(set *flag.FlagSet, ip iterativeParser, args []string, shellComple return err } - errStr := err.Error() - trimmed := strings.TrimPrefix(errStr, "flag provided but not defined: -") - if errStr == trimmed { + trimmed, trimErr := flagFromError(err) + if trimErr != nil { return err } @@ -67,6 +66,19 @@ func parseIter(set *flag.FlagSet, ip iterativeParser, args []string, shellComple } } +const providedButNotDefinedErrMsg = "flag provided but not defined: -" + +// flagFromError tries to parse a provided flag from an error message. If the +// parsing fials, it returns the input error and an empty string +func flagFromError(err error) (string, error) { + errStr := err.Error() + trimmed := strings.TrimPrefix(errStr, providedButNotDefinedErrMsg) + if errStr == trimmed { + return "", err + } + return trimmed, nil +} + func splitShortOptions(set *flag.FlagSet, arg string) []string { shortFlagsExist := func(s string) bool { for _, c := range s[1:] { diff --git a/vendor/github.com/urfave/cli/v2/suggestions.go b/vendor/github.com/urfave/cli/v2/suggestions.go new file mode 100644 index 000000000..476af4de5 --- /dev/null +++ b/vendor/github.com/urfave/cli/v2/suggestions.go @@ -0,0 +1,75 @@ +package cli + +import ( + "fmt" + + "github.com/antzucaro/matchr" +) + +const didYouMeanTemplate = "Did you mean '%s'?" + +func (a *App) suggestFlagFromError(err error, command string) (string, error) { + flag, parseErr := flagFromError(err) + if parseErr != nil { + return "", err + } + + flags := a.Flags + if command != "" { + cmd := a.Command(command) + if cmd == nil { + return "", err + } + flags = cmd.Flags + } + + suggestion := a.suggestFlag(flags, flag) + if len(suggestion) == 0 { + return "", err + } + + return fmt.Sprintf(didYouMeanTemplate+"\n\n", suggestion), nil +} + +func (a *App) suggestFlag(flags []Flag, provided string) (suggestion string) { + distance := 0.0 + + for _, flag := range flags { + flagNames := flag.Names() + if !a.HideHelp { + flagNames = append(flagNames, HelpFlag.Names()...) + } + for _, name := range flagNames { + newDistance := matchr.JaroWinkler(name, provided, true) + if newDistance > distance { + distance = newDistance + suggestion = name + } + } + } + + if len(suggestion) == 1 { + suggestion = "-" + suggestion + } else if len(suggestion) > 1 { + suggestion = "--" + suggestion + } + + return suggestion +} + +// suggestCommand takes a list of commands and a provided string to suggest a +// command name +func suggestCommand(commands []*Command, provided string) (suggestion string) { + distance := 0.0 + for _, command := range commands { + for _, name := range append(command.Names(), helpName, helpAlias) { + newDistance := matchr.JaroWinkler(name, provided, true) + if newDistance > distance { + distance = newDistance + suggestion = name + } + } + } + + return fmt.Sprintf(didYouMeanTemplate, suggestion) +} diff --git a/vendor/github.com/urfave/cli/v2/zz_generated.flags.go b/vendor/github.com/urfave/cli/v2/zz_generated.flags.go new file mode 100644 index 000000000..6c16c3e75 --- /dev/null +++ b/vendor/github.com/urfave/cli/v2/zz_generated.flags.go @@ -0,0 +1,657 @@ +// WARNING: this file is generated. DO NOT EDIT + +package cli + +import "time" + +// Float64SliceFlag is a flag with type *Float64Slice +type Float64SliceFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value *Float64Slice + Destination *Float64Slice + + Aliases []string + EnvVars []string +} + +// IsSet returns whether or not the flag has been set through env or file +func (f *Float64SliceFlag) IsSet() bool { + return f.HasBeenSet +} + +// Names returns the names of the flag +func (f *Float64SliceFlag) Names() []string { + return FlagNames(f.Name, f.Aliases) +} + +// IsRequired returns whether or not the flag is required +func (f *Float64SliceFlag) IsRequired() bool { + return f.Required +} + +// IsVisible returns true if the flag is not hidden, otherwise false +func (f *Float64SliceFlag) IsVisible() bool { + return !f.Hidden +} + +// GenericFlag is a flag with type Generic +type GenericFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value Generic + Destination *Generic + + Aliases []string + EnvVars []string + + TakesFile bool +} + +// String returns a readable representation of this value (for usage defaults) +func (f *GenericFlag) String() string { + return FlagStringer(f) +} + +// IsSet returns whether or not the flag has been set through env or file +func (f *GenericFlag) IsSet() bool { + return f.HasBeenSet +} + +// Names returns the names of the flag +func (f *GenericFlag) Names() []string { + return FlagNames(f.Name, f.Aliases) +} + +// IsRequired returns whether or not the flag is required +func (f *GenericFlag) IsRequired() bool { + return f.Required +} + +// IsVisible returns true if the flag is not hidden, otherwise false +func (f *GenericFlag) IsVisible() bool { + return !f.Hidden +} + +// Int64SliceFlag is a flag with type *Int64Slice +type Int64SliceFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value *Int64Slice + Destination *Int64Slice + + Aliases []string + EnvVars []string +} + +// IsSet returns whether or not the flag has been set through env or file +func (f *Int64SliceFlag) IsSet() bool { + return f.HasBeenSet +} + +// Names returns the names of the flag +func (f *Int64SliceFlag) Names() []string { + return FlagNames(f.Name, f.Aliases) +} + +// IsRequired returns whether or not the flag is required +func (f *Int64SliceFlag) IsRequired() bool { + return f.Required +} + +// IsVisible returns true if the flag is not hidden, otherwise false +func (f *Int64SliceFlag) IsVisible() bool { + return !f.Hidden +} + +// IntSliceFlag is a flag with type *IntSlice +type IntSliceFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value *IntSlice + Destination *IntSlice + + Aliases []string + EnvVars []string +} + +// IsSet returns whether or not the flag has been set through env or file +func (f *IntSliceFlag) IsSet() bool { + return f.HasBeenSet +} + +// Names returns the names of the flag +func (f *IntSliceFlag) Names() []string { + return FlagNames(f.Name, f.Aliases) +} + +// IsRequired returns whether or not the flag is required +func (f *IntSliceFlag) IsRequired() bool { + return f.Required +} + +// IsVisible returns true if the flag is not hidden, otherwise false +func (f *IntSliceFlag) IsVisible() bool { + return !f.Hidden +} + +// PathFlag is a flag with type Path +type PathFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value Path + Destination *Path + + Aliases []string + EnvVars []string + + TakesFile bool +} + +// String returns a readable representation of this value (for usage defaults) +func (f *PathFlag) String() string { + return FlagStringer(f) +} + +// IsSet returns whether or not the flag has been set through env or file +func (f *PathFlag) IsSet() bool { + return f.HasBeenSet +} + +// Names returns the names of the flag +func (f *PathFlag) Names() []string { + return FlagNames(f.Name, f.Aliases) +} + +// IsRequired returns whether or not the flag is required +func (f *PathFlag) IsRequired() bool { + return f.Required +} + +// IsVisible returns true if the flag is not hidden, otherwise false +func (f *PathFlag) IsVisible() bool { + return !f.Hidden +} + +// StringSliceFlag is a flag with type *StringSlice +type StringSliceFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value *StringSlice + Destination *StringSlice + + Aliases []string + EnvVars []string + + TakesFile bool +} + +// IsSet returns whether or not the flag has been set through env or file +func (f *StringSliceFlag) IsSet() bool { + return f.HasBeenSet +} + +// Names returns the names of the flag +func (f *StringSliceFlag) Names() []string { + return FlagNames(f.Name, f.Aliases) +} + +// IsRequired returns whether or not the flag is required +func (f *StringSliceFlag) IsRequired() bool { + return f.Required +} + +// IsVisible returns true if the flag is not hidden, otherwise false +func (f *StringSliceFlag) IsVisible() bool { + return !f.Hidden +} + +// TimestampFlag is a flag with type *Timestamp +type TimestampFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value *Timestamp + Destination *Timestamp + + Aliases []string + EnvVars []string + + Layout string +} + +// String returns a readable representation of this value (for usage defaults) +func (f *TimestampFlag) String() string { + return FlagStringer(f) +} + +// IsSet returns whether or not the flag has been set through env or file +func (f *TimestampFlag) IsSet() bool { + return f.HasBeenSet +} + +// Names returns the names of the flag +func (f *TimestampFlag) Names() []string { + return FlagNames(f.Name, f.Aliases) +} + +// IsRequired returns whether or not the flag is required +func (f *TimestampFlag) IsRequired() bool { + return f.Required +} + +// IsVisible returns true if the flag is not hidden, otherwise false +func (f *TimestampFlag) IsVisible() bool { + return !f.Hidden +} + +// BoolFlag is a flag with type bool +type BoolFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value bool + Destination *bool + + Aliases []string + EnvVars []string +} + +// String returns a readable representation of this value (for usage defaults) +func (f *BoolFlag) String() string { + return FlagStringer(f) +} + +// IsSet returns whether or not the flag has been set through env or file +func (f *BoolFlag) IsSet() bool { + return f.HasBeenSet +} + +// Names returns the names of the flag +func (f *BoolFlag) Names() []string { + return FlagNames(f.Name, f.Aliases) +} + +// IsRequired returns whether or not the flag is required +func (f *BoolFlag) IsRequired() bool { + return f.Required +} + +// IsVisible returns true if the flag is not hidden, otherwise false +func (f *BoolFlag) IsVisible() bool { + return !f.Hidden +} + +// Float64Flag is a flag with type float64 +type Float64Flag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value float64 + Destination *float64 + + Aliases []string + EnvVars []string +} + +// String returns a readable representation of this value (for usage defaults) +func (f *Float64Flag) String() string { + return FlagStringer(f) +} + +// IsSet returns whether or not the flag has been set through env or file +func (f *Float64Flag) IsSet() bool { + return f.HasBeenSet +} + +// Names returns the names of the flag +func (f *Float64Flag) Names() []string { + return FlagNames(f.Name, f.Aliases) +} + +// IsRequired returns whether or not the flag is required +func (f *Float64Flag) IsRequired() bool { + return f.Required +} + +// IsVisible returns true if the flag is not hidden, otherwise false +func (f *Float64Flag) IsVisible() bool { + return !f.Hidden +} + +// IntFlag is a flag with type int +type IntFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value int + Destination *int + + Aliases []string + EnvVars []string +} + +// String returns a readable representation of this value (for usage defaults) +func (f *IntFlag) String() string { + return FlagStringer(f) +} + +// IsSet returns whether or not the flag has been set through env or file +func (f *IntFlag) IsSet() bool { + return f.HasBeenSet +} + +// Names returns the names of the flag +func (f *IntFlag) Names() []string { + return FlagNames(f.Name, f.Aliases) +} + +// IsRequired returns whether or not the flag is required +func (f *IntFlag) IsRequired() bool { + return f.Required +} + +// IsVisible returns true if the flag is not hidden, otherwise false +func (f *IntFlag) IsVisible() bool { + return !f.Hidden +} + +// Int64Flag is a flag with type int64 +type Int64Flag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value int64 + Destination *int64 + + Aliases []string + EnvVars []string +} + +// String returns a readable representation of this value (for usage defaults) +func (f *Int64Flag) String() string { + return FlagStringer(f) +} + +// IsSet returns whether or not the flag has been set through env or file +func (f *Int64Flag) IsSet() bool { + return f.HasBeenSet +} + +// Names returns the names of the flag +func (f *Int64Flag) Names() []string { + return FlagNames(f.Name, f.Aliases) +} + +// IsRequired returns whether or not the flag is required +func (f *Int64Flag) IsRequired() bool { + return f.Required +} + +// IsVisible returns true if the flag is not hidden, otherwise false +func (f *Int64Flag) IsVisible() bool { + return !f.Hidden +} + +// StringFlag is a flag with type string +type StringFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value string + Destination *string + + Aliases []string + EnvVars []string + + TakesFile bool +} + +// String returns a readable representation of this value (for usage defaults) +func (f *StringFlag) String() string { + return FlagStringer(f) +} + +// IsSet returns whether or not the flag has been set through env or file +func (f *StringFlag) IsSet() bool { + return f.HasBeenSet +} + +// Names returns the names of the flag +func (f *StringFlag) Names() []string { + return FlagNames(f.Name, f.Aliases) +} + +// IsRequired returns whether or not the flag is required +func (f *StringFlag) IsRequired() bool { + return f.Required +} + +// IsVisible returns true if the flag is not hidden, otherwise false +func (f *StringFlag) IsVisible() bool { + return !f.Hidden +} + +// DurationFlag is a flag with type time.Duration +type DurationFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value time.Duration + Destination *time.Duration + + Aliases []string + EnvVars []string +} + +// String returns a readable representation of this value (for usage defaults) +func (f *DurationFlag) String() string { + return FlagStringer(f) +} + +// IsSet returns whether or not the flag has been set through env or file +func (f *DurationFlag) IsSet() bool { + return f.HasBeenSet +} + +// Names returns the names of the flag +func (f *DurationFlag) Names() []string { + return FlagNames(f.Name, f.Aliases) +} + +// IsRequired returns whether or not the flag is required +func (f *DurationFlag) IsRequired() bool { + return f.Required +} + +// IsVisible returns true if the flag is not hidden, otherwise false +func (f *DurationFlag) IsVisible() bool { + return !f.Hidden +} + +// UintFlag is a flag with type uint +type UintFlag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value uint + Destination *uint + + Aliases []string + EnvVars []string +} + +// String returns a readable representation of this value (for usage defaults) +func (f *UintFlag) String() string { + return FlagStringer(f) +} + +// IsSet returns whether or not the flag has been set through env or file +func (f *UintFlag) IsSet() bool { + return f.HasBeenSet +} + +// Names returns the names of the flag +func (f *UintFlag) Names() []string { + return FlagNames(f.Name, f.Aliases) +} + +// IsRequired returns whether or not the flag is required +func (f *UintFlag) IsRequired() bool { + return f.Required +} + +// IsVisible returns true if the flag is not hidden, otherwise false +func (f *UintFlag) IsVisible() bool { + return !f.Hidden +} + +// Uint64Flag is a flag with type uint64 +type Uint64Flag struct { + Name string + + DefaultText string + FilePath string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value uint64 + Destination *uint64 + + Aliases []string + EnvVars []string +} + +// String returns a readable representation of this value (for usage defaults) +func (f *Uint64Flag) String() string { + return FlagStringer(f) +} + +// IsSet returns whether or not the flag has been set through env or file +func (f *Uint64Flag) IsSet() bool { + return f.HasBeenSet +} + +// Names returns the names of the flag +func (f *Uint64Flag) Names() []string { + return FlagNames(f.Name, f.Aliases) +} + +// IsRequired returns whether or not the flag is required +func (f *Uint64Flag) IsRequired() bool { + return f.Required +} + +// IsVisible returns true if the flag is not hidden, otherwise false +func (f *Uint64Flag) IsVisible() bool { + return !f.Hidden +} + +// vim:ro diff --git a/vendor/golang.org/x/net/http2/hpack/huffman.go b/vendor/golang.org/x/net/http2/hpack/huffman.go index fe0b84ccd..20d083a71 100644 --- a/vendor/golang.org/x/net/http2/hpack/huffman.go +++ b/vendor/golang.org/x/net/http2/hpack/huffman.go @@ -169,25 +169,50 @@ func buildRootHuffmanNode() { // AppendHuffmanString appends s, as encoded in Huffman codes, to dst // and returns the extended buffer. func AppendHuffmanString(dst []byte, s string) []byte { - rembits := uint8(8) - + // This relies on the maximum huffman code length being 30 (See tables.go huffmanCodeLen array) + // So if a uint64 buffer has less than 32 valid bits can always accommodate another huffmanCode. + var ( + x uint64 // buffer + n uint // number valid of bits present in x + ) for i := 0; i < len(s); i++ { - if rembits == 8 { - dst = append(dst, 0) + c := s[i] + n += uint(huffmanCodeLen[c]) + x <<= huffmanCodeLen[c] % 64 + x |= uint64(huffmanCodes[c]) + if n >= 32 { + n %= 32 // Normally would be -= 32 but %= 32 informs compiler 0 <= n <= 31 for upcoming shift + y := uint32(x >> n) // Compiler doesn't combine memory writes if y isn't uint32 + dst = append(dst, byte(y>>24), byte(y>>16), byte(y>>8), byte(y)) } - dst, rembits = appendByteToHuffmanCode(dst, rembits, s[i]) } - - if rembits < 8 { - // special EOS symbol - code := uint32(0x3fffffff) - nbits := uint8(30) - - t := uint8(code >> (nbits - rembits)) - dst[len(dst)-1] |= t + // Add padding bits if necessary + if over := n % 8; over > 0 { + const ( + eosCode = 0x3fffffff + eosNBits = 30 + eosPadByte = eosCode >> (eosNBits - 8) + ) + pad := 8 - over + x = (x << pad) | (eosPadByte >> over) + n += pad // 8 now divides into n exactly } - - return dst + // n in (0, 8, 16, 24, 32) + switch n / 8 { + case 0: + return dst + case 1: + return append(dst, byte(x)) + case 2: + y := uint16(x) + return append(dst, byte(y>>8), byte(y)) + case 3: + y := uint16(x >> 8) + return append(dst, byte(y>>8), byte(y), byte(x)) + } + // case 4: + y := uint32(x) + return append(dst, byte(y>>24), byte(y>>16), byte(y>>8), byte(y)) } // HuffmanEncodeLength returns the number of bytes required to encode @@ -199,35 +224,3 @@ func HuffmanEncodeLength(s string) uint64 { } return (n + 7) / 8 } - -// appendByteToHuffmanCode appends Huffman code for c to dst and -// returns the extended buffer and the remaining bits in the last -// element. The appending is not byte aligned and the remaining bits -// in the last element of dst is given in rembits. -func appendByteToHuffmanCode(dst []byte, rembits uint8, c byte) ([]byte, uint8) { - code := huffmanCodes[c] - nbits := huffmanCodeLen[c] - - for { - if rembits > nbits { - t := uint8(code << (rembits - nbits)) - dst[len(dst)-1] |= t - rembits -= nbits - break - } - - t := uint8(code >> (nbits - rembits)) - dst[len(dst)-1] |= t - - nbits -= rembits - rembits = 8 - - if nbits == 0 { - break - } - - dst = append(dst, 0) - } - - return dst, rembits -} diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go index 4bb0d66e3..2d859af8f 100644 --- a/vendor/golang.org/x/net/http2/server.go +++ b/vendor/golang.org/x/net/http2/server.go @@ -2645,8 +2645,7 @@ func checkWriteHeaderCode(code int) { // Issue 22880: require valid WriteHeader status codes. // For now we only enforce that it's three digits. // In the future we might block things over 599 (600 and above aren't defined - // at http://httpwg.org/specs/rfc7231.html#status.codes) - // and we might block under 200 (once we have more mature 1xx support). + // at http://httpwg.org/specs/rfc7231.html#status.codes). // But for now any three digits. // // We used to send "HTTP/1.1 000 0" on the wire in responses but there's @@ -2667,13 +2666,41 @@ func (w *responseWriter) WriteHeader(code int) { } func (rws *responseWriterState) writeHeader(code int) { - if !rws.wroteHeader { - checkWriteHeaderCode(code) - rws.wroteHeader = true - rws.status = code - if len(rws.handlerHeader) > 0 { - rws.snapHeader = cloneHeader(rws.handlerHeader) + if rws.wroteHeader { + return + } + + checkWriteHeaderCode(code) + + // Handle informational headers + if code >= 100 && code <= 199 { + // Per RFC 8297 we must not clear the current header map + h := rws.handlerHeader + + _, cl := h["Content-Length"] + _, te := h["Transfer-Encoding"] + if cl || te { + h = h.Clone() + h.Del("Content-Length") + h.Del("Transfer-Encoding") } + + if rws.conn.writeHeaders(rws.stream, &writeResHeaders{ + streamID: rws.stream.id, + httpResCode: code, + h: h, + endStream: rws.handlerDone && !rws.hasTrailers(), + }) != nil { + rws.dirty = true + } + + return + } + + rws.wroteHeader = true + rws.status = code + if len(rws.handlerHeader) > 0 { + rws.snapHeader = cloneHeader(rws.handlerHeader) } } diff --git a/vendor/golang.org/x/sync/errgroup/errgroup.go b/vendor/golang.org/x/sync/errgroup/errgroup.go index 9857fe53d..1eab2fdf9 100644 --- a/vendor/golang.org/x/sync/errgroup/errgroup.go +++ b/vendor/golang.org/x/sync/errgroup/errgroup.go @@ -8,9 +8,12 @@ package errgroup import ( "context" + "fmt" "sync" ) +type token struct{} + // A Group is a collection of goroutines working on subtasks that are part of // the same overall task. // @@ -20,10 +23,19 @@ type Group struct { wg sync.WaitGroup + sem chan token + errOnce sync.Once err error } +func (g *Group) done() { + if g.sem != nil { + <-g.sem + } + g.wg.Done() +} + // WithContext returns a new Group and an associated Context derived from ctx. // // The derived Context is canceled the first time a function passed to Go @@ -45,14 +57,19 @@ func (g *Group) Wait() error { } // Go calls the given function in a new goroutine. +// It blocks until the new goroutine can be added without the number of +// active goroutines in the group exceeding the configured limit. // // The first call to return a non-nil error cancels the group; its error will be // returned by Wait. func (g *Group) Go(f func() error) { - g.wg.Add(1) + if g.sem != nil { + g.sem <- token{} + } + g.wg.Add(1) go func() { - defer g.wg.Done() + defer g.done() if err := f(); err != nil { g.errOnce.Do(func() { @@ -64,3 +81,51 @@ func (g *Group) Go(f func() error) { } }() } + +// TryGo calls the given function in a new goroutine only if the number of +// active goroutines in the group is currently below the configured limit. +// +// The return value reports whether the goroutine was started. +func (g *Group) TryGo(f func() error) bool { + if g.sem != nil { + select { + case g.sem <- token{}: + // Note: this allows barging iff channels in general allow barging. + default: + return false + } + } + + g.wg.Add(1) + go func() { + defer g.done() + + if err := f(); err != nil { + g.errOnce.Do(func() { + g.err = err + if g.cancel != nil { + g.cancel() + } + }) + } + }() + return true +} + +// SetLimit limits the number of active goroutines in this group to at most n. +// A negative value indicates no limit. +// +// Any subsequent call to the Go method will block until it can add an active +// goroutine without exceeding the configured limit. +// +// The limit must not be modified while any goroutines in the group are active. +func (g *Group) SetLimit(n int) { + if n < 0 { + g.sem = nil + return + } + if len(g.sem) != 0 { + panic(fmt.Errorf("errgroup: modify limit while %v goroutines in the group are still active", len(g.sem))) + } + g.sem = make(chan token, n) +} diff --git a/vendor/golang.org/x/sys/unix/ifreq_linux.go b/vendor/golang.org/x/sys/unix/ifreq_linux.go index 934af313c..15721a510 100644 --- a/vendor/golang.org/x/sys/unix/ifreq_linux.go +++ b/vendor/golang.org/x/sys/unix/ifreq_linux.go @@ -8,7 +8,6 @@ package unix import ( - "bytes" "unsafe" ) @@ -45,13 +44,7 @@ func NewIfreq(name string) (*Ifreq, error) { // Name returns the interface name associated with the Ifreq. func (ifr *Ifreq) Name() string { - // BytePtrToString requires a NULL terminator or the program may crash. If - // one is not present, just return the empty string. - if !bytes.Contains(ifr.raw.Ifrn[:], []byte{0x00}) { - return "" - } - - return BytePtrToString(&ifr.raw.Ifrn[0]) + return ByteSliceToString(ifr.raw.Ifrn[:]) } // According to netdevice(7), only AF_INET addresses are returned for numerous diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go index 09a25c653..e5448cc93 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -504,6 +504,7 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { //sys Mkdirat(dirfd int, path string, mode uint32) (err error) //sys Mkfifo(path string, mode uint32) (err error) //sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) //sys Open(path string, mode int, perm uint32) (fd int, err error) //sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) //sys Pathconf(path string, name int) (val int, err error) @@ -572,7 +573,6 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { // Nfssvc // Getfh // Quotactl -// Mount // Csops // Waitid // Add_profil diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go index 234fd4a5d..1b305fab1 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -5,7 +5,7 @@ // +build 386,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go index 58619b758..6bcdef5dd 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -5,7 +5,7 @@ // +build amd64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go index 3a64ff59d..e65df0f8d 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -5,7 +5,7 @@ // +build arm,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go index abe0b9257..c7021115a 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -5,7 +5,7 @@ // +build arm64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go index ebc5f3218..0d83a1cd4 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go @@ -5,7 +5,7 @@ // +build loong64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go index 14d7a8439..7f44a495b 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -5,7 +5,7 @@ // +build mips,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go index 99e7c4ac0..2f92b4e48 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -5,7 +5,7 @@ // +build mips64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go index 496364c33..f5367a966 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -5,7 +5,7 @@ // +build mips64le,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go index 3e4083085..2e22337d7 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -5,7 +5,7 @@ // +build mipsle,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go index 1151a7dfa..858c4f30f 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -5,7 +5,7 @@ // +build ppc,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go index ed17f249e..af2a7ba6e 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -5,7 +5,7 @@ // +build ppc64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go index d84a37c1a..eaa2eb8e2 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -5,7 +5,7 @@ // +build ppc64le,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go index 5cafba83f..faaa9f063 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -5,7 +5,7 @@ // +build riscv64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go index 6d122da41..0d161f0b7 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -5,7 +5,7 @@ // +build s390x,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go index 6bd19e51d..4fd497a3e 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -5,7 +5,7 @@ // +build sparc64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go index 879376589..467deed76 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -1643,6 +1643,30 @@ var libc_mknod_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Open(path string, mode int, perm uint32) (fd int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s index 8da90cf0e..7e308a476 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s @@ -600,6 +600,12 @@ TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) + +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_open(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go index f47eedd5a..35938d34f 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -1643,6 +1643,30 @@ var libc_mknod_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Open(path string, mode int, perm uint32) (fd int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s index 4d26f7d01..b09e5bb0e 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s @@ -600,6 +600,12 @@ TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) + +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_open(SB) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go index 531409256..4948362f2 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build 386 && linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go index b02ab83db..f64345e0e 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build amd64 && linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go index 9e6871d2e..72469c79e 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build arm && linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go index b732d1255..68f072283 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build arm64 && linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go index 61fbb24f8..090ae46c6 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build loong64 && linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go index 5310f71ea..03604cca1 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mips && linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go index 219bbb126..fe57a7b26 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mips64 && linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go index be9432da5..3f0db4da8 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mips64le && linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go index d0155a42e..70ecd3b23 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mipsle && linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go index 01c17bcc6..4e700120d 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build ppc && linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go index 944a9c3c7..34a57c699 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build ppc64 && linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go index 5d2c90e1c..6b84a4729 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build ppc64le && linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go index e173cb515..c4a305fe2 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build riscv64 && linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go index 6106715d5..a1f1e4c9e 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build s390x && linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go index ca7b37b4b..df95ebf3a 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build sparc64 && linux diff --git a/vendor/google.golang.org/api/internal/version.go b/vendor/google.golang.org/api/internal/version.go index da7c6a545..64a30b48e 100644 --- a/vendor/google.golang.org/api/internal/version.go +++ b/vendor/google.golang.org/api/internal/version.go @@ -5,4 +5,4 @@ package internal // Version is the current tagged release of the library. -const Version = "0.78.0" +const Version = "0.80.0" diff --git a/vendor/google.golang.org/api/storage/v1/storage-api.json b/vendor/google.golang.org/api/storage/v1/storage-api.json index 998eac671..8b0a8f87d 100644 --- a/vendor/google.golang.org/api/storage/v1/storage-api.json +++ b/vendor/google.golang.org/api/storage/v1/storage-api.json @@ -26,7 +26,7 @@ "description": "Stores and retrieves potentially large, immutable data objects.", "discoveryVersion": "v1", "documentationLink": "https://developers.google.com/storage/docs/json_api/", - "etag": "\"37343432393730373535343630303638323335\"", + "etag": "\"3135383434363131313530373135383336353335\"", "icons": { "x16": "https://www.google.com/images/icons/product/cloud_storage-16.png", "x32": "https://www.google.com/images/icons/product/cloud_storage-32.png" @@ -3005,7 +3005,7 @@ } } }, - "revision": "20220401", + "revision": "20220509", "rootUrl": "https://storage.googleapis.com/", "schemas": { "Bucket": { @@ -3223,6 +3223,13 @@ "description": "A regular expression that satisfies the RE2 syntax. This condition is satisfied when the name of the object matches the RE2 pattern. Note: This feature is currently in the \"Early Access\" launch stage and is only available to a whitelisted set of users; that means that this feature may be changed in backward-incompatible ways and that it is not guaranteed to be released.", "type": "string" }, + "matchesPrefix": { + "description": "List of object name prefixes. This condition will be satisfied when at least one of the prefixes exactly matches the beginning of the object name.", + "items": { + "type": "string" + }, + "type": "array" + }, "matchesStorageClass": { "description": "Objects having any of the storage classes specified by this condition will be matched. Values include MULTI_REGIONAL, REGIONAL, NEARLINE, COLDLINE, ARCHIVE, STANDARD, and DURABLE_REDUCED_AVAILABILITY.", "items": { @@ -3230,6 +3237,13 @@ }, "type": "array" }, + "matchesSuffix": { + "description": "List of object name suffixes. This condition will be satisfied when at least one of the suffixes exactly matches the end of the object name.", + "items": { + "type": "string" + }, + "type": "array" + }, "noncurrentTimeBefore": { "description": "A date in RFC 3339 format with only the date part (for instance, \"2013-01-15\"). This condition is satisfied when the noncurrent time on an object is before this date in UTC. This condition is relevant only for versioned objects.", "format": "date", diff --git a/vendor/google.golang.org/api/storage/v1/storage-gen.go b/vendor/google.golang.org/api/storage/v1/storage-gen.go index a5bb739f9..8ef427200 100644 --- a/vendor/google.golang.org/api/storage/v1/storage-gen.go +++ b/vendor/google.golang.org/api/storage/v1/storage-gen.go @@ -827,12 +827,22 @@ type BucketLifecycleRuleCondition struct { // ways and that it is not guaranteed to be released. MatchesPattern string `json:"matchesPattern,omitempty"` + // MatchesPrefix: List of object name prefixes. This condition will be + // satisfied when at least one of the prefixes exactly matches the + // beginning of the object name. + MatchesPrefix []string `json:"matchesPrefix,omitempty"` + // MatchesStorageClass: Objects having any of the storage classes // specified by this condition will be matched. Values include // MULTI_REGIONAL, REGIONAL, NEARLINE, COLDLINE, ARCHIVE, STANDARD, and // DURABLE_REDUCED_AVAILABILITY. MatchesStorageClass []string `json:"matchesStorageClass,omitempty"` + // MatchesSuffix: List of object name suffixes. This condition will be + // satisfied when at least one of the suffixes exactly matches the end + // of the object name. + MatchesSuffix []string `json:"matchesSuffix,omitempty"` + // NoncurrentTimeBefore: A date in RFC 3339 format with only the date // part (for instance, "2013-01-15"). This condition is satisfied when // the noncurrent time on an object is before this date in UTC. This diff --git a/vendor/google.golang.org/genproto/googleapis/storage/v2/storage.pb.go b/vendor/google.golang.org/genproto/googleapis/storage/v2/storage.pb.go index a6e73835b..e47839582 100644 --- a/vendor/google.golang.org/genproto/googleapis/storage/v2/storage.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/storage/v2/storage.pb.go @@ -176,7 +176,7 @@ func (x ServiceConstants_Values) Number() protoreflect.EnumNumber { // Deprecated: Use ServiceConstants_Values.Descriptor instead. func (ServiceConstants_Values) EnumDescriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{38, 0} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{37, 0} } // Request message for DeleteBucket. @@ -192,8 +192,6 @@ type DeleteBucketRequest struct { // If set, only deletes the bucket if its metageneration does not match this // value. IfMetagenerationNotMatch *int64 `protobuf:"varint,3,opt,name=if_metageneration_not_match,json=ifMetagenerationNotMatch,proto3,oneof" json:"if_metageneration_not_match,omitempty"` - // A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,5,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` } func (x *DeleteBucketRequest) Reset() { @@ -249,13 +247,6 @@ func (x *DeleteBucketRequest) GetIfMetagenerationNotMatch() int64 { return 0 } -func (x *DeleteBucketRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - // Request message for GetBucket. type GetBucketRequest struct { state protoimpl.MessageState @@ -270,8 +261,6 @@ type GetBucketRequest struct { // If set, and if the bucket's current metageneration matches the specified // value, the request will return an error. IfMetagenerationNotMatch *int64 `protobuf:"varint,3,opt,name=if_metageneration_not_match,json=ifMetagenerationNotMatch,proto3,oneof" json:"if_metageneration_not_match,omitempty"` - // A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,4,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` // Mask specifying which fields to read. // A "*" field may be used to indicate all fields. // If no mask is specified, will default to all fields. @@ -331,13 +320,6 @@ func (x *GetBucketRequest) GetIfMetagenerationNotMatch() int64 { return 0 } -func (x *GetBucketRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - func (x *GetBucketRequest) GetReadMask() *fieldmaskpb.FieldMask { if x != nil { return x.ReadMask @@ -354,8 +336,9 @@ type CreateBucketRequest struct { // Required. The project to which this bucket will belong. Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` // Required. Properties of the new bucket being inserted. - // The project and name of the bucket are specified in this request, not in - // the bucket resource. + // The project and name of the bucket are specified in the parent and + // bucket_id fields, respectively. Populating those fields in `bucket` will + // result in an error. Bucket *Bucket `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"` // Required. The ID to use for this bucket, which will become the final component of // the bucket's resource name. For example, the value `foo` might result in @@ -461,8 +444,6 @@ type ListBucketsRequest struct { // items.acl, and items.default_object_acl. // * may be used to mean "all fields". ReadMask *fieldmaskpb.FieldMask `protobuf:"bytes,5,opt,name=read_mask,json=readMask,proto3,oneof" json:"read_mask,omitempty"` - // A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,6,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` } func (x *ListBucketsRequest) Reset() { @@ -532,13 +513,6 @@ func (x *ListBucketsRequest) GetReadMask() *fieldmaskpb.FieldMask { return nil } -func (x *ListBucketsRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - // The result of a call to Buckets.ListBuckets type ListBucketsResponse struct { state protoimpl.MessageState @@ -609,8 +583,6 @@ type LockBucketRetentionPolicyRequest struct { // Makes the operation conditional on whether bucket's current metageneration // matches the given value. Must be positive. IfMetagenerationMatch int64 `protobuf:"varint,2,opt,name=if_metageneration_match,json=ifMetagenerationMatch,proto3" json:"if_metageneration_match,omitempty"` - // A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,3,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` } func (x *LockBucketRetentionPolicyRequest) Reset() { @@ -659,13 +631,6 @@ func (x *LockBucketRetentionPolicyRequest) GetIfMetagenerationMatch() int64 { return 0 } -func (x *LockBucketRetentionPolicyRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - // Request for UpdateBucket method. type UpdateBucketRequest struct { state protoimpl.MessageState @@ -700,8 +665,6 @@ type UpdateBucketRequest struct { // Not specifying a field while setting that field to a non-default value is // an error. UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,6,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` - // A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,7,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` } func (x *UpdateBucketRequest) Reset() { @@ -778,13 +741,6 @@ func (x *UpdateBucketRequest) GetUpdateMask() *fieldmaskpb.FieldMask { return nil } -func (x *UpdateBucketRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - // Request message for DeleteNotification. type DeleteNotificationRequest struct { state protoimpl.MessageState @@ -1103,8 +1059,6 @@ type ComposeObjectRequest struct { KmsKey string `protobuf:"bytes,6,opt,name=kms_key,json=kmsKey,proto3" json:"kms_key,omitempty"` // A set of parameters common to Storage API requests concerning an object. CommonObjectRequestParams *CommonObjectRequestParams `protobuf:"bytes,7,opt,name=common_object_request_params,json=commonObjectRequestParams,proto3" json:"common_object_request_params,omitempty"` - // A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,8,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` } func (x *ComposeObjectRequest) Reset() { @@ -1188,13 +1142,6 @@ func (x *ComposeObjectRequest) GetCommonObjectRequestParams() *CommonObjectReque return nil } -func (x *ComposeObjectRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - // Message for deleting an object. // Either `bucket` and `object` *or* `upload_id` **must** be set (but not both). type DeleteObjectRequest struct { @@ -1230,8 +1177,6 @@ type DeleteObjectRequest struct { IfMetagenerationNotMatch *int64 `protobuf:"varint,8,opt,name=if_metageneration_not_match,json=ifMetagenerationNotMatch,proto3,oneof" json:"if_metageneration_not_match,omitempty"` // A set of parameters common to Storage API requests concerning an object. CommonObjectRequestParams *CommonObjectRequestParams `protobuf:"bytes,10,opt,name=common_object_request_params,json=commonObjectRequestParams,proto3" json:"common_object_request_params,omitempty"` - // A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,11,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` } func (x *DeleteObjectRequest) Reset() { @@ -1329,13 +1274,6 @@ func (x *DeleteObjectRequest) GetCommonObjectRequestParams() *CommonObjectReques return nil } -func (x *DeleteObjectRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - // Request message for ReadObject. type ReadObjectRequest struct { state protoimpl.MessageState @@ -1384,8 +1322,6 @@ type ReadObjectRequest struct { IfMetagenerationNotMatch *int64 `protobuf:"varint,9,opt,name=if_metageneration_not_match,json=ifMetagenerationNotMatch,proto3,oneof" json:"if_metageneration_not_match,omitempty"` // A set of parameters common to Storage API requests concerning an object. CommonObjectRequestParams *CommonObjectRequestParams `protobuf:"bytes,10,opt,name=common_object_request_params,json=commonObjectRequestParams,proto3" json:"common_object_request_params,omitempty"` - // A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,11,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` // Mask specifying which fields to read. // The checksummed_data field and its children will always be present. // If no mask is specified, will default to all fields except metadata.owner @@ -1496,13 +1432,6 @@ func (x *ReadObjectRequest) GetCommonObjectRequestParams() *CommonObjectRequestP return nil } -func (x *ReadObjectRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - func (x *ReadObjectRequest) GetReadMask() *fieldmaskpb.FieldMask { if x != nil { return x.ReadMask @@ -1540,8 +1469,6 @@ type GetObjectRequest struct { IfMetagenerationNotMatch *int64 `protobuf:"varint,7,opt,name=if_metageneration_not_match,json=ifMetagenerationNotMatch,proto3,oneof" json:"if_metageneration_not_match,omitempty"` // A set of parameters common to Storage API requests concerning an object. CommonObjectRequestParams *CommonObjectRequestParams `protobuf:"bytes,8,opt,name=common_object_request_params,json=commonObjectRequestParams,proto3" json:"common_object_request_params,omitempty"` - // A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,9,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` // Mask specifying which fields to read. // If no mask is specified, will default to all fields except metadata.acl and // metadata.owner. @@ -1637,13 +1564,6 @@ func (x *GetObjectRequest) GetCommonObjectRequestParams() *CommonObjectRequestPa return nil } -func (x *GetObjectRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - func (x *GetObjectRequest) GetReadMask() *fieldmaskpb.FieldMask { if x != nil { return x.ReadMask @@ -1883,8 +1803,6 @@ type WriteObjectRequest struct { FinishWrite bool `protobuf:"varint,7,opt,name=finish_write,json=finishWrite,proto3" json:"finish_write,omitempty"` // A set of parameters common to Storage API requests concerning an object. CommonObjectRequestParams *CommonObjectRequestParams `protobuf:"bytes,8,opt,name=common_object_request_params,json=commonObjectRequestParams,proto3" json:"common_object_request_params,omitempty"` - // A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,9,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` } func (x *WriteObjectRequest) Reset() { @@ -1982,13 +1900,6 @@ func (x *WriteObjectRequest) GetCommonObjectRequestParams() *CommonObjectRequest return nil } -func (x *WriteObjectRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - type isWriteObjectRequest_FirstMessage interface { isWriteObjectRequest_FirstMessage() } @@ -2157,8 +2068,6 @@ type ListObjectsRequest struct { // have names between lexicographic_start (inclusive) and lexicographic_end // (exclusive). LexicographicEnd string `protobuf:"bytes,11,opt,name=lexicographic_end,json=lexicographicEnd,proto3" json:"lexicographic_end,omitempty"` - // A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,9,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` } func (x *ListObjectsRequest) Reset() { @@ -2263,13 +2172,6 @@ func (x *ListObjectsRequest) GetLexicographicEnd() string { return "" } -func (x *ListObjectsRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - // Request object for `QueryWriteStatus`. type QueryWriteStatusRequest struct { state protoimpl.MessageState @@ -2281,8 +2183,6 @@ type QueryWriteStatusRequest struct { UploadId string `protobuf:"bytes,1,opt,name=upload_id,json=uploadId,proto3" json:"upload_id,omitempty"` // A set of parameters common to Storage API requests concerning an object. CommonObjectRequestParams *CommonObjectRequestParams `protobuf:"bytes,2,opt,name=common_object_request_params,json=commonObjectRequestParams,proto3" json:"common_object_request_params,omitempty"` - // A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,3,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` } func (x *QueryWriteStatusRequest) Reset() { @@ -2331,13 +2231,6 @@ func (x *QueryWriteStatusRequest) GetCommonObjectRequestParams() *CommonObjectRe return nil } -func (x *QueryWriteStatusRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - // Response object for `QueryWriteStatus`. type QueryWriteStatusResponse struct { state protoimpl.MessageState @@ -2530,8 +2423,6 @@ type RewriteObjectRequest struct { CopySourceEncryptionKeySha256Bytes []byte `protobuf:"bytes,22,opt,name=copy_source_encryption_key_sha256_bytes,json=copySourceEncryptionKeySha256Bytes,proto3" json:"copy_source_encryption_key_sha256_bytes,omitempty"` // A set of parameters common to Storage API requests concerning an object. CommonObjectRequestParams *CommonObjectRequestParams `protobuf:"bytes,19,opt,name=common_object_request_params,json=commonObjectRequestParams,proto3" json:"common_object_request_params,omitempty"` - // A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,20,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` } func (x *RewriteObjectRequest) Reset() { @@ -2720,13 +2611,6 @@ func (x *RewriteObjectRequest) GetCommonObjectRequestParams() *CommonObjectReque return nil } -func (x *RewriteObjectRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - // A rewrite response. type RewriteResponse struct { state protoimpl.MessageState @@ -2827,8 +2711,6 @@ type StartResumableWriteRequest struct { WriteObjectSpec *WriteObjectSpec `protobuf:"bytes,1,opt,name=write_object_spec,json=writeObjectSpec,proto3" json:"write_object_spec,omitempty"` // A set of parameters common to Storage API requests concerning an object. CommonObjectRequestParams *CommonObjectRequestParams `protobuf:"bytes,3,opt,name=common_object_request_params,json=commonObjectRequestParams,proto3" json:"common_object_request_params,omitempty"` - // A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,4,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` } func (x *StartResumableWriteRequest) Reset() { @@ -2877,13 +2759,6 @@ func (x *StartResumableWriteRequest) GetCommonObjectRequestParams() *CommonObjec return nil } -func (x *StartResumableWriteRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - // Response object for `StartResumableWrite`. type StartResumableWriteResponse struct { state protoimpl.MessageState @@ -2978,8 +2853,6 @@ type UpdateObjectRequest struct { UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,7,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` // A set of parameters common to Storage API requests concerning an object. CommonObjectRequestParams *CommonObjectRequestParams `protobuf:"bytes,8,opt,name=common_object_request_params,json=commonObjectRequestParams,proto3" json:"common_object_request_params,omitempty"` - // A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,9,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` } func (x *UpdateObjectRequest) Reset() { @@ -3070,13 +2943,6 @@ func (x *UpdateObjectRequest) GetCommonObjectRequestParams() *CommonObjectReques return nil } -func (x *UpdateObjectRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - // Request message for GetServiceAccount. type GetServiceAccountRequest struct { state protoimpl.MessageState @@ -3085,8 +2951,6 @@ type GetServiceAccountRequest struct { // Required. Project ID. Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` - // A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,2,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` } func (x *GetServiceAccountRequest) Reset() { @@ -3128,13 +2992,6 @@ func (x *GetServiceAccountRequest) GetProject() string { return "" } -func (x *GetServiceAccountRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - // Request message for CreateHmacKey. type CreateHmacKeyRequest struct { state protoimpl.MessageState @@ -3145,8 +3002,6 @@ type CreateHmacKeyRequest struct { Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` // Required. The service account to create the HMAC for. ServiceAccountEmail string `protobuf:"bytes,2,opt,name=service_account_email,json=serviceAccountEmail,proto3" json:"service_account_email,omitempty"` - // A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,3,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` } func (x *CreateHmacKeyRequest) Reset() { @@ -3195,13 +3050,6 @@ func (x *CreateHmacKeyRequest) GetServiceAccountEmail() string { return "" } -func (x *CreateHmacKeyRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - // Create hmac response. The only time the secret for an HMAC will be returned. type CreateHmacKeyResponse struct { state protoimpl.MessageState @@ -3271,8 +3119,6 @@ type DeleteHmacKeyRequest struct { AccessId string `protobuf:"bytes,1,opt,name=access_id,json=accessId,proto3" json:"access_id,omitempty"` // Required. The project id the HMAC key lies in. Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` - // A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,3,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` } func (x *DeleteHmacKeyRequest) Reset() { @@ -3321,13 +3167,6 @@ func (x *DeleteHmacKeyRequest) GetProject() string { return "" } -func (x *DeleteHmacKeyRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - // Request object to get metadata on a given HMAC key. type GetHmacKeyRequest struct { state protoimpl.MessageState @@ -3338,8 +3177,6 @@ type GetHmacKeyRequest struct { AccessId string `protobuf:"bytes,1,opt,name=access_id,json=accessId,proto3" json:"access_id,omitempty"` // Required. The project id the HMAC key lies in. Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` - // A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,3,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` } func (x *GetHmacKeyRequest) Reset() { @@ -3388,13 +3225,6 @@ func (x *GetHmacKeyRequest) GetProject() string { return "" } -func (x *GetHmacKeyRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - // Request to fetch a list of HMAC keys under a given project. type ListHmacKeysRequest struct { state protoimpl.MessageState @@ -3411,8 +3241,6 @@ type ListHmacKeysRequest struct { ServiceAccountEmail string `protobuf:"bytes,4,opt,name=service_account_email,json=serviceAccountEmail,proto3" json:"service_account_email,omitempty"` // Optional. If set, return deleted keys that have not yet been wiped out. ShowDeletedKeys bool `protobuf:"varint,5,opt,name=show_deleted_keys,json=showDeletedKeys,proto3" json:"show_deleted_keys,omitempty"` - // Optional. A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,6,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` } func (x *ListHmacKeysRequest) Reset() { @@ -3482,13 +3310,6 @@ func (x *ListHmacKeysRequest) GetShowDeletedKeys() bool { return false } -func (x *ListHmacKeysRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - // Hmac key list response with next page information. type ListHmacKeysResponse struct { state protoimpl.MessageState @@ -3559,8 +3380,6 @@ type UpdateHmacKeyRequest struct { // Otherwise, the hmac_key's access_id and project fields will be used to // identify the key. HmacKey *HmacKeyMetadata `protobuf:"bytes,1,opt,name=hmac_key,json=hmacKey,proto3" json:"hmac_key,omitempty"` - // A set of parameters common to all Storage API requests. - CommonRequestParams *CommonRequestParams `protobuf:"bytes,2,opt,name=common_request_params,json=commonRequestParams,proto3" json:"common_request_params,omitempty"` // Update mask for hmac_key. UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` } @@ -3604,13 +3423,6 @@ func (x *UpdateHmacKeyRequest) GetHmacKey() *HmacKeyMetadata { return nil } -func (x *UpdateHmacKeyRequest) GetCommonRequestParams() *CommonRequestParams { - if x != nil { - return x.CommonRequestParams - } - return nil -} - func (x *UpdateHmacKeyRequest) GetUpdateMask() *fieldmaskpb.FieldMask { if x != nil { return x.UpdateMask @@ -3688,55 +3500,6 @@ func (x *CommonObjectRequestParams) GetEncryptionKeySha256Bytes() []byte { return nil } -// Parameters that can be passed to any request. -type CommonRequestParams struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. Required when using buckets with Requestor Pays feature enabled. - UserProject string `protobuf:"bytes,1,opt,name=user_project,json=userProject,proto3" json:"user_project,omitempty"` -} - -func (x *CommonRequestParams) Reset() { - *x = CommonRequestParams{} - if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CommonRequestParams) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CommonRequestParams) ProtoMessage() {} - -func (x *CommonRequestParams) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[37] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CommonRequestParams.ProtoReflect.Descriptor instead. -func (*CommonRequestParams) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{37} -} - -func (x *CommonRequestParams) GetUserProject() string { - if x != nil { - return x.UserProject - } - return "" -} - // Shared constants. type ServiceConstants struct { state protoimpl.MessageState @@ -3747,7 +3510,7 @@ type ServiceConstants struct { func (x *ServiceConstants) Reset() { *x = ServiceConstants{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[38] + mi := &file_google_storage_v2_storage_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3760,7 +3523,7 @@ func (x *ServiceConstants) String() string { func (*ServiceConstants) ProtoMessage() {} func (x *ServiceConstants) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[38] + mi := &file_google_storage_v2_storage_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3773,7 +3536,7 @@ func (x *ServiceConstants) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceConstants.ProtoReflect.Descriptor instead. func (*ServiceConstants) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{38} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{37} } // A bucket. @@ -3828,8 +3591,7 @@ type Bucket struct { // [https://developers.google.com/storage/docs/lifecycle]Lifecycle Management] // for more information. Lifecycle *Bucket_Lifecycle `protobuf:"bytes,10,opt,name=lifecycle,proto3" json:"lifecycle,omitempty"` - // Output only. The creation time of the bucket in - // [https://tools.ietf.org/html/rfc3339][RFC 3339] format. + // Output only. The creation time of the bucket. // Attempting to set or update this field will result in a // [FieldViolation][google.rpc.BadRequest.FieldViolation]. CreateTime *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` @@ -3894,7 +3656,7 @@ type Bucket struct { func (x *Bucket) Reset() { *x = Bucket{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[39] + mi := &file_google_storage_v2_storage_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3907,7 +3669,7 @@ func (x *Bucket) String() string { func (*Bucket) ProtoMessage() {} func (x *Bucket) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[39] + mi := &file_google_storage_v2_storage_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3920,7 +3682,7 @@ func (x *Bucket) ProtoReflect() protoreflect.Message { // Deprecated: Use Bucket.ProtoReflect.Descriptor instead. func (*Bucket) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{39} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{38} } func (x *Bucket) GetName() string { @@ -4144,7 +3906,7 @@ type BucketAccessControl struct { func (x *BucketAccessControl) Reset() { *x = BucketAccessControl{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[40] + mi := &file_google_storage_v2_storage_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4157,7 +3919,7 @@ func (x *BucketAccessControl) String() string { func (*BucketAccessControl) ProtoMessage() {} func (x *BucketAccessControl) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[40] + mi := &file_google_storage_v2_storage_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4170,7 +3932,7 @@ func (x *BucketAccessControl) ProtoReflect() protoreflect.Message { // Deprecated: Use BucketAccessControl.ProtoReflect.Descriptor instead. func (*BucketAccessControl) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{40} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{39} } func (x *BucketAccessControl) GetRole() string { @@ -4238,7 +4000,7 @@ type ChecksummedData struct { func (x *ChecksummedData) Reset() { *x = ChecksummedData{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[41] + mi := &file_google_storage_v2_storage_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4251,7 +4013,7 @@ func (x *ChecksummedData) String() string { func (*ChecksummedData) ProtoMessage() {} func (x *ChecksummedData) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[41] + mi := &file_google_storage_v2_storage_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4264,7 +4026,7 @@ func (x *ChecksummedData) ProtoReflect() protoreflect.Message { // Deprecated: Use ChecksummedData.ProtoReflect.Descriptor instead. func (*ChecksummedData) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{41} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{40} } func (x *ChecksummedData) GetContent() []byte { @@ -4305,7 +4067,7 @@ type ObjectChecksums struct { func (x *ObjectChecksums) Reset() { *x = ObjectChecksums{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[42] + mi := &file_google_storage_v2_storage_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4318,7 +4080,7 @@ func (x *ObjectChecksums) String() string { func (*ObjectChecksums) ProtoMessage() {} func (x *ObjectChecksums) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[42] + mi := &file_google_storage_v2_storage_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4331,7 +4093,7 @@ func (x *ObjectChecksums) ProtoReflect() protoreflect.Message { // Deprecated: Use ObjectChecksums.ProtoReflect.Descriptor instead. func (*ObjectChecksums) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{42} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{41} } func (x *ObjectChecksums) GetCrc32C() uint32 { @@ -4364,16 +4126,16 @@ type HmacKeyMetadata struct { ServiceAccountEmail string `protobuf:"bytes,4,opt,name=service_account_email,json=serviceAccountEmail,proto3" json:"service_account_email,omitempty"` // State of the key. One of ACTIVE, INACTIVE, or DELETED. State string `protobuf:"bytes,5,opt,name=state,proto3" json:"state,omitempty"` - // The creation time of the HMAC key in RFC 3339 format. + // The creation time of the HMAC key. CreateTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` - // The last modification time of the HMAC key metadata in RFC 3339 format. + // The last modification time of the HMAC key metadata. UpdateTime *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` } func (x *HmacKeyMetadata) Reset() { *x = HmacKeyMetadata{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[43] + mi := &file_google_storage_v2_storage_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4386,7 +4148,7 @@ func (x *HmacKeyMetadata) String() string { func (*HmacKeyMetadata) ProtoMessage() {} func (x *HmacKeyMetadata) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[43] + mi := &file_google_storage_v2_storage_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4399,7 +4161,7 @@ func (x *HmacKeyMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use HmacKeyMetadata.ProtoReflect.Descriptor instead. func (*HmacKeyMetadata) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{43} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{42} } func (x *HmacKeyMetadata) GetId() string { @@ -4481,7 +4243,7 @@ type Notification struct { func (x *Notification) Reset() { *x = Notification{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[44] + mi := &file_google_storage_v2_storage_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4494,7 +4256,7 @@ func (x *Notification) String() string { func (*Notification) ProtoMessage() {} func (x *Notification) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[44] + mi := &file_google_storage_v2_storage_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4507,7 +4269,7 @@ func (x *Notification) ProtoReflect() protoreflect.Message { // Deprecated: Use Notification.ProtoReflect.Descriptor instead. func (*Notification) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{44} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{43} } func (x *Notification) GetName() string { @@ -4569,7 +4331,7 @@ type CustomerEncryption struct { func (x *CustomerEncryption) Reset() { *x = CustomerEncryption{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[45] + mi := &file_google_storage_v2_storage_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4582,7 +4344,7 @@ func (x *CustomerEncryption) String() string { func (*CustomerEncryption) ProtoMessage() {} func (x *CustomerEncryption) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[45] + mi := &file_google_storage_v2_storage_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4595,7 +4357,7 @@ func (x *CustomerEncryption) ProtoReflect() protoreflect.Message { // Deprecated: Use CustomerEncryption.ProtoReflect.Descriptor instead. func (*CustomerEncryption) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{45} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{44} } func (x *CustomerEncryption) GetEncryptionAlgorithm() string { @@ -4704,8 +4466,7 @@ type Object struct { // temporary hold does not impact retention expiration time of an object. TemporaryHold bool `protobuf:"varint,20,opt,name=temporary_hold,json=temporaryHold,proto3" json:"temporary_hold,omitempty"` // A server-determined value that specifies the earliest time that the - // object's retention period expires. This value is in - // [https://tools.ietf.org/html/rfc3339][RFC 3339] format. + // object's retention period expires. // Note 1: This field is not provided for objects with an active event-based // hold, since retention expiration is unknown until the hold is removed. // Note 2: This value can be provided even when temporary hold is set (so that @@ -4740,7 +4501,7 @@ type Object struct { func (x *Object) Reset() { *x = Object{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[46] + mi := &file_google_storage_v2_storage_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4753,7 +4514,7 @@ func (x *Object) String() string { func (*Object) ProtoMessage() {} func (x *Object) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[46] + mi := &file_google_storage_v2_storage_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4766,7 +4527,7 @@ func (x *Object) ProtoReflect() protoreflect.Message { // Deprecated: Use Object.ProtoReflect.Descriptor instead. func (*Object) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{46} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{45} } func (x *Object) GetName() string { @@ -4990,7 +4751,7 @@ type ObjectAccessControl struct { func (x *ObjectAccessControl) Reset() { *x = ObjectAccessControl{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[47] + mi := &file_google_storage_v2_storage_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5003,7 +4764,7 @@ func (x *ObjectAccessControl) String() string { func (*ObjectAccessControl) ProtoMessage() {} func (x *ObjectAccessControl) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[47] + mi := &file_google_storage_v2_storage_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5016,7 +4777,7 @@ func (x *ObjectAccessControl) ProtoReflect() protoreflect.Message { // Deprecated: Use ObjectAccessControl.ProtoReflect.Descriptor instead. func (*ObjectAccessControl) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{47} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{46} } func (x *ObjectAccessControl) GetRole() string { @@ -5087,7 +4848,7 @@ type ListObjectsResponse struct { func (x *ListObjectsResponse) Reset() { *x = ListObjectsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[48] + mi := &file_google_storage_v2_storage_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5100,7 +4861,7 @@ func (x *ListObjectsResponse) String() string { func (*ListObjectsResponse) ProtoMessage() {} func (x *ListObjectsResponse) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[48] + mi := &file_google_storage_v2_storage_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5113,7 +4874,7 @@ func (x *ListObjectsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListObjectsResponse.ProtoReflect.Descriptor instead. func (*ListObjectsResponse) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{48} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{47} } func (x *ListObjectsResponse) GetObjects() []*Object { @@ -5152,7 +4913,7 @@ type ProjectTeam struct { func (x *ProjectTeam) Reset() { *x = ProjectTeam{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[49] + mi := &file_google_storage_v2_storage_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5165,7 +4926,7 @@ func (x *ProjectTeam) String() string { func (*ProjectTeam) ProtoMessage() {} func (x *ProjectTeam) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[49] + mi := &file_google_storage_v2_storage_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5178,7 +4939,7 @@ func (x *ProjectTeam) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectTeam.ProtoReflect.Descriptor instead. func (*ProjectTeam) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{49} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{48} } func (x *ProjectTeam) GetProjectNumber() string { @@ -5210,7 +4971,7 @@ type ServiceAccount struct { func (x *ServiceAccount) Reset() { *x = ServiceAccount{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[50] + mi := &file_google_storage_v2_storage_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5223,7 +4984,7 @@ func (x *ServiceAccount) String() string { func (*ServiceAccount) ProtoMessage() {} func (x *ServiceAccount) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[50] + mi := &file_google_storage_v2_storage_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5236,7 +4997,7 @@ func (x *ServiceAccount) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceAccount.ProtoReflect.Descriptor instead. func (*ServiceAccount) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{50} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{49} } func (x *ServiceAccount) GetEmailAddress() string { @@ -5261,7 +5022,7 @@ type Owner struct { func (x *Owner) Reset() { *x = Owner{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[51] + mi := &file_google_storage_v2_storage_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5274,7 +5035,7 @@ func (x *Owner) String() string { func (*Owner) ProtoMessage() {} func (x *Owner) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[51] + mi := &file_google_storage_v2_storage_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5287,7 +5048,7 @@ func (x *Owner) ProtoReflect() protoreflect.Message { // Deprecated: Use Owner.ProtoReflect.Descriptor instead. func (*Owner) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{51} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{50} } func (x *Owner) GetEntity() string { @@ -5321,7 +5082,7 @@ type ContentRange struct { func (x *ContentRange) Reset() { *x = ContentRange{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[52] + mi := &file_google_storage_v2_storage_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5334,7 +5095,7 @@ func (x *ContentRange) String() string { func (*ContentRange) ProtoMessage() {} func (x *ContentRange) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[52] + mi := &file_google_storage_v2_storage_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5347,7 +5108,7 @@ func (x *ContentRange) ProtoReflect() protoreflect.Message { // Deprecated: Use ContentRange.ProtoReflect.Descriptor instead. func (*ContentRange) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{52} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{51} } func (x *ContentRange) GetStart() int64 { @@ -5389,7 +5150,7 @@ type ComposeObjectRequest_SourceObject struct { func (x *ComposeObjectRequest_SourceObject) Reset() { *x = ComposeObjectRequest_SourceObject{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[53] + mi := &file_google_storage_v2_storage_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5402,7 +5163,7 @@ func (x *ComposeObjectRequest_SourceObject) String() string { func (*ComposeObjectRequest_SourceObject) ProtoMessage() {} func (x *ComposeObjectRequest_SourceObject) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[53] + mi := &file_google_storage_v2_storage_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5454,7 +5215,7 @@ type ComposeObjectRequest_SourceObject_ObjectPreconditions struct { func (x *ComposeObjectRequest_SourceObject_ObjectPreconditions) Reset() { *x = ComposeObjectRequest_SourceObject_ObjectPreconditions{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[54] + mi := &file_google_storage_v2_storage_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5467,7 +5228,7 @@ func (x *ComposeObjectRequest_SourceObject_ObjectPreconditions) String() string func (*ComposeObjectRequest_SourceObject_ObjectPreconditions) ProtoMessage() {} func (x *ComposeObjectRequest_SourceObject_ObjectPreconditions) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[54] + mi := &file_google_storage_v2_storage_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5503,7 +5264,7 @@ type Bucket_Billing struct { func (x *Bucket_Billing) Reset() { *x = Bucket_Billing{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[55] + mi := &file_google_storage_v2_storage_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5516,7 +5277,7 @@ func (x *Bucket_Billing) String() string { func (*Bucket_Billing) ProtoMessage() {} func (x *Bucket_Billing) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[55] + mi := &file_google_storage_v2_storage_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5529,7 +5290,7 @@ func (x *Bucket_Billing) ProtoReflect() protoreflect.Message { // Deprecated: Use Bucket_Billing.ProtoReflect.Descriptor instead. func (*Bucket_Billing) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{39, 0} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{38, 0} } func (x *Bucket_Billing) GetRequesterPays() bool { @@ -5569,7 +5330,7 @@ type Bucket_Cors struct { func (x *Bucket_Cors) Reset() { *x = Bucket_Cors{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[56] + mi := &file_google_storage_v2_storage_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5582,7 +5343,7 @@ func (x *Bucket_Cors) String() string { func (*Bucket_Cors) ProtoMessage() {} func (x *Bucket_Cors) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[56] + mi := &file_google_storage_v2_storage_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5595,7 +5356,7 @@ func (x *Bucket_Cors) ProtoReflect() protoreflect.Message { // Deprecated: Use Bucket_Cors.ProtoReflect.Descriptor instead. func (*Bucket_Cors) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{39, 1} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{38, 1} } func (x *Bucket_Cors) GetOrigin() []string { @@ -5640,7 +5401,7 @@ type Bucket_Encryption struct { func (x *Bucket_Encryption) Reset() { *x = Bucket_Encryption{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[57] + mi := &file_google_storage_v2_storage_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5653,7 +5414,7 @@ func (x *Bucket_Encryption) String() string { func (*Bucket_Encryption) ProtoMessage() {} func (x *Bucket_Encryption) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[57] + mi := &file_google_storage_v2_storage_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5666,7 +5427,7 @@ func (x *Bucket_Encryption) ProtoReflect() protoreflect.Message { // Deprecated: Use Bucket_Encryption.ProtoReflect.Descriptor instead. func (*Bucket_Encryption) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{39, 2} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{38, 2} } func (x *Bucket_Encryption) GetDefaultKmsKey() string { @@ -5692,7 +5453,7 @@ type Bucket_IamConfig struct { func (x *Bucket_IamConfig) Reset() { *x = Bucket_IamConfig{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[58] + mi := &file_google_storage_v2_storage_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5705,7 +5466,7 @@ func (x *Bucket_IamConfig) String() string { func (*Bucket_IamConfig) ProtoMessage() {} func (x *Bucket_IamConfig) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[58] + mi := &file_google_storage_v2_storage_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5718,7 +5479,7 @@ func (x *Bucket_IamConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use Bucket_IamConfig.ProtoReflect.Descriptor instead. func (*Bucket_IamConfig) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{39, 3} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{38, 3} } func (x *Bucket_IamConfig) GetUniformBucketLevelAccess() *Bucket_IamConfig_UniformBucketLevelAccess { @@ -5750,7 +5511,7 @@ type Bucket_Lifecycle struct { func (x *Bucket_Lifecycle) Reset() { *x = Bucket_Lifecycle{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[59] + mi := &file_google_storage_v2_storage_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5763,7 +5524,7 @@ func (x *Bucket_Lifecycle) String() string { func (*Bucket_Lifecycle) ProtoMessage() {} func (x *Bucket_Lifecycle) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[59] + mi := &file_google_storage_v2_storage_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5776,7 +5537,7 @@ func (x *Bucket_Lifecycle) ProtoReflect() protoreflect.Message { // Deprecated: Use Bucket_Lifecycle.ProtoReflect.Descriptor instead. func (*Bucket_Lifecycle) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{39, 4} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{38, 4} } func (x *Bucket_Lifecycle) GetRule() []*Bucket_Lifecycle_Rule { @@ -5801,7 +5562,7 @@ type Bucket_Logging struct { func (x *Bucket_Logging) Reset() { *x = Bucket_Logging{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[60] + mi := &file_google_storage_v2_storage_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5814,7 +5575,7 @@ func (x *Bucket_Logging) String() string { func (*Bucket_Logging) ProtoMessage() {} func (x *Bucket_Logging) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[60] + mi := &file_google_storage_v2_storage_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5827,7 +5588,7 @@ func (x *Bucket_Logging) ProtoReflect() protoreflect.Message { // Deprecated: Use Bucket_Logging.ProtoReflect.Descriptor instead. func (*Bucket_Logging) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{39, 5} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{38, 5} } func (x *Bucket_Logging) GetLogBucket() string { @@ -5851,8 +5612,7 @@ type Bucket_RetentionPolicy struct { unknownFields protoimpl.UnknownFields // Server-determined value that indicates the time from which policy was - // enforced and effective. This value is in - // [https://tools.ietf.org/html/rfc3339][RFC 3339] format. + // enforced and effective. EffectiveTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=effective_time,json=effectiveTime,proto3" json:"effective_time,omitempty"` // Once locked, an object retention policy cannot be modified. IsLocked bool `protobuf:"varint,2,opt,name=is_locked,json=isLocked,proto3" json:"is_locked,omitempty"` @@ -5866,7 +5626,7 @@ type Bucket_RetentionPolicy struct { func (x *Bucket_RetentionPolicy) Reset() { *x = Bucket_RetentionPolicy{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[61] + mi := &file_google_storage_v2_storage_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5879,7 +5639,7 @@ func (x *Bucket_RetentionPolicy) String() string { func (*Bucket_RetentionPolicy) ProtoMessage() {} func (x *Bucket_RetentionPolicy) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[61] + mi := &file_google_storage_v2_storage_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5892,7 +5652,7 @@ func (x *Bucket_RetentionPolicy) ProtoReflect() protoreflect.Message { // Deprecated: Use Bucket_RetentionPolicy.ProtoReflect.Descriptor instead. func (*Bucket_RetentionPolicy) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{39, 6} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{38, 6} } func (x *Bucket_RetentionPolicy) GetEffectiveTime() *timestamppb.Timestamp { @@ -5931,7 +5691,7 @@ type Bucket_Versioning struct { func (x *Bucket_Versioning) Reset() { *x = Bucket_Versioning{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[62] + mi := &file_google_storage_v2_storage_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5944,7 +5704,7 @@ func (x *Bucket_Versioning) String() string { func (*Bucket_Versioning) ProtoMessage() {} func (x *Bucket_Versioning) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[62] + mi := &file_google_storage_v2_storage_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5957,7 +5717,7 @@ func (x *Bucket_Versioning) ProtoReflect() protoreflect.Message { // Deprecated: Use Bucket_Versioning.ProtoReflect.Descriptor instead. func (*Bucket_Versioning) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{39, 7} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{38, 7} } func (x *Bucket_Versioning) GetEnabled() bool { @@ -5991,7 +5751,7 @@ type Bucket_Website struct { func (x *Bucket_Website) Reset() { *x = Bucket_Website{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[63] + mi := &file_google_storage_v2_storage_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6004,7 +5764,7 @@ func (x *Bucket_Website) String() string { func (*Bucket_Website) ProtoMessage() {} func (x *Bucket_Website) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[63] + mi := &file_google_storage_v2_storage_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6017,7 +5777,7 @@ func (x *Bucket_Website) ProtoReflect() protoreflect.Message { // Deprecated: Use Bucket_Website.ProtoReflect.Descriptor instead. func (*Bucket_Website) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{39, 8} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{38, 8} } func (x *Bucket_Website) GetMainPageSuffix() string { @@ -6052,7 +5812,7 @@ type Bucket_Autoclass struct { func (x *Bucket_Autoclass) Reset() { *x = Bucket_Autoclass{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[64] + mi := &file_google_storage_v2_storage_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6065,7 +5825,7 @@ func (x *Bucket_Autoclass) String() string { func (*Bucket_Autoclass) ProtoMessage() {} func (x *Bucket_Autoclass) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[64] + mi := &file_google_storage_v2_storage_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6078,7 +5838,7 @@ func (x *Bucket_Autoclass) ProtoReflect() protoreflect.Message { // Deprecated: Use Bucket_Autoclass.ProtoReflect.Descriptor instead. func (*Bucket_Autoclass) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{39, 9} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{38, 9} } func (x *Bucket_Autoclass) GetEnabled() bool { @@ -6105,8 +5865,7 @@ type Bucket_IamConfig_UniformBucketLevelAccess struct { // If set, access checks only use bucket-level IAM policies or above. Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` // The deadline time for changing - // `iamConfig.uniformBucketLevelAccess.enabled` from - // true to false in [RFC 3339](https://tools.ietf.org/html/rfc3339). + // `iamConfig.uniformBucketLevelAccess.enabled` from `true` to `false`. // Mutable until the specified deadline is reached, but not afterward. LockTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=lock_time,json=lockTime,proto3" json:"lock_time,omitempty"` } @@ -6114,7 +5873,7 @@ type Bucket_IamConfig_UniformBucketLevelAccess struct { func (x *Bucket_IamConfig_UniformBucketLevelAccess) Reset() { *x = Bucket_IamConfig_UniformBucketLevelAccess{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[66] + mi := &file_google_storage_v2_storage_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6127,7 +5886,7 @@ func (x *Bucket_IamConfig_UniformBucketLevelAccess) String() string { func (*Bucket_IamConfig_UniformBucketLevelAccess) ProtoMessage() {} func (x *Bucket_IamConfig_UniformBucketLevelAccess) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[66] + mi := &file_google_storage_v2_storage_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6140,7 +5899,7 @@ func (x *Bucket_IamConfig_UniformBucketLevelAccess) ProtoReflect() protoreflect. // Deprecated: Use Bucket_IamConfig_UniformBucketLevelAccess.ProtoReflect.Descriptor instead. func (*Bucket_IamConfig_UniformBucketLevelAccess) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{39, 3, 0} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{38, 3, 0} } func (x *Bucket_IamConfig_UniformBucketLevelAccess) GetEnabled() bool { @@ -6173,7 +5932,7 @@ type Bucket_Lifecycle_Rule struct { func (x *Bucket_Lifecycle_Rule) Reset() { *x = Bucket_Lifecycle_Rule{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[67] + mi := &file_google_storage_v2_storage_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6186,7 +5945,7 @@ func (x *Bucket_Lifecycle_Rule) String() string { func (*Bucket_Lifecycle_Rule) ProtoMessage() {} func (x *Bucket_Lifecycle_Rule) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[67] + mi := &file_google_storage_v2_storage_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6199,7 +5958,7 @@ func (x *Bucket_Lifecycle_Rule) ProtoReflect() protoreflect.Message { // Deprecated: Use Bucket_Lifecycle_Rule.ProtoReflect.Descriptor instead. func (*Bucket_Lifecycle_Rule) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{39, 4, 0} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{38, 4, 0} } func (x *Bucket_Lifecycle_Rule) GetAction() *Bucket_Lifecycle_Rule_Action { @@ -6233,7 +5992,7 @@ type Bucket_Lifecycle_Rule_Action struct { func (x *Bucket_Lifecycle_Rule_Action) Reset() { *x = Bucket_Lifecycle_Rule_Action{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[68] + mi := &file_google_storage_v2_storage_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6246,7 +6005,7 @@ func (x *Bucket_Lifecycle_Rule_Action) String() string { func (*Bucket_Lifecycle_Rule_Action) ProtoMessage() {} func (x *Bucket_Lifecycle_Rule_Action) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[68] + mi := &file_google_storage_v2_storage_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6259,7 +6018,7 @@ func (x *Bucket_Lifecycle_Rule_Action) ProtoReflect() protoreflect.Message { // Deprecated: Use Bucket_Lifecycle_Rule_Action.ProtoReflect.Descriptor instead. func (*Bucket_Lifecycle_Rule_Action) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{39, 4, 0, 0} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{38, 4, 0, 0} } func (x *Bucket_Lifecycle_Rule_Action) GetType() string { @@ -6331,7 +6090,7 @@ type Bucket_Lifecycle_Rule_Condition struct { func (x *Bucket_Lifecycle_Rule_Condition) Reset() { *x = Bucket_Lifecycle_Rule_Condition{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_v2_storage_proto_msgTypes[69] + mi := &file_google_storage_v2_storage_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6344,7 +6103,7 @@ func (x *Bucket_Lifecycle_Rule_Condition) String() string { func (*Bucket_Lifecycle_Rule_Condition) ProtoMessage() {} func (x *Bucket_Lifecycle_Rule_Condition) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_v2_storage_proto_msgTypes[69] + mi := &file_google_storage_v2_storage_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6357,7 +6116,7 @@ func (x *Bucket_Lifecycle_Rule_Condition) ProtoReflect() protoreflect.Message { // Deprecated: Use Bucket_Lifecycle_Rule_Condition.ProtoReflect.Descriptor instead. func (*Bucket_Lifecycle_Rule_Condition) Descriptor() ([]byte, []int) { - return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{39, 4, 0, 1} + return file_google_storage_v2_storage_proto_rawDescGZIP(), []int{38, 4, 0, 1} } func (x *Bucket_Lifecycle_Rule_Condition) GetAgeDays() int32 { @@ -6459,7 +6218,7 @@ var file_google_storage_v2_storage_proto_rawDesc = []byte{ 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x74, 0x79, - 0x70, 0x65, 0x2f, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe9, 0x02, + 0x70, 0x65, 0x2f, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8d, 0x02, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, @@ -6473,107 +6232,84 @@ var file_google_storage_v2_storage_proto_rawDesc = []byte{ 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, - 0x01, 0x12, 0x5a, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x1a, 0x0a, - 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, + 0x01, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, + 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xd6, 0x02, + 0x0a, 0x10, 0x47, 0x65, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x39, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, + 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, + 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xb2, 0x03, 0x0a, 0x10, 0x47, 0x65, - 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, - 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, - 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x15, 0x69, 0x66, - 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, - 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x18, 0x69, - 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, - 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x5a, 0x0a, 0x15, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x3c, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, - 0x61, 0x73, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x48, 0x02, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x61, 0x73, - 0x6b, 0x88, 0x01, 0x01, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x22, 0xa6, - 0x02, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, + 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, + 0x01, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3c, + 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x48, 0x02, 0x52, + 0x08, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x88, 0x01, 0x01, 0x42, 0x1a, 0x0a, 0x18, + 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, + 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, + 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x61, + 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x22, 0xa6, 0x02, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, + 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, + 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x06, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, + 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, + 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x12, 0x41, 0x0a, 0x1d, + 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x1a, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, 0x6c, 0x22, + 0x81, 0x02, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x06, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x03, - 0xe0, 0x41, 0x02, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, - 0xe0, 0x41, 0x02, 0x52, 0x08, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, - 0x0e, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, - 0x64, 0x41, 0x63, 0x6c, 0x12, 0x41, 0x0a, 0x1d, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x65, 0x64, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1a, 0x70, 0x72, 0x65, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, 0x6c, 0x22, 0xdd, 0x02, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, - 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, - 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, - 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, - 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, - 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, - 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, - 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, - 0x3c, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x48, 0x00, - 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x88, 0x01, 0x01, 0x12, 0x5a, 0x0a, - 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, - 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x22, 0x72, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x42, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, - 0x0a, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x07, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, - 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, - 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xf5, 0x01, 0x0a, 0x20, - 0x4c, 0x6f, 0x63, 0x6b, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x3d, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, - 0x36, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x5a, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x13, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x22, 0x88, 0x04, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x75, + 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, + 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, + 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x61, + 0x73, 0x6b, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, + 0x61, 0x73, 0x6b, 0x22, 0x72, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, + 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, + 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x99, 0x01, 0x0a, 0x20, 0x4c, 0x6f, 0x63, 0x6b, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, + 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x36, 0x0a, 0x17, 0x69, + 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x69, 0x66, + 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x22, 0xac, 0x03, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, @@ -6596,199 +6332,176 @@ var file_google_storage_v2_storage_proto_rawDesc = []byte{ 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x5a, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x13, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, - 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x5c, - 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0xe0, 0x41, 0x02, 0xfa, 0x41, - 0x25, 0x0a, 0x23, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x53, 0x0a, 0x16, - 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, + 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, + 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x22, 0x5c, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x3d, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x12, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x48, - 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x95, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, - 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x12, 0x1d, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, - 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x22, 0x8a, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, - 0x0a, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, - 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xd0, 0x07, - 0x0a, 0x14, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5b, 0x0a, 0x0e, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x3c, 0x0a, 0x1a, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, - 0x61, 0x63, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x64, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, - 0x41, 0x63, 0x6c, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x3f, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0xe0, + 0x41, 0x02, 0xfa, 0x41, 0x25, 0x0a, 0x23, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x22, 0x53, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, + 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x12, 0x1d, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0c, + 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x95, 0x01, 0x0a, + 0x18, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, + 0x1f, 0x12, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, + 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x8a, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, + 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x22, 0xf4, 0x06, 0x0a, 0x14, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5b, 0x0a, 0x0e, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0d, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x3c, 0x0a, 0x1a, 0x64, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, + 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x64, + 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, + 0x69, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, + 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, + 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3f, 0x0a, 0x07, 0x6b, 0x6d, 0x73, + 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x26, 0xfa, 0x41, 0x23, 0x0a, + 0x21, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x6b, 0x6d, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, + 0x65, 0x79, 0x52, 0x06, 0x6b, 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0xa8, 0x02, 0x0a, 0x0c, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x7b, 0x0a, 0x14, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x70, 0x72, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x48, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x13, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x1a, 0x62, 0x0a, 0x13, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x42, 0x16, 0x0a, 0x14, + 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, + 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xdd, 0x04, 0x0a, 0x13, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1b, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1b, 0x0a, + 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, + 0x41, 0x02, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, + 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x17, + 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, + 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, + 0x14, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, - 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x15, 0x69, 0x66, 0x4d, + 0x74, 0x63, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3f, 0x0a, 0x07, 0x6b, 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x26, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x6b, 0x6d, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x52, 0x06, - 0x6b, 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x5a, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x13, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x1a, 0xa8, 0x02, 0x0a, 0x0c, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7b, 0x0a, 0x14, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, - 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x13, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x62, 0x0a, 0x13, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, - 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x88, 0x01, 0x01, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x16, 0x0a, 0x14, - 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x22, 0xb9, 0x05, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x12, - 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, - 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x14, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, - 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x03, 0x48, 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, - 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x03, 0x48, 0x03, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, - 0x01, 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x12, 0x5a, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x16, 0x0a, 0x14, - 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, - 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x9c, 0x06, 0x0a, - 0x11, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x72, 0x65, 0x61, 0x64, 0x4c, 0x69, 0x6d, - 0x69, 0x74, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, - 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, - 0x63, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x14, 0x69, 0x66, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, - 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x88, 0x01, 0x01, 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x18, 0x69, 0x66, + 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, + 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x12, 0x5a, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, + 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, + 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, + 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xc0, 0x05, 0x0a, 0x11, 0x52, 0x65, 0x61, + 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1e, + 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, + 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, + 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x09, 0x72, 0x65, 0x61, 0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x33, + 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, + 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x14, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, + 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, + 0x48, 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, + 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x03, 0x48, 0x03, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, + 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x3c, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x48, 0x04, @@ -6800,7 +6513,7 @@ var file_google_storage_v2_storage_proto_rawDesc = []byte{ 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x0c, 0x0a, - 0x0a, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x22, 0xe5, 0x05, 0x0a, 0x10, + 0x0a, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x22, 0x89, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1b, 0x0a, @@ -6829,169 +6542,146 @@ var file_google_storage_v2_storage_proto_rawDesc = []byte{ 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x5a, 0x0a, 0x15, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x3c, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, - 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x48, 0x04, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x61, - 0x73, 0x6b, 0x88, 0x01, 0x01, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, - 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, - 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, - 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, - 0x61, 0x73, 0x6b, 0x22, 0xaf, 0x02, 0x0a, 0x12, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x10, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, - 0x6d, 0x6d, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, - 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4d, 0x0a, 0x10, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x52, 0x0f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x12, 0x44, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, - 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x35, - 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd1, 0x03, 0x0a, 0x0f, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x35, 0x0a, 0x08, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, - 0x63, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, - 0x69, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x17, - 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, - 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, - 0x14, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, - 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, - 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d, - 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x18, 0x69, 0x66, - 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, - 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x3c, 0x0a, 0x09, 0x72, + 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x48, 0x04, 0x52, 0x08, 0x72, 0x65, + 0x61, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x88, 0x01, 0x01, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xd4, 0x04, 0x0a, 0x12, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1d, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x12, - 0x50, 0x0a, 0x11, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, - 0x52, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x70, 0x65, - 0x63, 0x12, 0x26, 0x0a, 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x4f, 0x0a, 0x10, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, - 0x6d, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x48, 0x01, 0x52, 0x0f, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4d, 0x0a, 0x10, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x52, 0x0f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x69, 0x6e, - 0x69, 0x73, 0x68, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0b, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x6d, 0x0a, 0x1c, + 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, + 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x22, 0xaf, 0x02, 0x0a, 0x12, 0x52, 0x65, 0x61, 0x64, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, + 0x0a, 0x10, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x5f, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0f, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4d, 0x0a, + 0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x52, 0x0f, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x12, 0x44, 0x0a, 0x0d, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, + 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x6e, + 0x67, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd1, 0x03, 0x0a, 0x0f, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x35, 0x0a, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, + 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x12, 0x33, 0x0a, 0x13, 0x69, + 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, + 0x12, 0x3a, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x03, 0x48, 0x01, 0x52, 0x14, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, + 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, + 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, + 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, + 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, + 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x42, 0x16, 0x0a, + 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, + 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, + 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xf8, 0x03, + 0x0a, 0x12, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, + 0x64, 0x49, 0x64, 0x12, 0x50, 0x0a, 0x11, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x76, 0x32, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x70, + 0x65, 0x63, 0x48, 0x00, 0x52, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x02, + 0x52, 0x0b, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x4f, 0x0a, + 0x10, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x48, 0x01, 0x52, 0x0f, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4d, + 0x0a, 0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, + 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x52, 0x0f, 0x6f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x12, 0x21, 0x0a, + 0x0c, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0b, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, + 0x0f, 0x0a, 0x0d, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x87, 0x01, 0x0a, 0x13, 0x57, 0x72, 0x69, + 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x27, 0x0a, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0xc9, 0x03, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, + 0x1f, 0x12, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, + 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, + 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x1a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x72, + 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, + 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, + 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3c, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, + 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, + 0x61, 0x73, 0x6b, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x88, + 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x13, 0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x69, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x12, 0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x69, 0x63, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, + 0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x45, 0x6e, 0x64, + 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x22, 0xaa, + 0x01, 0x0a, 0x17, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x75, 0x70, + 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, + 0x41, 0x02, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x5a, 0x0a, 0x15, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x0f, 0x0a, 0x0d, 0x66, 0x69, 0x72, 0x73, 0x74, - 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x22, 0x87, 0x01, 0x0a, 0x13, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0e, 0x70, 0x65, 0x72, 0x73, - 0x69, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x48, 0x00, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x53, 0x69, 0x7a, - 0x65, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x48, 0x00, - 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xa5, 0x04, 0x0a, 0x12, 0x4c, - 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x12, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, - 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, - 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x1a, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x64, - 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x44, - 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, - 0x69, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3c, 0x0a, 0x09, - 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x48, 0x00, 0x52, 0x08, 0x72, - 0x65, 0x61, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x13, 0x6c, 0x65, - 0x78, 0x69, 0x63, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x6c, - 0x65, 0x78, 0x69, 0x63, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x5f, 0x65, 0x6e, 0x64, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x69, 0x63, 0x45, 0x6e, 0x64, 0x12, 0x5a, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, - 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, - 0x73, 0x6b, 0x22, 0x86, 0x02, 0x0a, 0x17, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, - 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, - 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, - 0x5a, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x8c, 0x01, 0x0a, 0x18, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0e, 0x70, 0x65, 0x72, 0x73, @@ -7001,7 +6691,7 @@ var file_google_storage_v2_storage_proto_rawDesc = []byte{ 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x9a, 0x0e, 0x0a, 0x14, 0x52, + 0x69, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xbe, 0x0d, 0x0a, 0x14, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x10, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, @@ -7093,163 +6783,120 @@ var file_google_storage_v2_storage_proto_rawDesc = []byte{ 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, - 0x5a, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x16, 0x0a, 0x14, 0x5f, - 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, - 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, + 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, + 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, + 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, - 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, - 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1d, 0x0a, 0x1b, 0x5f, - 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x21, 0x0a, 0x1f, 0x5f, 0x69, - 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x21, 0x0a, - 0x1f, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, + 0x1d, 0x0a, 0x1b, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x21, + 0x0a, 0x1f, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, + 0x68, 0x42, 0x21, 0x0a, 0x1f, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x42, 0x25, 0x0a, 0x23, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xd6, 0x01, 0x0a, 0x0f, + 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x32, 0x0a, 0x15, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x72, + 0x65, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, + 0x74, 0x65, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x35, 0x0a, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x22, 0xdb, 0x01, 0x0a, 0x1a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, + 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x11, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x76, 0x32, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, + 0x70, 0x65, 0x63, 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x22, 0x3a, 0x0a, 0x1b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6d, + 0x61, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x22, 0xfd, + 0x04, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x42, 0x25, 0x0a, 0x23, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, - 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, - 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xd6, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x77, 0x72, 0x69, - 0x74, 0x74, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x12, - 0x1f, 0x0a, 0x0b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x69, 0x7a, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, - 0x64, 0x6f, 0x6e, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x35, 0x0a, 0x08, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x22, 0xb7, 0x02, 0x0a, 0x1a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, - 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x4e, 0x0a, 0x11, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x73, 0x70, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0f, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3a, + 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, + 0x01, 0x52, 0x14, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, + 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, + 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x15, 0x69, + 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, + 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, + 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x18, + 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0e, 0x70, + 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41, + 0x63, 0x6c, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, + 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, + 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x5a, - 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, - 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x0a, 0x1b, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c, - 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, - 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x22, 0xd9, 0x05, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, - 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, - 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, - 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x14, 0x69, 0x66, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, - 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, - 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, - 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x65, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x6d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, - 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x5a, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x13, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, - 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, - 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, - 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, - 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x16, + 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, - 0x63, 0x68, 0x22, 0xc5, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x4d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x33, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x5a, - 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, - 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xfa, 0x01, 0x0a, 0x14, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x12, 0x37, 0x0a, 0x15, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x13, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x5a, 0x0a, 0x15, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x81, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x73, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xe3, 0x01, 0x0a, 0x14, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x49, 0x64, 0x12, 0x4d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x2d, 0x0a, - 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x5a, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x13, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x22, 0xe0, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, + 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, + 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x69, + 0x0a, 0x18, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x07, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, 0xe0, 0x41, 0x02, + 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x9e, 0x01, 0x0a, 0x14, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x33, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x37, 0x0a, 0x15, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x13, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x81, 0x01, 0x0a, 0x15, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6d, 0x61, 0x63, 0x4b, + 0x65, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, + 0x65, 0x79, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, + 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x87, + 0x01, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x49, 0x64, 0x12, 0x4d, 0x0a, 0x07, 0x70, 0x72, 0x6f, @@ -7257,805 +6904,789 @@ var file_google_storage_v2_storage_proto_rawDesc = []byte{ 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x5a, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, - 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x22, 0xf5, 0x02, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6d, 0x61, - 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x07, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, 0xe0, - 0x41, 0x02, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x70, - 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, - 0xe0, 0x41, 0x01, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, - 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x12, 0x37, 0x0a, 0x15, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x13, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2f, 0x0a, 0x11, 0x73, 0x68, - 0x6f, 0x77, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0f, 0x73, 0x68, 0x6f, 0x77, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x5f, 0x0a, 0x15, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x7f, 0x0a, 0x14, - 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x09, 0x68, 0x6d, 0x61, 0x63, 0x5f, 0x6b, 0x65, 0x79, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6d, 0x61, 0x63, - 0x4b, 0x65, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x68, 0x6d, 0x61, - 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, - 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xf3, 0x01, - 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x08, 0x68, 0x6d, 0x61, 0x63, 0x5f, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6d, 0x61, - 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x03, 0xe0, 0x41, - 0x02, 0x52, 0x07, 0x68, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x5a, 0x0a, 0x15, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, - 0x61, 0x73, 0x6b, 0x22, 0xbf, 0x01, 0x0a, 0x19, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x12, 0x31, 0x0a, 0x14, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x13, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6c, 0x67, 0x6f, 0x72, - 0x69, 0x74, 0x68, 0x6d, 0x12, 0x30, 0x0a, 0x14, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x12, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, - 0x79, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x1b, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x5f, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x18, 0x65, 0x6e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x6d, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x56, 0x0a, 0x0c, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x33, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x22, 0xca, 0x05, 0x0a, 0x10, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x22, 0xb5, 0x05, 0x0a, 0x06, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x53, 0x5f, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x14, - 0x4d, 0x41, 0x58, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x43, 0x48, 0x55, 0x4e, 0x4b, 0x5f, 0x42, - 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0x80, 0x80, 0x01, 0x12, 0x1c, 0x0a, 0x15, 0x4d, 0x41, 0x58, - 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x55, 0x4e, 0x4b, 0x5f, 0x42, 0x59, 0x54, - 0x45, 0x53, 0x10, 0x80, 0x80, 0x80, 0x01, 0x12, 0x19, 0x0a, 0x12, 0x4d, 0x41, 0x58, 0x5f, 0x4f, - 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x4d, 0x42, 0x10, 0x80, 0x80, - 0xc0, 0x02, 0x12, 0x29, 0x0a, 0x24, 0x4d, 0x41, 0x58, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, - 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x5f, - 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0x08, 0x12, 0x2a, 0x0a, - 0x25, 0x4d, 0x41, 0x58, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x4d, 0x45, 0x54, 0x41, - 0x44, 0x41, 0x54, 0x41, 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, - 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0x20, 0x12, 0x29, 0x0a, 0x24, 0x4d, 0x41, 0x58, - 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, - 0x5f, 0x54, 0x4f, 0x54, 0x41, 0x4c, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, - 0x53, 0x10, 0x80, 0x40, 0x12, 0x2a, 0x0a, 0x24, 0x4d, 0x41, 0x58, 0x5f, 0x42, 0x55, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x4f, 0x54, 0x41, - 0x4c, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0xa0, 0x01, - 0x12, 0x27, 0x0a, 0x23, 0x4d, 0x41, 0x58, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x53, 0x5f, 0x50, 0x45, 0x52, - 0x5f, 0x42, 0x55, 0x43, 0x4b, 0x45, 0x54, 0x10, 0x64, 0x12, 0x22, 0x0a, 0x1e, 0x4d, 0x41, 0x58, - 0x5f, 0x4c, 0x49, 0x46, 0x45, 0x43, 0x59, 0x43, 0x4c, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x53, - 0x5f, 0x50, 0x45, 0x52, 0x5f, 0x42, 0x55, 0x43, 0x4b, 0x45, 0x54, 0x10, 0x64, 0x12, 0x26, 0x0a, - 0x22, 0x4d, 0x41, 0x58, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, - 0x54, 0x45, 0x53, 0x10, 0x05, 0x12, 0x31, 0x0a, 0x2c, 0x4d, 0x41, 0x58, 0x5f, 0x4e, 0x4f, 0x54, - 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, - 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x4c, - 0x45, 0x4e, 0x47, 0x54, 0x48, 0x10, 0x80, 0x02, 0x12, 0x33, 0x0a, 0x2e, 0x4d, 0x41, 0x58, 0x5f, - 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x55, 0x53, - 0x54, 0x4f, 0x4d, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x56, 0x41, - 0x4c, 0x55, 0x45, 0x5f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x10, 0x80, 0x08, 0x12, 0x1c, 0x0a, - 0x18, 0x4d, 0x41, 0x58, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x52, - 0x49, 0x45, 0x53, 0x5f, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x40, 0x12, 0x1f, 0x0a, 0x1b, 0x4d, - 0x41, 0x58, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x53, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x56, 0x41, - 0x4c, 0x55, 0x45, 0x5f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x10, 0x3f, 0x12, 0x1f, 0x0a, 0x1a, - 0x4d, 0x41, 0x58, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x53, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x56, - 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0x01, 0x12, 0x2e, 0x0a, - 0x29, 0x4d, 0x41, 0x58, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x49, 0x44, 0x53, 0x5f, - 0x50, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, - 0x54, 0x53, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0xe8, 0x07, 0x12, 0x1e, 0x0a, - 0x1a, 0x53, 0x50, 0x4c, 0x49, 0x54, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x5f, 0x4d, 0x41, 0x58, - 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x44, 0x41, 0x59, 0x53, 0x10, 0x0e, 0x1a, 0x02, 0x10, - 0x01, 0x22, 0xcf, 0x1c, 0x0a, 0x06, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x17, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x09, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x08, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x4d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, 0xe0, 0x41, 0x05, 0xfa, 0x41, 0x2d, + 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x84, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, + 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, + 0x0a, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x49, 0x64, + 0x12, 0x4d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x33, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, + 0x94, 0x02, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2b, 0x0a, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x52, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, - 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, - 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, - 0x61, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x70, 0x6f, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x72, 0x70, 0x6f, 0x12, 0x38, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x08, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, - 0x54, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x6f, 0x6c, 0x52, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x41, 0x63, 0x6c, 0x12, 0x41, 0x0a, 0x09, 0x6c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, - 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x09, 0x6c, - 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x63, 0x6f, - 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x2e, 0x43, 0x6f, 0x72, 0x73, 0x52, 0x04, 0x63, 0x6f, 0x72, 0x73, 0x12, 0x40, - 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, - 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x37, 0x0a, 0x18, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x42, 0x61, 0x73, 0x65, 0x64, 0x48, 0x6f, 0x6c, 0x64, 0x12, 0x3d, 0x0a, 0x06, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3b, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x73, - 0x69, 0x74, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x57, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x52, 0x07, 0x77, 0x65, - 0x62, 0x73, 0x69, 0x74, 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x69, 0x6e, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x52, - 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x3b, 0x0a, 0x07, 0x6c, - 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x52, - 0x07, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x12, 0x33, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x77, 0x6e, 0x65, - 0x72, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x44, 0x0a, - 0x0a, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x45, 0x6e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x07, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x15, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, - 0x42, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, - 0x12, 0x54, 0x0a, 0x10, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x42, 0x0a, 0x0a, 0x69, 0x61, 0x6d, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x49, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x09, 0x69, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x61, - 0x74, 0x69, 0x73, 0x66, 0x69, 0x65, 0x73, 0x5f, 0x70, 0x7a, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0c, 0x73, 0x61, 0x74, 0x69, 0x73, 0x66, 0x69, 0x65, 0x73, 0x50, 0x7a, 0x73, 0x12, - 0x41, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x1c, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x41, 0x75, - 0x74, 0x6f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x1a, 0x30, 0x0a, 0x07, 0x42, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x25, 0x0a, - 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x79, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x72, - 0x50, 0x61, 0x79, 0x73, 0x1a, 0x87, 0x01, 0x0a, 0x04, 0x43, 0x6f, 0x72, 0x73, 0x12, 0x16, 0x0a, - 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6f, - 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x27, 0x0a, - 0x0f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x67, - 0x65, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0d, 0x6d, 0x61, 0x78, 0x41, 0x67, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x1a, 0x5c, - 0x0a, 0x0a, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x0f, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6b, 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x26, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x6b, 0x6d, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x52, 0x0d, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4b, 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x1a, 0xb1, 0x02, 0x0a, - 0x09, 0x49, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x7b, 0x0a, 0x1b, 0x75, 0x6e, - 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6c, 0x65, 0x76, - 0x65, 0x6c, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x49, 0x61, 0x6d, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x18, 0x75, - 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, - 0x6e, 0x1a, 0x6d, 0x0a, 0x18, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, - 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, - 0x1a, 0xdb, 0x07, 0x0a, 0x09, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x3c, - 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, - 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x1a, 0x8f, 0x07, 0x0a, - 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x47, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x2e, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x2e, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, - 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x66, - 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x1a, 0x41, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x23, - 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, - 0x61, 0x73, 0x73, 0x1a, 0xa8, 0x05, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x1e, 0x0a, 0x08, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x07, 0x61, 0x67, 0x65, 0x44, 0x61, 0x79, 0x73, 0x88, 0x01, - 0x01, 0x12, 0x38, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x65, 0x66, - 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x07, 0x69, - 0x73, 0x5f, 0x6c, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x06, - 0x69, 0x73, 0x4c, 0x69, 0x76, 0x65, 0x88, 0x01, 0x01, 0x12, 0x31, 0x0a, 0x12, 0x6e, 0x75, 0x6d, - 0x5f, 0x6e, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x48, 0x02, 0x52, 0x10, 0x6e, 0x75, 0x6d, 0x4e, 0x65, 0x77, 0x65, - 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x15, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x6d, 0x61, 0x74, - 0x63, 0x68, 0x65, 0x73, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, - 0x12, 0x38, 0x0a, 0x16, 0x64, 0x61, 0x79, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, - 0x48, 0x03, 0x52, 0x13, 0x64, 0x61, 0x79, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x43, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x3f, 0x0a, 0x12, 0x63, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x74, 0x79, 0x70, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x52, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x40, 0x0a, 0x1a, 0x64, - 0x61, 0x79, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x48, - 0x04, 0x52, 0x17, 0x64, 0x61, 0x79, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4e, 0x6f, 0x6e, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x47, 0x0a, - 0x16, 0x6e, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x5f, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x65, - 0x52, 0x14, 0x6e, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, - 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, - 0x73, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x25, 0x0a, - 0x0e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x5f, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, - 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x53, 0x75, - 0x66, 0x66, 0x69, 0x78, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x79, - 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x69, 0x73, 0x5f, 0x6c, 0x69, 0x76, 0x65, 0x42, 0x15, 0x0a, - 0x13, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x6e, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x19, 0x0a, 0x17, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x5f, 0x73, 0x69, - 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x42, - 0x1d, 0x0a, 0x1b, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6e, - 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x1a, 0x54, - 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, - 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, - 0x6f, 0x67, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x6f, 0x67, 0x5f, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f, 0x67, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, - 0x65, 0x66, 0x69, 0x78, 0x1a, 0x9c, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x41, 0x0a, 0x0e, 0x65, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x65, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, - 0x73, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x74, 0x65, - 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, - 0x69, 0x6f, 0x64, 0x1a, 0x26, 0x0a, 0x0a, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, - 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x1a, 0x59, 0x0a, 0x07, 0x57, - 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x70, - 0x61, 0x67, 0x65, 0x5f, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x6d, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x67, 0x65, 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, - 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x5f, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x61, - 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x46, 0x6f, 0x75, - 0x6e, 0x64, 0x50, 0x61, 0x67, 0x65, 0x1a, 0x67, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x6f, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x40, 0x0a, - 0x0b, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x08, + 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, + 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, + 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x37, 0x0a, 0x15, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, + 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, + 0x52, 0x13, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2f, 0x0a, 0x11, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x64, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, + 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0f, 0x73, 0x68, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x7f, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6d, + 0x61, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, + 0x0a, 0x09, 0x68, 0x6d, 0x61, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x68, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, + 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, + 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x97, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x42, 0x0a, 0x08, 0x68, 0x6d, 0x61, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x07, 0x68, 0x6d, 0x61, + 0x63, 0x4b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, + 0x61, 0x73, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, + 0x6b, 0x22, 0xbf, 0x01, 0x0a, 0x19, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x31, 0x0a, 0x14, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6c, + 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, + 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, + 0x68, 0x6d, 0x12, 0x30, 0x0a, 0x14, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x12, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x42, + 0x79, 0x74, 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x1b, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x5f, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x18, 0x65, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x42, 0x79, + 0x74, 0x65, 0x73, 0x22, 0xca, 0x05, 0x0a, 0x10, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, + 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x22, 0xb5, 0x05, 0x0a, 0x06, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x53, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x14, 0x4d, + 0x41, 0x58, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x43, 0x48, 0x55, 0x4e, 0x4b, 0x5f, 0x42, 0x59, + 0x54, 0x45, 0x53, 0x10, 0x80, 0x80, 0x80, 0x01, 0x12, 0x1c, 0x0a, 0x15, 0x4d, 0x41, 0x58, 0x5f, + 0x57, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x55, 0x4e, 0x4b, 0x5f, 0x42, 0x59, 0x54, 0x45, + 0x53, 0x10, 0x80, 0x80, 0x80, 0x01, 0x12, 0x19, 0x0a, 0x12, 0x4d, 0x41, 0x58, 0x5f, 0x4f, 0x42, + 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x4d, 0x42, 0x10, 0x80, 0x80, 0xc0, + 0x02, 0x12, 0x29, 0x0a, 0x24, 0x4d, 0x41, 0x58, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, + 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x5f, 0x4e, + 0x41, 0x4d, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0x08, 0x12, 0x2a, 0x0a, 0x25, + 0x4d, 0x41, 0x58, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, + 0x41, 0x54, 0x41, 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, + 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0x20, 0x12, 0x29, 0x0a, 0x24, 0x4d, 0x41, 0x58, 0x5f, + 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x5f, + 0x54, 0x4f, 0x54, 0x41, 0x4c, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, + 0x10, 0x80, 0x40, 0x12, 0x2a, 0x0a, 0x24, 0x4d, 0x41, 0x58, 0x5f, 0x42, 0x55, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x4f, 0x54, 0x41, 0x4c, + 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0xa0, 0x01, 0x12, + 0x27, 0x0a, 0x23, 0x4d, 0x41, 0x58, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x53, 0x5f, 0x50, 0x45, 0x52, 0x5f, + 0x42, 0x55, 0x43, 0x4b, 0x45, 0x54, 0x10, 0x64, 0x12, 0x22, 0x0a, 0x1e, 0x4d, 0x41, 0x58, 0x5f, + 0x4c, 0x49, 0x46, 0x45, 0x43, 0x59, 0x43, 0x4c, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x53, 0x5f, + 0x50, 0x45, 0x52, 0x5f, 0x42, 0x55, 0x43, 0x4b, 0x45, 0x54, 0x10, 0x64, 0x12, 0x26, 0x0a, 0x22, + 0x4d, 0x41, 0x58, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, + 0x45, 0x53, 0x10, 0x05, 0x12, 0x31, 0x0a, 0x2c, 0x4d, 0x41, 0x58, 0x5f, 0x4e, 0x4f, 0x54, 0x49, + 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, + 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x4c, 0x45, + 0x4e, 0x47, 0x54, 0x48, 0x10, 0x80, 0x02, 0x12, 0x33, 0x0a, 0x2e, 0x4d, 0x41, 0x58, 0x5f, 0x4e, + 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x55, 0x53, 0x54, + 0x4f, 0x4d, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x56, 0x41, 0x4c, + 0x55, 0x45, 0x5f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x10, 0x80, 0x08, 0x12, 0x1c, 0x0a, 0x18, + 0x4d, 0x41, 0x58, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x49, + 0x45, 0x53, 0x5f, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x40, 0x12, 0x1f, 0x0a, 0x1b, 0x4d, 0x41, + 0x58, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x53, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x56, 0x41, 0x4c, + 0x55, 0x45, 0x5f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x10, 0x3f, 0x12, 0x1f, 0x0a, 0x1a, 0x4d, + 0x41, 0x58, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x53, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x56, 0x41, + 0x4c, 0x55, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0x01, 0x12, 0x2e, 0x0a, 0x29, + 0x4d, 0x41, 0x58, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x49, 0x44, 0x53, 0x5f, 0x50, + 0x45, 0x52, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, + 0x53, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0xe8, 0x07, 0x12, 0x1e, 0x0a, 0x1a, + 0x53, 0x50, 0x4c, 0x49, 0x54, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x5f, 0x4d, 0x41, 0x58, 0x5f, + 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x44, 0x41, 0x59, 0x53, 0x10, 0x0e, 0x1a, 0x02, 0x10, 0x01, + 0x22, 0xcf, 0x1c, 0x0a, 0x06, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x17, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x09, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x08, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x4d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x33, 0xe0, 0x41, 0x05, 0xfa, 0x41, 0x2d, 0x0a, + 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2b, 0x0a, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, + 0x41, 0x03, 0x52, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, + 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, + 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, + 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x70, 0x6f, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x72, 0x70, 0x6f, 0x12, 0x38, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x08, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x54, + 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x52, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x41, 0x63, 0x6c, 0x12, 0x41, 0x0a, 0x09, 0x6c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, + 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x09, 0x6c, 0x69, + 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x63, 0x6f, 0x72, + 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x2e, 0x43, 0x6f, 0x72, 0x73, 0x52, 0x04, 0x63, 0x6f, 0x72, 0x73, 0x12, 0x40, 0x0a, + 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x1a, - 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x47, 0xea, 0x41, 0x44, 0x0a, - 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, - 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x23, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x7d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x7d, 0x22, 0xdf, 0x01, 0x0a, 0x13, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x72, - 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x12, 0x41, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x65, - 0x61, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x54, 0x65, 0x61, 0x6d, 0x22, 0x53, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, - 0x6d, 0x6d, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x07, 0x48, 0x00, 0x52, 0x06, 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x88, 0x01, 0x01, 0x42, - 0x09, 0x0a, 0x07, 0x5f, 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x22, 0x54, 0x0a, 0x0f, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x12, 0x1b, 0x0a, - 0x06, 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x48, 0x00, 0x52, - 0x06, 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x64, - 0x35, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x64, - 0x35, 0x48, 0x61, 0x73, 0x68, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, - 0x22, 0xce, 0x02, 0x0a, 0x0f, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x49, - 0x64, 0x12, 0x4a, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x30, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x32, 0x0a, - 0x15, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6d, 0x61, 0x69, - 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x37, 0x0a, 0x18, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x5f, 0x62, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, + 0x61, 0x73, 0x65, 0x64, 0x48, 0x6f, 0x6c, 0x64, 0x12, 0x3d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3b, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, + 0x74, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x2e, 0x57, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x52, 0x07, 0x77, 0x65, 0x62, + 0x73, 0x69, 0x74, 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x69, + 0x6e, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x0a, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x3b, 0x0a, 0x07, 0x6c, 0x6f, + 0x67, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x52, 0x07, + 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x12, 0x33, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, + 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0a, + 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x45, 0x6e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x07, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x42, + 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x12, + 0x54, 0x0a, 0x10, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x42, 0x0a, 0x0a, 0x69, 0x61, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x49, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, + 0x69, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x61, 0x74, + 0x69, 0x73, 0x66, 0x69, 0x65, 0x73, 0x5f, 0x70, 0x7a, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x73, 0x61, 0x74, 0x69, 0x73, 0x66, 0x69, 0x65, 0x73, 0x50, 0x7a, 0x73, 0x12, 0x41, + 0x0a, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x1c, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x41, 0x75, 0x74, + 0x6f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x1a, 0x30, 0x0a, 0x07, 0x42, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x25, 0x0a, 0x0e, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x79, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x72, 0x50, + 0x61, 0x79, 0x73, 0x1a, 0x87, 0x01, 0x0a, 0x04, 0x43, 0x6f, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x72, + 0x69, 0x67, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x27, 0x0a, 0x0f, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x67, 0x65, + 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, + 0x6d, 0x61, 0x78, 0x41, 0x67, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x1a, 0x5c, 0x0a, + 0x0a, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x0f, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6b, 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x26, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x6b, 0x6d, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x52, 0x0d, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4b, 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x1a, 0xb1, 0x02, 0x0a, 0x09, + 0x49, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x7b, 0x0a, 0x1b, 0x75, 0x6e, 0x69, + 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6c, 0x65, 0x76, 0x65, + 0x6c, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x49, 0x61, 0x6d, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x18, 0x75, 0x6e, + 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, + 0x1a, 0x6d, 0x0a, 0x18, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x22, 0xe7, 0x03, 0x0a, 0x0c, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x05, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, - 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x24, 0x0a, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, - 0x52, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x67, 0x0a, 0x11, - 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, - 0xe0, 0x41, 0x01, 0x52, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x12, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, - 0x6d, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x2a, 0x0a, 0x0e, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0d, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x1a, 0x43, 0x0a, 0x15, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x41, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x70, 0xea, 0x41, 0x6d, 0x0a, 0x23, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, - 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, - 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x7b, 0x6e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x22, 0x71, 0x0a, 0x12, 0x43, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x31, 0x0a, 0x14, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x13, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6c, 0x67, 0x6f, 0x72, - 0x69, 0x74, 0x68, 0x6d, 0x12, 0x28, 0x0a, 0x10, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x32, - 0x35, 0x36, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, - 0x6b, 0x65, 0x79, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xd8, - 0x0b, 0x0a, 0x06, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x05, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x12, 0x23, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x52, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x17, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, - 0x65, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x63, - 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2f, 0x0a, 0x13, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, - 0x0d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x12, 0x38, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x29, 0x0a, 0x10, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x64, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x40, 0x0a, 0x0b, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x1a, + 0xdb, 0x07, 0x0a, 0x09, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x3c, 0x0a, + 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, + 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x1a, 0x8f, 0x07, 0x0a, 0x04, + 0x52, 0x75, 0x6c, 0x65, 0x12, 0x47, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, + 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x2e, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, + 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x66, 0x65, + 0x63, 0x79, 0x63, 0x6c, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, + 0x41, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, + 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, + 0x73, 0x73, 0x1a, 0xa8, 0x05, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x1e, 0x0a, 0x08, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x48, 0x00, 0x52, 0x07, 0x61, 0x67, 0x65, 0x44, 0x61, 0x79, 0x73, 0x88, 0x01, 0x01, + 0x12, 0x38, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x65, 0x66, 0x6f, + 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x07, 0x69, 0x73, + 0x5f, 0x6c, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x06, 0x69, + 0x73, 0x4c, 0x69, 0x76, 0x65, 0x88, 0x01, 0x01, 0x12, 0x31, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x5f, + 0x6e, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x48, 0x02, 0x52, 0x10, 0x6e, 0x75, 0x6d, 0x4e, 0x65, 0x77, 0x65, 0x72, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x15, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, + 0x6c, 0x61, 0x73, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x6d, 0x61, 0x74, 0x63, + 0x68, 0x65, 0x73, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, + 0x38, 0x0a, 0x16, 0x64, 0x61, 0x79, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x48, + 0x03, 0x52, 0x13, 0x64, 0x61, 0x79, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x43, 0x75, 0x73, 0x74, + 0x6f, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x3f, 0x0a, 0x12, 0x63, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, + 0x79, 0x70, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x52, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x54, 0x69, 0x6d, 0x65, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x40, 0x0a, 0x1a, 0x64, 0x61, + 0x79, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x48, 0x04, + 0x52, 0x17, 0x64, 0x61, 0x79, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4e, 0x6f, 0x6e, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x47, 0x0a, 0x16, + 0x6e, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, + 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x52, + 0x14, 0x6e, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x42, + 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, + 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x25, 0x0a, 0x0e, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x5f, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x0c, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x53, 0x75, 0x66, + 0x66, 0x69, 0x78, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x73, + 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x69, 0x73, 0x5f, 0x6c, 0x69, 0x76, 0x65, 0x42, 0x15, 0x0a, 0x13, + 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x6e, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x42, 0x19, 0x0a, 0x17, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x5f, 0x73, 0x69, 0x6e, + 0x63, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x1d, + 0x0a, 0x1b, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x6f, + 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x1a, 0x54, 0x0a, + 0x07, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x5f, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, + 0x67, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x6f, 0x67, 0x5f, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f, 0x67, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x1a, 0x9c, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x41, 0x0a, 0x0e, 0x65, 0x66, 0x66, 0x65, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x65, 0x66, 0x66, + 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, + 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, + 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x74, 0x65, 0x6e, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x1a, 0x26, 0x0a, 0x0a, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, + 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x1a, 0x59, 0x0a, 0x07, 0x57, 0x65, + 0x62, 0x73, 0x69, 0x74, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x61, + 0x67, 0x65, 0x5f, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x6d, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x67, 0x65, 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, 0x12, + 0x24, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x5f, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x61, 0x67, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, + 0x64, 0x50, 0x61, 0x67, 0x65, 0x1a, 0x67, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x6f, 0x63, 0x6c, 0x61, + 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x40, 0x0a, 0x0b, + 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, - 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2c, - 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x09, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, - 0x75, 0x6d, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, - 0x75, 0x6d, 0x73, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x41, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x39, + 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x47, 0xea, 0x41, 0x44, 0x0a, 0x1d, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, + 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x23, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x7d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x7d, 0x22, 0xdf, 0x01, 0x0a, 0x13, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, + 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x12, 0x41, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x65, 0x61, + 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x54, 0x65, 0x61, 0x6d, 0x22, 0x53, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, + 0x6d, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x07, 0x48, 0x00, 0x52, 0x06, 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x88, 0x01, 0x01, 0x42, 0x09, + 0x0a, 0x07, 0x5f, 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x22, 0x54, 0x0a, 0x0f, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x06, + 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x48, 0x00, 0x52, 0x06, + 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x64, 0x35, + 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x64, 0x35, + 0x48, 0x61, 0x73, 0x68, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x22, + 0xce, 0x02, 0x0a, 0x0f, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x49, 0x64, + 0x12, 0x4a, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x30, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x32, 0x0a, 0x15, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, + 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, + 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x6b, 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79, - 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x42, 0x26, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x6b, 0x6d, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x52, 0x06, - 0x6b, 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x5a, 0x0a, 0x19, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x16, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x5f, - 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, - 0x6f, 0x72, 0x61, 0x72, 0x79, 0x48, 0x6f, 0x6c, 0x64, 0x12, 0x4e, 0x0a, 0x15, 0x72, 0x65, 0x74, - 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x13, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x45, - 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2d, - 0x0a, 0x10, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x68, 0x6f, - 0x6c, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x42, 0x61, 0x73, 0x65, 0x64, 0x48, 0x6f, 0x6c, 0x64, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, - 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x05, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x12, 0x56, 0x0a, 0x13, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x65, - 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x45, 0x6e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, - 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x62, - 0x61, 0x73, 0x65, 0x64, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0xdf, 0x01, 0x0a, 0x13, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, - 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, - 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, - 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x41, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x22, 0xe7, 0x03, 0x0a, 0x0c, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x05, 0x74, 0x6f, + 0x70, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x05, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x24, 0x0a, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, + 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x67, 0x0a, 0x11, 0x63, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0xe0, + 0x41, 0x01, 0x52, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x12, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x2a, 0x0a, 0x0e, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0d, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x1a, 0x43, 0x0a, 0x15, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x41, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x70, 0xea, 0x41, 0x6d, 0x0a, 0x23, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, + 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x46, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x7b, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x7b, 0x6e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x22, 0x71, 0x0a, 0x12, 0x43, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x31, 0x0a, 0x14, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, + 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, + 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, + 0x74, 0x68, 0x6d, 0x12, 0x28, 0x0a, 0x10, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x32, 0x35, + 0x36, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6b, + 0x65, 0x79, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xd8, 0x0b, + 0x0a, 0x06, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x25, 0xe0, 0x41, 0x05, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x12, 0x23, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, + 0x41, 0x03, 0x52, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x17, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, + 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x63, 0x6f, + 0x64, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2f, 0x0a, 0x13, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x44, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, + 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x12, 0x38, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x0b, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x22, 0x8e, 0x01, 0x0a, 0x13, - 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x66, - 0x69, 0x78, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x65, 0x66, - 0x69, 0x78, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, - 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, - 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x48, 0x0a, 0x0b, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x12, 0x25, 0x0a, 0x0e, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x22, 0x35, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6d, 0x61, 0x69, - 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x3c, 0x0a, - 0x05, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1b, - 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x22, 0x5f, 0x0a, 0x0c, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, - 0x65, 0x6e, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, - 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x6f, - 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x32, 0xb0, 0x1b, 0x0a, - 0x07, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x57, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x61, + 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x64, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, + 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2c, 0x0a, + 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x09, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, + 0x6d, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, + 0x6d, 0x73, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x6b, 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x12, 0x20, 0x01, 0x28, 0x09, 0x42, 0x26, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x6b, 0x6d, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x52, 0x06, 0x6b, + 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x5a, 0x0a, 0x19, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x16, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x5f, 0x68, + 0x6f, 0x6c, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6f, + 0x72, 0x61, 0x72, 0x79, 0x48, 0x6f, 0x6c, 0x64, 0x12, 0x4e, 0x0a, 0x15, 0x72, 0x65, 0x74, 0x65, + 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x13, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, + 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2d, 0x0a, + 0x10, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x68, 0x6f, 0x6c, + 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x42, 0x61, 0x73, 0x65, 0x64, 0x48, 0x6f, 0x6c, 0x64, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x05, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x12, 0x56, 0x0a, 0x13, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x65, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x45, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x45, + 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x75, 0x73, 0x74, + 0x6f, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x61, + 0x73, 0x65, 0x64, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0xdf, 0x01, 0x0a, 0x13, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x09, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, + 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, + 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x41, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, + 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x0b, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x22, 0x8e, 0x01, 0x0a, 0x13, 0x4c, + 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, + 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, + 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, + 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x48, 0x0a, 0x0b, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x65, 0x61, 0x6d, 0x22, 0x35, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x3c, 0x0a, 0x05, + 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, + 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x22, 0x5f, 0x0a, 0x0c, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x65, + 0x6e, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x32, 0xb0, 0x1b, 0x0a, 0x07, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x57, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x07, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x54, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x23, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, + 0x32, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x07, 0xda, + 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x6d, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x1a, 0xda, 0x41, 0x17, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x2c, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x5f, 0x69, 0x64, 0x12, 0x67, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x09, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x76, + 0x0a, 0x19, 0x4c, 0x6f, 0x63, 0x6b, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x74, 0x65, + 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x33, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x4c, 0x6f, 0x63, 0x6b, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x09, 0xda, 0x41, 0x06, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x56, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x49, 0x61, 0x6d, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x22, 0x0b, 0xda, 0x41, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x5d, + 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x22, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x12, 0xda, 0x41, 0x0f, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x82, 0x01, + 0x0a, 0x12, 0x54, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, + 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x54, + 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0xda, 0x41, 0x14, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x68, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x15, 0xda, 0x41, 0x12, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x12, 0x63, 0x0a, 0x12, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x07, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x54, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x23, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x07, - 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x6d, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x1a, 0xda, 0x41, 0x17, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x2c, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x12, 0x67, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x09, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, - 0x76, 0x0a, 0x19, 0x4c, 0x6f, 0x63, 0x6b, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x74, - 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x33, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x4c, 0x6f, 0x63, 0x6b, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x74, 0x65, 0x6e, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x09, 0xda, 0x41, - 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x56, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x49, 0x61, - 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x22, 0x0b, 0xda, 0x41, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x5d, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, - 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x12, 0xda, 0x41, 0x0f, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x82, - 0x01, 0x0a, 0x12, 0x54, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, - 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x54, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0xda, 0x41, 0x14, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x68, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, - 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x15, 0xda, 0x41, 0x12, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x12, 0x63, 0x0a, - 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x07, 0xda, 0x41, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x66, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x07, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x7b, 0x0a, 0x12, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0x16, 0xda, 0x41, 0x13, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x2c, 0x6e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x79, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2b, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x09, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x12, 0x55, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x0c, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2b, 0xda, 0x41, 0x0d, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0xda, 0x41, 0x18, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x78, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x12, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x22, 0x2b, 0xda, 0x41, 0x0d, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0xda, 0x41, 0x18, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x88, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, - 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0xda, 0x41, - 0x0d, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0xda, 0x41, - 0x18, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x30, 0x01, 0x12, 0x68, 0x0a, 0x0c, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x26, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x15, - 0xda, 0x41, 0x12, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x12, 0x60, 0x0a, 0x0b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x12, 0x67, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, + 0x65, 0x12, 0x66, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0x07, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x7b, 0x0a, 0x12, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, - 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x09, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x12, 0x5e, 0x0a, 0x0d, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x52, - 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x76, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, - 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x16, + 0xda, 0x41, 0x13, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x2c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x79, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2b, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x09, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x12, 0x55, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2b, 0xda, 0x41, 0x0d, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0xda, 0x41, 0x18, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x78, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x12, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x22, 0x2b, 0xda, 0x41, 0x0d, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0xda, 0x41, 0x18, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x88, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x24, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x76, 0x32, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0xda, 0x41, 0x0d, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0xda, 0x41, 0x18, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x30, 0x01, 0x12, 0x68, 0x0a, 0x0c, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x15, 0xda, + 0x41, 0x12, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, + 0x6d, 0x61, 0x73, 0x6b, 0x12, 0x60, 0x0a, 0x0b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x57, + 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x12, 0x67, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x09, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, + 0x5e, 0x0a, 0x0d, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x76, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, + 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, 0x0a, 0x10, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x0c, 0xda, 0x41, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, - 0x5f, 0x69, 0x64, 0x12, 0x6f, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x0a, 0xda, 0x41, 0x07, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x12, 0x84, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, - 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0xda, 0x41, 0x1d, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x66, 0x0a, 0x0d, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x14, 0xda, - 0x41, 0x11, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x2c, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x12, 0x6c, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, - 0x79, 0x12, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, + 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, 0x0a, 0x10, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x0c, 0xda, 0x41, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, + 0x69, 0x64, 0x12, 0x6f, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x0a, 0xda, 0x41, 0x07, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x12, 0x84, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6d, + 0x61, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0xda, 0x41, 0x1d, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x66, 0x0a, 0x0d, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x14, 0xda, 0x41, + 0x11, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x2c, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x12, 0x6c, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, + 0x12, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6d, 0x61, 0x63, 0x4b, + 0x65, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x14, 0xda, 0x41, 0x11, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x2c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x12, 0x6b, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x73, + 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x0a, 0xda, 0x41, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x75, 0x0a, + 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x27, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6d, 0x61, 0x63, - 0x4b, 0x65, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x14, 0xda, 0x41, 0x11, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x2c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x12, 0x6b, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, - 0x73, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, - 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x0a, 0xda, 0x41, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x75, - 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, 0x79, 0x12, - 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6d, 0x61, 0x63, 0x4b, 0x65, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6d, 0x61, - 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x17, 0xda, 0x41, - 0x14, 0x68, 0x6d, 0x61, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x1a, 0xa7, 0x02, 0xca, 0x41, 0x16, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, - 0x6d, 0xd2, 0x41, 0x8a, 0x02, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2d, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, + 0x4b, 0x65, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x17, 0xda, 0x41, 0x14, + 0x68, 0x6d, 0x61, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, + 0x6d, 0x61, 0x73, 0x6b, 0x1a, 0xa7, 0x02, 0xca, 0x41, 0x16, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, + 0xd2, 0x41, 0x8a, 0x02, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2d, 0x6f, 0x6e, 0x6c, 0x79, 0x2c, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, - 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x64, 0x65, 0x76, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x61, 0x75, 0x74, 0x68, 0x2f, 0x64, 0x65, 0x76, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, - 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x64, 0x65, 0x76, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, - 0xdc, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x42, 0x0c, 0x53, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, - 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2f, 0x76, 0x32, 0x3b, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0xea, 0x41, 0x78, 0x0a, 0x21, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x6b, 0x6d, 0x73, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x12, 0x53, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x7d, 0x2f, 0x6b, 0x65, 0x79, 0x52, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, - 0x5f, 0x72, 0x69, 0x6e, 0x67, 0x7d, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, - 0x73, 0x2f, 0x7b, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x5f, 0x6b, 0x65, 0x79, 0x7d, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x6d, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, + 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2d, 0x6f, 0x6e, 0x6c, 0x79, 0x2c, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, + 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x64, 0x65, 0x76, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x74, + 0x72, 0x6f, 0x6c, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, + 0x75, 0x74, 0x68, 0x2f, 0x64, 0x65, 0x76, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x72, + 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x64, 0x65, 0x76, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0xdc, + 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x76, 0x32, 0x42, 0x0c, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2f, 0x76, 0x32, 0x3b, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0xea, 0x41, 0x78, 0x0a, 0x21, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x6b, 0x6d, 0x73, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, + 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x12, 0x53, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x7d, 0x2f, 0x6b, 0x65, 0x79, 0x52, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x5f, + 0x72, 0x69, 0x6e, 0x67, 0x7d, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x73, + 0x2f, 0x7b, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x5f, 0x6b, 0x65, 0x79, 0x7d, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -8071,7 +7702,7 @@ func file_google_storage_v2_storage_proto_rawDescGZIP() []byte { } var file_google_storage_v2_storage_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_google_storage_v2_storage_proto_msgTypes = make([]protoimpl.MessageInfo, 72) +var file_google_storage_v2_storage_proto_msgTypes = make([]protoimpl.MessageInfo, 71) var file_google_storage_v2_storage_proto_goTypes = []interface{}{ (ServiceConstants_Values)(0), // 0: google.storage.v2.ServiceConstants.Values (*DeleteBucketRequest)(nil), // 1: google.storage.v2.DeleteBucketRequest @@ -8111,221 +7742,199 @@ var file_google_storage_v2_storage_proto_goTypes = []interface{}{ (*ListHmacKeysResponse)(nil), // 35: google.storage.v2.ListHmacKeysResponse (*UpdateHmacKeyRequest)(nil), // 36: google.storage.v2.UpdateHmacKeyRequest (*CommonObjectRequestParams)(nil), // 37: google.storage.v2.CommonObjectRequestParams - (*CommonRequestParams)(nil), // 38: google.storage.v2.CommonRequestParams - (*ServiceConstants)(nil), // 39: google.storage.v2.ServiceConstants - (*Bucket)(nil), // 40: google.storage.v2.Bucket - (*BucketAccessControl)(nil), // 41: google.storage.v2.BucketAccessControl - (*ChecksummedData)(nil), // 42: google.storage.v2.ChecksummedData - (*ObjectChecksums)(nil), // 43: google.storage.v2.ObjectChecksums - (*HmacKeyMetadata)(nil), // 44: google.storage.v2.HmacKeyMetadata - (*Notification)(nil), // 45: google.storage.v2.Notification - (*CustomerEncryption)(nil), // 46: google.storage.v2.CustomerEncryption - (*Object)(nil), // 47: google.storage.v2.Object - (*ObjectAccessControl)(nil), // 48: google.storage.v2.ObjectAccessControl - (*ListObjectsResponse)(nil), // 49: google.storage.v2.ListObjectsResponse - (*ProjectTeam)(nil), // 50: google.storage.v2.ProjectTeam - (*ServiceAccount)(nil), // 51: google.storage.v2.ServiceAccount - (*Owner)(nil), // 52: google.storage.v2.Owner - (*ContentRange)(nil), // 53: google.storage.v2.ContentRange - (*ComposeObjectRequest_SourceObject)(nil), // 54: google.storage.v2.ComposeObjectRequest.SourceObject - (*ComposeObjectRequest_SourceObject_ObjectPreconditions)(nil), // 55: google.storage.v2.ComposeObjectRequest.SourceObject.ObjectPreconditions - (*Bucket_Billing)(nil), // 56: google.storage.v2.Bucket.Billing - (*Bucket_Cors)(nil), // 57: google.storage.v2.Bucket.Cors - (*Bucket_Encryption)(nil), // 58: google.storage.v2.Bucket.Encryption - (*Bucket_IamConfig)(nil), // 59: google.storage.v2.Bucket.IamConfig - (*Bucket_Lifecycle)(nil), // 60: google.storage.v2.Bucket.Lifecycle - (*Bucket_Logging)(nil), // 61: google.storage.v2.Bucket.Logging - (*Bucket_RetentionPolicy)(nil), // 62: google.storage.v2.Bucket.RetentionPolicy - (*Bucket_Versioning)(nil), // 63: google.storage.v2.Bucket.Versioning - (*Bucket_Website)(nil), // 64: google.storage.v2.Bucket.Website - (*Bucket_Autoclass)(nil), // 65: google.storage.v2.Bucket.Autoclass - nil, // 66: google.storage.v2.Bucket.LabelsEntry - (*Bucket_IamConfig_UniformBucketLevelAccess)(nil), // 67: google.storage.v2.Bucket.IamConfig.UniformBucketLevelAccess - (*Bucket_Lifecycle_Rule)(nil), // 68: google.storage.v2.Bucket.Lifecycle.Rule - (*Bucket_Lifecycle_Rule_Action)(nil), // 69: google.storage.v2.Bucket.Lifecycle.Rule.Action - (*Bucket_Lifecycle_Rule_Condition)(nil), // 70: google.storage.v2.Bucket.Lifecycle.Rule.Condition - nil, // 71: google.storage.v2.Notification.CustomAttributesEntry - nil, // 72: google.storage.v2.Object.MetadataEntry - (*fieldmaskpb.FieldMask)(nil), // 73: google.protobuf.FieldMask - (*timestamppb.Timestamp)(nil), // 74: google.protobuf.Timestamp - (*date.Date)(nil), // 75: google.type.Date - (*v1.GetIamPolicyRequest)(nil), // 76: google.iam.v1.GetIamPolicyRequest - (*v1.SetIamPolicyRequest)(nil), // 77: google.iam.v1.SetIamPolicyRequest - (*v1.TestIamPermissionsRequest)(nil), // 78: google.iam.v1.TestIamPermissionsRequest - (*emptypb.Empty)(nil), // 79: google.protobuf.Empty - (*v1.Policy)(nil), // 80: google.iam.v1.Policy - (*v1.TestIamPermissionsResponse)(nil), // 81: google.iam.v1.TestIamPermissionsResponse + (*ServiceConstants)(nil), // 38: google.storage.v2.ServiceConstants + (*Bucket)(nil), // 39: google.storage.v2.Bucket + (*BucketAccessControl)(nil), // 40: google.storage.v2.BucketAccessControl + (*ChecksummedData)(nil), // 41: google.storage.v2.ChecksummedData + (*ObjectChecksums)(nil), // 42: google.storage.v2.ObjectChecksums + (*HmacKeyMetadata)(nil), // 43: google.storage.v2.HmacKeyMetadata + (*Notification)(nil), // 44: google.storage.v2.Notification + (*CustomerEncryption)(nil), // 45: google.storage.v2.CustomerEncryption + (*Object)(nil), // 46: google.storage.v2.Object + (*ObjectAccessControl)(nil), // 47: google.storage.v2.ObjectAccessControl + (*ListObjectsResponse)(nil), // 48: google.storage.v2.ListObjectsResponse + (*ProjectTeam)(nil), // 49: google.storage.v2.ProjectTeam + (*ServiceAccount)(nil), // 50: google.storage.v2.ServiceAccount + (*Owner)(nil), // 51: google.storage.v2.Owner + (*ContentRange)(nil), // 52: google.storage.v2.ContentRange + (*ComposeObjectRequest_SourceObject)(nil), // 53: google.storage.v2.ComposeObjectRequest.SourceObject + (*ComposeObjectRequest_SourceObject_ObjectPreconditions)(nil), // 54: google.storage.v2.ComposeObjectRequest.SourceObject.ObjectPreconditions + (*Bucket_Billing)(nil), // 55: google.storage.v2.Bucket.Billing + (*Bucket_Cors)(nil), // 56: google.storage.v2.Bucket.Cors + (*Bucket_Encryption)(nil), // 57: google.storage.v2.Bucket.Encryption + (*Bucket_IamConfig)(nil), // 58: google.storage.v2.Bucket.IamConfig + (*Bucket_Lifecycle)(nil), // 59: google.storage.v2.Bucket.Lifecycle + (*Bucket_Logging)(nil), // 60: google.storage.v2.Bucket.Logging + (*Bucket_RetentionPolicy)(nil), // 61: google.storage.v2.Bucket.RetentionPolicy + (*Bucket_Versioning)(nil), // 62: google.storage.v2.Bucket.Versioning + (*Bucket_Website)(nil), // 63: google.storage.v2.Bucket.Website + (*Bucket_Autoclass)(nil), // 64: google.storage.v2.Bucket.Autoclass + nil, // 65: google.storage.v2.Bucket.LabelsEntry + (*Bucket_IamConfig_UniformBucketLevelAccess)(nil), // 66: google.storage.v2.Bucket.IamConfig.UniformBucketLevelAccess + (*Bucket_Lifecycle_Rule)(nil), // 67: google.storage.v2.Bucket.Lifecycle.Rule + (*Bucket_Lifecycle_Rule_Action)(nil), // 68: google.storage.v2.Bucket.Lifecycle.Rule.Action + (*Bucket_Lifecycle_Rule_Condition)(nil), // 69: google.storage.v2.Bucket.Lifecycle.Rule.Condition + nil, // 70: google.storage.v2.Notification.CustomAttributesEntry + nil, // 71: google.storage.v2.Object.MetadataEntry + (*fieldmaskpb.FieldMask)(nil), // 72: google.protobuf.FieldMask + (*timestamppb.Timestamp)(nil), // 73: google.protobuf.Timestamp + (*date.Date)(nil), // 74: google.type.Date + (*v1.GetIamPolicyRequest)(nil), // 75: google.iam.v1.GetIamPolicyRequest + (*v1.SetIamPolicyRequest)(nil), // 76: google.iam.v1.SetIamPolicyRequest + (*v1.TestIamPermissionsRequest)(nil), // 77: google.iam.v1.TestIamPermissionsRequest + (*emptypb.Empty)(nil), // 78: google.protobuf.Empty + (*v1.Policy)(nil), // 79: google.iam.v1.Policy + (*v1.TestIamPermissionsResponse)(nil), // 80: google.iam.v1.TestIamPermissionsResponse } var file_google_storage_v2_storage_proto_depIdxs = []int32{ - 38, // 0: google.storage.v2.DeleteBucketRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 38, // 1: google.storage.v2.GetBucketRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 73, // 2: google.storage.v2.GetBucketRequest.read_mask:type_name -> google.protobuf.FieldMask - 40, // 3: google.storage.v2.CreateBucketRequest.bucket:type_name -> google.storage.v2.Bucket - 73, // 4: google.storage.v2.ListBucketsRequest.read_mask:type_name -> google.protobuf.FieldMask - 38, // 5: google.storage.v2.ListBucketsRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 40, // 6: google.storage.v2.ListBucketsResponse.buckets:type_name -> google.storage.v2.Bucket - 38, // 7: google.storage.v2.LockBucketRetentionPolicyRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 40, // 8: google.storage.v2.UpdateBucketRequest.bucket:type_name -> google.storage.v2.Bucket - 73, // 9: google.storage.v2.UpdateBucketRequest.update_mask:type_name -> google.protobuf.FieldMask - 38, // 10: google.storage.v2.UpdateBucketRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 45, // 11: google.storage.v2.CreateNotificationRequest.notification:type_name -> google.storage.v2.Notification - 45, // 12: google.storage.v2.ListNotificationsResponse.notifications:type_name -> google.storage.v2.Notification - 47, // 13: google.storage.v2.ComposeObjectRequest.destination:type_name -> google.storage.v2.Object - 54, // 14: google.storage.v2.ComposeObjectRequest.source_objects:type_name -> google.storage.v2.ComposeObjectRequest.SourceObject - 37, // 15: google.storage.v2.ComposeObjectRequest.common_object_request_params:type_name -> google.storage.v2.CommonObjectRequestParams - 38, // 16: google.storage.v2.ComposeObjectRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 37, // 17: google.storage.v2.DeleteObjectRequest.common_object_request_params:type_name -> google.storage.v2.CommonObjectRequestParams - 38, // 18: google.storage.v2.DeleteObjectRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 37, // 19: google.storage.v2.ReadObjectRequest.common_object_request_params:type_name -> google.storage.v2.CommonObjectRequestParams - 38, // 20: google.storage.v2.ReadObjectRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 73, // 21: google.storage.v2.ReadObjectRequest.read_mask:type_name -> google.protobuf.FieldMask - 37, // 22: google.storage.v2.GetObjectRequest.common_object_request_params:type_name -> google.storage.v2.CommonObjectRequestParams - 38, // 23: google.storage.v2.GetObjectRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 73, // 24: google.storage.v2.GetObjectRequest.read_mask:type_name -> google.protobuf.FieldMask - 42, // 25: google.storage.v2.ReadObjectResponse.checksummed_data:type_name -> google.storage.v2.ChecksummedData - 43, // 26: google.storage.v2.ReadObjectResponse.object_checksums:type_name -> google.storage.v2.ObjectChecksums - 53, // 27: google.storage.v2.ReadObjectResponse.content_range:type_name -> google.storage.v2.ContentRange - 47, // 28: google.storage.v2.ReadObjectResponse.metadata:type_name -> google.storage.v2.Object - 47, // 29: google.storage.v2.WriteObjectSpec.resource:type_name -> google.storage.v2.Object - 18, // 30: google.storage.v2.WriteObjectRequest.write_object_spec:type_name -> google.storage.v2.WriteObjectSpec - 42, // 31: google.storage.v2.WriteObjectRequest.checksummed_data:type_name -> google.storage.v2.ChecksummedData - 43, // 32: google.storage.v2.WriteObjectRequest.object_checksums:type_name -> google.storage.v2.ObjectChecksums - 37, // 33: google.storage.v2.WriteObjectRequest.common_object_request_params:type_name -> google.storage.v2.CommonObjectRequestParams - 38, // 34: google.storage.v2.WriteObjectRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 47, // 35: google.storage.v2.WriteObjectResponse.resource:type_name -> google.storage.v2.Object - 73, // 36: google.storage.v2.ListObjectsRequest.read_mask:type_name -> google.protobuf.FieldMask - 38, // 37: google.storage.v2.ListObjectsRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 37, // 38: google.storage.v2.QueryWriteStatusRequest.common_object_request_params:type_name -> google.storage.v2.CommonObjectRequestParams - 38, // 39: google.storage.v2.QueryWriteStatusRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 47, // 40: google.storage.v2.QueryWriteStatusResponse.resource:type_name -> google.storage.v2.Object - 47, // 41: google.storage.v2.RewriteObjectRequest.destination:type_name -> google.storage.v2.Object - 37, // 42: google.storage.v2.RewriteObjectRequest.common_object_request_params:type_name -> google.storage.v2.CommonObjectRequestParams - 38, // 43: google.storage.v2.RewriteObjectRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 47, // 44: google.storage.v2.RewriteResponse.resource:type_name -> google.storage.v2.Object - 18, // 45: google.storage.v2.StartResumableWriteRequest.write_object_spec:type_name -> google.storage.v2.WriteObjectSpec - 37, // 46: google.storage.v2.StartResumableWriteRequest.common_object_request_params:type_name -> google.storage.v2.CommonObjectRequestParams - 38, // 47: google.storage.v2.StartResumableWriteRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 47, // 48: google.storage.v2.UpdateObjectRequest.object:type_name -> google.storage.v2.Object - 73, // 49: google.storage.v2.UpdateObjectRequest.update_mask:type_name -> google.protobuf.FieldMask - 37, // 50: google.storage.v2.UpdateObjectRequest.common_object_request_params:type_name -> google.storage.v2.CommonObjectRequestParams - 38, // 51: google.storage.v2.UpdateObjectRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 38, // 52: google.storage.v2.GetServiceAccountRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 38, // 53: google.storage.v2.CreateHmacKeyRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 44, // 54: google.storage.v2.CreateHmacKeyResponse.metadata:type_name -> google.storage.v2.HmacKeyMetadata - 38, // 55: google.storage.v2.DeleteHmacKeyRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 38, // 56: google.storage.v2.GetHmacKeyRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 38, // 57: google.storage.v2.ListHmacKeysRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 44, // 58: google.storage.v2.ListHmacKeysResponse.hmac_keys:type_name -> google.storage.v2.HmacKeyMetadata - 44, // 59: google.storage.v2.UpdateHmacKeyRequest.hmac_key:type_name -> google.storage.v2.HmacKeyMetadata - 38, // 60: google.storage.v2.UpdateHmacKeyRequest.common_request_params:type_name -> google.storage.v2.CommonRequestParams - 73, // 61: google.storage.v2.UpdateHmacKeyRequest.update_mask:type_name -> google.protobuf.FieldMask - 41, // 62: google.storage.v2.Bucket.acl:type_name -> google.storage.v2.BucketAccessControl - 48, // 63: google.storage.v2.Bucket.default_object_acl:type_name -> google.storage.v2.ObjectAccessControl - 60, // 64: google.storage.v2.Bucket.lifecycle:type_name -> google.storage.v2.Bucket.Lifecycle - 74, // 65: google.storage.v2.Bucket.create_time:type_name -> google.protobuf.Timestamp - 57, // 66: google.storage.v2.Bucket.cors:type_name -> google.storage.v2.Bucket.Cors - 74, // 67: google.storage.v2.Bucket.update_time:type_name -> google.protobuf.Timestamp - 66, // 68: google.storage.v2.Bucket.labels:type_name -> google.storage.v2.Bucket.LabelsEntry - 64, // 69: google.storage.v2.Bucket.website:type_name -> google.storage.v2.Bucket.Website - 63, // 70: google.storage.v2.Bucket.versioning:type_name -> google.storage.v2.Bucket.Versioning - 61, // 71: google.storage.v2.Bucket.logging:type_name -> google.storage.v2.Bucket.Logging - 52, // 72: google.storage.v2.Bucket.owner:type_name -> google.storage.v2.Owner - 58, // 73: google.storage.v2.Bucket.encryption:type_name -> google.storage.v2.Bucket.Encryption - 56, // 74: google.storage.v2.Bucket.billing:type_name -> google.storage.v2.Bucket.Billing - 62, // 75: google.storage.v2.Bucket.retention_policy:type_name -> google.storage.v2.Bucket.RetentionPolicy - 59, // 76: google.storage.v2.Bucket.iam_config:type_name -> google.storage.v2.Bucket.IamConfig - 65, // 77: google.storage.v2.Bucket.autoclass:type_name -> google.storage.v2.Bucket.Autoclass - 50, // 78: google.storage.v2.BucketAccessControl.project_team:type_name -> google.storage.v2.ProjectTeam - 74, // 79: google.storage.v2.HmacKeyMetadata.create_time:type_name -> google.protobuf.Timestamp - 74, // 80: google.storage.v2.HmacKeyMetadata.update_time:type_name -> google.protobuf.Timestamp - 71, // 81: google.storage.v2.Notification.custom_attributes:type_name -> google.storage.v2.Notification.CustomAttributesEntry - 48, // 82: google.storage.v2.Object.acl:type_name -> google.storage.v2.ObjectAccessControl - 74, // 83: google.storage.v2.Object.delete_time:type_name -> google.protobuf.Timestamp - 74, // 84: google.storage.v2.Object.create_time:type_name -> google.protobuf.Timestamp - 43, // 85: google.storage.v2.Object.checksums:type_name -> google.storage.v2.ObjectChecksums - 74, // 86: google.storage.v2.Object.update_time:type_name -> google.protobuf.Timestamp - 74, // 87: google.storage.v2.Object.update_storage_class_time:type_name -> google.protobuf.Timestamp - 74, // 88: google.storage.v2.Object.retention_expire_time:type_name -> google.protobuf.Timestamp - 72, // 89: google.storage.v2.Object.metadata:type_name -> google.storage.v2.Object.MetadataEntry - 52, // 90: google.storage.v2.Object.owner:type_name -> google.storage.v2.Owner - 46, // 91: google.storage.v2.Object.customer_encryption:type_name -> google.storage.v2.CustomerEncryption - 74, // 92: google.storage.v2.Object.custom_time:type_name -> google.protobuf.Timestamp - 50, // 93: google.storage.v2.ObjectAccessControl.project_team:type_name -> google.storage.v2.ProjectTeam - 47, // 94: google.storage.v2.ListObjectsResponse.objects:type_name -> google.storage.v2.Object - 55, // 95: google.storage.v2.ComposeObjectRequest.SourceObject.object_preconditions:type_name -> google.storage.v2.ComposeObjectRequest.SourceObject.ObjectPreconditions - 67, // 96: google.storage.v2.Bucket.IamConfig.uniform_bucket_level_access:type_name -> google.storage.v2.Bucket.IamConfig.UniformBucketLevelAccess - 68, // 97: google.storage.v2.Bucket.Lifecycle.rule:type_name -> google.storage.v2.Bucket.Lifecycle.Rule - 74, // 98: google.storage.v2.Bucket.RetentionPolicy.effective_time:type_name -> google.protobuf.Timestamp - 74, // 99: google.storage.v2.Bucket.Autoclass.toggle_time:type_name -> google.protobuf.Timestamp - 74, // 100: google.storage.v2.Bucket.IamConfig.UniformBucketLevelAccess.lock_time:type_name -> google.protobuf.Timestamp - 69, // 101: google.storage.v2.Bucket.Lifecycle.Rule.action:type_name -> google.storage.v2.Bucket.Lifecycle.Rule.Action - 70, // 102: google.storage.v2.Bucket.Lifecycle.Rule.condition:type_name -> google.storage.v2.Bucket.Lifecycle.Rule.Condition - 75, // 103: google.storage.v2.Bucket.Lifecycle.Rule.Condition.created_before:type_name -> google.type.Date - 75, // 104: google.storage.v2.Bucket.Lifecycle.Rule.Condition.custom_time_before:type_name -> google.type.Date - 75, // 105: google.storage.v2.Bucket.Lifecycle.Rule.Condition.noncurrent_time_before:type_name -> google.type.Date - 1, // 106: google.storage.v2.Storage.DeleteBucket:input_type -> google.storage.v2.DeleteBucketRequest - 2, // 107: google.storage.v2.Storage.GetBucket:input_type -> google.storage.v2.GetBucketRequest - 3, // 108: google.storage.v2.Storage.CreateBucket:input_type -> google.storage.v2.CreateBucketRequest - 4, // 109: google.storage.v2.Storage.ListBuckets:input_type -> google.storage.v2.ListBucketsRequest - 6, // 110: google.storage.v2.Storage.LockBucketRetentionPolicy:input_type -> google.storage.v2.LockBucketRetentionPolicyRequest - 76, // 111: google.storage.v2.Storage.GetIamPolicy:input_type -> google.iam.v1.GetIamPolicyRequest - 77, // 112: google.storage.v2.Storage.SetIamPolicy:input_type -> google.iam.v1.SetIamPolicyRequest - 78, // 113: google.storage.v2.Storage.TestIamPermissions:input_type -> google.iam.v1.TestIamPermissionsRequest - 7, // 114: google.storage.v2.Storage.UpdateBucket:input_type -> google.storage.v2.UpdateBucketRequest - 8, // 115: google.storage.v2.Storage.DeleteNotification:input_type -> google.storage.v2.DeleteNotificationRequest - 9, // 116: google.storage.v2.Storage.GetNotification:input_type -> google.storage.v2.GetNotificationRequest - 10, // 117: google.storage.v2.Storage.CreateNotification:input_type -> google.storage.v2.CreateNotificationRequest - 11, // 118: google.storage.v2.Storage.ListNotifications:input_type -> google.storage.v2.ListNotificationsRequest - 13, // 119: google.storage.v2.Storage.ComposeObject:input_type -> google.storage.v2.ComposeObjectRequest - 14, // 120: google.storage.v2.Storage.DeleteObject:input_type -> google.storage.v2.DeleteObjectRequest - 16, // 121: google.storage.v2.Storage.GetObject:input_type -> google.storage.v2.GetObjectRequest - 15, // 122: google.storage.v2.Storage.ReadObject:input_type -> google.storage.v2.ReadObjectRequest - 28, // 123: google.storage.v2.Storage.UpdateObject:input_type -> google.storage.v2.UpdateObjectRequest - 19, // 124: google.storage.v2.Storage.WriteObject:input_type -> google.storage.v2.WriteObjectRequest - 21, // 125: google.storage.v2.Storage.ListObjects:input_type -> google.storage.v2.ListObjectsRequest - 24, // 126: google.storage.v2.Storage.RewriteObject:input_type -> google.storage.v2.RewriteObjectRequest - 26, // 127: google.storage.v2.Storage.StartResumableWrite:input_type -> google.storage.v2.StartResumableWriteRequest - 22, // 128: google.storage.v2.Storage.QueryWriteStatus:input_type -> google.storage.v2.QueryWriteStatusRequest - 29, // 129: google.storage.v2.Storage.GetServiceAccount:input_type -> google.storage.v2.GetServiceAccountRequest - 30, // 130: google.storage.v2.Storage.CreateHmacKey:input_type -> google.storage.v2.CreateHmacKeyRequest - 32, // 131: google.storage.v2.Storage.DeleteHmacKey:input_type -> google.storage.v2.DeleteHmacKeyRequest - 33, // 132: google.storage.v2.Storage.GetHmacKey:input_type -> google.storage.v2.GetHmacKeyRequest - 34, // 133: google.storage.v2.Storage.ListHmacKeys:input_type -> google.storage.v2.ListHmacKeysRequest - 36, // 134: google.storage.v2.Storage.UpdateHmacKey:input_type -> google.storage.v2.UpdateHmacKeyRequest - 79, // 135: google.storage.v2.Storage.DeleteBucket:output_type -> google.protobuf.Empty - 40, // 136: google.storage.v2.Storage.GetBucket:output_type -> google.storage.v2.Bucket - 40, // 137: google.storage.v2.Storage.CreateBucket:output_type -> google.storage.v2.Bucket - 5, // 138: google.storage.v2.Storage.ListBuckets:output_type -> google.storage.v2.ListBucketsResponse - 40, // 139: google.storage.v2.Storage.LockBucketRetentionPolicy:output_type -> google.storage.v2.Bucket - 80, // 140: google.storage.v2.Storage.GetIamPolicy:output_type -> google.iam.v1.Policy - 80, // 141: google.storage.v2.Storage.SetIamPolicy:output_type -> google.iam.v1.Policy - 81, // 142: google.storage.v2.Storage.TestIamPermissions:output_type -> google.iam.v1.TestIamPermissionsResponse - 40, // 143: google.storage.v2.Storage.UpdateBucket:output_type -> google.storage.v2.Bucket - 79, // 144: google.storage.v2.Storage.DeleteNotification:output_type -> google.protobuf.Empty - 45, // 145: google.storage.v2.Storage.GetNotification:output_type -> google.storage.v2.Notification - 45, // 146: google.storage.v2.Storage.CreateNotification:output_type -> google.storage.v2.Notification - 12, // 147: google.storage.v2.Storage.ListNotifications:output_type -> google.storage.v2.ListNotificationsResponse - 47, // 148: google.storage.v2.Storage.ComposeObject:output_type -> google.storage.v2.Object - 79, // 149: google.storage.v2.Storage.DeleteObject:output_type -> google.protobuf.Empty - 47, // 150: google.storage.v2.Storage.GetObject:output_type -> google.storage.v2.Object - 17, // 151: google.storage.v2.Storage.ReadObject:output_type -> google.storage.v2.ReadObjectResponse - 47, // 152: google.storage.v2.Storage.UpdateObject:output_type -> google.storage.v2.Object - 20, // 153: google.storage.v2.Storage.WriteObject:output_type -> google.storage.v2.WriteObjectResponse - 49, // 154: google.storage.v2.Storage.ListObjects:output_type -> google.storage.v2.ListObjectsResponse - 25, // 155: google.storage.v2.Storage.RewriteObject:output_type -> google.storage.v2.RewriteResponse - 27, // 156: google.storage.v2.Storage.StartResumableWrite:output_type -> google.storage.v2.StartResumableWriteResponse - 23, // 157: google.storage.v2.Storage.QueryWriteStatus:output_type -> google.storage.v2.QueryWriteStatusResponse - 51, // 158: google.storage.v2.Storage.GetServiceAccount:output_type -> google.storage.v2.ServiceAccount - 31, // 159: google.storage.v2.Storage.CreateHmacKey:output_type -> google.storage.v2.CreateHmacKeyResponse - 79, // 160: google.storage.v2.Storage.DeleteHmacKey:output_type -> google.protobuf.Empty - 44, // 161: google.storage.v2.Storage.GetHmacKey:output_type -> google.storage.v2.HmacKeyMetadata - 35, // 162: google.storage.v2.Storage.ListHmacKeys:output_type -> google.storage.v2.ListHmacKeysResponse - 44, // 163: google.storage.v2.Storage.UpdateHmacKey:output_type -> google.storage.v2.HmacKeyMetadata - 135, // [135:164] is the sub-list for method output_type - 106, // [106:135] is the sub-list for method input_type - 106, // [106:106] is the sub-list for extension type_name - 106, // [106:106] is the sub-list for extension extendee - 0, // [0:106] is the sub-list for field type_name + 72, // 0: google.storage.v2.GetBucketRequest.read_mask:type_name -> google.protobuf.FieldMask + 39, // 1: google.storage.v2.CreateBucketRequest.bucket:type_name -> google.storage.v2.Bucket + 72, // 2: google.storage.v2.ListBucketsRequest.read_mask:type_name -> google.protobuf.FieldMask + 39, // 3: google.storage.v2.ListBucketsResponse.buckets:type_name -> google.storage.v2.Bucket + 39, // 4: google.storage.v2.UpdateBucketRequest.bucket:type_name -> google.storage.v2.Bucket + 72, // 5: google.storage.v2.UpdateBucketRequest.update_mask:type_name -> google.protobuf.FieldMask + 44, // 6: google.storage.v2.CreateNotificationRequest.notification:type_name -> google.storage.v2.Notification + 44, // 7: google.storage.v2.ListNotificationsResponse.notifications:type_name -> google.storage.v2.Notification + 46, // 8: google.storage.v2.ComposeObjectRequest.destination:type_name -> google.storage.v2.Object + 53, // 9: google.storage.v2.ComposeObjectRequest.source_objects:type_name -> google.storage.v2.ComposeObjectRequest.SourceObject + 37, // 10: google.storage.v2.ComposeObjectRequest.common_object_request_params:type_name -> google.storage.v2.CommonObjectRequestParams + 37, // 11: google.storage.v2.DeleteObjectRequest.common_object_request_params:type_name -> google.storage.v2.CommonObjectRequestParams + 37, // 12: google.storage.v2.ReadObjectRequest.common_object_request_params:type_name -> google.storage.v2.CommonObjectRequestParams + 72, // 13: google.storage.v2.ReadObjectRequest.read_mask:type_name -> google.protobuf.FieldMask + 37, // 14: google.storage.v2.GetObjectRequest.common_object_request_params:type_name -> google.storage.v2.CommonObjectRequestParams + 72, // 15: google.storage.v2.GetObjectRequest.read_mask:type_name -> google.protobuf.FieldMask + 41, // 16: google.storage.v2.ReadObjectResponse.checksummed_data:type_name -> google.storage.v2.ChecksummedData + 42, // 17: google.storage.v2.ReadObjectResponse.object_checksums:type_name -> google.storage.v2.ObjectChecksums + 52, // 18: google.storage.v2.ReadObjectResponse.content_range:type_name -> google.storage.v2.ContentRange + 46, // 19: google.storage.v2.ReadObjectResponse.metadata:type_name -> google.storage.v2.Object + 46, // 20: google.storage.v2.WriteObjectSpec.resource:type_name -> google.storage.v2.Object + 18, // 21: google.storage.v2.WriteObjectRequest.write_object_spec:type_name -> google.storage.v2.WriteObjectSpec + 41, // 22: google.storage.v2.WriteObjectRequest.checksummed_data:type_name -> google.storage.v2.ChecksummedData + 42, // 23: google.storage.v2.WriteObjectRequest.object_checksums:type_name -> google.storage.v2.ObjectChecksums + 37, // 24: google.storage.v2.WriteObjectRequest.common_object_request_params:type_name -> google.storage.v2.CommonObjectRequestParams + 46, // 25: google.storage.v2.WriteObjectResponse.resource:type_name -> google.storage.v2.Object + 72, // 26: google.storage.v2.ListObjectsRequest.read_mask:type_name -> google.protobuf.FieldMask + 37, // 27: google.storage.v2.QueryWriteStatusRequest.common_object_request_params:type_name -> google.storage.v2.CommonObjectRequestParams + 46, // 28: google.storage.v2.QueryWriteStatusResponse.resource:type_name -> google.storage.v2.Object + 46, // 29: google.storage.v2.RewriteObjectRequest.destination:type_name -> google.storage.v2.Object + 37, // 30: google.storage.v2.RewriteObjectRequest.common_object_request_params:type_name -> google.storage.v2.CommonObjectRequestParams + 46, // 31: google.storage.v2.RewriteResponse.resource:type_name -> google.storage.v2.Object + 18, // 32: google.storage.v2.StartResumableWriteRequest.write_object_spec:type_name -> google.storage.v2.WriteObjectSpec + 37, // 33: google.storage.v2.StartResumableWriteRequest.common_object_request_params:type_name -> google.storage.v2.CommonObjectRequestParams + 46, // 34: google.storage.v2.UpdateObjectRequest.object:type_name -> google.storage.v2.Object + 72, // 35: google.storage.v2.UpdateObjectRequest.update_mask:type_name -> google.protobuf.FieldMask + 37, // 36: google.storage.v2.UpdateObjectRequest.common_object_request_params:type_name -> google.storage.v2.CommonObjectRequestParams + 43, // 37: google.storage.v2.CreateHmacKeyResponse.metadata:type_name -> google.storage.v2.HmacKeyMetadata + 43, // 38: google.storage.v2.ListHmacKeysResponse.hmac_keys:type_name -> google.storage.v2.HmacKeyMetadata + 43, // 39: google.storage.v2.UpdateHmacKeyRequest.hmac_key:type_name -> google.storage.v2.HmacKeyMetadata + 72, // 40: google.storage.v2.UpdateHmacKeyRequest.update_mask:type_name -> google.protobuf.FieldMask + 40, // 41: google.storage.v2.Bucket.acl:type_name -> google.storage.v2.BucketAccessControl + 47, // 42: google.storage.v2.Bucket.default_object_acl:type_name -> google.storage.v2.ObjectAccessControl + 59, // 43: google.storage.v2.Bucket.lifecycle:type_name -> google.storage.v2.Bucket.Lifecycle + 73, // 44: google.storage.v2.Bucket.create_time:type_name -> google.protobuf.Timestamp + 56, // 45: google.storage.v2.Bucket.cors:type_name -> google.storage.v2.Bucket.Cors + 73, // 46: google.storage.v2.Bucket.update_time:type_name -> google.protobuf.Timestamp + 65, // 47: google.storage.v2.Bucket.labels:type_name -> google.storage.v2.Bucket.LabelsEntry + 63, // 48: google.storage.v2.Bucket.website:type_name -> google.storage.v2.Bucket.Website + 62, // 49: google.storage.v2.Bucket.versioning:type_name -> google.storage.v2.Bucket.Versioning + 60, // 50: google.storage.v2.Bucket.logging:type_name -> google.storage.v2.Bucket.Logging + 51, // 51: google.storage.v2.Bucket.owner:type_name -> google.storage.v2.Owner + 57, // 52: google.storage.v2.Bucket.encryption:type_name -> google.storage.v2.Bucket.Encryption + 55, // 53: google.storage.v2.Bucket.billing:type_name -> google.storage.v2.Bucket.Billing + 61, // 54: google.storage.v2.Bucket.retention_policy:type_name -> google.storage.v2.Bucket.RetentionPolicy + 58, // 55: google.storage.v2.Bucket.iam_config:type_name -> google.storage.v2.Bucket.IamConfig + 64, // 56: google.storage.v2.Bucket.autoclass:type_name -> google.storage.v2.Bucket.Autoclass + 49, // 57: google.storage.v2.BucketAccessControl.project_team:type_name -> google.storage.v2.ProjectTeam + 73, // 58: google.storage.v2.HmacKeyMetadata.create_time:type_name -> google.protobuf.Timestamp + 73, // 59: google.storage.v2.HmacKeyMetadata.update_time:type_name -> google.protobuf.Timestamp + 70, // 60: google.storage.v2.Notification.custom_attributes:type_name -> google.storage.v2.Notification.CustomAttributesEntry + 47, // 61: google.storage.v2.Object.acl:type_name -> google.storage.v2.ObjectAccessControl + 73, // 62: google.storage.v2.Object.delete_time:type_name -> google.protobuf.Timestamp + 73, // 63: google.storage.v2.Object.create_time:type_name -> google.protobuf.Timestamp + 42, // 64: google.storage.v2.Object.checksums:type_name -> google.storage.v2.ObjectChecksums + 73, // 65: google.storage.v2.Object.update_time:type_name -> google.protobuf.Timestamp + 73, // 66: google.storage.v2.Object.update_storage_class_time:type_name -> google.protobuf.Timestamp + 73, // 67: google.storage.v2.Object.retention_expire_time:type_name -> google.protobuf.Timestamp + 71, // 68: google.storage.v2.Object.metadata:type_name -> google.storage.v2.Object.MetadataEntry + 51, // 69: google.storage.v2.Object.owner:type_name -> google.storage.v2.Owner + 45, // 70: google.storage.v2.Object.customer_encryption:type_name -> google.storage.v2.CustomerEncryption + 73, // 71: google.storage.v2.Object.custom_time:type_name -> google.protobuf.Timestamp + 49, // 72: google.storage.v2.ObjectAccessControl.project_team:type_name -> google.storage.v2.ProjectTeam + 46, // 73: google.storage.v2.ListObjectsResponse.objects:type_name -> google.storage.v2.Object + 54, // 74: google.storage.v2.ComposeObjectRequest.SourceObject.object_preconditions:type_name -> google.storage.v2.ComposeObjectRequest.SourceObject.ObjectPreconditions + 66, // 75: google.storage.v2.Bucket.IamConfig.uniform_bucket_level_access:type_name -> google.storage.v2.Bucket.IamConfig.UniformBucketLevelAccess + 67, // 76: google.storage.v2.Bucket.Lifecycle.rule:type_name -> google.storage.v2.Bucket.Lifecycle.Rule + 73, // 77: google.storage.v2.Bucket.RetentionPolicy.effective_time:type_name -> google.protobuf.Timestamp + 73, // 78: google.storage.v2.Bucket.Autoclass.toggle_time:type_name -> google.protobuf.Timestamp + 73, // 79: google.storage.v2.Bucket.IamConfig.UniformBucketLevelAccess.lock_time:type_name -> google.protobuf.Timestamp + 68, // 80: google.storage.v2.Bucket.Lifecycle.Rule.action:type_name -> google.storage.v2.Bucket.Lifecycle.Rule.Action + 69, // 81: google.storage.v2.Bucket.Lifecycle.Rule.condition:type_name -> google.storage.v2.Bucket.Lifecycle.Rule.Condition + 74, // 82: google.storage.v2.Bucket.Lifecycle.Rule.Condition.created_before:type_name -> google.type.Date + 74, // 83: google.storage.v2.Bucket.Lifecycle.Rule.Condition.custom_time_before:type_name -> google.type.Date + 74, // 84: google.storage.v2.Bucket.Lifecycle.Rule.Condition.noncurrent_time_before:type_name -> google.type.Date + 1, // 85: google.storage.v2.Storage.DeleteBucket:input_type -> google.storage.v2.DeleteBucketRequest + 2, // 86: google.storage.v2.Storage.GetBucket:input_type -> google.storage.v2.GetBucketRequest + 3, // 87: google.storage.v2.Storage.CreateBucket:input_type -> google.storage.v2.CreateBucketRequest + 4, // 88: google.storage.v2.Storage.ListBuckets:input_type -> google.storage.v2.ListBucketsRequest + 6, // 89: google.storage.v2.Storage.LockBucketRetentionPolicy:input_type -> google.storage.v2.LockBucketRetentionPolicyRequest + 75, // 90: google.storage.v2.Storage.GetIamPolicy:input_type -> google.iam.v1.GetIamPolicyRequest + 76, // 91: google.storage.v2.Storage.SetIamPolicy:input_type -> google.iam.v1.SetIamPolicyRequest + 77, // 92: google.storage.v2.Storage.TestIamPermissions:input_type -> google.iam.v1.TestIamPermissionsRequest + 7, // 93: google.storage.v2.Storage.UpdateBucket:input_type -> google.storage.v2.UpdateBucketRequest + 8, // 94: google.storage.v2.Storage.DeleteNotification:input_type -> google.storage.v2.DeleteNotificationRequest + 9, // 95: google.storage.v2.Storage.GetNotification:input_type -> google.storage.v2.GetNotificationRequest + 10, // 96: google.storage.v2.Storage.CreateNotification:input_type -> google.storage.v2.CreateNotificationRequest + 11, // 97: google.storage.v2.Storage.ListNotifications:input_type -> google.storage.v2.ListNotificationsRequest + 13, // 98: google.storage.v2.Storage.ComposeObject:input_type -> google.storage.v2.ComposeObjectRequest + 14, // 99: google.storage.v2.Storage.DeleteObject:input_type -> google.storage.v2.DeleteObjectRequest + 16, // 100: google.storage.v2.Storage.GetObject:input_type -> google.storage.v2.GetObjectRequest + 15, // 101: google.storage.v2.Storage.ReadObject:input_type -> google.storage.v2.ReadObjectRequest + 28, // 102: google.storage.v2.Storage.UpdateObject:input_type -> google.storage.v2.UpdateObjectRequest + 19, // 103: google.storage.v2.Storage.WriteObject:input_type -> google.storage.v2.WriteObjectRequest + 21, // 104: google.storage.v2.Storage.ListObjects:input_type -> google.storage.v2.ListObjectsRequest + 24, // 105: google.storage.v2.Storage.RewriteObject:input_type -> google.storage.v2.RewriteObjectRequest + 26, // 106: google.storage.v2.Storage.StartResumableWrite:input_type -> google.storage.v2.StartResumableWriteRequest + 22, // 107: google.storage.v2.Storage.QueryWriteStatus:input_type -> google.storage.v2.QueryWriteStatusRequest + 29, // 108: google.storage.v2.Storage.GetServiceAccount:input_type -> google.storage.v2.GetServiceAccountRequest + 30, // 109: google.storage.v2.Storage.CreateHmacKey:input_type -> google.storage.v2.CreateHmacKeyRequest + 32, // 110: google.storage.v2.Storage.DeleteHmacKey:input_type -> google.storage.v2.DeleteHmacKeyRequest + 33, // 111: google.storage.v2.Storage.GetHmacKey:input_type -> google.storage.v2.GetHmacKeyRequest + 34, // 112: google.storage.v2.Storage.ListHmacKeys:input_type -> google.storage.v2.ListHmacKeysRequest + 36, // 113: google.storage.v2.Storage.UpdateHmacKey:input_type -> google.storage.v2.UpdateHmacKeyRequest + 78, // 114: google.storage.v2.Storage.DeleteBucket:output_type -> google.protobuf.Empty + 39, // 115: google.storage.v2.Storage.GetBucket:output_type -> google.storage.v2.Bucket + 39, // 116: google.storage.v2.Storage.CreateBucket:output_type -> google.storage.v2.Bucket + 5, // 117: google.storage.v2.Storage.ListBuckets:output_type -> google.storage.v2.ListBucketsResponse + 39, // 118: google.storage.v2.Storage.LockBucketRetentionPolicy:output_type -> google.storage.v2.Bucket + 79, // 119: google.storage.v2.Storage.GetIamPolicy:output_type -> google.iam.v1.Policy + 79, // 120: google.storage.v2.Storage.SetIamPolicy:output_type -> google.iam.v1.Policy + 80, // 121: google.storage.v2.Storage.TestIamPermissions:output_type -> google.iam.v1.TestIamPermissionsResponse + 39, // 122: google.storage.v2.Storage.UpdateBucket:output_type -> google.storage.v2.Bucket + 78, // 123: google.storage.v2.Storage.DeleteNotification:output_type -> google.protobuf.Empty + 44, // 124: google.storage.v2.Storage.GetNotification:output_type -> google.storage.v2.Notification + 44, // 125: google.storage.v2.Storage.CreateNotification:output_type -> google.storage.v2.Notification + 12, // 126: google.storage.v2.Storage.ListNotifications:output_type -> google.storage.v2.ListNotificationsResponse + 46, // 127: google.storage.v2.Storage.ComposeObject:output_type -> google.storage.v2.Object + 78, // 128: google.storage.v2.Storage.DeleteObject:output_type -> google.protobuf.Empty + 46, // 129: google.storage.v2.Storage.GetObject:output_type -> google.storage.v2.Object + 17, // 130: google.storage.v2.Storage.ReadObject:output_type -> google.storage.v2.ReadObjectResponse + 46, // 131: google.storage.v2.Storage.UpdateObject:output_type -> google.storage.v2.Object + 20, // 132: google.storage.v2.Storage.WriteObject:output_type -> google.storage.v2.WriteObjectResponse + 48, // 133: google.storage.v2.Storage.ListObjects:output_type -> google.storage.v2.ListObjectsResponse + 25, // 134: google.storage.v2.Storage.RewriteObject:output_type -> google.storage.v2.RewriteResponse + 27, // 135: google.storage.v2.Storage.StartResumableWrite:output_type -> google.storage.v2.StartResumableWriteResponse + 23, // 136: google.storage.v2.Storage.QueryWriteStatus:output_type -> google.storage.v2.QueryWriteStatusResponse + 50, // 137: google.storage.v2.Storage.GetServiceAccount:output_type -> google.storage.v2.ServiceAccount + 31, // 138: google.storage.v2.Storage.CreateHmacKey:output_type -> google.storage.v2.CreateHmacKeyResponse + 78, // 139: google.storage.v2.Storage.DeleteHmacKey:output_type -> google.protobuf.Empty + 43, // 140: google.storage.v2.Storage.GetHmacKey:output_type -> google.storage.v2.HmacKeyMetadata + 35, // 141: google.storage.v2.Storage.ListHmacKeys:output_type -> google.storage.v2.ListHmacKeysResponse + 43, // 142: google.storage.v2.Storage.UpdateHmacKey:output_type -> google.storage.v2.HmacKeyMetadata + 114, // [114:143] is the sub-list for method output_type + 85, // [85:114] is the sub-list for method input_type + 85, // [85:85] is the sub-list for extension type_name + 85, // [85:85] is the sub-list for extension extendee + 0, // [0:85] is the sub-list for field type_name } func init() { file_google_storage_v2_storage_proto_init() } @@ -8779,18 +8388,6 @@ func file_google_storage_v2_storage_proto_init() { } } file_google_storage_v2_storage_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommonRequestParams); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_storage_v2_storage_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServiceConstants); i { case 0: return &v.state @@ -8802,7 +8399,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Bucket); i { case 0: return &v.state @@ -8814,7 +8411,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BucketAccessControl); i { case 0: return &v.state @@ -8826,7 +8423,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ChecksummedData); i { case 0: return &v.state @@ -8838,7 +8435,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ObjectChecksums); i { case 0: return &v.state @@ -8850,7 +8447,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HmacKeyMetadata); i { case 0: return &v.state @@ -8862,7 +8459,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Notification); i { case 0: return &v.state @@ -8874,7 +8471,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CustomerEncryption); i { case 0: return &v.state @@ -8886,7 +8483,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Object); i { case 0: return &v.state @@ -8898,7 +8495,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ObjectAccessControl); i { case 0: return &v.state @@ -8910,7 +8507,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListObjectsResponse); i { case 0: return &v.state @@ -8922,7 +8519,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectTeam); i { case 0: return &v.state @@ -8934,7 +8531,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServiceAccount); i { case 0: return &v.state @@ -8946,7 +8543,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Owner); i { case 0: return &v.state @@ -8958,7 +8555,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ContentRange); i { case 0: return &v.state @@ -8970,7 +8567,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ComposeObjectRequest_SourceObject); i { case 0: return &v.state @@ -8982,7 +8579,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ComposeObjectRequest_SourceObject_ObjectPreconditions); i { case 0: return &v.state @@ -8994,7 +8591,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Bucket_Billing); i { case 0: return &v.state @@ -9006,7 +8603,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Bucket_Cors); i { case 0: return &v.state @@ -9018,7 +8615,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Bucket_Encryption); i { case 0: return &v.state @@ -9030,7 +8627,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Bucket_IamConfig); i { case 0: return &v.state @@ -9042,7 +8639,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Bucket_Lifecycle); i { case 0: return &v.state @@ -9054,7 +8651,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Bucket_Logging); i { case 0: return &v.state @@ -9066,7 +8663,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Bucket_RetentionPolicy); i { case 0: return &v.state @@ -9078,7 +8675,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Bucket_Versioning); i { case 0: return &v.state @@ -9090,7 +8687,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Bucket_Website); i { case 0: return &v.state @@ -9102,7 +8699,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Bucket_Autoclass); i { case 0: return &v.state @@ -9114,7 +8711,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Bucket_IamConfig_UniformBucketLevelAccess); i { case 0: return &v.state @@ -9126,7 +8723,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Bucket_Lifecycle_Rule); i { case 0: return &v.state @@ -9138,7 +8735,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Bucket_Lifecycle_Rule_Action); i { case 0: return &v.state @@ -9150,7 +8747,7 @@ func file_google_storage_v2_storage_proto_init() { return nil } } - file_google_storage_v2_storage_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + file_google_storage_v2_storage_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Bucket_Lifecycle_Rule_Condition); i { case 0: return &v.state @@ -9188,18 +8785,18 @@ func file_google_storage_v2_storage_proto_init() { } file_google_storage_v2_storage_proto_msgTypes[23].OneofWrappers = []interface{}{} file_google_storage_v2_storage_proto_msgTypes[27].OneofWrappers = []interface{}{} + file_google_storage_v2_storage_proto_msgTypes[40].OneofWrappers = []interface{}{} file_google_storage_v2_storage_proto_msgTypes[41].OneofWrappers = []interface{}{} - file_google_storage_v2_storage_proto_msgTypes[42].OneofWrappers = []interface{}{} - file_google_storage_v2_storage_proto_msgTypes[46].OneofWrappers = []interface{}{} - file_google_storage_v2_storage_proto_msgTypes[54].OneofWrappers = []interface{}{} - file_google_storage_v2_storage_proto_msgTypes[69].OneofWrappers = []interface{}{} + file_google_storage_v2_storage_proto_msgTypes[45].OneofWrappers = []interface{}{} + file_google_storage_v2_storage_proto_msgTypes[53].OneofWrappers = []interface{}{} + file_google_storage_v2_storage_proto_msgTypes[68].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_google_storage_v2_storage_proto_rawDesc, NumEnums: 1, - NumMessages: 72, + NumMessages: 71, NumExtensions: 0, NumServices: 1, }, diff --git a/vendor/google.golang.org/grpc/clientconn.go b/vendor/google.golang.org/grpc/clientconn.go index 3ed6eb8e7..ea9836d28 100644 --- a/vendor/google.golang.org/grpc/clientconn.go +++ b/vendor/google.golang.org/grpc/clientconn.go @@ -907,14 +907,10 @@ func (cc *ClientConn) healthCheckConfig() *healthCheckConfig { } func (cc *ClientConn) getTransport(ctx context.Context, failfast bool, method string) (transport.ClientTransport, func(balancer.DoneInfo), error) { - t, done, err := cc.blockingpicker.pick(ctx, failfast, balancer.PickInfo{ + return cc.blockingpicker.pick(ctx, failfast, balancer.PickInfo{ Ctx: ctx, FullMethodName: method, }) - if err != nil { - return nil, nil, toRPCErr(err) - } - return t, done, nil } func (cc *ClientConn) applyServiceConfigAndBalancer(sc *ServiceConfig, configSelector iresolver.ConfigSelector, addrs []resolver.Address) { diff --git a/vendor/google.golang.org/grpc/internal/transport/http2_client.go b/vendor/google.golang.org/grpc/internal/transport/http2_client.go index 38ed3d566..24ca59084 100644 --- a/vendor/google.golang.org/grpc/internal/transport/http2_client.go +++ b/vendor/google.golang.org/grpc/internal/transport/http2_client.go @@ -631,8 +631,8 @@ func (t *http2Client) getCallAuthData(ctx context.Context, audience string, call // the wire. However, there are two notable exceptions: // // 1. If the stream headers violate the max header list size allowed by the -// server. In this case there is no reason to retry at all, as it is -// assumed the RPC would continue to fail on subsequent attempts. +// server. It's possible this could succeed on another transport, even if +// it's unlikely, but do not transparently retry. // 2. If the credentials errored when requesting their headers. In this case, // it's possible a retry can fix the problem, but indefinitely transparently // retrying is not appropriate as it is likely the credentials, if they can @@ -640,8 +640,7 @@ func (t *http2Client) getCallAuthData(ctx context.Context, audience string, call type NewStreamError struct { Err error - DoNotRetry bool - DoNotTransparentRetry bool + AllowTransparentRetry bool } func (e NewStreamError) Error() string { @@ -650,11 +649,11 @@ func (e NewStreamError) Error() string { // NewStream creates a stream and registers it into the transport as "active" // streams. All non-nil errors returned will be *NewStreamError. -func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (_ *Stream, err error) { +func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*Stream, error) { ctx = peer.NewContext(ctx, t.getPeer()) headerFields, err := t.createHeaderFields(ctx, callHdr) if err != nil { - return nil, &NewStreamError{Err: err, DoNotTransparentRetry: true} + return nil, &NewStreamError{Err: err, AllowTransparentRetry: false} } s := t.newStream(ctx, callHdr) cleanup := func(err error) { @@ -754,13 +753,14 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (_ *Strea return true }, hdr) if err != nil { - return nil, &NewStreamError{Err: err} + // Connection closed. + return nil, &NewStreamError{Err: err, AllowTransparentRetry: true} } if success { break } if hdrListSizeErr != nil { - return nil, &NewStreamError{Err: hdrListSizeErr, DoNotRetry: true} + return nil, &NewStreamError{Err: hdrListSizeErr} } firstTry = false select { @@ -768,9 +768,9 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (_ *Strea case <-ctx.Done(): return nil, &NewStreamError{Err: ContextErr(ctx.Err())} case <-t.goAway: - return nil, &NewStreamError{Err: errStreamDrain} + return nil, &NewStreamError{Err: errStreamDrain, AllowTransparentRetry: true} case <-t.ctx.Done(): - return nil, &NewStreamError{Err: ErrConnClosing} + return nil, &NewStreamError{Err: ErrConnClosing, AllowTransparentRetry: true} } } if t.statsHandler != nil { diff --git a/vendor/google.golang.org/grpc/picker_wrapper.go b/vendor/google.golang.org/grpc/picker_wrapper.go index e8367cb89..843633c91 100644 --- a/vendor/google.golang.org/grpc/picker_wrapper.go +++ b/vendor/google.golang.org/grpc/picker_wrapper.go @@ -131,7 +131,7 @@ func (pw *pickerWrapper) pick(ctx context.Context, failfast bool, info balancer. } if _, ok := status.FromError(err); ok { // Status error: end the RPC unconditionally with this status. - return nil, nil, err + return nil, nil, dropError{error: err} } // For all other errors, wait for ready RPCs should block and other // RPCs should fail with unavailable. @@ -175,3 +175,9 @@ func (pw *pickerWrapper) close() { pw.done = true close(pw.blockingCh) } + +// dropError is a wrapper error that indicates the LB policy wishes to drop the +// RPC and not retry it. +type dropError struct { + error +} diff --git a/vendor/google.golang.org/grpc/stream.go b/vendor/google.golang.org/grpc/stream.go index e0b30b46f..be5140535 100644 --- a/vendor/google.golang.org/grpc/stream.go +++ b/vendor/google.golang.org/grpc/stream.go @@ -303,14 +303,28 @@ func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *Client } cs.binlog = binarylog.GetMethodLogger(method) - if err := cs.newAttemptLocked(false /* isTransparent */); err != nil { + cs.attempt, err = cs.newAttemptLocked(false /* isTransparent */) + if err != nil { cs.finish(err) return nil, err } - op := func(a *csAttempt) error { return a.newStream() } + // Pick the transport to use and create a new stream on the transport. + // Assign cs.attempt upon success. + op := func(a *csAttempt) error { + if err := a.getTransport(); err != nil { + return err + } + if err := a.newStream(); err != nil { + return err + } + // Because this operation is always called either here (while creating + // the clientStream) or by the retry code while locked when replaying + // the operation, it is safe to access cs.attempt directly. + cs.attempt = a + return nil + } if err := cs.withRetry(op, func() { cs.bufferForRetryLocked(0, op) }); err != nil { - cs.finish(err) return nil, err } @@ -349,9 +363,15 @@ func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *Client return cs, nil } -// newAttemptLocked creates a new attempt with a transport. -// If it succeeds, then it replaces clientStream's attempt with this new attempt. -func (cs *clientStream) newAttemptLocked(isTransparent bool) (retErr error) { +// newAttemptLocked creates a new csAttempt without a transport or stream. +func (cs *clientStream) newAttemptLocked(isTransparent bool) (*csAttempt, error) { + if err := cs.ctx.Err(); err != nil { + return nil, toRPCErr(err) + } + if err := cs.cc.ctx.Err(); err != nil { + return nil, ErrClientConnClosing + } + ctx := newContextWithRPCInfo(cs.ctx, cs.callInfo.failFast, cs.callInfo.codec, cs.cp, cs.comp) method := cs.callHdr.Method sh := cs.cc.dopts.copts.StatsHandler @@ -385,27 +405,6 @@ func (cs *clientStream) newAttemptLocked(isTransparent bool) (retErr error) { ctx = trace.NewContext(ctx, trInfo.tr) } - newAttempt := &csAttempt{ - ctx: ctx, - beginTime: beginTime, - cs: cs, - dc: cs.cc.dopts.dc, - statsHandler: sh, - trInfo: trInfo, - } - defer func() { - if retErr != nil { - // This attempt is not set in the clientStream, so it's finish won't - // be called. Call it here for stats and trace in case they are not - // nil. - newAttempt.finish(retErr) - } - }() - - if err := ctx.Err(); err != nil { - return toRPCErr(err) - } - if cs.cc.parsedTarget.Scheme == "xds" { // Add extra metadata (metadata that will be added by transport) to context // so the balancer can see them. @@ -413,16 +412,32 @@ func (cs *clientStream) newAttemptLocked(isTransparent bool) (retErr error) { "content-type", grpcutil.ContentType(cs.callHdr.ContentSubtype), )) } - t, done, err := cs.cc.getTransport(ctx, cs.callInfo.failFast, cs.callHdr.Method) + + return &csAttempt{ + ctx: ctx, + beginTime: beginTime, + cs: cs, + dc: cs.cc.dopts.dc, + statsHandler: sh, + trInfo: trInfo, + }, nil +} + +func (a *csAttempt) getTransport() error { + cs := a.cs + + var err error + a.t, a.done, err = cs.cc.getTransport(a.ctx, cs.callInfo.failFast, cs.callHdr.Method) if err != nil { + if de, ok := err.(dropError); ok { + err = de.error + a.drop = true + } return err } - if trInfo != nil { - trInfo.firstLine.SetRemoteAddr(t.RemoteAddr()) + if a.trInfo != nil { + a.trInfo.firstLine.SetRemoteAddr(a.t.RemoteAddr()) } - newAttempt.t = t - newAttempt.done = done - cs.attempt = newAttempt return nil } @@ -431,12 +446,21 @@ func (a *csAttempt) newStream() error { cs.callHdr.PreviousAttempts = cs.numRetries s, err := a.t.NewStream(a.ctx, cs.callHdr) if err != nil { - // Return without converting to an RPC error so retry code can - // inspect. - return err + nse, ok := err.(*transport.NewStreamError) + if !ok { + // Unexpected. + return err + } + + if nse.AllowTransparentRetry { + a.allowTransparentRetry = true + } + + // Unwrap and convert error. + return toRPCErr(nse.Err) } - cs.attempt.s = s - cs.attempt.p = &parser{r: s} + a.s = s + a.p = &parser{r: s} return nil } @@ -514,6 +538,11 @@ type csAttempt struct { statsHandler stats.Handler beginTime time.Time + + // set for newStream errors that may be transparently retried + allowTransparentRetry bool + // set for pick errors that are returned as a status + drop bool } func (cs *clientStream) commitAttemptLocked() { @@ -533,41 +562,21 @@ func (cs *clientStream) commitAttempt() { // shouldRetry returns nil if the RPC should be retried; otherwise it returns // the error that should be returned by the operation. If the RPC should be // retried, the bool indicates whether it is being retried transparently. -func (cs *clientStream) shouldRetry(err error) (bool, error) { - if cs.attempt.s == nil { - // Error from NewClientStream. - nse, ok := err.(*transport.NewStreamError) - if !ok { - // Unexpected, but assume no I/O was performed and the RPC is not - // fatal, so retry indefinitely. - return true, nil - } +func (a *csAttempt) shouldRetry(err error) (bool, error) { + cs := a.cs - // Unwrap and convert error. - err = toRPCErr(nse.Err) - - // Never retry DoNotRetry errors, which indicate the RPC should not be - // retried due to max header list size violation, etc. - if nse.DoNotRetry { - return false, err - } - - // In the event of a non-IO operation error from NewStream, we never - // attempted to write anything to the wire, so we can retry - // indefinitely. - if !nse.DoNotTransparentRetry { - return true, nil - } - } - if cs.finished || cs.committed { - // RPC is finished or committed; cannot retry. + if cs.finished || cs.committed || a.drop { + // RPC is finished or committed or was dropped by the picker; cannot retry. return false, err } + if a.s == nil && a.allowTransparentRetry { + return true, nil + } // Wait for the trailers. unprocessed := false - if cs.attempt.s != nil { - <-cs.attempt.s.Done() - unprocessed = cs.attempt.s.Unprocessed() + if a.s != nil { + <-a.s.Done() + unprocessed = a.s.Unprocessed() } if cs.firstAttempt && unprocessed { // First attempt, stream unprocessed: transparently retry. @@ -579,14 +588,14 @@ func (cs *clientStream) shouldRetry(err error) (bool, error) { pushback := 0 hasPushback := false - if cs.attempt.s != nil { - if !cs.attempt.s.TrailersOnly() { + if a.s != nil { + if !a.s.TrailersOnly() { return false, err } // TODO(retry): Move down if the spec changes to not check server pushback // before considering this a failure for throttling. - sps := cs.attempt.s.Trailer()["grpc-retry-pushback-ms"] + sps := a.s.Trailer()["grpc-retry-pushback-ms"] if len(sps) == 1 { var e error if pushback, e = strconv.Atoi(sps[0]); e != nil || pushback < 0 { @@ -603,10 +612,10 @@ func (cs *clientStream) shouldRetry(err error) (bool, error) { } var code codes.Code - if cs.attempt.s != nil { - code = cs.attempt.s.Status().Code() + if a.s != nil { + code = a.s.Status().Code() } else { - code = status.Convert(err).Code() + code = status.Code(err) } rp := cs.methodConfig.RetryPolicy @@ -651,19 +660,24 @@ func (cs *clientStream) shouldRetry(err error) (bool, error) { } // Returns nil if a retry was performed and succeeded; error otherwise. -func (cs *clientStream) retryLocked(lastErr error) error { +func (cs *clientStream) retryLocked(attempt *csAttempt, lastErr error) error { for { - cs.attempt.finish(toRPCErr(lastErr)) - isTransparent, err := cs.shouldRetry(lastErr) + attempt.finish(toRPCErr(lastErr)) + isTransparent, err := attempt.shouldRetry(lastErr) if err != nil { cs.commitAttemptLocked() return err } cs.firstAttempt = false - if err := cs.newAttemptLocked(isTransparent); err != nil { + attempt, err = cs.newAttemptLocked(isTransparent) + if err != nil { + // Only returns error if the clientconn is closed or the context of + // the stream is canceled. return err } - if lastErr = cs.replayBufferLocked(); lastErr == nil { + // Note that the first op in the replay buffer always sets cs.attempt + // if it is able to pick a transport and create a stream. + if lastErr = cs.replayBufferLocked(attempt); lastErr == nil { return nil } } @@ -673,7 +687,10 @@ func (cs *clientStream) Context() context.Context { cs.commitAttempt() // No need to lock before using attempt, since we know it is committed and // cannot change. - return cs.attempt.s.Context() + if cs.attempt.s != nil { + return cs.attempt.s.Context() + } + return cs.ctx } func (cs *clientStream) withRetry(op func(a *csAttempt) error, onSuccess func()) error { @@ -703,7 +720,7 @@ func (cs *clientStream) withRetry(op func(a *csAttempt) error, onSuccess func()) cs.mu.Unlock() return err } - if err := cs.retryLocked(err); err != nil { + if err := cs.retryLocked(a, err); err != nil { cs.mu.Unlock() return err } @@ -734,7 +751,7 @@ func (cs *clientStream) Header() (metadata.MD, error) { cs.binlog.Log(logEntry) cs.serverHeaderBinlogged = true } - return m, err + return m, nil } func (cs *clientStream) Trailer() metadata.MD { @@ -752,10 +769,9 @@ func (cs *clientStream) Trailer() metadata.MD { return cs.attempt.s.Trailer() } -func (cs *clientStream) replayBufferLocked() error { - a := cs.attempt +func (cs *clientStream) replayBufferLocked(attempt *csAttempt) error { for _, f := range cs.buffer { - if err := f(a); err != nil { + if err := f(attempt); err != nil { return err } } @@ -803,22 +819,17 @@ func (cs *clientStream) SendMsg(m interface{}) (err error) { if len(payload) > *cs.callInfo.maxSendMessageSize { return status.Errorf(codes.ResourceExhausted, "trying to send message larger than max (%d vs. %d)", len(payload), *cs.callInfo.maxSendMessageSize) } - msgBytes := data // Store the pointer before setting to nil. For binary logging. op := func(a *csAttempt) error { - err := a.sendMsg(m, hdr, payload, data) - // nil out the message and uncomp when replaying; they are only needed for - // stats which is disabled for subsequent attempts. - m, data = nil, nil - return err + return a.sendMsg(m, hdr, payload, data) } err = cs.withRetry(op, func() { cs.bufferForRetryLocked(len(hdr)+len(payload), op) }) if cs.binlog != nil && err == nil { cs.binlog.Log(&binarylog.ClientMessage{ OnClientSide: true, - Message: msgBytes, + Message: data, }) } - return + return err } func (cs *clientStream) RecvMsg(m interface{}) error { diff --git a/vendor/google.golang.org/grpc/version.go b/vendor/google.golang.org/grpc/version.go index 6af76dfe7..f17192e6a 100644 --- a/vendor/google.golang.org/grpc/version.go +++ b/vendor/google.golang.org/grpc/version.go @@ -19,4 +19,4 @@ package grpc // Version is the current grpc version. -const Version = "1.46.0" +const Version = "1.46.2" diff --git a/vendor/modules.txt b/vendor/modules.txt index 4a650cce4..9c5864752 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -11,7 +11,7 @@ cloud.google.com/go/compute/metadata # cloud.google.com/go/iam v0.3.0 ## explicit; go 1.15 cloud.google.com/go/iam -# cloud.google.com/go/storage v1.22.0 +# cloud.google.com/go/storage v1.22.1 ## explicit; go 1.15 cloud.google.com/go/storage cloud.google.com/go/storage/internal @@ -34,7 +34,10 @@ github.com/VictoriaMetrics/metricsql/binaryop # github.com/VividCortex/ewma v1.2.0 ## explicit; go 1.12 github.com/VividCortex/ewma -# github.com/aws/aws-sdk-go v1.44.9 +# github.com/antzucaro/matchr v0.0.0-20210222213004-b04723ef80f0 +## explicit; go 1.13 +github.com/antzucaro/matchr +# github.com/aws/aws-sdk-go v1.44.18 ## explicit; go 1.11 github.com/aws/aws-sdk-go/aws github.com/aws/aws-sdk-go/aws/arn @@ -107,7 +110,7 @@ github.com/fatih/color ## explicit; go 1.17 github.com/go-kit/kit/log github.com/go-kit/kit/log/level -# github.com/go-kit/log v0.2.0 +# github.com/go-kit/log v0.2.1 ## explicit; go 1.17 github.com/go-kit/log github.com/go-kit/log/level @@ -135,11 +138,15 @@ github.com/google/go-cmp/cmp/internal/diff github.com/google/go-cmp/cmp/internal/flags github.com/google/go-cmp/cmp/internal/function github.com/google/go-cmp/cmp/internal/value -# github.com/googleapis/gax-go/v2 v2.3.0 +# github.com/google/uuid v1.3.0 +## explicit +github.com/google/uuid +# github.com/googleapis/gax-go/v2 v2.4.0 ## explicit; go 1.15 github.com/googleapis/gax-go/v2 github.com/googleapis/gax-go/v2/apierror github.com/googleapis/gax-go/v2/apierror/internal/proto +github.com/googleapis/gax-go/v2/internal # github.com/googleapis/go-type-adapters v1.0.0 ## explicit; go 1.11 github.com/googleapis/go-type-adapters/adapters @@ -151,7 +158,7 @@ github.com/influxdata/influxdb/pkg/escape # github.com/jmespath/go-jmespath v0.4.0 ## explicit; go 1.14 github.com/jmespath/go-jmespath -# github.com/klauspost/compress v1.15.3 +# github.com/klauspost/compress v1.15.4 ## explicit; go 1.16 github.com/klauspost/compress github.com/klauspost/compress/flate @@ -181,7 +188,7 @@ github.com/oklog/ulid # github.com/pkg/errors v0.9.1 ## explicit github.com/pkg/errors -# github.com/prometheus/client_golang v1.12.1 +# github.com/prometheus/client_golang v1.12.2 ## explicit; go 1.13 github.com/prometheus/client_golang/prometheus github.com/prometheus/client_golang/prometheus/internal @@ -221,7 +228,7 @@ github.com/rivo/uniseg # github.com/russross/blackfriday/v2 v2.1.0 ## explicit github.com/russross/blackfriday/v2 -# github.com/urfave/cli/v2 v2.6.0 +# github.com/urfave/cli/v2 v2.7.1 ## explicit; go 1.18 github.com/urfave/cli/v2 # github.com/valyala/bytebufferpool v1.0.0 @@ -270,7 +277,7 @@ go.opencensus.io/trace/tracestate go.uber.org/atomic # go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 ## explicit; go 1.13 -# golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 +# golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 ## explicit; go 1.17 golang.org/x/net/context golang.org/x/net/context/ctxhttp @@ -292,10 +299,10 @@ golang.org/x/oauth2/google/internal/externalaccount golang.org/x/oauth2/internal golang.org/x/oauth2/jws golang.org/x/oauth2/jwt -# golang.org/x/sync v0.0.0-20210220032951-036812b2e83c +# golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 ## explicit golang.org/x/sync/errgroup -# golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6 +# golang.org/x/sys v0.0.0-20220519141025-dcacdad47464 ## explicit; go 1.17 golang.org/x/sys/internal/unsafeheader golang.org/x/sys/unix @@ -306,11 +313,11 @@ golang.org/x/text/secure/bidirule golang.org/x/text/transform golang.org/x/text/unicode/bidi golang.org/x/text/unicode/norm -# golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f -## explicit; go 1.11 +# golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df +## explicit; go 1.17 golang.org/x/xerrors golang.org/x/xerrors/internal -# google.golang.org/api v0.78.0 +# google.golang.org/api v0.80.0 ## explicit; go 1.15 google.golang.org/api/googleapi google.golang.org/api/googleapi/transport @@ -343,7 +350,7 @@ google.golang.org/appengine/internal/socket google.golang.org/appengine/internal/urlfetch google.golang.org/appengine/socket google.golang.org/appengine/urlfetch -# google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3 +# google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd ## explicit; go 1.15 google.golang.org/genproto/googleapis/api/annotations google.golang.org/genproto/googleapis/iam/v1 @@ -358,7 +365,7 @@ google.golang.org/genproto/googleapis/type/decimal google.golang.org/genproto/googleapis/type/expr google.golang.org/genproto/googleapis/type/fraction google.golang.org/genproto/googleapis/type/month -# google.golang.org/grpc v1.46.0 +# google.golang.org/grpc v1.46.2 ## explicit; go 1.14 google.golang.org/grpc google.golang.org/grpc/attributes