test(storage): string replacement
diff --git a/storage/control/apiv2/auxiliary.go b/storage/control/apiv2/auxiliary.go
index 6f7080f..b08557e 100755
--- a/storage/control/apiv2/auxiliary.go
+++ b/storage/control/apiv2/auxiliary.go
@@ -87,6 +87,53 @@
 	return op.lro.Name()
 }
 
+// BucketIterator manages a stream of *controlpb.Bucket.
+type BucketIterator struct {
+	items    []*controlpb.Bucket
+	pageInfo *iterator.PageInfo
+	nextFunc func() error
+
+	// Response is the raw response for the current page.
+	// It must be cast to the RPC response type.
+	// Calling Next() or InternalFetch() updates this value.
+	Response interface{}
+
+	// InternalFetch is for use by the Google Cloud Libraries only.
+	// It is not part of the stable interface of this package.
+	//
+	// InternalFetch returns results from a single call to the underlying RPC.
+	// The number of results is no greater than pageSize.
+	// If there are no more results, nextPageToken is empty and err is nil.
+	InternalFetch func(pageSize int, pageToken string) (results []*controlpb.Bucket, nextPageToken string, err error)
+}
+
+// PageInfo supports pagination. See the [google.golang.org/api/iterator] package for details.
+func (it *BucketIterator) PageInfo() *iterator.PageInfo {
+	return it.pageInfo
+}
+
+// Next returns the next result. Its second return value is iterator.Done if there are no more
+// results. Once Next returns Done, all subsequent calls will return Done.
+func (it *BucketIterator) Next() (*controlpb.Bucket, error) {
+	var item *controlpb.Bucket
+	if err := it.nextFunc(); err != nil {
+		return item, err
+	}
+	item = it.items[0]
+	it.items = it.items[1:]
+	return item, nil
+}
+
+func (it *BucketIterator) bufLen() int {
+	return len(it.items)
+}
+
+func (it *BucketIterator) takeBuf() interface{} {
+	b := it.items
+	it.items = nil
+	return b
+}
+
 // FolderIterator manages a stream of *controlpb.Folder.
 type FolderIterator struct {
 	items    []*controlpb.Folder
@@ -180,3 +227,50 @@
 	it.items = nil
 	return b
 }
+
+// ObjectIterator manages a stream of *controlpb.Object.
+type ObjectIterator struct {
+	items    []*controlpb.Object
+	pageInfo *iterator.PageInfo
+	nextFunc func() error
+
+	// Response is the raw response for the current page.
+	// It must be cast to the RPC response type.
+	// Calling Next() or InternalFetch() updates this value.
+	Response interface{}
+
+	// InternalFetch is for use by the Google Cloud Libraries only.
+	// It is not part of the stable interface of this package.
+	//
+	// InternalFetch returns results from a single call to the underlying RPC.
+	// The number of results is no greater than pageSize.
+	// If there are no more results, nextPageToken is empty and err is nil.
+	InternalFetch func(pageSize int, pageToken string) (results []*controlpb.Object, nextPageToken string, err error)
+}
+
+// PageInfo supports pagination. See the [google.golang.org/api/iterator] package for details.
+func (it *ObjectIterator) PageInfo() *iterator.PageInfo {
+	return it.pageInfo
+}
+
+// Next returns the next result. Its second return value is iterator.Done if there are no more
+// results. Once Next returns Done, all subsequent calls will return Done.
+func (it *ObjectIterator) Next() (*controlpb.Object, error) {
+	var item *controlpb.Object
+	if err := it.nextFunc(); err != nil {
+		return item, err
+	}
+	item = it.items[0]
+	it.items = it.items[1:]
+	return item, nil
+}
+
+func (it *ObjectIterator) bufLen() int {
+	return len(it.items)
+}
+
+func (it *ObjectIterator) takeBuf() interface{} {
+	b := it.items
+	it.items = nil
+	return b
+}
diff --git a/storage/control/apiv2/auxiliary_go123.go b/storage/control/apiv2/auxiliary_go123.go
index fb0c391..f788a7e 100755
--- a/storage/control/apiv2/auxiliary_go123.go
+++ b/storage/control/apiv2/auxiliary_go123.go
@@ -27,6 +27,12 @@
 
 // All returns an iterator. If an error is returned by the iterator, the
 // iterator will stop after that iteration.
+func (it *BucketIterator) All() iter.Seq2[*controlpb.Bucket, error] {
+	return iterator.RangeAdapter(it.Next)
+}
+
+// All returns an iterator. If an error is returned by the iterator, the
+// iterator will stop after that iteration.
 func (it *FolderIterator) All() iter.Seq2[*controlpb.Folder, error] {
 	return iterator.RangeAdapter(it.Next)
 }
@@ -36,3 +42,9 @@
 func (it *ManagedFolderIterator) All() iter.Seq2[*controlpb.ManagedFolder, error] {
 	return iterator.RangeAdapter(it.Next)
 }
+
+// All returns an iterator. If an error is returned by the iterator, the
+// iterator will stop after that iteration.
+func (it *ObjectIterator) All() iter.Seq2[*controlpb.Object, error] {
+	return iterator.RangeAdapter(it.Next)
+}
diff --git a/storage/control/apiv2/controlpb/storage_control.pb.go b/storage/control/apiv2/controlpb/storage_control.pb.go
old mode 100755
new mode 100644
index c885f6a..7265483
--- a/storage/control/apiv2/controlpb/storage_control.pb.go
+++ b/storage/control/apiv2/controlpb/storage_control.pb.go
@@ -14,26 +14,29 @@
 
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.34.2
+// 	protoc-gen-go v1.35.2
 // 	protoc        v4.25.3
 // source: google/storage/control/v2/storage_control.proto
 
 package controlpb
 
 import (
-	context "context"
-	reflect "reflect"
-	sync "sync"
-
+	iampb "cloud.google.com/go/iam/apiv1/iampb"
 	longrunningpb "cloud.google.com/go/longrunning/autogen/longrunningpb"
+	context "context"
 	_ "google.golang.org/genproto/googleapis/api/annotations"
+	date "google.golang.org/genproto/googleapis/type/date"
 	grpc "google.golang.org/grpc"
 	codes "google.golang.org/grpc/codes"
 	status "google.golang.org/grpc/status"
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	durationpb "google.golang.org/protobuf/types/known/durationpb"
 	emptypb "google.golang.org/protobuf/types/known/emptypb"
+	fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb"
 	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
+	reflect "reflect"
+	sync "sync"
 )
 
 const (
@@ -43,6 +46,140 @@
 	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
 )
 
+// A collection of constant values meaningful to the Storage API.
+type ServiceConstants_Values int32
+
+const (
+	// Unused. Proto3 requires first enum to be 0.
+	ServiceConstants_VALUES_UNSPECIFIED ServiceConstants_Values = 0
+	// The maximum size chunk that can will be returned in a single
+	// ReadRequest.
+	// 2 MiB.
+	ServiceConstants_MAX_READ_CHUNK_BYTES ServiceConstants_Values = 2097152
+	// The maximum size chunk that can be sent in a single WriteObjectRequest.
+	// 2 MiB.
+	ServiceConstants_MAX_WRITE_CHUNK_BYTES ServiceConstants_Values = 2097152
+	// The maximum size of an object in MB - whether written in a single stream
+	// or composed from multiple other objects.
+	// 5 TiB.
+	ServiceConstants_MAX_OBJECT_SIZE_MB ServiceConstants_Values = 5242880
+	// The maximum length field name that can be sent in a single
+	// custom metadata field.
+	// 1 KiB.
+	ServiceConstants_MAX_CUSTOM_METADATA_FIELD_NAME_BYTES ServiceConstants_Values = 1024
+	// The maximum length field value that can be sent in a single
+	// custom_metadata field.
+	// 4 KiB.
+	ServiceConstants_MAX_CUSTOM_METADATA_FIELD_VALUE_BYTES ServiceConstants_Values = 4096
+	// The maximum total bytes that can be populated into all field names and
+	// values of the custom_metadata for one object.
+	// 8 KiB.
+	ServiceConstants_MAX_CUSTOM_METADATA_TOTAL_SIZE_BYTES ServiceConstants_Values = 8192
+	// The maximum total bytes that can be populated into all bucket metadata
+	// fields.
+	// 20 KiB.
+	ServiceConstants_MAX_BUCKET_METADATA_TOTAL_SIZE_BYTES ServiceConstants_Values = 20480
+	// The maximum number of NotificationConfigs that can be registered
+	// for a given bucket.
+	ServiceConstants_MAX_NOTIFICATION_CONFIGS_PER_BUCKET ServiceConstants_Values = 100
+	// The maximum number of LifecycleRules that can be registered for a given
+	// bucket.
+	ServiceConstants_MAX_LIFECYCLE_RULES_PER_BUCKET ServiceConstants_Values = 100
+	// The maximum number of custom attributes per NotificationConfigs.
+	ServiceConstants_MAX_NOTIFICATION_CUSTOM_ATTRIBUTES ServiceConstants_Values = 5
+	// The maximum length of a custom attribute key included in
+	// NotificationConfig.
+	ServiceConstants_MAX_NOTIFICATION_CUSTOM_ATTRIBUTE_KEY_LENGTH ServiceConstants_Values = 256
+	// The maximum length of a custom attribute value included in a
+	// NotificationConfig.
+	ServiceConstants_MAX_NOTIFICATION_CUSTOM_ATTRIBUTE_VALUE_LENGTH ServiceConstants_Values = 1024
+	// The maximum number of key/value entries per bucket label.
+	ServiceConstants_MAX_LABELS_ENTRIES_COUNT ServiceConstants_Values = 64
+	// The maximum character length of the key or value in a bucket
+	// label map.
+	ServiceConstants_MAX_LABELS_KEY_VALUE_LENGTH ServiceConstants_Values = 63
+	// The maximum byte size of the key or value in a bucket label
+	// map.
+	ServiceConstants_MAX_LABELS_KEY_VALUE_BYTES ServiceConstants_Values = 128
+	// The maximum number of object IDs that can be included in a
+	// DeleteObjectsRequest.
+	ServiceConstants_MAX_OBJECT_IDS_PER_DELETE_OBJECTS_REQUEST ServiceConstants_Values = 1000
+	// The maximum number of days for which a token returned by the
+	// GetListObjectsSplitPoints RPC is valid.
+	ServiceConstants_SPLIT_TOKEN_MAX_VALID_DAYS ServiceConstants_Values = 14
+)
+
+// Enum value maps for ServiceConstants_Values.
+var (
+	ServiceConstants_Values_name = map[int32]string{
+		0:       "VALUES_UNSPECIFIED",
+		2097152: "MAX_READ_CHUNK_BYTES",
+		// Duplicate value: 2097152: "MAX_WRITE_CHUNK_BYTES",
+		5242880: "MAX_OBJECT_SIZE_MB",
+		1024:    "MAX_CUSTOM_METADATA_FIELD_NAME_BYTES",
+		4096:    "MAX_CUSTOM_METADATA_FIELD_VALUE_BYTES",
+		8192:    "MAX_CUSTOM_METADATA_TOTAL_SIZE_BYTES",
+		20480:   "MAX_BUCKET_METADATA_TOTAL_SIZE_BYTES",
+		100:     "MAX_NOTIFICATION_CONFIGS_PER_BUCKET",
+		// Duplicate value: 100: "MAX_LIFECYCLE_RULES_PER_BUCKET",
+		5:   "MAX_NOTIFICATION_CUSTOM_ATTRIBUTES",
+		256: "MAX_NOTIFICATION_CUSTOM_ATTRIBUTE_KEY_LENGTH",
+		// Duplicate value: 1024: "MAX_NOTIFICATION_CUSTOM_ATTRIBUTE_VALUE_LENGTH",
+		64:   "MAX_LABELS_ENTRIES_COUNT",
+		63:   "MAX_LABELS_KEY_VALUE_LENGTH",
+		128:  "MAX_LABELS_KEY_VALUE_BYTES",
+		1000: "MAX_OBJECT_IDS_PER_DELETE_OBJECTS_REQUEST",
+		14:   "SPLIT_TOKEN_MAX_VALID_DAYS",
+	}
+	ServiceConstants_Values_value = map[string]int32{
+		"VALUES_UNSPECIFIED":                             0,
+		"MAX_READ_CHUNK_BYTES":                           2097152,
+		"MAX_WRITE_CHUNK_BYTES":                          2097152,
+		"MAX_OBJECT_SIZE_MB":                             5242880,
+		"MAX_CUSTOM_METADATA_FIELD_NAME_BYTES":           1024,
+		"MAX_CUSTOM_METADATA_FIELD_VALUE_BYTES":          4096,
+		"MAX_CUSTOM_METADATA_TOTAL_SIZE_BYTES":           8192,
+		"MAX_BUCKET_METADATA_TOTAL_SIZE_BYTES":           20480,
+		"MAX_NOTIFICATION_CONFIGS_PER_BUCKET":            100,
+		"MAX_LIFECYCLE_RULES_PER_BUCKET":                 100,
+		"MAX_NOTIFICATION_CUSTOM_ATTRIBUTES":             5,
+		"MAX_NOTIFICATION_CUSTOM_ATTRIBUTE_KEY_LENGTH":   256,
+		"MAX_NOTIFICATION_CUSTOM_ATTRIBUTE_VALUE_LENGTH": 1024,
+		"MAX_LABELS_ENTRIES_COUNT":                       64,
+		"MAX_LABELS_KEY_VALUE_LENGTH":                    63,
+		"MAX_LABELS_KEY_VALUE_BYTES":                     128,
+		"MAX_OBJECT_IDS_PER_DELETE_OBJECTS_REQUEST":      1000,
+		"SPLIT_TOKEN_MAX_VALID_DAYS":                     14,
+	}
+)
+
+func (x ServiceConstants_Values) Enum() *ServiceConstants_Values {
+	p := new(ServiceConstants_Values)
+	*p = x
+	return p
+}
+
+func (x ServiceConstants_Values) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ServiceConstants_Values) Descriptor() protoreflect.EnumDescriptor {
+	return file_google_storage_control_v2_storage_control_proto_enumTypes[0].Descriptor()
+}
+
+func (ServiceConstants_Values) Type() protoreflect.EnumType {
+	return &file_google_storage_control_v2_storage_control_proto_enumTypes[0]
+}
+
+func (x ServiceConstants_Values) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ServiceConstants_Values.Descriptor instead.
+func (ServiceConstants_Values) EnumDescriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{35, 0}
+}
+
 // Contains information about a pending rename operation.
 type PendingRenameInfo struct {
 	state         protoimpl.MessageState
@@ -55,11 +192,9 @@
 
 func (x *PendingRenameInfo) Reset() {
 	*x = PendingRenameInfo{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[0]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[0]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *PendingRenameInfo) String() string {
@@ -70,7 +205,7 @@
 
 func (x *PendingRenameInfo) ProtoReflect() protoreflect.Message {
 	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[0]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -119,11 +254,9 @@
 
 func (x *Folder) Reset() {
 	*x = Folder{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[1]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[1]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *Folder) String() string {
@@ -134,7 +267,7 @@
 
 func (x *Folder) ProtoReflect() protoreflect.Message {
 	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[1]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -207,11 +340,9 @@
 
 func (x *GetFolderRequest) Reset() {
 	*x = GetFolderRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[2]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[2]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *GetFolderRequest) String() string {
@@ -222,7 +353,7 @@
 
 func (x *GetFolderRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[2]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -296,11 +427,9 @@
 
 func (x *CreateFolderRequest) Reset() {
 	*x = CreateFolderRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[3]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[3]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *CreateFolderRequest) String() string {
@@ -311,7 +440,7 @@
 
 func (x *CreateFolderRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[3]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -384,11 +513,9 @@
 
 func (x *DeleteFolderRequest) Reset() {
 	*x = DeleteFolderRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[4]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[4]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *DeleteFolderRequest) String() string {
@@ -399,7 +526,7 @@
 
 func (x *DeleteFolderRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[4]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -482,11 +609,9 @@
 
 func (x *ListFoldersRequest) Reset() {
 	*x = ListFoldersRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[5]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[5]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ListFoldersRequest) String() string {
@@ -497,7 +622,7 @@
 
 func (x *ListFoldersRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[5]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -583,11 +708,9 @@
 
 func (x *ListFoldersResponse) Reset() {
 	*x = ListFoldersResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[6]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[6]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ListFoldersResponse) String() string {
@@ -598,7 +721,7 @@
 
 func (x *ListFoldersResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[6]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -653,11 +776,9 @@
 
 func (x *RenameFolderRequest) Reset() {
 	*x = RenameFolderRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[7]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[7]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *RenameFolderRequest) String() string {
@@ -668,7 +789,7 @@
 
 func (x *RenameFolderRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[7]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -743,11 +864,9 @@
 
 func (x *CommonLongRunningOperationMetadata) Reset() {
 	*x = CommonLongRunningOperationMetadata{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[8]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[8]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *CommonLongRunningOperationMetadata) String() string {
@@ -758,7 +877,7 @@
 
 func (x *CommonLongRunningOperationMetadata) ProtoReflect() protoreflect.Message {
 	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[8]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -832,11 +951,9 @@
 
 func (x *RenameFolderMetadata) Reset() {
 	*x = RenameFolderMetadata{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[9]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[9]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *RenameFolderMetadata) String() string {
@@ -847,7 +964,7 @@
 
 func (x *RenameFolderMetadata) ProtoReflect() protoreflect.Message {
 	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[9]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -907,11 +1024,9 @@
 
 func (x *StorageLayout) Reset() {
 	*x = StorageLayout{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[10]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[10]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *StorageLayout) String() string {
@@ -922,7 +1037,7 @@
 
 func (x *StorageLayout) ProtoReflect() protoreflect.Message {
 	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[10]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -991,11 +1106,9 @@
 
 func (x *GetStorageLayoutRequest) Reset() {
 	*x = GetStorageLayoutRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[11]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[11]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *GetStorageLayoutRequest) String() string {
@@ -1006,7 +1119,7 @@
 
 func (x *GetStorageLayoutRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[11]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -1064,11 +1177,9 @@
 
 func (x *ManagedFolder) Reset() {
 	*x = ManagedFolder{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[12]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[12]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ManagedFolder) String() string {
@@ -1079,7 +1190,7 @@
 
 func (x *ManagedFolder) ProtoReflect() protoreflect.Message {
 	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[12]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -1145,11 +1256,9 @@
 
 func (x *GetManagedFolderRequest) Reset() {
 	*x = GetManagedFolderRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[13]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[13]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *GetManagedFolderRequest) String() string {
@@ -1160,7 +1269,7 @@
 
 func (x *GetManagedFolderRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[13]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -1226,11 +1335,9 @@
 
 func (x *CreateManagedFolderRequest) Reset() {
 	*x = CreateManagedFolderRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[14]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[14]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *CreateManagedFolderRequest) String() string {
@@ -1241,7 +1348,7 @@
 
 func (x *CreateManagedFolderRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[14]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -1312,11 +1419,9 @@
 
 func (x *DeleteManagedFolderRequest) Reset() {
 	*x = DeleteManagedFolderRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[15]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[15]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *DeleteManagedFolderRequest) String() string {
@@ -1327,7 +1432,7 @@
 
 func (x *DeleteManagedFolderRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[15]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -1401,11 +1506,9 @@
 
 func (x *ListManagedFoldersRequest) Reset() {
 	*x = ListManagedFoldersRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[16]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[16]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ListManagedFoldersRequest) String() string {
@@ -1416,7 +1519,7 @@
 
 func (x *ListManagedFoldersRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[16]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -1481,11 +1584,9 @@
 
 func (x *ListManagedFoldersResponse) Reset() {
 	*x = ListManagedFoldersResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[17]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[17]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ListManagedFoldersResponse) String() string {
@@ -1496,7 +1597,7 @@
 
 func (x *ListManagedFoldersResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[17]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -1525,6 +1626,3460 @@
 	return ""
 }
 
+// Request message for DeleteBucket.
+type DeleteBucketRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Required. Name of a bucket to delete.
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// If set, only deletes the bucket if its metageneration matches this value.
+	IfMetagenerationMatch *int64 `protobuf:"varint,2,opt,name=if_metageneration_match,json=ifMetagenerationMatch,proto3,oneof" json:"if_metageneration_match,omitempty"`
+	// If set, only deletes the bucket if its metageneration does not match this
+	// value.
+	IfMetagenerationNotMatch *int64 `protobuf:"varint,3,opt,name=if_metageneration_not_match,json=ifMetagenerationNotMatch,proto3,oneof" json:"if_metageneration_not_match,omitempty"`
+}
+
+func (x *DeleteBucketRequest) Reset() {
+	*x = DeleteBucketRequest{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[18]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *DeleteBucketRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteBucketRequest) ProtoMessage() {}
+
+func (x *DeleteBucketRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[18]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeleteBucketRequest.ProtoReflect.Descriptor instead.
+func (*DeleteBucketRequest) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{18}
+}
+
+func (x *DeleteBucketRequest) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *DeleteBucketRequest) GetIfMetagenerationMatch() int64 {
+	if x != nil && x.IfMetagenerationMatch != nil {
+		return *x.IfMetagenerationMatch
+	}
+	return 0
+}
+
+func (x *DeleteBucketRequest) GetIfMetagenerationNotMatch() int64 {
+	if x != nil && x.IfMetagenerationNotMatch != nil {
+		return *x.IfMetagenerationNotMatch
+	}
+	return 0
+}
+
+// Request message for GetBucket.
+type GetBucketRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Required. Name of a bucket.
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// If set, and if the bucket's current metageneration does not match the
+	// specified value, the request will return an error.
+	IfMetagenerationMatch *int64 `protobuf:"varint,2,opt,name=if_metageneration_match,json=ifMetagenerationMatch,proto3,oneof" json:"if_metageneration_match,omitempty"`
+	// If set, and if the bucket's current metageneration matches the specified
+	// value, the request will return an error.
+	IfMetagenerationNotMatch *int64 `protobuf:"varint,3,opt,name=if_metageneration_not_match,json=ifMetagenerationNotMatch,proto3,oneof" json:"if_metageneration_not_match,omitempty"`
+	// Mask specifying which fields to read.
+	// A "*" field may be used to indicate all fields.
+	// If no mask is specified, will default to all fields.
+	ReadMask *fieldmaskpb.FieldMask `protobuf:"bytes,5,opt,name=read_mask,json=readMask,proto3,oneof" json:"read_mask,omitempty"`
+}
+
+func (x *GetBucketRequest) Reset() {
+	*x = GetBucketRequest{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[19]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *GetBucketRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetBucketRequest) ProtoMessage() {}
+
+func (x *GetBucketRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[19]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetBucketRequest.ProtoReflect.Descriptor instead.
+func (*GetBucketRequest) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{19}
+}
+
+func (x *GetBucketRequest) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *GetBucketRequest) GetIfMetagenerationMatch() int64 {
+	if x != nil && x.IfMetagenerationMatch != nil {
+		return *x.IfMetagenerationMatch
+	}
+	return 0
+}
+
+func (x *GetBucketRequest) GetIfMetagenerationNotMatch() int64 {
+	if x != nil && x.IfMetagenerationNotMatch != nil {
+		return *x.IfMetagenerationNotMatch
+	}
+	return 0
+}
+
+func (x *GetBucketRequest) GetReadMask() *fieldmaskpb.FieldMask {
+	if x != nil {
+		return x.ReadMask
+	}
+	return nil
+}
+
+// Request message for CreateBucket.
+type CreateBucketRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Required. The project to which this bucket will belong.
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Properties of the new bucket being inserted.
+	// The name of the bucket is specified in the `bucket_id` field. Populating
+	// `bucket.name` field will result in an error.
+	// The project of the bucket must be specified in the `bucket.project` field.
+	// This field must be in `projects/{projectIdentifier}` format,
+	// {projectIdentifier} can be the project ID or project number. The `parent`
+	// field must be either empty or `projects/_`.
+	Bucket *Bucket `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"`
+	// Required. The ID to use for this bucket, which will become the final
+	// component of the bucket's resource name. For example, the value `foo` might
+	// result in a bucket with the name `projects/123456/buckets/foo`.
+	BucketId string `protobuf:"bytes,3,opt,name=bucket_id,json=bucketId,proto3" json:"bucket_id,omitempty"`
+	// Apply a predefined set of access controls to this bucket.
+	// Valid values are "authenticatedRead", "private", "projectPrivate",
+	// "publicRead", or "publicReadWrite".
+	PredefinedAcl string `protobuf:"bytes,6,opt,name=predefined_acl,json=predefinedAcl,proto3" json:"predefined_acl,omitempty"`
+	// Apply a predefined set of default object access controls to this bucket.
+	// Valid values are "authenticatedRead", "bucketOwnerFullControl",
+	// "bucketOwnerRead", "private", "projectPrivate", or "publicRead".
+	PredefinedDefaultObjectAcl string `protobuf:"bytes,7,opt,name=predefined_default_object_acl,json=predefinedDefaultObjectAcl,proto3" json:"predefined_default_object_acl,omitempty"`
+}
+
+func (x *CreateBucketRequest) Reset() {
+	*x = CreateBucketRequest{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[20]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *CreateBucketRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CreateBucketRequest) ProtoMessage() {}
+
+func (x *CreateBucketRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[20]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CreateBucketRequest.ProtoReflect.Descriptor instead.
+func (*CreateBucketRequest) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{20}
+}
+
+func (x *CreateBucketRequest) GetParent() string {
+	if x != nil {
+		return x.Parent
+	}
+	return ""
+}
+
+func (x *CreateBucketRequest) GetBucket() *Bucket {
+	if x != nil {
+		return x.Bucket
+	}
+	return nil
+}
+
+func (x *CreateBucketRequest) GetBucketId() string {
+	if x != nil {
+		return x.BucketId
+	}
+	return ""
+}
+
+func (x *CreateBucketRequest) GetPredefinedAcl() string {
+	if x != nil {
+		return x.PredefinedAcl
+	}
+	return ""
+}
+
+func (x *CreateBucketRequest) GetPredefinedDefaultObjectAcl() string {
+	if x != nil {
+		return x.PredefinedDefaultObjectAcl
+	}
+	return ""
+}
+
+// Request message for ListBuckets.
+type ListBucketsRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Required. The project whose buckets we are listing.
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Maximum number of buckets to return in a single response. The service will
+	// use this parameter or 1,000 items, whichever is smaller. If "acl" is
+	// present in the read_mask, the service will use this parameter of 200 items,
+	// whichever is smaller.
+	PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	// A previously-returned page token representing part of the larger set of
+	// results to view.
+	PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
+	// Filter results to buckets whose names begin with this prefix.
+	Prefix string `protobuf:"bytes,4,opt,name=prefix,proto3" json:"prefix,omitempty"`
+	// Mask specifying which fields to read from each result.
+	// If no mask is specified, will default to all fields except items.owner,
+	// items.acl, and items.default_object_acl.
+	// * may be used to mean "all fields".
+	ReadMask *fieldmaskpb.FieldMask `protobuf:"bytes,5,opt,name=read_mask,json=readMask,proto3,oneof" json:"read_mask,omitempty"`
+}
+
+func (x *ListBucketsRequest) Reset() {
+	*x = ListBucketsRequest{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[21]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ListBucketsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListBucketsRequest) ProtoMessage() {}
+
+func (x *ListBucketsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[21]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ListBucketsRequest.ProtoReflect.Descriptor instead.
+func (*ListBucketsRequest) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{21}
+}
+
+func (x *ListBucketsRequest) GetParent() string {
+	if x != nil {
+		return x.Parent
+	}
+	return ""
+}
+
+func (x *ListBucketsRequest) GetPageSize() int32 {
+	if x != nil {
+		return x.PageSize
+	}
+	return 0
+}
+
+func (x *ListBucketsRequest) GetPageToken() string {
+	if x != nil {
+		return x.PageToken
+	}
+	return ""
+}
+
+func (x *ListBucketsRequest) GetPrefix() string {
+	if x != nil {
+		return x.Prefix
+	}
+	return ""
+}
+
+func (x *ListBucketsRequest) GetReadMask() *fieldmaskpb.FieldMask {
+	if x != nil {
+		return x.ReadMask
+	}
+	return nil
+}
+
+// The result of a call to Buckets.ListBuckets
+type ListBucketsResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The list of items.
+	Buckets []*Bucket `protobuf:"bytes,1,rep,name=buckets,proto3" json:"buckets,omitempty"`
+	// The continuation token, used to page through large result sets. Provide
+	// this value in a subsequent request to return the next page of results.
+	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
+}
+
+func (x *ListBucketsResponse) Reset() {
+	*x = ListBucketsResponse{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[22]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ListBucketsResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListBucketsResponse) ProtoMessage() {}
+
+func (x *ListBucketsResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[22]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ListBucketsResponse.ProtoReflect.Descriptor instead.
+func (*ListBucketsResponse) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{22}
+}
+
+func (x *ListBucketsResponse) GetBuckets() []*Bucket {
+	if x != nil {
+		return x.Buckets
+	}
+	return nil
+}
+
+func (x *ListBucketsResponse) GetNextPageToken() string {
+	if x != nil {
+		return x.NextPageToken
+	}
+	return ""
+}
+
+// Request message for LockBucketRetentionPolicyRequest.
+type LockBucketRetentionPolicyRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Required. Name of a bucket.
+	Bucket string `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"`
+	// Required. Makes the operation conditional on whether bucket's current
+	// metageneration matches the given value. Must be positive.
+	IfMetagenerationMatch int64 `protobuf:"varint,2,opt,name=if_metageneration_match,json=ifMetagenerationMatch,proto3" json:"if_metageneration_match,omitempty"`
+}
+
+func (x *LockBucketRetentionPolicyRequest) Reset() {
+	*x = LockBucketRetentionPolicyRequest{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[23]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *LockBucketRetentionPolicyRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LockBucketRetentionPolicyRequest) ProtoMessage() {}
+
+func (x *LockBucketRetentionPolicyRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[23]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use LockBucketRetentionPolicyRequest.ProtoReflect.Descriptor instead.
+func (*LockBucketRetentionPolicyRequest) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{23}
+}
+
+func (x *LockBucketRetentionPolicyRequest) GetBucket() string {
+	if x != nil {
+		return x.Bucket
+	}
+	return ""
+}
+
+func (x *LockBucketRetentionPolicyRequest) GetIfMetagenerationMatch() int64 {
+	if x != nil {
+		return x.IfMetagenerationMatch
+	}
+	return 0
+}
+
+// Request for UpdateBucket method.
+type UpdateBucketRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Required. The bucket to update.
+	// The bucket's `name` field will be used to identify the bucket.
+	Bucket *Bucket `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"`
+	// If set, will only modify the bucket if its metageneration matches this
+	// value.
+	IfMetagenerationMatch *int64 `protobuf:"varint,2,opt,name=if_metageneration_match,json=ifMetagenerationMatch,proto3,oneof" json:"if_metageneration_match,omitempty"`
+	// If set, will only modify the bucket if its metageneration does not match
+	// this value.
+	IfMetagenerationNotMatch *int64 `protobuf:"varint,3,opt,name=if_metageneration_not_match,json=ifMetagenerationNotMatch,proto3,oneof" json:"if_metageneration_not_match,omitempty"`
+	// Apply a predefined set of access controls to this bucket.
+	// Valid values are "authenticatedRead", "private", "projectPrivate",
+	// "publicRead", or "publicReadWrite".
+	PredefinedAcl string `protobuf:"bytes,8,opt,name=predefined_acl,json=predefinedAcl,proto3" json:"predefined_acl,omitempty"`
+	// Apply a predefined set of default object access controls to this bucket.
+	// Valid values are "authenticatedRead", "bucketOwnerFullControl",
+	// "bucketOwnerRead", "private", "projectPrivate", or "publicRead".
+	PredefinedDefaultObjectAcl string `protobuf:"bytes,9,opt,name=predefined_default_object_acl,json=predefinedDefaultObjectAcl,proto3" json:"predefined_default_object_acl,omitempty"`
+	// Required. List of fields to be updated.
+	//
+	// To specify ALL fields, equivalent to the JSON API's "update" function,
+	// specify a single field with the value `*`. Note: not recommended. If a new
+	// field is introduced at a later time, an older client updating with the `*`
+	// may accidentally reset the new field's value.
+	//
+	// Not specifying any fields is an error.
+	UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,6,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+}
+
+func (x *UpdateBucketRequest) Reset() {
+	*x = UpdateBucketRequest{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[24]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *UpdateBucketRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UpdateBucketRequest) ProtoMessage() {}
+
+func (x *UpdateBucketRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[24]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use UpdateBucketRequest.ProtoReflect.Descriptor instead.
+func (*UpdateBucketRequest) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{24}
+}
+
+func (x *UpdateBucketRequest) GetBucket() *Bucket {
+	if x != nil {
+		return x.Bucket
+	}
+	return nil
+}
+
+func (x *UpdateBucketRequest) GetIfMetagenerationMatch() int64 {
+	if x != nil && x.IfMetagenerationMatch != nil {
+		return *x.IfMetagenerationMatch
+	}
+	return 0
+}
+
+func (x *UpdateBucketRequest) GetIfMetagenerationNotMatch() int64 {
+	if x != nil && x.IfMetagenerationNotMatch != nil {
+		return *x.IfMetagenerationNotMatch
+	}
+	return 0
+}
+
+func (x *UpdateBucketRequest) GetPredefinedAcl() string {
+	if x != nil {
+		return x.PredefinedAcl
+	}
+	return ""
+}
+
+func (x *UpdateBucketRequest) GetPredefinedDefaultObjectAcl() string {
+	if x != nil {
+		return x.PredefinedDefaultObjectAcl
+	}
+	return ""
+}
+
+func (x *UpdateBucketRequest) GetUpdateMask() *fieldmaskpb.FieldMask {
+	if x != nil {
+		return x.UpdateMask
+	}
+	return nil
+}
+
+// Request message for ComposeObject.
+type ComposeObjectRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Required. Properties of the resulting object.
+	Destination *Object `protobuf:"bytes,1,opt,name=destination,proto3" json:"destination,omitempty"`
+	// The list of source objects that will be concatenated into a single object.
+	SourceObjects []*ComposeObjectRequest_SourceObject `protobuf:"bytes,2,rep,name=source_objects,json=sourceObjects,proto3" json:"source_objects,omitempty"`
+	// Apply a predefined set of access controls to the destination object.
+	// Valid values are "authenticatedRead", "bucketOwnerFullControl",
+	// "bucketOwnerRead", "private", "projectPrivate", or "publicRead".
+	DestinationPredefinedAcl string `protobuf:"bytes,9,opt,name=destination_predefined_acl,json=destinationPredefinedAcl,proto3" json:"destination_predefined_acl,omitempty"`
+	// Makes the operation conditional on whether the object's current generation
+	// matches the given value. Setting to 0 makes the operation succeed only if
+	// there are no live versions of the object.
+	IfGenerationMatch *int64 `protobuf:"varint,4,opt,name=if_generation_match,json=ifGenerationMatch,proto3,oneof" json:"if_generation_match,omitempty"`
+	// Makes the operation conditional on whether the object's current
+	// metageneration matches the given value.
+	IfMetagenerationMatch *int64 `protobuf:"varint,5,opt,name=if_metageneration_match,json=ifMetagenerationMatch,proto3,oneof" json:"if_metageneration_match,omitempty"`
+	// Resource name of the Cloud KMS key, of the form
+	// `projects/my-project/locations/my-location/keyRings/my-kr/cryptoKeys/my-key`,
+	// that will be used to encrypt the object. Overrides the object
+	// metadata's `kms_key_name` value, if any.
+	KmsKey string `protobuf:"bytes,6,opt,name=kms_key,json=kmsKey,proto3" json:"kms_key,omitempty"`
+	// A set of parameters common to Storage API requests concerning an object.
+	CommonObjectRequestParams *CommonObjectRequestParams `protobuf:"bytes,7,opt,name=common_object_request_params,json=commonObjectRequestParams,proto3" json:"common_object_request_params,omitempty"`
+	// The checksums of the complete object. This will be validated against the
+	// combined checksums of the component objects.
+	ObjectChecksums *ObjectChecksums `protobuf:"bytes,10,opt,name=object_checksums,json=objectChecksums,proto3" json:"object_checksums,omitempty"`
+}
+
+func (x *ComposeObjectRequest) Reset() {
+	*x = ComposeObjectRequest{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[25]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ComposeObjectRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ComposeObjectRequest) ProtoMessage() {}
+
+func (x *ComposeObjectRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[25]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ComposeObjectRequest.ProtoReflect.Descriptor instead.
+func (*ComposeObjectRequest) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{25}
+}
+
+func (x *ComposeObjectRequest) GetDestination() *Object {
+	if x != nil {
+		return x.Destination
+	}
+	return nil
+}
+
+func (x *ComposeObjectRequest) GetSourceObjects() []*ComposeObjectRequest_SourceObject {
+	if x != nil {
+		return x.SourceObjects
+	}
+	return nil
+}
+
+func (x *ComposeObjectRequest) GetDestinationPredefinedAcl() string {
+	if x != nil {
+		return x.DestinationPredefinedAcl
+	}
+	return ""
+}
+
+func (x *ComposeObjectRequest) GetIfGenerationMatch() int64 {
+	if x != nil && x.IfGenerationMatch != nil {
+		return *x.IfGenerationMatch
+	}
+	return 0
+}
+
+func (x *ComposeObjectRequest) GetIfMetagenerationMatch() int64 {
+	if x != nil && x.IfMetagenerationMatch != nil {
+		return *x.IfMetagenerationMatch
+	}
+	return 0
+}
+
+func (x *ComposeObjectRequest) GetKmsKey() string {
+	if x != nil {
+		return x.KmsKey
+	}
+	return ""
+}
+
+func (x *ComposeObjectRequest) GetCommonObjectRequestParams() *CommonObjectRequestParams {
+	if x != nil {
+		return x.CommonObjectRequestParams
+	}
+	return nil
+}
+
+func (x *ComposeObjectRequest) GetObjectChecksums() *ObjectChecksums {
+	if x != nil {
+		return x.ObjectChecksums
+	}
+	return nil
+}
+
+// Message for deleting an object.
+// `bucket` and `object` **must** be set.
+type DeleteObjectRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Required. Name of the bucket in which the object resides.
+	Bucket string `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"`
+	// Required. The name of the finalized object to delete.
+	// Note: If you want to delete an unfinalized resumable upload please use
+	// `CancelResumableWrite`.
+	Object string `protobuf:"bytes,2,opt,name=object,proto3" json:"object,omitempty"`
+	// If present, permanently deletes a specific revision of this object (as
+	// opposed to the latest version, the default).
+	Generation int64 `protobuf:"varint,4,opt,name=generation,proto3" json:"generation,omitempty"`
+	// Makes the operation conditional on whether the object's current generation
+	// matches the given value. Setting to 0 makes the operation succeed only if
+	// there are no live versions of the object.
+	IfGenerationMatch *int64 `protobuf:"varint,5,opt,name=if_generation_match,json=ifGenerationMatch,proto3,oneof" json:"if_generation_match,omitempty"`
+	// Makes the operation conditional on whether the object's live generation
+	// does not match the given value. If no live object exists, the precondition
+	// fails. Setting to 0 makes the operation succeed only if there is a live
+	// version of the object.
+	IfGenerationNotMatch *int64 `protobuf:"varint,6,opt,name=if_generation_not_match,json=ifGenerationNotMatch,proto3,oneof" json:"if_generation_not_match,omitempty"`
+	// Makes the operation conditional on whether the object's current
+	// metageneration matches the given value.
+	IfMetagenerationMatch *int64 `protobuf:"varint,7,opt,name=if_metageneration_match,json=ifMetagenerationMatch,proto3,oneof" json:"if_metageneration_match,omitempty"`
+	// Makes the operation conditional on whether the object's current
+	// metageneration does not match the given value.
+	IfMetagenerationNotMatch *int64 `protobuf:"varint,8,opt,name=if_metageneration_not_match,json=ifMetagenerationNotMatch,proto3,oneof" json:"if_metageneration_not_match,omitempty"`
+	// A set of parameters common to Storage API requests concerning an object.
+	CommonObjectRequestParams *CommonObjectRequestParams `protobuf:"bytes,10,opt,name=common_object_request_params,json=commonObjectRequestParams,proto3" json:"common_object_request_params,omitempty"`
+}
+
+func (x *DeleteObjectRequest) Reset() {
+	*x = DeleteObjectRequest{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[26]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *DeleteObjectRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteObjectRequest) ProtoMessage() {}
+
+func (x *DeleteObjectRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[26]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeleteObjectRequest.ProtoReflect.Descriptor instead.
+func (*DeleteObjectRequest) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{26}
+}
+
+func (x *DeleteObjectRequest) GetBucket() string {
+	if x != nil {
+		return x.Bucket
+	}
+	return ""
+}
+
+func (x *DeleteObjectRequest) GetObject() string {
+	if x != nil {
+		return x.Object
+	}
+	return ""
+}
+
+func (x *DeleteObjectRequest) GetGeneration() int64 {
+	if x != nil {
+		return x.Generation
+	}
+	return 0
+}
+
+func (x *DeleteObjectRequest) GetIfGenerationMatch() int64 {
+	if x != nil && x.IfGenerationMatch != nil {
+		return *x.IfGenerationMatch
+	}
+	return 0
+}
+
+func (x *DeleteObjectRequest) GetIfGenerationNotMatch() int64 {
+	if x != nil && x.IfGenerationNotMatch != nil {
+		return *x.IfGenerationNotMatch
+	}
+	return 0
+}
+
+func (x *DeleteObjectRequest) GetIfMetagenerationMatch() int64 {
+	if x != nil && x.IfMetagenerationMatch != nil {
+		return *x.IfMetagenerationMatch
+	}
+	return 0
+}
+
+func (x *DeleteObjectRequest) GetIfMetagenerationNotMatch() int64 {
+	if x != nil && x.IfMetagenerationNotMatch != nil {
+		return *x.IfMetagenerationNotMatch
+	}
+	return 0
+}
+
+func (x *DeleteObjectRequest) GetCommonObjectRequestParams() *CommonObjectRequestParams {
+	if x != nil {
+		return x.CommonObjectRequestParams
+	}
+	return nil
+}
+
+// Message for restoring an object.
+// `bucket`, `object`, and `generation` **must** be set.
+type RestoreObjectRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Required. Name of the bucket in which the object resides.
+	Bucket string `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"`
+	// Required. The name of the object to restore.
+	Object string `protobuf:"bytes,2,opt,name=object,proto3" json:"object,omitempty"`
+	// Required. The specific revision of the object to restore.
+	Generation int64 `protobuf:"varint,3,opt,name=generation,proto3" json:"generation,omitempty"`
+	// Optional. Restore token used to differentiate soft-deleted objects with the
+	// same name and generation. Only applicable for hierarchical namespace
+	// buckets. This parameter is optional, and is only required in the rare case
+	// when there are multiple soft-deleted objects with the same name and
+	// generation.
+	RestoreToken string `protobuf:"bytes,11,opt,name=restore_token,json=restoreToken,proto3" json:"restore_token,omitempty"`
+	// Makes the operation conditional on whether the object's current generation
+	// matches the given value. Setting to 0 makes the operation succeed only if
+	// there are no live versions of the object.
+	IfGenerationMatch *int64 `protobuf:"varint,4,opt,name=if_generation_match,json=ifGenerationMatch,proto3,oneof" json:"if_generation_match,omitempty"`
+	// Makes the operation conditional on whether the object's live generation
+	// does not match the given value. If no live object exists, the precondition
+	// fails. Setting to 0 makes the operation succeed only if there is a live
+	// version of the object.
+	IfGenerationNotMatch *int64 `protobuf:"varint,5,opt,name=if_generation_not_match,json=ifGenerationNotMatch,proto3,oneof" json:"if_generation_not_match,omitempty"`
+	// Makes the operation conditional on whether the object's current
+	// metageneration matches the given value.
+	IfMetagenerationMatch *int64 `protobuf:"varint,6,opt,name=if_metageneration_match,json=ifMetagenerationMatch,proto3,oneof" json:"if_metageneration_match,omitempty"`
+	// Makes the operation conditional on whether the object's current
+	// metageneration does not match the given value.
+	IfMetagenerationNotMatch *int64 `protobuf:"varint,7,opt,name=if_metageneration_not_match,json=ifMetagenerationNotMatch,proto3,oneof" json:"if_metageneration_not_match,omitempty"`
+	// If false or unset, the bucket's default object ACL will be used.
+	// If true, copy the source object's access controls.
+	// Return an error if bucket has UBLA enabled.
+	CopySourceAcl *bool `protobuf:"varint,9,opt,name=copy_source_acl,json=copySourceAcl,proto3,oneof" json:"copy_source_acl,omitempty"`
+	// A set of parameters common to Storage API requests concerning an object.
+	CommonObjectRequestParams *CommonObjectRequestParams `protobuf:"bytes,8,opt,name=common_object_request_params,json=commonObjectRequestParams,proto3" json:"common_object_request_params,omitempty"`
+}
+
+func (x *RestoreObjectRequest) Reset() {
+	*x = RestoreObjectRequest{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[27]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *RestoreObjectRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RestoreObjectRequest) ProtoMessage() {}
+
+func (x *RestoreObjectRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[27]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use RestoreObjectRequest.ProtoReflect.Descriptor instead.
+func (*RestoreObjectRequest) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{27}
+}
+
+func (x *RestoreObjectRequest) GetBucket() string {
+	if x != nil {
+		return x.Bucket
+	}
+	return ""
+}
+
+func (x *RestoreObjectRequest) GetObject() string {
+	if x != nil {
+		return x.Object
+	}
+	return ""
+}
+
+func (x *RestoreObjectRequest) GetGeneration() int64 {
+	if x != nil {
+		return x.Generation
+	}
+	return 0
+}
+
+func (x *RestoreObjectRequest) GetRestoreToken() string {
+	if x != nil {
+		return x.RestoreToken
+	}
+	return ""
+}
+
+func (x *RestoreObjectRequest) GetIfGenerationMatch() int64 {
+	if x != nil && x.IfGenerationMatch != nil {
+		return *x.IfGenerationMatch
+	}
+	return 0
+}
+
+func (x *RestoreObjectRequest) GetIfGenerationNotMatch() int64 {
+	if x != nil && x.IfGenerationNotMatch != nil {
+		return *x.IfGenerationNotMatch
+	}
+	return 0
+}
+
+func (x *RestoreObjectRequest) GetIfMetagenerationMatch() int64 {
+	if x != nil && x.IfMetagenerationMatch != nil {
+		return *x.IfMetagenerationMatch
+	}
+	return 0
+}
+
+func (x *RestoreObjectRequest) GetIfMetagenerationNotMatch() int64 {
+	if x != nil && x.IfMetagenerationNotMatch != nil {
+		return *x.IfMetagenerationNotMatch
+	}
+	return 0
+}
+
+func (x *RestoreObjectRequest) GetCopySourceAcl() bool {
+	if x != nil && x.CopySourceAcl != nil {
+		return *x.CopySourceAcl
+	}
+	return false
+}
+
+func (x *RestoreObjectRequest) GetCommonObjectRequestParams() *CommonObjectRequestParams {
+	if x != nil {
+		return x.CommonObjectRequestParams
+	}
+	return nil
+}
+
+// Request message for GetObject.
+type GetObjectRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Required. Name of the bucket in which the object resides.
+	Bucket string `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"`
+	// Required. Name of the object.
+	Object string `protobuf:"bytes,2,opt,name=object,proto3" json:"object,omitempty"`
+	// If present, selects a specific revision of this object (as opposed to the
+	// latest version, the default).
+	Generation int64 `protobuf:"varint,3,opt,name=generation,proto3" json:"generation,omitempty"`
+	// If true, return the soft-deleted version of this object.
+	SoftDeleted *bool `protobuf:"varint,11,opt,name=soft_deleted,json=softDeleted,proto3,oneof" json:"soft_deleted,omitempty"`
+	// Makes the operation conditional on whether the object's current generation
+	// matches the given value. Setting to 0 makes the operation succeed only if
+	// there are no live versions of the object.
+	IfGenerationMatch *int64 `protobuf:"varint,4,opt,name=if_generation_match,json=ifGenerationMatch,proto3,oneof" json:"if_generation_match,omitempty"`
+	// Makes the operation conditional on whether the object's live generation
+	// does not match the given value. If no live object exists, the precondition
+	// fails. Setting to 0 makes the operation succeed only if there is a live
+	// version of the object.
+	IfGenerationNotMatch *int64 `protobuf:"varint,5,opt,name=if_generation_not_match,json=ifGenerationNotMatch,proto3,oneof" json:"if_generation_not_match,omitempty"`
+	// Makes the operation conditional on whether the object's current
+	// metageneration matches the given value.
+	IfMetagenerationMatch *int64 `protobuf:"varint,6,opt,name=if_metageneration_match,json=ifMetagenerationMatch,proto3,oneof" json:"if_metageneration_match,omitempty"`
+	// Makes the operation conditional on whether the object's current
+	// metageneration does not match the given value.
+	IfMetagenerationNotMatch *int64 `protobuf:"varint,7,opt,name=if_metageneration_not_match,json=ifMetagenerationNotMatch,proto3,oneof" json:"if_metageneration_not_match,omitempty"`
+	// A set of parameters common to Storage API requests concerning an object.
+	CommonObjectRequestParams *CommonObjectRequestParams `protobuf:"bytes,8,opt,name=common_object_request_params,json=commonObjectRequestParams,proto3" json:"common_object_request_params,omitempty"`
+	// Mask specifying which fields to read.
+	// If no mask is specified, will default to all fields except metadata.acl and
+	// metadata.owner.
+	// * may be used to mean "all fields".
+	ReadMask *fieldmaskpb.FieldMask `protobuf:"bytes,10,opt,name=read_mask,json=readMask,proto3,oneof" json:"read_mask,omitempty"`
+	// Optional. Restore token used to differentiate soft-deleted objects with the
+	// same name and generation. Only applicable for hierarchical namespace
+	// buckets and if soft_deleted is set to true. This parameter is optional, and
+	// is only required in the rare case when there are multiple soft-deleted
+	// objects with the same name and generation.
+	RestoreToken string `protobuf:"bytes,12,opt,name=restore_token,json=restoreToken,proto3" json:"restore_token,omitempty"`
+}
+
+func (x *GetObjectRequest) Reset() {
+	*x = GetObjectRequest{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[28]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *GetObjectRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetObjectRequest) ProtoMessage() {}
+
+func (x *GetObjectRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[28]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetObjectRequest.ProtoReflect.Descriptor instead.
+func (*GetObjectRequest) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{28}
+}
+
+func (x *GetObjectRequest) GetBucket() string {
+	if x != nil {
+		return x.Bucket
+	}
+	return ""
+}
+
+func (x *GetObjectRequest) GetObject() string {
+	if x != nil {
+		return x.Object
+	}
+	return ""
+}
+
+func (x *GetObjectRequest) GetGeneration() int64 {
+	if x != nil {
+		return x.Generation
+	}
+	return 0
+}
+
+func (x *GetObjectRequest) GetSoftDeleted() bool {
+	if x != nil && x.SoftDeleted != nil {
+		return *x.SoftDeleted
+	}
+	return false
+}
+
+func (x *GetObjectRequest) GetIfGenerationMatch() int64 {
+	if x != nil && x.IfGenerationMatch != nil {
+		return *x.IfGenerationMatch
+	}
+	return 0
+}
+
+func (x *GetObjectRequest) GetIfGenerationNotMatch() int64 {
+	if x != nil && x.IfGenerationNotMatch != nil {
+		return *x.IfGenerationNotMatch
+	}
+	return 0
+}
+
+func (x *GetObjectRequest) GetIfMetagenerationMatch() int64 {
+	if x != nil && x.IfMetagenerationMatch != nil {
+		return *x.IfMetagenerationMatch
+	}
+	return 0
+}
+
+func (x *GetObjectRequest) GetIfMetagenerationNotMatch() int64 {
+	if x != nil && x.IfMetagenerationNotMatch != nil {
+		return *x.IfMetagenerationNotMatch
+	}
+	return 0
+}
+
+func (x *GetObjectRequest) GetCommonObjectRequestParams() *CommonObjectRequestParams {
+	if x != nil {
+		return x.CommonObjectRequestParams
+	}
+	return nil
+}
+
+func (x *GetObjectRequest) GetReadMask() *fieldmaskpb.FieldMask {
+	if x != nil {
+		return x.ReadMask
+	}
+	return nil
+}
+
+func (x *GetObjectRequest) GetRestoreToken() string {
+	if x != nil {
+		return x.RestoreToken
+	}
+	return ""
+}
+
+// Request message for ListObjects.
+type ListObjectsRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Required. Name of the bucket in which to look for objects.
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Maximum number of `items` plus `prefixes` to return
+	// in a single page of responses. As duplicate `prefixes` are
+	// omitted, fewer total results may be returned than requested. The service
+	// will use this parameter or 1,000 items, whichever is smaller.
+	PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	// A previously-returned page token representing part of the larger set of
+	// results to view.
+	PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
+	// If set, returns results in a directory-like mode. `items` will contain
+	// only objects whose names, aside from the `prefix`, do not
+	// contain `delimiter`. Objects whose names, aside from the
+	// `prefix`, contain `delimiter` will have their name,
+	// truncated after the `delimiter`, returned in
+	// `prefixes`. Duplicate `prefixes` are omitted.
+	Delimiter string `protobuf:"bytes,4,opt,name=delimiter,proto3" json:"delimiter,omitempty"`
+	// If true, objects that end in exactly one instance of `delimiter`
+	// will have their metadata included in `items` in addition to
+	// `prefixes`.
+	IncludeTrailingDelimiter bool `protobuf:"varint,5,opt,name=include_trailing_delimiter,json=includeTrailingDelimiter,proto3" json:"include_trailing_delimiter,omitempty"`
+	// Filter results to objects whose names begin with this prefix.
+	Prefix string `protobuf:"bytes,6,opt,name=prefix,proto3" json:"prefix,omitempty"`
+	// If `true`, lists all versions of an object as distinct results.
+	// For more information, see
+	// [Object
+	// Versioning](https://cloud.google.com/storage/docs/object-versioning).
+	Versions bool `protobuf:"varint,7,opt,name=versions,proto3" json:"versions,omitempty"`
+	// Mask specifying which fields to read from each result.
+	// If no mask is specified, will default to all fields except items.acl and
+	// items.owner.
+	// * may be used to mean "all fields".
+	ReadMask *fieldmaskpb.FieldMask `protobuf:"bytes,8,opt,name=read_mask,json=readMask,proto3,oneof" json:"read_mask,omitempty"`
+	// Optional. Filter results to objects whose names are lexicographically equal
+	// to or after lexicographic_start. If lexicographic_end is also set, the
+	// objects listed have names between lexicographic_start (inclusive) and
+	// lexicographic_end (exclusive).
+	LexicographicStart string `protobuf:"bytes,10,opt,name=lexicographic_start,json=lexicographicStart,proto3" json:"lexicographic_start,omitempty"`
+	// Optional. Filter results to objects whose names are lexicographically
+	// before lexicographic_end. If lexicographic_start is also set, the objects
+	// listed have names between lexicographic_start (inclusive) and
+	// lexicographic_end (exclusive).
+	LexicographicEnd string `protobuf:"bytes,11,opt,name=lexicographic_end,json=lexicographicEnd,proto3" json:"lexicographic_end,omitempty"`
+	// Optional. If true, only list all soft-deleted versions of the object.
+	// Soft delete policy is required to set this option.
+	SoftDeleted bool `protobuf:"varint,12,opt,name=soft_deleted,json=softDeleted,proto3" json:"soft_deleted,omitempty"`
+	// Optional. If true, will also include folders and managed folders (besides
+	// objects) in the returned `prefixes`. Requires `delimiter` to be set to '/'.
+	IncludeFoldersAsPrefixes bool `protobuf:"varint,13,opt,name=include_folders_as_prefixes,json=includeFoldersAsPrefixes,proto3" json:"include_folders_as_prefixes,omitempty"`
+	// Optional. Filter results to objects and prefixes that match this glob
+	// pattern. See [List Objects Using
+	// Glob](https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-objects-and-prefixes-using-glob)
+	// for the full syntax.
+	MatchGlob string `protobuf:"bytes,14,opt,name=match_glob,json=matchGlob,proto3" json:"match_glob,omitempty"`
+}
+
+func (x *ListObjectsRequest) Reset() {
+	*x = ListObjectsRequest{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[29]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ListObjectsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListObjectsRequest) ProtoMessage() {}
+
+func (x *ListObjectsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[29]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ListObjectsRequest.ProtoReflect.Descriptor instead.
+func (*ListObjectsRequest) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{29}
+}
+
+func (x *ListObjectsRequest) GetParent() string {
+	if x != nil {
+		return x.Parent
+	}
+	return ""
+}
+
+func (x *ListObjectsRequest) GetPageSize() int32 {
+	if x != nil {
+		return x.PageSize
+	}
+	return 0
+}
+
+func (x *ListObjectsRequest) GetPageToken() string {
+	if x != nil {
+		return x.PageToken
+	}
+	return ""
+}
+
+func (x *ListObjectsRequest) GetDelimiter() string {
+	if x != nil {
+		return x.Delimiter
+	}
+	return ""
+}
+
+func (x *ListObjectsRequest) GetIncludeTrailingDelimiter() bool {
+	if x != nil {
+		return x.IncludeTrailingDelimiter
+	}
+	return false
+}
+
+func (x *ListObjectsRequest) GetPrefix() string {
+	if x != nil {
+		return x.Prefix
+	}
+	return ""
+}
+
+func (x *ListObjectsRequest) GetVersions() bool {
+	if x != nil {
+		return x.Versions
+	}
+	return false
+}
+
+func (x *ListObjectsRequest) GetReadMask() *fieldmaskpb.FieldMask {
+	if x != nil {
+		return x.ReadMask
+	}
+	return nil
+}
+
+func (x *ListObjectsRequest) GetLexicographicStart() string {
+	if x != nil {
+		return x.LexicographicStart
+	}
+	return ""
+}
+
+func (x *ListObjectsRequest) GetLexicographicEnd() string {
+	if x != nil {
+		return x.LexicographicEnd
+	}
+	return ""
+}
+
+func (x *ListObjectsRequest) GetSoftDeleted() bool {
+	if x != nil {
+		return x.SoftDeleted
+	}
+	return false
+}
+
+func (x *ListObjectsRequest) GetIncludeFoldersAsPrefixes() bool {
+	if x != nil {
+		return x.IncludeFoldersAsPrefixes
+	}
+	return false
+}
+
+func (x *ListObjectsRequest) GetMatchGlob() string {
+	if x != nil {
+		return x.MatchGlob
+	}
+	return ""
+}
+
+// Request message for RewriteObject.
+// If the source object is encrypted using a Customer-Supplied Encryption Key
+// the key information must be provided in the copy_source_encryption_algorithm,
+// copy_source_encryption_key_bytes, and copy_source_encryption_key_sha256_bytes
+// fields. If the destination object should be encrypted the keying information
+// should be provided in the encryption_algorithm, encryption_key_bytes, and
+// encryption_key_sha256_bytes fields of the
+// common_object_request_params.customer_encryption field.
+type RewriteObjectRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Required. Immutable. The name of the destination object.
+	// See the
+	// [Naming Guidelines](https://cloud.google.com/storage/docs/objects#naming).
+	// Example: `test.txt`
+	// The `name` field by itself does not uniquely identify a Cloud Storage
+	// object. A Cloud Storage object is uniquely identified by the tuple of
+	// (bucket, object, generation).
+	DestinationName string `protobuf:"bytes,24,opt,name=destination_name,json=destinationName,proto3" json:"destination_name,omitempty"`
+	// Required. Immutable. The name of the bucket containing the destination
+	// object.
+	DestinationBucket string `protobuf:"bytes,25,opt,name=destination_bucket,json=destinationBucket,proto3" json:"destination_bucket,omitempty"`
+	// The name of the Cloud KMS key that will be used to encrypt the destination
+	// object. The Cloud KMS key must be located in same location as the object.
+	// If the parameter is not specified, the request uses the destination
+	// bucket's default encryption key, if any, or else the Google-managed
+	// encryption key.
+	DestinationKmsKey string `protobuf:"bytes,27,opt,name=destination_kms_key,json=destinationKmsKey,proto3" json:"destination_kms_key,omitempty"`
+	// Properties of the destination, post-rewrite object.
+	// The `name`, `bucket` and `kms_key` fields must not be populated (these
+	// values are specified in the `destination_name`, `destination_bucket`, and
+	// `destination_kms_key` fields).
+	// If `destination` is present it will be used to construct the destination
+	// object's metadata; otherwise the destination object's metadata will be
+	// copied from the source object.
+	Destination *Object `protobuf:"bytes,1,opt,name=destination,proto3" json:"destination,omitempty"`
+	// Required. Name of the bucket in which to find the source object.
+	SourceBucket string `protobuf:"bytes,2,opt,name=source_bucket,json=sourceBucket,proto3" json:"source_bucket,omitempty"`
+	// Required. Name of the source object.
+	SourceObject string `protobuf:"bytes,3,opt,name=source_object,json=sourceObject,proto3" json:"source_object,omitempty"`
+	// If present, selects a specific revision of the source object (as opposed to
+	// the latest version, the default).
+	SourceGeneration int64 `protobuf:"varint,4,opt,name=source_generation,json=sourceGeneration,proto3" json:"source_generation,omitempty"`
+	// Include this field (from the previous rewrite response) on each rewrite
+	// request after the first one, until the rewrite response 'done' flag is
+	// true. Calls that provide a rewriteToken can omit all other request fields,
+	// but if included those fields must match the values provided in the first
+	// rewrite request.
+	RewriteToken string `protobuf:"bytes,5,opt,name=rewrite_token,json=rewriteToken,proto3" json:"rewrite_token,omitempty"`
+	// Apply a predefined set of access controls to the destination object.
+	// Valid values are "authenticatedRead", "bucketOwnerFullControl",
+	// "bucketOwnerRead", "private", "projectPrivate", or "publicRead".
+	DestinationPredefinedAcl string `protobuf:"bytes,28,opt,name=destination_predefined_acl,json=destinationPredefinedAcl,proto3" json:"destination_predefined_acl,omitempty"`
+	// Makes the operation conditional on whether the object's current generation
+	// matches the given value. Setting to 0 makes the operation succeed only if
+	// there are no live versions of the object.
+	IfGenerationMatch *int64 `protobuf:"varint,7,opt,name=if_generation_match,json=ifGenerationMatch,proto3,oneof" json:"if_generation_match,omitempty"`
+	// Makes the operation conditional on whether the object's live generation
+	// does not match the given value. If no live object exists, the precondition
+	// fails. Setting to 0 makes the operation succeed only if there is a live
+	// version of the object.
+	IfGenerationNotMatch *int64 `protobuf:"varint,8,opt,name=if_generation_not_match,json=ifGenerationNotMatch,proto3,oneof" json:"if_generation_not_match,omitempty"`
+	// Makes the operation conditional on whether the destination object's current
+	// metageneration matches the given value.
+	IfMetagenerationMatch *int64 `protobuf:"varint,9,opt,name=if_metageneration_match,json=ifMetagenerationMatch,proto3,oneof" json:"if_metageneration_match,omitempty"`
+	// Makes the operation conditional on whether the destination object's current
+	// metageneration does not match the given value.
+	IfMetagenerationNotMatch *int64 `protobuf:"varint,10,opt,name=if_metageneration_not_match,json=ifMetagenerationNotMatch,proto3,oneof" json:"if_metageneration_not_match,omitempty"`
+	// Makes the operation conditional on whether the source object's live
+	// generation matches the given value.
+	IfSourceGenerationMatch *int64 `protobuf:"varint,11,opt,name=if_source_generation_match,json=ifSourceGenerationMatch,proto3,oneof" json:"if_source_generation_match,omitempty"`
+	// Makes the operation conditional on whether the source object's live
+	// generation does not match the given value.
+	IfSourceGenerationNotMatch *int64 `protobuf:"varint,12,opt,name=if_source_generation_not_match,json=ifSourceGenerationNotMatch,proto3,oneof" json:"if_source_generation_not_match,omitempty"`
+	// Makes the operation conditional on whether the source object's current
+	// metageneration matches the given value.
+	IfSourceMetagenerationMatch *int64 `protobuf:"varint,13,opt,name=if_source_metageneration_match,json=ifSourceMetagenerationMatch,proto3,oneof" json:"if_source_metageneration_match,omitempty"`
+	// Makes the operation conditional on whether the source object's current
+	// metageneration does not match the given value.
+	IfSourceMetagenerationNotMatch *int64 `protobuf:"varint,14,opt,name=if_source_metageneration_not_match,json=ifSourceMetagenerationNotMatch,proto3,oneof" json:"if_source_metageneration_not_match,omitempty"`
+	// The maximum number of bytes that will be rewritten per rewrite request.
+	// Most callers
+	// shouldn't need to specify this parameter - it is primarily in place to
+	// support testing. If specified the value must be an integral multiple of
+	// 1 MiB (1048576). Also, this only applies to requests where the source and
+	// destination span locations and/or storage classes. Finally, this value must
+	// not change across rewrite calls else you'll get an error that the
+	// `rewriteToken` is invalid.
+	MaxBytesRewrittenPerCall int64 `protobuf:"varint,15,opt,name=max_bytes_rewritten_per_call,json=maxBytesRewrittenPerCall,proto3" json:"max_bytes_rewritten_per_call,omitempty"`
+	// The algorithm used to encrypt the source object, if any. Used if the source
+	// object was encrypted with a Customer-Supplied Encryption Key.
+	CopySourceEncryptionAlgorithm string `protobuf:"bytes,16,opt,name=copy_source_encryption_algorithm,json=copySourceEncryptionAlgorithm,proto3" json:"copy_source_encryption_algorithm,omitempty"`
+	// The raw bytes (not base64-encoded) AES-256 encryption key used to encrypt
+	// the source object, if it was encrypted with a Customer-Supplied Encryption
+	// Key.
+	CopySourceEncryptionKeyBytes []byte `protobuf:"bytes,21,opt,name=copy_source_encryption_key_bytes,json=copySourceEncryptionKeyBytes,proto3" json:"copy_source_encryption_key_bytes,omitempty"`
+	// The raw bytes (not base64-encoded) SHA256 hash of the encryption key used
+	// to encrypt the source object, if it was encrypted with a Customer-Supplied
+	// Encryption Key.
+	CopySourceEncryptionKeySha256Bytes []byte `protobuf:"bytes,22,opt,name=copy_source_encryption_key_sha256_bytes,json=copySourceEncryptionKeySha256Bytes,proto3" json:"copy_source_encryption_key_sha256_bytes,omitempty"`
+	// A set of parameters common to Storage API requests concerning an object.
+	CommonObjectRequestParams *CommonObjectRequestParams `protobuf:"bytes,19,opt,name=common_object_request_params,json=commonObjectRequestParams,proto3" json:"common_object_request_params,omitempty"`
+	// The checksums of the complete object. This will be used to validate the
+	// destination object after rewriting.
+	ObjectChecksums *ObjectChecksums `protobuf:"bytes,29,opt,name=object_checksums,json=objectChecksums,proto3" json:"object_checksums,omitempty"`
+}
+
+func (x *RewriteObjectRequest) Reset() {
+	*x = RewriteObjectRequest{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[30]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *RewriteObjectRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RewriteObjectRequest) ProtoMessage() {}
+
+func (x *RewriteObjectRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[30]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use RewriteObjectRequest.ProtoReflect.Descriptor instead.
+func (*RewriteObjectRequest) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{30}
+}
+
+func (x *RewriteObjectRequest) GetDestinationName() string {
+	if x != nil {
+		return x.DestinationName
+	}
+	return ""
+}
+
+func (x *RewriteObjectRequest) GetDestinationBucket() string {
+	if x != nil {
+		return x.DestinationBucket
+	}
+	return ""
+}
+
+func (x *RewriteObjectRequest) GetDestinationKmsKey() string {
+	if x != nil {
+		return x.DestinationKmsKey
+	}
+	return ""
+}
+
+func (x *RewriteObjectRequest) GetDestination() *Object {
+	if x != nil {
+		return x.Destination
+	}
+	return nil
+}
+
+func (x *RewriteObjectRequest) GetSourceBucket() string {
+	if x != nil {
+		return x.SourceBucket
+	}
+	return ""
+}
+
+func (x *RewriteObjectRequest) GetSourceObject() string {
+	if x != nil {
+		return x.SourceObject
+	}
+	return ""
+}
+
+func (x *RewriteObjectRequest) GetSourceGeneration() int64 {
+	if x != nil {
+		return x.SourceGeneration
+	}
+	return 0
+}
+
+func (x *RewriteObjectRequest) GetRewriteToken() string {
+	if x != nil {
+		return x.RewriteToken
+	}
+	return ""
+}
+
+func (x *RewriteObjectRequest) GetDestinationPredefinedAcl() string {
+	if x != nil {
+		return x.DestinationPredefinedAcl
+	}
+	return ""
+}
+
+func (x *RewriteObjectRequest) GetIfGenerationMatch() int64 {
+	if x != nil && x.IfGenerationMatch != nil {
+		return *x.IfGenerationMatch
+	}
+	return 0
+}
+
+func (x *RewriteObjectRequest) GetIfGenerationNotMatch() int64 {
+	if x != nil && x.IfGenerationNotMatch != nil {
+		return *x.IfGenerationNotMatch
+	}
+	return 0
+}
+
+func (x *RewriteObjectRequest) GetIfMetagenerationMatch() int64 {
+	if x != nil && x.IfMetagenerationMatch != nil {
+		return *x.IfMetagenerationMatch
+	}
+	return 0
+}
+
+func (x *RewriteObjectRequest) GetIfMetagenerationNotMatch() int64 {
+	if x != nil && x.IfMetagenerationNotMatch != nil {
+		return *x.IfMetagenerationNotMatch
+	}
+	return 0
+}
+
+func (x *RewriteObjectRequest) GetIfSourceGenerationMatch() int64 {
+	if x != nil && x.IfSourceGenerationMatch != nil {
+		return *x.IfSourceGenerationMatch
+	}
+	return 0
+}
+
+func (x *RewriteObjectRequest) GetIfSourceGenerationNotMatch() int64 {
+	if x != nil && x.IfSourceGenerationNotMatch != nil {
+		return *x.IfSourceGenerationNotMatch
+	}
+	return 0
+}
+
+func (x *RewriteObjectRequest) GetIfSourceMetagenerationMatch() int64 {
+	if x != nil && x.IfSourceMetagenerationMatch != nil {
+		return *x.IfSourceMetagenerationMatch
+	}
+	return 0
+}
+
+func (x *RewriteObjectRequest) GetIfSourceMetagenerationNotMatch() int64 {
+	if x != nil && x.IfSourceMetagenerationNotMatch != nil {
+		return *x.IfSourceMetagenerationNotMatch
+	}
+	return 0
+}
+
+func (x *RewriteObjectRequest) GetMaxBytesRewrittenPerCall() int64 {
+	if x != nil {
+		return x.MaxBytesRewrittenPerCall
+	}
+	return 0
+}
+
+func (x *RewriteObjectRequest) GetCopySourceEncryptionAlgorithm() string {
+	if x != nil {
+		return x.CopySourceEncryptionAlgorithm
+	}
+	return ""
+}
+
+func (x *RewriteObjectRequest) GetCopySourceEncryptionKeyBytes() []byte {
+	if x != nil {
+		return x.CopySourceEncryptionKeyBytes
+	}
+	return nil
+}
+
+func (x *RewriteObjectRequest) GetCopySourceEncryptionKeySha256Bytes() []byte {
+	if x != nil {
+		return x.CopySourceEncryptionKeySha256Bytes
+	}
+	return nil
+}
+
+func (x *RewriteObjectRequest) GetCommonObjectRequestParams() *CommonObjectRequestParams {
+	if x != nil {
+		return x.CommonObjectRequestParams
+	}
+	return nil
+}
+
+func (x *RewriteObjectRequest) GetObjectChecksums() *ObjectChecksums {
+	if x != nil {
+		return x.ObjectChecksums
+	}
+	return nil
+}
+
+// A rewrite response.
+type RewriteResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The total bytes written so far, which can be used to provide a waiting user
+	// with a progress indicator. This property is always present in the response.
+	TotalBytesRewritten int64 `protobuf:"varint,1,opt,name=total_bytes_rewritten,json=totalBytesRewritten,proto3" json:"total_bytes_rewritten,omitempty"`
+	// The total size of the object being copied in bytes. This property is always
+	// present in the response.
+	ObjectSize int64 `protobuf:"varint,2,opt,name=object_size,json=objectSize,proto3" json:"object_size,omitempty"`
+	// `true` if the copy is finished; otherwise, `false` if
+	// the copy is in progress. This property is always present in the response.
+	Done bool `protobuf:"varint,3,opt,name=done,proto3" json:"done,omitempty"`
+	// A token to use in subsequent requests to continue copying data. This token
+	// is present in the response only when there is more data to copy.
+	RewriteToken string `protobuf:"bytes,4,opt,name=rewrite_token,json=rewriteToken,proto3" json:"rewrite_token,omitempty"`
+	// A resource containing the metadata for the copied-to object. This property
+	// is present in the response only when copying completes.
+	Resource *Object `protobuf:"bytes,5,opt,name=resource,proto3" json:"resource,omitempty"`
+}
+
+func (x *RewriteResponse) Reset() {
+	*x = RewriteResponse{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[31]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *RewriteResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RewriteResponse) ProtoMessage() {}
+
+func (x *RewriteResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[31]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use RewriteResponse.ProtoReflect.Descriptor instead.
+func (*RewriteResponse) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{31}
+}
+
+func (x *RewriteResponse) GetTotalBytesRewritten() int64 {
+	if x != nil {
+		return x.TotalBytesRewritten
+	}
+	return 0
+}
+
+func (x *RewriteResponse) GetObjectSize() int64 {
+	if x != nil {
+		return x.ObjectSize
+	}
+	return 0
+}
+
+func (x *RewriteResponse) GetDone() bool {
+	if x != nil {
+		return x.Done
+	}
+	return false
+}
+
+func (x *RewriteResponse) GetRewriteToken() string {
+	if x != nil {
+		return x.RewriteToken
+	}
+	return ""
+}
+
+func (x *RewriteResponse) GetResource() *Object {
+	if x != nil {
+		return x.Resource
+	}
+	return nil
+}
+
+// Request message for MoveObject.
+type MoveObjectRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Required. Name of the bucket in which the object resides.
+	Bucket string `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"`
+	// Required. Name of the source object.
+	SourceObject string `protobuf:"bytes,2,opt,name=source_object,json=sourceObject,proto3" json:"source_object,omitempty"`
+	// Required. Name of the destination object.
+	DestinationObject string `protobuf:"bytes,3,opt,name=destination_object,json=destinationObject,proto3" json:"destination_object,omitempty"`
+	// Optional. Makes the operation conditional on whether the source object's
+	// current generation matches the given value. `if_source_generation_match`
+	// and `if_source_generation_not_match` conditions are mutually exclusive:
+	// it's an error for both of them to be set in the request.
+	IfSourceGenerationMatch *int64 `protobuf:"varint,4,opt,name=if_source_generation_match,json=ifSourceGenerationMatch,proto3,oneof" json:"if_source_generation_match,omitempty"`
+	// Optional. Makes the operation conditional on whether the source object's
+	// current generation does not match the given value.
+	// `if_source_generation_match` and `if_source_generation_not_match`
+	// conditions are mutually exclusive: it's an error for both of them to be set
+	// in the request.
+	IfSourceGenerationNotMatch *int64 `protobuf:"varint,5,opt,name=if_source_generation_not_match,json=ifSourceGenerationNotMatch,proto3,oneof" json:"if_source_generation_not_match,omitempty"`
+	// Optional. Makes the operation conditional on whether the source object's
+	// current metageneration matches the given value.
+	// `if_source_metageneration_match` and `if_source_metageneration_not_match`
+	// conditions are mutually exclusive: it's an error for both of them to be set
+	// in the request.
+	IfSourceMetagenerationMatch *int64 `protobuf:"varint,6,opt,name=if_source_metageneration_match,json=ifSourceMetagenerationMatch,proto3,oneof" json:"if_source_metageneration_match,omitempty"`
+	// Optional. Makes the operation conditional on whether the source object's
+	// current metageneration does not match the given value.
+	// `if_source_metageneration_match` and `if_source_metageneration_not_match`
+	// conditions are mutually exclusive: it's an error for both of them to be set
+	// in the request.
+	IfSourceMetagenerationNotMatch *int64 `protobuf:"varint,7,opt,name=if_source_metageneration_not_match,json=ifSourceMetagenerationNotMatch,proto3,oneof" json:"if_source_metageneration_not_match,omitempty"`
+	// Optional. Makes the operation conditional on whether the destination
+	// object's current generation matches the given value. Setting to 0 makes the
+	// operation succeed only if there are no live versions of the object.
+	// `if_generation_match` and `if_generation_not_match` conditions are mutually
+	// exclusive: it's an error for both of them to be set in the request.
+	IfGenerationMatch *int64 `protobuf:"varint,8,opt,name=if_generation_match,json=ifGenerationMatch,proto3,oneof" json:"if_generation_match,omitempty"`
+	// Optional. Makes the operation conditional on whether the destination
+	// object's current generation does not match the given value. If no live
+	// object exists, the precondition fails. Setting to 0 makes the operation
+	// succeed only if there is a live version of the object.
+	// `if_generation_match` and `if_generation_not_match` conditions are mutually
+	// exclusive: it's an error for both of them to be set in the request.
+	IfGenerationNotMatch *int64 `protobuf:"varint,9,opt,name=if_generation_not_match,json=ifGenerationNotMatch,proto3,oneof" json:"if_generation_not_match,omitempty"`
+	// Optional. Makes the operation conditional on whether the destination
+	// object's current metageneration matches the given value.
+	// `if_metageneration_match` and `if_metageneration_not_match` conditions are
+	// mutually exclusive: it's an error for both of them to be set in the
+	// request.
+	IfMetagenerationMatch *int64 `protobuf:"varint,10,opt,name=if_metageneration_match,json=ifMetagenerationMatch,proto3,oneof" json:"if_metageneration_match,omitempty"`
+	// Optional. Makes the operation conditional on whether the destination
+	// object's current metageneration does not match the given value.
+	// `if_metageneration_match` and `if_metageneration_not_match` conditions are
+	// mutually exclusive: it's an error for both of them to be set in the
+	// request.
+	IfMetagenerationNotMatch *int64 `protobuf:"varint,11,opt,name=if_metageneration_not_match,json=ifMetagenerationNotMatch,proto3,oneof" json:"if_metageneration_not_match,omitempty"`
+}
+
+func (x *MoveObjectRequest) Reset() {
+	*x = MoveObjectRequest{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[32]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *MoveObjectRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MoveObjectRequest) ProtoMessage() {}
+
+func (x *MoveObjectRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[32]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use MoveObjectRequest.ProtoReflect.Descriptor instead.
+func (*MoveObjectRequest) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{32}
+}
+
+func (x *MoveObjectRequest) GetBucket() string {
+	if x != nil {
+		return x.Bucket
+	}
+	return ""
+}
+
+func (x *MoveObjectRequest) GetSourceObject() string {
+	if x != nil {
+		return x.SourceObject
+	}
+	return ""
+}
+
+func (x *MoveObjectRequest) GetDestinationObject() string {
+	if x != nil {
+		return x.DestinationObject
+	}
+	return ""
+}
+
+func (x *MoveObjectRequest) GetIfSourceGenerationMatch() int64 {
+	if x != nil && x.IfSourceGenerationMatch != nil {
+		return *x.IfSourceGenerationMatch
+	}
+	return 0
+}
+
+func (x *MoveObjectRequest) GetIfSourceGenerationNotMatch() int64 {
+	if x != nil && x.IfSourceGenerationNotMatch != nil {
+		return *x.IfSourceGenerationNotMatch
+	}
+	return 0
+}
+
+func (x *MoveObjectRequest) GetIfSourceMetagenerationMatch() int64 {
+	if x != nil && x.IfSourceMetagenerationMatch != nil {
+		return *x.IfSourceMetagenerationMatch
+	}
+	return 0
+}
+
+func (x *MoveObjectRequest) GetIfSourceMetagenerationNotMatch() int64 {
+	if x != nil && x.IfSourceMetagenerationNotMatch != nil {
+		return *x.IfSourceMetagenerationNotMatch
+	}
+	return 0
+}
+
+func (x *MoveObjectRequest) GetIfGenerationMatch() int64 {
+	if x != nil && x.IfGenerationMatch != nil {
+		return *x.IfGenerationMatch
+	}
+	return 0
+}
+
+func (x *MoveObjectRequest) GetIfGenerationNotMatch() int64 {
+	if x != nil && x.IfGenerationNotMatch != nil {
+		return *x.IfGenerationNotMatch
+	}
+	return 0
+}
+
+func (x *MoveObjectRequest) GetIfMetagenerationMatch() int64 {
+	if x != nil && x.IfMetagenerationMatch != nil {
+		return *x.IfMetagenerationMatch
+	}
+	return 0
+}
+
+func (x *MoveObjectRequest) GetIfMetagenerationNotMatch() int64 {
+	if x != nil && x.IfMetagenerationNotMatch != nil {
+		return *x.IfMetagenerationNotMatch
+	}
+	return 0
+}
+
+// Request message for UpdateObject.
+type UpdateObjectRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Required. The object to update.
+	// The object's bucket and name fields are used to identify the object to
+	// update. If present, the object's generation field selects a specific
+	// revision of this object whose metadata should be updated. Otherwise,
+	// assumes the live version of the object.
+	Object *Object `protobuf:"bytes,1,opt,name=object,proto3" json:"object,omitempty"`
+	// Makes the operation conditional on whether the object's current generation
+	// matches the given value. Setting to 0 makes the operation succeed only if
+	// there are no live versions of the object.
+	IfGenerationMatch *int64 `protobuf:"varint,2,opt,name=if_generation_match,json=ifGenerationMatch,proto3,oneof" json:"if_generation_match,omitempty"`
+	// Makes the operation conditional on whether the object's live generation
+	// does not match the given value. If no live object exists, the precondition
+	// fails. Setting to 0 makes the operation succeed only if there is a live
+	// version of the object.
+	IfGenerationNotMatch *int64 `protobuf:"varint,3,opt,name=if_generation_not_match,json=ifGenerationNotMatch,proto3,oneof" json:"if_generation_not_match,omitempty"`
+	// Makes the operation conditional on whether the object's current
+	// metageneration matches the given value.
+	IfMetagenerationMatch *int64 `protobuf:"varint,4,opt,name=if_metageneration_match,json=ifMetagenerationMatch,proto3,oneof" json:"if_metageneration_match,omitempty"`
+	// Makes the operation conditional on whether the object's current
+	// metageneration does not match the given value.
+	IfMetagenerationNotMatch *int64 `protobuf:"varint,5,opt,name=if_metageneration_not_match,json=ifMetagenerationNotMatch,proto3,oneof" json:"if_metageneration_not_match,omitempty"`
+	// Apply a predefined set of access controls to this object.
+	// Valid values are "authenticatedRead", "bucketOwnerFullControl",
+	// "bucketOwnerRead", "private", "projectPrivate", or "publicRead".
+	PredefinedAcl string `protobuf:"bytes,10,opt,name=predefined_acl,json=predefinedAcl,proto3" json:"predefined_acl,omitempty"`
+	// Required. List of fields to be updated.
+	//
+	// To specify ALL fields, equivalent to the JSON API's "update" function,
+	// specify a single field with the value `*`. Note: not recommended. If a new
+	// field is introduced at a later time, an older client updating with the `*`
+	// may accidentally reset the new field's value.
+	//
+	// Not specifying any fields is an error.
+	UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,7,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// A set of parameters common to Storage API requests concerning an object.
+	CommonObjectRequestParams *CommonObjectRequestParams `protobuf:"bytes,8,opt,name=common_object_request_params,json=commonObjectRequestParams,proto3" json:"common_object_request_params,omitempty"`
+}
+
+func (x *UpdateObjectRequest) Reset() {
+	*x = UpdateObjectRequest{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[33]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *UpdateObjectRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UpdateObjectRequest) ProtoMessage() {}
+
+func (x *UpdateObjectRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[33]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use UpdateObjectRequest.ProtoReflect.Descriptor instead.
+func (*UpdateObjectRequest) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{33}
+}
+
+func (x *UpdateObjectRequest) GetObject() *Object {
+	if x != nil {
+		return x.Object
+	}
+	return nil
+}
+
+func (x *UpdateObjectRequest) GetIfGenerationMatch() int64 {
+	if x != nil && x.IfGenerationMatch != nil {
+		return *x.IfGenerationMatch
+	}
+	return 0
+}
+
+func (x *UpdateObjectRequest) GetIfGenerationNotMatch() int64 {
+	if x != nil && x.IfGenerationNotMatch != nil {
+		return *x.IfGenerationNotMatch
+	}
+	return 0
+}
+
+func (x *UpdateObjectRequest) GetIfMetagenerationMatch() int64 {
+	if x != nil && x.IfMetagenerationMatch != nil {
+		return *x.IfMetagenerationMatch
+	}
+	return 0
+}
+
+func (x *UpdateObjectRequest) GetIfMetagenerationNotMatch() int64 {
+	if x != nil && x.IfMetagenerationNotMatch != nil {
+		return *x.IfMetagenerationNotMatch
+	}
+	return 0
+}
+
+func (x *UpdateObjectRequest) GetPredefinedAcl() string {
+	if x != nil {
+		return x.PredefinedAcl
+	}
+	return ""
+}
+
+func (x *UpdateObjectRequest) GetUpdateMask() *fieldmaskpb.FieldMask {
+	if x != nil {
+		return x.UpdateMask
+	}
+	return nil
+}
+
+func (x *UpdateObjectRequest) GetCommonObjectRequestParams() *CommonObjectRequestParams {
+	if x != nil {
+		return x.CommonObjectRequestParams
+	}
+	return nil
+}
+
+// Parameters that can be passed to any object request.
+type CommonObjectRequestParams struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Encryption algorithm used with the Customer-Supplied Encryption Keys
+	// feature.
+	EncryptionAlgorithm string `protobuf:"bytes,1,opt,name=encryption_algorithm,json=encryptionAlgorithm,proto3" json:"encryption_algorithm,omitempty"`
+	// Encryption key used with the Customer-Supplied Encryption Keys feature.
+	// In raw bytes format (not base64-encoded).
+	EncryptionKeyBytes []byte `protobuf:"bytes,4,opt,name=encryption_key_bytes,json=encryptionKeyBytes,proto3" json:"encryption_key_bytes,omitempty"`
+	// SHA256 hash of encryption key used with the Customer-Supplied Encryption
+	// Keys feature.
+	EncryptionKeySha256Bytes []byte `protobuf:"bytes,5,opt,name=encryption_key_sha256_bytes,json=encryptionKeySha256Bytes,proto3" json:"encryption_key_sha256_bytes,omitempty"`
+}
+
+func (x *CommonObjectRequestParams) Reset() {
+	*x = CommonObjectRequestParams{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[34]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *CommonObjectRequestParams) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CommonObjectRequestParams) ProtoMessage() {}
+
+func (x *CommonObjectRequestParams) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[34]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CommonObjectRequestParams.ProtoReflect.Descriptor instead.
+func (*CommonObjectRequestParams) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{34}
+}
+
+func (x *CommonObjectRequestParams) GetEncryptionAlgorithm() string {
+	if x != nil {
+		return x.EncryptionAlgorithm
+	}
+	return ""
+}
+
+func (x *CommonObjectRequestParams) GetEncryptionKeyBytes() []byte {
+	if x != nil {
+		return x.EncryptionKeyBytes
+	}
+	return nil
+}
+
+func (x *CommonObjectRequestParams) GetEncryptionKeySha256Bytes() []byte {
+	if x != nil {
+		return x.EncryptionKeySha256Bytes
+	}
+	return nil
+}
+
+// Shared constants.
+type ServiceConstants struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *ServiceConstants) Reset() {
+	*x = ServiceConstants{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[35]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ServiceConstants) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ServiceConstants) ProtoMessage() {}
+
+func (x *ServiceConstants) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[35]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ServiceConstants.ProtoReflect.Descriptor instead.
+func (*ServiceConstants) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{35}
+}
+
+// A bucket.
+type Bucket struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Immutable. The name of the bucket.
+	// Format: `projects/{project}/buckets/{bucket}`
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// Output only. The user-chosen part of the bucket name. The `{bucket}`
+	// portion of the `name` field. For globally unique buckets, this is equal to
+	// the "bucket name" of other Cloud Storage APIs. Example: "pub".
+	BucketId string `protobuf:"bytes,2,opt,name=bucket_id,json=bucketId,proto3" json:"bucket_id,omitempty"`
+	// The etag of the bucket.
+	// If included in the metadata of an UpdateBucketRequest, the operation will
+	// only be performed if the etag matches that of the bucket.
+	Etag string `protobuf:"bytes,29,opt,name=etag,proto3" json:"etag,omitempty"`
+	// Immutable. The project which owns this bucket, in the format of
+	// "projects/{projectIdentifier}".
+	// {projectIdentifier} can be the project ID or project number.
+	Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"`
+	// Output only. The metadata generation of this bucket.
+	Metageneration int64 `protobuf:"varint,4,opt,name=metageneration,proto3" json:"metageneration,omitempty"`
+	// Immutable. The location of the bucket. Object data for objects in the
+	// bucket resides in physical storage within this region.  Defaults to `US`.
+	// See the
+	// [https://developers.google.com/storage/docs/concepts-techniques#specifyinglocations"][developer's
+	// guide] for the authoritative list. Attempting to update this field after
+	// the bucket is created will result in an error.
+	Location string `protobuf:"bytes,5,opt,name=location,proto3" json:"location,omitempty"`
+	// Output only. The location type of the bucket (region, dual-region,
+	// multi-region, etc).
+	LocationType string `protobuf:"bytes,6,opt,name=location_type,json=locationType,proto3" json:"location_type,omitempty"`
+	// The bucket's default storage class, used whenever no storageClass is
+	// specified for a newly-created object. This defines how objects in the
+	// bucket are stored and determines the SLA and the cost of storage.
+	// If this value is not specified when the bucket is created, it will default
+	// to `STANDARD`. For more information, see
+	// https://developers.google.com/storage/docs/storage-classes.
+	StorageClass string `protobuf:"bytes,7,opt,name=storage_class,json=storageClass,proto3" json:"storage_class,omitempty"`
+	// The recovery point objective for cross-region replication of the bucket.
+	// Applicable only for dual- and multi-region buckets. "DEFAULT" uses default
+	// replication. "ASYNC_TURBO" enables turbo replication, valid for dual-region
+	// buckets only. If rpo is not specified when the bucket is created, it
+	// defaults to "DEFAULT". For more information, see
+	// https://cloud.google.com/storage/docs/availability-durability#turbo-replication.
+	Rpo string `protobuf:"bytes,27,opt,name=rpo,proto3" json:"rpo,omitempty"`
+	// Access controls on the bucket.
+	// If iam_config.uniform_bucket_level_access is enabled on this bucket,
+	// requests to set, read, or modify acl is an error.
+	Acl []*BucketAccessControl `protobuf:"bytes,8,rep,name=acl,proto3" json:"acl,omitempty"`
+	// Default access controls to apply to new objects when no ACL is provided.
+	// If iam_config.uniform_bucket_level_access is enabled on this bucket,
+	// requests to set, read, or modify acl is an error.
+	DefaultObjectAcl []*ObjectAccessControl `protobuf:"bytes,9,rep,name=default_object_acl,json=defaultObjectAcl,proto3" json:"default_object_acl,omitempty"`
+	// The bucket's lifecycle config. See
+	// [https://developers.google.com/storage/docs/lifecycle]Lifecycle Management]
+	// for more information.
+	Lifecycle *Bucket_Lifecycle `protobuf:"bytes,10,opt,name=lifecycle,proto3" json:"lifecycle,omitempty"`
+	// Output only. The creation time of the bucket.
+	CreateTime *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"`
+	// The bucket's [https://www.w3.org/TR/cors/][Cross-Origin Resource Sharing]
+	// (CORS) config.
+	Cors []*Bucket_Cors `protobuf:"bytes,12,rep,name=cors,proto3" json:"cors,omitempty"`
+	// Output only. The modification time of the bucket.
+	UpdateTime *timestamppb.Timestamp `protobuf:"bytes,13,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"`
+	// The default value for event-based hold on newly created objects in this
+	// bucket.  Event-based hold is a way to retain objects indefinitely until an
+	// event occurs, signified by the
+	// hold's release. After being released, such objects will be subject to
+	// bucket-level retention (if any).  One sample use case of this flag is for
+	// banks to hold loan documents for at least 3 years after loan is paid in
+	// full. Here, bucket-level retention is 3 years and the event is loan being
+	// paid in full. In this example, these objects will be held intact for any
+	// number of years until the event has occurred (event-based hold on the
+	// object is released) and then 3 more years after that. That means retention
+	// duration of the objects begins from the moment event-based hold
+	// transitioned from true to false.  Objects under event-based hold cannot be
+	// deleted, overwritten or archived until the hold is removed.
+	DefaultEventBasedHold bool `protobuf:"varint,14,opt,name=default_event_based_hold,json=defaultEventBasedHold,proto3" json:"default_event_based_hold,omitempty"`
+	// User-provided labels, in key/value pairs.
+	Labels map[string]string `protobuf:"bytes,15,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	// The bucket's website config, controlling how the service behaves
+	// when accessing bucket contents as a web site. See the
+	// [https://cloud.google.com/storage/docs/static-website][Static Website
+	// Examples] for more information.
+	Website *Bucket_Website `protobuf:"bytes,16,opt,name=website,proto3" json:"website,omitempty"`
+	// The bucket's versioning config.
+	Versioning *Bucket_Versioning `protobuf:"bytes,17,opt,name=versioning,proto3" json:"versioning,omitempty"`
+	// The bucket's logging config, which defines the destination bucket
+	// and name prefix (if any) for the current bucket's logs.
+	Logging *Bucket_Logging `protobuf:"bytes,18,opt,name=logging,proto3" json:"logging,omitempty"`
+	// Output only. The owner of the bucket. This is always the project team's
+	// owner group.
+	Owner *Owner `protobuf:"bytes,19,opt,name=owner,proto3" json:"owner,omitempty"`
+	// Encryption config for a bucket.
+	Encryption *Bucket_Encryption `protobuf:"bytes,20,opt,name=encryption,proto3" json:"encryption,omitempty"`
+	// The bucket's billing config.
+	Billing *Bucket_Billing `protobuf:"bytes,21,opt,name=billing,proto3" json:"billing,omitempty"`
+	// The bucket's retention policy. The retention policy enforces a minimum
+	// retention time for all objects contained in the bucket, based on their
+	// creation time. Any attempt to overwrite or delete objects younger than the
+	// retention period will result in a PERMISSION_DENIED error.  An unlocked
+	// retention policy can be modified or removed from the bucket via a
+	// storage.buckets.update operation. A locked retention policy cannot be
+	// removed or shortened in duration for the lifetime of the bucket.
+	// Attempting to remove or decrease period of a locked retention policy will
+	// result in a PERMISSION_DENIED error.
+	RetentionPolicy *Bucket_RetentionPolicy `protobuf:"bytes,22,opt,name=retention_policy,json=retentionPolicy,proto3" json:"retention_policy,omitempty"`
+	// The bucket's IAM config.
+	IamConfig *Bucket_IamConfig `protobuf:"bytes,23,opt,name=iam_config,json=iamConfig,proto3" json:"iam_config,omitempty"`
+	// Reserved for future use.
+	SatisfiesPzs bool `protobuf:"varint,25,opt,name=satisfies_pzs,json=satisfiesPzs,proto3" json:"satisfies_pzs,omitempty"`
+	// Configuration that, if present, specifies the data placement for a
+	// [https://cloud.google.com/storage/docs/locations#location-dr][configurable
+	// dual-region].
+	CustomPlacementConfig *Bucket_CustomPlacementConfig `protobuf:"bytes,26,opt,name=custom_placement_config,json=customPlacementConfig,proto3" json:"custom_placement_config,omitempty"`
+	// The bucket's Autoclass configuration. If there is no configuration, the
+	// Autoclass feature will be disabled and have no effect on the bucket.
+	Autoclass *Bucket_Autoclass `protobuf:"bytes,28,opt,name=autoclass,proto3" json:"autoclass,omitempty"`
+	// Optional. The bucket's hierarchical namespace configuration. If there is no
+	// configuration, the hierarchical namespace feature will be disabled and have
+	// no effect on the bucket.
+	HierarchicalNamespace *Bucket_HierarchicalNamespace `protobuf:"bytes,32,opt,name=hierarchical_namespace,json=hierarchicalNamespace,proto3" json:"hierarchical_namespace,omitempty"`
+	// Optional. The bucket's soft delete policy. The soft delete policy prevents
+	// soft-deleted objects from being permanently deleted.
+	SoftDeletePolicy *Bucket_SoftDeletePolicy `protobuf:"bytes,31,opt,name=soft_delete_policy,json=softDeletePolicy,proto3" json:"soft_delete_policy,omitempty"`
+}
+
+func (x *Bucket) Reset() {
+	*x = Bucket{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[36]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Bucket) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Bucket) ProtoMessage() {}
+
+func (x *Bucket) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[36]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Bucket.ProtoReflect.Descriptor instead.
+func (*Bucket) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{36}
+}
+
+func (x *Bucket) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *Bucket) GetBucketId() string {
+	if x != nil {
+		return x.BucketId
+	}
+	return ""
+}
+
+func (x *Bucket) GetEtag() string {
+	if x != nil {
+		return x.Etag
+	}
+	return ""
+}
+
+func (x *Bucket) GetProject() string {
+	if x != nil {
+		return x.Project
+	}
+	return ""
+}
+
+func (x *Bucket) GetMetageneration() int64 {
+	if x != nil {
+		return x.Metageneration
+	}
+	return 0
+}
+
+func (x *Bucket) GetLocation() string {
+	if x != nil {
+		return x.Location
+	}
+	return ""
+}
+
+func (x *Bucket) GetLocationType() string {
+	if x != nil {
+		return x.LocationType
+	}
+	return ""
+}
+
+func (x *Bucket) GetStorageClass() string {
+	if x != nil {
+		return x.StorageClass
+	}
+	return ""
+}
+
+func (x *Bucket) GetRpo() string {
+	if x != nil {
+		return x.Rpo
+	}
+	return ""
+}
+
+func (x *Bucket) GetAcl() []*BucketAccessControl {
+	if x != nil {
+		return x.Acl
+	}
+	return nil
+}
+
+func (x *Bucket) GetDefaultObjectAcl() []*ObjectAccessControl {
+	if x != nil {
+		return x.DefaultObjectAcl
+	}
+	return nil
+}
+
+func (x *Bucket) GetLifecycle() *Bucket_Lifecycle {
+	if x != nil {
+		return x.Lifecycle
+	}
+	return nil
+}
+
+func (x *Bucket) GetCreateTime() *timestamppb.Timestamp {
+	if x != nil {
+		return x.CreateTime
+	}
+	return nil
+}
+
+func (x *Bucket) GetCors() []*Bucket_Cors {
+	if x != nil {
+		return x.Cors
+	}
+	return nil
+}
+
+func (x *Bucket) GetUpdateTime() *timestamppb.Timestamp {
+	if x != nil {
+		return x.UpdateTime
+	}
+	return nil
+}
+
+func (x *Bucket) GetDefaultEventBasedHold() bool {
+	if x != nil {
+		return x.DefaultEventBasedHold
+	}
+	return false
+}
+
+func (x *Bucket) GetLabels() map[string]string {
+	if x != nil {
+		return x.Labels
+	}
+	return nil
+}
+
+func (x *Bucket) GetWebsite() *Bucket_Website {
+	if x != nil {
+		return x.Website
+	}
+	return nil
+}
+
+func (x *Bucket) GetVersioning() *Bucket_Versioning {
+	if x != nil {
+		return x.Versioning
+	}
+	return nil
+}
+
+func (x *Bucket) GetLogging() *Bucket_Logging {
+	if x != nil {
+		return x.Logging
+	}
+	return nil
+}
+
+func (x *Bucket) GetOwner() *Owner {
+	if x != nil {
+		return x.Owner
+	}
+	return nil
+}
+
+func (x *Bucket) GetEncryption() *Bucket_Encryption {
+	if x != nil {
+		return x.Encryption
+	}
+	return nil
+}
+
+func (x *Bucket) GetBilling() *Bucket_Billing {
+	if x != nil {
+		return x.Billing
+	}
+	return nil
+}
+
+func (x *Bucket) GetRetentionPolicy() *Bucket_RetentionPolicy {
+	if x != nil {
+		return x.RetentionPolicy
+	}
+	return nil
+}
+
+func (x *Bucket) GetIamConfig() *Bucket_IamConfig {
+	if x != nil {
+		return x.IamConfig
+	}
+	return nil
+}
+
+func (x *Bucket) GetSatisfiesPzs() bool {
+	if x != nil {
+		return x.SatisfiesPzs
+	}
+	return false
+}
+
+func (x *Bucket) GetCustomPlacementConfig() *Bucket_CustomPlacementConfig {
+	if x != nil {
+		return x.CustomPlacementConfig
+	}
+	return nil
+}
+
+func (x *Bucket) GetAutoclass() *Bucket_Autoclass {
+	if x != nil {
+		return x.Autoclass
+	}
+	return nil
+}
+
+func (x *Bucket) GetHierarchicalNamespace() *Bucket_HierarchicalNamespace {
+	if x != nil {
+		return x.HierarchicalNamespace
+	}
+	return nil
+}
+
+func (x *Bucket) GetSoftDeletePolicy() *Bucket_SoftDeletePolicy {
+	if x != nil {
+		return x.SoftDeletePolicy
+	}
+	return nil
+}
+
+// An access-control entry.
+type BucketAccessControl struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The access permission for the entity.
+	Role string `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"`
+	// The ID of the access-control entry.
+	Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The entity holding the permission, in one of the following forms:
+	// * `user-{userid}`
+	// * `user-{email}`
+	// * `group-{groupid}`
+	// * `group-{email}`
+	// * `domain-{domain}`
+	// * `project-{team}-{projectnumber}`
+	// * `project-{team}-{projectid}`
+	// * `allUsers`
+	// * `allAuthenticatedUsers`
+	// Examples:
+	// * The user `liz@example.com` would be `user-liz@example.com`.
+	// * The group `example@googlegroups.com` would be
+	// `group-example@googlegroups.com`
+	// * All members of the Google Apps for Business domain `example.com` would be
+	// `domain-example.com`
+	// For project entities, `project-{team}-{projectnumber}` format will be
+	// returned on response.
+	Entity string `protobuf:"bytes,3,opt,name=entity,proto3" json:"entity,omitempty"`
+	// Output only. The alternative entity format, if exists. For project
+	// entities, `project-{team}-{projectid}` format will be returned on response.
+	EntityAlt string `protobuf:"bytes,9,opt,name=entity_alt,json=entityAlt,proto3" json:"entity_alt,omitempty"`
+	// The ID for the entity, if any.
+	EntityId string `protobuf:"bytes,4,opt,name=entity_id,json=entityId,proto3" json:"entity_id,omitempty"`
+	// The etag of the BucketAccessControl.
+	// If included in the metadata of an update or delete request message, the
+	// operation operation will only be performed if the etag matches that of the
+	// bucket's BucketAccessControl.
+	Etag string `protobuf:"bytes,8,opt,name=etag,proto3" json:"etag,omitempty"`
+	// The email address associated with the entity, if any.
+	Email string `protobuf:"bytes,5,opt,name=email,proto3" json:"email,omitempty"`
+	// The domain associated with the entity, if any.
+	Domain string `protobuf:"bytes,6,opt,name=domain,proto3" json:"domain,omitempty"`
+	// The project team associated with the entity, if any.
+	ProjectTeam *ProjectTeam `protobuf:"bytes,7,opt,name=project_team,json=projectTeam,proto3" json:"project_team,omitempty"`
+}
+
+func (x *BucketAccessControl) Reset() {
+	*x = BucketAccessControl{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[37]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *BucketAccessControl) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BucketAccessControl) ProtoMessage() {}
+
+func (x *BucketAccessControl) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[37]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use BucketAccessControl.ProtoReflect.Descriptor instead.
+func (*BucketAccessControl) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{37}
+}
+
+func (x *BucketAccessControl) GetRole() string {
+	if x != nil {
+		return x.Role
+	}
+	return ""
+}
+
+func (x *BucketAccessControl) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *BucketAccessControl) GetEntity() string {
+	if x != nil {
+		return x.Entity
+	}
+	return ""
+}
+
+func (x *BucketAccessControl) GetEntityAlt() string {
+	if x != nil {
+		return x.EntityAlt
+	}
+	return ""
+}
+
+func (x *BucketAccessControl) GetEntityId() string {
+	if x != nil {
+		return x.EntityId
+	}
+	return ""
+}
+
+func (x *BucketAccessControl) GetEtag() string {
+	if x != nil {
+		return x.Etag
+	}
+	return ""
+}
+
+func (x *BucketAccessControl) GetEmail() string {
+	if x != nil {
+		return x.Email
+	}
+	return ""
+}
+
+func (x *BucketAccessControl) GetDomain() string {
+	if x != nil {
+		return x.Domain
+	}
+	return ""
+}
+
+func (x *BucketAccessControl) GetProjectTeam() *ProjectTeam {
+	if x != nil {
+		return x.ProjectTeam
+	}
+	return nil
+}
+
+// Message used to convey content being read or written, along with an optional
+// checksum.
+type ChecksummedData struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Optional. The data.
+	Content []byte `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"`
+	// If set, the CRC32C digest of the content field.
+	Crc32C *uint32 `protobuf:"fixed32,2,opt,name=crc32c,proto3,oneof" json:"crc32c,omitempty"`
+}
+
+func (x *ChecksummedData) Reset() {
+	*x = ChecksummedData{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[38]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ChecksummedData) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ChecksummedData) ProtoMessage() {}
+
+func (x *ChecksummedData) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[38]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ChecksummedData.ProtoReflect.Descriptor instead.
+func (*ChecksummedData) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{38}
+}
+
+func (x *ChecksummedData) GetContent() []byte {
+	if x != nil {
+		return x.Content
+	}
+	return nil
+}
+
+func (x *ChecksummedData) GetCrc32C() uint32 {
+	if x != nil && x.Crc32C != nil {
+		return *x.Crc32C
+	}
+	return 0
+}
+
+// Message used for storing full (not subrange) object checksums.
+type ObjectChecksums struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// CRC32C digest of the object data. Computed by the Cloud Storage service for
+	// all written objects.
+	// If set in a WriteObjectRequest, service will validate that the stored
+	// object matches this checksum.
+	Crc32C *uint32 `protobuf:"fixed32,1,opt,name=crc32c,proto3,oneof" json:"crc32c,omitempty"`
+	// 128 bit MD5 hash of the object data.
+	// For more information about using the MD5 hash, see
+	// [https://cloud.google.com/storage/docs/hashes-etags#json-api][Hashes and
+	// ETags: Best Practices].
+	// Not all objects will provide an MD5 hash. For example, composite objects
+	// provide only crc32c hashes. This value is equivalent to running `cat
+	// object.txt | openssl md5 -binary`
+	Md5Hash []byte `protobuf:"bytes,2,opt,name=md5_hash,json=md5Hash,proto3" json:"md5_hash,omitempty"`
+}
+
+func (x *ObjectChecksums) Reset() {
+	*x = ObjectChecksums{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[39]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ObjectChecksums) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ObjectChecksums) ProtoMessage() {}
+
+func (x *ObjectChecksums) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[39]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ObjectChecksums.ProtoReflect.Descriptor instead.
+func (*ObjectChecksums) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{39}
+}
+
+func (x *ObjectChecksums) GetCrc32C() uint32 {
+	if x != nil && x.Crc32C != nil {
+		return *x.Crc32C
+	}
+	return 0
+}
+
+func (x *ObjectChecksums) GetMd5Hash() []byte {
+	if x != nil {
+		return x.Md5Hash
+	}
+	return nil
+}
+
+// Describes the Customer-Supplied Encryption Key mechanism used to store an
+// Object's data at rest.
+type CustomerEncryption struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The encryption algorithm.
+	EncryptionAlgorithm string `protobuf:"bytes,1,opt,name=encryption_algorithm,json=encryptionAlgorithm,proto3" json:"encryption_algorithm,omitempty"`
+	// SHA256 hash value of the encryption key.
+	// In raw bytes format (not base64-encoded).
+	KeySha256Bytes []byte `protobuf:"bytes,3,opt,name=key_sha256_bytes,json=keySha256Bytes,proto3" json:"key_sha256_bytes,omitempty"`
+}
+
+func (x *CustomerEncryption) Reset() {
+	*x = CustomerEncryption{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[40]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *CustomerEncryption) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CustomerEncryption) ProtoMessage() {}
+
+func (x *CustomerEncryption) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[40]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CustomerEncryption.ProtoReflect.Descriptor instead.
+func (*CustomerEncryption) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{40}
+}
+
+func (x *CustomerEncryption) GetEncryptionAlgorithm() string {
+	if x != nil {
+		return x.EncryptionAlgorithm
+	}
+	return ""
+}
+
+func (x *CustomerEncryption) GetKeySha256Bytes() []byte {
+	if x != nil {
+		return x.KeySha256Bytes
+	}
+	return nil
+}
+
+// An object.
+type Object struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Immutable. The name of this object. Nearly any sequence of unicode
+	// characters is valid. See
+	// [Guidelines](https://cloud.google.com/storage/docs/objects#naming).
+	// Example: `test.txt`
+	// The `name` field by itself does not uniquely identify a Cloud Storage
+	// object. A Cloud Storage object is uniquely identified by the tuple of
+	// (bucket, object, generation).
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// Immutable. The name of the bucket containing this object.
+	Bucket string `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"`
+	// The etag of the object.
+	// If included in the metadata of an update or delete request message, the
+	// operation will only be performed if the etag matches that of the live
+	// object.
+	Etag string `protobuf:"bytes,27,opt,name=etag,proto3" json:"etag,omitempty"`
+	// Immutable. The content generation of this object. Used for object
+	// versioning.
+	Generation int64 `protobuf:"varint,3,opt,name=generation,proto3" json:"generation,omitempty"`
+	// Output only. Restore token used to differentiate deleted objects with the
+	// same name and generation. This field is output only, and only set for
+	// deleted objects in HNS buckets.
+	RestoreToken *string `protobuf:"bytes,35,opt,name=restore_token,json=restoreToken,proto3,oneof" json:"restore_token,omitempty"`
+	// Output only. The version of the metadata for this generation of this
+	// object. Used for preconditions and for detecting changes in metadata. A
+	// metageneration number is only meaningful in the context of a particular
+	// generation of a particular object.
+	Metageneration int64 `protobuf:"varint,4,opt,name=metageneration,proto3" json:"metageneration,omitempty"`
+	// Storage class of the object.
+	StorageClass string `protobuf:"bytes,5,opt,name=storage_class,json=storageClass,proto3" json:"storage_class,omitempty"`
+	// Output only. Content-Length of the object data in bytes, matching
+	// [https://tools.ietf.org/html/rfc7230#section-3.3.2][RFC 7230 §3.3.2].
+	Size int64 `protobuf:"varint,6,opt,name=size,proto3" json:"size,omitempty"`
+	// Content-Encoding of the object data, matching
+	// [https://tools.ietf.org/html/rfc7231#section-3.1.2.2][RFC 7231 §3.1.2.2]
+	ContentEncoding string `protobuf:"bytes,7,opt,name=content_encoding,json=contentEncoding,proto3" json:"content_encoding,omitempty"`
+	// Content-Disposition of the object data, matching
+	// [https://tools.ietf.org/html/rfc6266][RFC 6266].
+	ContentDisposition string `protobuf:"bytes,8,opt,name=content_disposition,json=contentDisposition,proto3" json:"content_disposition,omitempty"`
+	// Cache-Control directive for the object data, matching
+	// [https://tools.ietf.org/html/rfc7234#section-5.2"][RFC 7234 §5.2].
+	// If omitted, and the object is accessible to all anonymous users, the
+	// default will be `public, max-age=3600`.
+	CacheControl string `protobuf:"bytes,9,opt,name=cache_control,json=cacheControl,proto3" json:"cache_control,omitempty"`
+	// Access controls on the object.
+	// If iam_config.uniform_bucket_level_access is enabled on the parent
+	// bucket, requests to set, read, or modify acl is an error.
+	Acl []*ObjectAccessControl `protobuf:"bytes,10,rep,name=acl,proto3" json:"acl,omitempty"`
+	// Content-Language of the object data, matching
+	// [https://tools.ietf.org/html/rfc7231#section-3.1.3.2][RFC 7231 §3.1.3.2].
+	ContentLanguage string `protobuf:"bytes,11,opt,name=content_language,json=contentLanguage,proto3" json:"content_language,omitempty"`
+	// Output only. If this object is noncurrent, this is the time when the object
+	// became noncurrent.
+	DeleteTime *timestamppb.Timestamp `protobuf:"bytes,12,opt,name=delete_time,json=deleteTime,proto3" json:"delete_time,omitempty"`
+	// Output only. The time when the object was finalized.
+	FinalizeTime *timestamppb.Timestamp `protobuf:"bytes,36,opt,name=finalize_time,json=finalizeTime,proto3" json:"finalize_time,omitempty"`
+	// Content-Type of the object data, matching
+	// [https://tools.ietf.org/html/rfc7231#section-3.1.1.5][RFC 7231 §3.1.1.5].
+	// If an object is stored without a Content-Type, it is served as
+	// `application/octet-stream`.
+	ContentType string `protobuf:"bytes,13,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"`
+	// Output only. The creation time of the object.
+	CreateTime *timestamppb.Timestamp `protobuf:"bytes,14,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"`
+	// Output only. Number of underlying components that make up this object.
+	// Components are accumulated by compose operations.
+	ComponentCount int32 `protobuf:"varint,15,opt,name=component_count,json=componentCount,proto3" json:"component_count,omitempty"`
+	// Output only. Hashes for the data part of this object. This field is used
+	// for output only and will be silently ignored if provided in requests. The
+	// checksums of the complete object regardless of data range. If the object is
+	// downloaded in full, the client should compute one of these checksums over
+	// the downloaded object and compare it against the value provided here.
+	Checksums *ObjectChecksums `protobuf:"bytes,16,opt,name=checksums,proto3" json:"checksums,omitempty"`
+	// Output only. The modification time of the object metadata.
+	// Set initially to object creation time and then updated whenever any
+	// metadata of the object changes. This includes changes made by a requester,
+	// such as modifying custom metadata, as well as changes made by Cloud Storage
+	// on behalf of a requester, such as changing the storage class based on an
+	// Object Lifecycle Configuration.
+	UpdateTime *timestamppb.Timestamp `protobuf:"bytes,17,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"`
+	// Cloud KMS Key used to encrypt this object, if the object is encrypted by
+	// such a key.
+	KmsKey string `protobuf:"bytes,18,opt,name=kms_key,json=kmsKey,proto3" json:"kms_key,omitempty"`
+	// Output only. The time at which the object's storage class was last changed.
+	// When the object is initially created, it will be set to time_created.
+	UpdateStorageClassTime *timestamppb.Timestamp `protobuf:"bytes,19,opt,name=update_storage_class_time,json=updateStorageClassTime,proto3" json:"update_storage_class_time,omitempty"`
+	// Whether an object is under temporary hold. While this flag is set to true,
+	// the object is protected against deletion and overwrites.  A common use case
+	// of this flag is regulatory investigations where objects need to be retained
+	// while the investigation is ongoing. Note that unlike event-based hold,
+	// temporary hold does not impact retention expiration time of an object.
+	TemporaryHold bool `protobuf:"varint,20,opt,name=temporary_hold,json=temporaryHold,proto3" json:"temporary_hold,omitempty"`
+	// A server-determined value that specifies the earliest time that the
+	// object's retention period expires.
+	// Note 1: This field is not provided for objects with an active event-based
+	// hold, since retention expiration is unknown until the hold is removed.
+	// Note 2: This value can be provided even when temporary hold is set (so that
+	// the user can reason about policy without having to first unset the
+	// temporary hold).
+	RetentionExpireTime *timestamppb.Timestamp `protobuf:"bytes,21,opt,name=retention_expire_time,json=retentionExpireTime,proto3" json:"retention_expire_time,omitempty"`
+	// User-provided metadata, in key/value pairs.
+	Metadata map[string]string `protobuf:"bytes,22,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	// Whether an object is under event-based hold.
+	// An event-based hold is a way to force the retention of an object until
+	// after some event occurs. Once the hold is released by explicitly setting
+	// this field to false, the object will become subject to any bucket-level
+	// retention policy, except that the retention duration will be calculated
+	// from the time the event based hold was lifted, rather than the time the
+	// object was created.
+	//
+	// In a WriteObject request, not setting this field implies that the value
+	// should be taken from the parent bucket's "default_event_based_hold" field.
+	// In a response, this field will always be set to true or false.
+	EventBasedHold *bool `protobuf:"varint,23,opt,name=event_based_hold,json=eventBasedHold,proto3,oneof" json:"event_based_hold,omitempty"`
+	// Output only. The owner of the object. This will always be the uploader of
+	// the object.
+	Owner *Owner `protobuf:"bytes,24,opt,name=owner,proto3" json:"owner,omitempty"`
+	// Metadata of Customer-Supplied Encryption Key, if the object is encrypted by
+	// such a key.
+	CustomerEncryption *CustomerEncryption `protobuf:"bytes,25,opt,name=customer_encryption,json=customerEncryption,proto3" json:"customer_encryption,omitempty"`
+	// A user-specified timestamp set on an object.
+	CustomTime *timestamppb.Timestamp `protobuf:"bytes,26,opt,name=custom_time,json=customTime,proto3" json:"custom_time,omitempty"`
+	// Output only. This is the time when the object became soft-deleted.
+	//
+	// Soft-deleted objects are only accessible if a soft_delete_policy is
+	// enabled. Also see hard_delete_time.
+	SoftDeleteTime *timestamppb.Timestamp `protobuf:"bytes,28,opt,name=soft_delete_time,json=softDeleteTime,proto3,oneof" json:"soft_delete_time,omitempty"`
+	// Output only. The time when the object will be permanently deleted.
+	//
+	// Only set when an object becomes soft-deleted with a soft_delete_policy.
+	// Otherwise, the object will not be accessible.
+	HardDeleteTime *timestamppb.Timestamp `protobuf:"bytes,29,opt,name=hard_delete_time,json=hardDeleteTime,proto3,oneof" json:"hard_delete_time,omitempty"`
+}
+
+func (x *Object) Reset() {
+	*x = Object{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[41]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Object) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Object) ProtoMessage() {}
+
+func (x *Object) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[41]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Object.ProtoReflect.Descriptor instead.
+func (*Object) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{41}
+}
+
+func (x *Object) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *Object) GetBucket() string {
+	if x != nil {
+		return x.Bucket
+	}
+	return ""
+}
+
+func (x *Object) GetEtag() string {
+	if x != nil {
+		return x.Etag
+	}
+	return ""
+}
+
+func (x *Object) GetGeneration() int64 {
+	if x != nil {
+		return x.Generation
+	}
+	return 0
+}
+
+func (x *Object) GetRestoreToken() string {
+	if x != nil && x.RestoreToken != nil {
+		return *x.RestoreToken
+	}
+	return ""
+}
+
+func (x *Object) GetMetageneration() int64 {
+	if x != nil {
+		return x.Metageneration
+	}
+	return 0
+}
+
+func (x *Object) GetStorageClass() string {
+	if x != nil {
+		return x.StorageClass
+	}
+	return ""
+}
+
+func (x *Object) GetSize() int64 {
+	if x != nil {
+		return x.Size
+	}
+	return 0
+}
+
+func (x *Object) GetContentEncoding() string {
+	if x != nil {
+		return x.ContentEncoding
+	}
+	return ""
+}
+
+func (x *Object) GetContentDisposition() string {
+	if x != nil {
+		return x.ContentDisposition
+	}
+	return ""
+}
+
+func (x *Object) GetCacheControl() string {
+	if x != nil {
+		return x.CacheControl
+	}
+	return ""
+}
+
+func (x *Object) GetAcl() []*ObjectAccessControl {
+	if x != nil {
+		return x.Acl
+	}
+	return nil
+}
+
+func (x *Object) GetContentLanguage() string {
+	if x != nil {
+		return x.ContentLanguage
+	}
+	return ""
+}
+
+func (x *Object) GetDeleteTime() *timestamppb.Timestamp {
+	if x != nil {
+		return x.DeleteTime
+	}
+	return nil
+}
+
+func (x *Object) GetFinalizeTime() *timestamppb.Timestamp {
+	if x != nil {
+		return x.FinalizeTime
+	}
+	return nil
+}
+
+func (x *Object) GetContentType() string {
+	if x != nil {
+		return x.ContentType
+	}
+	return ""
+}
+
+func (x *Object) GetCreateTime() *timestamppb.Timestamp {
+	if x != nil {
+		return x.CreateTime
+	}
+	return nil
+}
+
+func (x *Object) GetComponentCount() int32 {
+	if x != nil {
+		return x.ComponentCount
+	}
+	return 0
+}
+
+func (x *Object) GetChecksums() *ObjectChecksums {
+	if x != nil {
+		return x.Checksums
+	}
+	return nil
+}
+
+func (x *Object) GetUpdateTime() *timestamppb.Timestamp {
+	if x != nil {
+		return x.UpdateTime
+	}
+	return nil
+}
+
+func (x *Object) GetKmsKey() string {
+	if x != nil {
+		return x.KmsKey
+	}
+	return ""
+}
+
+func (x *Object) GetUpdateStorageClassTime() *timestamppb.Timestamp {
+	if x != nil {
+		return x.UpdateStorageClassTime
+	}
+	return nil
+}
+
+func (x *Object) GetTemporaryHold() bool {
+	if x != nil {
+		return x.TemporaryHold
+	}
+	return false
+}
+
+func (x *Object) GetRetentionExpireTime() *timestamppb.Timestamp {
+	if x != nil {
+		return x.RetentionExpireTime
+	}
+	return nil
+}
+
+func (x *Object) GetMetadata() map[string]string {
+	if x != nil {
+		return x.Metadata
+	}
+	return nil
+}
+
+func (x *Object) GetEventBasedHold() bool {
+	if x != nil && x.EventBasedHold != nil {
+		return *x.EventBasedHold
+	}
+	return false
+}
+
+func (x *Object) GetOwner() *Owner {
+	if x != nil {
+		return x.Owner
+	}
+	return nil
+}
+
+func (x *Object) GetCustomerEncryption() *CustomerEncryption {
+	if x != nil {
+		return x.CustomerEncryption
+	}
+	return nil
+}
+
+func (x *Object) GetCustomTime() *timestamppb.Timestamp {
+	if x != nil {
+		return x.CustomTime
+	}
+	return nil
+}
+
+func (x *Object) GetSoftDeleteTime() *timestamppb.Timestamp {
+	if x != nil {
+		return x.SoftDeleteTime
+	}
+	return nil
+}
+
+func (x *Object) GetHardDeleteTime() *timestamppb.Timestamp {
+	if x != nil {
+		return x.HardDeleteTime
+	}
+	return nil
+}
+
+// An access-control entry.
+type ObjectAccessControl struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The access permission for the entity. One of the following values:
+	// * `READER`
+	// * `WRITER`
+	// * `OWNER`
+	Role string `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"`
+	// The ID of the access-control entry.
+	Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The entity holding the permission, in one of the following forms:
+	// * `user-{userid}`
+	// * `user-{email}`
+	// * `group-{groupid}`
+	// * `group-{email}`
+	// * `domain-{domain}`
+	// * `project-{team}-{projectnumber}`
+	// * `project-{team}-{projectid}`
+	// * `allUsers`
+	// * `allAuthenticatedUsers`
+	// Examples:
+	// * The user `liz@example.com` would be `user-liz@example.com`.
+	// * The group `example@googlegroups.com` would be
+	// `group-example@googlegroups.com`.
+	// * All members of the Google Apps for Business domain `example.com` would be
+	// `domain-example.com`.
+	// For project entities, `project-{team}-{projectnumber}` format will be
+	// returned on response.
+	Entity string `protobuf:"bytes,3,opt,name=entity,proto3" json:"entity,omitempty"`
+	// Output only. The alternative entity format, if exists. For project
+	// entities, `project-{team}-{projectid}` format will be returned on response.
+	EntityAlt string `protobuf:"bytes,9,opt,name=entity_alt,json=entityAlt,proto3" json:"entity_alt,omitempty"`
+	// The ID for the entity, if any.
+	EntityId string `protobuf:"bytes,4,opt,name=entity_id,json=entityId,proto3" json:"entity_id,omitempty"`
+	// The etag of the ObjectAccessControl.
+	// If included in the metadata of an update or delete request message, the
+	// operation will only be performed if the etag matches that of the live
+	// object's ObjectAccessControl.
+	Etag string `protobuf:"bytes,8,opt,name=etag,proto3" json:"etag,omitempty"`
+	// The email address associated with the entity, if any.
+	Email string `protobuf:"bytes,5,opt,name=email,proto3" json:"email,omitempty"`
+	// The domain associated with the entity, if any.
+	Domain string `protobuf:"bytes,6,opt,name=domain,proto3" json:"domain,omitempty"`
+	// The project team associated with the entity, if any.
+	ProjectTeam *ProjectTeam `protobuf:"bytes,7,opt,name=project_team,json=projectTeam,proto3" json:"project_team,omitempty"`
+}
+
+func (x *ObjectAccessControl) Reset() {
+	*x = ObjectAccessControl{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[42]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ObjectAccessControl) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ObjectAccessControl) ProtoMessage() {}
+
+func (x *ObjectAccessControl) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[42]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ObjectAccessControl.ProtoReflect.Descriptor instead.
+func (*ObjectAccessControl) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{42}
+}
+
+func (x *ObjectAccessControl) GetRole() string {
+	if x != nil {
+		return x.Role
+	}
+	return ""
+}
+
+func (x *ObjectAccessControl) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *ObjectAccessControl) GetEntity() string {
+	if x != nil {
+		return x.Entity
+	}
+	return ""
+}
+
+func (x *ObjectAccessControl) GetEntityAlt() string {
+	if x != nil {
+		return x.EntityAlt
+	}
+	return ""
+}
+
+func (x *ObjectAccessControl) GetEntityId() string {
+	if x != nil {
+		return x.EntityId
+	}
+	return ""
+}
+
+func (x *ObjectAccessControl) GetEtag() string {
+	if x != nil {
+		return x.Etag
+	}
+	return ""
+}
+
+func (x *ObjectAccessControl) GetEmail() string {
+	if x != nil {
+		return x.Email
+	}
+	return ""
+}
+
+func (x *ObjectAccessControl) GetDomain() string {
+	if x != nil {
+		return x.Domain
+	}
+	return ""
+}
+
+func (x *ObjectAccessControl) GetProjectTeam() *ProjectTeam {
+	if x != nil {
+		return x.ProjectTeam
+	}
+	return nil
+}
+
+// The result of a call to Objects.ListObjects
+type ListObjectsResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The list of items.
+	Objects []*Object `protobuf:"bytes,1,rep,name=objects,proto3" json:"objects,omitempty"`
+	// The list of prefixes of objects matching-but-not-listed up to and including
+	// the requested delimiter.
+	Prefixes []string `protobuf:"bytes,2,rep,name=prefixes,proto3" json:"prefixes,omitempty"`
+	// The continuation token, used to page through large result sets. Provide
+	// this value in a subsequent request to return the next page of results.
+	NextPageToken string `protobuf:"bytes,3,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
+}
+
+func (x *ListObjectsResponse) Reset() {
+	*x = ListObjectsResponse{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[43]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ListObjectsResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListObjectsResponse) ProtoMessage() {}
+
+func (x *ListObjectsResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[43]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ListObjectsResponse.ProtoReflect.Descriptor instead.
+func (*ListObjectsResponse) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{43}
+}
+
+func (x *ListObjectsResponse) GetObjects() []*Object {
+	if x != nil {
+		return x.Objects
+	}
+	return nil
+}
+
+func (x *ListObjectsResponse) GetPrefixes() []string {
+	if x != nil {
+		return x.Prefixes
+	}
+	return nil
+}
+
+func (x *ListObjectsResponse) GetNextPageToken() string {
+	if x != nil {
+		return x.NextPageToken
+	}
+	return ""
+}
+
+// Represents the Viewers, Editors, or Owners of a given project.
+type ProjectTeam struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The project number.
+	ProjectNumber string `protobuf:"bytes,1,opt,name=project_number,json=projectNumber,proto3" json:"project_number,omitempty"`
+	// The team.
+	Team string `protobuf:"bytes,2,opt,name=team,proto3" json:"team,omitempty"`
+}
+
+func (x *ProjectTeam) Reset() {
+	*x = ProjectTeam{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[44]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ProjectTeam) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ProjectTeam) ProtoMessage() {}
+
+func (x *ProjectTeam) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[44]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ProjectTeam.ProtoReflect.Descriptor instead.
+func (*ProjectTeam) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{44}
+}
+
+func (x *ProjectTeam) GetProjectNumber() string {
+	if x != nil {
+		return x.ProjectNumber
+	}
+	return ""
+}
+
+func (x *ProjectTeam) GetTeam() string {
+	if x != nil {
+		return x.Team
+	}
+	return ""
+}
+
+// The owner of a specific resource.
+type Owner struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The entity, in the form `user-`*userId*.
+	Entity string `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"`
+	// The ID for the entity.
+	EntityId string `protobuf:"bytes,2,opt,name=entity_id,json=entityId,proto3" json:"entity_id,omitempty"`
+}
+
+func (x *Owner) Reset() {
+	*x = Owner{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[45]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Owner) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Owner) ProtoMessage() {}
+
+func (x *Owner) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[45]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Owner.ProtoReflect.Descriptor instead.
+func (*Owner) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{45}
+}
+
+func (x *Owner) GetEntity() string {
+	if x != nil {
+		return x.Entity
+	}
+	return ""
+}
+
+func (x *Owner) GetEntityId() string {
+	if x != nil {
+		return x.EntityId
+	}
+	return ""
+}
+
 // Configuration for Custom Dual Regions.  It should specify precisely two
 // eligible regions within the same Multiregion. More information on regions
 // may be found [https://cloud.google.com/storage/docs/locations][here].
@@ -1539,11 +5094,9 @@
 
 func (x *StorageLayout_CustomPlacementConfig) Reset() {
 	*x = StorageLayout_CustomPlacementConfig{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[18]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[46]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *StorageLayout_CustomPlacementConfig) String() string {
@@ -1553,8 +5106,8 @@
 func (*StorageLayout_CustomPlacementConfig) ProtoMessage() {}
 
 func (x *StorageLayout_CustomPlacementConfig) ProtoReflect() protoreflect.Message {
-	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[18]
-	if protoimpl.UnsafeEnabled && x != nil {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[46]
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -1588,11 +5141,9 @@
 
 func (x *StorageLayout_HierarchicalNamespace) Reset() {
 	*x = StorageLayout_HierarchicalNamespace{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[19]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[47]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *StorageLayout_HierarchicalNamespace) String() string {
@@ -1602,8 +5153,8 @@
 func (*StorageLayout_HierarchicalNamespace) ProtoMessage() {}
 
 func (x *StorageLayout_HierarchicalNamespace) ProtoReflect() protoreflect.Message {
-	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[19]
-	if protoimpl.UnsafeEnabled && x != nil {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[47]
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -1625,6 +5176,1216 @@
 	return false
 }
 
+// Description of a source object for a composition request.
+type ComposeObjectRequest_SourceObject struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Required. The source object's name. All source objects must reside in the
+	// same bucket.
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// The generation of this object to use as the source.
+	Generation int64 `protobuf:"varint,2,opt,name=generation,proto3" json:"generation,omitempty"`
+	// Conditions that must be met for this operation to execute.
+	ObjectPreconditions *ComposeObjectRequest_SourceObject_ObjectPreconditions `protobuf:"bytes,3,opt,name=object_preconditions,json=objectPreconditions,proto3" json:"object_preconditions,omitempty"`
+}
+
+func (x *ComposeObjectRequest_SourceObject) Reset() {
+	*x = ComposeObjectRequest_SourceObject{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[48]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ComposeObjectRequest_SourceObject) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ComposeObjectRequest_SourceObject) ProtoMessage() {}
+
+func (x *ComposeObjectRequest_SourceObject) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[48]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ComposeObjectRequest_SourceObject.ProtoReflect.Descriptor instead.
+func (*ComposeObjectRequest_SourceObject) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{25, 0}
+}
+
+func (x *ComposeObjectRequest_SourceObject) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *ComposeObjectRequest_SourceObject) GetGeneration() int64 {
+	if x != nil {
+		return x.Generation
+	}
+	return 0
+}
+
+func (x *ComposeObjectRequest_SourceObject) GetObjectPreconditions() *ComposeObjectRequest_SourceObject_ObjectPreconditions {
+	if x != nil {
+		return x.ObjectPreconditions
+	}
+	return nil
+}
+
+// Preconditions for a source object of a composition request.
+type ComposeObjectRequest_SourceObject_ObjectPreconditions struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Only perform the composition if the generation of the source object
+	// that would be used matches this value.  If this value and a generation
+	// are both specified, they must be the same value or the call will fail.
+	IfGenerationMatch *int64 `protobuf:"varint,1,opt,name=if_generation_match,json=ifGenerationMatch,proto3,oneof" json:"if_generation_match,omitempty"`
+}
+
+func (x *ComposeObjectRequest_SourceObject_ObjectPreconditions) Reset() {
+	*x = ComposeObjectRequest_SourceObject_ObjectPreconditions{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[49]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ComposeObjectRequest_SourceObject_ObjectPreconditions) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ComposeObjectRequest_SourceObject_ObjectPreconditions) ProtoMessage() {}
+
+func (x *ComposeObjectRequest_SourceObject_ObjectPreconditions) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[49]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ComposeObjectRequest_SourceObject_ObjectPreconditions.ProtoReflect.Descriptor instead.
+func (*ComposeObjectRequest_SourceObject_ObjectPreconditions) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{25, 0, 0}
+}
+
+func (x *ComposeObjectRequest_SourceObject_ObjectPreconditions) GetIfGenerationMatch() int64 {
+	if x != nil && x.IfGenerationMatch != nil {
+		return *x.IfGenerationMatch
+	}
+	return 0
+}
+
+// Billing properties of a bucket.
+type Bucket_Billing struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// When set to true, Requester Pays is enabled for this bucket.
+	RequesterPays bool `protobuf:"varint,1,opt,name=requester_pays,json=requesterPays,proto3" json:"requester_pays,omitempty"`
+}
+
+func (x *Bucket_Billing) Reset() {
+	*x = Bucket_Billing{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[50]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Bucket_Billing) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Bucket_Billing) ProtoMessage() {}
+
+func (x *Bucket_Billing) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[50]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Bucket_Billing.ProtoReflect.Descriptor instead.
+func (*Bucket_Billing) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{36, 0}
+}
+
+func (x *Bucket_Billing) GetRequesterPays() bool {
+	if x != nil {
+		return x.RequesterPays
+	}
+	return false
+}
+
+// Cross-Origin Response sharing (CORS) properties for a bucket.
+// For more on Cloud Storage and CORS, see
+// https://cloud.google.com/storage/docs/cross-origin.
+// For more on CORS in general, see https://tools.ietf.org/html/rfc6454.
+type Bucket_Cors struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The list of Origins eligible to receive CORS response headers. See
+	// [https://tools.ietf.org/html/rfc6454][RFC 6454] for more on origins.
+	// Note: "*" is permitted in the list of origins, and means "any Origin".
+	Origin []string `protobuf:"bytes,1,rep,name=origin,proto3" json:"origin,omitempty"`
+	// The list of HTTP methods on which to include CORS response headers,
+	// (`GET`, `OPTIONS`, `POST`, etc) Note: "*" is permitted in the list of
+	// methods, and means "any method".
+	Method []string `protobuf:"bytes,2,rep,name=method,proto3" json:"method,omitempty"`
+	// The list of HTTP headers other than the
+	// [https://www.w3.org/TR/cors/#simple-response-header][simple response
+	// headers] to give permission for the user-agent to share across domains.
+	ResponseHeader []string `protobuf:"bytes,3,rep,name=response_header,json=responseHeader,proto3" json:"response_header,omitempty"`
+	// The value, in seconds, to return in the
+	// [https://www.w3.org/TR/cors/#access-control-max-age-response-header][Access-Control-Max-Age
+	// header] used in preflight responses.
+	MaxAgeSeconds int32 `protobuf:"varint,4,opt,name=max_age_seconds,json=maxAgeSeconds,proto3" json:"max_age_seconds,omitempty"`
+}
+
+func (x *Bucket_Cors) Reset() {
+	*x = Bucket_Cors{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[51]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Bucket_Cors) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Bucket_Cors) ProtoMessage() {}
+
+func (x *Bucket_Cors) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[51]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Bucket_Cors.ProtoReflect.Descriptor instead.
+func (*Bucket_Cors) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{36, 1}
+}
+
+func (x *Bucket_Cors) GetOrigin() []string {
+	if x != nil {
+		return x.Origin
+	}
+	return nil
+}
+
+func (x *Bucket_Cors) GetMethod() []string {
+	if x != nil {
+		return x.Method
+	}
+	return nil
+}
+
+func (x *Bucket_Cors) GetResponseHeader() []string {
+	if x != nil {
+		return x.ResponseHeader
+	}
+	return nil
+}
+
+func (x *Bucket_Cors) GetMaxAgeSeconds() int32 {
+	if x != nil {
+		return x.MaxAgeSeconds
+	}
+	return 0
+}
+
+// Encryption properties of a bucket.
+type Bucket_Encryption struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The name of the Cloud KMS key that will be used to encrypt objects
+	// inserted into this bucket, if no encryption method is specified.
+	DefaultKmsKey string `protobuf:"bytes,1,opt,name=default_kms_key,json=defaultKmsKey,proto3" json:"default_kms_key,omitempty"`
+}
+
+func (x *Bucket_Encryption) Reset() {
+	*x = Bucket_Encryption{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[52]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Bucket_Encryption) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Bucket_Encryption) ProtoMessage() {}
+
+func (x *Bucket_Encryption) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[52]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Bucket_Encryption.ProtoReflect.Descriptor instead.
+func (*Bucket_Encryption) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{36, 2}
+}
+
+func (x *Bucket_Encryption) GetDefaultKmsKey() string {
+	if x != nil {
+		return x.DefaultKmsKey
+	}
+	return ""
+}
+
+// Bucket restriction options.
+type Bucket_IamConfig struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Bucket restriction options currently enforced on the bucket.
+	UniformBucketLevelAccess *Bucket_IamConfig_UniformBucketLevelAccess `protobuf:"bytes,1,opt,name=uniform_bucket_level_access,json=uniformBucketLevelAccess,proto3" json:"uniform_bucket_level_access,omitempty"`
+	// Whether IAM will enforce public access prevention. Valid values are
+	// "enforced" or "inherited".
+	PublicAccessPrevention string `protobuf:"bytes,3,opt,name=public_access_prevention,json=publicAccessPrevention,proto3" json:"public_access_prevention,omitempty"`
+}
+
+func (x *Bucket_IamConfig) Reset() {
+	*x = Bucket_IamConfig{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[53]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Bucket_IamConfig) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Bucket_IamConfig) ProtoMessage() {}
+
+func (x *Bucket_IamConfig) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[53]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Bucket_IamConfig.ProtoReflect.Descriptor instead.
+func (*Bucket_IamConfig) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{36, 3}
+}
+
+func (x *Bucket_IamConfig) GetUniformBucketLevelAccess() *Bucket_IamConfig_UniformBucketLevelAccess {
+	if x != nil {
+		return x.UniformBucketLevelAccess
+	}
+	return nil
+}
+
+func (x *Bucket_IamConfig) GetPublicAccessPrevention() string {
+	if x != nil {
+		return x.PublicAccessPrevention
+	}
+	return ""
+}
+
+// Lifecycle properties of a bucket.
+// For more information, see https://cloud.google.com/storage/docs/lifecycle.
+type Bucket_Lifecycle struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// A lifecycle management rule, which is made of an action to take and the
+	// condition(s) under which the action will be taken.
+	Rule []*Bucket_Lifecycle_Rule `protobuf:"bytes,1,rep,name=rule,proto3" json:"rule,omitempty"`
+}
+
+func (x *Bucket_Lifecycle) Reset() {
+	*x = Bucket_Lifecycle{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[54]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Bucket_Lifecycle) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Bucket_Lifecycle) ProtoMessage() {}
+
+func (x *Bucket_Lifecycle) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[54]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Bucket_Lifecycle.ProtoReflect.Descriptor instead.
+func (*Bucket_Lifecycle) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{36, 4}
+}
+
+func (x *Bucket_Lifecycle) GetRule() []*Bucket_Lifecycle_Rule {
+	if x != nil {
+		return x.Rule
+	}
+	return nil
+}
+
+// Logging-related properties of a bucket.
+type Bucket_Logging struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The destination bucket where the current bucket's logs should be placed,
+	// using path format (like `projects/123456/buckets/foo`).
+	LogBucket string `protobuf:"bytes,1,opt,name=log_bucket,json=logBucket,proto3" json:"log_bucket,omitempty"`
+	// A prefix for log object names.
+	LogObjectPrefix string `protobuf:"bytes,2,opt,name=log_object_prefix,json=logObjectPrefix,proto3" json:"log_object_prefix,omitempty"`
+}
+
+func (x *Bucket_Logging) Reset() {
+	*x = Bucket_Logging{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[55]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Bucket_Logging) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Bucket_Logging) ProtoMessage() {}
+
+func (x *Bucket_Logging) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[55]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Bucket_Logging.ProtoReflect.Descriptor instead.
+func (*Bucket_Logging) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{36, 5}
+}
+
+func (x *Bucket_Logging) GetLogBucket() string {
+	if x != nil {
+		return x.LogBucket
+	}
+	return ""
+}
+
+func (x *Bucket_Logging) GetLogObjectPrefix() string {
+	if x != nil {
+		return x.LogObjectPrefix
+	}
+	return ""
+}
+
+// Retention policy properties of a bucket.
+type Bucket_RetentionPolicy struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Server-determined value that indicates the time from which policy was
+	// enforced and effective.
+	EffectiveTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=effective_time,json=effectiveTime,proto3" json:"effective_time,omitempty"`
+	// Once locked, an object retention policy cannot be modified.
+	IsLocked bool `protobuf:"varint,2,opt,name=is_locked,json=isLocked,proto3" json:"is_locked,omitempty"`
+	// The duration that objects need to be retained. Retention duration must be
+	// greater than zero and less than 100 years. Note that enforcement of
+	// retention periods less than a day is not guaranteed. Such periods should
+	// only be used for testing purposes. Any `nanos` value specified will be
+	// rounded down to the nearest second.
+	RetentionDuration *durationpb.Duration `protobuf:"bytes,4,opt,name=retention_duration,json=retentionDuration,proto3" json:"retention_duration,omitempty"`
+}
+
+func (x *Bucket_RetentionPolicy) Reset() {
+	*x = Bucket_RetentionPolicy{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[56]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Bucket_RetentionPolicy) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Bucket_RetentionPolicy) ProtoMessage() {}
+
+func (x *Bucket_RetentionPolicy) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[56]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Bucket_RetentionPolicy.ProtoReflect.Descriptor instead.
+func (*Bucket_RetentionPolicy) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{36, 6}
+}
+
+func (x *Bucket_RetentionPolicy) GetEffectiveTime() *timestamppb.Timestamp {
+	if x != nil {
+		return x.EffectiveTime
+	}
+	return nil
+}
+
+func (x *Bucket_RetentionPolicy) GetIsLocked() bool {
+	if x != nil {
+		return x.IsLocked
+	}
+	return false
+}
+
+func (x *Bucket_RetentionPolicy) GetRetentionDuration() *durationpb.Duration {
+	if x != nil {
+		return x.RetentionDuration
+	}
+	return nil
+}
+
+// Soft delete policy properties of a bucket.
+type Bucket_SoftDeletePolicy struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The period of time that soft-deleted objects in the bucket must be
+	// retained and cannot be permanently deleted. The duration must be greater
+	// than or equal to 7 days and less than 1 year.
+	RetentionDuration *durationpb.Duration `protobuf:"bytes,1,opt,name=retention_duration,json=retentionDuration,proto3,oneof" json:"retention_duration,omitempty"`
+	// Time from which the policy was effective. This is service-provided.
+	EffectiveTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=effective_time,json=effectiveTime,proto3,oneof" json:"effective_time,omitempty"`
+}
+
+func (x *Bucket_SoftDeletePolicy) Reset() {
+	*x = Bucket_SoftDeletePolicy{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[57]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Bucket_SoftDeletePolicy) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Bucket_SoftDeletePolicy) ProtoMessage() {}
+
+func (x *Bucket_SoftDeletePolicy) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[57]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Bucket_SoftDeletePolicy.ProtoReflect.Descriptor instead.
+func (*Bucket_SoftDeletePolicy) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{36, 7}
+}
+
+func (x *Bucket_SoftDeletePolicy) GetRetentionDuration() *durationpb.Duration {
+	if x != nil {
+		return x.RetentionDuration
+	}
+	return nil
+}
+
+func (x *Bucket_SoftDeletePolicy) GetEffectiveTime() *timestamppb.Timestamp {
+	if x != nil {
+		return x.EffectiveTime
+	}
+	return nil
+}
+
+// Properties of a bucket related to versioning.
+// For more on Cloud Storage versioning, see
+// https://cloud.google.com/storage/docs/object-versioning.
+type Bucket_Versioning struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// While set to true, versioning is fully enabled for this bucket.
+	Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
+}
+
+func (x *Bucket_Versioning) Reset() {
+	*x = Bucket_Versioning{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[58]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Bucket_Versioning) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Bucket_Versioning) ProtoMessage() {}
+
+func (x *Bucket_Versioning) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[58]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Bucket_Versioning.ProtoReflect.Descriptor instead.
+func (*Bucket_Versioning) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{36, 8}
+}
+
+func (x *Bucket_Versioning) GetEnabled() bool {
+	if x != nil {
+		return x.Enabled
+	}
+	return false
+}
+
+// Properties of a bucket related to accessing the contents as a static
+// website. For more on hosting a static website via Cloud Storage, see
+// https://cloud.google.com/storage/docs/hosting-static-website.
+type Bucket_Website struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// If the requested object path is missing, the service will ensure the path
+	// has a trailing '/', append this suffix, and attempt to retrieve the
+	// resulting object. This allows the creation of `index.html`
+	// objects to represent directory pages.
+	MainPageSuffix string `protobuf:"bytes,1,opt,name=main_page_suffix,json=mainPageSuffix,proto3" json:"main_page_suffix,omitempty"`
+	// If the requested object path is missing, and any
+	// `mainPageSuffix` object is missing, if applicable, the service
+	// will return the named object from this bucket as the content for a
+	// [https://tools.ietf.org/html/rfc7231#section-6.5.4][404 Not Found]
+	// result.
+	NotFoundPage string `protobuf:"bytes,2,opt,name=not_found_page,json=notFoundPage,proto3" json:"not_found_page,omitempty"`
+}
+
+func (x *Bucket_Website) Reset() {
+	*x = Bucket_Website{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[59]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Bucket_Website) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Bucket_Website) ProtoMessage() {}
+
+func (x *Bucket_Website) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[59]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Bucket_Website.ProtoReflect.Descriptor instead.
+func (*Bucket_Website) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{36, 9}
+}
+
+func (x *Bucket_Website) GetMainPageSuffix() string {
+	if x != nil {
+		return x.MainPageSuffix
+	}
+	return ""
+}
+
+func (x *Bucket_Website) GetNotFoundPage() string {
+	if x != nil {
+		return x.NotFoundPage
+	}
+	return ""
+}
+
+// Configuration for Custom Dual Regions.  It should specify precisely two
+// eligible regions within the same Multiregion. More information on regions
+// may be found [https://cloud.google.com/storage/docs/locations][here].
+type Bucket_CustomPlacementConfig struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// List of locations to use for data placement.
+	DataLocations []string `protobuf:"bytes,1,rep,name=data_locations,json=dataLocations,proto3" json:"data_locations,omitempty"`
+}
+
+func (x *Bucket_CustomPlacementConfig) Reset() {
+	*x = Bucket_CustomPlacementConfig{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[60]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Bucket_CustomPlacementConfig) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Bucket_CustomPlacementConfig) ProtoMessage() {}
+
+func (x *Bucket_CustomPlacementConfig) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[60]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Bucket_CustomPlacementConfig.ProtoReflect.Descriptor instead.
+func (*Bucket_CustomPlacementConfig) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{36, 10}
+}
+
+func (x *Bucket_CustomPlacementConfig) GetDataLocations() []string {
+	if x != nil {
+		return x.DataLocations
+	}
+	return nil
+}
+
+// Configuration for a bucket's Autoclass feature.
+type Bucket_Autoclass struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Enables Autoclass.
+	Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
+	// Output only. Latest instant at which the `enabled` field was set to true
+	// after being disabled/unconfigured or set to false after being enabled. If
+	// Autoclass is enabled when the bucket is created, the toggle_time is set
+	// to the bucket creation time.
+	ToggleTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=toggle_time,json=toggleTime,proto3" json:"toggle_time,omitempty"`
+	// An object in an Autoclass bucket will eventually cool down to the
+	// terminal storage class if there is no access to the object.
+	// The only valid values are NEARLINE and ARCHIVE.
+	TerminalStorageClass *string `protobuf:"bytes,3,opt,name=terminal_storage_class,json=terminalStorageClass,proto3,oneof" json:"terminal_storage_class,omitempty"`
+	// Output only. Latest instant at which the autoclass terminal storage class
+	// was updated.
+	TerminalStorageClassUpdateTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=terminal_storage_class_update_time,json=terminalStorageClassUpdateTime,proto3,oneof" json:"terminal_storage_class_update_time,omitempty"`
+}
+
+func (x *Bucket_Autoclass) Reset() {
+	*x = Bucket_Autoclass{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[61]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Bucket_Autoclass) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Bucket_Autoclass) ProtoMessage() {}
+
+func (x *Bucket_Autoclass) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[61]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Bucket_Autoclass.ProtoReflect.Descriptor instead.
+func (*Bucket_Autoclass) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{36, 11}
+}
+
+func (x *Bucket_Autoclass) GetEnabled() bool {
+	if x != nil {
+		return x.Enabled
+	}
+	return false
+}
+
+func (x *Bucket_Autoclass) GetToggleTime() *timestamppb.Timestamp {
+	if x != nil {
+		return x.ToggleTime
+	}
+	return nil
+}
+
+func (x *Bucket_Autoclass) GetTerminalStorageClass() string {
+	if x != nil && x.TerminalStorageClass != nil {
+		return *x.TerminalStorageClass
+	}
+	return ""
+}
+
+func (x *Bucket_Autoclass) GetTerminalStorageClassUpdateTime() *timestamppb.Timestamp {
+	if x != nil {
+		return x.TerminalStorageClassUpdateTime
+	}
+	return nil
+}
+
+// Configuration for a bucket's hierarchical namespace feature.
+type Bucket_HierarchicalNamespace struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Optional. Enables the hierarchical namespace feature.
+	Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
+}
+
+func (x *Bucket_HierarchicalNamespace) Reset() {
+	*x = Bucket_HierarchicalNamespace{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[62]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Bucket_HierarchicalNamespace) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Bucket_HierarchicalNamespace) ProtoMessage() {}
+
+func (x *Bucket_HierarchicalNamespace) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[62]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Bucket_HierarchicalNamespace.ProtoReflect.Descriptor instead.
+func (*Bucket_HierarchicalNamespace) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{36, 12}
+}
+
+func (x *Bucket_HierarchicalNamespace) GetEnabled() bool {
+	if x != nil {
+		return x.Enabled
+	}
+	return false
+}
+
+// Settings for Uniform Bucket level access.
+// See https://cloud.google.com/storage/docs/uniform-bucket-level-access.
+type Bucket_IamConfig_UniformBucketLevelAccess struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// If set, access checks only use bucket-level IAM policies or above.
+	Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
+	// The deadline time for changing
+	// `iam_config.uniform_bucket_level_access.enabled` from `true` to
+	// `false`. Mutable until the specified deadline is reached, but not
+	// afterward.
+	LockTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=lock_time,json=lockTime,proto3" json:"lock_time,omitempty"`
+}
+
+func (x *Bucket_IamConfig_UniformBucketLevelAccess) Reset() {
+	*x = Bucket_IamConfig_UniformBucketLevelAccess{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[64]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Bucket_IamConfig_UniformBucketLevelAccess) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Bucket_IamConfig_UniformBucketLevelAccess) ProtoMessage() {}
+
+func (x *Bucket_IamConfig_UniformBucketLevelAccess) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[64]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Bucket_IamConfig_UniformBucketLevelAccess.ProtoReflect.Descriptor instead.
+func (*Bucket_IamConfig_UniformBucketLevelAccess) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{36, 3, 0}
+}
+
+func (x *Bucket_IamConfig_UniformBucketLevelAccess) GetEnabled() bool {
+	if x != nil {
+		return x.Enabled
+	}
+	return false
+}
+
+func (x *Bucket_IamConfig_UniformBucketLevelAccess) GetLockTime() *timestamppb.Timestamp {
+	if x != nil {
+		return x.LockTime
+	}
+	return nil
+}
+
+// A lifecycle Rule, combining an action to take on an object and a
+// condition which will trigger that action.
+type Bucket_Lifecycle_Rule struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The action to take.
+	Action *Bucket_Lifecycle_Rule_Action `protobuf:"bytes,1,opt,name=action,proto3" json:"action,omitempty"`
+	// The condition(s) under which the action will be taken.
+	Condition *Bucket_Lifecycle_Rule_Condition `protobuf:"bytes,2,opt,name=condition,proto3" json:"condition,omitempty"`
+}
+
+func (x *Bucket_Lifecycle_Rule) Reset() {
+	*x = Bucket_Lifecycle_Rule{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[65]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Bucket_Lifecycle_Rule) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Bucket_Lifecycle_Rule) ProtoMessage() {}
+
+func (x *Bucket_Lifecycle_Rule) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[65]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Bucket_Lifecycle_Rule.ProtoReflect.Descriptor instead.
+func (*Bucket_Lifecycle_Rule) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{36, 4, 0}
+}
+
+func (x *Bucket_Lifecycle_Rule) GetAction() *Bucket_Lifecycle_Rule_Action {
+	if x != nil {
+		return x.Action
+	}
+	return nil
+}
+
+func (x *Bucket_Lifecycle_Rule) GetCondition() *Bucket_Lifecycle_Rule_Condition {
+	if x != nil {
+		return x.Condition
+	}
+	return nil
+}
+
+// An action to take on an object.
+type Bucket_Lifecycle_Rule_Action struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Type of the action. Currently, only `Delete`, `SetStorageClass`, and
+	// `AbortIncompleteMultipartUpload` are supported.
+	Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
+	// Target storage class. Required iff the type of the action is
+	// SetStorageClass.
+	StorageClass string `protobuf:"bytes,2,opt,name=storage_class,json=storageClass,proto3" json:"storage_class,omitempty"`
+}
+
+func (x *Bucket_Lifecycle_Rule_Action) Reset() {
+	*x = Bucket_Lifecycle_Rule_Action{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[66]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Bucket_Lifecycle_Rule_Action) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Bucket_Lifecycle_Rule_Action) ProtoMessage() {}
+
+func (x *Bucket_Lifecycle_Rule_Action) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[66]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Bucket_Lifecycle_Rule_Action.ProtoReflect.Descriptor instead.
+func (*Bucket_Lifecycle_Rule_Action) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{36, 4, 0, 0}
+}
+
+func (x *Bucket_Lifecycle_Rule_Action) GetType() string {
+	if x != nil {
+		return x.Type
+	}
+	return ""
+}
+
+func (x *Bucket_Lifecycle_Rule_Action) GetStorageClass() string {
+	if x != nil {
+		return x.StorageClass
+	}
+	return ""
+}
+
+// A condition of an object which triggers some action.
+type Bucket_Lifecycle_Rule_Condition struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Age of an object (in days). This condition is satisfied when an
+	// object reaches the specified age.
+	// A value of 0 indicates that all objects immediately match this
+	// condition.
+	AgeDays *int32 `protobuf:"varint,1,opt,name=age_days,json=ageDays,proto3,oneof" json:"age_days,omitempty"`
+	// This condition is satisfied when an object is created before midnight
+	// of the specified date in UTC.
+	CreatedBefore *date.Date `protobuf:"bytes,2,opt,name=created_before,json=createdBefore,proto3" json:"created_before,omitempty"`
+	// Relevant only for versioned objects. If the value is
+	// `true`, this condition matches live objects; if the value
+	// is `false`, it matches archived objects.
+	IsLive *bool `protobuf:"varint,3,opt,name=is_live,json=isLive,proto3,oneof" json:"is_live,omitempty"`
+	// Relevant only for versioned objects. If the value is N, this
+	// condition is satisfied when there are at least N versions (including
+	// the live version) newer than this version of the object.
+	NumNewerVersions *int32 `protobuf:"varint,4,opt,name=num_newer_versions,json=numNewerVersions,proto3,oneof" json:"num_newer_versions,omitempty"`
+	// Objects having any of the storage classes specified by this condition
+	// will be matched. Values include `MULTI_REGIONAL`, `REGIONAL`,
+	// `NEARLINE`, `COLDLINE`, `STANDARD`, and
+	// `DURABLE_REDUCED_AVAILABILITY`.
+	MatchesStorageClass []string `protobuf:"bytes,5,rep,name=matches_storage_class,json=matchesStorageClass,proto3" json:"matches_storage_class,omitempty"`
+	// Number of days that have elapsed since the custom timestamp set on an
+	// object.
+	// The value of the field must be a nonnegative integer.
+	DaysSinceCustomTime *int32 `protobuf:"varint,7,opt,name=days_since_custom_time,json=daysSinceCustomTime,proto3,oneof" json:"days_since_custom_time,omitempty"`
+	// An object matches this condition if the custom timestamp set on the
+	// object is before the specified date in UTC.
+	CustomTimeBefore *date.Date `protobuf:"bytes,8,opt,name=custom_time_before,json=customTimeBefore,proto3" json:"custom_time_before,omitempty"`
+	// This condition is relevant only for versioned objects. An object
+	// version satisfies this condition only if these many days have been
+	// passed since it became noncurrent. The value of the field must be a
+	// nonnegative integer. If it's zero, the object version will become
+	// eligible for Lifecycle action as soon as it becomes noncurrent.
+	DaysSinceNoncurrentTime *int32 `protobuf:"varint,9,opt,name=days_since_noncurrent_time,json=daysSinceNoncurrentTime,proto3,oneof" json:"days_since_noncurrent_time,omitempty"`
+	// This condition is relevant only for versioned objects. An object
+	// version satisfies this condition only if it became noncurrent before
+	// the specified date in UTC.
+	NoncurrentTimeBefore *date.Date `protobuf:"bytes,10,opt,name=noncurrent_time_before,json=noncurrentTimeBefore,proto3" json:"noncurrent_time_before,omitempty"`
+	// List of object name prefixes. If any prefix exactly matches the
+	// beginning of the object name, the condition evaluates to true.
+	MatchesPrefix []string `protobuf:"bytes,11,rep,name=matches_prefix,json=matchesPrefix,proto3" json:"matches_prefix,omitempty"`
+	// List of object name suffixes. If any suffix exactly matches the
+	// end of the object name, the condition evaluates to true.
+	MatchesSuffix []string `protobuf:"bytes,12,rep,name=matches_suffix,json=matchesSuffix,proto3" json:"matches_suffix,omitempty"`
+}
+
+func (x *Bucket_Lifecycle_Rule_Condition) Reset() {
+	*x = Bucket_Lifecycle_Rule_Condition{}
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[67]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Bucket_Lifecycle_Rule_Condition) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Bucket_Lifecycle_Rule_Condition) ProtoMessage() {}
+
+func (x *Bucket_Lifecycle_Rule_Condition) ProtoReflect() protoreflect.Message {
+	mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[67]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Bucket_Lifecycle_Rule_Condition.ProtoReflect.Descriptor instead.
+func (*Bucket_Lifecycle_Rule_Condition) Descriptor() ([]byte, []int) {
+	return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{36, 4, 0, 1}
+}
+
+func (x *Bucket_Lifecycle_Rule_Condition) GetAgeDays() int32 {
+	if x != nil && x.AgeDays != nil {
+		return *x.AgeDays
+	}
+	return 0
+}
+
+func (x *Bucket_Lifecycle_Rule_Condition) GetCreatedBefore() *date.Date {
+	if x != nil {
+		return x.CreatedBefore
+	}
+	return nil
+}
+
+func (x *Bucket_Lifecycle_Rule_Condition) GetIsLive() bool {
+	if x != nil && x.IsLive != nil {
+		return *x.IsLive
+	}
+	return false
+}
+
+func (x *Bucket_Lifecycle_Rule_Condition) GetNumNewerVersions() int32 {
+	if x != nil && x.NumNewerVersions != nil {
+		return *x.NumNewerVersions
+	}
+	return 0
+}
+
+func (x *Bucket_Lifecycle_Rule_Condition) GetMatchesStorageClass() []string {
+	if x != nil {
+		return x.MatchesStorageClass
+	}
+	return nil
+}
+
+func (x *Bucket_Lifecycle_Rule_Condition) GetDaysSinceCustomTime() int32 {
+	if x != nil && x.DaysSinceCustomTime != nil {
+		return *x.DaysSinceCustomTime
+	}
+	return 0
+}
+
+func (x *Bucket_Lifecycle_Rule_Condition) GetCustomTimeBefore() *date.Date {
+	if x != nil {
+		return x.CustomTimeBefore
+	}
+	return nil
+}
+
+func (x *Bucket_Lifecycle_Rule_Condition) GetDaysSinceNoncurrentTime() int32 {
+	if x != nil && x.DaysSinceNoncurrentTime != nil {
+		return *x.DaysSinceNoncurrentTime
+	}
+	return 0
+}
+
+func (x *Bucket_Lifecycle_Rule_Condition) GetNoncurrentTimeBefore() *date.Date {
+	if x != nil {
+		return x.NoncurrentTimeBefore
+	}
+	return nil
+}
+
+func (x *Bucket_Lifecycle_Rule_Condition) GetMatchesPrefix() []string {
+	if x != nil {
+		return x.MatchesPrefix
+	}
+	return nil
+}
+
+func (x *Bucket_Lifecycle_Rule_Condition) GetMatchesSuffix() []string {
+	if x != nil {
+		return x.MatchesSuffix
+	}
+	return nil
+}
+
 var File_google_storage_control_v2_storage_control_proto protoreflect.FileDescriptor
 
 var file_google_storage_control_v2_storage_control_proto_rawDesc = []byte{
@@ -1647,483 +6408,1799 @@
 	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65,
 	0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67,
 	0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65,
-	0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x36, 0x0a, 0x11, 0x50,
-	0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f,
-	0x12, 0x21, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x22, 0xa3, 0x03, 0x0a, 0x06, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x17,
-	0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41,
-	0x08, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67,
-	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x42,
-	0x03, 0xe0, 0x41, 0x03, 0x52, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74,
-	0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65,
+	0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x61, 0x6d,
+	0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x6c,
+	0x69, 0x63, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x2f, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x22, 0x36, 0x0a, 0x11, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x6e, 0x61,
+	0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09,
+	0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa3, 0x03, 0x0a, 0x06, 0x46, 0x6f,
+	0x6c, 0x64, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x08, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a,
+	0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0e, 0x6d, 0x65, 0x74, 0x61,
+	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72,
+	0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 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, 0x42, 0x03, 0xe0, 0x41, 0x03,
+	0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b,
+	0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0,
+	0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x61,
+	0x0a, 0x13, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65,
+	0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e,
+	0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52,
+	0x65, 0x6e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x11,
+	0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66,
+	0x6f, 0x3a, 0x6c, 0xea, 0x41, 0x69, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x46,
+	0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x37, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f,
+	0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
+	0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x2f, 0x66, 0x6f, 0x6c, 0x64, 0x65,
+	0x72, 0x73, 0x2f, 0x7b, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x3d, 0x2a, 0x2a, 0x7d, 0x2a, 0x07,
+	0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x32, 0x06, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x22,
+	0xb6, 0x02, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01,
+	0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72,
+	0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63,
+	0x6f, 0x6d, 0x2f, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
+	0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03,
+	0x48, 0x00, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b,
+	0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28,
+	0x03, 0x48, 0x01, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01,
+	0x12, 0x2a, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xe0, 0x41, 0x01, 0xe2, 0x8c, 0xcf, 0xd7, 0x08, 0x02, 0x08,
+	0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x1a, 0x0a, 0x18,
+	0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f,
+	0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e,
+	0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x85, 0x02, 0x0a, 0x13, 0x43, 0x72, 0x65,
+	0x61, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x3d, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x12, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,
+	0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d,
+	0x2f, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12,
+	0x3e, 0x0a, 0x06, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
+	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x46, 0x6f, 0x6c, 0x64,
+	0x65, 0x72, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12,
+	0x20, 0x0a, 0x09, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x49,
+	0x64, 0x12, 0x21, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72,
+	0x73, 0x69, 0x76, 0x65, 0x12, 0x2a, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f,
+	0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xe0, 0x41, 0x01, 0xe2, 0x8c, 0xcf,
+	0xd7, 0x08, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64,
+	0x22, 0xb9, 0x02, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65,
+	0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d,
+	0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70,
+	0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x04, 0x6e,
+	0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65,
+	0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65,
+	0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01,
+	0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18,
+	0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67,
+	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63,
+	0x68, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f,
+	0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xe0, 0x41, 0x01, 0xe2, 0x8c, 0xcf,
+	0xd7, 0x08, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64,
+	0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65,
+	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c,
+	0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xed, 0x02, 0x0a,
+	0x12, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x12, 0x1d, 0x73, 0x74, 0x6f,
+	0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e,
+	0x63, 0x6f, 0x6d, 0x2f, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65,
+	0x6e, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65,
+	0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b,
+	0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, 0x70,
+	0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1b, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66,
+	0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x06, 0x70,
+	0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x21, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74,
+	0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, 0x64,
+	0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x13, 0x6c, 0x65, 0x78, 0x69,
+	0x63, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18,
+	0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x12, 0x6c, 0x65, 0x78, 0x69,
+	0x63, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x30,
+	0x0a, 0x11, 0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x5f,
+	0x65, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x10,
+	0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x45, 0x6e, 0x64,
+	0x12, 0x2a, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x09,
+	0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xe0, 0x41, 0x01, 0xe2, 0x8c, 0xcf, 0xd7, 0x08, 0x02, 0x08,
+	0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x7a, 0x0a, 0x13,
+	0x4c, 0x69, 0x73, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74,
+	0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32,
+	0x2e, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x07, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73,
+	0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f,
+	0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50,
+	0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xf2, 0x02, 0x0a, 0x13, 0x52, 0x65, 0x6e,
+	0x61, 0x6d, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x39, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25,
+	0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x46,
+	0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x15, 0x64,
+	0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65,
+	0x72, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52,
+	0x13, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x6c, 0x64,
+	0x65, 0x72, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67,
+	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18,
+	0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67,
+	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01,
+	0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65,
+	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68,
+	0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61,
+	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74,
+	0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xe0, 0x41, 0x01, 0xe2, 0x8c,
+	0xcf, 0xd7, 0x08, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49,
+	0x64, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e,
+	0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a,
+	0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xe9, 0x02,
+	0x0a, 0x22, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e,
+	0x69, 0x6e, 0x67, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61,
+	0x64, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74,
+	0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
 	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65,
 	0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61,
-	0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
-	0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
-	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69,
-	0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70,
-	0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x61, 0x0a, 0x13, 0x70, 0x65, 0x6e, 0x64,
-	0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18,
-	0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73,
-	0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76,
-	0x32, 0x2e, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x49,
-	0x6e, 0x66, 0x6f, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x11, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e,
-	0x67, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x6c, 0xea, 0x41, 0x69,
-	0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
-	0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12,
-	0x37, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65,
-	0x63, 0x74, 0x7d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63,
-	0x6b, 0x65, 0x74, 0x7d, 0x2f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x66, 0x6f,
-	0x6c, 0x64, 0x65, 0x72, 0x3d, 0x2a, 0x2a, 0x7d, 0x2a, 0x07, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72,
-	0x73, 0x32, 0x06, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x22, 0xb6, 0x02, 0x0a, 0x10, 0x47, 0x65,
-	0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39,
-	0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41,
-	0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f,
-	0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x46, 0x6f, 0x6c,
-	0x64, 0x65, 0x72, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f,
-	0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d,
-	0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x15, 0x69, 0x66,
-	0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61,
-	0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74,
-	0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f,
-	0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x18, 0x69,
-	0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e,
-	0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0a, 0x72, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b,
-	0xe0, 0x41, 0x01, 0xe2, 0x8c, 0xcf, 0xd7, 0x08, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65,
-	0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74,
-	0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65,
-	0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74,
-	0x63, 0x68, 0x22, 0x85, 0x02, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x6c,
-	0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x70, 0x61,
-	0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa,
-	0x41, 0x1f, 0x12, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
-	0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x46, 0x6f, 0x6c, 0x64, 0x65,
-	0x72, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x66, 0x6f, 0x6c,
-	0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
-	0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72,
-	0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x42, 0x03, 0xe0, 0x41,
-	0x02, 0x52, 0x06, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x09, 0x66, 0x6f, 0x6c,
-	0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41,
-	0x02, 0x52, 0x08, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x09, 0x72,
-	0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x42, 0x03,
-	0xe0, 0x41, 0x01, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x2a,
-	0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01,
+	0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69,
+	0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73,
+	0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69,
+	0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d,
+	0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
+	0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
+	0x54, 0x69, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3a, 0x0a,
+	0x16, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x6e, 0x63, 0x65,
+	0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0,
+	0x41, 0x03, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x61, 0x6e,
+	0x63, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x10, 0x70, 0x72, 0x6f,
+	0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20,
+	0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65,
+	0x73, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0xdc, 0x01, 0x0a, 0x14, 0x52, 0x65,
+	0x6e, 0x61, 0x6d, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
+	0x74, 0x61, 0x12, 0x66, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74,
+	0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e,
+	0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x6f,
+	0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d,
+	0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x6f,
+	0x75, 0x72, 0x63, 0x65, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x6f, 0x6c, 0x64,
+	0x65, 0x72, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x13, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x49, 0x64, 0x22, 0xbd, 0x04, 0x0a, 0x0d, 0x53, 0x74, 0x6f,
+	0x72, 0x61, 0x67, 0x65, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61,
+	0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x04, 0x6e,
+	0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03,
+	0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x7b,
+	0x0a, 0x17, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65,
+	0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x3e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
+	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x6f, 0x72,
+	0x61, 0x67, 0x65, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d,
+	0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42,
+	0x03, 0xe0, 0x41, 0x03, 0x52, 0x15, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x63,
+	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x7a, 0x0a, 0x16, 0x68,
+	0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
+	0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e,
+	0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c,
+	0x61, 0x79, 0x6f, 0x75, 0x74, 0x2e, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x69, 0x63,
+	0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03,
+	0x52, 0x15, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x4e, 0x61,
+	0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x1a, 0x3e, 0x0a, 0x15, 0x43, 0x75, 0x73, 0x74, 0x6f,
+	0x6d, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x6f,
+	0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x31, 0x0a, 0x15, 0x48, 0x69, 0x65, 0x72, 0x61,
+	0x72, 0x63, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
+	0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x3a, 0x5c, 0xea, 0x41, 0x59, 0x0a,
+	0x24, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61,
+	0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c,
+	0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x31, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f,
+	0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
+	0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61,
+	0x67, 0x65, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x22, 0x9f, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74,
+	0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x42, 0x2c, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x26, 0x0a, 0x24, 0x73, 0x74, 0x6f, 0x72,
+	0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63,
+	0x6f, 0x6d, 0x2f, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74,
+	0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x2a,
+	0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01,
 	0x28, 0x09, 0x42, 0x0b, 0xe0, 0x41, 0x01, 0xe2, 0x8c, 0xcf, 0xd7, 0x08, 0x02, 0x08, 0x01, 0x52,
-	0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0xb9, 0x02, 0x0a, 0x13, 0x44,
-	0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x12, 0x39, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
-	0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,
-	0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d,
-	0x2f, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a,
-	0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69,
-	0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00,
-	0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69,
-	0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66,
-	0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
-	0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48,
-	0x01, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x2a,
-	0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01,
-	0x28, 0x09, 0x42, 0x0b, 0xe0, 0x41, 0x01, 0xe2, 0x8c, 0xcf, 0xd7, 0x08, 0x02, 0x08, 0x01, 0x52,
-	0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69,
-	0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
-	0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65,
-	0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74,
-	0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xed, 0x02, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x46,
-	0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a,
-	0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0,
-	0x41, 0x02, 0xfa, 0x41, 0x1f, 0x12, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67,
-	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x46, 0x6f,
-	0x6c, 0x64, 0x65, 0x72, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x09,
-	0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42,
-	0x03, 0xe0, 0x41, 0x01, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22,
-	0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01,
-	0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b,
-	0x65, 0x6e, 0x12, 0x1b, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x04, 0x20, 0x01,
-	0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12,
-	0x21, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01,
-	0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74,
-	0x65, 0x72, 0x12, 0x34, 0x0a, 0x13, 0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f, 0x67, 0x72, 0x61, 0x70,
-	0x68, 0x69, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42,
-	0x03, 0xe0, 0x41, 0x01, 0x52, 0x12, 0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f, 0x67, 0x72, 0x61, 0x70,
-	0x68, 0x69, 0x63, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x30, 0x0a, 0x11, 0x6c, 0x65, 0x78, 0x69,
-	0x63, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0x07, 0x20,
-	0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x10, 0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f,
-	0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x45, 0x6e, 0x64, 0x12, 0x2a, 0x0a, 0x0a, 0x72, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b,
-	0xe0, 0x41, 0x01, 0xe2, 0x8c, 0xcf, 0xd7, 0x08, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x7a, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6f,
-	0x6c, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a,
-	0x07, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21,
-	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e,
-	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x46, 0x6f, 0x6c, 0x64, 0x65,
-	0x72, 0x52, 0x07, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65,
-	0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b,
-	0x65, 0x6e, 0x22, 0xf2, 0x02, 0x0a, 0x13, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x6f, 0x6c,
-	0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x04, 0x6e, 0x61,
-	0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f,
-	0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
-	0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52,
-	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x15, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x08,
-	0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x13, 0x64, 0x65, 0x73, 0x74, 0x69,
-	0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3b,
-	0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48,
-	0x00, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69,
-	0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
-	0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03,
-	0x48, 0x01, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12,
-	0x2a, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20,
-	0x01, 0x28, 0x09, 0x42, 0x0b, 0xe0, 0x41, 0x01, 0xe2, 0x8c, 0xcf, 0xd7, 0x08, 0x02, 0x08, 0x01,
-	0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x1a, 0x0a, 0x18, 0x5f,
-	0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d,
-	0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f,
-	0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xe9, 0x02, 0x0a, 0x22, 0x43, 0x6f, 0x6d, 0x6d,
-	0x6f, 0x6e, 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x65,
-	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x40,
-	0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42,
-	0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65,
-	0x12, 0x3a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03,
-	0xe0, 0x41, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b,
-	0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0,
-	0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x17,
-	0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41,
-	0x03, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3a, 0x0a, 0x16, 0x72, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x15, 0x72, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f,
-	0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0,
-	0x41, 0x03, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x65, 0x72, 0x63,
-	0x65, 0x6e, 0x74, 0x22, 0xdc, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x6f,
-	0x6c, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x66, 0x0a, 0x0f,
-	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73,
-	0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76,
-	0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e,
-	0x69, 0x6e, 0x67, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61,
-	0x64, 0x61, 0x74, 0x61, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61,
-	0x64, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x66,
-	0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e,
-	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x32,
-	0x0a, 0x15, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x6f,
-	0x6c, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x64,
-	0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72,
-	0x49, 0x64, 0x22, 0xbd, 0x04, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x61,
-	0x79, 0x6f, 0x75, 0x74, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a,
-	0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42,
-	0x03, 0xe0, 0x41, 0x03, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28,
-	0x0a, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x7b, 0x0a, 0x17, 0x63, 0x75, 0x73, 0x74,
-	0x6f, 0x6d, 0x5f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e,
-	0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
-	0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72,
-	0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x61, 0x79,
-	0x6f, 0x75, 0x74, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d,
-	0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x15,
-	0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x43,
-	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x7a, 0x0a, 0x16, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63,
-	0x68, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18,
-	0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73,
-	0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76,
-	0x32, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x2e,
-	0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65,
-	0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x15, 0x68, 0x69, 0x65, 0x72,
-	0x61, 0x72, 0x63, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
-	0x65, 0x1a, 0x3e, 0x0a, 0x15, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x63, 0x65,
-	0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61,
-	0x74, 0x61, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03,
-	0x28, 0x09, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
-	0x73, 0x1a, 0x31, 0x0a, 0x15, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x69, 0x63, 0x61,
-	0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e,
-	0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61,
-	0x62, 0x6c, 0x65, 0x64, 0x3a, 0x5c, 0xea, 0x41, 0x59, 0x0a, 0x24, 0x73, 0x74, 0x6f, 0x72, 0x61,
-	0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f,
-	0x6d, 0x2f, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12,
-	0x31, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65,
-	0x63, 0x74, 0x7d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63,
-	0x6b, 0x65, 0x74, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x61, 0x79, 0x6f,
-	0x75, 0x74, 0x22, 0x9f, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67,
-	0x65, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40,
-	0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2c, 0xe0, 0x41,
-	0x02, 0xfa, 0x41, 0x26, 0x0a, 0x24, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f,
-	0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x53, 0x74, 0x6f,
-	0x72, 0x61, 0x67, 0x65, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
-	0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x2a, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xe0, 0x41,
-	0x01, 0xe2, 0x8c, 0xcf, 0xd7, 0x08, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x49, 0x64, 0x22, 0xed, 0x02, 0x0a, 0x0d, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64,
-	0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x08, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
-	0x2b, 0x0a, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0e, 0x6d, 0x65,
-	0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0b,
-	0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 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, 0x42, 0x03, 0xe0,
-	0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40,
-	0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42,
-	0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65,
-	0x3a, 0x91, 0x01, 0xea, 0x41, 0x8d, 0x01, 0x0a, 0x24, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
-	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
-	0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x46, 0x70,
-	0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
-	0x7d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65,
-	0x74, 0x7d, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72,
-	0x73, 0x2f, 0x7b, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65,
-	0x72, 0x3d, 0x2a, 0x2a, 0x7d, 0x2a, 0x0e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f,
-	0x6c, 0x64, 0x65, 0x72, 0x73, 0x32, 0x0d, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f,
-	0x6c, 0x64, 0x65, 0x72, 0x22, 0xc4, 0x02, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x6e, 0x61,
+	0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0xed, 0x02, 0x0a, 0x0d, 0x4d,
+	0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x04,
+	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x08, 0x52,
+	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e,
+	0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0,
+	0x41, 0x03, 0x52, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d,
+	0x65, 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, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65,
+	0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74,
+	0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65,
+	0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x3a, 0x91, 0x01, 0xea, 0x41, 0x8d, 0x01, 0x0a, 0x24, 0x73,
+	0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69,
+	0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c,
+	0x64, 0x65, 0x72, 0x12, 0x46, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70,
+	0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f,
+	0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64,
+	0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64,
+	0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x3d, 0x2a, 0x2a, 0x7d, 0x2a, 0x0e, 0x6d, 0x61, 0x6e,
+	0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x32, 0x0d, 0x6d, 0x61, 0x6e,
+	0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x22, 0xc4, 0x02, 0x0a, 0x17, 0x47,
+	0x65, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06,
+	0x20, 0x01, 0x28, 0x09, 0x42, 0x2c, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x26, 0x0a, 0x24, 0x73, 0x74,
+	0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73,
+	0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64,
+	0x65, 0x72, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d,
+	0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61,
+	0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x15, 0x69, 0x66, 0x4d,
+	0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74,
+	0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61,
+	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d,
+	0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x18, 0x69, 0x66,
+	0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f,
+	0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0a, 0x72, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xe0,
+	0x41, 0x01, 0xe2, 0x8c, 0xcf, 0xd7, 0x08, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74,
+	0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63,
+	0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e,
+	0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63,
+	0x68, 0x22, 0x95, 0x02, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x6e, 0x61,
 	0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x12, 0x40, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2c,
-	0xe0, 0x41, 0x02, 0xfa, 0x41, 0x26, 0x0a, 0x24, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e,
-	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4d,
-	0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x04, 0x6e, 0x61,
-	0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e,
-	0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e,
-	0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12,
-	0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04,
-	0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65,
-	0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68,
-	0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69,
-	0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xe0, 0x41, 0x01, 0xe2, 0x8c, 0xcf, 0xd7,
+	0x12, 0x44, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x42, 0x2c, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x26, 0x12, 0x24, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,
+	0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d,
+	0x2f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x06,
+	0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x54, 0x0a, 0x0e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
+	0x64, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67,
+	0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0d, 0x6d,
+	0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x11,
+	0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x69,
+	0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0f, 0x6d, 0x61,
+	0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2a, 0x0a,
+	0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28,
+	0x09, 0x42, 0x0b, 0xe0, 0x41, 0x01, 0xe2, 0x8c, 0xcf, 0xd7, 0x08, 0x02, 0x08, 0x01, 0x52, 0x09,
+	0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0xef, 0x02, 0x0a, 0x1a, 0x44, 0x65,
+	0x6c, 0x65, 0x74, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65,
+	0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2c, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x26, 0x0a, 0x24,
+	0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70,
+	0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f,
+	0x6c, 0x64, 0x65, 0x72, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66,
+	0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+	0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x15, 0x69,
+	0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d,
+	0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65,
+	0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74,
+	0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x18,
+	0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x0f, 0x61,
+	0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6e, 0x6f, 0x6e, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4e, 0x6f, 0x6e, 0x45, 0x6d,
+	0x70, 0x74, 0x79, 0x12, 0x2a, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69,
+	0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xe0, 0x41, 0x01, 0xe2, 0x8c, 0xcf, 0xd7,
 	0x08, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x42,
 	0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72,
 	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f,
 	0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x95, 0x02, 0x0a, 0x1a,
-	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c,
-	0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x06, 0x70, 0x61,
-	0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2c, 0xe0, 0x41, 0x02, 0xfa,
-	0x41, 0x26, 0x12, 0x24, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
-	0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4d, 0x61, 0x6e, 0x61, 0x67,
-	0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74,
-	0x12, 0x54, 0x0a, 0x0e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x5f, 0x66, 0x6f, 0x6c, 0x64,
-	0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xf0, 0x01, 0x0a, 0x19,
+	0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65,
+	0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x06, 0x70, 0x61, 0x72,
+	0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2c, 0xe0, 0x41, 0x02, 0xfa, 0x41,
+	0x26, 0x12, 0x24, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65,
+	0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12,
+	0x20, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a,
+	0x65, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65,
+	0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1b, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18,
+	0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66,
+	0x69, 0x78, 0x12, 0x2a, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64,
+	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xe0, 0x41, 0x01, 0xe2, 0x8c, 0xcf, 0xd7, 0x08,
+	0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x97,
+	0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f,
+	0x6c, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a,
+	0x0f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73,
+	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
+	0x76, 0x32, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72,
+	0x52, 0x0e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73,
+	0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f,
+	0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50,
+	0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x8d, 0x02, 0x0a, 0x13, 0x44, 0x65, 0x6c,
+	0x65, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x39, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25,
+	0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42,
+	0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x17, 0x69,
+	0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x15,
+	0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d,
+	0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f,
+	0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52,
+	0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x42, 0x1a, 0x0a, 0x18,
+	0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f,
+	0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e,
+	0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xd6, 0x02, 0x0a, 0x10, 0x47, 0x65, 0x74,
+	0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a,
+	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02,
+	0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b,
+	0x65, 0x74, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d,
+	0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61,
+	0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x15, 0x69, 0x66, 0x4d,
+	0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74,
+	0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61,
+	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d,
+	0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x18, 0x69, 0x66,
+	0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f,
+	0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3c, 0x0a, 0x09, 0x72, 0x65, 0x61,
+	0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46,
+	0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x48, 0x02, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64,
+	0x4d, 0x61, 0x73, 0x6b, 0x88, 0x01, 0x01, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d,
+	0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61,
+	0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67,
+	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61,
+	0x74, 0x63, 0x68, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73,
+	0x6b, 0x22, 0x9b, 0x02, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b,
+	0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x70, 0x61, 0x72,
+	0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41,
+	0x1f, 0x12, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74,
+	0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b,
+	0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
 	0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
-	0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64,
-	0x65, 0x72, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0d, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64,
-	0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x11, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
-	0x64, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
-	0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46,
-	0x6f, 0x6c, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xe0, 0x41, 0x01,
-	0xe2, 0x8c, 0xcf, 0xd7, 0x08, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x49, 0x64, 0x22, 0xef, 0x02, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x61,
-	0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
-	0x42, 0x2c, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x26, 0x0a, 0x24, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,
-	0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d,
-	0x2f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x04,
-	0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67,
+	0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x62, 0x75, 0x63,
+	0x6b, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x62, 0x75, 0x63,
+	0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69,
+	0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70,
+	0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x12, 0x41, 0x0a, 0x1d,
+	0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75,
+	0x6c, 0x74, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x07, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x1a, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x44,
+	0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, 0x6c, 0x22,
+	0xf3, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x12, 0x1d,
+	0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70,
+	0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x70,
+	0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69,
+	0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69,
+	0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65,
+	0x6e, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x72, 0x65, 0x61,
+	0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46,
+	0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64,
+	0x4d, 0x61, 0x73, 0x6b, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x61, 0x64,
+	0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x22, 0x7a, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63,
+	0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x07,
+	0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74,
+	0x52, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78,
+	0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65,
+	0x6e, 0x22, 0x9e, 0x01, 0x0a, 0x20, 0x4c, 0x6f, 0x63, 0x6b, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74,
+	0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d,
+	0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70,
+	0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x62,
+	0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61,
+	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d,
+	0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74,
+	0x63, 0x68, 0x22, 0xbe, 0x03, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63,
+	0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x62, 0x75,
+	0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
+	0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x03, 0xe0,
+	0x41, 0x02, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66,
+	0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+	0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x15, 0x69,
+	0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d,
+	0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65,
+	0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74,
+	0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x18,
+	0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0e, 0x70,
+	0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x08, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41,
+	0x63, 0x6c, 0x12, 0x41, 0x0a, 0x1d, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64,
+	0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f,
+	0x61, 0x63, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1a, 0x70, 0x72, 0x65, 0x64, 0x65,
+	0x66, 0x69, 0x6e, 0x65, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x62, 0x6a, 0x65,
+	0x63, 0x74, 0x41, 0x63, 0x6c, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f,
+	0x6d, 0x61, 0x73, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65,
+	0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0a, 0x75, 0x70, 0x64,
+	0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d,
+	0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61,
+	0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67,
+	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61,
+	0x74, 0x63, 0x68, 0x22, 0xec, 0x07, 0x0a, 0x14, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x4f,
+	0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0b,
+	0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61,
+	0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62,
+	0x6a, 0x65, 0x63, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69,
+	0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x63, 0x0a, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+	0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f,
+	0x73, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e,
+	0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0d, 0x73, 0x6f,
+	0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x3c, 0x0a, 0x1a, 0x64,
+	0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x64, 0x65,
+	0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x18, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x64,
+	0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f,
+	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65,
+	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3b,
+	0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x48,
+	0x01, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3f, 0x0a, 0x07, 0x6b,
+	0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x26, 0xfa, 0x41,
+	0x23, 0x0a, 0x21, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x6b, 0x6d, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, 0x70, 0x74,
+	0x6f, 0x4b, 0x65, 0x79, 0x52, 0x06, 0x6b, 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x75, 0x0a, 0x1c,
+	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72,
+	0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x43,
+	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
+	0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72,
+	0x61, 0x6d, 0x73, 0x12, 0x55, 0x0a, 0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x68,
+	0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+	0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x52, 0x0f, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+	0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x1a, 0xb1, 0x02, 0x0a, 0x0c, 0x53,
+	0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x17, 0x0a, 0x04, 0x6e,
+	0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04,
+	0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x83, 0x01, 0x0a, 0x14, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f,
+	0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f,
+	0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e,
+	0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+	0x74, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69,
+	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x13, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, 0x65,
+	0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x62, 0x0a, 0x13, 0x4f, 0x62,
+	0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+	0x73, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00,
+	0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61,
+	0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65,
+	0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x16,
+	0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65,
+	0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74,
+	0x63, 0x68, 0x22, 0xea, 0x04, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a,
+	0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x62, 0x75,
+	0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa,
+	0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65,
+	0x74, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x6f, 0x62, 0x6a,
+	0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06,
+	0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65,
+	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e,
+	0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20,
+	0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x17, 0x69,
+	0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74,
+	0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x14,
+	0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d,
+	0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65,
+	0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74,
+	0x63, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65,
+	0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63,
+	0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67,
+	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61,
+	0x74, 0x63, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x18, 0x69, 0x66, 0x4d,
+	0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74,
+	0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x75, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d,
+	0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f,
+	0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61,
+	0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65,
+	0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42,
+	0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x67,
+	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61,
+	0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67,
+	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42,
+	0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22,
+	0xdb, 0x05, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+	0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b,
+	0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f,
+	0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52,
+	0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+	0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x6f, 0x62,
+	0x6a, 0x65, 0x63, 0x74, 0x12, 0x23, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0a, 0x67,
+	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x0d, 0x72, 0x65, 0x73,
+	0x74, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09,
+	0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x6f,
+	0x6b, 0x65, 0x6e, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03,
+	0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x67,
+	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61,
+	0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x14, 0x69, 0x66, 0x47,
+	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63,
+	0x68, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67,
 	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67,
+	0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67,
 	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01,
 	0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65,
 	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68,
-	0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61,
+	0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61,
 	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74,
-	0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6e,
-	0x6f, 0x6e, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d,
-	0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4e, 0x6f, 0x6e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2a, 0x0a,
-	0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28,
-	0x09, 0x42, 0x0b, 0xe0, 0x41, 0x01, 0xe2, 0x8c, 0xcf, 0xd7, 0x08, 0x02, 0x08, 0x01, 0x52, 0x09,
-	0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66,
+	0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x0f, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x6f,
+	0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x48, 0x04,
+	0x52, 0x0d, 0x63, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x63, 0x6c, 0x88,
+	0x01, 0x01, 0x12, 0x75, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a,
+	0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61,
+	0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+	0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19,
+	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66,
+	0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63,
+	0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a,
+	0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66,
 	0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
-	0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74,
-	0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f,
-	0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xf0, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61,
-	0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x09, 0x42, 0x2c, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x26, 0x12, 0x24, 0x73, 0x74, 0x6f,
-	0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e,
-	0x63, 0x6f, 0x6d, 0x2f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65,
-	0x72, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x70, 0x61, 0x67,
-	0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, 0x41,
-	0x01, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0a, 0x70,
-	0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42,
-	0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12,
-	0x1b, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42,
-	0x03, 0xe0, 0x41, 0x01, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x2a, 0x0a, 0x0a,
-	0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
-	0x42, 0x0b, 0xe0, 0x41, 0x01, 0xe2, 0x8c, 0xcf, 0xd7, 0x08, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x97, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73,
-	0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0f, 0x6d, 0x61, 0x6e, 0x61, 0x67,
-	0x65, 0x64, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
-	0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,
-	0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x61, 0x6e,
-	0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x0e, 0x6d, 0x61, 0x6e, 0x61,
-	0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65,
-	0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b,
-	0x65, 0x6e, 0x32, 0xcd, 0x0f, 0x0a, 0x0e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6f,
-	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x9a, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
-	0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
-	0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
-	0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
-	0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
-	0x76, 0x32, 0x2e, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x22, 0x37, 0xda, 0x41, 0x17, 0x70, 0x61,
-	0x72, 0x65, 0x6e, 0x74, 0x2c, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x2c, 0x66, 0x6f, 0x6c, 0x64,
-	0x65, 0x72, 0x5f, 0x69, 0x64, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x70,
-	0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a,
-	0x2a, 0x7d, 0x12, 0x8f, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6f, 0x6c,
-	0x64, 0x65, 0x72, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f,
+	0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x63, 0x6f,
+	0x70, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x6c, 0x22, 0x96, 0x06,
+	0x0a, 0x10, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72,
+	0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63,
+	0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65,
+	0x74, 0x12, 0x1b, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1e,
+	0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26,
+	0x0a, 0x0c, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x0b,
+	0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x6f, 0x66, 0x74, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x64, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e,
+	0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x17, 0x69,
+	0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74,
+	0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x14,
+	0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d,
+	0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65,
+	0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74,
+	0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65,
+	0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63,
+	0x68, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67,
+	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61,
+	0x74, 0x63, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x04, 0x52, 0x18, 0x69, 0x66, 0x4d,
+	0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74,
+	0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x75, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d,
+	0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f,
+	0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61,
+	0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65,
+	0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12,
+	0x3c, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x0a, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x48, 0x05,
+	0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a,
+	0x0d, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x0c,
+	0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x6f,
+	0x72, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x73, 0x6f, 0x66, 0x74,
+	0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f,
+	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68,
+	0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18,
+	0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f,
+	0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e,
+	0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x61,
+	0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x22, 0xe3, 0x04, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4f,
+	0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a,
+	0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0,
+	0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75,
+	0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09,
+	0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67,
+	0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70,
+	0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x69,
+	0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x6c,
+	0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x1a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64,
+	0x65, 0x5f, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x6c, 0x69, 0x6d,
+	0x69, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x69, 0x6e, 0x63, 0x6c,
+	0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x69, 0x6d,
+	0x69, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x06,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x1a, 0x0a, 0x08,
+	0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08,
+	0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3c, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64,
+	0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69,
+	0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4d,
+	0x61, 0x73, 0x6b, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x13, 0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f,
+	0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0a, 0x20,
+	0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x12, 0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f,
+	0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x30, 0x0a, 0x11,
+	0x6c, 0x65, 0x78, 0x69, 0x63, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x5f, 0x65, 0x6e,
+	0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x10, 0x6c, 0x65,
+	0x78, 0x69, 0x63, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x45, 0x6e, 0x64, 0x12, 0x26,
+	0x0a, 0x0c, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x0c,
+	0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x73, 0x6f, 0x66, 0x74, 0x44,
+	0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64,
+	0x65, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x5f, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x65,
+	0x66, 0x69, 0x78, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x01,
+	0x52, 0x18, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73,
+	0x41, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0a, 0x6d, 0x61,
+	0x74, 0x63, 0x68, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03,
+	0xe0, 0x41, 0x01, 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x47, 0x6c, 0x6f, 0x62, 0x42, 0x0c,
+	0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x22, 0xcd, 0x0e, 0x0a,
+	0x14, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x10, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x42,
+	0x06, 0xe0, 0x41, 0x02, 0xe0, 0x41, 0x05, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x57, 0x0a, 0x12, 0x64, 0x65, 0x73, 0x74,
+	0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x19,
+	0x20, 0x01, 0x28, 0x09, 0x42, 0x28, 0xe0, 0x41, 0x02, 0xe0, 0x41, 0x05, 0xfa, 0x41, 0x1f, 0x0a,
+	0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61,
+	0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x11,
+	0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x63, 0x6b, 0x65,
+	0x74, 0x12, 0x56, 0x0a, 0x13, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x5f, 0x6b, 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x26,
+	0xfa, 0x41, 0x23, 0x0a, 0x21, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x6b, 0x6d, 0x73, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79,
+	0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x52, 0x11, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x4b, 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x43, 0x0a, 0x0b, 0x64, 0x65, 0x73,
+	0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+	0x74, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a,
+	0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73,
+	0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69,
+	0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x0c, 0x73, 0x6f,
+	0x75, 0x72, 0x63, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x0d, 0x73, 0x6f,
+	0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62,
+	0x6a, 0x65, 0x63, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67,
+	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, 0x6f, 0x6b,
+	0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74,
+	0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x3c, 0x0a, 0x1a, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64,
+	0x5f, 0x61, 0x63, 0x6c, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x64, 0x65, 0x73, 0x74,
+	0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65,
+	0x64, 0x41, 0x63, 0x6c, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28,
+	0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x17, 0x69, 0x66, 0x5f,
+	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d,
+	0x61, 0x74, 0x63, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x14, 0x69, 0x66,
+	0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74,
+	0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61,
+	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68,
+	0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61,
+	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88,
+	0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e,
+	0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63,
+	0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74,
+	0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61,
+	0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x40, 0x0a, 0x1a, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75,
+	0x72, 0x63, 0x65, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d,
+	0x61, 0x74, 0x63, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x48, 0x04, 0x52, 0x17, 0x69, 0x66,
+	0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x47, 0x0a, 0x1e, 0x69, 0x66, 0x5f, 0x73,
+	0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03,
+	0x48, 0x05, 0x52, 0x1a, 0x69, 0x66, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x65, 0x6e, 0x65,
+	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01,
+	0x01, 0x12, 0x48, 0x0a, 0x1e, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d,
+	0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61,
+	0x74, 0x63, 0x68, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x48, 0x06, 0x52, 0x1b, 0x69, 0x66, 0x53,
+	0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x4f, 0x0a, 0x22, 0x69,
+	0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e,
+	0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63,
+	0x68, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x48, 0x07, 0x52, 0x1e, 0x69, 0x66, 0x53, 0x6f, 0x75,
+	0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3e, 0x0a, 0x1c,
+	0x6d, 0x61, 0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74,
+	0x74, 0x65, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x0f, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x18, 0x6d, 0x61, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x65, 0x77, 0x72,
+	0x69, 0x74, 0x74, 0x65, 0x6e, 0x50, 0x65, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x47, 0x0a, 0x20,
+	0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72,
+	0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d,
+	0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1d, 0x63, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72,
+	0x63, 0x65, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6c, 0x67, 0x6f,
+	0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x46, 0x0a, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x6f,
+	0x75, 0x72, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+	0x6b, 0x65, 0x79, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0c, 0x52,
+	0x1c, 0x63, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x6e, 0x63, 0x72, 0x79,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x53, 0x0a,
+	0x27, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x63,
+	0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x32,
+	0x35, 0x36, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x22,
+	0x63, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x42, 0x79, 0x74,
+	0x65, 0x73, 0x12, 0x75, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a,
+	0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61,
+	0x6d, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+	0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19,
+	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x55, 0x0a, 0x10, 0x6f, 0x62, 0x6a,
+	0x65, 0x63, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x18, 0x1d, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f,
 	0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e,
-	0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x37, 0xda, 0x41, 0x04,
-	0x6e, 0x61, 0x6d, 0x65, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x0a, 0x04, 0x6e, 0x61,
-	0x6d, 0x65, 0x12, 0x20, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a,
-	0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a,
-	0x7d, 0x2f, 0x2a, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x6c, 0x64,
-	0x65, 0x72, 0x12, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72,
-	0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x47,
-	0x65, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
-	0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
-	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x46, 0x6f, 0x6c, 0x64,
-	0x65, 0x72, 0x22, 0x37, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x8a, 0xd3, 0xe4, 0x93, 0x02,
+	0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x52,
+	0x0f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73,
+	0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f,
+	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d,
+	0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61,
+	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68,
+	0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65,
+	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68,
+	0x42, 0x1d, 0x0a, 0x1b, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67,
+	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42,
+	0x21, 0x0a, 0x1f, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x65,
+	0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74,
+	0x63, 0x68, 0x42, 0x21, 0x0a, 0x1f, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+	0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+	0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x25, 0x0a, 0x23, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75,
+	0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xde, 0x01, 0x0a,
+	0x0f, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x12, 0x32, 0x0a, 0x15, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f,
+	0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x65, 0x77, 0x72, 0x69,
+	0x74, 0x74, 0x65, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73,
+	0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+	0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x77,
+	0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0c, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x3d,
+	0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,
+	0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a,
+	0x65, 0x63, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xec, 0x07,
+	0x0a, 0x11, 0x4d, 0x6f, 0x76, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f,
+	0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e,
+	0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b,
+	0x65, 0x74, 0x12, 0x28, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x62, 0x6a,
+	0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0c,
+	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x32, 0x0a, 0x12,
+	0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65,
+	0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x11, 0x64,
+	0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+	0x12, 0x45, 0x0a, 0x1a, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x65,
+	0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x48, 0x00, 0x52, 0x17, 0x69, 0x66, 0x53,
+	0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d,
+	0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x4c, 0x0a, 0x1e, 0x69, 0x66, 0x5f, 0x73, 0x6f,
+	0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+	0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x42,
+	0x03, 0xe0, 0x41, 0x01, 0x48, 0x01, 0x52, 0x1a, 0x69, 0x66, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65,
+	0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74,
+	0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x4d, 0x0a, 0x1e, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72,
+	0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0,
+	0x41, 0x01, 0x48, 0x02, 0x52, 0x1b, 0x69, 0x66, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65,
+	0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63,
+	0x68, 0x88, 0x01, 0x01, 0x12, 0x54, 0x0a, 0x22, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63,
+	0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03,
+	0x42, 0x03, 0xe0, 0x41, 0x01, 0x48, 0x03, 0x52, 0x1e, 0x69, 0x66, 0x53, 0x6f, 0x75, 0x72, 0x63,
+	0x65, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e,
+	0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x13, 0x69, 0x66,
+	0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63,
+	0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x48, 0x04, 0x52, 0x11,
+	0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63,
+	0x68, 0x88, 0x01, 0x01, 0x12, 0x3f, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18,
+	0x09, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x48, 0x05, 0x52, 0x14, 0x69, 0x66,
+	0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74,
+	0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x40, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61,
+	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68,
+	0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x48, 0x06, 0x52, 0x15, 0x69,
+	0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d,
+	0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x47, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65,
+	0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74,
+	0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41,
+	0x01, 0x48, 0x07, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01,
+	0x42, 0x1d, 0x0a, 0x1b, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67,
+	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42,
+	0x21, 0x0a, 0x1f, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x65,
+	0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74,
+	0x63, 0x68, 0x42, 0x21, 0x0a, 0x1f, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+	0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+	0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x25, 0x0a, 0x23, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x6f, 0x75,
+	0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x16, 0x0a, 0x14,
+	0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d,
+	0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65,
+	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68,
+	0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65,
+	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c,
+	0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x97, 0x05, 0x0a,
+	0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74,
+	0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32,
+	0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x6f, 0x62,
+	0x6a, 0x65, 0x63, 0x74, 0x12, 0x33, 0x0a, 0x13, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x03, 0x48, 0x00, 0x52, 0x11, 0x69, 0x66, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x17, 0x69, 0x66, 0x5f,
+	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d,
+	0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x14, 0x69, 0x66,
+	0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74,
+	0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61,
+	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61,
+	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88,
+	0x01, 0x01, 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e,
+	0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63,
+	0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74,
+	0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61,
+	0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66,
+	0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d,
+	0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x12, 0x40, 0x0a,
+	0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x07, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x42, 0x03,
+	0xe0, 0x41, 0x02, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12,
+	0x75, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+	0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18,
+	0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73,
+	0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76,
+	0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6d,
+	0x6d, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65,
+	0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a,
+	0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69,
+	0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65,
+	0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74,
+	0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xbf, 0x01, 0x0a, 0x19, 0x43, 0x6f, 0x6d, 0x6d, 0x6f,
+	0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61,
+	0x72, 0x61, 0x6d, 0x73, 0x12, 0x31, 0x0a, 0x14, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x13, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6c,
+	0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x30, 0x0a, 0x14, 0x65, 0x6e, 0x63, 0x72, 0x79,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18,
+	0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x4b, 0x65, 0x79, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x1b, 0x65, 0x6e, 0x63,
+	0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x32,
+	0x35, 0x36, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x18,
+	0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x53, 0x68, 0x61,
+	0x32, 0x35, 0x36, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xca, 0x05, 0x0a, 0x10, 0x53, 0x65, 0x72,
+	0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x22, 0xb5, 0x05,
+	0x0a, 0x06, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x56, 0x41, 0x4c, 0x55,
+	0x45, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00,
+	0x12, 0x1b, 0x0a, 0x14, 0x4d, 0x41, 0x58, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x43, 0x48, 0x55,
+	0x4e, 0x4b, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0x80, 0x80, 0x01, 0x12, 0x1c, 0x0a,
+	0x15, 0x4d, 0x41, 0x58, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x55, 0x4e, 0x4b,
+	0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0x80, 0x80, 0x01, 0x12, 0x19, 0x0a, 0x12, 0x4d,
+	0x41, 0x58, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x4d,
+	0x42, 0x10, 0x80, 0x80, 0xc0, 0x02, 0x12, 0x29, 0x0a, 0x24, 0x4d, 0x41, 0x58, 0x5f, 0x43, 0x55,
+	0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x46, 0x49,
+	0x45, 0x4c, 0x44, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80,
+	0x08, 0x12, 0x2a, 0x0a, 0x25, 0x4d, 0x41, 0x58, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f,
+	0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x5f, 0x56,
+	0x41, 0x4c, 0x55, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0x20, 0x12, 0x29, 0x0a,
+	0x24, 0x4d, 0x41, 0x58, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x4d, 0x45, 0x54, 0x41,
+	0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x4f, 0x54, 0x41, 0x4c, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f,
+	0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80, 0x40, 0x12, 0x2a, 0x0a, 0x24, 0x4d, 0x41, 0x58, 0x5f,
+	0x42, 0x55, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x5f,
+	0x54, 0x4f, 0x54, 0x41, 0x4c, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53,
+	0x10, 0x80, 0xa0, 0x01, 0x12, 0x27, 0x0a, 0x23, 0x4d, 0x41, 0x58, 0x5f, 0x4e, 0x4f, 0x54, 0x49,
+	0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x53,
+	0x5f, 0x50, 0x45, 0x52, 0x5f, 0x42, 0x55, 0x43, 0x4b, 0x45, 0x54, 0x10, 0x64, 0x12, 0x22, 0x0a,
+	0x1e, 0x4d, 0x41, 0x58, 0x5f, 0x4c, 0x49, 0x46, 0x45, 0x43, 0x59, 0x43, 0x4c, 0x45, 0x5f, 0x52,
+	0x55, 0x4c, 0x45, 0x53, 0x5f, 0x50, 0x45, 0x52, 0x5f, 0x42, 0x55, 0x43, 0x4b, 0x45, 0x54, 0x10,
+	0x64, 0x12, 0x26, 0x0a, 0x22, 0x4d, 0x41, 0x58, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43,
+	0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x41, 0x54, 0x54,
+	0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x53, 0x10, 0x05, 0x12, 0x31, 0x0a, 0x2c, 0x4d, 0x41, 0x58,
+	0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x55,
+	0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x4b,
+	0x45, 0x59, 0x5f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x10, 0x80, 0x02, 0x12, 0x33, 0x0a, 0x2e,
+	0x4d, 0x41, 0x58, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e,
+	0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54,
+	0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x10, 0x80,
+	0x08, 0x12, 0x1c, 0x0a, 0x18, 0x4d, 0x41, 0x58, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x53, 0x5f,
+	0x45, 0x4e, 0x54, 0x52, 0x49, 0x45, 0x53, 0x5f, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x40, 0x12,
+	0x1f, 0x0a, 0x1b, 0x4d, 0x41, 0x58, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x53, 0x5f, 0x4b, 0x45,
+	0x59, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x10, 0x3f,
+	0x12, 0x1f, 0x0a, 0x1a, 0x4d, 0x41, 0x58, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x53, 0x5f, 0x4b,
+	0x45, 0x59, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x80,
+	0x01, 0x12, 0x2e, 0x0a, 0x29, 0x4d, 0x41, 0x58, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f,
+	0x49, 0x44, 0x53, 0x5f, 0x50, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x4f,
+	0x42, 0x4a, 0x45, 0x43, 0x54, 0x53, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0xe8,
+	0x07, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x50, 0x4c, 0x49, 0x54, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e,
+	0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x44, 0x41, 0x59, 0x53, 0x10,
+	0x0e, 0x1a, 0x02, 0x10, 0x01, 0x22, 0xaf, 0x25, 0x0a, 0x06, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74,
+	0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03,
+	0xe0, 0x41, 0x05, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x09, 0x62, 0x75, 0x63,
+	0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41,
+	0x03, 0x52, 0x08, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x65,
+	0x74, 0x61, 0x67, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12,
+	0x4d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+	0x42, 0x33, 0xe0, 0x41, 0x05, 0xfa, 0x41, 0x2d, 0x0a, 0x2b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x72,
+	0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72,
+	0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2b,
+	0x0a, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0e, 0x6d, 0x65, 0x74,
+	0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x08, 0x6c,
+	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0,
+	0x41, 0x05, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x0d,
+	0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20,
+	0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,
+	0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73,
+	0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x72,
+	0x70, 0x6f, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x70, 0x6f, 0x12, 0x40, 0x0a,
+	0x03, 0x61, 0x63, 0x6c, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
+	0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x63, 0x63,
+	0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12,
+	0x5c, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+	0x74, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e,
+	0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63,
+	0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x10, 0x64, 0x65, 0x66,
+	0x61, 0x75, 0x6c, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, 0x6c, 0x12, 0x49, 0x0a,
+	0x09, 0x6c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,
+	0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63,
+	0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x09, 0x6c,
+	0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61,
+	0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a,
+	0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x63, 0x6f,
+	0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x43, 0x6f, 0x72, 0x73,
+	0x52, 0x04, 0x63, 0x6f, 0x72, 0x73, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
+	0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69,
+	0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70,
+	0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x64, 0x65, 0x66, 0x61,
+	0x75, 0x6c, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x64, 0x5f,
+	0x68, 0x6f, 0x6c, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x64, 0x65, 0x66, 0x61,
+	0x75, 0x6c, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x73, 0x65, 0x64, 0x48, 0x6f, 0x6c,
+	0x64, 0x12, 0x45, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61,
+	0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75,
+	0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
+	0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x43, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x73,
+	0x69, 0x74, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72,
+	0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x57, 0x65, 0x62,
+	0x73, 0x69, 0x74, 0x65, 0x52, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x12, 0x4c, 0x0a,
+	0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61,
+	0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75,
+	0x63, 0x6b, 0x65, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x52,
+	0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x43, 0x0a, 0x07, 0x6c,
+	0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f,
+	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e,
+	0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67,
+	0x12, 0x3b, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
+	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x77, 0x6e, 0x65,
+	0x72, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x4c, 0x0a,
+	0x0a, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61,
+	0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75,
+	0x63, 0x6b, 0x65, 0x74, 0x2e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+	0x0a, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x07, 0x62,
+	0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f,
+	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e,
+	0x42, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67,
+	0x12, 0x5c, 0x0a, 0x10, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f,
+	0x6c, 0x69, 0x63, 0x79, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
+	0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x52, 0x65,
+	0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0f, 0x72,
+	0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x4a,
+	0x0a, 0x0a, 0x69, 0x61, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x17, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72,
+	0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42,
+	0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x49, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52,
+	0x09, 0x69, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x61,
+	0x74, 0x69, 0x73, 0x66, 0x69, 0x65, 0x73, 0x5f, 0x70, 0x7a, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28,
+	0x08, 0x52, 0x0c, 0x73, 0x61, 0x74, 0x69, 0x73, 0x66, 0x69, 0x65, 0x73, 0x50, 0x7a, 0x73, 0x12,
+	0x6f, 0x0a, 0x17, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d,
+	0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,
+	0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63,
+	0x6b, 0x65, 0x74, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d,
+	0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x15, 0x63, 0x75, 0x73, 0x74, 0x6f,
+	0x6d, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x12, 0x49, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x1c, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f,
+	0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e,
+	0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x63, 0x6c, 0x61, 0x73, 0x73,
+	0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x73, 0x0a, 0x16, 0x68,
+	0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
+	0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e,
+	0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x48,
+	0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73,
+	0x70, 0x61, 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x15, 0x68, 0x69, 0x65, 0x72, 0x61,
+	0x72, 0x63, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
+	0x12, 0x65, 0x0a, 0x12, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f,
+	0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f,
+	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e,
+	0x53, 0x6f, 0x66, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+	0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x10, 0x73, 0x6f, 0x66, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74,
+	0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x30, 0x0a, 0x07, 0x42, 0x69, 0x6c, 0x6c, 0x69,
+	0x6e, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x72, 0x5f,
+	0x70, 0x61, 0x79, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x79, 0x73, 0x1a, 0x87, 0x01, 0x0a, 0x04, 0x43, 0x6f,
+	0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03,
+	0x28, 0x09, 0x52, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65,
+	0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68,
+	0x6f, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68,
+	0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x6d,
+	0x61, 0x78, 0x5f, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x41, 0x67, 0x65, 0x53, 0x65, 0x63, 0x6f,
+	0x6e, 0x64, 0x73, 0x1a, 0x5c, 0x0a, 0x0a, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x12, 0x4e, 0x0a, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6b, 0x6d, 0x73,
+	0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x26, 0xfa, 0x41, 0x23, 0x0a,
+	0x21, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x6b, 0x6d, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b,
+	0x65, 0x79, 0x52, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4b, 0x6d, 0x73, 0x4b, 0x65,
+	0x79, 0x1a, 0xba, 0x02, 0x0a, 0x09, 0x49, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12,
+	0x83, 0x01, 0x0a, 0x1b, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x62, 0x75, 0x63, 0x6b,
+	0x65, 0x74, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73,
+	0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76,
+	0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x49, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66,
+	0x69, 0x67, 0x2e, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74,
+	0x4c, 0x65, 0x76, 0x65, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x18, 0x75, 0x6e, 0x69,
+	0x66, 0x6f, 0x72, 0x6d, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x41,
+	0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f,
+	0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f,
+	0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x41,
+	0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x1a,
+	0x6d, 0x0a, 0x18, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74,
+	0x4c, 0x65, 0x76, 0x65, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65,
+	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e,
+	0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x69,
+	0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73,
+	0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0xf3,
+	0x07, 0x0a, 0x09, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x44, 0x0a, 0x04,
+	0x72, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
+	0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x69,
+	0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x75,
+	0x6c, 0x65, 0x1a, 0x9f, 0x07, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x61,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e,
+	0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4c,
+	0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x2e, 0x41, 0x63,
+	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x58, 0x0a, 0x09,
+	0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x3a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
+	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b,
+	0x65, 0x74, 0x2e, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x2e, 0x52, 0x75, 0x6c,
+	0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x63, 0x6f, 0x6e,
+	0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x41, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
+	0x74, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f,
+	0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f,
+	0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x1a, 0xa8, 0x05, 0x0a, 0x09, 0x43, 0x6f,
+	0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x08, 0x61, 0x67, 0x65, 0x5f, 0x64,
+	0x61, 0x79, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x07, 0x61, 0x67, 0x65,
+	0x44, 0x61, 0x79, 0x73, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x5f, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x11, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x44, 0x61,
+	0x74, 0x65, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x65, 0x66, 0x6f, 0x72,
+	0x65, 0x12, 0x1c, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x6c, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x08, 0x48, 0x01, 0x52, 0x06, 0x69, 0x73, 0x4c, 0x69, 0x76, 0x65, 0x88, 0x01, 0x01, 0x12,
+	0x31, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x5f, 0x6e, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72,
+	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x48, 0x02, 0x52, 0x10, 0x6e,
+	0x75, 0x6d, 0x4e, 0x65, 0x77, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x88,
+	0x01, 0x01, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x5f, 0x73, 0x74,
+	0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28,
+	0x09, 0x52, 0x13, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67,
+	0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x16, 0x64, 0x61, 0x79, 0x73, 0x5f, 0x73,
+	0x69, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65,
+	0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x48, 0x03, 0x52, 0x13, 0x64, 0x61, 0x79, 0x73, 0x53, 0x69,
+	0x6e, 0x63, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01,
+	0x12, 0x3f, 0x0a, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f,
+	0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x52,
+	0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x65, 0x66, 0x6f, 0x72,
+	0x65, 0x12, 0x40, 0x0a, 0x1a, 0x64, 0x61, 0x79, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f,
+	0x6e, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18,
+	0x09, 0x20, 0x01, 0x28, 0x05, 0x48, 0x04, 0x52, 0x17, 0x64, 0x61, 0x79, 0x73, 0x53, 0x69, 0x6e,
+	0x63, 0x65, 0x4e, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65,
+	0x88, 0x01, 0x01, 0x12, 0x47, 0x0a, 0x16, 0x6e, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e,
+	0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x0a, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70,
+	0x65, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x52, 0x14, 0x6e, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65,
+	0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x25, 0x0a, 0x0e,
+	0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x0b,
+	0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x50, 0x72, 0x65,
+	0x66, 0x69, 0x78, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x5f, 0x73,
+	0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x61, 0x74,
+	0x63, 0x68, 0x65, 0x73, 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x61,
+	0x67, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x69, 0x73, 0x5f, 0x6c,
+	0x69, 0x76, 0x65, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x6e, 0x65, 0x77, 0x65,
+	0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x19, 0x0a, 0x17, 0x5f, 0x64,
+	0x61, 0x79, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d,
+	0x5f, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x1d, 0x0a, 0x1b, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x5f, 0x73,
+	0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f,
+	0x74, 0x69, 0x6d, 0x65, 0x1a, 0x54, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x12,
+	0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x2a,
+	0x0a, 0x11, 0x6c, 0x6f, 0x67, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x70, 0x72, 0x65,
+	0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f, 0x67, 0x4f, 0x62,
+	0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x1a, 0xbb, 0x01, 0x0a, 0x0f, 0x52,
+	0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x41,
+	0x0a, 0x0e, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
+	0x6d, 0x70, 0x52, 0x0d, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x69, 0x6d,
+	0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x48,
+	0x0a, 0x12, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 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, 0x11, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e,
+	0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xd3, 0x01, 0x0a, 0x10, 0x53, 0x6f, 0x66,
+	0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x4d, 0x0a,
+	0x12, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x18, 0x01, 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, 0x48, 0x00, 0x52, 0x11, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f,
+	0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x46, 0x0a, 0x0e,
+	0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
+	0x48, 0x01, 0x52, 0x0d, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x69, 0x6d,
+	0x65, 0x88, 0x01, 0x01, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69,
+	0x6f, 0x6e, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x11, 0x0a, 0x0f, 0x5f,
+	0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x1a, 0x26,
+	0x0a, 0x0a, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07,
+	0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65,
+	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x1a, 0x59, 0x0a, 0x07, 0x57, 0x65, 0x62, 0x73, 0x69, 0x74,
+	0x65, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73,
+	0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6d, 0x61, 0x69,
+	0x6e, 0x50, 0x61, 0x67, 0x65, 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, 0x12, 0x24, 0x0a, 0x0e, 0x6e,
+	0x6f, 0x74, 0x5f, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x50, 0x61, 0x67,
+	0x65, 0x1a, 0x3e, 0x0a, 0x15, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x63, 0x65,
+	0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61,
+	0x74, 0x61, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03,
+	0x28, 0x09, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x73, 0x1a, 0xd6, 0x02, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x6f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12,
+	0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x40, 0x0a, 0x0b, 0x74, 0x6f, 0x67,
+	0x67, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52,
+	0x0a, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x16, 0x74,
+	0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f,
+	0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x14, 0x74,
+	0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c,
+	0x61, 0x73, 0x73, 0x88, 0x01, 0x01, 0x12, 0x70, 0x0a, 0x22, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e,
+	0x61, 0x6c, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73,
+	0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 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, 0x42, 0x03,
+	0xe0, 0x41, 0x03, 0x48, 0x01, 0x52, 0x1e, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x53,
+	0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74,
+	0x65, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x42, 0x19, 0x0a, 0x17, 0x5f, 0x74, 0x65, 0x72,
+	0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c,
+	0x61, 0x73, 0x73, 0x42, 0x25, 0x0a, 0x23, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c,
+	0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x75,
+	0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x1a, 0x36, 0x0a, 0x15, 0x48, 0x69,
+	0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70,
+	0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c,
+	0x65, 0x64, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72,
+	0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
+	0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x58, 0xea,
+	0x41, 0x55, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65,
+	0x74, 0x12, 0x23, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f,
+	0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x62,
+	0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x2a, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x32,
+	0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x9f, 0x02, 0x0a, 0x13, 0x42, 0x75, 0x63, 0x6b,
+	0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12,
+	0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72,
+	0x6f, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x0a, 0x65,
+	0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x61, 0x6c, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42,
+	0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x41, 0x6c, 0x74, 0x12,
+	0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04,
+	0x65, 0x74, 0x61, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67,
+	0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e,
+	0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x49,
+	0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x07,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74,
+	0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32,
+	0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x0b, 0x70, 0x72,
+	0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x22, 0x5a, 0x0a, 0x0f, 0x43, 0x68, 0x65,
+	0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x07,
+	0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x05, 0xe0,
+	0x41, 0x01, 0x08, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a,
+	0x06, 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x48, 0x00, 0x52,
+	0x06, 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x63,
+	0x72, 0x63, 0x33, 0x32, 0x63, 0x22, 0x54, 0x0a, 0x0f, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43,
+	0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x06, 0x63, 0x72, 0x63, 0x33,
+	0x32, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x48, 0x00, 0x52, 0x06, 0x63, 0x72, 0x63, 0x33,
+	0x32, 0x63, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x64, 0x35, 0x5f, 0x68, 0x61, 0x73,
+	0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x64, 0x35, 0x48, 0x61, 0x73, 0x68,
+	0x42, 0x09, 0x0a, 0x07, 0x5f, 0x63, 0x72, 0x63, 0x33, 0x32, 0x63, 0x22, 0x71, 0x0a, 0x12, 0x43,
+	0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x12, 0x31, 0x0a, 0x14, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+	0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x13, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6c, 0x67, 0x6f, 0x72,
+	0x69, 0x74, 0x68, 0x6d, 0x12, 0x28, 0x0a, 0x10, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x32,
+	0x35, 0x36, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e,
+	0x6b, 0x65, 0x79, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xe5,
+	0x0e, 0x0a, 0x06, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
+	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x04, 0x6e, 0x61,
+	0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x05, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72,
+	0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63,
+	0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65,
+	0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x23, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x0a,
+	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x0d, 0x72, 0x65,
+	0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x23, 0x20, 0x01, 0x28,
+	0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72,
+	0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x0e, 0x6d, 0x65, 0x74,
+	0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28,
+	0x03, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65,
+	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,
+	0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73,
+	0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x17, 0x0a, 0x04, 0x73,
+	0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x04,
+	0x73, 0x69, 0x7a, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f,
+	0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f,
+	0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12,
+	0x2f, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6f,
+	0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f,
+	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+	0x12, 0x23, 0x0a, 0x0d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f,
+	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x40, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x0a, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72,
+	0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4f,
+	0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72,
+	0x6f, 0x6c, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+	0x6e, 0x74, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61,
+	0x67, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d,
+	0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
+	0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65,
+	0x54, 0x69, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x0d, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65,
+	0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69,
+	0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0c, 0x66, 0x69,
+	0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f,
+	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x40, 0x0a,
+	0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03,
+	0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12,
+	0x2c, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0e, 0x63,
+	0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4d, 0x0a,
+	0x09, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,
+	0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a,
+	0x65, 0x63, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x42, 0x03, 0xe0, 0x41,
+	0x03, 0x52, 0x09, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x12, 0x40, 0x0a, 0x0b,
+	0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0,
+	0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3f,
+	0x0a, 0x07, 0x6b, 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x42,
+	0x26, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x6b, 0x6d, 0x73, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72,
+	0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x52, 0x06, 0x6b, 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x12,
+	0x5a, 0x0a, 0x19, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,
+	0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03,
+	0xe0, 0x41, 0x03, 0x52, 0x16, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61,
+	0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74,
+	0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x14, 0x20,
+	0x01, 0x28, 0x08, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x48, 0x6f,
+	0x6c, 0x64, 0x12, 0x4e, 0x0a, 0x15, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+	0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x13, 0x72,
+	0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69,
+	0x6d, 0x65, 0x12, 0x4b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x16,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74,
+	0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32,
+	0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+	0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12,
+	0x2d, 0x0a, 0x10, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x68,
+	0x6f, 0x6c, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x0e, 0x65, 0x76, 0x65,
+	0x6e, 0x74, 0x42, 0x61, 0x73, 0x65, 0x64, 0x48, 0x6f, 0x6c, 0x64, 0x88, 0x01, 0x01, 0x12, 0x3b,
+	0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x42,
+	0x03, 0xe0, 0x41, 0x03, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x5e, 0x0a, 0x13, 0x63,
+	0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x45, 0x6e, 0x63,
+	0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65,
+	0x72, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x0b, 0x63,
+	0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x75,
+	0x73, 0x74, 0x6f, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4e, 0x0a, 0x10, 0x73, 0x6f, 0x66, 0x74,
+	0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x1c, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03,
+	0xe0, 0x41, 0x03, 0x48, 0x02, 0x52, 0x0e, 0x73, 0x6f, 0x66, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74,
+	0x65, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x4e, 0x0a, 0x10, 0x68, 0x61, 0x72, 0x64,
+	0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x1d, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03,
+	0xe0, 0x41, 0x03, 0x48, 0x03, 0x52, 0x0e, 0x68, 0x61, 0x72, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74,
+	0x65, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61,
+	0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
+	0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72,
+	0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x65, 0x76, 0x65, 0x6e,
+	0x74, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x42, 0x13, 0x0a, 0x11,
+	0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d,
+	0x65, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74,
+	0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x9f, 0x02, 0x0a, 0x13, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+	0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x12,
+	0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f,
+	0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
+	0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x0a, 0x65, 0x6e,
+	0x74, 0x69, 0x74, 0x79, 0x5f, 0x61, 0x6c, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03,
+	0xe0, 0x41, 0x03, 0x52, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x41, 0x6c, 0x74, 0x12, 0x1b,
+	0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x65,
+	0x74, 0x61, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12,
+	0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+	0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18,
+	0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x49, 0x0a,
+	0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x07, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f,
+	0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e,
+	0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x0b, 0x70, 0x72, 0x6f,
+	0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x22, 0x96, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73,
+	0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x12, 0x3b, 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61,
+	0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62,
+	0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x1a, 0x0a,
+	0x08, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52,
+	0x08, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78,
+	0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65,
+	0x6e, 0x22, 0x48, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x61, 0x6d,
+	0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62,
+	0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63,
+	0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x22, 0x3c, 0x0a, 0x05, 0x4f,
+	0x77, 0x6e, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x09,
+	0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x32, 0xf7, 0x24, 0x0a, 0x0e, 0x53, 0x74,
+	0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x9a, 0x01, 0x0a,
+	0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x2e, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+	0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72,
+	0x22, 0x37, 0xda, 0x41, 0x17, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x2c, 0x66, 0x6f, 0x6c, 0x64,
+	0x65, 0x72, 0x2c, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x8a, 0xd3, 0xe4, 0x93,
+	0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x0b, 0x7b, 0x62,
+	0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x8f, 0x01, 0x0a, 0x0c, 0x44, 0x65,
+	0x6c, 0x65, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
+	0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6f, 0x6c,
+	0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70,
+	0x74, 0x79, 0x22, 0x37, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x8a, 0xd3, 0xe4, 0x93, 0x02,
 	0x2a, 0x12, 0x28, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x7b, 0x62, 0x75, 0x63, 0x6b,
 	0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75,
-	0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x2a, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x0b,
-	0x4c, 0x69, 0x73, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x12, 0x2d, 0x2e, 0x67, 0x6f,
-	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e,
-	0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6f, 0x6c, 0x64,
-	0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x6f,
-	0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
-	0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65,
-	0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0xda, 0x41, 0x06, 0x70,
-	0x61, 0x72, 0x65, 0x6e, 0x74, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x70,
-	0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a,
-	0x2a, 0x7d, 0x12, 0xcd, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x6f, 0x6c,
-	0x64, 0x65, 0x72, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f,
-	0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e,
-	0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e,
-	0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69,
-	0x6f, 0x6e, 0x22, 0x6e, 0xca, 0x41, 0x1e, 0x0a, 0x06, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12,
-	0x14, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74,
-	0x61, 0x64, 0x61, 0x74, 0x61, 0xda, 0x41, 0x1a, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x64, 0x65, 0x73,
-	0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f,
-	0x69, 0x64, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x2a, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x09,
+	0x47, 0x65, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72,
+	0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
+	0x76, 0x32, 0x2e, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x22, 0x37, 0xda, 0x41, 0x04, 0x6e, 0x61,
+	0x6d, 0x65, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
 	0x12, 0x20, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63,
 	0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f,
-	0x2a, 0x2a, 0x12, 0xa9, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67,
-	0x65, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
-	0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
-	0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x61,
-	0x79, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x6f,
-	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e,
-	0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c,
-	0x61, 0x79, 0x6f, 0x75, 0x74, 0x22, 0x37, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x8a, 0xd3,
-	0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x7b, 0x62,
-	0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a,
-	0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x2a, 0x2a, 0x12, 0xbf,
-	0x01, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64,
-	0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
-	0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
-	0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64,
-	0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e,
+	0x2a, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65,
+	0x72, 0x73, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72,
+	0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4c,
+	0x69, 0x73, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61,
+	0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69,
+	0x73, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x22, 0x26, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x8a, 0xd3, 0xe4, 0x93,
+	0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x0b, 0x7b, 0x62,
+	0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xcd, 0x01, 0x0a, 0x0c, 0x52, 0x65,
+	0x6e, 0x61, 0x6d, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
+	0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x6f, 0x6c,
+	0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e,
+	0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6e, 0xca, 0x41, 0x1e, 0x0a, 0x06,
+	0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x14, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x6f,
+	0x6c, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xda, 0x41, 0x1a, 0x6e,
+	0x61, 0x6d, 0x65, 0x2c, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+	0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12,
+	0x28, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
+	0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b,
+	0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x2a, 0x2a, 0x12, 0xa9, 0x01, 0x0a, 0x10, 0x47, 0x65,
+	0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x32,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74,
+	0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72,
+	0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53,
+	0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x22, 0x37, 0xda, 0x41,
+	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x0a, 0x04, 0x6e,
+	0x61, 0x6d, 0x65, 0x12, 0x20, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f,
+	0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f,
+	0x2a, 0x7d, 0x2f, 0x2a, 0x2a, 0x12, 0xbf, 0x01, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+	0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x35, 0x2e,
 	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63,
-	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65,
-	0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x22, 0x47, 0xda, 0x41, 0x27, 0x70, 0x61, 0x72, 0x65,
-	0x6e, 0x74, 0x2c, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65,
-	0x72, 0x2c, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72,
-	0x5f, 0x69, 0x64, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x70, 0x61, 0x72,
-	0x65, 0x6e, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d,
-	0x12, 0x9d, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67,
-	0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
-	0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
-	0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67,
-	0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+	0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74,
+	0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32,
+	0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x22, 0x47,
+	0xda, 0x41, 0x27, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x2c, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
+	0x64, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x2c, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64,
+	0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17,
+	0x12, 0x15, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63,
+	0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x9d, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12,
+	0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
+	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x37,
+	0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x0a,
+	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70,
+	0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
+	0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x2a, 0x2a, 0x12, 0xa9, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4d,
+	0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x32, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f,
+	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x6e, 0x61,
+	0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,
+	0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x61, 0x6e,
+	0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x22, 0x37, 0xda, 0x41, 0x04, 0x6e,
+	0x61, 0x6d, 0x65, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
+	0x65, 0x12, 0x20, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65,
+	0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d,
+	0x2f, 0x2a, 0x2a, 0x12, 0xa9, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x61,
+	0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
+	0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67,
+	0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,
+	0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73,
+	0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, 0x65,
+	0x6e, 0x74, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65,
+	0x6e, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12,
+	0x7a, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12,
+	0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
+	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
 	0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
-	0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x37, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65,
-	0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20,
-	0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73,
-	0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x2a, 0x2a,
-	0x12, 0xa9, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46,
-	0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73,
+	0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x22, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0b,
+	0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x7f, 0x0a, 0x09, 0x47,
+	0x65, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73,
 	0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76,
-	0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64,
-	0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x22, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d,
+	0x65, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
+	0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xbb, 0x01, 0x0a,
+	0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x2e, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+	0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74,
+	0x22, 0x58, 0xda, 0x41, 0x17, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x2c, 0x62, 0x75, 0x63, 0x6b,
+	0x65, 0x74, 0x2c, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x8a, 0xd3, 0xe4, 0x93,
+	0x02, 0x38, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x0c, 0x7b, 0x70,
+	0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x1e, 0x0a, 0x0e, 0x62, 0x75,
+	0x63, 0x6b, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x0c, 0x7b, 0x70,
+	0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x0b, 0x4c,
+	0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
+	0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65,
+	0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
 	0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72,
-	0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c,
-	0x64, 0x65, 0x72, 0x22, 0x37, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x8a, 0xd3, 0xe4, 0x93,
-	0x02, 0x2a, 0x12, 0x28, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x7b, 0x62, 0x75, 0x63,
-	0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62,
-	0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x2a, 0x2a, 0x12, 0xa9, 0x01, 0x0a,
-	0x12, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64,
-	0x65, 0x72, 0x73, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f,
-	0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e,
-	0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65,
-	0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74,
+	0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0xda, 0x41, 0x06, 0x70, 0x61,
+	0x72, 0x65, 0x6e, 0x74, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61,
+	0x72, 0x65, 0x6e, 0x74, 0x12, 0x0c, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3d, 0x2a,
+	0x2a, 0x7d, 0x12, 0xa3, 0x01, 0x0a, 0x19, 0x4c, 0x6f, 0x63, 0x6b, 0x42, 0x75, 0x63, 0x6b, 0x65,
+	0x74, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+	0x12, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,
+	0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63,
+	0x6b, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e,
+	0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74,
+	0x22, 0x26, 0xda, 0x41, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x8a, 0xd3, 0xe4, 0x93, 0x02,
+	0x17, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75,
+	0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x75, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x49,
+	0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50,
+	0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c,
+	0x69, 0x63, 0x79, 0x22, 0x2a, 0xda, 0x41, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+	0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
+	0x63, 0x65, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12,
+	0x7c, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12,
+	0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e,
+	0x53, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d,
+	0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x31, 0xda, 0x41, 0x0f, 0x72,
+	0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x8a, 0xd3,
+	0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+	0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x96, 0x02,
+	0x0a, 0x12, 0x54, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73,
+	0x69, 0x6f, 0x6e, 0x73, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61,
+	0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d,
+	0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x54,
+	0x65, 0x73, 0x74, 0x49, 0x61, 0x6d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e,
+	0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xaa, 0x01, 0xda, 0x41, 0x14, 0x72,
+	0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69,
+	0x6f, 0x6e, 0x73, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x8c, 0x01, 0x12, 0x17, 0x0a, 0x08, 0x72, 0x65,
+	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d,
+	0x2a, 0x2a, 0x7d, 0x12, 0x34, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12,
+	0x28, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
+	0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x6f,
+	0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2a, 0x12, 0x3b, 0x0a, 0x08, 0x72, 0x65, 0x73,
+	0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70,
+	0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
+	0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64,
+	0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2a, 0x12, 0x9a, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74,
+	0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
+	0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
+	0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x37, 0xda, 0x41, 0x12, 0x62,
+	0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73,
+	0x6b, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x0a, 0x0b, 0x62, 0x75, 0x63, 0x6b, 0x65,
+	0x74, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d,
+	0x2a, 0x2a, 0x7d, 0x12, 0x8e, 0x01, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x4f,
+	0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73,
+	0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76,
+	0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
+	0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x29, 0x8a, 0xd3, 0xe4, 0x93, 0x02,
+	0x23, 0x12, 0x21, 0x0a, 0x12, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
+	0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xa0, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f,
+	0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73,
+	0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76,
+	0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x48, 0xda,
+	0x41, 0x0d, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0xda,
+	0x41, 0x18, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c,
+	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17,
+	0x12, 0x15, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63,
+	0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x9d, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x74,
+	0x6f, 0x72, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
 	0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72,
-	0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65,
-	0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x22, 0x26, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x8a, 0xd3, 0xe4, 0x93, 0x02,
-	0x17, 0x12, 0x15, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75,
-	0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x1a, 0xa7, 0x02, 0xca, 0x41, 0x16, 0x73, 0x74,
-	0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73,
-	0x2e, 0x63, 0x6f, 0x6d, 0xd2, 0x41, 0x8a, 0x02, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f,
+	0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4f, 0x62, 0x6a,
+	0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
+	0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x38, 0xda,
+	0x41, 0x18, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c,
+	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17,
+	0x12, 0x15, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63,
+	0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xa5, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4f,
+	0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73,
+	0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76,
+	0x32, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72,
+	0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4f,
+	0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x48, 0xda, 0x41, 0x0d, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
+	0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0xda, 0x41, 0x18, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
+	0x2c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b,
+	0x65, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12,
+	0x9c, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+	0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,
+	0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64,
+	0x61, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,
+	0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a,
+	0x65, 0x63, 0x74, 0x22, 0x39, 0xda, 0x41, 0x12, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x75,
+	0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x1e,
+	0x12, 0x1c, 0x0a, 0x0d, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65,
+	0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x94,
+	0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x2d,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f,
+	0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62,
+	0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0xda,
+	0x41, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15,
+	0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65,
+	0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xa8, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74,
+	0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
+	0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+	0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x0f, 0x0a, 0x0d,
+	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x21, 0x0a,
+	0x12, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x75, 0x63,
+	0x6b, 0x65, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d,
+	0x12, 0xa6, 0x01, 0x0a, 0x0a, 0x4d, 0x6f, 0x76, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12,
+	0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
+	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x6f, 0x76, 0x65,
+	0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+	0x22, 0x47, 0xda, 0x41, 0x27, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x73, 0x6f, 0x75, 0x72,
+	0x63, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x8a, 0xd3, 0xe4, 0x93,
+	0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x0b, 0x7b, 0x62,
+	0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x1a, 0xa7, 0x02, 0xca, 0x41, 0x16, 0x73,
+	0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69,
+	0x73, 0x2e, 0x63, 0x6f, 0x6d, 0xd2, 0x41, 0x8a, 0x02, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f,
+	0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e,
+	0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2d, 0x70,
+	0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f,
 	0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63,
 	0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2d, 0x70, 0x6c,
-	0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77,
-	0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f,
-	0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2d, 0x70, 0x6c, 0x61,
-	0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2d, 0x6f, 0x6e, 0x6c, 0x79, 0x2c,
-	0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
-	0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f,
-	0x64, 0x65, 0x76, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x66, 0x75, 0x6c, 0x6c, 0x5f,
-	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f,
-	0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63,
-	0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x64, 0x65, 0x76, 0x73, 0x74, 0x6f, 0x72, 0x61,
-	0x67, 0x65, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x2c, 0x68, 0x74, 0x74,
-	0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61,
-	0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x64, 0x65, 0x76,
-	0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x77, 0x72, 0x69,
-	0x74, 0x65, 0x42, 0xa6, 0x02, 0xea, 0x41, 0x44, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,
-	0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d,
-	0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x23, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
-	0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x62, 0x75, 0x63, 0x6b,
-	0x65, 0x74, 0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x0a, 0x1d, 0x63, 0x6f,
-	0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
-	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x42, 0x13, 0x53, 0x74, 0x6f,
-	0x72, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f,
-	0x50, 0x01, 0x5a, 0x3d, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
-	0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2f,
-	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x63, 0x6f,
-	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x62, 0x3b, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70,
-	0x62, 0xaa, 0x02, 0x1f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64,
-	0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
-	0x2e, 0x56, 0x32, 0xca, 0x02, 0x1f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f,
-	0x75, 0x64, 0x5c, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5c, 0x43, 0x6f, 0x6e, 0x74, 0x72,
-	0x6f, 0x6c, 0x5c, 0x56, 0x32, 0xea, 0x02, 0x23, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a,
-	0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x3a, 0x3a,
-	0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x33,
+	0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2d, 0x6f, 0x6e, 0x6c, 0x79,
+	0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68,
+	0x2f, 0x64, 0x65, 0x76, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x66, 0x75, 0x6c, 0x6c,
+	0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f,
+	0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e,
+	0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x64, 0x65, 0x76, 0x73, 0x74, 0x6f, 0x72,
+	0x61, 0x67, 0x65, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x2c, 0x68, 0x74,
+	0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x64, 0x65,
+	0x76, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x77, 0x72,
+	0x69, 0x74, 0x65, 0x42, 0xa6, 0x02, 0xea, 0x41, 0x44, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61,
+	0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f,
+	0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x23, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63,
+	0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x62, 0x75, 0x63,
+	0x6b, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x0a, 0x1d, 0x63,
+	0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,
+	0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x42, 0x13, 0x53, 0x74,
+	0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x72, 0x6f, 0x74,
+	0x6f, 0x50, 0x01, 0x5a, 0x3d, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
+	0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x63,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x62, 0x3b, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
+	0x70, 0x62, 0xaa, 0x02, 0x1f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75,
+	0x64, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x6c, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x1f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c,
+	0x6f, 0x75, 0x64, 0x5c, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5c, 0x43, 0x6f, 0x6e, 0x74,
+	0x72, 0x6f, 0x6c, 0x5c, 0x56, 0x32, 0xea, 0x02, 0x23, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a,
+	0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x3a,
+	0x3a, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -2138,73 +8215,239 @@
 	return file_google_storage_control_v2_storage_control_proto_rawDescData
 }
 
-var file_google_storage_control_v2_storage_control_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
+var file_google_storage_control_v2_storage_control_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_google_storage_control_v2_storage_control_proto_msgTypes = make([]protoimpl.MessageInfo, 69)
 var file_google_storage_control_v2_storage_control_proto_goTypes = []any{
-	(*PendingRenameInfo)(nil),                   // 0: google.storage.control.v2.PendingRenameInfo
-	(*Folder)(nil),                              // 1: google.storage.control.v2.Folder
-	(*GetFolderRequest)(nil),                    // 2: google.storage.control.v2.GetFolderRequest
-	(*CreateFolderRequest)(nil),                 // 3: google.storage.control.v2.CreateFolderRequest
-	(*DeleteFolderRequest)(nil),                 // 4: google.storage.control.v2.DeleteFolderRequest
-	(*ListFoldersRequest)(nil),                  // 5: google.storage.control.v2.ListFoldersRequest
-	(*ListFoldersResponse)(nil),                 // 6: google.storage.control.v2.ListFoldersResponse
-	(*RenameFolderRequest)(nil),                 // 7: google.storage.control.v2.RenameFolderRequest
-	(*CommonLongRunningOperationMetadata)(nil),  // 8: google.storage.control.v2.CommonLongRunningOperationMetadata
-	(*RenameFolderMetadata)(nil),                // 9: google.storage.control.v2.RenameFolderMetadata
-	(*StorageLayout)(nil),                       // 10: google.storage.control.v2.StorageLayout
-	(*GetStorageLayoutRequest)(nil),             // 11: google.storage.control.v2.GetStorageLayoutRequest
-	(*ManagedFolder)(nil),                       // 12: google.storage.control.v2.ManagedFolder
-	(*GetManagedFolderRequest)(nil),             // 13: google.storage.control.v2.GetManagedFolderRequest
-	(*CreateManagedFolderRequest)(nil),          // 14: google.storage.control.v2.CreateManagedFolderRequest
-	(*DeleteManagedFolderRequest)(nil),          // 15: google.storage.control.v2.DeleteManagedFolderRequest
-	(*ListManagedFoldersRequest)(nil),           // 16: google.storage.control.v2.ListManagedFoldersRequest
-	(*ListManagedFoldersResponse)(nil),          // 17: google.storage.control.v2.ListManagedFoldersResponse
-	(*StorageLayout_CustomPlacementConfig)(nil), // 18: google.storage.control.v2.StorageLayout.CustomPlacementConfig
-	(*StorageLayout_HierarchicalNamespace)(nil), // 19: google.storage.control.v2.StorageLayout.HierarchicalNamespace
-	(*timestamppb.Timestamp)(nil),               // 20: google.protobuf.Timestamp
-	(*emptypb.Empty)(nil),                       // 21: google.protobuf.Empty
-	(*longrunningpb.Operation)(nil),             // 22: google.longrunning.Operation
+	(ServiceConstants_Values)(0),                                  // 0: google.storage.control.v2.ServiceConstants.Values
+	(*PendingRenameInfo)(nil),                                     // 1: google.storage.control.v2.PendingRenameInfo
+	(*Folder)(nil),                                                // 2: google.storage.control.v2.Folder
+	(*GetFolderRequest)(nil),                                      // 3: google.storage.control.v2.GetFolderRequest
+	(*CreateFolderRequest)(nil),                                   // 4: google.storage.control.v2.CreateFolderRequest
+	(*DeleteFolderRequest)(nil),                                   // 5: google.storage.control.v2.DeleteFolderRequest
+	(*ListFoldersRequest)(nil),                                    // 6: google.storage.control.v2.ListFoldersRequest
+	(*ListFoldersResponse)(nil),                                   // 7: google.storage.control.v2.ListFoldersResponse
+	(*RenameFolderRequest)(nil),                                   // 8: google.storage.control.v2.RenameFolderRequest
+	(*CommonLongRunningOperationMetadata)(nil),                    // 9: google.storage.control.v2.CommonLongRunningOperationMetadata
+	(*RenameFolderMetadata)(nil),                                  // 10: google.storage.control.v2.RenameFolderMetadata
+	(*StorageLayout)(nil),                                         // 11: google.storage.control.v2.StorageLayout
+	(*GetStorageLayoutRequest)(nil),                               // 12: google.storage.control.v2.GetStorageLayoutRequest
+	(*ManagedFolder)(nil),                                         // 13: google.storage.control.v2.ManagedFolder
+	(*GetManagedFolderRequest)(nil),                               // 14: google.storage.control.v2.GetManagedFolderRequest
+	(*CreateManagedFolderRequest)(nil),                            // 15: google.storage.control.v2.CreateManagedFolderRequest
+	(*DeleteManagedFolderRequest)(nil),                            // 16: google.storage.control.v2.DeleteManagedFolderRequest
+	(*ListManagedFoldersRequest)(nil),                             // 17: google.storage.control.v2.ListManagedFoldersRequest
+	(*ListManagedFoldersResponse)(nil),                            // 18: google.storage.control.v2.ListManagedFoldersResponse
+	(*DeleteBucketRequest)(nil),                                   // 19: google.storage.control.v2.DeleteBucketRequest
+	(*GetBucketRequest)(nil),                                      // 20: google.storage.control.v2.GetBucketRequest
+	(*CreateBucketRequest)(nil),                                   // 21: google.storage.control.v2.CreateBucketRequest
+	(*ListBucketsRequest)(nil),                                    // 22: google.storage.control.v2.ListBucketsRequest
+	(*ListBucketsResponse)(nil),                                   // 23: google.storage.control.v2.ListBucketsResponse
+	(*LockBucketRetentionPolicyRequest)(nil),                      // 24: google.storage.control.v2.LockBucketRetentionPolicyRequest
+	(*UpdateBucketRequest)(nil),                                   // 25: google.storage.control.v2.UpdateBucketRequest
+	(*ComposeObjectRequest)(nil),                                  // 26: google.storage.control.v2.ComposeObjectRequest
+	(*DeleteObjectRequest)(nil),                                   // 27: google.storage.control.v2.DeleteObjectRequest
+	(*RestoreObjectRequest)(nil),                                  // 28: google.storage.control.v2.RestoreObjectRequest
+	(*GetObjectRequest)(nil),                                      // 29: google.storage.control.v2.GetObjectRequest
+	(*ListObjectsRequest)(nil),                                    // 30: google.storage.control.v2.ListObjectsRequest
+	(*RewriteObjectRequest)(nil),                                  // 31: google.storage.control.v2.RewriteObjectRequest
+	(*RewriteResponse)(nil),                                       // 32: google.storage.control.v2.RewriteResponse
+	(*MoveObjectRequest)(nil),                                     // 33: google.storage.control.v2.MoveObjectRequest
+	(*UpdateObjectRequest)(nil),                                   // 34: google.storage.control.v2.UpdateObjectRequest
+	(*CommonObjectRequestParams)(nil),                             // 35: google.storage.control.v2.CommonObjectRequestParams
+	(*ServiceConstants)(nil),                                      // 36: google.storage.control.v2.ServiceConstants
+	(*Bucket)(nil),                                                // 37: google.storage.control.v2.Bucket
+	(*BucketAccessControl)(nil),                                   // 38: google.storage.control.v2.BucketAccessControl
+	(*ChecksummedData)(nil),                                       // 39: google.storage.control.v2.ChecksummedData
+	(*ObjectChecksums)(nil),                                       // 40: google.storage.control.v2.ObjectChecksums
+	(*CustomerEncryption)(nil),                                    // 41: google.storage.control.v2.CustomerEncryption
+	(*Object)(nil),                                                // 42: google.storage.control.v2.Object
+	(*ObjectAccessControl)(nil),                                   // 43: google.storage.control.v2.ObjectAccessControl
+	(*ListObjectsResponse)(nil),                                   // 44: google.storage.control.v2.ListObjectsResponse
+	(*ProjectTeam)(nil),                                           // 45: google.storage.control.v2.ProjectTeam
+	(*Owner)(nil),                                                 // 46: google.storage.control.v2.Owner
+	(*StorageLayout_CustomPlacementConfig)(nil),                   // 47: google.storage.control.v2.StorageLayout.CustomPlacementConfig
+	(*StorageLayout_HierarchicalNamespace)(nil),                   // 48: google.storage.control.v2.StorageLayout.HierarchicalNamespace
+	(*ComposeObjectRequest_SourceObject)(nil),                     // 49: google.storage.control.v2.ComposeObjectRequest.SourceObject
+	(*ComposeObjectRequest_SourceObject_ObjectPreconditions)(nil), // 50: google.storage.control.v2.ComposeObjectRequest.SourceObject.ObjectPreconditions
+	(*Bucket_Billing)(nil),                                        // 51: google.storage.control.v2.Bucket.Billing
+	(*Bucket_Cors)(nil),                                           // 52: google.storage.control.v2.Bucket.Cors
+	(*Bucket_Encryption)(nil),                                     // 53: google.storage.control.v2.Bucket.Encryption
+	(*Bucket_IamConfig)(nil),                                      // 54: google.storage.control.v2.Bucket.IamConfig
+	(*Bucket_Lifecycle)(nil),                                      // 55: google.storage.control.v2.Bucket.Lifecycle
+	(*Bucket_Logging)(nil),                                        // 56: google.storage.control.v2.Bucket.Logging
+	(*Bucket_RetentionPolicy)(nil),                                // 57: google.storage.control.v2.Bucket.RetentionPolicy
+	(*Bucket_SoftDeletePolicy)(nil),                               // 58: google.storage.control.v2.Bucket.SoftDeletePolicy
+	(*Bucket_Versioning)(nil),                                     // 59: google.storage.control.v2.Bucket.Versioning
+	(*Bucket_Website)(nil),                                        // 60: google.storage.control.v2.Bucket.Website
+	(*Bucket_CustomPlacementConfig)(nil),                          // 61: google.storage.control.v2.Bucket.CustomPlacementConfig
+	(*Bucket_Autoclass)(nil),                                      // 62: google.storage.control.v2.Bucket.Autoclass
+	(*Bucket_HierarchicalNamespace)(nil),                          // 63: google.storage.control.v2.Bucket.HierarchicalNamespace
+	nil,                                                           // 64: google.storage.control.v2.Bucket.LabelsEntry
+	(*Bucket_IamConfig_UniformBucketLevelAccess)(nil),             // 65: google.storage.control.v2.Bucket.IamConfig.UniformBucketLevelAccess
+	(*Bucket_Lifecycle_Rule)(nil),                                 // 66: google.storage.control.v2.Bucket.Lifecycle.Rule
+	(*Bucket_Lifecycle_Rule_Action)(nil),                          // 67: google.storage.control.v2.Bucket.Lifecycle.Rule.Action
+	(*Bucket_Lifecycle_Rule_Condition)(nil),                       // 68: google.storage.control.v2.Bucket.Lifecycle.Rule.Condition
+	nil,                                                           // 69: google.storage.control.v2.Object.MetadataEntry
+	(*timestamppb.Timestamp)(nil),                                 // 70: google.protobuf.Timestamp
+	(*fieldmaskpb.FieldMask)(nil),                                 // 71: google.protobuf.FieldMask
+	(*durationpb.Duration)(nil),                                   // 72: google.protobuf.Duration
+	(*date.Date)(nil),                                             // 73: google.type.Date
+	(*iampb.GetIamPolicyRequest)(nil),                             // 74: google.iam.v1.GetIamPolicyRequest
+	(*iampb.SetIamPolicyRequest)(nil),                             // 75: google.iam.v1.SetIamPolicyRequest
+	(*iampb.TestIamPermissionsRequest)(nil),                       // 76: google.iam.v1.TestIamPermissionsRequest
+	(*emptypb.Empty)(nil),                                         // 77: google.protobuf.Empty
+	(*longrunningpb.Operation)(nil),                               // 78: google.longrunning.Operation
+	(*iampb.Policy)(nil),                                          // 79: google.iam.v1.Policy
+	(*iampb.TestIamPermissionsResponse)(nil),                      // 80: google.iam.v1.TestIamPermissionsResponse
 }
 var file_google_storage_control_v2_storage_control_proto_depIdxs = []int32{
-	20, // 0: google.storage.control.v2.Folder.create_time:type_name -> google.protobuf.Timestamp
-	20, // 1: google.storage.control.v2.Folder.update_time:type_name -> google.protobuf.Timestamp
-	0,  // 2: google.storage.control.v2.Folder.pending_rename_info:type_name -> google.storage.control.v2.PendingRenameInfo
-	1,  // 3: google.storage.control.v2.CreateFolderRequest.folder:type_name -> google.storage.control.v2.Folder
-	1,  // 4: google.storage.control.v2.ListFoldersResponse.folders:type_name -> google.storage.control.v2.Folder
-	20, // 5: google.storage.control.v2.CommonLongRunningOperationMetadata.create_time:type_name -> google.protobuf.Timestamp
-	20, // 6: google.storage.control.v2.CommonLongRunningOperationMetadata.end_time:type_name -> google.protobuf.Timestamp
-	20, // 7: google.storage.control.v2.CommonLongRunningOperationMetadata.update_time:type_name -> google.protobuf.Timestamp
-	8,  // 8: google.storage.control.v2.RenameFolderMetadata.common_metadata:type_name -> google.storage.control.v2.CommonLongRunningOperationMetadata
-	18, // 9: google.storage.control.v2.StorageLayout.custom_placement_config:type_name -> google.storage.control.v2.StorageLayout.CustomPlacementConfig
-	19, // 10: google.storage.control.v2.StorageLayout.hierarchical_namespace:type_name -> google.storage.control.v2.StorageLayout.HierarchicalNamespace
-	20, // 11: google.storage.control.v2.ManagedFolder.create_time:type_name -> google.protobuf.Timestamp
-	20, // 12: google.storage.control.v2.ManagedFolder.update_time:type_name -> google.protobuf.Timestamp
-	12, // 13: google.storage.control.v2.CreateManagedFolderRequest.managed_folder:type_name -> google.storage.control.v2.ManagedFolder
-	12, // 14: google.storage.control.v2.ListManagedFoldersResponse.managed_folders:type_name -> google.storage.control.v2.ManagedFolder
-	3,  // 15: google.storage.control.v2.StorageControl.CreateFolder:input_type -> google.storage.control.v2.CreateFolderRequest
-	4,  // 16: google.storage.control.v2.StorageControl.DeleteFolder:input_type -> google.storage.control.v2.DeleteFolderRequest
-	2,  // 17: google.storage.control.v2.StorageControl.GetFolder:input_type -> google.storage.control.v2.GetFolderRequest
-	5,  // 18: google.storage.control.v2.StorageControl.ListFolders:input_type -> google.storage.control.v2.ListFoldersRequest
-	7,  // 19: google.storage.control.v2.StorageControl.RenameFolder:input_type -> google.storage.control.v2.RenameFolderRequest
-	11, // 20: google.storage.control.v2.StorageControl.GetStorageLayout:input_type -> google.storage.control.v2.GetStorageLayoutRequest
-	14, // 21: google.storage.control.v2.StorageControl.CreateManagedFolder:input_type -> google.storage.control.v2.CreateManagedFolderRequest
-	15, // 22: google.storage.control.v2.StorageControl.DeleteManagedFolder:input_type -> google.storage.control.v2.DeleteManagedFolderRequest
-	13, // 23: google.storage.control.v2.StorageControl.GetManagedFolder:input_type -> google.storage.control.v2.GetManagedFolderRequest
-	16, // 24: google.storage.control.v2.StorageControl.ListManagedFolders:input_type -> google.storage.control.v2.ListManagedFoldersRequest
-	1,  // 25: google.storage.control.v2.StorageControl.CreateFolder:output_type -> google.storage.control.v2.Folder
-	21, // 26: google.storage.control.v2.StorageControl.DeleteFolder:output_type -> google.protobuf.Empty
-	1,  // 27: google.storage.control.v2.StorageControl.GetFolder:output_type -> google.storage.control.v2.Folder
-	6,  // 28: google.storage.control.v2.StorageControl.ListFolders:output_type -> google.storage.control.v2.ListFoldersResponse
-	22, // 29: google.storage.control.v2.StorageControl.RenameFolder:output_type -> google.longrunning.Operation
-	10, // 30: google.storage.control.v2.StorageControl.GetStorageLayout:output_type -> google.storage.control.v2.StorageLayout
-	12, // 31: google.storage.control.v2.StorageControl.CreateManagedFolder:output_type -> google.storage.control.v2.ManagedFolder
-	21, // 32: google.storage.control.v2.StorageControl.DeleteManagedFolder:output_type -> google.protobuf.Empty
-	12, // 33: google.storage.control.v2.StorageControl.GetManagedFolder:output_type -> google.storage.control.v2.ManagedFolder
-	17, // 34: google.storage.control.v2.StorageControl.ListManagedFolders:output_type -> google.storage.control.v2.ListManagedFoldersResponse
-	25, // [25:35] is the sub-list for method output_type
-	15, // [15:25] is the sub-list for method input_type
-	15, // [15:15] is the sub-list for extension type_name
-	15, // [15:15] is the sub-list for extension extendee
-	0,  // [0:15] is the sub-list for field type_name
+	70,  // 0: google.storage.control.v2.Folder.create_time:type_name -> google.protobuf.Timestamp
+	70,  // 1: google.storage.control.v2.Folder.update_time:type_name -> google.protobuf.Timestamp
+	1,   // 2: google.storage.control.v2.Folder.pending_rename_info:type_name -> google.storage.control.v2.PendingRenameInfo
+	2,   // 3: google.storage.control.v2.CreateFolderRequest.folder:type_name -> google.storage.control.v2.Folder
+	2,   // 4: google.storage.control.v2.ListFoldersResponse.folders:type_name -> google.storage.control.v2.Folder
+	70,  // 5: google.storage.control.v2.CommonLongRunningOperationMetadata.create_time:type_name -> google.protobuf.Timestamp
+	70,  // 6: google.storage.control.v2.CommonLongRunningOperationMetadata.end_time:type_name -> google.protobuf.Timestamp
+	70,  // 7: google.storage.control.v2.CommonLongRunningOperationMetadata.update_time:type_name -> google.protobuf.Timestamp
+	9,   // 8: google.storage.control.v2.RenameFolderMetadata.common_metadata:type_name -> google.storage.control.v2.CommonLongRunningOperationMetadata
+	47,  // 9: google.storage.control.v2.StorageLayout.custom_placement_config:type_name -> google.storage.control.v2.StorageLayout.CustomPlacementConfig
+	48,  // 10: google.storage.control.v2.StorageLayout.hierarchical_namespace:type_name -> google.storage.control.v2.StorageLayout.HierarchicalNamespace
+	70,  // 11: google.storage.control.v2.ManagedFolder.create_time:type_name -> google.protobuf.Timestamp
+	70,  // 12: google.storage.control.v2.ManagedFolder.update_time:type_name -> google.protobuf.Timestamp
+	13,  // 13: google.storage.control.v2.CreateManagedFolderRequest.managed_folder:type_name -> google.storage.control.v2.ManagedFolder
+	13,  // 14: google.storage.control.v2.ListManagedFoldersResponse.managed_folders:type_name -> google.storage.control.v2.ManagedFolder
+	71,  // 15: google.storage.control.v2.GetBucketRequest.read_mask:type_name -> google.protobuf.FieldMask
+	37,  // 16: google.storage.control.v2.CreateBucketRequest.bucket:type_name -> google.storage.control.v2.Bucket
+	71,  // 17: google.storage.control.v2.ListBucketsRequest.read_mask:type_name -> google.protobuf.FieldMask
+	37,  // 18: google.storage.control.v2.ListBucketsResponse.buckets:type_name -> google.storage.control.v2.Bucket
+	37,  // 19: google.storage.control.v2.UpdateBucketRequest.bucket:type_name -> google.storage.control.v2.Bucket
+	71,  // 20: google.storage.control.v2.UpdateBucketRequest.update_mask:type_name -> google.protobuf.FieldMask
+	42,  // 21: google.storage.control.v2.ComposeObjectRequest.destination:type_name -> google.storage.control.v2.Object
+	49,  // 22: google.storage.control.v2.ComposeObjectRequest.source_objects:type_name -> google.storage.control.v2.ComposeObjectRequest.SourceObject
+	35,  // 23: google.storage.control.v2.ComposeObjectRequest.common_object_request_params:type_name -> google.storage.control.v2.CommonObjectRequestParams
+	40,  // 24: google.storage.control.v2.ComposeObjectRequest.object_checksums:type_name -> google.storage.control.v2.ObjectChecksums
+	35,  // 25: google.storage.control.v2.DeleteObjectRequest.common_object_request_params:type_name -> google.storage.control.v2.CommonObjectRequestParams
+	35,  // 26: google.storage.control.v2.RestoreObjectRequest.common_object_request_params:type_name -> google.storage.control.v2.CommonObjectRequestParams
+	35,  // 27: google.storage.control.v2.GetObjectRequest.common_object_request_params:type_name -> google.storage.control.v2.CommonObjectRequestParams
+	71,  // 28: google.storage.control.v2.GetObjectRequest.read_mask:type_name -> google.protobuf.FieldMask
+	71,  // 29: google.storage.control.v2.ListObjectsRequest.read_mask:type_name -> google.protobuf.FieldMask
+	42,  // 30: google.storage.control.v2.RewriteObjectRequest.destination:type_name -> google.storage.control.v2.Object
+	35,  // 31: google.storage.control.v2.RewriteObjectRequest.common_object_request_params:type_name -> google.storage.control.v2.CommonObjectRequestParams
+	40,  // 32: google.storage.control.v2.RewriteObjectRequest.object_checksums:type_name -> google.storage.control.v2.ObjectChecksums
+	42,  // 33: google.storage.control.v2.RewriteResponse.resource:type_name -> google.storage.control.v2.Object
+	42,  // 34: google.storage.control.v2.UpdateObjectRequest.object:type_name -> google.storage.control.v2.Object
+	71,  // 35: google.storage.control.v2.UpdateObjectRequest.update_mask:type_name -> google.protobuf.FieldMask
+	35,  // 36: google.storage.control.v2.UpdateObjectRequest.common_object_request_params:type_name -> google.storage.control.v2.CommonObjectRequestParams
+	38,  // 37: google.storage.control.v2.Bucket.acl:type_name -> google.storage.control.v2.BucketAccessControl
+	43,  // 38: google.storage.control.v2.Bucket.default_object_acl:type_name -> google.storage.control.v2.ObjectAccessControl
+	55,  // 39: google.storage.control.v2.Bucket.lifecycle:type_name -> google.storage.control.v2.Bucket.Lifecycle
+	70,  // 40: google.storage.control.v2.Bucket.create_time:type_name -> google.protobuf.Timestamp
+	52,  // 41: google.storage.control.v2.Bucket.cors:type_name -> google.storage.control.v2.Bucket.Cors
+	70,  // 42: google.storage.control.v2.Bucket.update_time:type_name -> google.protobuf.Timestamp
+	64,  // 43: google.storage.control.v2.Bucket.labels:type_name -> google.storage.control.v2.Bucket.LabelsEntry
+	60,  // 44: google.storage.control.v2.Bucket.website:type_name -> google.storage.control.v2.Bucket.Website
+	59,  // 45: google.storage.control.v2.Bucket.versioning:type_name -> google.storage.control.v2.Bucket.Versioning
+	56,  // 46: google.storage.control.v2.Bucket.logging:type_name -> google.storage.control.v2.Bucket.Logging
+	46,  // 47: google.storage.control.v2.Bucket.owner:type_name -> google.storage.control.v2.Owner
+	53,  // 48: google.storage.control.v2.Bucket.encryption:type_name -> google.storage.control.v2.Bucket.Encryption
+	51,  // 49: google.storage.control.v2.Bucket.billing:type_name -> google.storage.control.v2.Bucket.Billing
+	57,  // 50: google.storage.control.v2.Bucket.retention_policy:type_name -> google.storage.control.v2.Bucket.RetentionPolicy
+	54,  // 51: google.storage.control.v2.Bucket.iam_config:type_name -> google.storage.control.v2.Bucket.IamConfig
+	61,  // 52: google.storage.control.v2.Bucket.custom_placement_config:type_name -> google.storage.control.v2.Bucket.CustomPlacementConfig
+	62,  // 53: google.storage.control.v2.Bucket.autoclass:type_name -> google.storage.control.v2.Bucket.Autoclass
+	63,  // 54: google.storage.control.v2.Bucket.hierarchical_namespace:type_name -> google.storage.control.v2.Bucket.HierarchicalNamespace
+	58,  // 55: google.storage.control.v2.Bucket.soft_delete_policy:type_name -> google.storage.control.v2.Bucket.SoftDeletePolicy
+	45,  // 56: google.storage.control.v2.BucketAccessControl.project_team:type_name -> google.storage.control.v2.ProjectTeam
+	43,  // 57: google.storage.control.v2.Object.acl:type_name -> google.storage.control.v2.ObjectAccessControl
+	70,  // 58: google.storage.control.v2.Object.delete_time:type_name -> google.protobuf.Timestamp
+	70,  // 59: google.storage.control.v2.Object.finalize_time:type_name -> google.protobuf.Timestamp
+	70,  // 60: google.storage.control.v2.Object.create_time:type_name -> google.protobuf.Timestamp
+	40,  // 61: google.storage.control.v2.Object.checksums:type_name -> google.storage.control.v2.ObjectChecksums
+	70,  // 62: google.storage.control.v2.Object.update_time:type_name -> google.protobuf.Timestamp
+	70,  // 63: google.storage.control.v2.Object.update_storage_class_time:type_name -> google.protobuf.Timestamp
+	70,  // 64: google.storage.control.v2.Object.retention_expire_time:type_name -> google.protobuf.Timestamp
+	69,  // 65: google.storage.control.v2.Object.metadata:type_name -> google.storage.control.v2.Object.MetadataEntry
+	46,  // 66: google.storage.control.v2.Object.owner:type_name -> google.storage.control.v2.Owner
+	41,  // 67: google.storage.control.v2.Object.customer_encryption:type_name -> google.storage.control.v2.CustomerEncryption
+	70,  // 68: google.storage.control.v2.Object.custom_time:type_name -> google.protobuf.Timestamp
+	70,  // 69: google.storage.control.v2.Object.soft_delete_time:type_name -> google.protobuf.Timestamp
+	70,  // 70: google.storage.control.v2.Object.hard_delete_time:type_name -> google.protobuf.Timestamp
+	45,  // 71: google.storage.control.v2.ObjectAccessControl.project_team:type_name -> google.storage.control.v2.ProjectTeam
+	42,  // 72: google.storage.control.v2.ListObjectsResponse.objects:type_name -> google.storage.control.v2.Object
+	50,  // 73: google.storage.control.v2.ComposeObjectRequest.SourceObject.object_preconditions:type_name -> google.storage.control.v2.ComposeObjectRequest.SourceObject.ObjectPreconditions
+	65,  // 74: google.storage.control.v2.Bucket.IamConfig.uniform_bucket_level_access:type_name -> google.storage.control.v2.Bucket.IamConfig.UniformBucketLevelAccess
+	66,  // 75: google.storage.control.v2.Bucket.Lifecycle.rule:type_name -> google.storage.control.v2.Bucket.Lifecycle.Rule
+	70,  // 76: google.storage.control.v2.Bucket.RetentionPolicy.effective_time:type_name -> google.protobuf.Timestamp
+	72,  // 77: google.storage.control.v2.Bucket.RetentionPolicy.retention_duration:type_name -> google.protobuf.Duration
+	72,  // 78: google.storage.control.v2.Bucket.SoftDeletePolicy.retention_duration:type_name -> google.protobuf.Duration
+	70,  // 79: google.storage.control.v2.Bucket.SoftDeletePolicy.effective_time:type_name -> google.protobuf.Timestamp
+	70,  // 80: google.storage.control.v2.Bucket.Autoclass.toggle_time:type_name -> google.protobuf.Timestamp
+	70,  // 81: google.storage.control.v2.Bucket.Autoclass.terminal_storage_class_update_time:type_name -> google.protobuf.Timestamp
+	70,  // 82: google.storage.control.v2.Bucket.IamConfig.UniformBucketLevelAccess.lock_time:type_name -> google.protobuf.Timestamp
+	67,  // 83: google.storage.control.v2.Bucket.Lifecycle.Rule.action:type_name -> google.storage.control.v2.Bucket.Lifecycle.Rule.Action
+	68,  // 84: google.storage.control.v2.Bucket.Lifecycle.Rule.condition:type_name -> google.storage.control.v2.Bucket.Lifecycle.Rule.Condition
+	73,  // 85: google.storage.control.v2.Bucket.Lifecycle.Rule.Condition.created_before:type_name -> google.type.Date
+	73,  // 86: google.storage.control.v2.Bucket.Lifecycle.Rule.Condition.custom_time_before:type_name -> google.type.Date
+	73,  // 87: google.storage.control.v2.Bucket.Lifecycle.Rule.Condition.noncurrent_time_before:type_name -> google.type.Date
+	4,   // 88: google.storage.control.v2.StorageControl.CreateFolder:input_type -> google.storage.control.v2.CreateFolderRequest
+	5,   // 89: google.storage.control.v2.StorageControl.DeleteFolder:input_type -> google.storage.control.v2.DeleteFolderRequest
+	3,   // 90: google.storage.control.v2.StorageControl.GetFolder:input_type -> google.storage.control.v2.GetFolderRequest
+	6,   // 91: google.storage.control.v2.StorageControl.ListFolders:input_type -> google.storage.control.v2.ListFoldersRequest
+	8,   // 92: google.storage.control.v2.StorageControl.RenameFolder:input_type -> google.storage.control.v2.RenameFolderRequest
+	12,  // 93: google.storage.control.v2.StorageControl.GetStorageLayout:input_type -> google.storage.control.v2.GetStorageLayoutRequest
+	15,  // 94: google.storage.control.v2.StorageControl.CreateManagedFolder:input_type -> google.storage.control.v2.CreateManagedFolderRequest
+	16,  // 95: google.storage.control.v2.StorageControl.DeleteManagedFolder:input_type -> google.storage.control.v2.DeleteManagedFolderRequest
+	14,  // 96: google.storage.control.v2.StorageControl.GetManagedFolder:input_type -> google.storage.control.v2.GetManagedFolderRequest
+	17,  // 97: google.storage.control.v2.StorageControl.ListManagedFolders:input_type -> google.storage.control.v2.ListManagedFoldersRequest
+	19,  // 98: google.storage.control.v2.StorageControl.DeleteBucket:input_type -> google.storage.control.v2.DeleteBucketRequest
+	20,  // 99: google.storage.control.v2.StorageControl.GetBucket:input_type -> google.storage.control.v2.GetBucketRequest
+	21,  // 100: google.storage.control.v2.StorageControl.CreateBucket:input_type -> google.storage.control.v2.CreateBucketRequest
+	22,  // 101: google.storage.control.v2.StorageControl.ListBuckets:input_type -> google.storage.control.v2.ListBucketsRequest
+	24,  // 102: google.storage.control.v2.StorageControl.LockBucketRetentionPolicy:input_type -> google.storage.control.v2.LockBucketRetentionPolicyRequest
+	74,  // 103: google.storage.control.v2.StorageControl.GetIamPolicy:input_type -> google.iam.v1.GetIamPolicyRequest
+	75,  // 104: google.storage.control.v2.StorageControl.SetIamPolicy:input_type -> google.iam.v1.SetIamPolicyRequest
+	76,  // 105: google.storage.control.v2.StorageControl.TestIamPermissions:input_type -> google.iam.v1.TestIamPermissionsRequest
+	25,  // 106: google.storage.control.v2.StorageControl.UpdateBucket:input_type -> google.storage.control.v2.UpdateBucketRequest
+	26,  // 107: google.storage.control.v2.StorageControl.ComposeObject:input_type -> google.storage.control.v2.ComposeObjectRequest
+	27,  // 108: google.storage.control.v2.StorageControl.DeleteObject:input_type -> google.storage.control.v2.DeleteObjectRequest
+	28,  // 109: google.storage.control.v2.StorageControl.RestoreObject:input_type -> google.storage.control.v2.RestoreObjectRequest
+	29,  // 110: google.storage.control.v2.StorageControl.GetObject:input_type -> google.storage.control.v2.GetObjectRequest
+	34,  // 111: google.storage.control.v2.StorageControl.UpdateObject:input_type -> google.storage.control.v2.UpdateObjectRequest
+	30,  // 112: google.storage.control.v2.StorageControl.ListObjects:input_type -> google.storage.control.v2.ListObjectsRequest
+	31,  // 113: google.storage.control.v2.StorageControl.RewriteObject:input_type -> google.storage.control.v2.RewriteObjectRequest
+	33,  // 114: google.storage.control.v2.StorageControl.MoveObject:input_type -> google.storage.control.v2.MoveObjectRequest
+	2,   // 115: google.storage.control.v2.StorageControl.CreateFolder:output_type -> google.storage.control.v2.Folder
+	77,  // 116: google.storage.control.v2.StorageControl.DeleteFolder:output_type -> google.protobuf.Empty
+	2,   // 117: google.storage.control.v2.StorageControl.GetFolder:output_type -> google.storage.control.v2.Folder
+	7,   // 118: google.storage.control.v2.StorageControl.ListFolders:output_type -> google.storage.control.v2.ListFoldersResponse
+	78,  // 119: google.storage.control.v2.StorageControl.RenameFolder:output_type -> google.longrunning.Operation
+	11,  // 120: google.storage.control.v2.StorageControl.GetStorageLayout:output_type -> google.storage.control.v2.StorageLayout
+	13,  // 121: google.storage.control.v2.StorageControl.CreateManagedFolder:output_type -> google.storage.control.v2.ManagedFolder
+	77,  // 122: google.storage.control.v2.StorageControl.DeleteManagedFolder:output_type -> google.protobuf.Empty
+	13,  // 123: google.storage.control.v2.StorageControl.GetManagedFolder:output_type -> google.storage.control.v2.ManagedFolder
+	18,  // 124: google.storage.control.v2.StorageControl.ListManagedFolders:output_type -> google.storage.control.v2.ListManagedFoldersResponse
+	77,  // 125: google.storage.control.v2.StorageControl.DeleteBucket:output_type -> google.protobuf.Empty
+	37,  // 126: google.storage.control.v2.StorageControl.GetBucket:output_type -> google.storage.control.v2.Bucket
+	37,  // 127: google.storage.control.v2.StorageControl.CreateBucket:output_type -> google.storage.control.v2.Bucket
+	23,  // 128: google.storage.control.v2.StorageControl.ListBuckets:output_type -> google.storage.control.v2.ListBucketsResponse
+	37,  // 129: google.storage.control.v2.StorageControl.LockBucketRetentionPolicy:output_type -> google.storage.control.v2.Bucket
+	79,  // 130: google.storage.control.v2.StorageControl.GetIamPolicy:output_type -> google.iam.v1.Policy
+	79,  // 131: google.storage.control.v2.StorageControl.SetIamPolicy:output_type -> google.iam.v1.Policy
+	80,  // 132: google.storage.control.v2.StorageControl.TestIamPermissions:output_type -> google.iam.v1.TestIamPermissionsResponse
+	37,  // 133: google.storage.control.v2.StorageControl.UpdateBucket:output_type -> google.storage.control.v2.Bucket
+	42,  // 134: google.storage.control.v2.StorageControl.ComposeObject:output_type -> google.storage.control.v2.Object
+	77,  // 135: google.storage.control.v2.StorageControl.DeleteObject:output_type -> google.protobuf.Empty
+	42,  // 136: google.storage.control.v2.StorageControl.RestoreObject:output_type -> google.storage.control.v2.Object
+	42,  // 137: google.storage.control.v2.StorageControl.GetObject:output_type -> google.storage.control.v2.Object
+	42,  // 138: google.storage.control.v2.StorageControl.UpdateObject:output_type -> google.storage.control.v2.Object
+	44,  // 139: google.storage.control.v2.StorageControl.ListObjects:output_type -> google.storage.control.v2.ListObjectsResponse
+	32,  // 140: google.storage.control.v2.StorageControl.RewriteObject:output_type -> google.storage.control.v2.RewriteResponse
+	42,  // 141: google.storage.control.v2.StorageControl.MoveObject:output_type -> google.storage.control.v2.Object
+	115, // [115:142] is the sub-list for method output_type
+	88,  // [88:115] is the sub-list for method input_type
+	88,  // [88:88] is the sub-list for extension type_name
+	88,  // [88:88] is the sub-list for extension extendee
+	0,   // [0:88] is the sub-list for field type_name
 }
 
 func init() { file_google_storage_control_v2_storage_control_proto_init() }
@@ -2212,265 +8455,43 @@
 	if File_google_storage_control_v2_storage_control_proto != nil {
 		return
 	}
-	if !protoimpl.UnsafeEnabled {
-		file_google_storage_control_v2_storage_control_proto_msgTypes[0].Exporter = func(v any, i int) any {
-			switch v := v.(*PendingRenameInfo); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_storage_control_v2_storage_control_proto_msgTypes[1].Exporter = func(v any, i int) any {
-			switch v := v.(*Folder); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_storage_control_v2_storage_control_proto_msgTypes[2].Exporter = func(v any, i int) any {
-			switch v := v.(*GetFolderRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_storage_control_v2_storage_control_proto_msgTypes[3].Exporter = func(v any, i int) any {
-			switch v := v.(*CreateFolderRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_storage_control_v2_storage_control_proto_msgTypes[4].Exporter = func(v any, i int) any {
-			switch v := v.(*DeleteFolderRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_storage_control_v2_storage_control_proto_msgTypes[5].Exporter = func(v any, i int) any {
-			switch v := v.(*ListFoldersRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_storage_control_v2_storage_control_proto_msgTypes[6].Exporter = func(v any, i int) any {
-			switch v := v.(*ListFoldersResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_storage_control_v2_storage_control_proto_msgTypes[7].Exporter = func(v any, i int) any {
-			switch v := v.(*RenameFolderRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_storage_control_v2_storage_control_proto_msgTypes[8].Exporter = func(v any, i int) any {
-			switch v := v.(*CommonLongRunningOperationMetadata); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_storage_control_v2_storage_control_proto_msgTypes[9].Exporter = func(v any, i int) any {
-			switch v := v.(*RenameFolderMetadata); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_storage_control_v2_storage_control_proto_msgTypes[10].Exporter = func(v any, i int) any {
-			switch v := v.(*StorageLayout); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_storage_control_v2_storage_control_proto_msgTypes[11].Exporter = func(v any, i int) any {
-			switch v := v.(*GetStorageLayoutRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_storage_control_v2_storage_control_proto_msgTypes[12].Exporter = func(v any, i int) any {
-			switch v := v.(*ManagedFolder); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_storage_control_v2_storage_control_proto_msgTypes[13].Exporter = func(v any, i int) any {
-			switch v := v.(*GetManagedFolderRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_storage_control_v2_storage_control_proto_msgTypes[14].Exporter = func(v any, i int) any {
-			switch v := v.(*CreateManagedFolderRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_storage_control_v2_storage_control_proto_msgTypes[15].Exporter = func(v any, i int) any {
-			switch v := v.(*DeleteManagedFolderRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_storage_control_v2_storage_control_proto_msgTypes[16].Exporter = func(v any, i int) any {
-			switch v := v.(*ListManagedFoldersRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_storage_control_v2_storage_control_proto_msgTypes[17].Exporter = func(v any, i int) any {
-			switch v := v.(*ListManagedFoldersResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_storage_control_v2_storage_control_proto_msgTypes[18].Exporter = func(v any, i int) any {
-			switch v := v.(*StorageLayout_CustomPlacementConfig); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_storage_control_v2_storage_control_proto_msgTypes[19].Exporter = func(v any, i int) any {
-			switch v := v.(*StorageLayout_HierarchicalNamespace); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-	}
 	file_google_storage_control_v2_storage_control_proto_msgTypes[2].OneofWrappers = []any{}
 	file_google_storage_control_v2_storage_control_proto_msgTypes[4].OneofWrappers = []any{}
 	file_google_storage_control_v2_storage_control_proto_msgTypes[7].OneofWrappers = []any{}
 	file_google_storage_control_v2_storage_control_proto_msgTypes[13].OneofWrappers = []any{}
 	file_google_storage_control_v2_storage_control_proto_msgTypes[15].OneofWrappers = []any{}
+	file_google_storage_control_v2_storage_control_proto_msgTypes[18].OneofWrappers = []any{}
+	file_google_storage_control_v2_storage_control_proto_msgTypes[19].OneofWrappers = []any{}
+	file_google_storage_control_v2_storage_control_proto_msgTypes[21].OneofWrappers = []any{}
+	file_google_storage_control_v2_storage_control_proto_msgTypes[24].OneofWrappers = []any{}
+	file_google_storage_control_v2_storage_control_proto_msgTypes[25].OneofWrappers = []any{}
+	file_google_storage_control_v2_storage_control_proto_msgTypes[26].OneofWrappers = []any{}
+	file_google_storage_control_v2_storage_control_proto_msgTypes[27].OneofWrappers = []any{}
+	file_google_storage_control_v2_storage_control_proto_msgTypes[28].OneofWrappers = []any{}
+	file_google_storage_control_v2_storage_control_proto_msgTypes[29].OneofWrappers = []any{}
+	file_google_storage_control_v2_storage_control_proto_msgTypes[30].OneofWrappers = []any{}
+	file_google_storage_control_v2_storage_control_proto_msgTypes[32].OneofWrappers = []any{}
+	file_google_storage_control_v2_storage_control_proto_msgTypes[33].OneofWrappers = []any{}
+	file_google_storage_control_v2_storage_control_proto_msgTypes[38].OneofWrappers = []any{}
+	file_google_storage_control_v2_storage_control_proto_msgTypes[39].OneofWrappers = []any{}
+	file_google_storage_control_v2_storage_control_proto_msgTypes[41].OneofWrappers = []any{}
+	file_google_storage_control_v2_storage_control_proto_msgTypes[49].OneofWrappers = []any{}
+	file_google_storage_control_v2_storage_control_proto_msgTypes[57].OneofWrappers = []any{}
+	file_google_storage_control_v2_storage_control_proto_msgTypes[61].OneofWrappers = []any{}
+	file_google_storage_control_v2_storage_control_proto_msgTypes[67].OneofWrappers = []any{}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_google_storage_control_v2_storage_control_proto_rawDesc,
-			NumEnums:      0,
-			NumMessages:   20,
+			NumEnums:      1,
+			NumMessages:   69,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
 		GoTypes:           file_google_storage_control_v2_storage_control_proto_goTypes,
 		DependencyIndexes: file_google_storage_control_v2_storage_control_proto_depIdxs,
+		EnumInfos:         file_google_storage_control_v2_storage_control_proto_enumTypes,
 		MessageInfos:      file_google_storage_control_v2_storage_control_proto_msgTypes,
 	}.Build()
 	File_google_storage_control_v2_storage_control_proto = out.File
@@ -2518,6 +8539,58 @@
 	GetManagedFolder(ctx context.Context, in *GetManagedFolderRequest, opts ...grpc.CallOption) (*ManagedFolder, error)
 	// Retrieves a list of managed folders for a given bucket.
 	ListManagedFolders(ctx context.Context, in *ListManagedFoldersRequest, opts ...grpc.CallOption) (*ListManagedFoldersResponse, error)
+	// Permanently deletes an empty bucket.
+	DeleteBucket(ctx context.Context, in *DeleteBucketRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
+	// Returns metadata for the specified bucket.
+	GetBucket(ctx context.Context, in *GetBucketRequest, opts ...grpc.CallOption) (*Bucket, error)
+	// Creates a new bucket.
+	CreateBucket(ctx context.Context, in *CreateBucketRequest, opts ...grpc.CallOption) (*Bucket, error)
+	// Retrieves a list of buckets for a given project.
+	ListBuckets(ctx context.Context, in *ListBucketsRequest, opts ...grpc.CallOption) (*ListBucketsResponse, error)
+	// Locks retention policy on a bucket.
+	LockBucketRetentionPolicy(ctx context.Context, in *LockBucketRetentionPolicyRequest, opts ...grpc.CallOption) (*Bucket, error)
+	// Gets the IAM policy for a specified bucket.
+	// The `resource` field in the request should be
+	// `projects/_/buckets/{bucket}`.
+	GetIamPolicy(ctx context.Context, in *iampb.GetIamPolicyRequest, opts ...grpc.CallOption) (*iampb.Policy, error)
+	// Updates an IAM policy for the specified bucket.
+	// The `resource` field in the request should be
+	// `projects/_/buckets/{bucket}`.
+	SetIamPolicy(ctx context.Context, in *iampb.SetIamPolicyRequest, opts ...grpc.CallOption) (*iampb.Policy, error)
+	// Tests a set of permissions on the given bucket, object, or managed folder
+	// to see which, if any, are held by the caller.
+	// The `resource` field in the request should be
+	// `projects/_/buckets/{bucket}` for a bucket,
+	// `projects/_/buckets/{bucket}/objects/{object}` for an object, or
+	// `projects/_/buckets/{bucket}/managedFolders/{managedFolder}`
+	// for a managed folder.
+	TestIamPermissions(ctx context.Context, in *iampb.TestIamPermissionsRequest, opts ...grpc.CallOption) (*iampb.TestIamPermissionsResponse, error)
+	// Updates a bucket. Equivalent to JSON API's storage.buckets.patch method.
+	UpdateBucket(ctx context.Context, in *UpdateBucketRequest, opts ...grpc.CallOption) (*Bucket, error)
+	// Concatenates a list of existing objects into a new object in the same
+	// bucket.
+	ComposeObject(ctx context.Context, in *ComposeObjectRequest, opts ...grpc.CallOption) (*Object, error)
+	// Deletes an object and its metadata.
+	//
+	// Deletions are normally permanent when versioning is disabled or whenever
+	// the generation parameter is used. However, if soft delete is enabled for
+	// the bucket, deleted objects can be restored using RestoreObject until the
+	// soft delete retention period has passed.
+	DeleteObject(ctx context.Context, in *DeleteObjectRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
+	// Restores a soft-deleted object.
+	RestoreObject(ctx context.Context, in *RestoreObjectRequest, opts ...grpc.CallOption) (*Object, error)
+	// Retrieves an object's metadata.
+	GetObject(ctx context.Context, in *GetObjectRequest, opts ...grpc.CallOption) (*Object, error)
+	// Updates an object's metadata.
+	// Equivalent to JSON API's storage.objects.patch.
+	UpdateObject(ctx context.Context, in *UpdateObjectRequest, opts ...grpc.CallOption) (*Object, error)
+	// Retrieves a list of objects matching the criteria.
+	ListObjects(ctx context.Context, in *ListObjectsRequest, opts ...grpc.CallOption) (*ListObjectsResponse, error)
+	// Rewrites a source object to a destination object. Optionally overrides
+	// metadata.
+	RewriteObject(ctx context.Context, in *RewriteObjectRequest, opts ...grpc.CallOption) (*RewriteResponse, error)
+	// Moves the source object to the destination object in the same bucket.
+	MoveObject(ctx context.Context, in *MoveObjectRequest, opts ...grpc.CallOption) (*Object, error)
 }
 
 type storageControlClient struct {
@@ -2618,6 +8691,159 @@
 	return out, nil
 }
 
+func (c *storageControlClient) DeleteBucket(ctx context.Context, in *DeleteBucketRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+	out := new(emptypb.Empty)
+	err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/DeleteBucket", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *storageControlClient) GetBucket(ctx context.Context, in *GetBucketRequest, opts ...grpc.CallOption) (*Bucket, error) {
+	out := new(Bucket)
+	err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/GetBucket", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *storageControlClient) CreateBucket(ctx context.Context, in *CreateBucketRequest, opts ...grpc.CallOption) (*Bucket, error) {
+	out := new(Bucket)
+	err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/CreateBucket", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *storageControlClient) ListBuckets(ctx context.Context, in *ListBucketsRequest, opts ...grpc.CallOption) (*ListBucketsResponse, error) {
+	out := new(ListBucketsResponse)
+	err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/ListBuckets", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *storageControlClient) LockBucketRetentionPolicy(ctx context.Context, in *LockBucketRetentionPolicyRequest, opts ...grpc.CallOption) (*Bucket, error) {
+	out := new(Bucket)
+	err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/LockBucketRetentionPolicy", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *storageControlClient) GetIamPolicy(ctx context.Context, in *iampb.GetIamPolicyRequest, opts ...grpc.CallOption) (*iampb.Policy, error) {
+	out := new(iampb.Policy)
+	err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/GetIamPolicy", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *storageControlClient) SetIamPolicy(ctx context.Context, in *iampb.SetIamPolicyRequest, opts ...grpc.CallOption) (*iampb.Policy, error) {
+	out := new(iampb.Policy)
+	err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/SetIamPolicy", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *storageControlClient) TestIamPermissions(ctx context.Context, in *iampb.TestIamPermissionsRequest, opts ...grpc.CallOption) (*iampb.TestIamPermissionsResponse, error) {
+	out := new(iampb.TestIamPermissionsResponse)
+	err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/TestIamPermissions", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *storageControlClient) UpdateBucket(ctx context.Context, in *UpdateBucketRequest, opts ...grpc.CallOption) (*Bucket, error) {
+	out := new(Bucket)
+	err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/UpdateBucket", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *storageControlClient) ComposeObject(ctx context.Context, in *ComposeObjectRequest, opts ...grpc.CallOption) (*Object, error) {
+	out := new(Object)
+	err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/ComposeObject", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *storageControlClient) DeleteObject(ctx context.Context, in *DeleteObjectRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+	out := new(emptypb.Empty)
+	err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/DeleteObject", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *storageControlClient) RestoreObject(ctx context.Context, in *RestoreObjectRequest, opts ...grpc.CallOption) (*Object, error) {
+	out := new(Object)
+	err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/RestoreObject", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *storageControlClient) GetObject(ctx context.Context, in *GetObjectRequest, opts ...grpc.CallOption) (*Object, error) {
+	out := new(Object)
+	err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/GetObject", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *storageControlClient) UpdateObject(ctx context.Context, in *UpdateObjectRequest, opts ...grpc.CallOption) (*Object, error) {
+	out := new(Object)
+	err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/UpdateObject", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *storageControlClient) ListObjects(ctx context.Context, in *ListObjectsRequest, opts ...grpc.CallOption) (*ListObjectsResponse, error) {
+	out := new(ListObjectsResponse)
+	err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/ListObjects", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *storageControlClient) RewriteObject(ctx context.Context, in *RewriteObjectRequest, opts ...grpc.CallOption) (*RewriteResponse, error) {
+	out := new(RewriteResponse)
+	err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/RewriteObject", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *storageControlClient) MoveObject(ctx context.Context, in *MoveObjectRequest, opts ...grpc.CallOption) (*Object, error) {
+	out := new(Object)
+	err := c.cc.Invoke(ctx, "/google.storage.v2.Storage/MoveObject", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // StorageControlServer is the server API for StorageControl service.
 type StorageControlServer interface {
 	// Creates a new folder. This operation is only applicable to a hierarchical
@@ -2647,6 +8873,58 @@
 	GetManagedFolder(context.Context, *GetManagedFolderRequest) (*ManagedFolder, error)
 	// Retrieves a list of managed folders for a given bucket.
 	ListManagedFolders(context.Context, *ListManagedFoldersRequest) (*ListManagedFoldersResponse, error)
+	// Permanently deletes an empty bucket.
+	DeleteBucket(context.Context, *DeleteBucketRequest) (*emptypb.Empty, error)
+	// Returns metadata for the specified bucket.
+	GetBucket(context.Context, *GetBucketRequest) (*Bucket, error)
+	// Creates a new bucket.
+	CreateBucket(context.Context, *CreateBucketRequest) (*Bucket, error)
+	// Retrieves a list of buckets for a given project.
+	ListBuckets(context.Context, *ListBucketsRequest) (*ListBucketsResponse, error)
+	// Locks retention policy on a bucket.
+	LockBucketRetentionPolicy(context.Context, *LockBucketRetentionPolicyRequest) (*Bucket, error)
+	// Gets the IAM policy for a specified bucket.
+	// The `resource` field in the request should be
+	// `projects/_/buckets/{bucket}`.
+	GetIamPolicy(context.Context, *iampb.GetIamPolicyRequest) (*iampb.Policy, error)
+	// Updates an IAM policy for the specified bucket.
+	// The `resource` field in the request should be
+	// `projects/_/buckets/{bucket}`.
+	SetIamPolicy(context.Context, *iampb.SetIamPolicyRequest) (*iampb.Policy, error)
+	// Tests a set of permissions on the given bucket, object, or managed folder
+	// to see which, if any, are held by the caller.
+	// The `resource` field in the request should be
+	// `projects/_/buckets/{bucket}` for a bucket,
+	// `projects/_/buckets/{bucket}/objects/{object}` for an object, or
+	// `projects/_/buckets/{bucket}/managedFolders/{managedFolder}`
+	// for a managed folder.
+	TestIamPermissions(context.Context, *iampb.TestIamPermissionsRequest) (*iampb.TestIamPermissionsResponse, error)
+	// Updates a bucket. Equivalent to JSON API's storage.buckets.patch method.
+	UpdateBucket(context.Context, *UpdateBucketRequest) (*Bucket, error)
+	// Concatenates a list of existing objects into a new object in the same
+	// bucket.
+	ComposeObject(context.Context, *ComposeObjectRequest) (*Object, error)
+	// Deletes an object and its metadata.
+	//
+	// Deletions are normally permanent when versioning is disabled or whenever
+	// the generation parameter is used. However, if soft delete is enabled for
+	// the bucket, deleted objects can be restored using RestoreObject until the
+	// soft delete retention period has passed.
+	DeleteObject(context.Context, *DeleteObjectRequest) (*emptypb.Empty, error)
+	// Restores a soft-deleted object.
+	RestoreObject(context.Context, *RestoreObjectRequest) (*Object, error)
+	// Retrieves an object's metadata.
+	GetObject(context.Context, *GetObjectRequest) (*Object, error)
+	// Updates an object's metadata.
+	// Equivalent to JSON API's storage.objects.patch.
+	UpdateObject(context.Context, *UpdateObjectRequest) (*Object, error)
+	// Retrieves a list of objects matching the criteria.
+	ListObjects(context.Context, *ListObjectsRequest) (*ListObjectsResponse, error)
+	// Rewrites a source object to a destination object. Optionally overrides
+	// metadata.
+	RewriteObject(context.Context, *RewriteObjectRequest) (*RewriteResponse, error)
+	// Moves the source object to the destination object in the same bucket.
+	MoveObject(context.Context, *MoveObjectRequest) (*Object, error)
 }
 
 // UnimplementedStorageControlServer can be embedded to have forward compatible implementations.
@@ -2683,6 +8961,57 @@
 func (*UnimplementedStorageControlServer) ListManagedFolders(context.Context, *ListManagedFoldersRequest) (*ListManagedFoldersResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method ListManagedFolders not implemented")
 }
+func (*UnimplementedStorageControlServer) DeleteBucket(context.Context, *DeleteBucketRequest) (*emptypb.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DeleteBucket not implemented")
+}
+func (*UnimplementedStorageControlServer) GetBucket(context.Context, *GetBucketRequest) (*Bucket, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetBucket not implemented")
+}
+func (*UnimplementedStorageControlServer) CreateBucket(context.Context, *CreateBucketRequest) (*Bucket, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CreateBucket not implemented")
+}
+func (*UnimplementedStorageControlServer) ListBuckets(context.Context, *ListBucketsRequest) (*ListBucketsResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListBuckets not implemented")
+}
+func (*UnimplementedStorageControlServer) LockBucketRetentionPolicy(context.Context, *LockBucketRetentionPolicyRequest) (*Bucket, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method LockBucketRetentionPolicy not implemented")
+}
+func (*UnimplementedStorageControlServer) GetIamPolicy(context.Context, *iampb.GetIamPolicyRequest) (*iampb.Policy, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetIamPolicy not implemented")
+}
+func (*UnimplementedStorageControlServer) SetIamPolicy(context.Context, *iampb.SetIamPolicyRequest) (*iampb.Policy, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SetIamPolicy not implemented")
+}
+func (*UnimplementedStorageControlServer) TestIamPermissions(context.Context, *iampb.TestIamPermissionsRequest) (*iampb.TestIamPermissionsResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method TestIamPermissions not implemented")
+}
+func (*UnimplementedStorageControlServer) UpdateBucket(context.Context, *UpdateBucketRequest) (*Bucket, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UpdateBucket not implemented")
+}
+func (*UnimplementedStorageControlServer) ComposeObject(context.Context, *ComposeObjectRequest) (*Object, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ComposeObject not implemented")
+}
+func (*UnimplementedStorageControlServer) DeleteObject(context.Context, *DeleteObjectRequest) (*emptypb.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DeleteObject not implemented")
+}
+func (*UnimplementedStorageControlServer) RestoreObject(context.Context, *RestoreObjectRequest) (*Object, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method RestoreObject not implemented")
+}
+func (*UnimplementedStorageControlServer) GetObject(context.Context, *GetObjectRequest) (*Object, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetObject not implemented")
+}
+func (*UnimplementedStorageControlServer) UpdateObject(context.Context, *UpdateObjectRequest) (*Object, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UpdateObject not implemented")
+}
+func (*UnimplementedStorageControlServer) ListObjects(context.Context, *ListObjectsRequest) (*ListObjectsResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListObjects not implemented")
+}
+func (*UnimplementedStorageControlServer) RewriteObject(context.Context, *RewriteObjectRequest) (*RewriteResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method RewriteObject not implemented")
+}
+func (*UnimplementedStorageControlServer) MoveObject(context.Context, *MoveObjectRequest) (*Object, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method MoveObject not implemented")
+}
 
 func RegisterStorageControlServer(s *grpc.Server, srv StorageControlServer) {
 	s.RegisterService(&_StorageControl_serviceDesc, srv)
@@ -2868,6 +9197,312 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _StorageControl_DeleteBucket_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeleteBucketRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(StorageControlServer).DeleteBucket(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.storage.v2.Storage/DeleteBucket",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(StorageControlServer).DeleteBucket(ctx, req.(*DeleteBucketRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _StorageControl_GetBucket_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetBucketRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(StorageControlServer).GetBucket(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.storage.v2.Storage/GetBucket",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(StorageControlServer).GetBucket(ctx, req.(*GetBucketRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _StorageControl_CreateBucket_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CreateBucketRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(StorageControlServer).CreateBucket(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.storage.v2.Storage/CreateBucket",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(StorageControlServer).CreateBucket(ctx, req.(*CreateBucketRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _StorageControl_ListBuckets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListBucketsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(StorageControlServer).ListBuckets(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.storage.v2.Storage/ListBuckets",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(StorageControlServer).ListBuckets(ctx, req.(*ListBucketsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _StorageControl_LockBucketRetentionPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(LockBucketRetentionPolicyRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(StorageControlServer).LockBucketRetentionPolicy(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.storage.v2.Storage/LockBucketRetentionPolicy",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(StorageControlServer).LockBucketRetentionPolicy(ctx, req.(*LockBucketRetentionPolicyRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _StorageControl_GetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(iampb.GetIamPolicyRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(StorageControlServer).GetIamPolicy(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.storage.v2.Storage/GetIamPolicy",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(StorageControlServer).GetIamPolicy(ctx, req.(*iampb.GetIamPolicyRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _StorageControl_SetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(iampb.SetIamPolicyRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(StorageControlServer).SetIamPolicy(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.storage.v2.Storage/SetIamPolicy",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(StorageControlServer).SetIamPolicy(ctx, req.(*iampb.SetIamPolicyRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _StorageControl_TestIamPermissions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(iampb.TestIamPermissionsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(StorageControlServer).TestIamPermissions(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.storage.v2.Storage/TestIamPermissions",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(StorageControlServer).TestIamPermissions(ctx, req.(*iampb.TestIamPermissionsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _StorageControl_UpdateBucket_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UpdateBucketRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(StorageControlServer).UpdateBucket(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.storage.v2.Storage/UpdateBucket",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(StorageControlServer).UpdateBucket(ctx, req.(*UpdateBucketRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _StorageControl_ComposeObject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ComposeObjectRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(StorageControlServer).ComposeObject(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.storage.v2.Storage/ComposeObject",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(StorageControlServer).ComposeObject(ctx, req.(*ComposeObjectRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _StorageControl_DeleteObject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeleteObjectRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(StorageControlServer).DeleteObject(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.storage.v2.Storage/DeleteObject",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(StorageControlServer).DeleteObject(ctx, req.(*DeleteObjectRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _StorageControl_RestoreObject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(RestoreObjectRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(StorageControlServer).RestoreObject(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.storage.v2.Storage/RestoreObject",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(StorageControlServer).RestoreObject(ctx, req.(*RestoreObjectRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _StorageControl_GetObject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetObjectRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(StorageControlServer).GetObject(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.storage.v2.Storage/GetObject",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(StorageControlServer).GetObject(ctx, req.(*GetObjectRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _StorageControl_UpdateObject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UpdateObjectRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(StorageControlServer).UpdateObject(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.storage.v2.Storage/UpdateObject",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(StorageControlServer).UpdateObject(ctx, req.(*UpdateObjectRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _StorageControl_ListObjects_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListObjectsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(StorageControlServer).ListObjects(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.storage.v2.Storage/ListObjects",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(StorageControlServer).ListObjects(ctx, req.(*ListObjectsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _StorageControl_RewriteObject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(RewriteObjectRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(StorageControlServer).RewriteObject(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.storage.v2.Storage/RewriteObject",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(StorageControlServer).RewriteObject(ctx, req.(*RewriteObjectRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _StorageControl_MoveObject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MoveObjectRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(StorageControlServer).MoveObject(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.storage.v2.Storage/MoveObject",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(StorageControlServer).MoveObject(ctx, req.(*MoveObjectRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 var _StorageControl_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "google.storage.control.v2.StorageControl",
 	HandlerType: (*StorageControlServer)(nil),
@@ -2912,6 +9547,74 @@
 			MethodName: "ListManagedFolders",
 			Handler:    _StorageControl_ListManagedFolders_Handler,
 		},
+		{
+			MethodName: "DeleteBucket",
+			Handler:    _StorageControl_DeleteBucket_Handler,
+		},
+		{
+			MethodName: "GetBucket",
+			Handler:    _StorageControl_GetBucket_Handler,
+		},
+		{
+			MethodName: "CreateBucket",
+			Handler:    _StorageControl_CreateBucket_Handler,
+		},
+		{
+			MethodName: "ListBuckets",
+			Handler:    _StorageControl_ListBuckets_Handler,
+		},
+		{
+			MethodName: "LockBucketRetentionPolicy",
+			Handler:    _StorageControl_LockBucketRetentionPolicy_Handler,
+		},
+		{
+			MethodName: "GetIamPolicy",
+			Handler:    _StorageControl_GetIamPolicy_Handler,
+		},
+		{
+			MethodName: "SetIamPolicy",
+			Handler:    _StorageControl_SetIamPolicy_Handler,
+		},
+		{
+			MethodName: "TestIamPermissions",
+			Handler:    _StorageControl_TestIamPermissions_Handler,
+		},
+		{
+			MethodName: "UpdateBucket",
+			Handler:    _StorageControl_UpdateBucket_Handler,
+		},
+		{
+			MethodName: "ComposeObject",
+			Handler:    _StorageControl_ComposeObject_Handler,
+		},
+		{
+			MethodName: "DeleteObject",
+			Handler:    _StorageControl_DeleteObject_Handler,
+		},
+		{
+			MethodName: "RestoreObject",
+			Handler:    _StorageControl_RestoreObject_Handler,
+		},
+		{
+			MethodName: "GetObject",
+			Handler:    _StorageControl_GetObject_Handler,
+		},
+		{
+			MethodName: "UpdateObject",
+			Handler:    _StorageControl_UpdateObject_Handler,
+		},
+		{
+			MethodName: "ListObjects",
+			Handler:    _StorageControl_ListObjects_Handler,
+		},
+		{
+			MethodName: "RewriteObject",
+			Handler:    _StorageControl_RewriteObject_Handler,
+		},
+		{
+			MethodName: "MoveObject",
+			Handler:    _StorageControl_MoveObject_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "google/storage/control/v2/storage_control.proto",
diff --git a/storage/control/apiv2/doc.go b/storage/control/apiv2/doc.go
index 61ac705..b227267 100755
--- a/storage/control/apiv2/doc.go
+++ b/storage/control/apiv2/doc.go
@@ -60,11 +60,11 @@
 //
 // The following is an example of making an API call with the newly created client, mentioned above.
 //
-//	req := &controlpb.CreateFolderRequest{
+//	req := &controlpb.ComposeObjectRequest{
 //		// TODO: Fill request struct fields.
-//		// See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#CreateFolderRequest.
+//		// See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#ComposeObjectRequest.
 //	}
-//	resp, err := c.CreateFolder(ctx, req)
+//	resp, err := c.ComposeObject(ctx, req)
 //	if err != nil {
 //		// TODO: Handle error.
 //	}
diff --git a/storage/control/apiv2/gapic_metadata.json b/storage/control/apiv2/gapic_metadata.json
index 8669fbc..412a66a 100644
--- a/storage/control/apiv2/gapic_metadata.json
+++ b/storage/control/apiv2/gapic_metadata.json
@@ -10,6 +10,16 @@
         "grpc": {
           "libraryClient": "StorageControlClient",
           "rpcs": {
+            "ComposeObject": {
+              "methods": [
+                "ComposeObject"
+              ]
+            },
+            "CreateBucket": {
+              "methods": [
+                "CreateBucket"
+              ]
+            },
             "CreateFolder": {
               "methods": [
                 "CreateFolder"
@@ -20,6 +30,11 @@
                 "CreateManagedFolder"
               ]
             },
+            "DeleteBucket": {
+              "methods": [
+                "DeleteBucket"
+              ]
+            },
             "DeleteFolder": {
               "methods": [
                 "DeleteFolder"
@@ -30,21 +45,46 @@
                 "DeleteManagedFolder"
               ]
             },
+            "DeleteObject": {
+              "methods": [
+                "DeleteObject"
+              ]
+            },
+            "GetBucket": {
+              "methods": [
+                "GetBucket"
+              ]
+            },
             "GetFolder": {
               "methods": [
                 "GetFolder"
               ]
             },
+            "GetIamPolicy": {
+              "methods": [
+                "GetIamPolicy"
+              ]
+            },
             "GetManagedFolder": {
               "methods": [
                 "GetManagedFolder"
               ]
             },
+            "GetObject": {
+              "methods": [
+                "GetObject"
+              ]
+            },
             "GetStorageLayout": {
               "methods": [
                 "GetStorageLayout"
               ]
             },
+            "ListBuckets": {
+              "methods": [
+                "ListBuckets"
+              ]
+            },
             "ListFolders": {
               "methods": [
                 "ListFolders"
@@ -55,10 +95,55 @@
                 "ListManagedFolders"
               ]
             },
+            "ListObjects": {
+              "methods": [
+                "ListObjects"
+              ]
+            },
+            "LockBucketRetentionPolicy": {
+              "methods": [
+                "LockBucketRetentionPolicy"
+              ]
+            },
+            "MoveObject": {
+              "methods": [
+                "MoveObject"
+              ]
+            },
             "RenameFolder": {
               "methods": [
                 "RenameFolder"
               ]
+            },
+            "RestoreObject": {
+              "methods": [
+                "RestoreObject"
+              ]
+            },
+            "RewriteObject": {
+              "methods": [
+                "RewriteObject"
+              ]
+            },
+            "SetIamPolicy": {
+              "methods": [
+                "SetIamPolicy"
+              ]
+            },
+            "TestIamPermissions": {
+              "methods": [
+                "TestIamPermissions"
+              ]
+            },
+            "UpdateBucket": {
+              "methods": [
+                "UpdateBucket"
+              ]
+            },
+            "UpdateObject": {
+              "methods": [
+                "UpdateObject"
+              ]
             }
           }
         }
diff --git a/storage/control/apiv2/helpers.go b/storage/control/apiv2/helpers.go
index 13d69ee..d373651 100755
--- a/storage/control/apiv2/helpers.go
+++ b/storage/control/apiv2/helpers.go
@@ -18,10 +18,16 @@
 
 import (
 	"context"
+	"log/slog"
 
+	"github.com/googleapis/gax-go/v2/internallog/grpclog"
 	"google.golang.org/api/option"
+	"google.golang.org/grpc"
+	"google.golang.org/protobuf/proto"
 )
 
+const serviceName = "storage.googleapis.com"
+
 // For more information on implementing a client constructor hook, see
 // https://github.com/googleapis/google-cloud-go/wiki/Customizing-constructors.
 type clientHookParams struct{}
@@ -46,3 +52,14 @@
 		"https://www.googleapis.com/auth/devstorage.read_write",
 	}
 }
+
+func executeRPC[I proto.Message, O proto.Message](ctx context.Context, fn func(context.Context, I, ...grpc.CallOption) (O, error), req I, opts []grpc.CallOption, logger *slog.Logger, rpc string) (O, error) {
+	var zero O
+	logger.DebugContext(ctx, "api request", "serviceName", serviceName, "rpcName", rpc, "request", grpclog.ProtoMessageRequest(ctx, req))
+	resp, err := fn(ctx, req, opts...)
+	if err != nil {
+		return zero, err
+	}
+	logger.DebugContext(ctx, "api response", "serviceName", serviceName, "rpcName", rpc, "response", grpclog.ProtoMessageResponse(resp))
+	return resp, err
+}
diff --git a/storage/control/apiv2/internal/merge_storage_v2_into_storage_control.patch b/storage/control/apiv2/internal/merge_storage_v2_into_storage_control.patch
new file mode 100644
index 0000000..5fc94c6
--- /dev/null
+++ b/storage/control/apiv2/internal/merge_storage_v2_into_storage_control.patch
@@ -0,0 +1,1843 @@
+diff --git a/google/storage/control/v2/BUILD.bazel b/google/storage/control/v2/BUILD.bazel
+index 3fa0b64c8..dc658dc01 100644
+--- a/google/storage/control/v2/BUILD.bazel
++++ b/google/storage/control/v2/BUILD.bazel
+@@ -29,9 +29,14 @@ proto_library(
+         "//google/api:field_info_proto",
+         "//google/api:resource_proto",
+         "//google/api:routing_proto",
++        "//google/iam/v1:iam_policy_proto",
++        "//google/iam/v1:policy_proto",
++        "//google/type:date_proto",
+         "//google/longrunning:operations_proto",
++        "@com_google_protobuf//:duration_proto",
+         "@com_google_protobuf//:empty_proto",
+         "@com_google_protobuf//:timestamp_proto",
++        "@com_google_protobuf//:field_mask_proto",
+     ],
+ )
+
+@@ -122,6 +127,8 @@ go_proto_library(
+     deps = [
+         "//google/api:annotations_go_proto",
+         "//google/longrunning:longrunning_go_proto",
++        "//google/iam/v1:iam_go_proto",
++        "//google/type:date_go_proto",
+     ],
+ )
+
+@@ -138,6 +145,7 @@ go_gapic_library(
+     deps = [
+         ":control_go_proto",
+         "//google/longrunning:longrunning_go_proto",
++        "//google/iam/v1:iam_go_proto",
+         "@com_google_cloud_go_longrunning//:go_default_library",
+         "@com_google_cloud_go_longrunning//autogen:go_default_library",
+     ],
+diff --git a/google/storage/control/v2/storage_control.proto b/google/storage/control/v2/storage_control.proto
+index 28551e3ef..9a20b2cfe 100644
+--- a/google/storage/control/v2/storage_control.proto
++++ b/google/storage/control/v2/storage_control.proto
+@@ -24,6 +24,11 @@ import "google/api/routing.proto";
+ import "google/longrunning/operations.proto";
+ import "google/protobuf/empty.proto";
+ import "google/protobuf/timestamp.proto";
++import "google/protobuf/duration.proto";
++import "google/protobuf/field_mask.proto";
++import "google/iam/v1/iam_policy.proto";
++import "google/iam/v1/policy.proto";
++import "google/type/date.proto";
+
+ option csharp_namespace = "Google.Cloud.Storage.Control.V2";
+ option go_package = "cloud.google.com/go/storage/control/apiv2/controlpb;controlpb";
+@@ -158,6 +163,184 @@ service StorageControl {
+     };
+     option (google.api.method_signature) = "parent";
+   }
++
++  // Permanently deletes an empty bucket.
++  rpc DeleteBucket(DeleteBucketRequest) returns (google.protobuf.Empty) {
++    option (google.api.routing) = {
++      routing_parameters { field: "name" path_template: "{bucket=**}" }
++    };
++    option (google.api.method_signature) = "name";
++  }
++
++  // Returns metadata for the specified bucket.
++  rpc GetBucket(GetBucketRequest) returns (Bucket) {
++    option (google.api.routing) = {
++      routing_parameters { field: "name" path_template: "{bucket=**}" }
++    };
++    option (google.api.method_signature) = "name";
++  }
++
++  // Creates a new bucket.
++  rpc CreateBucket(CreateBucketRequest) returns (Bucket) {
++    option (google.api.routing) = {
++      routing_parameters { field: "parent" path_template: "{project=**}" }
++      routing_parameters {
++        field: "bucket.project"
++        path_template: "{project=**}"
++      }
++    };
++    option (google.api.method_signature) = "parent,bucket,bucket_id";
++  }
++
++  // Retrieves a list of buckets for a given project.
++  rpc ListBuckets(ListBucketsRequest) returns (ListBucketsResponse) {
++    option (google.api.routing) = {
++      routing_parameters { field: "parent" path_template: "{project=**}" }
++    };
++    option (google.api.method_signature) = "parent";
++  }
++
++  // Locks retention policy on a bucket.
++  rpc LockBucketRetentionPolicy(LockBucketRetentionPolicyRequest)
++      returns (Bucket) {
++    option (google.api.routing) = {
++      routing_parameters { field: "bucket" path_template: "{bucket=**}" }
++    };
++    option (google.api.method_signature) = "bucket";
++  }
++
++  // Gets the IAM policy for a specified bucket.
++  // The `resource` field in the request should be
++  // `projects/_/buckets/{bucket}`.
++  rpc GetIamPolicy(google.iam.v1.GetIamPolicyRequest)
++      returns (google.iam.v1.Policy) {
++    option (google.api.routing) = {
++      routing_parameters { field: "resource" path_template: "{bucket=**}" }
++    };
++    option (google.api.method_signature) = "resource";
++  }
++
++  // Updates an IAM policy for the specified bucket.
++  // The `resource` field in the request should be
++  // `projects/_/buckets/{bucket}`.
++  rpc SetIamPolicy(google.iam.v1.SetIamPolicyRequest)
++      returns (google.iam.v1.Policy) {
++    option (google.api.routing) = {
++      routing_parameters { field: "resource" path_template: "{bucket=**}" }
++    };
++    option (google.api.method_signature) = "resource,policy";
++  }
++
++  // Tests a set of permissions on the given bucket, object, or managed folder
++  // to see which, if any, are held by the caller.
++  // The `resource` field in the request should be
++  // `projects/_/buckets/{bucket}` for a bucket,
++  // `projects/_/buckets/{bucket}/objects/{object}` for an object, or
++  // `projects/_/buckets/{bucket}/managedFolders/{managedFolder}`
++  // for a managed folder.
++  rpc TestIamPermissions(google.iam.v1.TestIamPermissionsRequest)
++      returns (google.iam.v1.TestIamPermissionsResponse) {
++    option (google.api.routing) = {
++      routing_parameters { field: "resource" path_template: "{bucket=**}" }
++      routing_parameters {
++        field: "resource"
++        path_template: "{bucket=projects/*/buckets/*}/objects/**"
++      }
++      routing_parameters {
++        field: "resource"
++        path_template: "{bucket=projects/*/buckets/*}/managedFolders/**"
++      }
++    };
++    option (google.api.method_signature) = "resource,permissions";
++  }
++
++  // Updates a bucket. Equivalent to JSON API's storage.buckets.patch method.
++  rpc UpdateBucket(UpdateBucketRequest) returns (Bucket) {
++    option (google.api.routing) = {
++      routing_parameters { field: "bucket.name" path_template: "{bucket=**}" }
++    };
++    option (google.api.method_signature) = "bucket,update_mask";
++  }
++
++  // Concatenates a list of existing objects into a new object in the same
++  // bucket.
++  rpc ComposeObject(ComposeObjectRequest) returns (Object) {
++    option (google.api.routing) = {
++      routing_parameters {
++        field: "destination.bucket"
++        path_template: "{bucket=**}"
++      }
++    };
++  }
++
++  // Deletes an object and its metadata.
++  //
++  // Deletions are normally permanent when versioning is disabled or whenever
++  // the generation parameter is used. However, if soft delete is enabled for
++  // the bucket, deleted objects can be restored using RestoreObject until the
++  // soft delete retention period has passed.
++  rpc DeleteObject(DeleteObjectRequest) returns (google.protobuf.Empty) {
++    option (google.api.routing) = {
++      routing_parameters { field: "bucket" path_template: "{bucket=**}" }
++    };
++    option (google.api.method_signature) = "bucket,object";
++    option (google.api.method_signature) = "bucket,object,generation";
++  }
++
++  // Restores a soft-deleted object.
++  rpc RestoreObject(RestoreObjectRequest) returns (Object) {
++    option (google.api.routing) = {
++      routing_parameters { field: "bucket" path_template: "{bucket=**}" }
++    };
++    option (google.api.method_signature) = "bucket,object,generation";
++  }
++
++  // Retrieves an object's metadata.
++  rpc GetObject(GetObjectRequest) returns (Object) {
++    option (google.api.routing) = {
++      routing_parameters { field: "bucket" path_template: "{bucket=**}" }
++    };
++    option (google.api.method_signature) = "bucket,object";
++    option (google.api.method_signature) = "bucket,object,generation";
++  }
++
++  // Updates an object's metadata.
++  // Equivalent to JSON API's storage.objects.patch.
++  rpc UpdateObject(UpdateObjectRequest) returns (Object) {
++    option (google.api.routing) = {
++      routing_parameters { field: "object.bucket" path_template: "{bucket=**}" }
++    };
++    option (google.api.method_signature) = "object,update_mask";
++  }
++
++  // Retrieves a list of objects matching the criteria.
++  rpc ListObjects(ListObjectsRequest) returns (ListObjectsResponse) {
++    option (google.api.routing) = {
++      routing_parameters { field: "parent" path_template: "{bucket=**}" }
++    };
++    option (google.api.method_signature) = "parent";
++  }
++
++  // Rewrites a source object to a destination object. Optionally overrides
++  // metadata.
++  rpc RewriteObject(RewriteObjectRequest) returns (RewriteResponse) {
++    option (google.api.routing) = {
++      routing_parameters { field: "source_bucket" }
++      routing_parameters {
++        field: "destination_bucket"
++        path_template: "{bucket=**}"
++      }
++    };
++  }
++
++  // Moves the source object to the destination object in the same bucket.
++  rpc MoveObject(MoveObjectRequest) returns (Object) {
++    option (google.api.routing) = {
++      routing_parameters { field: "bucket" path_template: "{bucket=**}" }
++    };
++    option (google.api.method_signature) =
++        "bucket,source_object,destination_object";
++  }
+ }
+
+ // Contains information about a pending rename operation.
+@@ -642,3 +825,1605 @@ message ListManagedFoldersResponse {
+   // this value in a subsequent request to return the next page of results.
+   string next_page_token = 2;
+ }
++
++// Request message for DeleteBucket.
++message DeleteBucketRequest {
++  // Required. Name of a bucket to delete.
++  string name = 1 [
++    (google.api.field_behavior) = REQUIRED,
++    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
++  ];
++
++  // If set, only deletes the bucket if its metageneration matches this value.
++  optional int64 if_metageneration_match = 2;
++
++  // If set, only deletes the bucket if its metageneration does not match this
++  // value.
++  optional int64 if_metageneration_not_match = 3;
++}
++
++// Request message for GetBucket.
++message GetBucketRequest {
++  // Required. Name of a bucket.
++  string name = 1 [
++    (google.api.field_behavior) = REQUIRED,
++    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
++  ];
++
++  // If set, and if the bucket's current metageneration does not match the
++  // specified value, the request will return an error.
++  optional int64 if_metageneration_match = 2;
++
++  // If set, and if the bucket's current metageneration matches the specified
++  // value, the request will return an error.
++  optional int64 if_metageneration_not_match = 3;
++
++  // Mask specifying which fields to read.
++  // A "*" field may be used to indicate all fields.
++  // If no mask is specified, will default to all fields.
++  optional google.protobuf.FieldMask read_mask = 5;
++}
++
++// Request message for CreateBucket.
++message CreateBucketRequest {
++  // Required. The project to which this bucket will belong.
++  string parent = 1 [
++    (google.api.field_behavior) = REQUIRED,
++    (google.api.resource_reference) = {
++      child_type: "storage.googleapis.com/Bucket"
++    }
++  ];
++
++  // Properties of the new bucket being inserted.
++  // The name of the bucket is specified in the `bucket_id` field. Populating
++  // `bucket.name` field will result in an error.
++  // The project of the bucket must be specified in the `bucket.project` field.
++  // This field must be in `projects/{projectIdentifier}` format,
++  // {projectIdentifier} can be the project ID or project number. The `parent`
++  // field must be either empty or `projects/_`.
++  Bucket bucket = 2;
++
++  // Required. The ID to use for this bucket, which will become the final
++  // component of the bucket's resource name. For example, the value `foo` might
++  // result in a bucket with the name `projects/123456/buckets/foo`.
++  string bucket_id = 3 [(google.api.field_behavior) = REQUIRED];
++
++  // Apply a predefined set of access controls to this bucket.
++  // Valid values are "authenticatedRead", "private", "projectPrivate",
++  // "publicRead", or "publicReadWrite".
++  string predefined_acl = 6;
++
++  // Apply a predefined set of default object access controls to this bucket.
++  // Valid values are "authenticatedRead", "bucketOwnerFullControl",
++  // "bucketOwnerRead", "private", "projectPrivate", or "publicRead".
++  string predefined_default_object_acl = 7;
++}
++
++// Request message for ListBuckets.
++message ListBucketsRequest {
++  // Required. The project whose buckets we are listing.
++  string parent = 1 [
++    (google.api.field_behavior) = REQUIRED,
++    (google.api.resource_reference) = {
++      child_type: "storage.googleapis.com/Bucket"
++    }
++  ];
++
++  // Maximum number of buckets to return in a single response. The service will
++  // use this parameter or 1,000 items, whichever is smaller. If "acl" is
++  // present in the read_mask, the service will use this parameter of 200 items,
++  // whichever is smaller.
++  int32 page_size = 2;
++
++  // A previously-returned page token representing part of the larger set of
++  // results to view.
++  string page_token = 3;
++
++  // Filter results to buckets whose names begin with this prefix.
++  string prefix = 4;
++
++  // Mask specifying which fields to read from each result.
++  // If no mask is specified, will default to all fields except items.owner,
++  // items.acl, and items.default_object_acl.
++  // * may be used to mean "all fields".
++  optional google.protobuf.FieldMask read_mask = 5;
++}
++
++// The result of a call to Buckets.ListBuckets
++message ListBucketsResponse {
++  // The list of items.
++  repeated Bucket buckets = 1;
++
++  // The continuation token, used to page through large result sets. Provide
++  // this value in a subsequent request to return the next page of results.
++  string next_page_token = 2;
++}
++
++// Request message for LockBucketRetentionPolicyRequest.
++message LockBucketRetentionPolicyRequest {
++  // Required. Name of a bucket.
++  string bucket = 1 [
++    (google.api.field_behavior) = REQUIRED,
++    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
++  ];
++
++  // Required. Makes the operation conditional on whether bucket's current
++  // metageneration matches the given value. Must be positive.
++  int64 if_metageneration_match = 2 [(google.api.field_behavior) = REQUIRED];
++}
++
++// Request for UpdateBucket method.
++message UpdateBucketRequest {
++  // Required. The bucket to update.
++  // The bucket's `name` field will be used to identify the bucket.
++  Bucket bucket = 1 [(google.api.field_behavior) = REQUIRED];
++
++  // If set, will only modify the bucket if its metageneration matches this
++  // value.
++  optional int64 if_metageneration_match = 2;
++
++  // If set, will only modify the bucket if its metageneration does not match
++  // this value.
++  optional int64 if_metageneration_not_match = 3;
++
++  // Apply a predefined set of access controls to this bucket.
++  // Valid values are "authenticatedRead", "private", "projectPrivate",
++  // "publicRead", or "publicReadWrite".
++  string predefined_acl = 8;
++
++  // Apply a predefined set of default object access controls to this bucket.
++  // Valid values are "authenticatedRead", "bucketOwnerFullControl",
++  // "bucketOwnerRead", "private", "projectPrivate", or "publicRead".
++  string predefined_default_object_acl = 9;
++
++  // Required. List of fields to be updated.
++  //
++  // To specify ALL fields, equivalent to the JSON API's "update" function,
++  // specify a single field with the value `*`. Note: not recommended. If a new
++  // field is introduced at a later time, an older client updating with the `*`
++  // may accidentally reset the new field's value.
++  //
++  // Not specifying any fields is an error.
++  google.protobuf.FieldMask update_mask = 6
++      [(google.api.field_behavior) = REQUIRED];
++}
++
++// Request message for ComposeObject.
++message ComposeObjectRequest {
++  // Description of a source object for a composition request.
++  message SourceObject {
++    // Preconditions for a source object of a composition request.
++    message ObjectPreconditions {
++      // Only perform the composition if the generation of the source object
++      // that would be used matches this value.  If this value and a generation
++      // are both specified, they must be the same value or the call will fail.
++      optional int64 if_generation_match = 1;
++    }
++
++    // Required. The source object's name. All source objects must reside in the
++    // same bucket.
++    string name = 1 [(google.api.field_behavior) = REQUIRED];
++
++    // The generation of this object to use as the source.
++    int64 generation = 2;
++
++    // Conditions that must be met for this operation to execute.
++    ObjectPreconditions object_preconditions = 3;
++  }
++
++  // Required. Properties of the resulting object.
++  Object destination = 1 [(google.api.field_behavior) = REQUIRED];
++
++  // The list of source objects that will be concatenated into a single object.
++  repeated SourceObject source_objects = 2;
++
++  // Apply a predefined set of access controls to the destination object.
++  // Valid values are "authenticatedRead", "bucketOwnerFullControl",
++  // "bucketOwnerRead", "private", "projectPrivate", or "publicRead".
++  string destination_predefined_acl = 9;
++
++  // Makes the operation conditional on whether the object's current generation
++  // matches the given value. Setting to 0 makes the operation succeed only if
++  // there are no live versions of the object.
++  optional int64 if_generation_match = 4;
++
++  // Makes the operation conditional on whether the object's current
++  // metageneration matches the given value.
++  optional int64 if_metageneration_match = 5;
++
++  // Resource name of the Cloud KMS key, of the form
++  // `projects/my-project/locations/my-location/keyRings/my-kr/cryptoKeys/my-key`,
++  // that will be used to encrypt the object. Overrides the object
++  // metadata's `kms_key_name` value, if any.
++  string kms_key = 6 [(google.api.resource_reference) = {
++    type: "cloudkms.googleapis.com/CryptoKey"
++  }];
++
++  // A set of parameters common to Storage API requests concerning an object.
++  CommonObjectRequestParams common_object_request_params = 7;
++
++  // The checksums of the complete object. This will be validated against the
++  // combined checksums of the component objects.
++  ObjectChecksums object_checksums = 10;
++}
++
++// Message for deleting an object.
++// `bucket` and `object` **must** be set.
++message DeleteObjectRequest {
++  // Required. Name of the bucket in which the object resides.
++  string bucket = 1 [
++    (google.api.field_behavior) = REQUIRED,
++    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
++  ];
++
++  // Required. The name of the finalized object to delete.
++  // Note: If you want to delete an unfinalized resumable upload please use
++  // `CancelResumableWrite`.
++  string object = 2 [(google.api.field_behavior) = REQUIRED];
++
++  // If present, permanently deletes a specific revision of this object (as
++  // opposed to the latest version, the default).
++  int64 generation = 4;
++
++  // Makes the operation conditional on whether the object's current generation
++  // matches the given value. Setting to 0 makes the operation succeed only if
++  // there are no live versions of the object.
++  optional int64 if_generation_match = 5;
++
++  // Makes the operation conditional on whether the object's live generation
++  // does not match the given value. If no live object exists, the precondition
++  // fails. Setting to 0 makes the operation succeed only if there is a live
++  // version of the object.
++  optional int64 if_generation_not_match = 6;
++
++  // Makes the operation conditional on whether the object's current
++  // metageneration matches the given value.
++  optional int64 if_metageneration_match = 7;
++
++  // Makes the operation conditional on whether the object's current
++  // metageneration does not match the given value.
++  optional int64 if_metageneration_not_match = 8;
++
++  // A set of parameters common to Storage API requests concerning an object.
++  CommonObjectRequestParams common_object_request_params = 10;
++}
++
++// Message for restoring an object.
++// `bucket`, `object`, and `generation` **must** be set.
++message RestoreObjectRequest {
++  // Required. Name of the bucket in which the object resides.
++  string bucket = 1 [
++    (google.api.field_behavior) = REQUIRED,
++    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
++  ];
++
++  // Required. The name of the object to restore.
++  string object = 2 [(google.api.field_behavior) = REQUIRED];
++
++  // Required. The specific revision of the object to restore.
++  int64 generation = 3 [(google.api.field_behavior) = REQUIRED];
++
++  // Optional. Restore token used to differentiate soft-deleted objects with the
++  // same name and generation. Only applicable for hierarchical namespace
++  // buckets. This parameter is optional, and is only required in the rare case
++  // when there are multiple soft-deleted objects with the same name and
++  // generation.
++  string restore_token = 11 [(google.api.field_behavior) = OPTIONAL];
++
++  // Makes the operation conditional on whether the object's current generation
++  // matches the given value. Setting to 0 makes the operation succeed only if
++  // there are no live versions of the object.
++  optional int64 if_generation_match = 4;
++
++  // Makes the operation conditional on whether the object's live generation
++  // does not match the given value. If no live object exists, the precondition
++  // fails. Setting to 0 makes the operation succeed only if there is a live
++  // version of the object.
++  optional int64 if_generation_not_match = 5;
++
++  // Makes the operation conditional on whether the object's current
++  // metageneration matches the given value.
++  optional int64 if_metageneration_match = 6;
++
++  // Makes the operation conditional on whether the object's current
++  // metageneration does not match the given value.
++  optional int64 if_metageneration_not_match = 7;
++
++  // If false or unset, the bucket's default object ACL will be used.
++  // If true, copy the source object's access controls.
++  // Return an error if bucket has UBLA enabled.
++  optional bool copy_source_acl = 9;
++
++  // A set of parameters common to Storage API requests concerning an object.
++  CommonObjectRequestParams common_object_request_params = 8;
++}
++
++// Request message for GetObject.
++message GetObjectRequest {
++  // Required. Name of the bucket in which the object resides.
++  string bucket = 1 [
++    (google.api.field_behavior) = REQUIRED,
++    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
++  ];
++
++  // Required. Name of the object.
++  string object = 2 [(google.api.field_behavior) = REQUIRED];
++
++  // If present, selects a specific revision of this object (as opposed to the
++  // latest version, the default).
++  int64 generation = 3;
++
++  // If true, return the soft-deleted version of this object.
++  optional bool soft_deleted = 11;
++
++  // Makes the operation conditional on whether the object's current generation
++  // matches the given value. Setting to 0 makes the operation succeed only if
++  // there are no live versions of the object.
++  optional int64 if_generation_match = 4;
++
++  // Makes the operation conditional on whether the object's live generation
++  // does not match the given value. If no live object exists, the precondition
++  // fails. Setting to 0 makes the operation succeed only if there is a live
++  // version of the object.
++  optional int64 if_generation_not_match = 5;
++
++  // Makes the operation conditional on whether the object's current
++  // metageneration matches the given value.
++  optional int64 if_metageneration_match = 6;
++
++  // Makes the operation conditional on whether the object's current
++  // metageneration does not match the given value.
++  optional int64 if_metageneration_not_match = 7;
++
++  // A set of parameters common to Storage API requests concerning an object.
++  CommonObjectRequestParams common_object_request_params = 8;
++
++  // Mask specifying which fields to read.
++  // If no mask is specified, will default to all fields except metadata.acl and
++  // metadata.owner.
++  // * may be used to mean "all fields".
++  optional google.protobuf.FieldMask read_mask = 10;
++
++  // Optional. Restore token used to differentiate soft-deleted objects with the
++  // same name and generation. Only applicable for hierarchical namespace
++  // buckets and if soft_deleted is set to true. This parameter is optional, and
++  // is only required in the rare case when there are multiple soft-deleted
++  // objects with the same name and generation.
++  string restore_token = 12 [(google.api.field_behavior) = OPTIONAL];
++}
++
++// Request message for ListObjects.
++message ListObjectsRequest {
++  // Required. Name of the bucket in which to look for objects.
++  string parent = 1 [
++    (google.api.field_behavior) = REQUIRED,
++    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
++  ];
++
++  // Maximum number of `items` plus `prefixes` to return
++  // in a single page of responses. As duplicate `prefixes` are
++  // omitted, fewer total results may be returned than requested. The service
++  // will use this parameter or 1,000 items, whichever is smaller.
++  int32 page_size = 2;
++
++  // A previously-returned page token representing part of the larger set of
++  // results to view.
++  string page_token = 3;
++
++  // If set, returns results in a directory-like mode. `items` will contain
++  // only objects whose names, aside from the `prefix`, do not
++  // contain `delimiter`. Objects whose names, aside from the
++  // `prefix`, contain `delimiter` will have their name,
++  // truncated after the `delimiter`, returned in
++  // `prefixes`. Duplicate `prefixes` are omitted.
++  string delimiter = 4;
++
++  // If true, objects that end in exactly one instance of `delimiter`
++  // will have their metadata included in `items` in addition to
++  // `prefixes`.
++  bool include_trailing_delimiter = 5;
++
++  // Filter results to objects whose names begin with this prefix.
++  string prefix = 6;
++
++  // If `true`, lists all versions of an object as distinct results.
++  // For more information, see
++  // [Object
++  // Versioning](https://cloud.google.com/storage/docs/object-versioning).
++  bool versions = 7;
++
++  // Mask specifying which fields to read from each result.
++  // If no mask is specified, will default to all fields except items.acl and
++  // items.owner.
++  // * may be used to mean "all fields".
++  optional google.protobuf.FieldMask read_mask = 8;
++
++  // Optional. Filter results to objects whose names are lexicographically equal
++  // to or after lexicographic_start. If lexicographic_end is also set, the
++  // objects listed have names between lexicographic_start (inclusive) and
++  // lexicographic_end (exclusive).
++  string lexicographic_start = 10 [(google.api.field_behavior) = OPTIONAL];
++
++  // Optional. Filter results to objects whose names are lexicographically
++  // before lexicographic_end. If lexicographic_start is also set, the objects
++  // listed have names between lexicographic_start (inclusive) and
++  // lexicographic_end (exclusive).
++  string lexicographic_end = 11 [(google.api.field_behavior) = OPTIONAL];
++
++  // Optional. If true, only list all soft-deleted versions of the object.
++  // Soft delete policy is required to set this option.
++  bool soft_deleted = 12 [(google.api.field_behavior) = OPTIONAL];
++
++  // Optional. If true, will also include folders and managed folders (besides
++  // objects) in the returned `prefixes`. Requires `delimiter` to be set to '/'.
++  bool include_folders_as_prefixes = 13
++      [(google.api.field_behavior) = OPTIONAL];
++
++  // Optional. Filter results to objects and prefixes that match this glob
++  // pattern. See [List Objects Using
++  // Glob](https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-objects-and-prefixes-using-glob)
++  // for the full syntax.
++  string match_glob = 14 [(google.api.field_behavior) = OPTIONAL];
++}
++
++// Request message for RewriteObject.
++// If the source object is encrypted using a Customer-Supplied Encryption Key
++// the key information must be provided in the copy_source_encryption_algorithm,
++// copy_source_encryption_key_bytes, and copy_source_encryption_key_sha256_bytes
++// fields. If the destination object should be encrypted the keying information
++// should be provided in the encryption_algorithm, encryption_key_bytes, and
++// encryption_key_sha256_bytes fields of the
++// common_object_request_params.customer_encryption field.
++message RewriteObjectRequest {
++  // Required. Immutable. The name of the destination object.
++  // See the
++  // [Naming Guidelines](https://cloud.google.com/storage/docs/objects#naming).
++  // Example: `test.txt`
++  // The `name` field by itself does not uniquely identify a Cloud Storage
++  // object. A Cloud Storage object is uniquely identified by the tuple of
++  // (bucket, object, generation).
++  string destination_name = 24 [
++    (google.api.field_behavior) = REQUIRED,
++    (google.api.field_behavior) = IMMUTABLE
++  ];
++
++  // Required. Immutable. The name of the bucket containing the destination
++  // object.
++  string destination_bucket = 25 [
++    (google.api.field_behavior) = REQUIRED,
++    (google.api.field_behavior) = IMMUTABLE,
++    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
++  ];
++
++  // The name of the Cloud KMS key that will be used to encrypt the destination
++  // object. The Cloud KMS key must be located in same location as the object.
++  // If the parameter is not specified, the request uses the destination
++  // bucket's default encryption key, if any, or else the Google-managed
++  // encryption key.
++  string destination_kms_key = 27 [(google.api.resource_reference) = {
++    type: "cloudkms.googleapis.com/CryptoKey"
++  }];
++
++  // Properties of the destination, post-rewrite object.
++  // The `name`, `bucket` and `kms_key` fields must not be populated (these
++  // values are specified in the `destination_name`, `destination_bucket`, and
++  // `destination_kms_key` fields).
++  // If `destination` is present it will be used to construct the destination
++  // object's metadata; otherwise the destination object's metadata will be
++  // copied from the source object.
++  Object destination = 1;
++
++  // Required. Name of the bucket in which to find the source object.
++  string source_bucket = 2 [
++    (google.api.field_behavior) = REQUIRED,
++    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
++  ];
++
++  // Required. Name of the source object.
++  string source_object = 3 [(google.api.field_behavior) = REQUIRED];
++
++  // If present, selects a specific revision of the source object (as opposed to
++  // the latest version, the default).
++  int64 source_generation = 4;
++
++  // Include this field (from the previous rewrite response) on each rewrite
++  // request after the first one, until the rewrite response 'done' flag is
++  // true. Calls that provide a rewriteToken can omit all other request fields,
++  // but if included those fields must match the values provided in the first
++  // rewrite request.
++  string rewrite_token = 5;
++
++  // Apply a predefined set of access controls to the destination object.
++  // Valid values are "authenticatedRead", "bucketOwnerFullControl",
++  // "bucketOwnerRead", "private", "projectPrivate", or "publicRead".
++  string destination_predefined_acl = 28;
++
++  // Makes the operation conditional on whether the object's current generation
++  // matches the given value. Setting to 0 makes the operation succeed only if
++  // there are no live versions of the object.
++  optional int64 if_generation_match = 7;
++
++  // Makes the operation conditional on whether the object's live generation
++  // does not match the given value. If no live object exists, the precondition
++  // fails. Setting to 0 makes the operation succeed only if there is a live
++  // version of the object.
++  optional int64 if_generation_not_match = 8;
++
++  // Makes the operation conditional on whether the destination object's current
++  // metageneration matches the given value.
++  optional int64 if_metageneration_match = 9;
++
++  // Makes the operation conditional on whether the destination object's current
++  // metageneration does not match the given value.
++  optional int64 if_metageneration_not_match = 10;
++
++  // Makes the operation conditional on whether the source object's live
++  // generation matches the given value.
++  optional int64 if_source_generation_match = 11;
++
++  // Makes the operation conditional on whether the source object's live
++  // generation does not match the given value.
++  optional int64 if_source_generation_not_match = 12;
++
++  // Makes the operation conditional on whether the source object's current
++  // metageneration matches the given value.
++  optional int64 if_source_metageneration_match = 13;
++
++  // Makes the operation conditional on whether the source object's current
++  // metageneration does not match the given value.
++  optional int64 if_source_metageneration_not_match = 14;
++
++  // The maximum number of bytes that will be rewritten per rewrite request.
++  // Most callers
++  // shouldn't need to specify this parameter - it is primarily in place to
++  // support testing. If specified the value must be an integral multiple of
++  // 1 MiB (1048576). Also, this only applies to requests where the source and
++  // destination span locations and/or storage classes. Finally, this value must
++  // not change across rewrite calls else you'll get an error that the
++  // `rewriteToken` is invalid.
++  int64 max_bytes_rewritten_per_call = 15;
++
++  // The algorithm used to encrypt the source object, if any. Used if the source
++  // object was encrypted with a Customer-Supplied Encryption Key.
++  string copy_source_encryption_algorithm = 16;
++
++  // The raw bytes (not base64-encoded) AES-256 encryption key used to encrypt
++  // the source object, if it was encrypted with a Customer-Supplied Encryption
++  // Key.
++  bytes copy_source_encryption_key_bytes = 21;
++
++  // The raw bytes (not base64-encoded) SHA256 hash of the encryption key used
++  // to encrypt the source object, if it was encrypted with a Customer-Supplied
++  // Encryption Key.
++  bytes copy_source_encryption_key_sha256_bytes = 22;
++
++  // A set of parameters common to Storage API requests concerning an object.
++  CommonObjectRequestParams common_object_request_params = 19;
++
++  // The checksums of the complete object. This will be used to validate the
++  // destination object after rewriting.
++  ObjectChecksums object_checksums = 29;
++}
++
++// A rewrite response.
++message RewriteResponse {
++  // The total bytes written so far, which can be used to provide a waiting user
++  // with a progress indicator. This property is always present in the response.
++  int64 total_bytes_rewritten = 1;
++
++  // The total size of the object being copied in bytes. This property is always
++  // present in the response.
++  int64 object_size = 2;
++
++  // `true` if the copy is finished; otherwise, `false` if
++  // the copy is in progress. This property is always present in the response.
++  bool done = 3;
++
++  // A token to use in subsequent requests to continue copying data. This token
++  // is present in the response only when there is more data to copy.
++  string rewrite_token = 4;
++
++  // A resource containing the metadata for the copied-to object. This property
++  // is present in the response only when copying completes.
++  Object resource = 5;
++}
++
++// Request message for MoveObject.
++message MoveObjectRequest {
++  // Required. Name of the bucket in which the object resides.
++  string bucket = 1 [
++    (google.api.field_behavior) = REQUIRED,
++    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
++  ];
++
++  // Required. Name of the source object.
++  string source_object = 2 [(google.api.field_behavior) = REQUIRED];
++
++  // Required. Name of the destination object.
++  string destination_object = 3 [(google.api.field_behavior) = REQUIRED];
++
++  // Optional. Makes the operation conditional on whether the source object's
++  // current generation matches the given value. `if_source_generation_match`
++  // and `if_source_generation_not_match` conditions are mutually exclusive:
++  // it's an error for both of them to be set in the request.
++  optional int64 if_source_generation_match = 4
++      [(google.api.field_behavior) = OPTIONAL];
++
++  // Optional. Makes the operation conditional on whether the source object's
++  // current generation does not match the given value.
++  // `if_source_generation_match` and `if_source_generation_not_match`
++  // conditions are mutually exclusive: it's an error for both of them to be set
++  // in the request.
++  optional int64 if_source_generation_not_match = 5
++      [(google.api.field_behavior) = OPTIONAL];
++
++  // Optional. Makes the operation conditional on whether the source object's
++  // current metageneration matches the given value.
++  // `if_source_metageneration_match` and `if_source_metageneration_not_match`
++  // conditions are mutually exclusive: it's an error for both of them to be set
++  // in the request.
++  optional int64 if_source_metageneration_match = 6
++      [(google.api.field_behavior) = OPTIONAL];
++
++  // Optional. Makes the operation conditional on whether the source object's
++  // current metageneration does not match the given value.
++  // `if_source_metageneration_match` and `if_source_metageneration_not_match`
++  // conditions are mutually exclusive: it's an error for both of them to be set
++  // in the request.
++  optional int64 if_source_metageneration_not_match = 7
++      [(google.api.field_behavior) = OPTIONAL];
++
++  // Optional. Makes the operation conditional on whether the destination
++  // object's current generation matches the given value. Setting to 0 makes the
++  // operation succeed only if there are no live versions of the object.
++  // `if_generation_match` and `if_generation_not_match` conditions are mutually
++  // exclusive: it's an error for both of them to be set in the request.
++  optional int64 if_generation_match = 8
++      [(google.api.field_behavior) = OPTIONAL];
++
++  // Optional. Makes the operation conditional on whether the destination
++  // object's current generation does not match the given value. If no live
++  // object exists, the precondition fails. Setting to 0 makes the operation
++  // succeed only if there is a live version of the object.
++  // `if_generation_match` and `if_generation_not_match` conditions are mutually
++  // exclusive: it's an error for both of them to be set in the request.
++  optional int64 if_generation_not_match = 9
++      [(google.api.field_behavior) = OPTIONAL];
++
++  // Optional. Makes the operation conditional on whether the destination
++  // object's current metageneration matches the given value.
++  // `if_metageneration_match` and `if_metageneration_not_match` conditions are
++  // mutually exclusive: it's an error for both of them to be set in the
++  // request.
++  optional int64 if_metageneration_match = 10
++      [(google.api.field_behavior) = OPTIONAL];
++
++  // Optional. Makes the operation conditional on whether the destination
++  // object's current metageneration does not match the given value.
++  // `if_metageneration_match` and `if_metageneration_not_match` conditions are
++  // mutually exclusive: it's an error for both of them to be set in the
++  // request.
++  optional int64 if_metageneration_not_match = 11
++      [(google.api.field_behavior) = OPTIONAL];
++}
++
++// Request message for UpdateObject.
++message UpdateObjectRequest {
++  // Required. The object to update.
++  // The object's bucket and name fields are used to identify the object to
++  // update. If present, the object's generation field selects a specific
++  // revision of this object whose metadata should be updated. Otherwise,
++  // assumes the live version of the object.
++  Object object = 1 [(google.api.field_behavior) = REQUIRED];
++
++  // Makes the operation conditional on whether the object's current generation
++  // matches the given value. Setting to 0 makes the operation succeed only if
++  // there are no live versions of the object.
++  optional int64 if_generation_match = 2;
++
++  // Makes the operation conditional on whether the object's live generation
++  // does not match the given value. If no live object exists, the precondition
++  // fails. Setting to 0 makes the operation succeed only if there is a live
++  // version of the object.
++  optional int64 if_generation_not_match = 3;
++
++  // Makes the operation conditional on whether the object's current
++  // metageneration matches the given value.
++  optional int64 if_metageneration_match = 4;
++
++  // Makes the operation conditional on whether the object's current
++  // metageneration does not match the given value.
++  optional int64 if_metageneration_not_match = 5;
++
++  // Apply a predefined set of access controls to this object.
++  // Valid values are "authenticatedRead", "bucketOwnerFullControl",
++  // "bucketOwnerRead", "private", "projectPrivate", or "publicRead".
++  string predefined_acl = 10;
++
++  // Required. List of fields to be updated.
++  //
++  // To specify ALL fields, equivalent to the JSON API's "update" function,
++  // specify a single field with the value `*`. Note: not recommended. If a new
++  // field is introduced at a later time, an older client updating with the `*`
++  // may accidentally reset the new field's value.
++  //
++  // Not specifying any fields is an error.
++  google.protobuf.FieldMask update_mask = 7
++      [(google.api.field_behavior) = REQUIRED];
++
++  // A set of parameters common to Storage API requests concerning an object.
++  CommonObjectRequestParams common_object_request_params = 8;
++}
++
++// Parameters that can be passed to any object request.
++message CommonObjectRequestParams {
++  // Encryption algorithm used with the Customer-Supplied Encryption Keys
++  // feature.
++  string encryption_algorithm = 1;
++
++  // Encryption key used with the Customer-Supplied Encryption Keys feature.
++  // In raw bytes format (not base64-encoded).
++  bytes encryption_key_bytes = 4;
++
++  // SHA256 hash of encryption key used with the Customer-Supplied Encryption
++  // Keys feature.
++  bytes encryption_key_sha256_bytes = 5;
++}
++
++// Shared constants.
++message ServiceConstants {
++  // A collection of constant values meaningful to the Storage API.
++  enum Values {
++    option allow_alias = true;
++
++    // Unused. Proto3 requires first enum to be 0.
++    VALUES_UNSPECIFIED = 0;
++
++    // The maximum size chunk that can will be returned in a single
++    // ReadRequest.
++    // 2 MiB.
++    MAX_READ_CHUNK_BYTES = 2097152;
++
++    // The maximum size chunk that can be sent in a single WriteObjectRequest.
++    // 2 MiB.
++    MAX_WRITE_CHUNK_BYTES = 2097152;
++
++    // The maximum size of an object in MB - whether written in a single stream
++    // or composed from multiple other objects.
++    // 5 TiB.
++    MAX_OBJECT_SIZE_MB = 5242880;
++
++    // The maximum length field name that can be sent in a single
++    // custom metadata field.
++    // 1 KiB.
++    MAX_CUSTOM_METADATA_FIELD_NAME_BYTES = 1024;
++
++    // The maximum length field value that can be sent in a single
++    // custom_metadata field.
++    // 4 KiB.
++    MAX_CUSTOM_METADATA_FIELD_VALUE_BYTES = 4096;
++
++    // The maximum total bytes that can be populated into all field names and
++    // values of the custom_metadata for one object.
++    // 8 KiB.
++    MAX_CUSTOM_METADATA_TOTAL_SIZE_BYTES = 8192;
++
++    // The maximum total bytes that can be populated into all bucket metadata
++    // fields.
++    // 20 KiB.
++    MAX_BUCKET_METADATA_TOTAL_SIZE_BYTES = 20480;
++
++    // The maximum number of NotificationConfigs that can be registered
++    // for a given bucket.
++    MAX_NOTIFICATION_CONFIGS_PER_BUCKET = 100;
++
++    // The maximum number of LifecycleRules that can be registered for a given
++    // bucket.
++    MAX_LIFECYCLE_RULES_PER_BUCKET = 100;
++
++    // The maximum number of custom attributes per NotificationConfigs.
++    MAX_NOTIFICATION_CUSTOM_ATTRIBUTES = 5;
++
++    // The maximum length of a custom attribute key included in
++    // NotificationConfig.
++    MAX_NOTIFICATION_CUSTOM_ATTRIBUTE_KEY_LENGTH = 256;
++
++    // The maximum length of a custom attribute value included in a
++    // NotificationConfig.
++    MAX_NOTIFICATION_CUSTOM_ATTRIBUTE_VALUE_LENGTH = 1024;
++
++    // The maximum number of key/value entries per bucket label.
++    MAX_LABELS_ENTRIES_COUNT = 64;
++
++    // The maximum character length of the key or value in a bucket
++    // label map.
++    MAX_LABELS_KEY_VALUE_LENGTH = 63;
++
++    // The maximum byte size of the key or value in a bucket label
++    // map.
++    MAX_LABELS_KEY_VALUE_BYTES = 128;
++
++    // The maximum number of object IDs that can be included in a
++    // DeleteObjectsRequest.
++    MAX_OBJECT_IDS_PER_DELETE_OBJECTS_REQUEST = 1000;
++
++    // The maximum number of days for which a token returned by the
++    // GetListObjectsSplitPoints RPC is valid.
++    SPLIT_TOKEN_MAX_VALID_DAYS = 14;
++  }
++}
++
++// A bucket.
++message Bucket {
++  option (google.api.resource) = {
++    type: "storage.googleapis.com/Bucket"
++    pattern: "projects/{project}/buckets/{bucket}"
++    plural: "buckets"
++    singular: "bucket"
++  };
++
++  // Billing properties of a bucket.
++  message Billing {
++    // When set to true, Requester Pays is enabled for this bucket.
++    bool requester_pays = 1;
++  }
++
++  // Cross-Origin Response sharing (CORS) properties for a bucket.
++  // For more on Cloud Storage and CORS, see
++  // https://cloud.google.com/storage/docs/cross-origin.
++  // For more on CORS in general, see https://tools.ietf.org/html/rfc6454.
++  message Cors {
++    // The list of Origins eligible to receive CORS response headers. See
++    // [https://tools.ietf.org/html/rfc6454][RFC 6454] for more on origins.
++    // Note: "*" is permitted in the list of origins, and means "any Origin".
++    repeated string origin = 1;
++
++    // The list of HTTP methods on which to include CORS response headers,
++    // (`GET`, `OPTIONS`, `POST`, etc) Note: "*" is permitted in the list of
++    // methods, and means "any method".
++    repeated string method = 2;
++
++    // The list of HTTP headers other than the
++    // [https://www.w3.org/TR/cors/#simple-response-header][simple response
++    // headers] to give permission for the user-agent to share across domains.
++    repeated string response_header = 3;
++
++    // The value, in seconds, to return in the
++    // [https://www.w3.org/TR/cors/#access-control-max-age-response-header][Access-Control-Max-Age
++    // header] used in preflight responses.
++    int32 max_age_seconds = 4;
++  }
++
++  // Encryption properties of a bucket.
++  message Encryption {
++    // The name of the Cloud KMS key that will be used to encrypt objects
++    // inserted into this bucket, if no encryption method is specified.
++    string default_kms_key = 1 [(google.api.resource_reference) = {
++      type: "cloudkms.googleapis.com/CryptoKey"
++    }];
++  }
++
++  // Bucket restriction options.
++  message IamConfig {
++    // Settings for Uniform Bucket level access.
++    // See https://cloud.google.com/storage/docs/uniform-bucket-level-access.
++    message UniformBucketLevelAccess {
++      // If set, access checks only use bucket-level IAM policies or above.
++      bool enabled = 1;
++
++      // The deadline time for changing
++      // `iam_config.uniform_bucket_level_access.enabled` from `true` to
++      // `false`. Mutable until the specified deadline is reached, but not
++      // afterward.
++      google.protobuf.Timestamp lock_time = 2;
++    }
++
++    // Bucket restriction options currently enforced on the bucket.
++    UniformBucketLevelAccess uniform_bucket_level_access = 1;
++
++    // Whether IAM will enforce public access prevention. Valid values are
++    // "enforced" or "inherited".
++    string public_access_prevention = 3;
++  }
++
++  // Lifecycle properties of a bucket.
++  // For more information, see https://cloud.google.com/storage/docs/lifecycle.
++  message Lifecycle {
++    // A lifecycle Rule, combining an action to take on an object and a
++    // condition which will trigger that action.
++    message Rule {
++      // An action to take on an object.
++      message Action {
++        // Type of the action. Currently, only `Delete`, `SetStorageClass`, and
++        // `AbortIncompleteMultipartUpload` are supported.
++        string type = 1;
++
++        // Target storage class. Required iff the type of the action is
++        // SetStorageClass.
++        string storage_class = 2;
++      }
++
++      // A condition of an object which triggers some action.
++      message Condition {
++        // Age of an object (in days). This condition is satisfied when an
++        // object reaches the specified age.
++        // A value of 0 indicates that all objects immediately match this
++        // condition.
++        optional int32 age_days = 1;
++
++        // This condition is satisfied when an object is created before midnight
++        // of the specified date in UTC.
++        google.type.Date created_before = 2;
++
++        // Relevant only for versioned objects. If the value is
++        // `true`, this condition matches live objects; if the value
++        // is `false`, it matches archived objects.
++        optional bool is_live = 3;
++
++        // Relevant only for versioned objects. If the value is N, this
++        // condition is satisfied when there are at least N versions (including
++        // the live version) newer than this version of the object.
++        optional int32 num_newer_versions = 4;
++
++        // Objects having any of the storage classes specified by this condition
++        // will be matched. Values include `MULTI_REGIONAL`, `REGIONAL`,
++        // `NEARLINE`, `COLDLINE`, `STANDARD`, and
++        // `DURABLE_REDUCED_AVAILABILITY`.
++        repeated string matches_storage_class = 5;
++
++        // Number of days that have elapsed since the custom timestamp set on an
++        // object.
++        // The value of the field must be a nonnegative integer.
++        optional int32 days_since_custom_time = 7;
++
++        // An object matches this condition if the custom timestamp set on the
++        // object is before the specified date in UTC.
++        google.type.Date custom_time_before = 8;
++
++        // This condition is relevant only for versioned objects. An object
++        // version satisfies this condition only if these many days have been
++        // passed since it became noncurrent. The value of the field must be a
++        // nonnegative integer. If it's zero, the object version will become
++        // eligible for Lifecycle action as soon as it becomes noncurrent.
++        optional int32 days_since_noncurrent_time = 9;
++
++        // This condition is relevant only for versioned objects. An object
++        // version satisfies this condition only if it became noncurrent before
++        // the specified date in UTC.
++        google.type.Date noncurrent_time_before = 10;
++
++        // List of object name prefixes. If any prefix exactly matches the
++        // beginning of the object name, the condition evaluates to true.
++        repeated string matches_prefix = 11;
++
++        // List of object name suffixes. If any suffix exactly matches the
++        // end of the object name, the condition evaluates to true.
++        repeated string matches_suffix = 12;
++      }
++
++      // The action to take.
++      Action action = 1;
++
++      // The condition(s) under which the action will be taken.
++      Condition condition = 2;
++    }
++
++    // A lifecycle management rule, which is made of an action to take and the
++    // condition(s) under which the action will be taken.
++    repeated Rule rule = 1;
++  }
++
++  // Logging-related properties of a bucket.
++  message Logging {
++    // The destination bucket where the current bucket's logs should be placed,
++    // using path format (like `projects/123456/buckets/foo`).
++    string log_bucket = 1;
++
++    // A prefix for log object names.
++    string log_object_prefix = 2;
++  }
++
++  // Retention policy properties of a bucket.
++  message RetentionPolicy {
++    // Server-determined value that indicates the time from which policy was
++    // enforced and effective.
++    google.protobuf.Timestamp effective_time = 1;
++
++    // Once locked, an object retention policy cannot be modified.
++    bool is_locked = 2;
++
++    // The duration that objects need to be retained. Retention duration must be
++    // greater than zero and less than 100 years. Note that enforcement of
++    // retention periods less than a day is not guaranteed. Such periods should
++    // only be used for testing purposes. Any `nanos` value specified will be
++    // rounded down to the nearest second.
++    google.protobuf.Duration retention_duration = 4;
++  }
++
++  // Soft delete policy properties of a bucket.
++  message SoftDeletePolicy {
++    // The period of time that soft-deleted objects in the bucket must be
++    // retained and cannot be permanently deleted. The duration must be greater
++    // than or equal to 7 days and less than 1 year.
++    optional google.protobuf.Duration retention_duration = 1;
++
++    // Time from which the policy was effective. This is service-provided.
++    optional google.protobuf.Timestamp effective_time = 2;
++  }
++
++  // Properties of a bucket related to versioning.
++  // For more on Cloud Storage versioning, see
++  // https://cloud.google.com/storage/docs/object-versioning.
++  message Versioning {
++    // While set to true, versioning is fully enabled for this bucket.
++    bool enabled = 1;
++  }
++
++  // Properties of a bucket related to accessing the contents as a static
++  // website. For more on hosting a static website via Cloud Storage, see
++  // https://cloud.google.com/storage/docs/hosting-static-website.
++  message Website {
++    // If the requested object path is missing, the service will ensure the path
++    // has a trailing '/', append this suffix, and attempt to retrieve the
++    // resulting object. This allows the creation of `index.html`
++    // objects to represent directory pages.
++    string main_page_suffix = 1;
++
++    // If the requested object path is missing, and any
++    // `mainPageSuffix` object is missing, if applicable, the service
++    // will return the named object from this bucket as the content for a
++    // [https://tools.ietf.org/html/rfc7231#section-6.5.4][404 Not Found]
++    // result.
++    string not_found_page = 2;
++  }
++
++  // Configuration for Custom Dual Regions.  It should specify precisely two
++  // eligible regions within the same Multiregion. More information on regions
++  // may be found [https://cloud.google.com/storage/docs/locations][here].
++  message CustomPlacementConfig {
++    // List of locations to use for data placement.
++    repeated string data_locations = 1;
++  }
++
++  // Configuration for a bucket's Autoclass feature.
++  message Autoclass {
++    // Enables Autoclass.
++    bool enabled = 1;
++
++    // Output only. Latest instant at which the `enabled` field was set to true
++    // after being disabled/unconfigured or set to false after being enabled. If
++    // Autoclass is enabled when the bucket is created, the toggle_time is set
++    // to the bucket creation time.
++    google.protobuf.Timestamp toggle_time = 2
++        [(google.api.field_behavior) = OUTPUT_ONLY];
++
++    // An object in an Autoclass bucket will eventually cool down to the
++    // terminal storage class if there is no access to the object.
++    // The only valid values are NEARLINE and ARCHIVE.
++    optional string terminal_storage_class = 3;
++
++    // Output only. Latest instant at which the autoclass terminal storage class
++    // was updated.
++    optional google.protobuf.Timestamp terminal_storage_class_update_time = 4
++        [(google.api.field_behavior) = OUTPUT_ONLY];
++  }
++
++  // Configuration for a bucket's hierarchical namespace feature.
++  message HierarchicalNamespace {
++    // Optional. Enables the hierarchical namespace feature.
++    bool enabled = 1 [(google.api.field_behavior) = OPTIONAL];
++  }
++
++  // Immutable. The name of the bucket.
++  // Format: `projects/{project}/buckets/{bucket}`
++  string name = 1 [(google.api.field_behavior) = IMMUTABLE];
++
++  // Output only. The user-chosen part of the bucket name. The `{bucket}`
++  // portion of the `name` field. For globally unique buckets, this is equal to
++  // the "bucket name" of other Cloud Storage APIs. Example: "pub".
++  string bucket_id = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
++
++  // The etag of the bucket.
++  // If included in the metadata of an UpdateBucketRequest, the operation will
++  // only be performed if the etag matches that of the bucket.
++  string etag = 29;
++
++  // Immutable. The project which owns this bucket, in the format of
++  // "projects/{projectIdentifier}".
++  // {projectIdentifier} can be the project ID or project number.
++  string project = 3 [
++    (google.api.field_behavior) = IMMUTABLE,
++    (google.api.resource_reference) = {
++      type: "cloudresourcemanager.googleapis.com/Project"
++    }
++  ];
++
++  // Output only. The metadata generation of this bucket.
++  int64 metageneration = 4 [(google.api.field_behavior) = OUTPUT_ONLY];
++
++  // Immutable. The location of the bucket. Object data for objects in the
++  // bucket resides in physical storage within this region.  Defaults to `US`.
++  // See the
++  // [https://developers.google.com/storage/docs/concepts-techniques#specifyinglocations"][developer's
++  // guide] for the authoritative list. Attempting to update this field after
++  // the bucket is created will result in an error.
++  string location = 5 [(google.api.field_behavior) = IMMUTABLE];
++
++  // Output only. The location type of the bucket (region, dual-region,
++  // multi-region, etc).
++  string location_type = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
++
++  // The bucket's default storage class, used whenever no storageClass is
++  // specified for a newly-created object. This defines how objects in the
++  // bucket are stored and determines the SLA and the cost of storage.
++  // If this value is not specified when the bucket is created, it will default
++  // to `STANDARD`. For more information, see
++  // https://developers.google.com/storage/docs/storage-classes.
++  string storage_class = 7;
++
++  // The recovery point objective for cross-region replication of the bucket.
++  // Applicable only for dual- and multi-region buckets. "DEFAULT" uses default
++  // replication. "ASYNC_TURBO" enables turbo replication, valid for dual-region
++  // buckets only. If rpo is not specified when the bucket is created, it
++  // defaults to "DEFAULT". For more information, see
++  // https://cloud.google.com/storage/docs/availability-durability#turbo-replication.
++  string rpo = 27;
++
++  // Access controls on the bucket.
++  // If iam_config.uniform_bucket_level_access is enabled on this bucket,
++  // requests to set, read, or modify acl is an error.
++  repeated BucketAccessControl acl = 8;
++
++  // Default access controls to apply to new objects when no ACL is provided.
++  // If iam_config.uniform_bucket_level_access is enabled on this bucket,
++  // requests to set, read, or modify acl is an error.
++  repeated ObjectAccessControl default_object_acl = 9;
++
++  // The bucket's lifecycle config. See
++  // [https://developers.google.com/storage/docs/lifecycle]Lifecycle Management]
++  // for more information.
++  Lifecycle lifecycle = 10;
++
++  // Output only. The creation time of the bucket.
++  google.protobuf.Timestamp create_time = 11
++      [(google.api.field_behavior) = OUTPUT_ONLY];
++
++  // The bucket's [https://www.w3.org/TR/cors/][Cross-Origin Resource Sharing]
++  // (CORS) config.
++  repeated Cors cors = 12;
++
++  // Output only. The modification time of the bucket.
++  google.protobuf.Timestamp update_time = 13
++      [(google.api.field_behavior) = OUTPUT_ONLY];
++
++  // The default value for event-based hold on newly created objects in this
++  // bucket.  Event-based hold is a way to retain objects indefinitely until an
++  // event occurs, signified by the
++  // hold's release. After being released, such objects will be subject to
++  // bucket-level retention (if any).  One sample use case of this flag is for
++  // banks to hold loan documents for at least 3 years after loan is paid in
++  // full. Here, bucket-level retention is 3 years and the event is loan being
++  // paid in full. In this example, these objects will be held intact for any
++  // number of years until the event has occurred (event-based hold on the
++  // object is released) and then 3 more years after that. That means retention
++  // duration of the objects begins from the moment event-based hold
++  // transitioned from true to false.  Objects under event-based hold cannot be
++  // deleted, overwritten or archived until the hold is removed.
++  bool default_event_based_hold = 14;
++
++  // User-provided labels, in key/value pairs.
++  map<string, string> labels = 15;
++
++  // The bucket's website config, controlling how the service behaves
++  // when accessing bucket contents as a web site. See the
++  // [https://cloud.google.com/storage/docs/static-website][Static Website
++  // Examples] for more information.
++  Website website = 16;
++
++  // The bucket's versioning config.
++  Versioning versioning = 17;
++
++  // The bucket's logging config, which defines the destination bucket
++  // and name prefix (if any) for the current bucket's logs.
++  Logging logging = 18;
++
++  // Output only. The owner of the bucket. This is always the project team's
++  // owner group.
++  Owner owner = 19 [(google.api.field_behavior) = OUTPUT_ONLY];
++
++  // Encryption config for a bucket.
++  Encryption encryption = 20;
++
++  // The bucket's billing config.
++  Billing billing = 21;
++
++  // The bucket's retention policy. The retention policy enforces a minimum
++  // retention time for all objects contained in the bucket, based on their
++  // creation time. Any attempt to overwrite or delete objects younger than the
++  // retention period will result in a PERMISSION_DENIED error.  An unlocked
++  // retention policy can be modified or removed from the bucket via a
++  // storage.buckets.update operation. A locked retention policy cannot be
++  // removed or shortened in duration for the lifetime of the bucket.
++  // Attempting to remove or decrease period of a locked retention policy will
++  // result in a PERMISSION_DENIED error.
++  RetentionPolicy retention_policy = 22;
++
++  // The bucket's IAM config.
++  IamConfig iam_config = 23;
++
++  // Reserved for future use.
++  bool satisfies_pzs = 25;
++
++  // Configuration that, if present, specifies the data placement for a
++  // [https://cloud.google.com/storage/docs/locations#location-dr][configurable
++  // dual-region].
++  CustomPlacementConfig custom_placement_config = 26;
++
++  // The bucket's Autoclass configuration. If there is no configuration, the
++  // Autoclass feature will be disabled and have no effect on the bucket.
++  Autoclass autoclass = 28;
++
++  // Optional. The bucket's hierarchical namespace configuration. If there is no
++  // configuration, the hierarchical namespace feature will be disabled and have
++  // no effect on the bucket.
++  HierarchicalNamespace hierarchical_namespace = 32
++      [(google.api.field_behavior) = OPTIONAL];
++
++  // Optional. The bucket's soft delete policy. The soft delete policy prevents
++  // soft-deleted objects from being permanently deleted.
++  SoftDeletePolicy soft_delete_policy = 31
++      [(google.api.field_behavior) = OPTIONAL];
++}
++
++// An access-control entry.
++message BucketAccessControl {
++  // The access permission for the entity.
++  string role = 1;
++
++  // The ID of the access-control entry.
++  string id = 2;
++
++  // The entity holding the permission, in one of the following forms:
++  // * `user-{userid}`
++  // * `user-{email}`
++  // * `group-{groupid}`
++  // * `group-{email}`
++  // * `domain-{domain}`
++  // * `project-{team}-{projectnumber}`
++  // * `project-{team}-{projectid}`
++  // * `allUsers`
++  // * `allAuthenticatedUsers`
++  // Examples:
++  // * The user `liz@example.com` would be `user-liz@example.com`.
++  // * The group `example@googlegroups.com` would be
++  // `group-example@googlegroups.com`
++  // * All members of the Google Apps for Business domain `example.com` would be
++  // `domain-example.com`
++  // For project entities, `project-{team}-{projectnumber}` format will be
++  // returned on response.
++  string entity = 3;
++
++  // Output only. The alternative entity format, if exists. For project
++  // entities, `project-{team}-{projectid}` format will be returned on response.
++  string entity_alt = 9 [(google.api.field_behavior) = OUTPUT_ONLY];
++
++  // The ID for the entity, if any.
++  string entity_id = 4;
++
++  // The etag of the BucketAccessControl.
++  // If included in the metadata of an update or delete request message, the
++  // operation operation will only be performed if the etag matches that of the
++  // bucket's BucketAccessControl.
++  string etag = 8;
++
++  // The email address associated with the entity, if any.
++  string email = 5;
++
++  // The domain associated with the entity, if any.
++  string domain = 6;
++
++  // The project team associated with the entity, if any.
++  ProjectTeam project_team = 7;
++}
++
++// Message used to convey content being read or written, along with an optional
++// checksum.
++message ChecksummedData {
++  // Optional. The data.
++  bytes content = 1 [ctype = CORD, (google.api.field_behavior) = OPTIONAL];
++
++  // If set, the CRC32C digest of the content field.
++  optional fixed32 crc32c = 2;
++}
++
++// Message used for storing full (not subrange) object checksums.
++message ObjectChecksums {
++  // CRC32C digest of the object data. Computed by the Cloud Storage service for
++  // all written objects.
++  // If set in a WriteObjectRequest, service will validate that the stored
++  // object matches this checksum.
++  optional fixed32 crc32c = 1;
++
++  // 128 bit MD5 hash of the object data.
++  // For more information about using the MD5 hash, see
++  // [https://cloud.google.com/storage/docs/hashes-etags#json-api][Hashes and
++  // ETags: Best Practices].
++  // Not all objects will provide an MD5 hash. For example, composite objects
++  // provide only crc32c hashes. This value is equivalent to running `cat
++  // object.txt | openssl md5 -binary`
++  bytes md5_hash = 2;
++}
++
++// Describes the Customer-Supplied Encryption Key mechanism used to store an
++// Object's data at rest.
++message CustomerEncryption {
++  // The encryption algorithm.
++  string encryption_algorithm = 1;
++
++  // SHA256 hash value of the encryption key.
++  // In raw bytes format (not base64-encoded).
++  bytes key_sha256_bytes = 3;
++}
++
++// An object.
++message Object {
++  // Immutable. The name of this object. Nearly any sequence of unicode
++  // characters is valid. See
++  // [Guidelines](https://cloud.google.com/storage/docs/objects#naming).
++  // Example: `test.txt`
++  // The `name` field by itself does not uniquely identify a Cloud Storage
++  // object. A Cloud Storage object is uniquely identified by the tuple of
++  // (bucket, object, generation).
++  string name = 1 [(google.api.field_behavior) = IMMUTABLE];
++
++  // Immutable. The name of the bucket containing this object.
++  string bucket = 2 [
++    (google.api.field_behavior) = IMMUTABLE,
++    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
++  ];
++
++  // The etag of the object.
++  // If included in the metadata of an update or delete request message, the
++  // operation will only be performed if the etag matches that of the live
++  // object.
++  string etag = 27;
++
++  // Immutable. The content generation of this object. Used for object
++  // versioning.
++  int64 generation = 3 [(google.api.field_behavior) = IMMUTABLE];
++
++  // Output only. Restore token used to differentiate deleted objects with the
++  // same name and generation. This field is output only, and only set for
++  // deleted objects in HNS buckets.
++  optional string restore_token = 35
++      [(google.api.field_behavior) = OUTPUT_ONLY];
++
++  // Output only. The version of the metadata for this generation of this
++  // object. Used for preconditions and for detecting changes in metadata. A
++  // metageneration number is only meaningful in the context of a particular
++  // generation of a particular object.
++  int64 metageneration = 4 [(google.api.field_behavior) = OUTPUT_ONLY];
++
++  // Storage class of the object.
++  string storage_class = 5;
++
++  // Output only. Content-Length of the object data in bytes, matching
++  // [https://tools.ietf.org/html/rfc7230#section-3.3.2][RFC 7230 §3.3.2].
++  int64 size = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
++
++  // Content-Encoding of the object data, matching
++  // [https://tools.ietf.org/html/rfc7231#section-3.1.2.2][RFC 7231 §3.1.2.2]
++  string content_encoding = 7;
++
++  // Content-Disposition of the object data, matching
++  // [https://tools.ietf.org/html/rfc6266][RFC 6266].
++  string content_disposition = 8;
++
++  // Cache-Control directive for the object data, matching
++  // [https://tools.ietf.org/html/rfc7234#section-5.2"][RFC 7234 §5.2].
++  // If omitted, and the object is accessible to all anonymous users, the
++  // default will be `public, max-age=3600`.
++  string cache_control = 9;
++
++  // Access controls on the object.
++  // If iam_config.uniform_bucket_level_access is enabled on the parent
++  // bucket, requests to set, read, or modify acl is an error.
++  repeated ObjectAccessControl acl = 10;
++
++  // Content-Language of the object data, matching
++  // [https://tools.ietf.org/html/rfc7231#section-3.1.3.2][RFC 7231 §3.1.3.2].
++  string content_language = 11;
++
++  // Output only. If this object is noncurrent, this is the time when the object
++  // became noncurrent.
++  google.protobuf.Timestamp delete_time = 12
++      [(google.api.field_behavior) = OUTPUT_ONLY];
++
++  // Output only. The time when the object was finalized.
++  google.protobuf.Timestamp finalize_time = 36
++      [(google.api.field_behavior) = OUTPUT_ONLY];
++
++  // Content-Type of the object data, matching
++  // [https://tools.ietf.org/html/rfc7231#section-3.1.1.5][RFC 7231 §3.1.1.5].
++  // If an object is stored without a Content-Type, it is served as
++  // `application/octet-stream`.
++  string content_type = 13;
++
++  // Output only. The creation time of the object.
++  google.protobuf.Timestamp create_time = 14
++      [(google.api.field_behavior) = OUTPUT_ONLY];
++
++  // Output only. Number of underlying components that make up this object.
++  // Components are accumulated by compose operations.
++  int32 component_count = 15 [(google.api.field_behavior) = OUTPUT_ONLY];
++
++  // Output only. Hashes for the data part of this object. This field is used
++  // for output only and will be silently ignored if provided in requests. The
++  // checksums of the complete object regardless of data range. If the object is
++  // downloaded in full, the client should compute one of these checksums over
++  // the downloaded object and compare it against the value provided here.
++  ObjectChecksums checksums = 16 [(google.api.field_behavior) = OUTPUT_ONLY];
++
++  // Output only. The modification time of the object metadata.
++  // Set initially to object creation time and then updated whenever any
++  // metadata of the object changes. This includes changes made by a requester,
++  // such as modifying custom metadata, as well as changes made by Cloud Storage
++  // on behalf of a requester, such as changing the storage class based on an
++  // Object Lifecycle Configuration.
++  google.protobuf.Timestamp update_time = 17
++      [(google.api.field_behavior) = OUTPUT_ONLY];
++
++  // Cloud KMS Key used to encrypt this object, if the object is encrypted by
++  // such a key.
++  string kms_key = 18 [(google.api.resource_reference) = {
++    type: "cloudkms.googleapis.com/CryptoKey"
++  }];
++
++  // Output only. The time at which the object's storage class was last changed.
++  // When the object is initially created, it will be set to time_created.
++  google.protobuf.Timestamp update_storage_class_time = 19
++      [(google.api.field_behavior) = OUTPUT_ONLY];
++
++  // Whether an object is under temporary hold. While this flag is set to true,
++  // the object is protected against deletion and overwrites.  A common use case
++  // of this flag is regulatory investigations where objects need to be retained
++  // while the investigation is ongoing. Note that unlike event-based hold,
++  // temporary hold does not impact retention expiration time of an object.
++  bool temporary_hold = 20;
++
++  // A server-determined value that specifies the earliest time that the
++  // object's retention period expires.
++  // Note 1: This field is not provided for objects with an active event-based
++  // hold, since retention expiration is unknown until the hold is removed.
++  // Note 2: This value can be provided even when temporary hold is set (so that
++  // the user can reason about policy without having to first unset the
++  // temporary hold).
++  google.protobuf.Timestamp retention_expire_time = 21;
++
++  // User-provided metadata, in key/value pairs.
++  map<string, string> metadata = 22;
++
++  // Whether an object is under event-based hold.
++  // An event-based hold is a way to force the retention of an object until
++  // after some event occurs. Once the hold is released by explicitly setting
++  // this field to false, the object will become subject to any bucket-level
++  // retention policy, except that the retention duration will be calculated
++  // from the time the event based hold was lifted, rather than the time the
++  // object was created.
++  //
++  // In a WriteObject request, not setting this field implies that the value
++  // should be taken from the parent bucket's "default_event_based_hold" field.
++  // In a response, this field will always be set to true or false.
++  optional bool event_based_hold = 23;
++
++  // Output only. The owner of the object. This will always be the uploader of
++  // the object.
++  Owner owner = 24 [(google.api.field_behavior) = OUTPUT_ONLY];
++
++  // Metadata of Customer-Supplied Encryption Key, if the object is encrypted by
++  // such a key.
++  CustomerEncryption customer_encryption = 25;
++
++  // A user-specified timestamp set on an object.
++  google.protobuf.Timestamp custom_time = 26;
++
++  // Output only. This is the time when the object became soft-deleted.
++  //
++  // Soft-deleted objects are only accessible if a soft_delete_policy is
++  // enabled. Also see hard_delete_time.
++  optional google.protobuf.Timestamp soft_delete_time = 28
++      [(google.api.field_behavior) = OUTPUT_ONLY];
++
++  // Output only. The time when the object will be permanently deleted.
++  //
++  // Only set when an object becomes soft-deleted with a soft_delete_policy.
++  // Otherwise, the object will not be accessible.
++  optional google.protobuf.Timestamp hard_delete_time = 29
++      [(google.api.field_behavior) = OUTPUT_ONLY];
++}
++
++// An access-control entry.
++message ObjectAccessControl {
++  // The access permission for the entity. One of the following values:
++  // * `READER`
++  // * `WRITER`
++  // * `OWNER`
++  string role = 1;
++
++  // The ID of the access-control entry.
++  string id = 2;
++
++  // The entity holding the permission, in one of the following forms:
++  // * `user-{userid}`
++  // * `user-{email}`
++  // * `group-{groupid}`
++  // * `group-{email}`
++  // * `domain-{domain}`
++  // * `project-{team}-{projectnumber}`
++  // * `project-{team}-{projectid}`
++  // * `allUsers`
++  // * `allAuthenticatedUsers`
++  // Examples:
++  // * The user `liz@example.com` would be `user-liz@example.com`.
++  // * The group `example@googlegroups.com` would be
++  // `group-example@googlegroups.com`.
++  // * All members of the Google Apps for Business domain `example.com` would be
++  // `domain-example.com`.
++  // For project entities, `project-{team}-{projectnumber}` format will be
++  // returned on response.
++  string entity = 3;
++
++  // Output only. The alternative entity format, if exists. For project
++  // entities, `project-{team}-{projectid}` format will be returned on response.
++  string entity_alt = 9 [(google.api.field_behavior) = OUTPUT_ONLY];
++
++  // The ID for the entity, if any.
++  string entity_id = 4;
++
++  // The etag of the ObjectAccessControl.
++  // If included in the metadata of an update or delete request message, the
++  // operation will only be performed if the etag matches that of the live
++  // object's ObjectAccessControl.
++  string etag = 8;
++
++  // The email address associated with the entity, if any.
++  string email = 5;
++
++  // The domain associated with the entity, if any.
++  string domain = 6;
++
++  // The project team associated with the entity, if any.
++  ProjectTeam project_team = 7;
++}
++
++// The result of a call to Objects.ListObjects
++message ListObjectsResponse {
++  // The list of items.
++  repeated Object objects = 1;
++
++  // The list of prefixes of objects matching-but-not-listed up to and including
++  // the requested delimiter.
++  repeated string prefixes = 2;
++
++  // The continuation token, used to page through large result sets. Provide
++  // this value in a subsequent request to return the next page of results.
++  string next_page_token = 3;
++}
++
++// Represents the Viewers, Editors, or Owners of a given project.
++message ProjectTeam {
++  // The project number.
++  string project_number = 1;
++
++  // The team.
++  string team = 2;
++}
++
++// The owner of a specific resource.
++message Owner {
++  // The entity, in the form `user-`*userId*.
++  string entity = 1;
++
++  // The ID for the entity.
++  string entity_id = 2;
++}
diff --git a/storage/control/apiv2/internal/postprocessor.go b/storage/control/apiv2/internal/postprocessor.go
new file mode 100644
index 0000000..6d5265c
--- /dev/null
+++ b/storage/control/apiv2/internal/postprocessor.go
@@ -0,0 +1,48 @@
+package main
+
+import (
+	"fmt"
+	"log"
+	"os"
+	"strings"
+)
+
+func main() {
+	// Read the file content
+	storageControlGRPCFile := "../controlpb/storage_control.pb.go"
+	input, err := os.ReadFile(storageControlGRPCFile)
+	if err != nil {
+		log.Fatalln(err)
+	}
+	mapping := map[string]string{
+		"/google.storage.control.v2.StorageControl/DeleteBucket":              "/google.storage.v2.Storage/DeleteBucket",
+		"/google.storage.control.v2.StorageControl/GetBucket":                 "/google.storage.v2.Storage/GetBucket",
+		"/google.storage.control.v2.StorageControl/CreateBucket":              "/google.storage.v2.Storage/CreateBucket",
+		"/google.storage.control.v2.StorageControl/ListBuckets":               "/google.storage.v2.Storage/ListBuckets",
+		"/google.storage.control.v2.StorageControl/LockBucketRetentionPolicy": "/google.storage.v2.Storage/LockBucketRetentionPolicy",
+		"/google.storage.control.v2.StorageControl/GetIamPolicy":              "/google.storage.v2.Storage/GetIamPolicy",
+		"/google.storage.control.v2.StorageControl/SetIamPolicy":              "/google.storage.v2.Storage/SetIamPolicy",
+		"/google.storage.control.v2.StorageControl/TestIamPermissions":        "/google.storage.v2.Storage/TestIamPermissions",
+		"/google.storage.control.v2.StorageControl/UpdateBucket":              "/google.storage.v2.Storage/UpdateBucket",
+		"/google.storage.control.v2.StorageControl/ComposeObject":             "/google.storage.v2.Storage/ComposeObject",
+		"/google.storage.control.v2.StorageControl/DeleteObject":              "/google.storage.v2.Storage/DeleteObject",
+		"/google.storage.control.v2.StorageControl/RestoreObject":             "/google.storage.v2.Storage/RestoreObject",
+		"/google.storage.control.v2.StorageControl/GetObject":                 "/google.storage.v2.Storage/GetObject",
+		"/google.storage.control.v2.StorageControl/UpdateObject":              "/google.storage.v2.Storage/UpdateObject",
+		"/google.storage.control.v2.StorageControl/ListObjects":               "/google.storage.v2.Storage/ListObjects",
+		"/google.storage.control.v2.StorageControl/RewriteObject":             "/google.storage.v2.Storage/RewriteObject",
+		"/google.storage.control.v2.StorageControl/MoveObject":                "/google.storage.v2.Storage/MoveObject",
+	}
+	// Replace the strings
+	output := string(input)
+	for key, value := range mapping {
+		output = strings.Replace(output, key, value, -1)
+	}
+	// Write the updated content back to the file
+	err = os.WriteFile(storageControlGRPCFile+".mod", []byte(output), 0644)
+	if err != nil {
+		log.Fatalf("failed: %v", err)
+	}
+
+	fmt.Println("Strings replaced successfully!")
+}
diff --git a/storage/control/apiv2/internal/runner.sh b/storage/control/apiv2/internal/runner.sh
new file mode 100755
index 0000000..52f03f0
--- /dev/null
+++ b/storage/control/apiv2/internal/runner.sh
@@ -0,0 +1,16 @@
+set -ex
+# git clone https://github.com/googleapis/googleapis.git ../../../../.googleapis
+git checkout main ../storage_control_client.go
+pushd ../../../../
+git -C .googleapis clean -f -d -x
+git -C .googleapis restore .
+git -C .googleapis pull
+env -C .googleapis/ patch -p1 < storage/control/apiv2/internal/merge_storage_v2_into_storage_control.patch
+env -C .googleapis/ bazelisk fetch //google/storage/control/v2:control_go_proto //google/storage/control/v2:control_go_gapic //google/storage/control/v2:gapi-cloud-storage-control-v2-go
+env -C .googleapis/ bazelisk build //google/storage/control/v2:control_go_proto //google/storage/control/v2:control_go_gapic //google/storage/control/v2:gapi-cloud-storage-control-v2-go
+bazel_output=$(env -C .googleapis/ bazelisk info output_path)
+tar -zx --strip-components=3 -f ${bazel_output}/k8-fastbuild/bin/google/storage/control/v2/gapi-cloud-storage-control-v2-go.tar.gz ./cloud.google.com/go/storage/control/apiv2/
+popd
+go run postprocessor.go
+# TODO: overwrite correctly;;; just forcing it.
+mv --force ../controlpb/storage_control.pb.go.mod ../controlpb/storage_control.pb.go
\ No newline at end of file
diff --git a/storage/control/apiv2/internal/storage_control.proto b/storage/control/apiv2/internal/storage_control.proto
new file mode 100644
index 0000000..9a20b2c
--- /dev/null
+++ b/storage/control/apiv2/internal/storage_control.proto
@@ -0,0 +1,2429 @@
+// Copyright 2024 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.storage.control.v2;
+
+import "google/api/client.proto";
+import "google/api/field_behavior.proto";
+import "google/api/field_info.proto";
+import "google/api/resource.proto";
+import "google/api/routing.proto";
+import "google/longrunning/operations.proto";
+import "google/protobuf/empty.proto";
+import "google/protobuf/timestamp.proto";
+import "google/protobuf/duration.proto";
+import "google/protobuf/field_mask.proto";
+import "google/iam/v1/iam_policy.proto";
+import "google/iam/v1/policy.proto";
+import "google/type/date.proto";
+
+option csharp_namespace = "Google.Cloud.Storage.Control.V2";
+option go_package = "cloud.google.com/go/storage/control/apiv2/controlpb;controlpb";
+option java_multiple_files = true;
+option java_outer_classname = "StorageControlProto";
+option java_package = "com.google.storage.control.v2";
+option php_namespace = "Google\\Cloud\\Storage\\Control\\V2";
+option ruby_package = "Google::Cloud::Storage::Control::V2";
+option (google.api.resource_definition) = {
+  type: "storage.googleapis.com/Bucket"
+  pattern: "projects/{project}/buckets/{bucket}"
+};
+
+// StorageControl service includes selected control plane operations.
+service StorageControl {
+  option (google.api.default_host) = "storage.googleapis.com";
+  option (google.api.oauth_scopes) =
+      "https://www.googleapis.com/auth/cloud-platform,"
+      "https://www.googleapis.com/auth/cloud-platform.read-only,"
+      "https://www.googleapis.com/auth/devstorage.full_control,"
+      "https://www.googleapis.com/auth/devstorage.read_only,"
+      "https://www.googleapis.com/auth/devstorage.read_write";
+
+  // Creates a new folder. This operation is only applicable to a hierarchical
+  // namespace enabled bucket.
+  rpc CreateFolder(CreateFolderRequest) returns (Folder) {
+    option (google.api.routing) = {
+      routing_parameters { field: "parent" path_template: "{bucket=**}" }
+    };
+    option (google.api.method_signature) = "parent,folder,folder_id";
+  }
+
+  // Permanently deletes an empty folder. This operation is only applicable to a
+  // hierarchical namespace enabled bucket.
+  rpc DeleteFolder(DeleteFolderRequest) returns (google.protobuf.Empty) {
+    option (google.api.routing) = {
+      routing_parameters {
+        field: "name"
+        path_template: "{bucket=projects/*/buckets/*}/**"
+      }
+    };
+    option (google.api.method_signature) = "name";
+  }
+
+  // Returns metadata for the specified folder. This operation is only
+  // applicable to a hierarchical namespace enabled bucket.
+  rpc GetFolder(GetFolderRequest) returns (Folder) {
+    option (google.api.routing) = {
+      routing_parameters {
+        field: "name"
+        path_template: "{bucket=projects/*/buckets/*}/**"
+      }
+    };
+    option (google.api.method_signature) = "name";
+  }
+
+  // Retrieves a list of folders. This operation is only applicable to a
+  // hierarchical namespace enabled bucket.
+  rpc ListFolders(ListFoldersRequest) returns (ListFoldersResponse) {
+    option (google.api.routing) = {
+      routing_parameters { field: "parent" path_template: "{bucket=**}" }
+    };
+    option (google.api.method_signature) = "parent";
+  }
+
+  // Renames a source folder to a destination folder. This operation is only
+  // applicable to a hierarchical namespace enabled bucket. During a rename, the
+  // source and destination folders are locked until the long running operation
+  // completes.
+  rpc RenameFolder(RenameFolderRequest) returns (google.longrunning.Operation) {
+    option (google.api.routing) = {
+      routing_parameters {
+        field: "name"
+        path_template: "{bucket=projects/*/buckets/*}/**"
+      }
+    };
+    option (google.api.method_signature) = "name,destination_folder_id";
+    option (google.longrunning.operation_info) = {
+      response_type: "Folder"
+      metadata_type: "RenameFolderMetadata"
+    };
+  }
+
+  // Returns the storage layout configuration for a given bucket.
+  rpc GetStorageLayout(GetStorageLayoutRequest) returns (StorageLayout) {
+    option (google.api.routing) = {
+      routing_parameters {
+        field: "name"
+        path_template: "{bucket=projects/*/buckets/*}/**"
+      }
+    };
+    option (google.api.method_signature) = "name";
+  }
+
+  // Creates a new managed folder.
+  rpc CreateManagedFolder(CreateManagedFolderRequest) returns (ManagedFolder) {
+    option (google.api.routing) = {
+      routing_parameters { field: "parent" path_template: "{bucket=**}" }
+    };
+    option (google.api.method_signature) =
+        "parent,managed_folder,managed_folder_id";
+  }
+
+  // Permanently deletes an empty managed folder.
+  rpc DeleteManagedFolder(DeleteManagedFolderRequest)
+      returns (google.protobuf.Empty) {
+    option (google.api.routing) = {
+      routing_parameters {
+        field: "name"
+        path_template: "{bucket=projects/*/buckets/*}/**"
+      }
+    };
+    option (google.api.method_signature) = "name";
+  }
+
+  // Returns metadata for the specified managed folder.
+  rpc GetManagedFolder(GetManagedFolderRequest) returns (ManagedFolder) {
+    option (google.api.routing) = {
+      routing_parameters {
+        field: "name"
+        path_template: "{bucket=projects/*/buckets/*}/**"
+      }
+    };
+    option (google.api.method_signature) = "name";
+  }
+
+  // Retrieves a list of managed folders for a given bucket.
+  rpc ListManagedFolders(ListManagedFoldersRequest)
+      returns (ListManagedFoldersResponse) {
+    option (google.api.routing) = {
+      routing_parameters { field: "parent" path_template: "{bucket=**}" }
+    };
+    option (google.api.method_signature) = "parent";
+  }
+
+  // Permanently deletes an empty bucket.
+  rpc DeleteBucket(DeleteBucketRequest) returns (google.protobuf.Empty) {
+    option (google.api.routing) = {
+      routing_parameters { field: "name" path_template: "{bucket=**}" }
+    };
+    option (google.api.method_signature) = "name";
+  }
+
+  // Returns metadata for the specified bucket.
+  rpc GetBucket(GetBucketRequest) returns (Bucket) {
+    option (google.api.routing) = {
+      routing_parameters { field: "name" path_template: "{bucket=**}" }
+    };
+    option (google.api.method_signature) = "name";
+  }
+
+  // Creates a new bucket.
+  rpc CreateBucket(CreateBucketRequest) returns (Bucket) {
+    option (google.api.routing) = {
+      routing_parameters { field: "parent" path_template: "{project=**}" }
+      routing_parameters {
+        field: "bucket.project"
+        path_template: "{project=**}"
+      }
+    };
+    option (google.api.method_signature) = "parent,bucket,bucket_id";
+  }
+
+  // Retrieves a list of buckets for a given project.
+  rpc ListBuckets(ListBucketsRequest) returns (ListBucketsResponse) {
+    option (google.api.routing) = {
+      routing_parameters { field: "parent" path_template: "{project=**}" }
+    };
+    option (google.api.method_signature) = "parent";
+  }
+
+  // Locks retention policy on a bucket.
+  rpc LockBucketRetentionPolicy(LockBucketRetentionPolicyRequest)
+      returns (Bucket) {
+    option (google.api.routing) = {
+      routing_parameters { field: "bucket" path_template: "{bucket=**}" }
+    };
+    option (google.api.method_signature) = "bucket";
+  }
+
+  // Gets the IAM policy for a specified bucket.
+  // The `resource` field in the request should be
+  // `projects/_/buckets/{bucket}`.
+  rpc GetIamPolicy(google.iam.v1.GetIamPolicyRequest)
+      returns (google.iam.v1.Policy) {
+    option (google.api.routing) = {
+      routing_parameters { field: "resource" path_template: "{bucket=**}" }
+    };
+    option (google.api.method_signature) = "resource";
+  }
+
+  // Updates an IAM policy for the specified bucket.
+  // The `resource` field in the request should be
+  // `projects/_/buckets/{bucket}`.
+  rpc SetIamPolicy(google.iam.v1.SetIamPolicyRequest)
+      returns (google.iam.v1.Policy) {
+    option (google.api.routing) = {
+      routing_parameters { field: "resource" path_template: "{bucket=**}" }
+    };
+    option (google.api.method_signature) = "resource,policy";
+  }
+
+  // Tests a set of permissions on the given bucket, object, or managed folder
+  // to see which, if any, are held by the caller.
+  // The `resource` field in the request should be
+  // `projects/_/buckets/{bucket}` for a bucket,
+  // `projects/_/buckets/{bucket}/objects/{object}` for an object, or
+  // `projects/_/buckets/{bucket}/managedFolders/{managedFolder}`
+  // for a managed folder.
+  rpc TestIamPermissions(google.iam.v1.TestIamPermissionsRequest)
+      returns (google.iam.v1.TestIamPermissionsResponse) {
+    option (google.api.routing) = {
+      routing_parameters { field: "resource" path_template: "{bucket=**}" }
+      routing_parameters {
+        field: "resource"
+        path_template: "{bucket=projects/*/buckets/*}/objects/**"
+      }
+      routing_parameters {
+        field: "resource"
+        path_template: "{bucket=projects/*/buckets/*}/managedFolders/**"
+      }
+    };
+    option (google.api.method_signature) = "resource,permissions";
+  }
+
+  // Updates a bucket. Equivalent to JSON API's storage.buckets.patch method.
+  rpc UpdateBucket(UpdateBucketRequest) returns (Bucket) {
+    option (google.api.routing) = {
+      routing_parameters { field: "bucket.name" path_template: "{bucket=**}" }
+    };
+    option (google.api.method_signature) = "bucket,update_mask";
+  }
+
+  // Concatenates a list of existing objects into a new object in the same
+  // bucket.
+  rpc ComposeObject(ComposeObjectRequest) returns (Object) {
+    option (google.api.routing) = {
+      routing_parameters {
+        field: "destination.bucket"
+        path_template: "{bucket=**}"
+      }
+    };
+  }
+
+  // Deletes an object and its metadata.
+  //
+  // Deletions are normally permanent when versioning is disabled or whenever
+  // the generation parameter is used. However, if soft delete is enabled for
+  // the bucket, deleted objects can be restored using RestoreObject until the
+  // soft delete retention period has passed.
+  rpc DeleteObject(DeleteObjectRequest) returns (google.protobuf.Empty) {
+    option (google.api.routing) = {
+      routing_parameters { field: "bucket" path_template: "{bucket=**}" }
+    };
+    option (google.api.method_signature) = "bucket,object";
+    option (google.api.method_signature) = "bucket,object,generation";
+  }
+
+  // Restores a soft-deleted object.
+  rpc RestoreObject(RestoreObjectRequest) returns (Object) {
+    option (google.api.routing) = {
+      routing_parameters { field: "bucket" path_template: "{bucket=**}" }
+    };
+    option (google.api.method_signature) = "bucket,object,generation";
+  }
+
+  // Retrieves an object's metadata.
+  rpc GetObject(GetObjectRequest) returns (Object) {
+    option (google.api.routing) = {
+      routing_parameters { field: "bucket" path_template: "{bucket=**}" }
+    };
+    option (google.api.method_signature) = "bucket,object";
+    option (google.api.method_signature) = "bucket,object,generation";
+  }
+
+  // Updates an object's metadata.
+  // Equivalent to JSON API's storage.objects.patch.
+  rpc UpdateObject(UpdateObjectRequest) returns (Object) {
+    option (google.api.routing) = {
+      routing_parameters { field: "object.bucket" path_template: "{bucket=**}" }
+    };
+    option (google.api.method_signature) = "object,update_mask";
+  }
+
+  // Retrieves a list of objects matching the criteria.
+  rpc ListObjects(ListObjectsRequest) returns (ListObjectsResponse) {
+    option (google.api.routing) = {
+      routing_parameters { field: "parent" path_template: "{bucket=**}" }
+    };
+    option (google.api.method_signature) = "parent";
+  }
+
+  // Rewrites a source object to a destination object. Optionally overrides
+  // metadata.
+  rpc RewriteObject(RewriteObjectRequest) returns (RewriteResponse) {
+    option (google.api.routing) = {
+      routing_parameters { field: "source_bucket" }
+      routing_parameters {
+        field: "destination_bucket"
+        path_template: "{bucket=**}"
+      }
+    };
+  }
+
+  // Moves the source object to the destination object in the same bucket.
+  rpc MoveObject(MoveObjectRequest) returns (Object) {
+    option (google.api.routing) = {
+      routing_parameters { field: "bucket" path_template: "{bucket=**}" }
+    };
+    option (google.api.method_signature) =
+        "bucket,source_object,destination_object";
+  }
+}
+
+// Contains information about a pending rename operation.
+message PendingRenameInfo {
+  // Output only. The name of the rename operation.
+  string operation = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
+}
+
+// A folder resource. This resource can only exist in a hierarchical namespace
+// enabled bucket.
+message Folder {
+  option (google.api.resource) = {
+    type: "storage.googleapis.com/Folder"
+    pattern: "projects/{project}/buckets/{bucket}/folders/{folder=**}"
+    plural: "folders"
+    singular: "folder"
+  };
+
+  // Identifier. The name of this folder.
+  // Format: `projects/{project}/buckets/{bucket}/folders/{folder}`
+  string name = 1 [(google.api.field_behavior) = IDENTIFIER];
+
+  // Output only. The version of the metadata for this folder. Used for
+  // preconditions and for detecting changes in metadata.
+  int64 metageneration = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Output only. The creation time of the folder.
+  google.protobuf.Timestamp create_time = 4
+      [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Output only. The modification time of the folder.
+  google.protobuf.Timestamp update_time = 5
+      [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Output only. Only present if the folder is part of an ongoing RenameFolder
+  // operation. Contains information which can be used to query the operation
+  // status. The presence of this field also indicates all write operations are
+  // blocked for this folder, including folder, managed folder, and object
+  // operations.
+  PendingRenameInfo pending_rename_info = 7
+      [(google.api.field_behavior) = OUTPUT_ONLY];
+}
+
+// Request message for GetFolder. This operation is only applicable to a
+// hierarchical namespace enabled bucket.
+message GetFolderRequest {
+  // Required. Name of the folder.
+  // Format: `projects/{project}/buckets/{bucket}/folders/{folder}`
+  string name = 6 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = { type: "storage.googleapis.com/Folder" }
+  ];
+
+  // Makes the operation only succeed conditional on whether the folder's
+  // current metageneration matches the given value.
+  optional int64 if_metageneration_match = 3;
+
+  // Makes the operation only succeed conditional on whether the folder's
+  // current metageneration does not match the given value.
+  optional int64 if_metageneration_not_match = 4;
+
+  // Optional. A unique identifier for this request. UUID is the recommended
+  // format, but other formats are still accepted.
+  string request_id = 5 [
+    (google.api.field_info).format = UUID4,
+    (google.api.field_behavior) = OPTIONAL
+  ];
+}
+
+// Request message for CreateFolder. This operation is only applicable to a
+// hierarchical namespace enabled bucket.
+message CreateFolderRequest {
+  // Required. Name of the bucket in which the folder will reside. The bucket
+  // must be a hierarchical namespace enabled bucket.
+  string parent = 1 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = {
+      child_type: "storage.googleapis.com/Folder"
+    }
+  ];
+
+  // Required. Properties of the new folder being created.
+  // The bucket and name of the folder are specified in the parent and folder_id
+  // fields, respectively. Populating those fields in `folder` will result in an
+  // error.
+  Folder folder = 2 [(google.api.field_behavior) = REQUIRED];
+
+  // Required. The full name of a folder, including all its parent folders.
+  // Folders use single '/' characters as a delimiter.
+  // The folder_id must end with a slash.
+  // For example, the folder_id of "books/biographies/" would create a new
+  // "biographies/" folder under the "books/" folder.
+  string folder_id = 3 [(google.api.field_behavior) = REQUIRED];
+
+  // Optional. If true, parent folder doesn't have to be present and all missing
+  // ancestor folders will be created atomically.
+  bool recursive = 4 [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. A unique identifier for this request. UUID is the recommended
+  // format, but other formats are still accepted.
+  string request_id = 5 [
+    (google.api.field_info).format = UUID4,
+    (google.api.field_behavior) = OPTIONAL
+  ];
+}
+
+// Request message for DeleteFolder. This operation is only applicable to a
+// hierarchical namespace enabled bucket.
+message DeleteFolderRequest {
+  // Required. Name of the folder.
+  // Format: `projects/{project}/buckets/{bucket}/folders/{folder}`
+  string name = 6 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = { type: "storage.googleapis.com/Folder" }
+  ];
+
+  // Makes the operation only succeed conditional on whether the folder's
+  // current metageneration matches the given value.
+  optional int64 if_metageneration_match = 3;
+
+  // Makes the operation only succeed conditional on whether the folder's
+  // current metageneration does not match the given value.
+  optional int64 if_metageneration_not_match = 4;
+
+  // Optional. A unique identifier for this request. UUID is the recommended
+  // format, but other formats are still accepted.
+  string request_id = 5 [
+    (google.api.field_info).format = UUID4,
+    (google.api.field_behavior) = OPTIONAL
+  ];
+}
+
+// Request message for ListFolders. This operation is only applicable to a
+// hierarchical namespace enabled bucket.
+message ListFoldersRequest {
+  // Required. Name of the bucket in which to look for folders. The bucket must
+  // be a hierarchical namespace enabled bucket.
+  string parent = 1 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = {
+      child_type: "storage.googleapis.com/Folder"
+    }
+  ];
+
+  // Optional. Maximum number of folders to return in a single response. The
+  // service will use this parameter or 1,000 items, whichever is smaller.
+  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. A previously-returned page token representing part of the larger
+  // set of results to view.
+  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. Filter results to folders whose names begin with this prefix.
+  // If set, the value must either be an empty string or end with a '/'.
+  string prefix = 4 [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. If set, returns results in a directory-like mode. The results
+  // will only include folders that either exactly match the above prefix, or
+  // are one level below the prefix. The only supported value is '/'.
+  string delimiter = 8 [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. Filter results to folders whose names are lexicographically equal
+  // to or after lexicographic_start. If lexicographic_end is also set, the
+  // folders listed have names between lexicographic_start (inclusive) and
+  // lexicographic_end (exclusive).
+  string lexicographic_start = 6 [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. Filter results to folders whose names are lexicographically
+  // before lexicographic_end. If lexicographic_start is also set, the folders
+  // listed have names between lexicographic_start (inclusive) and
+  // lexicographic_end (exclusive).
+  string lexicographic_end = 7 [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. A unique identifier for this request. UUID is the recommended
+  // format, but other formats are still accepted.
+  string request_id = 9 [
+    (google.api.field_info).format = UUID4,
+    (google.api.field_behavior) = OPTIONAL
+  ];
+}
+
+// Response message for ListFolders.
+message ListFoldersResponse {
+  // The list of child folders
+  repeated Folder folders = 1;
+
+  // The continuation token, used to page through large result sets. Provide
+  // this value in a subsequent request to return the next page of results.
+  string next_page_token = 2;
+}
+
+// Request message for RenameFolder. This operation is only applicable to a
+// hierarchical namespace enabled bucket.
+message RenameFolderRequest {
+  // Required. Name of the source folder being renamed.
+  // Format: `projects/{project}/buckets/{bucket}/folders/{folder}`
+  string name = 7 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = { type: "storage.googleapis.com/Folder" }
+  ];
+
+  // Required. The destination folder ID, e.g. `foo/bar/`.
+  string destination_folder_id = 8 [(google.api.field_behavior) = REQUIRED];
+
+  // Makes the operation only succeed conditional on whether the source
+  // folder's current metageneration matches the given value.
+  optional int64 if_metageneration_match = 4;
+
+  // Makes the operation only succeed conditional on whether the source
+  // folder's current metageneration does not match the given value.
+  optional int64 if_metageneration_not_match = 5;
+
+  // Optional. A unique identifier for this request. UUID is the recommended
+  // format, but other formats are still accepted. This request is only
+  // idempotent if a `request_id` is provided.
+  string request_id = 6 [
+    (google.api.field_info).format = UUID4,
+    (google.api.field_behavior) = OPTIONAL
+  ];
+}
+
+// The message contains metadata that is common to all Storage Control
+// long-running operations, present in its `google.longrunning.Operation`
+// messages, and accessible via `metadata.common_metadata`.
+message CommonLongRunningOperationMetadata {
+  // Output only. The time the operation was created.
+  google.protobuf.Timestamp create_time = 1
+      [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Output only. The time the operation finished running.
+  google.protobuf.Timestamp end_time = 2
+      [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Output only. The time the operation was last modified.
+  google.protobuf.Timestamp update_time = 3
+      [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Output only. The type of operation invoked.
+  string type = 4 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Output only. Identifies whether the user has requested cancellation.
+  bool requested_cancellation = 5 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Output only. The estimated progress of the operation in percentage [0,
+  // 100]. The value -1 means the progress is unknown.
+  int32 progress_percent = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
+}
+
+// Message returned in the metadata field of the Operation resource for
+// RenameFolder operations.
+message RenameFolderMetadata {
+  // Generic metadata for the long running operation.
+  CommonLongRunningOperationMetadata common_metadata = 1;
+
+  // The path of the source folder.
+  string source_folder_id = 2;
+
+  // The path of the destination folder.
+  string destination_folder_id = 3;
+}
+
+// The storage layout configuration of a bucket.
+message StorageLayout {
+  option (google.api.resource) = {
+    type: "storage.googleapis.com/StorageLayout"
+    pattern: "projects/{project}/buckets/{bucket}/storageLayout"
+  };
+
+  // Configuration for Custom Dual Regions.  It should specify precisely two
+  // eligible regions within the same Multiregion. More information on regions
+  // may be found [https://cloud.google.com/storage/docs/locations][here].
+  message CustomPlacementConfig {
+    // List of locations to use for data placement.
+    repeated string data_locations = 1;
+  }
+
+  // Configuration for a bucket's hierarchical namespace feature.
+  message HierarchicalNamespace {
+    // Enables the hierarchical namespace feature.
+    bool enabled = 1;
+  }
+
+  // Output only. The name of the StorageLayout resource.
+  // Format: `projects/{project}/buckets/{bucket}/storageLayout`
+  string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Output only. The location of the bucket.
+  string location = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Output only. The location type of the bucket (region, dual-region,
+  // multi-region, etc).
+  string location_type = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Output only. The data placement configuration for custom dual region. If
+  // there is no configuration, this is not a custom dual region bucket.
+  CustomPlacementConfig custom_placement_config = 4
+      [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Output only. The bucket's hierarchical namespace configuration. If there is
+  // no configuration, the hierarchical namespace is disabled.
+  HierarchicalNamespace hierarchical_namespace = 5
+      [(google.api.field_behavior) = OUTPUT_ONLY];
+}
+
+// Request message for GetStorageLayout.
+message GetStorageLayoutRequest {
+  // Required. The name of the StorageLayout resource.
+  // Format: `projects/{project}/buckets/{bucket}/storageLayout`
+  string name = 1 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = {
+      type: "storage.googleapis.com/StorageLayout"
+    }
+  ];
+
+  // An optional prefix used for permission check. It is useful when the caller
+  // only has limited permissions under a specific prefix.
+  string prefix = 2;
+
+  // Optional. A unique identifier for this request. UUID is the recommended
+  // format, but other formats are still accepted.
+  string request_id = 3 [
+    (google.api.field_info).format = UUID4,
+    (google.api.field_behavior) = OPTIONAL
+  ];
+}
+
+// A managed folder.
+message ManagedFolder {
+  option (google.api.resource) = {
+    type: "storage.googleapis.com/ManagedFolder"
+    pattern: "projects/{project}/buckets/{bucket}/managedFolders/{managed_folder=**}"
+    plural: "managedFolders"
+    singular: "managedFolder"
+  };
+
+  // Identifier. The name of this managed folder.
+  // Format:
+  // `projects/{project}/buckets/{bucket}/managedFolders/{managedFolder}`
+  string name = 1 [(google.api.field_behavior) = IDENTIFIER];
+
+  // Output only. The metadata version of this managed folder. It increases
+  // whenever the metadata is updated. Used for preconditions and for detecting
+  // changes in metadata. Managed folders don't have a generation number.
+  int64 metageneration = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Output only. The creation time of the managed folder.
+  google.protobuf.Timestamp create_time = 4
+      [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Output only. The modification time of the managed folder.
+  google.protobuf.Timestamp update_time = 5
+      [(google.api.field_behavior) = OUTPUT_ONLY];
+}
+
+// Request message for GetManagedFolder.
+message GetManagedFolderRequest {
+  // Required. Name of the managed folder.
+  // Format:
+  // `projects/{project}/buckets/{bucket}/managedFolders/{managedFolder}`
+  string name = 6 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = {
+      type: "storage.googleapis.com/ManagedFolder"
+    }
+  ];
+
+  // The operation succeeds conditional on the managed folder's current
+  // metageneration matching the value here specified.
+  optional int64 if_metageneration_match = 3;
+
+  // The operation succeeds conditional on the managed folder's current
+  // metageneration NOT matching the value here specified.
+  optional int64 if_metageneration_not_match = 4;
+
+  // Optional. A unique identifier for this request. UUID is the recommended
+  // format, but other formats are still accepted.
+  string request_id = 5 [
+    (google.api.field_info).format = UUID4,
+    (google.api.field_behavior) = OPTIONAL
+  ];
+}
+
+// Request message for CreateManagedFolder.
+message CreateManagedFolderRequest {
+  // Required. Name of the bucket this managed folder belongs to.
+  string parent = 1 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = {
+      child_type: "storage.googleapis.com/ManagedFolder"
+    }
+  ];
+
+  // Required. Properties of the managed folder being created.
+  // The bucket and managed folder names are specified in the `parent` and
+  // `managed_folder_id` fields. Populating these fields in `managed_folder`
+  // will result in an error.
+  ManagedFolder managed_folder = 2 [(google.api.field_behavior) = REQUIRED];
+
+  // Required. The name of the managed folder. It uses a single `/` as delimiter
+  // and leading and trailing `/` are allowed.
+  string managed_folder_id = 3 [(google.api.field_behavior) = REQUIRED];
+
+  // Optional. A unique identifier for this request. UUID is the recommended
+  // format, but other formats are still accepted.
+  string request_id = 4 [
+    (google.api.field_info).format = UUID4,
+    (google.api.field_behavior) = OPTIONAL
+  ];
+}
+
+// DeleteManagedFolder RPC request message.
+message DeleteManagedFolderRequest {
+  // Required. Name of the managed folder.
+  // Format:
+  // `projects/{project}/buckets/{bucket}/managedFolders/{managedFolder}`
+  string name = 7 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = {
+      type: "storage.googleapis.com/ManagedFolder"
+    }
+  ];
+
+  // The operation succeeds conditional on the managed folder's current
+  // metageneration matching the value here specified.
+  optional int64 if_metageneration_match = 3;
+
+  // The operation succeeds conditional on the managed folder's current
+  // metageneration NOT matching the value here specified.
+  optional int64 if_metageneration_not_match = 4;
+
+  // Allows deletion of a managed folder even if it is not empty.
+  // A managed folder is empty if it manages no child managed folders or
+  // objects. Caller must have permission for
+  // storage.managedFolders.setIamPolicy.
+  bool allow_non_empty = 5;
+
+  // Optional. A unique identifier for this request. UUID is the recommended
+  // format, but other formats are still accepted.
+  string request_id = 6 [
+    (google.api.field_info).format = UUID4,
+    (google.api.field_behavior) = OPTIONAL
+  ];
+}
+
+// Request message for ListManagedFolders.
+message ListManagedFoldersRequest {
+  // Required. Name of the bucket this managed folder belongs to.
+  string parent = 1 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = {
+      child_type: "storage.googleapis.com/ManagedFolder"
+    }
+  ];
+
+  // Optional. Maximum number of managed folders to return in a single response.
+  // The service will use this parameter or 1,000 items, whichever is smaller.
+  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. A previously-returned page token representing part of the larger
+  // set of results to view.
+  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. Filter results to match managed folders with name starting with
+  // this prefix.
+  string prefix = 4 [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. A unique identifier for this request. UUID is the recommended
+  // format, but other formats are still accepted.
+  string request_id = 5 [
+    (google.api.field_info).format = UUID4,
+    (google.api.field_behavior) = OPTIONAL
+  ];
+}
+
+// Response message for ListManagedFolders.
+message ListManagedFoldersResponse {
+  // The list of matching managed folders
+  repeated ManagedFolder managed_folders = 1;
+
+  // The continuation token, used to page through large result sets. Provide
+  // this value in a subsequent request to return the next page of results.
+  string next_page_token = 2;
+}
+
+// Request message for DeleteBucket.
+message DeleteBucketRequest {
+  // Required. Name of a bucket to delete.
+  string name = 1 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
+  ];
+
+  // If set, only deletes the bucket if its metageneration matches this value.
+  optional int64 if_metageneration_match = 2;
+
+  // If set, only deletes the bucket if its metageneration does not match this
+  // value.
+  optional int64 if_metageneration_not_match = 3;
+}
+
+// Request message for GetBucket.
+message GetBucketRequest {
+  // Required. Name of a bucket.
+  string name = 1 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
+  ];
+
+  // If set, and if the bucket's current metageneration does not match the
+  // specified value, the request will return an error.
+  optional int64 if_metageneration_match = 2;
+
+  // If set, and if the bucket's current metageneration matches the specified
+  // value, the request will return an error.
+  optional int64 if_metageneration_not_match = 3;
+
+  // Mask specifying which fields to read.
+  // A "*" field may be used to indicate all fields.
+  // If no mask is specified, will default to all fields.
+  optional google.protobuf.FieldMask read_mask = 5;
+}
+
+// Request message for CreateBucket.
+message CreateBucketRequest {
+  // Required. The project to which this bucket will belong.
+  string parent = 1 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = {
+      child_type: "storage.googleapis.com/Bucket"
+    }
+  ];
+
+  // Properties of the new bucket being inserted.
+  // The name of the bucket is specified in the `bucket_id` field. Populating
+  // `bucket.name` field will result in an error.
+  // The project of the bucket must be specified in the `bucket.project` field.
+  // This field must be in `projects/{projectIdentifier}` format,
+  // {projectIdentifier} can be the project ID or project number. The `parent`
+  // field must be either empty or `projects/_`.
+  Bucket bucket = 2;
+
+  // Required. The ID to use for this bucket, which will become the final
+  // component of the bucket's resource name. For example, the value `foo` might
+  // result in a bucket with the name `projects/123456/buckets/foo`.
+  string bucket_id = 3 [(google.api.field_behavior) = REQUIRED];
+
+  // Apply a predefined set of access controls to this bucket.
+  // Valid values are "authenticatedRead", "private", "projectPrivate",
+  // "publicRead", or "publicReadWrite".
+  string predefined_acl = 6;
+
+  // Apply a predefined set of default object access controls to this bucket.
+  // Valid values are "authenticatedRead", "bucketOwnerFullControl",
+  // "bucketOwnerRead", "private", "projectPrivate", or "publicRead".
+  string predefined_default_object_acl = 7;
+}
+
+// Request message for ListBuckets.
+message ListBucketsRequest {
+  // Required. The project whose buckets we are listing.
+  string parent = 1 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = {
+      child_type: "storage.googleapis.com/Bucket"
+    }
+  ];
+
+  // Maximum number of buckets to return in a single response. The service will
+  // use this parameter or 1,000 items, whichever is smaller. If "acl" is
+  // present in the read_mask, the service will use this parameter of 200 items,
+  // whichever is smaller.
+  int32 page_size = 2;
+
+  // A previously-returned page token representing part of the larger set of
+  // results to view.
+  string page_token = 3;
+
+  // Filter results to buckets whose names begin with this prefix.
+  string prefix = 4;
+
+  // Mask specifying which fields to read from each result.
+  // If no mask is specified, will default to all fields except items.owner,
+  // items.acl, and items.default_object_acl.
+  // * may be used to mean "all fields".
+  optional google.protobuf.FieldMask read_mask = 5;
+}
+
+// The result of a call to Buckets.ListBuckets
+message ListBucketsResponse {
+  // The list of items.
+  repeated Bucket buckets = 1;
+
+  // The continuation token, used to page through large result sets. Provide
+  // this value in a subsequent request to return the next page of results.
+  string next_page_token = 2;
+}
+
+// Request message for LockBucketRetentionPolicyRequest.
+message LockBucketRetentionPolicyRequest {
+  // Required. Name of a bucket.
+  string bucket = 1 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
+  ];
+
+  // Required. Makes the operation conditional on whether bucket's current
+  // metageneration matches the given value. Must be positive.
+  int64 if_metageneration_match = 2 [(google.api.field_behavior) = REQUIRED];
+}
+
+// Request for UpdateBucket method.
+message UpdateBucketRequest {
+  // Required. The bucket to update.
+  // The bucket's `name` field will be used to identify the bucket.
+  Bucket bucket = 1 [(google.api.field_behavior) = REQUIRED];
+
+  // If set, will only modify the bucket if its metageneration matches this
+  // value.
+  optional int64 if_metageneration_match = 2;
+
+  // If set, will only modify the bucket if its metageneration does not match
+  // this value.
+  optional int64 if_metageneration_not_match = 3;
+
+  // Apply a predefined set of access controls to this bucket.
+  // Valid values are "authenticatedRead", "private", "projectPrivate",
+  // "publicRead", or "publicReadWrite".
+  string predefined_acl = 8;
+
+  // Apply a predefined set of default object access controls to this bucket.
+  // Valid values are "authenticatedRead", "bucketOwnerFullControl",
+  // "bucketOwnerRead", "private", "projectPrivate", or "publicRead".
+  string predefined_default_object_acl = 9;
+
+  // Required. List of fields to be updated.
+  //
+  // To specify ALL fields, equivalent to the JSON API's "update" function,
+  // specify a single field with the value `*`. Note: not recommended. If a new
+  // field is introduced at a later time, an older client updating with the `*`
+  // may accidentally reset the new field's value.
+  //
+  // Not specifying any fields is an error.
+  google.protobuf.FieldMask update_mask = 6
+      [(google.api.field_behavior) = REQUIRED];
+}
+
+// Request message for ComposeObject.
+message ComposeObjectRequest {
+  // Description of a source object for a composition request.
+  message SourceObject {
+    // Preconditions for a source object of a composition request.
+    message ObjectPreconditions {
+      // Only perform the composition if the generation of the source object
+      // that would be used matches this value.  If this value and a generation
+      // are both specified, they must be the same value or the call will fail.
+      optional int64 if_generation_match = 1;
+    }
+
+    // Required. The source object's name. All source objects must reside in the
+    // same bucket.
+    string name = 1 [(google.api.field_behavior) = REQUIRED];
+
+    // The generation of this object to use as the source.
+    int64 generation = 2;
+
+    // Conditions that must be met for this operation to execute.
+    ObjectPreconditions object_preconditions = 3;
+  }
+
+  // Required. Properties of the resulting object.
+  Object destination = 1 [(google.api.field_behavior) = REQUIRED];
+
+  // The list of source objects that will be concatenated into a single object.
+  repeated SourceObject source_objects = 2;
+
+  // Apply a predefined set of access controls to the destination object.
+  // Valid values are "authenticatedRead", "bucketOwnerFullControl",
+  // "bucketOwnerRead", "private", "projectPrivate", or "publicRead".
+  string destination_predefined_acl = 9;
+
+  // Makes the operation conditional on whether the object's current generation
+  // matches the given value. Setting to 0 makes the operation succeed only if
+  // there are no live versions of the object.
+  optional int64 if_generation_match = 4;
+
+  // Makes the operation conditional on whether the object's current
+  // metageneration matches the given value.
+  optional int64 if_metageneration_match = 5;
+
+  // Resource name of the Cloud KMS key, of the form
+  // `projects/my-project/locations/my-location/keyRings/my-kr/cryptoKeys/my-key`,
+  // that will be used to encrypt the object. Overrides the object
+  // metadata's `kms_key_name` value, if any.
+  string kms_key = 6 [(google.api.resource_reference) = {
+    type: "cloudkms.googleapis.com/CryptoKey"
+  }];
+
+  // A set of parameters common to Storage API requests concerning an object.
+  CommonObjectRequestParams common_object_request_params = 7;
+
+  // The checksums of the complete object. This will be validated against the
+  // combined checksums of the component objects.
+  ObjectChecksums object_checksums = 10;
+}
+
+// Message for deleting an object.
+// `bucket` and `object` **must** be set.
+message DeleteObjectRequest {
+  // Required. Name of the bucket in which the object resides.
+  string bucket = 1 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
+  ];
+
+  // Required. The name of the finalized object to delete.
+  // Note: If you want to delete an unfinalized resumable upload please use
+  // `CancelResumableWrite`.
+  string object = 2 [(google.api.field_behavior) = REQUIRED];
+
+  // If present, permanently deletes a specific revision of this object (as
+  // opposed to the latest version, the default).
+  int64 generation = 4;
+
+  // Makes the operation conditional on whether the object's current generation
+  // matches the given value. Setting to 0 makes the operation succeed only if
+  // there are no live versions of the object.
+  optional int64 if_generation_match = 5;
+
+  // Makes the operation conditional on whether the object's live generation
+  // does not match the given value. If no live object exists, the precondition
+  // fails. Setting to 0 makes the operation succeed only if there is a live
+  // version of the object.
+  optional int64 if_generation_not_match = 6;
+
+  // Makes the operation conditional on whether the object's current
+  // metageneration matches the given value.
+  optional int64 if_metageneration_match = 7;
+
+  // Makes the operation conditional on whether the object's current
+  // metageneration does not match the given value.
+  optional int64 if_metageneration_not_match = 8;
+
+  // A set of parameters common to Storage API requests concerning an object.
+  CommonObjectRequestParams common_object_request_params = 10;
+}
+
+// Message for restoring an object.
+// `bucket`, `object`, and `generation` **must** be set.
+message RestoreObjectRequest {
+  // Required. Name of the bucket in which the object resides.
+  string bucket = 1 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
+  ];
+
+  // Required. The name of the object to restore.
+  string object = 2 [(google.api.field_behavior) = REQUIRED];
+
+  // Required. The specific revision of the object to restore.
+  int64 generation = 3 [(google.api.field_behavior) = REQUIRED];
+
+  // Optional. Restore token used to differentiate soft-deleted objects with the
+  // same name and generation. Only applicable for hierarchical namespace
+  // buckets. This parameter is optional, and is only required in the rare case
+  // when there are multiple soft-deleted objects with the same name and
+  // generation.
+  string restore_token = 11 [(google.api.field_behavior) = OPTIONAL];
+
+  // Makes the operation conditional on whether the object's current generation
+  // matches the given value. Setting to 0 makes the operation succeed only if
+  // there are no live versions of the object.
+  optional int64 if_generation_match = 4;
+
+  // Makes the operation conditional on whether the object's live generation
+  // does not match the given value. If no live object exists, the precondition
+  // fails. Setting to 0 makes the operation succeed only if there is a live
+  // version of the object.
+  optional int64 if_generation_not_match = 5;
+
+  // Makes the operation conditional on whether the object's current
+  // metageneration matches the given value.
+  optional int64 if_metageneration_match = 6;
+
+  // Makes the operation conditional on whether the object's current
+  // metageneration does not match the given value.
+  optional int64 if_metageneration_not_match = 7;
+
+  // If false or unset, the bucket's default object ACL will be used.
+  // If true, copy the source object's access controls.
+  // Return an error if bucket has UBLA enabled.
+  optional bool copy_source_acl = 9;
+
+  // A set of parameters common to Storage API requests concerning an object.
+  CommonObjectRequestParams common_object_request_params = 8;
+}
+
+// Request message for GetObject.
+message GetObjectRequest {
+  // Required. Name of the bucket in which the object resides.
+  string bucket = 1 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
+  ];
+
+  // Required. Name of the object.
+  string object = 2 [(google.api.field_behavior) = REQUIRED];
+
+  // If present, selects a specific revision of this object (as opposed to the
+  // latest version, the default).
+  int64 generation = 3;
+
+  // If true, return the soft-deleted version of this object.
+  optional bool soft_deleted = 11;
+
+  // Makes the operation conditional on whether the object's current generation
+  // matches the given value. Setting to 0 makes the operation succeed only if
+  // there are no live versions of the object.
+  optional int64 if_generation_match = 4;
+
+  // Makes the operation conditional on whether the object's live generation
+  // does not match the given value. If no live object exists, the precondition
+  // fails. Setting to 0 makes the operation succeed only if there is a live
+  // version of the object.
+  optional int64 if_generation_not_match = 5;
+
+  // Makes the operation conditional on whether the object's current
+  // metageneration matches the given value.
+  optional int64 if_metageneration_match = 6;
+
+  // Makes the operation conditional on whether the object's current
+  // metageneration does not match the given value.
+  optional int64 if_metageneration_not_match = 7;
+
+  // A set of parameters common to Storage API requests concerning an object.
+  CommonObjectRequestParams common_object_request_params = 8;
+
+  // Mask specifying which fields to read.
+  // If no mask is specified, will default to all fields except metadata.acl and
+  // metadata.owner.
+  // * may be used to mean "all fields".
+  optional google.protobuf.FieldMask read_mask = 10;
+
+  // Optional. Restore token used to differentiate soft-deleted objects with the
+  // same name and generation. Only applicable for hierarchical namespace
+  // buckets and if soft_deleted is set to true. This parameter is optional, and
+  // is only required in the rare case when there are multiple soft-deleted
+  // objects with the same name and generation.
+  string restore_token = 12 [(google.api.field_behavior) = OPTIONAL];
+}
+
+// Request message for ListObjects.
+message ListObjectsRequest {
+  // Required. Name of the bucket in which to look for objects.
+  string parent = 1 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
+  ];
+
+  // Maximum number of `items` plus `prefixes` to return
+  // in a single page of responses. As duplicate `prefixes` are
+  // omitted, fewer total results may be returned than requested. The service
+  // will use this parameter or 1,000 items, whichever is smaller.
+  int32 page_size = 2;
+
+  // A previously-returned page token representing part of the larger set of
+  // results to view.
+  string page_token = 3;
+
+  // If set, returns results in a directory-like mode. `items` will contain
+  // only objects whose names, aside from the `prefix`, do not
+  // contain `delimiter`. Objects whose names, aside from the
+  // `prefix`, contain `delimiter` will have their name,
+  // truncated after the `delimiter`, returned in
+  // `prefixes`. Duplicate `prefixes` are omitted.
+  string delimiter = 4;
+
+  // If true, objects that end in exactly one instance of `delimiter`
+  // will have their metadata included in `items` in addition to
+  // `prefixes`.
+  bool include_trailing_delimiter = 5;
+
+  // Filter results to objects whose names begin with this prefix.
+  string prefix = 6;
+
+  // If `true`, lists all versions of an object as distinct results.
+  // For more information, see
+  // [Object
+  // Versioning](https://cloud.google.com/storage/docs/object-versioning).
+  bool versions = 7;
+
+  // Mask specifying which fields to read from each result.
+  // If no mask is specified, will default to all fields except items.acl and
+  // items.owner.
+  // * may be used to mean "all fields".
+  optional google.protobuf.FieldMask read_mask = 8;
+
+  // Optional. Filter results to objects whose names are lexicographically equal
+  // to or after lexicographic_start. If lexicographic_end is also set, the
+  // objects listed have names between lexicographic_start (inclusive) and
+  // lexicographic_end (exclusive).
+  string lexicographic_start = 10 [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. Filter results to objects whose names are lexicographically
+  // before lexicographic_end. If lexicographic_start is also set, the objects
+  // listed have names between lexicographic_start (inclusive) and
+  // lexicographic_end (exclusive).
+  string lexicographic_end = 11 [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. If true, only list all soft-deleted versions of the object.
+  // Soft delete policy is required to set this option.
+  bool soft_deleted = 12 [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. If true, will also include folders and managed folders (besides
+  // objects) in the returned `prefixes`. Requires `delimiter` to be set to '/'.
+  bool include_folders_as_prefixes = 13
+      [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. Filter results to objects and prefixes that match this glob
+  // pattern. See [List Objects Using
+  // Glob](https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-objects-and-prefixes-using-glob)
+  // for the full syntax.
+  string match_glob = 14 [(google.api.field_behavior) = OPTIONAL];
+}
+
+// Request message for RewriteObject.
+// If the source object is encrypted using a Customer-Supplied Encryption Key
+// the key information must be provided in the copy_source_encryption_algorithm,
+// copy_source_encryption_key_bytes, and copy_source_encryption_key_sha256_bytes
+// fields. If the destination object should be encrypted the keying information
+// should be provided in the encryption_algorithm, encryption_key_bytes, and
+// encryption_key_sha256_bytes fields of the
+// common_object_request_params.customer_encryption field.
+message RewriteObjectRequest {
+  // Required. Immutable. The name of the destination object.
+  // See the
+  // [Naming Guidelines](https://cloud.google.com/storage/docs/objects#naming).
+  // Example: `test.txt`
+  // The `name` field by itself does not uniquely identify a Cloud Storage
+  // object. A Cloud Storage object is uniquely identified by the tuple of
+  // (bucket, object, generation).
+  string destination_name = 24 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.field_behavior) = IMMUTABLE
+  ];
+
+  // Required. Immutable. The name of the bucket containing the destination
+  // object.
+  string destination_bucket = 25 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.field_behavior) = IMMUTABLE,
+    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
+  ];
+
+  // The name of the Cloud KMS key that will be used to encrypt the destination
+  // object. The Cloud KMS key must be located in same location as the object.
+  // If the parameter is not specified, the request uses the destination
+  // bucket's default encryption key, if any, or else the Google-managed
+  // encryption key.
+  string destination_kms_key = 27 [(google.api.resource_reference) = {
+    type: "cloudkms.googleapis.com/CryptoKey"
+  }];
+
+  // Properties of the destination, post-rewrite object.
+  // The `name`, `bucket` and `kms_key` fields must not be populated (these
+  // values are specified in the `destination_name`, `destination_bucket`, and
+  // `destination_kms_key` fields).
+  // If `destination` is present it will be used to construct the destination
+  // object's metadata; otherwise the destination object's metadata will be
+  // copied from the source object.
+  Object destination = 1;
+
+  // Required. Name of the bucket in which to find the source object.
+  string source_bucket = 2 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
+  ];
+
+  // Required. Name of the source object.
+  string source_object = 3 [(google.api.field_behavior) = REQUIRED];
+
+  // If present, selects a specific revision of the source object (as opposed to
+  // the latest version, the default).
+  int64 source_generation = 4;
+
+  // Include this field (from the previous rewrite response) on each rewrite
+  // request after the first one, until the rewrite response 'done' flag is
+  // true. Calls that provide a rewriteToken can omit all other request fields,
+  // but if included those fields must match the values provided in the first
+  // rewrite request.
+  string rewrite_token = 5;
+
+  // Apply a predefined set of access controls to the destination object.
+  // Valid values are "authenticatedRead", "bucketOwnerFullControl",
+  // "bucketOwnerRead", "private", "projectPrivate", or "publicRead".
+  string destination_predefined_acl = 28;
+
+  // Makes the operation conditional on whether the object's current generation
+  // matches the given value. Setting to 0 makes the operation succeed only if
+  // there are no live versions of the object.
+  optional int64 if_generation_match = 7;
+
+  // Makes the operation conditional on whether the object's live generation
+  // does not match the given value. If no live object exists, the precondition
+  // fails. Setting to 0 makes the operation succeed only if there is a live
+  // version of the object.
+  optional int64 if_generation_not_match = 8;
+
+  // Makes the operation conditional on whether the destination object's current
+  // metageneration matches the given value.
+  optional int64 if_metageneration_match = 9;
+
+  // Makes the operation conditional on whether the destination object's current
+  // metageneration does not match the given value.
+  optional int64 if_metageneration_not_match = 10;
+
+  // Makes the operation conditional on whether the source object's live
+  // generation matches the given value.
+  optional int64 if_source_generation_match = 11;
+
+  // Makes the operation conditional on whether the source object's live
+  // generation does not match the given value.
+  optional int64 if_source_generation_not_match = 12;
+
+  // Makes the operation conditional on whether the source object's current
+  // metageneration matches the given value.
+  optional int64 if_source_metageneration_match = 13;
+
+  // Makes the operation conditional on whether the source object's current
+  // metageneration does not match the given value.
+  optional int64 if_source_metageneration_not_match = 14;
+
+  // The maximum number of bytes that will be rewritten per rewrite request.
+  // Most callers
+  // shouldn't need to specify this parameter - it is primarily in place to
+  // support testing. If specified the value must be an integral multiple of
+  // 1 MiB (1048576). Also, this only applies to requests where the source and
+  // destination span locations and/or storage classes. Finally, this value must
+  // not change across rewrite calls else you'll get an error that the
+  // `rewriteToken` is invalid.
+  int64 max_bytes_rewritten_per_call = 15;
+
+  // The algorithm used to encrypt the source object, if any. Used if the source
+  // object was encrypted with a Customer-Supplied Encryption Key.
+  string copy_source_encryption_algorithm = 16;
+
+  // The raw bytes (not base64-encoded) AES-256 encryption key used to encrypt
+  // the source object, if it was encrypted with a Customer-Supplied Encryption
+  // Key.
+  bytes copy_source_encryption_key_bytes = 21;
+
+  // The raw bytes (not base64-encoded) SHA256 hash of the encryption key used
+  // to encrypt the source object, if it was encrypted with a Customer-Supplied
+  // Encryption Key.
+  bytes copy_source_encryption_key_sha256_bytes = 22;
+
+  // A set of parameters common to Storage API requests concerning an object.
+  CommonObjectRequestParams common_object_request_params = 19;
+
+  // The checksums of the complete object. This will be used to validate the
+  // destination object after rewriting.
+  ObjectChecksums object_checksums = 29;
+}
+
+// A rewrite response.
+message RewriteResponse {
+  // The total bytes written so far, which can be used to provide a waiting user
+  // with a progress indicator. This property is always present in the response.
+  int64 total_bytes_rewritten = 1;
+
+  // The total size of the object being copied in bytes. This property is always
+  // present in the response.
+  int64 object_size = 2;
+
+  // `true` if the copy is finished; otherwise, `false` if
+  // the copy is in progress. This property is always present in the response.
+  bool done = 3;
+
+  // A token to use in subsequent requests to continue copying data. This token
+  // is present in the response only when there is more data to copy.
+  string rewrite_token = 4;
+
+  // A resource containing the metadata for the copied-to object. This property
+  // is present in the response only when copying completes.
+  Object resource = 5;
+}
+
+// Request message for MoveObject.
+message MoveObjectRequest {
+  // Required. Name of the bucket in which the object resides.
+  string bucket = 1 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
+  ];
+
+  // Required. Name of the source object.
+  string source_object = 2 [(google.api.field_behavior) = REQUIRED];
+
+  // Required. Name of the destination object.
+  string destination_object = 3 [(google.api.field_behavior) = REQUIRED];
+
+  // Optional. Makes the operation conditional on whether the source object's
+  // current generation matches the given value. `if_source_generation_match`
+  // and `if_source_generation_not_match` conditions are mutually exclusive:
+  // it's an error for both of them to be set in the request.
+  optional int64 if_source_generation_match = 4
+      [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. Makes the operation conditional on whether the source object's
+  // current generation does not match the given value.
+  // `if_source_generation_match` and `if_source_generation_not_match`
+  // conditions are mutually exclusive: it's an error for both of them to be set
+  // in the request.
+  optional int64 if_source_generation_not_match = 5
+      [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. Makes the operation conditional on whether the source object's
+  // current metageneration matches the given value.
+  // `if_source_metageneration_match` and `if_source_metageneration_not_match`
+  // conditions are mutually exclusive: it's an error for both of them to be set
+  // in the request.
+  optional int64 if_source_metageneration_match = 6
+      [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. Makes the operation conditional on whether the source object's
+  // current metageneration does not match the given value.
+  // `if_source_metageneration_match` and `if_source_metageneration_not_match`
+  // conditions are mutually exclusive: it's an error for both of them to be set
+  // in the request.
+  optional int64 if_source_metageneration_not_match = 7
+      [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. Makes the operation conditional on whether the destination
+  // object's current generation matches the given value. Setting to 0 makes the
+  // operation succeed only if there are no live versions of the object.
+  // `if_generation_match` and `if_generation_not_match` conditions are mutually
+  // exclusive: it's an error for both of them to be set in the request.
+  optional int64 if_generation_match = 8
+      [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. Makes the operation conditional on whether the destination
+  // object's current generation does not match the given value. If no live
+  // object exists, the precondition fails. Setting to 0 makes the operation
+  // succeed only if there is a live version of the object.
+  // `if_generation_match` and `if_generation_not_match` conditions are mutually
+  // exclusive: it's an error for both of them to be set in the request.
+  optional int64 if_generation_not_match = 9
+      [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. Makes the operation conditional on whether the destination
+  // object's current metageneration matches the given value.
+  // `if_metageneration_match` and `if_metageneration_not_match` conditions are
+  // mutually exclusive: it's an error for both of them to be set in the
+  // request.
+  optional int64 if_metageneration_match = 10
+      [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. Makes the operation conditional on whether the destination
+  // object's current metageneration does not match the given value.
+  // `if_metageneration_match` and `if_metageneration_not_match` conditions are
+  // mutually exclusive: it's an error for both of them to be set in the
+  // request.
+  optional int64 if_metageneration_not_match = 11
+      [(google.api.field_behavior) = OPTIONAL];
+}
+
+// Request message for UpdateObject.
+message UpdateObjectRequest {
+  // Required. The object to update.
+  // The object's bucket and name fields are used to identify the object to
+  // update. If present, the object's generation field selects a specific
+  // revision of this object whose metadata should be updated. Otherwise,
+  // assumes the live version of the object.
+  Object object = 1 [(google.api.field_behavior) = REQUIRED];
+
+  // Makes the operation conditional on whether the object's current generation
+  // matches the given value. Setting to 0 makes the operation succeed only if
+  // there are no live versions of the object.
+  optional int64 if_generation_match = 2;
+
+  // Makes the operation conditional on whether the object's live generation
+  // does not match the given value. If no live object exists, the precondition
+  // fails. Setting to 0 makes the operation succeed only if there is a live
+  // version of the object.
+  optional int64 if_generation_not_match = 3;
+
+  // Makes the operation conditional on whether the object's current
+  // metageneration matches the given value.
+  optional int64 if_metageneration_match = 4;
+
+  // Makes the operation conditional on whether the object's current
+  // metageneration does not match the given value.
+  optional int64 if_metageneration_not_match = 5;
+
+  // Apply a predefined set of access controls to this object.
+  // Valid values are "authenticatedRead", "bucketOwnerFullControl",
+  // "bucketOwnerRead", "private", "projectPrivate", or "publicRead".
+  string predefined_acl = 10;
+
+  // Required. List of fields to be updated.
+  //
+  // To specify ALL fields, equivalent to the JSON API's "update" function,
+  // specify a single field with the value `*`. Note: not recommended. If a new
+  // field is introduced at a later time, an older client updating with the `*`
+  // may accidentally reset the new field's value.
+  //
+  // Not specifying any fields is an error.
+  google.protobuf.FieldMask update_mask = 7
+      [(google.api.field_behavior) = REQUIRED];
+
+  // A set of parameters common to Storage API requests concerning an object.
+  CommonObjectRequestParams common_object_request_params = 8;
+}
+
+// Parameters that can be passed to any object request.
+message CommonObjectRequestParams {
+  // Encryption algorithm used with the Customer-Supplied Encryption Keys
+  // feature.
+  string encryption_algorithm = 1;
+
+  // Encryption key used with the Customer-Supplied Encryption Keys feature.
+  // In raw bytes format (not base64-encoded).
+  bytes encryption_key_bytes = 4;
+
+  // SHA256 hash of encryption key used with the Customer-Supplied Encryption
+  // Keys feature.
+  bytes encryption_key_sha256_bytes = 5;
+}
+
+// Shared constants.
+message ServiceConstants {
+  // A collection of constant values meaningful to the Storage API.
+  enum Values {
+    option allow_alias = true;
+
+    // Unused. Proto3 requires first enum to be 0.
+    VALUES_UNSPECIFIED = 0;
+
+    // The maximum size chunk that can will be returned in a single
+    // ReadRequest.
+    // 2 MiB.
+    MAX_READ_CHUNK_BYTES = 2097152;
+
+    // The maximum size chunk that can be sent in a single WriteObjectRequest.
+    // 2 MiB.
+    MAX_WRITE_CHUNK_BYTES = 2097152;
+
+    // The maximum size of an object in MB - whether written in a single stream
+    // or composed from multiple other objects.
+    // 5 TiB.
+    MAX_OBJECT_SIZE_MB = 5242880;
+
+    // The maximum length field name that can be sent in a single
+    // custom metadata field.
+    // 1 KiB.
+    MAX_CUSTOM_METADATA_FIELD_NAME_BYTES = 1024;
+
+    // The maximum length field value that can be sent in a single
+    // custom_metadata field.
+    // 4 KiB.
+    MAX_CUSTOM_METADATA_FIELD_VALUE_BYTES = 4096;
+
+    // The maximum total bytes that can be populated into all field names and
+    // values of the custom_metadata for one object.
+    // 8 KiB.
+    MAX_CUSTOM_METADATA_TOTAL_SIZE_BYTES = 8192;
+
+    // The maximum total bytes that can be populated into all bucket metadata
+    // fields.
+    // 20 KiB.
+    MAX_BUCKET_METADATA_TOTAL_SIZE_BYTES = 20480;
+
+    // The maximum number of NotificationConfigs that can be registered
+    // for a given bucket.
+    MAX_NOTIFICATION_CONFIGS_PER_BUCKET = 100;
+
+    // The maximum number of LifecycleRules that can be registered for a given
+    // bucket.
+    MAX_LIFECYCLE_RULES_PER_BUCKET = 100;
+
+    // The maximum number of custom attributes per NotificationConfigs.
+    MAX_NOTIFICATION_CUSTOM_ATTRIBUTES = 5;
+
+    // The maximum length of a custom attribute key included in
+    // NotificationConfig.
+    MAX_NOTIFICATION_CUSTOM_ATTRIBUTE_KEY_LENGTH = 256;
+
+    // The maximum length of a custom attribute value included in a
+    // NotificationConfig.
+    MAX_NOTIFICATION_CUSTOM_ATTRIBUTE_VALUE_LENGTH = 1024;
+
+    // The maximum number of key/value entries per bucket label.
+    MAX_LABELS_ENTRIES_COUNT = 64;
+
+    // The maximum character length of the key or value in a bucket
+    // label map.
+    MAX_LABELS_KEY_VALUE_LENGTH = 63;
+
+    // The maximum byte size of the key or value in a bucket label
+    // map.
+    MAX_LABELS_KEY_VALUE_BYTES = 128;
+
+    // The maximum number of object IDs that can be included in a
+    // DeleteObjectsRequest.
+    MAX_OBJECT_IDS_PER_DELETE_OBJECTS_REQUEST = 1000;
+
+    // The maximum number of days for which a token returned by the
+    // GetListObjectsSplitPoints RPC is valid.
+    SPLIT_TOKEN_MAX_VALID_DAYS = 14;
+  }
+}
+
+// A bucket.
+message Bucket {
+  option (google.api.resource) = {
+    type: "storage.googleapis.com/Bucket"
+    pattern: "projects/{project}/buckets/{bucket}"
+    plural: "buckets"
+    singular: "bucket"
+  };
+
+  // Billing properties of a bucket.
+  message Billing {
+    // When set to true, Requester Pays is enabled for this bucket.
+    bool requester_pays = 1;
+  }
+
+  // Cross-Origin Response sharing (CORS) properties for a bucket.
+  // For more on Cloud Storage and CORS, see
+  // https://cloud.google.com/storage/docs/cross-origin.
+  // For more on CORS in general, see https://tools.ietf.org/html/rfc6454.
+  message Cors {
+    // The list of Origins eligible to receive CORS response headers. See
+    // [https://tools.ietf.org/html/rfc6454][RFC 6454] for more on origins.
+    // Note: "*" is permitted in the list of origins, and means "any Origin".
+    repeated string origin = 1;
+
+    // The list of HTTP methods on which to include CORS response headers,
+    // (`GET`, `OPTIONS`, `POST`, etc) Note: "*" is permitted in the list of
+    // methods, and means "any method".
+    repeated string method = 2;
+
+    // The list of HTTP headers other than the
+    // [https://www.w3.org/TR/cors/#simple-response-header][simple response
+    // headers] to give permission for the user-agent to share across domains.
+    repeated string response_header = 3;
+
+    // The value, in seconds, to return in the
+    // [https://www.w3.org/TR/cors/#access-control-max-age-response-header][Access-Control-Max-Age
+    // header] used in preflight responses.
+    int32 max_age_seconds = 4;
+  }
+
+  // Encryption properties of a bucket.
+  message Encryption {
+    // The name of the Cloud KMS key that will be used to encrypt objects
+    // inserted into this bucket, if no encryption method is specified.
+    string default_kms_key = 1 [(google.api.resource_reference) = {
+      type: "cloudkms.googleapis.com/CryptoKey"
+    }];
+  }
+
+  // Bucket restriction options.
+  message IamConfig {
+    // Settings for Uniform Bucket level access.
+    // See https://cloud.google.com/storage/docs/uniform-bucket-level-access.
+    message UniformBucketLevelAccess {
+      // If set, access checks only use bucket-level IAM policies or above.
+      bool enabled = 1;
+
+      // The deadline time for changing
+      // `iam_config.uniform_bucket_level_access.enabled` from `true` to
+      // `false`. Mutable until the specified deadline is reached, but not
+      // afterward.
+      google.protobuf.Timestamp lock_time = 2;
+    }
+
+    // Bucket restriction options currently enforced on the bucket.
+    UniformBucketLevelAccess uniform_bucket_level_access = 1;
+
+    // Whether IAM will enforce public access prevention. Valid values are
+    // "enforced" or "inherited".
+    string public_access_prevention = 3;
+  }
+
+  // Lifecycle properties of a bucket.
+  // For more information, see https://cloud.google.com/storage/docs/lifecycle.
+  message Lifecycle {
+    // A lifecycle Rule, combining an action to take on an object and a
+    // condition which will trigger that action.
+    message Rule {
+      // An action to take on an object.
+      message Action {
+        // Type of the action. Currently, only `Delete`, `SetStorageClass`, and
+        // `AbortIncompleteMultipartUpload` are supported.
+        string type = 1;
+
+        // Target storage class. Required iff the type of the action is
+        // SetStorageClass.
+        string storage_class = 2;
+      }
+
+      // A condition of an object which triggers some action.
+      message Condition {
+        // Age of an object (in days). This condition is satisfied when an
+        // object reaches the specified age.
+        // A value of 0 indicates that all objects immediately match this
+        // condition.
+        optional int32 age_days = 1;
+
+        // This condition is satisfied when an object is created before midnight
+        // of the specified date in UTC.
+        google.type.Date created_before = 2;
+
+        // Relevant only for versioned objects. If the value is
+        // `true`, this condition matches live objects; if the value
+        // is `false`, it matches archived objects.
+        optional bool is_live = 3;
+
+        // Relevant only for versioned objects. If the value is N, this
+        // condition is satisfied when there are at least N versions (including
+        // the live version) newer than this version of the object.
+        optional int32 num_newer_versions = 4;
+
+        // Objects having any of the storage classes specified by this condition
+        // will be matched. Values include `MULTI_REGIONAL`, `REGIONAL`,
+        // `NEARLINE`, `COLDLINE`, `STANDARD`, and
+        // `DURABLE_REDUCED_AVAILABILITY`.
+        repeated string matches_storage_class = 5;
+
+        // Number of days that have elapsed since the custom timestamp set on an
+        // object.
+        // The value of the field must be a nonnegative integer.
+        optional int32 days_since_custom_time = 7;
+
+        // An object matches this condition if the custom timestamp set on the
+        // object is before the specified date in UTC.
+        google.type.Date custom_time_before = 8;
+
+        // This condition is relevant only for versioned objects. An object
+        // version satisfies this condition only if these many days have been
+        // passed since it became noncurrent. The value of the field must be a
+        // nonnegative integer. If it's zero, the object version will become
+        // eligible for Lifecycle action as soon as it becomes noncurrent.
+        optional int32 days_since_noncurrent_time = 9;
+
+        // This condition is relevant only for versioned objects. An object
+        // version satisfies this condition only if it became noncurrent before
+        // the specified date in UTC.
+        google.type.Date noncurrent_time_before = 10;
+
+        // List of object name prefixes. If any prefix exactly matches the
+        // beginning of the object name, the condition evaluates to true.
+        repeated string matches_prefix = 11;
+
+        // List of object name suffixes. If any suffix exactly matches the
+        // end of the object name, the condition evaluates to true.
+        repeated string matches_suffix = 12;
+      }
+
+      // The action to take.
+      Action action = 1;
+
+      // The condition(s) under which the action will be taken.
+      Condition condition = 2;
+    }
+
+    // A lifecycle management rule, which is made of an action to take and the
+    // condition(s) under which the action will be taken.
+    repeated Rule rule = 1;
+  }
+
+  // Logging-related properties of a bucket.
+  message Logging {
+    // The destination bucket where the current bucket's logs should be placed,
+    // using path format (like `projects/123456/buckets/foo`).
+    string log_bucket = 1;
+
+    // A prefix for log object names.
+    string log_object_prefix = 2;
+  }
+
+  // Retention policy properties of a bucket.
+  message RetentionPolicy {
+    // Server-determined value that indicates the time from which policy was
+    // enforced and effective.
+    google.protobuf.Timestamp effective_time = 1;
+
+    // Once locked, an object retention policy cannot be modified.
+    bool is_locked = 2;
+
+    // The duration that objects need to be retained. Retention duration must be
+    // greater than zero and less than 100 years. Note that enforcement of
+    // retention periods less than a day is not guaranteed. Such periods should
+    // only be used for testing purposes. Any `nanos` value specified will be
+    // rounded down to the nearest second.
+    google.protobuf.Duration retention_duration = 4;
+  }
+
+  // Soft delete policy properties of a bucket.
+  message SoftDeletePolicy {
+    // The period of time that soft-deleted objects in the bucket must be
+    // retained and cannot be permanently deleted. The duration must be greater
+    // than or equal to 7 days and less than 1 year.
+    optional google.protobuf.Duration retention_duration = 1;
+
+    // Time from which the policy was effective. This is service-provided.
+    optional google.protobuf.Timestamp effective_time = 2;
+  }
+
+  // Properties of a bucket related to versioning.
+  // For more on Cloud Storage versioning, see
+  // https://cloud.google.com/storage/docs/object-versioning.
+  message Versioning {
+    // While set to true, versioning is fully enabled for this bucket.
+    bool enabled = 1;
+  }
+
+  // Properties of a bucket related to accessing the contents as a static
+  // website. For more on hosting a static website via Cloud Storage, see
+  // https://cloud.google.com/storage/docs/hosting-static-website.
+  message Website {
+    // If the requested object path is missing, the service will ensure the path
+    // has a trailing '/', append this suffix, and attempt to retrieve the
+    // resulting object. This allows the creation of `index.html`
+    // objects to represent directory pages.
+    string main_page_suffix = 1;
+
+    // If the requested object path is missing, and any
+    // `mainPageSuffix` object is missing, if applicable, the service
+    // will return the named object from this bucket as the content for a
+    // [https://tools.ietf.org/html/rfc7231#section-6.5.4][404 Not Found]
+    // result.
+    string not_found_page = 2;
+  }
+
+  // Configuration for Custom Dual Regions.  It should specify precisely two
+  // eligible regions within the same Multiregion. More information on regions
+  // may be found [https://cloud.google.com/storage/docs/locations][here].
+  message CustomPlacementConfig {
+    // List of locations to use for data placement.
+    repeated string data_locations = 1;
+  }
+
+  // Configuration for a bucket's Autoclass feature.
+  message Autoclass {
+    // Enables Autoclass.
+    bool enabled = 1;
+
+    // Output only. Latest instant at which the `enabled` field was set to true
+    // after being disabled/unconfigured or set to false after being enabled. If
+    // Autoclass is enabled when the bucket is created, the toggle_time is set
+    // to the bucket creation time.
+    google.protobuf.Timestamp toggle_time = 2
+        [(google.api.field_behavior) = OUTPUT_ONLY];
+
+    // An object in an Autoclass bucket will eventually cool down to the
+    // terminal storage class if there is no access to the object.
+    // The only valid values are NEARLINE and ARCHIVE.
+    optional string terminal_storage_class = 3;
+
+    // Output only. Latest instant at which the autoclass terminal storage class
+    // was updated.
+    optional google.protobuf.Timestamp terminal_storage_class_update_time = 4
+        [(google.api.field_behavior) = OUTPUT_ONLY];
+  }
+
+  // Configuration for a bucket's hierarchical namespace feature.
+  message HierarchicalNamespace {
+    // Optional. Enables the hierarchical namespace feature.
+    bool enabled = 1 [(google.api.field_behavior) = OPTIONAL];
+  }
+
+  // Immutable. The name of the bucket.
+  // Format: `projects/{project}/buckets/{bucket}`
+  string name = 1 [(google.api.field_behavior) = IMMUTABLE];
+
+  // Output only. The user-chosen part of the bucket name. The `{bucket}`
+  // portion of the `name` field. For globally unique buckets, this is equal to
+  // the "bucket name" of other Cloud Storage APIs. Example: "pub".
+  string bucket_id = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // The etag of the bucket.
+  // If included in the metadata of an UpdateBucketRequest, the operation will
+  // only be performed if the etag matches that of the bucket.
+  string etag = 29;
+
+  // Immutable. The project which owns this bucket, in the format of
+  // "projects/{projectIdentifier}".
+  // {projectIdentifier} can be the project ID or project number.
+  string project = 3 [
+    (google.api.field_behavior) = IMMUTABLE,
+    (google.api.resource_reference) = {
+      type: "cloudresourcemanager.googleapis.com/Project"
+    }
+  ];
+
+  // Output only. The metadata generation of this bucket.
+  int64 metageneration = 4 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Immutable. The location of the bucket. Object data for objects in the
+  // bucket resides in physical storage within this region.  Defaults to `US`.
+  // See the
+  // [https://developers.google.com/storage/docs/concepts-techniques#specifyinglocations"][developer's
+  // guide] for the authoritative list. Attempting to update this field after
+  // the bucket is created will result in an error.
+  string location = 5 [(google.api.field_behavior) = IMMUTABLE];
+
+  // Output only. The location type of the bucket (region, dual-region,
+  // multi-region, etc).
+  string location_type = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // The bucket's default storage class, used whenever no storageClass is
+  // specified for a newly-created object. This defines how objects in the
+  // bucket are stored and determines the SLA and the cost of storage.
+  // If this value is not specified when the bucket is created, it will default
+  // to `STANDARD`. For more information, see
+  // https://developers.google.com/storage/docs/storage-classes.
+  string storage_class = 7;
+
+  // The recovery point objective for cross-region replication of the bucket.
+  // Applicable only for dual- and multi-region buckets. "DEFAULT" uses default
+  // replication. "ASYNC_TURBO" enables turbo replication, valid for dual-region
+  // buckets only. If rpo is not specified when the bucket is created, it
+  // defaults to "DEFAULT". For more information, see
+  // https://cloud.google.com/storage/docs/availability-durability#turbo-replication.
+  string rpo = 27;
+
+  // Access controls on the bucket.
+  // If iam_config.uniform_bucket_level_access is enabled on this bucket,
+  // requests to set, read, or modify acl is an error.
+  repeated BucketAccessControl acl = 8;
+
+  // Default access controls to apply to new objects when no ACL is provided.
+  // If iam_config.uniform_bucket_level_access is enabled on this bucket,
+  // requests to set, read, or modify acl is an error.
+  repeated ObjectAccessControl default_object_acl = 9;
+
+  // The bucket's lifecycle config. See
+  // [https://developers.google.com/storage/docs/lifecycle]Lifecycle Management]
+  // for more information.
+  Lifecycle lifecycle = 10;
+
+  // Output only. The creation time of the bucket.
+  google.protobuf.Timestamp create_time = 11
+      [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // The bucket's [https://www.w3.org/TR/cors/][Cross-Origin Resource Sharing]
+  // (CORS) config.
+  repeated Cors cors = 12;
+
+  // Output only. The modification time of the bucket.
+  google.protobuf.Timestamp update_time = 13
+      [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // The default value for event-based hold on newly created objects in this
+  // bucket.  Event-based hold is a way to retain objects indefinitely until an
+  // event occurs, signified by the
+  // hold's release. After being released, such objects will be subject to
+  // bucket-level retention (if any).  One sample use case of this flag is for
+  // banks to hold loan documents for at least 3 years after loan is paid in
+  // full. Here, bucket-level retention is 3 years and the event is loan being
+  // paid in full. In this example, these objects will be held intact for any
+  // number of years until the event has occurred (event-based hold on the
+  // object is released) and then 3 more years after that. That means retention
+  // duration of the objects begins from the moment event-based hold
+  // transitioned from true to false.  Objects under event-based hold cannot be
+  // deleted, overwritten or archived until the hold is removed.
+  bool default_event_based_hold = 14;
+
+  // User-provided labels, in key/value pairs.
+  map<string, string> labels = 15;
+
+  // The bucket's website config, controlling how the service behaves
+  // when accessing bucket contents as a web site. See the
+  // [https://cloud.google.com/storage/docs/static-website][Static Website
+  // Examples] for more information.
+  Website website = 16;
+
+  // The bucket's versioning config.
+  Versioning versioning = 17;
+
+  // The bucket's logging config, which defines the destination bucket
+  // and name prefix (if any) for the current bucket's logs.
+  Logging logging = 18;
+
+  // Output only. The owner of the bucket. This is always the project team's
+  // owner group.
+  Owner owner = 19 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Encryption config for a bucket.
+  Encryption encryption = 20;
+
+  // The bucket's billing config.
+  Billing billing = 21;
+
+  // The bucket's retention policy. The retention policy enforces a minimum
+  // retention time for all objects contained in the bucket, based on their
+  // creation time. Any attempt to overwrite or delete objects younger than the
+  // retention period will result in a PERMISSION_DENIED error.  An unlocked
+  // retention policy can be modified or removed from the bucket via a
+  // storage.buckets.update operation. A locked retention policy cannot be
+  // removed or shortened in duration for the lifetime of the bucket.
+  // Attempting to remove or decrease period of a locked retention policy will
+  // result in a PERMISSION_DENIED error.
+  RetentionPolicy retention_policy = 22;
+
+  // The bucket's IAM config.
+  IamConfig iam_config = 23;
+
+  // Reserved for future use.
+  bool satisfies_pzs = 25;
+
+  // Configuration that, if present, specifies the data placement for a
+  // [https://cloud.google.com/storage/docs/locations#location-dr][configurable
+  // dual-region].
+  CustomPlacementConfig custom_placement_config = 26;
+
+  // The bucket's Autoclass configuration. If there is no configuration, the
+  // Autoclass feature will be disabled and have no effect on the bucket.
+  Autoclass autoclass = 28;
+
+  // Optional. The bucket's hierarchical namespace configuration. If there is no
+  // configuration, the hierarchical namespace feature will be disabled and have
+  // no effect on the bucket.
+  HierarchicalNamespace hierarchical_namespace = 32
+      [(google.api.field_behavior) = OPTIONAL];
+
+  // Optional. The bucket's soft delete policy. The soft delete policy prevents
+  // soft-deleted objects from being permanently deleted.
+  SoftDeletePolicy soft_delete_policy = 31
+      [(google.api.field_behavior) = OPTIONAL];
+}
+
+// An access-control entry.
+message BucketAccessControl {
+  // The access permission for the entity.
+  string role = 1;
+
+  // The ID of the access-control entry.
+  string id = 2;
+
+  // The entity holding the permission, in one of the following forms:
+  // * `user-{userid}`
+  // * `user-{email}`
+  // * `group-{groupid}`
+  // * `group-{email}`
+  // * `domain-{domain}`
+  // * `project-{team}-{projectnumber}`
+  // * `project-{team}-{projectid}`
+  // * `allUsers`
+  // * `allAuthenticatedUsers`
+  // Examples:
+  // * The user `liz@example.com` would be `user-liz@example.com`.
+  // * The group `example@googlegroups.com` would be
+  // `group-example@googlegroups.com`
+  // * All members of the Google Apps for Business domain `example.com` would be
+  // `domain-example.com`
+  // For project entities, `project-{team}-{projectnumber}` format will be
+  // returned on response.
+  string entity = 3;
+
+  // Output only. The alternative entity format, if exists. For project
+  // entities, `project-{team}-{projectid}` format will be returned on response.
+  string entity_alt = 9 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // The ID for the entity, if any.
+  string entity_id = 4;
+
+  // The etag of the BucketAccessControl.
+  // If included in the metadata of an update or delete request message, the
+  // operation operation will only be performed if the etag matches that of the
+  // bucket's BucketAccessControl.
+  string etag = 8;
+
+  // The email address associated with the entity, if any.
+  string email = 5;
+
+  // The domain associated with the entity, if any.
+  string domain = 6;
+
+  // The project team associated with the entity, if any.
+  ProjectTeam project_team = 7;
+}
+
+// Message used to convey content being read or written, along with an optional
+// checksum.
+message ChecksummedData {
+  // Optional. The data.
+  bytes content = 1 [ctype = CORD, (google.api.field_behavior) = OPTIONAL];
+
+  // If set, the CRC32C digest of the content field.
+  optional fixed32 crc32c = 2;
+}
+
+// Message used for storing full (not subrange) object checksums.
+message ObjectChecksums {
+  // CRC32C digest of the object data. Computed by the Cloud Storage service for
+  // all written objects.
+  // If set in a WriteObjectRequest, service will validate that the stored
+  // object matches this checksum.
+  optional fixed32 crc32c = 1;
+
+  // 128 bit MD5 hash of the object data.
+  // For more information about using the MD5 hash, see
+  // [https://cloud.google.com/storage/docs/hashes-etags#json-api][Hashes and
+  // ETags: Best Practices].
+  // Not all objects will provide an MD5 hash. For example, composite objects
+  // provide only crc32c hashes. This value is equivalent to running `cat
+  // object.txt | openssl md5 -binary`
+  bytes md5_hash = 2;
+}
+
+// Describes the Customer-Supplied Encryption Key mechanism used to store an
+// Object's data at rest.
+message CustomerEncryption {
+  // The encryption algorithm.
+  string encryption_algorithm = 1;
+
+  // SHA256 hash value of the encryption key.
+  // In raw bytes format (not base64-encoded).
+  bytes key_sha256_bytes = 3;
+}
+
+// An object.
+message Object {
+  // Immutable. The name of this object. Nearly any sequence of unicode
+  // characters is valid. See
+  // [Guidelines](https://cloud.google.com/storage/docs/objects#naming).
+  // Example: `test.txt`
+  // The `name` field by itself does not uniquely identify a Cloud Storage
+  // object. A Cloud Storage object is uniquely identified by the tuple of
+  // (bucket, object, generation).
+  string name = 1 [(google.api.field_behavior) = IMMUTABLE];
+
+  // Immutable. The name of the bucket containing this object.
+  string bucket = 2 [
+    (google.api.field_behavior) = IMMUTABLE,
+    (google.api.resource_reference) = { type: "storage.googleapis.com/Bucket" }
+  ];
+
+  // The etag of the object.
+  // If included in the metadata of an update or delete request message, the
+  // operation will only be performed if the etag matches that of the live
+  // object.
+  string etag = 27;
+
+  // Immutable. The content generation of this object. Used for object
+  // versioning.
+  int64 generation = 3 [(google.api.field_behavior) = IMMUTABLE];
+
+  // Output only. Restore token used to differentiate deleted objects with the
+  // same name and generation. This field is output only, and only set for
+  // deleted objects in HNS buckets.
+  optional string restore_token = 35
+      [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Output only. The version of the metadata for this generation of this
+  // object. Used for preconditions and for detecting changes in metadata. A
+  // metageneration number is only meaningful in the context of a particular
+  // generation of a particular object.
+  int64 metageneration = 4 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Storage class of the object.
+  string storage_class = 5;
+
+  // Output only. Content-Length of the object data in bytes, matching
+  // [https://tools.ietf.org/html/rfc7230#section-3.3.2][RFC 7230 §3.3.2].
+  int64 size = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Content-Encoding of the object data, matching
+  // [https://tools.ietf.org/html/rfc7231#section-3.1.2.2][RFC 7231 §3.1.2.2]
+  string content_encoding = 7;
+
+  // Content-Disposition of the object data, matching
+  // [https://tools.ietf.org/html/rfc6266][RFC 6266].
+  string content_disposition = 8;
+
+  // Cache-Control directive for the object data, matching
+  // [https://tools.ietf.org/html/rfc7234#section-5.2"][RFC 7234 §5.2].
+  // If omitted, and the object is accessible to all anonymous users, the
+  // default will be `public, max-age=3600`.
+  string cache_control = 9;
+
+  // Access controls on the object.
+  // If iam_config.uniform_bucket_level_access is enabled on the parent
+  // bucket, requests to set, read, or modify acl is an error.
+  repeated ObjectAccessControl acl = 10;
+
+  // Content-Language of the object data, matching
+  // [https://tools.ietf.org/html/rfc7231#section-3.1.3.2][RFC 7231 §3.1.3.2].
+  string content_language = 11;
+
+  // Output only. If this object is noncurrent, this is the time when the object
+  // became noncurrent.
+  google.protobuf.Timestamp delete_time = 12
+      [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Output only. The time when the object was finalized.
+  google.protobuf.Timestamp finalize_time = 36
+      [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Content-Type of the object data, matching
+  // [https://tools.ietf.org/html/rfc7231#section-3.1.1.5][RFC 7231 §3.1.1.5].
+  // If an object is stored without a Content-Type, it is served as
+  // `application/octet-stream`.
+  string content_type = 13;
+
+  // Output only. The creation time of the object.
+  google.protobuf.Timestamp create_time = 14
+      [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Output only. Number of underlying components that make up this object.
+  // Components are accumulated by compose operations.
+  int32 component_count = 15 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Output only. Hashes for the data part of this object. This field is used
+  // for output only and will be silently ignored if provided in requests. The
+  // checksums of the complete object regardless of data range. If the object is
+  // downloaded in full, the client should compute one of these checksums over
+  // the downloaded object and compare it against the value provided here.
+  ObjectChecksums checksums = 16 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Output only. The modification time of the object metadata.
+  // Set initially to object creation time and then updated whenever any
+  // metadata of the object changes. This includes changes made by a requester,
+  // such as modifying custom metadata, as well as changes made by Cloud Storage
+  // on behalf of a requester, such as changing the storage class based on an
+  // Object Lifecycle Configuration.
+  google.protobuf.Timestamp update_time = 17
+      [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Cloud KMS Key used to encrypt this object, if the object is encrypted by
+  // such a key.
+  string kms_key = 18 [(google.api.resource_reference) = {
+    type: "cloudkms.googleapis.com/CryptoKey"
+  }];
+
+  // Output only. The time at which the object's storage class was last changed.
+  // When the object is initially created, it will be set to time_created.
+  google.protobuf.Timestamp update_storage_class_time = 19
+      [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Whether an object is under temporary hold. While this flag is set to true,
+  // the object is protected against deletion and overwrites.  A common use case
+  // of this flag is regulatory investigations where objects need to be retained
+  // while the investigation is ongoing. Note that unlike event-based hold,
+  // temporary hold does not impact retention expiration time of an object.
+  bool temporary_hold = 20;
+
+  // A server-determined value that specifies the earliest time that the
+  // object's retention period expires.
+  // Note 1: This field is not provided for objects with an active event-based
+  // hold, since retention expiration is unknown until the hold is removed.
+  // Note 2: This value can be provided even when temporary hold is set (so that
+  // the user can reason about policy without having to first unset the
+  // temporary hold).
+  google.protobuf.Timestamp retention_expire_time = 21;
+
+  // User-provided metadata, in key/value pairs.
+  map<string, string> metadata = 22;
+
+  // Whether an object is under event-based hold.
+  // An event-based hold is a way to force the retention of an object until
+  // after some event occurs. Once the hold is released by explicitly setting
+  // this field to false, the object will become subject to any bucket-level
+  // retention policy, except that the retention duration will be calculated
+  // from the time the event based hold was lifted, rather than the time the
+  // object was created.
+  //
+  // In a WriteObject request, not setting this field implies that the value
+  // should be taken from the parent bucket's "default_event_based_hold" field.
+  // In a response, this field will always be set to true or false.
+  optional bool event_based_hold = 23;
+
+  // Output only. The owner of the object. This will always be the uploader of
+  // the object.
+  Owner owner = 24 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Metadata of Customer-Supplied Encryption Key, if the object is encrypted by
+  // such a key.
+  CustomerEncryption customer_encryption = 25;
+
+  // A user-specified timestamp set on an object.
+  google.protobuf.Timestamp custom_time = 26;
+
+  // Output only. This is the time when the object became soft-deleted.
+  //
+  // Soft-deleted objects are only accessible if a soft_delete_policy is
+  // enabled. Also see hard_delete_time.
+  optional google.protobuf.Timestamp soft_delete_time = 28
+      [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // Output only. The time when the object will be permanently deleted.
+  //
+  // Only set when an object becomes soft-deleted with a soft_delete_policy.
+  // Otherwise, the object will not be accessible.
+  optional google.protobuf.Timestamp hard_delete_time = 29
+      [(google.api.field_behavior) = OUTPUT_ONLY];
+}
+
+// An access-control entry.
+message ObjectAccessControl {
+  // The access permission for the entity. One of the following values:
+  // * `READER`
+  // * `WRITER`
+  // * `OWNER`
+  string role = 1;
+
+  // The ID of the access-control entry.
+  string id = 2;
+
+  // The entity holding the permission, in one of the following forms:
+  // * `user-{userid}`
+  // * `user-{email}`
+  // * `group-{groupid}`
+  // * `group-{email}`
+  // * `domain-{domain}`
+  // * `project-{team}-{projectnumber}`
+  // * `project-{team}-{projectid}`
+  // * `allUsers`
+  // * `allAuthenticatedUsers`
+  // Examples:
+  // * The user `liz@example.com` would be `user-liz@example.com`.
+  // * The group `example@googlegroups.com` would be
+  // `group-example@googlegroups.com`.
+  // * All members of the Google Apps for Business domain `example.com` would be
+  // `domain-example.com`.
+  // For project entities, `project-{team}-{projectnumber}` format will be
+  // returned on response.
+  string entity = 3;
+
+  // Output only. The alternative entity format, if exists. For project
+  // entities, `project-{team}-{projectid}` format will be returned on response.
+  string entity_alt = 9 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+  // The ID for the entity, if any.
+  string entity_id = 4;
+
+  // The etag of the ObjectAccessControl.
+  // If included in the metadata of an update or delete request message, the
+  // operation will only be performed if the etag matches that of the live
+  // object's ObjectAccessControl.
+  string etag = 8;
+
+  // The email address associated with the entity, if any.
+  string email = 5;
+
+  // The domain associated with the entity, if any.
+  string domain = 6;
+
+  // The project team associated with the entity, if any.
+  ProjectTeam project_team = 7;
+}
+
+// The result of a call to Objects.ListObjects
+message ListObjectsResponse {
+  // The list of items.
+  repeated Object objects = 1;
+
+  // The list of prefixes of objects matching-but-not-listed up to and including
+  // the requested delimiter.
+  repeated string prefixes = 2;
+
+  // The continuation token, used to page through large result sets. Provide
+  // this value in a subsequent request to return the next page of results.
+  string next_page_token = 3;
+}
+
+// Represents the Viewers, Editors, or Owners of a given project.
+message ProjectTeam {
+  // The project number.
+  string project_number = 1;
+
+  // The team.
+  string team = 2;
+}
+
+// The owner of a specific resource.
+message Owner {
+  // The entity, in the form `user-`*userId*.
+  string entity = 1;
+
+  // The ID for the entity.
+  string entity_id = 2;
+}
diff --git a/storage/control/apiv2/storage_control_client.go b/storage/control/apiv2/storage_control_client.go
index 87f9cc0..004e3e1 100755
--- a/storage/control/apiv2/storage_control_client.go
+++ b/storage/control/apiv2/storage_control_client.go
@@ -19,12 +19,14 @@
 import (
 	"context"
 	"fmt"
+	"log/slog"
 	"math"
 	"net/url"
 	"regexp"
 	"strings"
 	"time"
 
+	iampb "cloud.google.com/go/iam/apiv1/iampb"
 	"cloud.google.com/go/longrunning"
 	lroauto "cloud.google.com/go/longrunning/autogen"
 	longrunningpb "cloud.google.com/go/longrunning/autogen/longrunningpb"
@@ -44,16 +46,33 @@
 
 // StorageControlCallOptions contains the retry settings for each method of StorageControlClient.
 type StorageControlCallOptions struct {
-	CreateFolder        []gax.CallOption
-	DeleteFolder        []gax.CallOption
-	GetFolder           []gax.CallOption
-	ListFolders         []gax.CallOption
-	RenameFolder        []gax.CallOption
-	GetStorageLayout    []gax.CallOption
-	CreateManagedFolder []gax.CallOption
-	DeleteManagedFolder []gax.CallOption
-	GetManagedFolder    []gax.CallOption
-	ListManagedFolders  []gax.CallOption
+	CreateFolder              []gax.CallOption
+	DeleteFolder              []gax.CallOption
+	GetFolder                 []gax.CallOption
+	ListFolders               []gax.CallOption
+	RenameFolder              []gax.CallOption
+	GetStorageLayout          []gax.CallOption
+	CreateManagedFolder       []gax.CallOption
+	DeleteManagedFolder       []gax.CallOption
+	GetManagedFolder          []gax.CallOption
+	ListManagedFolders        []gax.CallOption
+	DeleteBucket              []gax.CallOption
+	GetBucket                 []gax.CallOption
+	CreateBucket              []gax.CallOption
+	ListBuckets               []gax.CallOption
+	LockBucketRetentionPolicy []gax.CallOption
+	GetIamPolicy              []gax.CallOption
+	SetIamPolicy              []gax.CallOption
+	TestIamPermissions        []gax.CallOption
+	UpdateBucket              []gax.CallOption
+	ComposeObject             []gax.CallOption
+	DeleteObject              []gax.CallOption
+	RestoreObject             []gax.CallOption
+	GetObject                 []gax.CallOption
+	UpdateObject              []gax.CallOption
+	ListObjects               []gax.CallOption
+	RewriteObject             []gax.CallOption
+	MoveObject                []gax.CallOption
 }
 
 func defaultStorageControlGRPCClientOptions() []option.ClientOption {
@@ -181,6 +200,57 @@
 				})
 			}),
 		},
+		DeleteBucket: []gax.CallOption{
+			gax.WithTimeout(60000 * time.Millisecond),
+		},
+		GetBucket: []gax.CallOption{
+			gax.WithTimeout(60000 * time.Millisecond),
+		},
+		CreateBucket: []gax.CallOption{
+			gax.WithTimeout(60000 * time.Millisecond),
+		},
+		ListBuckets: []gax.CallOption{
+			gax.WithTimeout(60000 * time.Millisecond),
+		},
+		LockBucketRetentionPolicy: []gax.CallOption{
+			gax.WithTimeout(60000 * time.Millisecond),
+		},
+		GetIamPolicy: []gax.CallOption{
+			gax.WithTimeout(60000 * time.Millisecond),
+		},
+		SetIamPolicy: []gax.CallOption{
+			gax.WithTimeout(60000 * time.Millisecond),
+		},
+		TestIamPermissions: []gax.CallOption{
+			gax.WithTimeout(60000 * time.Millisecond),
+		},
+		UpdateBucket: []gax.CallOption{
+			gax.WithTimeout(60000 * time.Millisecond),
+		},
+		ComposeObject: []gax.CallOption{
+			gax.WithTimeout(60000 * time.Millisecond),
+		},
+		DeleteObject: []gax.CallOption{
+			gax.WithTimeout(60000 * time.Millisecond),
+		},
+		RestoreObject: []gax.CallOption{
+			gax.WithTimeout(60000 * time.Millisecond),
+		},
+		GetObject: []gax.CallOption{
+			gax.WithTimeout(60000 * time.Millisecond),
+		},
+		UpdateObject: []gax.CallOption{
+			gax.WithTimeout(60000 * time.Millisecond),
+		},
+		ListObjects: []gax.CallOption{
+			gax.WithTimeout(60000 * time.Millisecond),
+		},
+		RewriteObject: []gax.CallOption{
+			gax.WithTimeout(60000 * time.Millisecond),
+		},
+		MoveObject: []gax.CallOption{
+			gax.WithTimeout(60000 * time.Millisecond),
+		},
 	}
 }
 
@@ -200,6 +270,23 @@
 	DeleteManagedFolder(context.Context, *controlpb.DeleteManagedFolderRequest, ...gax.CallOption) error
 	GetManagedFolder(context.Context, *controlpb.GetManagedFolderRequest, ...gax.CallOption) (*controlpb.ManagedFolder, error)
 	ListManagedFolders(context.Context, *controlpb.ListManagedFoldersRequest, ...gax.CallOption) *ManagedFolderIterator
+	DeleteBucket(context.Context, *controlpb.DeleteBucketRequest, ...gax.CallOption) error
+	GetBucket(context.Context, *controlpb.GetBucketRequest, ...gax.CallOption) (*controlpb.Bucket, error)
+	CreateBucket(context.Context, *controlpb.CreateBucketRequest, ...gax.CallOption) (*controlpb.Bucket, error)
+	ListBuckets(context.Context, *controlpb.ListBucketsRequest, ...gax.CallOption) *BucketIterator
+	LockBucketRetentionPolicy(context.Context, *controlpb.LockBucketRetentionPolicyRequest, ...gax.CallOption) (*controlpb.Bucket, error)
+	GetIamPolicy(context.Context, *iampb.GetIamPolicyRequest, ...gax.CallOption) (*iampb.Policy, error)
+	SetIamPolicy(context.Context, *iampb.SetIamPolicyRequest, ...gax.CallOption) (*iampb.Policy, error)
+	TestIamPermissions(context.Context, *iampb.TestIamPermissionsRequest, ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error)
+	UpdateBucket(context.Context, *controlpb.UpdateBucketRequest, ...gax.CallOption) (*controlpb.Bucket, error)
+	ComposeObject(context.Context, *controlpb.ComposeObjectRequest, ...gax.CallOption) (*controlpb.Object, error)
+	DeleteObject(context.Context, *controlpb.DeleteObjectRequest, ...gax.CallOption) error
+	RestoreObject(context.Context, *controlpb.RestoreObjectRequest, ...gax.CallOption) (*controlpb.Object, error)
+	GetObject(context.Context, *controlpb.GetObjectRequest, ...gax.CallOption) (*controlpb.Object, error)
+	UpdateObject(context.Context, *controlpb.UpdateObjectRequest, ...gax.CallOption) (*controlpb.Object, error)
+	ListObjects(context.Context, *controlpb.ListObjectsRequest, ...gax.CallOption) *ObjectIterator
+	RewriteObject(context.Context, *controlpb.RewriteObjectRequest, ...gax.CallOption) (*controlpb.RewriteResponse, error)
+	MoveObject(context.Context, *controlpb.MoveObjectRequest, ...gax.CallOption) (*controlpb.Object, error)
 }
 
 // StorageControlClient is a client for interacting with Storage Control API.
@@ -305,6 +392,109 @@
 	return c.internalClient.ListManagedFolders(ctx, req, opts...)
 }
 
+// DeleteBucket permanently deletes an empty bucket.
+func (c *StorageControlClient) DeleteBucket(ctx context.Context, req *controlpb.DeleteBucketRequest, opts ...gax.CallOption) error {
+	return c.internalClient.DeleteBucket(ctx, req, opts...)
+}
+
+// GetBucket returns metadata for the specified bucket.
+func (c *StorageControlClient) GetBucket(ctx context.Context, req *controlpb.GetBucketRequest, opts ...gax.CallOption) (*controlpb.Bucket, error) {
+	return c.internalClient.GetBucket(ctx, req, opts...)
+}
+
+// CreateBucket creates a new bucket.
+func (c *StorageControlClient) CreateBucket(ctx context.Context, req *controlpb.CreateBucketRequest, opts ...gax.CallOption) (*controlpb.Bucket, error) {
+	return c.internalClient.CreateBucket(ctx, req, opts...)
+}
+
+// ListBuckets retrieves a list of buckets for a given project.
+func (c *StorageControlClient) ListBuckets(ctx context.Context, req *controlpb.ListBucketsRequest, opts ...gax.CallOption) *BucketIterator {
+	return c.internalClient.ListBuckets(ctx, req, opts...)
+}
+
+// LockBucketRetentionPolicy locks retention policy on a bucket.
+func (c *StorageControlClient) LockBucketRetentionPolicy(ctx context.Context, req *controlpb.LockBucketRetentionPolicyRequest, opts ...gax.CallOption) (*controlpb.Bucket, error) {
+	return c.internalClient.LockBucketRetentionPolicy(ctx, req, opts...)
+}
+
+// GetIamPolicy gets the IAM policy for a specified bucket.
+// The resource field in the request should be
+// projects/_/buckets/{bucket}.
+func (c *StorageControlClient) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
+	return c.internalClient.GetIamPolicy(ctx, req, opts...)
+}
+
+// SetIamPolicy updates an IAM policy for the specified bucket.
+// The resource field in the request should be
+// projects/_/buckets/{bucket}.
+func (c *StorageControlClient) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
+	return c.internalClient.SetIamPolicy(ctx, req, opts...)
+}
+
+// TestIamPermissions tests a set of permissions on the given bucket, object, or managed folder
+// to see which, if any, are held by the caller.
+// The resource field in the request should be
+// projects/_/buckets/{bucket} for a bucket,
+// projects/_/buckets/{bucket}/objects/{object} for an object, or
+// projects/_/buckets/{bucket}/managedFolders/{managedFolder}
+// for a managed folder.
+func (c *StorageControlClient) TestIamPermissions(ctx context.Context, req *iampb.TestIamPermissionsRequest, opts ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) {
+	return c.internalClient.TestIamPermissions(ctx, req, opts...)
+}
+
+// UpdateBucket updates a bucket. Equivalent to JSON API’s storage.buckets.patch method.
+func (c *StorageControlClient) UpdateBucket(ctx context.Context, req *controlpb.UpdateBucketRequest, opts ...gax.CallOption) (*controlpb.Bucket, error) {
+	return c.internalClient.UpdateBucket(ctx, req, opts...)
+}
+
+// ComposeObject concatenates a list of existing objects into a new object in the same
+// bucket.
+func (c *StorageControlClient) ComposeObject(ctx context.Context, req *controlpb.ComposeObjectRequest, opts ...gax.CallOption) (*controlpb.Object, error) {
+	return c.internalClient.ComposeObject(ctx, req, opts...)
+}
+
+// DeleteObject deletes an object and its metadata.
+//
+// Deletions are normally permanent when versioning is disabled or whenever
+// the generation parameter is used. However, if soft delete is enabled for
+// the bucket, deleted objects can be restored using RestoreObject until the
+// soft delete retention period has passed.
+func (c *StorageControlClient) DeleteObject(ctx context.Context, req *controlpb.DeleteObjectRequest, opts ...gax.CallOption) error {
+	return c.internalClient.DeleteObject(ctx, req, opts...)
+}
+
+// RestoreObject restores a soft-deleted object.
+func (c *StorageControlClient) RestoreObject(ctx context.Context, req *controlpb.RestoreObjectRequest, opts ...gax.CallOption) (*controlpb.Object, error) {
+	return c.internalClient.RestoreObject(ctx, req, opts...)
+}
+
+// GetObject retrieves an object’s metadata.
+func (c *StorageControlClient) GetObject(ctx context.Context, req *controlpb.GetObjectRequest, opts ...gax.CallOption) (*controlpb.Object, error) {
+	return c.internalClient.GetObject(ctx, req, opts...)
+}
+
+// UpdateObject updates an object’s metadata.
+// Equivalent to JSON API’s storage.objects.patch.
+func (c *StorageControlClient) UpdateObject(ctx context.Context, req *controlpb.UpdateObjectRequest, opts ...gax.CallOption) (*controlpb.Object, error) {
+	return c.internalClient.UpdateObject(ctx, req, opts...)
+}
+
+// ListObjects retrieves a list of objects matching the criteria.
+func (c *StorageControlClient) ListObjects(ctx context.Context, req *controlpb.ListObjectsRequest, opts ...gax.CallOption) *ObjectIterator {
+	return c.internalClient.ListObjects(ctx, req, opts...)
+}
+
+// RewriteObject rewrites a source object to a destination object. Optionally overrides
+// metadata.
+func (c *StorageControlClient) RewriteObject(ctx context.Context, req *controlpb.RewriteObjectRequest, opts ...gax.CallOption) (*controlpb.RewriteResponse, error) {
+	return c.internalClient.RewriteObject(ctx, req, opts...)
+}
+
+// MoveObject moves the source object to the destination object in the same bucket.
+func (c *StorageControlClient) MoveObject(ctx context.Context, req *controlpb.MoveObjectRequest, opts ...gax.CallOption) (*controlpb.Object, error) {
+	return c.internalClient.MoveObject(ctx, req, opts...)
+}
+
 // storageControlGRPCClient is a client for interacting with Storage Control API over gRPC transport.
 //
 // Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls.
@@ -325,6 +515,8 @@
 
 	// The x-goog-* metadata to be sent with each request.
 	xGoogHeaders []string
+
+	logger *slog.Logger
 }
 
 // NewStorageControlClient creates a new storage control client based on gRPC.
@@ -351,6 +543,7 @@
 		connPool:             connPool,
 		storageControlClient: controlpb.NewStorageControlClient(connPool),
 		CallOptions:          &client.CallOptions,
+		logger:               internaloption.GetLogger(opts),
 	}
 	c.setGoogleClientInfo()
 
@@ -416,7 +609,7 @@
 	var resp *controlpb.Folder
 	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
 		var err error
-		resp, err = c.storageControlClient.CreateFolder(ctx, req, settings.GRPC...)
+		resp, err = executeRPC(ctx, c.storageControlClient.CreateFolder, req, settings.GRPC, c.logger, "CreateFolder")
 		return err
 	}, opts...)
 	if err != nil {
@@ -445,7 +638,7 @@
 	opts = append((*c.CallOptions).DeleteFolder[0:len((*c.CallOptions).DeleteFolder):len((*c.CallOptions).DeleteFolder)], opts...)
 	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
 		var err error
-		_, err = c.storageControlClient.DeleteFolder(ctx, req, settings.GRPC...)
+		_, err = executeRPC(ctx, c.storageControlClient.DeleteFolder, req, settings.GRPC, c.logger, "DeleteFolder")
 		return err
 	}, opts...)
 	return err
@@ -472,7 +665,7 @@
 	var resp *controlpb.Folder
 	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
 		var err error
-		resp, err = c.storageControlClient.GetFolder(ctx, req, settings.GRPC...)
+		resp, err = executeRPC(ctx, c.storageControlClient.GetFolder, req, settings.GRPC, c.logger, "GetFolder")
 		return err
 	}, opts...)
 	if err != nil {
@@ -510,7 +703,7 @@
 		}
 		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
 			var err error
-			resp, err = c.storageControlClient.ListFolders(ctx, req, settings.GRPC...)
+			resp, err = executeRPC(ctx, c.storageControlClient.ListFolders, req, settings.GRPC, c.logger, "ListFolders")
 			return err
 		}, opts...)
 		if err != nil {
@@ -554,7 +747,7 @@
 	var resp *longrunningpb.Operation
 	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
 		var err error
-		resp, err = c.storageControlClient.RenameFolder(ctx, req, settings.GRPC...)
+		resp, err = executeRPC(ctx, c.storageControlClient.RenameFolder, req, settings.GRPC, c.logger, "RenameFolder")
 		return err
 	}, opts...)
 	if err != nil {
@@ -586,7 +779,7 @@
 	var resp *controlpb.StorageLayout
 	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
 		var err error
-		resp, err = c.storageControlClient.GetStorageLayout(ctx, req, settings.GRPC...)
+		resp, err = executeRPC(ctx, c.storageControlClient.GetStorageLayout, req, settings.GRPC, c.logger, "GetStorageLayout")
 		return err
 	}, opts...)
 	if err != nil {
@@ -616,7 +809,7 @@
 	var resp *controlpb.ManagedFolder
 	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
 		var err error
-		resp, err = c.storageControlClient.CreateManagedFolder(ctx, req, settings.GRPC...)
+		resp, err = executeRPC(ctx, c.storageControlClient.CreateManagedFolder, req, settings.GRPC, c.logger, "CreateManagedFolder")
 		return err
 	}, opts...)
 	if err != nil {
@@ -645,7 +838,7 @@
 	opts = append((*c.CallOptions).DeleteManagedFolder[0:len((*c.CallOptions).DeleteManagedFolder):len((*c.CallOptions).DeleteManagedFolder)], opts...)
 	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
 		var err error
-		_, err = c.storageControlClient.DeleteManagedFolder(ctx, req, settings.GRPC...)
+		_, err = executeRPC(ctx, c.storageControlClient.DeleteManagedFolder, req, settings.GRPC, c.logger, "DeleteManagedFolder")
 		return err
 	}, opts...)
 	return err
@@ -672,7 +865,7 @@
 	var resp *controlpb.ManagedFolder
 	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
 		var err error
-		resp, err = c.storageControlClient.GetManagedFolder(ctx, req, settings.GRPC...)
+		resp, err = executeRPC(ctx, c.storageControlClient.GetManagedFolder, req, settings.GRPC, c.logger, "GetManagedFolder")
 		return err
 	}, opts...)
 	if err != nil {
@@ -710,7 +903,7 @@
 		}
 		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
 			var err error
-			resp, err = c.storageControlClient.ListManagedFolders(ctx, req, settings.GRPC...)
+			resp, err = executeRPC(ctx, c.storageControlClient.ListManagedFolders, req, settings.GRPC, c.logger, "ListManagedFolders")
 			return err
 		}, opts...)
 		if err != nil {
@@ -736,6 +929,525 @@
 	return it
 }
 
+func (c *storageControlGRPCClient) DeleteBucket(ctx context.Context, req *controlpb.DeleteBucketRequest, opts ...gax.CallOption) error {
+	routingHeaders := ""
+	routingHeadersMap := make(map[string]string)
+	if reg := regexp.MustCompile("(?P<bucket>.*)"); reg.MatchString(req.GetName()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetName())[1])) > 0 {
+		routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetName())[1])
+	}
+	for headerName, headerValue := range routingHeadersMap {
+		routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue)
+	}
+	routingHeaders = strings.TrimSuffix(routingHeaders, "&")
+	hds := []string{"x-goog-request-params", routingHeaders}
+
+	hds = append(c.xGoogHeaders, hds...)
+	ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...)
+	opts = append((*c.CallOptions).DeleteBucket[0:len((*c.CallOptions).DeleteBucket):len((*c.CallOptions).DeleteBucket)], opts...)
+	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+		var err error
+		_, err = executeRPC(ctx, c.storageControlClient.DeleteBucket, req, settings.GRPC, c.logger, "DeleteBucket")
+		return err
+	}, opts...)
+	return err
+}
+
+func (c *storageControlGRPCClient) GetBucket(ctx context.Context, req *controlpb.GetBucketRequest, opts ...gax.CallOption) (*controlpb.Bucket, error) {
+	routingHeaders := ""
+	routingHeadersMap := make(map[string]string)
+	if reg := regexp.MustCompile("(?P<bucket>.*)"); reg.MatchString(req.GetName()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetName())[1])) > 0 {
+		routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetName())[1])
+	}
+	for headerName, headerValue := range routingHeadersMap {
+		routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue)
+	}
+	routingHeaders = strings.TrimSuffix(routingHeaders, "&")
+	hds := []string{"x-goog-request-params", routingHeaders}
+
+	hds = append(c.xGoogHeaders, hds...)
+	ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...)
+	opts = append((*c.CallOptions).GetBucket[0:len((*c.CallOptions).GetBucket):len((*c.CallOptions).GetBucket)], opts...)
+	var resp *controlpb.Bucket
+	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+		var err error
+		resp, err = executeRPC(ctx, c.storageControlClient.GetBucket, req, settings.GRPC, c.logger, "GetBucket")
+		return err
+	}, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return resp, nil
+}
+
+func (c *storageControlGRPCClient) CreateBucket(ctx context.Context, req *controlpb.CreateBucketRequest, opts ...gax.CallOption) (*controlpb.Bucket, error) {
+	routingHeaders := ""
+	routingHeadersMap := make(map[string]string)
+	if reg := regexp.MustCompile("(?P<project>.*)"); reg.MatchString(req.GetParent()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetParent())[1])) > 0 {
+		routingHeadersMap["project"] = url.QueryEscape(reg.FindStringSubmatch(req.GetParent())[1])
+	}
+	if reg := regexp.MustCompile("(?P<project>.*)"); reg.MatchString(req.GetBucket().GetProject()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetBucket().GetProject())[1])) > 0 {
+		routingHeadersMap["project"] = url.QueryEscape(reg.FindStringSubmatch(req.GetBucket().GetProject())[1])
+	}
+	for headerName, headerValue := range routingHeadersMap {
+		routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue)
+	}
+	routingHeaders = strings.TrimSuffix(routingHeaders, "&")
+	hds := []string{"x-goog-request-params", routingHeaders}
+
+	hds = append(c.xGoogHeaders, hds...)
+	ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...)
+	opts = append((*c.CallOptions).CreateBucket[0:len((*c.CallOptions).CreateBucket):len((*c.CallOptions).CreateBucket)], opts...)
+	var resp *controlpb.Bucket
+	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+		var err error
+		resp, err = executeRPC(ctx, c.storageControlClient.CreateBucket, req, settings.GRPC, c.logger, "CreateBucket")
+		return err
+	}, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return resp, nil
+}
+
+func (c *storageControlGRPCClient) ListBuckets(ctx context.Context, req *controlpb.ListBucketsRequest, opts ...gax.CallOption) *BucketIterator {
+	routingHeaders := ""
+	routingHeadersMap := make(map[string]string)
+	if reg := regexp.MustCompile("(?P<project>.*)"); reg.MatchString(req.GetParent()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetParent())[1])) > 0 {
+		routingHeadersMap["project"] = url.QueryEscape(reg.FindStringSubmatch(req.GetParent())[1])
+	}
+	for headerName, headerValue := range routingHeadersMap {
+		routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue)
+	}
+	routingHeaders = strings.TrimSuffix(routingHeaders, "&")
+	hds := []string{"x-goog-request-params", routingHeaders}
+
+	hds = append(c.xGoogHeaders, hds...)
+	ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...)
+	opts = append((*c.CallOptions).ListBuckets[0:len((*c.CallOptions).ListBuckets):len((*c.CallOptions).ListBuckets)], opts...)
+	it := &BucketIterator{}
+	req = proto.Clone(req).(*controlpb.ListBucketsRequest)
+	it.InternalFetch = func(pageSize int, pageToken string) ([]*controlpb.Bucket, string, error) {
+		resp := &controlpb.ListBucketsResponse{}
+		if pageToken != "" {
+			req.PageToken = pageToken
+		}
+		if pageSize > math.MaxInt32 {
+			req.PageSize = math.MaxInt32
+		} else if pageSize != 0 {
+			req.PageSize = int32(pageSize)
+		}
+		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+			var err error
+			resp, err = executeRPC(ctx, c.storageControlClient.ListBuckets, req, settings.GRPC, c.logger, "ListBuckets")
+			return err
+		}, opts...)
+		if err != nil {
+			return nil, "", err
+		}
+
+		it.Response = resp
+		return resp.GetBuckets(), resp.GetNextPageToken(), nil
+	}
+	fetch := func(pageSize int, pageToken string) (string, error) {
+		items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
+		if err != nil {
+			return "", err
+		}
+		it.items = append(it.items, items...)
+		return nextPageToken, nil
+	}
+
+	it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
+	it.pageInfo.MaxSize = int(req.GetPageSize())
+	it.pageInfo.Token = req.GetPageToken()
+
+	return it
+}
+
+func (c *storageControlGRPCClient) LockBucketRetentionPolicy(ctx context.Context, req *controlpb.LockBucketRetentionPolicyRequest, opts ...gax.CallOption) (*controlpb.Bucket, error) {
+	routingHeaders := ""
+	routingHeadersMap := make(map[string]string)
+	if reg := regexp.MustCompile("(?P<bucket>.*)"); reg.MatchString(req.GetBucket()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetBucket())[1])) > 0 {
+		routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetBucket())[1])
+	}
+	for headerName, headerValue := range routingHeadersMap {
+		routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue)
+	}
+	routingHeaders = strings.TrimSuffix(routingHeaders, "&")
+	hds := []string{"x-goog-request-params", routingHeaders}
+
+	hds = append(c.xGoogHeaders, hds...)
+	ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...)
+	opts = append((*c.CallOptions).LockBucketRetentionPolicy[0:len((*c.CallOptions).LockBucketRetentionPolicy):len((*c.CallOptions).LockBucketRetentionPolicy)], opts...)
+	var resp *controlpb.Bucket
+	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+		var err error
+		resp, err = executeRPC(ctx, c.storageControlClient.LockBucketRetentionPolicy, req, settings.GRPC, c.logger, "LockBucketRetentionPolicy")
+		return err
+	}, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return resp, nil
+}
+
+func (c *storageControlGRPCClient) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
+	routingHeaders := ""
+	routingHeadersMap := make(map[string]string)
+	if reg := regexp.MustCompile("(?P<bucket>.*)"); reg.MatchString(req.GetResource()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetResource())[1])) > 0 {
+		routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetResource())[1])
+	}
+	for headerName, headerValue := range routingHeadersMap {
+		routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue)
+	}
+	routingHeaders = strings.TrimSuffix(routingHeaders, "&")
+	hds := []string{"x-goog-request-params", routingHeaders}
+
+	hds = append(c.xGoogHeaders, hds...)
+	ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...)
+	opts = append((*c.CallOptions).GetIamPolicy[0:len((*c.CallOptions).GetIamPolicy):len((*c.CallOptions).GetIamPolicy)], opts...)
+	var resp *iampb.Policy
+	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+		var err error
+		resp, err = executeRPC(ctx, c.storageControlClient.GetIamPolicy, req, settings.GRPC, c.logger, "GetIamPolicy")
+		return err
+	}, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return resp, nil
+}
+
+func (c *storageControlGRPCClient) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
+	routingHeaders := ""
+	routingHeadersMap := make(map[string]string)
+	if reg := regexp.MustCompile("(?P<bucket>.*)"); reg.MatchString(req.GetResource()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetResource())[1])) > 0 {
+		routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetResource())[1])
+	}
+	for headerName, headerValue := range routingHeadersMap {
+		routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue)
+	}
+	routingHeaders = strings.TrimSuffix(routingHeaders, "&")
+	hds := []string{"x-goog-request-params", routingHeaders}
+
+	hds = append(c.xGoogHeaders, hds...)
+	ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...)
+	opts = append((*c.CallOptions).SetIamPolicy[0:len((*c.CallOptions).SetIamPolicy):len((*c.CallOptions).SetIamPolicy)], opts...)
+	var resp *iampb.Policy
+	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+		var err error
+		resp, err = executeRPC(ctx, c.storageControlClient.SetIamPolicy, req, settings.GRPC, c.logger, "SetIamPolicy")
+		return err
+	}, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return resp, nil
+}
+
+func (c *storageControlGRPCClient) TestIamPermissions(ctx context.Context, req *iampb.TestIamPermissionsRequest, opts ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) {
+	routingHeaders := ""
+	routingHeadersMap := make(map[string]string)
+	if reg := regexp.MustCompile("(?P<bucket>.*)"); reg.MatchString(req.GetResource()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetResource())[1])) > 0 {
+		routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetResource())[1])
+	}
+	if reg := regexp.MustCompile("(?P<bucket>projects/[^/]+/buckets/[^/]+)/objects(?:/.*)?"); reg.MatchString(req.GetResource()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetResource())[1])) > 0 {
+		routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetResource())[1])
+	}
+	if reg := regexp.MustCompile("(?P<bucket>projects/[^/]+/buckets/[^/]+)/managedFolders(?:/.*)?"); reg.MatchString(req.GetResource()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetResource())[1])) > 0 {
+		routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetResource())[1])
+	}
+	for headerName, headerValue := range routingHeadersMap {
+		routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue)
+	}
+	routingHeaders = strings.TrimSuffix(routingHeaders, "&")
+	hds := []string{"x-goog-request-params", routingHeaders}
+
+	hds = append(c.xGoogHeaders, hds...)
+	ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...)
+	opts = append((*c.CallOptions).TestIamPermissions[0:len((*c.CallOptions).TestIamPermissions):len((*c.CallOptions).TestIamPermissions)], opts...)
+	var resp *iampb.TestIamPermissionsResponse
+	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+		var err error
+		resp, err = executeRPC(ctx, c.storageControlClient.TestIamPermissions, req, settings.GRPC, c.logger, "TestIamPermissions")
+		return err
+	}, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return resp, nil
+}
+
+func (c *storageControlGRPCClient) UpdateBucket(ctx context.Context, req *controlpb.UpdateBucketRequest, opts ...gax.CallOption) (*controlpb.Bucket, error) {
+	routingHeaders := ""
+	routingHeadersMap := make(map[string]string)
+	if reg := regexp.MustCompile("(?P<bucket>.*)"); reg.MatchString(req.GetBucket().GetName()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetBucket().GetName())[1])) > 0 {
+		routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetBucket().GetName())[1])
+	}
+	for headerName, headerValue := range routingHeadersMap {
+		routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue)
+	}
+	routingHeaders = strings.TrimSuffix(routingHeaders, "&")
+	hds := []string{"x-goog-request-params", routingHeaders}
+
+	hds = append(c.xGoogHeaders, hds...)
+	ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...)
+	opts = append((*c.CallOptions).UpdateBucket[0:len((*c.CallOptions).UpdateBucket):len((*c.CallOptions).UpdateBucket)], opts...)
+	var resp *controlpb.Bucket
+	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+		var err error
+		resp, err = executeRPC(ctx, c.storageControlClient.UpdateBucket, req, settings.GRPC, c.logger, "UpdateBucket")
+		return err
+	}, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return resp, nil
+}
+
+func (c *storageControlGRPCClient) ComposeObject(ctx context.Context, req *controlpb.ComposeObjectRequest, opts ...gax.CallOption) (*controlpb.Object, error) {
+	routingHeaders := ""
+	routingHeadersMap := make(map[string]string)
+	if reg := regexp.MustCompile("(?P<bucket>.*)"); reg.MatchString(req.GetDestination().GetBucket()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetDestination().GetBucket())[1])) > 0 {
+		routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetDestination().GetBucket())[1])
+	}
+	for headerName, headerValue := range routingHeadersMap {
+		routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue)
+	}
+	routingHeaders = strings.TrimSuffix(routingHeaders, "&")
+	hds := []string{"x-goog-request-params", routingHeaders}
+
+	hds = append(c.xGoogHeaders, hds...)
+	ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...)
+	opts = append((*c.CallOptions).ComposeObject[0:len((*c.CallOptions).ComposeObject):len((*c.CallOptions).ComposeObject)], opts...)
+	var resp *controlpb.Object
+	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+		var err error
+		resp, err = executeRPC(ctx, c.storageControlClient.ComposeObject, req, settings.GRPC, c.logger, "ComposeObject")
+		return err
+	}, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return resp, nil
+}
+
+func (c *storageControlGRPCClient) DeleteObject(ctx context.Context, req *controlpb.DeleteObjectRequest, opts ...gax.CallOption) error {
+	routingHeaders := ""
+	routingHeadersMap := make(map[string]string)
+	if reg := regexp.MustCompile("(?P<bucket>.*)"); reg.MatchString(req.GetBucket()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetBucket())[1])) > 0 {
+		routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetBucket())[1])
+	}
+	for headerName, headerValue := range routingHeadersMap {
+		routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue)
+	}
+	routingHeaders = strings.TrimSuffix(routingHeaders, "&")
+	hds := []string{"x-goog-request-params", routingHeaders}
+
+	hds = append(c.xGoogHeaders, hds...)
+	ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...)
+	opts = append((*c.CallOptions).DeleteObject[0:len((*c.CallOptions).DeleteObject):len((*c.CallOptions).DeleteObject)], opts...)
+	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+		var err error
+		_, err = executeRPC(ctx, c.storageControlClient.DeleteObject, req, settings.GRPC, c.logger, "DeleteObject")
+		return err
+	}, opts...)
+	return err
+}
+
+func (c *storageControlGRPCClient) RestoreObject(ctx context.Context, req *controlpb.RestoreObjectRequest, opts ...gax.CallOption) (*controlpb.Object, error) {
+	routingHeaders := ""
+	routingHeadersMap := make(map[string]string)
+	if reg := regexp.MustCompile("(?P<bucket>.*)"); reg.MatchString(req.GetBucket()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetBucket())[1])) > 0 {
+		routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetBucket())[1])
+	}
+	for headerName, headerValue := range routingHeadersMap {
+		routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue)
+	}
+	routingHeaders = strings.TrimSuffix(routingHeaders, "&")
+	hds := []string{"x-goog-request-params", routingHeaders}
+
+	hds = append(c.xGoogHeaders, hds...)
+	ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...)
+	opts = append((*c.CallOptions).RestoreObject[0:len((*c.CallOptions).RestoreObject):len((*c.CallOptions).RestoreObject)], opts...)
+	var resp *controlpb.Object
+	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+		var err error
+		resp, err = executeRPC(ctx, c.storageControlClient.RestoreObject, req, settings.GRPC, c.logger, "RestoreObject")
+		return err
+	}, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return resp, nil
+}
+
+func (c *storageControlGRPCClient) GetObject(ctx context.Context, req *controlpb.GetObjectRequest, opts ...gax.CallOption) (*controlpb.Object, error) {
+	routingHeaders := ""
+	routingHeadersMap := make(map[string]string)
+	if reg := regexp.MustCompile("(?P<bucket>.*)"); reg.MatchString(req.GetBucket()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetBucket())[1])) > 0 {
+		routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetBucket())[1])
+	}
+	for headerName, headerValue := range routingHeadersMap {
+		routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue)
+	}
+	routingHeaders = strings.TrimSuffix(routingHeaders, "&")
+	hds := []string{"x-goog-request-params", routingHeaders}
+
+	hds = append(c.xGoogHeaders, hds...)
+	ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...)
+	opts = append((*c.CallOptions).GetObject[0:len((*c.CallOptions).GetObject):len((*c.CallOptions).GetObject)], opts...)
+	var resp *controlpb.Object
+	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+		var err error
+		resp, err = executeRPC(ctx, c.storageControlClient.GetObject, req, settings.GRPC, c.logger, "GetObject")
+		return err
+	}, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return resp, nil
+}
+
+func (c *storageControlGRPCClient) UpdateObject(ctx context.Context, req *controlpb.UpdateObjectRequest, opts ...gax.CallOption) (*controlpb.Object, error) {
+	routingHeaders := ""
+	routingHeadersMap := make(map[string]string)
+	if reg := regexp.MustCompile("(?P<bucket>.*)"); reg.MatchString(req.GetObject().GetBucket()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetObject().GetBucket())[1])) > 0 {
+		routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetObject().GetBucket())[1])
+	}
+	for headerName, headerValue := range routingHeadersMap {
+		routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue)
+	}
+	routingHeaders = strings.TrimSuffix(routingHeaders, "&")
+	hds := []string{"x-goog-request-params", routingHeaders}
+
+	hds = append(c.xGoogHeaders, hds...)
+	ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...)
+	opts = append((*c.CallOptions).UpdateObject[0:len((*c.CallOptions).UpdateObject):len((*c.CallOptions).UpdateObject)], opts...)
+	var resp *controlpb.Object
+	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+		var err error
+		resp, err = executeRPC(ctx, c.storageControlClient.UpdateObject, req, settings.GRPC, c.logger, "UpdateObject")
+		return err
+	}, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return resp, nil
+}
+
+func (c *storageControlGRPCClient) ListObjects(ctx context.Context, req *controlpb.ListObjectsRequest, opts ...gax.CallOption) *ObjectIterator {
+	routingHeaders := ""
+	routingHeadersMap := make(map[string]string)
+	if reg := regexp.MustCompile("(?P<bucket>.*)"); reg.MatchString(req.GetParent()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetParent())[1])) > 0 {
+		routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetParent())[1])
+	}
+	for headerName, headerValue := range routingHeadersMap {
+		routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue)
+	}
+	routingHeaders = strings.TrimSuffix(routingHeaders, "&")
+	hds := []string{"x-goog-request-params", routingHeaders}
+
+	hds = append(c.xGoogHeaders, hds...)
+	ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...)
+	opts = append((*c.CallOptions).ListObjects[0:len((*c.CallOptions).ListObjects):len((*c.CallOptions).ListObjects)], opts...)
+	it := &ObjectIterator{}
+	req = proto.Clone(req).(*controlpb.ListObjectsRequest)
+	it.InternalFetch = func(pageSize int, pageToken string) ([]*controlpb.Object, string, error) {
+		resp := &controlpb.ListObjectsResponse{}
+		if pageToken != "" {
+			req.PageToken = pageToken
+		}
+		if pageSize > math.MaxInt32 {
+			req.PageSize = math.MaxInt32
+		} else if pageSize != 0 {
+			req.PageSize = int32(pageSize)
+		}
+		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+			var err error
+			resp, err = executeRPC(ctx, c.storageControlClient.ListObjects, req, settings.GRPC, c.logger, "ListObjects")
+			return err
+		}, opts...)
+		if err != nil {
+			return nil, "", err
+		}
+
+		it.Response = resp
+		return resp.GetObjects(), resp.GetNextPageToken(), nil
+	}
+	fetch := func(pageSize int, pageToken string) (string, error) {
+		items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
+		if err != nil {
+			return "", err
+		}
+		it.items = append(it.items, items...)
+		return nextPageToken, nil
+	}
+
+	it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
+	it.pageInfo.MaxSize = int(req.GetPageSize())
+	it.pageInfo.Token = req.GetPageToken()
+
+	return it
+}
+
+func (c *storageControlGRPCClient) RewriteObject(ctx context.Context, req *controlpb.RewriteObjectRequest, opts ...gax.CallOption) (*controlpb.RewriteResponse, error) {
+	routingHeaders := ""
+	routingHeadersMap := make(map[string]string)
+	if reg := regexp.MustCompile("(.*)"); reg.MatchString(req.GetSourceBucket()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetSourceBucket())[1])) > 0 {
+		routingHeadersMap["source_bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetSourceBucket())[1])
+	}
+	if reg := regexp.MustCompile("(?P<bucket>.*)"); reg.MatchString(req.GetDestinationBucket()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetDestinationBucket())[1])) > 0 {
+		routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetDestinationBucket())[1])
+	}
+	for headerName, headerValue := range routingHeadersMap {
+		routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue)
+	}
+	routingHeaders = strings.TrimSuffix(routingHeaders, "&")
+	hds := []string{"x-goog-request-params", routingHeaders}
+
+	hds = append(c.xGoogHeaders, hds...)
+	ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...)
+	opts = append((*c.CallOptions).RewriteObject[0:len((*c.CallOptions).RewriteObject):len((*c.CallOptions).RewriteObject)], opts...)
+	var resp *controlpb.RewriteResponse
+	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+		var err error
+		resp, err = executeRPC(ctx, c.storageControlClient.RewriteObject, req, settings.GRPC, c.logger, "RewriteObject")
+		return err
+	}, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return resp, nil
+}
+
+func (c *storageControlGRPCClient) MoveObject(ctx context.Context, req *controlpb.MoveObjectRequest, opts ...gax.CallOption) (*controlpb.Object, error) {
+	routingHeaders := ""
+	routingHeadersMap := make(map[string]string)
+	if reg := regexp.MustCompile("(?P<bucket>.*)"); reg.MatchString(req.GetBucket()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetBucket())[1])) > 0 {
+		routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetBucket())[1])
+	}
+	for headerName, headerValue := range routingHeadersMap {
+		routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue)
+	}
+	routingHeaders = strings.TrimSuffix(routingHeaders, "&")
+	hds := []string{"x-goog-request-params", routingHeaders}
+
+	hds = append(c.xGoogHeaders, hds...)
+	ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...)
+	opts = append((*c.CallOptions).MoveObject[0:len((*c.CallOptions).MoveObject):len((*c.CallOptions).MoveObject)], opts...)
+	var resp *controlpb.Object
+	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
+		var err error
+		resp, err = executeRPC(ctx, c.storageControlClient.MoveObject, req, settings.GRPC, c.logger, "MoveObject")
+		return err
+	}, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return resp, nil
+}
+
 // RenameFolderOperation returns a new RenameFolderOperation from a given name.
 // The name must be that of a previously created RenameFolderOperation, possibly from a different process.
 func (c *storageControlGRPCClient) RenameFolderOperation(name string) *RenameFolderOperation {
diff --git a/storage/control/apiv2/storage_control_client_example_go123_test.go b/storage/control/apiv2/storage_control_client_example_go123_test.go
index dceb910..6833d8e 100644
--- a/storage/control/apiv2/storage_control_client_example_go123_test.go
+++ b/storage/control/apiv2/storage_control_client_example_go123_test.go
@@ -25,6 +25,32 @@
 	controlpb "cloud.google.com/go/storage/control/apiv2/controlpb"
 )
 
+func ExampleStorageControlClient_ListBuckets_all() {
+	ctx := context.Background()
+	// This snippet has been automatically generated and should be regarded as a code template only.
+	// It will require modifications to work:
+	// - It may require correct/in-range values for request initialization.
+	// - It may require specifying regional endpoints when creating the service client as shown in:
+	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
+	c, err := control.NewStorageControlClient(ctx)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	defer c.Close()
+
+	req := &controlpb.ListBucketsRequest{
+		// TODO: Fill request struct fields.
+		// See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#ListBucketsRequest.
+	}
+	for resp, err := range c.ListBuckets(ctx, req).All() {
+		if err != nil {
+			// TODO: Handle error and break/return/continue. Iteration will stop after any error.
+		}
+		// TODO: Use resp.
+		_ = resp
+	}
+}
+
 func ExampleStorageControlClient_ListFolders_all() {
 	ctx := context.Background()
 	// This snippet has been automatically generated and should be regarded as a code template only.
@@ -44,7 +70,7 @@
 	}
 	for resp, err := range c.ListFolders(ctx, req).All() {
 		if err != nil {
-			// TODO: Handle error.
+			// TODO: Handle error and break/return/continue. Iteration will stop after any error.
 		}
 		// TODO: Use resp.
 		_ = resp
@@ -70,7 +96,33 @@
 	}
 	for resp, err := range c.ListManagedFolders(ctx, req).All() {
 		if err != nil {
-			// TODO: Handle error.
+			// TODO: Handle error and break/return/continue. Iteration will stop after any error.
+		}
+		// TODO: Use resp.
+		_ = resp
+	}
+}
+
+func ExampleStorageControlClient_ListObjects_all() {
+	ctx := context.Background()
+	// This snippet has been automatically generated and should be regarded as a code template only.
+	// It will require modifications to work:
+	// - It may require correct/in-range values for request initialization.
+	// - It may require specifying regional endpoints when creating the service client as shown in:
+	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
+	c, err := control.NewStorageControlClient(ctx)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	defer c.Close()
+
+	req := &controlpb.ListObjectsRequest{
+		// TODO: Fill request struct fields.
+		// See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#ListObjectsRequest.
+	}
+	for resp, err := range c.ListObjects(ctx, req).All() {
+		if err != nil {
+			// TODO: Handle error and break/return/continue. Iteration will stop after any error.
 		}
 		// TODO: Use resp.
 		_ = resp
diff --git a/storage/control/apiv2/storage_control_client_example_test.go b/storage/control/apiv2/storage_control_client_example_test.go
index 685e7b1..1ab6eea 100644
--- a/storage/control/apiv2/storage_control_client_example_test.go
+++ b/storage/control/apiv2/storage_control_client_example_test.go
@@ -19,6 +19,7 @@
 import (
 	"context"
 
+	iampb "cloud.google.com/go/iam/apiv1/iampb"
 	control "cloud.google.com/go/storage/control/apiv2"
 	controlpb "cloud.google.com/go/storage/control/apiv2/controlpb"
 	"google.golang.org/api/iterator"
@@ -41,6 +42,56 @@
 	_ = c
 }
 
+func ExampleStorageControlClient_ComposeObject() {
+	ctx := context.Background()
+	// This snippet has been automatically generated and should be regarded as a code template only.
+	// It will require modifications to work:
+	// - It may require correct/in-range values for request initialization.
+	// - It may require specifying regional endpoints when creating the service client as shown in:
+	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
+	c, err := control.NewStorageControlClient(ctx)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	defer c.Close()
+
+	req := &controlpb.ComposeObjectRequest{
+		// TODO: Fill request struct fields.
+		// See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#ComposeObjectRequest.
+	}
+	resp, err := c.ComposeObject(ctx, req)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	// TODO: Use resp.
+	_ = resp
+}
+
+func ExampleStorageControlClient_CreateBucket() {
+	ctx := context.Background()
+	// This snippet has been automatically generated and should be regarded as a code template only.
+	// It will require modifications to work:
+	// - It may require correct/in-range values for request initialization.
+	// - It may require specifying regional endpoints when creating the service client as shown in:
+	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
+	c, err := control.NewStorageControlClient(ctx)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	defer c.Close()
+
+	req := &controlpb.CreateBucketRequest{
+		// TODO: Fill request struct fields.
+		// See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#CreateBucketRequest.
+	}
+	resp, err := c.CreateBucket(ctx, req)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	// TODO: Use resp.
+	_ = resp
+}
+
 func ExampleStorageControlClient_CreateFolder() {
 	ctx := context.Background()
 	// This snippet has been automatically generated and should be regarded as a code template only.
@@ -91,6 +142,29 @@
 	_ = resp
 }
 
+func ExampleStorageControlClient_DeleteBucket() {
+	ctx := context.Background()
+	// This snippet has been automatically generated and should be regarded as a code template only.
+	// It will require modifications to work:
+	// - It may require correct/in-range values for request initialization.
+	// - It may require specifying regional endpoints when creating the service client as shown in:
+	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
+	c, err := control.NewStorageControlClient(ctx)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	defer c.Close()
+
+	req := &controlpb.DeleteBucketRequest{
+		// TODO: Fill request struct fields.
+		// See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#DeleteBucketRequest.
+	}
+	err = c.DeleteBucket(ctx, req)
+	if err != nil {
+		// TODO: Handle error.
+	}
+}
+
 func ExampleStorageControlClient_DeleteFolder() {
 	ctx := context.Background()
 	// This snippet has been automatically generated and should be regarded as a code template only.
@@ -137,6 +211,54 @@
 	}
 }
 
+func ExampleStorageControlClient_DeleteObject() {
+	ctx := context.Background()
+	// This snippet has been automatically generated and should be regarded as a code template only.
+	// It will require modifications to work:
+	// - It may require correct/in-range values for request initialization.
+	// - It may require specifying regional endpoints when creating the service client as shown in:
+	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
+	c, err := control.NewStorageControlClient(ctx)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	defer c.Close()
+
+	req := &controlpb.DeleteObjectRequest{
+		// TODO: Fill request struct fields.
+		// See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#DeleteObjectRequest.
+	}
+	err = c.DeleteObject(ctx, req)
+	if err != nil {
+		// TODO: Handle error.
+	}
+}
+
+func ExampleStorageControlClient_GetBucket() {
+	ctx := context.Background()
+	// This snippet has been automatically generated and should be regarded as a code template only.
+	// It will require modifications to work:
+	// - It may require correct/in-range values for request initialization.
+	// - It may require specifying regional endpoints when creating the service client as shown in:
+	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
+	c, err := control.NewStorageControlClient(ctx)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	defer c.Close()
+
+	req := &controlpb.GetBucketRequest{
+		// TODO: Fill request struct fields.
+		// See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#GetBucketRequest.
+	}
+	resp, err := c.GetBucket(ctx, req)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	// TODO: Use resp.
+	_ = resp
+}
+
 func ExampleStorageControlClient_GetFolder() {
 	ctx := context.Background()
 	// This snippet has been automatically generated and should be regarded as a code template only.
@@ -162,6 +284,31 @@
 	_ = resp
 }
 
+func ExampleStorageControlClient_GetIamPolicy() {
+	ctx := context.Background()
+	// This snippet has been automatically generated and should be regarded as a code template only.
+	// It will require modifications to work:
+	// - It may require correct/in-range values for request initialization.
+	// - It may require specifying regional endpoints when creating the service client as shown in:
+	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
+	c, err := control.NewStorageControlClient(ctx)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	defer c.Close()
+
+	req := &iampb.GetIamPolicyRequest{
+		// TODO: Fill request struct fields.
+		// See https://pkg.go.dev/cloud.google.com/go/iam/apiv1/iampb#GetIamPolicyRequest.
+	}
+	resp, err := c.GetIamPolicy(ctx, req)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	// TODO: Use resp.
+	_ = resp
+}
+
 func ExampleStorageControlClient_GetManagedFolder() {
 	ctx := context.Background()
 	// This snippet has been automatically generated and should be regarded as a code template only.
@@ -187,6 +334,31 @@
 	_ = resp
 }
 
+func ExampleStorageControlClient_GetObject() {
+	ctx := context.Background()
+	// This snippet has been automatically generated and should be regarded as a code template only.
+	// It will require modifications to work:
+	// - It may require correct/in-range values for request initialization.
+	// - It may require specifying regional endpoints when creating the service client as shown in:
+	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
+	c, err := control.NewStorageControlClient(ctx)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	defer c.Close()
+
+	req := &controlpb.GetObjectRequest{
+		// TODO: Fill request struct fields.
+		// See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#GetObjectRequest.
+	}
+	resp, err := c.GetObject(ctx, req)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	// TODO: Use resp.
+	_ = resp
+}
+
 func ExampleStorageControlClient_GetStorageLayout() {
 	ctx := context.Background()
 	// This snippet has been automatically generated and should be regarded as a code template only.
@@ -212,6 +384,43 @@
 	_ = resp
 }
 
+func ExampleStorageControlClient_ListBuckets() {
+	ctx := context.Background()
+	// This snippet has been automatically generated and should be regarded as a code template only.
+	// It will require modifications to work:
+	// - It may require correct/in-range values for request initialization.
+	// - It may require specifying regional endpoints when creating the service client as shown in:
+	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
+	c, err := control.NewStorageControlClient(ctx)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	defer c.Close()
+
+	req := &controlpb.ListBucketsRequest{
+		// TODO: Fill request struct fields.
+		// See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#ListBucketsRequest.
+	}
+	it := c.ListBuckets(ctx, req)
+	for {
+		resp, err := it.Next()
+		if err == iterator.Done {
+			break
+		}
+		if err != nil {
+			// TODO: Handle error.
+		}
+		// TODO: Use resp.
+		_ = resp
+
+		// If you need to access the underlying RPC response,
+		// you can do so by casting the `Response` as below.
+		// Otherwise, remove this line. Only populated after
+		// first call to Next(). Not safe for concurrent access.
+		_ = it.Response.(*controlpb.ListBucketsResponse)
+	}
+}
+
 func ExampleStorageControlClient_ListFolders() {
 	ctx := context.Background()
 	// This snippet has been automatically generated and should be regarded as a code template only.
@@ -286,6 +495,93 @@
 	}
 }
 
+func ExampleStorageControlClient_ListObjects() {
+	ctx := context.Background()
+	// This snippet has been automatically generated and should be regarded as a code template only.
+	// It will require modifications to work:
+	// - It may require correct/in-range values for request initialization.
+	// - It may require specifying regional endpoints when creating the service client as shown in:
+	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
+	c, err := control.NewStorageControlClient(ctx)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	defer c.Close()
+
+	req := &controlpb.ListObjectsRequest{
+		// TODO: Fill request struct fields.
+		// See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#ListObjectsRequest.
+	}
+	it := c.ListObjects(ctx, req)
+	for {
+		resp, err := it.Next()
+		if err == iterator.Done {
+			break
+		}
+		if err != nil {
+			// TODO: Handle error.
+		}
+		// TODO: Use resp.
+		_ = resp
+
+		// If you need to access the underlying RPC response,
+		// you can do so by casting the `Response` as below.
+		// Otherwise, remove this line. Only populated after
+		// first call to Next(). Not safe for concurrent access.
+		_ = it.Response.(*controlpb.ListObjectsResponse)
+	}
+}
+
+func ExampleStorageControlClient_LockBucketRetentionPolicy() {
+	ctx := context.Background()
+	// This snippet has been automatically generated and should be regarded as a code template only.
+	// It will require modifications to work:
+	// - It may require correct/in-range values for request initialization.
+	// - It may require specifying regional endpoints when creating the service client as shown in:
+	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
+	c, err := control.NewStorageControlClient(ctx)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	defer c.Close()
+
+	req := &controlpb.LockBucketRetentionPolicyRequest{
+		// TODO: Fill request struct fields.
+		// See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#LockBucketRetentionPolicyRequest.
+	}
+	resp, err := c.LockBucketRetentionPolicy(ctx, req)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	// TODO: Use resp.
+	_ = resp
+}
+
+func ExampleStorageControlClient_MoveObject() {
+	ctx := context.Background()
+	// This snippet has been automatically generated and should be regarded as a code template only.
+	// It will require modifications to work:
+	// - It may require correct/in-range values for request initialization.
+	// - It may require specifying regional endpoints when creating the service client as shown in:
+	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
+	c, err := control.NewStorageControlClient(ctx)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	defer c.Close()
+
+	req := &controlpb.MoveObjectRequest{
+		// TODO: Fill request struct fields.
+		// See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#MoveObjectRequest.
+	}
+	resp, err := c.MoveObject(ctx, req)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	// TODO: Use resp.
+	_ = resp
+}
+
 func ExampleStorageControlClient_RenameFolder() {
 	ctx := context.Background()
 	// This snippet has been automatically generated and should be regarded as a code template only.
@@ -315,3 +611,153 @@
 	// TODO: Use resp.
 	_ = resp
 }
+
+func ExampleStorageControlClient_RestoreObject() {
+	ctx := context.Background()
+	// This snippet has been automatically generated and should be regarded as a code template only.
+	// It will require modifications to work:
+	// - It may require correct/in-range values for request initialization.
+	// - It may require specifying regional endpoints when creating the service client as shown in:
+	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
+	c, err := control.NewStorageControlClient(ctx)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	defer c.Close()
+
+	req := &controlpb.RestoreObjectRequest{
+		// TODO: Fill request struct fields.
+		// See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#RestoreObjectRequest.
+	}
+	resp, err := c.RestoreObject(ctx, req)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	// TODO: Use resp.
+	_ = resp
+}
+
+func ExampleStorageControlClient_RewriteObject() {
+	ctx := context.Background()
+	// This snippet has been automatically generated and should be regarded as a code template only.
+	// It will require modifications to work:
+	// - It may require correct/in-range values for request initialization.
+	// - It may require specifying regional endpoints when creating the service client as shown in:
+	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
+	c, err := control.NewStorageControlClient(ctx)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	defer c.Close()
+
+	req := &controlpb.RewriteObjectRequest{
+		// TODO: Fill request struct fields.
+		// See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#RewriteObjectRequest.
+	}
+	resp, err := c.RewriteObject(ctx, req)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	// TODO: Use resp.
+	_ = resp
+}
+
+func ExampleStorageControlClient_SetIamPolicy() {
+	ctx := context.Background()
+	// This snippet has been automatically generated and should be regarded as a code template only.
+	// It will require modifications to work:
+	// - It may require correct/in-range values for request initialization.
+	// - It may require specifying regional endpoints when creating the service client as shown in:
+	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
+	c, err := control.NewStorageControlClient(ctx)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	defer c.Close()
+
+	req := &iampb.SetIamPolicyRequest{
+		// TODO: Fill request struct fields.
+		// See https://pkg.go.dev/cloud.google.com/go/iam/apiv1/iampb#SetIamPolicyRequest.
+	}
+	resp, err := c.SetIamPolicy(ctx, req)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	// TODO: Use resp.
+	_ = resp
+}
+
+func ExampleStorageControlClient_TestIamPermissions() {
+	ctx := context.Background()
+	// This snippet has been automatically generated and should be regarded as a code template only.
+	// It will require modifications to work:
+	// - It may require correct/in-range values for request initialization.
+	// - It may require specifying regional endpoints when creating the service client as shown in:
+	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
+	c, err := control.NewStorageControlClient(ctx)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	defer c.Close()
+
+	req := &iampb.TestIamPermissionsRequest{
+		// TODO: Fill request struct fields.
+		// See https://pkg.go.dev/cloud.google.com/go/iam/apiv1/iampb#TestIamPermissionsRequest.
+	}
+	resp, err := c.TestIamPermissions(ctx, req)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	// TODO: Use resp.
+	_ = resp
+}
+
+func ExampleStorageControlClient_UpdateBucket() {
+	ctx := context.Background()
+	// This snippet has been automatically generated and should be regarded as a code template only.
+	// It will require modifications to work:
+	// - It may require correct/in-range values for request initialization.
+	// - It may require specifying regional endpoints when creating the service client as shown in:
+	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
+	c, err := control.NewStorageControlClient(ctx)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	defer c.Close()
+
+	req := &controlpb.UpdateBucketRequest{
+		// TODO: Fill request struct fields.
+		// See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#UpdateBucketRequest.
+	}
+	resp, err := c.UpdateBucket(ctx, req)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	// TODO: Use resp.
+	_ = resp
+}
+
+func ExampleStorageControlClient_UpdateObject() {
+	ctx := context.Background()
+	// This snippet has been automatically generated and should be regarded as a code template only.
+	// It will require modifications to work:
+	// - It may require correct/in-range values for request initialization.
+	// - It may require specifying regional endpoints when creating the service client as shown in:
+	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
+	c, err := control.NewStorageControlClient(ctx)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	defer c.Close()
+
+	req := &controlpb.UpdateObjectRequest{
+		// TODO: Fill request struct fields.
+		// See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#UpdateObjectRequest.
+	}
+	resp, err := c.UpdateObject(ctx, req)
+	if err != nil {
+		// TODO: Handle error.
+	}
+	// TODO: Use resp.
+	_ = resp
+}