diff --git a/go.mod b/go.mod
index 28784d62..0e8a8f2c 100644
--- a/go.mod
+++ b/go.mod
@@ -1,16 +1,15 @@
 module github.com/container-storage-interface/spec
 
-go 1.18
+go 1.21
 
 require (
-	google.golang.org/grpc v1.57.1
-	google.golang.org/protobuf v1.33.0
+	google.golang.org/grpc v1.64.0
+	google.golang.org/protobuf v1.36.0
 )
 
 require (
-	github.com/golang/protobuf v1.5.3 // indirect
 	golang.org/x/net v0.23.0 // indirect
 	golang.org/x/sys v0.18.0 // indirect
 	golang.org/x/text v0.14.0 // indirect
-	google.golang.org/genproto/googleapis/rpc v0.0.0-20230803162519-f966b187b2e5 // indirect
+	google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect
 )
diff --git a/go.sum b/go.sum
index 7fc3be69..467f28c6 100644
--- a/go.sum
+++ b/go.sum
@@ -1,21 +1,14 @@
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
 golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
 golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
 golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
 golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230803162519-f966b187b2e5 h1:eSaPbMR4T7WfH9FvABk36NBMacoTUKdWCvV0dx+KfOg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230803162519-f966b187b2e5/go.mod h1:zBEcrKX2ZOcEkHWxBPAIvYUWOKKMIhYcmNiUIu2ji3I=
-google.golang.org/grpc v1.57.1 h1:upNTNqv0ES+2ZOOqACwVtS3Il8M12/+Hz41RCPzAjQg=
-google.golang.org/grpc v1.57.1/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
-google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
-
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 h1:NnYq6UN9ReLM9/Y01KWNOWyI5xQ9kbIms5GGJVwS/Yc=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
+google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY=
+google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg=
+google.golang.org/protobuf v1.36.0 h1:mjIs9gYtt56AzC4ZaffQuh88TZurBGhIJMBZGSxNerQ=
+google.golang.org/protobuf v1.36.0/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
diff --git a/lib/go/Makefile b/lib/go/Makefile
index 0541c6d1..a5615b37 100644
--- a/lib/go/Makefile
+++ b/lib/go/Makefile
@@ -26,7 +26,7 @@ endif
 
 # Only set PROTOC_VER if it has an empty value.
 ifeq (,$(strip $(PROTOC_VER)))
-PROTOC_VER := 25.2
+PROTOC_VER := 29.2
 endif
 
 PROTOC_OS := $(shell uname -s)
@@ -49,7 +49,7 @@ PROTOC := $(PROTOC_TMP_DIR)/bin/protoc
 $(GOBIN)/protoc-gen-go: ../../go.mod
 	go install google.golang.org/protobuf/cmd/protoc-gen-go
 $(GOBIN)/protoc-gen-go-grpc:
-	go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0
+	go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.5.1
 
 $(PROTOC):
 	-mkdir -p "$(PROTOC_TMP_DIR)" && \
@@ -82,6 +82,7 @@ $(CSI_GO) $(CSI_GRPC): $(CSI_PROTO) $(PROTOC_ALL)
 	@mkdir -p "$(@D)"
 	$(PROTOC) -I../.. --go-grpc_out=$(CSI_PKG_SUB) --go_out=$(CSI_PKG_SUB) \
 		--go_opt=paths=source_relative --go-grpc_opt=paths=source_relative \
+		--go_opt=default_api_level=API_HYBRID \
 		"$(<F)"
 
 build: $(CSI_GO) $(CSI_GRPC)
diff --git a/lib/go/csi/csi.pb.go b/lib/go/csi/csi.pb.go
index e763bc3e..c28d068a 100644
--- a/lib/go/csi/csi.pb.go
+++ b/lib/go/csi/csi.pb.go
@@ -2,10 +2,12 @@
 
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.33.0
-// 	protoc        v4.25.2
+// 	protoc-gen-go v1.36.0
+// 	protoc        v5.29.2
 // source: csi.proto
 
+//go:build !protoopaque
+
 package csi
 
 import (
@@ -15,7 +17,6 @@ import (
 	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
 	wrapperspb "google.golang.org/protobuf/types/known/wrapperspb"
 	reflect "reflect"
-	sync "sync"
 )
 
 const (
@@ -73,11 +74,6 @@ func (x BlockMetadataType) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(x)
 }
 
-// Deprecated: Use BlockMetadataType.Descriptor instead.
-func (BlockMetadataType) EnumDescriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{0}
-}
-
 type PluginCapability_Service_Type int32
 
 const (
@@ -155,11 +151,6 @@ func (x PluginCapability_Service_Type) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(x)
 }
 
-// Deprecated: Use PluginCapability_Service_Type.Descriptor instead.
-func (PluginCapability_Service_Type) EnumDescriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{4, 0, 0}
-}
-
 type PluginCapability_VolumeExpansion_Type int32
 
 const (
@@ -243,11 +234,6 @@ func (x PluginCapability_VolumeExpansion_Type) Number() protoreflect.EnumNumber
 	return protoreflect.EnumNumber(x)
 }
 
-// Deprecated: Use PluginCapability_VolumeExpansion_Type.Descriptor instead.
-func (PluginCapability_VolumeExpansion_Type) EnumDescriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{4, 1, 0}
-}
-
 type VolumeCapability_AccessMode_Mode int32
 
 const (
@@ -324,11 +310,6 @@ func (x VolumeCapability_AccessMode_Mode) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(x)
 }
 
-// Deprecated: Use VolumeCapability_AccessMode_Mode.Descriptor instead.
-func (VolumeCapability_AccessMode_Mode) EnumDescriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{10, 2, 0}
-}
-
 type ControllerServiceCapability_RPC_Type int32
 
 const (
@@ -448,11 +429,6 @@ func (x ControllerServiceCapability_RPC_Type) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(x)
 }
 
-// Deprecated: Use ControllerServiceCapability_RPC_Type.Descriptor instead.
-func (ControllerServiceCapability_RPC_Type) EnumDescriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{33, 0, 0}
-}
-
 type VolumeUsage_Unit int32
 
 const (
@@ -497,11 +473,6 @@ func (x VolumeUsage_Unit) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(x)
 }
 
-// Deprecated: Use VolumeUsage_Unit.Descriptor instead.
-func (VolumeUsage_Unit) EnumDescriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{53, 0}
-}
-
 type NodeServiceCapability_RPC_Type int32
 
 const (
@@ -585,11 +556,6 @@ func (x NodeServiceCapability_RPC_Type) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(x)
 }
 
-// Deprecated: Use NodeServiceCapability_RPC_Type.Descriptor instead.
-func (NodeServiceCapability_RPC_Type) EnumDescriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{57, 0, 0}
-}
-
 type GroupControllerServiceCapability_RPC_Type int32
 
 const (
@@ -634,24 +600,17 @@ func (x GroupControllerServiceCapability_RPC_Type) Number() protoreflect.EnumNum
 	return protoreflect.EnumNumber(x)
 }
 
-// Deprecated: Use GroupControllerServiceCapability_RPC_Type.Descriptor instead.
-func (GroupControllerServiceCapability_RPC_Type) EnumDescriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{64, 0, 0}
-}
-
 type GetPluginInfoRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"hybrid.v1"`
 	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *GetPluginInfoRequest) Reset() {
 	*x = GetPluginInfoRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[0]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[0]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *GetPluginInfoRequest) String() string {
@@ -662,7 +621,7 @@ func (*GetPluginInfoRequest) ProtoMessage() {}
 
 func (x *GetPluginInfoRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_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)
@@ -672,16 +631,20 @@ func (x *GetPluginInfoRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GetPluginInfoRequest.ProtoReflect.Descriptor instead.
-func (*GetPluginInfoRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{0}
+type GetPluginInfoRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 GetPluginInfoRequest_builder) Build() *GetPluginInfoRequest {
+	m0 := &GetPluginInfoRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
 }
 
 type GetPluginInfoResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The name MUST follow domain name notation format
 	// (https://tools.ietf.org/html/rfc1035#section-2.3.1). It SHOULD
 	// include the plugin's host company name and the plugin name,
@@ -693,16 +656,16 @@ type GetPluginInfoResponse struct {
 	// This field is REQUIRED. Value of this field is opaque to the CO.
 	VendorVersion string `protobuf:"bytes,2,opt,name=vendor_version,json=vendorVersion,proto3" json:"vendor_version,omitempty"`
 	// This field is OPTIONAL. Values are opaque to the CO.
-	Manifest map[string]string `protobuf:"bytes,3,rep,name=manifest,proto3" json:"manifest,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Manifest      map[string]string `protobuf:"bytes,3,rep,name=manifest,proto3" json:"manifest,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *GetPluginInfoResponse) Reset() {
 	*x = GetPluginInfoResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[1]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[1]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *GetPluginInfoResponse) String() string {
@@ -713,7 +676,7 @@ func (*GetPluginInfoResponse) ProtoMessage() {}
 
 func (x *GetPluginInfoResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_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)
@@ -723,11 +686,6 @@ func (x *GetPluginInfoResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GetPluginInfoResponse.ProtoReflect.Descriptor instead.
-func (*GetPluginInfoResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{1}
-}
-
 func (x *GetPluginInfoResponse) GetName() string {
 	if x != nil {
 		return x.Name
@@ -749,19 +707,56 @@ func (x *GetPluginInfoResponse) GetManifest() map[string]string {
 	return nil
 }
 
+func (x *GetPluginInfoResponse) SetName(v string) {
+	x.Name = v
+}
+
+func (x *GetPluginInfoResponse) SetVendorVersion(v string) {
+	x.VendorVersion = v
+}
+
+func (x *GetPluginInfoResponse) SetManifest(v map[string]string) {
+	x.Manifest = v
+}
+
+type GetPluginInfoResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The name MUST follow domain name notation format
+	// (https://tools.ietf.org/html/rfc1035#section-2.3.1). It SHOULD
+	// include the plugin's host company name and the plugin name,
+	// to minimize the possibility of collisions. It MUST be 63
+	// characters or less, beginning and ending with an alphanumeric
+	// character ([a-z0-9A-Z]) with dashes (-), dots (.), and
+	// alphanumerics between. This field is REQUIRED.
+	Name string
+	// This field is REQUIRED. Value of this field is opaque to the CO.
+	VendorVersion string
+	// This field is OPTIONAL. Values are opaque to the CO.
+	Manifest map[string]string
+}
+
+func (b0 GetPluginInfoResponse_builder) Build() *GetPluginInfoResponse {
+	m0 := &GetPluginInfoResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Name = b.Name
+	x.VendorVersion = b.VendorVersion
+	x.Manifest = b.Manifest
+	return m0
+}
+
 type GetPluginCapabilitiesRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"hybrid.v1"`
 	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *GetPluginCapabilitiesRequest) Reset() {
 	*x = GetPluginCapabilitiesRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[2]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[2]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *GetPluginCapabilitiesRequest) String() string {
@@ -772,7 +767,7 @@ func (*GetPluginCapabilitiesRequest) ProtoMessage() {}
 
 func (x *GetPluginCapabilitiesRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_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)
@@ -782,28 +777,32 @@ func (x *GetPluginCapabilitiesRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GetPluginCapabilitiesRequest.ProtoReflect.Descriptor instead.
-func (*GetPluginCapabilitiesRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{2}
+type GetPluginCapabilitiesRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 GetPluginCapabilitiesRequest_builder) Build() *GetPluginCapabilitiesRequest {
+	m0 := &GetPluginCapabilitiesRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
 }
 
 type GetPluginCapabilitiesResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// All the capabilities that the controller service supports. This
 	// field is OPTIONAL.
-	Capabilities []*PluginCapability `protobuf:"bytes,1,rep,name=capabilities,proto3" json:"capabilities,omitempty"`
+	Capabilities  []*PluginCapability `protobuf:"bytes,1,rep,name=capabilities,proto3" json:"capabilities,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *GetPluginCapabilitiesResponse) Reset() {
 	*x = GetPluginCapabilitiesResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[3]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[3]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *GetPluginCapabilitiesResponse) String() string {
@@ -814,7 +813,7 @@ func (*GetPluginCapabilitiesResponse) ProtoMessage() {}
 
 func (x *GetPluginCapabilitiesResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_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)
@@ -824,11 +823,6 @@ func (x *GetPluginCapabilitiesResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GetPluginCapabilitiesResponse.ProtoReflect.Descriptor instead.
-func (*GetPluginCapabilitiesResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{3}
-}
-
 func (x *GetPluginCapabilitiesResponse) GetCapabilities() []*PluginCapability {
 	if x != nil {
 		return x.Capabilities
@@ -836,26 +830,43 @@ func (x *GetPluginCapabilitiesResponse) GetCapabilities() []*PluginCapability {
 	return nil
 }
 
+func (x *GetPluginCapabilitiesResponse) SetCapabilities(v []*PluginCapability) {
+	x.Capabilities = v
+}
+
+type GetPluginCapabilitiesResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// All the capabilities that the controller service supports. This
+	// field is OPTIONAL.
+	Capabilities []*PluginCapability
+}
+
+func (b0 GetPluginCapabilitiesResponse_builder) Build() *GetPluginCapabilitiesResponse {
+	m0 := &GetPluginCapabilitiesResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Capabilities = b.Capabilities
+	return m0
+}
+
 // Specifies a capability of the plugin.
 type PluginCapability struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	// Types that are assignable to Type:
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
+	// Types that are valid to be assigned to Type:
 	//
 	//	*PluginCapability_Service_
 	//	*PluginCapability_VolumeExpansion_
-	Type isPluginCapability_Type `protobuf_oneof:"type"`
+	Type          isPluginCapability_Type `protobuf_oneof:"type"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *PluginCapability) Reset() {
 	*x = PluginCapability{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[4]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[4]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *PluginCapability) String() string {
@@ -866,7 +877,7 @@ func (*PluginCapability) ProtoMessage() {}
 
 func (x *PluginCapability) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_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)
@@ -876,32 +887,137 @@ func (x *PluginCapability) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use PluginCapability.ProtoReflect.Descriptor instead.
-func (*PluginCapability) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{4}
-}
-
-func (m *PluginCapability) GetType() isPluginCapability_Type {
-	if m != nil {
-		return m.Type
+func (x *PluginCapability) GetType() isPluginCapability_Type {
+	if x != nil {
+		return x.Type
 	}
 	return nil
 }
 
 func (x *PluginCapability) GetService() *PluginCapability_Service {
-	if x, ok := x.GetType().(*PluginCapability_Service_); ok {
-		return x.Service
+	if x != nil {
+		if x, ok := x.Type.(*PluginCapability_Service_); ok {
+			return x.Service
+		}
 	}
 	return nil
 }
 
 func (x *PluginCapability) GetVolumeExpansion() *PluginCapability_VolumeExpansion {
-	if x, ok := x.GetType().(*PluginCapability_VolumeExpansion_); ok {
-		return x.VolumeExpansion
+	if x != nil {
+		if x, ok := x.Type.(*PluginCapability_VolumeExpansion_); ok {
+			return x.VolumeExpansion
+		}
 	}
 	return nil
 }
 
+func (x *PluginCapability) SetService(v *PluginCapability_Service) {
+	if v == nil {
+		x.Type = nil
+		return
+	}
+	x.Type = &PluginCapability_Service_{v}
+}
+
+func (x *PluginCapability) SetVolumeExpansion(v *PluginCapability_VolumeExpansion) {
+	if v == nil {
+		x.Type = nil
+		return
+	}
+	x.Type = &PluginCapability_VolumeExpansion_{v}
+}
+
+func (x *PluginCapability) HasType() bool {
+	if x == nil {
+		return false
+	}
+	return x.Type != nil
+}
+
+func (x *PluginCapability) HasService() bool {
+	if x == nil {
+		return false
+	}
+	_, ok := x.Type.(*PluginCapability_Service_)
+	return ok
+}
+
+func (x *PluginCapability) HasVolumeExpansion() bool {
+	if x == nil {
+		return false
+	}
+	_, ok := x.Type.(*PluginCapability_VolumeExpansion_)
+	return ok
+}
+
+func (x *PluginCapability) ClearType() {
+	x.Type = nil
+}
+
+func (x *PluginCapability) ClearService() {
+	if _, ok := x.Type.(*PluginCapability_Service_); ok {
+		x.Type = nil
+	}
+}
+
+func (x *PluginCapability) ClearVolumeExpansion() {
+	if _, ok := x.Type.(*PluginCapability_VolumeExpansion_); ok {
+		x.Type = nil
+	}
+}
+
+const PluginCapability_Type_not_set_case case_PluginCapability_Type = 0
+const PluginCapability_Service_case case_PluginCapability_Type = 1
+const PluginCapability_VolumeExpansion_case case_PluginCapability_Type = 2
+
+func (x *PluginCapability) WhichType() case_PluginCapability_Type {
+	if x == nil {
+		return PluginCapability_Type_not_set_case
+	}
+	switch x.Type.(type) {
+	case *PluginCapability_Service_:
+		return PluginCapability_Service_case
+	case *PluginCapability_VolumeExpansion_:
+		return PluginCapability_VolumeExpansion_case
+	default:
+		return PluginCapability_Type_not_set_case
+	}
+}
+
+type PluginCapability_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Fields of oneof Type:
+	// Service that the plugin supports.
+	Service         *PluginCapability_Service
+	VolumeExpansion *PluginCapability_VolumeExpansion
+	// -- end of Type
+}
+
+func (b0 PluginCapability_builder) Build() *PluginCapability {
+	m0 := &PluginCapability{}
+	b, x := &b0, m0
+	_, _ = b, x
+	if b.Service != nil {
+		x.Type = &PluginCapability_Service_{b.Service}
+	}
+	if b.VolumeExpansion != nil {
+		x.Type = &PluginCapability_VolumeExpansion_{b.VolumeExpansion}
+	}
+	return m0
+}
+
+type case_PluginCapability_Type protoreflect.FieldNumber
+
+func (x case_PluginCapability_Type) String() string {
+	md := file_csi_proto_msgTypes[4].Descriptor()
+	if x == 0 {
+		return "not set"
+	}
+	return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))
+}
+
 type isPluginCapability_Type interface {
 	isPluginCapability_Type()
 }
@@ -920,18 +1036,16 @@ func (*PluginCapability_Service_) isPluginCapability_Type() {}
 func (*PluginCapability_VolumeExpansion_) isPluginCapability_Type() {}
 
 type ProbeRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"hybrid.v1"`
 	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *ProbeRequest) Reset() {
 	*x = ProbeRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[5]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[5]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ProbeRequest) String() string {
@@ -942,7 +1056,7 @@ func (*ProbeRequest) ProtoMessage() {}
 
 func (x *ProbeRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_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)
@@ -952,16 +1066,20 @@ func (x *ProbeRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ProbeRequest.ProtoReflect.Descriptor instead.
-func (*ProbeRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{5}
+type ProbeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 ProbeRequest_builder) Build() *ProbeRequest {
+	m0 := &ProbeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
 }
 
 type ProbeResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// Readiness allows a plugin to report its initialization status back
 	// to the CO. Initialization for some plugins MAY be time consuming
 	// and it is important for a CO to distinguish between the following
@@ -982,16 +1100,16 @@ type ProbeResponse struct {
 	// that the plugin is in a ready state and is accepting calls to its
 	// Controller and/or Node services (according to the plugin's reported
 	// capabilities).
-	Ready *wrapperspb.BoolValue `protobuf:"bytes,1,opt,name=ready,proto3" json:"ready,omitempty"`
+	Ready         *wrapperspb.BoolValue `protobuf:"bytes,1,opt,name=ready,proto3" json:"ready,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *ProbeResponse) Reset() {
 	*x = ProbeResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[6]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[6]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ProbeResponse) String() string {
@@ -1002,7 +1120,7 @@ func (*ProbeResponse) ProtoMessage() {}
 
 func (x *ProbeResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_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)
@@ -1012,11 +1130,6 @@ func (x *ProbeResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ProbeResponse.ProtoReflect.Descriptor instead.
-func (*ProbeResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{6}
-}
-
 func (x *ProbeResponse) GetReady() *wrapperspb.BoolValue {
 	if x != nil {
 		return x.Ready
@@ -1024,11 +1137,57 @@ func (x *ProbeResponse) GetReady() *wrapperspb.BoolValue {
 	return nil
 }
 
-type CreateVolumeRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *ProbeResponse) SetReady(v *wrapperspb.BoolValue) {
+	x.Ready = v
+}
+
+func (x *ProbeResponse) HasReady() bool {
+	if x == nil {
+		return false
+	}
+	return x.Ready != nil
+}
+
+func (x *ProbeResponse) ClearReady() {
+	x.Ready = nil
+}
+
+type ProbeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Readiness allows a plugin to report its initialization status back
+	// to the CO. Initialization for some plugins MAY be time consuming
+	// and it is important for a CO to distinguish between the following
+	// cases:
+	//
+	//  1. The plugin is in an unhealthy state and MAY need restarting. In
+	//     this case a gRPC error code SHALL be returned.
+	//  2. The plugin is still initializing, but is otherwise perfectly
+	//     healthy. In this case a successful response SHALL be returned
+	//     with a readiness value of `false`. Calls to the plugin's
+	//     Controller and/or Node services MAY fail due to an incomplete
+	//     initialization state.
+	//  3. The plugin has finished initializing and is ready to service
+	//     calls to its Controller and/or Node services. A successful
+	//     response is returned with a readiness value of `true`.
+	//
+	// This field is OPTIONAL. If not present, the caller SHALL assume
+	// that the plugin is in a ready state and is accepting calls to its
+	// Controller and/or Node services (according to the plugin's reported
+	// capabilities).
+	Ready *wrapperspb.BoolValue
+}
+
+func (b0 ProbeResponse_builder) Build() *ProbeResponse {
+	m0 := &ProbeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Ready = b.Ready
+	return m0
+}
 
+type CreateVolumeRequest struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The suggested name for the storage space. This field is REQUIRED.
 	// It serves two purposes:
 	//  1. Idempotency - This name is generated by the CO to achieve
@@ -1083,11 +1242,11 @@ type CreateVolumeRequest struct {
 	// key-value pairs. This field is OPTIONAL. The Plugin is responsible
 	// for parsing and validating these parameters. COs will treat
 	// these as opaque.
-	Parameters map[string]string `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Parameters map[string]string `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 	// Secrets required by plugin to complete volume creation request.
 	// This field is OPTIONAL. Refer to the `Secrets Requirements`
 	// section on how to use this field.
-	Secrets map[string]string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Secrets map[string]string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 	// If specified, the new volume will be pre-populated with data from
 	// this source. This field is OPTIONAL.
 	VolumeContentSource *VolumeContentSource `protobuf:"bytes,6,opt,name=volume_content_source,json=volumeContentSource,proto3" json:"volume_content_source,omitempty"`
@@ -1107,16 +1266,16 @@ type CreateVolumeRequest struct {
 	// as if they take precedence over the parameters field.
 	// This field SHALL NOT be specified unless the SP has the
 	// MODIFY_VOLUME plugin capability.
-	MutableParameters map[string]string `protobuf:"bytes,8,rep,name=mutable_parameters,json=mutableParameters,proto3" json:"mutable_parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	MutableParameters map[string]string `protobuf:"bytes,8,rep,name=mutable_parameters,json=mutableParameters,proto3" json:"mutable_parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields     protoimpl.UnknownFields
+	sizeCache         protoimpl.SizeCache
 }
 
 func (x *CreateVolumeRequest) Reset() {
 	*x = CreateVolumeRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[7]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[7]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *CreateVolumeRequest) String() string {
@@ -1127,7 +1286,7 @@ func (*CreateVolumeRequest) ProtoMessage() {}
 
 func (x *CreateVolumeRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_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)
@@ -1137,11 +1296,6 @@ func (x *CreateVolumeRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use CreateVolumeRequest.ProtoReflect.Descriptor instead.
-func (*CreateVolumeRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{7}
-}
-
 func (x *CreateVolumeRequest) GetName() string {
 	if x != nil {
 		return x.Name
@@ -1198,107 +1352,369 @@ func (x *CreateVolumeRequest) GetMutableParameters() map[string]string {
 	return nil
 }
 
-// Specifies what source the volume will be created from. One of the
-// type fields MUST be specified.
-type VolumeContentSource struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *CreateVolumeRequest) SetName(v string) {
+	x.Name = v
+}
 
-	// Types that are assignable to Type:
-	//
-	//	*VolumeContentSource_Snapshot
-	//	*VolumeContentSource_Volume
-	Type isVolumeContentSource_Type `protobuf_oneof:"type"`
+func (x *CreateVolumeRequest) SetCapacityRange(v *CapacityRange) {
+	x.CapacityRange = v
 }
 
-func (x *VolumeContentSource) Reset() {
-	*x = VolumeContentSource{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[8]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+func (x *CreateVolumeRequest) SetVolumeCapabilities(v []*VolumeCapability) {
+	x.VolumeCapabilities = v
 }
 
-func (x *VolumeContentSource) String() string {
-	return protoimpl.X.MessageStringOf(x)
+func (x *CreateVolumeRequest) SetParameters(v map[string]string) {
+	x.Parameters = v
 }
 
-func (*VolumeContentSource) ProtoMessage() {}
+func (x *CreateVolumeRequest) SetSecrets(v map[string]string) {
+	x.Secrets = v
+}
 
-func (x *VolumeContentSource) ProtoReflect() protoreflect.Message {
-	mi := &file_csi_proto_msgTypes[8]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
+func (x *CreateVolumeRequest) SetVolumeContentSource(v *VolumeContentSource) {
+	x.VolumeContentSource = v
 }
 
-// Deprecated: Use VolumeContentSource.ProtoReflect.Descriptor instead.
-func (*VolumeContentSource) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{8}
+func (x *CreateVolumeRequest) SetAccessibilityRequirements(v *TopologyRequirement) {
+	x.AccessibilityRequirements = v
 }
 
-func (m *VolumeContentSource) GetType() isVolumeContentSource_Type {
-	if m != nil {
-		return m.Type
-	}
-	return nil
+func (x *CreateVolumeRequest) SetMutableParameters(v map[string]string) {
+	x.MutableParameters = v
 }
 
-func (x *VolumeContentSource) GetSnapshot() *VolumeContentSource_SnapshotSource {
-	if x, ok := x.GetType().(*VolumeContentSource_Snapshot); ok {
-		return x.Snapshot
+func (x *CreateVolumeRequest) HasCapacityRange() bool {
+	if x == nil {
+		return false
 	}
-	return nil
+	return x.CapacityRange != nil
 }
 
-func (x *VolumeContentSource) GetVolume() *VolumeContentSource_VolumeSource {
-	if x, ok := x.GetType().(*VolumeContentSource_Volume); ok {
-		return x.Volume
+func (x *CreateVolumeRequest) HasVolumeContentSource() bool {
+	if x == nil {
+		return false
 	}
-	return nil
+	return x.VolumeContentSource != nil
 }
 
-type isVolumeContentSource_Type interface {
-	isVolumeContentSource_Type()
+func (x *CreateVolumeRequest) HasAccessibilityRequirements() bool {
+	if x == nil {
+		return false
+	}
+	return x.AccessibilityRequirements != nil
 }
 
-type VolumeContentSource_Snapshot struct {
-	Snapshot *VolumeContentSource_SnapshotSource `protobuf:"bytes,1,opt,name=snapshot,proto3,oneof"`
+func (x *CreateVolumeRequest) ClearCapacityRange() {
+	x.CapacityRange = nil
 }
 
-type VolumeContentSource_Volume struct {
-	Volume *VolumeContentSource_VolumeSource `protobuf:"bytes,2,opt,name=volume,proto3,oneof"`
+func (x *CreateVolumeRequest) ClearVolumeContentSource() {
+	x.VolumeContentSource = nil
 }
 
-func (*VolumeContentSource_Snapshot) isVolumeContentSource_Type() {}
-
-func (*VolumeContentSource_Volume) isVolumeContentSource_Type() {}
+func (x *CreateVolumeRequest) ClearAccessibilityRequirements() {
+	x.AccessibilityRequirements = nil
+}
 
-type CreateVolumeResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+type CreateVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
 
-	// Contains all attributes of the newly created volume that are
-	// relevant to the CO along with information required by the Plugin
+	// The suggested name for the storage space. This field is REQUIRED.
+	// It serves two purposes:
+	//  1. Idempotency - This name is generated by the CO to achieve
+	//     idempotency.  The Plugin SHOULD ensure that multiple
+	//     `CreateVolume` calls for the same name do not result in more
+	//     than one piece of storage provisioned corresponding to that
+	//     name. If a Plugin is unable to enforce idempotency, the CO's
+	//     error recovery logic could result in multiple (unused) volumes
+	//     being provisioned.
+	//     In the case of error, the CO MUST handle the gRPC error codes
+	//     per the recovery behavior defined in the "CreateVolume Errors"
+	//     section below.
+	//     The CO is responsible for cleaning up volumes it provisioned
+	//     that it no longer needs. If the CO is uncertain whether a volume
+	//     was provisioned or not when a `CreateVolume` call fails, the CO
+	//     MAY call `CreateVolume` again, with the same name, to ensure the
+	//     volume exists and to retrieve the volume's `volume_id` (unless
+	//     otherwise prohibited by "CreateVolume Errors").
+	//  2. Suggested name - Some storage systems allow callers to specify
+	//     an identifier by which to refer to the newly provisioned
+	//     storage. If a storage system supports this, it can optionally
+	//     use this name as the identifier for the new volume.
+	//
+	// Any Unicode string that conforms to the length limit is allowed
+	// except those containing the following banned characters:
+	// U+0000-U+0008, U+000B, U+000C, U+000E-U+001F, U+007F-U+009F.
+	// (These are control characters other than commonly used whitespace.)
+	Name string
+	// This field is OPTIONAL. This allows the CO to specify the capacity
+	// requirement of the volume to be provisioned. If not specified, the
+	// Plugin MAY choose an implementation-defined capacity range. If
+	// specified it MUST always be honored, even when creating volumes
+	// from a source; which MAY force some backends to internally extend
+	// the volume after creating it.
+	CapacityRange *CapacityRange
+	// The capabilities that the provisioned volume MUST have. SP MUST
+	// provision a volume that will satisfy ALL of the capabilities
+	// specified in this list. Otherwise SP MUST return the appropriate
+	// gRPC error code.
+	// The Plugin MUST assume that the CO MAY use the provisioned volume
+	// with ANY of the capabilities specified in this list.
+	// For example, a CO MAY specify two volume capabilities: one with
+	// access mode SINGLE_NODE_WRITER and another with access mode
+	// MULTI_NODE_READER_ONLY. In this case, the SP MUST verify that the
+	// provisioned volume can be used in either mode.
+	// This also enables the CO to do early validation: If ANY of the
+	// specified volume capabilities are not supported by the SP, the call
+	// MUST return the appropriate gRPC error code.
+	// This field is REQUIRED.
+	VolumeCapabilities []*VolumeCapability
+	// Plugin specific creation-time parameters passed in as opaque
+	// key-value pairs. This field is OPTIONAL. The Plugin is responsible
+	// for parsing and validating these parameters. COs will treat
+	// these as opaque.
+	Parameters map[string]string
+	// Secrets required by plugin to complete volume creation request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+	// If specified, the new volume will be pre-populated with data from
+	// this source. This field is OPTIONAL.
+	VolumeContentSource *VolumeContentSource
+	// Specifies where (regions, zones, racks, etc.) the provisioned
+	// volume MUST be accessible from.
+	// An SP SHALL advertise the requirements for topological
+	// accessibility information in documentation. COs SHALL only specify
+	// topological accessibility information supported by the SP.
+	// This field is OPTIONAL.
+	// This field SHALL NOT be specified unless the SP has the
+	// VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability.
+	// If this field is not specified and the SP has the
+	// VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability, the SP MAY
+	// choose where the provisioned volume is accessible from.
+	AccessibilityRequirements *TopologyRequirement
+	// Plugins MUST treat these
+	// as if they take precedence over the parameters field.
+	// This field SHALL NOT be specified unless the SP has the
+	// MODIFY_VOLUME plugin capability.
+	MutableParameters map[string]string
+}
+
+func (b0 CreateVolumeRequest_builder) Build() *CreateVolumeRequest {
+	m0 := &CreateVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Name = b.Name
+	x.CapacityRange = b.CapacityRange
+	x.VolumeCapabilities = b.VolumeCapabilities
+	x.Parameters = b.Parameters
+	x.Secrets = b.Secrets
+	x.VolumeContentSource = b.VolumeContentSource
+	x.AccessibilityRequirements = b.AccessibilityRequirements
+	x.MutableParameters = b.MutableParameters
+	return m0
+}
+
+// Specifies what source the volume will be created from. One of the
+// type fields MUST be specified.
+type VolumeContentSource struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
+	// Types that are valid to be assigned to Type:
+	//
+	//	*VolumeContentSource_Snapshot
+	//	*VolumeContentSource_Volume
+	Type          isVolumeContentSource_Type `protobuf_oneof:"type"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *VolumeContentSource) Reset() {
+	*x = VolumeContentSource{}
+	mi := &file_csi_proto_msgTypes[8]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *VolumeContentSource) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*VolumeContentSource) ProtoMessage() {}
+
+func (x *VolumeContentSource) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[8]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *VolumeContentSource) GetType() isVolumeContentSource_Type {
+	if x != nil {
+		return x.Type
+	}
+	return nil
+}
+
+func (x *VolumeContentSource) GetSnapshot() *VolumeContentSource_SnapshotSource {
+	if x != nil {
+		if x, ok := x.Type.(*VolumeContentSource_Snapshot); ok {
+			return x.Snapshot
+		}
+	}
+	return nil
+}
+
+func (x *VolumeContentSource) GetVolume() *VolumeContentSource_VolumeSource {
+	if x != nil {
+		if x, ok := x.Type.(*VolumeContentSource_Volume); ok {
+			return x.Volume
+		}
+	}
+	return nil
+}
+
+func (x *VolumeContentSource) SetSnapshot(v *VolumeContentSource_SnapshotSource) {
+	if v == nil {
+		x.Type = nil
+		return
+	}
+	x.Type = &VolumeContentSource_Snapshot{v}
+}
+
+func (x *VolumeContentSource) SetVolume(v *VolumeContentSource_VolumeSource) {
+	if v == nil {
+		x.Type = nil
+		return
+	}
+	x.Type = &VolumeContentSource_Volume{v}
+}
+
+func (x *VolumeContentSource) HasType() bool {
+	if x == nil {
+		return false
+	}
+	return x.Type != nil
+}
+
+func (x *VolumeContentSource) HasSnapshot() bool {
+	if x == nil {
+		return false
+	}
+	_, ok := x.Type.(*VolumeContentSource_Snapshot)
+	return ok
+}
+
+func (x *VolumeContentSource) HasVolume() bool {
+	if x == nil {
+		return false
+	}
+	_, ok := x.Type.(*VolumeContentSource_Volume)
+	return ok
+}
+
+func (x *VolumeContentSource) ClearType() {
+	x.Type = nil
+}
+
+func (x *VolumeContentSource) ClearSnapshot() {
+	if _, ok := x.Type.(*VolumeContentSource_Snapshot); ok {
+		x.Type = nil
+	}
+}
+
+func (x *VolumeContentSource) ClearVolume() {
+	if _, ok := x.Type.(*VolumeContentSource_Volume); ok {
+		x.Type = nil
+	}
+}
+
+const VolumeContentSource_Type_not_set_case case_VolumeContentSource_Type = 0
+const VolumeContentSource_Snapshot_case case_VolumeContentSource_Type = 1
+const VolumeContentSource_Volume_case case_VolumeContentSource_Type = 2
+
+func (x *VolumeContentSource) WhichType() case_VolumeContentSource_Type {
+	if x == nil {
+		return VolumeContentSource_Type_not_set_case
+	}
+	switch x.Type.(type) {
+	case *VolumeContentSource_Snapshot:
+		return VolumeContentSource_Snapshot_case
+	case *VolumeContentSource_Volume:
+		return VolumeContentSource_Volume_case
+	default:
+		return VolumeContentSource_Type_not_set_case
+	}
+}
+
+type VolumeContentSource_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Fields of oneof Type:
+	Snapshot *VolumeContentSource_SnapshotSource
+	Volume   *VolumeContentSource_VolumeSource
+	// -- end of Type
+}
+
+func (b0 VolumeContentSource_builder) Build() *VolumeContentSource {
+	m0 := &VolumeContentSource{}
+	b, x := &b0, m0
+	_, _ = b, x
+	if b.Snapshot != nil {
+		x.Type = &VolumeContentSource_Snapshot{b.Snapshot}
+	}
+	if b.Volume != nil {
+		x.Type = &VolumeContentSource_Volume{b.Volume}
+	}
+	return m0
+}
+
+type case_VolumeContentSource_Type protoreflect.FieldNumber
+
+func (x case_VolumeContentSource_Type) String() string {
+	md := file_csi_proto_msgTypes[8].Descriptor()
+	if x == 0 {
+		return "not set"
+	}
+	return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))
+}
+
+type isVolumeContentSource_Type interface {
+	isVolumeContentSource_Type()
+}
+
+type VolumeContentSource_Snapshot struct {
+	Snapshot *VolumeContentSource_SnapshotSource `protobuf:"bytes,1,opt,name=snapshot,proto3,oneof"`
+}
+
+type VolumeContentSource_Volume struct {
+	Volume *VolumeContentSource_VolumeSource `protobuf:"bytes,2,opt,name=volume,proto3,oneof"`
+}
+
+func (*VolumeContentSource_Snapshot) isVolumeContentSource_Type() {}
+
+func (*VolumeContentSource_Volume) isVolumeContentSource_Type() {}
+
+type CreateVolumeResponse struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
+	// Contains all attributes of the newly created volume that are
+	// relevant to the CO along with information required by the Plugin
 	// to uniquely identify the volume. This field is REQUIRED.
-	Volume *Volume `protobuf:"bytes,1,opt,name=volume,proto3" json:"volume,omitempty"`
+	Volume        *Volume `protobuf:"bytes,1,opt,name=volume,proto3" json:"volume,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *CreateVolumeResponse) Reset() {
 	*x = CreateVolumeResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[9]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[9]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *CreateVolumeResponse) String() string {
@@ -1309,7 +1725,7 @@ func (*CreateVolumeResponse) ProtoMessage() {}
 
 func (x *CreateVolumeResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_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)
@@ -1319,11 +1735,6 @@ func (x *CreateVolumeResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use CreateVolumeResponse.ProtoReflect.Descriptor instead.
-func (*CreateVolumeResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{9}
-}
-
 func (x *CreateVolumeResponse) GetVolume() *Volume {
 	if x != nil {
 		return x.Volume
@@ -1331,31 +1742,60 @@ func (x *CreateVolumeResponse) GetVolume() *Volume {
 	return nil
 }
 
+func (x *CreateVolumeResponse) SetVolume(v *Volume) {
+	x.Volume = v
+}
+
+func (x *CreateVolumeResponse) HasVolume() bool {
+	if x == nil {
+		return false
+	}
+	return x.Volume != nil
+}
+
+func (x *CreateVolumeResponse) ClearVolume() {
+	x.Volume = nil
+}
+
+type CreateVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Contains all attributes of the newly created volume that are
+	// relevant to the CO along with information required by the Plugin
+	// to uniquely identify the volume. This field is REQUIRED.
+	Volume *Volume
+}
+
+func (b0 CreateVolumeResponse_builder) Build() *CreateVolumeResponse {
+	m0 := &CreateVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Volume = b.Volume
+	return m0
+}
+
 // Specify a capability of a volume.
 type VolumeCapability struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// Specifies what API the volume will be accessed using. One of the
 	// following fields MUST be specified.
 	//
-	// Types that are assignable to AccessType:
+	// Types that are valid to be assigned to AccessType:
 	//
 	//	*VolumeCapability_Block
 	//	*VolumeCapability_Mount
 	AccessType isVolumeCapability_AccessType `protobuf_oneof:"access_type"`
 	// This is a REQUIRED field.
-	AccessMode *VolumeCapability_AccessMode `protobuf:"bytes,3,opt,name=access_mode,json=accessMode,proto3" json:"access_mode,omitempty"`
+	AccessMode    *VolumeCapability_AccessMode `protobuf:"bytes,3,opt,name=access_mode,json=accessMode,proto3" json:"access_mode,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *VolumeCapability) Reset() {
 	*x = VolumeCapability{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[10]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[10]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *VolumeCapability) String() string {
@@ -1366,7 +1806,7 @@ func (*VolumeCapability) ProtoMessage() {}
 
 func (x *VolumeCapability) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_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)
@@ -1376,28 +1816,27 @@ func (x *VolumeCapability) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use VolumeCapability.ProtoReflect.Descriptor instead.
-func (*VolumeCapability) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{10}
-}
-
-func (m *VolumeCapability) GetAccessType() isVolumeCapability_AccessType {
-	if m != nil {
-		return m.AccessType
+func (x *VolumeCapability) GetAccessType() isVolumeCapability_AccessType {
+	if x != nil {
+		return x.AccessType
 	}
 	return nil
 }
 
 func (x *VolumeCapability) GetBlock() *VolumeCapability_BlockVolume {
-	if x, ok := x.GetAccessType().(*VolumeCapability_Block); ok {
-		return x.Block
+	if x != nil {
+		if x, ok := x.AccessType.(*VolumeCapability_Block); ok {
+			return x.Block
+		}
 	}
 	return nil
 }
 
 func (x *VolumeCapability) GetMount() *VolumeCapability_MountVolume {
-	if x, ok := x.GetAccessType().(*VolumeCapability_Mount); ok {
-		return x.Mount
+	if x != nil {
+		if x, ok := x.AccessType.(*VolumeCapability_Mount); ok {
+			return x.Mount
+		}
 	}
 	return nil
 }
@@ -1409,6 +1848,132 @@ func (x *VolumeCapability) GetAccessMode() *VolumeCapability_AccessMode {
 	return nil
 }
 
+func (x *VolumeCapability) SetBlock(v *VolumeCapability_BlockVolume) {
+	if v == nil {
+		x.AccessType = nil
+		return
+	}
+	x.AccessType = &VolumeCapability_Block{v}
+}
+
+func (x *VolumeCapability) SetMount(v *VolumeCapability_MountVolume) {
+	if v == nil {
+		x.AccessType = nil
+		return
+	}
+	x.AccessType = &VolumeCapability_Mount{v}
+}
+
+func (x *VolumeCapability) SetAccessMode(v *VolumeCapability_AccessMode) {
+	x.AccessMode = v
+}
+
+func (x *VolumeCapability) HasAccessType() bool {
+	if x == nil {
+		return false
+	}
+	return x.AccessType != nil
+}
+
+func (x *VolumeCapability) HasBlock() bool {
+	if x == nil {
+		return false
+	}
+	_, ok := x.AccessType.(*VolumeCapability_Block)
+	return ok
+}
+
+func (x *VolumeCapability) HasMount() bool {
+	if x == nil {
+		return false
+	}
+	_, ok := x.AccessType.(*VolumeCapability_Mount)
+	return ok
+}
+
+func (x *VolumeCapability) HasAccessMode() bool {
+	if x == nil {
+		return false
+	}
+	return x.AccessMode != nil
+}
+
+func (x *VolumeCapability) ClearAccessType() {
+	x.AccessType = nil
+}
+
+func (x *VolumeCapability) ClearBlock() {
+	if _, ok := x.AccessType.(*VolumeCapability_Block); ok {
+		x.AccessType = nil
+	}
+}
+
+func (x *VolumeCapability) ClearMount() {
+	if _, ok := x.AccessType.(*VolumeCapability_Mount); ok {
+		x.AccessType = nil
+	}
+}
+
+func (x *VolumeCapability) ClearAccessMode() {
+	x.AccessMode = nil
+}
+
+const VolumeCapability_AccessType_not_set_case case_VolumeCapability_AccessType = 0
+const VolumeCapability_Block_case case_VolumeCapability_AccessType = 1
+const VolumeCapability_Mount_case case_VolumeCapability_AccessType = 2
+
+func (x *VolumeCapability) WhichAccessType() case_VolumeCapability_AccessType {
+	if x == nil {
+		return VolumeCapability_AccessType_not_set_case
+	}
+	switch x.AccessType.(type) {
+	case *VolumeCapability_Block:
+		return VolumeCapability_Block_case
+	case *VolumeCapability_Mount:
+		return VolumeCapability_Mount_case
+	default:
+		return VolumeCapability_AccessType_not_set_case
+	}
+}
+
+type VolumeCapability_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Specifies what API the volume will be accessed using. One of the
+	// following fields MUST be specified.
+
+	// Fields of oneof AccessType:
+	Block *VolumeCapability_BlockVolume
+	Mount *VolumeCapability_MountVolume
+	// -- end of AccessType
+	// This is a REQUIRED field.
+	AccessMode *VolumeCapability_AccessMode
+}
+
+func (b0 VolumeCapability_builder) Build() *VolumeCapability {
+	m0 := &VolumeCapability{}
+	b, x := &b0, m0
+	_, _ = b, x
+	if b.Block != nil {
+		x.AccessType = &VolumeCapability_Block{b.Block}
+	}
+	if b.Mount != nil {
+		x.AccessType = &VolumeCapability_Mount{b.Mount}
+	}
+	x.AccessMode = b.AccessMode
+	return m0
+}
+
+type case_VolumeCapability_AccessType protoreflect.FieldNumber
+
+func (x case_VolumeCapability_AccessType) String() string {
+	md := file_csi_proto_msgTypes[10].Descriptor()
+	if x == 0 {
+		return "not set"
+	}
+	return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))
+}
+
 type isVolumeCapability_AccessType interface {
 	isVolumeCapability_AccessType()
 }
@@ -1429,10 +1994,7 @@ func (*VolumeCapability_Mount) isVolumeCapability_AccessType() {}
 // `required_bytes` and `limit_bytes` SHALL be set to the same value. At
 // least one of the these fields MUST be specified.
 type CapacityRange struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// Volume MUST be at least this big. This field is OPTIONAL.
 	// A value of 0 is equal to an unspecified field value.
 	// The value of this field MUST NOT be negative.
@@ -1440,16 +2002,16 @@ type CapacityRange struct {
 	// Volume MUST not be bigger than this. This field is OPTIONAL.
 	// A value of 0 is equal to an unspecified field value.
 	// The value of this field MUST NOT be negative.
-	LimitBytes int64 `protobuf:"varint,2,opt,name=limit_bytes,json=limitBytes,proto3" json:"limit_bytes,omitempty"`
+	LimitBytes    int64 `protobuf:"varint,2,opt,name=limit_bytes,json=limitBytes,proto3" json:"limit_bytes,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *CapacityRange) Reset() {
 	*x = CapacityRange{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[11]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[11]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *CapacityRange) String() string {
@@ -1460,7 +2022,7 @@ func (*CapacityRange) ProtoMessage() {}
 
 func (x *CapacityRange) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_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)
@@ -1470,11 +2032,6 @@ func (x *CapacityRange) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use CapacityRange.ProtoReflect.Descriptor instead.
-func (*CapacityRange) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{11}
-}
-
 func (x *CapacityRange) GetRequiredBytes() int64 {
 	if x != nil {
 		return x.RequiredBytes
@@ -1489,12 +2046,39 @@ func (x *CapacityRange) GetLimitBytes() int64 {
 	return 0
 }
 
+func (x *CapacityRange) SetRequiredBytes(v int64) {
+	x.RequiredBytes = v
+}
+
+func (x *CapacityRange) SetLimitBytes(v int64) {
+	x.LimitBytes = v
+}
+
+type CapacityRange_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Volume MUST be at least this big. This field is OPTIONAL.
+	// A value of 0 is equal to an unspecified field value.
+	// The value of this field MUST NOT be negative.
+	RequiredBytes int64
+	// Volume MUST not be bigger than this. This field is OPTIONAL.
+	// A value of 0 is equal to an unspecified field value.
+	// The value of this field MUST NOT be negative.
+	LimitBytes int64
+}
+
+func (b0 CapacityRange_builder) Build() *CapacityRange {
+	m0 := &CapacityRange{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.RequiredBytes = b.RequiredBytes
+	x.LimitBytes = b.LimitBytes
+	return m0
+}
+
 // Information about a specific volume.
 type Volume struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The capacity of the volume in bytes. This field is OPTIONAL. If not
 	// set (value of 0), it indicates that the capacity of the volume is
 	// unknown (e.g., NFS share).
@@ -1524,7 +2108,7 @@ type Volume struct {
 	// same volume_context.
 	// This field is OPTIONAL and when present MUST be passed to volume
 	// validation and publishing calls.
-	VolumeContext map[string]string `protobuf:"bytes,3,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	VolumeContext map[string]string `protobuf:"bytes,3,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 	// If specified, indicates that the volume is not empty and is
 	// pre-populated with data from the specified source.
 	// This field is OPTIONAL.
@@ -1559,15 +2143,15 @@ type Volume struct {
 	// Indicates a volume accessible from both "zone" "Z2" and "zone" "Z3"
 	// in the "region" "R1".
 	AccessibleTopology []*Topology `protobuf:"bytes,5,rep,name=accessible_topology,json=accessibleTopology,proto3" json:"accessible_topology,omitempty"`
+	unknownFields      protoimpl.UnknownFields
+	sizeCache          protoimpl.SizeCache
 }
 
 func (x *Volume) Reset() {
 	*x = Volume{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[12]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[12]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *Volume) String() string {
@@ -1578,7 +2162,7 @@ func (*Volume) ProtoMessage() {}
 
 func (x *Volume) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_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)
@@ -1588,11 +2172,6 @@ func (x *Volume) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use Volume.ProtoReflect.Descriptor instead.
-func (*Volume) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{12}
-}
-
 func (x *Volume) GetCapacityBytes() int64 {
 	if x != nil {
 		return x.CapacityBytes
@@ -1628,11 +2207,120 @@ func (x *Volume) GetAccessibleTopology() []*Topology {
 	return nil
 }
 
-type TopologyRequirement struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *Volume) SetCapacityBytes(v int64) {
+	x.CapacityBytes = v
+}
+
+func (x *Volume) SetVolumeId(v string) {
+	x.VolumeId = v
+}
+
+func (x *Volume) SetVolumeContext(v map[string]string) {
+	x.VolumeContext = v
+}
+
+func (x *Volume) SetContentSource(v *VolumeContentSource) {
+	x.ContentSource = v
+}
+
+func (x *Volume) SetAccessibleTopology(v []*Topology) {
+	x.AccessibleTopology = v
+}
+
+func (x *Volume) HasContentSource() bool {
+	if x == nil {
+		return false
+	}
+	return x.ContentSource != nil
+}
+
+func (x *Volume) ClearContentSource() {
+	x.ContentSource = nil
+}
+
+type Volume_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The capacity of the volume in bytes. This field is OPTIONAL. If not
+	// set (value of 0), it indicates that the capacity of the volume is
+	// unknown (e.g., NFS share).
+	// The value of this field MUST NOT be negative.
+	CapacityBytes int64
+	// The identifier for this volume, generated by the plugin.
+	// This field is REQUIRED.
+	// This field MUST contain enough information to uniquely identify
+	// this specific volume vs all other volumes supported by this plugin.
+	// This field SHALL be used by the CO in subsequent calls to refer to
+	// this volume.
+	// The SP is NOT responsible for global uniqueness of volume_id across
+	// multiple SPs.
+	VolumeId string
+	// Opaque static properties of the volume. SP MAY use this field to
+	// ensure subsequent volume validation and publishing calls have
+	// contextual information.
+	// The contents of this field SHALL be opaque to a CO.
+	// The contents of this field SHALL NOT be mutable.
+	// The contents of this field SHALL be safe for the CO to cache.
+	// The contents of this field SHOULD NOT contain sensitive
+	// information.
+	// The contents of this field SHOULD NOT be used for uniquely
+	// identifying a volume. The `volume_id` alone SHOULD be sufficient to
+	// identify the volume.
+	// A volume uniquely identified by `volume_id` SHALL always report the
+	// same volume_context.
+	// This field is OPTIONAL and when present MUST be passed to volume
+	// validation and publishing calls.
+	VolumeContext map[string]string
+	// If specified, indicates that the volume is not empty and is
+	// pre-populated with data from the specified source.
+	// This field is OPTIONAL.
+	ContentSource *VolumeContentSource
+	// Specifies where (regions, zones, racks, etc.) the provisioned
+	// volume is accessible from.
+	// A plugin that returns this field MUST also set the
+	// VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability.
+	// An SP MAY specify multiple topologies to indicate the volume is
+	// accessible from multiple locations.
+	// COs MAY use this information along with the topology information
+	// returned by NodeGetInfo to ensure that a given volume is accessible
+	// from a given node when scheduling workloads.
+	// This field is OPTIONAL. If it is not specified, the CO MAY assume
+	// the volume is equally accessible from all nodes in the cluster and
+	// MAY schedule workloads referencing the volume on any available
+	// node.
+	//
+	// Example 1:
+	//
+	//	accessible_topology = {"region": "R1", "zone": "Z2"}
+	//
+	// Indicates a volume accessible only from the "region" "R1" and the
+	// "zone" "Z2".
+	//
+	// Example 2:
+	//
+	//	accessible_topology =
+	//	  {"region": "R1", "zone": "Z2"},
+	//	  {"region": "R1", "zone": "Z3"}
+	//
+	// Indicates a volume accessible from both "zone" "Z2" and "zone" "Z3"
+	// in the "region" "R1".
+	AccessibleTopology []*Topology
+}
+
+func (b0 Volume_builder) Build() *Volume {
+	m0 := &Volume{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.CapacityBytes = b.CapacityBytes
+	x.VolumeId = b.VolumeId
+	x.VolumeContext = b.VolumeContext
+	x.ContentSource = b.ContentSource
+	x.AccessibleTopology = b.AccessibleTopology
+	return m0
+}
 
+type TopologyRequirement struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// Specifies the list of topologies the provisioned volume MUST be
 	// accessible from.
 	// This field is OPTIONAL. If TopologyRequirement is specified either
@@ -1784,16 +2472,16 @@ type TopologyRequirement struct {
 	// combination of "Z3" and other possibilities from the list of
 	// requisite. If that's not possible, it should fall back  to a
 	// combination of other possibilities from the list of requisite.
-	Preferred []*Topology `protobuf:"bytes,2,rep,name=preferred,proto3" json:"preferred,omitempty"`
+	Preferred     []*Topology `protobuf:"bytes,2,rep,name=preferred,proto3" json:"preferred,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *TopologyRequirement) Reset() {
 	*x = TopologyRequirement{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[13]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[13]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *TopologyRequirement) String() string {
@@ -1804,7 +2492,7 @@ func (*TopologyRequirement) ProtoMessage() {}
 
 func (x *TopologyRequirement) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_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)
@@ -1814,11 +2502,6 @@ func (x *TopologyRequirement) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use TopologyRequirement.ProtoReflect.Descriptor instead.
-func (*TopologyRequirement) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{13}
-}
-
 func (x *TopologyRequirement) GetRequisite() []*Topology {
 	if x != nil {
 		return x.Requisite
@@ -1826,11 +2509,185 @@ func (x *TopologyRequirement) GetRequisite() []*Topology {
 	return nil
 }
 
-func (x *TopologyRequirement) GetPreferred() []*Topology {
-	if x != nil {
-		return x.Preferred
-	}
-	return nil
+func (x *TopologyRequirement) GetPreferred() []*Topology {
+	if x != nil {
+		return x.Preferred
+	}
+	return nil
+}
+
+func (x *TopologyRequirement) SetRequisite(v []*Topology) {
+	x.Requisite = v
+}
+
+func (x *TopologyRequirement) SetPreferred(v []*Topology) {
+	x.Preferred = v
+}
+
+type TopologyRequirement_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Specifies the list of topologies the provisioned volume MUST be
+	// accessible from.
+	// This field is OPTIONAL. If TopologyRequirement is specified either
+	// requisite or preferred or both MUST be specified.
+	//
+	// If requisite is specified, the provisioned volume MUST be
+	// accessible from at least one of the requisite topologies.
+	//
+	// Given
+	//
+	//	x = number of topologies provisioned volume is accessible from
+	//	n = number of requisite topologies
+	//
+	// The CO MUST ensure n >= 1. The SP MUST ensure x >= 1
+	// If x==n, then the SP MUST make the provisioned volume available to
+	// all topologies from the list of requisite topologies. If it is
+	// unable to do so, the SP MUST fail the CreateVolume call.
+	// For example, if a volume should be accessible from a single zone,
+	// and requisite =
+	//
+	//	{"region": "R1", "zone": "Z2"}
+	//
+	// then the provisioned volume MUST be accessible from the "region"
+	// "R1" and the "zone" "Z2".
+	// Similarly, if a volume should be accessible from two zones, and
+	// requisite =
+	//
+	//	{"region": "R1", "zone": "Z2"},
+	//	{"region": "R1", "zone": "Z3"}
+	//
+	// then the provisioned volume MUST be accessible from the "region"
+	// "R1" and both "zone" "Z2" and "zone" "Z3".
+	//
+	// If x<n, then the SP SHALL choose x unique topologies from the list
+	// of requisite topologies. If it is unable to do so, the SP MUST fail
+	// the CreateVolume call.
+	// For example, if a volume should be accessible from a single zone,
+	// and requisite =
+	//
+	//	{"region": "R1", "zone": "Z2"},
+	//	{"region": "R1", "zone": "Z3"}
+	//
+	// then the SP may choose to make the provisioned volume available in
+	// either the "zone" "Z2" or the "zone" "Z3" in the "region" "R1".
+	// Similarly, if a volume should be accessible from two zones, and
+	// requisite =
+	//
+	//	{"region": "R1", "zone": "Z2"},
+	//	{"region": "R1", "zone": "Z3"},
+	//	{"region": "R1", "zone": "Z4"}
+	//
+	// then the provisioned volume MUST be accessible from any combination
+	// of two unique topologies: e.g. "R1/Z2" and "R1/Z3", or "R1/Z2" and
+	//
+	//	"R1/Z4", or "R1/Z3" and "R1/Z4".
+	//
+	// If x>n, then the SP MUST make the provisioned volume available from
+	// all topologies from the list of requisite topologies and MAY choose
+	// the remaining x-n unique topologies from the list of all possible
+	// topologies. If it is unable to do so, the SP MUST fail the
+	// CreateVolume call.
+	// For example, if a volume should be accessible from two zones, and
+	// requisite =
+	//
+	//	{"region": "R1", "zone": "Z2"}
+	//
+	// then the provisioned volume MUST be accessible from the "region"
+	// "R1" and the "zone" "Z2" and the SP may select the second zone
+	// independently, e.g. "R1/Z4".
+	Requisite []*Topology
+	// Specifies the list of topologies the CO would prefer the volume to
+	// be provisioned in.
+	//
+	// This field is OPTIONAL. If TopologyRequirement is specified either
+	// requisite or preferred or both MUST be specified.
+	//
+	// An SP MUST attempt to make the provisioned volume available using
+	// the preferred topologies in order from first to last.
+	//
+	// If requisite is specified, all topologies in preferred list MUST
+	// also be present in the list of requisite topologies.
+	//
+	// If the SP is unable to to make the provisioned volume available
+	// from any of the preferred topologies, the SP MAY choose a topology
+	// from the list of requisite topologies.
+	// If the list of requisite topologies is not specified, then the SP
+	// MAY choose from the list of all possible topologies.
+	// If the list of requisite topologies is specified and the SP is
+	// unable to to make the provisioned volume available from any of the
+	// requisite topologies it MUST fail the CreateVolume call.
+	//
+	// Example 1:
+	// Given a volume should be accessible from a single zone, and
+	// requisite =
+	//
+	//	{"region": "R1", "zone": "Z2"},
+	//	{"region": "R1", "zone": "Z3"}
+	//
+	// preferred =
+	//
+	//	{"region": "R1", "zone": "Z3"}
+	//
+	// then the SP SHOULD first attempt to make the provisioned volume
+	// available from "zone" "Z3" in the "region" "R1" and fall back to
+	// "zone" "Z2" in the "region" "R1" if that is not possible.
+	//
+	// Example 2:
+	// Given a volume should be accessible from a single zone, and
+	// requisite =
+	//
+	//	{"region": "R1", "zone": "Z2"},
+	//	{"region": "R1", "zone": "Z3"},
+	//	{"region": "R1", "zone": "Z4"},
+	//	{"region": "R1", "zone": "Z5"}
+	//
+	// preferred =
+	//
+	//	{"region": "R1", "zone": "Z4"},
+	//	{"region": "R1", "zone": "Z2"}
+	//
+	// then the SP SHOULD first attempt to make the provisioned volume
+	// accessible from "zone" "Z4" in the "region" "R1" and fall back to
+	// "zone" "Z2" in the "region" "R1" if that is not possible. If that
+	// is not possible, the SP may choose between either the "zone"
+	// "Z3" or "Z5" in the "region" "R1".
+	//
+	// Example 3:
+	// Given a volume should be accessible from TWO zones (because an
+	// opaque parameter in CreateVolumeRequest, for example, specifies
+	// the volume is accessible from two zones, aka synchronously
+	// replicated), and
+	// requisite =
+	//
+	//	{"region": "R1", "zone": "Z2"},
+	//	{"region": "R1", "zone": "Z3"},
+	//	{"region": "R1", "zone": "Z4"},
+	//	{"region": "R1", "zone": "Z5"}
+	//
+	// preferred =
+	//
+	//	{"region": "R1", "zone": "Z5"},
+	//	{"region": "R1", "zone": "Z3"}
+	//
+	// then the SP SHOULD first attempt to make the provisioned volume
+	// accessible from the combination of the two "zones" "Z5" and "Z3" in
+	// the "region" "R1". If that's not possible, it should fall back to
+	// a combination of "Z5" and other possibilities from the list of
+	// requisite. If that's not possible, it should fall back  to a
+	// combination of "Z3" and other possibilities from the list of
+	// requisite. If that's not possible, it should fall back  to a
+	// combination of other possibilities from the list of requisite.
+	Preferred []*Topology
+}
+
+func (b0 TopologyRequirement_builder) Build() *TopologyRequirement {
+	m0 := &TopologyRequirement{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Requisite = b.Requisite
+	x.Preferred = b.Preferred
+	return m0
 }
 
 // Topology is a map of topological domains to topological segments.
@@ -1863,20 +2720,17 @@ func (x *TopologyRequirement) GetPreferred() []*Topology {
 // alphanumeric character with '-', '_', '.', or alphanumerics in
 // between.
 type Topology struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"hybrid.v1"`
+	Segments      map[string]string      `protobuf:"bytes,1,rep,name=segments,proto3" json:"segments,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 	unknownFields protoimpl.UnknownFields
-
-	Segments map[string]string `protobuf:"bytes,1,rep,name=segments,proto3" json:"segments,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *Topology) Reset() {
 	*x = Topology{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[14]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[14]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *Topology) String() string {
@@ -1887,7 +2741,7 @@ func (*Topology) ProtoMessage() {}
 
 func (x *Topology) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_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)
@@ -1897,11 +2751,6 @@ func (x *Topology) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use Topology.ProtoReflect.Descriptor instead.
-func (*Topology) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{14}
-}
-
 func (x *Topology) GetSegments() map[string]string {
 	if x != nil {
 		return x.Segments
@@ -1909,27 +2758,42 @@ func (x *Topology) GetSegments() map[string]string {
 	return nil
 }
 
-type DeleteVolumeRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *Topology) SetSegments(v map[string]string) {
+	x.Segments = v
+}
+
+type Topology_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	Segments map[string]string
+}
+
+func (b0 Topology_builder) Build() *Topology {
+	m0 := &Topology{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Segments = b.Segments
+	return m0
+}
 
+type DeleteVolumeRequest struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The ID of the volume to be deprovisioned.
 	// This field is REQUIRED.
 	VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
 	// Secrets required by plugin to complete volume deletion request.
 	// This field is OPTIONAL. Refer to the `Secrets Requirements`
 	// section on how to use this field.
-	Secrets map[string]string `protobuf:"bytes,2,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Secrets       map[string]string `protobuf:"bytes,2,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *DeleteVolumeRequest) Reset() {
 	*x = DeleteVolumeRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[15]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[15]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *DeleteVolumeRequest) String() string {
@@ -1940,7 +2804,7 @@ func (*DeleteVolumeRequest) ProtoMessage() {}
 
 func (x *DeleteVolumeRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_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)
@@ -1950,11 +2814,6 @@ func (x *DeleteVolumeRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use DeleteVolumeRequest.ProtoReflect.Descriptor instead.
-func (*DeleteVolumeRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{15}
-}
-
 func (x *DeleteVolumeRequest) GetVolumeId() string {
 	if x != nil {
 		return x.VolumeId
@@ -1969,19 +2828,46 @@ func (x *DeleteVolumeRequest) GetSecrets() map[string]string {
 	return nil
 }
 
+func (x *DeleteVolumeRequest) SetVolumeId(v string) {
+	x.VolumeId = v
+}
+
+func (x *DeleteVolumeRequest) SetSecrets(v map[string]string) {
+	x.Secrets = v
+}
+
+type DeleteVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume to be deprovisioned.
+	// This field is REQUIRED.
+	VolumeId string
+	// Secrets required by plugin to complete volume deletion request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+}
+
+func (b0 DeleteVolumeRequest_builder) Build() *DeleteVolumeRequest {
+	m0 := &DeleteVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.VolumeId = b.VolumeId
+	x.Secrets = b.Secrets
+	return m0
+}
+
 type DeleteVolumeResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"hybrid.v1"`
 	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *DeleteVolumeResponse) Reset() {
 	*x = DeleteVolumeResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[16]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[16]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *DeleteVolumeResponse) String() string {
@@ -1992,7 +2878,7 @@ func (*DeleteVolumeResponse) ProtoMessage() {}
 
 func (x *DeleteVolumeResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_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)
@@ -2002,16 +2888,20 @@ func (x *DeleteVolumeResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use DeleteVolumeResponse.ProtoReflect.Descriptor instead.
-func (*DeleteVolumeResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{16}
+type DeleteVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
 }
 
-type ControllerPublishVolumeRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (b0 DeleteVolumeResponse_builder) Build() *DeleteVolumeResponse {
+	m0 := &DeleteVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
 
+type ControllerPublishVolumeRequest struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The ID of the volume to be used on a node.
 	// This field is REQUIRED.
 	VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
@@ -2031,21 +2921,21 @@ type ControllerPublishVolumeRequest struct {
 	// Secrets required by plugin to complete controller publish volume
 	// request. This field is OPTIONAL. Refer to the
 	// `Secrets Requirements` section on how to use this field.
-	Secrets map[string]string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Secrets map[string]string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 	// Volume context as returned by SP in
 	// CreateVolumeResponse.Volume.volume_context.
 	// This field is OPTIONAL and MUST match the volume_context of the
 	// volume identified by `volume_id`.
-	VolumeContext map[string]string `protobuf:"bytes,6,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	VolumeContext map[string]string `protobuf:"bytes,6,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *ControllerPublishVolumeRequest) Reset() {
 	*x = ControllerPublishVolumeRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[17]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[17]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ControllerPublishVolumeRequest) String() string {
@@ -2056,7 +2946,7 @@ func (*ControllerPublishVolumeRequest) ProtoMessage() {}
 
 func (x *ControllerPublishVolumeRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_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)
@@ -2066,11 +2956,6 @@ func (x *ControllerPublishVolumeRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ControllerPublishVolumeRequest.ProtoReflect.Descriptor instead.
-func (*ControllerPublishVolumeRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{17}
-}
-
 func (x *ControllerPublishVolumeRequest) GetVolumeId() string {
 	if x != nil {
 		return x.VolumeId
@@ -2113,11 +2998,86 @@ func (x *ControllerPublishVolumeRequest) GetVolumeContext() map[string]string {
 	return nil
 }
 
-type ControllerPublishVolumeResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *ControllerPublishVolumeRequest) SetVolumeId(v string) {
+	x.VolumeId = v
+}
+
+func (x *ControllerPublishVolumeRequest) SetNodeId(v string) {
+	x.NodeId = v
+}
+
+func (x *ControllerPublishVolumeRequest) SetVolumeCapability(v *VolumeCapability) {
+	x.VolumeCapability = v
+}
+
+func (x *ControllerPublishVolumeRequest) SetReadonly(v bool) {
+	x.Readonly = v
+}
+
+func (x *ControllerPublishVolumeRequest) SetSecrets(v map[string]string) {
+	x.Secrets = v
+}
+
+func (x *ControllerPublishVolumeRequest) SetVolumeContext(v map[string]string) {
+	x.VolumeContext = v
+}
+
+func (x *ControllerPublishVolumeRequest) HasVolumeCapability() bool {
+	if x == nil {
+		return false
+	}
+	return x.VolumeCapability != nil
+}
+
+func (x *ControllerPublishVolumeRequest) ClearVolumeCapability() {
+	x.VolumeCapability = nil
+}
+
+type ControllerPublishVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume to be used on a node.
+	// This field is REQUIRED.
+	VolumeId string
+	// The ID of the node. This field is REQUIRED. The CO SHALL set this
+	// field to match the node ID returned by `NodeGetInfo`.
+	NodeId string
+	// Volume capability describing how the CO intends to use this volume.
+	// SP MUST ensure the CO can use the published volume as described.
+	// Otherwise SP MUST return the appropriate gRPC error code.
+	// This is a REQUIRED field.
+	VolumeCapability *VolumeCapability
+	// Indicates SP MUST publish the volume in readonly mode.
+	// CO MUST set this field to false if SP does not have the
+	// PUBLISH_READONLY controller capability.
+	// This is a REQUIRED field.
+	Readonly bool
+	// Secrets required by plugin to complete controller publish volume
+	// request. This field is OPTIONAL. Refer to the
+	// `Secrets Requirements` section on how to use this field.
+	Secrets map[string]string
+	// Volume context as returned by SP in
+	// CreateVolumeResponse.Volume.volume_context.
+	// This field is OPTIONAL and MUST match the volume_context of the
+	// volume identified by `volume_id`.
+	VolumeContext map[string]string
+}
 
+func (b0 ControllerPublishVolumeRequest_builder) Build() *ControllerPublishVolumeRequest {
+	m0 := &ControllerPublishVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.VolumeId = b.VolumeId
+	x.NodeId = b.NodeId
+	x.VolumeCapability = b.VolumeCapability
+	x.Readonly = b.Readonly
+	x.Secrets = b.Secrets
+	x.VolumeContext = b.VolumeContext
+	return m0
+}
+
+type ControllerPublishVolumeResponse struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// Opaque static publish properties of the volume. SP MAY use this
 	// field to ensure subsequent `NodeStageVolume` or `NodePublishVolume`
 	// calls calls have contextual information.
@@ -2131,16 +3091,16 @@ type ControllerPublishVolumeResponse struct {
 	// identify the volume.
 	// This field is OPTIONAL and when present MUST be passed to
 	// subsequent `NodeStageVolume` or `NodePublishVolume` calls
-	PublishContext map[string]string `protobuf:"bytes,1,rep,name=publish_context,json=publishContext,proto3" json:"publish_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	PublishContext map[string]string `protobuf:"bytes,1,rep,name=publish_context,json=publishContext,proto3" json:"publish_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields  protoimpl.UnknownFields
+	sizeCache      protoimpl.SizeCache
 }
 
 func (x *ControllerPublishVolumeResponse) Reset() {
 	*x = ControllerPublishVolumeResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[18]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[18]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ControllerPublishVolumeResponse) String() string {
@@ -2151,7 +3111,7 @@ func (*ControllerPublishVolumeResponse) ProtoMessage() {}
 
 func (x *ControllerPublishVolumeResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[18]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2161,11 +3121,6 @@ func (x *ControllerPublishVolumeResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ControllerPublishVolumeResponse.ProtoReflect.Descriptor instead.
-func (*ControllerPublishVolumeResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{18}
-}
-
 func (x *ControllerPublishVolumeResponse) GetPublishContext() map[string]string {
 	if x != nil {
 		return x.PublishContext
@@ -2173,11 +3128,39 @@ func (x *ControllerPublishVolumeResponse) GetPublishContext() map[string]string
 	return nil
 }
 
-type ControllerUnpublishVolumeRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *ControllerPublishVolumeResponse) SetPublishContext(v map[string]string) {
+	x.PublishContext = v
+}
+
+type ControllerPublishVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Opaque static publish properties of the volume. SP MAY use this
+	// field to ensure subsequent `NodeStageVolume` or `NodePublishVolume`
+	// calls calls have contextual information.
+	// The contents of this field SHALL be opaque to a CO.
+	// The contents of this field SHALL NOT be mutable.
+	// The contents of this field SHALL be safe for the CO to cache.
+	// The contents of this field SHOULD NOT contain sensitive
+	// information.
+	// The contents of this field SHOULD NOT be used for uniquely
+	// identifying a volume. The `volume_id` alone SHOULD be sufficient to
+	// identify the volume.
+	// This field is OPTIONAL and when present MUST be passed to
+	// subsequent `NodeStageVolume` or `NodePublishVolume` calls
+	PublishContext map[string]string
+}
+
+func (b0 ControllerPublishVolumeResponse_builder) Build() *ControllerPublishVolumeResponse {
+	m0 := &ControllerPublishVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.PublishContext = b.PublishContext
+	return m0
+}
 
+type ControllerUnpublishVolumeRequest struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The ID of the volume. This field is REQUIRED.
 	VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
 	// The ID of the node. This field is OPTIONAL. The CO SHOULD set this
@@ -2191,16 +3174,16 @@ type ControllerUnpublishVolumeRequest struct {
 	// ControllerPublishVolume call for the specified volume.
 	// This field is OPTIONAL. Refer to the `Secrets Requirements`
 	// section on how to use this field.
-	Secrets map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Secrets       map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *ControllerUnpublishVolumeRequest) Reset() {
 	*x = ControllerUnpublishVolumeRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[19]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[19]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ControllerUnpublishVolumeRequest) String() string {
@@ -2211,7 +3194,7 @@ func (*ControllerUnpublishVolumeRequest) ProtoMessage() {}
 
 func (x *ControllerUnpublishVolumeRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[19]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2221,11 +3204,6 @@ func (x *ControllerUnpublishVolumeRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ControllerUnpublishVolumeRequest.ProtoReflect.Descriptor instead.
-func (*ControllerUnpublishVolumeRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{19}
-}
-
 func (x *ControllerUnpublishVolumeRequest) GetVolumeId() string {
 	if x != nil {
 		return x.VolumeId
@@ -2247,19 +3225,58 @@ func (x *ControllerUnpublishVolumeRequest) GetSecrets() map[string]string {
 	return nil
 }
 
+func (x *ControllerUnpublishVolumeRequest) SetVolumeId(v string) {
+	x.VolumeId = v
+}
+
+func (x *ControllerUnpublishVolumeRequest) SetNodeId(v string) {
+	x.NodeId = v
+}
+
+func (x *ControllerUnpublishVolumeRequest) SetSecrets(v map[string]string) {
+	x.Secrets = v
+}
+
+type ControllerUnpublishVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume. This field is REQUIRED.
+	VolumeId string
+	// The ID of the node. This field is OPTIONAL. The CO SHOULD set this
+	// field to match the node ID returned by `NodeGetInfo` or leave it
+	// unset. If the value is set, the SP MUST unpublish the volume from
+	// the specified node. If the value is unset, the SP MUST unpublish
+	// the volume from all nodes it is published to.
+	NodeId string
+	// Secrets required by plugin to complete controller unpublish volume
+	// request. This SHOULD be the same secrets passed to the
+	// ControllerPublishVolume call for the specified volume.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+}
+
+func (b0 ControllerUnpublishVolumeRequest_builder) Build() *ControllerUnpublishVolumeRequest {
+	m0 := &ControllerUnpublishVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.VolumeId = b.VolumeId
+	x.NodeId = b.NodeId
+	x.Secrets = b.Secrets
+	return m0
+}
+
 type ControllerUnpublishVolumeResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"hybrid.v1"`
 	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *ControllerUnpublishVolumeResponse) Reset() {
 	*x = ControllerUnpublishVolumeResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[20]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[20]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ControllerUnpublishVolumeResponse) String() string {
@@ -2270,7 +3287,7 @@ func (*ControllerUnpublishVolumeResponse) ProtoMessage() {}
 
 func (x *ControllerUnpublishVolumeResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[20]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2280,46 +3297,50 @@ func (x *ControllerUnpublishVolumeResponse) ProtoReflect() protoreflect.Message
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ControllerUnpublishVolumeResponse.ProtoReflect.Descriptor instead.
-func (*ControllerUnpublishVolumeResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{20}
+type ControllerUnpublishVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
 }
 
-type ValidateVolumeCapabilitiesRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (b0 ControllerUnpublishVolumeResponse_builder) Build() *ControllerUnpublishVolumeResponse {
+	m0 := &ControllerUnpublishVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
 
+type ValidateVolumeCapabilitiesRequest struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The ID of the volume to check. This field is REQUIRED.
 	VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
 	// Volume context as returned by SP in
 	// CreateVolumeResponse.Volume.volume_context.
 	// This field is OPTIONAL and MUST match the volume_context of the
 	// volume identified by `volume_id`.
-	VolumeContext map[string]string `protobuf:"bytes,2,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	VolumeContext map[string]string `protobuf:"bytes,2,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 	// The capabilities that the CO wants to check for the volume. This
 	// call SHALL return "confirmed" only if all the volume capabilities
 	// specified below are supported. This field is REQUIRED.
 	VolumeCapabilities []*VolumeCapability `protobuf:"bytes,3,rep,name=volume_capabilities,json=volumeCapabilities,proto3" json:"volume_capabilities,omitempty"`
 	// See CreateVolumeRequest.parameters.
 	// This field is OPTIONAL.
-	Parameters map[string]string `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Parameters map[string]string `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 	// Secrets required by plugin to complete volume validation request.
 	// This field is OPTIONAL. Refer to the `Secrets Requirements`
 	// section on how to use this field.
-	Secrets map[string]string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Secrets map[string]string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 	// See CreateVolumeRequest.mutable_parameters.
 	// This field is OPTIONAL.
-	MutableParameters map[string]string `protobuf:"bytes,6,rep,name=mutable_parameters,json=mutableParameters,proto3" json:"mutable_parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	MutableParameters map[string]string `protobuf:"bytes,6,rep,name=mutable_parameters,json=mutableParameters,proto3" json:"mutable_parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields     protoimpl.UnknownFields
+	sizeCache         protoimpl.SizeCache
 }
 
 func (x *ValidateVolumeCapabilitiesRequest) Reset() {
 	*x = ValidateVolumeCapabilitiesRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[21]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[21]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ValidateVolumeCapabilitiesRequest) String() string {
@@ -2330,7 +3351,7 @@ func (*ValidateVolumeCapabilitiesRequest) ProtoMessage() {}
 
 func (x *ValidateVolumeCapabilitiesRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[21]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2340,11 +3361,6 @@ func (x *ValidateVolumeCapabilitiesRequest) ProtoReflect() protoreflect.Message
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ValidateVolumeCapabilitiesRequest.ProtoReflect.Descriptor instead.
-func (*ValidateVolumeCapabilitiesRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{21}
-}
-
 func (x *ValidateVolumeCapabilitiesRequest) GetVolumeId() string {
 	if x != nil {
 		return x.VolumeId
@@ -2387,11 +3403,71 @@ func (x *ValidateVolumeCapabilitiesRequest) GetMutableParameters() map[string]st
 	return nil
 }
 
-type ValidateVolumeCapabilitiesResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *ValidateVolumeCapabilitiesRequest) SetVolumeId(v string) {
+	x.VolumeId = v
+}
+
+func (x *ValidateVolumeCapabilitiesRequest) SetVolumeContext(v map[string]string) {
+	x.VolumeContext = v
+}
+
+func (x *ValidateVolumeCapabilitiesRequest) SetVolumeCapabilities(v []*VolumeCapability) {
+	x.VolumeCapabilities = v
+}
+
+func (x *ValidateVolumeCapabilitiesRequest) SetParameters(v map[string]string) {
+	x.Parameters = v
+}
+
+func (x *ValidateVolumeCapabilitiesRequest) SetSecrets(v map[string]string) {
+	x.Secrets = v
+}
 
+func (x *ValidateVolumeCapabilitiesRequest) SetMutableParameters(v map[string]string) {
+	x.MutableParameters = v
+}
+
+type ValidateVolumeCapabilitiesRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume to check. This field is REQUIRED.
+	VolumeId string
+	// Volume context as returned by SP in
+	// CreateVolumeResponse.Volume.volume_context.
+	// This field is OPTIONAL and MUST match the volume_context of the
+	// volume identified by `volume_id`.
+	VolumeContext map[string]string
+	// The capabilities that the CO wants to check for the volume. This
+	// call SHALL return "confirmed" only if all the volume capabilities
+	// specified below are supported. This field is REQUIRED.
+	VolumeCapabilities []*VolumeCapability
+	// See CreateVolumeRequest.parameters.
+	// This field is OPTIONAL.
+	Parameters map[string]string
+	// Secrets required by plugin to complete volume validation request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+	// See CreateVolumeRequest.mutable_parameters.
+	// This field is OPTIONAL.
+	MutableParameters map[string]string
+}
+
+func (b0 ValidateVolumeCapabilitiesRequest_builder) Build() *ValidateVolumeCapabilitiesRequest {
+	m0 := &ValidateVolumeCapabilitiesRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.VolumeId = b.VolumeId
+	x.VolumeContext = b.VolumeContext
+	x.VolumeCapabilities = b.VolumeCapabilities
+	x.Parameters = b.Parameters
+	x.Secrets = b.Secrets
+	x.MutableParameters = b.MutableParameters
+	return m0
+}
+
+type ValidateVolumeCapabilitiesResponse struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// Confirmed indicates to the CO the set of capabilities that the
 	// plugin has validated. This field SHALL only be set to a non-empty
 	// value for successful validation responses.
@@ -2404,16 +3480,16 @@ type ValidateVolumeCapabilitiesResponse struct {
 	// Message to the CO if `confirmed` above is empty. This field is
 	// OPTIONAL.
 	// An empty string is equal to an unspecified field value.
-	Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
+	Message       string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *ValidateVolumeCapabilitiesResponse) Reset() {
 	*x = ValidateVolumeCapabilitiesResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[22]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[22]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ValidateVolumeCapabilitiesResponse) String() string {
@@ -2424,19 +3500,14 @@ func (*ValidateVolumeCapabilitiesResponse) ProtoMessage() {}
 
 func (x *ValidateVolumeCapabilitiesResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[22]
-	if protoimpl.UnsafeEnabled && x != nil {
+	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 ValidateVolumeCapabilitiesResponse.ProtoReflect.Descriptor instead.
-func (*ValidateVolumeCapabilitiesResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{22}
+	return mi.MessageOf(x)
 }
 
 func (x *ValidateVolumeCapabilitiesResponse) GetConfirmed() *ValidateVolumeCapabilitiesResponse_Confirmed {
@@ -2453,11 +3524,54 @@ func (x *ValidateVolumeCapabilitiesResponse) GetMessage() string {
 	return ""
 }
 
-type ListVolumesRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *ValidateVolumeCapabilitiesResponse) SetConfirmed(v *ValidateVolumeCapabilitiesResponse_Confirmed) {
+	x.Confirmed = v
+}
+
+func (x *ValidateVolumeCapabilitiesResponse) SetMessage(v string) {
+	x.Message = v
+}
+
+func (x *ValidateVolumeCapabilitiesResponse) HasConfirmed() bool {
+	if x == nil {
+		return false
+	}
+	return x.Confirmed != nil
+}
+
+func (x *ValidateVolumeCapabilitiesResponse) ClearConfirmed() {
+	x.Confirmed = nil
+}
+
+type ValidateVolumeCapabilitiesResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Confirmed indicates to the CO the set of capabilities that the
+	// plugin has validated. This field SHALL only be set to a non-empty
+	// value for successful validation responses.
+	// For successful validation responses, the CO SHALL compare the
+	// fields of this message to the originally requested capabilities in
+	// order to guard against an older plugin reporting "valid" for newer
+	// capability fields that it does not yet understand.
+	// This field is OPTIONAL.
+	Confirmed *ValidateVolumeCapabilitiesResponse_Confirmed
+	// Message to the CO if `confirmed` above is empty. This field is
+	// OPTIONAL.
+	// An empty string is equal to an unspecified field value.
+	Message string
+}
+
+func (b0 ValidateVolumeCapabilitiesResponse_builder) Build() *ValidateVolumeCapabilitiesResponse {
+	m0 := &ValidateVolumeCapabilitiesResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Confirmed = b.Confirmed
+	x.Message = b.Message
+	return m0
+}
 
+type ListVolumesRequest struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// If specified (non-zero value), the Plugin MUST NOT return more
 	// entries than this number in the response. If the actual number of
 	// entries is more than this number, the Plugin MUST set `next_token`
@@ -2472,15 +3586,15 @@ type ListVolumesRequest struct {
 	// next page of entries. This field is OPTIONAL.
 	// An empty string is equal to an unspecified field value.
 	StartingToken string `protobuf:"bytes,2,opt,name=starting_token,json=startingToken,proto3" json:"starting_token,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *ListVolumesRequest) Reset() {
 	*x = ListVolumesRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[23]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[23]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ListVolumesRequest) String() string {
@@ -2491,7 +3605,7 @@ func (*ListVolumesRequest) ProtoMessage() {}
 
 func (x *ListVolumesRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[23]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2501,11 +3615,6 @@ func (x *ListVolumesRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ListVolumesRequest.ProtoReflect.Descriptor instead.
-func (*ListVolumesRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{23}
-}
-
 func (x *ListVolumesRequest) GetMaxEntries() int32 {
 	if x != nil {
 		return x.MaxEntries
@@ -2520,11 +3629,44 @@ func (x *ListVolumesRequest) GetStartingToken() string {
 	return ""
 }
 
-type ListVolumesResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *ListVolumesRequest) SetMaxEntries(v int32) {
+	x.MaxEntries = v
+}
+
+func (x *ListVolumesRequest) SetStartingToken(v string) {
+	x.StartingToken = v
+}
+
+type ListVolumesRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// If specified (non-zero value), the Plugin MUST NOT return more
+	// entries than this number in the response. If the actual number of
+	// entries is more than this number, the Plugin MUST set `next_token`
+	// in the response which can be used to get the next page of entries
+	// in the subsequent `ListVolumes` call. This field is OPTIONAL. If
+	// not specified (zero value), it means there is no restriction on the
+	// number of entries that can be returned.
+	// The value of this field MUST NOT be negative.
+	MaxEntries int32
+	// A token to specify where to start paginating. Set this field to
+	// `next_token` returned by a previous `ListVolumes` call to get the
+	// next page of entries. This field is OPTIONAL.
+	// An empty string is equal to an unspecified field value.
+	StartingToken string
+}
+
+func (b0 ListVolumesRequest_builder) Build() *ListVolumesRequest {
+	m0 := &ListVolumesRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.MaxEntries = b.MaxEntries
+	x.StartingToken = b.StartingToken
+	return m0
+}
 
+type ListVolumesResponse struct {
+	state   protoimpl.MessageState       `protogen:"hybrid.v1"`
 	Entries []*ListVolumesResponse_Entry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"`
 	// This token allows you to get the next page of entries for
 	// `ListVolumes` request. If the number of entries is larger than
@@ -2532,16 +3674,16 @@ type ListVolumesResponse struct {
 	// `starting_token` field in the next `ListVolumes` request. This
 	// field is OPTIONAL.
 	// An empty string is equal to an unspecified field value.
-	NextToken string `protobuf:"bytes,2,opt,name=next_token,json=nextToken,proto3" json:"next_token,omitempty"`
+	NextToken     string `protobuf:"bytes,2,opt,name=next_token,json=nextToken,proto3" json:"next_token,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *ListVolumesResponse) Reset() {
 	*x = ListVolumesResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[24]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[24]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ListVolumesResponse) String() string {
@@ -2552,7 +3694,7 @@ func (*ListVolumesResponse) ProtoMessage() {}
 
 func (x *ListVolumesResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[24]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2562,11 +3704,6 @@ func (x *ListVolumesResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ListVolumesResponse.ProtoReflect.Descriptor instead.
-func (*ListVolumesResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{24}
-}
-
 func (x *ListVolumesResponse) GetEntries() []*ListVolumesResponse_Entry {
 	if x != nil {
 		return x.Entries
@@ -2581,23 +3718,50 @@ func (x *ListVolumesResponse) GetNextToken() string {
 	return ""
 }
 
-type ControllerGetVolumeRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *ListVolumesResponse) SetEntries(v []*ListVolumesResponse_Entry) {
+	x.Entries = v
+}
+
+func (x *ListVolumesResponse) SetNextToken(v string) {
+	x.NextToken = v
+}
+
+type ListVolumesResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	Entries []*ListVolumesResponse_Entry
+	// This token allows you to get the next page of entries for
+	// `ListVolumes` request. If the number of entries is larger than
+	// `max_entries`, use the `next_token` as a value for the
+	// `starting_token` field in the next `ListVolumes` request. This
+	// field is OPTIONAL.
+	// An empty string is equal to an unspecified field value.
+	NextToken string
+}
 
+func (b0 ListVolumesResponse_builder) Build() *ListVolumesResponse {
+	m0 := &ListVolumesResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Entries = b.Entries
+	x.NextToken = b.NextToken
+	return m0
+}
+
+type ControllerGetVolumeRequest struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The ID of the volume to fetch current volume information for.
 	// This field is REQUIRED.
-	VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
+	VolumeId      string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *ControllerGetVolumeRequest) Reset() {
 	*x = ControllerGetVolumeRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[25]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[25]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ControllerGetVolumeRequest) String() string {
@@ -2608,7 +3772,7 @@ func (*ControllerGetVolumeRequest) ProtoMessage() {}
 
 func (x *ControllerGetVolumeRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[25]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2618,11 +3782,6 @@ func (x *ControllerGetVolumeRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ControllerGetVolumeRequest.ProtoReflect.Descriptor instead.
-func (*ControllerGetVolumeRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{25}
-}
-
 func (x *ControllerGetVolumeRequest) GetVolumeId() string {
 	if x != nil {
 		return x.VolumeId
@@ -2630,24 +3789,41 @@ func (x *ControllerGetVolumeRequest) GetVolumeId() string {
 	return ""
 }
 
-type ControllerGetVolumeResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *ControllerGetVolumeRequest) SetVolumeId(v string) {
+	x.VolumeId = v
+}
+
+type ControllerGetVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume to fetch current volume information for.
+	// This field is REQUIRED.
+	VolumeId string
+}
+
+func (b0 ControllerGetVolumeRequest_builder) Build() *ControllerGetVolumeRequest {
+	m0 := &ControllerGetVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.VolumeId = b.VolumeId
+	return m0
+}
 
+type ControllerGetVolumeResponse struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// This field is REQUIRED
 	Volume *Volume `protobuf:"bytes,1,opt,name=volume,proto3" json:"volume,omitempty"`
 	// This field is REQUIRED.
-	Status *ControllerGetVolumeResponse_VolumeStatus `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`
+	Status        *ControllerGetVolumeResponse_VolumeStatus `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *ControllerGetVolumeResponse) Reset() {
 	*x = ControllerGetVolumeResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[26]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[26]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ControllerGetVolumeResponse) String() string {
@@ -2658,7 +3834,7 @@ func (*ControllerGetVolumeResponse) ProtoMessage() {}
 
 func (x *ControllerGetVolumeResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[26]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2668,11 +3844,6 @@ func (x *ControllerGetVolumeResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ControllerGetVolumeResponse.ProtoReflect.Descriptor instead.
-func (*ControllerGetVolumeResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{26}
-}
-
 func (x *ControllerGetVolumeResponse) GetVolume() *Volume {
 	if x != nil {
 		return x.Volume
@@ -2687,18 +3858,63 @@ func (x *ControllerGetVolumeResponse) GetStatus() *ControllerGetVolumeResponse_V
 	return nil
 }
 
-type ControllerModifyVolumeRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *ControllerGetVolumeResponse) SetVolume(v *Volume) {
+	x.Volume = v
+}
+
+func (x *ControllerGetVolumeResponse) SetStatus(v *ControllerGetVolumeResponse_VolumeStatus) {
+	x.Status = v
+}
+
+func (x *ControllerGetVolumeResponse) HasVolume() bool {
+	if x == nil {
+		return false
+	}
+	return x.Volume != nil
+}
+
+func (x *ControllerGetVolumeResponse) HasStatus() bool {
+	if x == nil {
+		return false
+	}
+	return x.Status != nil
+}
 
+func (x *ControllerGetVolumeResponse) ClearVolume() {
+	x.Volume = nil
+}
+
+func (x *ControllerGetVolumeResponse) ClearStatus() {
+	x.Status = nil
+}
+
+type ControllerGetVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This field is REQUIRED
+	Volume *Volume
+	// This field is REQUIRED.
+	Status *ControllerGetVolumeResponse_VolumeStatus
+}
+
+func (b0 ControllerGetVolumeResponse_builder) Build() *ControllerGetVolumeResponse {
+	m0 := &ControllerGetVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Volume = b.Volume
+	x.Status = b.Status
+	return m0
+}
+
+type ControllerModifyVolumeRequest struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// Contains identity information for the existing volume.
 	// This field is REQUIRED.
 	VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
 	// Secrets required by plugin to complete modify volume request.
 	// This field is OPTIONAL. Refer to the `Secrets Requirements`
 	// section on how to use this field.
-	Secrets map[string]string `protobuf:"bytes,2,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Secrets map[string]string `protobuf:"bytes,2,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 	// Plugin specific volume attributes to mutate, passed in as
 	// opaque key-value pairs.
 	// This field is REQUIRED. The Plugin is responsible for
@@ -2707,16 +3923,16 @@ type ControllerModifyVolumeRequest struct {
 	// parameters it intends to modify. SPs MUST NOT modify volumes based
 	// on the absence of keys, only keys that are specified should result
 	// in modifications to the volume.
-	MutableParameters map[string]string `protobuf:"bytes,3,rep,name=mutable_parameters,json=mutableParameters,proto3" json:"mutable_parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	MutableParameters map[string]string `protobuf:"bytes,3,rep,name=mutable_parameters,json=mutableParameters,proto3" json:"mutable_parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields     protoimpl.UnknownFields
+	sizeCache         protoimpl.SizeCache
 }
 
 func (x *ControllerModifyVolumeRequest) Reset() {
 	*x = ControllerModifyVolumeRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[27]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[27]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ControllerModifyVolumeRequest) String() string {
@@ -2727,7 +3943,7 @@ func (*ControllerModifyVolumeRequest) ProtoMessage() {}
 
 func (x *ControllerModifyVolumeRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[27]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2737,11 +3953,6 @@ func (x *ControllerModifyVolumeRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ControllerModifyVolumeRequest.ProtoReflect.Descriptor instead.
-func (*ControllerModifyVolumeRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{27}
-}
-
 func (x *ControllerModifyVolumeRequest) GetVolumeId() string {
 	if x != nil {
 		return x.VolumeId
@@ -2763,19 +3974,60 @@ func (x *ControllerModifyVolumeRequest) GetMutableParameters() map[string]string
 	return nil
 }
 
+func (x *ControllerModifyVolumeRequest) SetVolumeId(v string) {
+	x.VolumeId = v
+}
+
+func (x *ControllerModifyVolumeRequest) SetSecrets(v map[string]string) {
+	x.Secrets = v
+}
+
+func (x *ControllerModifyVolumeRequest) SetMutableParameters(v map[string]string) {
+	x.MutableParameters = v
+}
+
+type ControllerModifyVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Contains identity information for the existing volume.
+	// This field is REQUIRED.
+	VolumeId string
+	// Secrets required by plugin to complete modify volume request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+	// Plugin specific volume attributes to mutate, passed in as
+	// opaque key-value pairs.
+	// This field is REQUIRED. The Plugin is responsible for
+	// parsing and validating these parameters. COs will treat these
+	// as opaque. The CO SHOULD specify the intended values of all mutable
+	// parameters it intends to modify. SPs MUST NOT modify volumes based
+	// on the absence of keys, only keys that are specified should result
+	// in modifications to the volume.
+	MutableParameters map[string]string
+}
+
+func (b0 ControllerModifyVolumeRequest_builder) Build() *ControllerModifyVolumeRequest {
+	m0 := &ControllerModifyVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.VolumeId = b.VolumeId
+	x.Secrets = b.Secrets
+	x.MutableParameters = b.MutableParameters
+	return m0
+}
+
 type ControllerModifyVolumeResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"hybrid.v1"`
 	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *ControllerModifyVolumeResponse) Reset() {
 	*x = ControllerModifyVolumeResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[28]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[28]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ControllerModifyVolumeResponse) String() string {
@@ -2786,7 +4038,7 @@ func (*ControllerModifyVolumeResponse) ProtoMessage() {}
 
 func (x *ControllerModifyVolumeResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[28]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2796,16 +4048,20 @@ func (x *ControllerModifyVolumeResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ControllerModifyVolumeResponse.ProtoReflect.Descriptor instead.
-func (*ControllerModifyVolumeResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{28}
+type ControllerModifyVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
 }
 
-type GetCapacityRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (b0 ControllerModifyVolumeResponse_builder) Build() *ControllerModifyVolumeResponse {
+	m0 := &ControllerModifyVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
 
+type GetCapacityRequest struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// If specified, the Plugin SHALL report the capacity of the storage
 	// that can be used to provision volumes that satisfy ALL of the
 	// specified `volume_capabilities`. These are the same
@@ -2816,7 +4072,7 @@ type GetCapacityRequest struct {
 	// that can be used to provision volumes with the given Plugin
 	// specific `parameters`. These are the same `parameters` the CO will
 	// use in `CreateVolumeRequest`. This field is OPTIONAL.
-	Parameters map[string]string `protobuf:"bytes,2,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Parameters map[string]string `protobuf:"bytes,2,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 	// If specified, the Plugin SHALL report the capacity of the storage
 	// that can be used to provision volumes that in the specified
 	// `accessible_topology`. This is the same as the
@@ -2824,15 +4080,15 @@ type GetCapacityRequest struct {
 	// This field is OPTIONAL. This field SHALL NOT be set unless the
 	// plugin advertises the VOLUME_ACCESSIBILITY_CONSTRAINTS capability.
 	AccessibleTopology *Topology `protobuf:"bytes,3,opt,name=accessible_topology,json=accessibleTopology,proto3" json:"accessible_topology,omitempty"`
+	unknownFields      protoimpl.UnknownFields
+	sizeCache          protoimpl.SizeCache
 }
 
 func (x *GetCapacityRequest) Reset() {
 	*x = GetCapacityRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[29]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[29]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *GetCapacityRequest) String() string {
@@ -2843,7 +4099,7 @@ func (*GetCapacityRequest) ProtoMessage() {}
 
 func (x *GetCapacityRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[29]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2853,11 +4109,6 @@ func (x *GetCapacityRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GetCapacityRequest.ProtoReflect.Descriptor instead.
-func (*GetCapacityRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{29}
-}
-
 func (x *GetCapacityRequest) GetVolumeCapabilities() []*VolumeCapability {
 	if x != nil {
 		return x.VolumeCapabilities
@@ -2879,11 +4130,64 @@ func (x *GetCapacityRequest) GetAccessibleTopology() *Topology {
 	return nil
 }
 
-type GetCapacityResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *GetCapacityRequest) SetVolumeCapabilities(v []*VolumeCapability) {
+	x.VolumeCapabilities = v
+}
 
+func (x *GetCapacityRequest) SetParameters(v map[string]string) {
+	x.Parameters = v
+}
+
+func (x *GetCapacityRequest) SetAccessibleTopology(v *Topology) {
+	x.AccessibleTopology = v
+}
+
+func (x *GetCapacityRequest) HasAccessibleTopology() bool {
+	if x == nil {
+		return false
+	}
+	return x.AccessibleTopology != nil
+}
+
+func (x *GetCapacityRequest) ClearAccessibleTopology() {
+	x.AccessibleTopology = nil
+}
+
+type GetCapacityRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// If specified, the Plugin SHALL report the capacity of the storage
+	// that can be used to provision volumes that satisfy ALL of the
+	// specified `volume_capabilities`. These are the same
+	// `volume_capabilities` the CO will use in `CreateVolumeRequest`.
+	// This field is OPTIONAL.
+	VolumeCapabilities []*VolumeCapability
+	// If specified, the Plugin SHALL report the capacity of the storage
+	// that can be used to provision volumes with the given Plugin
+	// specific `parameters`. These are the same `parameters` the CO will
+	// use in `CreateVolumeRequest`. This field is OPTIONAL.
+	Parameters map[string]string
+	// If specified, the Plugin SHALL report the capacity of the storage
+	// that can be used to provision volumes that in the specified
+	// `accessible_topology`. This is the same as the
+	// `accessible_topology` the CO returns in a `CreateVolumeResponse`.
+	// This field is OPTIONAL. This field SHALL NOT be set unless the
+	// plugin advertises the VOLUME_ACCESSIBILITY_CONSTRAINTS capability.
+	AccessibleTopology *Topology
+}
+
+func (b0 GetCapacityRequest_builder) Build() *GetCapacityRequest {
+	m0 := &GetCapacityRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.VolumeCapabilities = b.VolumeCapabilities
+	x.Parameters = b.Parameters
+	x.AccessibleTopology = b.AccessibleTopology
+	return m0
+}
+
+type GetCapacityResponse struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The available capacity, in bytes, of the storage that can be used
 	// to provision volumes. If `volume_capabilities` or `parameters` is
 	// specified in the request, the Plugin SHALL take those into
@@ -2923,15 +4227,15 @@ type GetCapacityResponse struct {
 	// otherwise. COs MAY use it to make decision about
 	// where to create volumes.
 	MinimumVolumeSize *wrapperspb.Int64Value `protobuf:"bytes,3,opt,name=minimum_volume_size,json=minimumVolumeSize,proto3" json:"minimum_volume_size,omitempty"`
+	unknownFields     protoimpl.UnknownFields
+	sizeCache         protoimpl.SizeCache
 }
 
 func (x *GetCapacityResponse) Reset() {
 	*x = GetCapacityResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[30]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[30]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *GetCapacityResponse) String() string {
@@ -2942,7 +4246,7 @@ func (*GetCapacityResponse) ProtoMessage() {}
 
 func (x *GetCapacityResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[30]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2952,11 +4256,6 @@ func (x *GetCapacityResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GetCapacityResponse.ProtoReflect.Descriptor instead.
-func (*GetCapacityResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{30}
-}
-
 func (x *GetCapacityResponse) GetAvailableCapacity() int64 {
 	if x != nil {
 		return x.AvailableCapacity
@@ -2971,26 +4270,112 @@ func (x *GetCapacityResponse) GetMaximumVolumeSize() *wrapperspb.Int64Value {
 	return nil
 }
 
-func (x *GetCapacityResponse) GetMinimumVolumeSize() *wrapperspb.Int64Value {
-	if x != nil {
-		return x.MinimumVolumeSize
-	}
-	return nil
+func (x *GetCapacityResponse) GetMinimumVolumeSize() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.MinimumVolumeSize
+	}
+	return nil
+}
+
+func (x *GetCapacityResponse) SetAvailableCapacity(v int64) {
+	x.AvailableCapacity = v
+}
+
+func (x *GetCapacityResponse) SetMaximumVolumeSize(v *wrapperspb.Int64Value) {
+	x.MaximumVolumeSize = v
+}
+
+func (x *GetCapacityResponse) SetMinimumVolumeSize(v *wrapperspb.Int64Value) {
+	x.MinimumVolumeSize = v
+}
+
+func (x *GetCapacityResponse) HasMaximumVolumeSize() bool {
+	if x == nil {
+		return false
+	}
+	return x.MaximumVolumeSize != nil
+}
+
+func (x *GetCapacityResponse) HasMinimumVolumeSize() bool {
+	if x == nil {
+		return false
+	}
+	return x.MinimumVolumeSize != nil
+}
+
+func (x *GetCapacityResponse) ClearMaximumVolumeSize() {
+	x.MaximumVolumeSize = nil
+}
+
+func (x *GetCapacityResponse) ClearMinimumVolumeSize() {
+	x.MinimumVolumeSize = nil
+}
+
+type GetCapacityResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The available capacity, in bytes, of the storage that can be used
+	// to provision volumes. If `volume_capabilities` or `parameters` is
+	// specified in the request, the Plugin SHALL take those into
+	// consideration when calculating the available capacity of the
+	// storage. This field is REQUIRED.
+	// The value of this field MUST NOT be negative.
+	AvailableCapacity int64
+	// The largest size that may be used in a
+	// CreateVolumeRequest.capacity_range.required_bytes field
+	// to create a volume with the same parameters as those in
+	// GetCapacityRequest.
+	//
+	// If `volume_capabilities` or `parameters` is
+	// specified in the request, the Plugin SHALL take those into
+	// consideration when calculating the minimum volume size of the
+	// storage.
+	//
+	// This field is OPTIONAL. MUST NOT be negative.
+	// The Plugin SHOULD provide a value for this field if it has
+	// a maximum size for individual volumes and leave it unset
+	// otherwise. COs MAY use it to make decision about
+	// where to create volumes.
+	MaximumVolumeSize *wrapperspb.Int64Value
+	// The smallest size that may be used in a
+	// CreateVolumeRequest.capacity_range.limit_bytes field
+	// to create a volume with the same parameters as those in
+	// GetCapacityRequest.
+	//
+	// If `volume_capabilities` or `parameters` is
+	// specified in the request, the Plugin SHALL take those into
+	// consideration when calculating the maximum volume size of the
+	// storage.
+	//
+	// This field is OPTIONAL. MUST NOT be negative.
+	// The Plugin SHOULD provide a value for this field if it has
+	// a minimum size for individual volumes and leave it unset
+	// otherwise. COs MAY use it to make decision about
+	// where to create volumes.
+	MinimumVolumeSize *wrapperspb.Int64Value
+}
+
+func (b0 GetCapacityResponse_builder) Build() *GetCapacityResponse {
+	m0 := &GetCapacityResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.AvailableCapacity = b.AvailableCapacity
+	x.MaximumVolumeSize = b.MaximumVolumeSize
+	x.MinimumVolumeSize = b.MinimumVolumeSize
+	return m0
 }
 
 type ControllerGetCapabilitiesRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"hybrid.v1"`
 	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *ControllerGetCapabilitiesRequest) Reset() {
 	*x = ControllerGetCapabilitiesRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[31]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[31]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ControllerGetCapabilitiesRequest) String() string {
@@ -3001,7 +4386,7 @@ func (*ControllerGetCapabilitiesRequest) ProtoMessage() {}
 
 func (x *ControllerGetCapabilitiesRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[31]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -3011,28 +4396,32 @@ func (x *ControllerGetCapabilitiesRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ControllerGetCapabilitiesRequest.ProtoReflect.Descriptor instead.
-func (*ControllerGetCapabilitiesRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{31}
+type ControllerGetCapabilitiesRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
 }
 
-type ControllerGetCapabilitiesResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (b0 ControllerGetCapabilitiesRequest_builder) Build() *ControllerGetCapabilitiesRequest {
+	m0 := &ControllerGetCapabilitiesRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
 
+type ControllerGetCapabilitiesResponse struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// All the capabilities that the controller service supports. This
 	// field is OPTIONAL.
-	Capabilities []*ControllerServiceCapability `protobuf:"bytes,1,rep,name=capabilities,proto3" json:"capabilities,omitempty"`
+	Capabilities  []*ControllerServiceCapability `protobuf:"bytes,1,rep,name=capabilities,proto3" json:"capabilities,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *ControllerGetCapabilitiesResponse) Reset() {
 	*x = ControllerGetCapabilitiesResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[32]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[32]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ControllerGetCapabilitiesResponse) String() string {
@@ -3043,7 +4432,7 @@ func (*ControllerGetCapabilitiesResponse) ProtoMessage() {}
 
 func (x *ControllerGetCapabilitiesResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[32]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -3053,11 +4442,6 @@ func (x *ControllerGetCapabilitiesResponse) ProtoReflect() protoreflect.Message
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ControllerGetCapabilitiesResponse.ProtoReflect.Descriptor instead.
-func (*ControllerGetCapabilitiesResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{32}
-}
-
 func (x *ControllerGetCapabilitiesResponse) GetCapabilities() []*ControllerServiceCapability {
 	if x != nil {
 		return x.Capabilities
@@ -3065,25 +4449,42 @@ func (x *ControllerGetCapabilitiesResponse) GetCapabilities() []*ControllerServi
 	return nil
 }
 
+func (x *ControllerGetCapabilitiesResponse) SetCapabilities(v []*ControllerServiceCapability) {
+	x.Capabilities = v
+}
+
+type ControllerGetCapabilitiesResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// All the capabilities that the controller service supports. This
+	// field is OPTIONAL.
+	Capabilities []*ControllerServiceCapability
+}
+
+func (b0 ControllerGetCapabilitiesResponse_builder) Build() *ControllerGetCapabilitiesResponse {
+	m0 := &ControllerGetCapabilitiesResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Capabilities = b.Capabilities
+	return m0
+}
+
 // Specifies a capability of the controller service.
 type ControllerServiceCapability struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	// Types that are assignable to Type:
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
+	// Types that are valid to be assigned to Type:
 	//
 	//	*ControllerServiceCapability_Rpc
-	Type isControllerServiceCapability_Type `protobuf_oneof:"type"`
+	Type          isControllerServiceCapability_Type `protobuf_oneof:"type"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *ControllerServiceCapability) Reset() {
 	*x = ControllerServiceCapability{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[33]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[33]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ControllerServiceCapability) String() string {
@@ -3094,7 +4495,7 @@ func (*ControllerServiceCapability) ProtoMessage() {}
 
 func (x *ControllerServiceCapability) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[33]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -3104,25 +4505,99 @@ func (x *ControllerServiceCapability) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ControllerServiceCapability.ProtoReflect.Descriptor instead.
-func (*ControllerServiceCapability) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{33}
-}
-
-func (m *ControllerServiceCapability) GetType() isControllerServiceCapability_Type {
-	if m != nil {
-		return m.Type
+func (x *ControllerServiceCapability) GetType() isControllerServiceCapability_Type {
+	if x != nil {
+		return x.Type
 	}
 	return nil
 }
 
 func (x *ControllerServiceCapability) GetRpc() *ControllerServiceCapability_RPC {
-	if x, ok := x.GetType().(*ControllerServiceCapability_Rpc); ok {
-		return x.Rpc
+	if x != nil {
+		if x, ok := x.Type.(*ControllerServiceCapability_Rpc); ok {
+			return x.Rpc
+		}
 	}
 	return nil
 }
 
+func (x *ControllerServiceCapability) SetRpc(v *ControllerServiceCapability_RPC) {
+	if v == nil {
+		x.Type = nil
+		return
+	}
+	x.Type = &ControllerServiceCapability_Rpc{v}
+}
+
+func (x *ControllerServiceCapability) HasType() bool {
+	if x == nil {
+		return false
+	}
+	return x.Type != nil
+}
+
+func (x *ControllerServiceCapability) HasRpc() bool {
+	if x == nil {
+		return false
+	}
+	_, ok := x.Type.(*ControllerServiceCapability_Rpc)
+	return ok
+}
+
+func (x *ControllerServiceCapability) ClearType() {
+	x.Type = nil
+}
+
+func (x *ControllerServiceCapability) ClearRpc() {
+	if _, ok := x.Type.(*ControllerServiceCapability_Rpc); ok {
+		x.Type = nil
+	}
+}
+
+const ControllerServiceCapability_Type_not_set_case case_ControllerServiceCapability_Type = 0
+const ControllerServiceCapability_Rpc_case case_ControllerServiceCapability_Type = 1
+
+func (x *ControllerServiceCapability) WhichType() case_ControllerServiceCapability_Type {
+	if x == nil {
+		return ControllerServiceCapability_Type_not_set_case
+	}
+	switch x.Type.(type) {
+	case *ControllerServiceCapability_Rpc:
+		return ControllerServiceCapability_Rpc_case
+	default:
+		return ControllerServiceCapability_Type_not_set_case
+	}
+}
+
+type ControllerServiceCapability_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Fields of oneof Type:
+	// RPC that the controller supports.
+	Rpc *ControllerServiceCapability_RPC
+	// -- end of Type
+}
+
+func (b0 ControllerServiceCapability_builder) Build() *ControllerServiceCapability {
+	m0 := &ControllerServiceCapability{}
+	b, x := &b0, m0
+	_, _ = b, x
+	if b.Rpc != nil {
+		x.Type = &ControllerServiceCapability_Rpc{b.Rpc}
+	}
+	return m0
+}
+
+type case_ControllerServiceCapability_Type protoreflect.FieldNumber
+
+func (x case_ControllerServiceCapability_Type) String() string {
+	md := file_csi_proto_msgTypes[33].Descriptor()
+	if x == 0 {
+		return "not set"
+	}
+	return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))
+}
+
 type isControllerServiceCapability_Type interface {
 	isControllerServiceCapability_Type()
 }
@@ -3135,10 +4610,7 @@ type ControllerServiceCapability_Rpc struct {
 func (*ControllerServiceCapability_Rpc) isControllerServiceCapability_Type() {}
 
 type CreateSnapshotRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The ID of the source volume to be snapshotted.
 	// This field is REQUIRED.
 	SourceVolumeId string `protobuf:"bytes,1,opt,name=source_volume_id,json=sourceVolumeId,proto3" json:"source_volume_id,omitempty"`
@@ -3152,7 +4624,7 @@ type CreateSnapshotRequest struct {
 	// Secrets required by plugin to complete snapshot creation request.
 	// This field is OPTIONAL. Refer to the `Secrets Requirements`
 	// section on how to use this field.
-	Secrets map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Secrets map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 	// Plugin specific parameters passed in as opaque key-value pairs.
 	// This field is OPTIONAL. The Plugin is responsible for parsing and
 	// validating these parameters. COs will treat these as opaque.
@@ -3163,16 +4635,16 @@ type CreateSnapshotRequest struct {
 	//   - Specify if the snapshot should be replicated to some place.
 	//   - Specify primary or secondary for replication systems that
 	//     support snapshotting only on primary.
-	Parameters map[string]string `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Parameters    map[string]string `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *CreateSnapshotRequest) Reset() {
 	*x = CreateSnapshotRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[34]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[34]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *CreateSnapshotRequest) String() string {
@@ -3183,7 +4655,7 @@ func (*CreateSnapshotRequest) ProtoMessage() {}
 
 func (x *CreateSnapshotRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[34]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -3193,11 +4665,6 @@ func (x *CreateSnapshotRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use CreateSnapshotRequest.ProtoReflect.Descriptor instead.
-func (*CreateSnapshotRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{34}
-}
-
 func (x *CreateSnapshotRequest) GetSourceVolumeId() string {
 	if x != nil {
 		return x.SourceVolumeId
@@ -3226,24 +4693,78 @@ func (x *CreateSnapshotRequest) GetParameters() map[string]string {
 	return nil
 }
 
-type CreateSnapshotResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *CreateSnapshotRequest) SetSourceVolumeId(v string) {
+	x.SourceVolumeId = v
+}
+
+func (x *CreateSnapshotRequest) SetName(v string) {
+	x.Name = v
+}
+
+func (x *CreateSnapshotRequest) SetSecrets(v map[string]string) {
+	x.Secrets = v
+}
+
+func (x *CreateSnapshotRequest) SetParameters(v map[string]string) {
+	x.Parameters = v
+}
+
+type CreateSnapshotRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the source volume to be snapshotted.
+	// This field is REQUIRED.
+	SourceVolumeId string
+	// The suggested name for the snapshot. This field is REQUIRED for
+	// idempotency.
+	// Any Unicode string that conforms to the length limit is allowed
+	// except those containing the following banned characters:
+	// U+0000-U+0008, U+000B, U+000C, U+000E-U+001F, U+007F-U+009F.
+	// (These are control characters other than commonly used whitespace.)
+	Name string
+	// Secrets required by plugin to complete snapshot creation request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+	// Plugin specific parameters passed in as opaque key-value pairs.
+	// This field is OPTIONAL. The Plugin is responsible for parsing and
+	// validating these parameters. COs will treat these as opaque.
+	// Use cases for opaque parameters:
+	//   - Specify a policy to automatically clean up the snapshot.
+	//   - Specify an expiration date for the snapshot.
+	//   - Specify whether the snapshot is readonly or read/write.
+	//   - Specify if the snapshot should be replicated to some place.
+	//   - Specify primary or secondary for replication systems that
+	//     support snapshotting only on primary.
+	Parameters map[string]string
+}
+
+func (b0 CreateSnapshotRequest_builder) Build() *CreateSnapshotRequest {
+	m0 := &CreateSnapshotRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.SourceVolumeId = b.SourceVolumeId
+	x.Name = b.Name
+	x.Secrets = b.Secrets
+	x.Parameters = b.Parameters
+	return m0
+}
 
+type CreateSnapshotResponse struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// Contains all attributes of the newly created snapshot that are
 	// relevant to the CO along with information required by the Plugin
 	// to uniquely identify the snapshot. This field is REQUIRED.
-	Snapshot *Snapshot `protobuf:"bytes,1,opt,name=snapshot,proto3" json:"snapshot,omitempty"`
+	Snapshot      *Snapshot `protobuf:"bytes,1,opt,name=snapshot,proto3" json:"snapshot,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *CreateSnapshotResponse) Reset() {
 	*x = CreateSnapshotResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[35]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[35]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *CreateSnapshotResponse) String() string {
@@ -3254,7 +4775,7 @@ func (*CreateSnapshotResponse) ProtoMessage() {}
 
 func (x *CreateSnapshotResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[35]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -3264,11 +4785,6 @@ func (x *CreateSnapshotResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use CreateSnapshotResponse.ProtoReflect.Descriptor instead.
-func (*CreateSnapshotResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{35}
-}
-
 func (x *CreateSnapshotResponse) GetSnapshot() *Snapshot {
 	if x != nil {
 		return x.Snapshot
@@ -3276,12 +4792,41 @@ func (x *CreateSnapshotResponse) GetSnapshot() *Snapshot {
 	return nil
 }
 
+func (x *CreateSnapshotResponse) SetSnapshot(v *Snapshot) {
+	x.Snapshot = v
+}
+
+func (x *CreateSnapshotResponse) HasSnapshot() bool {
+	if x == nil {
+		return false
+	}
+	return x.Snapshot != nil
+}
+
+func (x *CreateSnapshotResponse) ClearSnapshot() {
+	x.Snapshot = nil
+}
+
+type CreateSnapshotResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Contains all attributes of the newly created snapshot that are
+	// relevant to the CO along with information required by the Plugin
+	// to uniquely identify the snapshot. This field is REQUIRED.
+	Snapshot *Snapshot
+}
+
+func (b0 CreateSnapshotResponse_builder) Build() *CreateSnapshotResponse {
+	m0 := &CreateSnapshotResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Snapshot = b.Snapshot
+	return m0
+}
+
 // Information about a specific snapshot.
 type Snapshot struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// This is the complete size of the snapshot in bytes. The purpose of
 	// this field is to give CO guidance on how much space is needed to
 	// create a volume from this snapshot. The size of the volume MUST NOT
@@ -3325,15 +4870,15 @@ type Snapshot struct {
 	// If this message is inside a VolumeGroupSnapshot message, the value
 	// MUST be the same as the group_snapshot_id in that message.
 	GroupSnapshotId string `protobuf:"bytes,6,opt,name=group_snapshot_id,json=groupSnapshotId,proto3" json:"group_snapshot_id,omitempty"`
+	unknownFields   protoimpl.UnknownFields
+	sizeCache       protoimpl.SizeCache
 }
 
 func (x *Snapshot) Reset() {
 	*x = Snapshot{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[36]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[36]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *Snapshot) String() string {
@@ -3344,7 +4889,7 @@ func (*Snapshot) ProtoMessage() {}
 
 func (x *Snapshot) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[36]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -3354,11 +4899,6 @@ func (x *Snapshot) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use Snapshot.ProtoReflect.Descriptor instead.
-func (*Snapshot) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{36}
-}
-
 func (x *Snapshot) GetSizeBytes() int64 {
 	if x != nil {
 		return x.SizeBytes
@@ -3394,34 +4934,127 @@ func (x *Snapshot) GetReadyToUse() bool {
 	return false
 }
 
-func (x *Snapshot) GetGroupSnapshotId() string {
-	if x != nil {
-		return x.GroupSnapshotId
-	}
-	return ""
+func (x *Snapshot) GetGroupSnapshotId() string {
+	if x != nil {
+		return x.GroupSnapshotId
+	}
+	return ""
+}
+
+func (x *Snapshot) SetSizeBytes(v int64) {
+	x.SizeBytes = v
+}
+
+func (x *Snapshot) SetSnapshotId(v string) {
+	x.SnapshotId = v
+}
+
+func (x *Snapshot) SetSourceVolumeId(v string) {
+	x.SourceVolumeId = v
+}
+
+func (x *Snapshot) SetCreationTime(v *timestamppb.Timestamp) {
+	x.CreationTime = v
+}
+
+func (x *Snapshot) SetReadyToUse(v bool) {
+	x.ReadyToUse = v
+}
+
+func (x *Snapshot) SetGroupSnapshotId(v string) {
+	x.GroupSnapshotId = v
+}
+
+func (x *Snapshot) HasCreationTime() bool {
+	if x == nil {
+		return false
+	}
+	return x.CreationTime != nil
+}
+
+func (x *Snapshot) ClearCreationTime() {
+	x.CreationTime = nil
+}
+
+type Snapshot_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This is the complete size of the snapshot in bytes. The purpose of
+	// this field is to give CO guidance on how much space is needed to
+	// create a volume from this snapshot. The size of the volume MUST NOT
+	// be less than the size of the source snapshot. This field is
+	// OPTIONAL. If this field is not set, it indicates that this size is
+	// unknown. The value of this field MUST NOT be negative and a size of
+	// zero means it is unspecified.
+	SizeBytes int64
+	// The identifier for this snapshot, generated by the plugin.
+	// This field is REQUIRED.
+	// This field MUST contain enough information to uniquely identify
+	// this specific snapshot vs all other snapshots supported by this
+	// plugin.
+	// This field SHALL be used by the CO in subsequent calls to refer to
+	// this snapshot.
+	// The SP is NOT responsible for global uniqueness of snapshot_id
+	// across multiple SPs.
+	SnapshotId string
+	// Identity information for the source volume. Note that creating a
+	// snapshot from a snapshot is not supported here so the source has to
+	// be a volume. This field is REQUIRED.
+	SourceVolumeId string
+	// Timestamp when the point-in-time snapshot is taken on the storage
+	// system. This field is REQUIRED.
+	CreationTime *timestamppb.Timestamp
+	// Indicates if a snapshot is ready to use as a
+	// `volume_content_source` in a `CreateVolumeRequest`. The default
+	// value is false. This field is REQUIRED.
+	ReadyToUse bool
+	// The ID of the volume group snapshot that this snapshot is part of.
+	// It uniquely identifies the group snapshot on the storage system.
+	// This field is OPTIONAL.
+	// If this snapshot is a member of a volume group snapshot, and it
+	// MUST NOT be deleted as a stand alone snapshot, then the SP
+	// MUST provide the ID of the volume group snapshot in this field.
+	// If provided, CO MUST use this field in subsequent volume group
+	// snapshot operations to indicate that this snapshot is part of the
+	// specified group snapshot.
+	// If not provided, CO SHALL treat the snapshot as independent,
+	// and SP SHALL allow it to be deleted separately.
+	// If this message is inside a VolumeGroupSnapshot message, the value
+	// MUST be the same as the group_snapshot_id in that message.
+	GroupSnapshotId string
+}
+
+func (b0 Snapshot_builder) Build() *Snapshot {
+	m0 := &Snapshot{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.SizeBytes = b.SizeBytes
+	x.SnapshotId = b.SnapshotId
+	x.SourceVolumeId = b.SourceVolumeId
+	x.CreationTime = b.CreationTime
+	x.ReadyToUse = b.ReadyToUse
+	x.GroupSnapshotId = b.GroupSnapshotId
+	return m0
 }
 
 type DeleteSnapshotRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The ID of the snapshot to be deleted.
 	// This field is REQUIRED.
 	SnapshotId string `protobuf:"bytes,1,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"`
 	// Secrets required by plugin to complete snapshot deletion request.
 	// This field is OPTIONAL. Refer to the `Secrets Requirements`
 	// section on how to use this field.
-	Secrets map[string]string `protobuf:"bytes,2,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Secrets       map[string]string `protobuf:"bytes,2,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *DeleteSnapshotRequest) Reset() {
 	*x = DeleteSnapshotRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[37]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[37]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *DeleteSnapshotRequest) String() string {
@@ -3432,7 +5065,7 @@ func (*DeleteSnapshotRequest) ProtoMessage() {}
 
 func (x *DeleteSnapshotRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[37]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -3442,11 +5075,6 @@ func (x *DeleteSnapshotRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use DeleteSnapshotRequest.ProtoReflect.Descriptor instead.
-func (*DeleteSnapshotRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{37}
-}
-
 func (x *DeleteSnapshotRequest) GetSnapshotId() string {
 	if x != nil {
 		return x.SnapshotId
@@ -3461,19 +5089,46 @@ func (x *DeleteSnapshotRequest) GetSecrets() map[string]string {
 	return nil
 }
 
+func (x *DeleteSnapshotRequest) SetSnapshotId(v string) {
+	x.SnapshotId = v
+}
+
+func (x *DeleteSnapshotRequest) SetSecrets(v map[string]string) {
+	x.Secrets = v
+}
+
+type DeleteSnapshotRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the snapshot to be deleted.
+	// This field is REQUIRED.
+	SnapshotId string
+	// Secrets required by plugin to complete snapshot deletion request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+}
+
+func (b0 DeleteSnapshotRequest_builder) Build() *DeleteSnapshotRequest {
+	m0 := &DeleteSnapshotRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.SnapshotId = b.SnapshotId
+	x.Secrets = b.Secrets
+	return m0
+}
+
 type DeleteSnapshotResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"hybrid.v1"`
 	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *DeleteSnapshotResponse) Reset() {
 	*x = DeleteSnapshotResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[38]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[38]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *DeleteSnapshotResponse) String() string {
@@ -3484,7 +5139,7 @@ func (*DeleteSnapshotResponse) ProtoMessage() {}
 
 func (x *DeleteSnapshotResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[38]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -3494,18 +5149,22 @@ func (x *DeleteSnapshotResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use DeleteSnapshotResponse.ProtoReflect.Descriptor instead.
-func (*DeleteSnapshotResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{38}
+type DeleteSnapshotResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 DeleteSnapshotResponse_builder) Build() *DeleteSnapshotResponse {
+	m0 := &DeleteSnapshotResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
 }
 
 // List all snapshots on the storage system regardless of how they were
 // created.
 type ListSnapshotsRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// If specified (non-zero value), the Plugin MUST NOT return more
 	// entries than this number in the response. If the actual number of
 	// entries is more than this number, the Plugin MUST set `next_token`
@@ -3532,16 +5191,16 @@ type ListSnapshotsRequest struct {
 	// Secrets required by plugin to complete ListSnapshot request.
 	// This field is OPTIONAL. Refer to the `Secrets Requirements`
 	// section on how to use this field.
-	Secrets map[string]string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Secrets       map[string]string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *ListSnapshotsRequest) Reset() {
 	*x = ListSnapshotsRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[39]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[39]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ListSnapshotsRequest) String() string {
@@ -3552,7 +5211,7 @@ func (*ListSnapshotsRequest) ProtoMessage() {}
 
 func (x *ListSnapshotsRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[39]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -3562,11 +5221,6 @@ func (x *ListSnapshotsRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ListSnapshotsRequest.ProtoReflect.Descriptor instead.
-func (*ListSnapshotsRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{39}
-}
-
 func (x *ListSnapshotsRequest) GetMaxEntries() int32 {
 	if x != nil {
 		return x.MaxEntries
@@ -3602,11 +5256,72 @@ func (x *ListSnapshotsRequest) GetSecrets() map[string]string {
 	return nil
 }
 
-type ListSnapshotsResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *ListSnapshotsRequest) SetMaxEntries(v int32) {
+	x.MaxEntries = v
+}
+
+func (x *ListSnapshotsRequest) SetStartingToken(v string) {
+	x.StartingToken = v
+}
+
+func (x *ListSnapshotsRequest) SetSourceVolumeId(v string) {
+	x.SourceVolumeId = v
+}
+
+func (x *ListSnapshotsRequest) SetSnapshotId(v string) {
+	x.SnapshotId = v
+}
+
+func (x *ListSnapshotsRequest) SetSecrets(v map[string]string) {
+	x.Secrets = v
+}
 
+type ListSnapshotsRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// If specified (non-zero value), the Plugin MUST NOT return more
+	// entries than this number in the response. If the actual number of
+	// entries is more than this number, the Plugin MUST set `next_token`
+	// in the response which can be used to get the next page of entries
+	// in the subsequent `ListSnapshots` call. This field is OPTIONAL. If
+	// not specified (zero value), it means there is no restriction on the
+	// number of entries that can be returned.
+	// The value of this field MUST NOT be negative.
+	MaxEntries int32
+	// A token to specify where to start paginating. Set this field to
+	// `next_token` returned by a previous `ListSnapshots` call to get the
+	// next page of entries. This field is OPTIONAL.
+	// An empty string is equal to an unspecified field value.
+	StartingToken string
+	// Identity information for the source volume. This field is OPTIONAL.
+	// It can be used to list snapshots by volume.
+	SourceVolumeId string
+	// Identity information for a specific snapshot. This field is
+	// OPTIONAL. It can be used to list only a specific snapshot.
+	// ListSnapshots will return with current snapshot information
+	// and will not block if the snapshot is being processed after
+	// it is cut.
+	SnapshotId string
+	// Secrets required by plugin to complete ListSnapshot request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+}
+
+func (b0 ListSnapshotsRequest_builder) Build() *ListSnapshotsRequest {
+	m0 := &ListSnapshotsRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.MaxEntries = b.MaxEntries
+	x.StartingToken = b.StartingToken
+	x.SourceVolumeId = b.SourceVolumeId
+	x.SnapshotId = b.SnapshotId
+	x.Secrets = b.Secrets
+	return m0
+}
+
+type ListSnapshotsResponse struct {
+	state   protoimpl.MessageState         `protogen:"hybrid.v1"`
 	Entries []*ListSnapshotsResponse_Entry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"`
 	// This token allows you to get the next page of entries for
 	// `ListSnapshots` request. If the number of entries is larger than
@@ -3614,16 +5329,16 @@ type ListSnapshotsResponse struct {
 	// `starting_token` field in the next `ListSnapshots` request. This
 	// field is OPTIONAL.
 	// An empty string is equal to an unspecified field value.
-	NextToken string `protobuf:"bytes,2,opt,name=next_token,json=nextToken,proto3" json:"next_token,omitempty"`
+	NextToken     string `protobuf:"bytes,2,opt,name=next_token,json=nextToken,proto3" json:"next_token,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *ListSnapshotsResponse) Reset() {
 	*x = ListSnapshotsResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[40]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[40]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ListSnapshotsResponse) String() string {
@@ -3634,7 +5349,7 @@ func (*ListSnapshotsResponse) ProtoMessage() {}
 
 func (x *ListSnapshotsResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[40]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -3644,11 +5359,6 @@ func (x *ListSnapshotsResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ListSnapshotsResponse.ProtoReflect.Descriptor instead.
-func (*ListSnapshotsResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{40}
-}
-
 func (x *ListSnapshotsResponse) GetEntries() []*ListSnapshotsResponse_Entry {
 	if x != nil {
 		return x.Entries
@@ -3663,11 +5373,38 @@ func (x *ListSnapshotsResponse) GetNextToken() string {
 	return ""
 }
 
-type ControllerExpandVolumeRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *ListSnapshotsResponse) SetEntries(v []*ListSnapshotsResponse_Entry) {
+	x.Entries = v
+}
+
+func (x *ListSnapshotsResponse) SetNextToken(v string) {
+	x.NextToken = v
+}
+
+type ListSnapshotsResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	Entries []*ListSnapshotsResponse_Entry
+	// This token allows you to get the next page of entries for
+	// `ListSnapshots` request. If the number of entries is larger than
+	// `max_entries`, use the `next_token` as a value for the
+	// `starting_token` field in the next `ListSnapshots` request. This
+	// field is OPTIONAL.
+	// An empty string is equal to an unspecified field value.
+	NextToken string
+}
+
+func (b0 ListSnapshotsResponse_builder) Build() *ListSnapshotsResponse {
+	m0 := &ListSnapshotsResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Entries = b.Entries
+	x.NextToken = b.NextToken
+	return m0
+}
 
+type ControllerExpandVolumeRequest struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The ID of the volume to expand. This field is REQUIRED.
 	VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
 	// This allows CO to specify the capacity requirements of the volume
@@ -3675,7 +5412,7 @@ type ControllerExpandVolumeRequest struct {
 	CapacityRange *CapacityRange `protobuf:"bytes,2,opt,name=capacity_range,json=capacityRange,proto3" json:"capacity_range,omitempty"`
 	// Secrets required by the plugin for expanding the volume.
 	// This field is OPTIONAL.
-	Secrets map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Secrets map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 	// Volume capability describing how the CO intends to use this volume.
 	// This allows SP to determine if volume is being used as a block
 	// device or mounted file system. For example - if volume is
@@ -3684,15 +5421,15 @@ type ControllerExpandVolumeRequest struct {
 	// to skip invocation of NodeExpandVolume on the node by the CO.
 	// This is an OPTIONAL field.
 	VolumeCapability *VolumeCapability `protobuf:"bytes,4,opt,name=volume_capability,json=volumeCapability,proto3" json:"volume_capability,omitempty"`
+	unknownFields    protoimpl.UnknownFields
+	sizeCache        protoimpl.SizeCache
 }
 
 func (x *ControllerExpandVolumeRequest) Reset() {
 	*x = ControllerExpandVolumeRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[41]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[41]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ControllerExpandVolumeRequest) String() string {
@@ -3703,7 +5440,7 @@ func (*ControllerExpandVolumeRequest) ProtoMessage() {}
 
 func (x *ControllerExpandVolumeRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[41]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -3713,11 +5450,6 @@ func (x *ControllerExpandVolumeRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ControllerExpandVolumeRequest.ProtoReflect.Descriptor instead.
-func (*ControllerExpandVolumeRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{41}
-}
-
 func (x *ControllerExpandVolumeRequest) GetVolumeId() string {
 	if x != nil {
 		return x.VolumeId
@@ -3746,26 +5478,93 @@ func (x *ControllerExpandVolumeRequest) GetVolumeCapability() *VolumeCapability
 	return nil
 }
 
-type ControllerExpandVolumeResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *ControllerExpandVolumeRequest) SetVolumeId(v string) {
+	x.VolumeId = v
+}
 
+func (x *ControllerExpandVolumeRequest) SetCapacityRange(v *CapacityRange) {
+	x.CapacityRange = v
+}
+
+func (x *ControllerExpandVolumeRequest) SetSecrets(v map[string]string) {
+	x.Secrets = v
+}
+
+func (x *ControllerExpandVolumeRequest) SetVolumeCapability(v *VolumeCapability) {
+	x.VolumeCapability = v
+}
+
+func (x *ControllerExpandVolumeRequest) HasCapacityRange() bool {
+	if x == nil {
+		return false
+	}
+	return x.CapacityRange != nil
+}
+
+func (x *ControllerExpandVolumeRequest) HasVolumeCapability() bool {
+	if x == nil {
+		return false
+	}
+	return x.VolumeCapability != nil
+}
+
+func (x *ControllerExpandVolumeRequest) ClearCapacityRange() {
+	x.CapacityRange = nil
+}
+
+func (x *ControllerExpandVolumeRequest) ClearVolumeCapability() {
+	x.VolumeCapability = nil
+}
+
+type ControllerExpandVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume to expand. This field is REQUIRED.
+	VolumeId string
+	// This allows CO to specify the capacity requirements of the volume
+	// after expansion. This field is REQUIRED.
+	CapacityRange *CapacityRange
+	// Secrets required by the plugin for expanding the volume.
+	// This field is OPTIONAL.
+	Secrets map[string]string
+	// Volume capability describing how the CO intends to use this volume.
+	// This allows SP to determine if volume is being used as a block
+	// device or mounted file system. For example - if volume is
+	// being used as a block device - the SP MAY set
+	// node_expansion_required to false in ControllerExpandVolumeResponse
+	// to skip invocation of NodeExpandVolume on the node by the CO.
+	// This is an OPTIONAL field.
+	VolumeCapability *VolumeCapability
+}
+
+func (b0 ControllerExpandVolumeRequest_builder) Build() *ControllerExpandVolumeRequest {
+	m0 := &ControllerExpandVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.VolumeId = b.VolumeId
+	x.CapacityRange = b.CapacityRange
+	x.Secrets = b.Secrets
+	x.VolumeCapability = b.VolumeCapability
+	return m0
+}
+
+type ControllerExpandVolumeResponse struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// Capacity of volume after expansion. This field is REQUIRED.
 	CapacityBytes int64 `protobuf:"varint,1,opt,name=capacity_bytes,json=capacityBytes,proto3" json:"capacity_bytes,omitempty"`
 	// Whether node expansion is required for the volume. When true
 	// the CO MUST make NodeExpandVolume RPC call on the node. This field
 	// is REQUIRED.
 	NodeExpansionRequired bool `protobuf:"varint,2,opt,name=node_expansion_required,json=nodeExpansionRequired,proto3" json:"node_expansion_required,omitempty"`
+	unknownFields         protoimpl.UnknownFields
+	sizeCache             protoimpl.SizeCache
 }
 
 func (x *ControllerExpandVolumeResponse) Reset() {
 	*x = ControllerExpandVolumeResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[42]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[42]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ControllerExpandVolumeResponse) String() string {
@@ -3776,7 +5575,7 @@ func (*ControllerExpandVolumeResponse) ProtoMessage() {}
 
 func (x *ControllerExpandVolumeResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[42]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -3786,11 +5585,6 @@ func (x *ControllerExpandVolumeResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ControllerExpandVolumeResponse.ProtoReflect.Descriptor instead.
-func (*ControllerExpandVolumeResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{42}
-}
-
 func (x *ControllerExpandVolumeResponse) GetCapacityBytes() int64 {
 	if x != nil {
 		return x.CapacityBytes
@@ -3805,11 +5599,36 @@ func (x *ControllerExpandVolumeResponse) GetNodeExpansionRequired() bool {
 	return false
 }
 
-type NodeStageVolumeRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *ControllerExpandVolumeResponse) SetCapacityBytes(v int64) {
+	x.CapacityBytes = v
+}
+
+func (x *ControllerExpandVolumeResponse) SetNodeExpansionRequired(v bool) {
+	x.NodeExpansionRequired = v
+}
+
+type ControllerExpandVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Capacity of volume after expansion. This field is REQUIRED.
+	CapacityBytes int64
+	// Whether node expansion is required for the volume. When true
+	// the CO MUST make NodeExpandVolume RPC call on the node. This field
+	// is REQUIRED.
+	NodeExpansionRequired bool
+}
+
+func (b0 ControllerExpandVolumeResponse_builder) Build() *ControllerExpandVolumeResponse {
+	m0 := &ControllerExpandVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.CapacityBytes = b.CapacityBytes
+	x.NodeExpansionRequired = b.NodeExpansionRequired
+	return m0
+}
 
+type NodeStageVolumeRequest struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The ID of the volume to publish. This field is REQUIRED.
 	VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
 	// The CO SHALL set this field to the value returned by
@@ -3817,7 +5636,7 @@ type NodeStageVolumeRequest struct {
 	// has `PUBLISH_UNPUBLISH_VOLUME` controller capability, and SHALL be
 	// left unset if the corresponding Controller Plugin does not have
 	// this capability. This is an OPTIONAL field.
-	PublishContext map[string]string `protobuf:"bytes,2,rep,name=publish_context,json=publishContext,proto3" json:"publish_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	PublishContext map[string]string `protobuf:"bytes,2,rep,name=publish_context,json=publishContext,proto3" json:"publish_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 	// The path to which the volume MAY be staged. It MUST be an
 	// absolute path in the root filesystem of the process serving this
 	// request, and MUST be a directory. The CO SHALL ensure that there
@@ -3840,21 +5659,21 @@ type NodeStageVolumeRequest struct {
 	// Secrets required by plugin to complete node stage volume request.
 	// This field is OPTIONAL. Refer to the `Secrets Requirements`
 	// section on how to use this field.
-	Secrets map[string]string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Secrets map[string]string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 	// Volume context as returned by SP in
 	// CreateVolumeResponse.Volume.volume_context.
 	// This field is OPTIONAL and MUST match the volume_context of the
 	// volume identified by `volume_id`.
-	VolumeContext map[string]string `protobuf:"bytes,6,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	VolumeContext map[string]string `protobuf:"bytes,6,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *NodeStageVolumeRequest) Reset() {
 	*x = NodeStageVolumeRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[43]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[43]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *NodeStageVolumeRequest) String() string {
@@ -3865,7 +5684,7 @@ func (*NodeStageVolumeRequest) ProtoMessage() {}
 
 func (x *NodeStageVolumeRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[43]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -3875,11 +5694,6 @@ func (x *NodeStageVolumeRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use NodeStageVolumeRequest.ProtoReflect.Descriptor instead.
-func (*NodeStageVolumeRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{43}
-}
-
 func (x *NodeStageVolumeRequest) GetVolumeId() string {
 	if x != nil {
 		return x.VolumeId
@@ -3922,19 +5736,106 @@ func (x *NodeStageVolumeRequest) GetVolumeContext() map[string]string {
 	return nil
 }
 
+func (x *NodeStageVolumeRequest) SetVolumeId(v string) {
+	x.VolumeId = v
+}
+
+func (x *NodeStageVolumeRequest) SetPublishContext(v map[string]string) {
+	x.PublishContext = v
+}
+
+func (x *NodeStageVolumeRequest) SetStagingTargetPath(v string) {
+	x.StagingTargetPath = v
+}
+
+func (x *NodeStageVolumeRequest) SetVolumeCapability(v *VolumeCapability) {
+	x.VolumeCapability = v
+}
+
+func (x *NodeStageVolumeRequest) SetSecrets(v map[string]string) {
+	x.Secrets = v
+}
+
+func (x *NodeStageVolumeRequest) SetVolumeContext(v map[string]string) {
+	x.VolumeContext = v
+}
+
+func (x *NodeStageVolumeRequest) HasVolumeCapability() bool {
+	if x == nil {
+		return false
+	}
+	return x.VolumeCapability != nil
+}
+
+func (x *NodeStageVolumeRequest) ClearVolumeCapability() {
+	x.VolumeCapability = nil
+}
+
+type NodeStageVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume to publish. This field is REQUIRED.
+	VolumeId string
+	// The CO SHALL set this field to the value returned by
+	// `ControllerPublishVolume` if the corresponding Controller Plugin
+	// has `PUBLISH_UNPUBLISH_VOLUME` controller capability, and SHALL be
+	// left unset if the corresponding Controller Plugin does not have
+	// this capability. This is an OPTIONAL field.
+	PublishContext map[string]string
+	// The path to which the volume MAY be staged. It MUST be an
+	// absolute path in the root filesystem of the process serving this
+	// request, and MUST be a directory. The CO SHALL ensure that there
+	// is only one `staging_target_path` per volume. The CO SHALL ensure
+	// that the path is directory and that the process serving the
+	// request has `read` and `write` permission to that directory. The
+	// CO SHALL be responsible for creating the directory if it does not
+	// exist.
+	// This is a REQUIRED field.
+	// This field overrides the general CSI size limit.
+	// SP SHOULD support the maximum path length allowed by the operating
+	// system/filesystem, but, at a minimum, SP MUST accept a max path
+	// length of at least 128 bytes.
+	StagingTargetPath string
+	// Volume capability describing how the CO intends to use this volume.
+	// SP MUST ensure the CO can use the staged volume as described.
+	// Otherwise SP MUST return the appropriate gRPC error code.
+	// This is a REQUIRED field.
+	VolumeCapability *VolumeCapability
+	// Secrets required by plugin to complete node stage volume request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+	// Volume context as returned by SP in
+	// CreateVolumeResponse.Volume.volume_context.
+	// This field is OPTIONAL and MUST match the volume_context of the
+	// volume identified by `volume_id`.
+	VolumeContext map[string]string
+}
+
+func (b0 NodeStageVolumeRequest_builder) Build() *NodeStageVolumeRequest {
+	m0 := &NodeStageVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.VolumeId = b.VolumeId
+	x.PublishContext = b.PublishContext
+	x.StagingTargetPath = b.StagingTargetPath
+	x.VolumeCapability = b.VolumeCapability
+	x.Secrets = b.Secrets
+	x.VolumeContext = b.VolumeContext
+	return m0
+}
+
 type NodeStageVolumeResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"hybrid.v1"`
 	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *NodeStageVolumeResponse) Reset() {
 	*x = NodeStageVolumeResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[44]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[44]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *NodeStageVolumeResponse) String() string {
@@ -3945,7 +5846,7 @@ func (*NodeStageVolumeResponse) ProtoMessage() {}
 
 func (x *NodeStageVolumeResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[44]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -3955,16 +5856,20 @@ func (x *NodeStageVolumeResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use NodeStageVolumeResponse.ProtoReflect.Descriptor instead.
-func (*NodeStageVolumeResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{44}
+type NodeStageVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
 }
 
-type NodeUnstageVolumeRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (b0 NodeStageVolumeResponse_builder) Build() *NodeStageVolumeResponse {
+	m0 := &NodeStageVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
 
+type NodeUnstageVolumeRequest struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The ID of the volume. This field is REQUIRED.
 	VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
 	// The path at which the volume was staged. It MUST be an absolute
@@ -3975,15 +5880,15 @@ type NodeUnstageVolumeRequest struct {
 	// system/filesystem, but, at a minimum, SP MUST accept a max path
 	// length of at least 128 bytes.
 	StagingTargetPath string `protobuf:"bytes,2,opt,name=staging_target_path,json=stagingTargetPath,proto3" json:"staging_target_path,omitempty"`
+	unknownFields     protoimpl.UnknownFields
+	sizeCache         protoimpl.SizeCache
 }
 
 func (x *NodeUnstageVolumeRequest) Reset() {
 	*x = NodeUnstageVolumeRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[45]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[45]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *NodeUnstageVolumeRequest) String() string {
@@ -3994,7 +5899,7 @@ func (*NodeUnstageVolumeRequest) ProtoMessage() {}
 
 func (x *NodeUnstageVolumeRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[45]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -4004,11 +5909,6 @@ func (x *NodeUnstageVolumeRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use NodeUnstageVolumeRequest.ProtoReflect.Descriptor instead.
-func (*NodeUnstageVolumeRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{45}
-}
-
 func (x *NodeUnstageVolumeRequest) GetVolumeId() string {
 	if x != nil {
 		return x.VolumeId
@@ -4023,19 +5923,49 @@ func (x *NodeUnstageVolumeRequest) GetStagingTargetPath() string {
 	return ""
 }
 
+func (x *NodeUnstageVolumeRequest) SetVolumeId(v string) {
+	x.VolumeId = v
+}
+
+func (x *NodeUnstageVolumeRequest) SetStagingTargetPath(v string) {
+	x.StagingTargetPath = v
+}
+
+type NodeUnstageVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume. This field is REQUIRED.
+	VolumeId string
+	// The path at which the volume was staged. It MUST be an absolute
+	// path in the root filesystem of the process serving this request.
+	// This is a REQUIRED field.
+	// This field overrides the general CSI size limit.
+	// SP SHOULD support the maximum path length allowed by the operating
+	// system/filesystem, but, at a minimum, SP MUST accept a max path
+	// length of at least 128 bytes.
+	StagingTargetPath string
+}
+
+func (b0 NodeUnstageVolumeRequest_builder) Build() *NodeUnstageVolumeRequest {
+	m0 := &NodeUnstageVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.VolumeId = b.VolumeId
+	x.StagingTargetPath = b.StagingTargetPath
+	return m0
+}
+
 type NodeUnstageVolumeResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"hybrid.v1"`
 	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *NodeUnstageVolumeResponse) Reset() {
 	*x = NodeUnstageVolumeResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[46]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[46]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *NodeUnstageVolumeResponse) String() string {
@@ -4046,7 +5976,7 @@ func (*NodeUnstageVolumeResponse) ProtoMessage() {}
 
 func (x *NodeUnstageVolumeResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[46]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -4056,16 +5986,20 @@ func (x *NodeUnstageVolumeResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use NodeUnstageVolumeResponse.ProtoReflect.Descriptor instead.
-func (*NodeUnstageVolumeResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{46}
+type NodeUnstageVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
 }
 
-type NodePublishVolumeRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (b0 NodeUnstageVolumeResponse_builder) Build() *NodeUnstageVolumeResponse {
+	m0 := &NodeUnstageVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
 
+type NodePublishVolumeRequest struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The ID of the volume to publish. This field is REQUIRED.
 	VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
 	// The CO SHALL set this field to the value returned by
@@ -4073,7 +6007,7 @@ type NodePublishVolumeRequest struct {
 	// has `PUBLISH_UNPUBLISH_VOLUME` controller capability, and SHALL be
 	// left unset if the corresponding Controller Plugin does not have
 	// this capability. This is an OPTIONAL field.
-	PublishContext map[string]string `protobuf:"bytes,2,rep,name=publish_context,json=publishContext,proto3" json:"publish_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	PublishContext map[string]string `protobuf:"bytes,2,rep,name=publish_context,json=publishContext,proto3" json:"publish_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 	// The path to which the volume was staged by `NodeStageVolume`.
 	// It MUST be an absolute path in the root filesystem of the process
 	// serving this request.
@@ -4113,21 +6047,21 @@ type NodePublishVolumeRequest struct {
 	// Secrets required by plugin to complete node publish volume request.
 	// This field is OPTIONAL. Refer to the `Secrets Requirements`
 	// section on how to use this field.
-	Secrets map[string]string `protobuf:"bytes,7,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Secrets map[string]string `protobuf:"bytes,7,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 	// Volume context as returned by SP in
 	// CreateVolumeResponse.Volume.volume_context.
 	// This field is OPTIONAL and MUST match the volume_context of the
 	// volume identified by `volume_id`.
-	VolumeContext map[string]string `protobuf:"bytes,8,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	VolumeContext map[string]string `protobuf:"bytes,8,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *NodePublishVolumeRequest) Reset() {
 	*x = NodePublishVolumeRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[47]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[47]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *NodePublishVolumeRequest) String() string {
@@ -4138,7 +6072,7 @@ func (*NodePublishVolumeRequest) ProtoMessage() {}
 
 func (x *NodePublishVolumeRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[47]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -4148,11 +6082,6 @@ func (x *NodePublishVolumeRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use NodePublishVolumeRequest.ProtoReflect.Descriptor instead.
-func (*NodePublishVolumeRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{47}
-}
-
 func (x *NodePublishVolumeRequest) GetVolumeId() string {
 	if x != nil {
 		return x.VolumeId
@@ -4209,19 +6138,133 @@ func (x *NodePublishVolumeRequest) GetVolumeContext() map[string]string {
 	return nil
 }
 
+func (x *NodePublishVolumeRequest) SetVolumeId(v string) {
+	x.VolumeId = v
+}
+
+func (x *NodePublishVolumeRequest) SetPublishContext(v map[string]string) {
+	x.PublishContext = v
+}
+
+func (x *NodePublishVolumeRequest) SetStagingTargetPath(v string) {
+	x.StagingTargetPath = v
+}
+
+func (x *NodePublishVolumeRequest) SetTargetPath(v string) {
+	x.TargetPath = v
+}
+
+func (x *NodePublishVolumeRequest) SetVolumeCapability(v *VolumeCapability) {
+	x.VolumeCapability = v
+}
+
+func (x *NodePublishVolumeRequest) SetReadonly(v bool) {
+	x.Readonly = v
+}
+
+func (x *NodePublishVolumeRequest) SetSecrets(v map[string]string) {
+	x.Secrets = v
+}
+
+func (x *NodePublishVolumeRequest) SetVolumeContext(v map[string]string) {
+	x.VolumeContext = v
+}
+
+func (x *NodePublishVolumeRequest) HasVolumeCapability() bool {
+	if x == nil {
+		return false
+	}
+	return x.VolumeCapability != nil
+}
+
+func (x *NodePublishVolumeRequest) ClearVolumeCapability() {
+	x.VolumeCapability = nil
+}
+
+type NodePublishVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume to publish. This field is REQUIRED.
+	VolumeId string
+	// The CO SHALL set this field to the value returned by
+	// `ControllerPublishVolume` if the corresponding Controller Plugin
+	// has `PUBLISH_UNPUBLISH_VOLUME` controller capability, and SHALL be
+	// left unset if the corresponding Controller Plugin does not have
+	// this capability. This is an OPTIONAL field.
+	PublishContext map[string]string
+	// The path to which the volume was staged by `NodeStageVolume`.
+	// It MUST be an absolute path in the root filesystem of the process
+	// serving this request.
+	// It MUST be set if the Node Plugin implements the
+	// `STAGE_UNSTAGE_VOLUME` node capability.
+	// This is an OPTIONAL field.
+	// This field overrides the general CSI size limit.
+	// SP SHOULD support the maximum path length allowed by the operating
+	// system/filesystem, but, at a minimum, SP MUST accept a max path
+	// length of at least 128 bytes.
+	StagingTargetPath string
+	// The path to which the volume will be published. It MUST be an
+	// absolute path in the root filesystem of the process serving this
+	// request. The CO SHALL ensure uniqueness of target_path per volume.
+	// The CO SHALL ensure that the parent directory of this path exists
+	// and that the process serving the request has `read` and `write`
+	// permissions to that parent directory.
+	// For volumes with an access type of block, the SP SHALL place the
+	// block device at target_path.
+	// For volumes with an access type of mount, the SP SHALL place the
+	// mounted directory at target_path.
+	// Creation of target_path is the responsibility of the SP.
+	// This is a REQUIRED field.
+	// This field overrides the general CSI size limit.
+	// SP SHOULD support the maximum path length allowed by the operating
+	// system/filesystem, but, at a minimum, SP MUST accept a max path
+	// length of at least 128 bytes.
+	TargetPath string
+	// Volume capability describing how the CO intends to use this volume.
+	// SP MUST ensure the CO can use the published volume as described.
+	// Otherwise SP MUST return the appropriate gRPC error code.
+	// This is a REQUIRED field.
+	VolumeCapability *VolumeCapability
+	// Indicates SP MUST publish the volume in readonly mode.
+	// This field is REQUIRED.
+	Readonly bool
+	// Secrets required by plugin to complete node publish volume request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+	// Volume context as returned by SP in
+	// CreateVolumeResponse.Volume.volume_context.
+	// This field is OPTIONAL and MUST match the volume_context of the
+	// volume identified by `volume_id`.
+	VolumeContext map[string]string
+}
+
+func (b0 NodePublishVolumeRequest_builder) Build() *NodePublishVolumeRequest {
+	m0 := &NodePublishVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.VolumeId = b.VolumeId
+	x.PublishContext = b.PublishContext
+	x.StagingTargetPath = b.StagingTargetPath
+	x.TargetPath = b.TargetPath
+	x.VolumeCapability = b.VolumeCapability
+	x.Readonly = b.Readonly
+	x.Secrets = b.Secrets
+	x.VolumeContext = b.VolumeContext
+	return m0
+}
+
 type NodePublishVolumeResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"hybrid.v1"`
 	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *NodePublishVolumeResponse) Reset() {
 	*x = NodePublishVolumeResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[48]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[48]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *NodePublishVolumeResponse) String() string {
@@ -4232,7 +6275,7 @@ func (*NodePublishVolumeResponse) ProtoMessage() {}
 
 func (x *NodePublishVolumeResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[48]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -4242,16 +6285,20 @@ func (x *NodePublishVolumeResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use NodePublishVolumeResponse.ProtoReflect.Descriptor instead.
-func (*NodePublishVolumeResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{48}
+type NodePublishVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
 }
 
-type NodeUnpublishVolumeRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (b0 NodePublishVolumeResponse_builder) Build() *NodePublishVolumeResponse {
+	m0 := &NodePublishVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
 
+type NodeUnpublishVolumeRequest struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The ID of the volume. This field is REQUIRED.
 	VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
 	// The path at which the volume was published. It MUST be an absolute
@@ -4262,16 +6309,16 @@ type NodeUnpublishVolumeRequest struct {
 	// SP SHOULD support the maximum path length allowed by the operating
 	// system/filesystem, but, at a minimum, SP MUST accept a max path
 	// length of at least 128 bytes.
-	TargetPath string `protobuf:"bytes,2,opt,name=target_path,json=targetPath,proto3" json:"target_path,omitempty"`
+	TargetPath    string `protobuf:"bytes,2,opt,name=target_path,json=targetPath,proto3" json:"target_path,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *NodeUnpublishVolumeRequest) Reset() {
 	*x = NodeUnpublishVolumeRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[49]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[49]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *NodeUnpublishVolumeRequest) String() string {
@@ -4282,7 +6329,7 @@ func (*NodeUnpublishVolumeRequest) ProtoMessage() {}
 
 func (x *NodeUnpublishVolumeRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[49]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -4292,11 +6339,6 @@ func (x *NodeUnpublishVolumeRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use NodeUnpublishVolumeRequest.ProtoReflect.Descriptor instead.
-func (*NodeUnpublishVolumeRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{49}
-}
-
 func (x *NodeUnpublishVolumeRequest) GetVolumeId() string {
 	if x != nil {
 		return x.VolumeId
@@ -4311,19 +6353,50 @@ func (x *NodeUnpublishVolumeRequest) GetTargetPath() string {
 	return ""
 }
 
+func (x *NodeUnpublishVolumeRequest) SetVolumeId(v string) {
+	x.VolumeId = v
+}
+
+func (x *NodeUnpublishVolumeRequest) SetTargetPath(v string) {
+	x.TargetPath = v
+}
+
+type NodeUnpublishVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume. This field is REQUIRED.
+	VolumeId string
+	// The path at which the volume was published. It MUST be an absolute
+	// path in the root filesystem of the process serving this request.
+	// The SP MUST delete the file or directory it created at this path.
+	// This is a REQUIRED field.
+	// This field overrides the general CSI size limit.
+	// SP SHOULD support the maximum path length allowed by the operating
+	// system/filesystem, but, at a minimum, SP MUST accept a max path
+	// length of at least 128 bytes.
+	TargetPath string
+}
+
+func (b0 NodeUnpublishVolumeRequest_builder) Build() *NodeUnpublishVolumeRequest {
+	m0 := &NodeUnpublishVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.VolumeId = b.VolumeId
+	x.TargetPath = b.TargetPath
+	return m0
+}
+
 type NodeUnpublishVolumeResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"hybrid.v1"`
 	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *NodeUnpublishVolumeResponse) Reset() {
 	*x = NodeUnpublishVolumeResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[50]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[50]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *NodeUnpublishVolumeResponse) String() string {
@@ -4334,7 +6407,7 @@ func (*NodeUnpublishVolumeResponse) ProtoMessage() {}
 
 func (x *NodeUnpublishVolumeResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[50]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -4344,16 +6417,20 @@ func (x *NodeUnpublishVolumeResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use NodeUnpublishVolumeResponse.ProtoReflect.Descriptor instead.
-func (*NodeUnpublishVolumeResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{50}
+type NodeUnpublishVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
 }
 
-type NodeGetVolumeStatsRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (b0 NodeUnpublishVolumeResponse_builder) Build() *NodeUnpublishVolumeResponse {
+	m0 := &NodeUnpublishVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
 
+type NodeGetVolumeStatsRequest struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The ID of the volume. This field is REQUIRED.
 	VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
 	// It can be any valid path where volume was previously
@@ -4376,15 +6453,15 @@ type NodeGetVolumeStatsRequest struct {
 	// system/filesystem, but, at a minimum, SP MUST accept a max path
 	// length of at least 128 bytes.
 	StagingTargetPath string `protobuf:"bytes,3,opt,name=staging_target_path,json=stagingTargetPath,proto3" json:"staging_target_path,omitempty"`
+	unknownFields     protoimpl.UnknownFields
+	sizeCache         protoimpl.SizeCache
 }
 
 func (x *NodeGetVolumeStatsRequest) Reset() {
 	*x = NodeGetVolumeStatsRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[51]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[51]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *NodeGetVolumeStatsRequest) String() string {
@@ -4395,7 +6472,7 @@ func (*NodeGetVolumeStatsRequest) ProtoMessage() {}
 
 func (x *NodeGetVolumeStatsRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[51]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -4405,11 +6482,6 @@ func (x *NodeGetVolumeStatsRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use NodeGetVolumeStatsRequest.ProtoReflect.Descriptor instead.
-func (*NodeGetVolumeStatsRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{51}
-}
-
 func (x *NodeGetVolumeStatsRequest) GetVolumeId() string {
 	if x != nil {
 		return x.VolumeId
@@ -4431,11 +6503,57 @@ func (x *NodeGetVolumeStatsRequest) GetStagingTargetPath() string {
 	return ""
 }
 
-type NodeGetVolumeStatsResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *NodeGetVolumeStatsRequest) SetVolumeId(v string) {
+	x.VolumeId = v
+}
+
+func (x *NodeGetVolumeStatsRequest) SetVolumePath(v string) {
+	x.VolumePath = v
+}
+
+func (x *NodeGetVolumeStatsRequest) SetStagingTargetPath(v string) {
+	x.StagingTargetPath = v
+}
+
+type NodeGetVolumeStatsRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume. This field is REQUIRED.
+	VolumeId string
+	// It can be any valid path where volume was previously
+	// staged or published.
+	// It MUST be an absolute path in the root filesystem of
+	// the process serving this request.
+	// This is a REQUIRED field.
+	// This field overrides the general CSI size limit.
+	// SP SHOULD support the maximum path length allowed by the operating
+	// system/filesystem, but, at a minimum, SP MUST accept a max path
+	// length of at least 128 bytes.
+	VolumePath string
+	// The path where the volume is staged, if the plugin has the
+	// STAGE_UNSTAGE_VOLUME capability, otherwise empty.
+	// If not empty, it MUST be an absolute path in the root
+	// filesystem of the process serving this request.
+	// This field is OPTIONAL.
+	// This field overrides the general CSI size limit.
+	// SP SHOULD support the maximum path length allowed by the operating
+	// system/filesystem, but, at a minimum, SP MUST accept a max path
+	// length of at least 128 bytes.
+	StagingTargetPath string
+}
 
+func (b0 NodeGetVolumeStatsRequest_builder) Build() *NodeGetVolumeStatsRequest {
+	m0 := &NodeGetVolumeStatsRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.VolumeId = b.VolumeId
+	x.VolumePath = b.VolumePath
+	x.StagingTargetPath = b.StagingTargetPath
+	return m0
+}
+
+type NodeGetVolumeStatsResponse struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// This field is OPTIONAL.
 	Usage []*VolumeUsage `protobuf:"bytes,1,rep,name=usage,proto3" json:"usage,omitempty"`
 	// Information about the current condition of the volume.
@@ -4443,15 +6561,15 @@ type NodeGetVolumeStatsResponse struct {
 	// This field MUST be specified if the VOLUME_CONDITION node
 	// capability is supported.
 	VolumeCondition *VolumeCondition `protobuf:"bytes,2,opt,name=volume_condition,json=volumeCondition,proto3" json:"volume_condition,omitempty"`
+	unknownFields   protoimpl.UnknownFields
+	sizeCache       protoimpl.SizeCache
 }
 
 func (x *NodeGetVolumeStatsResponse) Reset() {
 	*x = NodeGetVolumeStatsResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[52]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[52]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *NodeGetVolumeStatsResponse) String() string {
@@ -4462,7 +6580,7 @@ func (*NodeGetVolumeStatsResponse) ProtoMessage() {}
 
 func (x *NodeGetVolumeStatsResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[52]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -4472,11 +6590,6 @@ func (x *NodeGetVolumeStatsResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use NodeGetVolumeStatsResponse.ProtoReflect.Descriptor instead.
-func (*NodeGetVolumeStatsResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{52}
-}
-
 func (x *NodeGetVolumeStatsResponse) GetUsage() []*VolumeUsage {
 	if x != nil {
 		return x.Usage
@@ -4491,11 +6604,48 @@ func (x *NodeGetVolumeStatsResponse) GetVolumeCondition() *VolumeCondition {
 	return nil
 }
 
-type VolumeUsage struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *NodeGetVolumeStatsResponse) SetUsage(v []*VolumeUsage) {
+	x.Usage = v
+}
+
+func (x *NodeGetVolumeStatsResponse) SetVolumeCondition(v *VolumeCondition) {
+	x.VolumeCondition = v
+}
+
+func (x *NodeGetVolumeStatsResponse) HasVolumeCondition() bool {
+	if x == nil {
+		return false
+	}
+	return x.VolumeCondition != nil
+}
+
+func (x *NodeGetVolumeStatsResponse) ClearVolumeCondition() {
+	x.VolumeCondition = nil
+}
+
+type NodeGetVolumeStatsResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This field is OPTIONAL.
+	Usage []*VolumeUsage
+	// Information about the current condition of the volume.
+	// This field is OPTIONAL.
+	// This field MUST be specified if the VOLUME_CONDITION node
+	// capability is supported.
+	VolumeCondition *VolumeCondition
+}
 
+func (b0 NodeGetVolumeStatsResponse_builder) Build() *NodeGetVolumeStatsResponse {
+	m0 := &NodeGetVolumeStatsResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Usage = b.Usage
+	x.VolumeCondition = b.VolumeCondition
+	return m0
+}
+
+type VolumeUsage struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The available capacity in specified Unit. This field is OPTIONAL.
 	// The value of this field MUST NOT be negative.
 	Available int64 `protobuf:"varint,1,opt,name=available,proto3" json:"available,omitempty"`
@@ -4506,16 +6656,16 @@ type VolumeUsage struct {
 	// The value of this field MUST NOT be negative.
 	Used int64 `protobuf:"varint,3,opt,name=used,proto3" json:"used,omitempty"`
 	// Units by which values are measured. This field is REQUIRED.
-	Unit VolumeUsage_Unit `protobuf:"varint,4,opt,name=unit,proto3,enum=csi.v1.VolumeUsage_Unit" json:"unit,omitempty"`
+	Unit          VolumeUsage_Unit `protobuf:"varint,4,opt,name=unit,proto3,enum=csi.v1.VolumeUsage_Unit" json:"unit,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *VolumeUsage) Reset() {
 	*x = VolumeUsage{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[53]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[53]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *VolumeUsage) String() string {
@@ -4526,7 +6676,7 @@ func (*VolumeUsage) ProtoMessage() {}
 
 func (x *VolumeUsage) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[53]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -4536,11 +6686,6 @@ func (x *VolumeUsage) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use VolumeUsage.ProtoReflect.Descriptor instead.
-func (*VolumeUsage) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{53}
-}
-
 func (x *VolumeUsage) GetAvailable() int64 {
 	if x != nil {
 		return x.Available
@@ -4562,35 +6707,75 @@ func (x *VolumeUsage) GetUsed() int64 {
 	return 0
 }
 
-func (x *VolumeUsage) GetUnit() VolumeUsage_Unit {
-	if x != nil {
-		return x.Unit
-	}
-	return VolumeUsage_UNKNOWN
+func (x *VolumeUsage) GetUnit() VolumeUsage_Unit {
+	if x != nil {
+		return x.Unit
+	}
+	return VolumeUsage_UNKNOWN
+}
+
+func (x *VolumeUsage) SetAvailable(v int64) {
+	x.Available = v
+}
+
+func (x *VolumeUsage) SetTotal(v int64) {
+	x.Total = v
+}
+
+func (x *VolumeUsage) SetUsed(v int64) {
+	x.Used = v
+}
+
+func (x *VolumeUsage) SetUnit(v VolumeUsage_Unit) {
+	x.Unit = v
+}
+
+type VolumeUsage_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The available capacity in specified Unit. This field is OPTIONAL.
+	// The value of this field MUST NOT be negative.
+	Available int64
+	// The total capacity in specified Unit. This field is REQUIRED.
+	// The value of this field MUST NOT be negative.
+	Total int64
+	// The used capacity in specified Unit. This field is OPTIONAL.
+	// The value of this field MUST NOT be negative.
+	Used int64
+	// Units by which values are measured. This field is REQUIRED.
+	Unit VolumeUsage_Unit
+}
+
+func (b0 VolumeUsage_builder) Build() *VolumeUsage {
+	m0 := &VolumeUsage{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Available = b.Available
+	x.Total = b.Total
+	x.Used = b.Used
+	x.Unit = b.Unit
+	return m0
 }
 
 // VolumeCondition represents the current condition of a volume.
 type VolumeCondition struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// Normal volumes are available for use and operating optimally.
 	// An abnormal volume does not meet these criteria.
 	// This field is REQUIRED.
 	Abnormal bool `protobuf:"varint,1,opt,name=abnormal,proto3" json:"abnormal,omitempty"`
 	// The message describing the condition of the volume.
 	// This field is REQUIRED.
-	Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
+	Message       string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *VolumeCondition) Reset() {
 	*x = VolumeCondition{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[54]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[54]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *VolumeCondition) String() string {
@@ -4601,7 +6786,7 @@ func (*VolumeCondition) ProtoMessage() {}
 
 func (x *VolumeCondition) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[54]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -4611,11 +6796,6 @@ func (x *VolumeCondition) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use VolumeCondition.ProtoReflect.Descriptor instead.
-func (*VolumeCondition) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{54}
-}
-
 func (x *VolumeCondition) GetAbnormal() bool {
 	if x != nil {
 		return x.Abnormal
@@ -4630,19 +6810,46 @@ func (x *VolumeCondition) GetMessage() string {
 	return ""
 }
 
+func (x *VolumeCondition) SetAbnormal(v bool) {
+	x.Abnormal = v
+}
+
+func (x *VolumeCondition) SetMessage(v string) {
+	x.Message = v
+}
+
+type VolumeCondition_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Normal volumes are available for use and operating optimally.
+	// An abnormal volume does not meet these criteria.
+	// This field is REQUIRED.
+	Abnormal bool
+	// The message describing the condition of the volume.
+	// This field is REQUIRED.
+	Message string
+}
+
+func (b0 VolumeCondition_builder) Build() *VolumeCondition {
+	m0 := &VolumeCondition{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Abnormal = b.Abnormal
+	x.Message = b.Message
+	return m0
+}
+
 type NodeGetCapabilitiesRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"hybrid.v1"`
 	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *NodeGetCapabilitiesRequest) Reset() {
 	*x = NodeGetCapabilitiesRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[55]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[55]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *NodeGetCapabilitiesRequest) String() string {
@@ -4653,7 +6860,7 @@ func (*NodeGetCapabilitiesRequest) ProtoMessage() {}
 
 func (x *NodeGetCapabilitiesRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[55]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -4663,28 +6870,32 @@ func (x *NodeGetCapabilitiesRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use NodeGetCapabilitiesRequest.ProtoReflect.Descriptor instead.
-func (*NodeGetCapabilitiesRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{55}
+type NodeGetCapabilitiesRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
 }
 
-type NodeGetCapabilitiesResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (b0 NodeGetCapabilitiesRequest_builder) Build() *NodeGetCapabilitiesRequest {
+	m0 := &NodeGetCapabilitiesRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
 
+type NodeGetCapabilitiesResponse struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// All the capabilities that the node service supports. This field
 	// is OPTIONAL.
-	Capabilities []*NodeServiceCapability `protobuf:"bytes,1,rep,name=capabilities,proto3" json:"capabilities,omitempty"`
+	Capabilities  []*NodeServiceCapability `protobuf:"bytes,1,rep,name=capabilities,proto3" json:"capabilities,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *NodeGetCapabilitiesResponse) Reset() {
 	*x = NodeGetCapabilitiesResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[56]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[56]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *NodeGetCapabilitiesResponse) String() string {
@@ -4695,7 +6906,7 @@ func (*NodeGetCapabilitiesResponse) ProtoMessage() {}
 
 func (x *NodeGetCapabilitiesResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[56]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -4705,11 +6916,6 @@ func (x *NodeGetCapabilitiesResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use NodeGetCapabilitiesResponse.ProtoReflect.Descriptor instead.
-func (*NodeGetCapabilitiesResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{56}
-}
-
 func (x *NodeGetCapabilitiesResponse) GetCapabilities() []*NodeServiceCapability {
 	if x != nil {
 		return x.Capabilities
@@ -4717,25 +6923,42 @@ func (x *NodeGetCapabilitiesResponse) GetCapabilities() []*NodeServiceCapability
 	return nil
 }
 
+func (x *NodeGetCapabilitiesResponse) SetCapabilities(v []*NodeServiceCapability) {
+	x.Capabilities = v
+}
+
+type NodeGetCapabilitiesResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// All the capabilities that the node service supports. This field
+	// is OPTIONAL.
+	Capabilities []*NodeServiceCapability
+}
+
+func (b0 NodeGetCapabilitiesResponse_builder) Build() *NodeGetCapabilitiesResponse {
+	m0 := &NodeGetCapabilitiesResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Capabilities = b.Capabilities
+	return m0
+}
+
 // Specifies a capability of the node service.
 type NodeServiceCapability struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	// Types that are assignable to Type:
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
+	// Types that are valid to be assigned to Type:
 	//
 	//	*NodeServiceCapability_Rpc
-	Type isNodeServiceCapability_Type `protobuf_oneof:"type"`
+	Type          isNodeServiceCapability_Type `protobuf_oneof:"type"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *NodeServiceCapability) Reset() {
 	*x = NodeServiceCapability{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[57]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[57]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *NodeServiceCapability) String() string {
@@ -4746,7 +6969,7 @@ func (*NodeServiceCapability) ProtoMessage() {}
 
 func (x *NodeServiceCapability) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[57]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -4756,25 +6979,99 @@ func (x *NodeServiceCapability) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use NodeServiceCapability.ProtoReflect.Descriptor instead.
-func (*NodeServiceCapability) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{57}
-}
-
-func (m *NodeServiceCapability) GetType() isNodeServiceCapability_Type {
-	if m != nil {
-		return m.Type
+func (x *NodeServiceCapability) GetType() isNodeServiceCapability_Type {
+	if x != nil {
+		return x.Type
 	}
 	return nil
 }
 
 func (x *NodeServiceCapability) GetRpc() *NodeServiceCapability_RPC {
-	if x, ok := x.GetType().(*NodeServiceCapability_Rpc); ok {
-		return x.Rpc
+	if x != nil {
+		if x, ok := x.Type.(*NodeServiceCapability_Rpc); ok {
+			return x.Rpc
+		}
 	}
 	return nil
 }
 
+func (x *NodeServiceCapability) SetRpc(v *NodeServiceCapability_RPC) {
+	if v == nil {
+		x.Type = nil
+		return
+	}
+	x.Type = &NodeServiceCapability_Rpc{v}
+}
+
+func (x *NodeServiceCapability) HasType() bool {
+	if x == nil {
+		return false
+	}
+	return x.Type != nil
+}
+
+func (x *NodeServiceCapability) HasRpc() bool {
+	if x == nil {
+		return false
+	}
+	_, ok := x.Type.(*NodeServiceCapability_Rpc)
+	return ok
+}
+
+func (x *NodeServiceCapability) ClearType() {
+	x.Type = nil
+}
+
+func (x *NodeServiceCapability) ClearRpc() {
+	if _, ok := x.Type.(*NodeServiceCapability_Rpc); ok {
+		x.Type = nil
+	}
+}
+
+const NodeServiceCapability_Type_not_set_case case_NodeServiceCapability_Type = 0
+const NodeServiceCapability_Rpc_case case_NodeServiceCapability_Type = 1
+
+func (x *NodeServiceCapability) WhichType() case_NodeServiceCapability_Type {
+	if x == nil {
+		return NodeServiceCapability_Type_not_set_case
+	}
+	switch x.Type.(type) {
+	case *NodeServiceCapability_Rpc:
+		return NodeServiceCapability_Rpc_case
+	default:
+		return NodeServiceCapability_Type_not_set_case
+	}
+}
+
+type NodeServiceCapability_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Fields of oneof Type:
+	// RPC that the controller supports.
+	Rpc *NodeServiceCapability_RPC
+	// -- end of Type
+}
+
+func (b0 NodeServiceCapability_builder) Build() *NodeServiceCapability {
+	m0 := &NodeServiceCapability{}
+	b, x := &b0, m0
+	_, _ = b, x
+	if b.Rpc != nil {
+		x.Type = &NodeServiceCapability_Rpc{b.Rpc}
+	}
+	return m0
+}
+
+type case_NodeServiceCapability_Type protoreflect.FieldNumber
+
+func (x case_NodeServiceCapability_Type) String() string {
+	md := file_csi_proto_msgTypes[57].Descriptor()
+	if x == 0 {
+		return "not set"
+	}
+	return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))
+}
+
 type isNodeServiceCapability_Type interface {
 	isNodeServiceCapability_Type()
 }
@@ -4787,18 +7084,16 @@ type NodeServiceCapability_Rpc struct {
 func (*NodeServiceCapability_Rpc) isNodeServiceCapability_Type() {}
 
 type NodeGetInfoRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"hybrid.v1"`
 	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *NodeGetInfoRequest) Reset() {
 	*x = NodeGetInfoRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[58]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[58]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *NodeGetInfoRequest) String() string {
@@ -4809,7 +7104,7 @@ func (*NodeGetInfoRequest) ProtoMessage() {}
 
 func (x *NodeGetInfoRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[58]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -4819,16 +7114,20 @@ func (x *NodeGetInfoRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use NodeGetInfoRequest.ProtoReflect.Descriptor instead.
-func (*NodeGetInfoRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{58}
+type NodeGetInfoRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 NodeGetInfoRequest_builder) Build() *NodeGetInfoRequest {
+	m0 := &NodeGetInfoRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
 }
 
 type NodeGetInfoResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The identifier of the node as understood by the SP.
 	// This field is REQUIRED.
 	// This field MUST contain enough information to uniquely identify
@@ -4868,15 +7167,15 @@ type NodeGetInfoResponse struct {
 	// Indicates the node exists within the "region" "R1" and the "zone"
 	// "Z2".
 	AccessibleTopology *Topology `protobuf:"bytes,3,opt,name=accessible_topology,json=accessibleTopology,proto3" json:"accessible_topology,omitempty"`
+	unknownFields      protoimpl.UnknownFields
+	sizeCache          protoimpl.SizeCache
 }
 
 func (x *NodeGetInfoResponse) Reset() {
 	*x = NodeGetInfoResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[59]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[59]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *NodeGetInfoResponse) String() string {
@@ -4887,7 +7186,7 @@ func (*NodeGetInfoResponse) ProtoMessage() {}
 
 func (x *NodeGetInfoResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[59]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -4897,11 +7196,6 @@ func (x *NodeGetInfoResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use NodeGetInfoResponse.ProtoReflect.Descriptor instead.
-func (*NodeGetInfoResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{59}
-}
-
 func (x *NodeGetInfoResponse) GetNodeId() string {
 	if x != nil {
 		return x.NodeId
@@ -4923,11 +7217,85 @@ func (x *NodeGetInfoResponse) GetAccessibleTopology() *Topology {
 	return nil
 }
 
-type NodeExpandVolumeRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *NodeGetInfoResponse) SetNodeId(v string) {
+	x.NodeId = v
+}
+
+func (x *NodeGetInfoResponse) SetMaxVolumesPerNode(v int64) {
+	x.MaxVolumesPerNode = v
+}
+
+func (x *NodeGetInfoResponse) SetAccessibleTopology(v *Topology) {
+	x.AccessibleTopology = v
+}
+
+func (x *NodeGetInfoResponse) HasAccessibleTopology() bool {
+	if x == nil {
+		return false
+	}
+	return x.AccessibleTopology != nil
+}
+
+func (x *NodeGetInfoResponse) ClearAccessibleTopology() {
+	x.AccessibleTopology = nil
+}
+
+type NodeGetInfoResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The identifier of the node as understood by the SP.
+	// This field is REQUIRED.
+	// This field MUST contain enough information to uniquely identify
+	// this specific node vs all other nodes supported by this plugin.
+	// This field SHALL be used by the CO in subsequent calls, including
+	// `ControllerPublishVolume`, to refer to this node.
+	// The SP is NOT responsible for global uniqueness of node_id across
+	// multiple SPs.
+	// This field overrides the general CSI size limit.
+	// The size of this field SHALL NOT exceed 256 bytes. The general
+	// CSI size limit, 128 byte, is RECOMMENDED for best backwards
+	// compatibility.
+	NodeId string
+	// Maximum number of volumes that controller can publish to the node.
+	// If value is not set or zero CO SHALL decide how many volumes of
+	// this type can be published by the controller to the node. The
+	// plugin MUST NOT set negative values here.
+	// This field is OPTIONAL.
+	MaxVolumesPerNode int64
+	// Specifies where (regions, zones, racks, etc.) the node is
+	// accessible from.
+	// A plugin that returns this field MUST also set the
+	// VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability.
+	// COs MAY use this information along with the topology information
+	// returned in CreateVolumeResponse to ensure that a given volume is
+	// accessible from a given node when scheduling workloads.
+	// This field is OPTIONAL. If it is not specified, the CO MAY assume
+	// the node is not subject to any topological constraint, and MAY
+	// schedule workloads that reference any volume V, such that there are
+	// no topological constraints declared for V.
+	//
+	// Example 1:
+	//
+	//	accessible_topology =
+	//	  {"region": "R1", "zone": "Z2"}
+	//
+	// Indicates the node exists within the "region" "R1" and the "zone"
+	// "Z2".
+	AccessibleTopology *Topology
+}
+
+func (b0 NodeGetInfoResponse_builder) Build() *NodeGetInfoResponse {
+	m0 := &NodeGetInfoResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.NodeId = b.NodeId
+	x.MaxVolumesPerNode = b.MaxVolumesPerNode
+	x.AccessibleTopology = b.AccessibleTopology
+	return m0
+}
 
+type NodeExpandVolumeRequest struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The ID of the volume. This field is REQUIRED.
 	VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
 	// The path on which volume is available. This field is REQUIRED.
@@ -4966,16 +7334,16 @@ type NodeExpandVolumeRequest struct {
 	// Secrets required by plugin to complete node expand volume request.
 	// This field is OPTIONAL. Refer to the `Secrets Requirements`
 	// section on how to use this field.
-	Secrets map[string]string `protobuf:"bytes,6,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Secrets       map[string]string `protobuf:"bytes,6,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *NodeExpandVolumeRequest) Reset() {
 	*x = NodeExpandVolumeRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[60]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[60]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *NodeExpandVolumeRequest) String() string {
@@ -4986,7 +7354,7 @@ func (*NodeExpandVolumeRequest) ProtoMessage() {}
 
 func (x *NodeExpandVolumeRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[60]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -4996,11 +7364,6 @@ func (x *NodeExpandVolumeRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use NodeExpandVolumeRequest.ProtoReflect.Descriptor instead.
-func (*NodeExpandVolumeRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{60}
-}
-
 func (x *NodeExpandVolumeRequest) GetVolumeId() string {
 	if x != nil {
 		return x.VolumeId
@@ -5036,29 +7399,129 @@ func (x *NodeExpandVolumeRequest) GetVolumeCapability() *VolumeCapability {
 	return nil
 }
 
-func (x *NodeExpandVolumeRequest) GetSecrets() map[string]string {
-	if x != nil {
-		return x.Secrets
-	}
-	return nil
+func (x *NodeExpandVolumeRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.Secrets
+	}
+	return nil
+}
+
+func (x *NodeExpandVolumeRequest) SetVolumeId(v string) {
+	x.VolumeId = v
+}
+
+func (x *NodeExpandVolumeRequest) SetVolumePath(v string) {
+	x.VolumePath = v
+}
+
+func (x *NodeExpandVolumeRequest) SetCapacityRange(v *CapacityRange) {
+	x.CapacityRange = v
+}
+
+func (x *NodeExpandVolumeRequest) SetStagingTargetPath(v string) {
+	x.StagingTargetPath = v
+}
+
+func (x *NodeExpandVolumeRequest) SetVolumeCapability(v *VolumeCapability) {
+	x.VolumeCapability = v
+}
+
+func (x *NodeExpandVolumeRequest) SetSecrets(v map[string]string) {
+	x.Secrets = v
+}
+
+func (x *NodeExpandVolumeRequest) HasCapacityRange() bool {
+	if x == nil {
+		return false
+	}
+	return x.CapacityRange != nil
+}
+
+func (x *NodeExpandVolumeRequest) HasVolumeCapability() bool {
+	if x == nil {
+		return false
+	}
+	return x.VolumeCapability != nil
+}
+
+func (x *NodeExpandVolumeRequest) ClearCapacityRange() {
+	x.CapacityRange = nil
+}
+
+func (x *NodeExpandVolumeRequest) ClearVolumeCapability() {
+	x.VolumeCapability = nil
+}
+
+type NodeExpandVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume. This field is REQUIRED.
+	VolumeId string
+	// The path on which volume is available. This field is REQUIRED.
+	// This field overrides the general CSI size limit.
+	// SP SHOULD support the maximum path length allowed by the operating
+	// system/filesystem, but, at a minimum, SP MUST accept a max path
+	// length of at least 128 bytes.
+	VolumePath string
+	// This allows CO to specify the capacity requirements of the volume
+	// after expansion. If capacity_range is omitted then a plugin MAY
+	// inspect the file system of the volume to determine the maximum
+	// capacity to which the volume can be expanded. In such cases a
+	// plugin MAY expand the volume to its maximum capacity.
+	// This field is OPTIONAL.
+	CapacityRange *CapacityRange
+	// The path where the volume is staged, if the plugin has the
+	// STAGE_UNSTAGE_VOLUME capability, otherwise empty.
+	// If not empty, it MUST be an absolute path in the root
+	// filesystem of the process serving this request.
+	// This field is OPTIONAL.
+	// This field overrides the general CSI size limit.
+	// SP SHOULD support the maximum path length allowed by the operating
+	// system/filesystem, but, at a minimum, SP MUST accept a max path
+	// length of at least 128 bytes.
+	StagingTargetPath string
+	// Volume capability describing how the CO intends to use this volume.
+	// This allows SP to determine if volume is being used as a block
+	// device or mounted file system. For example - if volume is being
+	// used as a block device the SP MAY choose to skip expanding the
+	// filesystem in NodeExpandVolume implementation but still perform
+	// rest of the housekeeping needed for expanding the volume. If
+	// volume_capability is omitted the SP MAY determine
+	// access_type from given volume_path for the volume and perform
+	// node expansion. This is an OPTIONAL field.
+	VolumeCapability *VolumeCapability
+	// Secrets required by plugin to complete node expand volume request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+}
+
+func (b0 NodeExpandVolumeRequest_builder) Build() *NodeExpandVolumeRequest {
+	m0 := &NodeExpandVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.VolumeId = b.VolumeId
+	x.VolumePath = b.VolumePath
+	x.CapacityRange = b.CapacityRange
+	x.StagingTargetPath = b.StagingTargetPath
+	x.VolumeCapability = b.VolumeCapability
+	x.Secrets = b.Secrets
+	return m0
 }
 
 type NodeExpandVolumeResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The capacity of the volume in bytes. This field is OPTIONAL.
 	CapacityBytes int64 `protobuf:"varint,1,opt,name=capacity_bytes,json=capacityBytes,proto3" json:"capacity_bytes,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *NodeExpandVolumeResponse) Reset() {
 	*x = NodeExpandVolumeResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[61]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[61]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *NodeExpandVolumeResponse) String() string {
@@ -5069,7 +7532,7 @@ func (*NodeExpandVolumeResponse) ProtoMessage() {}
 
 func (x *NodeExpandVolumeResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[61]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -5079,11 +7542,6 @@ func (x *NodeExpandVolumeResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use NodeExpandVolumeResponse.ProtoReflect.Descriptor instead.
-func (*NodeExpandVolumeResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{61}
-}
-
 func (x *NodeExpandVolumeResponse) GetCapacityBytes() int64 {
 	if x != nil {
 		return x.CapacityBytes
@@ -5091,19 +7549,36 @@ func (x *NodeExpandVolumeResponse) GetCapacityBytes() int64 {
 	return 0
 }
 
+func (x *NodeExpandVolumeResponse) SetCapacityBytes(v int64) {
+	x.CapacityBytes = v
+}
+
+type NodeExpandVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The capacity of the volume in bytes. This field is OPTIONAL.
+	CapacityBytes int64
+}
+
+func (b0 NodeExpandVolumeResponse_builder) Build() *NodeExpandVolumeResponse {
+	m0 := &NodeExpandVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.CapacityBytes = b.CapacityBytes
+	return m0
+}
+
 type GroupControllerGetCapabilitiesRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"hybrid.v1"`
 	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *GroupControllerGetCapabilitiesRequest) Reset() {
 	*x = GroupControllerGetCapabilitiesRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[62]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[62]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *GroupControllerGetCapabilitiesRequest) String() string {
@@ -5114,7 +7589,7 @@ func (*GroupControllerGetCapabilitiesRequest) ProtoMessage() {}
 
 func (x *GroupControllerGetCapabilitiesRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[62]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -5124,28 +7599,32 @@ func (x *GroupControllerGetCapabilitiesRequest) ProtoReflect() protoreflect.Mess
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GroupControllerGetCapabilitiesRequest.ProtoReflect.Descriptor instead.
-func (*GroupControllerGetCapabilitiesRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{62}
+type GroupControllerGetCapabilitiesRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
 }
 
-type GroupControllerGetCapabilitiesResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (b0 GroupControllerGetCapabilitiesRequest_builder) Build() *GroupControllerGetCapabilitiesRequest {
+	m0 := &GroupControllerGetCapabilitiesRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
 
+type GroupControllerGetCapabilitiesResponse struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// All the capabilities that the group controller service supports.
 	// This field is OPTIONAL.
-	Capabilities []*GroupControllerServiceCapability `protobuf:"bytes,1,rep,name=capabilities,proto3" json:"capabilities,omitempty"`
+	Capabilities  []*GroupControllerServiceCapability `protobuf:"bytes,1,rep,name=capabilities,proto3" json:"capabilities,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *GroupControllerGetCapabilitiesResponse) Reset() {
 	*x = GroupControllerGetCapabilitiesResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[63]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[63]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *GroupControllerGetCapabilitiesResponse) String() string {
@@ -5156,7 +7635,7 @@ func (*GroupControllerGetCapabilitiesResponse) ProtoMessage() {}
 
 func (x *GroupControllerGetCapabilitiesResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[63]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -5166,11 +7645,6 @@ func (x *GroupControllerGetCapabilitiesResponse) ProtoReflect() protoreflect.Mes
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GroupControllerGetCapabilitiesResponse.ProtoReflect.Descriptor instead.
-func (*GroupControllerGetCapabilitiesResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{63}
-}
-
 func (x *GroupControllerGetCapabilitiesResponse) GetCapabilities() []*GroupControllerServiceCapability {
 	if x != nil {
 		return x.Capabilities
@@ -5178,25 +7652,42 @@ func (x *GroupControllerGetCapabilitiesResponse) GetCapabilities() []*GroupContr
 	return nil
 }
 
+func (x *GroupControllerGetCapabilitiesResponse) SetCapabilities(v []*GroupControllerServiceCapability) {
+	x.Capabilities = v
+}
+
+type GroupControllerGetCapabilitiesResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// All the capabilities that the group controller service supports.
+	// This field is OPTIONAL.
+	Capabilities []*GroupControllerServiceCapability
+}
+
+func (b0 GroupControllerGetCapabilitiesResponse_builder) Build() *GroupControllerGetCapabilitiesResponse {
+	m0 := &GroupControllerGetCapabilitiesResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Capabilities = b.Capabilities
+	return m0
+}
+
 // Specifies a capability of the group controller service.
 type GroupControllerServiceCapability struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	// Types that are assignable to Type:
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
+	// Types that are valid to be assigned to Type:
 	//
 	//	*GroupControllerServiceCapability_Rpc
-	Type isGroupControllerServiceCapability_Type `protobuf_oneof:"type"`
+	Type          isGroupControllerServiceCapability_Type `protobuf_oneof:"type"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *GroupControllerServiceCapability) Reset() {
 	*x = GroupControllerServiceCapability{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[64]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[64]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *GroupControllerServiceCapability) String() string {
@@ -5207,7 +7698,7 @@ func (*GroupControllerServiceCapability) ProtoMessage() {}
 
 func (x *GroupControllerServiceCapability) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[64]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -5217,25 +7708,99 @@ func (x *GroupControllerServiceCapability) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GroupControllerServiceCapability.ProtoReflect.Descriptor instead.
-func (*GroupControllerServiceCapability) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{64}
-}
-
-func (m *GroupControllerServiceCapability) GetType() isGroupControllerServiceCapability_Type {
-	if m != nil {
-		return m.Type
+func (x *GroupControllerServiceCapability) GetType() isGroupControllerServiceCapability_Type {
+	if x != nil {
+		return x.Type
 	}
 	return nil
 }
 
 func (x *GroupControllerServiceCapability) GetRpc() *GroupControllerServiceCapability_RPC {
-	if x, ok := x.GetType().(*GroupControllerServiceCapability_Rpc); ok {
-		return x.Rpc
+	if x != nil {
+		if x, ok := x.Type.(*GroupControllerServiceCapability_Rpc); ok {
+			return x.Rpc
+		}
 	}
 	return nil
 }
 
+func (x *GroupControllerServiceCapability) SetRpc(v *GroupControllerServiceCapability_RPC) {
+	if v == nil {
+		x.Type = nil
+		return
+	}
+	x.Type = &GroupControllerServiceCapability_Rpc{v}
+}
+
+func (x *GroupControllerServiceCapability) HasType() bool {
+	if x == nil {
+		return false
+	}
+	return x.Type != nil
+}
+
+func (x *GroupControllerServiceCapability) HasRpc() bool {
+	if x == nil {
+		return false
+	}
+	_, ok := x.Type.(*GroupControllerServiceCapability_Rpc)
+	return ok
+}
+
+func (x *GroupControllerServiceCapability) ClearType() {
+	x.Type = nil
+}
+
+func (x *GroupControllerServiceCapability) ClearRpc() {
+	if _, ok := x.Type.(*GroupControllerServiceCapability_Rpc); ok {
+		x.Type = nil
+	}
+}
+
+const GroupControllerServiceCapability_Type_not_set_case case_GroupControllerServiceCapability_Type = 0
+const GroupControllerServiceCapability_Rpc_case case_GroupControllerServiceCapability_Type = 1
+
+func (x *GroupControllerServiceCapability) WhichType() case_GroupControllerServiceCapability_Type {
+	if x == nil {
+		return GroupControllerServiceCapability_Type_not_set_case
+	}
+	switch x.Type.(type) {
+	case *GroupControllerServiceCapability_Rpc:
+		return GroupControllerServiceCapability_Rpc_case
+	default:
+		return GroupControllerServiceCapability_Type_not_set_case
+	}
+}
+
+type GroupControllerServiceCapability_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Fields of oneof Type:
+	// RPC that the controller supports.
+	Rpc *GroupControllerServiceCapability_RPC
+	// -- end of Type
+}
+
+func (b0 GroupControllerServiceCapability_builder) Build() *GroupControllerServiceCapability {
+	m0 := &GroupControllerServiceCapability{}
+	b, x := &b0, m0
+	_, _ = b, x
+	if b.Rpc != nil {
+		x.Type = &GroupControllerServiceCapability_Rpc{b.Rpc}
+	}
+	return m0
+}
+
+type case_GroupControllerServiceCapability_Type protoreflect.FieldNumber
+
+func (x case_GroupControllerServiceCapability_Type) String() string {
+	md := file_csi_proto_msgTypes[64].Descriptor()
+	if x == 0 {
+		return "not set"
+	}
+	return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))
+}
+
 type isGroupControllerServiceCapability_Type interface {
 	isGroupControllerServiceCapability_Type()
 }
@@ -5248,10 +7813,7 @@ type GroupControllerServiceCapability_Rpc struct {
 func (*GroupControllerServiceCapability_Rpc) isGroupControllerServiceCapability_Type() {}
 
 type CreateVolumeGroupSnapshotRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The suggested name for the group snapshot. This field is REQUIRED
 	// for idempotency.
 	// Any Unicode string that conforms to the length limit is allowed
@@ -5268,20 +7830,20 @@ type CreateVolumeGroupSnapshotRequest struct {
 	// section on how to use this field.
 	// The secrets provided in this field SHOULD be the same for
 	// all group snapshot operations on the same group snapshot.
-	Secrets map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Secrets map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 	// Plugin specific parameters passed in as opaque key-value pairs.
 	// This field is OPTIONAL. The Plugin is responsible for parsing and
 	// validating these parameters. COs will treat these as opaque.
-	Parameters map[string]string `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Parameters    map[string]string `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *CreateVolumeGroupSnapshotRequest) Reset() {
 	*x = CreateVolumeGroupSnapshotRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[65]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[65]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *CreateVolumeGroupSnapshotRequest) String() string {
@@ -5292,7 +7854,7 @@ func (*CreateVolumeGroupSnapshotRequest) ProtoMessage() {}
 
 func (x *CreateVolumeGroupSnapshotRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[65]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -5302,11 +7864,6 @@ func (x *CreateVolumeGroupSnapshotRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use CreateVolumeGroupSnapshotRequest.ProtoReflect.Descriptor instead.
-func (*CreateVolumeGroupSnapshotRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{65}
-}
-
 func (x *CreateVolumeGroupSnapshotRequest) GetName() string {
 	if x != nil {
 		return x.Name
@@ -5335,23 +7892,73 @@ func (x *CreateVolumeGroupSnapshotRequest) GetParameters() map[string]string {
 	return nil
 }
 
-type CreateVolumeGroupSnapshotResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *CreateVolumeGroupSnapshotRequest) SetName(v string) {
+	x.Name = v
+}
+
+func (x *CreateVolumeGroupSnapshotRequest) SetSourceVolumeIds(v []string) {
+	x.SourceVolumeIds = v
+}
+
+func (x *CreateVolumeGroupSnapshotRequest) SetSecrets(v map[string]string) {
+	x.Secrets = v
+}
+
+func (x *CreateVolumeGroupSnapshotRequest) SetParameters(v map[string]string) {
+	x.Parameters = v
+}
+
+type CreateVolumeGroupSnapshotRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The suggested name for the group snapshot. This field is REQUIRED
+	// for idempotency.
+	// Any Unicode string that conforms to the length limit is allowed
+	// except those containing the following banned characters:
+	// U+0000-U+0008, U+000B, U+000C, U+000E-U+001F, U+007F-U+009F.
+	// (These are control characters other than commonly used whitespace.)
+	Name string
+	// volume IDs of the source volumes to be snapshotted together.
+	// This field is REQUIRED.
+	SourceVolumeIds []string
+	// Secrets required by plugin to complete
+	// ControllerCreateVolumeGroupSnapshot request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	// The secrets provided in this field SHOULD be the same for
+	// all group snapshot operations on the same group snapshot.
+	Secrets map[string]string
+	// Plugin specific parameters passed in as opaque key-value pairs.
+	// This field is OPTIONAL. The Plugin is responsible for parsing and
+	// validating these parameters. COs will treat these as opaque.
+	Parameters map[string]string
+}
+
+func (b0 CreateVolumeGroupSnapshotRequest_builder) Build() *CreateVolumeGroupSnapshotRequest {
+	m0 := &CreateVolumeGroupSnapshotRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Name = b.Name
+	x.SourceVolumeIds = b.SourceVolumeIds
+	x.Secrets = b.Secrets
+	x.Parameters = b.Parameters
+	return m0
+}
 
+type CreateVolumeGroupSnapshotResponse struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// Contains all attributes of the newly created group snapshot.
 	// This field is REQUIRED.
 	GroupSnapshot *VolumeGroupSnapshot `protobuf:"bytes,1,opt,name=group_snapshot,json=groupSnapshot,proto3" json:"group_snapshot,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *CreateVolumeGroupSnapshotResponse) Reset() {
 	*x = CreateVolumeGroupSnapshotResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[66]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[66]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *CreateVolumeGroupSnapshotResponse) String() string {
@@ -5362,7 +7969,7 @@ func (*CreateVolumeGroupSnapshotResponse) ProtoMessage() {}
 
 func (x *CreateVolumeGroupSnapshotResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[66]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -5372,11 +7979,6 @@ func (x *CreateVolumeGroupSnapshotResponse) ProtoReflect() protoreflect.Message
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use CreateVolumeGroupSnapshotResponse.ProtoReflect.Descriptor instead.
-func (*CreateVolumeGroupSnapshotResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{66}
-}
-
 func (x *CreateVolumeGroupSnapshotResponse) GetGroupSnapshot() *VolumeGroupSnapshot {
 	if x != nil {
 		return x.GroupSnapshot
@@ -5384,11 +7986,39 @@ func (x *CreateVolumeGroupSnapshotResponse) GetGroupSnapshot() *VolumeGroupSnaps
 	return nil
 }
 
-type VolumeGroupSnapshot struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *CreateVolumeGroupSnapshotResponse) SetGroupSnapshot(v *VolumeGroupSnapshot) {
+	x.GroupSnapshot = v
+}
+
+func (x *CreateVolumeGroupSnapshotResponse) HasGroupSnapshot() bool {
+	if x == nil {
+		return false
+	}
+	return x.GroupSnapshot != nil
+}
+
+func (x *CreateVolumeGroupSnapshotResponse) ClearGroupSnapshot() {
+	x.GroupSnapshot = nil
+}
+
+type CreateVolumeGroupSnapshotResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Contains all attributes of the newly created group snapshot.
+	// This field is REQUIRED.
+	GroupSnapshot *VolumeGroupSnapshot
+}
 
+func (b0 CreateVolumeGroupSnapshotResponse_builder) Build() *CreateVolumeGroupSnapshotResponse {
+	m0 := &CreateVolumeGroupSnapshotResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.GroupSnapshot = b.GroupSnapshot
+	return m0
+}
+
+type VolumeGroupSnapshot struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The identifier for this group snapshot, generated by the plugin.
 	// This field MUST contain enough information to uniquely identify
 	// this specific snapshot vs all other group snapshots supported by
@@ -5414,16 +8044,16 @@ type VolumeGroupSnapshot struct {
 	// have ready_to_use set to true, the SP SHOULD set this field to
 	// true.
 	// This field is REQUIRED.
-	ReadyToUse bool `protobuf:"varint,4,opt,name=ready_to_use,json=readyToUse,proto3" json:"ready_to_use,omitempty"`
+	ReadyToUse    bool `protobuf:"varint,4,opt,name=ready_to_use,json=readyToUse,proto3" json:"ready_to_use,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *VolumeGroupSnapshot) Reset() {
 	*x = VolumeGroupSnapshot{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[67]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[67]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *VolumeGroupSnapshot) String() string {
@@ -5434,7 +8064,7 @@ func (*VolumeGroupSnapshot) ProtoMessage() {}
 
 func (x *VolumeGroupSnapshot) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[67]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -5444,11 +8074,6 @@ func (x *VolumeGroupSnapshot) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use VolumeGroupSnapshot.ProtoReflect.Descriptor instead.
-func (*VolumeGroupSnapshot) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{67}
-}
-
 func (x *VolumeGroupSnapshot) GetGroupSnapshotId() string {
 	if x != nil {
 		return x.GroupSnapshotId
@@ -5477,11 +8102,77 @@ func (x *VolumeGroupSnapshot) GetReadyToUse() bool {
 	return false
 }
 
-type DeleteVolumeGroupSnapshotRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *VolumeGroupSnapshot) SetGroupSnapshotId(v string) {
+	x.GroupSnapshotId = v
+}
+
+func (x *VolumeGroupSnapshot) SetSnapshots(v []*Snapshot) {
+	x.Snapshots = v
+}
+
+func (x *VolumeGroupSnapshot) SetCreationTime(v *timestamppb.Timestamp) {
+	x.CreationTime = v
+}
+
+func (x *VolumeGroupSnapshot) SetReadyToUse(v bool) {
+	x.ReadyToUse = v
+}
+
+func (x *VolumeGroupSnapshot) HasCreationTime() bool {
+	if x == nil {
+		return false
+	}
+	return x.CreationTime != nil
+}
 
+func (x *VolumeGroupSnapshot) ClearCreationTime() {
+	x.CreationTime = nil
+}
+
+type VolumeGroupSnapshot_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The identifier for this group snapshot, generated by the plugin.
+	// This field MUST contain enough information to uniquely identify
+	// this specific snapshot vs all other group snapshots supported by
+	// this plugin.
+	// This field SHALL be used by the CO in subsequent calls to refer to
+	// this group snapshot.
+	// The SP is NOT responsible for global uniqueness of
+	// group_snapshot_id across multiple SPs.
+	// This field is REQUIRED.
+	GroupSnapshotId string
+	// A list of snapshots belonging to this group.
+	// This field is REQUIRED.
+	Snapshots []*Snapshot
+	// Timestamp of when the volume group snapshot was taken.
+	// This field is REQUIRED.
+	CreationTime *timestamppb.Timestamp
+	// Indicates if all individual snapshots in the group snapshot
+	// are ready to use as a `volume_content_source` in a
+	// `CreateVolumeRequest`. The default value is false.
+	// If any snapshot in the list of snapshots in this message have
+	// ready_to_use set to false, the SP MUST set this field to false.
+	// If all of the snapshots in the list of snapshots in this message
+	// have ready_to_use set to true, the SP SHOULD set this field to
+	// true.
+	// This field is REQUIRED.
+	ReadyToUse bool
+}
+
+func (b0 VolumeGroupSnapshot_builder) Build() *VolumeGroupSnapshot {
+	m0 := &VolumeGroupSnapshot{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.GroupSnapshotId = b.GroupSnapshotId
+	x.Snapshots = b.Snapshots
+	x.CreationTime = b.CreationTime
+	x.ReadyToUse = b.ReadyToUse
+	return m0
+}
+
+type DeleteVolumeGroupSnapshotRequest struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The ID of the group snapshot to be deleted.
 	// This field is REQUIRED.
 	GroupSnapshotId string `protobuf:"bytes,1,opt,name=group_snapshot_id,json=groupSnapshotId,proto3" json:"group_snapshot_id,omitempty"`
@@ -5501,16 +8192,16 @@ type DeleteVolumeGroupSnapshotRequest struct {
 	// section on how to use this field.
 	// The secrets provided in this field SHOULD be the same for
 	// all group snapshot operations on the same group snapshot.
-	Secrets map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Secrets       map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *DeleteVolumeGroupSnapshotRequest) Reset() {
 	*x = DeleteVolumeGroupSnapshotRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[68]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[68]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *DeleteVolumeGroupSnapshotRequest) String() string {
@@ -5521,7 +8212,7 @@ func (*DeleteVolumeGroupSnapshotRequest) ProtoMessage() {}
 
 func (x *DeleteVolumeGroupSnapshotRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[68]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -5531,11 +8222,6 @@ func (x *DeleteVolumeGroupSnapshotRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use DeleteVolumeGroupSnapshotRequest.ProtoReflect.Descriptor instead.
-func (*DeleteVolumeGroupSnapshotRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{68}
-}
-
 func (x *DeleteVolumeGroupSnapshotRequest) GetGroupSnapshotId() string {
 	if x != nil {
 		return x.GroupSnapshotId
@@ -5550,26 +8236,71 @@ func (x *DeleteVolumeGroupSnapshotRequest) GetSnapshotIds() []string {
 	return nil
 }
 
-func (x *DeleteVolumeGroupSnapshotRequest) GetSecrets() map[string]string {
-	if x != nil {
-		return x.Secrets
-	}
-	return nil
+func (x *DeleteVolumeGroupSnapshotRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.Secrets
+	}
+	return nil
+}
+
+func (x *DeleteVolumeGroupSnapshotRequest) SetGroupSnapshotId(v string) {
+	x.GroupSnapshotId = v
+}
+
+func (x *DeleteVolumeGroupSnapshotRequest) SetSnapshotIds(v []string) {
+	x.SnapshotIds = v
+}
+
+func (x *DeleteVolumeGroupSnapshotRequest) SetSecrets(v map[string]string) {
+	x.Secrets = v
+}
+
+type DeleteVolumeGroupSnapshotRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the group snapshot to be deleted.
+	// This field is REQUIRED.
+	GroupSnapshotId string
+	// A list of snapshot IDs that are part of this group snapshot.
+	// If SP does not need to rely on this field to delete the snapshots
+	// in the group, it SHOULD check this field and report an error
+	// if it has the ability to detect a mismatch.
+	// Some SPs require this list to delete the snapshots in the group.
+	// If SP needs to use this field to delete the snapshots in the
+	// group, it MUST report an error if it has the ability to detect
+	// a mismatch.
+	// This field is REQUIRED.
+	SnapshotIds []string
+	// Secrets required by plugin to complete group snapshot deletion
+	// request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	// The secrets provided in this field SHOULD be the same for
+	// all group snapshot operations on the same group snapshot.
+	Secrets map[string]string
+}
+
+func (b0 DeleteVolumeGroupSnapshotRequest_builder) Build() *DeleteVolumeGroupSnapshotRequest {
+	m0 := &DeleteVolumeGroupSnapshotRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.GroupSnapshotId = b.GroupSnapshotId
+	x.SnapshotIds = b.SnapshotIds
+	x.Secrets = b.Secrets
+	return m0
 }
 
 type DeleteVolumeGroupSnapshotResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"hybrid.v1"`
 	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *DeleteVolumeGroupSnapshotResponse) Reset() {
 	*x = DeleteVolumeGroupSnapshotResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[69]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[69]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *DeleteVolumeGroupSnapshotResponse) String() string {
@@ -5580,7 +8311,7 @@ func (*DeleteVolumeGroupSnapshotResponse) ProtoMessage() {}
 
 func (x *DeleteVolumeGroupSnapshotResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[69]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -5590,16 +8321,20 @@ func (x *DeleteVolumeGroupSnapshotResponse) ProtoReflect() protoreflect.Message
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use DeleteVolumeGroupSnapshotResponse.ProtoReflect.Descriptor instead.
-func (*DeleteVolumeGroupSnapshotResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{69}
+type DeleteVolumeGroupSnapshotResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
 }
 
-type GetVolumeGroupSnapshotRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (b0 DeleteVolumeGroupSnapshotResponse_builder) Build() *DeleteVolumeGroupSnapshotResponse {
+	m0 := &DeleteVolumeGroupSnapshotResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
 
+type GetVolumeGroupSnapshotRequest struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The ID of the group snapshot to fetch current group snapshot
 	// information for.
 	// This field is REQUIRED.
@@ -5620,16 +8355,16 @@ type GetVolumeGroupSnapshotRequest struct {
 	// section on how to use this field.
 	// The secrets provided in this field SHOULD be the same for
 	// all group snapshot operations on the same group snapshot.
-	Secrets map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Secrets       map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *GetVolumeGroupSnapshotRequest) Reset() {
 	*x = GetVolumeGroupSnapshotRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[70]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[70]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *GetVolumeGroupSnapshotRequest) String() string {
@@ -5640,7 +8375,7 @@ func (*GetVolumeGroupSnapshotRequest) ProtoMessage() {}
 
 func (x *GetVolumeGroupSnapshotRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[70]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -5650,11 +8385,6 @@ func (x *GetVolumeGroupSnapshotRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GetVolumeGroupSnapshotRequest.ProtoReflect.Descriptor instead.
-func (*GetVolumeGroupSnapshotRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{70}
-}
-
 func (x *GetVolumeGroupSnapshotRequest) GetGroupSnapshotId() string {
 	if x != nil {
 		return x.GroupSnapshotId
@@ -5676,22 +8406,67 @@ func (x *GetVolumeGroupSnapshotRequest) GetSecrets() map[string]string {
 	return nil
 }
 
-type GetVolumeGroupSnapshotResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *GetVolumeGroupSnapshotRequest) SetGroupSnapshotId(v string) {
+	x.GroupSnapshotId = v
+}
+
+func (x *GetVolumeGroupSnapshotRequest) SetSnapshotIds(v []string) {
+	x.SnapshotIds = v
+}
+
+func (x *GetVolumeGroupSnapshotRequest) SetSecrets(v map[string]string) {
+	x.Secrets = v
+}
+
+type GetVolumeGroupSnapshotRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the group snapshot to fetch current group snapshot
+	// information for.
+	// This field is REQUIRED.
+	GroupSnapshotId string
+	// A list of snapshot IDs that are part of this group snapshot.
+	// If SP does not need to rely on this field to get the snapshots
+	// in the group, it SHOULD check this field and report an error
+	// if it has the ability to detect a mismatch.
+	// Some SPs require this list to get the snapshots in the group.
+	// If SP needs to use this field to get the snapshots in the
+	// group, it MUST report an error if it has the ability to detect
+	// a mismatch.
+	// This field is REQUIRED.
+	SnapshotIds []string
+	// Secrets required by plugin to complete
+	// GetVolumeGroupSnapshot request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	// The secrets provided in this field SHOULD be the same for
+	// all group snapshot operations on the same group snapshot.
+	Secrets map[string]string
+}
+
+func (b0 GetVolumeGroupSnapshotRequest_builder) Build() *GetVolumeGroupSnapshotRequest {
+	m0 := &GetVolumeGroupSnapshotRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.GroupSnapshotId = b.GroupSnapshotId
+	x.SnapshotIds = b.SnapshotIds
+	x.Secrets = b.Secrets
+	return m0
+}
 
+type GetVolumeGroupSnapshotResponse struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// This field is REQUIRED
 	GroupSnapshot *VolumeGroupSnapshot `protobuf:"bytes,1,opt,name=group_snapshot,json=groupSnapshot,proto3" json:"group_snapshot,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *GetVolumeGroupSnapshotResponse) Reset() {
 	*x = GetVolumeGroupSnapshotResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[71]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[71]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *GetVolumeGroupSnapshotResponse) String() string {
@@ -5702,7 +8477,7 @@ func (*GetVolumeGroupSnapshotResponse) ProtoMessage() {}
 
 func (x *GetVolumeGroupSnapshotResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[71]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -5712,11 +8487,6 @@ func (x *GetVolumeGroupSnapshotResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GetVolumeGroupSnapshotResponse.ProtoReflect.Descriptor instead.
-func (*GetVolumeGroupSnapshotResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{71}
-}
-
 func (x *GetVolumeGroupSnapshotResponse) GetGroupSnapshot() *VolumeGroupSnapshot {
 	if x != nil {
 		return x.GroupSnapshot
@@ -5724,12 +8494,39 @@ func (x *GetVolumeGroupSnapshotResponse) GetGroupSnapshot() *VolumeGroupSnapshot
 	return nil
 }
 
+func (x *GetVolumeGroupSnapshotResponse) SetGroupSnapshot(v *VolumeGroupSnapshot) {
+	x.GroupSnapshot = v
+}
+
+func (x *GetVolumeGroupSnapshotResponse) HasGroupSnapshot() bool {
+	if x == nil {
+		return false
+	}
+	return x.GroupSnapshot != nil
+}
+
+func (x *GetVolumeGroupSnapshotResponse) ClearGroupSnapshot() {
+	x.GroupSnapshot = nil
+}
+
+type GetVolumeGroupSnapshotResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This field is REQUIRED
+	GroupSnapshot *VolumeGroupSnapshot
+}
+
+func (b0 GetVolumeGroupSnapshotResponse_builder) Build() *GetVolumeGroupSnapshotResponse {
+	m0 := &GetVolumeGroupSnapshotResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.GroupSnapshot = b.GroupSnapshot
+	return m0
+}
+
 // BlockMetadata specifies a data range.
 type BlockMetadata struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// This is the zero based byte position in the volume or snapshot,
 	// measured from the start of the object.
 	// This field is REQUIRED.
@@ -5737,16 +8534,16 @@ type BlockMetadata struct {
 	// This is the size of the data range.
 	// size_bytes MUST be greater than zero.
 	// This field is REQUIRED.
-	SizeBytes int64 `protobuf:"varint,2,opt,name=size_bytes,json=sizeBytes,proto3" json:"size_bytes,omitempty"`
+	SizeBytes     int64 `protobuf:"varint,2,opt,name=size_bytes,json=sizeBytes,proto3" json:"size_bytes,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *BlockMetadata) Reset() {
 	*x = BlockMetadata{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[72]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[72]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *BlockMetadata) String() string {
@@ -5757,7 +8554,7 @@ func (*BlockMetadata) ProtoMessage() {}
 
 func (x *BlockMetadata) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[72]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -5767,11 +8564,6 @@ func (x *BlockMetadata) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use BlockMetadata.ProtoReflect.Descriptor instead.
-func (*BlockMetadata) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{72}
-}
-
 func (x *BlockMetadata) GetByteOffset() int64 {
 	if x != nil {
 		return x.ByteOffset
@@ -5786,15 +8578,42 @@ func (x *BlockMetadata) GetSizeBytes() int64 {
 	return 0
 }
 
+func (x *BlockMetadata) SetByteOffset(v int64) {
+	x.ByteOffset = v
+}
+
+func (x *BlockMetadata) SetSizeBytes(v int64) {
+	x.SizeBytes = v
+}
+
+type BlockMetadata_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This is the zero based byte position in the volume or snapshot,
+	// measured from the start of the object.
+	// This field is REQUIRED.
+	ByteOffset int64
+	// This is the size of the data range.
+	// size_bytes MUST be greater than zero.
+	// This field is REQUIRED.
+	SizeBytes int64
+}
+
+func (b0 BlockMetadata_builder) Build() *BlockMetadata {
+	m0 := &BlockMetadata{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.ByteOffset = b.ByteOffset
+	x.SizeBytes = b.SizeBytes
+	return m0
+}
+
 // The GetMetadataAllocatedRequest message is used to solicit metadata
 // on the allocated blocks of a snapshot: i.e. this identifies the
 // data ranges that have valid data as they were the target of some
 // previous write operation on the volume.
 type GetMetadataAllocatedRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// This is the identifier of the snapshot.
 	// This field is REQUIRED.
 	SnapshotId string `protobuf:"bytes,1,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"`
@@ -5822,16 +8641,16 @@ type GetMetadataAllocatedRequest struct {
 	// Secrets required by plugin to complete the request.
 	// This field is OPTIONAL. Refer to the `Secrets Requirements`
 	// section on how to use this field.
-	Secrets map[string]string `protobuf:"bytes,4,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Secrets       map[string]string `protobuf:"bytes,4,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *GetMetadataAllocatedRequest) Reset() {
 	*x = GetMetadataAllocatedRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[73]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[73]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *GetMetadataAllocatedRequest) String() string {
@@ -5842,7 +8661,7 @@ func (*GetMetadataAllocatedRequest) ProtoMessage() {}
 
 func (x *GetMetadataAllocatedRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[73]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -5852,11 +8671,6 @@ func (x *GetMetadataAllocatedRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GetMetadataAllocatedRequest.ProtoReflect.Descriptor instead.
-func (*GetMetadataAllocatedRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{73}
-}
-
 func (x *GetMetadataAllocatedRequest) GetSnapshotId() string {
 	if x != nil {
 		return x.SnapshotId
@@ -5885,14 +8699,71 @@ func (x *GetMetadataAllocatedRequest) GetSecrets() map[string]string {
 	return nil
 }
 
+func (x *GetMetadataAllocatedRequest) SetSnapshotId(v string) {
+	x.SnapshotId = v
+}
+
+func (x *GetMetadataAllocatedRequest) SetStartingOffset(v int64) {
+	x.StartingOffset = v
+}
+
+func (x *GetMetadataAllocatedRequest) SetMaxResults(v int32) {
+	x.MaxResults = v
+}
+
+func (x *GetMetadataAllocatedRequest) SetSecrets(v map[string]string) {
+	x.Secrets = v
+}
+
+type GetMetadataAllocatedRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This is the identifier of the snapshot.
+	// This field is REQUIRED.
+	SnapshotId string
+	// This indicates the zero based starting byte position in the volume
+	// snapshot from which the result should be computed.
+	// It is intended to be used to continue a previously interrupted
+	// call.
+	// The CO SHOULD specify this value to be the offset of the byte
+	// position immediately after the last byte of the last data range
+	// received, if continuing an interrupted operation, or zero if not.
+	// The SP MUST ensure that the returned response stream does not
+	// contain BlockMetadata tuples that end before the requested
+	// starting_offset: i.e. if S is the requested starting_offset, and
+	// B0 is block_metadata[0] of the first message in the response
+	// stream, then (S < B0.byte_offset + B0.size_bytes) must be true.
+	// This field is REQUIRED.
+	StartingOffset int64
+	// This is an optional parameter, and if non-zero it specifies the
+	// maximum number of tuples to be returned in each
+	// GetMetadataAllocatedResponse message returned by the RPC stream.
+	// The plugin will determine an appropriate value if 0, and is
+	// always free to send less than the requested value.
+	// This field is OPTIONAL.
+	MaxResults int32
+	// Secrets required by plugin to complete the request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+}
+
+func (b0 GetMetadataAllocatedRequest_builder) Build() *GetMetadataAllocatedRequest {
+	m0 := &GetMetadataAllocatedRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.SnapshotId = b.SnapshotId
+	x.StartingOffset = b.StartingOffset
+	x.MaxResults = b.MaxResults
+	x.Secrets = b.Secrets
+	return m0
+}
+
 // GetMetadataAllocatedResponse messages are returned in a gRPC stream.
 // Cumulatively, they provide information on the allocated data
 // ranges in the snapshot.
 type GetMetadataAllocatedResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// This specifies the style used in the BlockMetadata sequence.
 	// This value must be the same in all such messages returned by
 	// the stream.
@@ -5919,15 +8790,15 @@ type GetMetadataAllocatedResponse struct {
 	// different GetMetadataAllocatedResponse messages in the gRPC stream.
 	// This field is OPTIONAL.
 	BlockMetadata []*BlockMetadata `protobuf:"bytes,3,rep,name=block_metadata,json=blockMetadata,proto3" json:"block_metadata,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *GetMetadataAllocatedResponse) Reset() {
 	*x = GetMetadataAllocatedResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[74]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[74]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *GetMetadataAllocatedResponse) String() string {
@@ -5938,7 +8809,7 @@ func (*GetMetadataAllocatedResponse) ProtoMessage() {}
 
 func (x *GetMetadataAllocatedResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[74]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -5948,11 +8819,6 @@ func (x *GetMetadataAllocatedResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GetMetadataAllocatedResponse.ProtoReflect.Descriptor instead.
-func (*GetMetadataAllocatedResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{74}
-}
-
 func (x *GetMetadataAllocatedResponse) GetBlockMetadataType() BlockMetadataType {
 	if x != nil {
 		return x.BlockMetadataType
@@ -5974,13 +8840,63 @@ func (x *GetMetadataAllocatedResponse) GetBlockMetadata() []*BlockMetadata {
 	return nil
 }
 
+func (x *GetMetadataAllocatedResponse) SetBlockMetadataType(v BlockMetadataType) {
+	x.BlockMetadataType = v
+}
+
+func (x *GetMetadataAllocatedResponse) SetVolumeCapacityBytes(v int64) {
+	x.VolumeCapacityBytes = v
+}
+
+func (x *GetMetadataAllocatedResponse) SetBlockMetadata(v []*BlockMetadata) {
+	x.BlockMetadata = v
+}
+
+type GetMetadataAllocatedResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This specifies the style used in the BlockMetadata sequence.
+	// This value must be the same in all such messages returned by
+	// the stream.
+	// If block_metadata_type is FIXED_LENGTH, then the size_bytes field
+	// of each message in the block_metadata list MUST be constant.
+	// This field is REQUIRED.
+	BlockMetadataType BlockMetadataType
+	// This returns the capacity of the underlying volume in bytes.
+	// This value must be the same in all such messages returned by
+	// the stream.
+	// This field is REQUIRED.
+	VolumeCapacityBytes int64
+	// This is a list of data range tuples.
+	// If the value of max_results in the GetMetadataAllocatedRequest
+	// message is greater than zero, then the number of entries in this
+	// list MUST be less than or equal to that value.
+	// The SP MUST respect the value of starting_offset in the request.
+	// The byte_offset fields of adjacent BlockMetadata messages
+	// MUST be strictly increasing and messages MUST NOT overlap:
+	// i.e. for any two BlockMetadata messages, A and B, if A is returned
+	// before B, then (A.byte_offset + A.size_bytes <= B.byte_offset)
+	// MUST be true.
+	// This MUST also be true if A and B are from block_metadata lists in
+	// different GetMetadataAllocatedResponse messages in the gRPC stream.
+	// This field is OPTIONAL.
+	BlockMetadata []*BlockMetadata
+}
+
+func (b0 GetMetadataAllocatedResponse_builder) Build() *GetMetadataAllocatedResponse {
+	m0 := &GetMetadataAllocatedResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.BlockMetadataType = b.BlockMetadataType
+	x.VolumeCapacityBytes = b.VolumeCapacityBytes
+	x.BlockMetadata = b.BlockMetadata
+	return m0
+}
+
 // The GetMetadataDeltaRequest message is used to solicit metadata on
 // the data ranges that have changed between two snapshots.
 type GetMetadataDeltaRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// This is the identifier of the snapshot against which changes
 	// are to be computed.
 	// This field is REQUIRED.
@@ -6013,16 +8929,16 @@ type GetMetadataDeltaRequest struct {
 	// Secrets required by plugin to complete the request.
 	// This field is OPTIONAL. Refer to the `Secrets Requirements`
 	// section on how to use this field.
-	Secrets map[string]string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Secrets       map[string]string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *GetMetadataDeltaRequest) Reset() {
 	*x = GetMetadataDeltaRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[75]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[75]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *GetMetadataDeltaRequest) String() string {
@@ -6033,7 +8949,7 @@ func (*GetMetadataDeltaRequest) ProtoMessage() {}
 
 func (x *GetMetadataDeltaRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[75]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -6043,11 +8959,6 @@ func (x *GetMetadataDeltaRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GetMetadataDeltaRequest.ProtoReflect.Descriptor instead.
-func (*GetMetadataDeltaRequest) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{75}
-}
-
 func (x *GetMetadataDeltaRequest) GetBaseSnapshotId() string {
 	if x != nil {
 		return x.BaseSnapshotId
@@ -6076,11 +8987,81 @@ func (x *GetMetadataDeltaRequest) GetMaxResults() int32 {
 	return 0
 }
 
-func (x *GetMetadataDeltaRequest) GetSecrets() map[string]string {
-	if x != nil {
-		return x.Secrets
-	}
-	return nil
+func (x *GetMetadataDeltaRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.Secrets
+	}
+	return nil
+}
+
+func (x *GetMetadataDeltaRequest) SetBaseSnapshotId(v string) {
+	x.BaseSnapshotId = v
+}
+
+func (x *GetMetadataDeltaRequest) SetTargetSnapshotId(v string) {
+	x.TargetSnapshotId = v
+}
+
+func (x *GetMetadataDeltaRequest) SetStartingOffset(v int64) {
+	x.StartingOffset = v
+}
+
+func (x *GetMetadataDeltaRequest) SetMaxResults(v int32) {
+	x.MaxResults = v
+}
+
+func (x *GetMetadataDeltaRequest) SetSecrets(v map[string]string) {
+	x.Secrets = v
+}
+
+type GetMetadataDeltaRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This is the identifier of the snapshot against which changes
+	// are to be computed.
+	// This field is REQUIRED.
+	BaseSnapshotId string
+	// This is the identifier of a second snapshot in the same volume,
+	// created after the base snapshot.
+	// This field is REQUIRED.
+	TargetSnapshotId string
+	// This indicates the zero based starting byte position in the volume
+	// snapshot from which the result should be computed.
+	// It is intended to be used to continue a previously interrupted
+	// call.
+	// The CO SHOULD specify this value to be the offset of the byte
+	// position immediately after the last byte of the last data range
+	// received, if continuing an interrupted operation, or zero if not.
+	// The SP MUST ensure that the returned response stream does not
+	// contain BlockMetadata tuples that end before the requested
+	// starting_offset: i.e. if S is the requested starting_offset, and
+	// B0 is block_metadata[0] of the first message in the response
+	// stream, then (S < B0.byte_offset + B0.size_bytes) must be true.
+	// This field is REQUIRED.
+	StartingOffset int64
+	// This is an optional parameter, and if non-zero it specifies the
+	// maximum number of tuples to be returned in each
+	// GetMetadataDeltaResponse message returned by the RPC stream.
+	// The plugin will determine an appropriate value if 0, and is
+	// always free to send less than the requested value.
+	// This field is OPTIONAL.
+	MaxResults int32
+	// Secrets required by plugin to complete the request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+}
+
+func (b0 GetMetadataDeltaRequest_builder) Build() *GetMetadataDeltaRequest {
+	m0 := &GetMetadataDeltaRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.BaseSnapshotId = b.BaseSnapshotId
+	x.TargetSnapshotId = b.TargetSnapshotId
+	x.StartingOffset = b.StartingOffset
+	x.MaxResults = b.MaxResults
+	x.Secrets = b.Secrets
+	return m0
 }
 
 // GetMetadataDeltaResponse messages are returned in a gRPC stream.
@@ -6088,10 +9069,7 @@ func (x *GetMetadataDeltaRequest) GetSecrets() map[string]string {
 // have changed between the base and target snapshots specified
 // in the GetMetadataDeltaRequest message.
 type GetMetadataDeltaResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// This specifies the style used in the BlockMetadata sequence.
 	// This value must be the same in all such messages returned by
 	// the stream.
@@ -6118,15 +9096,15 @@ type GetMetadataDeltaResponse struct {
 	// different GetMetadataDeltaResponse messages in the gRPC stream.
 	// This field is OPTIONAL.
 	BlockMetadata []*BlockMetadata `protobuf:"bytes,3,rep,name=block_metadata,json=blockMetadata,proto3" json:"block_metadata,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *GetMetadataDeltaResponse) Reset() {
 	*x = GetMetadataDeltaResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[76]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[76]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *GetMetadataDeltaResponse) String() string {
@@ -6137,7 +9115,7 @@ func (*GetMetadataDeltaResponse) ProtoMessage() {}
 
 func (x *GetMetadataDeltaResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[76]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -6147,11 +9125,6 @@ func (x *GetMetadataDeltaResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GetMetadataDeltaResponse.ProtoReflect.Descriptor instead.
-func (*GetMetadataDeltaResponse) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{76}
-}
-
 func (x *GetMetadataDeltaResponse) GetBlockMetadataType() BlockMetadataType {
 	if x != nil {
 		return x.BlockMetadataType
@@ -6173,21 +9146,71 @@ func (x *GetMetadataDeltaResponse) GetBlockMetadata() []*BlockMetadata {
 	return nil
 }
 
+func (x *GetMetadataDeltaResponse) SetBlockMetadataType(v BlockMetadataType) {
+	x.BlockMetadataType = v
+}
+
+func (x *GetMetadataDeltaResponse) SetVolumeCapacityBytes(v int64) {
+	x.VolumeCapacityBytes = v
+}
+
+func (x *GetMetadataDeltaResponse) SetBlockMetadata(v []*BlockMetadata) {
+	x.BlockMetadata = v
+}
+
+type GetMetadataDeltaResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This specifies the style used in the BlockMetadata sequence.
+	// This value must be the same in all such messages returned by
+	// the stream.
+	// If block_metadata_type is FIXED_LENGTH, then the size_bytes field
+	// of each message in the block_metadata list MUST be constant.
+	// This field is REQUIRED.
+	BlockMetadataType BlockMetadataType
+	// This returns the capacity of the underlying volume in bytes.
+	// This value must be the same in all such messages returned by
+	// the stream.
+	// This field is REQUIRED.
+	VolumeCapacityBytes int64
+	// This is a list of data range tuples.
+	// If the value of max_results in the GetMetadataDeltaRequest message
+	// is greater than zero, then the number of entries in this list MUST
+	// be less than or equal to that value.
+	// The SP MUST respect the value of starting_offset in the request.
+	// The byte_offset fields of adjacent BlockMetadata messages
+	// MUST be strictly increasing and messages MUST NOT overlap:
+	// i.e. for any two BlockMetadata messages, A and B, if A is returned
+	// before B, then (A.byte_offset + A.size_bytes <= B.byte_offset)
+	// MUST be true.
+	// This MUST also be true if A and B are from block_metadata lists in
+	// different GetMetadataDeltaResponse messages in the gRPC stream.
+	// This field is OPTIONAL.
+	BlockMetadata []*BlockMetadata
+}
+
+func (b0 GetMetadataDeltaResponse_builder) Build() *GetMetadataDeltaResponse {
+	m0 := &GetMetadataDeltaResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.BlockMetadataType = b.BlockMetadataType
+	x.VolumeCapacityBytes = b.VolumeCapacityBytes
+	x.BlockMetadata = b.BlockMetadata
+	return m0
+}
+
 type PluginCapability_Service struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState        `protogen:"hybrid.v1"`
+	Type          PluginCapability_Service_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csi.v1.PluginCapability_Service_Type" json:"type,omitempty"`
 	unknownFields protoimpl.UnknownFields
-
-	Type PluginCapability_Service_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csi.v1.PluginCapability_Service_Type" json:"type,omitempty"`
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *PluginCapability_Service) Reset() {
 	*x = PluginCapability_Service{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[78]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[78]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *PluginCapability_Service) String() string {
@@ -6198,7 +9221,7 @@ func (*PluginCapability_Service) ProtoMessage() {}
 
 func (x *PluginCapability_Service) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[78]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -6208,11 +9231,6 @@ func (x *PluginCapability_Service) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use PluginCapability_Service.ProtoReflect.Descriptor instead.
-func (*PluginCapability_Service) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{4, 0}
-}
-
 func (x *PluginCapability_Service) GetType() PluginCapability_Service_Type {
 	if x != nil {
 		return x.Type
@@ -6220,21 +9238,36 @@ func (x *PluginCapability_Service) GetType() PluginCapability_Service_Type {
 	return PluginCapability_Service_UNKNOWN
 }
 
+func (x *PluginCapability_Service) SetType(v PluginCapability_Service_Type) {
+	x.Type = v
+}
+
+type PluginCapability_Service_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	Type PluginCapability_Service_Type
+}
+
+func (b0 PluginCapability_Service_builder) Build() *PluginCapability_Service {
+	m0 := &PluginCapability_Service{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Type = b.Type
+	return m0
+}
+
 type PluginCapability_VolumeExpansion struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState                `protogen:"hybrid.v1"`
+	Type          PluginCapability_VolumeExpansion_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csi.v1.PluginCapability_VolumeExpansion_Type" json:"type,omitempty"`
 	unknownFields protoimpl.UnknownFields
-
-	Type PluginCapability_VolumeExpansion_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csi.v1.PluginCapability_VolumeExpansion_Type" json:"type,omitempty"`
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *PluginCapability_VolumeExpansion) Reset() {
 	*x = PluginCapability_VolumeExpansion{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[79]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[79]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *PluginCapability_VolumeExpansion) String() string {
@@ -6245,7 +9278,7 @@ func (*PluginCapability_VolumeExpansion) ProtoMessage() {}
 
 func (x *PluginCapability_VolumeExpansion) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[79]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -6255,11 +9288,6 @@ func (x *PluginCapability_VolumeExpansion) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use PluginCapability_VolumeExpansion.ProtoReflect.Descriptor instead.
-func (*PluginCapability_VolumeExpansion) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{4, 1}
-}
-
 func (x *PluginCapability_VolumeExpansion) GetType() PluginCapability_VolumeExpansion_Type {
 	if x != nil {
 		return x.Type
@@ -6267,25 +9295,40 @@ func (x *PluginCapability_VolumeExpansion) GetType() PluginCapability_VolumeExpa
 	return PluginCapability_VolumeExpansion_UNKNOWN
 }
 
-type VolumeContentSource_SnapshotSource struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *PluginCapability_VolumeExpansion) SetType(v PluginCapability_VolumeExpansion_Type) {
+	x.Type = v
+}
+
+type PluginCapability_VolumeExpansion_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	Type PluginCapability_VolumeExpansion_Type
+}
+
+func (b0 PluginCapability_VolumeExpansion_builder) Build() *PluginCapability_VolumeExpansion {
+	m0 := &PluginCapability_VolumeExpansion{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Type = b.Type
+	return m0
+}
 
+type VolumeContentSource_SnapshotSource struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// Contains identity information for the existing source snapshot.
 	// This field is REQUIRED. Plugin is REQUIRED to support creating
 	// volume from snapshot if it supports the capability
 	// CREATE_DELETE_SNAPSHOT.
-	SnapshotId string `protobuf:"bytes,1,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"`
+	SnapshotId    string `protobuf:"bytes,1,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *VolumeContentSource_SnapshotSource) Reset() {
 	*x = VolumeContentSource_SnapshotSource{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[83]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[83]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *VolumeContentSource_SnapshotSource) String() string {
@@ -6296,7 +9339,7 @@ func (*VolumeContentSource_SnapshotSource) ProtoMessage() {}
 
 func (x *VolumeContentSource_SnapshotSource) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[83]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -6306,11 +9349,6 @@ func (x *VolumeContentSource_SnapshotSource) ProtoReflect() protoreflect.Message
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use VolumeContentSource_SnapshotSource.ProtoReflect.Descriptor instead.
-func (*VolumeContentSource_SnapshotSource) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{8, 0}
-}
-
 func (x *VolumeContentSource_SnapshotSource) GetSnapshotId() string {
 	if x != nil {
 		return x.SnapshotId
@@ -6318,24 +9356,43 @@ func (x *VolumeContentSource_SnapshotSource) GetSnapshotId() string {
 	return ""
 }
 
-type VolumeContentSource_VolumeSource struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *VolumeContentSource_SnapshotSource) SetSnapshotId(v string) {
+	x.SnapshotId = v
+}
+
+type VolumeContentSource_SnapshotSource_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Contains identity information for the existing source snapshot.
+	// This field is REQUIRED. Plugin is REQUIRED to support creating
+	// volume from snapshot if it supports the capability
+	// CREATE_DELETE_SNAPSHOT.
+	SnapshotId string
+}
 
+func (b0 VolumeContentSource_SnapshotSource_builder) Build() *VolumeContentSource_SnapshotSource {
+	m0 := &VolumeContentSource_SnapshotSource{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.SnapshotId = b.SnapshotId
+	return m0
+}
+
+type VolumeContentSource_VolumeSource struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// Contains identity information for the existing source volume.
 	// This field is REQUIRED. Plugins reporting CLONE_VOLUME
 	// capability MUST support creating a volume from another volume.
-	VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
+	VolumeId      string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *VolumeContentSource_VolumeSource) Reset() {
 	*x = VolumeContentSource_VolumeSource{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[84]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[84]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *VolumeContentSource_VolumeSource) String() string {
@@ -6346,7 +9403,7 @@ func (*VolumeContentSource_VolumeSource) ProtoMessage() {}
 
 func (x *VolumeContentSource_VolumeSource) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[84]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -6356,11 +9413,6 @@ func (x *VolumeContentSource_VolumeSource) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use VolumeContentSource_VolumeSource.ProtoReflect.Descriptor instead.
-func (*VolumeContentSource_VolumeSource) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{8, 1}
-}
-
 func (x *VolumeContentSource_VolumeSource) GetVolumeId() string {
 	if x != nil {
 		return x.VolumeId
@@ -6368,20 +9420,39 @@ func (x *VolumeContentSource_VolumeSource) GetVolumeId() string {
 	return ""
 }
 
+func (x *VolumeContentSource_VolumeSource) SetVolumeId(v string) {
+	x.VolumeId = v
+}
+
+type VolumeContentSource_VolumeSource_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Contains identity information for the existing source volume.
+	// This field is REQUIRED. Plugins reporting CLONE_VOLUME
+	// capability MUST support creating a volume from another volume.
+	VolumeId string
+}
+
+func (b0 VolumeContentSource_VolumeSource_builder) Build() *VolumeContentSource_VolumeSource {
+	m0 := &VolumeContentSource_VolumeSource{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.VolumeId = b.VolumeId
+	return m0
+}
+
 // Indicate that the volume will be accessed via the block device API.
 type VolumeCapability_BlockVolume struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"hybrid.v1"`
 	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *VolumeCapability_BlockVolume) Reset() {
 	*x = VolumeCapability_BlockVolume{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[85]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[85]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *VolumeCapability_BlockVolume) String() string {
@@ -6392,7 +9463,7 @@ func (*VolumeCapability_BlockVolume) ProtoMessage() {}
 
 func (x *VolumeCapability_BlockVolume) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[85]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -6402,17 +9473,21 @@ func (x *VolumeCapability_BlockVolume) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use VolumeCapability_BlockVolume.ProtoReflect.Descriptor instead.
-func (*VolumeCapability_BlockVolume) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{10, 0}
+type VolumeCapability_BlockVolume_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 VolumeCapability_BlockVolume_builder) Build() *VolumeCapability_BlockVolume {
+	m0 := &VolumeCapability_BlockVolume{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
 }
 
 // Indicate that the volume will be accessed via the filesystem API.
 type VolumeCapability_MountVolume struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// The filesystem type. This field is OPTIONAL.
 	// An empty string is equal to an unspecified field value.
 	FsType string `protobuf:"bytes,1,opt,name=fs_type,json=fsType,proto3" json:"fs_type,omitempty"`
@@ -6434,15 +9509,15 @@ type VolumeCapability_MountVolume struct {
 	// both readable and writable by said mount group identifier.
 	// This is an OPTIONAL field.
 	VolumeMountGroup string `protobuf:"bytes,3,opt,name=volume_mount_group,json=volumeMountGroup,proto3" json:"volume_mount_group,omitempty"`
+	unknownFields    protoimpl.UnknownFields
+	sizeCache        protoimpl.SizeCache
 }
 
 func (x *VolumeCapability_MountVolume) Reset() {
 	*x = VolumeCapability_MountVolume{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[86]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[86]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *VolumeCapability_MountVolume) String() string {
@@ -6453,7 +9528,7 @@ func (*VolumeCapability_MountVolume) ProtoMessage() {}
 
 func (x *VolumeCapability_MountVolume) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[86]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -6463,11 +9538,6 @@ func (x *VolumeCapability_MountVolume) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use VolumeCapability_MountVolume.ProtoReflect.Descriptor instead.
-func (*VolumeCapability_MountVolume) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{10, 1}
-}
-
 func (x *VolumeCapability_MountVolume) GetFsType() string {
 	if x != nil {
 		return x.FsType
@@ -6489,23 +9559,68 @@ func (x *VolumeCapability_MountVolume) GetVolumeMountGroup() string {
 	return ""
 }
 
+func (x *VolumeCapability_MountVolume) SetFsType(v string) {
+	x.FsType = v
+}
+
+func (x *VolumeCapability_MountVolume) SetMountFlags(v []string) {
+	x.MountFlags = v
+}
+
+func (x *VolumeCapability_MountVolume) SetVolumeMountGroup(v string) {
+	x.VolumeMountGroup = v
+}
+
+type VolumeCapability_MountVolume_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The filesystem type. This field is OPTIONAL.
+	// An empty string is equal to an unspecified field value.
+	FsType string
+	// The mount options that can be used for the volume. This field is
+	// OPTIONAL. `mount_flags` MAY contain sensitive information.
+	// Therefore, the CO and the Plugin MUST NOT leak this information
+	// to untrusted entities. The total size of this repeated field
+	// SHALL NOT exceed 4 KiB.
+	MountFlags []string
+	// If SP has VOLUME_MOUNT_GROUP node capability and CO provides
+	// this field then SP MUST ensure that the volume_mount_group
+	// parameter is passed as the group identifier to the underlying
+	// operating system mount system call, with the understanding
+	// that the set of available mount call parameters and/or
+	// mount implementations may vary across operating systems.
+	// Additionally, new file and/or directory entries written to
+	// the underlying filesystem SHOULD be permission-labeled in such a
+	// manner, unless otherwise modified by a workload, that they are
+	// both readable and writable by said mount group identifier.
+	// This is an OPTIONAL field.
+	VolumeMountGroup string
+}
+
+func (b0 VolumeCapability_MountVolume_builder) Build() *VolumeCapability_MountVolume {
+	m0 := &VolumeCapability_MountVolume{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.FsType = b.FsType
+	x.MountFlags = b.MountFlags
+	x.VolumeMountGroup = b.VolumeMountGroup
+	return m0
+}
+
 // Specify how a volume can be accessed.
 type VolumeCapability_AccessMode struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// This field is REQUIRED.
-	Mode VolumeCapability_AccessMode_Mode `protobuf:"varint,1,opt,name=mode,proto3,enum=csi.v1.VolumeCapability_AccessMode_Mode" json:"mode,omitempty"`
+	Mode          VolumeCapability_AccessMode_Mode `protobuf:"varint,1,opt,name=mode,proto3,enum=csi.v1.VolumeCapability_AccessMode_Mode" json:"mode,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *VolumeCapability_AccessMode) Reset() {
 	*x = VolumeCapability_AccessMode{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[87]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[87]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *VolumeCapability_AccessMode) String() string {
@@ -6516,7 +9631,7 @@ func (*VolumeCapability_AccessMode) ProtoMessage() {}
 
 func (x *VolumeCapability_AccessMode) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[87]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -6526,11 +9641,6 @@ func (x *VolumeCapability_AccessMode) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use VolumeCapability_AccessMode.ProtoReflect.Descriptor instead.
-func (*VolumeCapability_AccessMode) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{10, 2}
-}
-
 func (x *VolumeCapability_AccessMode) GetMode() VolumeCapability_AccessMode_Mode {
 	if x != nil {
 		return x.Mode
@@ -6538,32 +9648,48 @@ func (x *VolumeCapability_AccessMode) GetMode() VolumeCapability_AccessMode_Mode
 	return VolumeCapability_AccessMode_UNKNOWN
 }
 
-type ValidateVolumeCapabilitiesResponse_Confirmed struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *VolumeCapability_AccessMode) SetMode(v VolumeCapability_AccessMode_Mode) {
+	x.Mode = v
+}
+
+type VolumeCapability_AccessMode_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This field is REQUIRED.
+	Mode VolumeCapability_AccessMode_Mode
+}
 
+func (b0 VolumeCapability_AccessMode_builder) Build() *VolumeCapability_AccessMode {
+	m0 := &VolumeCapability_AccessMode{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Mode = b.Mode
+	return m0
+}
+
+type ValidateVolumeCapabilitiesResponse_Confirmed struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// Volume context validated by the plugin.
 	// This field is OPTIONAL.
-	VolumeContext map[string]string `protobuf:"bytes,1,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	VolumeContext map[string]string `protobuf:"bytes,1,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 	// Volume capabilities supported by the plugin.
 	// This field is REQUIRED.
 	VolumeCapabilities []*VolumeCapability `protobuf:"bytes,2,rep,name=volume_capabilities,json=volumeCapabilities,proto3" json:"volume_capabilities,omitempty"`
 	// The volume creation parameters validated by the plugin.
 	// This field is OPTIONAL.
-	Parameters map[string]string `protobuf:"bytes,3,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Parameters map[string]string `protobuf:"bytes,3,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 	// The volume creation mutable_parameters validated by the plugin.
 	// This field is OPTIONAL.
-	MutableParameters map[string]string `protobuf:"bytes,4,rep,name=mutable_parameters,json=mutableParameters,proto3" json:"mutable_parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	MutableParameters map[string]string `protobuf:"bytes,4,rep,name=mutable_parameters,json=mutableParameters,proto3" json:"mutable_parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields     protoimpl.UnknownFields
+	sizeCache         protoimpl.SizeCache
 }
 
 func (x *ValidateVolumeCapabilitiesResponse_Confirmed) Reset() {
 	*x = ValidateVolumeCapabilitiesResponse_Confirmed{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[99]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[99]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ValidateVolumeCapabilitiesResponse_Confirmed) String() string {
@@ -6574,7 +9700,7 @@ func (*ValidateVolumeCapabilitiesResponse_Confirmed) ProtoMessage() {}
 
 func (x *ValidateVolumeCapabilitiesResponse_Confirmed) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[99]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -6584,11 +9710,6 @@ func (x *ValidateVolumeCapabilitiesResponse_Confirmed) ProtoReflect() protorefle
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ValidateVolumeCapabilitiesResponse_Confirmed.ProtoReflect.Descriptor instead.
-func (*ValidateVolumeCapabilitiesResponse_Confirmed) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{22, 0}
-}
-
 func (x *ValidateVolumeCapabilitiesResponse_Confirmed) GetVolumeContext() map[string]string {
 	if x != nil {
 		return x.VolumeContext
@@ -6617,11 +9738,52 @@ func (x *ValidateVolumeCapabilitiesResponse_Confirmed) GetMutableParameters() ma
 	return nil
 }
 
-type ListVolumesResponse_VolumeStatus struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *ValidateVolumeCapabilitiesResponse_Confirmed) SetVolumeContext(v map[string]string) {
+	x.VolumeContext = v
+}
+
+func (x *ValidateVolumeCapabilitiesResponse_Confirmed) SetVolumeCapabilities(v []*VolumeCapability) {
+	x.VolumeCapabilities = v
+}
+
+func (x *ValidateVolumeCapabilitiesResponse_Confirmed) SetParameters(v map[string]string) {
+	x.Parameters = v
+}
+
+func (x *ValidateVolumeCapabilitiesResponse_Confirmed) SetMutableParameters(v map[string]string) {
+	x.MutableParameters = v
+}
+
+type ValidateVolumeCapabilitiesResponse_Confirmed_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Volume context validated by the plugin.
+	// This field is OPTIONAL.
+	VolumeContext map[string]string
+	// Volume capabilities supported by the plugin.
+	// This field is REQUIRED.
+	VolumeCapabilities []*VolumeCapability
+	// The volume creation parameters validated by the plugin.
+	// This field is OPTIONAL.
+	Parameters map[string]string
+	// The volume creation mutable_parameters validated by the plugin.
+	// This field is OPTIONAL.
+	MutableParameters map[string]string
+}
+
+func (b0 ValidateVolumeCapabilitiesResponse_Confirmed_builder) Build() *ValidateVolumeCapabilitiesResponse_Confirmed {
+	m0 := &ValidateVolumeCapabilitiesResponse_Confirmed{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.VolumeContext = b.VolumeContext
+	x.VolumeCapabilities = b.VolumeCapabilities
+	x.Parameters = b.Parameters
+	x.MutableParameters = b.MutableParameters
+	return m0
+}
 
+type ListVolumesResponse_VolumeStatus struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// A list of all `node_id` of nodes that the volume in this entry
 	// is controller published on.
 	// This field is OPTIONAL. If it is not specified and the SP has
@@ -6638,15 +9800,15 @@ type ListVolumesResponse_VolumeStatus struct {
 	// This field MUST be specified if the
 	// VOLUME_CONDITION controller capability is supported.
 	VolumeCondition *VolumeCondition `protobuf:"bytes,2,opt,name=volume_condition,json=volumeCondition,proto3" json:"volume_condition,omitempty"`
+	unknownFields   protoimpl.UnknownFields
+	sizeCache       protoimpl.SizeCache
 }
 
 func (x *ListVolumesResponse_VolumeStatus) Reset() {
 	*x = ListVolumesResponse_VolumeStatus{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[103]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[103]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ListVolumesResponse_VolumeStatus) String() string {
@@ -6657,7 +9819,7 @@ func (*ListVolumesResponse_VolumeStatus) ProtoMessage() {}
 
 func (x *ListVolumesResponse_VolumeStatus) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[103]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -6667,11 +9829,6 @@ func (x *ListVolumesResponse_VolumeStatus) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ListVolumesResponse_VolumeStatus.ProtoReflect.Descriptor instead.
-func (*ListVolumesResponse_VolumeStatus) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{24, 0}
-}
-
 func (x *ListVolumesResponse_VolumeStatus) GetPublishedNodeIds() []string {
 	if x != nil {
 		return x.PublishedNodeIds
@@ -6679,33 +9836,79 @@ func (x *ListVolumesResponse_VolumeStatus) GetPublishedNodeIds() []string {
 	return nil
 }
 
-func (x *ListVolumesResponse_VolumeStatus) GetVolumeCondition() *VolumeCondition {
-	if x != nil {
-		return x.VolumeCondition
-	}
-	return nil
+func (x *ListVolumesResponse_VolumeStatus) GetVolumeCondition() *VolumeCondition {
+	if x != nil {
+		return x.VolumeCondition
+	}
+	return nil
+}
+
+func (x *ListVolumesResponse_VolumeStatus) SetPublishedNodeIds(v []string) {
+	x.PublishedNodeIds = v
+}
+
+func (x *ListVolumesResponse_VolumeStatus) SetVolumeCondition(v *VolumeCondition) {
+	x.VolumeCondition = v
+}
+
+func (x *ListVolumesResponse_VolumeStatus) HasVolumeCondition() bool {
+	if x == nil {
+		return false
+	}
+	return x.VolumeCondition != nil
+}
+
+func (x *ListVolumesResponse_VolumeStatus) ClearVolumeCondition() {
+	x.VolumeCondition = nil
+}
+
+type ListVolumesResponse_VolumeStatus_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// A list of all `node_id` of nodes that the volume in this entry
+	// is controller published on.
+	// This field is OPTIONAL. If it is not specified and the SP has
+	// the LIST_VOLUMES_PUBLISHED_NODES controller capability, the CO
+	// MAY assume the volume is not controller published to any nodes.
+	// If the field is not specified and the SP does not have the
+	// LIST_VOLUMES_PUBLISHED_NODES controller capability, the CO MUST
+	// not interpret this field.
+	// published_node_ids MAY include nodes not published to or
+	// reported by the SP. The CO MUST be resilient to that.
+	PublishedNodeIds []string
+	// Information about the current condition of the volume.
+	// This field is OPTIONAL.
+	// This field MUST be specified if the
+	// VOLUME_CONDITION controller capability is supported.
+	VolumeCondition *VolumeCondition
+}
+
+func (b0 ListVolumesResponse_VolumeStatus_builder) Build() *ListVolumesResponse_VolumeStatus {
+	m0 := &ListVolumesResponse_VolumeStatus{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.PublishedNodeIds = b.PublishedNodeIds
+	x.VolumeCondition = b.VolumeCondition
+	return m0
 }
 
 type ListVolumesResponse_Entry struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// This field is REQUIRED
 	Volume *Volume `protobuf:"bytes,1,opt,name=volume,proto3" json:"volume,omitempty"`
 	// This field is OPTIONAL. This field MUST be specified if the
 	// LIST_VOLUMES_PUBLISHED_NODES controller capability is
 	// supported.
-	Status *ListVolumesResponse_VolumeStatus `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`
+	Status        *ListVolumesResponse_VolumeStatus `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *ListVolumesResponse_Entry) Reset() {
 	*x = ListVolumesResponse_Entry{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[104]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[104]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ListVolumesResponse_Entry) String() string {
@@ -6716,7 +9919,7 @@ func (*ListVolumesResponse_Entry) ProtoMessage() {}
 
 func (x *ListVolumesResponse_Entry) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[104]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -6726,11 +9929,6 @@ func (x *ListVolumesResponse_Entry) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ListVolumesResponse_Entry.ProtoReflect.Descriptor instead.
-func (*ListVolumesResponse_Entry) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{24, 1}
-}
-
 func (x *ListVolumesResponse_Entry) GetVolume() *Volume {
 	if x != nil {
 		return x.Volume
@@ -6745,11 +9943,58 @@ func (x *ListVolumesResponse_Entry) GetStatus() *ListVolumesResponse_VolumeStatu
 	return nil
 }
 
-type ControllerGetVolumeResponse_VolumeStatus struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *ListVolumesResponse_Entry) SetVolume(v *Volume) {
+	x.Volume = v
+}
+
+func (x *ListVolumesResponse_Entry) SetStatus(v *ListVolumesResponse_VolumeStatus) {
+	x.Status = v
+}
+
+func (x *ListVolumesResponse_Entry) HasVolume() bool {
+	if x == nil {
+		return false
+	}
+	return x.Volume != nil
+}
+
+func (x *ListVolumesResponse_Entry) HasStatus() bool {
+	if x == nil {
+		return false
+	}
+	return x.Status != nil
+}
+
+func (x *ListVolumesResponse_Entry) ClearVolume() {
+	x.Volume = nil
+}
+
+func (x *ListVolumesResponse_Entry) ClearStatus() {
+	x.Status = nil
+}
 
+type ListVolumesResponse_Entry_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This field is REQUIRED
+	Volume *Volume
+	// This field is OPTIONAL. This field MUST be specified if the
+	// LIST_VOLUMES_PUBLISHED_NODES controller capability is
+	// supported.
+	Status *ListVolumesResponse_VolumeStatus
+}
+
+func (b0 ListVolumesResponse_Entry_builder) Build() *ListVolumesResponse_Entry {
+	m0 := &ListVolumesResponse_Entry{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Volume = b.Volume
+	x.Status = b.Status
+	return m0
+}
+
+type ControllerGetVolumeResponse_VolumeStatus struct {
+	state protoimpl.MessageState `protogen:"hybrid.v1"`
 	// A list of all the `node_id` of nodes that this volume is
 	// controller published on.
 	// This field is OPTIONAL.
@@ -6763,15 +10008,15 @@ type ControllerGetVolumeResponse_VolumeStatus struct {
 	// This field MUST be specified if the
 	// VOLUME_CONDITION controller capability is supported.
 	VolumeCondition *VolumeCondition `protobuf:"bytes,2,opt,name=volume_condition,json=volumeCondition,proto3" json:"volume_condition,omitempty"`
+	unknownFields   protoimpl.UnknownFields
+	sizeCache       protoimpl.SizeCache
 }
 
 func (x *ControllerGetVolumeResponse_VolumeStatus) Reset() {
 	*x = ControllerGetVolumeResponse_VolumeStatus{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[105]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[105]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ControllerGetVolumeResponse_VolumeStatus) String() string {
@@ -6782,7 +10027,7 @@ func (*ControllerGetVolumeResponse_VolumeStatus) ProtoMessage() {}
 
 func (x *ControllerGetVolumeResponse_VolumeStatus) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[105]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -6792,11 +10037,6 @@ func (x *ControllerGetVolumeResponse_VolumeStatus) ProtoReflect() protoreflect.M
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ControllerGetVolumeResponse_VolumeStatus.ProtoReflect.Descriptor instead.
-func (*ControllerGetVolumeResponse_VolumeStatus) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{26, 0}
-}
-
 func (x *ControllerGetVolumeResponse_VolumeStatus) GetPublishedNodeIds() []string {
 	if x != nil {
 		return x.PublishedNodeIds
@@ -6811,21 +10051,64 @@ func (x *ControllerGetVolumeResponse_VolumeStatus) GetVolumeCondition() *VolumeC
 	return nil
 }
 
+func (x *ControllerGetVolumeResponse_VolumeStatus) SetPublishedNodeIds(v []string) {
+	x.PublishedNodeIds = v
+}
+
+func (x *ControllerGetVolumeResponse_VolumeStatus) SetVolumeCondition(v *VolumeCondition) {
+	x.VolumeCondition = v
+}
+
+func (x *ControllerGetVolumeResponse_VolumeStatus) HasVolumeCondition() bool {
+	if x == nil {
+		return false
+	}
+	return x.VolumeCondition != nil
+}
+
+func (x *ControllerGetVolumeResponse_VolumeStatus) ClearVolumeCondition() {
+	x.VolumeCondition = nil
+}
+
+type ControllerGetVolumeResponse_VolumeStatus_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// A list of all the `node_id` of nodes that this volume is
+	// controller published on.
+	// This field is OPTIONAL.
+	// This field MUST be specified if the LIST_VOLUMES_PUBLISHED_NODES
+	// controller capability is supported.
+	// published_node_ids MAY include nodes not published to or
+	// reported by the SP. The CO MUST be resilient to that.
+	PublishedNodeIds []string
+	// Information about the current condition of the volume.
+	// This field is OPTIONAL.
+	// This field MUST be specified if the
+	// VOLUME_CONDITION controller capability is supported.
+	VolumeCondition *VolumeCondition
+}
+
+func (b0 ControllerGetVolumeResponse_VolumeStatus_builder) Build() *ControllerGetVolumeResponse_VolumeStatus {
+	m0 := &ControllerGetVolumeResponse_VolumeStatus{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.PublishedNodeIds = b.PublishedNodeIds
+	x.VolumeCondition = b.VolumeCondition
+	return m0
+}
+
 type ControllerServiceCapability_RPC struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState               `protogen:"hybrid.v1"`
+	Type          ControllerServiceCapability_RPC_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csi.v1.ControllerServiceCapability_RPC_Type" json:"type,omitempty"`
 	unknownFields protoimpl.UnknownFields
-
-	Type ControllerServiceCapability_RPC_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csi.v1.ControllerServiceCapability_RPC_Type" json:"type,omitempty"`
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *ControllerServiceCapability_RPC) Reset() {
 	*x = ControllerServiceCapability_RPC{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[109]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[109]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ControllerServiceCapability_RPC) String() string {
@@ -6836,7 +10119,7 @@ func (*ControllerServiceCapability_RPC) ProtoMessage() {}
 
 func (x *ControllerServiceCapability_RPC) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[109]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -6846,11 +10129,6 @@ func (x *ControllerServiceCapability_RPC) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ControllerServiceCapability_RPC.ProtoReflect.Descriptor instead.
-func (*ControllerServiceCapability_RPC) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{33, 0}
-}
-
 func (x *ControllerServiceCapability_RPC) GetType() ControllerServiceCapability_RPC_Type {
 	if x != nil {
 		return x.Type
@@ -6858,21 +10136,36 @@ func (x *ControllerServiceCapability_RPC) GetType() ControllerServiceCapability_
 	return ControllerServiceCapability_RPC_UNKNOWN
 }
 
+func (x *ControllerServiceCapability_RPC) SetType(v ControllerServiceCapability_RPC_Type) {
+	x.Type = v
+}
+
+type ControllerServiceCapability_RPC_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	Type ControllerServiceCapability_RPC_Type
+}
+
+func (b0 ControllerServiceCapability_RPC_builder) Build() *ControllerServiceCapability_RPC {
+	m0 := &ControllerServiceCapability_RPC{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Type = b.Type
+	return m0
+}
+
 type ListSnapshotsResponse_Entry struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"hybrid.v1"`
+	Snapshot      *Snapshot              `protobuf:"bytes,1,opt,name=snapshot,proto3" json:"snapshot,omitempty"`
 	unknownFields protoimpl.UnknownFields
-
-	Snapshot *Snapshot `protobuf:"bytes,1,opt,name=snapshot,proto3" json:"snapshot,omitempty"`
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *ListSnapshotsResponse_Entry) Reset() {
 	*x = ListSnapshotsResponse_Entry{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[114]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[114]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ListSnapshotsResponse_Entry) String() string {
@@ -6883,7 +10176,7 @@ func (*ListSnapshotsResponse_Entry) ProtoMessage() {}
 
 func (x *ListSnapshotsResponse_Entry) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[114]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -6893,11 +10186,6 @@ func (x *ListSnapshotsResponse_Entry) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ListSnapshotsResponse_Entry.ProtoReflect.Descriptor instead.
-func (*ListSnapshotsResponse_Entry) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{40, 0}
-}
-
 func (x *ListSnapshotsResponse_Entry) GetSnapshot() *Snapshot {
 	if x != nil {
 		return x.Snapshot
@@ -6905,21 +10193,47 @@ func (x *ListSnapshotsResponse_Entry) GetSnapshot() *Snapshot {
 	return nil
 }
 
+func (x *ListSnapshotsResponse_Entry) SetSnapshot(v *Snapshot) {
+	x.Snapshot = v
+}
+
+func (x *ListSnapshotsResponse_Entry) HasSnapshot() bool {
+	if x == nil {
+		return false
+	}
+	return x.Snapshot != nil
+}
+
+func (x *ListSnapshotsResponse_Entry) ClearSnapshot() {
+	x.Snapshot = nil
+}
+
+type ListSnapshotsResponse_Entry_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	Snapshot *Snapshot
+}
+
+func (b0 ListSnapshotsResponse_Entry_builder) Build() *ListSnapshotsResponse_Entry {
+	m0 := &ListSnapshotsResponse_Entry{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Snapshot = b.Snapshot
+	return m0
+}
+
 type NodeServiceCapability_RPC struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState         `protogen:"hybrid.v1"`
+	Type          NodeServiceCapability_RPC_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csi.v1.NodeServiceCapability_RPC_Type" json:"type,omitempty"`
 	unknownFields protoimpl.UnknownFields
-
-	Type NodeServiceCapability_RPC_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csi.v1.NodeServiceCapability_RPC_Type" json:"type,omitempty"`
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *NodeServiceCapability_RPC) Reset() {
 	*x = NodeServiceCapability_RPC{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[122]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[122]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *NodeServiceCapability_RPC) String() string {
@@ -6930,7 +10244,7 @@ func (*NodeServiceCapability_RPC) ProtoMessage() {}
 
 func (x *NodeServiceCapability_RPC) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[122]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -6940,11 +10254,6 @@ func (x *NodeServiceCapability_RPC) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use NodeServiceCapability_RPC.ProtoReflect.Descriptor instead.
-func (*NodeServiceCapability_RPC) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{57, 0}
-}
-
 func (x *NodeServiceCapability_RPC) GetType() NodeServiceCapability_RPC_Type {
 	if x != nil {
 		return x.Type
@@ -6952,21 +10261,36 @@ func (x *NodeServiceCapability_RPC) GetType() NodeServiceCapability_RPC_Type {
 	return NodeServiceCapability_RPC_UNKNOWN
 }
 
+func (x *NodeServiceCapability_RPC) SetType(v NodeServiceCapability_RPC_Type) {
+	x.Type = v
+}
+
+type NodeServiceCapability_RPC_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	Type NodeServiceCapability_RPC_Type
+}
+
+func (b0 NodeServiceCapability_RPC_builder) Build() *NodeServiceCapability_RPC {
+	m0 := &NodeServiceCapability_RPC{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Type = b.Type
+	return m0
+}
+
 type GroupControllerServiceCapability_RPC struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState                    `protogen:"hybrid.v1"`
+	Type          GroupControllerServiceCapability_RPC_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csi.v1.GroupControllerServiceCapability_RPC_Type" json:"type,omitempty"`
 	unknownFields protoimpl.UnknownFields
-
-	Type GroupControllerServiceCapability_RPC_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csi.v1.GroupControllerServiceCapability_RPC_Type" json:"type,omitempty"`
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *GroupControllerServiceCapability_RPC) Reset() {
 	*x = GroupControllerServiceCapability_RPC{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_csi_proto_msgTypes[124]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_csi_proto_msgTypes[124]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *GroupControllerServiceCapability_RPC) String() string {
@@ -6977,7 +10301,7 @@ func (*GroupControllerServiceCapability_RPC) ProtoMessage() {}
 
 func (x *GroupControllerServiceCapability_RPC) ProtoReflect() protoreflect.Message {
 	mi := &file_csi_proto_msgTypes[124]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -6987,11 +10311,6 @@ func (x *GroupControllerServiceCapability_RPC) ProtoReflect() protoreflect.Messa
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GroupControllerServiceCapability_RPC.ProtoReflect.Descriptor instead.
-func (*GroupControllerServiceCapability_RPC) Descriptor() ([]byte, []int) {
-	return file_csi_proto_rawDescGZIP(), []int{64, 0}
-}
-
 func (x *GroupControllerServiceCapability_RPC) GetType() GroupControllerServiceCapability_RPC_Type {
 	if x != nil {
 		return x.Type
@@ -6999,6 +10318,24 @@ func (x *GroupControllerServiceCapability_RPC) GetType() GroupControllerServiceC
 	return GroupControllerServiceCapability_RPC_UNKNOWN
 }
 
+func (x *GroupControllerServiceCapability_RPC) SetType(v GroupControllerServiceCapability_RPC_Type) {
+	x.Type = v
+}
+
+type GroupControllerServiceCapability_RPC_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	Type GroupControllerServiceCapability_RPC_Type
+}
+
+func (b0 GroupControllerServiceCapability_RPC_builder) Build() *GroupControllerServiceCapability_RPC {
+	m0 := &GroupControllerServiceCapability_RPC{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.Type = b.Type
+	return m0
+}
+
 var file_csi_proto_extTypes = []protoimpl.ExtensionInfo{
 	{
 		ExtendedType:  (*descriptorpb.EnumOptions)(nil),
@@ -8414,21 +11751,9 @@ var file_csi_proto_rawDesc = []byte{
 	0x67, 0x6f, 0x2f, 0x63, 0x73, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
-var (
-	file_csi_proto_rawDescOnce sync.Once
-	file_csi_proto_rawDescData = file_csi_proto_rawDesc
-)
-
-func file_csi_proto_rawDescGZIP() []byte {
-	file_csi_proto_rawDescOnce.Do(func() {
-		file_csi_proto_rawDescData = protoimpl.X.CompressGZIP(file_csi_proto_rawDescData)
-	})
-	return file_csi_proto_rawDescData
-}
-
 var file_csi_proto_enumTypes = make([]protoimpl.EnumInfo, 8)
 var file_csi_proto_msgTypes = make([]protoimpl.MessageInfo, 131)
-var file_csi_proto_goTypes = []interface{}{
+var file_csi_proto_goTypes = []any{
 	(BlockMetadataType)(0),                               // 0: csi.v1.BlockMetadataType
 	(PluginCapability_Service_Type)(0),                   // 1: csi.v1.PluginCapability.Service.Type
 	(PluginCapability_VolumeExpansion_Type)(0),           // 2: csi.v1.PluginCapability.VolumeExpansion.Type
@@ -8766,1131 +12091,25 @@ func file_csi_proto_init() {
 	if File_csi_proto != nil {
 		return
 	}
-	if !protoimpl.UnsafeEnabled {
-		file_csi_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetPluginInfoRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetPluginInfoResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetPluginCapabilitiesRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetPluginCapabilitiesResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*PluginCapability); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ProbeRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ProbeResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CreateVolumeRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*VolumeContentSource); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CreateVolumeResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*VolumeCapability); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CapacityRange); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Volume); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TopologyRequirement); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Topology); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DeleteVolumeRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DeleteVolumeResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ControllerPublishVolumeRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ControllerPublishVolumeResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ControllerUnpublishVolumeRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ControllerUnpublishVolumeResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ValidateVolumeCapabilitiesRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ValidateVolumeCapabilitiesResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ListVolumesRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ListVolumesResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ControllerGetVolumeRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ControllerGetVolumeResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ControllerModifyVolumeRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ControllerModifyVolumeResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetCapacityRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetCapacityResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ControllerGetCapabilitiesRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ControllerGetCapabilitiesResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ControllerServiceCapability); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CreateSnapshotRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CreateSnapshotResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Snapshot); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DeleteSnapshotRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DeleteSnapshotResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ListSnapshotsRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ListSnapshotsResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ControllerExpandVolumeRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ControllerExpandVolumeResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*NodeStageVolumeRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*NodeStageVolumeResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*NodeUnstageVolumeRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*NodeUnstageVolumeResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*NodePublishVolumeRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*NodePublishVolumeResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*NodeUnpublishVolumeRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*NodeUnpublishVolumeResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*NodeGetVolumeStatsRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*NodeGetVolumeStatsResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*VolumeUsage); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*VolumeCondition); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*NodeGetCapabilitiesRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*NodeGetCapabilitiesResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*NodeServiceCapability); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*NodeGetInfoRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*NodeGetInfoResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*NodeExpandVolumeRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*NodeExpandVolumeResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GroupControllerGetCapabilitiesRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GroupControllerGetCapabilitiesResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GroupControllerServiceCapability); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CreateVolumeGroupSnapshotRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CreateVolumeGroupSnapshotResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*VolumeGroupSnapshot); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DeleteVolumeGroupSnapshotRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DeleteVolumeGroupSnapshotResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetVolumeGroupSnapshotRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetVolumeGroupSnapshotResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*BlockMetadata); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetMetadataAllocatedRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetMetadataAllocatedResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetMetadataDeltaRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetMetadataDeltaResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*PluginCapability_Service); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*PluginCapability_VolumeExpansion); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*VolumeContentSource_SnapshotSource); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*VolumeContentSource_VolumeSource); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*VolumeCapability_BlockVolume); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*VolumeCapability_MountVolume); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*VolumeCapability_AccessMode); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ValidateVolumeCapabilitiesResponse_Confirmed); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ListVolumesResponse_VolumeStatus); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ListVolumesResponse_Entry); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ControllerGetVolumeResponse_VolumeStatus); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ControllerServiceCapability_RPC); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ListSnapshotsResponse_Entry); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[122].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*NodeServiceCapability_RPC); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_csi_proto_msgTypes[124].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GroupControllerServiceCapability_RPC); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-	}
-	file_csi_proto_msgTypes[4].OneofWrappers = []interface{}{
+	file_csi_proto_msgTypes[4].OneofWrappers = []any{
 		(*PluginCapability_Service_)(nil),
 		(*PluginCapability_VolumeExpansion_)(nil),
 	}
-	file_csi_proto_msgTypes[8].OneofWrappers = []interface{}{
+	file_csi_proto_msgTypes[8].OneofWrappers = []any{
 		(*VolumeContentSource_Snapshot)(nil),
 		(*VolumeContentSource_Volume)(nil),
 	}
-	file_csi_proto_msgTypes[10].OneofWrappers = []interface{}{
+	file_csi_proto_msgTypes[10].OneofWrappers = []any{
 		(*VolumeCapability_Block)(nil),
 		(*VolumeCapability_Mount)(nil),
 	}
-	file_csi_proto_msgTypes[33].OneofWrappers = []interface{}{
+	file_csi_proto_msgTypes[33].OneofWrappers = []any{
 		(*ControllerServiceCapability_Rpc)(nil),
 	}
-	file_csi_proto_msgTypes[57].OneofWrappers = []interface{}{
+	file_csi_proto_msgTypes[57].OneofWrappers = []any{
 		(*NodeServiceCapability_Rpc)(nil),
 	}
-	file_csi_proto_msgTypes[64].OneofWrappers = []interface{}{
+	file_csi_proto_msgTypes[64].OneofWrappers = []any{
 		(*GroupControllerServiceCapability_Rpc)(nil),
 	}
 	type x struct{}
diff --git a/lib/go/csi/csi_grpc.pb.go b/lib/go/csi/csi_grpc.pb.go
index 8d709194..862aede9 100644
--- a/lib/go/csi/csi_grpc.pb.go
+++ b/lib/go/csi/csi_grpc.pb.go
@@ -2,8 +2,8 @@
 
 // Code generated by protoc-gen-go-grpc. DO NOT EDIT.
 // versions:
-// - protoc-gen-go-grpc v1.3.0
-// - protoc             v4.25.2
+// - protoc-gen-go-grpc v1.5.1
+// - protoc             v5.29.2
 // source: csi.proto
 
 package csi
@@ -17,8 +17,8 @@ import (
 
 // This is a compile-time assertion to ensure that this generated file
 // is compatible with the grpc package it is being compiled against.
-// Requires gRPC-Go v1.32.0 or later.
-const _ = grpc.SupportPackageIsVersion7
+// Requires gRPC-Go v1.64.0 or later.
+const _ = grpc.SupportPackageIsVersion9
 
 const (
 	Identity_GetPluginInfo_FullMethodName         = "/csi.v1.Identity/GetPluginInfo"
@@ -44,8 +44,9 @@ func NewIdentityClient(cc grpc.ClientConnInterface) IdentityClient {
 }
 
 func (c *identityClient) GetPluginInfo(ctx context.Context, in *GetPluginInfoRequest, opts ...grpc.CallOption) (*GetPluginInfoResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(GetPluginInfoResponse)
-	err := c.cc.Invoke(ctx, Identity_GetPluginInfo_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Identity_GetPluginInfo_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -53,8 +54,9 @@ func (c *identityClient) GetPluginInfo(ctx context.Context, in *GetPluginInfoReq
 }
 
 func (c *identityClient) GetPluginCapabilities(ctx context.Context, in *GetPluginCapabilitiesRequest, opts ...grpc.CallOption) (*GetPluginCapabilitiesResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(GetPluginCapabilitiesResponse)
-	err := c.cc.Invoke(ctx, Identity_GetPluginCapabilities_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Identity_GetPluginCapabilities_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -62,8 +64,9 @@ func (c *identityClient) GetPluginCapabilities(ctx context.Context, in *GetPlugi
 }
 
 func (c *identityClient) Probe(ctx context.Context, in *ProbeRequest, opts ...grpc.CallOption) (*ProbeResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(ProbeResponse)
-	err := c.cc.Invoke(ctx, Identity_Probe_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Identity_Probe_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -72,7 +75,7 @@ func (c *identityClient) Probe(ctx context.Context, in *ProbeRequest, opts ...gr
 
 // IdentityServer is the server API for Identity service.
 // All implementations must embed UnimplementedIdentityServer
-// for forward compatibility
+// for forward compatibility.
 type IdentityServer interface {
 	GetPluginInfo(context.Context, *GetPluginInfoRequest) (*GetPluginInfoResponse, error)
 	GetPluginCapabilities(context.Context, *GetPluginCapabilitiesRequest) (*GetPluginCapabilitiesResponse, error)
@@ -80,9 +83,12 @@ type IdentityServer interface {
 	mustEmbedUnimplementedIdentityServer()
 }
 
-// UnimplementedIdentityServer must be embedded to have forward compatible implementations.
-type UnimplementedIdentityServer struct {
-}
+// UnimplementedIdentityServer must be embedded to have
+// forward compatible implementations.
+//
+// NOTE: this should be embedded by value instead of pointer to avoid a nil
+// pointer dereference when methods are called.
+type UnimplementedIdentityServer struct{}
 
 func (UnimplementedIdentityServer) GetPluginInfo(context.Context, *GetPluginInfoRequest) (*GetPluginInfoResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method GetPluginInfo not implemented")
@@ -94,6 +100,7 @@ func (UnimplementedIdentityServer) Probe(context.Context, *ProbeRequest) (*Probe
 	return nil, status.Errorf(codes.Unimplemented, "method Probe not implemented")
 }
 func (UnimplementedIdentityServer) mustEmbedUnimplementedIdentityServer() {}
+func (UnimplementedIdentityServer) testEmbeddedByValue()                  {}
 
 // UnsafeIdentityServer may be embedded to opt out of forward compatibility for this service.
 // Use of this interface is not recommended, as added methods to IdentityServer will
@@ -103,6 +110,13 @@ type UnsafeIdentityServer interface {
 }
 
 func RegisterIdentityServer(s grpc.ServiceRegistrar, srv IdentityServer) {
+	// If the following call pancis, it indicates UnimplementedIdentityServer was
+	// embedded by pointer and is nil.  This will cause panics if an
+	// unimplemented method is ever invoked, so we test this at initialization
+	// time to prevent it from happening at runtime later due to I/O.
+	if t, ok := srv.(interface{ testEmbeddedByValue() }); ok {
+		t.testEmbeddedByValue()
+	}
 	s.RegisterService(&Identity_ServiceDesc, srv)
 }
 
@@ -230,8 +244,9 @@ func NewControllerClient(cc grpc.ClientConnInterface) ControllerClient {
 }
 
 func (c *controllerClient) CreateVolume(ctx context.Context, in *CreateVolumeRequest, opts ...grpc.CallOption) (*CreateVolumeResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(CreateVolumeResponse)
-	err := c.cc.Invoke(ctx, Controller_CreateVolume_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Controller_CreateVolume_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -239,8 +254,9 @@ func (c *controllerClient) CreateVolume(ctx context.Context, in *CreateVolumeReq
 }
 
 func (c *controllerClient) DeleteVolume(ctx context.Context, in *DeleteVolumeRequest, opts ...grpc.CallOption) (*DeleteVolumeResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(DeleteVolumeResponse)
-	err := c.cc.Invoke(ctx, Controller_DeleteVolume_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Controller_DeleteVolume_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -248,8 +264,9 @@ func (c *controllerClient) DeleteVolume(ctx context.Context, in *DeleteVolumeReq
 }
 
 func (c *controllerClient) ControllerPublishVolume(ctx context.Context, in *ControllerPublishVolumeRequest, opts ...grpc.CallOption) (*ControllerPublishVolumeResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(ControllerPublishVolumeResponse)
-	err := c.cc.Invoke(ctx, Controller_ControllerPublishVolume_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Controller_ControllerPublishVolume_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -257,8 +274,9 @@ func (c *controllerClient) ControllerPublishVolume(ctx context.Context, in *Cont
 }
 
 func (c *controllerClient) ControllerUnpublishVolume(ctx context.Context, in *ControllerUnpublishVolumeRequest, opts ...grpc.CallOption) (*ControllerUnpublishVolumeResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(ControllerUnpublishVolumeResponse)
-	err := c.cc.Invoke(ctx, Controller_ControllerUnpublishVolume_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Controller_ControllerUnpublishVolume_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -266,8 +284,9 @@ func (c *controllerClient) ControllerUnpublishVolume(ctx context.Context, in *Co
 }
 
 func (c *controllerClient) ValidateVolumeCapabilities(ctx context.Context, in *ValidateVolumeCapabilitiesRequest, opts ...grpc.CallOption) (*ValidateVolumeCapabilitiesResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(ValidateVolumeCapabilitiesResponse)
-	err := c.cc.Invoke(ctx, Controller_ValidateVolumeCapabilities_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Controller_ValidateVolumeCapabilities_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -275,8 +294,9 @@ func (c *controllerClient) ValidateVolumeCapabilities(ctx context.Context, in *V
 }
 
 func (c *controllerClient) ListVolumes(ctx context.Context, in *ListVolumesRequest, opts ...grpc.CallOption) (*ListVolumesResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(ListVolumesResponse)
-	err := c.cc.Invoke(ctx, Controller_ListVolumes_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Controller_ListVolumes_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -284,8 +304,9 @@ func (c *controllerClient) ListVolumes(ctx context.Context, in *ListVolumesReque
 }
 
 func (c *controllerClient) GetCapacity(ctx context.Context, in *GetCapacityRequest, opts ...grpc.CallOption) (*GetCapacityResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(GetCapacityResponse)
-	err := c.cc.Invoke(ctx, Controller_GetCapacity_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Controller_GetCapacity_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -293,8 +314,9 @@ func (c *controllerClient) GetCapacity(ctx context.Context, in *GetCapacityReque
 }
 
 func (c *controllerClient) ControllerGetCapabilities(ctx context.Context, in *ControllerGetCapabilitiesRequest, opts ...grpc.CallOption) (*ControllerGetCapabilitiesResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(ControllerGetCapabilitiesResponse)
-	err := c.cc.Invoke(ctx, Controller_ControllerGetCapabilities_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Controller_ControllerGetCapabilities_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -302,8 +324,9 @@ func (c *controllerClient) ControllerGetCapabilities(ctx context.Context, in *Co
 }
 
 func (c *controllerClient) CreateSnapshot(ctx context.Context, in *CreateSnapshotRequest, opts ...grpc.CallOption) (*CreateSnapshotResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(CreateSnapshotResponse)
-	err := c.cc.Invoke(ctx, Controller_CreateSnapshot_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Controller_CreateSnapshot_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -311,8 +334,9 @@ func (c *controllerClient) CreateSnapshot(ctx context.Context, in *CreateSnapsho
 }
 
 func (c *controllerClient) DeleteSnapshot(ctx context.Context, in *DeleteSnapshotRequest, opts ...grpc.CallOption) (*DeleteSnapshotResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(DeleteSnapshotResponse)
-	err := c.cc.Invoke(ctx, Controller_DeleteSnapshot_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Controller_DeleteSnapshot_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -320,8 +344,9 @@ func (c *controllerClient) DeleteSnapshot(ctx context.Context, in *DeleteSnapsho
 }
 
 func (c *controllerClient) ListSnapshots(ctx context.Context, in *ListSnapshotsRequest, opts ...grpc.CallOption) (*ListSnapshotsResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(ListSnapshotsResponse)
-	err := c.cc.Invoke(ctx, Controller_ListSnapshots_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Controller_ListSnapshots_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -329,8 +354,9 @@ func (c *controllerClient) ListSnapshots(ctx context.Context, in *ListSnapshotsR
 }
 
 func (c *controllerClient) ControllerExpandVolume(ctx context.Context, in *ControllerExpandVolumeRequest, opts ...grpc.CallOption) (*ControllerExpandVolumeResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(ControllerExpandVolumeResponse)
-	err := c.cc.Invoke(ctx, Controller_ControllerExpandVolume_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Controller_ControllerExpandVolume_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -338,8 +364,9 @@ func (c *controllerClient) ControllerExpandVolume(ctx context.Context, in *Contr
 }
 
 func (c *controllerClient) ControllerGetVolume(ctx context.Context, in *ControllerGetVolumeRequest, opts ...grpc.CallOption) (*ControllerGetVolumeResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(ControllerGetVolumeResponse)
-	err := c.cc.Invoke(ctx, Controller_ControllerGetVolume_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Controller_ControllerGetVolume_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -347,8 +374,9 @@ func (c *controllerClient) ControllerGetVolume(ctx context.Context, in *Controll
 }
 
 func (c *controllerClient) ControllerModifyVolume(ctx context.Context, in *ControllerModifyVolumeRequest, opts ...grpc.CallOption) (*ControllerModifyVolumeResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(ControllerModifyVolumeResponse)
-	err := c.cc.Invoke(ctx, Controller_ControllerModifyVolume_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Controller_ControllerModifyVolume_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -357,7 +385,7 @@ func (c *controllerClient) ControllerModifyVolume(ctx context.Context, in *Contr
 
 // ControllerServer is the server API for Controller service.
 // All implementations must embed UnimplementedControllerServer
-// for forward compatibility
+// for forward compatibility.
 type ControllerServer interface {
 	CreateVolume(context.Context, *CreateVolumeRequest) (*CreateVolumeResponse, error)
 	DeleteVolume(context.Context, *DeleteVolumeRequest) (*DeleteVolumeResponse, error)
@@ -376,9 +404,12 @@ type ControllerServer interface {
 	mustEmbedUnimplementedControllerServer()
 }
 
-// UnimplementedControllerServer must be embedded to have forward compatible implementations.
-type UnimplementedControllerServer struct {
-}
+// UnimplementedControllerServer must be embedded to have
+// forward compatible implementations.
+//
+// NOTE: this should be embedded by value instead of pointer to avoid a nil
+// pointer dereference when methods are called.
+type UnimplementedControllerServer struct{}
 
 func (UnimplementedControllerServer) CreateVolume(context.Context, *CreateVolumeRequest) (*CreateVolumeResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method CreateVolume not implemented")
@@ -423,6 +454,7 @@ func (UnimplementedControllerServer) ControllerModifyVolume(context.Context, *Co
 	return nil, status.Errorf(codes.Unimplemented, "method ControllerModifyVolume not implemented")
 }
 func (UnimplementedControllerServer) mustEmbedUnimplementedControllerServer() {}
+func (UnimplementedControllerServer) testEmbeddedByValue()                    {}
 
 // UnsafeControllerServer may be embedded to opt out of forward compatibility for this service.
 // Use of this interface is not recommended, as added methods to ControllerServer will
@@ -432,6 +464,13 @@ type UnsafeControllerServer interface {
 }
 
 func RegisterControllerServer(s grpc.ServiceRegistrar, srv ControllerServer) {
+	// If the following call pancis, it indicates UnimplementedControllerServer was
+	// embedded by pointer and is nil.  This will cause panics if an
+	// unimplemented method is ever invoked, so we test this at initialization
+	// time to prevent it from happening at runtime later due to I/O.
+	if t, ok := srv.(interface{ testEmbeddedByValue() }); ok {
+		t.testEmbeddedByValue()
+	}
 	s.RegisterService(&Controller_ServiceDesc, srv)
 }
 
@@ -781,8 +820,9 @@ func NewGroupControllerClient(cc grpc.ClientConnInterface) GroupControllerClient
 }
 
 func (c *groupControllerClient) GroupControllerGetCapabilities(ctx context.Context, in *GroupControllerGetCapabilitiesRequest, opts ...grpc.CallOption) (*GroupControllerGetCapabilitiesResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(GroupControllerGetCapabilitiesResponse)
-	err := c.cc.Invoke(ctx, GroupController_GroupControllerGetCapabilities_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, GroupController_GroupControllerGetCapabilities_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -790,8 +830,9 @@ func (c *groupControllerClient) GroupControllerGetCapabilities(ctx context.Conte
 }
 
 func (c *groupControllerClient) CreateVolumeGroupSnapshot(ctx context.Context, in *CreateVolumeGroupSnapshotRequest, opts ...grpc.CallOption) (*CreateVolumeGroupSnapshotResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(CreateVolumeGroupSnapshotResponse)
-	err := c.cc.Invoke(ctx, GroupController_CreateVolumeGroupSnapshot_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, GroupController_CreateVolumeGroupSnapshot_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -799,8 +840,9 @@ func (c *groupControllerClient) CreateVolumeGroupSnapshot(ctx context.Context, i
 }
 
 func (c *groupControllerClient) DeleteVolumeGroupSnapshot(ctx context.Context, in *DeleteVolumeGroupSnapshotRequest, opts ...grpc.CallOption) (*DeleteVolumeGroupSnapshotResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(DeleteVolumeGroupSnapshotResponse)
-	err := c.cc.Invoke(ctx, GroupController_DeleteVolumeGroupSnapshot_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, GroupController_DeleteVolumeGroupSnapshot_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -808,8 +850,9 @@ func (c *groupControllerClient) DeleteVolumeGroupSnapshot(ctx context.Context, i
 }
 
 func (c *groupControllerClient) GetVolumeGroupSnapshot(ctx context.Context, in *GetVolumeGroupSnapshotRequest, opts ...grpc.CallOption) (*GetVolumeGroupSnapshotResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(GetVolumeGroupSnapshotResponse)
-	err := c.cc.Invoke(ctx, GroupController_GetVolumeGroupSnapshot_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, GroupController_GetVolumeGroupSnapshot_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -818,7 +861,7 @@ func (c *groupControllerClient) GetVolumeGroupSnapshot(ctx context.Context, in *
 
 // GroupControllerServer is the server API for GroupController service.
 // All implementations must embed UnimplementedGroupControllerServer
-// for forward compatibility
+// for forward compatibility.
 type GroupControllerServer interface {
 	GroupControllerGetCapabilities(context.Context, *GroupControllerGetCapabilitiesRequest) (*GroupControllerGetCapabilitiesResponse, error)
 	CreateVolumeGroupSnapshot(context.Context, *CreateVolumeGroupSnapshotRequest) (*CreateVolumeGroupSnapshotResponse, error)
@@ -827,9 +870,12 @@ type GroupControllerServer interface {
 	mustEmbedUnimplementedGroupControllerServer()
 }
 
-// UnimplementedGroupControllerServer must be embedded to have forward compatible implementations.
-type UnimplementedGroupControllerServer struct {
-}
+// UnimplementedGroupControllerServer must be embedded to have
+// forward compatible implementations.
+//
+// NOTE: this should be embedded by value instead of pointer to avoid a nil
+// pointer dereference when methods are called.
+type UnimplementedGroupControllerServer struct{}
 
 func (UnimplementedGroupControllerServer) GroupControllerGetCapabilities(context.Context, *GroupControllerGetCapabilitiesRequest) (*GroupControllerGetCapabilitiesResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method GroupControllerGetCapabilities not implemented")
@@ -844,6 +890,7 @@ func (UnimplementedGroupControllerServer) GetVolumeGroupSnapshot(context.Context
 	return nil, status.Errorf(codes.Unimplemented, "method GetVolumeGroupSnapshot not implemented")
 }
 func (UnimplementedGroupControllerServer) mustEmbedUnimplementedGroupControllerServer() {}
+func (UnimplementedGroupControllerServer) testEmbeddedByValue()                         {}
 
 // UnsafeGroupControllerServer may be embedded to opt out of forward compatibility for this service.
 // Use of this interface is not recommended, as added methods to GroupControllerServer will
@@ -853,6 +900,13 @@ type UnsafeGroupControllerServer interface {
 }
 
 func RegisterGroupControllerServer(s grpc.ServiceRegistrar, srv GroupControllerServer) {
+	// If the following call pancis, it indicates UnimplementedGroupControllerServer was
+	// embedded by pointer and is nil.  This will cause panics if an
+	// unimplemented method is ever invoked, so we test this at initialization
+	// time to prevent it from happening at runtime later due to I/O.
+	if t, ok := srv.(interface{ testEmbeddedByValue() }); ok {
+		t.testEmbeddedByValue()
+	}
 	s.RegisterService(&GroupController_ServiceDesc, srv)
 }
 
@@ -965,8 +1019,8 @@ const (
 //
 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
 type SnapshotMetadataClient interface {
-	GetMetadataAllocated(ctx context.Context, in *GetMetadataAllocatedRequest, opts ...grpc.CallOption) (SnapshotMetadata_GetMetadataAllocatedClient, error)
-	GetMetadataDelta(ctx context.Context, in *GetMetadataDeltaRequest, opts ...grpc.CallOption) (SnapshotMetadata_GetMetadataDeltaClient, error)
+	GetMetadataAllocated(ctx context.Context, in *GetMetadataAllocatedRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[GetMetadataAllocatedResponse], error)
+	GetMetadataDelta(ctx context.Context, in *GetMetadataDeltaRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[GetMetadataDeltaResponse], error)
 }
 
 type snapshotMetadataClient struct {
@@ -977,12 +1031,13 @@ func NewSnapshotMetadataClient(cc grpc.ClientConnInterface) SnapshotMetadataClie
 	return &snapshotMetadataClient{cc}
 }
 
-func (c *snapshotMetadataClient) GetMetadataAllocated(ctx context.Context, in *GetMetadataAllocatedRequest, opts ...grpc.CallOption) (SnapshotMetadata_GetMetadataAllocatedClient, error) {
-	stream, err := c.cc.NewStream(ctx, &SnapshotMetadata_ServiceDesc.Streams[0], SnapshotMetadata_GetMetadataAllocated_FullMethodName, opts...)
+func (c *snapshotMetadataClient) GetMetadataAllocated(ctx context.Context, in *GetMetadataAllocatedRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[GetMetadataAllocatedResponse], error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+	stream, err := c.cc.NewStream(ctx, &SnapshotMetadata_ServiceDesc.Streams[0], SnapshotMetadata_GetMetadataAllocated_FullMethodName, cOpts...)
 	if err != nil {
 		return nil, err
 	}
-	x := &snapshotMetadataGetMetadataAllocatedClient{stream}
+	x := &grpc.GenericClientStream[GetMetadataAllocatedRequest, GetMetadataAllocatedResponse]{ClientStream: stream}
 	if err := x.ClientStream.SendMsg(in); err != nil {
 		return nil, err
 	}
@@ -992,29 +1047,16 @@ func (c *snapshotMetadataClient) GetMetadataAllocated(ctx context.Context, in *G
 	return x, nil
 }
 
-type SnapshotMetadata_GetMetadataAllocatedClient interface {
-	Recv() (*GetMetadataAllocatedResponse, error)
-	grpc.ClientStream
-}
-
-type snapshotMetadataGetMetadataAllocatedClient struct {
-	grpc.ClientStream
-}
-
-func (x *snapshotMetadataGetMetadataAllocatedClient) Recv() (*GetMetadataAllocatedResponse, error) {
-	m := new(GetMetadataAllocatedResponse)
-	if err := x.ClientStream.RecvMsg(m); err != nil {
-		return nil, err
-	}
-	return m, nil
-}
+// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
+type SnapshotMetadata_GetMetadataAllocatedClient = grpc.ServerStreamingClient[GetMetadataAllocatedResponse]
 
-func (c *snapshotMetadataClient) GetMetadataDelta(ctx context.Context, in *GetMetadataDeltaRequest, opts ...grpc.CallOption) (SnapshotMetadata_GetMetadataDeltaClient, error) {
-	stream, err := c.cc.NewStream(ctx, &SnapshotMetadata_ServiceDesc.Streams[1], SnapshotMetadata_GetMetadataDelta_FullMethodName, opts...)
+func (c *snapshotMetadataClient) GetMetadataDelta(ctx context.Context, in *GetMetadataDeltaRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[GetMetadataDeltaResponse], error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+	stream, err := c.cc.NewStream(ctx, &SnapshotMetadata_ServiceDesc.Streams[1], SnapshotMetadata_GetMetadataDelta_FullMethodName, cOpts...)
 	if err != nil {
 		return nil, err
 	}
-	x := &snapshotMetadataGetMetadataDeltaClient{stream}
+	x := &grpc.GenericClientStream[GetMetadataDeltaRequest, GetMetadataDeltaResponse]{ClientStream: stream}
 	if err := x.ClientStream.SendMsg(in); err != nil {
 		return nil, err
 	}
@@ -1024,43 +1066,33 @@ func (c *snapshotMetadataClient) GetMetadataDelta(ctx context.Context, in *GetMe
 	return x, nil
 }
 
-type SnapshotMetadata_GetMetadataDeltaClient interface {
-	Recv() (*GetMetadataDeltaResponse, error)
-	grpc.ClientStream
-}
-
-type snapshotMetadataGetMetadataDeltaClient struct {
-	grpc.ClientStream
-}
-
-func (x *snapshotMetadataGetMetadataDeltaClient) Recv() (*GetMetadataDeltaResponse, error) {
-	m := new(GetMetadataDeltaResponse)
-	if err := x.ClientStream.RecvMsg(m); err != nil {
-		return nil, err
-	}
-	return m, nil
-}
+// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
+type SnapshotMetadata_GetMetadataDeltaClient = grpc.ServerStreamingClient[GetMetadataDeltaResponse]
 
 // SnapshotMetadataServer is the server API for SnapshotMetadata service.
 // All implementations must embed UnimplementedSnapshotMetadataServer
-// for forward compatibility
+// for forward compatibility.
 type SnapshotMetadataServer interface {
-	GetMetadataAllocated(*GetMetadataAllocatedRequest, SnapshotMetadata_GetMetadataAllocatedServer) error
-	GetMetadataDelta(*GetMetadataDeltaRequest, SnapshotMetadata_GetMetadataDeltaServer) error
+	GetMetadataAllocated(*GetMetadataAllocatedRequest, grpc.ServerStreamingServer[GetMetadataAllocatedResponse]) error
+	GetMetadataDelta(*GetMetadataDeltaRequest, grpc.ServerStreamingServer[GetMetadataDeltaResponse]) error
 	mustEmbedUnimplementedSnapshotMetadataServer()
 }
 
-// UnimplementedSnapshotMetadataServer must be embedded to have forward compatible implementations.
-type UnimplementedSnapshotMetadataServer struct {
-}
+// UnimplementedSnapshotMetadataServer must be embedded to have
+// forward compatible implementations.
+//
+// NOTE: this should be embedded by value instead of pointer to avoid a nil
+// pointer dereference when methods are called.
+type UnimplementedSnapshotMetadataServer struct{}
 
-func (UnimplementedSnapshotMetadataServer) GetMetadataAllocated(*GetMetadataAllocatedRequest, SnapshotMetadata_GetMetadataAllocatedServer) error {
+func (UnimplementedSnapshotMetadataServer) GetMetadataAllocated(*GetMetadataAllocatedRequest, grpc.ServerStreamingServer[GetMetadataAllocatedResponse]) error {
 	return status.Errorf(codes.Unimplemented, "method GetMetadataAllocated not implemented")
 }
-func (UnimplementedSnapshotMetadataServer) GetMetadataDelta(*GetMetadataDeltaRequest, SnapshotMetadata_GetMetadataDeltaServer) error {
+func (UnimplementedSnapshotMetadataServer) GetMetadataDelta(*GetMetadataDeltaRequest, grpc.ServerStreamingServer[GetMetadataDeltaResponse]) error {
 	return status.Errorf(codes.Unimplemented, "method GetMetadataDelta not implemented")
 }
 func (UnimplementedSnapshotMetadataServer) mustEmbedUnimplementedSnapshotMetadataServer() {}
+func (UnimplementedSnapshotMetadataServer) testEmbeddedByValue()                          {}
 
 // UnsafeSnapshotMetadataServer may be embedded to opt out of forward compatibility for this service.
 // Use of this interface is not recommended, as added methods to SnapshotMetadataServer will
@@ -1070,6 +1102,13 @@ type UnsafeSnapshotMetadataServer interface {
 }
 
 func RegisterSnapshotMetadataServer(s grpc.ServiceRegistrar, srv SnapshotMetadataServer) {
+	// If the following call pancis, it indicates UnimplementedSnapshotMetadataServer was
+	// embedded by pointer and is nil.  This will cause panics if an
+	// unimplemented method is ever invoked, so we test this at initialization
+	// time to prevent it from happening at runtime later due to I/O.
+	if t, ok := srv.(interface{ testEmbeddedByValue() }); ok {
+		t.testEmbeddedByValue()
+	}
 	s.RegisterService(&SnapshotMetadata_ServiceDesc, srv)
 }
 
@@ -1078,42 +1117,22 @@ func _SnapshotMetadata_GetMetadataAllocated_Handler(srv interface{}, stream grpc
 	if err := stream.RecvMsg(m); err != nil {
 		return err
 	}
-	return srv.(SnapshotMetadataServer).GetMetadataAllocated(m, &snapshotMetadataGetMetadataAllocatedServer{stream})
+	return srv.(SnapshotMetadataServer).GetMetadataAllocated(m, &grpc.GenericServerStream[GetMetadataAllocatedRequest, GetMetadataAllocatedResponse]{ServerStream: stream})
 }
 
-type SnapshotMetadata_GetMetadataAllocatedServer interface {
-	Send(*GetMetadataAllocatedResponse) error
-	grpc.ServerStream
-}
-
-type snapshotMetadataGetMetadataAllocatedServer struct {
-	grpc.ServerStream
-}
-
-func (x *snapshotMetadataGetMetadataAllocatedServer) Send(m *GetMetadataAllocatedResponse) error {
-	return x.ServerStream.SendMsg(m)
-}
+// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
+type SnapshotMetadata_GetMetadataAllocatedServer = grpc.ServerStreamingServer[GetMetadataAllocatedResponse]
 
 func _SnapshotMetadata_GetMetadataDelta_Handler(srv interface{}, stream grpc.ServerStream) error {
 	m := new(GetMetadataDeltaRequest)
 	if err := stream.RecvMsg(m); err != nil {
 		return err
 	}
-	return srv.(SnapshotMetadataServer).GetMetadataDelta(m, &snapshotMetadataGetMetadataDeltaServer{stream})
+	return srv.(SnapshotMetadataServer).GetMetadataDelta(m, &grpc.GenericServerStream[GetMetadataDeltaRequest, GetMetadataDeltaResponse]{ServerStream: stream})
 }
 
-type SnapshotMetadata_GetMetadataDeltaServer interface {
-	Send(*GetMetadataDeltaResponse) error
-	grpc.ServerStream
-}
-
-type snapshotMetadataGetMetadataDeltaServer struct {
-	grpc.ServerStream
-}
-
-func (x *snapshotMetadataGetMetadataDeltaServer) Send(m *GetMetadataDeltaResponse) error {
-	return x.ServerStream.SendMsg(m)
-}
+// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
+type SnapshotMetadata_GetMetadataDeltaServer = grpc.ServerStreamingServer[GetMetadataDeltaResponse]
 
 // SnapshotMetadata_ServiceDesc is the grpc.ServiceDesc for SnapshotMetadata service.
 // It's only intended for direct use with grpc.RegisterService,
@@ -1171,8 +1190,9 @@ func NewNodeClient(cc grpc.ClientConnInterface) NodeClient {
 }
 
 func (c *nodeClient) NodeStageVolume(ctx context.Context, in *NodeStageVolumeRequest, opts ...grpc.CallOption) (*NodeStageVolumeResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(NodeStageVolumeResponse)
-	err := c.cc.Invoke(ctx, Node_NodeStageVolume_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Node_NodeStageVolume_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1180,8 +1200,9 @@ func (c *nodeClient) NodeStageVolume(ctx context.Context, in *NodeStageVolumeReq
 }
 
 func (c *nodeClient) NodeUnstageVolume(ctx context.Context, in *NodeUnstageVolumeRequest, opts ...grpc.CallOption) (*NodeUnstageVolumeResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(NodeUnstageVolumeResponse)
-	err := c.cc.Invoke(ctx, Node_NodeUnstageVolume_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Node_NodeUnstageVolume_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1189,8 +1210,9 @@ func (c *nodeClient) NodeUnstageVolume(ctx context.Context, in *NodeUnstageVolum
 }
 
 func (c *nodeClient) NodePublishVolume(ctx context.Context, in *NodePublishVolumeRequest, opts ...grpc.CallOption) (*NodePublishVolumeResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(NodePublishVolumeResponse)
-	err := c.cc.Invoke(ctx, Node_NodePublishVolume_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Node_NodePublishVolume_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1198,8 +1220,9 @@ func (c *nodeClient) NodePublishVolume(ctx context.Context, in *NodePublishVolum
 }
 
 func (c *nodeClient) NodeUnpublishVolume(ctx context.Context, in *NodeUnpublishVolumeRequest, opts ...grpc.CallOption) (*NodeUnpublishVolumeResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(NodeUnpublishVolumeResponse)
-	err := c.cc.Invoke(ctx, Node_NodeUnpublishVolume_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Node_NodeUnpublishVolume_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1207,8 +1230,9 @@ func (c *nodeClient) NodeUnpublishVolume(ctx context.Context, in *NodeUnpublishV
 }
 
 func (c *nodeClient) NodeGetVolumeStats(ctx context.Context, in *NodeGetVolumeStatsRequest, opts ...grpc.CallOption) (*NodeGetVolumeStatsResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(NodeGetVolumeStatsResponse)
-	err := c.cc.Invoke(ctx, Node_NodeGetVolumeStats_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Node_NodeGetVolumeStats_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1216,8 +1240,9 @@ func (c *nodeClient) NodeGetVolumeStats(ctx context.Context, in *NodeGetVolumeSt
 }
 
 func (c *nodeClient) NodeExpandVolume(ctx context.Context, in *NodeExpandVolumeRequest, opts ...grpc.CallOption) (*NodeExpandVolumeResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(NodeExpandVolumeResponse)
-	err := c.cc.Invoke(ctx, Node_NodeExpandVolume_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Node_NodeExpandVolume_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1225,8 +1250,9 @@ func (c *nodeClient) NodeExpandVolume(ctx context.Context, in *NodeExpandVolumeR
 }
 
 func (c *nodeClient) NodeGetCapabilities(ctx context.Context, in *NodeGetCapabilitiesRequest, opts ...grpc.CallOption) (*NodeGetCapabilitiesResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(NodeGetCapabilitiesResponse)
-	err := c.cc.Invoke(ctx, Node_NodeGetCapabilities_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Node_NodeGetCapabilities_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1234,8 +1260,9 @@ func (c *nodeClient) NodeGetCapabilities(ctx context.Context, in *NodeGetCapabil
 }
 
 func (c *nodeClient) NodeGetInfo(ctx context.Context, in *NodeGetInfoRequest, opts ...grpc.CallOption) (*NodeGetInfoResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(NodeGetInfoResponse)
-	err := c.cc.Invoke(ctx, Node_NodeGetInfo_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, Node_NodeGetInfo_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1244,7 +1271,7 @@ func (c *nodeClient) NodeGetInfo(ctx context.Context, in *NodeGetInfoRequest, op
 
 // NodeServer is the server API for Node service.
 // All implementations must embed UnimplementedNodeServer
-// for forward compatibility
+// for forward compatibility.
 type NodeServer interface {
 	NodeStageVolume(context.Context, *NodeStageVolumeRequest) (*NodeStageVolumeResponse, error)
 	NodeUnstageVolume(context.Context, *NodeUnstageVolumeRequest) (*NodeUnstageVolumeResponse, error)
@@ -1257,9 +1284,12 @@ type NodeServer interface {
 	mustEmbedUnimplementedNodeServer()
 }
 
-// UnimplementedNodeServer must be embedded to have forward compatible implementations.
-type UnimplementedNodeServer struct {
-}
+// UnimplementedNodeServer must be embedded to have
+// forward compatible implementations.
+//
+// NOTE: this should be embedded by value instead of pointer to avoid a nil
+// pointer dereference when methods are called.
+type UnimplementedNodeServer struct{}
 
 func (UnimplementedNodeServer) NodeStageVolume(context.Context, *NodeStageVolumeRequest) (*NodeStageVolumeResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method NodeStageVolume not implemented")
@@ -1286,6 +1316,7 @@ func (UnimplementedNodeServer) NodeGetInfo(context.Context, *NodeGetInfoRequest)
 	return nil, status.Errorf(codes.Unimplemented, "method NodeGetInfo not implemented")
 }
 func (UnimplementedNodeServer) mustEmbedUnimplementedNodeServer() {}
+func (UnimplementedNodeServer) testEmbeddedByValue()              {}
 
 // UnsafeNodeServer may be embedded to opt out of forward compatibility for this service.
 // Use of this interface is not recommended, as added methods to NodeServer will
@@ -1295,6 +1326,13 @@ type UnsafeNodeServer interface {
 }
 
 func RegisterNodeServer(s grpc.ServiceRegistrar, srv NodeServer) {
+	// If the following call pancis, it indicates UnimplementedNodeServer was
+	// embedded by pointer and is nil.  This will cause panics if an
+	// unimplemented method is ever invoked, so we test this at initialization
+	// time to prevent it from happening at runtime later due to I/O.
+	if t, ok := srv.(interface{ testEmbeddedByValue() }); ok {
+		t.testEmbeddedByValue()
+	}
 	s.RegisterService(&Node_ServiceDesc, srv)
 }
 
diff --git a/lib/go/csi/csi_protoopaque.pb.go b/lib/go/csi/csi_protoopaque.pb.go
new file mode 100644
index 00000000..75c24b43
--- /dev/null
+++ b/lib/go/csi/csi_protoopaque.pb.go
@@ -0,0 +1,11064 @@
+// Code generated by make; DO NOT EDIT.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.36.0
+// 	protoc        v5.29.2
+// source: csi.proto
+
+//go:build protoopaque
+
+package csi
+
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	descriptorpb "google.golang.org/protobuf/types/descriptorpb"
+	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
+	wrapperspb "google.golang.org/protobuf/types/known/wrapperspb"
+	reflect "reflect"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type BlockMetadataType int32
+
+const (
+	BlockMetadataType_UNKNOWN BlockMetadataType = 0
+	// The FIXED_LENGTH value indicates that data ranges are
+	// returned in fixed size blocks.
+	BlockMetadataType_FIXED_LENGTH BlockMetadataType = 1
+	// The VARIABLE_LENGTH value indicates that data ranges
+	// are returned in potentially variable sized extents.
+	BlockMetadataType_VARIABLE_LENGTH BlockMetadataType = 2
+)
+
+// Enum value maps for BlockMetadataType.
+var (
+	BlockMetadataType_name = map[int32]string{
+		0: "UNKNOWN",
+		1: "FIXED_LENGTH",
+		2: "VARIABLE_LENGTH",
+	}
+	BlockMetadataType_value = map[string]int32{
+		"UNKNOWN":         0,
+		"FIXED_LENGTH":    1,
+		"VARIABLE_LENGTH": 2,
+	}
+)
+
+func (x BlockMetadataType) Enum() *BlockMetadataType {
+	p := new(BlockMetadataType)
+	*p = x
+	return p
+}
+
+func (x BlockMetadataType) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (BlockMetadataType) Descriptor() protoreflect.EnumDescriptor {
+	return file_csi_proto_enumTypes[0].Descriptor()
+}
+
+func (BlockMetadataType) Type() protoreflect.EnumType {
+	return &file_csi_proto_enumTypes[0]
+}
+
+func (x BlockMetadataType) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+type PluginCapability_Service_Type int32
+
+const (
+	PluginCapability_Service_UNKNOWN PluginCapability_Service_Type = 0
+	// CONTROLLER_SERVICE indicates that the Plugin provides RPCs for
+	// the ControllerService. Plugins SHOULD provide this capability.
+	// In rare cases certain plugins MAY wish to omit the
+	// ControllerService entirely from their implementation, but such
+	// SHOULD NOT be the common case.
+	// The presence of this capability determines whether the CO will
+	// attempt to invoke the REQUIRED ControllerService RPCs, as well
+	// as specific RPCs as indicated by ControllerGetCapabilities.
+	PluginCapability_Service_CONTROLLER_SERVICE PluginCapability_Service_Type = 1
+	// VOLUME_ACCESSIBILITY_CONSTRAINTS indicates that the volumes for
+	// this plugin MAY NOT be equally accessible by all nodes in the
+	// cluster. The CO MUST use the topology information returned by
+	// CreateVolumeRequest along with the topology information
+	// returned by NodeGetInfo to ensure that a given volume is
+	// accessible from a given node when scheduling workloads.
+	PluginCapability_Service_VOLUME_ACCESSIBILITY_CONSTRAINTS PluginCapability_Service_Type = 2
+	// GROUP_CONTROLLER_SERVICE indicates that the Plugin provides
+	// RPCs for operating on groups of volumes. Plugins MAY provide
+	// this capability.
+	// The presence of this capability determines whether the CO will
+	// attempt to invoke the REQUIRED GroupController service RPCs, as
+	// well as specific RPCs as indicated by
+	// GroupControllerGetCapabilities.
+	PluginCapability_Service_GROUP_CONTROLLER_SERVICE PluginCapability_Service_Type = 3
+	// SNAPSHOT_METADATA_SERVICE indicates that the Plugin provides
+	// RPCs to retrieve metadata on the allocated blocks of a single
+	// snapshot, or the changed blocks between a pair of snapshots of
+	// the same block volume.
+	// The presence of this capability determines whether the CO will
+	// attempt to invoke the OPTIONAL SnapshotMetadata service RPCs.
+	PluginCapability_Service_SNAPSHOT_METADATA_SERVICE PluginCapability_Service_Type = 4
+)
+
+// Enum value maps for PluginCapability_Service_Type.
+var (
+	PluginCapability_Service_Type_name = map[int32]string{
+		0: "UNKNOWN",
+		1: "CONTROLLER_SERVICE",
+		2: "VOLUME_ACCESSIBILITY_CONSTRAINTS",
+		3: "GROUP_CONTROLLER_SERVICE",
+		4: "SNAPSHOT_METADATA_SERVICE",
+	}
+	PluginCapability_Service_Type_value = map[string]int32{
+		"UNKNOWN":                          0,
+		"CONTROLLER_SERVICE":               1,
+		"VOLUME_ACCESSIBILITY_CONSTRAINTS": 2,
+		"GROUP_CONTROLLER_SERVICE":         3,
+		"SNAPSHOT_METADATA_SERVICE":        4,
+	}
+)
+
+func (x PluginCapability_Service_Type) Enum() *PluginCapability_Service_Type {
+	p := new(PluginCapability_Service_Type)
+	*p = x
+	return p
+}
+
+func (x PluginCapability_Service_Type) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (PluginCapability_Service_Type) Descriptor() protoreflect.EnumDescriptor {
+	return file_csi_proto_enumTypes[1].Descriptor()
+}
+
+func (PluginCapability_Service_Type) Type() protoreflect.EnumType {
+	return &file_csi_proto_enumTypes[1]
+}
+
+func (x PluginCapability_Service_Type) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+type PluginCapability_VolumeExpansion_Type int32
+
+const (
+	PluginCapability_VolumeExpansion_UNKNOWN PluginCapability_VolumeExpansion_Type = 0
+	// ONLINE indicates that volumes may be expanded when published to
+	// a node. When a Plugin implements this capability it MUST
+	// implement either the EXPAND_VOLUME controller capability or the
+	// EXPAND_VOLUME node capability or both. When a plugin supports
+	// ONLINE volume expansion and also has the EXPAND_VOLUME
+	// controller capability then the plugin MUST support expansion of
+	// volumes currently published and available on a node. When a
+	// plugin supports ONLINE volume expansion and also has the
+	// EXPAND_VOLUME node capability then the plugin MAY support
+	// expansion of node-published volume via NodeExpandVolume.
+	//
+	// Example 1: Given a shared filesystem volume (e.g. GlusterFs),
+	//
+	//	the Plugin may set the ONLINE volume expansion capability and
+	//	implement ControllerExpandVolume but not NodeExpandVolume.
+	//
+	// Example 2: Given a block storage volume type (e.g. EBS), the
+	//
+	//	Plugin may set the ONLINE volume expansion capability and
+	//	implement both ControllerExpandVolume and NodeExpandVolume.
+	//
+	// Example 3: Given a Plugin that supports volume expansion only
+	//
+	//	upon a node, the Plugin may set the ONLINE volume
+	//	expansion capability and implement NodeExpandVolume but not
+	//	ControllerExpandVolume.
+	PluginCapability_VolumeExpansion_ONLINE PluginCapability_VolumeExpansion_Type = 1
+	// OFFLINE indicates that volumes currently published and
+	// available on a node SHALL NOT be expanded via
+	// ControllerExpandVolume. When a plugin supports OFFLINE volume
+	// expansion it MUST implement either the EXPAND_VOLUME controller
+	// capability or both the EXPAND_VOLUME controller capability and
+	// the EXPAND_VOLUME node capability.
+	//
+	// Example 1: Given a block storage volume type (e.g. Azure Disk)
+	//
+	//	that does not support expansion of "node-attached" (i.e.
+	//	controller-published) volumes, the Plugin may indicate
+	//	OFFLINE volume expansion support and implement both
+	//	ControllerExpandVolume and NodeExpandVolume.
+	PluginCapability_VolumeExpansion_OFFLINE PluginCapability_VolumeExpansion_Type = 2
+)
+
+// Enum value maps for PluginCapability_VolumeExpansion_Type.
+var (
+	PluginCapability_VolumeExpansion_Type_name = map[int32]string{
+		0: "UNKNOWN",
+		1: "ONLINE",
+		2: "OFFLINE",
+	}
+	PluginCapability_VolumeExpansion_Type_value = map[string]int32{
+		"UNKNOWN": 0,
+		"ONLINE":  1,
+		"OFFLINE": 2,
+	}
+)
+
+func (x PluginCapability_VolumeExpansion_Type) Enum() *PluginCapability_VolumeExpansion_Type {
+	p := new(PluginCapability_VolumeExpansion_Type)
+	*p = x
+	return p
+}
+
+func (x PluginCapability_VolumeExpansion_Type) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (PluginCapability_VolumeExpansion_Type) Descriptor() protoreflect.EnumDescriptor {
+	return file_csi_proto_enumTypes[2].Descriptor()
+}
+
+func (PluginCapability_VolumeExpansion_Type) Type() protoreflect.EnumType {
+	return &file_csi_proto_enumTypes[2]
+}
+
+func (x PluginCapability_VolumeExpansion_Type) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+type VolumeCapability_AccessMode_Mode int32
+
+const (
+	VolumeCapability_AccessMode_UNKNOWN VolumeCapability_AccessMode_Mode = 0
+	// Can only be published once as read/write on a single node, at
+	// any given time.
+	VolumeCapability_AccessMode_SINGLE_NODE_WRITER VolumeCapability_AccessMode_Mode = 1
+	// Can only be published once as readonly on a single node, at
+	// any given time.
+	VolumeCapability_AccessMode_SINGLE_NODE_READER_ONLY VolumeCapability_AccessMode_Mode = 2
+	// Can be published as readonly at multiple nodes simultaneously.
+	VolumeCapability_AccessMode_MULTI_NODE_READER_ONLY VolumeCapability_AccessMode_Mode = 3
+	// Can be published at multiple nodes simultaneously. Only one of
+	// the node can be used as read/write. The rest will be readonly.
+	VolumeCapability_AccessMode_MULTI_NODE_SINGLE_WRITER VolumeCapability_AccessMode_Mode = 4
+	// Can be published as read/write at multiple nodes
+	// simultaneously.
+	VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER VolumeCapability_AccessMode_Mode = 5
+	// Can only be published once as read/write at a single workload
+	// on a single node, at any given time. SHOULD be used instead of
+	// SINGLE_NODE_WRITER for COs using the experimental
+	// SINGLE_NODE_MULTI_WRITER capability.
+	VolumeCapability_AccessMode_SINGLE_NODE_SINGLE_WRITER VolumeCapability_AccessMode_Mode = 6
+	// Can be published as read/write at multiple workloads on a
+	// single node simultaneously. SHOULD be used instead of
+	// SINGLE_NODE_WRITER for COs using the experimental
+	// SINGLE_NODE_MULTI_WRITER capability.
+	VolumeCapability_AccessMode_SINGLE_NODE_MULTI_WRITER VolumeCapability_AccessMode_Mode = 7
+)
+
+// Enum value maps for VolumeCapability_AccessMode_Mode.
+var (
+	VolumeCapability_AccessMode_Mode_name = map[int32]string{
+		0: "UNKNOWN",
+		1: "SINGLE_NODE_WRITER",
+		2: "SINGLE_NODE_READER_ONLY",
+		3: "MULTI_NODE_READER_ONLY",
+		4: "MULTI_NODE_SINGLE_WRITER",
+		5: "MULTI_NODE_MULTI_WRITER",
+		6: "SINGLE_NODE_SINGLE_WRITER",
+		7: "SINGLE_NODE_MULTI_WRITER",
+	}
+	VolumeCapability_AccessMode_Mode_value = map[string]int32{
+		"UNKNOWN":                   0,
+		"SINGLE_NODE_WRITER":        1,
+		"SINGLE_NODE_READER_ONLY":   2,
+		"MULTI_NODE_READER_ONLY":    3,
+		"MULTI_NODE_SINGLE_WRITER":  4,
+		"MULTI_NODE_MULTI_WRITER":   5,
+		"SINGLE_NODE_SINGLE_WRITER": 6,
+		"SINGLE_NODE_MULTI_WRITER":  7,
+	}
+)
+
+func (x VolumeCapability_AccessMode_Mode) Enum() *VolumeCapability_AccessMode_Mode {
+	p := new(VolumeCapability_AccessMode_Mode)
+	*p = x
+	return p
+}
+
+func (x VolumeCapability_AccessMode_Mode) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (VolumeCapability_AccessMode_Mode) Descriptor() protoreflect.EnumDescriptor {
+	return file_csi_proto_enumTypes[3].Descriptor()
+}
+
+func (VolumeCapability_AccessMode_Mode) Type() protoreflect.EnumType {
+	return &file_csi_proto_enumTypes[3]
+}
+
+func (x VolumeCapability_AccessMode_Mode) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+type ControllerServiceCapability_RPC_Type int32
+
+const (
+	ControllerServiceCapability_RPC_UNKNOWN                  ControllerServiceCapability_RPC_Type = 0
+	ControllerServiceCapability_RPC_CREATE_DELETE_VOLUME     ControllerServiceCapability_RPC_Type = 1
+	ControllerServiceCapability_RPC_PUBLISH_UNPUBLISH_VOLUME ControllerServiceCapability_RPC_Type = 2
+	ControllerServiceCapability_RPC_LIST_VOLUMES             ControllerServiceCapability_RPC_Type = 3
+	ControllerServiceCapability_RPC_GET_CAPACITY             ControllerServiceCapability_RPC_Type = 4
+	// Currently the only way to consume a snapshot is to create
+	// a volume from it. Therefore plugins supporting
+	// CREATE_DELETE_SNAPSHOT MUST support creating volume from
+	// snapshot.
+	ControllerServiceCapability_RPC_CREATE_DELETE_SNAPSHOT ControllerServiceCapability_RPC_Type = 5
+	ControllerServiceCapability_RPC_LIST_SNAPSHOTS         ControllerServiceCapability_RPC_Type = 6
+	// Plugins supporting volume cloning at the storage level MAY
+	// report this capability. The source volume MUST be managed by
+	// the same plugin. Not all volume sources and parameters
+	// combinations MAY work.
+	ControllerServiceCapability_RPC_CLONE_VOLUME ControllerServiceCapability_RPC_Type = 7
+	// Indicates the SP supports ControllerPublishVolume.readonly
+	// field.
+	ControllerServiceCapability_RPC_PUBLISH_READONLY ControllerServiceCapability_RPC_Type = 8
+	// See VolumeExpansion for details.
+	ControllerServiceCapability_RPC_EXPAND_VOLUME ControllerServiceCapability_RPC_Type = 9
+	// Indicates the SP supports the
+	// ListVolumesResponse.entry.published_node_ids field and the
+	// ControllerGetVolumeResponse.published_node_ids field.
+	// The SP MUST also support PUBLISH_UNPUBLISH_VOLUME.
+	ControllerServiceCapability_RPC_LIST_VOLUMES_PUBLISHED_NODES ControllerServiceCapability_RPC_Type = 10
+	// Indicates that the Controller service can report volume
+	// conditions.
+	// An SP MAY implement `VolumeCondition` in only the Controller
+	// Plugin, only the Node Plugin, or both.
+	// If `VolumeCondition` is implemented in both the Controller and
+	// Node Plugins, it SHALL report from different perspectives.
+	// If for some reason Controller and Node Plugins report
+	// misaligned volume conditions, CO SHALL assume the worst case
+	// is the truth.
+	// Note that, for alpha, `VolumeCondition` is intended be
+	// informative for humans only, not for automation.
+	ControllerServiceCapability_RPC_VOLUME_CONDITION ControllerServiceCapability_RPC_Type = 11
+	// Indicates the SP supports the ControllerGetVolume RPC.
+	// This enables COs to, for example, fetch per volume
+	// condition after a volume is provisioned.
+	ControllerServiceCapability_RPC_GET_VOLUME ControllerServiceCapability_RPC_Type = 12
+	// Indicates the SP supports the SINGLE_NODE_SINGLE_WRITER and/or
+	// SINGLE_NODE_MULTI_WRITER access modes.
+	// These access modes are intended to replace the
+	// SINGLE_NODE_WRITER access mode to clarify the number of writers
+	// for a volume on a single node. Plugins MUST accept and allow
+	// use of the SINGLE_NODE_WRITER access mode when either
+	// SINGLE_NODE_SINGLE_WRITER and/or SINGLE_NODE_MULTI_WRITER are
+	// supported, in order to permit older COs to continue working.
+	ControllerServiceCapability_RPC_SINGLE_NODE_MULTI_WRITER ControllerServiceCapability_RPC_Type = 13
+	// Indicates the SP supports modifying volume with mutable
+	// parameters. See ControllerModifyVolume for details.
+	ControllerServiceCapability_RPC_MODIFY_VOLUME ControllerServiceCapability_RPC_Type = 14
+)
+
+// Enum value maps for ControllerServiceCapability_RPC_Type.
+var (
+	ControllerServiceCapability_RPC_Type_name = map[int32]string{
+		0:  "UNKNOWN",
+		1:  "CREATE_DELETE_VOLUME",
+		2:  "PUBLISH_UNPUBLISH_VOLUME",
+		3:  "LIST_VOLUMES",
+		4:  "GET_CAPACITY",
+		5:  "CREATE_DELETE_SNAPSHOT",
+		6:  "LIST_SNAPSHOTS",
+		7:  "CLONE_VOLUME",
+		8:  "PUBLISH_READONLY",
+		9:  "EXPAND_VOLUME",
+		10: "LIST_VOLUMES_PUBLISHED_NODES",
+		11: "VOLUME_CONDITION",
+		12: "GET_VOLUME",
+		13: "SINGLE_NODE_MULTI_WRITER",
+		14: "MODIFY_VOLUME",
+	}
+	ControllerServiceCapability_RPC_Type_value = map[string]int32{
+		"UNKNOWN":                      0,
+		"CREATE_DELETE_VOLUME":         1,
+		"PUBLISH_UNPUBLISH_VOLUME":     2,
+		"LIST_VOLUMES":                 3,
+		"GET_CAPACITY":                 4,
+		"CREATE_DELETE_SNAPSHOT":       5,
+		"LIST_SNAPSHOTS":               6,
+		"CLONE_VOLUME":                 7,
+		"PUBLISH_READONLY":             8,
+		"EXPAND_VOLUME":                9,
+		"LIST_VOLUMES_PUBLISHED_NODES": 10,
+		"VOLUME_CONDITION":             11,
+		"GET_VOLUME":                   12,
+		"SINGLE_NODE_MULTI_WRITER":     13,
+		"MODIFY_VOLUME":                14,
+	}
+)
+
+func (x ControllerServiceCapability_RPC_Type) Enum() *ControllerServiceCapability_RPC_Type {
+	p := new(ControllerServiceCapability_RPC_Type)
+	*p = x
+	return p
+}
+
+func (x ControllerServiceCapability_RPC_Type) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ControllerServiceCapability_RPC_Type) Descriptor() protoreflect.EnumDescriptor {
+	return file_csi_proto_enumTypes[4].Descriptor()
+}
+
+func (ControllerServiceCapability_RPC_Type) Type() protoreflect.EnumType {
+	return &file_csi_proto_enumTypes[4]
+}
+
+func (x ControllerServiceCapability_RPC_Type) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+type VolumeUsage_Unit int32
+
+const (
+	VolumeUsage_UNKNOWN VolumeUsage_Unit = 0
+	VolumeUsage_BYTES   VolumeUsage_Unit = 1
+	VolumeUsage_INODES  VolumeUsage_Unit = 2
+)
+
+// Enum value maps for VolumeUsage_Unit.
+var (
+	VolumeUsage_Unit_name = map[int32]string{
+		0: "UNKNOWN",
+		1: "BYTES",
+		2: "INODES",
+	}
+	VolumeUsage_Unit_value = map[string]int32{
+		"UNKNOWN": 0,
+		"BYTES":   1,
+		"INODES":  2,
+	}
+)
+
+func (x VolumeUsage_Unit) Enum() *VolumeUsage_Unit {
+	p := new(VolumeUsage_Unit)
+	*p = x
+	return p
+}
+
+func (x VolumeUsage_Unit) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (VolumeUsage_Unit) Descriptor() protoreflect.EnumDescriptor {
+	return file_csi_proto_enumTypes[5].Descriptor()
+}
+
+func (VolumeUsage_Unit) Type() protoreflect.EnumType {
+	return &file_csi_proto_enumTypes[5]
+}
+
+func (x VolumeUsage_Unit) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+type NodeServiceCapability_RPC_Type int32
+
+const (
+	NodeServiceCapability_RPC_UNKNOWN              NodeServiceCapability_RPC_Type = 0
+	NodeServiceCapability_RPC_STAGE_UNSTAGE_VOLUME NodeServiceCapability_RPC_Type = 1
+	// If Plugin implements GET_VOLUME_STATS capability
+	// then it MUST implement NodeGetVolumeStats RPC
+	// call for fetching volume statistics.
+	NodeServiceCapability_RPC_GET_VOLUME_STATS NodeServiceCapability_RPC_Type = 2
+	// See VolumeExpansion for details.
+	NodeServiceCapability_RPC_EXPAND_VOLUME NodeServiceCapability_RPC_Type = 3
+	// Indicates that the Node service can report volume conditions.
+	// An SP MAY implement `VolumeCondition` in only the Node
+	// Plugin, only the Controller Plugin, or both.
+	// If `VolumeCondition` is implemented in both the Node and
+	// Controller Plugins, it SHALL report from different
+	// perspectives.
+	// If for some reason Node and Controller Plugins report
+	// misaligned volume conditions, CO SHALL assume the worst case
+	// is the truth.
+	// Note that, for alpha, `VolumeCondition` is intended to be
+	// informative for humans only, not for automation.
+	NodeServiceCapability_RPC_VOLUME_CONDITION NodeServiceCapability_RPC_Type = 4
+	// Indicates the SP supports the SINGLE_NODE_SINGLE_WRITER and/or
+	// SINGLE_NODE_MULTI_WRITER access modes.
+	// These access modes are intended to replace the
+	// SINGLE_NODE_WRITER access mode to clarify the number of writers
+	// for a volume on a single node. Plugins MUST accept and allow
+	// use of the SINGLE_NODE_WRITER access mode (subject to the
+	// processing rules for NodePublishVolume), when either
+	// SINGLE_NODE_SINGLE_WRITER and/or SINGLE_NODE_MULTI_WRITER are
+	// supported, in order to permit older COs to continue working.
+	NodeServiceCapability_RPC_SINGLE_NODE_MULTI_WRITER NodeServiceCapability_RPC_Type = 5
+	// Indicates that Node service supports mounting volumes
+	// with provided volume group identifier during node stage
+	// or node publish RPC calls.
+	NodeServiceCapability_RPC_VOLUME_MOUNT_GROUP NodeServiceCapability_RPC_Type = 6
+)
+
+// Enum value maps for NodeServiceCapability_RPC_Type.
+var (
+	NodeServiceCapability_RPC_Type_name = map[int32]string{
+		0: "UNKNOWN",
+		1: "STAGE_UNSTAGE_VOLUME",
+		2: "GET_VOLUME_STATS",
+		3: "EXPAND_VOLUME",
+		4: "VOLUME_CONDITION",
+		5: "SINGLE_NODE_MULTI_WRITER",
+		6: "VOLUME_MOUNT_GROUP",
+	}
+	NodeServiceCapability_RPC_Type_value = map[string]int32{
+		"UNKNOWN":                  0,
+		"STAGE_UNSTAGE_VOLUME":     1,
+		"GET_VOLUME_STATS":         2,
+		"EXPAND_VOLUME":            3,
+		"VOLUME_CONDITION":         4,
+		"SINGLE_NODE_MULTI_WRITER": 5,
+		"VOLUME_MOUNT_GROUP":       6,
+	}
+)
+
+func (x NodeServiceCapability_RPC_Type) Enum() *NodeServiceCapability_RPC_Type {
+	p := new(NodeServiceCapability_RPC_Type)
+	*p = x
+	return p
+}
+
+func (x NodeServiceCapability_RPC_Type) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (NodeServiceCapability_RPC_Type) Descriptor() protoreflect.EnumDescriptor {
+	return file_csi_proto_enumTypes[6].Descriptor()
+}
+
+func (NodeServiceCapability_RPC_Type) Type() protoreflect.EnumType {
+	return &file_csi_proto_enumTypes[6]
+}
+
+func (x NodeServiceCapability_RPC_Type) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+type GroupControllerServiceCapability_RPC_Type int32
+
+const (
+	GroupControllerServiceCapability_RPC_UNKNOWN GroupControllerServiceCapability_RPC_Type = 0
+	// Indicates that the group controller plugin supports
+	// creating, deleting, and getting details of a volume
+	// group snapshot.
+	GroupControllerServiceCapability_RPC_CREATE_DELETE_GET_VOLUME_GROUP_SNAPSHOT GroupControllerServiceCapability_RPC_Type = 1
+)
+
+// Enum value maps for GroupControllerServiceCapability_RPC_Type.
+var (
+	GroupControllerServiceCapability_RPC_Type_name = map[int32]string{
+		0: "UNKNOWN",
+		1: "CREATE_DELETE_GET_VOLUME_GROUP_SNAPSHOT",
+	}
+	GroupControllerServiceCapability_RPC_Type_value = map[string]int32{
+		"UNKNOWN": 0,
+		"CREATE_DELETE_GET_VOLUME_GROUP_SNAPSHOT": 1,
+	}
+)
+
+func (x GroupControllerServiceCapability_RPC_Type) Enum() *GroupControllerServiceCapability_RPC_Type {
+	p := new(GroupControllerServiceCapability_RPC_Type)
+	*p = x
+	return p
+}
+
+func (x GroupControllerServiceCapability_RPC_Type) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (GroupControllerServiceCapability_RPC_Type) Descriptor() protoreflect.EnumDescriptor {
+	return file_csi_proto_enumTypes[7].Descriptor()
+}
+
+func (GroupControllerServiceCapability_RPC_Type) Type() protoreflect.EnumType {
+	return &file_csi_proto_enumTypes[7]
+}
+
+func (x GroupControllerServiceCapability_RPC_Type) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+type GetPluginInfoRequest struct {
+	state         protoimpl.MessageState `protogen:"opaque.v1"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *GetPluginInfoRequest) Reset() {
+	*x = GetPluginInfoRequest{}
+	mi := &file_csi_proto_msgTypes[0]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *GetPluginInfoRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetPluginInfoRequest) ProtoMessage() {}
+
+func (x *GetPluginInfoRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[0]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+type GetPluginInfoRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 GetPluginInfoRequest_builder) Build() *GetPluginInfoRequest {
+	m0 := &GetPluginInfoRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
+
+type GetPluginInfoResponse struct {
+	state                    protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_Name          string                 `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	xxx_hidden_VendorVersion string                 `protobuf:"bytes,2,opt,name=vendor_version,json=vendorVersion,proto3" json:"vendor_version,omitempty"`
+	xxx_hidden_Manifest      map[string]string      `protobuf:"bytes,3,rep,name=manifest,proto3" json:"manifest,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields            protoimpl.UnknownFields
+	sizeCache                protoimpl.SizeCache
+}
+
+func (x *GetPluginInfoResponse) Reset() {
+	*x = GetPluginInfoResponse{}
+	mi := &file_csi_proto_msgTypes[1]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *GetPluginInfoResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetPluginInfoResponse) ProtoMessage() {}
+
+func (x *GetPluginInfoResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[1]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *GetPluginInfoResponse) GetName() string {
+	if x != nil {
+		return x.xxx_hidden_Name
+	}
+	return ""
+}
+
+func (x *GetPluginInfoResponse) GetVendorVersion() string {
+	if x != nil {
+		return x.xxx_hidden_VendorVersion
+	}
+	return ""
+}
+
+func (x *GetPluginInfoResponse) GetManifest() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Manifest
+	}
+	return nil
+}
+
+func (x *GetPluginInfoResponse) SetName(v string) {
+	x.xxx_hidden_Name = v
+}
+
+func (x *GetPluginInfoResponse) SetVendorVersion(v string) {
+	x.xxx_hidden_VendorVersion = v
+}
+
+func (x *GetPluginInfoResponse) SetManifest(v map[string]string) {
+	x.xxx_hidden_Manifest = v
+}
+
+type GetPluginInfoResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The name MUST follow domain name notation format
+	// (https://tools.ietf.org/html/rfc1035#section-2.3.1). It SHOULD
+	// include the plugin's host company name and the plugin name,
+	// to minimize the possibility of collisions. It MUST be 63
+	// characters or less, beginning and ending with an alphanumeric
+	// character ([a-z0-9A-Z]) with dashes (-), dots (.), and
+	// alphanumerics between. This field is REQUIRED.
+	Name string
+	// This field is REQUIRED. Value of this field is opaque to the CO.
+	VendorVersion string
+	// This field is OPTIONAL. Values are opaque to the CO.
+	Manifest map[string]string
+}
+
+func (b0 GetPluginInfoResponse_builder) Build() *GetPluginInfoResponse {
+	m0 := &GetPluginInfoResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Name = b.Name
+	x.xxx_hidden_VendorVersion = b.VendorVersion
+	x.xxx_hidden_Manifest = b.Manifest
+	return m0
+}
+
+type GetPluginCapabilitiesRequest struct {
+	state         protoimpl.MessageState `protogen:"opaque.v1"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *GetPluginCapabilitiesRequest) Reset() {
+	*x = GetPluginCapabilitiesRequest{}
+	mi := &file_csi_proto_msgTypes[2]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *GetPluginCapabilitiesRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetPluginCapabilitiesRequest) ProtoMessage() {}
+
+func (x *GetPluginCapabilitiesRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[2]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+type GetPluginCapabilitiesRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 GetPluginCapabilitiesRequest_builder) Build() *GetPluginCapabilitiesRequest {
+	m0 := &GetPluginCapabilitiesRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
+
+type GetPluginCapabilitiesResponse struct {
+	state                   protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_Capabilities *[]*PluginCapability   `protobuf:"bytes,1,rep,name=capabilities,proto3" json:"capabilities,omitempty"`
+	unknownFields           protoimpl.UnknownFields
+	sizeCache               protoimpl.SizeCache
+}
+
+func (x *GetPluginCapabilitiesResponse) Reset() {
+	*x = GetPluginCapabilitiesResponse{}
+	mi := &file_csi_proto_msgTypes[3]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *GetPluginCapabilitiesResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetPluginCapabilitiesResponse) ProtoMessage() {}
+
+func (x *GetPluginCapabilitiesResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[3]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *GetPluginCapabilitiesResponse) GetCapabilities() []*PluginCapability {
+	if x != nil {
+		if x.xxx_hidden_Capabilities != nil {
+			return *x.xxx_hidden_Capabilities
+		}
+	}
+	return nil
+}
+
+func (x *GetPluginCapabilitiesResponse) SetCapabilities(v []*PluginCapability) {
+	x.xxx_hidden_Capabilities = &v
+}
+
+type GetPluginCapabilitiesResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// All the capabilities that the controller service supports. This
+	// field is OPTIONAL.
+	Capabilities []*PluginCapability
+}
+
+func (b0 GetPluginCapabilitiesResponse_builder) Build() *GetPluginCapabilitiesResponse {
+	m0 := &GetPluginCapabilitiesResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Capabilities = &b.Capabilities
+	return m0
+}
+
+// Specifies a capability of the plugin.
+type PluginCapability struct {
+	state           protoimpl.MessageState  `protogen:"opaque.v1"`
+	xxx_hidden_Type isPluginCapability_Type `protobuf_oneof:"type"`
+	unknownFields   protoimpl.UnknownFields
+	sizeCache       protoimpl.SizeCache
+}
+
+func (x *PluginCapability) Reset() {
+	*x = PluginCapability{}
+	mi := &file_csi_proto_msgTypes[4]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *PluginCapability) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PluginCapability) ProtoMessage() {}
+
+func (x *PluginCapability) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[4]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *PluginCapability) GetService() *PluginCapability_Service {
+	if x != nil {
+		if x, ok := x.xxx_hidden_Type.(*pluginCapability_Service_); ok {
+			return x.Service
+		}
+	}
+	return nil
+}
+
+func (x *PluginCapability) GetVolumeExpansion() *PluginCapability_VolumeExpansion {
+	if x != nil {
+		if x, ok := x.xxx_hidden_Type.(*pluginCapability_VolumeExpansion_); ok {
+			return x.VolumeExpansion
+		}
+	}
+	return nil
+}
+
+func (x *PluginCapability) SetService(v *PluginCapability_Service) {
+	if v == nil {
+		x.xxx_hidden_Type = nil
+		return
+	}
+	x.xxx_hidden_Type = &pluginCapability_Service_{v}
+}
+
+func (x *PluginCapability) SetVolumeExpansion(v *PluginCapability_VolumeExpansion) {
+	if v == nil {
+		x.xxx_hidden_Type = nil
+		return
+	}
+	x.xxx_hidden_Type = &pluginCapability_VolumeExpansion_{v}
+}
+
+func (x *PluginCapability) HasType() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_Type != nil
+}
+
+func (x *PluginCapability) HasService() bool {
+	if x == nil {
+		return false
+	}
+	_, ok := x.xxx_hidden_Type.(*pluginCapability_Service_)
+	return ok
+}
+
+func (x *PluginCapability) HasVolumeExpansion() bool {
+	if x == nil {
+		return false
+	}
+	_, ok := x.xxx_hidden_Type.(*pluginCapability_VolumeExpansion_)
+	return ok
+}
+
+func (x *PluginCapability) ClearType() {
+	x.xxx_hidden_Type = nil
+}
+
+func (x *PluginCapability) ClearService() {
+	if _, ok := x.xxx_hidden_Type.(*pluginCapability_Service_); ok {
+		x.xxx_hidden_Type = nil
+	}
+}
+
+func (x *PluginCapability) ClearVolumeExpansion() {
+	if _, ok := x.xxx_hidden_Type.(*pluginCapability_VolumeExpansion_); ok {
+		x.xxx_hidden_Type = nil
+	}
+}
+
+const PluginCapability_Type_not_set_case case_PluginCapability_Type = 0
+const PluginCapability_Service_case case_PluginCapability_Type = 1
+const PluginCapability_VolumeExpansion_case case_PluginCapability_Type = 2
+
+func (x *PluginCapability) WhichType() case_PluginCapability_Type {
+	if x == nil {
+		return PluginCapability_Type_not_set_case
+	}
+	switch x.xxx_hidden_Type.(type) {
+	case *pluginCapability_Service_:
+		return PluginCapability_Service_case
+	case *pluginCapability_VolumeExpansion_:
+		return PluginCapability_VolumeExpansion_case
+	default:
+		return PluginCapability_Type_not_set_case
+	}
+}
+
+type PluginCapability_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Fields of oneof xxx_hidden_Type:
+	// Service that the plugin supports.
+	Service         *PluginCapability_Service
+	VolumeExpansion *PluginCapability_VolumeExpansion
+	// -- end of xxx_hidden_Type
+}
+
+func (b0 PluginCapability_builder) Build() *PluginCapability {
+	m0 := &PluginCapability{}
+	b, x := &b0, m0
+	_, _ = b, x
+	if b.Service != nil {
+		x.xxx_hidden_Type = &pluginCapability_Service_{b.Service}
+	}
+	if b.VolumeExpansion != nil {
+		x.xxx_hidden_Type = &pluginCapability_VolumeExpansion_{b.VolumeExpansion}
+	}
+	return m0
+}
+
+type case_PluginCapability_Type protoreflect.FieldNumber
+
+func (x case_PluginCapability_Type) String() string {
+	md := file_csi_proto_msgTypes[4].Descriptor()
+	if x == 0 {
+		return "not set"
+	}
+	return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))
+}
+
+type isPluginCapability_Type interface {
+	isPluginCapability_Type()
+}
+
+type pluginCapability_Service_ struct {
+	// Service that the plugin supports.
+	Service *PluginCapability_Service `protobuf:"bytes,1,opt,name=service,proto3,oneof"`
+}
+
+type pluginCapability_VolumeExpansion_ struct {
+	VolumeExpansion *PluginCapability_VolumeExpansion `protobuf:"bytes,2,opt,name=volume_expansion,json=volumeExpansion,proto3,oneof"`
+}
+
+func (*pluginCapability_Service_) isPluginCapability_Type() {}
+
+func (*pluginCapability_VolumeExpansion_) isPluginCapability_Type() {}
+
+type ProbeRequest struct {
+	state         protoimpl.MessageState `protogen:"opaque.v1"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *ProbeRequest) Reset() {
+	*x = ProbeRequest{}
+	mi := &file_csi_proto_msgTypes[5]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ProbeRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ProbeRequest) ProtoMessage() {}
+
+func (x *ProbeRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[5]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+type ProbeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 ProbeRequest_builder) Build() *ProbeRequest {
+	m0 := &ProbeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
+
+type ProbeResponse struct {
+	state            protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_Ready *wrapperspb.BoolValue  `protobuf:"bytes,1,opt,name=ready,proto3" json:"ready,omitempty"`
+	unknownFields    protoimpl.UnknownFields
+	sizeCache        protoimpl.SizeCache
+}
+
+func (x *ProbeResponse) Reset() {
+	*x = ProbeResponse{}
+	mi := &file_csi_proto_msgTypes[6]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ProbeResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ProbeResponse) ProtoMessage() {}
+
+func (x *ProbeResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[6]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *ProbeResponse) GetReady() *wrapperspb.BoolValue {
+	if x != nil {
+		return x.xxx_hidden_Ready
+	}
+	return nil
+}
+
+func (x *ProbeResponse) SetReady(v *wrapperspb.BoolValue) {
+	x.xxx_hidden_Ready = v
+}
+
+func (x *ProbeResponse) HasReady() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_Ready != nil
+}
+
+func (x *ProbeResponse) ClearReady() {
+	x.xxx_hidden_Ready = nil
+}
+
+type ProbeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Readiness allows a plugin to report its initialization status back
+	// to the CO. Initialization for some plugins MAY be time consuming
+	// and it is important for a CO to distinguish between the following
+	// cases:
+	//
+	//  1. The plugin is in an unhealthy state and MAY need restarting. In
+	//     this case a gRPC error code SHALL be returned.
+	//  2. The plugin is still initializing, but is otherwise perfectly
+	//     healthy. In this case a successful response SHALL be returned
+	//     with a readiness value of `false`. Calls to the plugin's
+	//     Controller and/or Node services MAY fail due to an incomplete
+	//     initialization state.
+	//  3. The plugin has finished initializing and is ready to service
+	//     calls to its Controller and/or Node services. A successful
+	//     response is returned with a readiness value of `true`.
+	//
+	// This field is OPTIONAL. If not present, the caller SHALL assume
+	// that the plugin is in a ready state and is accepting calls to its
+	// Controller and/or Node services (according to the plugin's reported
+	// capabilities).
+	Ready *wrapperspb.BoolValue
+}
+
+func (b0 ProbeResponse_builder) Build() *ProbeResponse {
+	m0 := &ProbeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Ready = b.Ready
+	return m0
+}
+
+type CreateVolumeRequest struct {
+	state                                protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_Name                      string                 `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	xxx_hidden_CapacityRange             *CapacityRange         `protobuf:"bytes,2,opt,name=capacity_range,json=capacityRange,proto3" json:"capacity_range,omitempty"`
+	xxx_hidden_VolumeCapabilities        *[]*VolumeCapability   `protobuf:"bytes,3,rep,name=volume_capabilities,json=volumeCapabilities,proto3" json:"volume_capabilities,omitempty"`
+	xxx_hidden_Parameters                map[string]string      `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	xxx_hidden_Secrets                   map[string]string      `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	xxx_hidden_VolumeContentSource       *VolumeContentSource   `protobuf:"bytes,6,opt,name=volume_content_source,json=volumeContentSource,proto3" json:"volume_content_source,omitempty"`
+	xxx_hidden_AccessibilityRequirements *TopologyRequirement   `protobuf:"bytes,7,opt,name=accessibility_requirements,json=accessibilityRequirements,proto3" json:"accessibility_requirements,omitempty"`
+	xxx_hidden_MutableParameters         map[string]string      `protobuf:"bytes,8,rep,name=mutable_parameters,json=mutableParameters,proto3" json:"mutable_parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields                        protoimpl.UnknownFields
+	sizeCache                            protoimpl.SizeCache
+}
+
+func (x *CreateVolumeRequest) Reset() {
+	*x = CreateVolumeRequest{}
+	mi := &file_csi_proto_msgTypes[7]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *CreateVolumeRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CreateVolumeRequest) ProtoMessage() {}
+
+func (x *CreateVolumeRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[7]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *CreateVolumeRequest) GetName() string {
+	if x != nil {
+		return x.xxx_hidden_Name
+	}
+	return ""
+}
+
+func (x *CreateVolumeRequest) GetCapacityRange() *CapacityRange {
+	if x != nil {
+		return x.xxx_hidden_CapacityRange
+	}
+	return nil
+}
+
+func (x *CreateVolumeRequest) GetVolumeCapabilities() []*VolumeCapability {
+	if x != nil {
+		if x.xxx_hidden_VolumeCapabilities != nil {
+			return *x.xxx_hidden_VolumeCapabilities
+		}
+	}
+	return nil
+}
+
+func (x *CreateVolumeRequest) GetParameters() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Parameters
+	}
+	return nil
+}
+
+func (x *CreateVolumeRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Secrets
+	}
+	return nil
+}
+
+func (x *CreateVolumeRequest) GetVolumeContentSource() *VolumeContentSource {
+	if x != nil {
+		return x.xxx_hidden_VolumeContentSource
+	}
+	return nil
+}
+
+func (x *CreateVolumeRequest) GetAccessibilityRequirements() *TopologyRequirement {
+	if x != nil {
+		return x.xxx_hidden_AccessibilityRequirements
+	}
+	return nil
+}
+
+func (x *CreateVolumeRequest) GetMutableParameters() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_MutableParameters
+	}
+	return nil
+}
+
+func (x *CreateVolumeRequest) SetName(v string) {
+	x.xxx_hidden_Name = v
+}
+
+func (x *CreateVolumeRequest) SetCapacityRange(v *CapacityRange) {
+	x.xxx_hidden_CapacityRange = v
+}
+
+func (x *CreateVolumeRequest) SetVolumeCapabilities(v []*VolumeCapability) {
+	x.xxx_hidden_VolumeCapabilities = &v
+}
+
+func (x *CreateVolumeRequest) SetParameters(v map[string]string) {
+	x.xxx_hidden_Parameters = v
+}
+
+func (x *CreateVolumeRequest) SetSecrets(v map[string]string) {
+	x.xxx_hidden_Secrets = v
+}
+
+func (x *CreateVolumeRequest) SetVolumeContentSource(v *VolumeContentSource) {
+	x.xxx_hidden_VolumeContentSource = v
+}
+
+func (x *CreateVolumeRequest) SetAccessibilityRequirements(v *TopologyRequirement) {
+	x.xxx_hidden_AccessibilityRequirements = v
+}
+
+func (x *CreateVolumeRequest) SetMutableParameters(v map[string]string) {
+	x.xxx_hidden_MutableParameters = v
+}
+
+func (x *CreateVolumeRequest) HasCapacityRange() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_CapacityRange != nil
+}
+
+func (x *CreateVolumeRequest) HasVolumeContentSource() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_VolumeContentSource != nil
+}
+
+func (x *CreateVolumeRequest) HasAccessibilityRequirements() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_AccessibilityRequirements != nil
+}
+
+func (x *CreateVolumeRequest) ClearCapacityRange() {
+	x.xxx_hidden_CapacityRange = nil
+}
+
+func (x *CreateVolumeRequest) ClearVolumeContentSource() {
+	x.xxx_hidden_VolumeContentSource = nil
+}
+
+func (x *CreateVolumeRequest) ClearAccessibilityRequirements() {
+	x.xxx_hidden_AccessibilityRequirements = nil
+}
+
+type CreateVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The suggested name for the storage space. This field is REQUIRED.
+	// It serves two purposes:
+	//  1. Idempotency - This name is generated by the CO to achieve
+	//     idempotency.  The Plugin SHOULD ensure that multiple
+	//     `CreateVolume` calls for the same name do not result in more
+	//     than one piece of storage provisioned corresponding to that
+	//     name. If a Plugin is unable to enforce idempotency, the CO's
+	//     error recovery logic could result in multiple (unused) volumes
+	//     being provisioned.
+	//     In the case of error, the CO MUST handle the gRPC error codes
+	//     per the recovery behavior defined in the "CreateVolume Errors"
+	//     section below.
+	//     The CO is responsible for cleaning up volumes it provisioned
+	//     that it no longer needs. If the CO is uncertain whether a volume
+	//     was provisioned or not when a `CreateVolume` call fails, the CO
+	//     MAY call `CreateVolume` again, with the same name, to ensure the
+	//     volume exists and to retrieve the volume's `volume_id` (unless
+	//     otherwise prohibited by "CreateVolume Errors").
+	//  2. Suggested name - Some storage systems allow callers to specify
+	//     an identifier by which to refer to the newly provisioned
+	//     storage. If a storage system supports this, it can optionally
+	//     use this name as the identifier for the new volume.
+	//
+	// Any Unicode string that conforms to the length limit is allowed
+	// except those containing the following banned characters:
+	// U+0000-U+0008, U+000B, U+000C, U+000E-U+001F, U+007F-U+009F.
+	// (These are control characters other than commonly used whitespace.)
+	Name string
+	// This field is OPTIONAL. This allows the CO to specify the capacity
+	// requirement of the volume to be provisioned. If not specified, the
+	// Plugin MAY choose an implementation-defined capacity range. If
+	// specified it MUST always be honored, even when creating volumes
+	// from a source; which MAY force some backends to internally extend
+	// the volume after creating it.
+	CapacityRange *CapacityRange
+	// The capabilities that the provisioned volume MUST have. SP MUST
+	// provision a volume that will satisfy ALL of the capabilities
+	// specified in this list. Otherwise SP MUST return the appropriate
+	// gRPC error code.
+	// The Plugin MUST assume that the CO MAY use the provisioned volume
+	// with ANY of the capabilities specified in this list.
+	// For example, a CO MAY specify two volume capabilities: one with
+	// access mode SINGLE_NODE_WRITER and another with access mode
+	// MULTI_NODE_READER_ONLY. In this case, the SP MUST verify that the
+	// provisioned volume can be used in either mode.
+	// This also enables the CO to do early validation: If ANY of the
+	// specified volume capabilities are not supported by the SP, the call
+	// MUST return the appropriate gRPC error code.
+	// This field is REQUIRED.
+	VolumeCapabilities []*VolumeCapability
+	// Plugin specific creation-time parameters passed in as opaque
+	// key-value pairs. This field is OPTIONAL. The Plugin is responsible
+	// for parsing and validating these parameters. COs will treat
+	// these as opaque.
+	Parameters map[string]string
+	// Secrets required by plugin to complete volume creation request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+	// If specified, the new volume will be pre-populated with data from
+	// this source. This field is OPTIONAL.
+	VolumeContentSource *VolumeContentSource
+	// Specifies where (regions, zones, racks, etc.) the provisioned
+	// volume MUST be accessible from.
+	// An SP SHALL advertise the requirements for topological
+	// accessibility information in documentation. COs SHALL only specify
+	// topological accessibility information supported by the SP.
+	// This field is OPTIONAL.
+	// This field SHALL NOT be specified unless the SP has the
+	// VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability.
+	// If this field is not specified and the SP has the
+	// VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability, the SP MAY
+	// choose where the provisioned volume is accessible from.
+	AccessibilityRequirements *TopologyRequirement
+	// Plugins MUST treat these
+	// as if they take precedence over the parameters field.
+	// This field SHALL NOT be specified unless the SP has the
+	// MODIFY_VOLUME plugin capability.
+	MutableParameters map[string]string
+}
+
+func (b0 CreateVolumeRequest_builder) Build() *CreateVolumeRequest {
+	m0 := &CreateVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Name = b.Name
+	x.xxx_hidden_CapacityRange = b.CapacityRange
+	x.xxx_hidden_VolumeCapabilities = &b.VolumeCapabilities
+	x.xxx_hidden_Parameters = b.Parameters
+	x.xxx_hidden_Secrets = b.Secrets
+	x.xxx_hidden_VolumeContentSource = b.VolumeContentSource
+	x.xxx_hidden_AccessibilityRequirements = b.AccessibilityRequirements
+	x.xxx_hidden_MutableParameters = b.MutableParameters
+	return m0
+}
+
+// Specifies what source the volume will be created from. One of the
+// type fields MUST be specified.
+type VolumeContentSource struct {
+	state           protoimpl.MessageState     `protogen:"opaque.v1"`
+	xxx_hidden_Type isVolumeContentSource_Type `protobuf_oneof:"type"`
+	unknownFields   protoimpl.UnknownFields
+	sizeCache       protoimpl.SizeCache
+}
+
+func (x *VolumeContentSource) Reset() {
+	*x = VolumeContentSource{}
+	mi := &file_csi_proto_msgTypes[8]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *VolumeContentSource) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*VolumeContentSource) ProtoMessage() {}
+
+func (x *VolumeContentSource) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[8]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *VolumeContentSource) GetSnapshot() *VolumeContentSource_SnapshotSource {
+	if x != nil {
+		if x, ok := x.xxx_hidden_Type.(*volumeContentSource_Snapshot); ok {
+			return x.Snapshot
+		}
+	}
+	return nil
+}
+
+func (x *VolumeContentSource) GetVolume() *VolumeContentSource_VolumeSource {
+	if x != nil {
+		if x, ok := x.xxx_hidden_Type.(*volumeContentSource_Volume); ok {
+			return x.Volume
+		}
+	}
+	return nil
+}
+
+func (x *VolumeContentSource) SetSnapshot(v *VolumeContentSource_SnapshotSource) {
+	if v == nil {
+		x.xxx_hidden_Type = nil
+		return
+	}
+	x.xxx_hidden_Type = &volumeContentSource_Snapshot{v}
+}
+
+func (x *VolumeContentSource) SetVolume(v *VolumeContentSource_VolumeSource) {
+	if v == nil {
+		x.xxx_hidden_Type = nil
+		return
+	}
+	x.xxx_hidden_Type = &volumeContentSource_Volume{v}
+}
+
+func (x *VolumeContentSource) HasType() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_Type != nil
+}
+
+func (x *VolumeContentSource) HasSnapshot() bool {
+	if x == nil {
+		return false
+	}
+	_, ok := x.xxx_hidden_Type.(*volumeContentSource_Snapshot)
+	return ok
+}
+
+func (x *VolumeContentSource) HasVolume() bool {
+	if x == nil {
+		return false
+	}
+	_, ok := x.xxx_hidden_Type.(*volumeContentSource_Volume)
+	return ok
+}
+
+func (x *VolumeContentSource) ClearType() {
+	x.xxx_hidden_Type = nil
+}
+
+func (x *VolumeContentSource) ClearSnapshot() {
+	if _, ok := x.xxx_hidden_Type.(*volumeContentSource_Snapshot); ok {
+		x.xxx_hidden_Type = nil
+	}
+}
+
+func (x *VolumeContentSource) ClearVolume() {
+	if _, ok := x.xxx_hidden_Type.(*volumeContentSource_Volume); ok {
+		x.xxx_hidden_Type = nil
+	}
+}
+
+const VolumeContentSource_Type_not_set_case case_VolumeContentSource_Type = 0
+const VolumeContentSource_Snapshot_case case_VolumeContentSource_Type = 1
+const VolumeContentSource_Volume_case case_VolumeContentSource_Type = 2
+
+func (x *VolumeContentSource) WhichType() case_VolumeContentSource_Type {
+	if x == nil {
+		return VolumeContentSource_Type_not_set_case
+	}
+	switch x.xxx_hidden_Type.(type) {
+	case *volumeContentSource_Snapshot:
+		return VolumeContentSource_Snapshot_case
+	case *volumeContentSource_Volume:
+		return VolumeContentSource_Volume_case
+	default:
+		return VolumeContentSource_Type_not_set_case
+	}
+}
+
+type VolumeContentSource_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Fields of oneof xxx_hidden_Type:
+	Snapshot *VolumeContentSource_SnapshotSource
+	Volume   *VolumeContentSource_VolumeSource
+	// -- end of xxx_hidden_Type
+}
+
+func (b0 VolumeContentSource_builder) Build() *VolumeContentSource {
+	m0 := &VolumeContentSource{}
+	b, x := &b0, m0
+	_, _ = b, x
+	if b.Snapshot != nil {
+		x.xxx_hidden_Type = &volumeContentSource_Snapshot{b.Snapshot}
+	}
+	if b.Volume != nil {
+		x.xxx_hidden_Type = &volumeContentSource_Volume{b.Volume}
+	}
+	return m0
+}
+
+type case_VolumeContentSource_Type protoreflect.FieldNumber
+
+func (x case_VolumeContentSource_Type) String() string {
+	md := file_csi_proto_msgTypes[8].Descriptor()
+	if x == 0 {
+		return "not set"
+	}
+	return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))
+}
+
+type isVolumeContentSource_Type interface {
+	isVolumeContentSource_Type()
+}
+
+type volumeContentSource_Snapshot struct {
+	Snapshot *VolumeContentSource_SnapshotSource `protobuf:"bytes,1,opt,name=snapshot,proto3,oneof"`
+}
+
+type volumeContentSource_Volume struct {
+	Volume *VolumeContentSource_VolumeSource `protobuf:"bytes,2,opt,name=volume,proto3,oneof"`
+}
+
+func (*volumeContentSource_Snapshot) isVolumeContentSource_Type() {}
+
+func (*volumeContentSource_Volume) isVolumeContentSource_Type() {}
+
+type CreateVolumeResponse struct {
+	state             protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_Volume *Volume                `protobuf:"bytes,1,opt,name=volume,proto3" json:"volume,omitempty"`
+	unknownFields     protoimpl.UnknownFields
+	sizeCache         protoimpl.SizeCache
+}
+
+func (x *CreateVolumeResponse) Reset() {
+	*x = CreateVolumeResponse{}
+	mi := &file_csi_proto_msgTypes[9]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *CreateVolumeResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CreateVolumeResponse) ProtoMessage() {}
+
+func (x *CreateVolumeResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[9]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *CreateVolumeResponse) GetVolume() *Volume {
+	if x != nil {
+		return x.xxx_hidden_Volume
+	}
+	return nil
+}
+
+func (x *CreateVolumeResponse) SetVolume(v *Volume) {
+	x.xxx_hidden_Volume = v
+}
+
+func (x *CreateVolumeResponse) HasVolume() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_Volume != nil
+}
+
+func (x *CreateVolumeResponse) ClearVolume() {
+	x.xxx_hidden_Volume = nil
+}
+
+type CreateVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Contains all attributes of the newly created volume that are
+	// relevant to the CO along with information required by the Plugin
+	// to uniquely identify the volume. This field is REQUIRED.
+	Volume *Volume
+}
+
+func (b0 CreateVolumeResponse_builder) Build() *CreateVolumeResponse {
+	m0 := &CreateVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Volume = b.Volume
+	return m0
+}
+
+// Specify a capability of a volume.
+type VolumeCapability struct {
+	state                 protoimpl.MessageState        `protogen:"opaque.v1"`
+	xxx_hidden_AccessType isVolumeCapability_AccessType `protobuf_oneof:"access_type"`
+	xxx_hidden_AccessMode *VolumeCapability_AccessMode  `protobuf:"bytes,3,opt,name=access_mode,json=accessMode,proto3" json:"access_mode,omitempty"`
+	unknownFields         protoimpl.UnknownFields
+	sizeCache             protoimpl.SizeCache
+}
+
+func (x *VolumeCapability) Reset() {
+	*x = VolumeCapability{}
+	mi := &file_csi_proto_msgTypes[10]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *VolumeCapability) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*VolumeCapability) ProtoMessage() {}
+
+func (x *VolumeCapability) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[10]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *VolumeCapability) GetBlock() *VolumeCapability_BlockVolume {
+	if x != nil {
+		if x, ok := x.xxx_hidden_AccessType.(*volumeCapability_Block); ok {
+			return x.Block
+		}
+	}
+	return nil
+}
+
+func (x *VolumeCapability) GetMount() *VolumeCapability_MountVolume {
+	if x != nil {
+		if x, ok := x.xxx_hidden_AccessType.(*volumeCapability_Mount); ok {
+			return x.Mount
+		}
+	}
+	return nil
+}
+
+func (x *VolumeCapability) GetAccessMode() *VolumeCapability_AccessMode {
+	if x != nil {
+		return x.xxx_hidden_AccessMode
+	}
+	return nil
+}
+
+func (x *VolumeCapability) SetBlock(v *VolumeCapability_BlockVolume) {
+	if v == nil {
+		x.xxx_hidden_AccessType = nil
+		return
+	}
+	x.xxx_hidden_AccessType = &volumeCapability_Block{v}
+}
+
+func (x *VolumeCapability) SetMount(v *VolumeCapability_MountVolume) {
+	if v == nil {
+		x.xxx_hidden_AccessType = nil
+		return
+	}
+	x.xxx_hidden_AccessType = &volumeCapability_Mount{v}
+}
+
+func (x *VolumeCapability) SetAccessMode(v *VolumeCapability_AccessMode) {
+	x.xxx_hidden_AccessMode = v
+}
+
+func (x *VolumeCapability) HasAccessType() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_AccessType != nil
+}
+
+func (x *VolumeCapability) HasBlock() bool {
+	if x == nil {
+		return false
+	}
+	_, ok := x.xxx_hidden_AccessType.(*volumeCapability_Block)
+	return ok
+}
+
+func (x *VolumeCapability) HasMount() bool {
+	if x == nil {
+		return false
+	}
+	_, ok := x.xxx_hidden_AccessType.(*volumeCapability_Mount)
+	return ok
+}
+
+func (x *VolumeCapability) HasAccessMode() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_AccessMode != nil
+}
+
+func (x *VolumeCapability) ClearAccessType() {
+	x.xxx_hidden_AccessType = nil
+}
+
+func (x *VolumeCapability) ClearBlock() {
+	if _, ok := x.xxx_hidden_AccessType.(*volumeCapability_Block); ok {
+		x.xxx_hidden_AccessType = nil
+	}
+}
+
+func (x *VolumeCapability) ClearMount() {
+	if _, ok := x.xxx_hidden_AccessType.(*volumeCapability_Mount); ok {
+		x.xxx_hidden_AccessType = nil
+	}
+}
+
+func (x *VolumeCapability) ClearAccessMode() {
+	x.xxx_hidden_AccessMode = nil
+}
+
+const VolumeCapability_AccessType_not_set_case case_VolumeCapability_AccessType = 0
+const VolumeCapability_Block_case case_VolumeCapability_AccessType = 1
+const VolumeCapability_Mount_case case_VolumeCapability_AccessType = 2
+
+func (x *VolumeCapability) WhichAccessType() case_VolumeCapability_AccessType {
+	if x == nil {
+		return VolumeCapability_AccessType_not_set_case
+	}
+	switch x.xxx_hidden_AccessType.(type) {
+	case *volumeCapability_Block:
+		return VolumeCapability_Block_case
+	case *volumeCapability_Mount:
+		return VolumeCapability_Mount_case
+	default:
+		return VolumeCapability_AccessType_not_set_case
+	}
+}
+
+type VolumeCapability_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Specifies what API the volume will be accessed using. One of the
+	// following fields MUST be specified.
+
+	// Fields of oneof xxx_hidden_AccessType:
+	Block *VolumeCapability_BlockVolume
+	Mount *VolumeCapability_MountVolume
+	// -- end of xxx_hidden_AccessType
+	// This is a REQUIRED field.
+	AccessMode *VolumeCapability_AccessMode
+}
+
+func (b0 VolumeCapability_builder) Build() *VolumeCapability {
+	m0 := &VolumeCapability{}
+	b, x := &b0, m0
+	_, _ = b, x
+	if b.Block != nil {
+		x.xxx_hidden_AccessType = &volumeCapability_Block{b.Block}
+	}
+	if b.Mount != nil {
+		x.xxx_hidden_AccessType = &volumeCapability_Mount{b.Mount}
+	}
+	x.xxx_hidden_AccessMode = b.AccessMode
+	return m0
+}
+
+type case_VolumeCapability_AccessType protoreflect.FieldNumber
+
+func (x case_VolumeCapability_AccessType) String() string {
+	md := file_csi_proto_msgTypes[10].Descriptor()
+	if x == 0 {
+		return "not set"
+	}
+	return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))
+}
+
+type isVolumeCapability_AccessType interface {
+	isVolumeCapability_AccessType()
+}
+
+type volumeCapability_Block struct {
+	Block *VolumeCapability_BlockVolume `protobuf:"bytes,1,opt,name=block,proto3,oneof"`
+}
+
+type volumeCapability_Mount struct {
+	Mount *VolumeCapability_MountVolume `protobuf:"bytes,2,opt,name=mount,proto3,oneof"`
+}
+
+func (*volumeCapability_Block) isVolumeCapability_AccessType() {}
+
+func (*volumeCapability_Mount) isVolumeCapability_AccessType() {}
+
+// The capacity of the storage space in bytes. To specify an exact size,
+// `required_bytes` and `limit_bytes` SHALL be set to the same value. At
+// least one of the these fields MUST be specified.
+type CapacityRange struct {
+	state                    protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_RequiredBytes int64                  `protobuf:"varint,1,opt,name=required_bytes,json=requiredBytes,proto3" json:"required_bytes,omitempty"`
+	xxx_hidden_LimitBytes    int64                  `protobuf:"varint,2,opt,name=limit_bytes,json=limitBytes,proto3" json:"limit_bytes,omitempty"`
+	unknownFields            protoimpl.UnknownFields
+	sizeCache                protoimpl.SizeCache
+}
+
+func (x *CapacityRange) Reset() {
+	*x = CapacityRange{}
+	mi := &file_csi_proto_msgTypes[11]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *CapacityRange) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CapacityRange) ProtoMessage() {}
+
+func (x *CapacityRange) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[11]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *CapacityRange) GetRequiredBytes() int64 {
+	if x != nil {
+		return x.xxx_hidden_RequiredBytes
+	}
+	return 0
+}
+
+func (x *CapacityRange) GetLimitBytes() int64 {
+	if x != nil {
+		return x.xxx_hidden_LimitBytes
+	}
+	return 0
+}
+
+func (x *CapacityRange) SetRequiredBytes(v int64) {
+	x.xxx_hidden_RequiredBytes = v
+}
+
+func (x *CapacityRange) SetLimitBytes(v int64) {
+	x.xxx_hidden_LimitBytes = v
+}
+
+type CapacityRange_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Volume MUST be at least this big. This field is OPTIONAL.
+	// A value of 0 is equal to an unspecified field value.
+	// The value of this field MUST NOT be negative.
+	RequiredBytes int64
+	// Volume MUST not be bigger than this. This field is OPTIONAL.
+	// A value of 0 is equal to an unspecified field value.
+	// The value of this field MUST NOT be negative.
+	LimitBytes int64
+}
+
+func (b0 CapacityRange_builder) Build() *CapacityRange {
+	m0 := &CapacityRange{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_RequiredBytes = b.RequiredBytes
+	x.xxx_hidden_LimitBytes = b.LimitBytes
+	return m0
+}
+
+// Information about a specific volume.
+type Volume struct {
+	state                         protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_CapacityBytes      int64                  `protobuf:"varint,1,opt,name=capacity_bytes,json=capacityBytes,proto3" json:"capacity_bytes,omitempty"`
+	xxx_hidden_VolumeId           string                 `protobuf:"bytes,2,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
+	xxx_hidden_VolumeContext      map[string]string      `protobuf:"bytes,3,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	xxx_hidden_ContentSource      *VolumeContentSource   `protobuf:"bytes,4,opt,name=content_source,json=contentSource,proto3" json:"content_source,omitempty"`
+	xxx_hidden_AccessibleTopology *[]*Topology           `protobuf:"bytes,5,rep,name=accessible_topology,json=accessibleTopology,proto3" json:"accessible_topology,omitempty"`
+	unknownFields                 protoimpl.UnknownFields
+	sizeCache                     protoimpl.SizeCache
+}
+
+func (x *Volume) Reset() {
+	*x = Volume{}
+	mi := &file_csi_proto_msgTypes[12]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Volume) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Volume) ProtoMessage() {}
+
+func (x *Volume) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[12]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *Volume) GetCapacityBytes() int64 {
+	if x != nil {
+		return x.xxx_hidden_CapacityBytes
+	}
+	return 0
+}
+
+func (x *Volume) GetVolumeId() string {
+	if x != nil {
+		return x.xxx_hidden_VolumeId
+	}
+	return ""
+}
+
+func (x *Volume) GetVolumeContext() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_VolumeContext
+	}
+	return nil
+}
+
+func (x *Volume) GetContentSource() *VolumeContentSource {
+	if x != nil {
+		return x.xxx_hidden_ContentSource
+	}
+	return nil
+}
+
+func (x *Volume) GetAccessibleTopology() []*Topology {
+	if x != nil {
+		if x.xxx_hidden_AccessibleTopology != nil {
+			return *x.xxx_hidden_AccessibleTopology
+		}
+	}
+	return nil
+}
+
+func (x *Volume) SetCapacityBytes(v int64) {
+	x.xxx_hidden_CapacityBytes = v
+}
+
+func (x *Volume) SetVolumeId(v string) {
+	x.xxx_hidden_VolumeId = v
+}
+
+func (x *Volume) SetVolumeContext(v map[string]string) {
+	x.xxx_hidden_VolumeContext = v
+}
+
+func (x *Volume) SetContentSource(v *VolumeContentSource) {
+	x.xxx_hidden_ContentSource = v
+}
+
+func (x *Volume) SetAccessibleTopology(v []*Topology) {
+	x.xxx_hidden_AccessibleTopology = &v
+}
+
+func (x *Volume) HasContentSource() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_ContentSource != nil
+}
+
+func (x *Volume) ClearContentSource() {
+	x.xxx_hidden_ContentSource = nil
+}
+
+type Volume_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The capacity of the volume in bytes. This field is OPTIONAL. If not
+	// set (value of 0), it indicates that the capacity of the volume is
+	// unknown (e.g., NFS share).
+	// The value of this field MUST NOT be negative.
+	CapacityBytes int64
+	// The identifier for this volume, generated by the plugin.
+	// This field is REQUIRED.
+	// This field MUST contain enough information to uniquely identify
+	// this specific volume vs all other volumes supported by this plugin.
+	// This field SHALL be used by the CO in subsequent calls to refer to
+	// this volume.
+	// The SP is NOT responsible for global uniqueness of volume_id across
+	// multiple SPs.
+	VolumeId string
+	// Opaque static properties of the volume. SP MAY use this field to
+	// ensure subsequent volume validation and publishing calls have
+	// contextual information.
+	// The contents of this field SHALL be opaque to a CO.
+	// The contents of this field SHALL NOT be mutable.
+	// The contents of this field SHALL be safe for the CO to cache.
+	// The contents of this field SHOULD NOT contain sensitive
+	// information.
+	// The contents of this field SHOULD NOT be used for uniquely
+	// identifying a volume. The `volume_id` alone SHOULD be sufficient to
+	// identify the volume.
+	// A volume uniquely identified by `volume_id` SHALL always report the
+	// same volume_context.
+	// This field is OPTIONAL and when present MUST be passed to volume
+	// validation and publishing calls.
+	VolumeContext map[string]string
+	// If specified, indicates that the volume is not empty and is
+	// pre-populated with data from the specified source.
+	// This field is OPTIONAL.
+	ContentSource *VolumeContentSource
+	// Specifies where (regions, zones, racks, etc.) the provisioned
+	// volume is accessible from.
+	// A plugin that returns this field MUST also set the
+	// VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability.
+	// An SP MAY specify multiple topologies to indicate the volume is
+	// accessible from multiple locations.
+	// COs MAY use this information along with the topology information
+	// returned by NodeGetInfo to ensure that a given volume is accessible
+	// from a given node when scheduling workloads.
+	// This field is OPTIONAL. If it is not specified, the CO MAY assume
+	// the volume is equally accessible from all nodes in the cluster and
+	// MAY schedule workloads referencing the volume on any available
+	// node.
+	//
+	// Example 1:
+	//
+	//	accessible_topology = {"region": "R1", "zone": "Z2"}
+	//
+	// Indicates a volume accessible only from the "region" "R1" and the
+	// "zone" "Z2".
+	//
+	// Example 2:
+	//
+	//	accessible_topology =
+	//	  {"region": "R1", "zone": "Z2"},
+	//	  {"region": "R1", "zone": "Z3"}
+	//
+	// Indicates a volume accessible from both "zone" "Z2" and "zone" "Z3"
+	// in the "region" "R1".
+	AccessibleTopology []*Topology
+}
+
+func (b0 Volume_builder) Build() *Volume {
+	m0 := &Volume{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_CapacityBytes = b.CapacityBytes
+	x.xxx_hidden_VolumeId = b.VolumeId
+	x.xxx_hidden_VolumeContext = b.VolumeContext
+	x.xxx_hidden_ContentSource = b.ContentSource
+	x.xxx_hidden_AccessibleTopology = &b.AccessibleTopology
+	return m0
+}
+
+type TopologyRequirement struct {
+	state                protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_Requisite *[]*Topology           `protobuf:"bytes,1,rep,name=requisite,proto3" json:"requisite,omitempty"`
+	xxx_hidden_Preferred *[]*Topology           `protobuf:"bytes,2,rep,name=preferred,proto3" json:"preferred,omitempty"`
+	unknownFields        protoimpl.UnknownFields
+	sizeCache            protoimpl.SizeCache
+}
+
+func (x *TopologyRequirement) Reset() {
+	*x = TopologyRequirement{}
+	mi := &file_csi_proto_msgTypes[13]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *TopologyRequirement) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TopologyRequirement) ProtoMessage() {}
+
+func (x *TopologyRequirement) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[13]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *TopologyRequirement) GetRequisite() []*Topology {
+	if x != nil {
+		if x.xxx_hidden_Requisite != nil {
+			return *x.xxx_hidden_Requisite
+		}
+	}
+	return nil
+}
+
+func (x *TopologyRequirement) GetPreferred() []*Topology {
+	if x != nil {
+		if x.xxx_hidden_Preferred != nil {
+			return *x.xxx_hidden_Preferred
+		}
+	}
+	return nil
+}
+
+func (x *TopologyRequirement) SetRequisite(v []*Topology) {
+	x.xxx_hidden_Requisite = &v
+}
+
+func (x *TopologyRequirement) SetPreferred(v []*Topology) {
+	x.xxx_hidden_Preferred = &v
+}
+
+type TopologyRequirement_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Specifies the list of topologies the provisioned volume MUST be
+	// accessible from.
+	// This field is OPTIONAL. If TopologyRequirement is specified either
+	// requisite or preferred or both MUST be specified.
+	//
+	// If requisite is specified, the provisioned volume MUST be
+	// accessible from at least one of the requisite topologies.
+	//
+	// Given
+	//
+	//	x = number of topologies provisioned volume is accessible from
+	//	n = number of requisite topologies
+	//
+	// The CO MUST ensure n >= 1. The SP MUST ensure x >= 1
+	// If x==n, then the SP MUST make the provisioned volume available to
+	// all topologies from the list of requisite topologies. If it is
+	// unable to do so, the SP MUST fail the CreateVolume call.
+	// For example, if a volume should be accessible from a single zone,
+	// and requisite =
+	//
+	//	{"region": "R1", "zone": "Z2"}
+	//
+	// then the provisioned volume MUST be accessible from the "region"
+	// "R1" and the "zone" "Z2".
+	// Similarly, if a volume should be accessible from two zones, and
+	// requisite =
+	//
+	//	{"region": "R1", "zone": "Z2"},
+	//	{"region": "R1", "zone": "Z3"}
+	//
+	// then the provisioned volume MUST be accessible from the "region"
+	// "R1" and both "zone" "Z2" and "zone" "Z3".
+	//
+	// If x<n, then the SP SHALL choose x unique topologies from the list
+	// of requisite topologies. If it is unable to do so, the SP MUST fail
+	// the CreateVolume call.
+	// For example, if a volume should be accessible from a single zone,
+	// and requisite =
+	//
+	//	{"region": "R1", "zone": "Z2"},
+	//	{"region": "R1", "zone": "Z3"}
+	//
+	// then the SP may choose to make the provisioned volume available in
+	// either the "zone" "Z2" or the "zone" "Z3" in the "region" "R1".
+	// Similarly, if a volume should be accessible from two zones, and
+	// requisite =
+	//
+	//	{"region": "R1", "zone": "Z2"},
+	//	{"region": "R1", "zone": "Z3"},
+	//	{"region": "R1", "zone": "Z4"}
+	//
+	// then the provisioned volume MUST be accessible from any combination
+	// of two unique topologies: e.g. "R1/Z2" and "R1/Z3", or "R1/Z2" and
+	//
+	//	"R1/Z4", or "R1/Z3" and "R1/Z4".
+	//
+	// If x>n, then the SP MUST make the provisioned volume available from
+	// all topologies from the list of requisite topologies and MAY choose
+	// the remaining x-n unique topologies from the list of all possible
+	// topologies. If it is unable to do so, the SP MUST fail the
+	// CreateVolume call.
+	// For example, if a volume should be accessible from two zones, and
+	// requisite =
+	//
+	//	{"region": "R1", "zone": "Z2"}
+	//
+	// then the provisioned volume MUST be accessible from the "region"
+	// "R1" and the "zone" "Z2" and the SP may select the second zone
+	// independently, e.g. "R1/Z4".
+	Requisite []*Topology
+	// Specifies the list of topologies the CO would prefer the volume to
+	// be provisioned in.
+	//
+	// This field is OPTIONAL. If TopologyRequirement is specified either
+	// requisite or preferred or both MUST be specified.
+	//
+	// An SP MUST attempt to make the provisioned volume available using
+	// the preferred topologies in order from first to last.
+	//
+	// If requisite is specified, all topologies in preferred list MUST
+	// also be present in the list of requisite topologies.
+	//
+	// If the SP is unable to to make the provisioned volume available
+	// from any of the preferred topologies, the SP MAY choose a topology
+	// from the list of requisite topologies.
+	// If the list of requisite topologies is not specified, then the SP
+	// MAY choose from the list of all possible topologies.
+	// If the list of requisite topologies is specified and the SP is
+	// unable to to make the provisioned volume available from any of the
+	// requisite topologies it MUST fail the CreateVolume call.
+	//
+	// Example 1:
+	// Given a volume should be accessible from a single zone, and
+	// requisite =
+	//
+	//	{"region": "R1", "zone": "Z2"},
+	//	{"region": "R1", "zone": "Z3"}
+	//
+	// preferred =
+	//
+	//	{"region": "R1", "zone": "Z3"}
+	//
+	// then the SP SHOULD first attempt to make the provisioned volume
+	// available from "zone" "Z3" in the "region" "R1" and fall back to
+	// "zone" "Z2" in the "region" "R1" if that is not possible.
+	//
+	// Example 2:
+	// Given a volume should be accessible from a single zone, and
+	// requisite =
+	//
+	//	{"region": "R1", "zone": "Z2"},
+	//	{"region": "R1", "zone": "Z3"},
+	//	{"region": "R1", "zone": "Z4"},
+	//	{"region": "R1", "zone": "Z5"}
+	//
+	// preferred =
+	//
+	//	{"region": "R1", "zone": "Z4"},
+	//	{"region": "R1", "zone": "Z2"}
+	//
+	// then the SP SHOULD first attempt to make the provisioned volume
+	// accessible from "zone" "Z4" in the "region" "R1" and fall back to
+	// "zone" "Z2" in the "region" "R1" if that is not possible. If that
+	// is not possible, the SP may choose between either the "zone"
+	// "Z3" or "Z5" in the "region" "R1".
+	//
+	// Example 3:
+	// Given a volume should be accessible from TWO zones (because an
+	// opaque parameter in CreateVolumeRequest, for example, specifies
+	// the volume is accessible from two zones, aka synchronously
+	// replicated), and
+	// requisite =
+	//
+	//	{"region": "R1", "zone": "Z2"},
+	//	{"region": "R1", "zone": "Z3"},
+	//	{"region": "R1", "zone": "Z4"},
+	//	{"region": "R1", "zone": "Z5"}
+	//
+	// preferred =
+	//
+	//	{"region": "R1", "zone": "Z5"},
+	//	{"region": "R1", "zone": "Z3"}
+	//
+	// then the SP SHOULD first attempt to make the provisioned volume
+	// accessible from the combination of the two "zones" "Z5" and "Z3" in
+	// the "region" "R1". If that's not possible, it should fall back to
+	// a combination of "Z5" and other possibilities from the list of
+	// requisite. If that's not possible, it should fall back  to a
+	// combination of "Z3" and other possibilities from the list of
+	// requisite. If that's not possible, it should fall back  to a
+	// combination of other possibilities from the list of requisite.
+	Preferred []*Topology
+}
+
+func (b0 TopologyRequirement_builder) Build() *TopologyRequirement {
+	m0 := &TopologyRequirement{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Requisite = &b.Requisite
+	x.xxx_hidden_Preferred = &b.Preferred
+	return m0
+}
+
+// Topology is a map of topological domains to topological segments.
+// A topological domain is a sub-division of a cluster, like "region",
+// "zone", "rack", etc.
+// A topological segment is a specific instance of a topological domain,
+// like "zone3", "rack3", etc.
+// For example {"com.company/zone": "Z1", "com.company/rack": "R3"}
+// Valid keys have two segments: an OPTIONAL prefix and name, separated
+// by a slash (/), for example: "com.company.example/zone".
+// The key name segment is REQUIRED. The prefix is OPTIONAL.
+// The key name MUST be 63 characters or less, begin and end with an
+// alphanumeric character ([a-z0-9A-Z]), and contain only dashes (-),
+// underscores (_), dots (.), or alphanumerics in between, for example
+// "zone".
+// The key prefix MUST be 63 characters or less, begin and end with a
+// lower-case alphanumeric character ([a-z0-9]), contain only
+// dashes (-), dots (.), or lower-case alphanumerics in between, and
+// follow domain name notation format
+// (https://tools.ietf.org/html/rfc1035#section-2.3.1).
+// The key prefix SHOULD include the plugin's host company name and/or
+// the plugin name, to minimize the possibility of collisions with keys
+// from other plugins.
+// If a key prefix is specified, it MUST be identical across all
+// topology keys returned by the SP (across all RPCs).
+// Keys MUST be case-insensitive. Meaning the keys "Zone" and "zone"
+// MUST not both exist.
+// Each value (topological segment) MUST contain 1 or more strings.
+// Each string MUST be 63 characters or less and begin and end with an
+// alphanumeric character with '-', '_', '.', or alphanumerics in
+// between.
+type Topology struct {
+	state               protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_Segments map[string]string      `protobuf:"bytes,1,rep,name=segments,proto3" json:"segments,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields       protoimpl.UnknownFields
+	sizeCache           protoimpl.SizeCache
+}
+
+func (x *Topology) Reset() {
+	*x = Topology{}
+	mi := &file_csi_proto_msgTypes[14]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Topology) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Topology) ProtoMessage() {}
+
+func (x *Topology) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[14]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *Topology) GetSegments() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Segments
+	}
+	return nil
+}
+
+func (x *Topology) SetSegments(v map[string]string) {
+	x.xxx_hidden_Segments = v
+}
+
+type Topology_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	Segments map[string]string
+}
+
+func (b0 Topology_builder) Build() *Topology {
+	m0 := &Topology{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Segments = b.Segments
+	return m0
+}
+
+type DeleteVolumeRequest struct {
+	state               protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_VolumeId string                 `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
+	xxx_hidden_Secrets  map[string]string      `protobuf:"bytes,2,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields       protoimpl.UnknownFields
+	sizeCache           protoimpl.SizeCache
+}
+
+func (x *DeleteVolumeRequest) Reset() {
+	*x = DeleteVolumeRequest{}
+	mi := &file_csi_proto_msgTypes[15]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *DeleteVolumeRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteVolumeRequest) ProtoMessage() {}
+
+func (x *DeleteVolumeRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[15]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *DeleteVolumeRequest) GetVolumeId() string {
+	if x != nil {
+		return x.xxx_hidden_VolumeId
+	}
+	return ""
+}
+
+func (x *DeleteVolumeRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Secrets
+	}
+	return nil
+}
+
+func (x *DeleteVolumeRequest) SetVolumeId(v string) {
+	x.xxx_hidden_VolumeId = v
+}
+
+func (x *DeleteVolumeRequest) SetSecrets(v map[string]string) {
+	x.xxx_hidden_Secrets = v
+}
+
+type DeleteVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume to be deprovisioned.
+	// This field is REQUIRED.
+	VolumeId string
+	// Secrets required by plugin to complete volume deletion request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+}
+
+func (b0 DeleteVolumeRequest_builder) Build() *DeleteVolumeRequest {
+	m0 := &DeleteVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_VolumeId = b.VolumeId
+	x.xxx_hidden_Secrets = b.Secrets
+	return m0
+}
+
+type DeleteVolumeResponse struct {
+	state         protoimpl.MessageState `protogen:"opaque.v1"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *DeleteVolumeResponse) Reset() {
+	*x = DeleteVolumeResponse{}
+	mi := &file_csi_proto_msgTypes[16]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *DeleteVolumeResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteVolumeResponse) ProtoMessage() {}
+
+func (x *DeleteVolumeResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[16]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+type DeleteVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 DeleteVolumeResponse_builder) Build() *DeleteVolumeResponse {
+	m0 := &DeleteVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
+
+type ControllerPublishVolumeRequest struct {
+	state                       protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_VolumeId         string                 `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
+	xxx_hidden_NodeId           string                 `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"`
+	xxx_hidden_VolumeCapability *VolumeCapability      `protobuf:"bytes,3,opt,name=volume_capability,json=volumeCapability,proto3" json:"volume_capability,omitempty"`
+	xxx_hidden_Readonly         bool                   `protobuf:"varint,4,opt,name=readonly,proto3" json:"readonly,omitempty"`
+	xxx_hidden_Secrets          map[string]string      `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	xxx_hidden_VolumeContext    map[string]string      `protobuf:"bytes,6,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields               protoimpl.UnknownFields
+	sizeCache                   protoimpl.SizeCache
+}
+
+func (x *ControllerPublishVolumeRequest) Reset() {
+	*x = ControllerPublishVolumeRequest{}
+	mi := &file_csi_proto_msgTypes[17]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ControllerPublishVolumeRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ControllerPublishVolumeRequest) ProtoMessage() {}
+
+func (x *ControllerPublishVolumeRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[17]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *ControllerPublishVolumeRequest) GetVolumeId() string {
+	if x != nil {
+		return x.xxx_hidden_VolumeId
+	}
+	return ""
+}
+
+func (x *ControllerPublishVolumeRequest) GetNodeId() string {
+	if x != nil {
+		return x.xxx_hidden_NodeId
+	}
+	return ""
+}
+
+func (x *ControllerPublishVolumeRequest) GetVolumeCapability() *VolumeCapability {
+	if x != nil {
+		return x.xxx_hidden_VolumeCapability
+	}
+	return nil
+}
+
+func (x *ControllerPublishVolumeRequest) GetReadonly() bool {
+	if x != nil {
+		return x.xxx_hidden_Readonly
+	}
+	return false
+}
+
+func (x *ControllerPublishVolumeRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Secrets
+	}
+	return nil
+}
+
+func (x *ControllerPublishVolumeRequest) GetVolumeContext() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_VolumeContext
+	}
+	return nil
+}
+
+func (x *ControllerPublishVolumeRequest) SetVolumeId(v string) {
+	x.xxx_hidden_VolumeId = v
+}
+
+func (x *ControllerPublishVolumeRequest) SetNodeId(v string) {
+	x.xxx_hidden_NodeId = v
+}
+
+func (x *ControllerPublishVolumeRequest) SetVolumeCapability(v *VolumeCapability) {
+	x.xxx_hidden_VolumeCapability = v
+}
+
+func (x *ControllerPublishVolumeRequest) SetReadonly(v bool) {
+	x.xxx_hidden_Readonly = v
+}
+
+func (x *ControllerPublishVolumeRequest) SetSecrets(v map[string]string) {
+	x.xxx_hidden_Secrets = v
+}
+
+func (x *ControllerPublishVolumeRequest) SetVolumeContext(v map[string]string) {
+	x.xxx_hidden_VolumeContext = v
+}
+
+func (x *ControllerPublishVolumeRequest) HasVolumeCapability() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_VolumeCapability != nil
+}
+
+func (x *ControllerPublishVolumeRequest) ClearVolumeCapability() {
+	x.xxx_hidden_VolumeCapability = nil
+}
+
+type ControllerPublishVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume to be used on a node.
+	// This field is REQUIRED.
+	VolumeId string
+	// The ID of the node. This field is REQUIRED. The CO SHALL set this
+	// field to match the node ID returned by `NodeGetInfo`.
+	NodeId string
+	// Volume capability describing how the CO intends to use this volume.
+	// SP MUST ensure the CO can use the published volume as described.
+	// Otherwise SP MUST return the appropriate gRPC error code.
+	// This is a REQUIRED field.
+	VolumeCapability *VolumeCapability
+	// Indicates SP MUST publish the volume in readonly mode.
+	// CO MUST set this field to false if SP does not have the
+	// PUBLISH_READONLY controller capability.
+	// This is a REQUIRED field.
+	Readonly bool
+	// Secrets required by plugin to complete controller publish volume
+	// request. This field is OPTIONAL. Refer to the
+	// `Secrets Requirements` section on how to use this field.
+	Secrets map[string]string
+	// Volume context as returned by SP in
+	// CreateVolumeResponse.Volume.volume_context.
+	// This field is OPTIONAL and MUST match the volume_context of the
+	// volume identified by `volume_id`.
+	VolumeContext map[string]string
+}
+
+func (b0 ControllerPublishVolumeRequest_builder) Build() *ControllerPublishVolumeRequest {
+	m0 := &ControllerPublishVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_VolumeId = b.VolumeId
+	x.xxx_hidden_NodeId = b.NodeId
+	x.xxx_hidden_VolumeCapability = b.VolumeCapability
+	x.xxx_hidden_Readonly = b.Readonly
+	x.xxx_hidden_Secrets = b.Secrets
+	x.xxx_hidden_VolumeContext = b.VolumeContext
+	return m0
+}
+
+type ControllerPublishVolumeResponse struct {
+	state                     protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_PublishContext map[string]string      `protobuf:"bytes,1,rep,name=publish_context,json=publishContext,proto3" json:"publish_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields             protoimpl.UnknownFields
+	sizeCache                 protoimpl.SizeCache
+}
+
+func (x *ControllerPublishVolumeResponse) Reset() {
+	*x = ControllerPublishVolumeResponse{}
+	mi := &file_csi_proto_msgTypes[18]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ControllerPublishVolumeResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ControllerPublishVolumeResponse) ProtoMessage() {}
+
+func (x *ControllerPublishVolumeResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *ControllerPublishVolumeResponse) GetPublishContext() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_PublishContext
+	}
+	return nil
+}
+
+func (x *ControllerPublishVolumeResponse) SetPublishContext(v map[string]string) {
+	x.xxx_hidden_PublishContext = v
+}
+
+type ControllerPublishVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Opaque static publish properties of the volume. SP MAY use this
+	// field to ensure subsequent `NodeStageVolume` or `NodePublishVolume`
+	// calls calls have contextual information.
+	// The contents of this field SHALL be opaque to a CO.
+	// The contents of this field SHALL NOT be mutable.
+	// The contents of this field SHALL be safe for the CO to cache.
+	// The contents of this field SHOULD NOT contain sensitive
+	// information.
+	// The contents of this field SHOULD NOT be used for uniquely
+	// identifying a volume. The `volume_id` alone SHOULD be sufficient to
+	// identify the volume.
+	// This field is OPTIONAL and when present MUST be passed to
+	// subsequent `NodeStageVolume` or `NodePublishVolume` calls
+	PublishContext map[string]string
+}
+
+func (b0 ControllerPublishVolumeResponse_builder) Build() *ControllerPublishVolumeResponse {
+	m0 := &ControllerPublishVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_PublishContext = b.PublishContext
+	return m0
+}
+
+type ControllerUnpublishVolumeRequest struct {
+	state               protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_VolumeId string                 `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
+	xxx_hidden_NodeId   string                 `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"`
+	xxx_hidden_Secrets  map[string]string      `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields       protoimpl.UnknownFields
+	sizeCache           protoimpl.SizeCache
+}
+
+func (x *ControllerUnpublishVolumeRequest) Reset() {
+	*x = ControllerUnpublishVolumeRequest{}
+	mi := &file_csi_proto_msgTypes[19]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ControllerUnpublishVolumeRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ControllerUnpublishVolumeRequest) ProtoMessage() {}
+
+func (x *ControllerUnpublishVolumeRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *ControllerUnpublishVolumeRequest) GetVolumeId() string {
+	if x != nil {
+		return x.xxx_hidden_VolumeId
+	}
+	return ""
+}
+
+func (x *ControllerUnpublishVolumeRequest) GetNodeId() string {
+	if x != nil {
+		return x.xxx_hidden_NodeId
+	}
+	return ""
+}
+
+func (x *ControllerUnpublishVolumeRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Secrets
+	}
+	return nil
+}
+
+func (x *ControllerUnpublishVolumeRequest) SetVolumeId(v string) {
+	x.xxx_hidden_VolumeId = v
+}
+
+func (x *ControllerUnpublishVolumeRequest) SetNodeId(v string) {
+	x.xxx_hidden_NodeId = v
+}
+
+func (x *ControllerUnpublishVolumeRequest) SetSecrets(v map[string]string) {
+	x.xxx_hidden_Secrets = v
+}
+
+type ControllerUnpublishVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume. This field is REQUIRED.
+	VolumeId string
+	// The ID of the node. This field is OPTIONAL. The CO SHOULD set this
+	// field to match the node ID returned by `NodeGetInfo` or leave it
+	// unset. If the value is set, the SP MUST unpublish the volume from
+	// the specified node. If the value is unset, the SP MUST unpublish
+	// the volume from all nodes it is published to.
+	NodeId string
+	// Secrets required by plugin to complete controller unpublish volume
+	// request. This SHOULD be the same secrets passed to the
+	// ControllerPublishVolume call for the specified volume.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+}
+
+func (b0 ControllerUnpublishVolumeRequest_builder) Build() *ControllerUnpublishVolumeRequest {
+	m0 := &ControllerUnpublishVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_VolumeId = b.VolumeId
+	x.xxx_hidden_NodeId = b.NodeId
+	x.xxx_hidden_Secrets = b.Secrets
+	return m0
+}
+
+type ControllerUnpublishVolumeResponse struct {
+	state         protoimpl.MessageState `protogen:"opaque.v1"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *ControllerUnpublishVolumeResponse) Reset() {
+	*x = ControllerUnpublishVolumeResponse{}
+	mi := &file_csi_proto_msgTypes[20]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ControllerUnpublishVolumeResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ControllerUnpublishVolumeResponse) ProtoMessage() {}
+
+func (x *ControllerUnpublishVolumeResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+type ControllerUnpublishVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 ControllerUnpublishVolumeResponse_builder) Build() *ControllerUnpublishVolumeResponse {
+	m0 := &ControllerUnpublishVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
+
+type ValidateVolumeCapabilitiesRequest struct {
+	state                         protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_VolumeId           string                 `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
+	xxx_hidden_VolumeContext      map[string]string      `protobuf:"bytes,2,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	xxx_hidden_VolumeCapabilities *[]*VolumeCapability   `protobuf:"bytes,3,rep,name=volume_capabilities,json=volumeCapabilities,proto3" json:"volume_capabilities,omitempty"`
+	xxx_hidden_Parameters         map[string]string      `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	xxx_hidden_Secrets            map[string]string      `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	xxx_hidden_MutableParameters  map[string]string      `protobuf:"bytes,6,rep,name=mutable_parameters,json=mutableParameters,proto3" json:"mutable_parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields                 protoimpl.UnknownFields
+	sizeCache                     protoimpl.SizeCache
+}
+
+func (x *ValidateVolumeCapabilitiesRequest) Reset() {
+	*x = ValidateVolumeCapabilitiesRequest{}
+	mi := &file_csi_proto_msgTypes[21]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ValidateVolumeCapabilitiesRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ValidateVolumeCapabilitiesRequest) ProtoMessage() {}
+
+func (x *ValidateVolumeCapabilitiesRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *ValidateVolumeCapabilitiesRequest) GetVolumeId() string {
+	if x != nil {
+		return x.xxx_hidden_VolumeId
+	}
+	return ""
+}
+
+func (x *ValidateVolumeCapabilitiesRequest) GetVolumeContext() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_VolumeContext
+	}
+	return nil
+}
+
+func (x *ValidateVolumeCapabilitiesRequest) GetVolumeCapabilities() []*VolumeCapability {
+	if x != nil {
+		if x.xxx_hidden_VolumeCapabilities != nil {
+			return *x.xxx_hidden_VolumeCapabilities
+		}
+	}
+	return nil
+}
+
+func (x *ValidateVolumeCapabilitiesRequest) GetParameters() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Parameters
+	}
+	return nil
+}
+
+func (x *ValidateVolumeCapabilitiesRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Secrets
+	}
+	return nil
+}
+
+func (x *ValidateVolumeCapabilitiesRequest) GetMutableParameters() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_MutableParameters
+	}
+	return nil
+}
+
+func (x *ValidateVolumeCapabilitiesRequest) SetVolumeId(v string) {
+	x.xxx_hidden_VolumeId = v
+}
+
+func (x *ValidateVolumeCapabilitiesRequest) SetVolumeContext(v map[string]string) {
+	x.xxx_hidden_VolumeContext = v
+}
+
+func (x *ValidateVolumeCapabilitiesRequest) SetVolumeCapabilities(v []*VolumeCapability) {
+	x.xxx_hidden_VolumeCapabilities = &v
+}
+
+func (x *ValidateVolumeCapabilitiesRequest) SetParameters(v map[string]string) {
+	x.xxx_hidden_Parameters = v
+}
+
+func (x *ValidateVolumeCapabilitiesRequest) SetSecrets(v map[string]string) {
+	x.xxx_hidden_Secrets = v
+}
+
+func (x *ValidateVolumeCapabilitiesRequest) SetMutableParameters(v map[string]string) {
+	x.xxx_hidden_MutableParameters = v
+}
+
+type ValidateVolumeCapabilitiesRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume to check. This field is REQUIRED.
+	VolumeId string
+	// Volume context as returned by SP in
+	// CreateVolumeResponse.Volume.volume_context.
+	// This field is OPTIONAL and MUST match the volume_context of the
+	// volume identified by `volume_id`.
+	VolumeContext map[string]string
+	// The capabilities that the CO wants to check for the volume. This
+	// call SHALL return "confirmed" only if all the volume capabilities
+	// specified below are supported. This field is REQUIRED.
+	VolumeCapabilities []*VolumeCapability
+	// See CreateVolumeRequest.parameters.
+	// This field is OPTIONAL.
+	Parameters map[string]string
+	// Secrets required by plugin to complete volume validation request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+	// See CreateVolumeRequest.mutable_parameters.
+	// This field is OPTIONAL.
+	MutableParameters map[string]string
+}
+
+func (b0 ValidateVolumeCapabilitiesRequest_builder) Build() *ValidateVolumeCapabilitiesRequest {
+	m0 := &ValidateVolumeCapabilitiesRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_VolumeId = b.VolumeId
+	x.xxx_hidden_VolumeContext = b.VolumeContext
+	x.xxx_hidden_VolumeCapabilities = &b.VolumeCapabilities
+	x.xxx_hidden_Parameters = b.Parameters
+	x.xxx_hidden_Secrets = b.Secrets
+	x.xxx_hidden_MutableParameters = b.MutableParameters
+	return m0
+}
+
+type ValidateVolumeCapabilitiesResponse struct {
+	state                protoimpl.MessageState                        `protogen:"opaque.v1"`
+	xxx_hidden_Confirmed *ValidateVolumeCapabilitiesResponse_Confirmed `protobuf:"bytes,1,opt,name=confirmed,proto3" json:"confirmed,omitempty"`
+	xxx_hidden_Message   string                                        `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
+	unknownFields        protoimpl.UnknownFields
+	sizeCache            protoimpl.SizeCache
+}
+
+func (x *ValidateVolumeCapabilitiesResponse) Reset() {
+	*x = ValidateVolumeCapabilitiesResponse{}
+	mi := &file_csi_proto_msgTypes[22]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ValidateVolumeCapabilitiesResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ValidateVolumeCapabilitiesResponse) ProtoMessage() {}
+
+func (x *ValidateVolumeCapabilitiesResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *ValidateVolumeCapabilitiesResponse) GetConfirmed() *ValidateVolumeCapabilitiesResponse_Confirmed {
+	if x != nil {
+		return x.xxx_hidden_Confirmed
+	}
+	return nil
+}
+
+func (x *ValidateVolumeCapabilitiesResponse) GetMessage() string {
+	if x != nil {
+		return x.xxx_hidden_Message
+	}
+	return ""
+}
+
+func (x *ValidateVolumeCapabilitiesResponse) SetConfirmed(v *ValidateVolumeCapabilitiesResponse_Confirmed) {
+	x.xxx_hidden_Confirmed = v
+}
+
+func (x *ValidateVolumeCapabilitiesResponse) SetMessage(v string) {
+	x.xxx_hidden_Message = v
+}
+
+func (x *ValidateVolumeCapabilitiesResponse) HasConfirmed() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_Confirmed != nil
+}
+
+func (x *ValidateVolumeCapabilitiesResponse) ClearConfirmed() {
+	x.xxx_hidden_Confirmed = nil
+}
+
+type ValidateVolumeCapabilitiesResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Confirmed indicates to the CO the set of capabilities that the
+	// plugin has validated. This field SHALL only be set to a non-empty
+	// value for successful validation responses.
+	// For successful validation responses, the CO SHALL compare the
+	// fields of this message to the originally requested capabilities in
+	// order to guard against an older plugin reporting "valid" for newer
+	// capability fields that it does not yet understand.
+	// This field is OPTIONAL.
+	Confirmed *ValidateVolumeCapabilitiesResponse_Confirmed
+	// Message to the CO if `confirmed` above is empty. This field is
+	// OPTIONAL.
+	// An empty string is equal to an unspecified field value.
+	Message string
+}
+
+func (b0 ValidateVolumeCapabilitiesResponse_builder) Build() *ValidateVolumeCapabilitiesResponse {
+	m0 := &ValidateVolumeCapabilitiesResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Confirmed = b.Confirmed
+	x.xxx_hidden_Message = b.Message
+	return m0
+}
+
+type ListVolumesRequest struct {
+	state                    protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_MaxEntries    int32                  `protobuf:"varint,1,opt,name=max_entries,json=maxEntries,proto3" json:"max_entries,omitempty"`
+	xxx_hidden_StartingToken string                 `protobuf:"bytes,2,opt,name=starting_token,json=startingToken,proto3" json:"starting_token,omitempty"`
+	unknownFields            protoimpl.UnknownFields
+	sizeCache                protoimpl.SizeCache
+}
+
+func (x *ListVolumesRequest) Reset() {
+	*x = ListVolumesRequest{}
+	mi := &file_csi_proto_msgTypes[23]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ListVolumesRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListVolumesRequest) ProtoMessage() {}
+
+func (x *ListVolumesRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *ListVolumesRequest) GetMaxEntries() int32 {
+	if x != nil {
+		return x.xxx_hidden_MaxEntries
+	}
+	return 0
+}
+
+func (x *ListVolumesRequest) GetStartingToken() string {
+	if x != nil {
+		return x.xxx_hidden_StartingToken
+	}
+	return ""
+}
+
+func (x *ListVolumesRequest) SetMaxEntries(v int32) {
+	x.xxx_hidden_MaxEntries = v
+}
+
+func (x *ListVolumesRequest) SetStartingToken(v string) {
+	x.xxx_hidden_StartingToken = v
+}
+
+type ListVolumesRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// If specified (non-zero value), the Plugin MUST NOT return more
+	// entries than this number in the response. If the actual number of
+	// entries is more than this number, the Plugin MUST set `next_token`
+	// in the response which can be used to get the next page of entries
+	// in the subsequent `ListVolumes` call. This field is OPTIONAL. If
+	// not specified (zero value), it means there is no restriction on the
+	// number of entries that can be returned.
+	// The value of this field MUST NOT be negative.
+	MaxEntries int32
+	// A token to specify where to start paginating. Set this field to
+	// `next_token` returned by a previous `ListVolumes` call to get the
+	// next page of entries. This field is OPTIONAL.
+	// An empty string is equal to an unspecified field value.
+	StartingToken string
+}
+
+func (b0 ListVolumesRequest_builder) Build() *ListVolumesRequest {
+	m0 := &ListVolumesRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_MaxEntries = b.MaxEntries
+	x.xxx_hidden_StartingToken = b.StartingToken
+	return m0
+}
+
+type ListVolumesResponse struct {
+	state                protoimpl.MessageState        `protogen:"opaque.v1"`
+	xxx_hidden_Entries   *[]*ListVolumesResponse_Entry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"`
+	xxx_hidden_NextToken string                        `protobuf:"bytes,2,opt,name=next_token,json=nextToken,proto3" json:"next_token,omitempty"`
+	unknownFields        protoimpl.UnknownFields
+	sizeCache            protoimpl.SizeCache
+}
+
+func (x *ListVolumesResponse) Reset() {
+	*x = ListVolumesResponse{}
+	mi := &file_csi_proto_msgTypes[24]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ListVolumesResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListVolumesResponse) ProtoMessage() {}
+
+func (x *ListVolumesResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *ListVolumesResponse) GetEntries() []*ListVolumesResponse_Entry {
+	if x != nil {
+		if x.xxx_hidden_Entries != nil {
+			return *x.xxx_hidden_Entries
+		}
+	}
+	return nil
+}
+
+func (x *ListVolumesResponse) GetNextToken() string {
+	if x != nil {
+		return x.xxx_hidden_NextToken
+	}
+	return ""
+}
+
+func (x *ListVolumesResponse) SetEntries(v []*ListVolumesResponse_Entry) {
+	x.xxx_hidden_Entries = &v
+}
+
+func (x *ListVolumesResponse) SetNextToken(v string) {
+	x.xxx_hidden_NextToken = v
+}
+
+type ListVolumesResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	Entries []*ListVolumesResponse_Entry
+	// This token allows you to get the next page of entries for
+	// `ListVolumes` request. If the number of entries is larger than
+	// `max_entries`, use the `next_token` as a value for the
+	// `starting_token` field in the next `ListVolumes` request. This
+	// field is OPTIONAL.
+	// An empty string is equal to an unspecified field value.
+	NextToken string
+}
+
+func (b0 ListVolumesResponse_builder) Build() *ListVolumesResponse {
+	m0 := &ListVolumesResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Entries = &b.Entries
+	x.xxx_hidden_NextToken = b.NextToken
+	return m0
+}
+
+type ControllerGetVolumeRequest struct {
+	state               protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_VolumeId string                 `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
+	unknownFields       protoimpl.UnknownFields
+	sizeCache           protoimpl.SizeCache
+}
+
+func (x *ControllerGetVolumeRequest) Reset() {
+	*x = ControllerGetVolumeRequest{}
+	mi := &file_csi_proto_msgTypes[25]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ControllerGetVolumeRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ControllerGetVolumeRequest) ProtoMessage() {}
+
+func (x *ControllerGetVolumeRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *ControllerGetVolumeRequest) GetVolumeId() string {
+	if x != nil {
+		return x.xxx_hidden_VolumeId
+	}
+	return ""
+}
+
+func (x *ControllerGetVolumeRequest) SetVolumeId(v string) {
+	x.xxx_hidden_VolumeId = v
+}
+
+type ControllerGetVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume to fetch current volume information for.
+	// This field is REQUIRED.
+	VolumeId string
+}
+
+func (b0 ControllerGetVolumeRequest_builder) Build() *ControllerGetVolumeRequest {
+	m0 := &ControllerGetVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_VolumeId = b.VolumeId
+	return m0
+}
+
+type ControllerGetVolumeResponse struct {
+	state             protoimpl.MessageState                    `protogen:"opaque.v1"`
+	xxx_hidden_Volume *Volume                                   `protobuf:"bytes,1,opt,name=volume,proto3" json:"volume,omitempty"`
+	xxx_hidden_Status *ControllerGetVolumeResponse_VolumeStatus `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`
+	unknownFields     protoimpl.UnknownFields
+	sizeCache         protoimpl.SizeCache
+}
+
+func (x *ControllerGetVolumeResponse) Reset() {
+	*x = ControllerGetVolumeResponse{}
+	mi := &file_csi_proto_msgTypes[26]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ControllerGetVolumeResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ControllerGetVolumeResponse) ProtoMessage() {}
+
+func (x *ControllerGetVolumeResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *ControllerGetVolumeResponse) GetVolume() *Volume {
+	if x != nil {
+		return x.xxx_hidden_Volume
+	}
+	return nil
+}
+
+func (x *ControllerGetVolumeResponse) GetStatus() *ControllerGetVolumeResponse_VolumeStatus {
+	if x != nil {
+		return x.xxx_hidden_Status
+	}
+	return nil
+}
+
+func (x *ControllerGetVolumeResponse) SetVolume(v *Volume) {
+	x.xxx_hidden_Volume = v
+}
+
+func (x *ControllerGetVolumeResponse) SetStatus(v *ControllerGetVolumeResponse_VolumeStatus) {
+	x.xxx_hidden_Status = v
+}
+
+func (x *ControllerGetVolumeResponse) HasVolume() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_Volume != nil
+}
+
+func (x *ControllerGetVolumeResponse) HasStatus() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_Status != nil
+}
+
+func (x *ControllerGetVolumeResponse) ClearVolume() {
+	x.xxx_hidden_Volume = nil
+}
+
+func (x *ControllerGetVolumeResponse) ClearStatus() {
+	x.xxx_hidden_Status = nil
+}
+
+type ControllerGetVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This field is REQUIRED
+	Volume *Volume
+	// This field is REQUIRED.
+	Status *ControllerGetVolumeResponse_VolumeStatus
+}
+
+func (b0 ControllerGetVolumeResponse_builder) Build() *ControllerGetVolumeResponse {
+	m0 := &ControllerGetVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Volume = b.Volume
+	x.xxx_hidden_Status = b.Status
+	return m0
+}
+
+type ControllerModifyVolumeRequest struct {
+	state                        protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_VolumeId          string                 `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
+	xxx_hidden_Secrets           map[string]string      `protobuf:"bytes,2,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	xxx_hidden_MutableParameters map[string]string      `protobuf:"bytes,3,rep,name=mutable_parameters,json=mutableParameters,proto3" json:"mutable_parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields                protoimpl.UnknownFields
+	sizeCache                    protoimpl.SizeCache
+}
+
+func (x *ControllerModifyVolumeRequest) Reset() {
+	*x = ControllerModifyVolumeRequest{}
+	mi := &file_csi_proto_msgTypes[27]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ControllerModifyVolumeRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ControllerModifyVolumeRequest) ProtoMessage() {}
+
+func (x *ControllerModifyVolumeRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *ControllerModifyVolumeRequest) GetVolumeId() string {
+	if x != nil {
+		return x.xxx_hidden_VolumeId
+	}
+	return ""
+}
+
+func (x *ControllerModifyVolumeRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Secrets
+	}
+	return nil
+}
+
+func (x *ControllerModifyVolumeRequest) GetMutableParameters() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_MutableParameters
+	}
+	return nil
+}
+
+func (x *ControllerModifyVolumeRequest) SetVolumeId(v string) {
+	x.xxx_hidden_VolumeId = v
+}
+
+func (x *ControllerModifyVolumeRequest) SetSecrets(v map[string]string) {
+	x.xxx_hidden_Secrets = v
+}
+
+func (x *ControllerModifyVolumeRequest) SetMutableParameters(v map[string]string) {
+	x.xxx_hidden_MutableParameters = v
+}
+
+type ControllerModifyVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Contains identity information for the existing volume.
+	// This field is REQUIRED.
+	VolumeId string
+	// Secrets required by plugin to complete modify volume request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+	// Plugin specific volume attributes to mutate, passed in as
+	// opaque key-value pairs.
+	// This field is REQUIRED. The Plugin is responsible for
+	// parsing and validating these parameters. COs will treat these
+	// as opaque. The CO SHOULD specify the intended values of all mutable
+	// parameters it intends to modify. SPs MUST NOT modify volumes based
+	// on the absence of keys, only keys that are specified should result
+	// in modifications to the volume.
+	MutableParameters map[string]string
+}
+
+func (b0 ControllerModifyVolumeRequest_builder) Build() *ControllerModifyVolumeRequest {
+	m0 := &ControllerModifyVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_VolumeId = b.VolumeId
+	x.xxx_hidden_Secrets = b.Secrets
+	x.xxx_hidden_MutableParameters = b.MutableParameters
+	return m0
+}
+
+type ControllerModifyVolumeResponse struct {
+	state         protoimpl.MessageState `protogen:"opaque.v1"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *ControllerModifyVolumeResponse) Reset() {
+	*x = ControllerModifyVolumeResponse{}
+	mi := &file_csi_proto_msgTypes[28]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ControllerModifyVolumeResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ControllerModifyVolumeResponse) ProtoMessage() {}
+
+func (x *ControllerModifyVolumeResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+type ControllerModifyVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 ControllerModifyVolumeResponse_builder) Build() *ControllerModifyVolumeResponse {
+	m0 := &ControllerModifyVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
+
+type GetCapacityRequest struct {
+	state                         protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_VolumeCapabilities *[]*VolumeCapability   `protobuf:"bytes,1,rep,name=volume_capabilities,json=volumeCapabilities,proto3" json:"volume_capabilities,omitempty"`
+	xxx_hidden_Parameters         map[string]string      `protobuf:"bytes,2,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	xxx_hidden_AccessibleTopology *Topology              `protobuf:"bytes,3,opt,name=accessible_topology,json=accessibleTopology,proto3" json:"accessible_topology,omitempty"`
+	unknownFields                 protoimpl.UnknownFields
+	sizeCache                     protoimpl.SizeCache
+}
+
+func (x *GetCapacityRequest) Reset() {
+	*x = GetCapacityRequest{}
+	mi := &file_csi_proto_msgTypes[29]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *GetCapacityRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetCapacityRequest) ProtoMessage() {}
+
+func (x *GetCapacityRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *GetCapacityRequest) GetVolumeCapabilities() []*VolumeCapability {
+	if x != nil {
+		if x.xxx_hidden_VolumeCapabilities != nil {
+			return *x.xxx_hidden_VolumeCapabilities
+		}
+	}
+	return nil
+}
+
+func (x *GetCapacityRequest) GetParameters() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Parameters
+	}
+	return nil
+}
+
+func (x *GetCapacityRequest) GetAccessibleTopology() *Topology {
+	if x != nil {
+		return x.xxx_hidden_AccessibleTopology
+	}
+	return nil
+}
+
+func (x *GetCapacityRequest) SetVolumeCapabilities(v []*VolumeCapability) {
+	x.xxx_hidden_VolumeCapabilities = &v
+}
+
+func (x *GetCapacityRequest) SetParameters(v map[string]string) {
+	x.xxx_hidden_Parameters = v
+}
+
+func (x *GetCapacityRequest) SetAccessibleTopology(v *Topology) {
+	x.xxx_hidden_AccessibleTopology = v
+}
+
+func (x *GetCapacityRequest) HasAccessibleTopology() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_AccessibleTopology != nil
+}
+
+func (x *GetCapacityRequest) ClearAccessibleTopology() {
+	x.xxx_hidden_AccessibleTopology = nil
+}
+
+type GetCapacityRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// If specified, the Plugin SHALL report the capacity of the storage
+	// that can be used to provision volumes that satisfy ALL of the
+	// specified `volume_capabilities`. These are the same
+	// `volume_capabilities` the CO will use in `CreateVolumeRequest`.
+	// This field is OPTIONAL.
+	VolumeCapabilities []*VolumeCapability
+	// If specified, the Plugin SHALL report the capacity of the storage
+	// that can be used to provision volumes with the given Plugin
+	// specific `parameters`. These are the same `parameters` the CO will
+	// use in `CreateVolumeRequest`. This field is OPTIONAL.
+	Parameters map[string]string
+	// If specified, the Plugin SHALL report the capacity of the storage
+	// that can be used to provision volumes that in the specified
+	// `accessible_topology`. This is the same as the
+	// `accessible_topology` the CO returns in a `CreateVolumeResponse`.
+	// This field is OPTIONAL. This field SHALL NOT be set unless the
+	// plugin advertises the VOLUME_ACCESSIBILITY_CONSTRAINTS capability.
+	AccessibleTopology *Topology
+}
+
+func (b0 GetCapacityRequest_builder) Build() *GetCapacityRequest {
+	m0 := &GetCapacityRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_VolumeCapabilities = &b.VolumeCapabilities
+	x.xxx_hidden_Parameters = b.Parameters
+	x.xxx_hidden_AccessibleTopology = b.AccessibleTopology
+	return m0
+}
+
+type GetCapacityResponse struct {
+	state                        protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_AvailableCapacity int64                  `protobuf:"varint,1,opt,name=available_capacity,json=availableCapacity,proto3" json:"available_capacity,omitempty"`
+	xxx_hidden_MaximumVolumeSize *wrapperspb.Int64Value `protobuf:"bytes,2,opt,name=maximum_volume_size,json=maximumVolumeSize,proto3" json:"maximum_volume_size,omitempty"`
+	xxx_hidden_MinimumVolumeSize *wrapperspb.Int64Value `protobuf:"bytes,3,opt,name=minimum_volume_size,json=minimumVolumeSize,proto3" json:"minimum_volume_size,omitempty"`
+	unknownFields                protoimpl.UnknownFields
+	sizeCache                    protoimpl.SizeCache
+}
+
+func (x *GetCapacityResponse) Reset() {
+	*x = GetCapacityResponse{}
+	mi := &file_csi_proto_msgTypes[30]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *GetCapacityResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetCapacityResponse) ProtoMessage() {}
+
+func (x *GetCapacityResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *GetCapacityResponse) GetAvailableCapacity() int64 {
+	if x != nil {
+		return x.xxx_hidden_AvailableCapacity
+	}
+	return 0
+}
+
+func (x *GetCapacityResponse) GetMaximumVolumeSize() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.xxx_hidden_MaximumVolumeSize
+	}
+	return nil
+}
+
+func (x *GetCapacityResponse) GetMinimumVolumeSize() *wrapperspb.Int64Value {
+	if x != nil {
+		return x.xxx_hidden_MinimumVolumeSize
+	}
+	return nil
+}
+
+func (x *GetCapacityResponse) SetAvailableCapacity(v int64) {
+	x.xxx_hidden_AvailableCapacity = v
+}
+
+func (x *GetCapacityResponse) SetMaximumVolumeSize(v *wrapperspb.Int64Value) {
+	x.xxx_hidden_MaximumVolumeSize = v
+}
+
+func (x *GetCapacityResponse) SetMinimumVolumeSize(v *wrapperspb.Int64Value) {
+	x.xxx_hidden_MinimumVolumeSize = v
+}
+
+func (x *GetCapacityResponse) HasMaximumVolumeSize() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_MaximumVolumeSize != nil
+}
+
+func (x *GetCapacityResponse) HasMinimumVolumeSize() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_MinimumVolumeSize != nil
+}
+
+func (x *GetCapacityResponse) ClearMaximumVolumeSize() {
+	x.xxx_hidden_MaximumVolumeSize = nil
+}
+
+func (x *GetCapacityResponse) ClearMinimumVolumeSize() {
+	x.xxx_hidden_MinimumVolumeSize = nil
+}
+
+type GetCapacityResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The available capacity, in bytes, of the storage that can be used
+	// to provision volumes. If `volume_capabilities` or `parameters` is
+	// specified in the request, the Plugin SHALL take those into
+	// consideration when calculating the available capacity of the
+	// storage. This field is REQUIRED.
+	// The value of this field MUST NOT be negative.
+	AvailableCapacity int64
+	// The largest size that may be used in a
+	// CreateVolumeRequest.capacity_range.required_bytes field
+	// to create a volume with the same parameters as those in
+	// GetCapacityRequest.
+	//
+	// If `volume_capabilities` or `parameters` is
+	// specified in the request, the Plugin SHALL take those into
+	// consideration when calculating the minimum volume size of the
+	// storage.
+	//
+	// This field is OPTIONAL. MUST NOT be negative.
+	// The Plugin SHOULD provide a value for this field if it has
+	// a maximum size for individual volumes and leave it unset
+	// otherwise. COs MAY use it to make decision about
+	// where to create volumes.
+	MaximumVolumeSize *wrapperspb.Int64Value
+	// The smallest size that may be used in a
+	// CreateVolumeRequest.capacity_range.limit_bytes field
+	// to create a volume with the same parameters as those in
+	// GetCapacityRequest.
+	//
+	// If `volume_capabilities` or `parameters` is
+	// specified in the request, the Plugin SHALL take those into
+	// consideration when calculating the maximum volume size of the
+	// storage.
+	//
+	// This field is OPTIONAL. MUST NOT be negative.
+	// The Plugin SHOULD provide a value for this field if it has
+	// a minimum size for individual volumes and leave it unset
+	// otherwise. COs MAY use it to make decision about
+	// where to create volumes.
+	MinimumVolumeSize *wrapperspb.Int64Value
+}
+
+func (b0 GetCapacityResponse_builder) Build() *GetCapacityResponse {
+	m0 := &GetCapacityResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_AvailableCapacity = b.AvailableCapacity
+	x.xxx_hidden_MaximumVolumeSize = b.MaximumVolumeSize
+	x.xxx_hidden_MinimumVolumeSize = b.MinimumVolumeSize
+	return m0
+}
+
+type ControllerGetCapabilitiesRequest struct {
+	state         protoimpl.MessageState `protogen:"opaque.v1"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *ControllerGetCapabilitiesRequest) Reset() {
+	*x = ControllerGetCapabilitiesRequest{}
+	mi := &file_csi_proto_msgTypes[31]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ControllerGetCapabilitiesRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ControllerGetCapabilitiesRequest) ProtoMessage() {}
+
+func (x *ControllerGetCapabilitiesRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+type ControllerGetCapabilitiesRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 ControllerGetCapabilitiesRequest_builder) Build() *ControllerGetCapabilitiesRequest {
+	m0 := &ControllerGetCapabilitiesRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
+
+type ControllerGetCapabilitiesResponse struct {
+	state                   protoimpl.MessageState          `protogen:"opaque.v1"`
+	xxx_hidden_Capabilities *[]*ControllerServiceCapability `protobuf:"bytes,1,rep,name=capabilities,proto3" json:"capabilities,omitempty"`
+	unknownFields           protoimpl.UnknownFields
+	sizeCache               protoimpl.SizeCache
+}
+
+func (x *ControllerGetCapabilitiesResponse) Reset() {
+	*x = ControllerGetCapabilitiesResponse{}
+	mi := &file_csi_proto_msgTypes[32]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ControllerGetCapabilitiesResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ControllerGetCapabilitiesResponse) ProtoMessage() {}
+
+func (x *ControllerGetCapabilitiesResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *ControllerGetCapabilitiesResponse) GetCapabilities() []*ControllerServiceCapability {
+	if x != nil {
+		if x.xxx_hidden_Capabilities != nil {
+			return *x.xxx_hidden_Capabilities
+		}
+	}
+	return nil
+}
+
+func (x *ControllerGetCapabilitiesResponse) SetCapabilities(v []*ControllerServiceCapability) {
+	x.xxx_hidden_Capabilities = &v
+}
+
+type ControllerGetCapabilitiesResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// All the capabilities that the controller service supports. This
+	// field is OPTIONAL.
+	Capabilities []*ControllerServiceCapability
+}
+
+func (b0 ControllerGetCapabilitiesResponse_builder) Build() *ControllerGetCapabilitiesResponse {
+	m0 := &ControllerGetCapabilitiesResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Capabilities = &b.Capabilities
+	return m0
+}
+
+// Specifies a capability of the controller service.
+type ControllerServiceCapability struct {
+	state           protoimpl.MessageState             `protogen:"opaque.v1"`
+	xxx_hidden_Type isControllerServiceCapability_Type `protobuf_oneof:"type"`
+	unknownFields   protoimpl.UnknownFields
+	sizeCache       protoimpl.SizeCache
+}
+
+func (x *ControllerServiceCapability) Reset() {
+	*x = ControllerServiceCapability{}
+	mi := &file_csi_proto_msgTypes[33]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ControllerServiceCapability) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ControllerServiceCapability) ProtoMessage() {}
+
+func (x *ControllerServiceCapability) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *ControllerServiceCapability) GetRpc() *ControllerServiceCapability_RPC {
+	if x != nil {
+		if x, ok := x.xxx_hidden_Type.(*controllerServiceCapability_Rpc); ok {
+			return x.Rpc
+		}
+	}
+	return nil
+}
+
+func (x *ControllerServiceCapability) SetRpc(v *ControllerServiceCapability_RPC) {
+	if v == nil {
+		x.xxx_hidden_Type = nil
+		return
+	}
+	x.xxx_hidden_Type = &controllerServiceCapability_Rpc{v}
+}
+
+func (x *ControllerServiceCapability) HasType() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_Type != nil
+}
+
+func (x *ControllerServiceCapability) HasRpc() bool {
+	if x == nil {
+		return false
+	}
+	_, ok := x.xxx_hidden_Type.(*controllerServiceCapability_Rpc)
+	return ok
+}
+
+func (x *ControllerServiceCapability) ClearType() {
+	x.xxx_hidden_Type = nil
+}
+
+func (x *ControllerServiceCapability) ClearRpc() {
+	if _, ok := x.xxx_hidden_Type.(*controllerServiceCapability_Rpc); ok {
+		x.xxx_hidden_Type = nil
+	}
+}
+
+const ControllerServiceCapability_Type_not_set_case case_ControllerServiceCapability_Type = 0
+const ControllerServiceCapability_Rpc_case case_ControllerServiceCapability_Type = 1
+
+func (x *ControllerServiceCapability) WhichType() case_ControllerServiceCapability_Type {
+	if x == nil {
+		return ControllerServiceCapability_Type_not_set_case
+	}
+	switch x.xxx_hidden_Type.(type) {
+	case *controllerServiceCapability_Rpc:
+		return ControllerServiceCapability_Rpc_case
+	default:
+		return ControllerServiceCapability_Type_not_set_case
+	}
+}
+
+type ControllerServiceCapability_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Fields of oneof xxx_hidden_Type:
+	// RPC that the controller supports.
+	Rpc *ControllerServiceCapability_RPC
+	// -- end of xxx_hidden_Type
+}
+
+func (b0 ControllerServiceCapability_builder) Build() *ControllerServiceCapability {
+	m0 := &ControllerServiceCapability{}
+	b, x := &b0, m0
+	_, _ = b, x
+	if b.Rpc != nil {
+		x.xxx_hidden_Type = &controllerServiceCapability_Rpc{b.Rpc}
+	}
+	return m0
+}
+
+type case_ControllerServiceCapability_Type protoreflect.FieldNumber
+
+func (x case_ControllerServiceCapability_Type) String() string {
+	md := file_csi_proto_msgTypes[33].Descriptor()
+	if x == 0 {
+		return "not set"
+	}
+	return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))
+}
+
+type isControllerServiceCapability_Type interface {
+	isControllerServiceCapability_Type()
+}
+
+type controllerServiceCapability_Rpc struct {
+	// RPC that the controller supports.
+	Rpc *ControllerServiceCapability_RPC `protobuf:"bytes,1,opt,name=rpc,proto3,oneof"`
+}
+
+func (*controllerServiceCapability_Rpc) isControllerServiceCapability_Type() {}
+
+type CreateSnapshotRequest struct {
+	state                     protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_SourceVolumeId string                 `protobuf:"bytes,1,opt,name=source_volume_id,json=sourceVolumeId,proto3" json:"source_volume_id,omitempty"`
+	xxx_hidden_Name           string                 `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	xxx_hidden_Secrets        map[string]string      `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	xxx_hidden_Parameters     map[string]string      `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields             protoimpl.UnknownFields
+	sizeCache                 protoimpl.SizeCache
+}
+
+func (x *CreateSnapshotRequest) Reset() {
+	*x = CreateSnapshotRequest{}
+	mi := &file_csi_proto_msgTypes[34]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *CreateSnapshotRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CreateSnapshotRequest) ProtoMessage() {}
+
+func (x *CreateSnapshotRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *CreateSnapshotRequest) GetSourceVolumeId() string {
+	if x != nil {
+		return x.xxx_hidden_SourceVolumeId
+	}
+	return ""
+}
+
+func (x *CreateSnapshotRequest) GetName() string {
+	if x != nil {
+		return x.xxx_hidden_Name
+	}
+	return ""
+}
+
+func (x *CreateSnapshotRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Secrets
+	}
+	return nil
+}
+
+func (x *CreateSnapshotRequest) GetParameters() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Parameters
+	}
+	return nil
+}
+
+func (x *CreateSnapshotRequest) SetSourceVolumeId(v string) {
+	x.xxx_hidden_SourceVolumeId = v
+}
+
+func (x *CreateSnapshotRequest) SetName(v string) {
+	x.xxx_hidden_Name = v
+}
+
+func (x *CreateSnapshotRequest) SetSecrets(v map[string]string) {
+	x.xxx_hidden_Secrets = v
+}
+
+func (x *CreateSnapshotRequest) SetParameters(v map[string]string) {
+	x.xxx_hidden_Parameters = v
+}
+
+type CreateSnapshotRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the source volume to be snapshotted.
+	// This field is REQUIRED.
+	SourceVolumeId string
+	// The suggested name for the snapshot. This field is REQUIRED for
+	// idempotency.
+	// Any Unicode string that conforms to the length limit is allowed
+	// except those containing the following banned characters:
+	// U+0000-U+0008, U+000B, U+000C, U+000E-U+001F, U+007F-U+009F.
+	// (These are control characters other than commonly used whitespace.)
+	Name string
+	// Secrets required by plugin to complete snapshot creation request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+	// Plugin specific parameters passed in as opaque key-value pairs.
+	// This field is OPTIONAL. The Plugin is responsible for parsing and
+	// validating these parameters. COs will treat these as opaque.
+	// Use cases for opaque parameters:
+	//   - Specify a policy to automatically clean up the snapshot.
+	//   - Specify an expiration date for the snapshot.
+	//   - Specify whether the snapshot is readonly or read/write.
+	//   - Specify if the snapshot should be replicated to some place.
+	//   - Specify primary or secondary for replication systems that
+	//     support snapshotting only on primary.
+	Parameters map[string]string
+}
+
+func (b0 CreateSnapshotRequest_builder) Build() *CreateSnapshotRequest {
+	m0 := &CreateSnapshotRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_SourceVolumeId = b.SourceVolumeId
+	x.xxx_hidden_Name = b.Name
+	x.xxx_hidden_Secrets = b.Secrets
+	x.xxx_hidden_Parameters = b.Parameters
+	return m0
+}
+
+type CreateSnapshotResponse struct {
+	state               protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_Snapshot *Snapshot              `protobuf:"bytes,1,opt,name=snapshot,proto3" json:"snapshot,omitempty"`
+	unknownFields       protoimpl.UnknownFields
+	sizeCache           protoimpl.SizeCache
+}
+
+func (x *CreateSnapshotResponse) Reset() {
+	*x = CreateSnapshotResponse{}
+	mi := &file_csi_proto_msgTypes[35]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *CreateSnapshotResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CreateSnapshotResponse) ProtoMessage() {}
+
+func (x *CreateSnapshotResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *CreateSnapshotResponse) GetSnapshot() *Snapshot {
+	if x != nil {
+		return x.xxx_hidden_Snapshot
+	}
+	return nil
+}
+
+func (x *CreateSnapshotResponse) SetSnapshot(v *Snapshot) {
+	x.xxx_hidden_Snapshot = v
+}
+
+func (x *CreateSnapshotResponse) HasSnapshot() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_Snapshot != nil
+}
+
+func (x *CreateSnapshotResponse) ClearSnapshot() {
+	x.xxx_hidden_Snapshot = nil
+}
+
+type CreateSnapshotResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Contains all attributes of the newly created snapshot that are
+	// relevant to the CO along with information required by the Plugin
+	// to uniquely identify the snapshot. This field is REQUIRED.
+	Snapshot *Snapshot
+}
+
+func (b0 CreateSnapshotResponse_builder) Build() *CreateSnapshotResponse {
+	m0 := &CreateSnapshotResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Snapshot = b.Snapshot
+	return m0
+}
+
+// Information about a specific snapshot.
+type Snapshot struct {
+	state                      protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_SizeBytes       int64                  `protobuf:"varint,1,opt,name=size_bytes,json=sizeBytes,proto3" json:"size_bytes,omitempty"`
+	xxx_hidden_SnapshotId      string                 `protobuf:"bytes,2,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"`
+	xxx_hidden_SourceVolumeId  string                 `protobuf:"bytes,3,opt,name=source_volume_id,json=sourceVolumeId,proto3" json:"source_volume_id,omitempty"`
+	xxx_hidden_CreationTime    *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=creation_time,json=creationTime,proto3" json:"creation_time,omitempty"`
+	xxx_hidden_ReadyToUse      bool                   `protobuf:"varint,5,opt,name=ready_to_use,json=readyToUse,proto3" json:"ready_to_use,omitempty"`
+	xxx_hidden_GroupSnapshotId string                 `protobuf:"bytes,6,opt,name=group_snapshot_id,json=groupSnapshotId,proto3" json:"group_snapshot_id,omitempty"`
+	unknownFields              protoimpl.UnknownFields
+	sizeCache                  protoimpl.SizeCache
+}
+
+func (x *Snapshot) Reset() {
+	*x = Snapshot{}
+	mi := &file_csi_proto_msgTypes[36]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Snapshot) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Snapshot) ProtoMessage() {}
+
+func (x *Snapshot) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *Snapshot) GetSizeBytes() int64 {
+	if x != nil {
+		return x.xxx_hidden_SizeBytes
+	}
+	return 0
+}
+
+func (x *Snapshot) GetSnapshotId() string {
+	if x != nil {
+		return x.xxx_hidden_SnapshotId
+	}
+	return ""
+}
+
+func (x *Snapshot) GetSourceVolumeId() string {
+	if x != nil {
+		return x.xxx_hidden_SourceVolumeId
+	}
+	return ""
+}
+
+func (x *Snapshot) GetCreationTime() *timestamppb.Timestamp {
+	if x != nil {
+		return x.xxx_hidden_CreationTime
+	}
+	return nil
+}
+
+func (x *Snapshot) GetReadyToUse() bool {
+	if x != nil {
+		return x.xxx_hidden_ReadyToUse
+	}
+	return false
+}
+
+func (x *Snapshot) GetGroupSnapshotId() string {
+	if x != nil {
+		return x.xxx_hidden_GroupSnapshotId
+	}
+	return ""
+}
+
+func (x *Snapshot) SetSizeBytes(v int64) {
+	x.xxx_hidden_SizeBytes = v
+}
+
+func (x *Snapshot) SetSnapshotId(v string) {
+	x.xxx_hidden_SnapshotId = v
+}
+
+func (x *Snapshot) SetSourceVolumeId(v string) {
+	x.xxx_hidden_SourceVolumeId = v
+}
+
+func (x *Snapshot) SetCreationTime(v *timestamppb.Timestamp) {
+	x.xxx_hidden_CreationTime = v
+}
+
+func (x *Snapshot) SetReadyToUse(v bool) {
+	x.xxx_hidden_ReadyToUse = v
+}
+
+func (x *Snapshot) SetGroupSnapshotId(v string) {
+	x.xxx_hidden_GroupSnapshotId = v
+}
+
+func (x *Snapshot) HasCreationTime() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_CreationTime != nil
+}
+
+func (x *Snapshot) ClearCreationTime() {
+	x.xxx_hidden_CreationTime = nil
+}
+
+type Snapshot_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This is the complete size of the snapshot in bytes. The purpose of
+	// this field is to give CO guidance on how much space is needed to
+	// create a volume from this snapshot. The size of the volume MUST NOT
+	// be less than the size of the source snapshot. This field is
+	// OPTIONAL. If this field is not set, it indicates that this size is
+	// unknown. The value of this field MUST NOT be negative and a size of
+	// zero means it is unspecified.
+	SizeBytes int64
+	// The identifier for this snapshot, generated by the plugin.
+	// This field is REQUIRED.
+	// This field MUST contain enough information to uniquely identify
+	// this specific snapshot vs all other snapshots supported by this
+	// plugin.
+	// This field SHALL be used by the CO in subsequent calls to refer to
+	// this snapshot.
+	// The SP is NOT responsible for global uniqueness of snapshot_id
+	// across multiple SPs.
+	SnapshotId string
+	// Identity information for the source volume. Note that creating a
+	// snapshot from a snapshot is not supported here so the source has to
+	// be a volume. This field is REQUIRED.
+	SourceVolumeId string
+	// Timestamp when the point-in-time snapshot is taken on the storage
+	// system. This field is REQUIRED.
+	CreationTime *timestamppb.Timestamp
+	// Indicates if a snapshot is ready to use as a
+	// `volume_content_source` in a `CreateVolumeRequest`. The default
+	// value is false. This field is REQUIRED.
+	ReadyToUse bool
+	// The ID of the volume group snapshot that this snapshot is part of.
+	// It uniquely identifies the group snapshot on the storage system.
+	// This field is OPTIONAL.
+	// If this snapshot is a member of a volume group snapshot, and it
+	// MUST NOT be deleted as a stand alone snapshot, then the SP
+	// MUST provide the ID of the volume group snapshot in this field.
+	// If provided, CO MUST use this field in subsequent volume group
+	// snapshot operations to indicate that this snapshot is part of the
+	// specified group snapshot.
+	// If not provided, CO SHALL treat the snapshot as independent,
+	// and SP SHALL allow it to be deleted separately.
+	// If this message is inside a VolumeGroupSnapshot message, the value
+	// MUST be the same as the group_snapshot_id in that message.
+	GroupSnapshotId string
+}
+
+func (b0 Snapshot_builder) Build() *Snapshot {
+	m0 := &Snapshot{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_SizeBytes = b.SizeBytes
+	x.xxx_hidden_SnapshotId = b.SnapshotId
+	x.xxx_hidden_SourceVolumeId = b.SourceVolumeId
+	x.xxx_hidden_CreationTime = b.CreationTime
+	x.xxx_hidden_ReadyToUse = b.ReadyToUse
+	x.xxx_hidden_GroupSnapshotId = b.GroupSnapshotId
+	return m0
+}
+
+type DeleteSnapshotRequest struct {
+	state                 protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_SnapshotId string                 `protobuf:"bytes,1,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"`
+	xxx_hidden_Secrets    map[string]string      `protobuf:"bytes,2,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields         protoimpl.UnknownFields
+	sizeCache             protoimpl.SizeCache
+}
+
+func (x *DeleteSnapshotRequest) Reset() {
+	*x = DeleteSnapshotRequest{}
+	mi := &file_csi_proto_msgTypes[37]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *DeleteSnapshotRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteSnapshotRequest) ProtoMessage() {}
+
+func (x *DeleteSnapshotRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *DeleteSnapshotRequest) GetSnapshotId() string {
+	if x != nil {
+		return x.xxx_hidden_SnapshotId
+	}
+	return ""
+}
+
+func (x *DeleteSnapshotRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Secrets
+	}
+	return nil
+}
+
+func (x *DeleteSnapshotRequest) SetSnapshotId(v string) {
+	x.xxx_hidden_SnapshotId = v
+}
+
+func (x *DeleteSnapshotRequest) SetSecrets(v map[string]string) {
+	x.xxx_hidden_Secrets = v
+}
+
+type DeleteSnapshotRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the snapshot to be deleted.
+	// This field is REQUIRED.
+	SnapshotId string
+	// Secrets required by plugin to complete snapshot deletion request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+}
+
+func (b0 DeleteSnapshotRequest_builder) Build() *DeleteSnapshotRequest {
+	m0 := &DeleteSnapshotRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_SnapshotId = b.SnapshotId
+	x.xxx_hidden_Secrets = b.Secrets
+	return m0
+}
+
+type DeleteSnapshotResponse struct {
+	state         protoimpl.MessageState `protogen:"opaque.v1"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *DeleteSnapshotResponse) Reset() {
+	*x = DeleteSnapshotResponse{}
+	mi := &file_csi_proto_msgTypes[38]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *DeleteSnapshotResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteSnapshotResponse) ProtoMessage() {}
+
+func (x *DeleteSnapshotResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+type DeleteSnapshotResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 DeleteSnapshotResponse_builder) Build() *DeleteSnapshotResponse {
+	m0 := &DeleteSnapshotResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
+
+// List all snapshots on the storage system regardless of how they were
+// created.
+type ListSnapshotsRequest struct {
+	state                     protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_MaxEntries     int32                  `protobuf:"varint,1,opt,name=max_entries,json=maxEntries,proto3" json:"max_entries,omitempty"`
+	xxx_hidden_StartingToken  string                 `protobuf:"bytes,2,opt,name=starting_token,json=startingToken,proto3" json:"starting_token,omitempty"`
+	xxx_hidden_SourceVolumeId string                 `protobuf:"bytes,3,opt,name=source_volume_id,json=sourceVolumeId,proto3" json:"source_volume_id,omitempty"`
+	xxx_hidden_SnapshotId     string                 `protobuf:"bytes,4,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"`
+	xxx_hidden_Secrets        map[string]string      `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields             protoimpl.UnknownFields
+	sizeCache                 protoimpl.SizeCache
+}
+
+func (x *ListSnapshotsRequest) Reset() {
+	*x = ListSnapshotsRequest{}
+	mi := &file_csi_proto_msgTypes[39]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ListSnapshotsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListSnapshotsRequest) ProtoMessage() {}
+
+func (x *ListSnapshotsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *ListSnapshotsRequest) GetMaxEntries() int32 {
+	if x != nil {
+		return x.xxx_hidden_MaxEntries
+	}
+	return 0
+}
+
+func (x *ListSnapshotsRequest) GetStartingToken() string {
+	if x != nil {
+		return x.xxx_hidden_StartingToken
+	}
+	return ""
+}
+
+func (x *ListSnapshotsRequest) GetSourceVolumeId() string {
+	if x != nil {
+		return x.xxx_hidden_SourceVolumeId
+	}
+	return ""
+}
+
+func (x *ListSnapshotsRequest) GetSnapshotId() string {
+	if x != nil {
+		return x.xxx_hidden_SnapshotId
+	}
+	return ""
+}
+
+func (x *ListSnapshotsRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Secrets
+	}
+	return nil
+}
+
+func (x *ListSnapshotsRequest) SetMaxEntries(v int32) {
+	x.xxx_hidden_MaxEntries = v
+}
+
+func (x *ListSnapshotsRequest) SetStartingToken(v string) {
+	x.xxx_hidden_StartingToken = v
+}
+
+func (x *ListSnapshotsRequest) SetSourceVolumeId(v string) {
+	x.xxx_hidden_SourceVolumeId = v
+}
+
+func (x *ListSnapshotsRequest) SetSnapshotId(v string) {
+	x.xxx_hidden_SnapshotId = v
+}
+
+func (x *ListSnapshotsRequest) SetSecrets(v map[string]string) {
+	x.xxx_hidden_Secrets = v
+}
+
+type ListSnapshotsRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// If specified (non-zero value), the Plugin MUST NOT return more
+	// entries than this number in the response. If the actual number of
+	// entries is more than this number, the Plugin MUST set `next_token`
+	// in the response which can be used to get the next page of entries
+	// in the subsequent `ListSnapshots` call. This field is OPTIONAL. If
+	// not specified (zero value), it means there is no restriction on the
+	// number of entries that can be returned.
+	// The value of this field MUST NOT be negative.
+	MaxEntries int32
+	// A token to specify where to start paginating. Set this field to
+	// `next_token` returned by a previous `ListSnapshots` call to get the
+	// next page of entries. This field is OPTIONAL.
+	// An empty string is equal to an unspecified field value.
+	StartingToken string
+	// Identity information for the source volume. This field is OPTIONAL.
+	// It can be used to list snapshots by volume.
+	SourceVolumeId string
+	// Identity information for a specific snapshot. This field is
+	// OPTIONAL. It can be used to list only a specific snapshot.
+	// ListSnapshots will return with current snapshot information
+	// and will not block if the snapshot is being processed after
+	// it is cut.
+	SnapshotId string
+	// Secrets required by plugin to complete ListSnapshot request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+}
+
+func (b0 ListSnapshotsRequest_builder) Build() *ListSnapshotsRequest {
+	m0 := &ListSnapshotsRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_MaxEntries = b.MaxEntries
+	x.xxx_hidden_StartingToken = b.StartingToken
+	x.xxx_hidden_SourceVolumeId = b.SourceVolumeId
+	x.xxx_hidden_SnapshotId = b.SnapshotId
+	x.xxx_hidden_Secrets = b.Secrets
+	return m0
+}
+
+type ListSnapshotsResponse struct {
+	state                protoimpl.MessageState          `protogen:"opaque.v1"`
+	xxx_hidden_Entries   *[]*ListSnapshotsResponse_Entry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"`
+	xxx_hidden_NextToken string                          `protobuf:"bytes,2,opt,name=next_token,json=nextToken,proto3" json:"next_token,omitempty"`
+	unknownFields        protoimpl.UnknownFields
+	sizeCache            protoimpl.SizeCache
+}
+
+func (x *ListSnapshotsResponse) Reset() {
+	*x = ListSnapshotsResponse{}
+	mi := &file_csi_proto_msgTypes[40]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ListSnapshotsResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListSnapshotsResponse) ProtoMessage() {}
+
+func (x *ListSnapshotsResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *ListSnapshotsResponse) GetEntries() []*ListSnapshotsResponse_Entry {
+	if x != nil {
+		if x.xxx_hidden_Entries != nil {
+			return *x.xxx_hidden_Entries
+		}
+	}
+	return nil
+}
+
+func (x *ListSnapshotsResponse) GetNextToken() string {
+	if x != nil {
+		return x.xxx_hidden_NextToken
+	}
+	return ""
+}
+
+func (x *ListSnapshotsResponse) SetEntries(v []*ListSnapshotsResponse_Entry) {
+	x.xxx_hidden_Entries = &v
+}
+
+func (x *ListSnapshotsResponse) SetNextToken(v string) {
+	x.xxx_hidden_NextToken = v
+}
+
+type ListSnapshotsResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	Entries []*ListSnapshotsResponse_Entry
+	// This token allows you to get the next page of entries for
+	// `ListSnapshots` request. If the number of entries is larger than
+	// `max_entries`, use the `next_token` as a value for the
+	// `starting_token` field in the next `ListSnapshots` request. This
+	// field is OPTIONAL.
+	// An empty string is equal to an unspecified field value.
+	NextToken string
+}
+
+func (b0 ListSnapshotsResponse_builder) Build() *ListSnapshotsResponse {
+	m0 := &ListSnapshotsResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Entries = &b.Entries
+	x.xxx_hidden_NextToken = b.NextToken
+	return m0
+}
+
+type ControllerExpandVolumeRequest struct {
+	state                       protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_VolumeId         string                 `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
+	xxx_hidden_CapacityRange    *CapacityRange         `protobuf:"bytes,2,opt,name=capacity_range,json=capacityRange,proto3" json:"capacity_range,omitempty"`
+	xxx_hidden_Secrets          map[string]string      `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	xxx_hidden_VolumeCapability *VolumeCapability      `protobuf:"bytes,4,opt,name=volume_capability,json=volumeCapability,proto3" json:"volume_capability,omitempty"`
+	unknownFields               protoimpl.UnknownFields
+	sizeCache                   protoimpl.SizeCache
+}
+
+func (x *ControllerExpandVolumeRequest) Reset() {
+	*x = ControllerExpandVolumeRequest{}
+	mi := &file_csi_proto_msgTypes[41]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ControllerExpandVolumeRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ControllerExpandVolumeRequest) ProtoMessage() {}
+
+func (x *ControllerExpandVolumeRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *ControllerExpandVolumeRequest) GetVolumeId() string {
+	if x != nil {
+		return x.xxx_hidden_VolumeId
+	}
+	return ""
+}
+
+func (x *ControllerExpandVolumeRequest) GetCapacityRange() *CapacityRange {
+	if x != nil {
+		return x.xxx_hidden_CapacityRange
+	}
+	return nil
+}
+
+func (x *ControllerExpandVolumeRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Secrets
+	}
+	return nil
+}
+
+func (x *ControllerExpandVolumeRequest) GetVolumeCapability() *VolumeCapability {
+	if x != nil {
+		return x.xxx_hidden_VolumeCapability
+	}
+	return nil
+}
+
+func (x *ControllerExpandVolumeRequest) SetVolumeId(v string) {
+	x.xxx_hidden_VolumeId = v
+}
+
+func (x *ControllerExpandVolumeRequest) SetCapacityRange(v *CapacityRange) {
+	x.xxx_hidden_CapacityRange = v
+}
+
+func (x *ControllerExpandVolumeRequest) SetSecrets(v map[string]string) {
+	x.xxx_hidden_Secrets = v
+}
+
+func (x *ControllerExpandVolumeRequest) SetVolumeCapability(v *VolumeCapability) {
+	x.xxx_hidden_VolumeCapability = v
+}
+
+func (x *ControllerExpandVolumeRequest) HasCapacityRange() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_CapacityRange != nil
+}
+
+func (x *ControllerExpandVolumeRequest) HasVolumeCapability() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_VolumeCapability != nil
+}
+
+func (x *ControllerExpandVolumeRequest) ClearCapacityRange() {
+	x.xxx_hidden_CapacityRange = nil
+}
+
+func (x *ControllerExpandVolumeRequest) ClearVolumeCapability() {
+	x.xxx_hidden_VolumeCapability = nil
+}
+
+type ControllerExpandVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume to expand. This field is REQUIRED.
+	VolumeId string
+	// This allows CO to specify the capacity requirements of the volume
+	// after expansion. This field is REQUIRED.
+	CapacityRange *CapacityRange
+	// Secrets required by the plugin for expanding the volume.
+	// This field is OPTIONAL.
+	Secrets map[string]string
+	// Volume capability describing how the CO intends to use this volume.
+	// This allows SP to determine if volume is being used as a block
+	// device or mounted file system. For example - if volume is
+	// being used as a block device - the SP MAY set
+	// node_expansion_required to false in ControllerExpandVolumeResponse
+	// to skip invocation of NodeExpandVolume on the node by the CO.
+	// This is an OPTIONAL field.
+	VolumeCapability *VolumeCapability
+}
+
+func (b0 ControllerExpandVolumeRequest_builder) Build() *ControllerExpandVolumeRequest {
+	m0 := &ControllerExpandVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_VolumeId = b.VolumeId
+	x.xxx_hidden_CapacityRange = b.CapacityRange
+	x.xxx_hidden_Secrets = b.Secrets
+	x.xxx_hidden_VolumeCapability = b.VolumeCapability
+	return m0
+}
+
+type ControllerExpandVolumeResponse struct {
+	state                            protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_CapacityBytes         int64                  `protobuf:"varint,1,opt,name=capacity_bytes,json=capacityBytes,proto3" json:"capacity_bytes,omitempty"`
+	xxx_hidden_NodeExpansionRequired bool                   `protobuf:"varint,2,opt,name=node_expansion_required,json=nodeExpansionRequired,proto3" json:"node_expansion_required,omitempty"`
+	unknownFields                    protoimpl.UnknownFields
+	sizeCache                        protoimpl.SizeCache
+}
+
+func (x *ControllerExpandVolumeResponse) Reset() {
+	*x = ControllerExpandVolumeResponse{}
+	mi := &file_csi_proto_msgTypes[42]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ControllerExpandVolumeResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ControllerExpandVolumeResponse) ProtoMessage() {}
+
+func (x *ControllerExpandVolumeResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *ControllerExpandVolumeResponse) GetCapacityBytes() int64 {
+	if x != nil {
+		return x.xxx_hidden_CapacityBytes
+	}
+	return 0
+}
+
+func (x *ControllerExpandVolumeResponse) GetNodeExpansionRequired() bool {
+	if x != nil {
+		return x.xxx_hidden_NodeExpansionRequired
+	}
+	return false
+}
+
+func (x *ControllerExpandVolumeResponse) SetCapacityBytes(v int64) {
+	x.xxx_hidden_CapacityBytes = v
+}
+
+func (x *ControllerExpandVolumeResponse) SetNodeExpansionRequired(v bool) {
+	x.xxx_hidden_NodeExpansionRequired = v
+}
+
+type ControllerExpandVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Capacity of volume after expansion. This field is REQUIRED.
+	CapacityBytes int64
+	// Whether node expansion is required for the volume. When true
+	// the CO MUST make NodeExpandVolume RPC call on the node. This field
+	// is REQUIRED.
+	NodeExpansionRequired bool
+}
+
+func (b0 ControllerExpandVolumeResponse_builder) Build() *ControllerExpandVolumeResponse {
+	m0 := &ControllerExpandVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_CapacityBytes = b.CapacityBytes
+	x.xxx_hidden_NodeExpansionRequired = b.NodeExpansionRequired
+	return m0
+}
+
+type NodeStageVolumeRequest struct {
+	state                        protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_VolumeId          string                 `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
+	xxx_hidden_PublishContext    map[string]string      `protobuf:"bytes,2,rep,name=publish_context,json=publishContext,proto3" json:"publish_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	xxx_hidden_StagingTargetPath string                 `protobuf:"bytes,3,opt,name=staging_target_path,json=stagingTargetPath,proto3" json:"staging_target_path,omitempty"`
+	xxx_hidden_VolumeCapability  *VolumeCapability      `protobuf:"bytes,4,opt,name=volume_capability,json=volumeCapability,proto3" json:"volume_capability,omitempty"`
+	xxx_hidden_Secrets           map[string]string      `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	xxx_hidden_VolumeContext     map[string]string      `protobuf:"bytes,6,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields                protoimpl.UnknownFields
+	sizeCache                    protoimpl.SizeCache
+}
+
+func (x *NodeStageVolumeRequest) Reset() {
+	*x = NodeStageVolumeRequest{}
+	mi := &file_csi_proto_msgTypes[43]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeStageVolumeRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeStageVolumeRequest) ProtoMessage() {}
+
+func (x *NodeStageVolumeRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *NodeStageVolumeRequest) GetVolumeId() string {
+	if x != nil {
+		return x.xxx_hidden_VolumeId
+	}
+	return ""
+}
+
+func (x *NodeStageVolumeRequest) GetPublishContext() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_PublishContext
+	}
+	return nil
+}
+
+func (x *NodeStageVolumeRequest) GetStagingTargetPath() string {
+	if x != nil {
+		return x.xxx_hidden_StagingTargetPath
+	}
+	return ""
+}
+
+func (x *NodeStageVolumeRequest) GetVolumeCapability() *VolumeCapability {
+	if x != nil {
+		return x.xxx_hidden_VolumeCapability
+	}
+	return nil
+}
+
+func (x *NodeStageVolumeRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Secrets
+	}
+	return nil
+}
+
+func (x *NodeStageVolumeRequest) GetVolumeContext() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_VolumeContext
+	}
+	return nil
+}
+
+func (x *NodeStageVolumeRequest) SetVolumeId(v string) {
+	x.xxx_hidden_VolumeId = v
+}
+
+func (x *NodeStageVolumeRequest) SetPublishContext(v map[string]string) {
+	x.xxx_hidden_PublishContext = v
+}
+
+func (x *NodeStageVolumeRequest) SetStagingTargetPath(v string) {
+	x.xxx_hidden_StagingTargetPath = v
+}
+
+func (x *NodeStageVolumeRequest) SetVolumeCapability(v *VolumeCapability) {
+	x.xxx_hidden_VolumeCapability = v
+}
+
+func (x *NodeStageVolumeRequest) SetSecrets(v map[string]string) {
+	x.xxx_hidden_Secrets = v
+}
+
+func (x *NodeStageVolumeRequest) SetVolumeContext(v map[string]string) {
+	x.xxx_hidden_VolumeContext = v
+}
+
+func (x *NodeStageVolumeRequest) HasVolumeCapability() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_VolumeCapability != nil
+}
+
+func (x *NodeStageVolumeRequest) ClearVolumeCapability() {
+	x.xxx_hidden_VolumeCapability = nil
+}
+
+type NodeStageVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume to publish. This field is REQUIRED.
+	VolumeId string
+	// The CO SHALL set this field to the value returned by
+	// `ControllerPublishVolume` if the corresponding Controller Plugin
+	// has `PUBLISH_UNPUBLISH_VOLUME` controller capability, and SHALL be
+	// left unset if the corresponding Controller Plugin does not have
+	// this capability. This is an OPTIONAL field.
+	PublishContext map[string]string
+	// The path to which the volume MAY be staged. It MUST be an
+	// absolute path in the root filesystem of the process serving this
+	// request, and MUST be a directory. The CO SHALL ensure that there
+	// is only one `staging_target_path` per volume. The CO SHALL ensure
+	// that the path is directory and that the process serving the
+	// request has `read` and `write` permission to that directory. The
+	// CO SHALL be responsible for creating the directory if it does not
+	// exist.
+	// This is a REQUIRED field.
+	// This field overrides the general CSI size limit.
+	// SP SHOULD support the maximum path length allowed by the operating
+	// system/filesystem, but, at a minimum, SP MUST accept a max path
+	// length of at least 128 bytes.
+	StagingTargetPath string
+	// Volume capability describing how the CO intends to use this volume.
+	// SP MUST ensure the CO can use the staged volume as described.
+	// Otherwise SP MUST return the appropriate gRPC error code.
+	// This is a REQUIRED field.
+	VolumeCapability *VolumeCapability
+	// Secrets required by plugin to complete node stage volume request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+	// Volume context as returned by SP in
+	// CreateVolumeResponse.Volume.volume_context.
+	// This field is OPTIONAL and MUST match the volume_context of the
+	// volume identified by `volume_id`.
+	VolumeContext map[string]string
+}
+
+func (b0 NodeStageVolumeRequest_builder) Build() *NodeStageVolumeRequest {
+	m0 := &NodeStageVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_VolumeId = b.VolumeId
+	x.xxx_hidden_PublishContext = b.PublishContext
+	x.xxx_hidden_StagingTargetPath = b.StagingTargetPath
+	x.xxx_hidden_VolumeCapability = b.VolumeCapability
+	x.xxx_hidden_Secrets = b.Secrets
+	x.xxx_hidden_VolumeContext = b.VolumeContext
+	return m0
+}
+
+type NodeStageVolumeResponse struct {
+	state         protoimpl.MessageState `protogen:"opaque.v1"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *NodeStageVolumeResponse) Reset() {
+	*x = NodeStageVolumeResponse{}
+	mi := &file_csi_proto_msgTypes[44]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeStageVolumeResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeStageVolumeResponse) ProtoMessage() {}
+
+func (x *NodeStageVolumeResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+type NodeStageVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 NodeStageVolumeResponse_builder) Build() *NodeStageVolumeResponse {
+	m0 := &NodeStageVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
+
+type NodeUnstageVolumeRequest struct {
+	state                        protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_VolumeId          string                 `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
+	xxx_hidden_StagingTargetPath string                 `protobuf:"bytes,2,opt,name=staging_target_path,json=stagingTargetPath,proto3" json:"staging_target_path,omitempty"`
+	unknownFields                protoimpl.UnknownFields
+	sizeCache                    protoimpl.SizeCache
+}
+
+func (x *NodeUnstageVolumeRequest) Reset() {
+	*x = NodeUnstageVolumeRequest{}
+	mi := &file_csi_proto_msgTypes[45]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeUnstageVolumeRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeUnstageVolumeRequest) ProtoMessage() {}
+
+func (x *NodeUnstageVolumeRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *NodeUnstageVolumeRequest) GetVolumeId() string {
+	if x != nil {
+		return x.xxx_hidden_VolumeId
+	}
+	return ""
+}
+
+func (x *NodeUnstageVolumeRequest) GetStagingTargetPath() string {
+	if x != nil {
+		return x.xxx_hidden_StagingTargetPath
+	}
+	return ""
+}
+
+func (x *NodeUnstageVolumeRequest) SetVolumeId(v string) {
+	x.xxx_hidden_VolumeId = v
+}
+
+func (x *NodeUnstageVolumeRequest) SetStagingTargetPath(v string) {
+	x.xxx_hidden_StagingTargetPath = v
+}
+
+type NodeUnstageVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume. This field is REQUIRED.
+	VolumeId string
+	// The path at which the volume was staged. It MUST be an absolute
+	// path in the root filesystem of the process serving this request.
+	// This is a REQUIRED field.
+	// This field overrides the general CSI size limit.
+	// SP SHOULD support the maximum path length allowed by the operating
+	// system/filesystem, but, at a minimum, SP MUST accept a max path
+	// length of at least 128 bytes.
+	StagingTargetPath string
+}
+
+func (b0 NodeUnstageVolumeRequest_builder) Build() *NodeUnstageVolumeRequest {
+	m0 := &NodeUnstageVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_VolumeId = b.VolumeId
+	x.xxx_hidden_StagingTargetPath = b.StagingTargetPath
+	return m0
+}
+
+type NodeUnstageVolumeResponse struct {
+	state         protoimpl.MessageState `protogen:"opaque.v1"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *NodeUnstageVolumeResponse) Reset() {
+	*x = NodeUnstageVolumeResponse{}
+	mi := &file_csi_proto_msgTypes[46]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeUnstageVolumeResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeUnstageVolumeResponse) ProtoMessage() {}
+
+func (x *NodeUnstageVolumeResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[46]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+type NodeUnstageVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 NodeUnstageVolumeResponse_builder) Build() *NodeUnstageVolumeResponse {
+	m0 := &NodeUnstageVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
+
+type NodePublishVolumeRequest struct {
+	state                        protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_VolumeId          string                 `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
+	xxx_hidden_PublishContext    map[string]string      `protobuf:"bytes,2,rep,name=publish_context,json=publishContext,proto3" json:"publish_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	xxx_hidden_StagingTargetPath string                 `protobuf:"bytes,3,opt,name=staging_target_path,json=stagingTargetPath,proto3" json:"staging_target_path,omitempty"`
+	xxx_hidden_TargetPath        string                 `protobuf:"bytes,4,opt,name=target_path,json=targetPath,proto3" json:"target_path,omitempty"`
+	xxx_hidden_VolumeCapability  *VolumeCapability      `protobuf:"bytes,5,opt,name=volume_capability,json=volumeCapability,proto3" json:"volume_capability,omitempty"`
+	xxx_hidden_Readonly          bool                   `protobuf:"varint,6,opt,name=readonly,proto3" json:"readonly,omitempty"`
+	xxx_hidden_Secrets           map[string]string      `protobuf:"bytes,7,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	xxx_hidden_VolumeContext     map[string]string      `protobuf:"bytes,8,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields                protoimpl.UnknownFields
+	sizeCache                    protoimpl.SizeCache
+}
+
+func (x *NodePublishVolumeRequest) Reset() {
+	*x = NodePublishVolumeRequest{}
+	mi := &file_csi_proto_msgTypes[47]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *NodePublishVolumeRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodePublishVolumeRequest) ProtoMessage() {}
+
+func (x *NodePublishVolumeRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[47]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *NodePublishVolumeRequest) GetVolumeId() string {
+	if x != nil {
+		return x.xxx_hidden_VolumeId
+	}
+	return ""
+}
+
+func (x *NodePublishVolumeRequest) GetPublishContext() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_PublishContext
+	}
+	return nil
+}
+
+func (x *NodePublishVolumeRequest) GetStagingTargetPath() string {
+	if x != nil {
+		return x.xxx_hidden_StagingTargetPath
+	}
+	return ""
+}
+
+func (x *NodePublishVolumeRequest) GetTargetPath() string {
+	if x != nil {
+		return x.xxx_hidden_TargetPath
+	}
+	return ""
+}
+
+func (x *NodePublishVolumeRequest) GetVolumeCapability() *VolumeCapability {
+	if x != nil {
+		return x.xxx_hidden_VolumeCapability
+	}
+	return nil
+}
+
+func (x *NodePublishVolumeRequest) GetReadonly() bool {
+	if x != nil {
+		return x.xxx_hidden_Readonly
+	}
+	return false
+}
+
+func (x *NodePublishVolumeRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Secrets
+	}
+	return nil
+}
+
+func (x *NodePublishVolumeRequest) GetVolumeContext() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_VolumeContext
+	}
+	return nil
+}
+
+func (x *NodePublishVolumeRequest) SetVolumeId(v string) {
+	x.xxx_hidden_VolumeId = v
+}
+
+func (x *NodePublishVolumeRequest) SetPublishContext(v map[string]string) {
+	x.xxx_hidden_PublishContext = v
+}
+
+func (x *NodePublishVolumeRequest) SetStagingTargetPath(v string) {
+	x.xxx_hidden_StagingTargetPath = v
+}
+
+func (x *NodePublishVolumeRequest) SetTargetPath(v string) {
+	x.xxx_hidden_TargetPath = v
+}
+
+func (x *NodePublishVolumeRequest) SetVolumeCapability(v *VolumeCapability) {
+	x.xxx_hidden_VolumeCapability = v
+}
+
+func (x *NodePublishVolumeRequest) SetReadonly(v bool) {
+	x.xxx_hidden_Readonly = v
+}
+
+func (x *NodePublishVolumeRequest) SetSecrets(v map[string]string) {
+	x.xxx_hidden_Secrets = v
+}
+
+func (x *NodePublishVolumeRequest) SetVolumeContext(v map[string]string) {
+	x.xxx_hidden_VolumeContext = v
+}
+
+func (x *NodePublishVolumeRequest) HasVolumeCapability() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_VolumeCapability != nil
+}
+
+func (x *NodePublishVolumeRequest) ClearVolumeCapability() {
+	x.xxx_hidden_VolumeCapability = nil
+}
+
+type NodePublishVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume to publish. This field is REQUIRED.
+	VolumeId string
+	// The CO SHALL set this field to the value returned by
+	// `ControllerPublishVolume` if the corresponding Controller Plugin
+	// has `PUBLISH_UNPUBLISH_VOLUME` controller capability, and SHALL be
+	// left unset if the corresponding Controller Plugin does not have
+	// this capability. This is an OPTIONAL field.
+	PublishContext map[string]string
+	// The path to which the volume was staged by `NodeStageVolume`.
+	// It MUST be an absolute path in the root filesystem of the process
+	// serving this request.
+	// It MUST be set if the Node Plugin implements the
+	// `STAGE_UNSTAGE_VOLUME` node capability.
+	// This is an OPTIONAL field.
+	// This field overrides the general CSI size limit.
+	// SP SHOULD support the maximum path length allowed by the operating
+	// system/filesystem, but, at a minimum, SP MUST accept a max path
+	// length of at least 128 bytes.
+	StagingTargetPath string
+	// The path to which the volume will be published. It MUST be an
+	// absolute path in the root filesystem of the process serving this
+	// request. The CO SHALL ensure uniqueness of target_path per volume.
+	// The CO SHALL ensure that the parent directory of this path exists
+	// and that the process serving the request has `read` and `write`
+	// permissions to that parent directory.
+	// For volumes with an access type of block, the SP SHALL place the
+	// block device at target_path.
+	// For volumes with an access type of mount, the SP SHALL place the
+	// mounted directory at target_path.
+	// Creation of target_path is the responsibility of the SP.
+	// This is a REQUIRED field.
+	// This field overrides the general CSI size limit.
+	// SP SHOULD support the maximum path length allowed by the operating
+	// system/filesystem, but, at a minimum, SP MUST accept a max path
+	// length of at least 128 bytes.
+	TargetPath string
+	// Volume capability describing how the CO intends to use this volume.
+	// SP MUST ensure the CO can use the published volume as described.
+	// Otherwise SP MUST return the appropriate gRPC error code.
+	// This is a REQUIRED field.
+	VolumeCapability *VolumeCapability
+	// Indicates SP MUST publish the volume in readonly mode.
+	// This field is REQUIRED.
+	Readonly bool
+	// Secrets required by plugin to complete node publish volume request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+	// Volume context as returned by SP in
+	// CreateVolumeResponse.Volume.volume_context.
+	// This field is OPTIONAL and MUST match the volume_context of the
+	// volume identified by `volume_id`.
+	VolumeContext map[string]string
+}
+
+func (b0 NodePublishVolumeRequest_builder) Build() *NodePublishVolumeRequest {
+	m0 := &NodePublishVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_VolumeId = b.VolumeId
+	x.xxx_hidden_PublishContext = b.PublishContext
+	x.xxx_hidden_StagingTargetPath = b.StagingTargetPath
+	x.xxx_hidden_TargetPath = b.TargetPath
+	x.xxx_hidden_VolumeCapability = b.VolumeCapability
+	x.xxx_hidden_Readonly = b.Readonly
+	x.xxx_hidden_Secrets = b.Secrets
+	x.xxx_hidden_VolumeContext = b.VolumeContext
+	return m0
+}
+
+type NodePublishVolumeResponse struct {
+	state         protoimpl.MessageState `protogen:"opaque.v1"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *NodePublishVolumeResponse) Reset() {
+	*x = NodePublishVolumeResponse{}
+	mi := &file_csi_proto_msgTypes[48]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *NodePublishVolumeResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodePublishVolumeResponse) ProtoMessage() {}
+
+func (x *NodePublishVolumeResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+type NodePublishVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 NodePublishVolumeResponse_builder) Build() *NodePublishVolumeResponse {
+	m0 := &NodePublishVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
+
+type NodeUnpublishVolumeRequest struct {
+	state                 protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_VolumeId   string                 `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
+	xxx_hidden_TargetPath string                 `protobuf:"bytes,2,opt,name=target_path,json=targetPath,proto3" json:"target_path,omitempty"`
+	unknownFields         protoimpl.UnknownFields
+	sizeCache             protoimpl.SizeCache
+}
+
+func (x *NodeUnpublishVolumeRequest) Reset() {
+	*x = NodeUnpublishVolumeRequest{}
+	mi := &file_csi_proto_msgTypes[49]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeUnpublishVolumeRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeUnpublishVolumeRequest) ProtoMessage() {}
+
+func (x *NodeUnpublishVolumeRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *NodeUnpublishVolumeRequest) GetVolumeId() string {
+	if x != nil {
+		return x.xxx_hidden_VolumeId
+	}
+	return ""
+}
+
+func (x *NodeUnpublishVolumeRequest) GetTargetPath() string {
+	if x != nil {
+		return x.xxx_hidden_TargetPath
+	}
+	return ""
+}
+
+func (x *NodeUnpublishVolumeRequest) SetVolumeId(v string) {
+	x.xxx_hidden_VolumeId = v
+}
+
+func (x *NodeUnpublishVolumeRequest) SetTargetPath(v string) {
+	x.xxx_hidden_TargetPath = v
+}
+
+type NodeUnpublishVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume. This field is REQUIRED.
+	VolumeId string
+	// The path at which the volume was published. It MUST be an absolute
+	// path in the root filesystem of the process serving this request.
+	// The SP MUST delete the file or directory it created at this path.
+	// This is a REQUIRED field.
+	// This field overrides the general CSI size limit.
+	// SP SHOULD support the maximum path length allowed by the operating
+	// system/filesystem, but, at a minimum, SP MUST accept a max path
+	// length of at least 128 bytes.
+	TargetPath string
+}
+
+func (b0 NodeUnpublishVolumeRequest_builder) Build() *NodeUnpublishVolumeRequest {
+	m0 := &NodeUnpublishVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_VolumeId = b.VolumeId
+	x.xxx_hidden_TargetPath = b.TargetPath
+	return m0
+}
+
+type NodeUnpublishVolumeResponse struct {
+	state         protoimpl.MessageState `protogen:"opaque.v1"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *NodeUnpublishVolumeResponse) Reset() {
+	*x = NodeUnpublishVolumeResponse{}
+	mi := &file_csi_proto_msgTypes[50]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeUnpublishVolumeResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeUnpublishVolumeResponse) ProtoMessage() {}
+
+func (x *NodeUnpublishVolumeResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+type NodeUnpublishVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 NodeUnpublishVolumeResponse_builder) Build() *NodeUnpublishVolumeResponse {
+	m0 := &NodeUnpublishVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
+
+type NodeGetVolumeStatsRequest struct {
+	state                        protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_VolumeId          string                 `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
+	xxx_hidden_VolumePath        string                 `protobuf:"bytes,2,opt,name=volume_path,json=volumePath,proto3" json:"volume_path,omitempty"`
+	xxx_hidden_StagingTargetPath string                 `protobuf:"bytes,3,opt,name=staging_target_path,json=stagingTargetPath,proto3" json:"staging_target_path,omitempty"`
+	unknownFields                protoimpl.UnknownFields
+	sizeCache                    protoimpl.SizeCache
+}
+
+func (x *NodeGetVolumeStatsRequest) Reset() {
+	*x = NodeGetVolumeStatsRequest{}
+	mi := &file_csi_proto_msgTypes[51]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeGetVolumeStatsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeGetVolumeStatsRequest) ProtoMessage() {}
+
+func (x *NodeGetVolumeStatsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *NodeGetVolumeStatsRequest) GetVolumeId() string {
+	if x != nil {
+		return x.xxx_hidden_VolumeId
+	}
+	return ""
+}
+
+func (x *NodeGetVolumeStatsRequest) GetVolumePath() string {
+	if x != nil {
+		return x.xxx_hidden_VolumePath
+	}
+	return ""
+}
+
+func (x *NodeGetVolumeStatsRequest) GetStagingTargetPath() string {
+	if x != nil {
+		return x.xxx_hidden_StagingTargetPath
+	}
+	return ""
+}
+
+func (x *NodeGetVolumeStatsRequest) SetVolumeId(v string) {
+	x.xxx_hidden_VolumeId = v
+}
+
+func (x *NodeGetVolumeStatsRequest) SetVolumePath(v string) {
+	x.xxx_hidden_VolumePath = v
+}
+
+func (x *NodeGetVolumeStatsRequest) SetStagingTargetPath(v string) {
+	x.xxx_hidden_StagingTargetPath = v
+}
+
+type NodeGetVolumeStatsRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume. This field is REQUIRED.
+	VolumeId string
+	// It can be any valid path where volume was previously
+	// staged or published.
+	// It MUST be an absolute path in the root filesystem of
+	// the process serving this request.
+	// This is a REQUIRED field.
+	// This field overrides the general CSI size limit.
+	// SP SHOULD support the maximum path length allowed by the operating
+	// system/filesystem, but, at a minimum, SP MUST accept a max path
+	// length of at least 128 bytes.
+	VolumePath string
+	// The path where the volume is staged, if the plugin has the
+	// STAGE_UNSTAGE_VOLUME capability, otherwise empty.
+	// If not empty, it MUST be an absolute path in the root
+	// filesystem of the process serving this request.
+	// This field is OPTIONAL.
+	// This field overrides the general CSI size limit.
+	// SP SHOULD support the maximum path length allowed by the operating
+	// system/filesystem, but, at a minimum, SP MUST accept a max path
+	// length of at least 128 bytes.
+	StagingTargetPath string
+}
+
+func (b0 NodeGetVolumeStatsRequest_builder) Build() *NodeGetVolumeStatsRequest {
+	m0 := &NodeGetVolumeStatsRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_VolumeId = b.VolumeId
+	x.xxx_hidden_VolumePath = b.VolumePath
+	x.xxx_hidden_StagingTargetPath = b.StagingTargetPath
+	return m0
+}
+
+type NodeGetVolumeStatsResponse struct {
+	state                      protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_Usage           *[]*VolumeUsage        `protobuf:"bytes,1,rep,name=usage,proto3" json:"usage,omitempty"`
+	xxx_hidden_VolumeCondition *VolumeCondition       `protobuf:"bytes,2,opt,name=volume_condition,json=volumeCondition,proto3" json:"volume_condition,omitempty"`
+	unknownFields              protoimpl.UnknownFields
+	sizeCache                  protoimpl.SizeCache
+}
+
+func (x *NodeGetVolumeStatsResponse) Reset() {
+	*x = NodeGetVolumeStatsResponse{}
+	mi := &file_csi_proto_msgTypes[52]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeGetVolumeStatsResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeGetVolumeStatsResponse) ProtoMessage() {}
+
+func (x *NodeGetVolumeStatsResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *NodeGetVolumeStatsResponse) GetUsage() []*VolumeUsage {
+	if x != nil {
+		if x.xxx_hidden_Usage != nil {
+			return *x.xxx_hidden_Usage
+		}
+	}
+	return nil
+}
+
+func (x *NodeGetVolumeStatsResponse) GetVolumeCondition() *VolumeCondition {
+	if x != nil {
+		return x.xxx_hidden_VolumeCondition
+	}
+	return nil
+}
+
+func (x *NodeGetVolumeStatsResponse) SetUsage(v []*VolumeUsage) {
+	x.xxx_hidden_Usage = &v
+}
+
+func (x *NodeGetVolumeStatsResponse) SetVolumeCondition(v *VolumeCondition) {
+	x.xxx_hidden_VolumeCondition = v
+}
+
+func (x *NodeGetVolumeStatsResponse) HasVolumeCondition() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_VolumeCondition != nil
+}
+
+func (x *NodeGetVolumeStatsResponse) ClearVolumeCondition() {
+	x.xxx_hidden_VolumeCondition = nil
+}
+
+type NodeGetVolumeStatsResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This field is OPTIONAL.
+	Usage []*VolumeUsage
+	// Information about the current condition of the volume.
+	// This field is OPTIONAL.
+	// This field MUST be specified if the VOLUME_CONDITION node
+	// capability is supported.
+	VolumeCondition *VolumeCondition
+}
+
+func (b0 NodeGetVolumeStatsResponse_builder) Build() *NodeGetVolumeStatsResponse {
+	m0 := &NodeGetVolumeStatsResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Usage = &b.Usage
+	x.xxx_hidden_VolumeCondition = b.VolumeCondition
+	return m0
+}
+
+type VolumeUsage struct {
+	state                protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_Available int64                  `protobuf:"varint,1,opt,name=available,proto3" json:"available,omitempty"`
+	xxx_hidden_Total     int64                  `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"`
+	xxx_hidden_Used      int64                  `protobuf:"varint,3,opt,name=used,proto3" json:"used,omitempty"`
+	xxx_hidden_Unit      VolumeUsage_Unit       `protobuf:"varint,4,opt,name=unit,proto3,enum=csi.v1.VolumeUsage_Unit" json:"unit,omitempty"`
+	unknownFields        protoimpl.UnknownFields
+	sizeCache            protoimpl.SizeCache
+}
+
+func (x *VolumeUsage) Reset() {
+	*x = VolumeUsage{}
+	mi := &file_csi_proto_msgTypes[53]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *VolumeUsage) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*VolumeUsage) ProtoMessage() {}
+
+func (x *VolumeUsage) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *VolumeUsage) GetAvailable() int64 {
+	if x != nil {
+		return x.xxx_hidden_Available
+	}
+	return 0
+}
+
+func (x *VolumeUsage) GetTotal() int64 {
+	if x != nil {
+		return x.xxx_hidden_Total
+	}
+	return 0
+}
+
+func (x *VolumeUsage) GetUsed() int64 {
+	if x != nil {
+		return x.xxx_hidden_Used
+	}
+	return 0
+}
+
+func (x *VolumeUsage) GetUnit() VolumeUsage_Unit {
+	if x != nil {
+		return x.xxx_hidden_Unit
+	}
+	return VolumeUsage_UNKNOWN
+}
+
+func (x *VolumeUsage) SetAvailable(v int64) {
+	x.xxx_hidden_Available = v
+}
+
+func (x *VolumeUsage) SetTotal(v int64) {
+	x.xxx_hidden_Total = v
+}
+
+func (x *VolumeUsage) SetUsed(v int64) {
+	x.xxx_hidden_Used = v
+}
+
+func (x *VolumeUsage) SetUnit(v VolumeUsage_Unit) {
+	x.xxx_hidden_Unit = v
+}
+
+type VolumeUsage_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The available capacity in specified Unit. This field is OPTIONAL.
+	// The value of this field MUST NOT be negative.
+	Available int64
+	// The total capacity in specified Unit. This field is REQUIRED.
+	// The value of this field MUST NOT be negative.
+	Total int64
+	// The used capacity in specified Unit. This field is OPTIONAL.
+	// The value of this field MUST NOT be negative.
+	Used int64
+	// Units by which values are measured. This field is REQUIRED.
+	Unit VolumeUsage_Unit
+}
+
+func (b0 VolumeUsage_builder) Build() *VolumeUsage {
+	m0 := &VolumeUsage{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Available = b.Available
+	x.xxx_hidden_Total = b.Total
+	x.xxx_hidden_Used = b.Used
+	x.xxx_hidden_Unit = b.Unit
+	return m0
+}
+
+// VolumeCondition represents the current condition of a volume.
+type VolumeCondition struct {
+	state               protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_Abnormal bool                   `protobuf:"varint,1,opt,name=abnormal,proto3" json:"abnormal,omitempty"`
+	xxx_hidden_Message  string                 `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
+	unknownFields       protoimpl.UnknownFields
+	sizeCache           protoimpl.SizeCache
+}
+
+func (x *VolumeCondition) Reset() {
+	*x = VolumeCondition{}
+	mi := &file_csi_proto_msgTypes[54]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *VolumeCondition) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*VolumeCondition) ProtoMessage() {}
+
+func (x *VolumeCondition) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *VolumeCondition) GetAbnormal() bool {
+	if x != nil {
+		return x.xxx_hidden_Abnormal
+	}
+	return false
+}
+
+func (x *VolumeCondition) GetMessage() string {
+	if x != nil {
+		return x.xxx_hidden_Message
+	}
+	return ""
+}
+
+func (x *VolumeCondition) SetAbnormal(v bool) {
+	x.xxx_hidden_Abnormal = v
+}
+
+func (x *VolumeCondition) SetMessage(v string) {
+	x.xxx_hidden_Message = v
+}
+
+type VolumeCondition_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Normal volumes are available for use and operating optimally.
+	// An abnormal volume does not meet these criteria.
+	// This field is REQUIRED.
+	Abnormal bool
+	// The message describing the condition of the volume.
+	// This field is REQUIRED.
+	Message string
+}
+
+func (b0 VolumeCondition_builder) Build() *VolumeCondition {
+	m0 := &VolumeCondition{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Abnormal = b.Abnormal
+	x.xxx_hidden_Message = b.Message
+	return m0
+}
+
+type NodeGetCapabilitiesRequest struct {
+	state         protoimpl.MessageState `protogen:"opaque.v1"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *NodeGetCapabilitiesRequest) Reset() {
+	*x = NodeGetCapabilitiesRequest{}
+	mi := &file_csi_proto_msgTypes[55]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeGetCapabilitiesRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeGetCapabilitiesRequest) ProtoMessage() {}
+
+func (x *NodeGetCapabilitiesRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+type NodeGetCapabilitiesRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 NodeGetCapabilitiesRequest_builder) Build() *NodeGetCapabilitiesRequest {
+	m0 := &NodeGetCapabilitiesRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
+
+type NodeGetCapabilitiesResponse struct {
+	state                   protoimpl.MessageState    `protogen:"opaque.v1"`
+	xxx_hidden_Capabilities *[]*NodeServiceCapability `protobuf:"bytes,1,rep,name=capabilities,proto3" json:"capabilities,omitempty"`
+	unknownFields           protoimpl.UnknownFields
+	sizeCache               protoimpl.SizeCache
+}
+
+func (x *NodeGetCapabilitiesResponse) Reset() {
+	*x = NodeGetCapabilitiesResponse{}
+	mi := &file_csi_proto_msgTypes[56]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeGetCapabilitiesResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeGetCapabilitiesResponse) ProtoMessage() {}
+
+func (x *NodeGetCapabilitiesResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *NodeGetCapabilitiesResponse) GetCapabilities() []*NodeServiceCapability {
+	if x != nil {
+		if x.xxx_hidden_Capabilities != nil {
+			return *x.xxx_hidden_Capabilities
+		}
+	}
+	return nil
+}
+
+func (x *NodeGetCapabilitiesResponse) SetCapabilities(v []*NodeServiceCapability) {
+	x.xxx_hidden_Capabilities = &v
+}
+
+type NodeGetCapabilitiesResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// All the capabilities that the node service supports. This field
+	// is OPTIONAL.
+	Capabilities []*NodeServiceCapability
+}
+
+func (b0 NodeGetCapabilitiesResponse_builder) Build() *NodeGetCapabilitiesResponse {
+	m0 := &NodeGetCapabilitiesResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Capabilities = &b.Capabilities
+	return m0
+}
+
+// Specifies a capability of the node service.
+type NodeServiceCapability struct {
+	state           protoimpl.MessageState       `protogen:"opaque.v1"`
+	xxx_hidden_Type isNodeServiceCapability_Type `protobuf_oneof:"type"`
+	unknownFields   protoimpl.UnknownFields
+	sizeCache       protoimpl.SizeCache
+}
+
+func (x *NodeServiceCapability) Reset() {
+	*x = NodeServiceCapability{}
+	mi := &file_csi_proto_msgTypes[57]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeServiceCapability) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeServiceCapability) ProtoMessage() {}
+
+func (x *NodeServiceCapability) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *NodeServiceCapability) GetRpc() *NodeServiceCapability_RPC {
+	if x != nil {
+		if x, ok := x.xxx_hidden_Type.(*nodeServiceCapability_Rpc); ok {
+			return x.Rpc
+		}
+	}
+	return nil
+}
+
+func (x *NodeServiceCapability) SetRpc(v *NodeServiceCapability_RPC) {
+	if v == nil {
+		x.xxx_hidden_Type = nil
+		return
+	}
+	x.xxx_hidden_Type = &nodeServiceCapability_Rpc{v}
+}
+
+func (x *NodeServiceCapability) HasType() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_Type != nil
+}
+
+func (x *NodeServiceCapability) HasRpc() bool {
+	if x == nil {
+		return false
+	}
+	_, ok := x.xxx_hidden_Type.(*nodeServiceCapability_Rpc)
+	return ok
+}
+
+func (x *NodeServiceCapability) ClearType() {
+	x.xxx_hidden_Type = nil
+}
+
+func (x *NodeServiceCapability) ClearRpc() {
+	if _, ok := x.xxx_hidden_Type.(*nodeServiceCapability_Rpc); ok {
+		x.xxx_hidden_Type = nil
+	}
+}
+
+const NodeServiceCapability_Type_not_set_case case_NodeServiceCapability_Type = 0
+const NodeServiceCapability_Rpc_case case_NodeServiceCapability_Type = 1
+
+func (x *NodeServiceCapability) WhichType() case_NodeServiceCapability_Type {
+	if x == nil {
+		return NodeServiceCapability_Type_not_set_case
+	}
+	switch x.xxx_hidden_Type.(type) {
+	case *nodeServiceCapability_Rpc:
+		return NodeServiceCapability_Rpc_case
+	default:
+		return NodeServiceCapability_Type_not_set_case
+	}
+}
+
+type NodeServiceCapability_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Fields of oneof xxx_hidden_Type:
+	// RPC that the controller supports.
+	Rpc *NodeServiceCapability_RPC
+	// -- end of xxx_hidden_Type
+}
+
+func (b0 NodeServiceCapability_builder) Build() *NodeServiceCapability {
+	m0 := &NodeServiceCapability{}
+	b, x := &b0, m0
+	_, _ = b, x
+	if b.Rpc != nil {
+		x.xxx_hidden_Type = &nodeServiceCapability_Rpc{b.Rpc}
+	}
+	return m0
+}
+
+type case_NodeServiceCapability_Type protoreflect.FieldNumber
+
+func (x case_NodeServiceCapability_Type) String() string {
+	md := file_csi_proto_msgTypes[57].Descriptor()
+	if x == 0 {
+		return "not set"
+	}
+	return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))
+}
+
+type isNodeServiceCapability_Type interface {
+	isNodeServiceCapability_Type()
+}
+
+type nodeServiceCapability_Rpc struct {
+	// RPC that the controller supports.
+	Rpc *NodeServiceCapability_RPC `protobuf:"bytes,1,opt,name=rpc,proto3,oneof"`
+}
+
+func (*nodeServiceCapability_Rpc) isNodeServiceCapability_Type() {}
+
+type NodeGetInfoRequest struct {
+	state         protoimpl.MessageState `protogen:"opaque.v1"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *NodeGetInfoRequest) Reset() {
+	*x = NodeGetInfoRequest{}
+	mi := &file_csi_proto_msgTypes[58]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeGetInfoRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeGetInfoRequest) ProtoMessage() {}
+
+func (x *NodeGetInfoRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+type NodeGetInfoRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 NodeGetInfoRequest_builder) Build() *NodeGetInfoRequest {
+	m0 := &NodeGetInfoRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
+
+type NodeGetInfoResponse struct {
+	state                         protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_NodeId             string                 `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"`
+	xxx_hidden_MaxVolumesPerNode  int64                  `protobuf:"varint,2,opt,name=max_volumes_per_node,json=maxVolumesPerNode,proto3" json:"max_volumes_per_node,omitempty"`
+	xxx_hidden_AccessibleTopology *Topology              `protobuf:"bytes,3,opt,name=accessible_topology,json=accessibleTopology,proto3" json:"accessible_topology,omitempty"`
+	unknownFields                 protoimpl.UnknownFields
+	sizeCache                     protoimpl.SizeCache
+}
+
+func (x *NodeGetInfoResponse) Reset() {
+	*x = NodeGetInfoResponse{}
+	mi := &file_csi_proto_msgTypes[59]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeGetInfoResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeGetInfoResponse) ProtoMessage() {}
+
+func (x *NodeGetInfoResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *NodeGetInfoResponse) GetNodeId() string {
+	if x != nil {
+		return x.xxx_hidden_NodeId
+	}
+	return ""
+}
+
+func (x *NodeGetInfoResponse) GetMaxVolumesPerNode() int64 {
+	if x != nil {
+		return x.xxx_hidden_MaxVolumesPerNode
+	}
+	return 0
+}
+
+func (x *NodeGetInfoResponse) GetAccessibleTopology() *Topology {
+	if x != nil {
+		return x.xxx_hidden_AccessibleTopology
+	}
+	return nil
+}
+
+func (x *NodeGetInfoResponse) SetNodeId(v string) {
+	x.xxx_hidden_NodeId = v
+}
+
+func (x *NodeGetInfoResponse) SetMaxVolumesPerNode(v int64) {
+	x.xxx_hidden_MaxVolumesPerNode = v
+}
+
+func (x *NodeGetInfoResponse) SetAccessibleTopology(v *Topology) {
+	x.xxx_hidden_AccessibleTopology = v
+}
+
+func (x *NodeGetInfoResponse) HasAccessibleTopology() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_AccessibleTopology != nil
+}
+
+func (x *NodeGetInfoResponse) ClearAccessibleTopology() {
+	x.xxx_hidden_AccessibleTopology = nil
+}
+
+type NodeGetInfoResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The identifier of the node as understood by the SP.
+	// This field is REQUIRED.
+	// This field MUST contain enough information to uniquely identify
+	// this specific node vs all other nodes supported by this plugin.
+	// This field SHALL be used by the CO in subsequent calls, including
+	// `ControllerPublishVolume`, to refer to this node.
+	// The SP is NOT responsible for global uniqueness of node_id across
+	// multiple SPs.
+	// This field overrides the general CSI size limit.
+	// The size of this field SHALL NOT exceed 256 bytes. The general
+	// CSI size limit, 128 byte, is RECOMMENDED for best backwards
+	// compatibility.
+	NodeId string
+	// Maximum number of volumes that controller can publish to the node.
+	// If value is not set or zero CO SHALL decide how many volumes of
+	// this type can be published by the controller to the node. The
+	// plugin MUST NOT set negative values here.
+	// This field is OPTIONAL.
+	MaxVolumesPerNode int64
+	// Specifies where (regions, zones, racks, etc.) the node is
+	// accessible from.
+	// A plugin that returns this field MUST also set the
+	// VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability.
+	// COs MAY use this information along with the topology information
+	// returned in CreateVolumeResponse to ensure that a given volume is
+	// accessible from a given node when scheduling workloads.
+	// This field is OPTIONAL. If it is not specified, the CO MAY assume
+	// the node is not subject to any topological constraint, and MAY
+	// schedule workloads that reference any volume V, such that there are
+	// no topological constraints declared for V.
+	//
+	// Example 1:
+	//
+	//	accessible_topology =
+	//	  {"region": "R1", "zone": "Z2"}
+	//
+	// Indicates the node exists within the "region" "R1" and the "zone"
+	// "Z2".
+	AccessibleTopology *Topology
+}
+
+func (b0 NodeGetInfoResponse_builder) Build() *NodeGetInfoResponse {
+	m0 := &NodeGetInfoResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_NodeId = b.NodeId
+	x.xxx_hidden_MaxVolumesPerNode = b.MaxVolumesPerNode
+	x.xxx_hidden_AccessibleTopology = b.AccessibleTopology
+	return m0
+}
+
+type NodeExpandVolumeRequest struct {
+	state                        protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_VolumeId          string                 `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
+	xxx_hidden_VolumePath        string                 `protobuf:"bytes,2,opt,name=volume_path,json=volumePath,proto3" json:"volume_path,omitempty"`
+	xxx_hidden_CapacityRange     *CapacityRange         `protobuf:"bytes,3,opt,name=capacity_range,json=capacityRange,proto3" json:"capacity_range,omitempty"`
+	xxx_hidden_StagingTargetPath string                 `protobuf:"bytes,4,opt,name=staging_target_path,json=stagingTargetPath,proto3" json:"staging_target_path,omitempty"`
+	xxx_hidden_VolumeCapability  *VolumeCapability      `protobuf:"bytes,5,opt,name=volume_capability,json=volumeCapability,proto3" json:"volume_capability,omitempty"`
+	xxx_hidden_Secrets           map[string]string      `protobuf:"bytes,6,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields                protoimpl.UnknownFields
+	sizeCache                    protoimpl.SizeCache
+}
+
+func (x *NodeExpandVolumeRequest) Reset() {
+	*x = NodeExpandVolumeRequest{}
+	mi := &file_csi_proto_msgTypes[60]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeExpandVolumeRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeExpandVolumeRequest) ProtoMessage() {}
+
+func (x *NodeExpandVolumeRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *NodeExpandVolumeRequest) GetVolumeId() string {
+	if x != nil {
+		return x.xxx_hidden_VolumeId
+	}
+	return ""
+}
+
+func (x *NodeExpandVolumeRequest) GetVolumePath() string {
+	if x != nil {
+		return x.xxx_hidden_VolumePath
+	}
+	return ""
+}
+
+func (x *NodeExpandVolumeRequest) GetCapacityRange() *CapacityRange {
+	if x != nil {
+		return x.xxx_hidden_CapacityRange
+	}
+	return nil
+}
+
+func (x *NodeExpandVolumeRequest) GetStagingTargetPath() string {
+	if x != nil {
+		return x.xxx_hidden_StagingTargetPath
+	}
+	return ""
+}
+
+func (x *NodeExpandVolumeRequest) GetVolumeCapability() *VolumeCapability {
+	if x != nil {
+		return x.xxx_hidden_VolumeCapability
+	}
+	return nil
+}
+
+func (x *NodeExpandVolumeRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Secrets
+	}
+	return nil
+}
+
+func (x *NodeExpandVolumeRequest) SetVolumeId(v string) {
+	x.xxx_hidden_VolumeId = v
+}
+
+func (x *NodeExpandVolumeRequest) SetVolumePath(v string) {
+	x.xxx_hidden_VolumePath = v
+}
+
+func (x *NodeExpandVolumeRequest) SetCapacityRange(v *CapacityRange) {
+	x.xxx_hidden_CapacityRange = v
+}
+
+func (x *NodeExpandVolumeRequest) SetStagingTargetPath(v string) {
+	x.xxx_hidden_StagingTargetPath = v
+}
+
+func (x *NodeExpandVolumeRequest) SetVolumeCapability(v *VolumeCapability) {
+	x.xxx_hidden_VolumeCapability = v
+}
+
+func (x *NodeExpandVolumeRequest) SetSecrets(v map[string]string) {
+	x.xxx_hidden_Secrets = v
+}
+
+func (x *NodeExpandVolumeRequest) HasCapacityRange() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_CapacityRange != nil
+}
+
+func (x *NodeExpandVolumeRequest) HasVolumeCapability() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_VolumeCapability != nil
+}
+
+func (x *NodeExpandVolumeRequest) ClearCapacityRange() {
+	x.xxx_hidden_CapacityRange = nil
+}
+
+func (x *NodeExpandVolumeRequest) ClearVolumeCapability() {
+	x.xxx_hidden_VolumeCapability = nil
+}
+
+type NodeExpandVolumeRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the volume. This field is REQUIRED.
+	VolumeId string
+	// The path on which volume is available. This field is REQUIRED.
+	// This field overrides the general CSI size limit.
+	// SP SHOULD support the maximum path length allowed by the operating
+	// system/filesystem, but, at a minimum, SP MUST accept a max path
+	// length of at least 128 bytes.
+	VolumePath string
+	// This allows CO to specify the capacity requirements of the volume
+	// after expansion. If capacity_range is omitted then a plugin MAY
+	// inspect the file system of the volume to determine the maximum
+	// capacity to which the volume can be expanded. In such cases a
+	// plugin MAY expand the volume to its maximum capacity.
+	// This field is OPTIONAL.
+	CapacityRange *CapacityRange
+	// The path where the volume is staged, if the plugin has the
+	// STAGE_UNSTAGE_VOLUME capability, otherwise empty.
+	// If not empty, it MUST be an absolute path in the root
+	// filesystem of the process serving this request.
+	// This field is OPTIONAL.
+	// This field overrides the general CSI size limit.
+	// SP SHOULD support the maximum path length allowed by the operating
+	// system/filesystem, but, at a minimum, SP MUST accept a max path
+	// length of at least 128 bytes.
+	StagingTargetPath string
+	// Volume capability describing how the CO intends to use this volume.
+	// This allows SP to determine if volume is being used as a block
+	// device or mounted file system. For example - if volume is being
+	// used as a block device the SP MAY choose to skip expanding the
+	// filesystem in NodeExpandVolume implementation but still perform
+	// rest of the housekeeping needed for expanding the volume. If
+	// volume_capability is omitted the SP MAY determine
+	// access_type from given volume_path for the volume and perform
+	// node expansion. This is an OPTIONAL field.
+	VolumeCapability *VolumeCapability
+	// Secrets required by plugin to complete node expand volume request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+}
+
+func (b0 NodeExpandVolumeRequest_builder) Build() *NodeExpandVolumeRequest {
+	m0 := &NodeExpandVolumeRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_VolumeId = b.VolumeId
+	x.xxx_hidden_VolumePath = b.VolumePath
+	x.xxx_hidden_CapacityRange = b.CapacityRange
+	x.xxx_hidden_StagingTargetPath = b.StagingTargetPath
+	x.xxx_hidden_VolumeCapability = b.VolumeCapability
+	x.xxx_hidden_Secrets = b.Secrets
+	return m0
+}
+
+type NodeExpandVolumeResponse struct {
+	state                    protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_CapacityBytes int64                  `protobuf:"varint,1,opt,name=capacity_bytes,json=capacityBytes,proto3" json:"capacity_bytes,omitempty"`
+	unknownFields            protoimpl.UnknownFields
+	sizeCache                protoimpl.SizeCache
+}
+
+func (x *NodeExpandVolumeResponse) Reset() {
+	*x = NodeExpandVolumeResponse{}
+	mi := &file_csi_proto_msgTypes[61]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeExpandVolumeResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeExpandVolumeResponse) ProtoMessage() {}
+
+func (x *NodeExpandVolumeResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *NodeExpandVolumeResponse) GetCapacityBytes() int64 {
+	if x != nil {
+		return x.xxx_hidden_CapacityBytes
+	}
+	return 0
+}
+
+func (x *NodeExpandVolumeResponse) SetCapacityBytes(v int64) {
+	x.xxx_hidden_CapacityBytes = v
+}
+
+type NodeExpandVolumeResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The capacity of the volume in bytes. This field is OPTIONAL.
+	CapacityBytes int64
+}
+
+func (b0 NodeExpandVolumeResponse_builder) Build() *NodeExpandVolumeResponse {
+	m0 := &NodeExpandVolumeResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_CapacityBytes = b.CapacityBytes
+	return m0
+}
+
+type GroupControllerGetCapabilitiesRequest struct {
+	state         protoimpl.MessageState `protogen:"opaque.v1"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *GroupControllerGetCapabilitiesRequest) Reset() {
+	*x = GroupControllerGetCapabilitiesRequest{}
+	mi := &file_csi_proto_msgTypes[62]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *GroupControllerGetCapabilitiesRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GroupControllerGetCapabilitiesRequest) ProtoMessage() {}
+
+func (x *GroupControllerGetCapabilitiesRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+type GroupControllerGetCapabilitiesRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 GroupControllerGetCapabilitiesRequest_builder) Build() *GroupControllerGetCapabilitiesRequest {
+	m0 := &GroupControllerGetCapabilitiesRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
+
+type GroupControllerGetCapabilitiesResponse struct {
+	state                   protoimpl.MessageState               `protogen:"opaque.v1"`
+	xxx_hidden_Capabilities *[]*GroupControllerServiceCapability `protobuf:"bytes,1,rep,name=capabilities,proto3" json:"capabilities,omitempty"`
+	unknownFields           protoimpl.UnknownFields
+	sizeCache               protoimpl.SizeCache
+}
+
+func (x *GroupControllerGetCapabilitiesResponse) Reset() {
+	*x = GroupControllerGetCapabilitiesResponse{}
+	mi := &file_csi_proto_msgTypes[63]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *GroupControllerGetCapabilitiesResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GroupControllerGetCapabilitiesResponse) ProtoMessage() {}
+
+func (x *GroupControllerGetCapabilitiesResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[63]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *GroupControllerGetCapabilitiesResponse) GetCapabilities() []*GroupControllerServiceCapability {
+	if x != nil {
+		if x.xxx_hidden_Capabilities != nil {
+			return *x.xxx_hidden_Capabilities
+		}
+	}
+	return nil
+}
+
+func (x *GroupControllerGetCapabilitiesResponse) SetCapabilities(v []*GroupControllerServiceCapability) {
+	x.xxx_hidden_Capabilities = &v
+}
+
+type GroupControllerGetCapabilitiesResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// All the capabilities that the group controller service supports.
+	// This field is OPTIONAL.
+	Capabilities []*GroupControllerServiceCapability
+}
+
+func (b0 GroupControllerGetCapabilitiesResponse_builder) Build() *GroupControllerGetCapabilitiesResponse {
+	m0 := &GroupControllerGetCapabilitiesResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Capabilities = &b.Capabilities
+	return m0
+}
+
+// Specifies a capability of the group controller service.
+type GroupControllerServiceCapability struct {
+	state           protoimpl.MessageState                  `protogen:"opaque.v1"`
+	xxx_hidden_Type isGroupControllerServiceCapability_Type `protobuf_oneof:"type"`
+	unknownFields   protoimpl.UnknownFields
+	sizeCache       protoimpl.SizeCache
+}
+
+func (x *GroupControllerServiceCapability) Reset() {
+	*x = GroupControllerServiceCapability{}
+	mi := &file_csi_proto_msgTypes[64]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *GroupControllerServiceCapability) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GroupControllerServiceCapability) ProtoMessage() {}
+
+func (x *GroupControllerServiceCapability) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *GroupControllerServiceCapability) GetRpc() *GroupControllerServiceCapability_RPC {
+	if x != nil {
+		if x, ok := x.xxx_hidden_Type.(*groupControllerServiceCapability_Rpc); ok {
+			return x.Rpc
+		}
+	}
+	return nil
+}
+
+func (x *GroupControllerServiceCapability) SetRpc(v *GroupControllerServiceCapability_RPC) {
+	if v == nil {
+		x.xxx_hidden_Type = nil
+		return
+	}
+	x.xxx_hidden_Type = &groupControllerServiceCapability_Rpc{v}
+}
+
+func (x *GroupControllerServiceCapability) HasType() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_Type != nil
+}
+
+func (x *GroupControllerServiceCapability) HasRpc() bool {
+	if x == nil {
+		return false
+	}
+	_, ok := x.xxx_hidden_Type.(*groupControllerServiceCapability_Rpc)
+	return ok
+}
+
+func (x *GroupControllerServiceCapability) ClearType() {
+	x.xxx_hidden_Type = nil
+}
+
+func (x *GroupControllerServiceCapability) ClearRpc() {
+	if _, ok := x.xxx_hidden_Type.(*groupControllerServiceCapability_Rpc); ok {
+		x.xxx_hidden_Type = nil
+	}
+}
+
+const GroupControllerServiceCapability_Type_not_set_case case_GroupControllerServiceCapability_Type = 0
+const GroupControllerServiceCapability_Rpc_case case_GroupControllerServiceCapability_Type = 1
+
+func (x *GroupControllerServiceCapability) WhichType() case_GroupControllerServiceCapability_Type {
+	if x == nil {
+		return GroupControllerServiceCapability_Type_not_set_case
+	}
+	switch x.xxx_hidden_Type.(type) {
+	case *groupControllerServiceCapability_Rpc:
+		return GroupControllerServiceCapability_Rpc_case
+	default:
+		return GroupControllerServiceCapability_Type_not_set_case
+	}
+}
+
+type GroupControllerServiceCapability_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Fields of oneof xxx_hidden_Type:
+	// RPC that the controller supports.
+	Rpc *GroupControllerServiceCapability_RPC
+	// -- end of xxx_hidden_Type
+}
+
+func (b0 GroupControllerServiceCapability_builder) Build() *GroupControllerServiceCapability {
+	m0 := &GroupControllerServiceCapability{}
+	b, x := &b0, m0
+	_, _ = b, x
+	if b.Rpc != nil {
+		x.xxx_hidden_Type = &groupControllerServiceCapability_Rpc{b.Rpc}
+	}
+	return m0
+}
+
+type case_GroupControllerServiceCapability_Type protoreflect.FieldNumber
+
+func (x case_GroupControllerServiceCapability_Type) String() string {
+	md := file_csi_proto_msgTypes[64].Descriptor()
+	if x == 0 {
+		return "not set"
+	}
+	return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))
+}
+
+type isGroupControllerServiceCapability_Type interface {
+	isGroupControllerServiceCapability_Type()
+}
+
+type groupControllerServiceCapability_Rpc struct {
+	// RPC that the controller supports.
+	Rpc *GroupControllerServiceCapability_RPC `protobuf:"bytes,1,opt,name=rpc,proto3,oneof"`
+}
+
+func (*groupControllerServiceCapability_Rpc) isGroupControllerServiceCapability_Type() {}
+
+type CreateVolumeGroupSnapshotRequest struct {
+	state                      protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_Name            string                 `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	xxx_hidden_SourceVolumeIds []string               `protobuf:"bytes,2,rep,name=source_volume_ids,json=sourceVolumeIds,proto3" json:"source_volume_ids,omitempty"`
+	xxx_hidden_Secrets         map[string]string      `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	xxx_hidden_Parameters      map[string]string      `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields              protoimpl.UnknownFields
+	sizeCache                  protoimpl.SizeCache
+}
+
+func (x *CreateVolumeGroupSnapshotRequest) Reset() {
+	*x = CreateVolumeGroupSnapshotRequest{}
+	mi := &file_csi_proto_msgTypes[65]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *CreateVolumeGroupSnapshotRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CreateVolumeGroupSnapshotRequest) ProtoMessage() {}
+
+func (x *CreateVolumeGroupSnapshotRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *CreateVolumeGroupSnapshotRequest) GetName() string {
+	if x != nil {
+		return x.xxx_hidden_Name
+	}
+	return ""
+}
+
+func (x *CreateVolumeGroupSnapshotRequest) GetSourceVolumeIds() []string {
+	if x != nil {
+		return x.xxx_hidden_SourceVolumeIds
+	}
+	return nil
+}
+
+func (x *CreateVolumeGroupSnapshotRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Secrets
+	}
+	return nil
+}
+
+func (x *CreateVolumeGroupSnapshotRequest) GetParameters() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Parameters
+	}
+	return nil
+}
+
+func (x *CreateVolumeGroupSnapshotRequest) SetName(v string) {
+	x.xxx_hidden_Name = v
+}
+
+func (x *CreateVolumeGroupSnapshotRequest) SetSourceVolumeIds(v []string) {
+	x.xxx_hidden_SourceVolumeIds = v
+}
+
+func (x *CreateVolumeGroupSnapshotRequest) SetSecrets(v map[string]string) {
+	x.xxx_hidden_Secrets = v
+}
+
+func (x *CreateVolumeGroupSnapshotRequest) SetParameters(v map[string]string) {
+	x.xxx_hidden_Parameters = v
+}
+
+type CreateVolumeGroupSnapshotRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The suggested name for the group snapshot. This field is REQUIRED
+	// for idempotency.
+	// Any Unicode string that conforms to the length limit is allowed
+	// except those containing the following banned characters:
+	// U+0000-U+0008, U+000B, U+000C, U+000E-U+001F, U+007F-U+009F.
+	// (These are control characters other than commonly used whitespace.)
+	Name string
+	// volume IDs of the source volumes to be snapshotted together.
+	// This field is REQUIRED.
+	SourceVolumeIds []string
+	// Secrets required by plugin to complete
+	// ControllerCreateVolumeGroupSnapshot request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	// The secrets provided in this field SHOULD be the same for
+	// all group snapshot operations on the same group snapshot.
+	Secrets map[string]string
+	// Plugin specific parameters passed in as opaque key-value pairs.
+	// This field is OPTIONAL. The Plugin is responsible for parsing and
+	// validating these parameters. COs will treat these as opaque.
+	Parameters map[string]string
+}
+
+func (b0 CreateVolumeGroupSnapshotRequest_builder) Build() *CreateVolumeGroupSnapshotRequest {
+	m0 := &CreateVolumeGroupSnapshotRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Name = b.Name
+	x.xxx_hidden_SourceVolumeIds = b.SourceVolumeIds
+	x.xxx_hidden_Secrets = b.Secrets
+	x.xxx_hidden_Parameters = b.Parameters
+	return m0
+}
+
+type CreateVolumeGroupSnapshotResponse struct {
+	state                    protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_GroupSnapshot *VolumeGroupSnapshot   `protobuf:"bytes,1,opt,name=group_snapshot,json=groupSnapshot,proto3" json:"group_snapshot,omitempty"`
+	unknownFields            protoimpl.UnknownFields
+	sizeCache                protoimpl.SizeCache
+}
+
+func (x *CreateVolumeGroupSnapshotResponse) Reset() {
+	*x = CreateVolumeGroupSnapshotResponse{}
+	mi := &file_csi_proto_msgTypes[66]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *CreateVolumeGroupSnapshotResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CreateVolumeGroupSnapshotResponse) ProtoMessage() {}
+
+func (x *CreateVolumeGroupSnapshotResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *CreateVolumeGroupSnapshotResponse) GetGroupSnapshot() *VolumeGroupSnapshot {
+	if x != nil {
+		return x.xxx_hidden_GroupSnapshot
+	}
+	return nil
+}
+
+func (x *CreateVolumeGroupSnapshotResponse) SetGroupSnapshot(v *VolumeGroupSnapshot) {
+	x.xxx_hidden_GroupSnapshot = v
+}
+
+func (x *CreateVolumeGroupSnapshotResponse) HasGroupSnapshot() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_GroupSnapshot != nil
+}
+
+func (x *CreateVolumeGroupSnapshotResponse) ClearGroupSnapshot() {
+	x.xxx_hidden_GroupSnapshot = nil
+}
+
+type CreateVolumeGroupSnapshotResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Contains all attributes of the newly created group snapshot.
+	// This field is REQUIRED.
+	GroupSnapshot *VolumeGroupSnapshot
+}
+
+func (b0 CreateVolumeGroupSnapshotResponse_builder) Build() *CreateVolumeGroupSnapshotResponse {
+	m0 := &CreateVolumeGroupSnapshotResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_GroupSnapshot = b.GroupSnapshot
+	return m0
+}
+
+type VolumeGroupSnapshot struct {
+	state                      protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_GroupSnapshotId string                 `protobuf:"bytes,1,opt,name=group_snapshot_id,json=groupSnapshotId,proto3" json:"group_snapshot_id,omitempty"`
+	xxx_hidden_Snapshots       *[]*Snapshot           `protobuf:"bytes,2,rep,name=snapshots,proto3" json:"snapshots,omitempty"`
+	xxx_hidden_CreationTime    *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=creation_time,json=creationTime,proto3" json:"creation_time,omitempty"`
+	xxx_hidden_ReadyToUse      bool                   `protobuf:"varint,4,opt,name=ready_to_use,json=readyToUse,proto3" json:"ready_to_use,omitempty"`
+	unknownFields              protoimpl.UnknownFields
+	sizeCache                  protoimpl.SizeCache
+}
+
+func (x *VolumeGroupSnapshot) Reset() {
+	*x = VolumeGroupSnapshot{}
+	mi := &file_csi_proto_msgTypes[67]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *VolumeGroupSnapshot) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*VolumeGroupSnapshot) ProtoMessage() {}
+
+func (x *VolumeGroupSnapshot) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_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)
+}
+
+func (x *VolumeGroupSnapshot) GetGroupSnapshotId() string {
+	if x != nil {
+		return x.xxx_hidden_GroupSnapshotId
+	}
+	return ""
+}
+
+func (x *VolumeGroupSnapshot) GetSnapshots() []*Snapshot {
+	if x != nil {
+		if x.xxx_hidden_Snapshots != nil {
+			return *x.xxx_hidden_Snapshots
+		}
+	}
+	return nil
+}
+
+func (x *VolumeGroupSnapshot) GetCreationTime() *timestamppb.Timestamp {
+	if x != nil {
+		return x.xxx_hidden_CreationTime
+	}
+	return nil
+}
+
+func (x *VolumeGroupSnapshot) GetReadyToUse() bool {
+	if x != nil {
+		return x.xxx_hidden_ReadyToUse
+	}
+	return false
+}
+
+func (x *VolumeGroupSnapshot) SetGroupSnapshotId(v string) {
+	x.xxx_hidden_GroupSnapshotId = v
+}
+
+func (x *VolumeGroupSnapshot) SetSnapshots(v []*Snapshot) {
+	x.xxx_hidden_Snapshots = &v
+}
+
+func (x *VolumeGroupSnapshot) SetCreationTime(v *timestamppb.Timestamp) {
+	x.xxx_hidden_CreationTime = v
+}
+
+func (x *VolumeGroupSnapshot) SetReadyToUse(v bool) {
+	x.xxx_hidden_ReadyToUse = v
+}
+
+func (x *VolumeGroupSnapshot) HasCreationTime() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_CreationTime != nil
+}
+
+func (x *VolumeGroupSnapshot) ClearCreationTime() {
+	x.xxx_hidden_CreationTime = nil
+}
+
+type VolumeGroupSnapshot_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The identifier for this group snapshot, generated by the plugin.
+	// This field MUST contain enough information to uniquely identify
+	// this specific snapshot vs all other group snapshots supported by
+	// this plugin.
+	// This field SHALL be used by the CO in subsequent calls to refer to
+	// this group snapshot.
+	// The SP is NOT responsible for global uniqueness of
+	// group_snapshot_id across multiple SPs.
+	// This field is REQUIRED.
+	GroupSnapshotId string
+	// A list of snapshots belonging to this group.
+	// This field is REQUIRED.
+	Snapshots []*Snapshot
+	// Timestamp of when the volume group snapshot was taken.
+	// This field is REQUIRED.
+	CreationTime *timestamppb.Timestamp
+	// Indicates if all individual snapshots in the group snapshot
+	// are ready to use as a `volume_content_source` in a
+	// `CreateVolumeRequest`. The default value is false.
+	// If any snapshot in the list of snapshots in this message have
+	// ready_to_use set to false, the SP MUST set this field to false.
+	// If all of the snapshots in the list of snapshots in this message
+	// have ready_to_use set to true, the SP SHOULD set this field to
+	// true.
+	// This field is REQUIRED.
+	ReadyToUse bool
+}
+
+func (b0 VolumeGroupSnapshot_builder) Build() *VolumeGroupSnapshot {
+	m0 := &VolumeGroupSnapshot{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_GroupSnapshotId = b.GroupSnapshotId
+	x.xxx_hidden_Snapshots = &b.Snapshots
+	x.xxx_hidden_CreationTime = b.CreationTime
+	x.xxx_hidden_ReadyToUse = b.ReadyToUse
+	return m0
+}
+
+type DeleteVolumeGroupSnapshotRequest struct {
+	state                      protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_GroupSnapshotId string                 `protobuf:"bytes,1,opt,name=group_snapshot_id,json=groupSnapshotId,proto3" json:"group_snapshot_id,omitempty"`
+	xxx_hidden_SnapshotIds     []string               `protobuf:"bytes,2,rep,name=snapshot_ids,json=snapshotIds,proto3" json:"snapshot_ids,omitempty"`
+	xxx_hidden_Secrets         map[string]string      `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields              protoimpl.UnknownFields
+	sizeCache                  protoimpl.SizeCache
+}
+
+func (x *DeleteVolumeGroupSnapshotRequest) Reset() {
+	*x = DeleteVolumeGroupSnapshotRequest{}
+	mi := &file_csi_proto_msgTypes[68]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *DeleteVolumeGroupSnapshotRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteVolumeGroupSnapshotRequest) ProtoMessage() {}
+
+func (x *DeleteVolumeGroupSnapshotRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[68]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *DeleteVolumeGroupSnapshotRequest) GetGroupSnapshotId() string {
+	if x != nil {
+		return x.xxx_hidden_GroupSnapshotId
+	}
+	return ""
+}
+
+func (x *DeleteVolumeGroupSnapshotRequest) GetSnapshotIds() []string {
+	if x != nil {
+		return x.xxx_hidden_SnapshotIds
+	}
+	return nil
+}
+
+func (x *DeleteVolumeGroupSnapshotRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Secrets
+	}
+	return nil
+}
+
+func (x *DeleteVolumeGroupSnapshotRequest) SetGroupSnapshotId(v string) {
+	x.xxx_hidden_GroupSnapshotId = v
+}
+
+func (x *DeleteVolumeGroupSnapshotRequest) SetSnapshotIds(v []string) {
+	x.xxx_hidden_SnapshotIds = v
+}
+
+func (x *DeleteVolumeGroupSnapshotRequest) SetSecrets(v map[string]string) {
+	x.xxx_hidden_Secrets = v
+}
+
+type DeleteVolumeGroupSnapshotRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the group snapshot to be deleted.
+	// This field is REQUIRED.
+	GroupSnapshotId string
+	// A list of snapshot IDs that are part of this group snapshot.
+	// If SP does not need to rely on this field to delete the snapshots
+	// in the group, it SHOULD check this field and report an error
+	// if it has the ability to detect a mismatch.
+	// Some SPs require this list to delete the snapshots in the group.
+	// If SP needs to use this field to delete the snapshots in the
+	// group, it MUST report an error if it has the ability to detect
+	// a mismatch.
+	// This field is REQUIRED.
+	SnapshotIds []string
+	// Secrets required by plugin to complete group snapshot deletion
+	// request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	// The secrets provided in this field SHOULD be the same for
+	// all group snapshot operations on the same group snapshot.
+	Secrets map[string]string
+}
+
+func (b0 DeleteVolumeGroupSnapshotRequest_builder) Build() *DeleteVolumeGroupSnapshotRequest {
+	m0 := &DeleteVolumeGroupSnapshotRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_GroupSnapshotId = b.GroupSnapshotId
+	x.xxx_hidden_SnapshotIds = b.SnapshotIds
+	x.xxx_hidden_Secrets = b.Secrets
+	return m0
+}
+
+type DeleteVolumeGroupSnapshotResponse struct {
+	state         protoimpl.MessageState `protogen:"opaque.v1"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *DeleteVolumeGroupSnapshotResponse) Reset() {
+	*x = DeleteVolumeGroupSnapshotResponse{}
+	mi := &file_csi_proto_msgTypes[69]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *DeleteVolumeGroupSnapshotResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteVolumeGroupSnapshotResponse) ProtoMessage() {}
+
+func (x *DeleteVolumeGroupSnapshotResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[69]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+type DeleteVolumeGroupSnapshotResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 DeleteVolumeGroupSnapshotResponse_builder) Build() *DeleteVolumeGroupSnapshotResponse {
+	m0 := &DeleteVolumeGroupSnapshotResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
+
+type GetVolumeGroupSnapshotRequest struct {
+	state                      protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_GroupSnapshotId string                 `protobuf:"bytes,1,opt,name=group_snapshot_id,json=groupSnapshotId,proto3" json:"group_snapshot_id,omitempty"`
+	xxx_hidden_SnapshotIds     []string               `protobuf:"bytes,2,rep,name=snapshot_ids,json=snapshotIds,proto3" json:"snapshot_ids,omitempty"`
+	xxx_hidden_Secrets         map[string]string      `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields              protoimpl.UnknownFields
+	sizeCache                  protoimpl.SizeCache
+}
+
+func (x *GetVolumeGroupSnapshotRequest) Reset() {
+	*x = GetVolumeGroupSnapshotRequest{}
+	mi := &file_csi_proto_msgTypes[70]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *GetVolumeGroupSnapshotRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetVolumeGroupSnapshotRequest) ProtoMessage() {}
+
+func (x *GetVolumeGroupSnapshotRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[70]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *GetVolumeGroupSnapshotRequest) GetGroupSnapshotId() string {
+	if x != nil {
+		return x.xxx_hidden_GroupSnapshotId
+	}
+	return ""
+}
+
+func (x *GetVolumeGroupSnapshotRequest) GetSnapshotIds() []string {
+	if x != nil {
+		return x.xxx_hidden_SnapshotIds
+	}
+	return nil
+}
+
+func (x *GetVolumeGroupSnapshotRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Secrets
+	}
+	return nil
+}
+
+func (x *GetVolumeGroupSnapshotRequest) SetGroupSnapshotId(v string) {
+	x.xxx_hidden_GroupSnapshotId = v
+}
+
+func (x *GetVolumeGroupSnapshotRequest) SetSnapshotIds(v []string) {
+	x.xxx_hidden_SnapshotIds = v
+}
+
+func (x *GetVolumeGroupSnapshotRequest) SetSecrets(v map[string]string) {
+	x.xxx_hidden_Secrets = v
+}
+
+type GetVolumeGroupSnapshotRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The ID of the group snapshot to fetch current group snapshot
+	// information for.
+	// This field is REQUIRED.
+	GroupSnapshotId string
+	// A list of snapshot IDs that are part of this group snapshot.
+	// If SP does not need to rely on this field to get the snapshots
+	// in the group, it SHOULD check this field and report an error
+	// if it has the ability to detect a mismatch.
+	// Some SPs require this list to get the snapshots in the group.
+	// If SP needs to use this field to get the snapshots in the
+	// group, it MUST report an error if it has the ability to detect
+	// a mismatch.
+	// This field is REQUIRED.
+	SnapshotIds []string
+	// Secrets required by plugin to complete
+	// GetVolumeGroupSnapshot request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	// The secrets provided in this field SHOULD be the same for
+	// all group snapshot operations on the same group snapshot.
+	Secrets map[string]string
+}
+
+func (b0 GetVolumeGroupSnapshotRequest_builder) Build() *GetVolumeGroupSnapshotRequest {
+	m0 := &GetVolumeGroupSnapshotRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_GroupSnapshotId = b.GroupSnapshotId
+	x.xxx_hidden_SnapshotIds = b.SnapshotIds
+	x.xxx_hidden_Secrets = b.Secrets
+	return m0
+}
+
+type GetVolumeGroupSnapshotResponse struct {
+	state                    protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_GroupSnapshot *VolumeGroupSnapshot   `protobuf:"bytes,1,opt,name=group_snapshot,json=groupSnapshot,proto3" json:"group_snapshot,omitempty"`
+	unknownFields            protoimpl.UnknownFields
+	sizeCache                protoimpl.SizeCache
+}
+
+func (x *GetVolumeGroupSnapshotResponse) Reset() {
+	*x = GetVolumeGroupSnapshotResponse{}
+	mi := &file_csi_proto_msgTypes[71]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *GetVolumeGroupSnapshotResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetVolumeGroupSnapshotResponse) ProtoMessage() {}
+
+func (x *GetVolumeGroupSnapshotResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[71]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *GetVolumeGroupSnapshotResponse) GetGroupSnapshot() *VolumeGroupSnapshot {
+	if x != nil {
+		return x.xxx_hidden_GroupSnapshot
+	}
+	return nil
+}
+
+func (x *GetVolumeGroupSnapshotResponse) SetGroupSnapshot(v *VolumeGroupSnapshot) {
+	x.xxx_hidden_GroupSnapshot = v
+}
+
+func (x *GetVolumeGroupSnapshotResponse) HasGroupSnapshot() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_GroupSnapshot != nil
+}
+
+func (x *GetVolumeGroupSnapshotResponse) ClearGroupSnapshot() {
+	x.xxx_hidden_GroupSnapshot = nil
+}
+
+type GetVolumeGroupSnapshotResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This field is REQUIRED
+	GroupSnapshot *VolumeGroupSnapshot
+}
+
+func (b0 GetVolumeGroupSnapshotResponse_builder) Build() *GetVolumeGroupSnapshotResponse {
+	m0 := &GetVolumeGroupSnapshotResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_GroupSnapshot = b.GroupSnapshot
+	return m0
+}
+
+// BlockMetadata specifies a data range.
+type BlockMetadata struct {
+	state                 protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_ByteOffset int64                  `protobuf:"varint,1,opt,name=byte_offset,json=byteOffset,proto3" json:"byte_offset,omitempty"`
+	xxx_hidden_SizeBytes  int64                  `protobuf:"varint,2,opt,name=size_bytes,json=sizeBytes,proto3" json:"size_bytes,omitempty"`
+	unknownFields         protoimpl.UnknownFields
+	sizeCache             protoimpl.SizeCache
+}
+
+func (x *BlockMetadata) Reset() {
+	*x = BlockMetadata{}
+	mi := &file_csi_proto_msgTypes[72]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *BlockMetadata) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BlockMetadata) ProtoMessage() {}
+
+func (x *BlockMetadata) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[72]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *BlockMetadata) GetByteOffset() int64 {
+	if x != nil {
+		return x.xxx_hidden_ByteOffset
+	}
+	return 0
+}
+
+func (x *BlockMetadata) GetSizeBytes() int64 {
+	if x != nil {
+		return x.xxx_hidden_SizeBytes
+	}
+	return 0
+}
+
+func (x *BlockMetadata) SetByteOffset(v int64) {
+	x.xxx_hidden_ByteOffset = v
+}
+
+func (x *BlockMetadata) SetSizeBytes(v int64) {
+	x.xxx_hidden_SizeBytes = v
+}
+
+type BlockMetadata_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This is the zero based byte position in the volume or snapshot,
+	// measured from the start of the object.
+	// This field is REQUIRED.
+	ByteOffset int64
+	// This is the size of the data range.
+	// size_bytes MUST be greater than zero.
+	// This field is REQUIRED.
+	SizeBytes int64
+}
+
+func (b0 BlockMetadata_builder) Build() *BlockMetadata {
+	m0 := &BlockMetadata{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_ByteOffset = b.ByteOffset
+	x.xxx_hidden_SizeBytes = b.SizeBytes
+	return m0
+}
+
+// The GetMetadataAllocatedRequest message is used to solicit metadata
+// on the allocated blocks of a snapshot: i.e. this identifies the
+// data ranges that have valid data as they were the target of some
+// previous write operation on the volume.
+type GetMetadataAllocatedRequest struct {
+	state                     protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_SnapshotId     string                 `protobuf:"bytes,1,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"`
+	xxx_hidden_StartingOffset int64                  `protobuf:"varint,2,opt,name=starting_offset,json=startingOffset,proto3" json:"starting_offset,omitempty"`
+	xxx_hidden_MaxResults     int32                  `protobuf:"varint,3,opt,name=max_results,json=maxResults,proto3" json:"max_results,omitempty"`
+	xxx_hidden_Secrets        map[string]string      `protobuf:"bytes,4,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields             protoimpl.UnknownFields
+	sizeCache                 protoimpl.SizeCache
+}
+
+func (x *GetMetadataAllocatedRequest) Reset() {
+	*x = GetMetadataAllocatedRequest{}
+	mi := &file_csi_proto_msgTypes[73]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *GetMetadataAllocatedRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetMetadataAllocatedRequest) ProtoMessage() {}
+
+func (x *GetMetadataAllocatedRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[73]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *GetMetadataAllocatedRequest) GetSnapshotId() string {
+	if x != nil {
+		return x.xxx_hidden_SnapshotId
+	}
+	return ""
+}
+
+func (x *GetMetadataAllocatedRequest) GetStartingOffset() int64 {
+	if x != nil {
+		return x.xxx_hidden_StartingOffset
+	}
+	return 0
+}
+
+func (x *GetMetadataAllocatedRequest) GetMaxResults() int32 {
+	if x != nil {
+		return x.xxx_hidden_MaxResults
+	}
+	return 0
+}
+
+func (x *GetMetadataAllocatedRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Secrets
+	}
+	return nil
+}
+
+func (x *GetMetadataAllocatedRequest) SetSnapshotId(v string) {
+	x.xxx_hidden_SnapshotId = v
+}
+
+func (x *GetMetadataAllocatedRequest) SetStartingOffset(v int64) {
+	x.xxx_hidden_StartingOffset = v
+}
+
+func (x *GetMetadataAllocatedRequest) SetMaxResults(v int32) {
+	x.xxx_hidden_MaxResults = v
+}
+
+func (x *GetMetadataAllocatedRequest) SetSecrets(v map[string]string) {
+	x.xxx_hidden_Secrets = v
+}
+
+type GetMetadataAllocatedRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This is the identifier of the snapshot.
+	// This field is REQUIRED.
+	SnapshotId string
+	// This indicates the zero based starting byte position in the volume
+	// snapshot from which the result should be computed.
+	// It is intended to be used to continue a previously interrupted
+	// call.
+	// The CO SHOULD specify this value to be the offset of the byte
+	// position immediately after the last byte of the last data range
+	// received, if continuing an interrupted operation, or zero if not.
+	// The SP MUST ensure that the returned response stream does not
+	// contain BlockMetadata tuples that end before the requested
+	// starting_offset: i.e. if S is the requested starting_offset, and
+	// B0 is block_metadata[0] of the first message in the response
+	// stream, then (S < B0.byte_offset + B0.size_bytes) must be true.
+	// This field is REQUIRED.
+	StartingOffset int64
+	// This is an optional parameter, and if non-zero it specifies the
+	// maximum number of tuples to be returned in each
+	// GetMetadataAllocatedResponse message returned by the RPC stream.
+	// The plugin will determine an appropriate value if 0, and is
+	// always free to send less than the requested value.
+	// This field is OPTIONAL.
+	MaxResults int32
+	// Secrets required by plugin to complete the request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+}
+
+func (b0 GetMetadataAllocatedRequest_builder) Build() *GetMetadataAllocatedRequest {
+	m0 := &GetMetadataAllocatedRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_SnapshotId = b.SnapshotId
+	x.xxx_hidden_StartingOffset = b.StartingOffset
+	x.xxx_hidden_MaxResults = b.MaxResults
+	x.xxx_hidden_Secrets = b.Secrets
+	return m0
+}
+
+// GetMetadataAllocatedResponse messages are returned in a gRPC stream.
+// Cumulatively, they provide information on the allocated data
+// ranges in the snapshot.
+type GetMetadataAllocatedResponse struct {
+	state                          protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_BlockMetadataType   BlockMetadataType      `protobuf:"varint,1,opt,name=block_metadata_type,json=blockMetadataType,proto3,enum=csi.v1.BlockMetadataType" json:"block_metadata_type,omitempty"`
+	xxx_hidden_VolumeCapacityBytes int64                  `protobuf:"varint,2,opt,name=volume_capacity_bytes,json=volumeCapacityBytes,proto3" json:"volume_capacity_bytes,omitempty"`
+	xxx_hidden_BlockMetadata       *[]*BlockMetadata      `protobuf:"bytes,3,rep,name=block_metadata,json=blockMetadata,proto3" json:"block_metadata,omitempty"`
+	unknownFields                  protoimpl.UnknownFields
+	sizeCache                      protoimpl.SizeCache
+}
+
+func (x *GetMetadataAllocatedResponse) Reset() {
+	*x = GetMetadataAllocatedResponse{}
+	mi := &file_csi_proto_msgTypes[74]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *GetMetadataAllocatedResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetMetadataAllocatedResponse) ProtoMessage() {}
+
+func (x *GetMetadataAllocatedResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[74]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *GetMetadataAllocatedResponse) GetBlockMetadataType() BlockMetadataType {
+	if x != nil {
+		return x.xxx_hidden_BlockMetadataType
+	}
+	return BlockMetadataType_UNKNOWN
+}
+
+func (x *GetMetadataAllocatedResponse) GetVolumeCapacityBytes() int64 {
+	if x != nil {
+		return x.xxx_hidden_VolumeCapacityBytes
+	}
+	return 0
+}
+
+func (x *GetMetadataAllocatedResponse) GetBlockMetadata() []*BlockMetadata {
+	if x != nil {
+		if x.xxx_hidden_BlockMetadata != nil {
+			return *x.xxx_hidden_BlockMetadata
+		}
+	}
+	return nil
+}
+
+func (x *GetMetadataAllocatedResponse) SetBlockMetadataType(v BlockMetadataType) {
+	x.xxx_hidden_BlockMetadataType = v
+}
+
+func (x *GetMetadataAllocatedResponse) SetVolumeCapacityBytes(v int64) {
+	x.xxx_hidden_VolumeCapacityBytes = v
+}
+
+func (x *GetMetadataAllocatedResponse) SetBlockMetadata(v []*BlockMetadata) {
+	x.xxx_hidden_BlockMetadata = &v
+}
+
+type GetMetadataAllocatedResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This specifies the style used in the BlockMetadata sequence.
+	// This value must be the same in all such messages returned by
+	// the stream.
+	// If block_metadata_type is FIXED_LENGTH, then the size_bytes field
+	// of each message in the block_metadata list MUST be constant.
+	// This field is REQUIRED.
+	BlockMetadataType BlockMetadataType
+	// This returns the capacity of the underlying volume in bytes.
+	// This value must be the same in all such messages returned by
+	// the stream.
+	// This field is REQUIRED.
+	VolumeCapacityBytes int64
+	// This is a list of data range tuples.
+	// If the value of max_results in the GetMetadataAllocatedRequest
+	// message is greater than zero, then the number of entries in this
+	// list MUST be less than or equal to that value.
+	// The SP MUST respect the value of starting_offset in the request.
+	// The byte_offset fields of adjacent BlockMetadata messages
+	// MUST be strictly increasing and messages MUST NOT overlap:
+	// i.e. for any two BlockMetadata messages, A and B, if A is returned
+	// before B, then (A.byte_offset + A.size_bytes <= B.byte_offset)
+	// MUST be true.
+	// This MUST also be true if A and B are from block_metadata lists in
+	// different GetMetadataAllocatedResponse messages in the gRPC stream.
+	// This field is OPTIONAL.
+	BlockMetadata []*BlockMetadata
+}
+
+func (b0 GetMetadataAllocatedResponse_builder) Build() *GetMetadataAllocatedResponse {
+	m0 := &GetMetadataAllocatedResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_BlockMetadataType = b.BlockMetadataType
+	x.xxx_hidden_VolumeCapacityBytes = b.VolumeCapacityBytes
+	x.xxx_hidden_BlockMetadata = &b.BlockMetadata
+	return m0
+}
+
+// The GetMetadataDeltaRequest message is used to solicit metadata on
+// the data ranges that have changed between two snapshots.
+type GetMetadataDeltaRequest struct {
+	state                       protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_BaseSnapshotId   string                 `protobuf:"bytes,1,opt,name=base_snapshot_id,json=baseSnapshotId,proto3" json:"base_snapshot_id,omitempty"`
+	xxx_hidden_TargetSnapshotId string                 `protobuf:"bytes,2,opt,name=target_snapshot_id,json=targetSnapshotId,proto3" json:"target_snapshot_id,omitempty"`
+	xxx_hidden_StartingOffset   int64                  `protobuf:"varint,3,opt,name=starting_offset,json=startingOffset,proto3" json:"starting_offset,omitempty"`
+	xxx_hidden_MaxResults       int32                  `protobuf:"varint,4,opt,name=max_results,json=maxResults,proto3" json:"max_results,omitempty"`
+	xxx_hidden_Secrets          map[string]string      `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields               protoimpl.UnknownFields
+	sizeCache                   protoimpl.SizeCache
+}
+
+func (x *GetMetadataDeltaRequest) Reset() {
+	*x = GetMetadataDeltaRequest{}
+	mi := &file_csi_proto_msgTypes[75]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *GetMetadataDeltaRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetMetadataDeltaRequest) ProtoMessage() {}
+
+func (x *GetMetadataDeltaRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[75]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *GetMetadataDeltaRequest) GetBaseSnapshotId() string {
+	if x != nil {
+		return x.xxx_hidden_BaseSnapshotId
+	}
+	return ""
+}
+
+func (x *GetMetadataDeltaRequest) GetTargetSnapshotId() string {
+	if x != nil {
+		return x.xxx_hidden_TargetSnapshotId
+	}
+	return ""
+}
+
+func (x *GetMetadataDeltaRequest) GetStartingOffset() int64 {
+	if x != nil {
+		return x.xxx_hidden_StartingOffset
+	}
+	return 0
+}
+
+func (x *GetMetadataDeltaRequest) GetMaxResults() int32 {
+	if x != nil {
+		return x.xxx_hidden_MaxResults
+	}
+	return 0
+}
+
+func (x *GetMetadataDeltaRequest) GetSecrets() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Secrets
+	}
+	return nil
+}
+
+func (x *GetMetadataDeltaRequest) SetBaseSnapshotId(v string) {
+	x.xxx_hidden_BaseSnapshotId = v
+}
+
+func (x *GetMetadataDeltaRequest) SetTargetSnapshotId(v string) {
+	x.xxx_hidden_TargetSnapshotId = v
+}
+
+func (x *GetMetadataDeltaRequest) SetStartingOffset(v int64) {
+	x.xxx_hidden_StartingOffset = v
+}
+
+func (x *GetMetadataDeltaRequest) SetMaxResults(v int32) {
+	x.xxx_hidden_MaxResults = v
+}
+
+func (x *GetMetadataDeltaRequest) SetSecrets(v map[string]string) {
+	x.xxx_hidden_Secrets = v
+}
+
+type GetMetadataDeltaRequest_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This is the identifier of the snapshot against which changes
+	// are to be computed.
+	// This field is REQUIRED.
+	BaseSnapshotId string
+	// This is the identifier of a second snapshot in the same volume,
+	// created after the base snapshot.
+	// This field is REQUIRED.
+	TargetSnapshotId string
+	// This indicates the zero based starting byte position in the volume
+	// snapshot from which the result should be computed.
+	// It is intended to be used to continue a previously interrupted
+	// call.
+	// The CO SHOULD specify this value to be the offset of the byte
+	// position immediately after the last byte of the last data range
+	// received, if continuing an interrupted operation, or zero if not.
+	// The SP MUST ensure that the returned response stream does not
+	// contain BlockMetadata tuples that end before the requested
+	// starting_offset: i.e. if S is the requested starting_offset, and
+	// B0 is block_metadata[0] of the first message in the response
+	// stream, then (S < B0.byte_offset + B0.size_bytes) must be true.
+	// This field is REQUIRED.
+	StartingOffset int64
+	// This is an optional parameter, and if non-zero it specifies the
+	// maximum number of tuples to be returned in each
+	// GetMetadataDeltaResponse message returned by the RPC stream.
+	// The plugin will determine an appropriate value if 0, and is
+	// always free to send less than the requested value.
+	// This field is OPTIONAL.
+	MaxResults int32
+	// Secrets required by plugin to complete the request.
+	// This field is OPTIONAL. Refer to the `Secrets Requirements`
+	// section on how to use this field.
+	Secrets map[string]string
+}
+
+func (b0 GetMetadataDeltaRequest_builder) Build() *GetMetadataDeltaRequest {
+	m0 := &GetMetadataDeltaRequest{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_BaseSnapshotId = b.BaseSnapshotId
+	x.xxx_hidden_TargetSnapshotId = b.TargetSnapshotId
+	x.xxx_hidden_StartingOffset = b.StartingOffset
+	x.xxx_hidden_MaxResults = b.MaxResults
+	x.xxx_hidden_Secrets = b.Secrets
+	return m0
+}
+
+// GetMetadataDeltaResponse messages are returned in a gRPC stream.
+// Cumulatively, they provide information on the data ranges that
+// have changed between the base and target snapshots specified
+// in the GetMetadataDeltaRequest message.
+type GetMetadataDeltaResponse struct {
+	state                          protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_BlockMetadataType   BlockMetadataType      `protobuf:"varint,1,opt,name=block_metadata_type,json=blockMetadataType,proto3,enum=csi.v1.BlockMetadataType" json:"block_metadata_type,omitempty"`
+	xxx_hidden_VolumeCapacityBytes int64                  `protobuf:"varint,2,opt,name=volume_capacity_bytes,json=volumeCapacityBytes,proto3" json:"volume_capacity_bytes,omitempty"`
+	xxx_hidden_BlockMetadata       *[]*BlockMetadata      `protobuf:"bytes,3,rep,name=block_metadata,json=blockMetadata,proto3" json:"block_metadata,omitempty"`
+	unknownFields                  protoimpl.UnknownFields
+	sizeCache                      protoimpl.SizeCache
+}
+
+func (x *GetMetadataDeltaResponse) Reset() {
+	*x = GetMetadataDeltaResponse{}
+	mi := &file_csi_proto_msgTypes[76]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *GetMetadataDeltaResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetMetadataDeltaResponse) ProtoMessage() {}
+
+func (x *GetMetadataDeltaResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[76]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *GetMetadataDeltaResponse) GetBlockMetadataType() BlockMetadataType {
+	if x != nil {
+		return x.xxx_hidden_BlockMetadataType
+	}
+	return BlockMetadataType_UNKNOWN
+}
+
+func (x *GetMetadataDeltaResponse) GetVolumeCapacityBytes() int64 {
+	if x != nil {
+		return x.xxx_hidden_VolumeCapacityBytes
+	}
+	return 0
+}
+
+func (x *GetMetadataDeltaResponse) GetBlockMetadata() []*BlockMetadata {
+	if x != nil {
+		if x.xxx_hidden_BlockMetadata != nil {
+			return *x.xxx_hidden_BlockMetadata
+		}
+	}
+	return nil
+}
+
+func (x *GetMetadataDeltaResponse) SetBlockMetadataType(v BlockMetadataType) {
+	x.xxx_hidden_BlockMetadataType = v
+}
+
+func (x *GetMetadataDeltaResponse) SetVolumeCapacityBytes(v int64) {
+	x.xxx_hidden_VolumeCapacityBytes = v
+}
+
+func (x *GetMetadataDeltaResponse) SetBlockMetadata(v []*BlockMetadata) {
+	x.xxx_hidden_BlockMetadata = &v
+}
+
+type GetMetadataDeltaResponse_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This specifies the style used in the BlockMetadata sequence.
+	// This value must be the same in all such messages returned by
+	// the stream.
+	// If block_metadata_type is FIXED_LENGTH, then the size_bytes field
+	// of each message in the block_metadata list MUST be constant.
+	// This field is REQUIRED.
+	BlockMetadataType BlockMetadataType
+	// This returns the capacity of the underlying volume in bytes.
+	// This value must be the same in all such messages returned by
+	// the stream.
+	// This field is REQUIRED.
+	VolumeCapacityBytes int64
+	// This is a list of data range tuples.
+	// If the value of max_results in the GetMetadataDeltaRequest message
+	// is greater than zero, then the number of entries in this list MUST
+	// be less than or equal to that value.
+	// The SP MUST respect the value of starting_offset in the request.
+	// The byte_offset fields of adjacent BlockMetadata messages
+	// MUST be strictly increasing and messages MUST NOT overlap:
+	// i.e. for any two BlockMetadata messages, A and B, if A is returned
+	// before B, then (A.byte_offset + A.size_bytes <= B.byte_offset)
+	// MUST be true.
+	// This MUST also be true if A and B are from block_metadata lists in
+	// different GetMetadataDeltaResponse messages in the gRPC stream.
+	// This field is OPTIONAL.
+	BlockMetadata []*BlockMetadata
+}
+
+func (b0 GetMetadataDeltaResponse_builder) Build() *GetMetadataDeltaResponse {
+	m0 := &GetMetadataDeltaResponse{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_BlockMetadataType = b.BlockMetadataType
+	x.xxx_hidden_VolumeCapacityBytes = b.VolumeCapacityBytes
+	x.xxx_hidden_BlockMetadata = &b.BlockMetadata
+	return m0
+}
+
+type PluginCapability_Service struct {
+	state           protoimpl.MessageState        `protogen:"opaque.v1"`
+	xxx_hidden_Type PluginCapability_Service_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csi.v1.PluginCapability_Service_Type" json:"type,omitempty"`
+	unknownFields   protoimpl.UnknownFields
+	sizeCache       protoimpl.SizeCache
+}
+
+func (x *PluginCapability_Service) Reset() {
+	*x = PluginCapability_Service{}
+	mi := &file_csi_proto_msgTypes[78]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *PluginCapability_Service) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PluginCapability_Service) ProtoMessage() {}
+
+func (x *PluginCapability_Service) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[78]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *PluginCapability_Service) GetType() PluginCapability_Service_Type {
+	if x != nil {
+		return x.xxx_hidden_Type
+	}
+	return PluginCapability_Service_UNKNOWN
+}
+
+func (x *PluginCapability_Service) SetType(v PluginCapability_Service_Type) {
+	x.xxx_hidden_Type = v
+}
+
+type PluginCapability_Service_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	Type PluginCapability_Service_Type
+}
+
+func (b0 PluginCapability_Service_builder) Build() *PluginCapability_Service {
+	m0 := &PluginCapability_Service{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Type = b.Type
+	return m0
+}
+
+type PluginCapability_VolumeExpansion struct {
+	state           protoimpl.MessageState                `protogen:"opaque.v1"`
+	xxx_hidden_Type PluginCapability_VolumeExpansion_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csi.v1.PluginCapability_VolumeExpansion_Type" json:"type,omitempty"`
+	unknownFields   protoimpl.UnknownFields
+	sizeCache       protoimpl.SizeCache
+}
+
+func (x *PluginCapability_VolumeExpansion) Reset() {
+	*x = PluginCapability_VolumeExpansion{}
+	mi := &file_csi_proto_msgTypes[79]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *PluginCapability_VolumeExpansion) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PluginCapability_VolumeExpansion) ProtoMessage() {}
+
+func (x *PluginCapability_VolumeExpansion) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[79]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *PluginCapability_VolumeExpansion) GetType() PluginCapability_VolumeExpansion_Type {
+	if x != nil {
+		return x.xxx_hidden_Type
+	}
+	return PluginCapability_VolumeExpansion_UNKNOWN
+}
+
+func (x *PluginCapability_VolumeExpansion) SetType(v PluginCapability_VolumeExpansion_Type) {
+	x.xxx_hidden_Type = v
+}
+
+type PluginCapability_VolumeExpansion_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	Type PluginCapability_VolumeExpansion_Type
+}
+
+func (b0 PluginCapability_VolumeExpansion_builder) Build() *PluginCapability_VolumeExpansion {
+	m0 := &PluginCapability_VolumeExpansion{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Type = b.Type
+	return m0
+}
+
+type VolumeContentSource_SnapshotSource struct {
+	state                 protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_SnapshotId string                 `protobuf:"bytes,1,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"`
+	unknownFields         protoimpl.UnknownFields
+	sizeCache             protoimpl.SizeCache
+}
+
+func (x *VolumeContentSource_SnapshotSource) Reset() {
+	*x = VolumeContentSource_SnapshotSource{}
+	mi := &file_csi_proto_msgTypes[83]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *VolumeContentSource_SnapshotSource) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*VolumeContentSource_SnapshotSource) ProtoMessage() {}
+
+func (x *VolumeContentSource_SnapshotSource) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[83]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *VolumeContentSource_SnapshotSource) GetSnapshotId() string {
+	if x != nil {
+		return x.xxx_hidden_SnapshotId
+	}
+	return ""
+}
+
+func (x *VolumeContentSource_SnapshotSource) SetSnapshotId(v string) {
+	x.xxx_hidden_SnapshotId = v
+}
+
+type VolumeContentSource_SnapshotSource_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Contains identity information for the existing source snapshot.
+	// This field is REQUIRED. Plugin is REQUIRED to support creating
+	// volume from snapshot if it supports the capability
+	// CREATE_DELETE_SNAPSHOT.
+	SnapshotId string
+}
+
+func (b0 VolumeContentSource_SnapshotSource_builder) Build() *VolumeContentSource_SnapshotSource {
+	m0 := &VolumeContentSource_SnapshotSource{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_SnapshotId = b.SnapshotId
+	return m0
+}
+
+type VolumeContentSource_VolumeSource struct {
+	state               protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_VolumeId string                 `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
+	unknownFields       protoimpl.UnknownFields
+	sizeCache           protoimpl.SizeCache
+}
+
+func (x *VolumeContentSource_VolumeSource) Reset() {
+	*x = VolumeContentSource_VolumeSource{}
+	mi := &file_csi_proto_msgTypes[84]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *VolumeContentSource_VolumeSource) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*VolumeContentSource_VolumeSource) ProtoMessage() {}
+
+func (x *VolumeContentSource_VolumeSource) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[84]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *VolumeContentSource_VolumeSource) GetVolumeId() string {
+	if x != nil {
+		return x.xxx_hidden_VolumeId
+	}
+	return ""
+}
+
+func (x *VolumeContentSource_VolumeSource) SetVolumeId(v string) {
+	x.xxx_hidden_VolumeId = v
+}
+
+type VolumeContentSource_VolumeSource_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Contains identity information for the existing source volume.
+	// This field is REQUIRED. Plugins reporting CLONE_VOLUME
+	// capability MUST support creating a volume from another volume.
+	VolumeId string
+}
+
+func (b0 VolumeContentSource_VolumeSource_builder) Build() *VolumeContentSource_VolumeSource {
+	m0 := &VolumeContentSource_VolumeSource{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_VolumeId = b.VolumeId
+	return m0
+}
+
+// Indicate that the volume will be accessed via the block device API.
+type VolumeCapability_BlockVolume struct {
+	state         protoimpl.MessageState `protogen:"opaque.v1"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *VolumeCapability_BlockVolume) Reset() {
+	*x = VolumeCapability_BlockVolume{}
+	mi := &file_csi_proto_msgTypes[85]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *VolumeCapability_BlockVolume) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*VolumeCapability_BlockVolume) ProtoMessage() {}
+
+func (x *VolumeCapability_BlockVolume) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[85]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+type VolumeCapability_BlockVolume_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+}
+
+func (b0 VolumeCapability_BlockVolume_builder) Build() *VolumeCapability_BlockVolume {
+	m0 := &VolumeCapability_BlockVolume{}
+	b, x := &b0, m0
+	_, _ = b, x
+	return m0
+}
+
+// Indicate that the volume will be accessed via the filesystem API.
+type VolumeCapability_MountVolume struct {
+	state                       protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_FsType           string                 `protobuf:"bytes,1,opt,name=fs_type,json=fsType,proto3" json:"fs_type,omitempty"`
+	xxx_hidden_MountFlags       []string               `protobuf:"bytes,2,rep,name=mount_flags,json=mountFlags,proto3" json:"mount_flags,omitempty"`
+	xxx_hidden_VolumeMountGroup string                 `protobuf:"bytes,3,opt,name=volume_mount_group,json=volumeMountGroup,proto3" json:"volume_mount_group,omitempty"`
+	unknownFields               protoimpl.UnknownFields
+	sizeCache                   protoimpl.SizeCache
+}
+
+func (x *VolumeCapability_MountVolume) Reset() {
+	*x = VolumeCapability_MountVolume{}
+	mi := &file_csi_proto_msgTypes[86]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *VolumeCapability_MountVolume) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*VolumeCapability_MountVolume) ProtoMessage() {}
+
+func (x *VolumeCapability_MountVolume) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[86]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *VolumeCapability_MountVolume) GetFsType() string {
+	if x != nil {
+		return x.xxx_hidden_FsType
+	}
+	return ""
+}
+
+func (x *VolumeCapability_MountVolume) GetMountFlags() []string {
+	if x != nil {
+		return x.xxx_hidden_MountFlags
+	}
+	return nil
+}
+
+func (x *VolumeCapability_MountVolume) GetVolumeMountGroup() string {
+	if x != nil {
+		return x.xxx_hidden_VolumeMountGroup
+	}
+	return ""
+}
+
+func (x *VolumeCapability_MountVolume) SetFsType(v string) {
+	x.xxx_hidden_FsType = v
+}
+
+func (x *VolumeCapability_MountVolume) SetMountFlags(v []string) {
+	x.xxx_hidden_MountFlags = v
+}
+
+func (x *VolumeCapability_MountVolume) SetVolumeMountGroup(v string) {
+	x.xxx_hidden_VolumeMountGroup = v
+}
+
+type VolumeCapability_MountVolume_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// The filesystem type. This field is OPTIONAL.
+	// An empty string is equal to an unspecified field value.
+	FsType string
+	// The mount options that can be used for the volume. This field is
+	// OPTIONAL. `mount_flags` MAY contain sensitive information.
+	// Therefore, the CO and the Plugin MUST NOT leak this information
+	// to untrusted entities. The total size of this repeated field
+	// SHALL NOT exceed 4 KiB.
+	MountFlags []string
+	// If SP has VOLUME_MOUNT_GROUP node capability and CO provides
+	// this field then SP MUST ensure that the volume_mount_group
+	// parameter is passed as the group identifier to the underlying
+	// operating system mount system call, with the understanding
+	// that the set of available mount call parameters and/or
+	// mount implementations may vary across operating systems.
+	// Additionally, new file and/or directory entries written to
+	// the underlying filesystem SHOULD be permission-labeled in such a
+	// manner, unless otherwise modified by a workload, that they are
+	// both readable and writable by said mount group identifier.
+	// This is an OPTIONAL field.
+	VolumeMountGroup string
+}
+
+func (b0 VolumeCapability_MountVolume_builder) Build() *VolumeCapability_MountVolume {
+	m0 := &VolumeCapability_MountVolume{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_FsType = b.FsType
+	x.xxx_hidden_MountFlags = b.MountFlags
+	x.xxx_hidden_VolumeMountGroup = b.VolumeMountGroup
+	return m0
+}
+
+// Specify how a volume can be accessed.
+type VolumeCapability_AccessMode struct {
+	state           protoimpl.MessageState           `protogen:"opaque.v1"`
+	xxx_hidden_Mode VolumeCapability_AccessMode_Mode `protobuf:"varint,1,opt,name=mode,proto3,enum=csi.v1.VolumeCapability_AccessMode_Mode" json:"mode,omitempty"`
+	unknownFields   protoimpl.UnknownFields
+	sizeCache       protoimpl.SizeCache
+}
+
+func (x *VolumeCapability_AccessMode) Reset() {
+	*x = VolumeCapability_AccessMode{}
+	mi := &file_csi_proto_msgTypes[87]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *VolumeCapability_AccessMode) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*VolumeCapability_AccessMode) ProtoMessage() {}
+
+func (x *VolumeCapability_AccessMode) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[87]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *VolumeCapability_AccessMode) GetMode() VolumeCapability_AccessMode_Mode {
+	if x != nil {
+		return x.xxx_hidden_Mode
+	}
+	return VolumeCapability_AccessMode_UNKNOWN
+}
+
+func (x *VolumeCapability_AccessMode) SetMode(v VolumeCapability_AccessMode_Mode) {
+	x.xxx_hidden_Mode = v
+}
+
+type VolumeCapability_AccessMode_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This field is REQUIRED.
+	Mode VolumeCapability_AccessMode_Mode
+}
+
+func (b0 VolumeCapability_AccessMode_builder) Build() *VolumeCapability_AccessMode {
+	m0 := &VolumeCapability_AccessMode{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Mode = b.Mode
+	return m0
+}
+
+type ValidateVolumeCapabilitiesResponse_Confirmed struct {
+	state                         protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_VolumeContext      map[string]string      `protobuf:"bytes,1,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	xxx_hidden_VolumeCapabilities *[]*VolumeCapability   `protobuf:"bytes,2,rep,name=volume_capabilities,json=volumeCapabilities,proto3" json:"volume_capabilities,omitempty"`
+	xxx_hidden_Parameters         map[string]string      `protobuf:"bytes,3,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	xxx_hidden_MutableParameters  map[string]string      `protobuf:"bytes,4,rep,name=mutable_parameters,json=mutableParameters,proto3" json:"mutable_parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	unknownFields                 protoimpl.UnknownFields
+	sizeCache                     protoimpl.SizeCache
+}
+
+func (x *ValidateVolumeCapabilitiesResponse_Confirmed) Reset() {
+	*x = ValidateVolumeCapabilitiesResponse_Confirmed{}
+	mi := &file_csi_proto_msgTypes[99]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ValidateVolumeCapabilitiesResponse_Confirmed) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ValidateVolumeCapabilitiesResponse_Confirmed) ProtoMessage() {}
+
+func (x *ValidateVolumeCapabilitiesResponse_Confirmed) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[99]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *ValidateVolumeCapabilitiesResponse_Confirmed) GetVolumeContext() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_VolumeContext
+	}
+	return nil
+}
+
+func (x *ValidateVolumeCapabilitiesResponse_Confirmed) GetVolumeCapabilities() []*VolumeCapability {
+	if x != nil {
+		if x.xxx_hidden_VolumeCapabilities != nil {
+			return *x.xxx_hidden_VolumeCapabilities
+		}
+	}
+	return nil
+}
+
+func (x *ValidateVolumeCapabilitiesResponse_Confirmed) GetParameters() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_Parameters
+	}
+	return nil
+}
+
+func (x *ValidateVolumeCapabilitiesResponse_Confirmed) GetMutableParameters() map[string]string {
+	if x != nil {
+		return x.xxx_hidden_MutableParameters
+	}
+	return nil
+}
+
+func (x *ValidateVolumeCapabilitiesResponse_Confirmed) SetVolumeContext(v map[string]string) {
+	x.xxx_hidden_VolumeContext = v
+}
+
+func (x *ValidateVolumeCapabilitiesResponse_Confirmed) SetVolumeCapabilities(v []*VolumeCapability) {
+	x.xxx_hidden_VolumeCapabilities = &v
+}
+
+func (x *ValidateVolumeCapabilitiesResponse_Confirmed) SetParameters(v map[string]string) {
+	x.xxx_hidden_Parameters = v
+}
+
+func (x *ValidateVolumeCapabilitiesResponse_Confirmed) SetMutableParameters(v map[string]string) {
+	x.xxx_hidden_MutableParameters = v
+}
+
+type ValidateVolumeCapabilitiesResponse_Confirmed_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// Volume context validated by the plugin.
+	// This field is OPTIONAL.
+	VolumeContext map[string]string
+	// Volume capabilities supported by the plugin.
+	// This field is REQUIRED.
+	VolumeCapabilities []*VolumeCapability
+	// The volume creation parameters validated by the plugin.
+	// This field is OPTIONAL.
+	Parameters map[string]string
+	// The volume creation mutable_parameters validated by the plugin.
+	// This field is OPTIONAL.
+	MutableParameters map[string]string
+}
+
+func (b0 ValidateVolumeCapabilitiesResponse_Confirmed_builder) Build() *ValidateVolumeCapabilitiesResponse_Confirmed {
+	m0 := &ValidateVolumeCapabilitiesResponse_Confirmed{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_VolumeContext = b.VolumeContext
+	x.xxx_hidden_VolumeCapabilities = &b.VolumeCapabilities
+	x.xxx_hidden_Parameters = b.Parameters
+	x.xxx_hidden_MutableParameters = b.MutableParameters
+	return m0
+}
+
+type ListVolumesResponse_VolumeStatus struct {
+	state                       protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_PublishedNodeIds []string               `protobuf:"bytes,1,rep,name=published_node_ids,json=publishedNodeIds,proto3" json:"published_node_ids,omitempty"`
+	xxx_hidden_VolumeCondition  *VolumeCondition       `protobuf:"bytes,2,opt,name=volume_condition,json=volumeCondition,proto3" json:"volume_condition,omitempty"`
+	unknownFields               protoimpl.UnknownFields
+	sizeCache                   protoimpl.SizeCache
+}
+
+func (x *ListVolumesResponse_VolumeStatus) Reset() {
+	*x = ListVolumesResponse_VolumeStatus{}
+	mi := &file_csi_proto_msgTypes[103]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ListVolumesResponse_VolumeStatus) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListVolumesResponse_VolumeStatus) ProtoMessage() {}
+
+func (x *ListVolumesResponse_VolumeStatus) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[103]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *ListVolumesResponse_VolumeStatus) GetPublishedNodeIds() []string {
+	if x != nil {
+		return x.xxx_hidden_PublishedNodeIds
+	}
+	return nil
+}
+
+func (x *ListVolumesResponse_VolumeStatus) GetVolumeCondition() *VolumeCondition {
+	if x != nil {
+		return x.xxx_hidden_VolumeCondition
+	}
+	return nil
+}
+
+func (x *ListVolumesResponse_VolumeStatus) SetPublishedNodeIds(v []string) {
+	x.xxx_hidden_PublishedNodeIds = v
+}
+
+func (x *ListVolumesResponse_VolumeStatus) SetVolumeCondition(v *VolumeCondition) {
+	x.xxx_hidden_VolumeCondition = v
+}
+
+func (x *ListVolumesResponse_VolumeStatus) HasVolumeCondition() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_VolumeCondition != nil
+}
+
+func (x *ListVolumesResponse_VolumeStatus) ClearVolumeCondition() {
+	x.xxx_hidden_VolumeCondition = nil
+}
+
+type ListVolumesResponse_VolumeStatus_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// A list of all `node_id` of nodes that the volume in this entry
+	// is controller published on.
+	// This field is OPTIONAL. If it is not specified and the SP has
+	// the LIST_VOLUMES_PUBLISHED_NODES controller capability, the CO
+	// MAY assume the volume is not controller published to any nodes.
+	// If the field is not specified and the SP does not have the
+	// LIST_VOLUMES_PUBLISHED_NODES controller capability, the CO MUST
+	// not interpret this field.
+	// published_node_ids MAY include nodes not published to or
+	// reported by the SP. The CO MUST be resilient to that.
+	PublishedNodeIds []string
+	// Information about the current condition of the volume.
+	// This field is OPTIONAL.
+	// This field MUST be specified if the
+	// VOLUME_CONDITION controller capability is supported.
+	VolumeCondition *VolumeCondition
+}
+
+func (b0 ListVolumesResponse_VolumeStatus_builder) Build() *ListVolumesResponse_VolumeStatus {
+	m0 := &ListVolumesResponse_VolumeStatus{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_PublishedNodeIds = b.PublishedNodeIds
+	x.xxx_hidden_VolumeCondition = b.VolumeCondition
+	return m0
+}
+
+type ListVolumesResponse_Entry struct {
+	state             protoimpl.MessageState            `protogen:"opaque.v1"`
+	xxx_hidden_Volume *Volume                           `protobuf:"bytes,1,opt,name=volume,proto3" json:"volume,omitempty"`
+	xxx_hidden_Status *ListVolumesResponse_VolumeStatus `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`
+	unknownFields     protoimpl.UnknownFields
+	sizeCache         protoimpl.SizeCache
+}
+
+func (x *ListVolumesResponse_Entry) Reset() {
+	*x = ListVolumesResponse_Entry{}
+	mi := &file_csi_proto_msgTypes[104]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ListVolumesResponse_Entry) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListVolumesResponse_Entry) ProtoMessage() {}
+
+func (x *ListVolumesResponse_Entry) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[104]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *ListVolumesResponse_Entry) GetVolume() *Volume {
+	if x != nil {
+		return x.xxx_hidden_Volume
+	}
+	return nil
+}
+
+func (x *ListVolumesResponse_Entry) GetStatus() *ListVolumesResponse_VolumeStatus {
+	if x != nil {
+		return x.xxx_hidden_Status
+	}
+	return nil
+}
+
+func (x *ListVolumesResponse_Entry) SetVolume(v *Volume) {
+	x.xxx_hidden_Volume = v
+}
+
+func (x *ListVolumesResponse_Entry) SetStatus(v *ListVolumesResponse_VolumeStatus) {
+	x.xxx_hidden_Status = v
+}
+
+func (x *ListVolumesResponse_Entry) HasVolume() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_Volume != nil
+}
+
+func (x *ListVolumesResponse_Entry) HasStatus() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_Status != nil
+}
+
+func (x *ListVolumesResponse_Entry) ClearVolume() {
+	x.xxx_hidden_Volume = nil
+}
+
+func (x *ListVolumesResponse_Entry) ClearStatus() {
+	x.xxx_hidden_Status = nil
+}
+
+type ListVolumesResponse_Entry_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// This field is REQUIRED
+	Volume *Volume
+	// This field is OPTIONAL. This field MUST be specified if the
+	// LIST_VOLUMES_PUBLISHED_NODES controller capability is
+	// supported.
+	Status *ListVolumesResponse_VolumeStatus
+}
+
+func (b0 ListVolumesResponse_Entry_builder) Build() *ListVolumesResponse_Entry {
+	m0 := &ListVolumesResponse_Entry{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Volume = b.Volume
+	x.xxx_hidden_Status = b.Status
+	return m0
+}
+
+type ControllerGetVolumeResponse_VolumeStatus struct {
+	state                       protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_PublishedNodeIds []string               `protobuf:"bytes,1,rep,name=published_node_ids,json=publishedNodeIds,proto3" json:"published_node_ids,omitempty"`
+	xxx_hidden_VolumeCondition  *VolumeCondition       `protobuf:"bytes,2,opt,name=volume_condition,json=volumeCondition,proto3" json:"volume_condition,omitempty"`
+	unknownFields               protoimpl.UnknownFields
+	sizeCache                   protoimpl.SizeCache
+}
+
+func (x *ControllerGetVolumeResponse_VolumeStatus) Reset() {
+	*x = ControllerGetVolumeResponse_VolumeStatus{}
+	mi := &file_csi_proto_msgTypes[105]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ControllerGetVolumeResponse_VolumeStatus) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ControllerGetVolumeResponse_VolumeStatus) ProtoMessage() {}
+
+func (x *ControllerGetVolumeResponse_VolumeStatus) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[105]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *ControllerGetVolumeResponse_VolumeStatus) GetPublishedNodeIds() []string {
+	if x != nil {
+		return x.xxx_hidden_PublishedNodeIds
+	}
+	return nil
+}
+
+func (x *ControllerGetVolumeResponse_VolumeStatus) GetVolumeCondition() *VolumeCondition {
+	if x != nil {
+		return x.xxx_hidden_VolumeCondition
+	}
+	return nil
+}
+
+func (x *ControllerGetVolumeResponse_VolumeStatus) SetPublishedNodeIds(v []string) {
+	x.xxx_hidden_PublishedNodeIds = v
+}
+
+func (x *ControllerGetVolumeResponse_VolumeStatus) SetVolumeCondition(v *VolumeCondition) {
+	x.xxx_hidden_VolumeCondition = v
+}
+
+func (x *ControllerGetVolumeResponse_VolumeStatus) HasVolumeCondition() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_VolumeCondition != nil
+}
+
+func (x *ControllerGetVolumeResponse_VolumeStatus) ClearVolumeCondition() {
+	x.xxx_hidden_VolumeCondition = nil
+}
+
+type ControllerGetVolumeResponse_VolumeStatus_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	// A list of all the `node_id` of nodes that this volume is
+	// controller published on.
+	// This field is OPTIONAL.
+	// This field MUST be specified if the LIST_VOLUMES_PUBLISHED_NODES
+	// controller capability is supported.
+	// published_node_ids MAY include nodes not published to or
+	// reported by the SP. The CO MUST be resilient to that.
+	PublishedNodeIds []string
+	// Information about the current condition of the volume.
+	// This field is OPTIONAL.
+	// This field MUST be specified if the
+	// VOLUME_CONDITION controller capability is supported.
+	VolumeCondition *VolumeCondition
+}
+
+func (b0 ControllerGetVolumeResponse_VolumeStatus_builder) Build() *ControllerGetVolumeResponse_VolumeStatus {
+	m0 := &ControllerGetVolumeResponse_VolumeStatus{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_PublishedNodeIds = b.PublishedNodeIds
+	x.xxx_hidden_VolumeCondition = b.VolumeCondition
+	return m0
+}
+
+type ControllerServiceCapability_RPC struct {
+	state           protoimpl.MessageState               `protogen:"opaque.v1"`
+	xxx_hidden_Type ControllerServiceCapability_RPC_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csi.v1.ControllerServiceCapability_RPC_Type" json:"type,omitempty"`
+	unknownFields   protoimpl.UnknownFields
+	sizeCache       protoimpl.SizeCache
+}
+
+func (x *ControllerServiceCapability_RPC) Reset() {
+	*x = ControllerServiceCapability_RPC{}
+	mi := &file_csi_proto_msgTypes[109]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ControllerServiceCapability_RPC) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ControllerServiceCapability_RPC) ProtoMessage() {}
+
+func (x *ControllerServiceCapability_RPC) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[109]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *ControllerServiceCapability_RPC) GetType() ControllerServiceCapability_RPC_Type {
+	if x != nil {
+		return x.xxx_hidden_Type
+	}
+	return ControllerServiceCapability_RPC_UNKNOWN
+}
+
+func (x *ControllerServiceCapability_RPC) SetType(v ControllerServiceCapability_RPC_Type) {
+	x.xxx_hidden_Type = v
+}
+
+type ControllerServiceCapability_RPC_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	Type ControllerServiceCapability_RPC_Type
+}
+
+func (b0 ControllerServiceCapability_RPC_builder) Build() *ControllerServiceCapability_RPC {
+	m0 := &ControllerServiceCapability_RPC{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Type = b.Type
+	return m0
+}
+
+type ListSnapshotsResponse_Entry struct {
+	state               protoimpl.MessageState `protogen:"opaque.v1"`
+	xxx_hidden_Snapshot *Snapshot              `protobuf:"bytes,1,opt,name=snapshot,proto3" json:"snapshot,omitempty"`
+	unknownFields       protoimpl.UnknownFields
+	sizeCache           protoimpl.SizeCache
+}
+
+func (x *ListSnapshotsResponse_Entry) Reset() {
+	*x = ListSnapshotsResponse_Entry{}
+	mi := &file_csi_proto_msgTypes[114]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ListSnapshotsResponse_Entry) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListSnapshotsResponse_Entry) ProtoMessage() {}
+
+func (x *ListSnapshotsResponse_Entry) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[114]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *ListSnapshotsResponse_Entry) GetSnapshot() *Snapshot {
+	if x != nil {
+		return x.xxx_hidden_Snapshot
+	}
+	return nil
+}
+
+func (x *ListSnapshotsResponse_Entry) SetSnapshot(v *Snapshot) {
+	x.xxx_hidden_Snapshot = v
+}
+
+func (x *ListSnapshotsResponse_Entry) HasSnapshot() bool {
+	if x == nil {
+		return false
+	}
+	return x.xxx_hidden_Snapshot != nil
+}
+
+func (x *ListSnapshotsResponse_Entry) ClearSnapshot() {
+	x.xxx_hidden_Snapshot = nil
+}
+
+type ListSnapshotsResponse_Entry_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	Snapshot *Snapshot
+}
+
+func (b0 ListSnapshotsResponse_Entry_builder) Build() *ListSnapshotsResponse_Entry {
+	m0 := &ListSnapshotsResponse_Entry{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Snapshot = b.Snapshot
+	return m0
+}
+
+type NodeServiceCapability_RPC struct {
+	state           protoimpl.MessageState         `protogen:"opaque.v1"`
+	xxx_hidden_Type NodeServiceCapability_RPC_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csi.v1.NodeServiceCapability_RPC_Type" json:"type,omitempty"`
+	unknownFields   protoimpl.UnknownFields
+	sizeCache       protoimpl.SizeCache
+}
+
+func (x *NodeServiceCapability_RPC) Reset() {
+	*x = NodeServiceCapability_RPC{}
+	mi := &file_csi_proto_msgTypes[122]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeServiceCapability_RPC) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeServiceCapability_RPC) ProtoMessage() {}
+
+func (x *NodeServiceCapability_RPC) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[122]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *NodeServiceCapability_RPC) GetType() NodeServiceCapability_RPC_Type {
+	if x != nil {
+		return x.xxx_hidden_Type
+	}
+	return NodeServiceCapability_RPC_UNKNOWN
+}
+
+func (x *NodeServiceCapability_RPC) SetType(v NodeServiceCapability_RPC_Type) {
+	x.xxx_hidden_Type = v
+}
+
+type NodeServiceCapability_RPC_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	Type NodeServiceCapability_RPC_Type
+}
+
+func (b0 NodeServiceCapability_RPC_builder) Build() *NodeServiceCapability_RPC {
+	m0 := &NodeServiceCapability_RPC{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Type = b.Type
+	return m0
+}
+
+type GroupControllerServiceCapability_RPC struct {
+	state           protoimpl.MessageState                    `protogen:"opaque.v1"`
+	xxx_hidden_Type GroupControllerServiceCapability_RPC_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csi.v1.GroupControllerServiceCapability_RPC_Type" json:"type,omitempty"`
+	unknownFields   protoimpl.UnknownFields
+	sizeCache       protoimpl.SizeCache
+}
+
+func (x *GroupControllerServiceCapability_RPC) Reset() {
+	*x = GroupControllerServiceCapability_RPC{}
+	mi := &file_csi_proto_msgTypes[124]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *GroupControllerServiceCapability_RPC) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GroupControllerServiceCapability_RPC) ProtoMessage() {}
+
+func (x *GroupControllerServiceCapability_RPC) ProtoReflect() protoreflect.Message {
+	mi := &file_csi_proto_msgTypes[124]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+func (x *GroupControllerServiceCapability_RPC) GetType() GroupControllerServiceCapability_RPC_Type {
+	if x != nil {
+		return x.xxx_hidden_Type
+	}
+	return GroupControllerServiceCapability_RPC_UNKNOWN
+}
+
+func (x *GroupControllerServiceCapability_RPC) SetType(v GroupControllerServiceCapability_RPC_Type) {
+	x.xxx_hidden_Type = v
+}
+
+type GroupControllerServiceCapability_RPC_builder struct {
+	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.
+
+	Type GroupControllerServiceCapability_RPC_Type
+}
+
+func (b0 GroupControllerServiceCapability_RPC_builder) Build() *GroupControllerServiceCapability_RPC {
+	m0 := &GroupControllerServiceCapability_RPC{}
+	b, x := &b0, m0
+	_, _ = b, x
+	x.xxx_hidden_Type = b.Type
+	return m0
+}
+
+var file_csi_proto_extTypes = []protoimpl.ExtensionInfo{
+	{
+		ExtendedType:  (*descriptorpb.EnumOptions)(nil),
+		ExtensionType: (*bool)(nil),
+		Field:         1060,
+		Name:          "csi.v1.alpha_enum",
+		Tag:           "varint,1060,opt,name=alpha_enum",
+		Filename:      "csi.proto",
+	},
+	{
+		ExtendedType:  (*descriptorpb.EnumValueOptions)(nil),
+		ExtensionType: (*bool)(nil),
+		Field:         1060,
+		Name:          "csi.v1.alpha_enum_value",
+		Tag:           "varint,1060,opt,name=alpha_enum_value",
+		Filename:      "csi.proto",
+	},
+	{
+		ExtendedType:  (*descriptorpb.FieldOptions)(nil),
+		ExtensionType: (*bool)(nil),
+		Field:         1059,
+		Name:          "csi.v1.csi_secret",
+		Tag:           "varint,1059,opt,name=csi_secret",
+		Filename:      "csi.proto",
+	},
+	{
+		ExtendedType:  (*descriptorpb.FieldOptions)(nil),
+		ExtensionType: (*bool)(nil),
+		Field:         1060,
+		Name:          "csi.v1.alpha_field",
+		Tag:           "varint,1060,opt,name=alpha_field",
+		Filename:      "csi.proto",
+	},
+	{
+		ExtendedType:  (*descriptorpb.MessageOptions)(nil),
+		ExtensionType: (*bool)(nil),
+		Field:         1060,
+		Name:          "csi.v1.alpha_message",
+		Tag:           "varint,1060,opt,name=alpha_message",
+		Filename:      "csi.proto",
+	},
+	{
+		ExtendedType:  (*descriptorpb.MethodOptions)(nil),
+		ExtensionType: (*bool)(nil),
+		Field:         1060,
+		Name:          "csi.v1.alpha_method",
+		Tag:           "varint,1060,opt,name=alpha_method",
+		Filename:      "csi.proto",
+	},
+	{
+		ExtendedType:  (*descriptorpb.ServiceOptions)(nil),
+		ExtensionType: (*bool)(nil),
+		Field:         1060,
+		Name:          "csi.v1.alpha_service",
+		Tag:           "varint,1060,opt,name=alpha_service",
+		Filename:      "csi.proto",
+	},
+}
+
+// Extension fields to descriptorpb.EnumOptions.
+var (
+	// Indicates that this enum is OPTIONAL and part of an experimental
+	// API that may be deprecated and eventually removed between minor
+	// releases.
+	//
+	// optional bool alpha_enum = 1060;
+	E_AlphaEnum = &file_csi_proto_extTypes[0]
+)
+
+// Extension fields to descriptorpb.EnumValueOptions.
+var (
+	// Indicates that this enum value is OPTIONAL and part of an
+	// experimental API that may be deprecated and eventually removed
+	// between minor releases.
+	//
+	// optional bool alpha_enum_value = 1060;
+	E_AlphaEnumValue = &file_csi_proto_extTypes[1]
+)
+
+// Extension fields to descriptorpb.FieldOptions.
+var (
+	// Indicates that a field MAY contain information that is sensitive
+	// and MUST be treated as such (e.g. not logged).
+	//
+	// optional bool csi_secret = 1059;
+	E_CsiSecret = &file_csi_proto_extTypes[2]
+	// Indicates that this field is OPTIONAL and part of an experimental
+	// API that may be deprecated and eventually removed between minor
+	// releases.
+	//
+	// optional bool alpha_field = 1060;
+	E_AlphaField = &file_csi_proto_extTypes[3]
+)
+
+// Extension fields to descriptorpb.MessageOptions.
+var (
+	// Indicates that this message is OPTIONAL and part of an experimental
+	// API that may be deprecated and eventually removed between minor
+	// releases.
+	//
+	// optional bool alpha_message = 1060;
+	E_AlphaMessage = &file_csi_proto_extTypes[4]
+)
+
+// Extension fields to descriptorpb.MethodOptions.
+var (
+	// Indicates that this method is OPTIONAL and part of an experimental
+	// API that may be deprecated and eventually removed between minor
+	// releases.
+	//
+	// optional bool alpha_method = 1060;
+	E_AlphaMethod = &file_csi_proto_extTypes[5]
+)
+
+// Extension fields to descriptorpb.ServiceOptions.
+var (
+	// Indicates that this service is OPTIONAL and part of an experimental
+	// API that may be deprecated and eventually removed between minor
+	// releases.
+	//
+	// optional bool alpha_service = 1060;
+	E_AlphaService = &file_csi_proto_extTypes[6]
+)
+
+var File_csi_proto protoreflect.FileDescriptor
+
+var file_csi_proto_rawDesc = []byte{
+	0x0a, 0x09, 0x63, 0x73, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x63, 0x73, 0x69,
+	0x2e, 0x76, 0x31, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 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, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x16, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x75,
+	0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xd8,
+	0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e,
+	0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x56, 0x65, 0x72, 0x73,
+	0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x08, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x18,
+	0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47,
+	0x65, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74,
+	0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x0a, 0x0d,
+	0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 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, 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74,
+	0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69,
+	0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5d, 0x0a, 0x1d, 0x47, 0x65, 0x74,
+	0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69,
+	0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0c, 0x63, 0x61,
+	0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x18, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e,
+	0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61,
+	0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x91, 0x04, 0x0a, 0x10, 0x50, 0x6c, 0x75,
+	0x67, 0x69, 0x6e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x3c, 0x0a,
+	0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20,
+	0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x61,
+	0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+	0x48, 0x00, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x76,
+	0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50,
+	0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x48,
+	0x00, 0x52, 0x0f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x1a, 0xda, 0x01, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x39,
+	0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x63,
+	0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x61, 0x70, 0x61,
+	0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54,
+	0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x93, 0x01, 0x0a, 0x04, 0x54, 0x79,
+	0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12,
+	0x16, 0x0a, 0x12, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x4c, 0x45, 0x52, 0x5f, 0x53, 0x45,
+	0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x56, 0x4f, 0x4c, 0x55, 0x4d,
+	0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f,
+	0x43, 0x4f, 0x4e, 0x53, 0x54, 0x52, 0x41, 0x49, 0x4e, 0x54, 0x53, 0x10, 0x02, 0x12, 0x1c, 0x0a,
+	0x18, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x4c, 0x45,
+	0x52, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x03, 0x12, 0x22, 0x0a, 0x19, 0x53,
+	0x4e, 0x41, 0x50, 0x53, 0x48, 0x4f, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41,
+	0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x04, 0x1a, 0x03, 0xa0, 0x42, 0x01, 0x1a,
+	0x82, 0x01, 0x0a, 0x0f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x0e, 0x32, 0x2d, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69,
+	0x6e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x56, 0x6f, 0x6c, 0x75,
+	0x6d, 0x65, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x79, 0x70, 0x65,
+	0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x2c, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b,
+	0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4f,
+	0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x46, 0x46, 0x4c, 0x49,
+	0x4e, 0x45, 0x10, 0x02, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x0e, 0x0a, 0x0c,
+	0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x41, 0x0a, 0x0d,
+	0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a,
+	0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 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, 0x42,
+	0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x22,
+	0x9e, 0x06, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0e, 0x63,
+	0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x70,
+	0x61, 0x63, 0x69, 0x74, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0d, 0x63, 0x61, 0x70, 0x61,
+	0x63, 0x69, 0x74, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x49, 0x0a, 0x13, 0x76, 0x6f, 0x6c,
+	0x75, 0x6d, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73,
+	0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79,
+	0x52, 0x12, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69,
+	0x74, 0x69, 0x65, 0x73, 0x12, 0x4b, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
+	0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76,
+	0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73,
+	0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
+	0x73, 0x12, 0x47, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61,
+	0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e,
+	0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0x98, 0x42,
+	0x01, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x4f, 0x0a, 0x15, 0x76, 0x6f,
+	0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x6f, 0x75,
+	0x72, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x73, 0x69, 0x2e,
+	0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+	0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x13, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f,
+	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x5a, 0x0a, 0x1a, 0x61,
+	0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x71,
+	0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1b, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67,
+	0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x19, 0x61, 0x63,
+	0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69,
+	0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x66, 0x0a, 0x12, 0x6d, 0x75, 0x74, 0x61, 0x62,
+	0x6c, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x08, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65,
+	0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x2e, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
+	0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0xa0, 0x42, 0x01, 0x52, 0x11, 0x6d, 0x75,
+	0x74, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x1a,
+	0x3d, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 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, 0x1a, 0x3a,
+	0x0a, 0x0c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 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, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x75,
+	0x74, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 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,
+	0x22, 0x8b, 0x02, 0x0a, 0x13, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65,
+	0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x48, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70,
+	0x73, 0x68, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x73, 0x69,
+	0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+	0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74,
+	0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68,
+	0x6f, 0x74, 0x12, 0x42, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75,
+	0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x06,
+	0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, 0x31, 0x0a, 0x0e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68,
+	0x6f, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70,
+	0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73,
+	0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x1a, 0x2b, 0x0a, 0x0c, 0x56, 0x6f, 0x6c,
+	0x75, 0x6d, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c,
+	0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f,
+	0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3e,
+	0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x22, 0x9f,
+	0x05, 0x0a, 0x10, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c,
+	0x69, 0x74, 0x79, 0x12, 0x3c, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75,
+	0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x42, 0x6c, 0x6f,
+	0x63, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63,
+	0x6b, 0x12, 0x3c, 0x0a, 0x05, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x24, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x05, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12,
+	0x44, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f,
+	0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x41,
+	0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73,
+	0x73, 0x4d, 0x6f, 0x64, 0x65, 0x1a, 0x0d, 0x0a, 0x0b, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x6f,
+	0x6c, 0x75, 0x6d, 0x65, 0x1a, 0x75, 0x0a, 0x0b, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x6f, 0x6c,
+	0x75, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b,
+	0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
+	0x09, 0x52, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x2c, 0x0a,
+	0x12, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x67, 0x72,
+	0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x76, 0x6f, 0x6c, 0x75, 0x6d,
+	0x65, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0xb3, 0x02, 0x0a, 0x0a,
+	0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x3c, 0x0a, 0x04, 0x6d, 0x6f,
+	0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76,
+	0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69,
+	0x74, 0x79, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x2e, 0x4d, 0x6f,
+	0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0xe6, 0x01, 0x0a, 0x04, 0x4d, 0x6f, 0x64,
+	0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x16,
+	0x0a, 0x12, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x57, 0x52,
+	0x49, 0x54, 0x45, 0x52, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45,
+	0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x45, 0x52, 0x5f, 0x4f, 0x4e, 0x4c,
+	0x59, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x4e, 0x4f, 0x44,
+	0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x45, 0x52, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x03, 0x12,
+	0x1c, 0x0a, 0x18, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x49,
+	0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x52, 0x10, 0x04, 0x12, 0x1b, 0x0a,
+	0x17, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x4d, 0x55, 0x4c, 0x54,
+	0x49, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x52, 0x10, 0x05, 0x12, 0x22, 0x0a, 0x19, 0x53, 0x49,
+	0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45,
+	0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x52, 0x10, 0x06, 0x1a, 0x03, 0xa0, 0x42, 0x01, 0x12, 0x21,
+	0x0a, 0x18, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x4d, 0x55,
+	0x4c, 0x54, 0x49, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x52, 0x10, 0x07, 0x1a, 0x03, 0xa0, 0x42,
+	0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65,
+	0x22, 0x57, 0x0a, 0x0d, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x52, 0x61, 0x6e, 0x67,
+	0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x79,
+	0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x69,
+	0x72, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x69, 0x6d, 0x69,
+	0x74, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6c,
+	0x69, 0x6d, 0x69, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xdf, 0x02, 0x0a, 0x06, 0x56, 0x6f,
+	0x6c, 0x75, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79,
+	0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x61,
+	0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x76,
+	0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+	0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x0e, 0x76, 0x6f, 0x6c, 0x75,
+	0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x21, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x45, 0x6e,
+	0x74, 0x72, 0x79, 0x52, 0x0d, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65,
+	0x78, 0x74, 0x12, 0x42, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x6f,
+	0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x73, 0x69,
+	0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+	0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+	0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x13, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73,
+	0x69, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x18, 0x05, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70,
+	0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x6c,
+	0x65, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x1a, 0x40, 0x0a, 0x12, 0x56, 0x6f, 0x6c,
+	0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 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, 0x22, 0x75, 0x0a, 0x13, 0x54,
+	0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65,
+	0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x18,
+	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54,
+	0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69,
+	0x74, 0x65, 0x12, 0x2e, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x18,
+	0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54,
+	0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72,
+	0x65, 0x64, 0x22, 0x83, 0x01, 0x0a, 0x08, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x12,
+	0x3a, 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x6f, 0x6c,
+	0x6f, 0x67, 0x79, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72,
+	0x79, 0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x3b, 0x0a, 0x0d, 0x53,
+	0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 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, 0x22, 0xb7, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c,
+	0x65, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x47, 0x0a,
+	0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28,
+	0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x6f,
+	0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72,
+	0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0x98, 0x42, 0x01, 0x52, 0x07, 0x73,
+	0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74,
+	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, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75,
+	0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xed, 0x03, 0x0a, 0x1e, 0x43,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a,
+	0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f,
+	0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64,
+	0x65, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x11, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x61,
+	0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18,
+	0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61,
+	0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x10, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65,
+	0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65,
+	0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x12, 0x52, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74,
+	0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31,
+	0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69,
+	0x73, 0x68, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e,
+	0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0x98, 0x42,
+	0x01, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x60, 0x0a, 0x0e, 0x76, 0x6f,
+	0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x06, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74,
+	0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x56, 0x6f, 0x6c,
+	0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d,
+	0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x76,
+	0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x3a, 0x0a, 0x0c,
+	0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 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, 0x1a, 0x40, 0x0a, 0x12, 0x56, 0x6f, 0x6c, 0x75,
+	0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 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, 0x22, 0xca, 0x01, 0x0a, 0x1f, 0x43,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64,
+	0x0a, 0x0f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,
+	0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31,
+	0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69,
+	0x73, 0x68, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x45,
+	0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e,
+	0x74, 0x65, 0x78, 0x74, 0x1a, 0x41, 0x0a, 0x13, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x43,
+	0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 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, 0x22, 0xea, 0x01, 0x0a, 0x20, 0x43, 0x6f, 0x6e, 0x74,
+	0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x55, 0x6e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x56,
+	0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09,
+	0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64,
+	0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65,
+	0x49, 0x64, 0x12, 0x54, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e,
+	0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x55, 0x6e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65,
+	0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0x98, 0x42, 0x01, 0x52,
+	0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x72,
+	0x65, 0x74, 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, 0x22, 0x23, 0x0a, 0x21, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c,
+	0x65, 0x72, 0x55, 0x6e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x56, 0x6f, 0x6c, 0x75, 0x6d,
+	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9b, 0x06, 0x0a, 0x21, 0x56, 0x61,
+	0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61,
+	0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+	0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x63, 0x0a, 0x0e,
+	0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61,
+	0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61,
+	0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x74,
+	0x72, 0x79, 0x52, 0x0d, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78,
+	0x74, 0x12, 0x49, 0x0a, 0x13, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x61,
+	0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18,
+	0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61,
+	0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x12, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x59, 0x0a, 0x0a,
+	0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x39, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
+	0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69,
+	0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61,
+	0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72,
+	0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x55, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65,
+	0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76,
+	0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
+	0x42, 0x03, 0x98, 0x42, 0x01, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x74,
+	0x0a, 0x12, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
+	0x74, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x73, 0x69,
+	0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75,
+	0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x72,
+	0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0xa0, 0x42,
+	0x01, 0x52, 0x11, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65,
+	0x74, 0x65, 0x72, 0x73, 0x1a, 0x40, 0x0a, 0x12, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f,
+	0x6e, 0x74, 0x65, 0x78, 0x74, 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, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65,
+	0x74, 0x65, 0x72, 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, 0x1a, 0x3a, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 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, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x61,
+	0x6d, 0x65, 0x74, 0x65, 0x72, 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, 0x22, 0x89, 0x06, 0x0a, 0x22, 0x56, 0x61, 0x6c, 0x69,
+	0x64, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69,
+	0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52,
+	0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x34, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64,
+	0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c,
+	0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f,
+	0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d,
+	0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0xf4, 0x04, 0x0a,
+	0x09, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x6e, 0x0a, 0x0e, 0x76, 0x6f,
+	0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x47, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69,
+	0x64, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69,
+	0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43,
+	0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43,
+	0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x76, 0x6f, 0x6c,
+	0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x49, 0x0a, 0x13, 0x76, 0x6f,
+	0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65,
+	0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31,
+	0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74,
+	0x79, 0x52, 0x12, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c,
+	0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x64, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
+	0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x73, 0x69, 0x2e,
+	0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d,
+	0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x2e,
+	0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
+	0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x7f, 0x0a, 0x12, 0x6d,
+	0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
+	0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31,
+	0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43,
+	0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x2e, 0x4d, 0x75,
+	0x74, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45,
+	0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0xa0, 0x42, 0x01, 0x52, 0x11, 0x6d, 0x75, 0x74, 0x61, 0x62,
+	0x6c, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x40, 0x0a, 0x12,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 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, 0x1a, 0x3d,
+	0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 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, 0x1a, 0x44, 0x0a,
+	0x16, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
+	0x72, 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, 0x22, 0x5c, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d,
+	0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78,
+	0x5f, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a,
+	0x6d, 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74,
+	0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x6b, 0x65,
+	0x6e, 0x22, 0xec, 0x02, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x65, 0x6e, 0x74,
+	0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x73, 0x69,
+	0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65,
+	0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74,
+	0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74,
+	0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x1a, 0x85, 0x01, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73,
+	0x68, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03,
+	0x28, 0x09, 0x52, 0x10, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x4e, 0x6f, 0x64,
+	0x65, 0x49, 0x64, 0x73, 0x12, 0x47, 0x0a, 0x10, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63,
+	0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,
+	0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f,
+	0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x03, 0xa0, 0x42, 0x01, 0x52, 0x0f, 0x76, 0x6f,
+	0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x71, 0x0a,
+	0x05, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x40,
+	0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28,
+	0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75,
+	0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x6f, 0x6c, 0x75,
+	0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x22, 0x3e, 0x0a, 0x1a, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x47, 0x65,
+	0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b,
+	0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x3a, 0x03, 0xa0, 0x42, 0x01,
+	0x22, 0x97, 0x02, 0x0a, 0x1b, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x47,
+	0x65, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x12, 0x26, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x0e, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x52, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76,
+	0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x47, 0x65, 0x74, 0x56,
+	0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x6f,
+	0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x1a, 0x80, 0x01, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61,
+	0x74, 0x75, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64,
+	0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52,
+	0x10, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x64,
+	0x73, 0x12, 0x42, 0x0a, 0x10, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x64,
+	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x73,
+	0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69,
+	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x64,
+	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x03, 0xa0, 0x42, 0x01, 0x22, 0x83, 0x03, 0x0a, 0x1d, 0x43,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x56,
+	0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09,
+	0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x51, 0x0a, 0x07, 0x73, 0x65, 0x63,
+	0x72, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x73, 0x69,
+	0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x4d, 0x6f,
+	0x64, 0x69, 0x66, 0x79, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03,
+	0x98, 0x42, 0x01, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x6b, 0x0a, 0x12,
+	0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
+	0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76,
+	0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69,
+	0x66, 0x79, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e,
+	0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
+	0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x50,
+	0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x53, 0x65, 0x63,
+	0x72, 0x65, 0x74, 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, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65,
+	0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 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, 0x03, 0xa0, 0x42, 0x01,
+	0x22, 0x25, 0x0a, 0x1e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x4d, 0x6f,
+	0x64, 0x69, 0x66, 0x79, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x3a, 0x03, 0xa0, 0x42, 0x01, 0x22, 0xad, 0x02, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43,
+	0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x49,
+	0x0a, 0x13, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c,
+	0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x73,
+	0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62,
+	0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x12, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70,
+	0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x4a, 0x0a, 0x0a, 0x70, 0x61, 0x72,
+	0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e,
+	0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69,
+	0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65,
+	0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d,
+	0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x41, 0x0a, 0x13, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69,
+	0x62, 0x6c, 0x65, 0x5f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x6f,
+	0x6c, 0x6f, 0x67, 0x79, 0x52, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65,
+	0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61,
+	0x6d, 0x65, 0x74, 0x65, 0x72, 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, 0x22, 0xe3, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43,
+	0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+	0x2d, 0x0a, 0x12, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x61, 0x70,
+	0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x61, 0x76, 0x61,
+	0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x4b,
+	0x0a, 0x13, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e,
+	0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75,
+	0x6d, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x50, 0x0a, 0x13, 0x6d,
+	0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x73, 0x69,
+	0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x03, 0xa0, 0x42, 0x01, 0x52, 0x11, 0x6d, 0x69, 0x6e, 0x69,
+	0x6d, 0x75, 0x6d, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x22, 0x0a,
+	0x20, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x47, 0x65, 0x74, 0x43, 0x61,
+	0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x22, 0x6c, 0x0a, 0x21, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x47,
+	0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69,
+	0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63,
+	0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72,
+	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74,
+	0x79, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22,
+	0x96, 0x04, 0x0a, 0x1b, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x65,
+	0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12,
+	0x3b, 0x0a, 0x03, 0x72, 0x70, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63,
+	0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72,
+	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74,
+	0x79, 0x2e, 0x52, 0x50, 0x43, 0x48, 0x00, 0x52, 0x03, 0x72, 0x70, 0x63, 0x1a, 0xb1, 0x03, 0x0a,
+	0x03, 0x52, 0x50, 0x43, 0x12, 0x40, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74,
+	0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x61, 0x70,
+	0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x52, 0x50, 0x43, 0x2e, 0x54, 0x79, 0x70, 0x65,
+	0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xe7, 0x02, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12,
+	0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14,
+	0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x56, 0x4f,
+	0x4c, 0x55, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x53,
+	0x48, 0x5f, 0x55, 0x4e, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x5f, 0x56, 0x4f, 0x4c, 0x55,
+	0x4d, 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x56, 0x4f, 0x4c,
+	0x55, 0x4d, 0x45, 0x53, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x45, 0x54, 0x5f, 0x43, 0x41,
+	0x50, 0x41, 0x43, 0x49, 0x54, 0x59, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x52, 0x45, 0x41,
+	0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x53, 0x4e, 0x41, 0x50, 0x53, 0x48,
+	0x4f, 0x54, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x53, 0x4e, 0x41,
+	0x50, 0x53, 0x48, 0x4f, 0x54, 0x53, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x4c, 0x4f, 0x4e,
+	0x45, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x10, 0x07, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x55,
+	0x42, 0x4c, 0x49, 0x53, 0x48, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x08,
+	0x12, 0x11, 0x0a, 0x0d, 0x45, 0x58, 0x50, 0x41, 0x4e, 0x44, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4d,
+	0x45, 0x10, 0x09, 0x12, 0x20, 0x0a, 0x1c, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x56, 0x4f, 0x4c, 0x55,
+	0x4d, 0x45, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x45, 0x44, 0x5f, 0x4e, 0x4f,
+	0x44, 0x45, 0x53, 0x10, 0x0a, 0x12, 0x19, 0x0a, 0x10, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f,
+	0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x0b, 0x1a, 0x03, 0xa0, 0x42, 0x01,
+	0x12, 0x13, 0x0a, 0x0a, 0x47, 0x45, 0x54, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x10, 0x0c,
+	0x1a, 0x03, 0xa0, 0x42, 0x01, 0x12, 0x21, 0x0a, 0x18, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x5f,
+	0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45,
+	0x52, 0x10, 0x0d, 0x1a, 0x03, 0xa0, 0x42, 0x01, 0x12, 0x16, 0x0a, 0x0d, 0x4d, 0x4f, 0x44, 0x49,
+	0x46, 0x59, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x10, 0x0e, 0x1a, 0x03, 0xa0, 0x42, 0x01,
+	0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xea, 0x02, 0x0a, 0x15, 0x43, 0x72, 0x65,
+	0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x6f, 0x6c,
+	0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x6f,
+	0x75, 0x72, 0x63, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04,
+	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x12, 0x49, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
+	0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0x98,
+	0x42, 0x01, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x4d, 0x0a, 0x0a, 0x70,
+	0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x2d, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53,
+	0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50,
+	0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a,
+	0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x53, 0x65,
+	0x63, 0x72, 0x65, 0x74, 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, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65,
+	0x74, 0x65, 0x72, 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, 0x22, 0x46, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53,
+	0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+	0x2c, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x10, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73,
+	0x68, 0x6f, 0x74, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x22, 0x83, 0x02,
+	0x0a, 0x08, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x69,
+	0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09,
+	0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6e, 0x61,
+	0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a,
+	0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x6f,
+	0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x6f, 0x6c, 0x75,
+	0x6d, 0x65, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	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, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, 0x74,
+	0x6f, 0x5f, 0x75, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x72, 0x65, 0x61,
+	0x64, 0x79, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x72, 0x6f, 0x75, 0x70,
+	0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f,
+	0x74, 0x49, 0x64, 0x22, 0xbf, 0x01, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x6e,
+	0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a,
+	0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x49,
+	0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x2a, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53,
+	0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53,
+	0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0x98, 0x42, 0x01,
+	0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x53, 0x65, 0x63,
+	0x72, 0x65, 0x74, 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, 0x22, 0x18, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53,
+	0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0xaf, 0x02, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74,
+	0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f,
+	0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d,
+	0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61,
+	0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e,
+	0x12, 0x28, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d,
+	0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72,
+	0x63, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6e,
+	0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x07, 0x73,
+	0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63,
+	0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68,
+	0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65,
+	0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0x98, 0x42, 0x01, 0x52, 0x07, 0x73, 0x65,
+	0x63, 0x72, 0x65, 0x74, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 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, 0x22, 0xac, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68,
+	0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x07, 0x65,
+	0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63,
+	0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68,
+	0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x72,
+	0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65,
+	0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
+	0x6e, 0x65, 0x78, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x1a, 0x35, 0x0a, 0x05, 0x45, 0x6e, 0x74,
+	0x72, 0x79, 0x12, 0x2c, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6e,
+	0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74,
+	0x22, 0xd0, 0x02, 0x0a, 0x1d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x45,
+	0x78, 0x70, 0x61, 0x6e, 0x64, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12,
+	0x3c, 0x0a, 0x0e, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x61, 0x6e, 0x67,
+	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31,
+	0x2e, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0d,
+	0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x51, 0x0a,
+	0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32,
+	0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c,
+	0x65, 0x72, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74,
+	0x72, 0x79, 0x42, 0x03, 0x98, 0x42, 0x01, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73,
+	0x12, 0x45, 0x0a, 0x11, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x62,
+	0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x73,
+	0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62,
+	0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x10, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70,
+	0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x1a, 0x3a, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x72, 0x65,
+	0x74, 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, 0x22, 0x7f, 0x0a, 0x1e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65,
+	0x72, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74,
+	0x79, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63,
+	0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x17,
+	0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72,
+	0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x6e,
+	0x6f, 0x64, 0x65, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
+	0x69, 0x72, 0x65, 0x64, 0x22, 0xf0, 0x04, 0x0a, 0x16, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61,
+	0x67, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+	0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x5b, 0x0a, 0x0f,
+	0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18,
+	0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e,
+	0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e,
+	0x74, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x70, 0x75, 0x62, 0x6c, 0x69,
+	0x73, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x74, 0x61,
+	0x67, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x73, 0x74, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x54,
+	0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x45, 0x0a, 0x11, 0x76, 0x6f, 0x6c,
+	0x75, 0x6d, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f,
+	0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x10,
+	0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79,
+	0x12, 0x4a, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53,
+	0x74, 0x61, 0x67, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03,
+	0x98, 0x42, 0x01, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x58, 0x0a, 0x0e,
+	0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x06,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f,
+	0x64, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65,
+	0x78, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43,
+	0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x41, 0x0a, 0x13, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73,
+	0x68, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 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, 0x1a, 0x3a, 0x0a, 0x0c, 0x53, 0x65, 0x63,
+	0x72, 0x65, 0x74, 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, 0x1a, 0x40, 0x0a, 0x12, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43,
+	0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 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, 0x22, 0x19, 0x0a, 0x17, 0x4e, 0x6f, 0x64, 0x65, 0x53,
+	0x74, 0x61, 0x67, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x22, 0x67, 0x0a, 0x18, 0x4e, 0x6f, 0x64, 0x65, 0x55, 0x6e, 0x73, 0x74, 0x61, 0x67,
+	0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b,
+	0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x73,
+	0x74, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x61,
+	0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x73, 0x74, 0x61, 0x67, 0x69, 0x6e,
+	0x67, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0x1b, 0x0a, 0x19, 0x4e,
+	0x6f, 0x64, 0x65, 0x55, 0x6e, 0x73, 0x74, 0x61, 0x67, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb5, 0x05, 0x0a, 0x18, 0x4e, 0x6f, 0x64,
+	0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f,
+	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x49, 0x64, 0x12, 0x5d, 0x0a, 0x0f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x63, 0x6f,
+	0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x73,
+	0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x75,
+	0x62, 0x6c, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x74, 0x72,
+	0x79, 0x52, 0x0e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78,
+	0x74, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x74, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x72,
+	0x67, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11,
+	0x73, 0x74, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x61, 0x74,
+	0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x61,
+	0x74, 0x68, 0x12, 0x45, 0x0a, 0x11, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x61, 0x70,
+	0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e,
+	0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70,
+	0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x10, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43,
+	0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x61,
+	0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61,
+	0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x12, 0x4c, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73,
+	0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e,
+	0x4e, 0x6f, 0x64, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x56, 0x6f, 0x6c, 0x75, 0x6d,
+	0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73,
+	0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0x98, 0x42, 0x01, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72,
+	0x65, 0x74, 0x73, 0x12, 0x5a, 0x0a, 0x0e, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x6f,
+	0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x63, 0x73,
+	0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x56, 0x6f,
+	0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79,
+	0x52, 0x0d, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a,
+	0x41, 0x0a, 0x13, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78,
+	0x74, 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, 0x1a, 0x3a, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 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, 0x1a, 0x40,
+	0x0a, 0x12, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 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,
+	0x22, 0x1b, 0x0a, 0x19, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x56,
+	0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5a, 0x0a,
+	0x1a, 0x4e, 0x6f, 0x64, 0x65, 0x55, 0x6e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x56, 0x6f,
+	0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76,
+	0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+	0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67,
+	0x65, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74,
+	0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0x1d, 0x0a, 0x1b, 0x4e, 0x6f, 0x64,
+	0x65, 0x55, 0x6e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x89, 0x01, 0x0a, 0x19, 0x4e, 0x6f, 0x64,
+	0x65, 0x47, 0x65, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d,
+	0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x70, 0x61,
+	0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x50, 0x61, 0x74, 0x68, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x74, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x5f,
+	0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x11, 0x73, 0x74, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
+	0x50, 0x61, 0x74, 0x68, 0x22, 0x90, 0x01, 0x0a, 0x1a, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x74,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75,
+	0x6d, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x12, 0x47,
+	0x0a, 0x10, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69,
+	0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76,
+	0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f,
+	0x6e, 0x42, 0x03, 0xa0, 0x42, 0x01, 0x52, 0x0f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f,
+	0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xaf, 0x01, 0x0a, 0x0b, 0x56, 0x6f, 0x6c, 0x75,
+	0x6d, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x69, 0x6c,
+	0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x61, 0x76, 0x61, 0x69,
+	0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x75,
+	0x73, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x75, 0x73, 0x65, 0x64, 0x12,
+	0x2c, 0x0a, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e,
+	0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x73, 0x61,
+	0x67, 0x65, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x52, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x22, 0x2a, 0x0a,
+	0x04, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e,
+	0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x01, 0x12, 0x0a, 0x0a,
+	0x06, 0x49, 0x4e, 0x4f, 0x44, 0x45, 0x53, 0x10, 0x02, 0x22, 0x4c, 0x0a, 0x0f, 0x56, 0x6f, 0x6c,
+	0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08,
+	0x61, 0x62, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08,
+	0x61, 0x62, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x3a, 0x03, 0xa0, 0x42, 0x01, 0x22, 0x1c, 0x0a, 0x1a, 0x4e, 0x6f, 0x64, 0x65, 0x47,
+	0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x60, 0x0a, 0x1b, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x74,
+	0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69,
+	0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x73, 0x69,
+	0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43,
+	0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62,
+	0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xc9, 0x02, 0x0a, 0x15, 0x4e, 0x6f, 0x64, 0x65,
+	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74,
+	0x79, 0x12, 0x35, 0x0a, 0x03, 0x72, 0x70, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21,
+	0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76,
+	0x69, 0x63, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x52, 0x50,
+	0x43, 0x48, 0x00, 0x52, 0x03, 0x72, 0x70, 0x63, 0x1a, 0xf0, 0x01, 0x0a, 0x03, 0x52, 0x50, 0x43,
+	0x12, 0x3a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26,
+	0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76,
+	0x69, 0x63, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x52, 0x50,
+	0x43, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xac, 0x01, 0x0a,
+	0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e,
+	0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x54,
+	0x41, 0x47, 0x45, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10,
+	0x47, 0x45, 0x54, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x53,
+	0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x58, 0x50, 0x41, 0x4e, 0x44, 0x5f, 0x56, 0x4f, 0x4c,
+	0x55, 0x4d, 0x45, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x10, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f,
+	0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x1a, 0x03, 0xa0, 0x42, 0x01,
+	0x12, 0x21, 0x0a, 0x18, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f,
+	0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x52, 0x10, 0x05, 0x1a, 0x03,
+	0xa0, 0x42, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x4d, 0x4f,
+	0x55, 0x4e, 0x54, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0x06, 0x42, 0x06, 0x0a, 0x04, 0x74,
+	0x79, 0x70, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x74, 0x49, 0x6e,
+	0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xa2, 0x01, 0x0a, 0x13, 0x4e, 0x6f,
+	0x64, 0x65, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x14, 0x6d, 0x61,
+	0x78, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6e, 0x6f,
+	0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x6d, 0x61, 0x78, 0x56, 0x6f, 0x6c,
+	0x75, 0x6d, 0x65, 0x73, 0x50, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x41, 0x0a, 0x13, 0x61,
+	0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f,
+	0x67, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76,
+	0x31, 0x2e, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x12, 0x61, 0x63, 0x63, 0x65,
+	0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x22, 0x98,
+	0x03, 0x0a, 0x17, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x56, 0x6f, 0x6c,
+	0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f,
+	0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76,
+	0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d,
+	0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x6f,
+	0x6c, 0x75, 0x6d, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x3c, 0x0a, 0x0e, 0x63, 0x61, 0x70, 0x61,
+	0x63, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x15, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69,
+	0x74, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0d, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74,
+	0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x74, 0x61, 0x67, 0x69, 0x6e,
+	0x67, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x11, 0x73, 0x74, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x72, 0x67,
+	0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x45, 0x0a, 0x11, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x5f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x18, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d,
+	0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x10, 0x76, 0x6f, 0x6c,
+	0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x4e, 0x0a,
+	0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c,
+	0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x78, 0x70, 0x61,
+	0x6e, 0x64, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e,
+	0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x06, 0x98, 0x42,
+	0x01, 0xa0, 0x42, 0x01, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x1a, 0x3a, 0x0a,
+	0x0c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 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, 0x22, 0x41, 0x0a, 0x18, 0x4e, 0x6f, 0x64,
+	0x65, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74,
+	0x79, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63,
+	0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x27, 0x0a, 0x25,
+	0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x47,
+	0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x76, 0x0a, 0x26, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f,
+	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x47, 0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62,
+	0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+	0x4c, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18,
+	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47,
+	0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x65,
+	0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52,
+	0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xfd, 0x01,
+	0x0a, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65,
+	0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69,
+	0x74, 0x79, 0x12, 0x40, 0x0a, 0x03, 0x72, 0x70, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x2c, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f,
+	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43,
+	0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x52, 0x50, 0x43, 0x48, 0x00, 0x52,
+	0x03, 0x72, 0x70, 0x63, 0x1a, 0x8e, 0x01, 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x45, 0x0a, 0x04,
+	0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x73, 0x69,
+	0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
+	0x6c, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69,
+	0x6c, 0x69, 0x74, 0x79, 0x2e, 0x52, 0x50, 0x43, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74,
+	0x79, 0x70, 0x65, 0x22, 0x40, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55,
+	0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x2b, 0x0a, 0x27, 0x43, 0x52, 0x45, 0x41,
+	0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x56, 0x4f,
+	0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x53, 0x4e, 0x41, 0x50, 0x53,
+	0x48, 0x4f, 0x54, 0x10, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x8d, 0x03,
+	0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x72,
+	0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+	0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
+	0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49,
+	0x64, 0x73, 0x12, 0x54, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65,
+	0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e,
+	0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65,
+	0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0x98, 0x42, 0x01, 0x52,
+	0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x58, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61,
+	0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63,
+	0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75,
+	0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
+	0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
+	0x72, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 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, 0x1a, 0x3d,
+	0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 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, 0x22, 0x67, 0x0a,
+	0x21, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x72, 0x6f,
+	0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x12, 0x42, 0x0a, 0x0e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x73, 0x6e, 0x61, 0x70,
+	0x73, 0x68, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x73, 0x69,
+	0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53,
+	0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x0d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e,
+	0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x22, 0xd4, 0x01, 0x0a, 0x13, 0x56, 0x6f, 0x6c, 0x75, 0x6d,
+	0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x2a,
+	0x0a, 0x11, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74,
+	0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x67, 0x72, 0x6f, 0x75, 0x70,
+	0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x09, 0x73, 0x6e,
+	0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e,
+	0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52,
+	0x09, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72,
+	0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 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, 0x52, 0x0c, 0x63,
+	0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x72,
+	0x65, 0x61, 0x64, 0x79, 0x5f, 0x74, 0x6f, 0x5f, 0x75, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
+	0x08, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x79, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x22, 0x83, 0x02,
+	0x0a, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x72,
+	0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x73, 0x6e, 0x61, 0x70,
+	0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x67,
+	0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x21,
+	0x0a, 0x0c, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02,
+	0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64,
+	0x73, 0x12, 0x54, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61,
+	0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x63,
+	0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0x98, 0x42, 0x01, 0x52, 0x07,
+	0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x72, 0x65,
+	0x74, 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, 0x22, 0x23, 0x0a, 0x21, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x6f, 0x6c,
+	0x75, 0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xfd, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73,
+	0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x72,
+	0x6f, 0x75, 0x70, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70,
+	0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68,
+	0x6f, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6e,
+	0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x73, 0x12, 0x51, 0x0a, 0x07, 0x73, 0x65, 0x63,
+	0x72, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x73, 0x69,
+	0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x72, 0x6f,
+	0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03,
+	0x98, 0x42, 0x01, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x1a, 0x3a, 0x0a, 0x0c,
+	0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 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, 0x22, 0x64, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x56,
+	0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68,
+	0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0e, 0x67, 0x72,
+	0x6f, 0x75, 0x70, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75,
+	0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52,
+	0x0d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x22, 0x4f,
+	0x0a, 0x0d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12,
+	0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74,
+	0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22,
+	0x95, 0x02, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x41,
+	0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+	0x1f, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64,
+	0x12, 0x27, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x66, 0x66,
+	0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74,
+	0x69, 0x6e, 0x67, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78,
+	0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a,
+	0x6d, 0x61, 0x78, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x4f, 0x0a, 0x07, 0x73, 0x65,
+	0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x73,
+	0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+	0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0x98,
+	0x42, 0x01, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x53,
+	0x65, 0x63, 0x72, 0x65, 0x74, 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, 0x22, 0xdb, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x4d,
+	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x13, 0x62, 0x6c, 0x6f, 0x63,
+	0x6b, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x42,
+	0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65,
+	0x52, 0x11, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x54,
+	0x79, 0x70, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x61,
+	0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x13, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69,
+	0x74, 0x79, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x0e, 0x62, 0x6c, 0x6f, 0x63, 0x6b,
+	0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x15, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65,
+	0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x74,
+	0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xc4, 0x02, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74,
+	0x61, 0x64, 0x61, 0x74, 0x61, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x12, 0x28, 0x0a, 0x10, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68,
+	0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x62, 0x61, 0x73,
+	0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x74,
+	0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69,
+	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53,
+	0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x74, 0x61,
+	0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x66, 0x66, 0x73,
+	0x65, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
+	0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x73, 0x75,
+	0x6c, 0x74, 0x73, 0x12, 0x4b, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x05,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65,
+	0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74,
+	0x72, 0x79, 0x42, 0x03, 0x98, 0x42, 0x01, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73,
+	0x1a, 0x3a, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 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, 0x22, 0xd7, 0x01, 0x0a,
+	0x18, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, 0x65, 0x6c, 0x74,
+	0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x13, 0x62, 0x6c, 0x6f,
+	0x63, 0x6b, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e,
+	0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70,
+	0x65, 0x52, 0x11, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+	0x54, 0x79, 0x70, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63,
+	0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x13, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x63,
+	0x69, 0x74, 0x79, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x0e, 0x62, 0x6c, 0x6f, 0x63,
+	0x6b, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x15, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d,
+	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65,
+	0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2a, 0x47, 0x0a, 0x11, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d,
+	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55,
+	0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x49, 0x58, 0x45,
+	0x44, 0x5f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x56, 0x41,
+	0x52, 0x49, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x10, 0x02, 0x32,
+	0xfa, 0x01, 0x0a, 0x08, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x4e, 0x0a, 0x0d,
+	0x47, 0x65, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x2e,
+	0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e,
+	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x63, 0x73,
+	0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x49, 0x6e,
+	0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x15,
+	0x47, 0x65, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c,
+	0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47,
+	0x65, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69,
+	0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x63, 0x73,
+	0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x61,
+	0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x05, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x12, 0x14, 0x2e,
+	0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f,
+	0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xbb, 0x0a, 0x0a,
+	0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x4b, 0x0a, 0x0c, 0x43,
+	0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x1b, 0x2e, 0x63, 0x73,
+	0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d,
+	0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76,
+	0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x1b, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76,
+	0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44,
+	0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
+	0x6c, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x12, 0x26, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x6c, 0x6c, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x56, 0x6f, 0x6c, 0x75, 0x6d,
+	0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76,
+	0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c,
+	0x69, 0x73, 0x68, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x19, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65,
+	0x72, 0x55, 0x6e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x12, 0x28, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x6c, 0x6c, 0x65, 0x72, 0x55, 0x6e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x56, 0x6f, 0x6c,
+	0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x73, 0x69,
+	0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x55, 0x6e,
+	0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x1a, 0x56, 0x61, 0x6c, 0x69, 0x64,
+	0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c,
+	0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56,
+	0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70,
+	0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x2a, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
+	0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69,
+	0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48,
+	0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x2e,
+	0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d,
+	0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x63, 0x73, 0x69, 0x2e,
+	0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x43,
+	0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31,
+	0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74,
+	0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x00, 0x12, 0x72, 0x0a, 0x19, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72,
+	0x47, 0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12,
+	0x28, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
+	0x6c, 0x65, 0x72, 0x47, 0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69,
+	0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x73, 0x69, 0x2e,
+	0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x47, 0x65, 0x74,
+	0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+	0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1d, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76,
+	0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31,
+	0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0e, 0x44, 0x65, 0x6c,
+	0x65, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1d, 0x2e, 0x63, 0x73,
+	0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73,
+	0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x73, 0x69,
+	0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68,
+	0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0d,
+	0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, 0x1c, 0x2e,
+	0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73,
+	0x68, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x63, 0x73,
+	0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f,
+	0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x16,
+	0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e,
+	0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e,
+	0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65,
+	0x72, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x74, 0x72,
+	0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x47, 0x65, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x22,
+	0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c,
+	0x65, 0x72, 0x47, 0x65, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74,
+	0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x47, 0x65, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0xa0, 0x42, 0x01, 0x12, 0x6c, 0x0a, 0x16,
+	0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e,
+	0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e,
+	0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65,
+	0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0xa0, 0x42, 0x01, 0x32, 0xe8, 0x03, 0x0a, 0x0f, 0x47,
+	0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x81,
+	0x01, 0x0a, 0x1e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c,
+	0x65, 0x72, 0x47, 0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65,
+	0x73, 0x12, 0x2d, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70,
+	0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x47, 0x65, 0x74, 0x43, 0x61, 0x70,
+	0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x2e, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x47, 0x65, 0x74, 0x43, 0x61, 0x70, 0x61,
+	0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x00, 0x12, 0x72, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75,
+	0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12,
+	0x28, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56,
+	0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68,
+	0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x73, 0x69, 0x2e,
+	0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47,
+	0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73,
+	0x68, 0x6f, 0x74, 0x12, 0x28, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c,
+	0x65, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e,
+	0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e,
+	0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x6f, 0x6c,
+	0x75, 0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x16, 0x47, 0x65,
+	0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70,
+	0x73, 0x68, 0x6f, 0x74, 0x12, 0x25, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65,
+	0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70,
+	0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x73,
+	0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x72,
+	0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xd9, 0x01, 0x0a, 0x10, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68,
+	0x6f, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x65, 0x0a, 0x14, 0x47, 0x65,
+	0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74,
+	0x65, 0x64, 0x12, 0x23, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d,
+	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31,
+	0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x41, 0x6c, 0x6c, 0x6f,
+	0x63, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30,
+	0x01, 0x12, 0x59, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+	0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x1f, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47,
+	0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e,
+	0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, 0x65, 0x6c, 0x74, 0x61,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x1a, 0x03, 0xa0, 0x42,
+	0x01, 0x32, 0xda, 0x05, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x54, 0x0a, 0x0f, 0x4e, 0x6f,
+	0x64, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x1e, 0x2e,
+	0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e,
+	0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65,
+	0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+	0x12, 0x5a, 0x0a, 0x11, 0x4e, 0x6f, 0x64, 0x65, 0x55, 0x6e, 0x73, 0x74, 0x61, 0x67, 0x65, 0x56,
+	0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e,
+	0x6f, 0x64, 0x65, 0x55, 0x6e, 0x73, 0x74, 0x61, 0x67, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31,
+	0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x55, 0x6e, 0x73, 0x74, 0x61, 0x67, 0x65, 0x56, 0x6f, 0x6c, 0x75,
+	0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x11,
+	0x4e, 0x6f, 0x64, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x56, 0x6f, 0x6c, 0x75, 0x6d,
+	0x65, 0x12, 0x20, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x50,
+	0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64,
+	0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x13, 0x4e, 0x6f, 0x64, 0x65,
+	0x55, 0x6e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12,
+	0x22, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x55, 0x6e, 0x70,
+	0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64,
+	0x65, 0x55, 0x6e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x12, 0x4e, 0x6f,
+	0x64, 0x65, 0x47, 0x65, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73,
+	0x12, 0x21, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x65,
+	0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64,
+	0x65, 0x47, 0x65, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x10, 0x4e, 0x6f, 0x64,
+	0x65, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x1f, 0x2e,
+	0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x78, 0x70, 0x61, 0x6e,
+	0x64, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20,
+	0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x78, 0x70, 0x61,
+	0x6e, 0x64, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x00, 0x12, 0x60, 0x0a, 0x13, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x74, 0x43, 0x61, 0x70,
+	0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x22, 0x2e, 0x63, 0x73, 0x69, 0x2e,
+	0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69,
+	0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e,
+	0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x74, 0x43, 0x61,
+	0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x74, 0x49,
+	0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64,
+	0x65, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+	0x1b, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x74,
+	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x3a, 0x3c,
+	0x0a, 0x0a, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x1c, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
+	0x6e, 0x75, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xa4, 0x08, 0x20, 0x01, 0x28,
+	0x08, 0x52, 0x09, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x45, 0x6e, 0x75, 0x6d, 0x3a, 0x4c, 0x0a, 0x10,
+	0x61, 0x6c, 0x70, 0x68, 0x61, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,
+	0x12, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x73, 0x18, 0xa4, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x6c, 0x70, 0x68,
+	0x61, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x3d, 0x0a, 0x0a, 0x63, 0x73,
+	0x69, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64,
+	0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xa3, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09,
+	0x63, 0x73, 0x69, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x3a, 0x3f, 0x0a, 0x0b, 0x61, 0x6c, 0x70,
+	0x68, 0x61, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64,
+	0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xa4, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a,
+	0x61, 0x6c, 0x70, 0x68, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x45, 0x0a, 0x0d, 0x61, 0x6c,
+	0x70, 0x68, 0x61, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xa4, 0x08, 0x20,
+	0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x3a, 0x42, 0x0a, 0x0c, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f,
+	0x64, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+	0x73, 0x18, 0xa4, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x4d,
+	0x65, 0x74, 0x68, 0x6f, 0x64, 0x3a, 0x45, 0x0a, 0x0d, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x5f, 0x73,
+	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+	0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xa4, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c,
+	0x61, 0x6c, 0x70, 0x68, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x38, 0x5a, 0x36,
+	0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61,
+	0x69, 0x6e, 0x65, 0x72, 0x2d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2d, 0x69, 0x6e, 0x74,
+	0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x70, 0x65, 0x63, 0x2f, 0x6c, 0x69, 0x62, 0x2f,
+	0x67, 0x6f, 0x2f, 0x63, 0x73, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var file_csi_proto_enumTypes = make([]protoimpl.EnumInfo, 8)
+var file_csi_proto_msgTypes = make([]protoimpl.MessageInfo, 131)
+var file_csi_proto_goTypes = []any{
+	(BlockMetadataType)(0),                               // 0: csi.v1.BlockMetadataType
+	(PluginCapability_Service_Type)(0),                   // 1: csi.v1.PluginCapability.Service.Type
+	(PluginCapability_VolumeExpansion_Type)(0),           // 2: csi.v1.PluginCapability.VolumeExpansion.Type
+	(VolumeCapability_AccessMode_Mode)(0),                // 3: csi.v1.VolumeCapability.AccessMode.Mode
+	(ControllerServiceCapability_RPC_Type)(0),            // 4: csi.v1.ControllerServiceCapability.RPC.Type
+	(VolumeUsage_Unit)(0),                                // 5: csi.v1.VolumeUsage.Unit
+	(NodeServiceCapability_RPC_Type)(0),                  // 6: csi.v1.NodeServiceCapability.RPC.Type
+	(GroupControllerServiceCapability_RPC_Type)(0),       // 7: csi.v1.GroupControllerServiceCapability.RPC.Type
+	(*GetPluginInfoRequest)(nil),                         // 8: csi.v1.GetPluginInfoRequest
+	(*GetPluginInfoResponse)(nil),                        // 9: csi.v1.GetPluginInfoResponse
+	(*GetPluginCapabilitiesRequest)(nil),                 // 10: csi.v1.GetPluginCapabilitiesRequest
+	(*GetPluginCapabilitiesResponse)(nil),                // 11: csi.v1.GetPluginCapabilitiesResponse
+	(*PluginCapability)(nil),                             // 12: csi.v1.PluginCapability
+	(*ProbeRequest)(nil),                                 // 13: csi.v1.ProbeRequest
+	(*ProbeResponse)(nil),                                // 14: csi.v1.ProbeResponse
+	(*CreateVolumeRequest)(nil),                          // 15: csi.v1.CreateVolumeRequest
+	(*VolumeContentSource)(nil),                          // 16: csi.v1.VolumeContentSource
+	(*CreateVolumeResponse)(nil),                         // 17: csi.v1.CreateVolumeResponse
+	(*VolumeCapability)(nil),                             // 18: csi.v1.VolumeCapability
+	(*CapacityRange)(nil),                                // 19: csi.v1.CapacityRange
+	(*Volume)(nil),                                       // 20: csi.v1.Volume
+	(*TopologyRequirement)(nil),                          // 21: csi.v1.TopologyRequirement
+	(*Topology)(nil),                                     // 22: csi.v1.Topology
+	(*DeleteVolumeRequest)(nil),                          // 23: csi.v1.DeleteVolumeRequest
+	(*DeleteVolumeResponse)(nil),                         // 24: csi.v1.DeleteVolumeResponse
+	(*ControllerPublishVolumeRequest)(nil),               // 25: csi.v1.ControllerPublishVolumeRequest
+	(*ControllerPublishVolumeResponse)(nil),              // 26: csi.v1.ControllerPublishVolumeResponse
+	(*ControllerUnpublishVolumeRequest)(nil),             // 27: csi.v1.ControllerUnpublishVolumeRequest
+	(*ControllerUnpublishVolumeResponse)(nil),            // 28: csi.v1.ControllerUnpublishVolumeResponse
+	(*ValidateVolumeCapabilitiesRequest)(nil),            // 29: csi.v1.ValidateVolumeCapabilitiesRequest
+	(*ValidateVolumeCapabilitiesResponse)(nil),           // 30: csi.v1.ValidateVolumeCapabilitiesResponse
+	(*ListVolumesRequest)(nil),                           // 31: csi.v1.ListVolumesRequest
+	(*ListVolumesResponse)(nil),                          // 32: csi.v1.ListVolumesResponse
+	(*ControllerGetVolumeRequest)(nil),                   // 33: csi.v1.ControllerGetVolumeRequest
+	(*ControllerGetVolumeResponse)(nil),                  // 34: csi.v1.ControllerGetVolumeResponse
+	(*ControllerModifyVolumeRequest)(nil),                // 35: csi.v1.ControllerModifyVolumeRequest
+	(*ControllerModifyVolumeResponse)(nil),               // 36: csi.v1.ControllerModifyVolumeResponse
+	(*GetCapacityRequest)(nil),                           // 37: csi.v1.GetCapacityRequest
+	(*GetCapacityResponse)(nil),                          // 38: csi.v1.GetCapacityResponse
+	(*ControllerGetCapabilitiesRequest)(nil),             // 39: csi.v1.ControllerGetCapabilitiesRequest
+	(*ControllerGetCapabilitiesResponse)(nil),            // 40: csi.v1.ControllerGetCapabilitiesResponse
+	(*ControllerServiceCapability)(nil),                  // 41: csi.v1.ControllerServiceCapability
+	(*CreateSnapshotRequest)(nil),                        // 42: csi.v1.CreateSnapshotRequest
+	(*CreateSnapshotResponse)(nil),                       // 43: csi.v1.CreateSnapshotResponse
+	(*Snapshot)(nil),                                     // 44: csi.v1.Snapshot
+	(*DeleteSnapshotRequest)(nil),                        // 45: csi.v1.DeleteSnapshotRequest
+	(*DeleteSnapshotResponse)(nil),                       // 46: csi.v1.DeleteSnapshotResponse
+	(*ListSnapshotsRequest)(nil),                         // 47: csi.v1.ListSnapshotsRequest
+	(*ListSnapshotsResponse)(nil),                        // 48: csi.v1.ListSnapshotsResponse
+	(*ControllerExpandVolumeRequest)(nil),                // 49: csi.v1.ControllerExpandVolumeRequest
+	(*ControllerExpandVolumeResponse)(nil),               // 50: csi.v1.ControllerExpandVolumeResponse
+	(*NodeStageVolumeRequest)(nil),                       // 51: csi.v1.NodeStageVolumeRequest
+	(*NodeStageVolumeResponse)(nil),                      // 52: csi.v1.NodeStageVolumeResponse
+	(*NodeUnstageVolumeRequest)(nil),                     // 53: csi.v1.NodeUnstageVolumeRequest
+	(*NodeUnstageVolumeResponse)(nil),                    // 54: csi.v1.NodeUnstageVolumeResponse
+	(*NodePublishVolumeRequest)(nil),                     // 55: csi.v1.NodePublishVolumeRequest
+	(*NodePublishVolumeResponse)(nil),                    // 56: csi.v1.NodePublishVolumeResponse
+	(*NodeUnpublishVolumeRequest)(nil),                   // 57: csi.v1.NodeUnpublishVolumeRequest
+	(*NodeUnpublishVolumeResponse)(nil),                  // 58: csi.v1.NodeUnpublishVolumeResponse
+	(*NodeGetVolumeStatsRequest)(nil),                    // 59: csi.v1.NodeGetVolumeStatsRequest
+	(*NodeGetVolumeStatsResponse)(nil),                   // 60: csi.v1.NodeGetVolumeStatsResponse
+	(*VolumeUsage)(nil),                                  // 61: csi.v1.VolumeUsage
+	(*VolumeCondition)(nil),                              // 62: csi.v1.VolumeCondition
+	(*NodeGetCapabilitiesRequest)(nil),                   // 63: csi.v1.NodeGetCapabilitiesRequest
+	(*NodeGetCapabilitiesResponse)(nil),                  // 64: csi.v1.NodeGetCapabilitiesResponse
+	(*NodeServiceCapability)(nil),                        // 65: csi.v1.NodeServiceCapability
+	(*NodeGetInfoRequest)(nil),                           // 66: csi.v1.NodeGetInfoRequest
+	(*NodeGetInfoResponse)(nil),                          // 67: csi.v1.NodeGetInfoResponse
+	(*NodeExpandVolumeRequest)(nil),                      // 68: csi.v1.NodeExpandVolumeRequest
+	(*NodeExpandVolumeResponse)(nil),                     // 69: csi.v1.NodeExpandVolumeResponse
+	(*GroupControllerGetCapabilitiesRequest)(nil),        // 70: csi.v1.GroupControllerGetCapabilitiesRequest
+	(*GroupControllerGetCapabilitiesResponse)(nil),       // 71: csi.v1.GroupControllerGetCapabilitiesResponse
+	(*GroupControllerServiceCapability)(nil),             // 72: csi.v1.GroupControllerServiceCapability
+	(*CreateVolumeGroupSnapshotRequest)(nil),             // 73: csi.v1.CreateVolumeGroupSnapshotRequest
+	(*CreateVolumeGroupSnapshotResponse)(nil),            // 74: csi.v1.CreateVolumeGroupSnapshotResponse
+	(*VolumeGroupSnapshot)(nil),                          // 75: csi.v1.VolumeGroupSnapshot
+	(*DeleteVolumeGroupSnapshotRequest)(nil),             // 76: csi.v1.DeleteVolumeGroupSnapshotRequest
+	(*DeleteVolumeGroupSnapshotResponse)(nil),            // 77: csi.v1.DeleteVolumeGroupSnapshotResponse
+	(*GetVolumeGroupSnapshotRequest)(nil),                // 78: csi.v1.GetVolumeGroupSnapshotRequest
+	(*GetVolumeGroupSnapshotResponse)(nil),               // 79: csi.v1.GetVolumeGroupSnapshotResponse
+	(*BlockMetadata)(nil),                                // 80: csi.v1.BlockMetadata
+	(*GetMetadataAllocatedRequest)(nil),                  // 81: csi.v1.GetMetadataAllocatedRequest
+	(*GetMetadataAllocatedResponse)(nil),                 // 82: csi.v1.GetMetadataAllocatedResponse
+	(*GetMetadataDeltaRequest)(nil),                      // 83: csi.v1.GetMetadataDeltaRequest
+	(*GetMetadataDeltaResponse)(nil),                     // 84: csi.v1.GetMetadataDeltaResponse
+	nil,                                                  // 85: csi.v1.GetPluginInfoResponse.ManifestEntry
+	(*PluginCapability_Service)(nil),                     // 86: csi.v1.PluginCapability.Service
+	(*PluginCapability_VolumeExpansion)(nil),             // 87: csi.v1.PluginCapability.VolumeExpansion
+	nil,                                                  // 88: csi.v1.CreateVolumeRequest.ParametersEntry
+	nil,                                                  // 89: csi.v1.CreateVolumeRequest.SecretsEntry
+	nil,                                                  // 90: csi.v1.CreateVolumeRequest.MutableParametersEntry
+	(*VolumeContentSource_SnapshotSource)(nil),           // 91: csi.v1.VolumeContentSource.SnapshotSource
+	(*VolumeContentSource_VolumeSource)(nil),             // 92: csi.v1.VolumeContentSource.VolumeSource
+	(*VolumeCapability_BlockVolume)(nil),                 // 93: csi.v1.VolumeCapability.BlockVolume
+	(*VolumeCapability_MountVolume)(nil),                 // 94: csi.v1.VolumeCapability.MountVolume
+	(*VolumeCapability_AccessMode)(nil),                  // 95: csi.v1.VolumeCapability.AccessMode
+	nil,                                                  // 96: csi.v1.Volume.VolumeContextEntry
+	nil,                                                  // 97: csi.v1.Topology.SegmentsEntry
+	nil,                                                  // 98: csi.v1.DeleteVolumeRequest.SecretsEntry
+	nil,                                                  // 99: csi.v1.ControllerPublishVolumeRequest.SecretsEntry
+	nil,                                                  // 100: csi.v1.ControllerPublishVolumeRequest.VolumeContextEntry
+	nil,                                                  // 101: csi.v1.ControllerPublishVolumeResponse.PublishContextEntry
+	nil,                                                  // 102: csi.v1.ControllerUnpublishVolumeRequest.SecretsEntry
+	nil,                                                  // 103: csi.v1.ValidateVolumeCapabilitiesRequest.VolumeContextEntry
+	nil,                                                  // 104: csi.v1.ValidateVolumeCapabilitiesRequest.ParametersEntry
+	nil,                                                  // 105: csi.v1.ValidateVolumeCapabilitiesRequest.SecretsEntry
+	nil,                                                  // 106: csi.v1.ValidateVolumeCapabilitiesRequest.MutableParametersEntry
+	(*ValidateVolumeCapabilitiesResponse_Confirmed)(nil), // 107: csi.v1.ValidateVolumeCapabilitiesResponse.Confirmed
+	nil,                                      // 108: csi.v1.ValidateVolumeCapabilitiesResponse.Confirmed.VolumeContextEntry
+	nil,                                      // 109: csi.v1.ValidateVolumeCapabilitiesResponse.Confirmed.ParametersEntry
+	nil,                                      // 110: csi.v1.ValidateVolumeCapabilitiesResponse.Confirmed.MutableParametersEntry
+	(*ListVolumesResponse_VolumeStatus)(nil), // 111: csi.v1.ListVolumesResponse.VolumeStatus
+	(*ListVolumesResponse_Entry)(nil),        // 112: csi.v1.ListVolumesResponse.Entry
+	(*ControllerGetVolumeResponse_VolumeStatus)(nil), // 113: csi.v1.ControllerGetVolumeResponse.VolumeStatus
+	nil,                                     // 114: csi.v1.ControllerModifyVolumeRequest.SecretsEntry
+	nil,                                     // 115: csi.v1.ControllerModifyVolumeRequest.MutableParametersEntry
+	nil,                                     // 116: csi.v1.GetCapacityRequest.ParametersEntry
+	(*ControllerServiceCapability_RPC)(nil), // 117: csi.v1.ControllerServiceCapability.RPC
+	nil,                                     // 118: csi.v1.CreateSnapshotRequest.SecretsEntry
+	nil,                                     // 119: csi.v1.CreateSnapshotRequest.ParametersEntry
+	nil,                                     // 120: csi.v1.DeleteSnapshotRequest.SecretsEntry
+	nil,                                     // 121: csi.v1.ListSnapshotsRequest.SecretsEntry
+	(*ListSnapshotsResponse_Entry)(nil),     // 122: csi.v1.ListSnapshotsResponse.Entry
+	nil,                                     // 123: csi.v1.ControllerExpandVolumeRequest.SecretsEntry
+	nil,                                     // 124: csi.v1.NodeStageVolumeRequest.PublishContextEntry
+	nil,                                     // 125: csi.v1.NodeStageVolumeRequest.SecretsEntry
+	nil,                                     // 126: csi.v1.NodeStageVolumeRequest.VolumeContextEntry
+	nil,                                     // 127: csi.v1.NodePublishVolumeRequest.PublishContextEntry
+	nil,                                     // 128: csi.v1.NodePublishVolumeRequest.SecretsEntry
+	nil,                                     // 129: csi.v1.NodePublishVolumeRequest.VolumeContextEntry
+	(*NodeServiceCapability_RPC)(nil),       // 130: csi.v1.NodeServiceCapability.RPC
+	nil,                                     // 131: csi.v1.NodeExpandVolumeRequest.SecretsEntry
+	(*GroupControllerServiceCapability_RPC)(nil), // 132: csi.v1.GroupControllerServiceCapability.RPC
+	nil,                                   // 133: csi.v1.CreateVolumeGroupSnapshotRequest.SecretsEntry
+	nil,                                   // 134: csi.v1.CreateVolumeGroupSnapshotRequest.ParametersEntry
+	nil,                                   // 135: csi.v1.DeleteVolumeGroupSnapshotRequest.SecretsEntry
+	nil,                                   // 136: csi.v1.GetVolumeGroupSnapshotRequest.SecretsEntry
+	nil,                                   // 137: csi.v1.GetMetadataAllocatedRequest.SecretsEntry
+	nil,                                   // 138: csi.v1.GetMetadataDeltaRequest.SecretsEntry
+	(*wrapperspb.BoolValue)(nil),          // 139: google.protobuf.BoolValue
+	(*wrapperspb.Int64Value)(nil),         // 140: google.protobuf.Int64Value
+	(*timestamppb.Timestamp)(nil),         // 141: google.protobuf.Timestamp
+	(*descriptorpb.EnumOptions)(nil),      // 142: google.protobuf.EnumOptions
+	(*descriptorpb.EnumValueOptions)(nil), // 143: google.protobuf.EnumValueOptions
+	(*descriptorpb.FieldOptions)(nil),     // 144: google.protobuf.FieldOptions
+	(*descriptorpb.MessageOptions)(nil),   // 145: google.protobuf.MessageOptions
+	(*descriptorpb.MethodOptions)(nil),    // 146: google.protobuf.MethodOptions
+	(*descriptorpb.ServiceOptions)(nil),   // 147: google.protobuf.ServiceOptions
+}
+var file_csi_proto_depIdxs = []int32{
+	85,  // 0: csi.v1.GetPluginInfoResponse.manifest:type_name -> csi.v1.GetPluginInfoResponse.ManifestEntry
+	12,  // 1: csi.v1.GetPluginCapabilitiesResponse.capabilities:type_name -> csi.v1.PluginCapability
+	86,  // 2: csi.v1.PluginCapability.service:type_name -> csi.v1.PluginCapability.Service
+	87,  // 3: csi.v1.PluginCapability.volume_expansion:type_name -> csi.v1.PluginCapability.VolumeExpansion
+	139, // 4: csi.v1.ProbeResponse.ready:type_name -> google.protobuf.BoolValue
+	19,  // 5: csi.v1.CreateVolumeRequest.capacity_range:type_name -> csi.v1.CapacityRange
+	18,  // 6: csi.v1.CreateVolumeRequest.volume_capabilities:type_name -> csi.v1.VolumeCapability
+	88,  // 7: csi.v1.CreateVolumeRequest.parameters:type_name -> csi.v1.CreateVolumeRequest.ParametersEntry
+	89,  // 8: csi.v1.CreateVolumeRequest.secrets:type_name -> csi.v1.CreateVolumeRequest.SecretsEntry
+	16,  // 9: csi.v1.CreateVolumeRequest.volume_content_source:type_name -> csi.v1.VolumeContentSource
+	21,  // 10: csi.v1.CreateVolumeRequest.accessibility_requirements:type_name -> csi.v1.TopologyRequirement
+	90,  // 11: csi.v1.CreateVolumeRequest.mutable_parameters:type_name -> csi.v1.CreateVolumeRequest.MutableParametersEntry
+	91,  // 12: csi.v1.VolumeContentSource.snapshot:type_name -> csi.v1.VolumeContentSource.SnapshotSource
+	92,  // 13: csi.v1.VolumeContentSource.volume:type_name -> csi.v1.VolumeContentSource.VolumeSource
+	20,  // 14: csi.v1.CreateVolumeResponse.volume:type_name -> csi.v1.Volume
+	93,  // 15: csi.v1.VolumeCapability.block:type_name -> csi.v1.VolumeCapability.BlockVolume
+	94,  // 16: csi.v1.VolumeCapability.mount:type_name -> csi.v1.VolumeCapability.MountVolume
+	95,  // 17: csi.v1.VolumeCapability.access_mode:type_name -> csi.v1.VolumeCapability.AccessMode
+	96,  // 18: csi.v1.Volume.volume_context:type_name -> csi.v1.Volume.VolumeContextEntry
+	16,  // 19: csi.v1.Volume.content_source:type_name -> csi.v1.VolumeContentSource
+	22,  // 20: csi.v1.Volume.accessible_topology:type_name -> csi.v1.Topology
+	22,  // 21: csi.v1.TopologyRequirement.requisite:type_name -> csi.v1.Topology
+	22,  // 22: csi.v1.TopologyRequirement.preferred:type_name -> csi.v1.Topology
+	97,  // 23: csi.v1.Topology.segments:type_name -> csi.v1.Topology.SegmentsEntry
+	98,  // 24: csi.v1.DeleteVolumeRequest.secrets:type_name -> csi.v1.DeleteVolumeRequest.SecretsEntry
+	18,  // 25: csi.v1.ControllerPublishVolumeRequest.volume_capability:type_name -> csi.v1.VolumeCapability
+	99,  // 26: csi.v1.ControllerPublishVolumeRequest.secrets:type_name -> csi.v1.ControllerPublishVolumeRequest.SecretsEntry
+	100, // 27: csi.v1.ControllerPublishVolumeRequest.volume_context:type_name -> csi.v1.ControllerPublishVolumeRequest.VolumeContextEntry
+	101, // 28: csi.v1.ControllerPublishVolumeResponse.publish_context:type_name -> csi.v1.ControllerPublishVolumeResponse.PublishContextEntry
+	102, // 29: csi.v1.ControllerUnpublishVolumeRequest.secrets:type_name -> csi.v1.ControllerUnpublishVolumeRequest.SecretsEntry
+	103, // 30: csi.v1.ValidateVolumeCapabilitiesRequest.volume_context:type_name -> csi.v1.ValidateVolumeCapabilitiesRequest.VolumeContextEntry
+	18,  // 31: csi.v1.ValidateVolumeCapabilitiesRequest.volume_capabilities:type_name -> csi.v1.VolumeCapability
+	104, // 32: csi.v1.ValidateVolumeCapabilitiesRequest.parameters:type_name -> csi.v1.ValidateVolumeCapabilitiesRequest.ParametersEntry
+	105, // 33: csi.v1.ValidateVolumeCapabilitiesRequest.secrets:type_name -> csi.v1.ValidateVolumeCapabilitiesRequest.SecretsEntry
+	106, // 34: csi.v1.ValidateVolumeCapabilitiesRequest.mutable_parameters:type_name -> csi.v1.ValidateVolumeCapabilitiesRequest.MutableParametersEntry
+	107, // 35: csi.v1.ValidateVolumeCapabilitiesResponse.confirmed:type_name -> csi.v1.ValidateVolumeCapabilitiesResponse.Confirmed
+	112, // 36: csi.v1.ListVolumesResponse.entries:type_name -> csi.v1.ListVolumesResponse.Entry
+	20,  // 37: csi.v1.ControllerGetVolumeResponse.volume:type_name -> csi.v1.Volume
+	113, // 38: csi.v1.ControllerGetVolumeResponse.status:type_name -> csi.v1.ControllerGetVolumeResponse.VolumeStatus
+	114, // 39: csi.v1.ControllerModifyVolumeRequest.secrets:type_name -> csi.v1.ControllerModifyVolumeRequest.SecretsEntry
+	115, // 40: csi.v1.ControllerModifyVolumeRequest.mutable_parameters:type_name -> csi.v1.ControllerModifyVolumeRequest.MutableParametersEntry
+	18,  // 41: csi.v1.GetCapacityRequest.volume_capabilities:type_name -> csi.v1.VolumeCapability
+	116, // 42: csi.v1.GetCapacityRequest.parameters:type_name -> csi.v1.GetCapacityRequest.ParametersEntry
+	22,  // 43: csi.v1.GetCapacityRequest.accessible_topology:type_name -> csi.v1.Topology
+	140, // 44: csi.v1.GetCapacityResponse.maximum_volume_size:type_name -> google.protobuf.Int64Value
+	140, // 45: csi.v1.GetCapacityResponse.minimum_volume_size:type_name -> google.protobuf.Int64Value
+	41,  // 46: csi.v1.ControllerGetCapabilitiesResponse.capabilities:type_name -> csi.v1.ControllerServiceCapability
+	117, // 47: csi.v1.ControllerServiceCapability.rpc:type_name -> csi.v1.ControllerServiceCapability.RPC
+	118, // 48: csi.v1.CreateSnapshotRequest.secrets:type_name -> csi.v1.CreateSnapshotRequest.SecretsEntry
+	119, // 49: csi.v1.CreateSnapshotRequest.parameters:type_name -> csi.v1.CreateSnapshotRequest.ParametersEntry
+	44,  // 50: csi.v1.CreateSnapshotResponse.snapshot:type_name -> csi.v1.Snapshot
+	141, // 51: csi.v1.Snapshot.creation_time:type_name -> google.protobuf.Timestamp
+	120, // 52: csi.v1.DeleteSnapshotRequest.secrets:type_name -> csi.v1.DeleteSnapshotRequest.SecretsEntry
+	121, // 53: csi.v1.ListSnapshotsRequest.secrets:type_name -> csi.v1.ListSnapshotsRequest.SecretsEntry
+	122, // 54: csi.v1.ListSnapshotsResponse.entries:type_name -> csi.v1.ListSnapshotsResponse.Entry
+	19,  // 55: csi.v1.ControllerExpandVolumeRequest.capacity_range:type_name -> csi.v1.CapacityRange
+	123, // 56: csi.v1.ControllerExpandVolumeRequest.secrets:type_name -> csi.v1.ControllerExpandVolumeRequest.SecretsEntry
+	18,  // 57: csi.v1.ControllerExpandVolumeRequest.volume_capability:type_name -> csi.v1.VolumeCapability
+	124, // 58: csi.v1.NodeStageVolumeRequest.publish_context:type_name -> csi.v1.NodeStageVolumeRequest.PublishContextEntry
+	18,  // 59: csi.v1.NodeStageVolumeRequest.volume_capability:type_name -> csi.v1.VolumeCapability
+	125, // 60: csi.v1.NodeStageVolumeRequest.secrets:type_name -> csi.v1.NodeStageVolumeRequest.SecretsEntry
+	126, // 61: csi.v1.NodeStageVolumeRequest.volume_context:type_name -> csi.v1.NodeStageVolumeRequest.VolumeContextEntry
+	127, // 62: csi.v1.NodePublishVolumeRequest.publish_context:type_name -> csi.v1.NodePublishVolumeRequest.PublishContextEntry
+	18,  // 63: csi.v1.NodePublishVolumeRequest.volume_capability:type_name -> csi.v1.VolumeCapability
+	128, // 64: csi.v1.NodePublishVolumeRequest.secrets:type_name -> csi.v1.NodePublishVolumeRequest.SecretsEntry
+	129, // 65: csi.v1.NodePublishVolumeRequest.volume_context:type_name -> csi.v1.NodePublishVolumeRequest.VolumeContextEntry
+	61,  // 66: csi.v1.NodeGetVolumeStatsResponse.usage:type_name -> csi.v1.VolumeUsage
+	62,  // 67: csi.v1.NodeGetVolumeStatsResponse.volume_condition:type_name -> csi.v1.VolumeCondition
+	5,   // 68: csi.v1.VolumeUsage.unit:type_name -> csi.v1.VolumeUsage.Unit
+	65,  // 69: csi.v1.NodeGetCapabilitiesResponse.capabilities:type_name -> csi.v1.NodeServiceCapability
+	130, // 70: csi.v1.NodeServiceCapability.rpc:type_name -> csi.v1.NodeServiceCapability.RPC
+	22,  // 71: csi.v1.NodeGetInfoResponse.accessible_topology:type_name -> csi.v1.Topology
+	19,  // 72: csi.v1.NodeExpandVolumeRequest.capacity_range:type_name -> csi.v1.CapacityRange
+	18,  // 73: csi.v1.NodeExpandVolumeRequest.volume_capability:type_name -> csi.v1.VolumeCapability
+	131, // 74: csi.v1.NodeExpandVolumeRequest.secrets:type_name -> csi.v1.NodeExpandVolumeRequest.SecretsEntry
+	72,  // 75: csi.v1.GroupControllerGetCapabilitiesResponse.capabilities:type_name -> csi.v1.GroupControllerServiceCapability
+	132, // 76: csi.v1.GroupControllerServiceCapability.rpc:type_name -> csi.v1.GroupControllerServiceCapability.RPC
+	133, // 77: csi.v1.CreateVolumeGroupSnapshotRequest.secrets:type_name -> csi.v1.CreateVolumeGroupSnapshotRequest.SecretsEntry
+	134, // 78: csi.v1.CreateVolumeGroupSnapshotRequest.parameters:type_name -> csi.v1.CreateVolumeGroupSnapshotRequest.ParametersEntry
+	75,  // 79: csi.v1.CreateVolumeGroupSnapshotResponse.group_snapshot:type_name -> csi.v1.VolumeGroupSnapshot
+	44,  // 80: csi.v1.VolumeGroupSnapshot.snapshots:type_name -> csi.v1.Snapshot
+	141, // 81: csi.v1.VolumeGroupSnapshot.creation_time:type_name -> google.protobuf.Timestamp
+	135, // 82: csi.v1.DeleteVolumeGroupSnapshotRequest.secrets:type_name -> csi.v1.DeleteVolumeGroupSnapshotRequest.SecretsEntry
+	136, // 83: csi.v1.GetVolumeGroupSnapshotRequest.secrets:type_name -> csi.v1.GetVolumeGroupSnapshotRequest.SecretsEntry
+	75,  // 84: csi.v1.GetVolumeGroupSnapshotResponse.group_snapshot:type_name -> csi.v1.VolumeGroupSnapshot
+	137, // 85: csi.v1.GetMetadataAllocatedRequest.secrets:type_name -> csi.v1.GetMetadataAllocatedRequest.SecretsEntry
+	0,   // 86: csi.v1.GetMetadataAllocatedResponse.block_metadata_type:type_name -> csi.v1.BlockMetadataType
+	80,  // 87: csi.v1.GetMetadataAllocatedResponse.block_metadata:type_name -> csi.v1.BlockMetadata
+	138, // 88: csi.v1.GetMetadataDeltaRequest.secrets:type_name -> csi.v1.GetMetadataDeltaRequest.SecretsEntry
+	0,   // 89: csi.v1.GetMetadataDeltaResponse.block_metadata_type:type_name -> csi.v1.BlockMetadataType
+	80,  // 90: csi.v1.GetMetadataDeltaResponse.block_metadata:type_name -> csi.v1.BlockMetadata
+	1,   // 91: csi.v1.PluginCapability.Service.type:type_name -> csi.v1.PluginCapability.Service.Type
+	2,   // 92: csi.v1.PluginCapability.VolumeExpansion.type:type_name -> csi.v1.PluginCapability.VolumeExpansion.Type
+	3,   // 93: csi.v1.VolumeCapability.AccessMode.mode:type_name -> csi.v1.VolumeCapability.AccessMode.Mode
+	108, // 94: csi.v1.ValidateVolumeCapabilitiesResponse.Confirmed.volume_context:type_name -> csi.v1.ValidateVolumeCapabilitiesResponse.Confirmed.VolumeContextEntry
+	18,  // 95: csi.v1.ValidateVolumeCapabilitiesResponse.Confirmed.volume_capabilities:type_name -> csi.v1.VolumeCapability
+	109, // 96: csi.v1.ValidateVolumeCapabilitiesResponse.Confirmed.parameters:type_name -> csi.v1.ValidateVolumeCapabilitiesResponse.Confirmed.ParametersEntry
+	110, // 97: csi.v1.ValidateVolumeCapabilitiesResponse.Confirmed.mutable_parameters:type_name -> csi.v1.ValidateVolumeCapabilitiesResponse.Confirmed.MutableParametersEntry
+	62,  // 98: csi.v1.ListVolumesResponse.VolumeStatus.volume_condition:type_name -> csi.v1.VolumeCondition
+	20,  // 99: csi.v1.ListVolumesResponse.Entry.volume:type_name -> csi.v1.Volume
+	111, // 100: csi.v1.ListVolumesResponse.Entry.status:type_name -> csi.v1.ListVolumesResponse.VolumeStatus
+	62,  // 101: csi.v1.ControllerGetVolumeResponse.VolumeStatus.volume_condition:type_name -> csi.v1.VolumeCondition
+	4,   // 102: csi.v1.ControllerServiceCapability.RPC.type:type_name -> csi.v1.ControllerServiceCapability.RPC.Type
+	44,  // 103: csi.v1.ListSnapshotsResponse.Entry.snapshot:type_name -> csi.v1.Snapshot
+	6,   // 104: csi.v1.NodeServiceCapability.RPC.type:type_name -> csi.v1.NodeServiceCapability.RPC.Type
+	7,   // 105: csi.v1.GroupControllerServiceCapability.RPC.type:type_name -> csi.v1.GroupControllerServiceCapability.RPC.Type
+	142, // 106: csi.v1.alpha_enum:extendee -> google.protobuf.EnumOptions
+	143, // 107: csi.v1.alpha_enum_value:extendee -> google.protobuf.EnumValueOptions
+	144, // 108: csi.v1.csi_secret:extendee -> google.protobuf.FieldOptions
+	144, // 109: csi.v1.alpha_field:extendee -> google.protobuf.FieldOptions
+	145, // 110: csi.v1.alpha_message:extendee -> google.protobuf.MessageOptions
+	146, // 111: csi.v1.alpha_method:extendee -> google.protobuf.MethodOptions
+	147, // 112: csi.v1.alpha_service:extendee -> google.protobuf.ServiceOptions
+	8,   // 113: csi.v1.Identity.GetPluginInfo:input_type -> csi.v1.GetPluginInfoRequest
+	10,  // 114: csi.v1.Identity.GetPluginCapabilities:input_type -> csi.v1.GetPluginCapabilitiesRequest
+	13,  // 115: csi.v1.Identity.Probe:input_type -> csi.v1.ProbeRequest
+	15,  // 116: csi.v1.Controller.CreateVolume:input_type -> csi.v1.CreateVolumeRequest
+	23,  // 117: csi.v1.Controller.DeleteVolume:input_type -> csi.v1.DeleteVolumeRequest
+	25,  // 118: csi.v1.Controller.ControllerPublishVolume:input_type -> csi.v1.ControllerPublishVolumeRequest
+	27,  // 119: csi.v1.Controller.ControllerUnpublishVolume:input_type -> csi.v1.ControllerUnpublishVolumeRequest
+	29,  // 120: csi.v1.Controller.ValidateVolumeCapabilities:input_type -> csi.v1.ValidateVolumeCapabilitiesRequest
+	31,  // 121: csi.v1.Controller.ListVolumes:input_type -> csi.v1.ListVolumesRequest
+	37,  // 122: csi.v1.Controller.GetCapacity:input_type -> csi.v1.GetCapacityRequest
+	39,  // 123: csi.v1.Controller.ControllerGetCapabilities:input_type -> csi.v1.ControllerGetCapabilitiesRequest
+	42,  // 124: csi.v1.Controller.CreateSnapshot:input_type -> csi.v1.CreateSnapshotRequest
+	45,  // 125: csi.v1.Controller.DeleteSnapshot:input_type -> csi.v1.DeleteSnapshotRequest
+	47,  // 126: csi.v1.Controller.ListSnapshots:input_type -> csi.v1.ListSnapshotsRequest
+	49,  // 127: csi.v1.Controller.ControllerExpandVolume:input_type -> csi.v1.ControllerExpandVolumeRequest
+	33,  // 128: csi.v1.Controller.ControllerGetVolume:input_type -> csi.v1.ControllerGetVolumeRequest
+	35,  // 129: csi.v1.Controller.ControllerModifyVolume:input_type -> csi.v1.ControllerModifyVolumeRequest
+	70,  // 130: csi.v1.GroupController.GroupControllerGetCapabilities:input_type -> csi.v1.GroupControllerGetCapabilitiesRequest
+	73,  // 131: csi.v1.GroupController.CreateVolumeGroupSnapshot:input_type -> csi.v1.CreateVolumeGroupSnapshotRequest
+	76,  // 132: csi.v1.GroupController.DeleteVolumeGroupSnapshot:input_type -> csi.v1.DeleteVolumeGroupSnapshotRequest
+	78,  // 133: csi.v1.GroupController.GetVolumeGroupSnapshot:input_type -> csi.v1.GetVolumeGroupSnapshotRequest
+	81,  // 134: csi.v1.SnapshotMetadata.GetMetadataAllocated:input_type -> csi.v1.GetMetadataAllocatedRequest
+	83,  // 135: csi.v1.SnapshotMetadata.GetMetadataDelta:input_type -> csi.v1.GetMetadataDeltaRequest
+	51,  // 136: csi.v1.Node.NodeStageVolume:input_type -> csi.v1.NodeStageVolumeRequest
+	53,  // 137: csi.v1.Node.NodeUnstageVolume:input_type -> csi.v1.NodeUnstageVolumeRequest
+	55,  // 138: csi.v1.Node.NodePublishVolume:input_type -> csi.v1.NodePublishVolumeRequest
+	57,  // 139: csi.v1.Node.NodeUnpublishVolume:input_type -> csi.v1.NodeUnpublishVolumeRequest
+	59,  // 140: csi.v1.Node.NodeGetVolumeStats:input_type -> csi.v1.NodeGetVolumeStatsRequest
+	68,  // 141: csi.v1.Node.NodeExpandVolume:input_type -> csi.v1.NodeExpandVolumeRequest
+	63,  // 142: csi.v1.Node.NodeGetCapabilities:input_type -> csi.v1.NodeGetCapabilitiesRequest
+	66,  // 143: csi.v1.Node.NodeGetInfo:input_type -> csi.v1.NodeGetInfoRequest
+	9,   // 144: csi.v1.Identity.GetPluginInfo:output_type -> csi.v1.GetPluginInfoResponse
+	11,  // 145: csi.v1.Identity.GetPluginCapabilities:output_type -> csi.v1.GetPluginCapabilitiesResponse
+	14,  // 146: csi.v1.Identity.Probe:output_type -> csi.v1.ProbeResponse
+	17,  // 147: csi.v1.Controller.CreateVolume:output_type -> csi.v1.CreateVolumeResponse
+	24,  // 148: csi.v1.Controller.DeleteVolume:output_type -> csi.v1.DeleteVolumeResponse
+	26,  // 149: csi.v1.Controller.ControllerPublishVolume:output_type -> csi.v1.ControllerPublishVolumeResponse
+	28,  // 150: csi.v1.Controller.ControllerUnpublishVolume:output_type -> csi.v1.ControllerUnpublishVolumeResponse
+	30,  // 151: csi.v1.Controller.ValidateVolumeCapabilities:output_type -> csi.v1.ValidateVolumeCapabilitiesResponse
+	32,  // 152: csi.v1.Controller.ListVolumes:output_type -> csi.v1.ListVolumesResponse
+	38,  // 153: csi.v1.Controller.GetCapacity:output_type -> csi.v1.GetCapacityResponse
+	40,  // 154: csi.v1.Controller.ControllerGetCapabilities:output_type -> csi.v1.ControllerGetCapabilitiesResponse
+	43,  // 155: csi.v1.Controller.CreateSnapshot:output_type -> csi.v1.CreateSnapshotResponse
+	46,  // 156: csi.v1.Controller.DeleteSnapshot:output_type -> csi.v1.DeleteSnapshotResponse
+	48,  // 157: csi.v1.Controller.ListSnapshots:output_type -> csi.v1.ListSnapshotsResponse
+	50,  // 158: csi.v1.Controller.ControllerExpandVolume:output_type -> csi.v1.ControllerExpandVolumeResponse
+	34,  // 159: csi.v1.Controller.ControllerGetVolume:output_type -> csi.v1.ControllerGetVolumeResponse
+	36,  // 160: csi.v1.Controller.ControllerModifyVolume:output_type -> csi.v1.ControllerModifyVolumeResponse
+	71,  // 161: csi.v1.GroupController.GroupControllerGetCapabilities:output_type -> csi.v1.GroupControllerGetCapabilitiesResponse
+	74,  // 162: csi.v1.GroupController.CreateVolumeGroupSnapshot:output_type -> csi.v1.CreateVolumeGroupSnapshotResponse
+	77,  // 163: csi.v1.GroupController.DeleteVolumeGroupSnapshot:output_type -> csi.v1.DeleteVolumeGroupSnapshotResponse
+	79,  // 164: csi.v1.GroupController.GetVolumeGroupSnapshot:output_type -> csi.v1.GetVolumeGroupSnapshotResponse
+	82,  // 165: csi.v1.SnapshotMetadata.GetMetadataAllocated:output_type -> csi.v1.GetMetadataAllocatedResponse
+	84,  // 166: csi.v1.SnapshotMetadata.GetMetadataDelta:output_type -> csi.v1.GetMetadataDeltaResponse
+	52,  // 167: csi.v1.Node.NodeStageVolume:output_type -> csi.v1.NodeStageVolumeResponse
+	54,  // 168: csi.v1.Node.NodeUnstageVolume:output_type -> csi.v1.NodeUnstageVolumeResponse
+	56,  // 169: csi.v1.Node.NodePublishVolume:output_type -> csi.v1.NodePublishVolumeResponse
+	58,  // 170: csi.v1.Node.NodeUnpublishVolume:output_type -> csi.v1.NodeUnpublishVolumeResponse
+	60,  // 171: csi.v1.Node.NodeGetVolumeStats:output_type -> csi.v1.NodeGetVolumeStatsResponse
+	69,  // 172: csi.v1.Node.NodeExpandVolume:output_type -> csi.v1.NodeExpandVolumeResponse
+	64,  // 173: csi.v1.Node.NodeGetCapabilities:output_type -> csi.v1.NodeGetCapabilitiesResponse
+	67,  // 174: csi.v1.Node.NodeGetInfo:output_type -> csi.v1.NodeGetInfoResponse
+	144, // [144:175] is the sub-list for method output_type
+	113, // [113:144] is the sub-list for method input_type
+	113, // [113:113] is the sub-list for extension type_name
+	106, // [106:113] is the sub-list for extension extendee
+	0,   // [0:106] is the sub-list for field type_name
+}
+
+func init() { file_csi_proto_init() }
+func file_csi_proto_init() {
+	if File_csi_proto != nil {
+		return
+	}
+	file_csi_proto_msgTypes[4].OneofWrappers = []any{
+		(*pluginCapability_Service_)(nil),
+		(*pluginCapability_VolumeExpansion_)(nil),
+	}
+	file_csi_proto_msgTypes[8].OneofWrappers = []any{
+		(*volumeContentSource_Snapshot)(nil),
+		(*volumeContentSource_Volume)(nil),
+	}
+	file_csi_proto_msgTypes[10].OneofWrappers = []any{
+		(*volumeCapability_Block)(nil),
+		(*volumeCapability_Mount)(nil),
+	}
+	file_csi_proto_msgTypes[33].OneofWrappers = []any{
+		(*controllerServiceCapability_Rpc)(nil),
+	}
+	file_csi_proto_msgTypes[57].OneofWrappers = []any{
+		(*nodeServiceCapability_Rpc)(nil),
+	}
+	file_csi_proto_msgTypes[64].OneofWrappers = []any{
+		(*groupControllerServiceCapability_Rpc)(nil),
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_csi_proto_rawDesc,
+			NumEnums:      8,
+			NumMessages:   131,
+			NumExtensions: 7,
+			NumServices:   5,
+		},
+		GoTypes:           file_csi_proto_goTypes,
+		DependencyIndexes: file_csi_proto_depIdxs,
+		EnumInfos:         file_csi_proto_enumTypes,
+		MessageInfos:      file_csi_proto_msgTypes,
+		ExtensionInfos:    file_csi_proto_extTypes,
+	}.Build()
+	File_csi_proto = out.File
+	file_csi_proto_rawDesc = nil
+	file_csi_proto_goTypes = nil
+	file_csi_proto_depIdxs = nil
+}