From ba53c0ad05f2d03d6c511129cb3fd4067674f21d Mon Sep 17 00:00:00 2001 From: Ed Schouten Date: Sun, 8 Oct 2023 13:10:49 +0200 Subject: [PATCH] Remove deprecated storage backends Ever since we published ADR #2 which introduced LocalBlobAccess, ShardingBlobAccess and MirroredBlobAccess, the writing has been on the wall that there would no longer be any place for backends such as Redis and SizeDistinguishing. The main reason I kept these two backends around, was because people in the community were still interested in seeing S3 support reappear. Because I have not received any serious proposal from members within the community to do this in a way that it meets the standards for inclusion, I think we've now reached the point where we can assume no work is going to happen in this area in the short term. Fixes: #175 Issue: #176 --- README.md | 9 +- internal/mock/BUILD.bazel | 10 - pkg/blobstore/BUILD.bazel | 5 - pkg/blobstore/configuration/BUILD.bazel | 2 - .../configuration/new_blob_access.go | 124 - pkg/blobstore/redis_blob_access.go | 145 -- pkg/blobstore/redis_blob_access_test.go | 46 - .../size_distinguishing_blob_access.go | 100 - pkg/proto/configuration/blobstore/BUILD.bazel | 2 - .../configuration/blobstore/blobstore.pb.go | 2183 +++++++---------- .../configuration/blobstore/blobstore.proto | 105 +- 11 files changed, 847 insertions(+), 1884 deletions(-) delete mode 100644 pkg/blobstore/redis_blob_access.go delete mode 100644 pkg/blobstore/redis_blob_access_test.go delete mode 100644 pkg/blobstore/size_distinguishing_blob_access.go diff --git a/README.md b/README.md index 06920d3b..fce81bf9 100644 --- a/README.md +++ b/README.md @@ -17,10 +17,11 @@ does, however, facilitate remote execution by allowing execution requests to be forwarded to a separate remote execution service. This storage daemon can be configured to use a whole series of backends. -Examples include networked systems like Redis, but also a local on-disk -storage backend that writes data to a large file, using a hash table as -an index. This storage backend is self-cleaning; no garbage collection -is needed. The [schema of the storage configuration file](https://github.com/buildbarn/bb-storage/blob/master/pkg/proto/configuration/blobstore/blobstore.proto) +Examples include a backend that forwards traffic over gRPC, but also a +local on-disk storage backend that writes data to a large file, using a +hash table as an index. This storage backend is self-cleaning; no +garbage collection is needed. The +[schema of the storage configuration file](https://github.com/buildbarn/bb-storage/blob/master/pkg/proto/configuration/blobstore/blobstore.proto) gives a good overview of which storage backends are available and how they can be configured. diff --git a/internal/mock/BUILD.bazel b/internal/mock/BUILD.bazel index 286d013e..94d35e50 100644 --- a/internal/mock/BUILD.bazel +++ b/internal/mock/BUILD.bazel @@ -248,14 +248,6 @@ gomock( package = "mock", ) -gomock( - name = "redis", - out = "redis.go", - interfaces = ["RedisClient"], - library = "//pkg/blobstore", - package = "mock", -) - gomock( name = "remoteexecution", out = "remoteexecution.go", @@ -316,7 +308,6 @@ go_library( "http.go", "jwt.go", "random.go", - "redis.go", "remoteexecution.go", "trace.go", "util.go", @@ -342,7 +333,6 @@ go_library( "//pkg/util", "@com_github_aws_aws_sdk_go_v2_service_s3//:s3", "@com_github_bazelbuild_remote_apis//build/bazel/remote/execution/v2:execution", - "@com_github_go_redis_redis_v8//:redis", "@com_github_golang_mock//gomock", "@com_github_google_uuid//:uuid", "@com_google_cloud_go_longrunning//autogen/longrunningpb", diff --git a/pkg/blobstore/BUILD.bazel b/pkg/blobstore/BUILD.bazel index de205475..60fef555 100644 --- a/pkg/blobstore/BUILD.bazel +++ b/pkg/blobstore/BUILD.bazel @@ -21,9 +21,7 @@ go_library( "metrics_blob_access.go", "read_buffer_factory.go", "read_canarying_blob_access.go", - "redis_blob_access.go", "reference_expanding_blob_access.go", - "size_distinguishing_blob_access.go", "validation_caching_read_buffer_factory.go", "zip_reading_blob_access.go", "zip_writing_blob_access.go", @@ -47,7 +45,6 @@ go_library( "@com_github_aws_aws_sdk_go_v2//aws", "@com_github_aws_aws_sdk_go_v2_service_s3//:s3", "@com_github_bazelbuild_remote_apis//build/bazel/remote/execution/v2:execution", - "@com_github_go_redis_redis_v8//:redis", "@com_github_klauspost_compress//zstd", "@com_github_prometheus_client_golang//prometheus", "@org_golang_google_grpc//codes", @@ -55,7 +52,6 @@ go_library( "@org_golang_google_protobuf//encoding/protowire", "@org_golang_google_protobuf//proto", "@org_golang_google_protobuf//types/known/timestamppb", - "@org_golang_x_sync//errgroup", ], ) @@ -70,7 +66,6 @@ go_test( "existence_caching_blob_access_test.go", "hierarchical_instance_names_blob_access_test.go", "read_canarying_blob_access_test.go", - "redis_blob_access_test.go", "reference_expanding_blob_access_test.go", "validation_caching_read_buffer_factory_test.go", "zip_reading_blob_access_test.go", diff --git a/pkg/blobstore/configuration/BUILD.bazel b/pkg/blobstore/configuration/BUILD.bazel index 5f46e19e..74954ee4 100644 --- a/pkg/blobstore/configuration/BUILD.bazel +++ b/pkg/blobstore/configuration/BUILD.bazel @@ -47,8 +47,6 @@ go_library( "@com_github_aws_aws_sdk_go_v2_service_s3//:s3", "@com_github_bazelbuild_remote_apis//build/bazel/remote/execution/v2:execution", "@com_github_fxtlabs_primes//:primes", - "@com_github_go_redis_redis_extra_redisotel//:redisotel", - "@com_github_go_redis_redis_v8//:redis", "@com_github_google_uuid//:uuid", "@com_google_cloud_go_storage//:storage", "@org_golang_google_grpc//codes", diff --git a/pkg/blobstore/configuration/new_blob_access.go b/pkg/blobstore/configuration/new_blob_access.go index d3befa9d..56b9431b 100644 --- a/pkg/blobstore/configuration/new_blob_access.go +++ b/pkg/blobstore/configuration/new_blob_access.go @@ -27,8 +27,6 @@ import ( "github.com/buildbarn/bb-storage/pkg/random" "github.com/buildbarn/bb-storage/pkg/util" "github.com/fxtlabs/primes" - "github.com/go-redis/redis/extra/redisotel" - "github.com/go-redis/redis/v8" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -42,12 +40,6 @@ type BlobAccessInfo struct { DigestKeyFormat digest.KeyFormat } -func newRedisClient(opt *redis.Options) *redis.Client { - client := redis.NewClient(opt) - client.AddHook(redisotel.TracingHook{}) - return client -} - func newCachedReadBufferFactory(cacheConfiguration *digest_pb.ExistenceCacheConfiguration, baseReadBufferFactory blobstore.ReadBufferFactory, digestKeyFormat digest.KeyFormat) (blobstore.ReadBufferFactory, error) { if cacheConfiguration == nil { // No caching enabled. @@ -93,109 +85,6 @@ func (nc *simpleNestedBlobAccessCreator) newNestedBlobAccessBare(configuration * BlobAccess: readcaching.NewReadCachingBlobAccess(slow.BlobAccess, fast.BlobAccess, replicator), DigestKeyFormat: slow.DigestKeyFormat, }, "read_caching", nil - case *pb.BlobAccessConfiguration_Redis: - tlsConfig, err := util.NewTLSConfigFromClientConfiguration(backend.Redis.Tls) - if err != nil { - return BlobAccessInfo{}, "", util.StatusWrap(err, "Failed to obtain TLS configuration") - } - - var replicationTimeout time.Duration - if backend.Redis.ReplicationTimeout != nil { - if err := backend.Redis.ReplicationTimeout.CheckValid(); err != nil { - return BlobAccessInfo{}, "", util.StatusWrap(err, "Failed to obtain replication timeout") - } - replicationTimeout = backend.Redis.ReplicationTimeout.AsDuration() - } - - var dialTimeout time.Duration - if backend.Redis.DialTimeout != nil { - if err := backend.Redis.DialTimeout.CheckValid(); err != nil { - return BlobAccessInfo{}, "", util.StatusWrap(err, "Failed to obtain dial timeout configuration") - } - dialTimeout = backend.Redis.DialTimeout.AsDuration() - } - - var readTimeout time.Duration - if backend.Redis.ReadTimeout != nil { - if err := backend.Redis.ReadTimeout.CheckValid(); err != nil { - return BlobAccessInfo{}, "", util.StatusWrap(err, "Failed to obtain read timeout configuration") - } - readTimeout = backend.Redis.ReadTimeout.AsDuration() - } - - var writeTimeout time.Duration - if backend.Redis.WriteTimeout != nil { - if err := backend.Redis.WriteTimeout.CheckValid(); err != nil { - return BlobAccessInfo{}, "", util.StatusWrap(err, "Failed to obtain write timeout configuration") - } - writeTimeout = backend.Redis.WriteTimeout.AsDuration() - } - - var redisClient blobstore.RedisClient - switch mode := backend.Redis.Mode.(type) { - case *pb.RedisBlobAccessConfiguration_Clustered: - // Gather retry configuration (min/max delay and overall retry attempts) - minRetryDur := time.Millisecond * 32 - if mode.Clustered.MinimumRetryBackoff != nil { - if err := mode.Clustered.MinimumRetryBackoff.CheckValid(); err != nil { - return BlobAccessInfo{}, "", util.StatusWrap(err, "Failed to obtain minimum retry back off configuration") - } - minRetryDur = mode.Clustered.MinimumRetryBackoff.AsDuration() - } - - maxRetryDur := time.Millisecond * 2048 - if mode.Clustered.MaximumRetryBackoff != nil { - if err := mode.Clustered.MaximumRetryBackoff.CheckValid(); err != nil { - return BlobAccessInfo{}, "", util.StatusWrap(err, "Failed to obtain maximum retry back off") - } - maxRetryDur = mode.Clustered.MaximumRetryBackoff.AsDuration() - } - - maxRetries := 16 // Default will be 16 - if mode.Clustered.MaximumRetries != 0 { - maxRetries = int(mode.Clustered.MaximumRetries) - } - - redisClient = redis.NewClusterClient( - &redis.ClusterOptions{ - Addrs: mode.Clustered.Endpoints, - TLSConfig: tlsConfig, - ReadOnly: true, - MaxRetries: maxRetries, - MinRetryBackoff: minRetryDur, - MaxRetryBackoff: maxRetryDur, - DialTimeout: dialTimeout, - ReadTimeout: readTimeout, - WriteTimeout: writeTimeout, - NewClient: newRedisClient, - }) - - case *pb.RedisBlobAccessConfiguration_Single: - redisClient = newRedisClient( - &redis.Options{ - Addr: mode.Single.Endpoint, - Password: mode.Single.Password, - DB: int(mode.Single.Db), - TLSConfig: tlsConfig, - DialTimeout: dialTimeout, - ReadTimeout: readTimeout, - WriteTimeout: writeTimeout, - }) - default: - return BlobAccessInfo{}, "", status.Errorf(codes.InvalidArgument, "Redis configuration must either be clustered or single server") - } - - digestKeyFormat := creator.GetBaseDigestKeyFormat() - return BlobAccessInfo{ - BlobAccess: blobstore.NewRedisBlobAccess( - redisClient, - readBufferFactory, - digestKeyFormat, - backend.Redis.ReplicationCount, - replicationTimeout, - creator.GetDefaultCapabilitiesProvider()), - DigestKeyFormat: digestKeyFormat, - }, "redis", nil case *pb.BlobAccessConfiguration_Http: roundTripper, err := bb_http.NewRoundTripperFromConfiguration(backend.Http.Client) if err != nil { @@ -250,19 +139,6 @@ func (nc *simpleNestedBlobAccessCreator) newNestedBlobAccessBare(configuration * backend.Sharding.HashInitialization), DigestKeyFormat: *combinedDigestKeyFormat, }, "sharding", nil - case *pb.BlobAccessConfiguration_SizeDistinguishing: - small, err := nc.NewNestedBlobAccess(backend.SizeDistinguishing.Small, creator) - if err != nil { - return BlobAccessInfo{}, "", err - } - large, err := nc.NewNestedBlobAccess(backend.SizeDistinguishing.Large, creator) - if err != nil { - return BlobAccessInfo{}, "", err - } - return BlobAccessInfo{ - BlobAccess: blobstore.NewSizeDistinguishingBlobAccess(small.BlobAccess, large.BlobAccess, backend.SizeDistinguishing.CutoffSizeBytes), - DigestKeyFormat: small.DigestKeyFormat.Combine(large.DigestKeyFormat), - }, "size_distinguishing", nil case *pb.BlobAccessConfiguration_Mirrored: backendA, err := nc.NewNestedBlobAccess(backend.Mirrored.BackendA, creator) if err != nil { diff --git a/pkg/blobstore/redis_blob_access.go b/pkg/blobstore/redis_blob_access.go deleted file mode 100644 index 13632d84..00000000 --- a/pkg/blobstore/redis_blob_access.go +++ /dev/null @@ -1,145 +0,0 @@ -package blobstore - -import ( - "context" - "log" - "time" - - "github.com/buildbarn/bb-storage/pkg/blobstore/buffer" - "github.com/buildbarn/bb-storage/pkg/blobstore/slicing" - "github.com/buildbarn/bb-storage/pkg/capabilities" - "github.com/buildbarn/bb-storage/pkg/digest" - "github.com/buildbarn/bb-storage/pkg/util" - "github.com/go-redis/redis/v8" - - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -// RedisClient is an interface that contains the set of functions of the -// Redis library that is used by this package. This permits unit testing -// and uniform switching between clustered and single-node Redis. -type RedisClient interface { - redis.Cmdable - Process(ctx context.Context, cmd redis.Cmder) error -} - -type redisBlobAccess struct { - capabilities.Provider - - redisClient RedisClient - readBufferFactory ReadBufferFactory - digestKeyFormat digest.KeyFormat - replicationCount int64 - replicationTimeout int -} - -// NewRedisBlobAccess creates a BlobAccess that uses Redis as its -// backing store. -func NewRedisBlobAccess(redisClient RedisClient, readBufferFactory ReadBufferFactory, digestKeyFormat digest.KeyFormat, replicationCount int64, replicationTimeout time.Duration, capabilitiesProvider capabilities.Provider) BlobAccess { - return &redisBlobAccess{ - Provider: capabilitiesProvider, - - redisClient: redisClient, - readBufferFactory: readBufferFactory, - digestKeyFormat: digestKeyFormat, - replicationCount: int64(replicationCount), - replicationTimeout: int(replicationTimeout.Milliseconds()), - } -} - -func (ba *redisBlobAccess) Get(ctx context.Context, digest digest.Digest) buffer.Buffer { - if err := util.StatusFromContext(ctx); err != nil { - return buffer.NewBufferFromError(err) - } - key := digest.GetKey(ba.digestKeyFormat) - value, err := ba.redisClient.Get(ctx, key).Bytes() - if err == redis.Nil { - return buffer.NewBufferFromError(util.StatusWrapWithCode(err, codes.NotFound, "Blob not found")) - } else if err != nil { - return buffer.NewBufferFromError(util.StatusWrapWithCode(err, codes.Unavailable, "Failed to get blob")) - } - return ba.readBufferFactory.NewBufferFromByteSlice( - digest, - value, - func(dataIsValid bool) { - if !dataIsValid { - if err := ba.redisClient.Del(ctx, key).Err(); err == nil { - log.Printf("Blob %#v was malformed and has been deleted from Redis successfully", digest.String()) - } else { - log.Printf("Blob %#v was malformed and could not be deleted from Redis: %s", digest.String(), err) - } - } - }) -} - -func (ba *redisBlobAccess) GetFromComposite(ctx context.Context, parentDigest, childDigest digest.Digest, slicer slicing.BlobSlicer) buffer.Buffer { - b, _ := slicer.Slice(ba.Get(ctx, parentDigest), childDigest) - return b -} - -func (ba *redisBlobAccess) Put(ctx context.Context, digest digest.Digest, b buffer.Buffer) error { - if err := util.StatusFromContext(ctx); err != nil { - b.Discard() - return err - } - // Redis can only store values up to 512 MiB in size. - value, err := b.ToByteSlice(512 * 1024 * 1024) - if err != nil { - return util.StatusWrapWithCode(err, codes.Unavailable, "Failed to put blob") - } - if err := ba.redisClient.Set(ctx, digest.GetKey(ba.digestKeyFormat), value, 0).Err(); err != nil { - return util.StatusWrapWithCode(err, codes.Unavailable, "Failed to put blob") - } - return ba.waitIfReplicationEnabled(ctx) -} - -func (ba *redisBlobAccess) waitIfReplicationEnabled(ctx context.Context) error { - if ba.replicationCount == 0 { - return nil - } - var command *redis.IntCmd - if ba.replicationTimeout > 0 { - command = redis.NewIntCmd(ctx, "wait", ba.replicationCount, ba.replicationTimeout) - } else { - command = redis.NewIntCmd(ctx, "wait", ba.replicationCount) - } - ba.redisClient.Process(ctx, command) - replicatedCount, err := command.Result() - if err != nil { - return util.StatusWrapWithCode(err, codes.Internal, "Error replicating blob") - } - if replicatedCount < ba.replicationCount { - return status.Errorf(codes.Internal, "Replication not completed. Requested %d, actual %d", ba.replicationCount, replicatedCount) - } - return nil -} - -func (ba *redisBlobAccess) FindMissing(ctx context.Context, digests digest.Set) (digest.Set, error) { - if err := util.StatusFromContext(ctx); err != nil { - return digest.EmptySet, err - } - if digests.Empty() { - return digest.EmptySet, nil - } - - // Execute "EXISTS" requests all in a single pipeline. - pipeline := ba.redisClient.Pipeline() - cmds := make([]*redis.IntCmd, 0, digests.Length()) - for _, digest := range digests.Items() { - cmds = append(cmds, pipeline.Exists(ctx, digest.GetKey(ba.digestKeyFormat))) - } - if _, err := pipeline.Exec(ctx); err != nil { - return digest.EmptySet, util.StatusWrapWithCode(err, codes.Unavailable, "Failed to find missing blobs") - } - - missing := digest.NewSetBuilder() - i := 0 - for _, digest := range digests.Items() { - if cmds[i].Val() == 0 { - missing.Add(digest) - } - i++ - } - return missing.Build(), nil -} diff --git a/pkg/blobstore/redis_blob_access_test.go b/pkg/blobstore/redis_blob_access_test.go deleted file mode 100644 index 21cce807..00000000 --- a/pkg/blobstore/redis_blob_access_test.go +++ /dev/null @@ -1,46 +0,0 @@ -package blobstore_test - -import ( - "context" - "testing" - - remoteexecution "github.com/bazelbuild/remote-apis/build/bazel/remote/execution/v2" - "github.com/buildbarn/bb-storage/internal/mock" - "github.com/buildbarn/bb-storage/pkg/blobstore" - "github.com/buildbarn/bb-storage/pkg/blobstore/buffer" - "github.com/buildbarn/bb-storage/pkg/digest" - "github.com/buildbarn/bb-storage/pkg/testutil" - "github.com/golang/mock/gomock" - - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -func TestRedisBlobAccessContextCanceled(t *testing.T) { - ctrl, ctx := gomock.WithContext(context.Background(), t) - - redisClient := mock.NewMockRedisClient(ctrl) - capabilitiesProvider := mock.NewMockCapabilitiesProvider(ctrl) - blobAccess := blobstore.NewRedisBlobAccess(redisClient, blobstore.CASReadBufferFactory, digest.KeyWithoutInstance, 0, 0, capabilitiesProvider) - - canceledCtx, cancel := context.WithCancel(ctx) - cancel() - blobDigest := digest.MustNewDigest("example", remoteexecution.DigestFunction_SHA256, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", 0) - - // Calls to Get(), Put() and FindMissing() should not yield - // calls into the Redis client if the context associated with - // the call is canceled. - // - // The go-redis client library is not aware of context handles. - // This means that if these checks were not in place, a larger - // piece of code that calls into Redis multiple times would not - // have any cancelation points. - _, err := blobAccess.Get(canceledCtx, blobDigest).ToByteSlice(100) - testutil.RequireEqualStatus(t, status.Error(codes.Canceled, "context canceled"), err) - - err = blobAccess.Put(canceledCtx, blobDigest, buffer.NewValidatedBufferFromByteSlice(nil)) - testutil.RequireEqualStatus(t, status.Error(codes.Canceled, "context canceled"), err) - - _, err = blobAccess.FindMissing(canceledCtx, digest.EmptySet) - testutil.RequireEqualStatus(t, status.Error(codes.Canceled, "context canceled"), err) -} diff --git a/pkg/blobstore/size_distinguishing_blob_access.go b/pkg/blobstore/size_distinguishing_blob_access.go deleted file mode 100644 index 6d499e55..00000000 --- a/pkg/blobstore/size_distinguishing_blob_access.go +++ /dev/null @@ -1,100 +0,0 @@ -package blobstore - -import ( - "context" - - remoteexecution "github.com/bazelbuild/remote-apis/build/bazel/remote/execution/v2" - "github.com/buildbarn/bb-storage/pkg/blobstore/buffer" - "github.com/buildbarn/bb-storage/pkg/blobstore/slicing" - "github.com/buildbarn/bb-storage/pkg/digest" - "github.com/buildbarn/bb-storage/pkg/util" - - "golang.org/x/sync/errgroup" -) - -type sizeDistinguishingBlobAccess struct { - smallBlobAccess BlobAccess - largeBlobAccess BlobAccess - cutoffSizeBytes int64 -} - -// NewSizeDistinguishingBlobAccess creates a BlobAccess that splits up -// requests between two backends based on the size of the object -// specified in the digest. Backends tend to have different performance -// characteristics based on blob size. This adapter may be used to -// optimize performance based on that. -func NewSizeDistinguishingBlobAccess(smallBlobAccess, largeBlobAccess BlobAccess, cutoffSizeBytes int64) BlobAccess { - return &sizeDistinguishingBlobAccess{ - smallBlobAccess: smallBlobAccess, - largeBlobAccess: largeBlobAccess, - cutoffSizeBytes: cutoffSizeBytes, - } -} - -func (ba *sizeDistinguishingBlobAccess) Get(ctx context.Context, digest digest.Digest) buffer.Buffer { - if digest.GetSizeBytes() <= ba.cutoffSizeBytes { - return ba.smallBlobAccess.Get(ctx, digest) - } - return ba.largeBlobAccess.Get(ctx, digest) -} - -func (ba *sizeDistinguishingBlobAccess) GetFromComposite(ctx context.Context, parentDigest, childDigest digest.Digest, slicer slicing.BlobSlicer) buffer.Buffer { - if parentDigest.GetSizeBytes() <= ba.cutoffSizeBytes { - return ba.smallBlobAccess.GetFromComposite(ctx, parentDigest, childDigest, slicer) - } - return ba.largeBlobAccess.GetFromComposite(ctx, parentDigest, childDigest, slicer) -} - -func (ba *sizeDistinguishingBlobAccess) Put(ctx context.Context, digest digest.Digest, b buffer.Buffer) error { - // Use the size that's in the digest; not the size provided. We - // can't re-obtain that in the other operations. - if digest.GetSizeBytes() <= ba.cutoffSizeBytes { - return ba.smallBlobAccess.Put(ctx, digest, b) - } - return ba.largeBlobAccess.Put(ctx, digest, b) -} - -func (ba *sizeDistinguishingBlobAccess) FindMissing(ctx context.Context, digests digest.Set) (digest.Set, error) { - // Split up digests by size. - smallDigests := digest.NewSetBuilder() - largeDigests := digest.NewSetBuilder() - for _, digest := range digests.Items() { - if digest.GetSizeBytes() <= ba.cutoffSizeBytes { - smallDigests.Add(digest) - } else { - largeDigests.Add(digest) - } - } - - // Forward FindMissing() to both implementations. - group, groupCtx := errgroup.WithContext(ctx) - var smallResults, largeResults digest.Set - group.Go(func() error { - var err error - smallResults, err = ba.smallBlobAccess.FindMissing(groupCtx, smallDigests.Build()) - if err != nil { - return util.StatusWrap(err, "Small backend") - } - return nil - }) - group.Go(func() error { - var err error - largeResults, err = ba.largeBlobAccess.FindMissing(groupCtx, largeDigests.Build()) - if err != nil { - return util.StatusWrap(err, "Large backend") - } - return nil - }) - if err := group.Wait(); err != nil { - return digest.EmptySet, nil - } - - // Recombine results. - return digest.GetUnion([]digest.Set{smallResults, largeResults}), nil -} - -func (ba *sizeDistinguishingBlobAccess) GetCapabilities(ctx context.Context, instanceName digest.InstanceName) (*remoteexecution.ServerCapabilities, error) { - // Assume that the capabilities announced by the small backend - // are also valid for the large backend. - return ba.smallBlobAccess.GetCapabilities(ctx, instanceName) -} diff --git a/pkg/proto/configuration/blobstore/BUILD.bazel b/pkg/proto/configuration/blobstore/BUILD.bazel index cbd198be..ae4b468a 100644 --- a/pkg/proto/configuration/blobstore/BUILD.bazel +++ b/pkg/proto/configuration/blobstore/BUILD.bazel @@ -13,7 +13,6 @@ proto_library( "//pkg/proto/configuration/digest:digest_proto", "//pkg/proto/configuration/grpc:grpc_proto", "//pkg/proto/configuration/http:http_proto", - "//pkg/proto/configuration/tls:tls_proto", "@com_google_protobuf//:duration_proto", "@com_google_protobuf//:empty_proto", "@com_google_protobuf//:timestamp_proto", @@ -33,7 +32,6 @@ go_proto_library( "//pkg/proto/configuration/digest", "//pkg/proto/configuration/grpc", "//pkg/proto/configuration/http", - "//pkg/proto/configuration/tls", "@org_golang_google_genproto_googleapis_rpc//status", ], ) diff --git a/pkg/proto/configuration/blobstore/blobstore.pb.go b/pkg/proto/configuration/blobstore/blobstore.pb.go index f650f65f..50c7ec7a 100644 --- a/pkg/proto/configuration/blobstore/blobstore.pb.go +++ b/pkg/proto/configuration/blobstore/blobstore.pb.go @@ -13,7 +13,6 @@ import ( digest "github.com/buildbarn/bb-storage/pkg/proto/configuration/digest" grpc "github.com/buildbarn/bb-storage/pkg/proto/configuration/grpc" http "github.com/buildbarn/bb-storage/pkg/proto/configuration/http" - tls "github.com/buildbarn/bb-storage/pkg/proto/configuration/tls" status "google.golang.org/genproto/googleapis/rpc/status" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -93,10 +92,8 @@ type BlobAccessConfiguration struct { // Types that are assignable to Backend: // - // *BlobAccessConfiguration_Redis // *BlobAccessConfiguration_Http // *BlobAccessConfiguration_ReadCaching - // *BlobAccessConfiguration_SizeDistinguishing // *BlobAccessConfiguration_Grpc // *BlobAccessConfiguration_Error // *BlobAccessConfiguration_Sharding @@ -156,13 +153,6 @@ func (m *BlobAccessConfiguration) GetBackend() isBlobAccessConfiguration_Backend return nil } -func (x *BlobAccessConfiguration) GetRedis() *RedisBlobAccessConfiguration { - if x, ok := x.GetBackend().(*BlobAccessConfiguration_Redis); ok { - return x.Redis - } - return nil -} - func (x *BlobAccessConfiguration) GetHttp() *HTTPBlobAccessConfiguration { if x, ok := x.GetBackend().(*BlobAccessConfiguration_Http); ok { return x.Http @@ -177,13 +167,6 @@ func (x *BlobAccessConfiguration) GetReadCaching() *ReadCachingBlobAccessConfigu return nil } -func (x *BlobAccessConfiguration) GetSizeDistinguishing() *SizeDistinguishingBlobAccessConfiguration { - if x, ok := x.GetBackend().(*BlobAccessConfiguration_SizeDistinguishing); ok { - return x.SizeDistinguishing - } - return nil -} - func (x *BlobAccessConfiguration) GetGrpc() *grpc.ClientConfiguration { if x, ok := x.GetBackend().(*BlobAccessConfiguration_Grpc); ok { return x.Grpc @@ -307,10 +290,6 @@ type isBlobAccessConfiguration_Backend interface { isBlobAccessConfiguration_Backend() } -type BlobAccessConfiguration_Redis struct { - Redis *RedisBlobAccessConfiguration `protobuf:"bytes,2,opt,name=redis,proto3,oneof"` -} - type BlobAccessConfiguration_Http struct { Http *HTTPBlobAccessConfiguration `protobuf:"bytes,3,opt,name=http,proto3,oneof"` } @@ -319,10 +298,6 @@ type BlobAccessConfiguration_ReadCaching struct { ReadCaching *ReadCachingBlobAccessConfiguration `protobuf:"bytes,4,opt,name=read_caching,json=readCaching,proto3,oneof"` } -type BlobAccessConfiguration_SizeDistinguishing struct { - SizeDistinguishing *SizeDistinguishingBlobAccessConfiguration `protobuf:"bytes,5,opt,name=size_distinguishing,json=sizeDistinguishing,proto3,oneof"` -} - type BlobAccessConfiguration_Grpc struct { Grpc *grpc.ClientConfiguration `protobuf:"bytes,7,opt,name=grpc,proto3,oneof"` } @@ -391,14 +366,10 @@ type BlobAccessConfiguration_Label struct { Label string `protobuf:"bytes,27,opt,name=label,proto3,oneof"` } -func (*BlobAccessConfiguration_Redis) isBlobAccessConfiguration_Backend() {} - func (*BlobAccessConfiguration_Http) isBlobAccessConfiguration_Backend() {} func (*BlobAccessConfiguration_ReadCaching) isBlobAccessConfiguration_Backend() {} -func (*BlobAccessConfiguration_SizeDistinguishing) isBlobAccessConfiguration_Backend() {} - func (*BlobAccessConfiguration_Grpc) isBlobAccessConfiguration_Backend() {} func (*BlobAccessConfiguration_Error) isBlobAccessConfiguration_Backend() {} @@ -496,19 +467,17 @@ func (x *ReadCachingBlobAccessConfiguration) GetReplicator() *BlobReplicatorConf return nil } -type ClusteredRedisBlobAccessConfiguration struct { +type HTTPBlobAccessConfiguration struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Endpoints []string `protobuf:"bytes,1,rep,name=endpoints,proto3" json:"endpoints,omitempty"` - MaximumRetries uint32 `protobuf:"varint,2,opt,name=maximum_retries,json=maximumRetries,proto3" json:"maximum_retries,omitempty"` - MinimumRetryBackoff *durationpb.Duration `protobuf:"bytes,3,opt,name=minimum_retry_backoff,json=minimumRetryBackoff,proto3" json:"minimum_retry_backoff,omitempty"` - MaximumRetryBackoff *durationpb.Duration `protobuf:"bytes,4,opt,name=maximum_retry_backoff,json=maximumRetryBackoff,proto3" json:"maximum_retry_backoff,omitempty"` + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Client *http.ClientConfiguration `protobuf:"bytes,2,opt,name=client,proto3" json:"client,omitempty"` } -func (x *ClusteredRedisBlobAccessConfiguration) Reset() { - *x = ClusteredRedisBlobAccessConfiguration{} +func (x *HTTPBlobAccessConfiguration) Reset() { + *x = HTTPBlobAccessConfiguration{} if protoimpl.UnsafeEnabled { mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -516,13 +485,13 @@ func (x *ClusteredRedisBlobAccessConfiguration) Reset() { } } -func (x *ClusteredRedisBlobAccessConfiguration) String() string { +func (x *HTTPBlobAccessConfiguration) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ClusteredRedisBlobAccessConfiguration) ProtoMessage() {} +func (*HTTPBlobAccessConfiguration) ProtoMessage() {} -func (x *ClusteredRedisBlobAccessConfiguration) ProtoReflect() protoreflect.Message { +func (x *HTTPBlobAccessConfiguration) ProtoReflect() protoreflect.Message { mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -534,51 +503,36 @@ func (x *ClusteredRedisBlobAccessConfiguration) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use ClusteredRedisBlobAccessConfiguration.ProtoReflect.Descriptor instead. -func (*ClusteredRedisBlobAccessConfiguration) Descriptor() ([]byte, []int) { +// Deprecated: Use HTTPBlobAccessConfiguration.ProtoReflect.Descriptor instead. +func (*HTTPBlobAccessConfiguration) Descriptor() ([]byte, []int) { return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{3} } -func (x *ClusteredRedisBlobAccessConfiguration) GetEndpoints() []string { - if x != nil { - return x.Endpoints - } - return nil -} - -func (x *ClusteredRedisBlobAccessConfiguration) GetMaximumRetries() uint32 { - if x != nil { - return x.MaximumRetries - } - return 0 -} - -func (x *ClusteredRedisBlobAccessConfiguration) GetMinimumRetryBackoff() *durationpb.Duration { +func (x *HTTPBlobAccessConfiguration) GetAddress() string { if x != nil { - return x.MinimumRetryBackoff + return x.Address } - return nil + return "" } -func (x *ClusteredRedisBlobAccessConfiguration) GetMaximumRetryBackoff() *durationpb.Duration { +func (x *HTTPBlobAccessConfiguration) GetClient() *http.ClientConfiguration { if x != nil { - return x.MaximumRetryBackoff + return x.Client } return nil } -type SingleRedisBlobAccessConfiguration struct { +type ShardingBlobAccessConfiguration struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Endpoint string `protobuf:"bytes,1,opt,name=endpoint,proto3" json:"endpoint,omitempty"` - Db int32 `protobuf:"varint,2,opt,name=db,proto3" json:"db,omitempty"` - Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"` + HashInitialization uint64 `protobuf:"varint,1,opt,name=hash_initialization,json=hashInitialization,proto3" json:"hash_initialization,omitempty"` + Shards []*ShardingBlobAccessConfiguration_Shard `protobuf:"bytes,2,rep,name=shards,proto3" json:"shards,omitempty"` } -func (x *SingleRedisBlobAccessConfiguration) Reset() { - *x = SingleRedisBlobAccessConfiguration{} +func (x *ShardingBlobAccessConfiguration) Reset() { + *x = ShardingBlobAccessConfiguration{} if protoimpl.UnsafeEnabled { mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -586,13 +540,13 @@ func (x *SingleRedisBlobAccessConfiguration) Reset() { } } -func (x *SingleRedisBlobAccessConfiguration) String() string { +func (x *ShardingBlobAccessConfiguration) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SingleRedisBlobAccessConfiguration) ProtoMessage() {} +func (*ShardingBlobAccessConfiguration) ProtoMessage() {} -func (x *SingleRedisBlobAccessConfiguration) ProtoReflect() protoreflect.Message { +func (x *ShardingBlobAccessConfiguration) ProtoReflect() protoreflect.Message { mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -604,52 +558,38 @@ func (x *SingleRedisBlobAccessConfiguration) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use SingleRedisBlobAccessConfiguration.ProtoReflect.Descriptor instead. -func (*SingleRedisBlobAccessConfiguration) Descriptor() ([]byte, []int) { +// Deprecated: Use ShardingBlobAccessConfiguration.ProtoReflect.Descriptor instead. +func (*ShardingBlobAccessConfiguration) Descriptor() ([]byte, []int) { return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{4} } -func (x *SingleRedisBlobAccessConfiguration) GetEndpoint() string { - if x != nil { - return x.Endpoint - } - return "" -} - -func (x *SingleRedisBlobAccessConfiguration) GetDb() int32 { +func (x *ShardingBlobAccessConfiguration) GetHashInitialization() uint64 { if x != nil { - return x.Db + return x.HashInitialization } return 0 } -func (x *SingleRedisBlobAccessConfiguration) GetPassword() string { +func (x *ShardingBlobAccessConfiguration) GetShards() []*ShardingBlobAccessConfiguration_Shard { if x != nil { - return x.Password + return x.Shards } - return "" + return nil } -type RedisBlobAccessConfiguration struct { +type MirroredBlobAccessConfiguration struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Types that are assignable to Mode: - // - // *RedisBlobAccessConfiguration_Clustered - // *RedisBlobAccessConfiguration_Single - Mode isRedisBlobAccessConfiguration_Mode `protobuf_oneof:"mode"` - Tls *tls.ClientConfiguration `protobuf:"bytes,4,opt,name=tls,proto3" json:"tls,omitempty"` - ReplicationCount int64 `protobuf:"varint,8,opt,name=replication_count,json=replicationCount,proto3" json:"replication_count,omitempty"` - ReplicationTimeout *durationpb.Duration `protobuf:"bytes,9,opt,name=replication_timeout,json=replicationTimeout,proto3" json:"replication_timeout,omitempty"` - DialTimeout *durationpb.Duration `protobuf:"bytes,10,opt,name=dial_timeout,json=dialTimeout,proto3" json:"dial_timeout,omitempty"` - ReadTimeout *durationpb.Duration `protobuf:"bytes,11,opt,name=read_timeout,json=readTimeout,proto3" json:"read_timeout,omitempty"` - WriteTimeout *durationpb.Duration `protobuf:"bytes,12,opt,name=write_timeout,json=writeTimeout,proto3" json:"write_timeout,omitempty"` -} - -func (x *RedisBlobAccessConfiguration) Reset() { - *x = RedisBlobAccessConfiguration{} + BackendA *BlobAccessConfiguration `protobuf:"bytes,1,opt,name=backend_a,json=backendA,proto3" json:"backend_a,omitempty"` + BackendB *BlobAccessConfiguration `protobuf:"bytes,2,opt,name=backend_b,json=backendB,proto3" json:"backend_b,omitempty"` + ReplicatorAToB *BlobReplicatorConfiguration `protobuf:"bytes,3,opt,name=replicator_a_to_b,json=replicatorAToB,proto3" json:"replicator_a_to_b,omitempty"` + ReplicatorBToA *BlobReplicatorConfiguration `protobuf:"bytes,4,opt,name=replicator_b_to_a,json=replicatorBToA,proto3" json:"replicator_b_to_a,omitempty"` +} + +func (x *MirroredBlobAccessConfiguration) Reset() { + *x = MirroredBlobAccessConfiguration{} if protoimpl.UnsafeEnabled { mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -657,13 +597,13 @@ func (x *RedisBlobAccessConfiguration) Reset() { } } -func (x *RedisBlobAccessConfiguration) String() string { +func (x *MirroredBlobAccessConfiguration) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RedisBlobAccessConfiguration) ProtoMessage() {} +func (*MirroredBlobAccessConfiguration) ProtoMessage() {} -func (x *RedisBlobAccessConfiguration) ProtoReflect() protoreflect.Message { +func (x *MirroredBlobAccessConfiguration) ProtoReflect() protoreflect.Message { mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -675,101 +615,65 @@ func (x *RedisBlobAccessConfiguration) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RedisBlobAccessConfiguration.ProtoReflect.Descriptor instead. -func (*RedisBlobAccessConfiguration) Descriptor() ([]byte, []int) { +// Deprecated: Use MirroredBlobAccessConfiguration.ProtoReflect.Descriptor instead. +func (*MirroredBlobAccessConfiguration) Descriptor() ([]byte, []int) { return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{5} } -func (m *RedisBlobAccessConfiguration) GetMode() isRedisBlobAccessConfiguration_Mode { - if m != nil { - return m.Mode - } - return nil -} - -func (x *RedisBlobAccessConfiguration) GetClustered() *ClusteredRedisBlobAccessConfiguration { - if x, ok := x.GetMode().(*RedisBlobAccessConfiguration_Clustered); ok { - return x.Clustered - } - return nil -} - -func (x *RedisBlobAccessConfiguration) GetSingle() *SingleRedisBlobAccessConfiguration { - if x, ok := x.GetMode().(*RedisBlobAccessConfiguration_Single); ok { - return x.Single - } - return nil -} - -func (x *RedisBlobAccessConfiguration) GetTls() *tls.ClientConfiguration { - if x != nil { - return x.Tls - } - return nil -} - -func (x *RedisBlobAccessConfiguration) GetReplicationCount() int64 { - if x != nil { - return x.ReplicationCount - } - return 0 -} - -func (x *RedisBlobAccessConfiguration) GetReplicationTimeout() *durationpb.Duration { +func (x *MirroredBlobAccessConfiguration) GetBackendA() *BlobAccessConfiguration { if x != nil { - return x.ReplicationTimeout + return x.BackendA } return nil } -func (x *RedisBlobAccessConfiguration) GetDialTimeout() *durationpb.Duration { +func (x *MirroredBlobAccessConfiguration) GetBackendB() *BlobAccessConfiguration { if x != nil { - return x.DialTimeout + return x.BackendB } return nil } -func (x *RedisBlobAccessConfiguration) GetReadTimeout() *durationpb.Duration { +func (x *MirroredBlobAccessConfiguration) GetReplicatorAToB() *BlobReplicatorConfiguration { if x != nil { - return x.ReadTimeout + return x.ReplicatorAToB } return nil } -func (x *RedisBlobAccessConfiguration) GetWriteTimeout() *durationpb.Duration { +func (x *MirroredBlobAccessConfiguration) GetReplicatorBToA() *BlobReplicatorConfiguration { if x != nil { - return x.WriteTimeout + return x.ReplicatorBToA } return nil } -type isRedisBlobAccessConfiguration_Mode interface { - isRedisBlobAccessConfiguration_Mode() -} - -type RedisBlobAccessConfiguration_Clustered struct { - Clustered *ClusteredRedisBlobAccessConfiguration `protobuf:"bytes,1,opt,name=clustered,proto3,oneof"` -} - -type RedisBlobAccessConfiguration_Single struct { - Single *SingleRedisBlobAccessConfiguration `protobuf:"bytes,2,opt,name=single,proto3,oneof"` -} - -func (*RedisBlobAccessConfiguration_Clustered) isRedisBlobAccessConfiguration_Mode() {} - -func (*RedisBlobAccessConfiguration_Single) isRedisBlobAccessConfiguration_Mode() {} - -type HTTPBlobAccessConfiguration struct { +type LocalBlobAccessConfiguration struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - Client *http.ClientConfiguration `protobuf:"bytes,2,opt,name=client,proto3" json:"client,omitempty"` + // Types that are assignable to KeyLocationMapBackend: + // + // *LocalBlobAccessConfiguration_KeyLocationMapInMemory_ + // *LocalBlobAccessConfiguration_KeyLocationMapOnBlockDevice + KeyLocationMapBackend isLocalBlobAccessConfiguration_KeyLocationMapBackend `protobuf_oneof:"key_location_map_backend"` + KeyLocationMapMaximumGetAttempts uint32 `protobuf:"varint,2,opt,name=key_location_map_maximum_get_attempts,json=keyLocationMapMaximumGetAttempts,proto3" json:"key_location_map_maximum_get_attempts,omitempty"` + KeyLocationMapMaximumPutAttempts int64 `protobuf:"varint,3,opt,name=key_location_map_maximum_put_attempts,json=keyLocationMapMaximumPutAttempts,proto3" json:"key_location_map_maximum_put_attempts,omitempty"` + OldBlocks int32 `protobuf:"varint,5,opt,name=old_blocks,json=oldBlocks,proto3" json:"old_blocks,omitempty"` + CurrentBlocks int32 `protobuf:"varint,6,opt,name=current_blocks,json=currentBlocks,proto3" json:"current_blocks,omitempty"` + NewBlocks int32 `protobuf:"varint,7,opt,name=new_blocks,json=newBlocks,proto3" json:"new_blocks,omitempty"` + // Types that are assignable to BlocksBackend: + // + // *LocalBlobAccessConfiguration_BlocksInMemory_ + // *LocalBlobAccessConfiguration_BlocksOnBlockDevice_ + BlocksBackend isLocalBlobAccessConfiguration_BlocksBackend `protobuf_oneof:"blocks_backend"` + Persistent *LocalBlobAccessConfiguration_Persistent `protobuf:"bytes,13,opt,name=persistent,proto3" json:"persistent,omitempty"` + HierarchicalInstanceNames bool `protobuf:"varint,14,opt,name=hierarchical_instance_names,json=hierarchicalInstanceNames,proto3" json:"hierarchical_instance_names,omitempty"` } -func (x *HTTPBlobAccessConfiguration) Reset() { - *x = HTTPBlobAccessConfiguration{} +func (x *LocalBlobAccessConfiguration) Reset() { + *x = LocalBlobAccessConfiguration{} if protoimpl.UnsafeEnabled { mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -777,13 +681,13 @@ func (x *HTTPBlobAccessConfiguration) Reset() { } } -func (x *HTTPBlobAccessConfiguration) String() string { +func (x *LocalBlobAccessConfiguration) String() string { return protoimpl.X.MessageStringOf(x) } -func (*HTTPBlobAccessConfiguration) ProtoMessage() {} +func (*LocalBlobAccessConfiguration) ProtoMessage() {} -func (x *HTTPBlobAccessConfiguration) ProtoReflect() protoreflect.Message { +func (x *LocalBlobAccessConfiguration) ProtoReflect() protoreflect.Message { mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -795,359 +699,100 @@ func (x *HTTPBlobAccessConfiguration) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use HTTPBlobAccessConfiguration.ProtoReflect.Descriptor instead. -func (*HTTPBlobAccessConfiguration) Descriptor() ([]byte, []int) { +// Deprecated: Use LocalBlobAccessConfiguration.ProtoReflect.Descriptor instead. +func (*LocalBlobAccessConfiguration) Descriptor() ([]byte, []int) { return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{6} } -func (x *HTTPBlobAccessConfiguration) GetAddress() string { - if x != nil { - return x.Address +func (m *LocalBlobAccessConfiguration) GetKeyLocationMapBackend() isLocalBlobAccessConfiguration_KeyLocationMapBackend { + if m != nil { + return m.KeyLocationMapBackend } - return "" + return nil } -func (x *HTTPBlobAccessConfiguration) GetClient() *http.ClientConfiguration { - if x != nil { - return x.Client +func (x *LocalBlobAccessConfiguration) GetKeyLocationMapInMemory() *LocalBlobAccessConfiguration_KeyLocationMapInMemory { + if x, ok := x.GetKeyLocationMapBackend().(*LocalBlobAccessConfiguration_KeyLocationMapInMemory_); ok { + return x.KeyLocationMapInMemory } return nil } -type ShardingBlobAccessConfiguration struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - HashInitialization uint64 `protobuf:"varint,1,opt,name=hash_initialization,json=hashInitialization,proto3" json:"hash_initialization,omitempty"` - Shards []*ShardingBlobAccessConfiguration_Shard `protobuf:"bytes,2,rep,name=shards,proto3" json:"shards,omitempty"` +func (x *LocalBlobAccessConfiguration) GetKeyLocationMapOnBlockDevice() *blockdevice.Configuration { + if x, ok := x.GetKeyLocationMapBackend().(*LocalBlobAccessConfiguration_KeyLocationMapOnBlockDevice); ok { + return x.KeyLocationMapOnBlockDevice + } + return nil } -func (x *ShardingBlobAccessConfiguration) Reset() { - *x = ShardingBlobAccessConfiguration{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *LocalBlobAccessConfiguration) GetKeyLocationMapMaximumGetAttempts() uint32 { + if x != nil { + return x.KeyLocationMapMaximumGetAttempts } + return 0 } -func (x *ShardingBlobAccessConfiguration) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *LocalBlobAccessConfiguration) GetKeyLocationMapMaximumPutAttempts() int64 { + if x != nil { + return x.KeyLocationMapMaximumPutAttempts + } + return 0 } -func (*ShardingBlobAccessConfiguration) ProtoMessage() {} - -func (x *ShardingBlobAccessConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *LocalBlobAccessConfiguration) GetOldBlocks() int32 { + if x != nil { + return x.OldBlocks } - return mi.MessageOf(x) + return 0 } -// Deprecated: Use ShardingBlobAccessConfiguration.ProtoReflect.Descriptor instead. -func (*ShardingBlobAccessConfiguration) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{7} +func (x *LocalBlobAccessConfiguration) GetCurrentBlocks() int32 { + if x != nil { + return x.CurrentBlocks + } + return 0 } -func (x *ShardingBlobAccessConfiguration) GetHashInitialization() uint64 { +func (x *LocalBlobAccessConfiguration) GetNewBlocks() int32 { if x != nil { - return x.HashInitialization + return x.NewBlocks } return 0 } -func (x *ShardingBlobAccessConfiguration) GetShards() []*ShardingBlobAccessConfiguration_Shard { - if x != nil { - return x.Shards +func (m *LocalBlobAccessConfiguration) GetBlocksBackend() isLocalBlobAccessConfiguration_BlocksBackend { + if m != nil { + return m.BlocksBackend } return nil } -type SizeDistinguishingBlobAccessConfiguration struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *LocalBlobAccessConfiguration) GetBlocksInMemory() *LocalBlobAccessConfiguration_BlocksInMemory { + if x, ok := x.GetBlocksBackend().(*LocalBlobAccessConfiguration_BlocksInMemory_); ok { + return x.BlocksInMemory + } + return nil +} - Small *BlobAccessConfiguration `protobuf:"bytes,1,opt,name=small,proto3" json:"small,omitempty"` - Large *BlobAccessConfiguration `protobuf:"bytes,2,opt,name=large,proto3" json:"large,omitempty"` - CutoffSizeBytes int64 `protobuf:"varint,3,opt,name=cutoff_size_bytes,json=cutoffSizeBytes,proto3" json:"cutoff_size_bytes,omitempty"` +func (x *LocalBlobAccessConfiguration) GetBlocksOnBlockDevice() *LocalBlobAccessConfiguration_BlocksOnBlockDevice { + if x, ok := x.GetBlocksBackend().(*LocalBlobAccessConfiguration_BlocksOnBlockDevice_); ok { + return x.BlocksOnBlockDevice + } + return nil } -func (x *SizeDistinguishingBlobAccessConfiguration) Reset() { - *x = SizeDistinguishingBlobAccessConfiguration{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *LocalBlobAccessConfiguration) GetPersistent() *LocalBlobAccessConfiguration_Persistent { + if x != nil { + return x.Persistent } + return nil } -func (x *SizeDistinguishingBlobAccessConfiguration) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SizeDistinguishingBlobAccessConfiguration) ProtoMessage() {} - -func (x *SizeDistinguishingBlobAccessConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[8] - 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 SizeDistinguishingBlobAccessConfiguration.ProtoReflect.Descriptor instead. -func (*SizeDistinguishingBlobAccessConfiguration) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{8} -} - -func (x *SizeDistinguishingBlobAccessConfiguration) GetSmall() *BlobAccessConfiguration { - if x != nil { - return x.Small - } - return nil -} - -func (x *SizeDistinguishingBlobAccessConfiguration) GetLarge() *BlobAccessConfiguration { - if x != nil { - return x.Large - } - return nil -} - -func (x *SizeDistinguishingBlobAccessConfiguration) GetCutoffSizeBytes() int64 { - if x != nil { - return x.CutoffSizeBytes - } - return 0 -} - -type MirroredBlobAccessConfiguration struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - BackendA *BlobAccessConfiguration `protobuf:"bytes,1,opt,name=backend_a,json=backendA,proto3" json:"backend_a,omitempty"` - BackendB *BlobAccessConfiguration `protobuf:"bytes,2,opt,name=backend_b,json=backendB,proto3" json:"backend_b,omitempty"` - ReplicatorAToB *BlobReplicatorConfiguration `protobuf:"bytes,3,opt,name=replicator_a_to_b,json=replicatorAToB,proto3" json:"replicator_a_to_b,omitempty"` - ReplicatorBToA *BlobReplicatorConfiguration `protobuf:"bytes,4,opt,name=replicator_b_to_a,json=replicatorBToA,proto3" json:"replicator_b_to_a,omitempty"` -} - -func (x *MirroredBlobAccessConfiguration) Reset() { - *x = MirroredBlobAccessConfiguration{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MirroredBlobAccessConfiguration) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MirroredBlobAccessConfiguration) ProtoMessage() {} - -func (x *MirroredBlobAccessConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[9] - 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 MirroredBlobAccessConfiguration.ProtoReflect.Descriptor instead. -func (*MirroredBlobAccessConfiguration) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{9} -} - -func (x *MirroredBlobAccessConfiguration) GetBackendA() *BlobAccessConfiguration { - if x != nil { - return x.BackendA - } - return nil -} - -func (x *MirroredBlobAccessConfiguration) GetBackendB() *BlobAccessConfiguration { - if x != nil { - return x.BackendB - } - return nil -} - -func (x *MirroredBlobAccessConfiguration) GetReplicatorAToB() *BlobReplicatorConfiguration { - if x != nil { - return x.ReplicatorAToB - } - return nil -} - -func (x *MirroredBlobAccessConfiguration) GetReplicatorBToA() *BlobReplicatorConfiguration { - if x != nil { - return x.ReplicatorBToA - } - return nil -} - -type LocalBlobAccessConfiguration struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to KeyLocationMapBackend: - // - // *LocalBlobAccessConfiguration_KeyLocationMapInMemory_ - // *LocalBlobAccessConfiguration_KeyLocationMapOnBlockDevice - KeyLocationMapBackend isLocalBlobAccessConfiguration_KeyLocationMapBackend `protobuf_oneof:"key_location_map_backend"` - KeyLocationMapMaximumGetAttempts uint32 `protobuf:"varint,2,opt,name=key_location_map_maximum_get_attempts,json=keyLocationMapMaximumGetAttempts,proto3" json:"key_location_map_maximum_get_attempts,omitempty"` - KeyLocationMapMaximumPutAttempts int64 `protobuf:"varint,3,opt,name=key_location_map_maximum_put_attempts,json=keyLocationMapMaximumPutAttempts,proto3" json:"key_location_map_maximum_put_attempts,omitempty"` - OldBlocks int32 `protobuf:"varint,5,opt,name=old_blocks,json=oldBlocks,proto3" json:"old_blocks,omitempty"` - CurrentBlocks int32 `protobuf:"varint,6,opt,name=current_blocks,json=currentBlocks,proto3" json:"current_blocks,omitempty"` - NewBlocks int32 `protobuf:"varint,7,opt,name=new_blocks,json=newBlocks,proto3" json:"new_blocks,omitempty"` - // Types that are assignable to BlocksBackend: - // - // *LocalBlobAccessConfiguration_BlocksInMemory_ - // *LocalBlobAccessConfiguration_BlocksOnBlockDevice_ - BlocksBackend isLocalBlobAccessConfiguration_BlocksBackend `protobuf_oneof:"blocks_backend"` - Persistent *LocalBlobAccessConfiguration_Persistent `protobuf:"bytes,13,opt,name=persistent,proto3" json:"persistent,omitempty"` - HierarchicalInstanceNames bool `protobuf:"varint,14,opt,name=hierarchical_instance_names,json=hierarchicalInstanceNames,proto3" json:"hierarchical_instance_names,omitempty"` -} - -func (x *LocalBlobAccessConfiguration) Reset() { - *x = LocalBlobAccessConfiguration{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LocalBlobAccessConfiguration) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LocalBlobAccessConfiguration) ProtoMessage() {} - -func (x *LocalBlobAccessConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[10] - 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 LocalBlobAccessConfiguration.ProtoReflect.Descriptor instead. -func (*LocalBlobAccessConfiguration) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{10} -} - -func (m *LocalBlobAccessConfiguration) GetKeyLocationMapBackend() isLocalBlobAccessConfiguration_KeyLocationMapBackend { - if m != nil { - return m.KeyLocationMapBackend - } - return nil -} - -func (x *LocalBlobAccessConfiguration) GetKeyLocationMapInMemory() *LocalBlobAccessConfiguration_KeyLocationMapInMemory { - if x, ok := x.GetKeyLocationMapBackend().(*LocalBlobAccessConfiguration_KeyLocationMapInMemory_); ok { - return x.KeyLocationMapInMemory - } - return nil -} - -func (x *LocalBlobAccessConfiguration) GetKeyLocationMapOnBlockDevice() *blockdevice.Configuration { - if x, ok := x.GetKeyLocationMapBackend().(*LocalBlobAccessConfiguration_KeyLocationMapOnBlockDevice); ok { - return x.KeyLocationMapOnBlockDevice - } - return nil -} - -func (x *LocalBlobAccessConfiguration) GetKeyLocationMapMaximumGetAttempts() uint32 { - if x != nil { - return x.KeyLocationMapMaximumGetAttempts - } - return 0 -} - -func (x *LocalBlobAccessConfiguration) GetKeyLocationMapMaximumPutAttempts() int64 { - if x != nil { - return x.KeyLocationMapMaximumPutAttempts - } - return 0 -} - -func (x *LocalBlobAccessConfiguration) GetOldBlocks() int32 { - if x != nil { - return x.OldBlocks - } - return 0 -} - -func (x *LocalBlobAccessConfiguration) GetCurrentBlocks() int32 { - if x != nil { - return x.CurrentBlocks - } - return 0 -} - -func (x *LocalBlobAccessConfiguration) GetNewBlocks() int32 { - if x != nil { - return x.NewBlocks - } - return 0 -} - -func (m *LocalBlobAccessConfiguration) GetBlocksBackend() isLocalBlobAccessConfiguration_BlocksBackend { - if m != nil { - return m.BlocksBackend - } - return nil -} - -func (x *LocalBlobAccessConfiguration) GetBlocksInMemory() *LocalBlobAccessConfiguration_BlocksInMemory { - if x, ok := x.GetBlocksBackend().(*LocalBlobAccessConfiguration_BlocksInMemory_); ok { - return x.BlocksInMemory - } - return nil -} - -func (x *LocalBlobAccessConfiguration) GetBlocksOnBlockDevice() *LocalBlobAccessConfiguration_BlocksOnBlockDevice { - if x, ok := x.GetBlocksBackend().(*LocalBlobAccessConfiguration_BlocksOnBlockDevice_); ok { - return x.BlocksOnBlockDevice - } - return nil -} - -func (x *LocalBlobAccessConfiguration) GetPersistent() *LocalBlobAccessConfiguration_Persistent { - if x != nil { - return x.Persistent - } - return nil -} - -func (x *LocalBlobAccessConfiguration) GetHierarchicalInstanceNames() bool { - if x != nil { - return x.HierarchicalInstanceNames - } - return false +func (x *LocalBlobAccessConfiguration) GetHierarchicalInstanceNames() bool { + if x != nil { + return x.HierarchicalInstanceNames + } + return false } type isLocalBlobAccessConfiguration_KeyLocationMapBackend interface { @@ -1197,7 +842,7 @@ type ExistenceCachingBlobAccessConfiguration struct { func (x *ExistenceCachingBlobAccessConfiguration) Reset() { *x = ExistenceCachingBlobAccessConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[11] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1210,7 +855,7 @@ func (x *ExistenceCachingBlobAccessConfiguration) String() string { func (*ExistenceCachingBlobAccessConfiguration) ProtoMessage() {} func (x *ExistenceCachingBlobAccessConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[11] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1223,7 +868,7 @@ func (x *ExistenceCachingBlobAccessConfiguration) ProtoReflect() protoreflect.Me // Deprecated: Use ExistenceCachingBlobAccessConfiguration.ProtoReflect.Descriptor instead. func (*ExistenceCachingBlobAccessConfiguration) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{11} + return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{7} } func (x *ExistenceCachingBlobAccessConfiguration) GetBackend() *BlobAccessConfiguration { @@ -1252,7 +897,7 @@ type CompletenessCheckingBlobAccessConfiguration struct { func (x *CompletenessCheckingBlobAccessConfiguration) Reset() { *x = CompletenessCheckingBlobAccessConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[12] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1265,7 +910,7 @@ func (x *CompletenessCheckingBlobAccessConfiguration) String() string { func (*CompletenessCheckingBlobAccessConfiguration) ProtoMessage() {} func (x *CompletenessCheckingBlobAccessConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[12] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1278,7 +923,7 @@ func (x *CompletenessCheckingBlobAccessConfiguration) ProtoReflect() protoreflec // Deprecated: Use CompletenessCheckingBlobAccessConfiguration.ProtoReflect.Descriptor instead. func (*CompletenessCheckingBlobAccessConfiguration) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{12} + return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{8} } func (x *CompletenessCheckingBlobAccessConfiguration) GetBackend() *BlobAccessConfiguration { @@ -1308,7 +953,7 @@ type ReadFallbackBlobAccessConfiguration struct { func (x *ReadFallbackBlobAccessConfiguration) Reset() { *x = ReadFallbackBlobAccessConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[13] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1321,7 +966,7 @@ func (x *ReadFallbackBlobAccessConfiguration) String() string { func (*ReadFallbackBlobAccessConfiguration) ProtoMessage() {} func (x *ReadFallbackBlobAccessConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[13] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1334,7 +979,7 @@ func (x *ReadFallbackBlobAccessConfiguration) ProtoReflect() protoreflect.Messag // Deprecated: Use ReadFallbackBlobAccessConfiguration.ProtoReflect.Descriptor instead. func (*ReadFallbackBlobAccessConfiguration) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{13} + return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{9} } func (x *ReadFallbackBlobAccessConfiguration) GetPrimary() *BlobAccessConfiguration { @@ -1372,7 +1017,7 @@ type ReferenceExpandingBlobAccessConfiguration struct { func (x *ReferenceExpandingBlobAccessConfiguration) Reset() { *x = ReferenceExpandingBlobAccessConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[14] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1385,7 +1030,7 @@ func (x *ReferenceExpandingBlobAccessConfiguration) String() string { func (*ReferenceExpandingBlobAccessConfiguration) ProtoMessage() {} func (x *ReferenceExpandingBlobAccessConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[14] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1398,7 +1043,7 @@ func (x *ReferenceExpandingBlobAccessConfiguration) ProtoReflect() protoreflect. // Deprecated: Use ReferenceExpandingBlobAccessConfiguration.ProtoReflect.Descriptor instead. func (*ReferenceExpandingBlobAccessConfiguration) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{14} + return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{10} } func (x *ReferenceExpandingBlobAccessConfiguration) GetIndirectContentAddressableStorage() *BlobAccessConfiguration { @@ -1448,7 +1093,7 @@ type BlobReplicatorConfiguration struct { func (x *BlobReplicatorConfiguration) Reset() { *x = BlobReplicatorConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[15] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1461,7 +1106,7 @@ func (x *BlobReplicatorConfiguration) String() string { func (*BlobReplicatorConfiguration) ProtoMessage() {} func (x *BlobReplicatorConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[15] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1474,7 +1119,7 @@ func (x *BlobReplicatorConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use BlobReplicatorConfiguration.ProtoReflect.Descriptor instead. func (*BlobReplicatorConfiguration) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{15} + return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{11} } func (m *BlobReplicatorConfiguration) GetMode() isBlobReplicatorConfiguration_Mode { @@ -1578,7 +1223,7 @@ type QueuedBlobReplicatorConfiguration struct { func (x *QueuedBlobReplicatorConfiguration) Reset() { *x = QueuedBlobReplicatorConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[16] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1591,7 +1236,7 @@ func (x *QueuedBlobReplicatorConfiguration) String() string { func (*QueuedBlobReplicatorConfiguration) ProtoMessage() {} func (x *QueuedBlobReplicatorConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[16] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1604,7 +1249,7 @@ func (x *QueuedBlobReplicatorConfiguration) ProtoReflect() protoreflect.Message // Deprecated: Use QueuedBlobReplicatorConfiguration.ProtoReflect.Descriptor instead. func (*QueuedBlobReplicatorConfiguration) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{16} + return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{12} } func (x *QueuedBlobReplicatorConfiguration) GetBase() *BlobReplicatorConfiguration { @@ -1633,7 +1278,7 @@ type ConcurrencyLimitingBlobReplicatorConfiguration struct { func (x *ConcurrencyLimitingBlobReplicatorConfiguration) Reset() { *x = ConcurrencyLimitingBlobReplicatorConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[17] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1646,7 +1291,7 @@ func (x *ConcurrencyLimitingBlobReplicatorConfiguration) String() string { func (*ConcurrencyLimitingBlobReplicatorConfiguration) ProtoMessage() {} func (x *ConcurrencyLimitingBlobReplicatorConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[17] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1659,7 +1304,7 @@ func (x *ConcurrencyLimitingBlobReplicatorConfiguration) ProtoReflect() protoref // Deprecated: Use ConcurrencyLimitingBlobReplicatorConfiguration.ProtoReflect.Descriptor instead. func (*ConcurrencyLimitingBlobReplicatorConfiguration) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{17} + return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{13} } func (x *ConcurrencyLimitingBlobReplicatorConfiguration) GetBase() *BlobReplicatorConfiguration { @@ -1687,7 +1332,7 @@ type DemultiplexingBlobAccessConfiguration struct { func (x *DemultiplexingBlobAccessConfiguration) Reset() { *x = DemultiplexingBlobAccessConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[18] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1700,7 +1345,7 @@ func (x *DemultiplexingBlobAccessConfiguration) String() string { func (*DemultiplexingBlobAccessConfiguration) ProtoMessage() {} func (x *DemultiplexingBlobAccessConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[18] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1713,7 +1358,7 @@ func (x *DemultiplexingBlobAccessConfiguration) ProtoReflect() protoreflect.Mess // Deprecated: Use DemultiplexingBlobAccessConfiguration.ProtoReflect.Descriptor instead. func (*DemultiplexingBlobAccessConfiguration) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{18} + return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{14} } func (x *DemultiplexingBlobAccessConfiguration) GetInstanceNamePrefixes() map[string]*DemultiplexedBlobAccessConfiguration { @@ -1735,7 +1380,7 @@ type DemultiplexedBlobAccessConfiguration struct { func (x *DemultiplexedBlobAccessConfiguration) Reset() { *x = DemultiplexedBlobAccessConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[19] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1748,7 +1393,7 @@ func (x *DemultiplexedBlobAccessConfiguration) String() string { func (*DemultiplexedBlobAccessConfiguration) ProtoMessage() {} func (x *DemultiplexedBlobAccessConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[19] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1761,7 +1406,7 @@ func (x *DemultiplexedBlobAccessConfiguration) ProtoReflect() protoreflect.Messa // Deprecated: Use DemultiplexedBlobAccessConfiguration.ProtoReflect.Descriptor instead. func (*DemultiplexedBlobAccessConfiguration) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{19} + return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{15} } func (x *DemultiplexedBlobAccessConfiguration) GetBackend() *BlobAccessConfiguration { @@ -1792,7 +1437,7 @@ type ActionResultExpiringBlobAccessConfiguration struct { func (x *ActionResultExpiringBlobAccessConfiguration) Reset() { *x = ActionResultExpiringBlobAccessConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[20] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1805,7 +1450,7 @@ func (x *ActionResultExpiringBlobAccessConfiguration) String() string { func (*ActionResultExpiringBlobAccessConfiguration) ProtoMessage() {} func (x *ActionResultExpiringBlobAccessConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[20] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1818,7 +1463,7 @@ func (x *ActionResultExpiringBlobAccessConfiguration) ProtoReflect() protoreflec // Deprecated: Use ActionResultExpiringBlobAccessConfiguration.ProtoReflect.Descriptor instead. func (*ActionResultExpiringBlobAccessConfiguration) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{20} + return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{16} } func (x *ActionResultExpiringBlobAccessConfiguration) GetBackend() *BlobAccessConfiguration { @@ -1863,7 +1508,7 @@ type ReadCanaryingBlobAccessConfiguration struct { func (x *ReadCanaryingBlobAccessConfiguration) Reset() { *x = ReadCanaryingBlobAccessConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[21] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1876,7 +1521,7 @@ func (x *ReadCanaryingBlobAccessConfiguration) String() string { func (*ReadCanaryingBlobAccessConfiguration) ProtoMessage() {} func (x *ReadCanaryingBlobAccessConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[21] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1889,7 +1534,7 @@ func (x *ReadCanaryingBlobAccessConfiguration) ProtoReflect() protoreflect.Messa // Deprecated: Use ReadCanaryingBlobAccessConfiguration.ProtoReflect.Descriptor instead. func (*ReadCanaryingBlobAccessConfiguration) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{21} + return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{17} } func (x *ReadCanaryingBlobAccessConfiguration) GetSource() *BlobAccessConfiguration { @@ -1932,7 +1577,7 @@ type ZIPBlobAccessConfiguration struct { func (x *ZIPBlobAccessConfiguration) Reset() { *x = ZIPBlobAccessConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[22] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1945,7 +1590,7 @@ func (x *ZIPBlobAccessConfiguration) String() string { func (*ZIPBlobAccessConfiguration) ProtoMessage() {} func (x *ZIPBlobAccessConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[22] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1958,7 +1603,7 @@ func (x *ZIPBlobAccessConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use ZIPBlobAccessConfiguration.ProtoReflect.Descriptor instead. func (*ZIPBlobAccessConfiguration) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{22} + return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{18} } func (x *ZIPBlobAccessConfiguration) GetPath() string { @@ -1987,7 +1632,7 @@ type WithLabelsBlobAccessConfiguration struct { func (x *WithLabelsBlobAccessConfiguration) Reset() { *x = WithLabelsBlobAccessConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[23] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2000,7 +1645,7 @@ func (x *WithLabelsBlobAccessConfiguration) String() string { func (*WithLabelsBlobAccessConfiguration) ProtoMessage() {} func (x *WithLabelsBlobAccessConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[23] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2013,7 +1658,7 @@ func (x *WithLabelsBlobAccessConfiguration) ProtoReflect() protoreflect.Message // Deprecated: Use WithLabelsBlobAccessConfiguration.ProtoReflect.Descriptor instead. func (*WithLabelsBlobAccessConfiguration) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{23} + return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{19} } func (x *WithLabelsBlobAccessConfiguration) GetBackend() *BlobAccessConfiguration { @@ -2042,7 +1687,7 @@ type ShardingBlobAccessConfiguration_Shard struct { func (x *ShardingBlobAccessConfiguration_Shard) Reset() { *x = ShardingBlobAccessConfiguration_Shard{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[24] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2055,7 +1700,7 @@ func (x *ShardingBlobAccessConfiguration_Shard) String() string { func (*ShardingBlobAccessConfiguration_Shard) ProtoMessage() {} func (x *ShardingBlobAccessConfiguration_Shard) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[24] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2068,7 +1713,7 @@ func (x *ShardingBlobAccessConfiguration_Shard) ProtoReflect() protoreflect.Mess // Deprecated: Use ShardingBlobAccessConfiguration_Shard.ProtoReflect.Descriptor instead. func (*ShardingBlobAccessConfiguration_Shard) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{7, 0} + return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{4, 0} } func (x *ShardingBlobAccessConfiguration_Shard) GetBackend() *BlobAccessConfiguration { @@ -2096,7 +1741,7 @@ type LocalBlobAccessConfiguration_KeyLocationMapInMemory struct { func (x *LocalBlobAccessConfiguration_KeyLocationMapInMemory) Reset() { *x = LocalBlobAccessConfiguration_KeyLocationMapInMemory{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[25] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2109,7 +1754,7 @@ func (x *LocalBlobAccessConfiguration_KeyLocationMapInMemory) String() string { func (*LocalBlobAccessConfiguration_KeyLocationMapInMemory) ProtoMessage() {} func (x *LocalBlobAccessConfiguration_KeyLocationMapInMemory) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[25] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2122,7 +1767,7 @@ func (x *LocalBlobAccessConfiguration_KeyLocationMapInMemory) ProtoReflect() pro // Deprecated: Use LocalBlobAccessConfiguration_KeyLocationMapInMemory.ProtoReflect.Descriptor instead. func (*LocalBlobAccessConfiguration_KeyLocationMapInMemory) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{10, 0} + return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{6, 0} } func (x *LocalBlobAccessConfiguration_KeyLocationMapInMemory) GetEntries() int64 { @@ -2143,7 +1788,7 @@ type LocalBlobAccessConfiguration_BlocksInMemory struct { func (x *LocalBlobAccessConfiguration_BlocksInMemory) Reset() { *x = LocalBlobAccessConfiguration_BlocksInMemory{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[26] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2156,7 +1801,7 @@ func (x *LocalBlobAccessConfiguration_BlocksInMemory) String() string { func (*LocalBlobAccessConfiguration_BlocksInMemory) ProtoMessage() {} func (x *LocalBlobAccessConfiguration_BlocksInMemory) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[26] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2169,7 +1814,7 @@ func (x *LocalBlobAccessConfiguration_BlocksInMemory) ProtoReflect() protoreflec // Deprecated: Use LocalBlobAccessConfiguration_BlocksInMemory.ProtoReflect.Descriptor instead. func (*LocalBlobAccessConfiguration_BlocksInMemory) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{10, 1} + return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{6, 1} } func (x *LocalBlobAccessConfiguration_BlocksInMemory) GetBlockSizeBytes() int64 { @@ -2192,7 +1837,7 @@ type LocalBlobAccessConfiguration_BlocksOnBlockDevice struct { func (x *LocalBlobAccessConfiguration_BlocksOnBlockDevice) Reset() { *x = LocalBlobAccessConfiguration_BlocksOnBlockDevice{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[27] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2205,7 +1850,7 @@ func (x *LocalBlobAccessConfiguration_BlocksOnBlockDevice) String() string { func (*LocalBlobAccessConfiguration_BlocksOnBlockDevice) ProtoMessage() {} func (x *LocalBlobAccessConfiguration_BlocksOnBlockDevice) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[27] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2218,7 +1863,7 @@ func (x *LocalBlobAccessConfiguration_BlocksOnBlockDevice) ProtoReflect() protor // Deprecated: Use LocalBlobAccessConfiguration_BlocksOnBlockDevice.ProtoReflect.Descriptor instead. func (*LocalBlobAccessConfiguration_BlocksOnBlockDevice) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{10, 2} + return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{6, 2} } func (x *LocalBlobAccessConfiguration_BlocksOnBlockDevice) GetSource() *blockdevice.Configuration { @@ -2254,7 +1899,7 @@ type LocalBlobAccessConfiguration_Persistent struct { func (x *LocalBlobAccessConfiguration_Persistent) Reset() { *x = LocalBlobAccessConfiguration_Persistent{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[28] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2267,7 +1912,7 @@ func (x *LocalBlobAccessConfiguration_Persistent) String() string { func (*LocalBlobAccessConfiguration_Persistent) ProtoMessage() {} func (x *LocalBlobAccessConfiguration_Persistent) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[28] + mi := &file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2280,7 +1925,7 @@ func (x *LocalBlobAccessConfiguration_Persistent) ProtoReflect() protoreflect.Me // Deprecated: Use LocalBlobAccessConfiguration_Persistent.ProtoReflect.Descriptor instead. func (*LocalBlobAccessConfiguration_Persistent) Descriptor() ([]byte, []int) { - return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{10, 3} + return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP(), []int{6, 3} } func (x *LocalBlobAccessConfiguration_Persistent) GetStateDirectoryPath() string { @@ -2329,32 +1974,24 @@ var file_pkg_proto_configuration_blobstore_blobstore_proto_rawDesc = []byte{ 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x68, 0x74, - 0x74, 0x70, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x25, 0x70, - 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x6c, 0x73, 0x2f, 0x74, 0x6c, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf3, 0x01, 0x0a, 0x16, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x7a, 0x0a, 0x1b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, - 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x5d, 0x0a, 0x0c, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x22, 0x83, 0x11, 0x0a, 0x17, 0x42, - 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x57, 0x0a, 0x05, 0x72, 0x65, 0x64, 0x69, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, - 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x64, 0x69, 0x73, 0x42, + 0x74, 0x70, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf3, 0x01, + 0x0a, 0x16, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7a, 0x0a, 0x1b, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x12, 0x5d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, + 0x61, 0x63, 0x68, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x72, 0x65, 0x64, 0x69, 0x73, 0x12, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x22, 0xb5, 0x0f, 0x0a, 0x17, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x04, 0x68, 0x74, 0x74, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, @@ -2367,625 +2004,539 @@ var file_pkg_proto_configuration_blobstore_blobstore_proto_rawDesc = []byte{ 0x52, 0x65, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x65, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x67, 0x12, 0x7f, 0x0a, 0x13, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, - 0x67, 0x75, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4c, - 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x2e, 0x53, 0x69, 0x7a, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, - 0x73, 0x68, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x12, - 0x73, 0x69, 0x7a, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x69, - 0x6e, 0x67, 0x12, 0x47, 0x0a, 0x04, 0x67, 0x72, 0x70, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x04, 0x67, 0x72, 0x70, 0x63, 0x12, 0x2a, 0x0a, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x60, 0x0a, 0x08, 0x73, 0x68, 0x61, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x68, - 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, - 0x08, 0x73, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x60, 0x0a, 0x08, 0x6d, 0x69, 0x72, - 0x72, 0x6f, 0x72, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, - 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x00, 0x52, 0x08, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x65, 0x64, 0x12, 0x57, 0x0a, 0x05, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x62, 0x75, 0x69, + 0x67, 0x12, 0x47, 0x0a, 0x04, 0x67, 0x72, 0x70, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x31, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x04, 0x67, 0x72, 0x70, 0x63, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x60, 0x0a, 0x08, 0x73, 0x68, 0x61, 0x72, 0x64, 0x69, + 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x68, 0x61, + 0x72, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x08, + 0x73, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x60, 0x0a, 0x08, 0x6d, 0x69, 0x72, 0x72, + 0x6f, 0x72, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x4c, - 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x79, 0x0a, 0x11, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, - 0x65, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x4a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x65, - 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x12, - 0x85, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x6e, 0x65, 0x73, 0x73, - 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x4e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x6e, 0x65, 0x73, 0x73, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x00, 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x12, 0x6d, 0x0a, 0x0d, 0x72, 0x65, 0x61, 0x64, 0x5f, - 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x4d, + 0x69, 0x72, 0x72, 0x6f, 0x72, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x08, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x65, 0x64, 0x12, 0x57, 0x0a, 0x05, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x12, 0x79, 0x0a, 0x11, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, + 0x5f, 0x63, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x42, - 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x72, 0x65, 0x61, 0x64, 0x46, 0x61, - 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x7f, 0x0a, 0x13, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x5f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x13, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, - 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x48, 0x00, 0x52, 0x12, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x78, - 0x70, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x72, 0x0a, 0x0e, 0x64, 0x65, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x48, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x78, 0x69, - 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x64, 0x65, 0x6d, - 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x12, 0x7c, 0x0a, 0x1b, 0x68, - 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x19, - 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x86, 0x01, 0x0a, 0x16, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x70, 0x69, - 0x72, 0x69, 0x6e, 0x67, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x45, 0x78, 0x70, 0x69, 0x72, + 0x72, 0x65, 0x2e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x14, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x45, 0x78, 0x70, 0x69, 0x72, 0x69, - 0x6e, 0x67, 0x12, 0x70, 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x61, 0x6e, 0x61, 0x72, - 0x79, 0x69, 0x6e, 0x67, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x52, - 0x65, 0x61, 0x64, 0x43, 0x61, 0x6e, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0d, 0x72, 0x65, 0x61, 0x64, 0x43, 0x61, 0x6e, 0x61, 0x72, - 0x79, 0x69, 0x6e, 0x67, 0x12, 0x60, 0x0a, 0x0b, 0x7a, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x61, 0x64, - 0x69, 0x6e, 0x67, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x5a, 0x49, - 0x50, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x7a, 0x69, 0x70, 0x52, - 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x60, 0x0a, 0x0b, 0x7a, 0x69, 0x70, 0x5f, 0x77, 0x72, - 0x69, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, - 0x5a, 0x49, 0x50, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x7a, 0x69, - 0x70, 0x57, 0x72, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x67, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, - 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x62, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x12, 0x16, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x42, 0x09, 0x0a, 0x07, 0x62, 0x61, 0x63, - 0x6b, 0x65, 0x6e, 0x64, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, - 0x22, 0xa4, 0x02, 0x0a, 0x22, 0x52, 0x65, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, - 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x77, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, - 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x77, 0x12, 0x4e, 0x0a, 0x04, 0x66, 0x61, 0x73, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, - 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x04, 0x66, 0x61, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, - 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x8c, 0x02, 0x0a, 0x25, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x64, 0x69, 0x73, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, - 0x27, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, - 0x6d, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x15, 0x6d, 0x69, 0x6e, 0x69, - 0x6d, 0x75, 0x6d, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, - 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x13, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x52, 0x65, 0x74, 0x72, 0x79, - 0x42, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x12, 0x4d, 0x0a, 0x15, 0x6d, 0x61, 0x78, 0x69, 0x6d, - 0x75, 0x6d, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x13, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x52, 0x65, 0x74, 0x72, 0x79, 0x42, - 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x22, 0x6c, 0x0a, 0x22, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, - 0x52, 0x65, 0x64, 0x69, 0x73, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, - 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x64, 0x62, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x64, 0x62, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, - 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, - 0x77, 0x6f, 0x72, 0x64, 0x22, 0xf0, 0x04, 0x0a, 0x1c, 0x52, 0x65, 0x64, 0x69, 0x73, 0x42, 0x6c, - 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x68, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x64, 0x69, 0x73, 0x42, 0x6c, 0x6f, 0x62, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x12, - 0x5f, 0x0a, 0x06, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x45, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x52, 0x65, 0x64, 0x69, 0x73, 0x42, - 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, - 0x12, 0x42, 0x0a, 0x03, 0x74, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x74, 0x6c, 0x73, 0x2e, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x03, 0x74, 0x6c, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x10, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x4a, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x72, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x3c, 0x0a, - 0x0c, 0x64, 0x69, 0x61, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, - 0x64, 0x69, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x3c, 0x0a, 0x0c, 0x72, - 0x65, 0x61, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x72, 0x65, - 0x61, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x3e, 0x0a, 0x0d, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x6d, 0x6f, 0x64, - 0x65, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x22, 0x82, 0x01, 0x0a, 0x1b, 0x48, 0x54, 0x54, 0x50, - 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x49, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x31, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x68, 0x74, 0x74, 0x70, - 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x22, 0xab, 0x02, 0x0a, - 0x1f, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x2f, 0x0a, 0x13, 0x68, 0x61, 0x73, 0x68, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x68, - 0x61, 0x73, 0x68, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x60, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x48, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, - 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x06, 0x73, 0x68, 0x61, - 0x72, 0x64, 0x73, 0x1a, 0x75, 0x0a, 0x05, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x54, 0x0a, 0x07, - 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, - 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xfb, 0x01, 0x0a, 0x29, 0x53, - 0x69, 0x7a, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x69, 0x6e, - 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x05, 0x73, 0x6d, 0x61, 0x6c, - 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, - 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x12, 0x50, 0x0a, 0x05, 0x6c, 0x61, - 0x72, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x65, 0x78, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x85, + 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x5f, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4e, + 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x12, 0x6d, 0x0a, 0x0d, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x66, + 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x11, - 0x63, 0x75, 0x74, 0x6f, 0x66, 0x66, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x75, 0x74, 0x6f, 0x66, 0x66, 0x53, - 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xa9, 0x03, 0x0a, 0x1f, 0x4d, 0x69, 0x72, - 0x72, 0x6f, 0x72, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x57, 0x0a, 0x09, - 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x72, 0x65, 0x61, 0x64, 0x46, 0x61, 0x6c, + 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x7f, 0x0a, 0x13, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x5f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x13, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, + 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x00, 0x52, 0x12, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x78, 0x70, + 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x72, 0x0a, 0x0e, 0x64, 0x65, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, + 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x2e, 0x44, 0x65, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x6e, + 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x64, 0x65, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x12, 0x7c, 0x0a, 0x1b, 0x68, 0x69, + 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x62, 0x61, 0x63, - 0x6b, 0x65, 0x6e, 0x64, 0x41, 0x12, 0x57, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, - 0x5f, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x19, 0x68, + 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x86, 0x01, 0x0a, 0x16, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, + 0x69, 0x6e, 0x67, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x45, 0x78, 0x70, 0x69, 0x72, 0x69, + 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x14, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x45, 0x78, 0x70, 0x69, 0x72, 0x69, 0x6e, + 0x67, 0x12, 0x70, 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x61, 0x6e, 0x61, 0x72, 0x79, + 0x69, 0x6e, 0x67, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x52, 0x65, + 0x61, 0x64, 0x43, 0x61, 0x6e, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0d, 0x72, 0x65, 0x61, 0x64, 0x43, 0x61, 0x6e, 0x61, 0x72, 0x79, + 0x69, 0x6e, 0x67, 0x12, 0x60, 0x0a, 0x0b, 0x7a, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x69, + 0x6e, 0x67, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x5a, 0x49, 0x50, + 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x7a, 0x69, 0x70, 0x52, 0x65, + 0x61, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x60, 0x0a, 0x0b, 0x7a, 0x69, 0x70, 0x5f, 0x77, 0x72, 0x69, + 0x74, 0x69, 0x6e, 0x67, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x5a, + 0x49, 0x50, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x7a, 0x69, 0x70, + 0x57, 0x72, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x67, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x2e, 0x57, 0x69, 0x74, 0x68, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x62, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x12, 0x16, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x42, 0x09, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, + 0x65, 0x6e, 0x64, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, + 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, 0x22, 0xa4, 0x02, 0x0a, 0x22, + 0x52, 0x65, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x73, 0x6c, + 0x6f, 0x77, 0x12, 0x4e, 0x0a, 0x04, 0x66, 0x61, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x66, 0x61, + 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, + 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x52, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x6f, 0x72, 0x22, 0x82, 0x01, 0x0a, 0x1b, 0x48, 0x54, 0x54, 0x50, 0x42, 0x6c, 0x6f, 0x62, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x49, 0x0a, 0x06, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x22, 0xab, 0x02, 0x0a, 0x1f, 0x53, 0x68, 0x61, 0x72, + 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x13, 0x68, + 0x61, 0x73, 0x68, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x68, 0x61, 0x73, 0x68, 0x49, 0x6e, + 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x60, 0x0a, 0x06, + 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x1a, 0x75, + 0x0a, 0x05, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x54, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, + 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x42, 0x12, 0x69, - 0x0a, 0x11, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x5f, 0x74, - 0x6f, 0x5f, 0x62, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, - 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x54, 0x6f, 0x42, 0x12, 0x69, 0x0a, 0x11, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x62, 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, - 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, - 0x42, 0x54, 0x6f, 0x41, 0x22, 0xb6, 0x0c, 0x0a, 0x1c, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, - 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x94, 0x01, 0x0a, 0x1a, 0x6b, 0x65, 0x79, 0x5f, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x5f, 0x6d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x56, 0x2e, 0x62, 0x75, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x77, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xa9, 0x03, 0x0a, 0x1f, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, + 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x57, 0x0a, 0x09, 0x62, 0x61, 0x63, + 0x6b, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, + 0x64, 0x41, 0x12, 0x57, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x5f, 0x62, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, + 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x42, 0x12, 0x69, 0x0a, 0x11, 0x72, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x5f, 0x74, 0x6f, 0x5f, 0x62, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, + 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x52, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x6f, 0x72, 0x41, 0x54, 0x6f, 0x42, 0x12, 0x69, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x62, 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x54, 0x6f, + 0x41, 0x22, 0xb6, 0x0c, 0x0a, 0x1c, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x62, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x94, 0x01, 0x0a, 0x1a, 0x6b, 0x65, 0x79, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x56, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, + 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x6f, 0x63, 0x61, + 0x6c, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x4c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x48, + 0x00, 0x52, 0x16, 0x6b, 0x65, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, + 0x70, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x7b, 0x0a, 0x20, 0x6b, 0x65, 0x79, + 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x70, 0x5f, 0x6f, 0x6e, + 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x1b, 0x6b, 0x65, 0x79, 0x4c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x4f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4f, 0x0a, 0x25, 0x6b, 0x65, 0x79, 0x5f, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x70, 0x5f, 0x6d, 0x61, 0x78, 0x69, 0x6d, + 0x75, 0x6d, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x20, 0x6b, 0x65, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x41, + 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x12, 0x4f, 0x0a, 0x25, 0x6b, 0x65, 0x79, 0x5f, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x70, 0x5f, 0x6d, 0x61, 0x78, 0x69, + 0x6d, 0x75, 0x6d, 0x5f, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x20, 0x6b, 0x65, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x50, 0x75, 0x74, + 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x6c, 0x64, 0x5f, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6f, 0x6c, + 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x1d, + 0x0a, 0x0a, 0x6e, 0x65, 0x77, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x7a, 0x0a, + 0x10, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x69, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, + 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x6f, 0x63, 0x61, + 0x6c, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x49, + 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x48, 0x01, 0x52, 0x0e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x73, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x8a, 0x01, 0x0a, 0x16, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x53, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x4c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, - 0x72, 0x79, 0x48, 0x00, 0x52, 0x16, 0x6b, 0x65, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x7b, 0x0a, 0x20, - 0x6b, 0x65, 0x79, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x70, - 0x5f, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, - 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x1b, 0x6b, 0x65, - 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x4f, 0x6e, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4f, 0x0a, 0x25, 0x6b, 0x65, 0x79, - 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x70, 0x5f, 0x6d, 0x61, - 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, - 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x20, 0x6b, 0x65, 0x79, 0x4c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x47, - 0x65, 0x74, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x12, 0x4f, 0x0a, 0x25, 0x6b, 0x65, - 0x79, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x70, 0x5f, 0x6d, - 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, - 0x70, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x20, 0x6b, 0x65, 0x79, 0x4c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, - 0x50, 0x75, 0x74, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, - 0x6c, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x6f, 0x6c, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x77, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, - 0x12, 0x7a, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x69, 0x6e, 0x5f, 0x6d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x62, 0x75, 0x69, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x4f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x48, + 0x01, 0x52, 0x13, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6a, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x48, 0x01, 0x52, 0x0e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x73, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x8a, 0x01, 0x0a, - 0x16, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x53, 0x2e, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x48, 0x01, 0x52, 0x13, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x6e, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6a, 0x0a, 0x0a, 0x70, 0x65, 0x72, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, 0x2e, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, - 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x1b, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, - 0x68, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x68, 0x69, 0x65, 0x72, - 0x61, 0x72, 0x63, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x1a, 0x32, 0x0a, 0x16, 0x4b, 0x65, 0x79, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, - 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x3a, 0x0a, 0x0e, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x73, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x28, 0x0a, 0x10, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x69, 0x7a, 0x65, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x1a, 0x89, 0x02, 0x0a, 0x13, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, - 0x4f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, - 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x64, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x70, 0x61, - 0x72, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0b, 0x73, 0x70, 0x61, 0x72, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x82, 0x01, 0x0a, - 0x1f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x5f, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, - 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, - 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x1c, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, - 0x74, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x1a, 0x8f, 0x01, 0x0a, 0x0a, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, - 0x12, 0x30, 0x0a, 0x14, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x50, 0x61, - 0x74, 0x68, 0x12, 0x4f, 0x0a, 0x16, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x65, 0x70, - 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x6d, - 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x76, 0x61, 0x6c, 0x42, 0x1a, 0x0a, 0x18, 0x6b, 0x65, 0x79, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x42, - 0x10, 0x0a, 0x0e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, - 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x22, 0xe5, 0x01, - 0x0a, 0x27, 0x45, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x07, 0x62, 0x61, 0x63, - 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x1b, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x69, 0x63, + 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, + 0x68, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x1a, 0x32, 0x0a, 0x16, 0x4b, 0x65, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x07, + 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, + 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x3a, 0x0a, 0x0e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, + 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x28, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x1a, 0x89, 0x02, 0x0a, 0x13, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x6e, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x06, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x70, 0x61, 0x72, 0x65, 0x5f, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, 0x70, + 0x61, 0x72, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x1f, 0x64, 0x61, + 0x74, 0x61, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x64, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x1c, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x1a, 0x8f, + 0x01, 0x0a, 0x0a, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x30, 0x0a, + 0x14, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, + 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x50, 0x61, 0x74, 0x68, 0x12, + 0x4f, 0x0a, 0x16, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, + 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x6d, 0x69, 0x6e, 0x69, + 0x6d, 0x75, 0x6d, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x42, 0x1a, 0x0a, 0x18, 0x6b, 0x65, 0x79, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x42, 0x10, 0x0a, 0x0e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x4a, 0x04, + 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x22, 0xe5, 0x01, 0x0a, 0x27, 0x45, + 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, - 0x64, 0x0a, 0x0f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x61, 0x63, - 0x68, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x63, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, - 0x43, 0x61, 0x63, 0x68, 0x65, 0x22, 0xc5, 0x01, 0x0a, 0x2b, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x42, 0x6c, - 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, - 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, + 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x64, 0x0a, 0x0f, + 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, + 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, + 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0e, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x63, + 0x68, 0x65, 0x22, 0xc5, 0x01, 0x0a, 0x2b, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x6e, + 0x65, 0x73, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x40, 0x0a, 0x1d, 0x6d, - 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x74, 0x72, 0x65, - 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x19, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x54, 0x72, 0x65, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xb5, 0x02, - 0x0a, 0x23, 0x52, 0x65, 0x61, 0x64, 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x42, 0x6c, - 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, - 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, + 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, + 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x40, 0x0a, 0x1d, 0x6d, 0x61, 0x78, 0x69, + 0x6d, 0x75, 0x6d, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x74, 0x72, 0x65, 0x65, 0x5f, 0x73, + 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x19, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x72, 0x65, + 0x65, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xb5, 0x02, 0x0a, 0x23, 0x52, + 0x65, 0x61, 0x64, 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x58, 0x0a, 0x09, 0x73, - 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, - 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x73, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x61, 0x72, 0x79, 0x12, 0x5e, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, + 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, + 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x58, 0x0a, 0x09, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, + 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, + 0x72, 0x79, 0x12, 0x5e, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, + 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x52, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x6f, 0x72, 0x22, 0xd4, 0x03, 0x0a, 0x29, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x8b, 0x01, 0x0a, 0x24, 0x69, 0x6e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x61, 0x62, 0x6c, + 0x65, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x21, 0x69, 0x6e, 0x64, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x58, + 0x0a, 0x0b, 0x61, 0x77, 0x73, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6c, + 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x77, 0x73, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x61, 0x77, + 0x73, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x0a, 0x0b, 0x68, 0x74, 0x74, 0x70, + 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x6b, 0x0a, 0x12, + 0x67, 0x63, 0x70, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x67, 0x63, 0x70, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa1, 0x04, 0x0a, 0x1b, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x6f, 0x72, 0x22, 0xd4, 0x03, 0x0a, 0x29, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x8b, 0x01, 0x0a, 0x24, 0x69, 0x6e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, - 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x21, - 0x69, 0x6e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x12, 0x58, 0x0a, 0x0b, 0x61, 0x77, 0x73, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x05, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x48, 0x00, 0x52, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x4b, 0x0a, 0x06, 0x72, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x5e, 0x0a, 0x06, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x77, 0x73, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0a, 0x61, 0x77, 0x73, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x0a, 0x0b, 0x68, - 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, - 0x6b, 0x0a, 0x12, 0x67, 0x63, 0x70, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x62, 0x75, + 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x51, 0x75, 0x65, 0x75, 0x65, + 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, + 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x04, 0x6e, 0x6f, 0x6f, 0x70, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x04, + 0x6e, 0x6f, 0x6f, 0x70, 0x12, 0x66, 0x0a, 0x0d, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x63, 0x70, 0x2e, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x67, 0x63, 0x70, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa1, 0x04, 0x0a, - 0x1b, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x05, - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x4b, 0x0a, 0x06, - 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x00, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x5e, 0x0a, 0x06, 0x71, 0x75, 0x65, - 0x75, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x51, 0x75, - 0x65, 0x75, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x00, 0x52, 0x06, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x04, 0x6e, 0x6f, 0x6f, - 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, - 0x00, 0x52, 0x04, 0x6e, 0x6f, 0x6f, 0x70, 0x12, 0x66, 0x0a, 0x0d, 0x64, 0x65, 0x64, 0x75, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, - 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, + 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0d, 0x64, + 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x86, 0x01, 0x0a, + 0x14, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x51, 0x2e, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, + 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, - 0x52, 0x0d, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x12, - 0x86, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x51, - 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x48, 0x00, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, - 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x06, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, - 0x22, 0xdd, 0x01, 0x0a, 0x21, 0x51, 0x75, 0x65, 0x75, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, - 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x0f, 0x65, 0x78, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x64, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x61, - 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x0e, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, - 0x22, 0xb5, 0x01, 0x0a, 0x2e, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, - 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, + 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x06, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0xdd, 0x01, + 0x0a, 0x21, 0x51, 0x75, 0x65, 0x75, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x13, 0x6d, 0x61, 0x78, 0x69, 0x6d, - 0x75, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x43, 0x6f, 0x6e, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x22, 0xd5, 0x02, 0x0a, 0x25, 0x44, 0x65, 0x6d, - 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, + 0x6e, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x0f, 0x65, 0x78, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3b, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x2e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x65, + 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x22, 0xb5, 0x01, + 0x0a, 0x2e, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x52, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, + 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x6f, + 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, + 0x62, 0x61, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x13, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, + 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x22, 0xd5, 0x02, 0x0a, 0x25, 0x44, 0x65, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x98, 0x01, 0x0a, 0x16, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x62, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x78, + 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x1a, 0x90, 0x01, 0x0a, 0x19, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, + 0x78, 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, 0x5d, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x44, 0x65, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x78, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x98, 0x01, 0x0a, 0x16, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x62, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, - 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, - 0x6c, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x1a, 0x90, 0x01, - 0x0a, 0x19, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x72, - 0x65, 0x66, 0x69, 0x78, 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, 0x5d, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x2e, 0x44, 0x65, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x78, 0x65, 0x64, 0x42, 0x6c, - 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0xb5, 0x01, 0x0a, 0x24, 0x44, 0x65, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x78, - 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x07, 0x62, 0x61, 0x63, - 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, + 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb5, 0x01, + 0x0a, 0x24, 0x44, 0x65, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x78, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, - 0x37, 0x0a, 0x18, 0x61, 0x64, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x15, 0x61, 0x64, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0xe5, 0x02, 0x0a, 0x2b, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x45, 0x78, 0x70, 0x69, 0x72, 0x69, 0x6e, - 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, - 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, + 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x37, 0x0a, 0x18, + 0x61, 0x64, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, + 0x61, 0x64, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x50, + 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0xe5, 0x02, 0x0a, 0x2b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x45, 0x78, 0x70, 0x69, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x44, - 0x0a, 0x10, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x69, - 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x69, 0x74, 0x79, 0x12, 0x51, 0x0a, 0x17, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x5f, 0x6a, 0x69, 0x74, 0x74, 0x65, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, + 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x44, 0x0a, 0x10, 0x6d, + 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x15, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, - 0x79, 0x4a, 0x69, 0x74, 0x74, 0x65, 0x72, 0x12, 0x47, 0x0a, 0x11, 0x6d, 0x69, 0x6e, 0x69, 0x6d, - 0x75, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 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, 0x10, - 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x22, 0xcf, 0x02, 0x0a, 0x24, 0x52, 0x65, 0x61, 0x64, 0x43, 0x61, 0x6e, 0x61, 0x72, 0x79, 0x69, - 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x0a, 0x06, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, - 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x54, 0x0a, - 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, + 0x52, 0x0f, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, + 0x79, 0x12, 0x51, 0x0a, 0x17, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x69, 0x74, 0x79, 0x5f, 0x6a, 0x69, 0x74, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x6d, + 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x4a, 0x69, + 0x74, 0x74, 0x65, 0x72, 0x12, 0x47, 0x0a, 0x11, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 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, 0x10, 0x6d, 0x69, 0x6e, + 0x69, 0x6d, 0x75, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xcf, 0x02, + 0x0a, 0x24, 0x52, 0x65, 0x61, 0x64, 0x43, 0x61, 0x6e, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x42, + 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, + 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x54, 0x0a, 0x07, 0x72, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, + 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x63, 0x68, + 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x6d, 0x61, + 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x4f, + 0x0a, 0x16, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, + 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x6d, 0x61, 0x78, 0x69, 0x6d, + 0x75, 0x6d, 0x43, 0x61, 0x63, 0x68, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0xb5, 0x01, 0x0a, 0x1a, 0x5a, 0x49, 0x50, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x12, 0x82, 0x01, 0x0a, 0x1f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x78, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1c, 0x64, 0x61, 0x74, 0x61, 0x49, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x22, 0xda, 0x02, 0x0a, 0x21, 0x57, 0x69, 0x74, 0x68, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, + 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x63, - 0x61, 0x63, 0x68, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x10, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, - 0x65, 0x12, 0x4f, 0x0a, 0x16, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x63, - 0x68, 0x65, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x6d, 0x61, - 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x43, 0x61, 0x63, 0x68, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0xb5, 0x01, 0x0a, 0x1a, 0x5a, 0x49, 0x50, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x82, 0x01, 0x0a, 0x1f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x69, - 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3b, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x2e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1c, 0x64, 0x61, - 0x74, 0x61, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x22, 0xda, 0x02, 0x0a, 0x21, 0x57, - 0x69, 0x74, 0x68, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x54, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x62, - 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x68, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, - 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x1a, 0x75, 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, 0x50, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x43, 0x5a, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2f, - 0x62, 0x62, 0x2d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, + 0x65, 0x6e, 0x64, 0x12, 0x68, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, + 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x75, 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, 0x50, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x42, 0x43, 0x5a, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x61, 0x72, 0x6e, 0x2f, 0x62, 0x62, 0x2d, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, + 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -3000,141 +2551,123 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescGZIP() []byte return file_pkg_proto_configuration_blobstore_blobstore_proto_rawDescData } -var file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes = make([]protoimpl.MessageInfo, 31) +var file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes = make([]protoimpl.MessageInfo, 27) var file_pkg_proto_configuration_blobstore_blobstore_proto_goTypes = []interface{}{ (*BlobstoreConfiguration)(nil), // 0: buildbarn.configuration.blobstore.BlobstoreConfiguration (*BlobAccessConfiguration)(nil), // 1: buildbarn.configuration.blobstore.BlobAccessConfiguration (*ReadCachingBlobAccessConfiguration)(nil), // 2: buildbarn.configuration.blobstore.ReadCachingBlobAccessConfiguration - (*ClusteredRedisBlobAccessConfiguration)(nil), // 3: buildbarn.configuration.blobstore.ClusteredRedisBlobAccessConfiguration - (*SingleRedisBlobAccessConfiguration)(nil), // 4: buildbarn.configuration.blobstore.SingleRedisBlobAccessConfiguration - (*RedisBlobAccessConfiguration)(nil), // 5: buildbarn.configuration.blobstore.RedisBlobAccessConfiguration - (*HTTPBlobAccessConfiguration)(nil), // 6: buildbarn.configuration.blobstore.HTTPBlobAccessConfiguration - (*ShardingBlobAccessConfiguration)(nil), // 7: buildbarn.configuration.blobstore.ShardingBlobAccessConfiguration - (*SizeDistinguishingBlobAccessConfiguration)(nil), // 8: buildbarn.configuration.blobstore.SizeDistinguishingBlobAccessConfiguration - (*MirroredBlobAccessConfiguration)(nil), // 9: buildbarn.configuration.blobstore.MirroredBlobAccessConfiguration - (*LocalBlobAccessConfiguration)(nil), // 10: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration - (*ExistenceCachingBlobAccessConfiguration)(nil), // 11: buildbarn.configuration.blobstore.ExistenceCachingBlobAccessConfiguration - (*CompletenessCheckingBlobAccessConfiguration)(nil), // 12: buildbarn.configuration.blobstore.CompletenessCheckingBlobAccessConfiguration - (*ReadFallbackBlobAccessConfiguration)(nil), // 13: buildbarn.configuration.blobstore.ReadFallbackBlobAccessConfiguration - (*ReferenceExpandingBlobAccessConfiguration)(nil), // 14: buildbarn.configuration.blobstore.ReferenceExpandingBlobAccessConfiguration - (*BlobReplicatorConfiguration)(nil), // 15: buildbarn.configuration.blobstore.BlobReplicatorConfiguration - (*QueuedBlobReplicatorConfiguration)(nil), // 16: buildbarn.configuration.blobstore.QueuedBlobReplicatorConfiguration - (*ConcurrencyLimitingBlobReplicatorConfiguration)(nil), // 17: buildbarn.configuration.blobstore.ConcurrencyLimitingBlobReplicatorConfiguration - (*DemultiplexingBlobAccessConfiguration)(nil), // 18: buildbarn.configuration.blobstore.DemultiplexingBlobAccessConfiguration - (*DemultiplexedBlobAccessConfiguration)(nil), // 19: buildbarn.configuration.blobstore.DemultiplexedBlobAccessConfiguration - (*ActionResultExpiringBlobAccessConfiguration)(nil), // 20: buildbarn.configuration.blobstore.ActionResultExpiringBlobAccessConfiguration - (*ReadCanaryingBlobAccessConfiguration)(nil), // 21: buildbarn.configuration.blobstore.ReadCanaryingBlobAccessConfiguration - (*ZIPBlobAccessConfiguration)(nil), // 22: buildbarn.configuration.blobstore.ZIPBlobAccessConfiguration - (*WithLabelsBlobAccessConfiguration)(nil), // 23: buildbarn.configuration.blobstore.WithLabelsBlobAccessConfiguration - (*ShardingBlobAccessConfiguration_Shard)(nil), // 24: buildbarn.configuration.blobstore.ShardingBlobAccessConfiguration.Shard - (*LocalBlobAccessConfiguration_KeyLocationMapInMemory)(nil), // 25: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.KeyLocationMapInMemory - (*LocalBlobAccessConfiguration_BlocksInMemory)(nil), // 26: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.BlocksInMemory - (*LocalBlobAccessConfiguration_BlocksOnBlockDevice)(nil), // 27: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.BlocksOnBlockDevice - (*LocalBlobAccessConfiguration_Persistent)(nil), // 28: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.Persistent - nil, // 29: buildbarn.configuration.blobstore.DemultiplexingBlobAccessConfiguration.InstanceNamePrefixesEntry - nil, // 30: buildbarn.configuration.blobstore.WithLabelsBlobAccessConfiguration.LabelsEntry - (*grpc.ClientConfiguration)(nil), // 31: buildbarn.configuration.grpc.ClientConfiguration - (*status.Status)(nil), // 32: google.rpc.Status - (*durationpb.Duration)(nil), // 33: google.protobuf.Duration - (*tls.ClientConfiguration)(nil), // 34: buildbarn.configuration.tls.ClientConfiguration - (*http.ClientConfiguration)(nil), // 35: buildbarn.configuration.http.ClientConfiguration - (*blockdevice.Configuration)(nil), // 36: buildbarn.configuration.blockdevice.Configuration - (*digest.ExistenceCacheConfiguration)(nil), // 37: buildbarn.configuration.digest.ExistenceCacheConfiguration - (*aws.SessionConfiguration)(nil), // 38: buildbarn.configuration.cloud.aws.SessionConfiguration - (*gcp.ClientOptionsConfiguration)(nil), // 39: buildbarn.configuration.cloud.gcp.ClientOptionsConfiguration - (*emptypb.Empty)(nil), // 40: google.protobuf.Empty - (*timestamppb.Timestamp)(nil), // 41: google.protobuf.Timestamp + (*HTTPBlobAccessConfiguration)(nil), // 3: buildbarn.configuration.blobstore.HTTPBlobAccessConfiguration + (*ShardingBlobAccessConfiguration)(nil), // 4: buildbarn.configuration.blobstore.ShardingBlobAccessConfiguration + (*MirroredBlobAccessConfiguration)(nil), // 5: buildbarn.configuration.blobstore.MirroredBlobAccessConfiguration + (*LocalBlobAccessConfiguration)(nil), // 6: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration + (*ExistenceCachingBlobAccessConfiguration)(nil), // 7: buildbarn.configuration.blobstore.ExistenceCachingBlobAccessConfiguration + (*CompletenessCheckingBlobAccessConfiguration)(nil), // 8: buildbarn.configuration.blobstore.CompletenessCheckingBlobAccessConfiguration + (*ReadFallbackBlobAccessConfiguration)(nil), // 9: buildbarn.configuration.blobstore.ReadFallbackBlobAccessConfiguration + (*ReferenceExpandingBlobAccessConfiguration)(nil), // 10: buildbarn.configuration.blobstore.ReferenceExpandingBlobAccessConfiguration + (*BlobReplicatorConfiguration)(nil), // 11: buildbarn.configuration.blobstore.BlobReplicatorConfiguration + (*QueuedBlobReplicatorConfiguration)(nil), // 12: buildbarn.configuration.blobstore.QueuedBlobReplicatorConfiguration + (*ConcurrencyLimitingBlobReplicatorConfiguration)(nil), // 13: buildbarn.configuration.blobstore.ConcurrencyLimitingBlobReplicatorConfiguration + (*DemultiplexingBlobAccessConfiguration)(nil), // 14: buildbarn.configuration.blobstore.DemultiplexingBlobAccessConfiguration + (*DemultiplexedBlobAccessConfiguration)(nil), // 15: buildbarn.configuration.blobstore.DemultiplexedBlobAccessConfiguration + (*ActionResultExpiringBlobAccessConfiguration)(nil), // 16: buildbarn.configuration.blobstore.ActionResultExpiringBlobAccessConfiguration + (*ReadCanaryingBlobAccessConfiguration)(nil), // 17: buildbarn.configuration.blobstore.ReadCanaryingBlobAccessConfiguration + (*ZIPBlobAccessConfiguration)(nil), // 18: buildbarn.configuration.blobstore.ZIPBlobAccessConfiguration + (*WithLabelsBlobAccessConfiguration)(nil), // 19: buildbarn.configuration.blobstore.WithLabelsBlobAccessConfiguration + (*ShardingBlobAccessConfiguration_Shard)(nil), // 20: buildbarn.configuration.blobstore.ShardingBlobAccessConfiguration.Shard + (*LocalBlobAccessConfiguration_KeyLocationMapInMemory)(nil), // 21: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.KeyLocationMapInMemory + (*LocalBlobAccessConfiguration_BlocksInMemory)(nil), // 22: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.BlocksInMemory + (*LocalBlobAccessConfiguration_BlocksOnBlockDevice)(nil), // 23: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.BlocksOnBlockDevice + (*LocalBlobAccessConfiguration_Persistent)(nil), // 24: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.Persistent + nil, // 25: buildbarn.configuration.blobstore.DemultiplexingBlobAccessConfiguration.InstanceNamePrefixesEntry + nil, // 26: buildbarn.configuration.blobstore.WithLabelsBlobAccessConfiguration.LabelsEntry + (*grpc.ClientConfiguration)(nil), // 27: buildbarn.configuration.grpc.ClientConfiguration + (*status.Status)(nil), // 28: google.rpc.Status + (*http.ClientConfiguration)(nil), // 29: buildbarn.configuration.http.ClientConfiguration + (*blockdevice.Configuration)(nil), // 30: buildbarn.configuration.blockdevice.Configuration + (*digest.ExistenceCacheConfiguration)(nil), // 31: buildbarn.configuration.digest.ExistenceCacheConfiguration + (*aws.SessionConfiguration)(nil), // 32: buildbarn.configuration.cloud.aws.SessionConfiguration + (*gcp.ClientOptionsConfiguration)(nil), // 33: buildbarn.configuration.cloud.gcp.ClientOptionsConfiguration + (*emptypb.Empty)(nil), // 34: google.protobuf.Empty + (*durationpb.Duration)(nil), // 35: google.protobuf.Duration + (*timestamppb.Timestamp)(nil), // 36: google.protobuf.Timestamp } var file_pkg_proto_configuration_blobstore_blobstore_proto_depIdxs = []int32{ 1, // 0: buildbarn.configuration.blobstore.BlobstoreConfiguration.content_addressable_storage:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration 1, // 1: buildbarn.configuration.blobstore.BlobstoreConfiguration.action_cache:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration - 5, // 2: buildbarn.configuration.blobstore.BlobAccessConfiguration.redis:type_name -> buildbarn.configuration.blobstore.RedisBlobAccessConfiguration - 6, // 3: buildbarn.configuration.blobstore.BlobAccessConfiguration.http:type_name -> buildbarn.configuration.blobstore.HTTPBlobAccessConfiguration - 2, // 4: buildbarn.configuration.blobstore.BlobAccessConfiguration.read_caching:type_name -> buildbarn.configuration.blobstore.ReadCachingBlobAccessConfiguration - 8, // 5: buildbarn.configuration.blobstore.BlobAccessConfiguration.size_distinguishing:type_name -> buildbarn.configuration.blobstore.SizeDistinguishingBlobAccessConfiguration - 31, // 6: buildbarn.configuration.blobstore.BlobAccessConfiguration.grpc:type_name -> buildbarn.configuration.grpc.ClientConfiguration - 32, // 7: buildbarn.configuration.blobstore.BlobAccessConfiguration.error:type_name -> google.rpc.Status - 7, // 8: buildbarn.configuration.blobstore.BlobAccessConfiguration.sharding:type_name -> buildbarn.configuration.blobstore.ShardingBlobAccessConfiguration - 9, // 9: buildbarn.configuration.blobstore.BlobAccessConfiguration.mirrored:type_name -> buildbarn.configuration.blobstore.MirroredBlobAccessConfiguration - 10, // 10: buildbarn.configuration.blobstore.BlobAccessConfiguration.local:type_name -> buildbarn.configuration.blobstore.LocalBlobAccessConfiguration - 11, // 11: buildbarn.configuration.blobstore.BlobAccessConfiguration.existence_caching:type_name -> buildbarn.configuration.blobstore.ExistenceCachingBlobAccessConfiguration - 12, // 12: buildbarn.configuration.blobstore.BlobAccessConfiguration.completeness_checking:type_name -> buildbarn.configuration.blobstore.CompletenessCheckingBlobAccessConfiguration - 13, // 13: buildbarn.configuration.blobstore.BlobAccessConfiguration.read_fallback:type_name -> buildbarn.configuration.blobstore.ReadFallbackBlobAccessConfiguration - 14, // 14: buildbarn.configuration.blobstore.BlobAccessConfiguration.reference_expanding:type_name -> buildbarn.configuration.blobstore.ReferenceExpandingBlobAccessConfiguration - 18, // 15: buildbarn.configuration.blobstore.BlobAccessConfiguration.demultiplexing:type_name -> buildbarn.configuration.blobstore.DemultiplexingBlobAccessConfiguration - 1, // 16: buildbarn.configuration.blobstore.BlobAccessConfiguration.hierarchical_instance_names:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration - 20, // 17: buildbarn.configuration.blobstore.BlobAccessConfiguration.action_result_expiring:type_name -> buildbarn.configuration.blobstore.ActionResultExpiringBlobAccessConfiguration - 21, // 18: buildbarn.configuration.blobstore.BlobAccessConfiguration.read_canarying:type_name -> buildbarn.configuration.blobstore.ReadCanaryingBlobAccessConfiguration - 22, // 19: buildbarn.configuration.blobstore.BlobAccessConfiguration.zip_reading:type_name -> buildbarn.configuration.blobstore.ZIPBlobAccessConfiguration - 22, // 20: buildbarn.configuration.blobstore.BlobAccessConfiguration.zip_writing:type_name -> buildbarn.configuration.blobstore.ZIPBlobAccessConfiguration - 23, // 21: buildbarn.configuration.blobstore.BlobAccessConfiguration.with_labels:type_name -> buildbarn.configuration.blobstore.WithLabelsBlobAccessConfiguration - 1, // 22: buildbarn.configuration.blobstore.ReadCachingBlobAccessConfiguration.slow:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration - 1, // 23: buildbarn.configuration.blobstore.ReadCachingBlobAccessConfiguration.fast:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration - 15, // 24: buildbarn.configuration.blobstore.ReadCachingBlobAccessConfiguration.replicator:type_name -> buildbarn.configuration.blobstore.BlobReplicatorConfiguration - 33, // 25: buildbarn.configuration.blobstore.ClusteredRedisBlobAccessConfiguration.minimum_retry_backoff:type_name -> google.protobuf.Duration - 33, // 26: buildbarn.configuration.blobstore.ClusteredRedisBlobAccessConfiguration.maximum_retry_backoff:type_name -> google.protobuf.Duration - 3, // 27: buildbarn.configuration.blobstore.RedisBlobAccessConfiguration.clustered:type_name -> buildbarn.configuration.blobstore.ClusteredRedisBlobAccessConfiguration - 4, // 28: buildbarn.configuration.blobstore.RedisBlobAccessConfiguration.single:type_name -> buildbarn.configuration.blobstore.SingleRedisBlobAccessConfiguration - 34, // 29: buildbarn.configuration.blobstore.RedisBlobAccessConfiguration.tls:type_name -> buildbarn.configuration.tls.ClientConfiguration - 33, // 30: buildbarn.configuration.blobstore.RedisBlobAccessConfiguration.replication_timeout:type_name -> google.protobuf.Duration - 33, // 31: buildbarn.configuration.blobstore.RedisBlobAccessConfiguration.dial_timeout:type_name -> google.protobuf.Duration - 33, // 32: buildbarn.configuration.blobstore.RedisBlobAccessConfiguration.read_timeout:type_name -> google.protobuf.Duration - 33, // 33: buildbarn.configuration.blobstore.RedisBlobAccessConfiguration.write_timeout:type_name -> google.protobuf.Duration - 35, // 34: buildbarn.configuration.blobstore.HTTPBlobAccessConfiguration.client:type_name -> buildbarn.configuration.http.ClientConfiguration - 24, // 35: buildbarn.configuration.blobstore.ShardingBlobAccessConfiguration.shards:type_name -> buildbarn.configuration.blobstore.ShardingBlobAccessConfiguration.Shard - 1, // 36: buildbarn.configuration.blobstore.SizeDistinguishingBlobAccessConfiguration.small:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration - 1, // 37: buildbarn.configuration.blobstore.SizeDistinguishingBlobAccessConfiguration.large:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration - 1, // 38: buildbarn.configuration.blobstore.MirroredBlobAccessConfiguration.backend_a:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration - 1, // 39: buildbarn.configuration.blobstore.MirroredBlobAccessConfiguration.backend_b:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration - 15, // 40: buildbarn.configuration.blobstore.MirroredBlobAccessConfiguration.replicator_a_to_b:type_name -> buildbarn.configuration.blobstore.BlobReplicatorConfiguration - 15, // 41: buildbarn.configuration.blobstore.MirroredBlobAccessConfiguration.replicator_b_to_a:type_name -> buildbarn.configuration.blobstore.BlobReplicatorConfiguration - 25, // 42: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.key_location_map_in_memory:type_name -> buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.KeyLocationMapInMemory - 36, // 43: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.key_location_map_on_block_device:type_name -> buildbarn.configuration.blockdevice.Configuration - 26, // 44: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.blocks_in_memory:type_name -> buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.BlocksInMemory - 27, // 45: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.blocks_on_block_device:type_name -> buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.BlocksOnBlockDevice - 28, // 46: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.persistent:type_name -> buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.Persistent - 1, // 47: buildbarn.configuration.blobstore.ExistenceCachingBlobAccessConfiguration.backend:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration - 37, // 48: buildbarn.configuration.blobstore.ExistenceCachingBlobAccessConfiguration.existence_cache:type_name -> buildbarn.configuration.digest.ExistenceCacheConfiguration - 1, // 49: buildbarn.configuration.blobstore.CompletenessCheckingBlobAccessConfiguration.backend:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration - 1, // 50: buildbarn.configuration.blobstore.ReadFallbackBlobAccessConfiguration.primary:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration - 1, // 51: buildbarn.configuration.blobstore.ReadFallbackBlobAccessConfiguration.secondary:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration - 15, // 52: buildbarn.configuration.blobstore.ReadFallbackBlobAccessConfiguration.replicator:type_name -> buildbarn.configuration.blobstore.BlobReplicatorConfiguration - 1, // 53: buildbarn.configuration.blobstore.ReferenceExpandingBlobAccessConfiguration.indirect_content_addressable_storage:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration - 38, // 54: buildbarn.configuration.blobstore.ReferenceExpandingBlobAccessConfiguration.aws_session:type_name -> buildbarn.configuration.cloud.aws.SessionConfiguration - 35, // 55: buildbarn.configuration.blobstore.ReferenceExpandingBlobAccessConfiguration.http_client:type_name -> buildbarn.configuration.http.ClientConfiguration - 39, // 56: buildbarn.configuration.blobstore.ReferenceExpandingBlobAccessConfiguration.gcp_client_options:type_name -> buildbarn.configuration.cloud.gcp.ClientOptionsConfiguration - 40, // 57: buildbarn.configuration.blobstore.BlobReplicatorConfiguration.local:type_name -> google.protobuf.Empty - 31, // 58: buildbarn.configuration.blobstore.BlobReplicatorConfiguration.remote:type_name -> buildbarn.configuration.grpc.ClientConfiguration - 16, // 59: buildbarn.configuration.blobstore.BlobReplicatorConfiguration.queued:type_name -> buildbarn.configuration.blobstore.QueuedBlobReplicatorConfiguration - 40, // 60: buildbarn.configuration.blobstore.BlobReplicatorConfiguration.noop:type_name -> google.protobuf.Empty - 15, // 61: buildbarn.configuration.blobstore.BlobReplicatorConfiguration.deduplicating:type_name -> buildbarn.configuration.blobstore.BlobReplicatorConfiguration - 17, // 62: buildbarn.configuration.blobstore.BlobReplicatorConfiguration.concurrency_limiting:type_name -> buildbarn.configuration.blobstore.ConcurrencyLimitingBlobReplicatorConfiguration - 15, // 63: buildbarn.configuration.blobstore.QueuedBlobReplicatorConfiguration.base:type_name -> buildbarn.configuration.blobstore.BlobReplicatorConfiguration - 37, // 64: buildbarn.configuration.blobstore.QueuedBlobReplicatorConfiguration.existence_cache:type_name -> buildbarn.configuration.digest.ExistenceCacheConfiguration - 15, // 65: buildbarn.configuration.blobstore.ConcurrencyLimitingBlobReplicatorConfiguration.base:type_name -> buildbarn.configuration.blobstore.BlobReplicatorConfiguration - 29, // 66: buildbarn.configuration.blobstore.DemultiplexingBlobAccessConfiguration.instance_name_prefixes:type_name -> buildbarn.configuration.blobstore.DemultiplexingBlobAccessConfiguration.InstanceNamePrefixesEntry - 1, // 67: buildbarn.configuration.blobstore.DemultiplexedBlobAccessConfiguration.backend:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration - 1, // 68: buildbarn.configuration.blobstore.ActionResultExpiringBlobAccessConfiguration.backend:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration - 33, // 69: buildbarn.configuration.blobstore.ActionResultExpiringBlobAccessConfiguration.minimum_validity:type_name -> google.protobuf.Duration - 33, // 70: buildbarn.configuration.blobstore.ActionResultExpiringBlobAccessConfiguration.maximum_validity_jitter:type_name -> google.protobuf.Duration - 41, // 71: buildbarn.configuration.blobstore.ActionResultExpiringBlobAccessConfiguration.minimum_timestamp:type_name -> google.protobuf.Timestamp - 1, // 72: buildbarn.configuration.blobstore.ReadCanaryingBlobAccessConfiguration.source:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration - 1, // 73: buildbarn.configuration.blobstore.ReadCanaryingBlobAccessConfiguration.replica:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration - 33, // 74: buildbarn.configuration.blobstore.ReadCanaryingBlobAccessConfiguration.maximum_cache_duration:type_name -> google.protobuf.Duration - 37, // 75: buildbarn.configuration.blobstore.ZIPBlobAccessConfiguration.data_integrity_validation_cache:type_name -> buildbarn.configuration.digest.ExistenceCacheConfiguration - 1, // 76: buildbarn.configuration.blobstore.WithLabelsBlobAccessConfiguration.backend:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration - 30, // 77: buildbarn.configuration.blobstore.WithLabelsBlobAccessConfiguration.labels:type_name -> buildbarn.configuration.blobstore.WithLabelsBlobAccessConfiguration.LabelsEntry - 1, // 78: buildbarn.configuration.blobstore.ShardingBlobAccessConfiguration.Shard.backend:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration - 36, // 79: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.BlocksOnBlockDevice.source:type_name -> buildbarn.configuration.blockdevice.Configuration - 37, // 80: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.BlocksOnBlockDevice.data_integrity_validation_cache:type_name -> buildbarn.configuration.digest.ExistenceCacheConfiguration - 33, // 81: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.Persistent.minimum_epoch_interval:type_name -> google.protobuf.Duration - 19, // 82: buildbarn.configuration.blobstore.DemultiplexingBlobAccessConfiguration.InstanceNamePrefixesEntry.value:type_name -> buildbarn.configuration.blobstore.DemultiplexedBlobAccessConfiguration - 1, // 83: buildbarn.configuration.blobstore.WithLabelsBlobAccessConfiguration.LabelsEntry.value:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration - 84, // [84:84] is the sub-list for method output_type - 84, // [84:84] is the sub-list for method input_type - 84, // [84:84] is the sub-list for extension type_name - 84, // [84:84] is the sub-list for extension extendee - 0, // [0:84] is the sub-list for field type_name + 3, // 2: buildbarn.configuration.blobstore.BlobAccessConfiguration.http:type_name -> buildbarn.configuration.blobstore.HTTPBlobAccessConfiguration + 2, // 3: buildbarn.configuration.blobstore.BlobAccessConfiguration.read_caching:type_name -> buildbarn.configuration.blobstore.ReadCachingBlobAccessConfiguration + 27, // 4: buildbarn.configuration.blobstore.BlobAccessConfiguration.grpc:type_name -> buildbarn.configuration.grpc.ClientConfiguration + 28, // 5: buildbarn.configuration.blobstore.BlobAccessConfiguration.error:type_name -> google.rpc.Status + 4, // 6: buildbarn.configuration.blobstore.BlobAccessConfiguration.sharding:type_name -> buildbarn.configuration.blobstore.ShardingBlobAccessConfiguration + 5, // 7: buildbarn.configuration.blobstore.BlobAccessConfiguration.mirrored:type_name -> buildbarn.configuration.blobstore.MirroredBlobAccessConfiguration + 6, // 8: buildbarn.configuration.blobstore.BlobAccessConfiguration.local:type_name -> buildbarn.configuration.blobstore.LocalBlobAccessConfiguration + 7, // 9: buildbarn.configuration.blobstore.BlobAccessConfiguration.existence_caching:type_name -> buildbarn.configuration.blobstore.ExistenceCachingBlobAccessConfiguration + 8, // 10: buildbarn.configuration.blobstore.BlobAccessConfiguration.completeness_checking:type_name -> buildbarn.configuration.blobstore.CompletenessCheckingBlobAccessConfiguration + 9, // 11: buildbarn.configuration.blobstore.BlobAccessConfiguration.read_fallback:type_name -> buildbarn.configuration.blobstore.ReadFallbackBlobAccessConfiguration + 10, // 12: buildbarn.configuration.blobstore.BlobAccessConfiguration.reference_expanding:type_name -> buildbarn.configuration.blobstore.ReferenceExpandingBlobAccessConfiguration + 14, // 13: buildbarn.configuration.blobstore.BlobAccessConfiguration.demultiplexing:type_name -> buildbarn.configuration.blobstore.DemultiplexingBlobAccessConfiguration + 1, // 14: buildbarn.configuration.blobstore.BlobAccessConfiguration.hierarchical_instance_names:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration + 16, // 15: buildbarn.configuration.blobstore.BlobAccessConfiguration.action_result_expiring:type_name -> buildbarn.configuration.blobstore.ActionResultExpiringBlobAccessConfiguration + 17, // 16: buildbarn.configuration.blobstore.BlobAccessConfiguration.read_canarying:type_name -> buildbarn.configuration.blobstore.ReadCanaryingBlobAccessConfiguration + 18, // 17: buildbarn.configuration.blobstore.BlobAccessConfiguration.zip_reading:type_name -> buildbarn.configuration.blobstore.ZIPBlobAccessConfiguration + 18, // 18: buildbarn.configuration.blobstore.BlobAccessConfiguration.zip_writing:type_name -> buildbarn.configuration.blobstore.ZIPBlobAccessConfiguration + 19, // 19: buildbarn.configuration.blobstore.BlobAccessConfiguration.with_labels:type_name -> buildbarn.configuration.blobstore.WithLabelsBlobAccessConfiguration + 1, // 20: buildbarn.configuration.blobstore.ReadCachingBlobAccessConfiguration.slow:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration + 1, // 21: buildbarn.configuration.blobstore.ReadCachingBlobAccessConfiguration.fast:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration + 11, // 22: buildbarn.configuration.blobstore.ReadCachingBlobAccessConfiguration.replicator:type_name -> buildbarn.configuration.blobstore.BlobReplicatorConfiguration + 29, // 23: buildbarn.configuration.blobstore.HTTPBlobAccessConfiguration.client:type_name -> buildbarn.configuration.http.ClientConfiguration + 20, // 24: buildbarn.configuration.blobstore.ShardingBlobAccessConfiguration.shards:type_name -> buildbarn.configuration.blobstore.ShardingBlobAccessConfiguration.Shard + 1, // 25: buildbarn.configuration.blobstore.MirroredBlobAccessConfiguration.backend_a:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration + 1, // 26: buildbarn.configuration.blobstore.MirroredBlobAccessConfiguration.backend_b:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration + 11, // 27: buildbarn.configuration.blobstore.MirroredBlobAccessConfiguration.replicator_a_to_b:type_name -> buildbarn.configuration.blobstore.BlobReplicatorConfiguration + 11, // 28: buildbarn.configuration.blobstore.MirroredBlobAccessConfiguration.replicator_b_to_a:type_name -> buildbarn.configuration.blobstore.BlobReplicatorConfiguration + 21, // 29: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.key_location_map_in_memory:type_name -> buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.KeyLocationMapInMemory + 30, // 30: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.key_location_map_on_block_device:type_name -> buildbarn.configuration.blockdevice.Configuration + 22, // 31: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.blocks_in_memory:type_name -> buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.BlocksInMemory + 23, // 32: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.blocks_on_block_device:type_name -> buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.BlocksOnBlockDevice + 24, // 33: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.persistent:type_name -> buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.Persistent + 1, // 34: buildbarn.configuration.blobstore.ExistenceCachingBlobAccessConfiguration.backend:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration + 31, // 35: buildbarn.configuration.blobstore.ExistenceCachingBlobAccessConfiguration.existence_cache:type_name -> buildbarn.configuration.digest.ExistenceCacheConfiguration + 1, // 36: buildbarn.configuration.blobstore.CompletenessCheckingBlobAccessConfiguration.backend:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration + 1, // 37: buildbarn.configuration.blobstore.ReadFallbackBlobAccessConfiguration.primary:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration + 1, // 38: buildbarn.configuration.blobstore.ReadFallbackBlobAccessConfiguration.secondary:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration + 11, // 39: buildbarn.configuration.blobstore.ReadFallbackBlobAccessConfiguration.replicator:type_name -> buildbarn.configuration.blobstore.BlobReplicatorConfiguration + 1, // 40: buildbarn.configuration.blobstore.ReferenceExpandingBlobAccessConfiguration.indirect_content_addressable_storage:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration + 32, // 41: buildbarn.configuration.blobstore.ReferenceExpandingBlobAccessConfiguration.aws_session:type_name -> buildbarn.configuration.cloud.aws.SessionConfiguration + 29, // 42: buildbarn.configuration.blobstore.ReferenceExpandingBlobAccessConfiguration.http_client:type_name -> buildbarn.configuration.http.ClientConfiguration + 33, // 43: buildbarn.configuration.blobstore.ReferenceExpandingBlobAccessConfiguration.gcp_client_options:type_name -> buildbarn.configuration.cloud.gcp.ClientOptionsConfiguration + 34, // 44: buildbarn.configuration.blobstore.BlobReplicatorConfiguration.local:type_name -> google.protobuf.Empty + 27, // 45: buildbarn.configuration.blobstore.BlobReplicatorConfiguration.remote:type_name -> buildbarn.configuration.grpc.ClientConfiguration + 12, // 46: buildbarn.configuration.blobstore.BlobReplicatorConfiguration.queued:type_name -> buildbarn.configuration.blobstore.QueuedBlobReplicatorConfiguration + 34, // 47: buildbarn.configuration.blobstore.BlobReplicatorConfiguration.noop:type_name -> google.protobuf.Empty + 11, // 48: buildbarn.configuration.blobstore.BlobReplicatorConfiguration.deduplicating:type_name -> buildbarn.configuration.blobstore.BlobReplicatorConfiguration + 13, // 49: buildbarn.configuration.blobstore.BlobReplicatorConfiguration.concurrency_limiting:type_name -> buildbarn.configuration.blobstore.ConcurrencyLimitingBlobReplicatorConfiguration + 11, // 50: buildbarn.configuration.blobstore.QueuedBlobReplicatorConfiguration.base:type_name -> buildbarn.configuration.blobstore.BlobReplicatorConfiguration + 31, // 51: buildbarn.configuration.blobstore.QueuedBlobReplicatorConfiguration.existence_cache:type_name -> buildbarn.configuration.digest.ExistenceCacheConfiguration + 11, // 52: buildbarn.configuration.blobstore.ConcurrencyLimitingBlobReplicatorConfiguration.base:type_name -> buildbarn.configuration.blobstore.BlobReplicatorConfiguration + 25, // 53: buildbarn.configuration.blobstore.DemultiplexingBlobAccessConfiguration.instance_name_prefixes:type_name -> buildbarn.configuration.blobstore.DemultiplexingBlobAccessConfiguration.InstanceNamePrefixesEntry + 1, // 54: buildbarn.configuration.blobstore.DemultiplexedBlobAccessConfiguration.backend:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration + 1, // 55: buildbarn.configuration.blobstore.ActionResultExpiringBlobAccessConfiguration.backend:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration + 35, // 56: buildbarn.configuration.blobstore.ActionResultExpiringBlobAccessConfiguration.minimum_validity:type_name -> google.protobuf.Duration + 35, // 57: buildbarn.configuration.blobstore.ActionResultExpiringBlobAccessConfiguration.maximum_validity_jitter:type_name -> google.protobuf.Duration + 36, // 58: buildbarn.configuration.blobstore.ActionResultExpiringBlobAccessConfiguration.minimum_timestamp:type_name -> google.protobuf.Timestamp + 1, // 59: buildbarn.configuration.blobstore.ReadCanaryingBlobAccessConfiguration.source:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration + 1, // 60: buildbarn.configuration.blobstore.ReadCanaryingBlobAccessConfiguration.replica:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration + 35, // 61: buildbarn.configuration.blobstore.ReadCanaryingBlobAccessConfiguration.maximum_cache_duration:type_name -> google.protobuf.Duration + 31, // 62: buildbarn.configuration.blobstore.ZIPBlobAccessConfiguration.data_integrity_validation_cache:type_name -> buildbarn.configuration.digest.ExistenceCacheConfiguration + 1, // 63: buildbarn.configuration.blobstore.WithLabelsBlobAccessConfiguration.backend:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration + 26, // 64: buildbarn.configuration.blobstore.WithLabelsBlobAccessConfiguration.labels:type_name -> buildbarn.configuration.blobstore.WithLabelsBlobAccessConfiguration.LabelsEntry + 1, // 65: buildbarn.configuration.blobstore.ShardingBlobAccessConfiguration.Shard.backend:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration + 30, // 66: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.BlocksOnBlockDevice.source:type_name -> buildbarn.configuration.blockdevice.Configuration + 31, // 67: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.BlocksOnBlockDevice.data_integrity_validation_cache:type_name -> buildbarn.configuration.digest.ExistenceCacheConfiguration + 35, // 68: buildbarn.configuration.blobstore.LocalBlobAccessConfiguration.Persistent.minimum_epoch_interval:type_name -> google.protobuf.Duration + 15, // 69: buildbarn.configuration.blobstore.DemultiplexingBlobAccessConfiguration.InstanceNamePrefixesEntry.value:type_name -> buildbarn.configuration.blobstore.DemultiplexedBlobAccessConfiguration + 1, // 70: buildbarn.configuration.blobstore.WithLabelsBlobAccessConfiguration.LabelsEntry.value:type_name -> buildbarn.configuration.blobstore.BlobAccessConfiguration + 71, // [71:71] is the sub-list for method output_type + 71, // [71:71] is the sub-list for method input_type + 71, // [71:71] is the sub-list for extension type_name + 71, // [71:71] is the sub-list for extension extendee + 0, // [0:71] is the sub-list for field type_name } func init() { file_pkg_proto_configuration_blobstore_blobstore_proto_init() } @@ -3180,42 +2713,6 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { } } file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusteredRedisBlobAccessConfiguration); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SingleRedisBlobAccessConfiguration); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RedisBlobAccessConfiguration); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HTTPBlobAccessConfiguration); i { case 0: return &v.state @@ -3227,7 +2724,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ShardingBlobAccessConfiguration); i { case 0: return &v.state @@ -3239,19 +2736,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SizeDistinguishingBlobAccessConfiguration); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MirroredBlobAccessConfiguration); i { case 0: return &v.state @@ -3263,7 +2748,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LocalBlobAccessConfiguration); i { case 0: return &v.state @@ -3275,7 +2760,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExistenceCachingBlobAccessConfiguration); i { case 0: return &v.state @@ -3287,7 +2772,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CompletenessCheckingBlobAccessConfiguration); i { case 0: return &v.state @@ -3299,7 +2784,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReadFallbackBlobAccessConfiguration); i { case 0: return &v.state @@ -3311,7 +2796,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReferenceExpandingBlobAccessConfiguration); i { case 0: return &v.state @@ -3323,7 +2808,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BlobReplicatorConfiguration); i { case 0: return &v.state @@ -3335,7 +2820,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QueuedBlobReplicatorConfiguration); i { case 0: return &v.state @@ -3347,7 +2832,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConcurrencyLimitingBlobReplicatorConfiguration); i { case 0: return &v.state @@ -3359,7 +2844,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DemultiplexingBlobAccessConfiguration); i { case 0: return &v.state @@ -3371,7 +2856,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DemultiplexedBlobAccessConfiguration); i { case 0: return &v.state @@ -3383,7 +2868,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ActionResultExpiringBlobAccessConfiguration); i { case 0: return &v.state @@ -3395,7 +2880,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReadCanaryingBlobAccessConfiguration); i { case 0: return &v.state @@ -3407,7 +2892,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ZIPBlobAccessConfiguration); i { case 0: return &v.state @@ -3419,7 +2904,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WithLabelsBlobAccessConfiguration); i { case 0: return &v.state @@ -3431,7 +2916,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ShardingBlobAccessConfiguration_Shard); i { case 0: return &v.state @@ -3443,7 +2928,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LocalBlobAccessConfiguration_KeyLocationMapInMemory); i { case 0: return &v.state @@ -3455,7 +2940,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LocalBlobAccessConfiguration_BlocksInMemory); i { case 0: return &v.state @@ -3467,7 +2952,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LocalBlobAccessConfiguration_BlocksOnBlockDevice); i { case 0: return &v.state @@ -3479,7 +2964,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { return nil } } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LocalBlobAccessConfiguration_Persistent); i { case 0: return &v.state @@ -3493,10 +2978,8 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { } } file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[1].OneofWrappers = []interface{}{ - (*BlobAccessConfiguration_Redis)(nil), (*BlobAccessConfiguration_Http)(nil), (*BlobAccessConfiguration_ReadCaching)(nil), - (*BlobAccessConfiguration_SizeDistinguishing)(nil), (*BlobAccessConfiguration_Grpc)(nil), (*BlobAccessConfiguration_Error)(nil), (*BlobAccessConfiguration_Sharding)(nil), @@ -3515,17 +2998,13 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { (*BlobAccessConfiguration_WithLabels)(nil), (*BlobAccessConfiguration_Label)(nil), } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[5].OneofWrappers = []interface{}{ - (*RedisBlobAccessConfiguration_Clustered)(nil), - (*RedisBlobAccessConfiguration_Single)(nil), - } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[10].OneofWrappers = []interface{}{ + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[6].OneofWrappers = []interface{}{ (*LocalBlobAccessConfiguration_KeyLocationMapInMemory_)(nil), (*LocalBlobAccessConfiguration_KeyLocationMapOnBlockDevice)(nil), (*LocalBlobAccessConfiguration_BlocksInMemory_)(nil), (*LocalBlobAccessConfiguration_BlocksOnBlockDevice_)(nil), } - file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[15].OneofWrappers = []interface{}{ + file_pkg_proto_configuration_blobstore_blobstore_proto_msgTypes[11].OneofWrappers = []interface{}{ (*BlobReplicatorConfiguration_Local)(nil), (*BlobReplicatorConfiguration_Remote)(nil), (*BlobReplicatorConfiguration_Queued)(nil), @@ -3539,7 +3018,7 @@ func file_pkg_proto_configuration_blobstore_blobstore_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pkg_proto_configuration_blobstore_blobstore_proto_rawDesc, NumEnums: 0, - NumMessages: 31, + NumMessages: 27, NumExtensions: 0, NumServices: 0, }, diff --git a/pkg/proto/configuration/blobstore/blobstore.proto b/pkg/proto/configuration/blobstore/blobstore.proto index 8c277469..029aafb1 100644 --- a/pkg/proto/configuration/blobstore/blobstore.proto +++ b/pkg/proto/configuration/blobstore/blobstore.proto @@ -12,7 +12,6 @@ import "pkg/proto/configuration/cloud/gcp/gcp.proto"; import "pkg/proto/configuration/digest/digest.proto"; import "pkg/proto/configuration/grpc/grpc.proto"; import "pkg/proto/configuration/http/http.proto"; -import "pkg/proto/configuration/tls/tls.proto"; option go_package = "github.com/buildbarn/bb-storage/pkg/proto/configuration/blobstore"; @@ -27,9 +26,6 @@ message BlobstoreConfiguration { message BlobAccessConfiguration { oneof backend { - // Read objects from/write objects to a Redis server. - RedisBlobAccessConfiguration redis = 2; - // Read objects from/write objects to a server that supports // Bazel's HTTP caching protocol. HTTPBlobAccessConfiguration http = 3; @@ -38,9 +34,6 @@ message BlobAccessConfiguration { // local storage backend. ReadCachingBlobAccessConfiguration read_caching = 4; - // Split up objects across two storage backends by digest size. - SizeDistinguishingBlobAccessConfiguration size_distinguishing = 5; - // Read objects from/write objects to a GRPC service that // implements the remote execution protocol. buildbarn.configuration.grpc.ClientConfiguration grpc = 7; @@ -207,6 +200,17 @@ message BlobAccessConfiguration { string label = 27; } + // Was 'redis'. Instead of using Redis, one may run a separate + // instance of bb_storage that uses the 'local' backend. + reserved 2; + + // Was 'size_distinguishing'. This was mainly of use with the + // initial versions of Buildbarn, where the recommended approach for + // storing CAS objects was to store small objects in Redis and large + // objects in S3. Unlike the 'redis' backend, the 'local' backend is + // capable of storing objects of any size. + reserved 5; + // Was 'circular' (CircularBlobAccess). This backend has been replaced // by 'local' (LocalBlobAccess). reserved 6; @@ -253,82 +257,6 @@ message ReadCachingBlobAccessConfiguration { BlobReplicatorConfiguration replicator = 3; } -message ClusteredRedisBlobAccessConfiguration { - // Endpoint addresses of the Redis servers. - repeated string endpoints = 1; - - // Retry configuration, defaults to 16 if not set - uint32 maximum_retries = 2; - - // After each attempt, the delay will be randomly selected from values - // between: 0 and min((2^attempt * minimum_retry_backoff), - // maximum_retry_backoff) - google.protobuf.Duration minimum_retry_backoff = 3; - google.protobuf.Duration maximum_retry_backoff = 4; -} - -message SingleRedisBlobAccessConfiguration { - // Endpoint address of the Redis server (e.g., "localhost:6379"). - string endpoint = 1; - - // Numerical ID of the database. - int32 db = 2; - - // Redis Auth Password, "" for NO Password - string password = 3; -} - -message RedisBlobAccessConfiguration { - oneof mode { - // Redis is configured in clustered mode. - ClusteredRedisBlobAccessConfiguration clustered = 1; - - // Redis is configured as a single server. - SingleRedisBlobAccessConfiguration single = 2; - } - - // TLS configuration for the Redis connection. TLS will not be enabled - // when not set. - buildbarn.configuration.tls.ClientConfiguration tls = 4; - - // key_ttl was removed because it gives the wrong eviction - // behaviour. Use redis's own eviction policies instead. - reserved 7; - - // The minimum number of replicas to successfully replicate put calls to - // before considering it successful. - // If unset, no guarantee is made on the number of replicas that contain - // the contents of a Redis write and master failures can lose data. - int64 replication_count = 8; - - // The maximum tolerated replication delay expressed in seconds. - // If unset, Redis write calls return immediately and no attempt is made to - // ensure that replication succeeds. This can result in data loss when - // the master is lost. - google.protobuf.Duration replication_timeout = 9; - - // The following three timeouts are for individual dial/read/write - // operations within a retriable operation. In particular, if using - // a clustered redis configuration with default retries, you want to - // set these to be no more than a few seconds, so that slow or - // unresponsive redis nodes are skipped and the operation is retried - // on a different node. - - // Dial timeout for establishing new connections. - // Default value can be overidden (e.g, '30s'). - google.protobuf.Duration dial_timeout = 10; - - // Timeout for socket reads. If reached, commands will fail with a timeout - // instead of blocking. Use value -1 for no timeout and 0 for default. - // Default value can be overidden (e.g, '300s'). - google.protobuf.Duration read_timeout = 11; - - // Timeout for socket writes. If reached, commands will fail with a timeout - // instead of blocking. Defaults to ReadTimeout, - // can be overidden (e.g, '300s'). - google.protobuf.Duration write_timeout = 12; -} - message HTTPBlobAccessConfiguration { // URL of the remote build cache (e.g., "http://localhost:8080/"). string address = 1; @@ -373,17 +301,6 @@ message ShardingBlobAccessConfiguration { repeated Shard shards = 2; } -message SizeDistinguishingBlobAccessConfiguration { - // Backend to which to send requests for small blobs (e.g., Redis). - BlobAccessConfiguration small = 1; - - // Backend to which to send requests for large blobs (e.g., S3). - BlobAccessConfiguration large = 2; - - // Maximum size of blobs read from/written to the backend for small blobs. - int64 cutoff_size_bytes = 3; -} - message MirroredBlobAccessConfiguration { // Primary backend. BlobAccessConfiguration backend_a = 1;