From def7b0fef8d08a22a95da390adaf48d4d6971bd1 Mon Sep 17 00:00:00 2001 From: James DeFelice Date: Fri, 16 Feb 2018 12:04:55 +0000 Subject: [PATCH 1/7] spec: proto package incorporates major version --- csi.proto | 4 +++- spec.md | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/csi.proto b/csi.proto index 61bfbc85..7df32324 100644 --- a/csi.proto +++ b/csi.proto @@ -1,6 +1,8 @@ //////// syntax = "proto3"; -package csi; +package csi.v1; + +option go_package = "csi"; //////// //////// service Identity { diff --git a/spec.md b/spec.md index a73169f6..12ab8218 100644 --- a/spec.md +++ b/spec.md @@ -270,7 +270,9 @@ Each SP MUST provide: ```protobuf syntax = "proto3"; -package csi; +package csi.v1; + +option go_package = "csi"; ``` There are three sets of RPCs: From a34b558e6f6573168a1eb9e28436a1455652d129 Mon Sep 17 00:00:00 2001 From: James DeFelice Date: Fri, 16 Feb 2018 12:06:20 +0000 Subject: [PATCH 2/7] lib/go: generate bindings into versioned package structure --- lib/go/Makefile | 11 +- lib/go/csi/{ => v1}/csi.pb.go | 492 +++++++++++++++++----------------- 2 files changed, 253 insertions(+), 250 deletions(-) rename lib/go/csi/{ => v1}/csi.pb.go (82%) diff --git a/lib/go/Makefile b/lib/go/Makefile index 552175ff..3af5de2b 100644 --- a/lib/go/Makefile +++ b/lib/go/Makefile @@ -76,10 +76,11 @@ export PATH := $(shell pwd):$(PATH) ######################################################################## ## BUILD ## ######################################################################## -CSI_GO := csi/csi.pb.go -CSI_A := csi.a CSI_PROTO := ../../csi.proto -CSI_GO_TMP := csi/.build/csi.pb.go +CSI_PKG := $(shell cat $(CSI_PROTO) | sed -n -e 's/^package.\([^;]*\);$$/\1/p'|tr '.' '/') +CSI_GO := $(CSI_PKG)/csi.pb.go +CSI_A := csi.a +CSI_GO_TMP := $(CSI_PKG)/.build/csi.pb.go # This recipe generates the go language bindings to a temp area. $(CSI_GO_TMP): $(CSI_PROTO) | $(PROTOC) $(PROTOC_GEN_GO) @@ -104,8 +105,8 @@ endif # 3. Build the archive file. $(CSI_A): $(CSI_GO) go get -d ./... - go install ./csi - go build -o "$@" ./csi + go install ./$(CSI_PKG) + go build -o "$@" ./$(CSI_PKG) build: $(CSI_A) diff --git a/lib/go/csi/csi.pb.go b/lib/go/csi/v1/csi.pb.go similarity index 82% rename from lib/go/csi/csi.pb.go rename to lib/go/csi/v1/csi.pb.go index 99710211..07ca8566 100644 --- a/lib/go/csi/csi.pb.go +++ b/lib/go/csi/v1/csi.pb.go @@ -458,7 +458,7 @@ func _PluginCapability_OneofSizer(msg proto.Message) (n int) { } type PluginCapability_Service struct { - Type PluginCapability_Service_Type `protobuf:"varint,1,opt,name=type,enum=csi.PluginCapability_Service_Type" json:"type,omitempty"` + Type PluginCapability_Service_Type `protobuf:"varint,1,opt,name=type,enum=csi.v1.PluginCapability_Service_Type" json:"type,omitempty"` } func (m *PluginCapability_Service) Reset() { *m = PluginCapability_Service{} } @@ -800,7 +800,7 @@ func (m *VolumeCapability_MountVolume) GetMountFlags() []string { // Specify how a volume can be accessed. type VolumeCapability_AccessMode struct { // This field is REQUIRED. - Mode VolumeCapability_AccessMode_Mode `protobuf:"varint,1,opt,name=mode,enum=csi.VolumeCapability_AccessMode_Mode" json:"mode,omitempty"` + Mode VolumeCapability_AccessMode_Mode `protobuf:"varint,1,opt,name=mode,enum=csi.v1.VolumeCapability_AccessMode_Mode" json:"mode,omitempty"` } func (m *VolumeCapability_AccessMode) Reset() { *m = VolumeCapability_AccessMode{} } @@ -1509,7 +1509,7 @@ func _ControllerServiceCapability_OneofSizer(msg proto.Message) (n int) { } type ControllerServiceCapability_RPC struct { - Type ControllerServiceCapability_RPC_Type `protobuf:"varint,1,opt,name=type,enum=csi.ControllerServiceCapability_RPC_Type" json:"type,omitempty"` + Type ControllerServiceCapability_RPC_Type `protobuf:"varint,1,opt,name=type,enum=csi.v1.ControllerServiceCapability_RPC_Type" json:"type,omitempty"` } func (m *ControllerServiceCapability_RPC) Reset() { *m = ControllerServiceCapability_RPC{} } @@ -2054,7 +2054,7 @@ func _NodeServiceCapability_OneofSizer(msg proto.Message) (n int) { } type NodeServiceCapability_RPC struct { - Type NodeServiceCapability_RPC_Type `protobuf:"varint,1,opt,name=type,enum=csi.NodeServiceCapability_RPC_Type" json:"type,omitempty"` + Type NodeServiceCapability_RPC_Type `protobuf:"varint,1,opt,name=type,enum=csi.v1.NodeServiceCapability_RPC_Type" json:"type,omitempty"` } func (m *NodeServiceCapability_RPC) Reset() { *m = NodeServiceCapability_RPC{} } @@ -2070,60 +2070,60 @@ func (m *NodeServiceCapability_RPC) GetType() NodeServiceCapability_RPC_Type { } func init() { - proto.RegisterType((*GetSupportedVersionsRequest)(nil), "csi.GetSupportedVersionsRequest") - proto.RegisterType((*GetSupportedVersionsResponse)(nil), "csi.GetSupportedVersionsResponse") - proto.RegisterType((*Version)(nil), "csi.Version") - proto.RegisterType((*GetPluginInfoRequest)(nil), "csi.GetPluginInfoRequest") - proto.RegisterType((*GetPluginInfoResponse)(nil), "csi.GetPluginInfoResponse") - proto.RegisterType((*GetPluginCapabilitiesRequest)(nil), "csi.GetPluginCapabilitiesRequest") - proto.RegisterType((*GetPluginCapabilitiesResponse)(nil), "csi.GetPluginCapabilitiesResponse") - proto.RegisterType((*PluginCapability)(nil), "csi.PluginCapability") - proto.RegisterType((*PluginCapability_Service)(nil), "csi.PluginCapability.Service") - proto.RegisterType((*ProbeRequest)(nil), "csi.ProbeRequest") - proto.RegisterType((*ProbeResponse)(nil), "csi.ProbeResponse") - proto.RegisterType((*CreateVolumeRequest)(nil), "csi.CreateVolumeRequest") - proto.RegisterType((*CreateVolumeResponse)(nil), "csi.CreateVolumeResponse") - proto.RegisterType((*VolumeCapability)(nil), "csi.VolumeCapability") - proto.RegisterType((*VolumeCapability_BlockVolume)(nil), "csi.VolumeCapability.BlockVolume") - proto.RegisterType((*VolumeCapability_MountVolume)(nil), "csi.VolumeCapability.MountVolume") - proto.RegisterType((*VolumeCapability_AccessMode)(nil), "csi.VolumeCapability.AccessMode") - proto.RegisterType((*CapacityRange)(nil), "csi.CapacityRange") - proto.RegisterType((*Volume)(nil), "csi.Volume") - proto.RegisterType((*DeleteVolumeRequest)(nil), "csi.DeleteVolumeRequest") - proto.RegisterType((*DeleteVolumeResponse)(nil), "csi.DeleteVolumeResponse") - proto.RegisterType((*ControllerPublishVolumeRequest)(nil), "csi.ControllerPublishVolumeRequest") - proto.RegisterType((*ControllerPublishVolumeResponse)(nil), "csi.ControllerPublishVolumeResponse") - proto.RegisterType((*ControllerUnpublishVolumeRequest)(nil), "csi.ControllerUnpublishVolumeRequest") - proto.RegisterType((*ControllerUnpublishVolumeResponse)(nil), "csi.ControllerUnpublishVolumeResponse") - proto.RegisterType((*ValidateVolumeCapabilitiesRequest)(nil), "csi.ValidateVolumeCapabilitiesRequest") - proto.RegisterType((*ValidateVolumeCapabilitiesResponse)(nil), "csi.ValidateVolumeCapabilitiesResponse") - proto.RegisterType((*ListVolumesRequest)(nil), "csi.ListVolumesRequest") - proto.RegisterType((*ListVolumesResponse)(nil), "csi.ListVolumesResponse") - proto.RegisterType((*ListVolumesResponse_Entry)(nil), "csi.ListVolumesResponse.Entry") - proto.RegisterType((*GetCapacityRequest)(nil), "csi.GetCapacityRequest") - proto.RegisterType((*GetCapacityResponse)(nil), "csi.GetCapacityResponse") - proto.RegisterType((*ControllerGetCapabilitiesRequest)(nil), "csi.ControllerGetCapabilitiesRequest") - proto.RegisterType((*ControllerGetCapabilitiesResponse)(nil), "csi.ControllerGetCapabilitiesResponse") - proto.RegisterType((*ControllerServiceCapability)(nil), "csi.ControllerServiceCapability") - proto.RegisterType((*ControllerServiceCapability_RPC)(nil), "csi.ControllerServiceCapability.RPC") - proto.RegisterType((*NodeStageVolumeRequest)(nil), "csi.NodeStageVolumeRequest") - proto.RegisterType((*NodeStageVolumeResponse)(nil), "csi.NodeStageVolumeResponse") - proto.RegisterType((*NodeUnstageVolumeRequest)(nil), "csi.NodeUnstageVolumeRequest") - proto.RegisterType((*NodeUnstageVolumeResponse)(nil), "csi.NodeUnstageVolumeResponse") - proto.RegisterType((*NodePublishVolumeRequest)(nil), "csi.NodePublishVolumeRequest") - proto.RegisterType((*NodePublishVolumeResponse)(nil), "csi.NodePublishVolumeResponse") - proto.RegisterType((*NodeUnpublishVolumeRequest)(nil), "csi.NodeUnpublishVolumeRequest") - proto.RegisterType((*NodeUnpublishVolumeResponse)(nil), "csi.NodeUnpublishVolumeResponse") - proto.RegisterType((*NodeGetIdRequest)(nil), "csi.NodeGetIdRequest") - proto.RegisterType((*NodeGetIdResponse)(nil), "csi.NodeGetIdResponse") - proto.RegisterType((*NodeGetCapabilitiesRequest)(nil), "csi.NodeGetCapabilitiesRequest") - proto.RegisterType((*NodeGetCapabilitiesResponse)(nil), "csi.NodeGetCapabilitiesResponse") - proto.RegisterType((*NodeServiceCapability)(nil), "csi.NodeServiceCapability") - proto.RegisterType((*NodeServiceCapability_RPC)(nil), "csi.NodeServiceCapability.RPC") - proto.RegisterEnum("csi.PluginCapability_Service_Type", PluginCapability_Service_Type_name, PluginCapability_Service_Type_value) - proto.RegisterEnum("csi.VolumeCapability_AccessMode_Mode", VolumeCapability_AccessMode_Mode_name, VolumeCapability_AccessMode_Mode_value) - proto.RegisterEnum("csi.ControllerServiceCapability_RPC_Type", ControllerServiceCapability_RPC_Type_name, ControllerServiceCapability_RPC_Type_value) - proto.RegisterEnum("csi.NodeServiceCapability_RPC_Type", NodeServiceCapability_RPC_Type_name, NodeServiceCapability_RPC_Type_value) + proto.RegisterType((*GetSupportedVersionsRequest)(nil), "csi.v1.GetSupportedVersionsRequest") + proto.RegisterType((*GetSupportedVersionsResponse)(nil), "csi.v1.GetSupportedVersionsResponse") + proto.RegisterType((*Version)(nil), "csi.v1.Version") + proto.RegisterType((*GetPluginInfoRequest)(nil), "csi.v1.GetPluginInfoRequest") + proto.RegisterType((*GetPluginInfoResponse)(nil), "csi.v1.GetPluginInfoResponse") + proto.RegisterType((*GetPluginCapabilitiesRequest)(nil), "csi.v1.GetPluginCapabilitiesRequest") + proto.RegisterType((*GetPluginCapabilitiesResponse)(nil), "csi.v1.GetPluginCapabilitiesResponse") + proto.RegisterType((*PluginCapability)(nil), "csi.v1.PluginCapability") + proto.RegisterType((*PluginCapability_Service)(nil), "csi.v1.PluginCapability.Service") + proto.RegisterType((*ProbeRequest)(nil), "csi.v1.ProbeRequest") + proto.RegisterType((*ProbeResponse)(nil), "csi.v1.ProbeResponse") + proto.RegisterType((*CreateVolumeRequest)(nil), "csi.v1.CreateVolumeRequest") + proto.RegisterType((*CreateVolumeResponse)(nil), "csi.v1.CreateVolumeResponse") + proto.RegisterType((*VolumeCapability)(nil), "csi.v1.VolumeCapability") + proto.RegisterType((*VolumeCapability_BlockVolume)(nil), "csi.v1.VolumeCapability.BlockVolume") + proto.RegisterType((*VolumeCapability_MountVolume)(nil), "csi.v1.VolumeCapability.MountVolume") + proto.RegisterType((*VolumeCapability_AccessMode)(nil), "csi.v1.VolumeCapability.AccessMode") + proto.RegisterType((*CapacityRange)(nil), "csi.v1.CapacityRange") + proto.RegisterType((*Volume)(nil), "csi.v1.Volume") + proto.RegisterType((*DeleteVolumeRequest)(nil), "csi.v1.DeleteVolumeRequest") + proto.RegisterType((*DeleteVolumeResponse)(nil), "csi.v1.DeleteVolumeResponse") + proto.RegisterType((*ControllerPublishVolumeRequest)(nil), "csi.v1.ControllerPublishVolumeRequest") + proto.RegisterType((*ControllerPublishVolumeResponse)(nil), "csi.v1.ControllerPublishVolumeResponse") + proto.RegisterType((*ControllerUnpublishVolumeRequest)(nil), "csi.v1.ControllerUnpublishVolumeRequest") + proto.RegisterType((*ControllerUnpublishVolumeResponse)(nil), "csi.v1.ControllerUnpublishVolumeResponse") + proto.RegisterType((*ValidateVolumeCapabilitiesRequest)(nil), "csi.v1.ValidateVolumeCapabilitiesRequest") + proto.RegisterType((*ValidateVolumeCapabilitiesResponse)(nil), "csi.v1.ValidateVolumeCapabilitiesResponse") + proto.RegisterType((*ListVolumesRequest)(nil), "csi.v1.ListVolumesRequest") + proto.RegisterType((*ListVolumesResponse)(nil), "csi.v1.ListVolumesResponse") + proto.RegisterType((*ListVolumesResponse_Entry)(nil), "csi.v1.ListVolumesResponse.Entry") + proto.RegisterType((*GetCapacityRequest)(nil), "csi.v1.GetCapacityRequest") + proto.RegisterType((*GetCapacityResponse)(nil), "csi.v1.GetCapacityResponse") + proto.RegisterType((*ControllerGetCapabilitiesRequest)(nil), "csi.v1.ControllerGetCapabilitiesRequest") + proto.RegisterType((*ControllerGetCapabilitiesResponse)(nil), "csi.v1.ControllerGetCapabilitiesResponse") + proto.RegisterType((*ControllerServiceCapability)(nil), "csi.v1.ControllerServiceCapability") + proto.RegisterType((*ControllerServiceCapability_RPC)(nil), "csi.v1.ControllerServiceCapability.RPC") + proto.RegisterType((*NodeStageVolumeRequest)(nil), "csi.v1.NodeStageVolumeRequest") + proto.RegisterType((*NodeStageVolumeResponse)(nil), "csi.v1.NodeStageVolumeResponse") + proto.RegisterType((*NodeUnstageVolumeRequest)(nil), "csi.v1.NodeUnstageVolumeRequest") + proto.RegisterType((*NodeUnstageVolumeResponse)(nil), "csi.v1.NodeUnstageVolumeResponse") + proto.RegisterType((*NodePublishVolumeRequest)(nil), "csi.v1.NodePublishVolumeRequest") + proto.RegisterType((*NodePublishVolumeResponse)(nil), "csi.v1.NodePublishVolumeResponse") + proto.RegisterType((*NodeUnpublishVolumeRequest)(nil), "csi.v1.NodeUnpublishVolumeRequest") + proto.RegisterType((*NodeUnpublishVolumeResponse)(nil), "csi.v1.NodeUnpublishVolumeResponse") + proto.RegisterType((*NodeGetIdRequest)(nil), "csi.v1.NodeGetIdRequest") + proto.RegisterType((*NodeGetIdResponse)(nil), "csi.v1.NodeGetIdResponse") + proto.RegisterType((*NodeGetCapabilitiesRequest)(nil), "csi.v1.NodeGetCapabilitiesRequest") + proto.RegisterType((*NodeGetCapabilitiesResponse)(nil), "csi.v1.NodeGetCapabilitiesResponse") + proto.RegisterType((*NodeServiceCapability)(nil), "csi.v1.NodeServiceCapability") + proto.RegisterType((*NodeServiceCapability_RPC)(nil), "csi.v1.NodeServiceCapability.RPC") + proto.RegisterEnum("csi.v1.PluginCapability_Service_Type", PluginCapability_Service_Type_name, PluginCapability_Service_Type_value) + proto.RegisterEnum("csi.v1.VolumeCapability_AccessMode_Mode", VolumeCapability_AccessMode_Mode_name, VolumeCapability_AccessMode_Mode_value) + proto.RegisterEnum("csi.v1.ControllerServiceCapability_RPC_Type", ControllerServiceCapability_RPC_Type_name, ControllerServiceCapability_RPC_Type_value) + proto.RegisterEnum("csi.v1.NodeServiceCapability_RPC_Type", NodeServiceCapability_RPC_Type_name, NodeServiceCapability_RPC_Type_value) } // Reference imports to suppress errors if they are not otherwise used. @@ -2153,7 +2153,7 @@ func NewIdentityClient(cc *grpc.ClientConn) IdentityClient { func (c *identityClient) GetSupportedVersions(ctx context.Context, in *GetSupportedVersionsRequest, opts ...grpc.CallOption) (*GetSupportedVersionsResponse, error) { out := new(GetSupportedVersionsResponse) - err := grpc.Invoke(ctx, "/csi.Identity/GetSupportedVersions", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/csi.v1.Identity/GetSupportedVersions", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -2162,7 +2162,7 @@ func (c *identityClient) GetSupportedVersions(ctx context.Context, in *GetSuppor func (c *identityClient) GetPluginInfo(ctx context.Context, in *GetPluginInfoRequest, opts ...grpc.CallOption) (*GetPluginInfoResponse, error) { out := new(GetPluginInfoResponse) - err := grpc.Invoke(ctx, "/csi.Identity/GetPluginInfo", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/csi.v1.Identity/GetPluginInfo", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -2171,7 +2171,7 @@ func (c *identityClient) GetPluginInfo(ctx context.Context, in *GetPluginInfoReq func (c *identityClient) GetPluginCapabilities(ctx context.Context, in *GetPluginCapabilitiesRequest, opts ...grpc.CallOption) (*GetPluginCapabilitiesResponse, error) { out := new(GetPluginCapabilitiesResponse) - err := grpc.Invoke(ctx, "/csi.Identity/GetPluginCapabilities", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/csi.v1.Identity/GetPluginCapabilities", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -2180,7 +2180,7 @@ func (c *identityClient) GetPluginCapabilities(ctx context.Context, in *GetPlugi func (c *identityClient) Probe(ctx context.Context, in *ProbeRequest, opts ...grpc.CallOption) (*ProbeResponse, error) { out := new(ProbeResponse) - err := grpc.Invoke(ctx, "/csi.Identity/Probe", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/csi.v1.Identity/Probe", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -2210,7 +2210,7 @@ func _Identity_GetSupportedVersions_Handler(srv interface{}, ctx context.Context } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/csi.Identity/GetSupportedVersions", + FullMethod: "/csi.v1.Identity/GetSupportedVersions", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(IdentityServer).GetSupportedVersions(ctx, req.(*GetSupportedVersionsRequest)) @@ -2228,7 +2228,7 @@ func _Identity_GetPluginInfo_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/csi.Identity/GetPluginInfo", + FullMethod: "/csi.v1.Identity/GetPluginInfo", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(IdentityServer).GetPluginInfo(ctx, req.(*GetPluginInfoRequest)) @@ -2246,7 +2246,7 @@ func _Identity_GetPluginCapabilities_Handler(srv interface{}, ctx context.Contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/csi.Identity/GetPluginCapabilities", + FullMethod: "/csi.v1.Identity/GetPluginCapabilities", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(IdentityServer).GetPluginCapabilities(ctx, req.(*GetPluginCapabilitiesRequest)) @@ -2264,7 +2264,7 @@ func _Identity_Probe_Handler(srv interface{}, ctx context.Context, dec func(inte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/csi.Identity/Probe", + FullMethod: "/csi.v1.Identity/Probe", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(IdentityServer).Probe(ctx, req.(*ProbeRequest)) @@ -2273,7 +2273,7 @@ func _Identity_Probe_Handler(srv interface{}, ctx context.Context, dec func(inte } var _Identity_serviceDesc = grpc.ServiceDesc{ - ServiceName: "csi.Identity", + ServiceName: "csi.v1.Identity", HandlerType: (*IdentityServer)(nil), Methods: []grpc.MethodDesc{ { @@ -2320,7 +2320,7 @@ func NewControllerClient(cc *grpc.ClientConn) ControllerClient { func (c *controllerClient) CreateVolume(ctx context.Context, in *CreateVolumeRequest, opts ...grpc.CallOption) (*CreateVolumeResponse, error) { out := new(CreateVolumeResponse) - err := grpc.Invoke(ctx, "/csi.Controller/CreateVolume", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/csi.v1.Controller/CreateVolume", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -2329,7 +2329,7 @@ func (c *controllerClient) CreateVolume(ctx context.Context, in *CreateVolumeReq func (c *controllerClient) DeleteVolume(ctx context.Context, in *DeleteVolumeRequest, opts ...grpc.CallOption) (*DeleteVolumeResponse, error) { out := new(DeleteVolumeResponse) - err := grpc.Invoke(ctx, "/csi.Controller/DeleteVolume", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/csi.v1.Controller/DeleteVolume", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -2338,7 +2338,7 @@ func (c *controllerClient) DeleteVolume(ctx context.Context, in *DeleteVolumeReq func (c *controllerClient) ControllerPublishVolume(ctx context.Context, in *ControllerPublishVolumeRequest, opts ...grpc.CallOption) (*ControllerPublishVolumeResponse, error) { out := new(ControllerPublishVolumeResponse) - err := grpc.Invoke(ctx, "/csi.Controller/ControllerPublishVolume", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/csi.v1.Controller/ControllerPublishVolume", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -2347,7 +2347,7 @@ func (c *controllerClient) ControllerPublishVolume(ctx context.Context, in *Cont func (c *controllerClient) ControllerUnpublishVolume(ctx context.Context, in *ControllerUnpublishVolumeRequest, opts ...grpc.CallOption) (*ControllerUnpublishVolumeResponse, error) { out := new(ControllerUnpublishVolumeResponse) - err := grpc.Invoke(ctx, "/csi.Controller/ControllerUnpublishVolume", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/csi.v1.Controller/ControllerUnpublishVolume", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -2356,7 +2356,7 @@ func (c *controllerClient) ControllerUnpublishVolume(ctx context.Context, in *Co func (c *controllerClient) ValidateVolumeCapabilities(ctx context.Context, in *ValidateVolumeCapabilitiesRequest, opts ...grpc.CallOption) (*ValidateVolumeCapabilitiesResponse, error) { out := new(ValidateVolumeCapabilitiesResponse) - err := grpc.Invoke(ctx, "/csi.Controller/ValidateVolumeCapabilities", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/csi.v1.Controller/ValidateVolumeCapabilities", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -2365,7 +2365,7 @@ func (c *controllerClient) ValidateVolumeCapabilities(ctx context.Context, in *V func (c *controllerClient) ListVolumes(ctx context.Context, in *ListVolumesRequest, opts ...grpc.CallOption) (*ListVolumesResponse, error) { out := new(ListVolumesResponse) - err := grpc.Invoke(ctx, "/csi.Controller/ListVolumes", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/csi.v1.Controller/ListVolumes", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -2374,7 +2374,7 @@ func (c *controllerClient) ListVolumes(ctx context.Context, in *ListVolumesReque func (c *controllerClient) GetCapacity(ctx context.Context, in *GetCapacityRequest, opts ...grpc.CallOption) (*GetCapacityResponse, error) { out := new(GetCapacityResponse) - err := grpc.Invoke(ctx, "/csi.Controller/GetCapacity", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/csi.v1.Controller/GetCapacity", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -2383,7 +2383,7 @@ func (c *controllerClient) GetCapacity(ctx context.Context, in *GetCapacityReque func (c *controllerClient) ControllerGetCapabilities(ctx context.Context, in *ControllerGetCapabilitiesRequest, opts ...grpc.CallOption) (*ControllerGetCapabilitiesResponse, error) { out := new(ControllerGetCapabilitiesResponse) - err := grpc.Invoke(ctx, "/csi.Controller/ControllerGetCapabilities", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/csi.v1.Controller/ControllerGetCapabilities", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -2417,7 +2417,7 @@ func _Controller_CreateVolume_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/csi.Controller/CreateVolume", + FullMethod: "/csi.v1.Controller/CreateVolume", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ControllerServer).CreateVolume(ctx, req.(*CreateVolumeRequest)) @@ -2435,7 +2435,7 @@ func _Controller_DeleteVolume_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/csi.Controller/DeleteVolume", + FullMethod: "/csi.v1.Controller/DeleteVolume", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ControllerServer).DeleteVolume(ctx, req.(*DeleteVolumeRequest)) @@ -2453,7 +2453,7 @@ func _Controller_ControllerPublishVolume_Handler(srv interface{}, ctx context.Co } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/csi.Controller/ControllerPublishVolume", + FullMethod: "/csi.v1.Controller/ControllerPublishVolume", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ControllerServer).ControllerPublishVolume(ctx, req.(*ControllerPublishVolumeRequest)) @@ -2471,7 +2471,7 @@ func _Controller_ControllerUnpublishVolume_Handler(srv interface{}, ctx context. } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/csi.Controller/ControllerUnpublishVolume", + FullMethod: "/csi.v1.Controller/ControllerUnpublishVolume", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ControllerServer).ControllerUnpublishVolume(ctx, req.(*ControllerUnpublishVolumeRequest)) @@ -2489,7 +2489,7 @@ func _Controller_ValidateVolumeCapabilities_Handler(srv interface{}, ctx context } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/csi.Controller/ValidateVolumeCapabilities", + FullMethod: "/csi.v1.Controller/ValidateVolumeCapabilities", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ControllerServer).ValidateVolumeCapabilities(ctx, req.(*ValidateVolumeCapabilitiesRequest)) @@ -2507,7 +2507,7 @@ func _Controller_ListVolumes_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/csi.Controller/ListVolumes", + FullMethod: "/csi.v1.Controller/ListVolumes", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ControllerServer).ListVolumes(ctx, req.(*ListVolumesRequest)) @@ -2525,7 +2525,7 @@ func _Controller_GetCapacity_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/csi.Controller/GetCapacity", + FullMethod: "/csi.v1.Controller/GetCapacity", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ControllerServer).GetCapacity(ctx, req.(*GetCapacityRequest)) @@ -2543,7 +2543,7 @@ func _Controller_ControllerGetCapabilities_Handler(srv interface{}, ctx context. } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/csi.Controller/ControllerGetCapabilities", + FullMethod: "/csi.v1.Controller/ControllerGetCapabilities", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ControllerServer).ControllerGetCapabilities(ctx, req.(*ControllerGetCapabilitiesRequest)) @@ -2552,7 +2552,7 @@ func _Controller_ControllerGetCapabilities_Handler(srv interface{}, ctx context. } var _Controller_serviceDesc = grpc.ServiceDesc{ - ServiceName: "csi.Controller", + ServiceName: "csi.v1.Controller", HandlerType: (*ControllerServer)(nil), Methods: []grpc.MethodDesc{ { @@ -2613,7 +2613,7 @@ func NewNodeClient(cc *grpc.ClientConn) NodeClient { func (c *nodeClient) NodeStageVolume(ctx context.Context, in *NodeStageVolumeRequest, opts ...grpc.CallOption) (*NodeStageVolumeResponse, error) { out := new(NodeStageVolumeResponse) - err := grpc.Invoke(ctx, "/csi.Node/NodeStageVolume", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/csi.v1.Node/NodeStageVolume", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -2622,7 +2622,7 @@ func (c *nodeClient) NodeStageVolume(ctx context.Context, in *NodeStageVolumeReq func (c *nodeClient) NodeUnstageVolume(ctx context.Context, in *NodeUnstageVolumeRequest, opts ...grpc.CallOption) (*NodeUnstageVolumeResponse, error) { out := new(NodeUnstageVolumeResponse) - err := grpc.Invoke(ctx, "/csi.Node/NodeUnstageVolume", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/csi.v1.Node/NodeUnstageVolume", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -2631,7 +2631,7 @@ func (c *nodeClient) NodeUnstageVolume(ctx context.Context, in *NodeUnstageVolum func (c *nodeClient) NodePublishVolume(ctx context.Context, in *NodePublishVolumeRequest, opts ...grpc.CallOption) (*NodePublishVolumeResponse, error) { out := new(NodePublishVolumeResponse) - err := grpc.Invoke(ctx, "/csi.Node/NodePublishVolume", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/csi.v1.Node/NodePublishVolume", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -2640,7 +2640,7 @@ func (c *nodeClient) NodePublishVolume(ctx context.Context, in *NodePublishVolum func (c *nodeClient) NodeUnpublishVolume(ctx context.Context, in *NodeUnpublishVolumeRequest, opts ...grpc.CallOption) (*NodeUnpublishVolumeResponse, error) { out := new(NodeUnpublishVolumeResponse) - err := grpc.Invoke(ctx, "/csi.Node/NodeUnpublishVolume", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/csi.v1.Node/NodeUnpublishVolume", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -2649,7 +2649,7 @@ func (c *nodeClient) NodeUnpublishVolume(ctx context.Context, in *NodeUnpublishV func (c *nodeClient) NodeGetId(ctx context.Context, in *NodeGetIdRequest, opts ...grpc.CallOption) (*NodeGetIdResponse, error) { out := new(NodeGetIdResponse) - err := grpc.Invoke(ctx, "/csi.Node/NodeGetId", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/csi.v1.Node/NodeGetId", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -2658,7 +2658,7 @@ func (c *nodeClient) NodeGetId(ctx context.Context, in *NodeGetIdRequest, opts . func (c *nodeClient) NodeGetCapabilities(ctx context.Context, in *NodeGetCapabilitiesRequest, opts ...grpc.CallOption) (*NodeGetCapabilitiesResponse, error) { out := new(NodeGetCapabilitiesResponse) - err := grpc.Invoke(ctx, "/csi.Node/NodeGetCapabilities", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/csi.v1.Node/NodeGetCapabilities", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -2690,7 +2690,7 @@ func _Node_NodeStageVolume_Handler(srv interface{}, ctx context.Context, dec fun } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/csi.Node/NodeStageVolume", + FullMethod: "/csi.v1.Node/NodeStageVolume", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(NodeServer).NodeStageVolume(ctx, req.(*NodeStageVolumeRequest)) @@ -2708,7 +2708,7 @@ func _Node_NodeUnstageVolume_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/csi.Node/NodeUnstageVolume", + FullMethod: "/csi.v1.Node/NodeUnstageVolume", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(NodeServer).NodeUnstageVolume(ctx, req.(*NodeUnstageVolumeRequest)) @@ -2726,7 +2726,7 @@ func _Node_NodePublishVolume_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/csi.Node/NodePublishVolume", + FullMethod: "/csi.v1.Node/NodePublishVolume", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(NodeServer).NodePublishVolume(ctx, req.(*NodePublishVolumeRequest)) @@ -2744,7 +2744,7 @@ func _Node_NodeUnpublishVolume_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/csi.Node/NodeUnpublishVolume", + FullMethod: "/csi.v1.Node/NodeUnpublishVolume", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(NodeServer).NodeUnpublishVolume(ctx, req.(*NodeUnpublishVolumeRequest)) @@ -2762,7 +2762,7 @@ func _Node_NodeGetId_Handler(srv interface{}, ctx context.Context, dec func(inte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/csi.Node/NodeGetId", + FullMethod: "/csi.v1.Node/NodeGetId", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(NodeServer).NodeGetId(ctx, req.(*NodeGetIdRequest)) @@ -2780,7 +2780,7 @@ func _Node_NodeGetCapabilities_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/csi.Node/NodeGetCapabilities", + FullMethod: "/csi.v1.Node/NodeGetCapabilities", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(NodeServer).NodeGetCapabilities(ctx, req.(*NodeGetCapabilitiesRequest)) @@ -2789,7 +2789,7 @@ func _Node_NodeGetCapabilities_Handler(srv interface{}, ctx context.Context, dec } var _Node_serviceDesc = grpc.ServiceDesc{ - ServiceName: "csi.Node", + ServiceName: "csi.v1.Node", HandlerType: (*NodeServer)(nil), Methods: []grpc.MethodDesc{ { @@ -2824,152 +2824,154 @@ var _Node_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("csi.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 2348 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x1a, 0x4d, 0x6f, 0xdb, 0xc8, - 0xd5, 0xd4, 0x87, 0x65, 0x3d, 0xd9, 0x89, 0x3c, 0x76, 0x6c, 0x85, 0x8e, 0x13, 0x87, 0xd9, 0x64, - 0x53, 0x34, 0x2b, 0xb4, 0x5e, 0xec, 0x36, 0xde, 0x6c, 0x02, 0xd8, 0x32, 0x63, 0xab, 0x71, 0x64, - 0x2f, 0x2d, 0x27, 0xdd, 0x6d, 0xb7, 0x5c, 0x5a, 0x1a, 0x3b, 0x6c, 0x24, 0x52, 0x4b, 0x52, 0x46, - 0x84, 0xa2, 0xb7, 0x9e, 0xda, 0xde, 0x7a, 0xe8, 0xa5, 0x68, 0xcf, 0x05, 0x7a, 0xed, 0x69, 0xd1, - 0x4b, 0x81, 0xa2, 0x97, 0x02, 0x3d, 0x15, 0xbd, 0xf6, 0xba, 0xfd, 0x05, 0x3d, 0x16, 0x9c, 0x19, - 0x52, 0x43, 0x6a, 0x48, 0x59, 0xc9, 0x3a, 0xe8, 0xc9, 0xe2, 0xfb, 0x9e, 0x37, 0x6f, 0xde, 0xbc, - 0xf7, 0xc6, 0x50, 0x6c, 0xb9, 0x66, 0xb5, 0xe7, 0xd8, 0x9e, 0x8d, 0xb2, 0x2d, 0xd7, 0x54, 0x56, - 0x61, 0x65, 0x07, 0x7b, 0x87, 0xfd, 0x5e, 0xcf, 0x76, 0x3c, 0xdc, 0x7e, 0x86, 0x1d, 0xd7, 0xb4, - 0x2d, 0x57, 0xc3, 0x5f, 0xf6, 0xb1, 0xeb, 0x29, 0x3f, 0x84, 0x6b, 0x62, 0xb4, 0xdb, 0xb3, 0x2d, - 0x17, 0xa3, 0x07, 0x80, 0xdc, 0x00, 0xa9, 0x9f, 0x31, 0x6c, 0x45, 0x5a, 0xcb, 0xde, 0x2d, 0xad, - 0xcf, 0x56, 0x7d, 0x5d, 0x8c, 0x45, 0x9b, 0x77, 0xe3, 0x42, 0x94, 0x27, 0x50, 0x60, 0xbf, 0xd1, - 0x22, 0xe4, 0xbb, 0xc6, 0x4f, 0x6c, 0xa7, 0x22, 0xad, 0x49, 0x77, 0xf3, 0x1a, 0xfd, 0x20, 0x50, - 0xd3, 0xb2, 0x9d, 0x4a, 0x86, 0x41, 0xfd, 0x0f, 0x1f, 0xda, 0x33, 0xbc, 0xd6, 0x8b, 0x4a, 0x96, - 0x42, 0xc9, 0x87, 0xf2, 0x08, 0x16, 0x77, 0xb0, 0x77, 0xd0, 0xe9, 0x9f, 0x9a, 0x56, 0xdd, 0x3a, - 0xb1, 0xd9, 0x0a, 0xd0, 0x1d, 0x28, 0x30, 0xbb, 0x88, 0xec, 0xb8, 0x59, 0x01, 0x52, 0xf9, 0xa7, - 0x04, 0x57, 0x62, 0x02, 0xd8, 0x1a, 0x11, 0xe4, 0x2c, 0xa3, 0x8b, 0x09, 0x7b, 0x51, 0x23, 0xbf, - 0xd1, 0x6d, 0xb8, 0x74, 0x86, 0xad, 0xb6, 0xed, 0x04, 0x8b, 0x26, 0x26, 0x16, 0xb5, 0x39, 0x0a, - 0x0d, 0x96, 0xb5, 0x0d, 0x33, 0x5d, 0xc3, 0x32, 0x4f, 0xb0, 0xeb, 0x55, 0xb2, 0xc4, 0x29, 0x77, - 0x89, 0x76, 0xa1, 0xa2, 0xea, 0x53, 0x46, 0xaa, 0x5a, 0x9e, 0x33, 0xd0, 0x42, 0x4e, 0xf9, 0x01, - 0xcc, 0x45, 0x50, 0xa8, 0x0c, 0xd9, 0x97, 0x78, 0xc0, 0x0c, 0xf2, 0x7f, 0xfa, 0x3e, 0x39, 0x33, - 0x3a, 0x7d, 0xcc, 0xcc, 0xa0, 0x1f, 0x1f, 0x65, 0xee, 0x4b, 0xca, 0x63, 0xb2, 0x83, 0x54, 0x5b, - 0xcd, 0xe8, 0x19, 0xc7, 0x66, 0xc7, 0xf4, 0x4c, 0xec, 0x4e, 0xea, 0x9f, 0xcf, 0x60, 0x35, 0x41, - 0x0e, 0x73, 0xd3, 0x06, 0xcc, 0xb6, 0x38, 0x78, 0x25, 0x43, 0xd6, 0x7b, 0x85, 0x48, 0x8b, 0xb1, - 0x0d, 0xb4, 0x08, 0xa9, 0xf2, 0x57, 0x09, 0xca, 0x71, 0x12, 0xb4, 0x01, 0x05, 0x17, 0x3b, 0x67, - 0x66, 0x0b, 0x33, 0xc3, 0x56, 0x85, 0xa2, 0xaa, 0x87, 0x94, 0x68, 0x77, 0x4a, 0x0b, 0xe8, 0x65, - 0x0b, 0x0a, 0x0c, 0x8a, 0x3e, 0x84, 0x9c, 0x37, 0xe8, 0x51, 0x11, 0x97, 0xd6, 0x95, 0x54, 0x11, - 0xd5, 0xe6, 0xa0, 0x87, 0x35, 0x42, 0xaf, 0x7c, 0x1b, 0x72, 0xfe, 0x17, 0x2a, 0x41, 0xe1, 0xa8, - 0xf1, 0xa4, 0xb1, 0xff, 0xbc, 0x51, 0x9e, 0x42, 0x4b, 0x80, 0x6a, 0xfb, 0x8d, 0xa6, 0xb6, 0xbf, - 0xb7, 0xa7, 0x6a, 0xfa, 0xa1, 0xaa, 0x3d, 0xab, 0xd7, 0xd4, 0xb2, 0xb4, 0x35, 0x4d, 0x95, 0x28, - 0x1f, 0xc2, 0xec, 0x81, 0x63, 0x1f, 0xe3, 0x49, 0x7d, 0x7b, 0x19, 0xe6, 0x18, 0x1f, 0xf5, 0xa5, - 0xf2, 0xc7, 0x1c, 0x2c, 0xd4, 0x1c, 0x6c, 0x78, 0xf8, 0x99, 0xdd, 0xe9, 0x77, 0x27, 0x15, 0x18, - 0x86, 0x6c, 0x86, 0x0b, 0xd9, 0x0d, 0xb8, 0xe4, 0x3b, 0xbd, 0x65, 0x7a, 0x03, 0xdd, 0x31, 0xac, - 0x53, 0x4c, 0xce, 0x4f, 0x69, 0x1d, 0x11, 0x11, 0x35, 0x86, 0xd2, 0x7c, 0x8c, 0x36, 0xd7, 0xe2, - 0x3f, 0xd1, 0x63, 0x58, 0x38, 0x23, 0x76, 0xe8, 0x91, 0x1d, 0xce, 0x71, 0x3b, 0x4c, 0xed, 0xe4, - 0x76, 0x18, 0x9d, 0x45, 0x21, 0x26, 0x76, 0xd1, 0x2e, 0x40, 0xcf, 0x70, 0x8c, 0x2e, 0xf6, 0xb0, - 0xe3, 0x56, 0xf2, 0xdc, 0x81, 0x10, 0x2c, 0xb6, 0x7a, 0x10, 0x92, 0xd2, 0x03, 0xc1, 0xf1, 0xa2, - 0x9f, 0xc1, 0x6a, 0xcb, 0xb6, 0x3c, 0xc7, 0xee, 0x74, 0xb0, 0xa3, 0xb7, 0x08, 0xb7, 0xff, 0xa7, - 0x8d, 0x2d, 0xcf, 0x34, 0x3a, 0x6e, 0x65, 0x9a, 0x08, 0xdf, 0x48, 0x14, 0x5e, 0x0b, 0xb9, 0x29, - 0xb6, 0x36, 0xe4, 0xa5, 0xda, 0x56, 0x5a, 0xc9, 0x14, 0xf2, 0x43, 0xb8, 0x1c, 0xb3, 0x6e, 0x92, - 0x33, 0x29, 0x37, 0x60, 0x6d, 0x9c, 0xfe, 0x89, 0xce, 0xf8, 0x03, 0x58, 0x8c, 0xae, 0x91, 0x1d, - 0xc9, 0x5b, 0x30, 0x4d, 0x77, 0x81, 0x45, 0x4b, 0x89, 0xdb, 0x2a, 0x8d, 0xa1, 0x94, 0xdf, 0xe5, - 0xa0, 0x1c, 0xdf, 0x3d, 0xb4, 0x01, 0xf9, 0xe3, 0x8e, 0xdd, 0x7a, 0xc9, 0x18, 0x6f, 0x0a, 0xf7, - 0xb8, 0xba, 0xe5, 0x93, 0x50, 0xe8, 0xee, 0x94, 0x46, 0x39, 0x7c, 0xd6, 0xae, 0xdd, 0xb7, 0x3c, - 0x62, 0x66, 0x22, 0xeb, 0x53, 0x9f, 0x64, 0xc8, 0x4a, 0x38, 0xd0, 0x26, 0x94, 0x8c, 0x56, 0x0b, - 0xbb, 0xae, 0xde, 0xb5, 0xdb, 0x41, 0x7c, 0xae, 0x89, 0x05, 0x6c, 0x12, 0xc2, 0xa7, 0x76, 0x1b, - 0x6b, 0x60, 0x84, 0xbf, 0xe5, 0x39, 0x28, 0x71, 0x56, 0xc9, 0x3b, 0x50, 0xe2, 0x34, 0xa1, 0x65, - 0x28, 0x9c, 0xb8, 0x7a, 0x98, 0x10, 0x8a, 0xda, 0xf4, 0x89, 0x4b, 0x8e, 0xf9, 0x0d, 0x28, 0x11, - 0x13, 0xf4, 0x93, 0x8e, 0x71, 0x4a, 0x73, 0x57, 0x51, 0x03, 0x02, 0x7a, 0xec, 0x43, 0xe4, 0xaf, - 0x25, 0x80, 0xa1, 0x4a, 0xb4, 0x01, 0x39, 0x62, 0x22, 0x4d, 0x2b, 0xb7, 0xc7, 0x99, 0x58, 0x25, - 0x76, 0x12, 0x16, 0xe5, 0xf7, 0x12, 0xe4, 0x88, 0x8c, 0x78, 0x6a, 0x39, 0xac, 0x37, 0x76, 0xf6, - 0x54, 0xbd, 0xb1, 0xbf, 0xad, 0xea, 0xcf, 0xb5, 0x7a, 0x53, 0xd5, 0xca, 0x12, 0x5a, 0x81, 0x65, - 0x1e, 0xae, 0xa9, 0x9b, 0xdb, 0xaa, 0xa6, 0xef, 0x37, 0xf6, 0x3e, 0x2d, 0x67, 0x90, 0x0c, 0x4b, - 0x4f, 0x8f, 0xf6, 0x9a, 0xf5, 0x51, 0x5c, 0x16, 0x5d, 0x83, 0x0a, 0x87, 0x63, 0x32, 0x98, 0xd8, - 0x9c, 0x2f, 0x96, 0xc3, 0xd2, 0x9f, 0x0c, 0x99, 0xdf, 0x9a, 0x0b, 0xb7, 0x81, 0x64, 0xb5, 0xe7, - 0x30, 0x17, 0xc9, 0x0e, 0xfe, 0xe5, 0xe7, 0xe0, 0x2f, 0xfb, 0xa6, 0x83, 0xdb, 0xfa, 0xf1, 0xc0, - 0xc3, 0x2e, 0x71, 0x43, 0x56, 0x9b, 0x0b, 0xa0, 0x5b, 0x3e, 0xd0, 0xf7, 0x69, 0xc7, 0xec, 0x9a, - 0x1e, 0xa3, 0xc9, 0x10, 0x1a, 0x20, 0x20, 0x42, 0xa0, 0x7c, 0x25, 0xc1, 0x34, 0xdb, 0x98, 0xdb, - 0x5c, 0x72, 0x8a, 0x88, 0x0c, 0xa0, 0x54, 0xe4, 0x25, 0xc8, 0x98, 0x6d, 0x16, 0xff, 0x19, 0xb3, - 0x8d, 0x1e, 0x00, 0x18, 0x9e, 0xe7, 0x98, 0xc7, 0x7d, 0x9f, 0x85, 0xde, 0xb0, 0x2b, 0xdc, 0x66, - 0x54, 0x37, 0x43, 0x2c, 0xcb, 0x21, 0x43, 0x72, 0xff, 0x10, 0xc7, 0xd0, 0x13, 0x1d, 0xba, 0x3f, - 0x64, 0x60, 0x61, 0x1b, 0x77, 0xf0, 0xeb, 0xe6, 0xe8, 0x15, 0x28, 0xb2, 0xa4, 0x1a, 0x2e, 0x69, - 0x86, 0x02, 0xea, 0xed, 0x58, 0x7e, 0x6b, 0x13, 0x35, 0x91, 0xfc, 0x96, 0xe5, 0xf2, 0x9b, 0xc0, - 0x0a, 0x2e, 0xbf, 0x51, 0x6c, 0x5a, 0x7e, 0x1b, 0xa1, 0x88, 0x26, 0x28, 0xb1, 0x80, 0x89, 0x7c, - 0xb5, 0x04, 0x8b, 0x51, 0x23, 0xd9, 0x3d, 0xf7, 0x9f, 0x1c, 0x5c, 0x1f, 0x2a, 0x3a, 0xe8, 0x1f, - 0x77, 0x4c, 0xf7, 0xc5, 0x05, 0xb8, 0x73, 0x19, 0x0a, 0x96, 0xdd, 0x26, 0xa8, 0x2c, 0x3d, 0xf7, - 0xfe, 0x67, 0xbd, 0x8d, 0xb6, 0x60, 0x3e, 0x7e, 0xb3, 0x0d, 0x2a, 0x39, 0xa2, 0x27, 0xe1, 0x5e, - 0x2b, 0x9f, 0xc5, 0x73, 0xa5, 0x0c, 0x33, 0x0e, 0x36, 0xda, 0xb6, 0xd5, 0x19, 0x54, 0xf2, 0x6b, - 0xd2, 0xdd, 0x19, 0x2d, 0xfc, 0x46, 0xbf, 0x94, 0xe0, 0x3a, 0xb7, 0x91, 0x3d, 0xba, 0x42, 0xc1, - 0x4d, 0xa5, 0xd2, 0x9b, 0x2a, 0xd5, 0x17, 0xa3, 0xe8, 0x91, 0x5d, 0xbd, 0xd6, 0x4a, 0x21, 0x41, - 0x27, 0xe1, 0x6a, 0xb9, 0x53, 0x53, 0xe0, 0x6f, 0xca, 0x74, 0xfd, 0xf4, 0x2b, 0x7e, 0xa6, 0x98, - 0x47, 0x86, 0x60, 0x79, 0x1f, 0x6e, 0x8e, 0x35, 0x75, 0xa2, 0x0b, 0xb3, 0x06, 0x57, 0x84, 0xba, - 0x27, 0x0a, 0xc2, 0xaf, 0x24, 0xb8, 0x91, 0xb8, 0x40, 0x76, 0x63, 0xfe, 0x00, 0x66, 0x83, 0x3d, - 0x32, 0xad, 0x13, 0x9b, 0x75, 0x32, 0x1f, 0xa4, 0x3b, 0x87, 0x95, 0xef, 0x0c, 0xea, 0x97, 0xf4, - 0xd4, 0x31, 0xa5, 0xde, 0x10, 0x22, 0x3f, 0x82, 0x72, 0x9c, 0x60, 0x22, 0xeb, 0xbf, 0xce, 0xf0, - 0x67, 0xf2, 0xc8, 0xea, 0xbd, 0xfd, 0xc3, 0xf2, 0x6b, 0x09, 0xd6, 0xb8, 0x60, 0xee, 0x5b, 0xa2, - 0x70, 0xa6, 0x45, 0x61, 0x3d, 0xe6, 0x31, 0xb1, 0xbd, 0x22, 0x82, 0x91, 0x90, 0xe6, 0xce, 0x8f, - 0x88, 0x48, 0xfe, 0x04, 0x6e, 0x9d, 0x43, 0xcc, 0x44, 0xbe, 0xbe, 0xc5, 0xc7, 0xef, 0x88, 0xe9, - 0x2c, 0x77, 0xfd, 0x3b, 0x03, 0x37, 0x9f, 0x19, 0x1d, 0xb3, 0x1d, 0xd6, 0x5d, 0x6f, 0xd0, 0x5e, - 0xa5, 0xef, 0x48, 0x42, 0xfd, 0x9d, 0x9d, 0xb4, 0xfe, 0x36, 0x45, 0xe7, 0x9f, 0x6e, 0xd8, 0xc7, - 0x54, 0xca, 0xb8, 0xf5, 0x9c, 0x3b, 0x05, 0x7c, 0x23, 0x27, 0xf6, 0x47, 0xa0, 0xa4, 0x59, 0xc4, - 0xce, 0xec, 0x35, 0x28, 0x86, 0xb3, 0x05, 0x22, 0x77, 0x46, 0x1b, 0x02, 0x50, 0x05, 0x0a, 0x5d, - 0xec, 0xba, 0xc6, 0x69, 0x20, 0x3f, 0xf8, 0x54, 0x7e, 0x2e, 0x01, 0xda, 0x33, 0x5d, 0x56, 0x1b, - 0x4e, 0xbc, 0x63, 0x7e, 0xc9, 0x68, 0xbc, 0xd2, 0xb1, 0xe5, 0x39, 0x26, 0x2b, 0x6f, 0xf2, 0x1a, - 0x74, 0x8d, 0x57, 0x2a, 0x85, 0xf8, 0x35, 0x8d, 0xeb, 0x19, 0x8e, 0x67, 0x5a, 0xa7, 0xba, 0x67, - 0xbf, 0xc4, 0x16, 0x3b, 0x4e, 0x73, 0x01, 0xb4, 0xe9, 0x03, 0x95, 0xdf, 0x4a, 0xb0, 0x10, 0x31, - 0x83, 0x2d, 0xeb, 0x3e, 0x14, 0x02, 0xd9, 0x34, 0x0b, 0x5d, 0x27, 0x76, 0x08, 0x48, 0xab, 0x74, - 0x13, 0x02, 0x72, 0xb4, 0x0a, 0x60, 0xe1, 0x57, 0x1e, 0x53, 0x4a, 0x57, 0x5d, 0xf4, 0x21, 0x44, - 0xa1, 0x7c, 0x0f, 0xf2, 0x74, 0x2b, 0xce, 0xd5, 0x1e, 0xfc, 0x2a, 0x03, 0x68, 0x07, 0x7b, 0x61, - 0x05, 0x38, 0xa1, 0x97, 0x12, 0x42, 0x37, 0x33, 0x69, 0xe8, 0xee, 0x44, 0x5a, 0x47, 0x1a, 0xf9, - 0xef, 0x06, 0xb3, 0x94, 0x98, 0x71, 0x69, 0x9d, 0xe3, 0x1b, 0xb6, 0x6e, 0xca, 0x36, 0x2c, 0x44, - 0x14, 0xb2, 0xcd, 0x7a, 0x0f, 0x90, 0x71, 0x66, 0x98, 0x1d, 0xe3, 0xb8, 0x43, 0x57, 0xea, 0x63, - 0x59, 0x0d, 0x3b, 0x1f, 0x62, 0x02, 0x36, 0xe5, 0xfb, 0x7c, 0x2e, 0x67, 0xf2, 0x5e, 0x77, 0x30, - 0x63, 0xf2, 0xc9, 0x6a, 0x44, 0x16, 0xb3, 0x6f, 0x5b, 0x38, 0x9c, 0x59, 0x8b, 0x65, 0x69, 0x36, - 0x07, 0x49, 0x9c, 0xd3, 0xfc, 0x26, 0x03, 0x2b, 0x29, 0xd4, 0xe8, 0x3e, 0x64, 0x9d, 0x5e, 0x8b, - 0x99, 0xfb, 0xce, 0x38, 0xe1, 0x55, 0xed, 0xa0, 0xb6, 0x3b, 0xa5, 0xf9, 0x2c, 0xf2, 0x9f, 0x24, - 0xc8, 0x6a, 0x07, 0x35, 0xf4, 0x30, 0x32, 0xae, 0xf9, 0xd6, 0x79, 0x44, 0xf0, 0x53, 0x1b, 0x5b, - 0x34, 0xb5, 0xa9, 0xc0, 0x62, 0x4d, 0x53, 0x37, 0x9b, 0xaa, 0xbe, 0xad, 0xee, 0xa9, 0x4d, 0x55, - 0x7f, 0xb6, 0xbf, 0x77, 0xf4, 0x54, 0x2d, 0x4b, 0x7e, 0x8f, 0x74, 0x70, 0xb4, 0xb5, 0x57, 0x3f, - 0xdc, 0xd5, 0x8f, 0x1a, 0xc1, 0x2f, 0x86, 0xcd, 0xa0, 0x32, 0xcc, 0xee, 0xd5, 0x0f, 0x9b, 0x0c, - 0x70, 0x58, 0xce, 0xfa, 0x90, 0x1d, 0xb5, 0xa9, 0xd7, 0x36, 0x0f, 0x36, 0x6b, 0xf5, 0xe6, 0xa7, - 0xe5, 0x5c, 0x38, 0xf9, 0xf9, 0x73, 0x1e, 0x96, 0x1a, 0x76, 0x1b, 0x1f, 0x7a, 0xc6, 0xe9, 0x45, - 0xf4, 0x03, 0xfb, 0xb1, 0xba, 0x84, 0x1e, 0x80, 0x7b, 0x44, 0x92, 0x58, 0x6f, 0x7a, 0x39, 0x82, - 0xaa, 0xb0, 0xe0, 0x7a, 0xc6, 0x29, 0xc9, 0x4d, 0x86, 0x73, 0x8a, 0x3d, 0xbd, 0x67, 0x78, 0x2f, - 0x48, 0xe9, 0x5b, 0xd4, 0xe6, 0x19, 0xaa, 0x49, 0x30, 0x07, 0x86, 0xf7, 0x42, 0x5c, 0x28, 0xe7, - 0x27, 0x2b, 0x94, 0x5f, 0xc2, 0x12, 0x29, 0x2c, 0x7c, 0xe9, 0xa2, 0x69, 0xcd, 0x07, 0x69, 0xcb, - 0x09, 0xc1, 0x23, 0x05, 0xc2, 0xa2, 0x25, 0x40, 0xa1, 0x1f, 0x27, 0xd7, 0xba, 0xdf, 0x4d, 0xd3, - 0x73, 0xde, 0x0b, 0xee, 0x0d, 0xeb, 0x39, 0x79, 0x07, 0xae, 0x26, 0x2e, 0xe9, 0xed, 0xd7, 0xc6, - 0x57, 0x61, 0x79, 0xc4, 0x1f, 0xac, 0xce, 0xf9, 0x47, 0x06, 0x2a, 0x3e, 0xee, 0xc8, 0x72, 0x2f, - 0x28, 0xb8, 0x13, 0x62, 0x31, 0x9b, 0x14, 0x8b, 0x2e, 0x54, 0x48, 0x1c, 0xf5, 0xad, 0xd1, 0x48, - 0xca, 0x71, 0xdd, 0x4c, 0x92, 0xd5, 0x3c, 0x62, 0x24, 0x9a, 0x48, 0x88, 0x8e, 0x22, 0xe5, 0x3a, - 0xac, 0xa4, 0xb0, 0x4d, 0xe4, 0xec, 0x15, 0xba, 0xf5, 0x31, 0xd3, 0x98, 0xbb, 0x7f, 0x31, 0x4d, - 0xdd, 0x7d, 0x71, 0xcd, 0xf0, 0x27, 0xc2, 0x5c, 0x52, 0x0d, 0x5d, 0x26, 0x6c, 0xfd, 0xbe, 0xd9, - 0x6c, 0x72, 0x03, 0x4a, 0x3c, 0x5d, 0x9e, 0xd0, 0x81, 0x37, 0x26, 0xdd, 0x4c, 0xbf, 0x7e, 0x5f, - 0x5e, 0x88, 0xf5, 0xe5, 0x41, 0x08, 0x89, 0x3a, 0x98, 0x99, 0x58, 0x08, 0x09, 0xfd, 0xc1, 0x21, - 0xc4, 0x21, 0x24, 0x68, 0xbf, 0xbf, 0x10, 0xa5, 0xa4, 0x22, 0xd1, 0xf6, 0x7e, 0xba, 0xb6, 0xb7, - 0x95, 0x94, 0x58, 0x90, 0xff, 0xdf, 0xb4, 0xec, 0xec, 0xa4, 0x08, 0xfb, 0x6d, 0xe5, 0xef, 0x19, - 0x90, 0xe9, 0x39, 0xba, 0xb8, 0x5e, 0x38, 0x16, 0xa8, 0xd9, 0x91, 0x40, 0xfd, 0x29, 0xc8, 0x2c, - 0x17, 0x25, 0x37, 0xc3, 0x0f, 0xb9, 0x6c, 0xd4, 0x4b, 0x0a, 0xa6, 0xe4, 0x06, 0xb8, 0x62, 0x25, - 0xa0, 0xe5, 0x27, 0xb0, 0x9a, 0xca, 0x3a, 0x91, 0xaf, 0x57, 0x83, 0x04, 0x27, 0x6e, 0x77, 0x3f, - 0x82, 0xb2, 0x8f, 0xde, 0xc1, 0x5e, 0xbd, 0x3d, 0x69, 0x89, 0x7a, 0x0f, 0xe6, 0x39, 0x5e, 0x56, - 0x92, 0x72, 0x63, 0x06, 0x89, 0x1f, 0x33, 0x28, 0xdb, 0x74, 0x5b, 0xdf, 0xb0, 0x2c, 0xfe, 0x9c, - 0x2e, 0x27, 0xa9, 0x20, 0x7e, 0x14, 0x2b, 0x88, 0x69, 0x8b, 0x25, 0x0f, 0x2b, 0x83, 0x31, 0xa5, - 0xf0, 0x5f, 0x24, 0xb8, 0x22, 0xa4, 0x43, 0xeb, 0x7c, 0x11, 0x7c, 0x3d, 0x59, 0x20, 0x5f, 0xfe, - 0x76, 0x69, 0xf5, 0xfb, 0xbd, 0x48, 0xf5, 0x7b, 0x2b, 0x9d, 0x97, 0xaf, 0x7b, 0xdf, 0x4b, 0xa8, - 0x7b, 0x0f, 0x9b, 0x9b, 0x3b, 0xaa, 0x7e, 0xd4, 0xa0, 0x7f, 0x83, 0xba, 0x37, 0xa8, 0x5a, 0xd7, - 0xff, 0x96, 0x81, 0x99, 0x3a, 0x89, 0x18, 0x6f, 0x80, 0x3e, 0x27, 0x0f, 0xe8, 0x23, 0x4f, 0xfd, - 0x68, 0x2d, 0xe8, 0xb2, 0x92, 0xfe, 0x49, 0x40, 0xbe, 0x99, 0x42, 0xc1, 0xa2, 0x67, 0x0a, 0xed, - 0xc2, 0x5c, 0xe4, 0xd5, 0x1b, 0x5d, 0x15, 0xbd, 0x84, 0x53, 0x81, 0x72, 0xf2, 0x23, 0xb9, 0x32, - 0x85, 0xbe, 0xe0, 0x1e, 0xea, 0x23, 0x3d, 0xe2, 0xcd, 0x28, 0x9b, 0x20, 0x7a, 0x64, 0x25, 0x8d, - 0x24, 0xd4, 0xf0, 0x1d, 0xc8, 0x93, 0xf7, 0x58, 0x34, 0x4f, 0xdf, 0x8b, 0xb9, 0x37, 0x5d, 0x19, - 0xf1, 0xa0, 0x80, 0x63, 0xfd, 0x5f, 0x79, 0x80, 0x61, 0x9f, 0x82, 0x54, 0x98, 0xe5, 0x1f, 0xe4, - 0x50, 0x25, 0xe9, 0x1d, 0x52, 0xbe, 0x2a, 0xc0, 0x84, 0x76, 0xa8, 0x30, 0xcb, 0x8f, 0xcd, 0x99, - 0x18, 0xc1, 0xb8, 0x9f, 0x89, 0x11, 0xce, 0xd8, 0xa7, 0xd0, 0x09, 0x2c, 0x27, 0xcc, 0x2e, 0xd1, - 0xad, 0x73, 0x8c, 0x7d, 0xe5, 0x77, 0xce, 0x33, 0xfe, 0x54, 0xa6, 0x50, 0x07, 0xae, 0x26, 0x8e, - 0xcd, 0xd0, 0xed, 0x73, 0x4d, 0x04, 0xe5, 0x3b, 0xe3, 0xc8, 0x42, 0x6d, 0x36, 0xc8, 0xc9, 0xc3, - 0x21, 0x74, 0xe7, 0x7c, 0xf3, 0x2c, 0xf9, 0xdd, 0xb1, 0x74, 0xa1, 0xc2, 0x2d, 0x28, 0x71, 0xc3, - 0x17, 0xb4, 0x3c, 0x3a, 0x8e, 0xa1, 0x22, 0x2b, 0x49, 0x73, 0x1a, 0x2a, 0x83, 0x1b, 0x1f, 0x30, - 0x19, 0xa3, 0x13, 0x0c, 0x26, 0x43, 0x30, 0x69, 0x88, 0xbb, 0x39, 0x96, 0xdf, 0x46, 0xdc, 0x2c, - 0xce, 0xa2, 0x23, 0x6e, 0x4e, 0x48, 0x93, 0xca, 0xd4, 0xfa, 0x7f, 0xb3, 0x90, 0xf3, 0x73, 0x10, - 0x6a, 0xc0, 0xe5, 0x58, 0x8b, 0x80, 0x56, 0x52, 0x1a, 0x29, 0xf9, 0x9a, 0x18, 0x19, 0x2e, 0xa3, - 0x49, 0x2f, 0x85, 0x48, 0x15, 0x8c, 0x56, 0x53, 0x0b, 0x77, 0xf9, 0x7a, 0x12, 0x3a, 0x2e, 0x35, - 0x1a, 0xe5, 0xab, 0xa9, 0xd5, 0x15, 0x27, 0x35, 0x29, 0xb2, 0x3f, 0x83, 0x05, 0xc1, 0xdd, 0x88, - 0x6e, 0x8c, 0xb9, 0xd8, 0xe5, 0xb5, 0x64, 0x82, 0x50, 0xf6, 0xc7, 0x50, 0x0c, 0x2f, 0x47, 0x74, - 0x25, 0x64, 0xe0, 0x2f, 0x5a, 0x79, 0x29, 0x0e, 0x8e, 0x5b, 0x16, 0x0f, 0x83, 0x1b, 0x3c, 0x83, - 0x28, 0x00, 0xd6, 0x92, 0x09, 0x02, 0xd9, 0xc7, 0xd3, 0xe4, 0xff, 0xc4, 0xde, 0xff, 0x5f, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x2a, 0x1b, 0xdc, 0x39, 0x34, 0x26, 0x00, 0x00, + // 2369 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x1a, 0x4b, 0x6c, 0xdb, 0xc8, + 0xd5, 0xd4, 0xc7, 0xb2, 0x9e, 0xed, 0x44, 0x19, 0x3b, 0x89, 0x42, 0xdb, 0x89, 0x43, 0x6f, 0xb2, + 0xc9, 0x7e, 0xb4, 0x58, 0xb7, 0x5d, 0x64, 0x37, 0xde, 0x74, 0x6d, 0x59, 0x95, 0x55, 0xcb, 0xb2, + 0x4b, 0xcb, 0x09, 0x76, 0xfb, 0xe1, 0xd2, 0xd2, 0xd8, 0x61, 0x23, 0x93, 0x0a, 0x49, 0x19, 0xd1, + 0xa5, 0xe8, 0x6d, 0x6f, 0xbd, 0xb5, 0x40, 0x81, 0x16, 0x05, 0x7a, 0xec, 0xa9, 0xc7, 0x1e, 0x8a, + 0x3d, 0x17, 0x68, 0x4f, 0x05, 0x0a, 0xf4, 0xd6, 0x73, 0x81, 0x02, 0xbd, 0xf5, 0x5c, 0x70, 0x66, + 0x48, 0x0d, 0xa9, 0x21, 0x25, 0xd9, 0x9b, 0x6d, 0x4f, 0x22, 0xdf, 0x7f, 0xde, 0xbc, 0x79, 0xf3, + 0xde, 0xa3, 0x20, 0xdf, 0x72, 0x8c, 0x52, 0xd7, 0xb6, 0x5c, 0x0b, 0x4d, 0x7b, 0x8f, 0xe7, 0xef, + 0x2b, 0x2b, 0xb0, 0x54, 0xc5, 0xee, 0x61, 0xaf, 0xdb, 0xb5, 0x6c, 0x17, 0xb7, 0x9f, 0x62, 0xdb, + 0x31, 0x2c, 0xd3, 0x51, 0xf1, 0xcb, 0x1e, 0x76, 0x5c, 0xe5, 0x47, 0xb0, 0x2c, 0x46, 0x3b, 0x5d, + 0xcb, 0x74, 0x30, 0x7a, 0x02, 0xc8, 0xf1, 0x91, 0xda, 0x39, 0xc3, 0x16, 0xa5, 0xd5, 0xf4, 0x83, + 0xd9, 0xf5, 0xab, 0x25, 0xaa, 0xa3, 0xc4, 0xb8, 0xd4, 0x6b, 0x4e, 0x54, 0x8e, 0xb2, 0x0b, 0x39, + 0xf6, 0x8c, 0x16, 0x21, 0x7b, 0xa6, 0xff, 0xd8, 0xb2, 0x8b, 0xd2, 0xaa, 0xf4, 0x20, 0xab, 0xd2, + 0x17, 0x02, 0x35, 0x4c, 0xcb, 0x2e, 0xa6, 0x18, 0xd4, 0x7b, 0xf1, 0xa0, 0x5d, 0xdd, 0x6d, 0x3d, + 0x2f, 0xa6, 0x29, 0x94, 0xbc, 0x28, 0x9b, 0xb0, 0x58, 0xc5, 0xee, 0x41, 0xa7, 0x77, 0x6a, 0x98, + 0x35, 0xf3, 0xc4, 0x62, 0x8b, 0x40, 0x0f, 0x21, 0xc7, 0x4c, 0x23, 0xb2, 0x05, 0x96, 0xf9, 0x78, + 0xe5, 0xef, 0x12, 0x5c, 0x8f, 0xc8, 0x60, 0x2b, 0x45, 0x90, 0x31, 0xf5, 0x33, 0x4c, 0x24, 0xe4, + 0x55, 0xf2, 0x8c, 0xee, 0xc1, 0x95, 0x73, 0x6c, 0xb6, 0x2d, 0xdb, 0x5f, 0x3a, 0xb1, 0x32, 0xaf, + 0xce, 0x53, 0xa8, 0xbf, 0xb2, 0x2a, 0xcc, 0x9c, 0xe9, 0xa6, 0x71, 0x82, 0x1d, 0xb7, 0x98, 0x26, + 0xae, 0x79, 0xdb, 0x37, 0x40, 0xa8, 0xab, 0xb4, 0xc7, 0xa8, 0x2b, 0xa6, 0x6b, 0xf7, 0xd5, 0x80, + 0x59, 0x7e, 0x0c, 0xf3, 0x21, 0x14, 0x2a, 0x40, 0xfa, 0x05, 0xee, 0x33, 0x9b, 0xbc, 0x47, 0xcf, + 0x33, 0xe7, 0x7a, 0xa7, 0x87, 0x99, 0x25, 0xf4, 0xe5, 0xa3, 0xd4, 0x23, 0x49, 0xa9, 0x91, 0xad, + 0xa4, 0xda, 0xca, 0x7a, 0x57, 0x3f, 0x36, 0x3a, 0x86, 0x6b, 0x60, 0xe7, 0x02, 0x5e, 0xfa, 0x21, + 0xac, 0xc4, 0x88, 0x62, 0xce, 0xda, 0x80, 0xb9, 0x16, 0x07, 0x2f, 0xa6, 0xc8, 0xaa, 0x8b, 0xbe, + 0xc0, 0x08, 0x67, 0x5f, 0x0d, 0x51, 0x2b, 0x7f, 0x96, 0xa0, 0x10, 0x25, 0x41, 0x1b, 0x90, 0x73, + 0xb0, 0x7d, 0x6e, 0xb4, 0x30, 0x33, 0x6f, 0x35, 0x4e, 0x5a, 0xe9, 0x90, 0xd2, 0xed, 0x4c, 0xa9, + 0x3e, 0x8b, 0xfc, 0x12, 0x72, 0x0c, 0x8a, 0x3e, 0x84, 0x8c, 0xdb, 0xef, 0x52, 0x29, 0x57, 0xd6, + 0xef, 0x8d, 0x92, 0x52, 0x6a, 0xf6, 0xbb, 0x58, 0x25, 0x2c, 0xca, 0xdb, 0x90, 0xf1, 0xde, 0xd0, + 0x2c, 0xe4, 0x8e, 0x1a, 0xbb, 0x8d, 0xfd, 0x67, 0x8d, 0xc2, 0x14, 0xba, 0x01, 0xa8, 0xbc, 0xdf, + 0x68, 0xaa, 0xfb, 0xf5, 0x7a, 0x45, 0xd5, 0x0e, 0x2b, 0xea, 0xd3, 0x5a, 0xb9, 0x52, 0x90, 0xb6, + 0xa6, 0xa9, 0x1e, 0xe5, 0x43, 0x98, 0x3b, 0xb0, 0xad, 0x63, 0x7c, 0x01, 0x3f, 0x5f, 0x85, 0x79, + 0xc6, 0x4a, 0xfd, 0xaa, 0xfc, 0x31, 0x03, 0x0b, 0x65, 0x1b, 0xeb, 0x2e, 0x7e, 0x6a, 0x75, 0x7a, + 0x67, 0x17, 0x90, 0x19, 0xc4, 0x71, 0x8a, 0x8b, 0xe3, 0x0d, 0xb8, 0xe2, 0x6d, 0x40, 0xcb, 0x70, + 0xfb, 0x9a, 0xad, 0x9b, 0xa7, 0x98, 0x9c, 0xab, 0xd9, 0xf5, 0xeb, 0xbe, 0x94, 0x32, 0xc3, 0xaa, + 0x1e, 0x52, 0x9d, 0x6f, 0xf1, 0xaf, 0xa8, 0x06, 0x0b, 0xe7, 0xc4, 0x1a, 0x2d, 0xb4, 0xe7, 0x99, + 0xf0, 0x9e, 0x53, 0x83, 0xb9, 0x3d, 0x47, 0xe7, 0x61, 0x88, 0x81, 0x1d, 0xb4, 0x0b, 0xd0, 0xd5, + 0x6d, 0xfd, 0x0c, 0xbb, 0xd8, 0x76, 0x8a, 0xd9, 0xf0, 0x59, 0x11, 0x2c, 0xbc, 0x74, 0x10, 0x50, + 0xd3, 0xb3, 0xc2, 0xb1, 0xa3, 0x9f, 0x4a, 0xb0, 0xd2, 0xb2, 0x4c, 0xd7, 0xb6, 0x3a, 0x1d, 0x6c, + 0x6b, 0x2d, 0xc2, 0xee, 0xfd, 0xb4, 0xb1, 0xe9, 0x1a, 0x7a, 0xc7, 0x29, 0x4e, 0x13, 0x05, 0x1b, + 0x49, 0x0a, 0xca, 0x81, 0x00, 0x8a, 0x2d, 0x0f, 0xd8, 0xa9, 0xc6, 0xa5, 0x56, 0x3c, 0x85, 0xfc, + 0x31, 0x5c, 0x8d, 0x58, 0x38, 0xc9, 0x91, 0x95, 0x1b, 0xb0, 0x3a, 0x4a, 0xff, 0x44, 0x29, 0xe0, + 0x09, 0x2c, 0x86, 0xd7, 0xc8, 0x8e, 0xeb, 0x7d, 0x98, 0xa6, 0x9b, 0xc1, 0xa2, 0xe7, 0x4a, 0x78, + 0xd3, 0x54, 0x86, 0x55, 0x7e, 0x97, 0x81, 0x42, 0x74, 0x1f, 0xd1, 0x06, 0x64, 0x8f, 0x3b, 0x56, + 0xeb, 0x05, 0xe3, 0x7d, 0x23, 0x6e, 0xc3, 0x4b, 0x5b, 0x1e, 0x15, 0x85, 0xee, 0x4c, 0xa9, 0x94, + 0xc9, 0xe3, 0x3e, 0xb3, 0x7a, 0xa6, 0x4b, 0x8c, 0x4d, 0xe2, 0xde, 0xf3, 0xa8, 0x06, 0xdc, 0x84, + 0x09, 0x6d, 0xc3, 0xac, 0xde, 0x6a, 0x61, 0xc7, 0xd1, 0xce, 0xac, 0xb6, 0x1f, 0xb5, 0x6b, 0xb1, + 0x32, 0x36, 0x09, 0xed, 0x9e, 0xd5, 0xc6, 0x2a, 0xe8, 0xc1, 0xb3, 0x3c, 0x0f, 0xb3, 0x9c, 0x6d, + 0x72, 0x15, 0x66, 0x39, 0x65, 0xe8, 0x26, 0xe4, 0x4e, 0x1c, 0x2d, 0x48, 0x19, 0x79, 0x75, 0xfa, + 0xc4, 0x21, 0x59, 0xe0, 0x0e, 0xcc, 0x12, 0x2b, 0xb4, 0x93, 0x8e, 0x7e, 0x4a, 0x73, 0x5c, 0x5e, + 0x05, 0x02, 0xfa, 0x8e, 0x07, 0x91, 0xff, 0x25, 0x01, 0x0c, 0x54, 0xa2, 0x0d, 0xc8, 0x10, 0x2b, + 0x69, 0xe2, 0x79, 0x30, 0x86, 0x95, 0x25, 0x62, 0x2a, 0xe1, 0x52, 0x7e, 0x23, 0x41, 0x86, 0x88, + 0x89, 0x26, 0x9f, 0xc3, 0x5a, 0xa3, 0x5a, 0xaf, 0x68, 0x8d, 0xfd, 0xed, 0x8a, 0xf6, 0x4c, 0xad, + 0x35, 0x2b, 0x6a, 0x41, 0x42, 0x4b, 0x70, 0x93, 0x87, 0xab, 0x95, 0xcd, 0xed, 0x8a, 0xaa, 0xed, + 0x37, 0xea, 0x9f, 0x16, 0x52, 0x48, 0x86, 0x1b, 0x7b, 0x47, 0xf5, 0x66, 0x6d, 0x18, 0x97, 0x46, + 0xcb, 0x50, 0xe4, 0x70, 0x4c, 0x06, 0x13, 0x9b, 0xf1, 0xc4, 0x72, 0x58, 0xfa, 0xc8, 0x90, 0xd9, + 0xad, 0xf9, 0x60, 0x33, 0x48, 0xde, 0x7b, 0x06, 0xf3, 0xa1, 0xb4, 0xe1, 0xdd, 0x96, 0x36, 0x7e, + 0xd9, 0x33, 0x6c, 0xdc, 0xd6, 0x8e, 0xfb, 0x2e, 0x76, 0x88, 0x27, 0xd2, 0xea, 0xbc, 0x0f, 0xdd, + 0xf2, 0x80, 0x9e, 0x5b, 0x3b, 0xc6, 0x99, 0xe1, 0x32, 0x9a, 0x14, 0xa1, 0x01, 0x02, 0x22, 0x04, + 0xca, 0x97, 0x12, 0x4c, 0xb3, 0xbd, 0xb9, 0xc7, 0x25, 0xae, 0x90, 0x48, 0x1f, 0x4a, 0x45, 0x5e, + 0x81, 0x94, 0xd1, 0x66, 0xc7, 0x21, 0x65, 0xb4, 0xd1, 0x13, 0x00, 0xdd, 0x75, 0x6d, 0xe3, 0xb8, + 0xe7, 0xb1, 0xd0, 0x2b, 0xf9, 0x76, 0x78, 0x3f, 0x4a, 0x9b, 0x01, 0x01, 0xcb, 0x2c, 0x03, 0x0e, + 0xef, 0x58, 0x47, 0xd0, 0x13, 0x1d, 0xc3, 0xdf, 0xa7, 0x60, 0x61, 0x1b, 0x77, 0xf0, 0x25, 0xb2, + 0xf8, 0x12, 0xe4, 0x59, 0xce, 0x0d, 0x16, 0x36, 0x43, 0x01, 0xb5, 0x76, 0x34, 0xf1, 0xb5, 0x89, + 0xaa, 0x50, 0xe2, 0x4b, 0x87, 0x13, 0x9f, 0xc0, 0x18, 0x2e, 0xf1, 0x51, 0x6c, 0x52, 0xe2, 0x1b, + 0xa2, 0x08, 0x67, 0x2e, 0xb1, 0x80, 0x89, 0x5c, 0x76, 0x03, 0x16, 0xc3, 0x46, 0xb2, 0x0b, 0xf1, + 0x3f, 0x19, 0xb8, 0x3d, 0x50, 0x74, 0xd0, 0x3b, 0xee, 0x18, 0xce, 0xf3, 0xd7, 0xe3, 0xd5, 0x9b, + 0x90, 0x33, 0xad, 0x36, 0x41, 0xa5, 0x69, 0x1e, 0xf0, 0x5e, 0x6b, 0x6d, 0x54, 0x81, 0x6b, 0xd1, + 0xfb, 0xaf, 0x5f, 0xcc, 0x10, 0x55, 0xf1, 0xb7, 0x5f, 0xe1, 0x3c, 0x9a, 0x47, 0x65, 0x98, 0xb1, + 0xb1, 0xde, 0xb6, 0xcc, 0x4e, 0xbf, 0x98, 0x5d, 0x95, 0x1e, 0xcc, 0xa8, 0xc1, 0x3b, 0xfa, 0x99, + 0x04, 0xb7, 0xb9, 0x1d, 0xed, 0xd2, 0x75, 0x0a, 0xee, 0xb2, 0x9d, 0xe0, 0x2e, 0x4b, 0x74, 0xca, + 0x30, 0x7a, 0x68, 0x7b, 0x97, 0x5b, 0x09, 0x24, 0xc8, 0x08, 0xd6, 0xcc, 0x1d, 0xa4, 0x5c, 0xe4, + 0x3a, 0x4d, 0x36, 0x81, 0xbe, 0x45, 0x8f, 0x19, 0xf3, 0xcb, 0x00, 0x2c, 0xef, 0xc3, 0xdd, 0x91, + 0xd6, 0x4e, 0x74, 0xab, 0x96, 0xe1, 0xba, 0x50, 0xf7, 0x44, 0x01, 0xf9, 0xa5, 0x04, 0x77, 0x62, + 0x17, 0xc8, 0xae, 0xd5, 0xef, 0xc3, 0x9c, 0xbf, 0x53, 0x86, 0x79, 0x62, 0xb1, 0xb6, 0xe8, 0xd1, + 0x48, 0xff, 0xb0, 0x2e, 0x80, 0x41, 0xbd, 0xce, 0x80, 0xfa, 0x66, 0xb6, 0x3b, 0x80, 0xc8, 0x4f, + 0xa0, 0x10, 0x25, 0x98, 0x68, 0x01, 0xff, 0x4e, 0xf1, 0x47, 0xf4, 0xc8, 0xec, 0xfe, 0x4f, 0xce, + 0xce, 0x2f, 0x24, 0x58, 0xe5, 0x02, 0xbb, 0x67, 0x8a, 0x42, 0x9b, 0x56, 0x92, 0xf5, 0x61, 0xbf, + 0x89, 0xad, 0x16, 0x11, 0x0c, 0x85, 0x37, 0x77, 0x9c, 0x44, 0x44, 0xf2, 0xf7, 0x60, 0x6d, 0x0c, + 0x31, 0x13, 0x79, 0x7c, 0x8d, 0x0f, 0xe4, 0x21, 0xd3, 0x59, 0x42, 0xfb, 0x67, 0x0a, 0xee, 0x3e, + 0xd5, 0x3b, 0x46, 0x3b, 0xa8, 0xd2, 0x2e, 0xd7, 0xab, 0x25, 0xef, 0x4b, 0x4c, 0xe9, 0x9e, 0xbe, + 0x40, 0xe9, 0xde, 0x11, 0x65, 0x04, 0xba, 0x73, 0xdf, 0x0e, 0x04, 0x8d, 0x5a, 0xd8, 0xd8, 0x49, + 0xe1, 0x2b, 0x39, 0xc3, 0x3f, 0x00, 0x25, 0xc9, 0x22, 0x76, 0x8a, 0x97, 0x21, 0x1f, 0xcc, 0x2d, + 0x88, 0xdc, 0x19, 0x75, 0x00, 0x40, 0x45, 0xc8, 0x9d, 0x61, 0xc7, 0xd1, 0x4f, 0x7d, 0xf9, 0xfe, + 0xab, 0xf2, 0x85, 0x04, 0xa8, 0x6e, 0x38, 0xac, 0x8c, 0xbc, 0xc8, 0xd6, 0x79, 0x05, 0xa6, 0xfe, + 0x4a, 0xc3, 0xa6, 0x6b, 0x1b, 0xac, 0x12, 0xca, 0xaa, 0x70, 0xa6, 0xbf, 0xaa, 0x50, 0x88, 0x57, + 0xfe, 0x38, 0xae, 0x6e, 0xbb, 0x86, 0x79, 0xaa, 0xb9, 0xd6, 0x0b, 0x6c, 0xb2, 0xd3, 0x35, 0xef, + 0x43, 0x9b, 0x1e, 0x50, 0xf9, 0xad, 0x04, 0x0b, 0x21, 0x4b, 0xd8, 0xca, 0x1e, 0x43, 0xce, 0x97, + 0x4d, 0x53, 0xd3, 0x5d, 0xdf, 0x14, 0x01, 0x75, 0x89, 0x6e, 0x85, 0xcf, 0x81, 0x56, 0x00, 0x4c, + 0xfc, 0xca, 0x65, 0x7a, 0xe9, 0xda, 0xf3, 0x1e, 0x84, 0xe8, 0x94, 0xdf, 0x83, 0x2c, 0xdd, 0x90, + 0x71, 0x7b, 0x8b, 0x9f, 0xa7, 0x00, 0x55, 0xb1, 0x1b, 0x94, 0x8c, 0x93, 0xbb, 0x2b, 0x26, 0x98, + 0x53, 0x17, 0x08, 0xe6, 0xef, 0x86, 0xfa, 0x50, 0x7a, 0x1c, 0xde, 0xe2, 0x66, 0x36, 0x11, 0x2b, + 0x93, 0xda, 0xd0, 0x4b, 0xf6, 0x80, 0xca, 0x36, 0x2c, 0x84, 0x14, 0xb2, 0xbd, 0x7b, 0x17, 0x90, + 0x7e, 0xae, 0x1b, 0x1d, 0xfd, 0xb8, 0x43, 0xd7, 0xeb, 0x61, 0x59, 0xf5, 0x7b, 0x2d, 0xc0, 0xf8, + 0x6c, 0xca, 0x1e, 0x9f, 0xec, 0x99, 0xbc, 0x4b, 0x0c, 0x80, 0x3a, 0x7c, 0x2a, 0x1b, 0x12, 0xc7, + 0x4c, 0xac, 0x0a, 0x87, 0x40, 0x6b, 0xc3, 0x69, 0x9c, 0x4d, 0x5a, 0x62, 0xe7, 0x41, 0xbf, 0x4e, + 0xc1, 0x52, 0x02, 0x35, 0x7a, 0x0c, 0x69, 0xbb, 0xdb, 0x62, 0x46, 0xbf, 0x39, 0x86, 0xfc, 0x92, + 0x7a, 0x50, 0xde, 0x99, 0x52, 0x3d, 0x2e, 0xf9, 0x0f, 0x12, 0xa4, 0xd5, 0x83, 0x32, 0xfa, 0x24, + 0x34, 0x16, 0x7a, 0x67, 0x4c, 0x29, 0xfc, 0x74, 0xc8, 0x12, 0x4d, 0x87, 0x8a, 0xb0, 0x58, 0x56, + 0x2b, 0x9b, 0xcd, 0x8a, 0xb6, 0x5d, 0xa9, 0x57, 0x9a, 0x15, 0xed, 0xe9, 0x7e, 0xfd, 0x68, 0xaf, + 0x52, 0x90, 0xbc, 0x4e, 0xeb, 0xe0, 0x68, 0xab, 0x5e, 0x3b, 0xdc, 0xd1, 0x8e, 0x1a, 0xfe, 0x13, + 0xc3, 0xa6, 0x50, 0x01, 0xe6, 0xea, 0xb5, 0xc3, 0x26, 0x03, 0x1c, 0x16, 0xd2, 0x1e, 0xa4, 0x5a, + 0x69, 0x6a, 0xe5, 0xcd, 0x83, 0xcd, 0x72, 0xad, 0xf9, 0x69, 0x21, 0x13, 0x4c, 0x98, 0xfe, 0x92, + 0x85, 0x1b, 0x0d, 0xab, 0x8d, 0x0f, 0x5d, 0xfd, 0xf4, 0x35, 0xb5, 0x14, 0x6a, 0xa4, 0x94, 0xa1, + 0x47, 0xe2, 0x3d, 0x5f, 0x98, 0x58, 0x7b, 0x72, 0x05, 0x83, 0x4a, 0xb0, 0xe0, 0xb8, 0xfa, 0x29, + 0x49, 0x5e, 0xba, 0x7d, 0x8a, 0x5d, 0xad, 0xab, 0xbb, 0xcf, 0x49, 0xe5, 0x9c, 0x57, 0xaf, 0x31, + 0x54, 0x93, 0x60, 0x0e, 0x74, 0xf7, 0xb9, 0xb8, 0xce, 0xce, 0x4e, 0x5c, 0x67, 0x9b, 0x70, 0x83, + 0xd4, 0x22, 0x9e, 0x02, 0xd1, 0x38, 0xe8, 0xd1, 0x88, 0x45, 0x05, 0xe0, 0xa1, 0x9a, 0x62, 0xd1, + 0x14, 0xa0, 0x90, 0x1e, 0x5f, 0x2a, 0x7f, 0x73, 0x84, 0xaa, 0x71, 0x6f, 0xc3, 0x4b, 0xd6, 0x82, + 0x72, 0x15, 0x6e, 0xc5, 0xae, 0xea, 0xeb, 0x2f, 0xad, 0x6f, 0xc1, 0xcd, 0x21, 0x7f, 0xb0, 0xea, + 0xe8, 0x6f, 0x29, 0x28, 0x7a, 0xb8, 0x23, 0xd3, 0x79, 0x7d, 0xb1, 0x1e, 0x13, 0x97, 0xe9, 0xb8, + 0xb8, 0x3c, 0x87, 0x22, 0x09, 0xa8, 0x9e, 0x39, 0x1c, 0x52, 0x99, 0x70, 0x4b, 0x14, 0x67, 0x3b, + 0x8f, 0x18, 0x0a, 0x2b, 0x12, 0xae, 0xc3, 0x48, 0xb9, 0x06, 0x4b, 0x09, 0x6c, 0x13, 0xb9, 0x7c, + 0x89, 0x06, 0x40, 0xc4, 0x34, 0xe6, 0xf4, 0x5f, 0x4e, 0x53, 0xa7, 0xbf, 0xd6, 0xee, 0xba, 0x29, + 0x4c, 0x30, 0xef, 0xf3, 0x8e, 0x13, 0x76, 0x91, 0x5f, 0x6d, 0x8a, 0xb9, 0x03, 0xb3, 0x3c, 0x5d, + 0x96, 0xd0, 0x81, 0x3b, 0x22, 0x07, 0x4d, 0x5f, 0xaa, 0xd7, 0xcf, 0x45, 0x7a, 0x7d, 0x3f, 0x9c, + 0x44, 0x9d, 0xd0, 0xcc, 0x70, 0x38, 0x09, 0xbd, 0xc2, 0x21, 0xc4, 0xe1, 0x24, 0x68, 0xe9, 0x5b, + 0xa2, 0x3c, 0x95, 0x27, 0x0a, 0x3f, 0x18, 0xa9, 0xf0, 0xeb, 0xca, 0x54, 0x2c, 0xe6, 0xff, 0x6f, + 0xc6, 0x00, 0xec, 0xe0, 0x08, 0x1b, 0x78, 0xe5, 0xaf, 0x29, 0x90, 0xe9, 0xb1, 0x7a, 0xad, 0xcd, + 0x75, 0x24, 0x68, 0xd3, 0x43, 0x41, 0xfb, 0x13, 0x90, 0x59, 0x82, 0x8a, 0xef, 0xae, 0x3f, 0x09, + 0xa7, 0xa8, 0x6e, 0x5c, 0x54, 0xc5, 0x77, 0xd4, 0x45, 0x33, 0x06, 0x2d, 0xef, 0xc2, 0x4a, 0x22, + 0xeb, 0x44, 0x1e, 0x5f, 0xf1, 0xb3, 0x9e, 0xb8, 0x7f, 0xfe, 0x18, 0x0a, 0x1e, 0xba, 0x8a, 0xdd, + 0x5a, 0xfb, 0x02, 0x85, 0xed, 0x3b, 0x70, 0x8d, 0x63, 0x67, 0x85, 0x2c, 0x37, 0xbd, 0x90, 0xf8, + 0xe9, 0x85, 0x52, 0xa5, 0xfb, 0x7b, 0xf9, 0x7a, 0xfa, 0x73, 0xba, 0xa8, 0xb8, 0x4a, 0x7a, 0x33, + 0x52, 0x49, 0xd3, 0x6e, 0x6d, 0x25, 0x54, 0x3d, 0x8c, 0xa8, 0xa1, 0xff, 0x24, 0xc1, 0x75, 0x21, + 0x1d, 0xfa, 0x16, 0x5f, 0x3d, 0xdf, 0x4d, 0x94, 0xc9, 0xd7, 0xcd, 0x5d, 0x5a, 0x36, 0x7f, 0x14, + 0x2a, 0x9b, 0xef, 0x8f, 0x64, 0xe7, 0x0b, 0xe6, 0x77, 0x63, 0x0a, 0xe6, 0xc3, 0xe6, 0x66, 0xb5, + 0xa2, 0x1d, 0x35, 0xe8, 0xaf, 0x5f, 0x30, 0xfb, 0xe5, 0xee, 0xfa, 0x3f, 0x52, 0x30, 0x53, 0x23, + 0x01, 0xe4, 0xf6, 0x51, 0x8b, 0x7c, 0xf3, 0x1f, 0xfa, 0x83, 0x02, 0x5a, 0xe3, 0xba, 0xb5, 0xb8, + 0x7f, 0x37, 0xc8, 0x6f, 0x24, 0x13, 0xb1, 0x90, 0x9a, 0x42, 0x0d, 0x98, 0x0f, 0x7d, 0xa8, 0x47, + 0xcb, 0x31, 0xdf, 0xef, 0xa9, 0xd8, 0x95, 0xc4, 0xaf, 0xfb, 0xca, 0x14, 0x3a, 0xe1, 0xfe, 0x64, + 0x10, 0xea, 0x3b, 0xdf, 0x18, 0xe2, 0x14, 0x04, 0x96, 0x7c, 0x6f, 0x04, 0x55, 0xa0, 0xe7, 0x03, + 0xc8, 0x92, 0xef, 0xc7, 0x68, 0x31, 0xf8, 0xca, 0xcd, 0x7d, 0x89, 0x96, 0xaf, 0x47, 0xa0, 0x3e, + 0xdf, 0xfa, 0x17, 0xd3, 0x00, 0x83, 0xc6, 0x07, 0xed, 0xc2, 0x1c, 0xff, 0xd9, 0x10, 0x2d, 0x25, + 0x7c, 0x30, 0x95, 0x97, 0xc5, 0xc8, 0xc0, 0xa6, 0x5d, 0x98, 0xe3, 0x27, 0xf9, 0x03, 0x61, 0x82, + 0x8f, 0x10, 0x03, 0x61, 0xc2, 0xe1, 0xff, 0x14, 0xea, 0xc0, 0xcd, 0x98, 0x29, 0x2a, 0xba, 0x3f, + 0xde, 0x18, 0x5a, 0x7e, 0x73, 0xcc, 0x71, 0xac, 0x32, 0x85, 0x6c, 0xb8, 0x15, 0x3b, 0xc0, 0x43, + 0x0f, 0xc6, 0x1d, 0x4f, 0xca, 0x0f, 0xc7, 0xa0, 0x0c, 0x74, 0xf6, 0x40, 0x8e, 0x9f, 0x51, 0xa1, + 0x87, 0x63, 0x4f, 0xd6, 0xe4, 0xb7, 0xc6, 0x21, 0x0d, 0xd4, 0xee, 0xc0, 0x2c, 0x37, 0x03, 0x42, + 0xb2, 0x70, 0x30, 0x44, 0x05, 0x2f, 0x25, 0x0c, 0x8d, 0xa8, 0x24, 0x6e, 0x7e, 0x31, 0x90, 0x34, + 0x3c, 0x45, 0x19, 0x48, 0x12, 0x0c, 0x3c, 0xa2, 0xee, 0x8f, 0xa4, 0x4a, 0x91, 0xfb, 0xc5, 0x69, + 0x59, 0xe4, 0xfe, 0x98, 0xbc, 0xab, 0x4c, 0xad, 0xff, 0x2a, 0x03, 0x19, 0x2f, 0x97, 0xa1, 0x26, + 0x5c, 0x8d, 0x34, 0x25, 0xe8, 0x76, 0x72, 0xf7, 0x26, 0xdf, 0x89, 0xc5, 0x07, 0x4b, 0xfa, 0x8c, + 0x5e, 0x37, 0xa1, 0xba, 0x1b, 0xad, 0x8e, 0xea, 0x16, 0xe4, 0xbb, 0x09, 0x14, 0x51, 0xd9, 0xe1, + 0x53, 0xb1, 0x3a, 0xaa, 0x92, 0x0b, 0xcb, 0x8e, 0x3b, 0x09, 0x9f, 0xc3, 0x82, 0xe0, 0x12, 0x46, + 0xca, 0xe8, 0x22, 0x42, 0x5e, 0x4b, 0xa4, 0x09, 0x34, 0x6c, 0x41, 0x3e, 0xb8, 0x88, 0x51, 0x91, + 0xe7, 0xe1, 0xaf, 0x76, 0xf9, 0x96, 0x00, 0x13, 0xb5, 0x32, 0x1a, 0x2a, 0x4a, 0x84, 0x47, 0x14, + 0x24, 0x6b, 0x89, 0x34, 0xbe, 0x86, 0xad, 0xec, 0x67, 0xe9, 0x96, 0x63, 0x1c, 0x4f, 0x93, 0xff, + 0xd4, 0x7d, 0xe3, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xd5, 0x78, 0x2f, 0xbb, 0x60, 0x27, 0x00, + 0x00, } From 583304428d8db0ce6f4665835fc8ff0a19562684 Mon Sep 17 00:00:00 2001 From: James DeFelice Date: Fri, 16 Feb 2018 12:06:48 +0000 Subject: [PATCH 3/7] git: ignore .build for the whole project --- .gitignore | 1 + lib/go/.gitignore | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 83250da7..ce0d4443 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /csi.proto.tmp .DS_Store +.build diff --git a/lib/go/.gitignore b/lib/go/.gitignore index 13f0dc28..e1128ce8 100644 --- a/lib/go/.gitignore +++ b/lib/go/.gitignore @@ -1,4 +1,3 @@ /protoc /protoc-gen-go /csi.a -/csi/.build/ From 8d1e6e073803bec77caef392be36b76726f7754a Mon Sep 17 00:00:00 2001 From: James DeFelice Date: Thu, 22 Feb 2018 16:11:03 +0000 Subject: [PATCH 4/7] git: ignore all .tmp files --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index ce0d4443..4f7ede45 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ -/csi.proto.tmp +*.tmp .DS_Store .build From e2959a75925c56bcb67ac69e991c5ff72cbc3725 Mon Sep 17 00:00:00 2001 From: James DeFelice Date: Thu, 22 Feb 2018 22:40:43 +0000 Subject: [PATCH 5/7] spec: remove GetSupportedVersions and per-request Version field --- csi.proto | 173 +++------ lib/go/csi/v1/csi.pb.go | 752 +++++++++++++--------------------------- spec.md | 228 ++++-------- 3 files changed, 357 insertions(+), 796 deletions(-) diff --git a/csi.proto b/csi.proto index 7df32324..8eccf00d 100644 --- a/csi.proto +++ b/csi.proto @@ -6,9 +6,6 @@ option go_package = "csi"; //////// //////// service Identity { - rpc GetSupportedVersions (GetSupportedVersionsRequest) - returns (GetSupportedVersionsResponse) {} - rpc GetPluginInfo(GetPluginInfoRequest) returns (GetPluginInfoResponse) {} @@ -66,30 +63,7 @@ service Node { } //////// //////// -message GetSupportedVersionsRequest { -} - -message GetSupportedVersionsResponse { - // All the CSI versions that the Plugin supports. This field is - // REQUIRED. - repeated Version supported_versions = 1; -} - -// Specifies a version in Semantic Version 2.0 format. -// (http://semver.org/spec/v2.0.0.html) -message Version { - // The value of this field MUST NOT be negative. - int32 major = 1; // This field is REQUIRED. - // The value of this field MUST NOT be negative. - int32 minor = 2; // This field is REQUIRED. - // The value of this field MUST NOT be negative. - int32 patch = 3; // This field is REQUIRED. -} -//////// -//////// message GetPluginInfoRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; } message GetPluginInfoResponse { @@ -111,8 +85,6 @@ message GetPluginInfoResponse { //////// //////// message GetPluginCapabilitiesRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; } message GetPluginCapabilitiesResponse { @@ -148,8 +120,6 @@ message PluginCapability { //////// //////// message ProbeRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; } message ProbeResponse { @@ -158,9 +128,6 @@ message ProbeResponse { //////// //////// message CreateVolumeRequest { - // The API version assumed by the CO. This field is REQUIRED. - Version version = 1; - // 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 @@ -176,12 +143,12 @@ message CreateVolumeRequest { // 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. - string name = 2; + string name = 1; // 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. - CapacityRange capacity_range = 3; + CapacityRange capacity_range = 2; // The capabilities that the provisioned volume MUST have: the Plugin // MUST provision a volume that could satisfy ALL of the @@ -191,12 +158,12 @@ message CreateVolumeRequest { // early validation: if ANY of the specified volume capabilities are // not supported by the Plugin, the call SHALL fail. This field is // REQUIRED. - repeated VolumeCapability volume_capabilities = 4; + repeated VolumeCapability volume_capabilities = 3; // 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. - map parameters = 5; + map parameters = 4; // Credentials used by Controller plugin to authenticate/authorize // volume creation request. @@ -209,7 +176,7 @@ message CreateVolumeRequest { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - map controller_create_credentials = 6; + map controller_create_credentials = 5; } message CreateVolumeResponse { @@ -321,12 +288,9 @@ message Volume { //////// //////// message DeleteVolumeRequest { - // The API version assumed by the CO. This field is REQUIRED. - Version version = 1; - // The ID of the volume to be deprovisioned. // This field is REQUIRED. - string volume_id = 2; + string volume_id = 1; // Credentials used by Controller plugin to authenticate/authorize // volume deletion request. @@ -339,31 +303,29 @@ message DeleteVolumeRequest { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - map controller_delete_credentials = 3; + map controller_delete_credentials = 2; } -message DeleteVolumeResponse {} +message DeleteVolumeResponse { +} //////// //////// message ControllerPublishVolumeRequest { - // The API version assumed by the CO. This field is REQUIRED. - Version version = 1; - // The ID of the volume to be used on a node. // This field is REQUIRED. - string volume_id = 2; + string volume_id = 1; // The ID of the node. This field is REQUIRED. The CO SHALL set this // field to match the node ID returned by `NodeGetId`. - string node_id = 3; + string node_id = 2; // The capability of the volume the CO expects the volume to have. // This is a REQUIRED field. - VolumeCapability volume_capability = 4; + VolumeCapability volume_capability = 3; // Whether to publish the volume in readonly mode. This field is // REQUIRED. - bool readonly = 5; + bool readonly = 4; // Credentials used by Controller plugin to authenticate/authorize // controller publish request. @@ -376,12 +338,12 @@ message ControllerPublishVolumeRequest { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - map controller_publish_credentials = 6; + map controller_publish_credentials = 5; // Attributes of the volume to be used on a node. This field is // OPTIONAL and MUST match the attributes of the Volume identified // by `volume_id`. - map volume_attributes = 7; + map volume_attributes = 6; } message ControllerPublishVolumeResponse { @@ -394,18 +356,15 @@ message ControllerPublishVolumeResponse { //////// //////// message ControllerUnpublishVolumeRequest { - // The API version assumed by the CO. This field is REQUIRED. - Version version = 1; - // The ID of the volume. This field is REQUIRED. - string volume_id = 2; + string volume_id = 1; // The ID of the node. This field is OPTIONAL. The CO SHOULD set this // field to match the node ID returned by `NodeGetId` 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. - string node_id = 3; + string node_id = 2; // Credentials used by Controller plugin to authenticate/authorize // controller unpublish request. @@ -418,27 +377,25 @@ message ControllerUnpublishVolumeRequest { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - map controller_unpublish_credentials = 4; + map controller_unpublish_credentials = 3; } -message ControllerUnpublishVolumeResponse {} +message ControllerUnpublishVolumeResponse { +} //////// //////// message ValidateVolumeCapabilitiesRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; - // The ID of the volume to check. This field is REQUIRED. - string volume_id = 2; + string volume_id = 1; // The capabilities that the CO wants to check for the volume. This // call SHALL return "supported" only if all the volume capabilities // specified below are supported. This field is REQUIRED. - repeated VolumeCapability volume_capabilities = 3; + repeated VolumeCapability volume_capabilities = 2; // Attributes of the volume to check. This field is OPTIONAL and MUST // match the attributes of the Volume identified by `volume_id`. - map volume_attributes = 4; + map volume_attributes = 3; } message ValidateVolumeCapabilitiesResponse { @@ -454,9 +411,6 @@ message ValidateVolumeCapabilitiesResponse { //////// //////// message ListVolumesRequest { - // The API version assumed by the CO. This field is REQUIRED. - Version version = 1; - // 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` @@ -465,13 +419,13 @@ message ListVolumesRequest { // 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. - int32 max_entries = 2; + int32 max_entries = 1; // 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. - string starting_token = 3; + string starting_token = 2; } message ListVolumesResponse { @@ -492,21 +446,18 @@ message ListVolumesResponse { //////// //////// message GetCapacityRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; - // 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. - repeated VolumeCapability volume_capabilities = 2; + repeated VolumeCapability volume_capabilities = 1; // 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. - map parameters = 3; + map parameters = 2; } message GetCapacityResponse { @@ -521,8 +472,6 @@ message GetCapacityResponse { //////// //////// message ControllerGetCapabilitiesRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; } message ControllerGetCapabilitiesResponse { @@ -553,29 +502,26 @@ message ControllerServiceCapability { //////// //////// message NodeStageVolumeRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; - // The ID of the volume to publish. This field is REQUIRED. - string volume_id = 2; + string volume_id = 1; // 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. - map publish_info = 3; + map publish_info = 2; // 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 that there is only one // staging_target_path per volume. // This is a REQUIRED field. - string staging_target_path = 4; + string staging_target_path = 3; // The capability of the volume the CO expects the volume to have. // This is a REQUIRED field. - VolumeCapability volume_capability = 5; + VolumeCapability volume_capability = 4; // Credentials used by Node plugin to authenticate/authorize node // stage request. @@ -588,28 +534,26 @@ message NodeStageVolumeRequest { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - map node_stage_credentials = 6; + map node_stage_credentials = 5; // Attributes of the volume to publish. This field is OPTIONAL and // MUST match the attributes of the VolumeInfo identified by // `volume_id`. - map volume_attributes = 7; + map volume_attributes = 6; } -message NodeStageVolumeResponse {} +message NodeStageVolumeResponse { +} //////// //////// message NodeUnstageVolumeRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; - // The ID of the volume. This field is REQUIRED. - string volume_id = 2; + string volume_id = 1; // The path at which the volume was published. It MUST be an absolute // path in the root filesystem of the process serving this request. // This is a REQUIRED field. - string staging_target_path = 3; + string staging_target_path = 2; // Credentials used by Node plugin to authenticate/authorize node // unstage request. @@ -622,25 +566,23 @@ message NodeUnstageVolumeRequest { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - map node_unstage_credentials = 4; + map node_unstage_credentials = 3; } -message NodeUnstageVolumeResponse {} +message NodeUnstageVolumeResponse { +} //////// //////// message NodePublishVolumeRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; - // The ID of the volume to publish. This field is REQUIRED. - string volume_id = 2; + string volume_id = 1; // 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. - map publish_info = 3; + map publish_info = 2; // The path to which the device was mounted by `NodeStageVolume`. // It MUST be an absolute path in the root filesystem of the process @@ -648,7 +590,7 @@ message NodePublishVolumeRequest { // It MUST be set if the Node Plugin implements the // `STAGE_UNSTAGE_VOLUME` node capability. // This is an OPTIONAL field. - string staging_target_path = 4; + string staging_target_path = 3; // The path to which the volume will be published. It MUST be an // absolute path in the root filesystem of the process serving this @@ -656,15 +598,15 @@ message NodePublishVolumeRequest { // The CO SHALL ensure that the path exists, and that the process // serving the request has `read` and `write` permissions to the path. // This is a REQUIRED field. - string target_path = 5; + string target_path = 4; // The capability of the volume the CO expects the volume to have. // This is a REQUIRED field. - VolumeCapability volume_capability = 6; + VolumeCapability volume_capability = 5; // Whether to publish the volume in readonly mode. This field is // REQUIRED. - bool readonly = 7; + bool readonly = 6; // Credentials used by Node plugin to authenticate/authorize node // publish request. @@ -677,29 +619,27 @@ message NodePublishVolumeRequest { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - map node_publish_credentials = 8; + map node_publish_credentials = 7; // Attributes of the volume to publish. This field is OPTIONAL and // MUST match the attributes of the Volume identified by // `volume_id`. - map volume_attributes = 9; + map volume_attributes = 8; } -message NodePublishVolumeResponse {} +message NodePublishVolumeResponse { +} //////// //////// message NodeUnpublishVolumeRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; - // The ID of the volume. This field is REQUIRED. - string volume_id = 2; + string volume_id = 1; // The path at which the volume was published. It MUST be an absolute // path in the root filesystem of the process serving this request. // This is a REQUIRED field. - string target_path = 3; + string target_path = 2; // Credentials used by Node plugin to authenticate/authorize node // unpublish request. @@ -712,15 +652,14 @@ message NodeUnpublishVolumeRequest { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - map node_unpublish_credentials = 4; + map node_unpublish_credentials = 3; } -message NodeUnpublishVolumeResponse {} +message NodeUnpublishVolumeResponse { +} //////// //////// message NodeGetIdRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; } message NodeGetIdResponse { @@ -732,8 +671,6 @@ message NodeGetIdResponse { //////// //////// message NodeGetCapabilitiesRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; } message NodeGetCapabilitiesResponse { diff --git a/lib/go/csi/v1/csi.pb.go b/lib/go/csi/v1/csi.pb.go index 07ca8566..e6459805 100644 --- a/lib/go/csi/v1/csi.pb.go +++ b/lib/go/csi/v1/csi.pb.go @@ -8,9 +8,6 @@ It is generated from these files: csi.proto It has these top-level messages: - GetSupportedVersionsRequest - GetSupportedVersionsResponse - Version GetPluginInfoRequest GetPluginInfoResponse GetPluginCapabilitiesRequest @@ -102,7 +99,7 @@ func (x PluginCapability_Service_Type) String() string { return proto.EnumName(PluginCapability_Service_Type_name, int32(x)) } func (PluginCapability_Service_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{7, 0, 0} + return fileDescriptor0, []int{4, 0, 0} } type VolumeCapability_AccessMode_Mode int32 @@ -146,7 +143,7 @@ func (x VolumeCapability_AccessMode_Mode) String() string { return proto.EnumName(VolumeCapability_AccessMode_Mode_name, int32(x)) } func (VolumeCapability_AccessMode_Mode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{12, 2, 0} + return fileDescriptor0, []int{9, 2, 0} } type ControllerServiceCapability_RPC_Type int32 @@ -178,7 +175,7 @@ func (x ControllerServiceCapability_RPC_Type) String() string { return proto.EnumName(ControllerServiceCapability_RPC_Type_name, int32(x)) } func (ControllerServiceCapability_RPC_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{29, 0, 0} + return fileDescriptor0, []int{26, 0, 0} } type NodeServiceCapability_RPC_Type int32 @@ -201,92 +198,18 @@ func (x NodeServiceCapability_RPC_Type) String() string { return proto.EnumName(NodeServiceCapability_RPC_Type_name, int32(x)) } func (NodeServiceCapability_RPC_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{42, 0, 0} -} - -// ////// -// ////// -type GetSupportedVersionsRequest struct { -} - -func (m *GetSupportedVersionsRequest) Reset() { *m = GetSupportedVersionsRequest{} } -func (m *GetSupportedVersionsRequest) String() string { return proto.CompactTextString(m) } -func (*GetSupportedVersionsRequest) ProtoMessage() {} -func (*GetSupportedVersionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } - -type GetSupportedVersionsResponse struct { - // All the CSI versions that the Plugin supports. This field is - // REQUIRED. - SupportedVersions []*Version `protobuf:"bytes,1,rep,name=supported_versions,json=supportedVersions" json:"supported_versions,omitempty"` -} - -func (m *GetSupportedVersionsResponse) Reset() { *m = GetSupportedVersionsResponse{} } -func (m *GetSupportedVersionsResponse) String() string { return proto.CompactTextString(m) } -func (*GetSupportedVersionsResponse) ProtoMessage() {} -func (*GetSupportedVersionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } - -func (m *GetSupportedVersionsResponse) GetSupportedVersions() []*Version { - if m != nil { - return m.SupportedVersions - } - return nil -} - -// Specifies a version in Semantic Version 2.0 format. -// (http://semver.org/spec/v2.0.0.html) -type Version struct { - // The value of this field MUST NOT be negative. - Major int32 `protobuf:"varint,1,opt,name=major" json:"major,omitempty"` - // The value of this field MUST NOT be negative. - Minor int32 `protobuf:"varint,2,opt,name=minor" json:"minor,omitempty"` - // The value of this field MUST NOT be negative. - Patch int32 `protobuf:"varint,3,opt,name=patch" json:"patch,omitempty"` -} - -func (m *Version) Reset() { *m = Version{} } -func (m *Version) String() string { return proto.CompactTextString(m) } -func (*Version) ProtoMessage() {} -func (*Version) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } - -func (m *Version) GetMajor() int32 { - if m != nil { - return m.Major - } - return 0 -} - -func (m *Version) GetMinor() int32 { - if m != nil { - return m.Minor - } - return 0 -} - -func (m *Version) GetPatch() int32 { - if m != nil { - return m.Patch - } - return 0 + return fileDescriptor0, []int{39, 0, 0} } // ////// // ////// type GetPluginInfoRequest struct { - // The API version assumed by the CO. This is a REQUIRED field. - Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` } func (m *GetPluginInfoRequest) Reset() { *m = GetPluginInfoRequest{} } func (m *GetPluginInfoRequest) String() string { return proto.CompactTextString(m) } func (*GetPluginInfoRequest) ProtoMessage() {} -func (*GetPluginInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } - -func (m *GetPluginInfoRequest) GetVersion() *Version { - if m != nil { - return m.Version - } - return nil -} +func (*GetPluginInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } type GetPluginInfoResponse struct { // The name MUST follow reverse domain name notation format @@ -306,7 +229,7 @@ type GetPluginInfoResponse struct { func (m *GetPluginInfoResponse) Reset() { *m = GetPluginInfoResponse{} } func (m *GetPluginInfoResponse) String() string { return proto.CompactTextString(m) } func (*GetPluginInfoResponse) ProtoMessage() {} -func (*GetPluginInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } +func (*GetPluginInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } func (m *GetPluginInfoResponse) GetName() string { if m != nil { @@ -332,21 +255,12 @@ func (m *GetPluginInfoResponse) GetManifest() map[string]string { // ////// // ////// type GetPluginCapabilitiesRequest struct { - // The API version assumed by the CO. This is a REQUIRED field. - Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` } func (m *GetPluginCapabilitiesRequest) Reset() { *m = GetPluginCapabilitiesRequest{} } func (m *GetPluginCapabilitiesRequest) String() string { return proto.CompactTextString(m) } func (*GetPluginCapabilitiesRequest) ProtoMessage() {} -func (*GetPluginCapabilitiesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } - -func (m *GetPluginCapabilitiesRequest) GetVersion() *Version { - if m != nil { - return m.Version - } - return nil -} +func (*GetPluginCapabilitiesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } type GetPluginCapabilitiesResponse struct { // All the capabilities that the controller service supports. This @@ -357,7 +271,7 @@ type GetPluginCapabilitiesResponse struct { func (m *GetPluginCapabilitiesResponse) Reset() { *m = GetPluginCapabilitiesResponse{} } func (m *GetPluginCapabilitiesResponse) String() string { return proto.CompactTextString(m) } func (*GetPluginCapabilitiesResponse) ProtoMessage() {} -func (*GetPluginCapabilitiesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } +func (*GetPluginCapabilitiesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } func (m *GetPluginCapabilitiesResponse) GetCapabilities() []*PluginCapability { if m != nil { @@ -376,7 +290,7 @@ type PluginCapability struct { func (m *PluginCapability) Reset() { *m = PluginCapability{} } func (m *PluginCapability) String() string { return proto.CompactTextString(m) } func (*PluginCapability) ProtoMessage() {} -func (*PluginCapability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } +func (*PluginCapability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } type isPluginCapability_Type interface { isPluginCapability_Type() @@ -464,7 +378,7 @@ type PluginCapability_Service struct { func (m *PluginCapability_Service) Reset() { *m = PluginCapability_Service{} } func (m *PluginCapability_Service) String() string { return proto.CompactTextString(m) } func (*PluginCapability_Service) ProtoMessage() {} -func (*PluginCapability_Service) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7, 0} } +func (*PluginCapability_Service) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4, 0} } func (m *PluginCapability_Service) GetType() PluginCapability_Service_Type { if m != nil { @@ -476,21 +390,12 @@ func (m *PluginCapability_Service) GetType() PluginCapability_Service_Type { // ////// // ////// type ProbeRequest struct { - // The API version assumed by the CO. This is a REQUIRED field. - Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` } func (m *ProbeRequest) Reset() { *m = ProbeRequest{} } func (m *ProbeRequest) String() string { return proto.CompactTextString(m) } func (*ProbeRequest) ProtoMessage() {} -func (*ProbeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } - -func (m *ProbeRequest) GetVersion() *Version { - if m != nil { - return m.Version - } - return nil -} +func (*ProbeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } type ProbeResponse struct { } @@ -498,13 +403,11 @@ type ProbeResponse struct { func (m *ProbeResponse) Reset() { *m = ProbeResponse{} } func (m *ProbeResponse) String() string { return proto.CompactTextString(m) } func (*ProbeResponse) ProtoMessage() {} -func (*ProbeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } +func (*ProbeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } // ////// // ////// type CreateVolumeRequest struct { - // The API version assumed by the CO. This field is REQUIRED. - Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` // 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 @@ -520,11 +423,11 @@ type CreateVolumeRequest struct { // 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. - Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` // 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. - CapacityRange *CapacityRange `protobuf:"bytes,3,opt,name=capacity_range,json=capacityRange" json:"capacity_range,omitempty"` + CapacityRange *CapacityRange `protobuf:"bytes,2,opt,name=capacity_range,json=capacityRange" json:"capacity_range,omitempty"` // The capabilities that the provisioned volume MUST have: the Plugin // MUST provision a volume that could satisfy ALL of the // capabilities specified in this list. The Plugin MUST assume that @@ -533,11 +436,11 @@ type CreateVolumeRequest struct { // early validation: if ANY of the specified volume capabilities are // not supported by the Plugin, the call SHALL fail. This field is // REQUIRED. - VolumeCapabilities []*VolumeCapability `protobuf:"bytes,4,rep,name=volume_capabilities,json=volumeCapabilities" json:"volume_capabilities,omitempty"` + VolumeCapabilities []*VolumeCapability `protobuf:"bytes,3,rep,name=volume_capabilities,json=volumeCapabilities" json:"volume_capabilities,omitempty"` // 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,5,rep,name=parameters" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Parameters map[string]string `protobuf:"bytes,4,rep,name=parameters" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Credentials used by Controller plugin to authenticate/authorize // volume creation request. // This field contains credential data, for example username and @@ -549,20 +452,13 @@ type CreateVolumeRequest struct { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - ControllerCreateCredentials map[string]string `protobuf:"bytes,6,rep,name=controller_create_credentials,json=controllerCreateCredentials" json:"controller_create_credentials,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + ControllerCreateCredentials map[string]string `protobuf:"bytes,5,rep,name=controller_create_credentials,json=controllerCreateCredentials" json:"controller_create_credentials,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` } func (m *CreateVolumeRequest) Reset() { *m = CreateVolumeRequest{} } func (m *CreateVolumeRequest) String() string { return proto.CompactTextString(m) } func (*CreateVolumeRequest) ProtoMessage() {} -func (*CreateVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } - -func (m *CreateVolumeRequest) GetVersion() *Version { - if m != nil { - return m.Version - } - return nil -} +func (*CreateVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } func (m *CreateVolumeRequest) GetName() string { if m != nil { @@ -609,7 +505,7 @@ type CreateVolumeResponse struct { func (m *CreateVolumeResponse) Reset() { *m = CreateVolumeResponse{} } func (m *CreateVolumeResponse) String() string { return proto.CompactTextString(m) } func (*CreateVolumeResponse) ProtoMessage() {} -func (*CreateVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } +func (*CreateVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } func (m *CreateVolumeResponse) GetVolume() *Volume { if m != nil { @@ -634,7 +530,7 @@ type VolumeCapability struct { func (m *VolumeCapability) Reset() { *m = VolumeCapability{} } func (m *VolumeCapability) String() string { return proto.CompactTextString(m) } func (*VolumeCapability) ProtoMessage() {} -func (*VolumeCapability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } +func (*VolumeCapability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } type isVolumeCapability_AccessType interface { isVolumeCapability_AccessType() @@ -756,12 +652,10 @@ func _VolumeCapability_OneofSizer(msg proto.Message) (n int) { type VolumeCapability_BlockVolume struct { } -func (m *VolumeCapability_BlockVolume) Reset() { *m = VolumeCapability_BlockVolume{} } -func (m *VolumeCapability_BlockVolume) String() string { return proto.CompactTextString(m) } -func (*VolumeCapability_BlockVolume) ProtoMessage() {} -func (*VolumeCapability_BlockVolume) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{12, 0} -} +func (m *VolumeCapability_BlockVolume) Reset() { *m = VolumeCapability_BlockVolume{} } +func (m *VolumeCapability_BlockVolume) String() string { return proto.CompactTextString(m) } +func (*VolumeCapability_BlockVolume) ProtoMessage() {} +func (*VolumeCapability_BlockVolume) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9, 0} } // Indicate that the volume will be accessed via the filesystem API. type VolumeCapability_MountVolume struct { @@ -776,12 +670,10 @@ type VolumeCapability_MountVolume struct { MountFlags []string `protobuf:"bytes,2,rep,name=mount_flags,json=mountFlags" json:"mount_flags,omitempty"` } -func (m *VolumeCapability_MountVolume) Reset() { *m = VolumeCapability_MountVolume{} } -func (m *VolumeCapability_MountVolume) String() string { return proto.CompactTextString(m) } -func (*VolumeCapability_MountVolume) ProtoMessage() {} -func (*VolumeCapability_MountVolume) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{12, 1} -} +func (m *VolumeCapability_MountVolume) Reset() { *m = VolumeCapability_MountVolume{} } +func (m *VolumeCapability_MountVolume) String() string { return proto.CompactTextString(m) } +func (*VolumeCapability_MountVolume) ProtoMessage() {} +func (*VolumeCapability_MountVolume) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9, 1} } func (m *VolumeCapability_MountVolume) GetFsType() string { if m != nil { @@ -806,7 +698,7 @@ type VolumeCapability_AccessMode struct { func (m *VolumeCapability_AccessMode) Reset() { *m = VolumeCapability_AccessMode{} } func (m *VolumeCapability_AccessMode) String() string { return proto.CompactTextString(m) } func (*VolumeCapability_AccessMode) ProtoMessage() {} -func (*VolumeCapability_AccessMode) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12, 2} } +func (*VolumeCapability_AccessMode) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9, 2} } func (m *VolumeCapability_AccessMode) GetMode() VolumeCapability_AccessMode_Mode { if m != nil { @@ -832,7 +724,7 @@ type CapacityRange struct { func (m *CapacityRange) Reset() { *m = CapacityRange{} } func (m *CapacityRange) String() string { return proto.CompactTextString(m) } func (*CapacityRange) ProtoMessage() {} -func (*CapacityRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } +func (*CapacityRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } func (m *CapacityRange) GetRequiredBytes() int64 { if m != nil { @@ -873,7 +765,7 @@ type Volume struct { func (m *Volume) Reset() { *m = Volume{} } func (m *Volume) String() string { return proto.CompactTextString(m) } func (*Volume) ProtoMessage() {} -func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } func (m *Volume) GetCapacityBytes() int64 { if m != nil { @@ -899,11 +791,9 @@ func (m *Volume) GetAttributes() map[string]string { // ////// // ////// type DeleteVolumeRequest struct { - // The API version assumed by the CO. This field is REQUIRED. - Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` // The ID of the volume to be deprovisioned. // This field is REQUIRED. - VolumeId string `protobuf:"bytes,2,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` // Credentials used by Controller plugin to authenticate/authorize // volume deletion request. // This field contains credential data, for example username and @@ -915,20 +805,13 @@ type DeleteVolumeRequest struct { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - ControllerDeleteCredentials map[string]string `protobuf:"bytes,3,rep,name=controller_delete_credentials,json=controllerDeleteCredentials" json:"controller_delete_credentials,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + ControllerDeleteCredentials map[string]string `protobuf:"bytes,2,rep,name=controller_delete_credentials,json=controllerDeleteCredentials" json:"controller_delete_credentials,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` } func (m *DeleteVolumeRequest) Reset() { *m = DeleteVolumeRequest{} } func (m *DeleteVolumeRequest) String() string { return proto.CompactTextString(m) } func (*DeleteVolumeRequest) ProtoMessage() {} -func (*DeleteVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } - -func (m *DeleteVolumeRequest) GetVersion() *Version { - if m != nil { - return m.Version - } - return nil -} +func (*DeleteVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } func (m *DeleteVolumeRequest) GetVolumeId() string { if m != nil { @@ -950,25 +833,23 @@ type DeleteVolumeResponse struct { func (m *DeleteVolumeResponse) Reset() { *m = DeleteVolumeResponse{} } func (m *DeleteVolumeResponse) String() string { return proto.CompactTextString(m) } func (*DeleteVolumeResponse) ProtoMessage() {} -func (*DeleteVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } +func (*DeleteVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } // ////// // ////// type ControllerPublishVolumeRequest struct { - // The API version assumed by the CO. This field is REQUIRED. - Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` // The ID of the volume to be used on a node. // This field is REQUIRED. - VolumeId string `protobuf:"bytes,2,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` // The ID of the node. This field is REQUIRED. The CO SHALL set this // field to match the node ID returned by `NodeGetId`. - NodeId string `protobuf:"bytes,3,opt,name=node_id,json=nodeId" json:"node_id,omitempty"` + NodeId string `protobuf:"bytes,2,opt,name=node_id,json=nodeId" json:"node_id,omitempty"` // The capability of the volume the CO expects the volume to have. // This is a REQUIRED field. - VolumeCapability *VolumeCapability `protobuf:"bytes,4,opt,name=volume_capability,json=volumeCapability" json:"volume_capability,omitempty"` + VolumeCapability *VolumeCapability `protobuf:"bytes,3,opt,name=volume_capability,json=volumeCapability" json:"volume_capability,omitempty"` // Whether to publish the volume in readonly mode. This field is // REQUIRED. - Readonly bool `protobuf:"varint,5,opt,name=readonly" json:"readonly,omitempty"` + Readonly bool `protobuf:"varint,4,opt,name=readonly" json:"readonly,omitempty"` // Credentials used by Controller plugin to authenticate/authorize // controller publish request. // This field contains credential data, for example username and @@ -980,24 +861,17 @@ type ControllerPublishVolumeRequest struct { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - ControllerPublishCredentials map[string]string `protobuf:"bytes,6,rep,name=controller_publish_credentials,json=controllerPublishCredentials" json:"controller_publish_credentials,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + ControllerPublishCredentials map[string]string `protobuf:"bytes,5,rep,name=controller_publish_credentials,json=controllerPublishCredentials" json:"controller_publish_credentials,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Attributes of the volume to be used on a node. This field is // OPTIONAL and MUST match the attributes of the Volume identified // by `volume_id`. - VolumeAttributes map[string]string `protobuf:"bytes,7,rep,name=volume_attributes,json=volumeAttributes" json:"volume_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + VolumeAttributes map[string]string `protobuf:"bytes,6,rep,name=volume_attributes,json=volumeAttributes" json:"volume_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` } func (m *ControllerPublishVolumeRequest) Reset() { *m = ControllerPublishVolumeRequest{} } func (m *ControllerPublishVolumeRequest) String() string { return proto.CompactTextString(m) } func (*ControllerPublishVolumeRequest) ProtoMessage() {} -func (*ControllerPublishVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } - -func (m *ControllerPublishVolumeRequest) GetVersion() *Version { - if m != nil { - return m.Version - } - return nil -} +func (*ControllerPublishVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } func (m *ControllerPublishVolumeRequest) GetVolumeId() string { if m != nil { @@ -1053,7 +927,7 @@ func (m *ControllerPublishVolumeResponse) Reset() { *m = ControllerPubli func (m *ControllerPublishVolumeResponse) String() string { return proto.CompactTextString(m) } func (*ControllerPublishVolumeResponse) ProtoMessage() {} func (*ControllerPublishVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{18} + return fileDescriptor0, []int{15} } func (m *ControllerPublishVolumeResponse) GetPublishInfo() map[string]string { @@ -1066,16 +940,14 @@ func (m *ControllerPublishVolumeResponse) GetPublishInfo() map[string]string { // ////// // ////// type ControllerUnpublishVolumeRequest struct { - // The API version assumed by the CO. This field is REQUIRED. - Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` // The ID of the volume. This field is REQUIRED. - VolumeId string `protobuf:"bytes,2,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` // The ID of the node. This field is OPTIONAL. The CO SHOULD set this // field to match the node ID returned by `NodeGetId` 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 `protobuf:"bytes,3,opt,name=node_id,json=nodeId" json:"node_id,omitempty"` + NodeId string `protobuf:"bytes,2,opt,name=node_id,json=nodeId" json:"node_id,omitempty"` // Credentials used by Controller plugin to authenticate/authorize // controller unpublish request. // This field contains credential data, for example username and @@ -1087,21 +959,14 @@ type ControllerUnpublishVolumeRequest struct { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - ControllerUnpublishCredentials map[string]string `protobuf:"bytes,4,rep,name=controller_unpublish_credentials,json=controllerUnpublishCredentials" json:"controller_unpublish_credentials,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + ControllerUnpublishCredentials map[string]string `protobuf:"bytes,3,rep,name=controller_unpublish_credentials,json=controllerUnpublishCredentials" json:"controller_unpublish_credentials,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` } func (m *ControllerUnpublishVolumeRequest) Reset() { *m = ControllerUnpublishVolumeRequest{} } func (m *ControllerUnpublishVolumeRequest) String() string { return proto.CompactTextString(m) } func (*ControllerUnpublishVolumeRequest) ProtoMessage() {} func (*ControllerUnpublishVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{19} -} - -func (m *ControllerUnpublishVolumeRequest) GetVersion() *Version { - if m != nil { - return m.Version - } - return nil + return fileDescriptor0, []int{16} } func (m *ControllerUnpublishVolumeRequest) GetVolumeId() string { @@ -1132,37 +997,28 @@ func (m *ControllerUnpublishVolumeResponse) Reset() { *m = ControllerUnp func (m *ControllerUnpublishVolumeResponse) String() string { return proto.CompactTextString(m) } func (*ControllerUnpublishVolumeResponse) ProtoMessage() {} func (*ControllerUnpublishVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{20} + return fileDescriptor0, []int{17} } // ////// // ////// type ValidateVolumeCapabilitiesRequest struct { - // The API version assumed by the CO. This is a REQUIRED field. - Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` // The ID of the volume to check. This field is REQUIRED. - VolumeId string `protobuf:"bytes,2,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` // The capabilities that the CO wants to check for the volume. This // call SHALL return "supported" 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" json:"volume_capabilities,omitempty"` + VolumeCapabilities []*VolumeCapability `protobuf:"bytes,2,rep,name=volume_capabilities,json=volumeCapabilities" json:"volume_capabilities,omitempty"` // Attributes of the volume to check. This field is OPTIONAL and MUST // match the attributes of the Volume identified by `volume_id`. - VolumeAttributes map[string]string `protobuf:"bytes,4,rep,name=volume_attributes,json=volumeAttributes" json:"volume_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + VolumeAttributes map[string]string `protobuf:"bytes,3,rep,name=volume_attributes,json=volumeAttributes" json:"volume_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` } func (m *ValidateVolumeCapabilitiesRequest) Reset() { *m = ValidateVolumeCapabilitiesRequest{} } func (m *ValidateVolumeCapabilitiesRequest) String() string { return proto.CompactTextString(m) } func (*ValidateVolumeCapabilitiesRequest) ProtoMessage() {} func (*ValidateVolumeCapabilitiesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{21} -} - -func (m *ValidateVolumeCapabilitiesRequest) GetVersion() *Version { - if m != nil { - return m.Version - } - return nil + return fileDescriptor0, []int{18} } func (m *ValidateVolumeCapabilitiesRequest) GetVolumeId() string { @@ -1200,7 +1056,7 @@ func (m *ValidateVolumeCapabilitiesResponse) Reset() { *m = ValidateVolu func (m *ValidateVolumeCapabilitiesResponse) String() string { return proto.CompactTextString(m) } func (*ValidateVolumeCapabilitiesResponse) ProtoMessage() {} func (*ValidateVolumeCapabilitiesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{22} + return fileDescriptor0, []int{19} } func (m *ValidateVolumeCapabilitiesResponse) GetSupported() bool { @@ -1220,8 +1076,6 @@ func (m *ValidateVolumeCapabilitiesResponse) GetMessage() string { // ////// // ////// type ListVolumesRequest struct { - // The API version assumed by the CO. This field is REQUIRED. - Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` // 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` @@ -1230,25 +1084,18 @@ type ListVolumesRequest struct { // 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 `protobuf:"varint,2,opt,name=max_entries,json=maxEntries" json:"max_entries,omitempty"` + MaxEntries int32 `protobuf:"varint,1,opt,name=max_entries,json=maxEntries" json:"max_entries,omitempty"` // 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 `protobuf:"bytes,3,opt,name=starting_token,json=startingToken" json:"starting_token,omitempty"` + StartingToken string `protobuf:"bytes,2,opt,name=starting_token,json=startingToken" json:"starting_token,omitempty"` } func (m *ListVolumesRequest) Reset() { *m = ListVolumesRequest{} } func (m *ListVolumesRequest) String() string { return proto.CompactTextString(m) } func (*ListVolumesRequest) ProtoMessage() {} -func (*ListVolumesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } - -func (m *ListVolumesRequest) GetVersion() *Version { - if m != nil { - return m.Version - } - return nil -} +func (*ListVolumesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } func (m *ListVolumesRequest) GetMaxEntries() int32 { if m != nil { @@ -1278,7 +1125,7 @@ type ListVolumesResponse struct { func (m *ListVolumesResponse) Reset() { *m = ListVolumesResponse{} } func (m *ListVolumesResponse) String() string { return proto.CompactTextString(m) } func (*ListVolumesResponse) ProtoMessage() {} -func (*ListVolumesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } +func (*ListVolumesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } func (m *ListVolumesResponse) GetEntries() []*ListVolumesResponse_Entry { if m != nil { @@ -1301,7 +1148,7 @@ type ListVolumesResponse_Entry struct { func (m *ListVolumesResponse_Entry) Reset() { *m = ListVolumesResponse_Entry{} } func (m *ListVolumesResponse_Entry) String() string { return proto.CompactTextString(m) } func (*ListVolumesResponse_Entry) ProtoMessage() {} -func (*ListVolumesResponse_Entry) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24, 0} } +func (*ListVolumesResponse_Entry) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21, 0} } func (m *ListVolumesResponse_Entry) GetVolume() *Volume { if m != nil { @@ -1313,32 +1160,23 @@ func (m *ListVolumesResponse_Entry) GetVolume() *Volume { // ////// // ////// type GetCapacityRequest struct { - // The API version assumed by the CO. This is a REQUIRED field. - Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` // 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 `protobuf:"bytes,2,rep,name=volume_capabilities,json=volumeCapabilities" json:"volume_capabilities,omitempty"` + VolumeCapabilities []*VolumeCapability `protobuf:"bytes,1,rep,name=volume_capabilities,json=volumeCapabilities" json:"volume_capabilities,omitempty"` // 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 `protobuf:"bytes,3,rep,name=parameters" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Parameters map[string]string `protobuf:"bytes,2,rep,name=parameters" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` } func (m *GetCapacityRequest) Reset() { *m = GetCapacityRequest{} } func (m *GetCapacityRequest) String() string { return proto.CompactTextString(m) } func (*GetCapacityRequest) ProtoMessage() {} -func (*GetCapacityRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } - -func (m *GetCapacityRequest) GetVersion() *Version { - if m != nil { - return m.Version - } - return nil -} +func (*GetCapacityRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } func (m *GetCapacityRequest) GetVolumeCapabilities() []*VolumeCapability { if m != nil { @@ -1367,7 +1205,7 @@ type GetCapacityResponse struct { func (m *GetCapacityResponse) Reset() { *m = GetCapacityResponse{} } func (m *GetCapacityResponse) String() string { return proto.CompactTextString(m) } func (*GetCapacityResponse) ProtoMessage() {} -func (*GetCapacityResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } +func (*GetCapacityResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } func (m *GetCapacityResponse) GetAvailableCapacity() int64 { if m != nil { @@ -1379,22 +1217,13 @@ func (m *GetCapacityResponse) GetAvailableCapacity() int64 { // ////// // ////// type ControllerGetCapabilitiesRequest struct { - // The API version assumed by the CO. This is a REQUIRED field. - Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` } func (m *ControllerGetCapabilitiesRequest) Reset() { *m = ControllerGetCapabilitiesRequest{} } func (m *ControllerGetCapabilitiesRequest) String() string { return proto.CompactTextString(m) } func (*ControllerGetCapabilitiesRequest) ProtoMessage() {} func (*ControllerGetCapabilitiesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{27} -} - -func (m *ControllerGetCapabilitiesRequest) GetVersion() *Version { - if m != nil { - return m.Version - } - return nil + return fileDescriptor0, []int{24} } type ControllerGetCapabilitiesResponse struct { @@ -1407,7 +1236,7 @@ func (m *ControllerGetCapabilitiesResponse) Reset() { *m = ControllerGet func (m *ControllerGetCapabilitiesResponse) String() string { return proto.CompactTextString(m) } func (*ControllerGetCapabilitiesResponse) ProtoMessage() {} func (*ControllerGetCapabilitiesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{28} + return fileDescriptor0, []int{25} } func (m *ControllerGetCapabilitiesResponse) GetCapabilities() []*ControllerServiceCapability { @@ -1427,7 +1256,7 @@ type ControllerServiceCapability struct { func (m *ControllerServiceCapability) Reset() { *m = ControllerServiceCapability{} } func (m *ControllerServiceCapability) String() string { return proto.CompactTextString(m) } func (*ControllerServiceCapability) ProtoMessage() {} -func (*ControllerServiceCapability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } +func (*ControllerServiceCapability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } type isControllerServiceCapability_Type interface { isControllerServiceCapability_Type() @@ -1516,7 +1345,7 @@ func (m *ControllerServiceCapability_RPC) Reset() { *m = ControllerServi func (m *ControllerServiceCapability_RPC) String() string { return proto.CompactTextString(m) } func (*ControllerServiceCapability_RPC) ProtoMessage() {} func (*ControllerServiceCapability_RPC) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{29, 0} + return fileDescriptor0, []int{26, 0} } func (m *ControllerServiceCapability_RPC) GetType() ControllerServiceCapability_RPC_Type { @@ -1529,25 +1358,23 @@ func (m *ControllerServiceCapability_RPC) GetType() ControllerServiceCapability_ // ////// // ////// type NodeStageVolumeRequest struct { - // The API version assumed by the CO. This is a REQUIRED field. - Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` // The ID of the volume to publish. This field is REQUIRED. - VolumeId string `protobuf:"bytes,2,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` // 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. - PublishInfo map[string]string `protobuf:"bytes,3,rep,name=publish_info,json=publishInfo" json:"publish_info,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + PublishInfo map[string]string `protobuf:"bytes,2,rep,name=publish_info,json=publishInfo" json:"publish_info,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 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 that there is only one // staging_target_path per volume. // This is a REQUIRED field. - StagingTargetPath string `protobuf:"bytes,4,opt,name=staging_target_path,json=stagingTargetPath" json:"staging_target_path,omitempty"` + StagingTargetPath string `protobuf:"bytes,3,opt,name=staging_target_path,json=stagingTargetPath" json:"staging_target_path,omitempty"` // The capability of the volume the CO expects the volume to have. // This is a REQUIRED field. - VolumeCapability *VolumeCapability `protobuf:"bytes,5,opt,name=volume_capability,json=volumeCapability" json:"volume_capability,omitempty"` + VolumeCapability *VolumeCapability `protobuf:"bytes,4,opt,name=volume_capability,json=volumeCapability" json:"volume_capability,omitempty"` // Credentials used by Node plugin to authenticate/authorize node // stage request. // This field contains credential data, for example username and @@ -1559,24 +1386,17 @@ type NodeStageVolumeRequest struct { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - NodeStageCredentials map[string]string `protobuf:"bytes,6,rep,name=node_stage_credentials,json=nodeStageCredentials" json:"node_stage_credentials,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + NodeStageCredentials map[string]string `protobuf:"bytes,5,rep,name=node_stage_credentials,json=nodeStageCredentials" json:"node_stage_credentials,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Attributes of the volume to publish. This field is OPTIONAL and // MUST match the attributes of the VolumeInfo identified by // `volume_id`. - VolumeAttributes map[string]string `protobuf:"bytes,7,rep,name=volume_attributes,json=volumeAttributes" json:"volume_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + VolumeAttributes map[string]string `protobuf:"bytes,6,rep,name=volume_attributes,json=volumeAttributes" json:"volume_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` } func (m *NodeStageVolumeRequest) Reset() { *m = NodeStageVolumeRequest{} } func (m *NodeStageVolumeRequest) String() string { return proto.CompactTextString(m) } func (*NodeStageVolumeRequest) ProtoMessage() {} -func (*NodeStageVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } - -func (m *NodeStageVolumeRequest) GetVersion() *Version { - if m != nil { - return m.Version - } - return nil -} +func (*NodeStageVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } func (m *NodeStageVolumeRequest) GetVolumeId() string { if m != nil { @@ -1626,19 +1446,17 @@ type NodeStageVolumeResponse struct { func (m *NodeStageVolumeResponse) Reset() { *m = NodeStageVolumeResponse{} } func (m *NodeStageVolumeResponse) String() string { return proto.CompactTextString(m) } func (*NodeStageVolumeResponse) ProtoMessage() {} -func (*NodeStageVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } +func (*NodeStageVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } // ////// // ////// type NodeUnstageVolumeRequest struct { - // The API version assumed by the CO. This is a REQUIRED field. - Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` // The ID of the volume. This field is REQUIRED. - VolumeId string `protobuf:"bytes,2,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` // The path at which the volume was published. It MUST be an absolute // path in the root filesystem of the process serving this request. // This is a REQUIRED field. - StagingTargetPath string `protobuf:"bytes,3,opt,name=staging_target_path,json=stagingTargetPath" json:"staging_target_path,omitempty"` + StagingTargetPath string `protobuf:"bytes,2,opt,name=staging_target_path,json=stagingTargetPath" json:"staging_target_path,omitempty"` // Credentials used by Node plugin to authenticate/authorize node // unstage request. // This field contains credential data, for example username and @@ -1650,20 +1468,13 @@ type NodeUnstageVolumeRequest struct { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - NodeUnstageCredentials map[string]string `protobuf:"bytes,4,rep,name=node_unstage_credentials,json=nodeUnstageCredentials" json:"node_unstage_credentials,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + NodeUnstageCredentials map[string]string `protobuf:"bytes,3,rep,name=node_unstage_credentials,json=nodeUnstageCredentials" json:"node_unstage_credentials,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` } func (m *NodeUnstageVolumeRequest) Reset() { *m = NodeUnstageVolumeRequest{} } func (m *NodeUnstageVolumeRequest) String() string { return proto.CompactTextString(m) } func (*NodeUnstageVolumeRequest) ProtoMessage() {} -func (*NodeUnstageVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } - -func (m *NodeUnstageVolumeRequest) GetVersion() *Version { - if m != nil { - return m.Version - } - return nil -} +func (*NodeUnstageVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } func (m *NodeUnstageVolumeRequest) GetVolumeId() string { if m != nil { @@ -1692,41 +1503,39 @@ type NodeUnstageVolumeResponse struct { func (m *NodeUnstageVolumeResponse) Reset() { *m = NodeUnstageVolumeResponse{} } func (m *NodeUnstageVolumeResponse) String() string { return proto.CompactTextString(m) } func (*NodeUnstageVolumeResponse) ProtoMessage() {} -func (*NodeUnstageVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } +func (*NodeUnstageVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } // ////// // ////// type NodePublishVolumeRequest struct { - // The API version assumed by the CO. This is a REQUIRED field. - Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` // The ID of the volume to publish. This field is REQUIRED. - VolumeId string `protobuf:"bytes,2,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` // 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. - PublishInfo map[string]string `protobuf:"bytes,3,rep,name=publish_info,json=publishInfo" json:"publish_info,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + PublishInfo map[string]string `protobuf:"bytes,2,rep,name=publish_info,json=publishInfo" json:"publish_info,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // The path to which the device was mounted 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. - StagingTargetPath string `protobuf:"bytes,4,opt,name=staging_target_path,json=stagingTargetPath" json:"staging_target_path,omitempty"` + StagingTargetPath string `protobuf:"bytes,3,opt,name=staging_target_path,json=stagingTargetPath" json:"staging_target_path,omitempty"` // 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 path exists, and that the process // serving the request has `read` and `write` permissions to the path. // This is a REQUIRED field. - TargetPath string `protobuf:"bytes,5,opt,name=target_path,json=targetPath" json:"target_path,omitempty"` + TargetPath string `protobuf:"bytes,4,opt,name=target_path,json=targetPath" json:"target_path,omitempty"` // The capability of the volume the CO expects the volume to have. // This is a REQUIRED field. - VolumeCapability *VolumeCapability `protobuf:"bytes,6,opt,name=volume_capability,json=volumeCapability" json:"volume_capability,omitempty"` + VolumeCapability *VolumeCapability `protobuf:"bytes,5,opt,name=volume_capability,json=volumeCapability" json:"volume_capability,omitempty"` // Whether to publish the volume in readonly mode. This field is // REQUIRED. - Readonly bool `protobuf:"varint,7,opt,name=readonly" json:"readonly,omitempty"` + Readonly bool `protobuf:"varint,6,opt,name=readonly" json:"readonly,omitempty"` // Credentials used by Node plugin to authenticate/authorize node // publish request. // This field contains credential data, for example username and @@ -1738,24 +1547,17 @@ type NodePublishVolumeRequest struct { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - NodePublishCredentials map[string]string `protobuf:"bytes,8,rep,name=node_publish_credentials,json=nodePublishCredentials" json:"node_publish_credentials,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + NodePublishCredentials map[string]string `protobuf:"bytes,7,rep,name=node_publish_credentials,json=nodePublishCredentials" json:"node_publish_credentials,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Attributes of the volume to publish. This field is OPTIONAL and // MUST match the attributes of the Volume identified by // `volume_id`. - VolumeAttributes map[string]string `protobuf:"bytes,9,rep,name=volume_attributes,json=volumeAttributes" json:"volume_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + VolumeAttributes map[string]string `protobuf:"bytes,8,rep,name=volume_attributes,json=volumeAttributes" json:"volume_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` } func (m *NodePublishVolumeRequest) Reset() { *m = NodePublishVolumeRequest{} } func (m *NodePublishVolumeRequest) String() string { return proto.CompactTextString(m) } func (*NodePublishVolumeRequest) ProtoMessage() {} -func (*NodePublishVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } - -func (m *NodePublishVolumeRequest) GetVersion() *Version { - if m != nil { - return m.Version - } - return nil -} +func (*NodePublishVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } func (m *NodePublishVolumeRequest) GetVolumeId() string { if m != nil { @@ -1819,19 +1621,17 @@ type NodePublishVolumeResponse struct { func (m *NodePublishVolumeResponse) Reset() { *m = NodePublishVolumeResponse{} } func (m *NodePublishVolumeResponse) String() string { return proto.CompactTextString(m) } func (*NodePublishVolumeResponse) ProtoMessage() {} -func (*NodePublishVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} } +func (*NodePublishVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } // ////// // ////// type NodeUnpublishVolumeRequest struct { - // The API version assumed by the CO. This is a REQUIRED field. - Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` // The ID of the volume. This field is REQUIRED. - VolumeId string `protobuf:"bytes,2,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` // The path at which the volume was published. It MUST be an absolute // path in the root filesystem of the process serving this request. // This is a REQUIRED field. - TargetPath string `protobuf:"bytes,3,opt,name=target_path,json=targetPath" json:"target_path,omitempty"` + TargetPath string `protobuf:"bytes,2,opt,name=target_path,json=targetPath" json:"target_path,omitempty"` // Credentials used by Node plugin to authenticate/authorize node // unpublish request. // This field contains credential data, for example username and @@ -1843,20 +1643,13 @@ type NodeUnpublishVolumeRequest struct { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - NodeUnpublishCredentials map[string]string `protobuf:"bytes,4,rep,name=node_unpublish_credentials,json=nodeUnpublishCredentials" json:"node_unpublish_credentials,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + NodeUnpublishCredentials map[string]string `protobuf:"bytes,3,rep,name=node_unpublish_credentials,json=nodeUnpublishCredentials" json:"node_unpublish_credentials,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` } func (m *NodeUnpublishVolumeRequest) Reset() { *m = NodeUnpublishVolumeRequest{} } func (m *NodeUnpublishVolumeRequest) String() string { return proto.CompactTextString(m) } func (*NodeUnpublishVolumeRequest) ProtoMessage() {} -func (*NodeUnpublishVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } - -func (m *NodeUnpublishVolumeRequest) GetVersion() *Version { - if m != nil { - return m.Version - } - return nil -} +func (*NodeUnpublishVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } func (m *NodeUnpublishVolumeRequest) GetVolumeId() string { if m != nil { @@ -1885,26 +1678,17 @@ type NodeUnpublishVolumeResponse struct { func (m *NodeUnpublishVolumeResponse) Reset() { *m = NodeUnpublishVolumeResponse{} } func (m *NodeUnpublishVolumeResponse) String() string { return proto.CompactTextString(m) } func (*NodeUnpublishVolumeResponse) ProtoMessage() {} -func (*NodeUnpublishVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} } +func (*NodeUnpublishVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } // ////// // ////// type NodeGetIdRequest struct { - // The API version assumed by the CO. This is a REQUIRED field. - Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` } func (m *NodeGetIdRequest) Reset() { *m = NodeGetIdRequest{} } func (m *NodeGetIdRequest) String() string { return proto.CompactTextString(m) } func (*NodeGetIdRequest) ProtoMessage() {} -func (*NodeGetIdRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} } - -func (m *NodeGetIdRequest) GetVersion() *Version { - if m != nil { - return m.Version - } - return nil -} +func (*NodeGetIdRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} } type NodeGetIdResponse struct { // The ID of the node as understood by the SP which SHALL be used by @@ -1916,7 +1700,7 @@ type NodeGetIdResponse struct { func (m *NodeGetIdResponse) Reset() { *m = NodeGetIdResponse{} } func (m *NodeGetIdResponse) String() string { return proto.CompactTextString(m) } func (*NodeGetIdResponse) ProtoMessage() {} -func (*NodeGetIdResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} } +func (*NodeGetIdResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } func (m *NodeGetIdResponse) GetNodeId() string { if m != nil { @@ -1928,21 +1712,12 @@ func (m *NodeGetIdResponse) GetNodeId() string { // ////// // ////// type NodeGetCapabilitiesRequest struct { - // The API version assumed by the CO. This is a REQUIRED field. - Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` } func (m *NodeGetCapabilitiesRequest) Reset() { *m = NodeGetCapabilitiesRequest{} } func (m *NodeGetCapabilitiesRequest) String() string { return proto.CompactTextString(m) } func (*NodeGetCapabilitiesRequest) ProtoMessage() {} -func (*NodeGetCapabilitiesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} } - -func (m *NodeGetCapabilitiesRequest) GetVersion() *Version { - if m != nil { - return m.Version - } - return nil -} +func (*NodeGetCapabilitiesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} } type NodeGetCapabilitiesResponse struct { // All the capabilities that the node service supports. This field @@ -1953,7 +1728,7 @@ type NodeGetCapabilitiesResponse struct { func (m *NodeGetCapabilitiesResponse) Reset() { *m = NodeGetCapabilitiesResponse{} } func (m *NodeGetCapabilitiesResponse) String() string { return proto.CompactTextString(m) } func (*NodeGetCapabilitiesResponse) ProtoMessage() {} -func (*NodeGetCapabilitiesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} } +func (*NodeGetCapabilitiesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} } func (m *NodeGetCapabilitiesResponse) GetCapabilities() []*NodeServiceCapability { if m != nil { @@ -1972,7 +1747,7 @@ type NodeServiceCapability struct { func (m *NodeServiceCapability) Reset() { *m = NodeServiceCapability{} } func (m *NodeServiceCapability) String() string { return proto.CompactTextString(m) } func (*NodeServiceCapability) ProtoMessage() {} -func (*NodeServiceCapability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} } +func (*NodeServiceCapability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} } type isNodeServiceCapability_Type interface { isNodeServiceCapability_Type() @@ -2060,7 +1835,7 @@ type NodeServiceCapability_RPC struct { func (m *NodeServiceCapability_RPC) Reset() { *m = NodeServiceCapability_RPC{} } func (m *NodeServiceCapability_RPC) String() string { return proto.CompactTextString(m) } func (*NodeServiceCapability_RPC) ProtoMessage() {} -func (*NodeServiceCapability_RPC) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42, 0} } +func (*NodeServiceCapability_RPC) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39, 0} } func (m *NodeServiceCapability_RPC) GetType() NodeServiceCapability_RPC_Type { if m != nil { @@ -2070,9 +1845,6 @@ func (m *NodeServiceCapability_RPC) GetType() NodeServiceCapability_RPC_Type { } func init() { - proto.RegisterType((*GetSupportedVersionsRequest)(nil), "csi.v1.GetSupportedVersionsRequest") - proto.RegisterType((*GetSupportedVersionsResponse)(nil), "csi.v1.GetSupportedVersionsResponse") - proto.RegisterType((*Version)(nil), "csi.v1.Version") proto.RegisterType((*GetPluginInfoRequest)(nil), "csi.v1.GetPluginInfoRequest") proto.RegisterType((*GetPluginInfoResponse)(nil), "csi.v1.GetPluginInfoResponse") proto.RegisterType((*GetPluginCapabilitiesRequest)(nil), "csi.v1.GetPluginCapabilitiesRequest") @@ -2137,7 +1909,6 @@ const _ = grpc.SupportPackageIsVersion4 // Client API for Identity service type IdentityClient interface { - GetSupportedVersions(ctx context.Context, in *GetSupportedVersionsRequest, opts ...grpc.CallOption) (*GetSupportedVersionsResponse, error) GetPluginInfo(ctx context.Context, in *GetPluginInfoRequest, opts ...grpc.CallOption) (*GetPluginInfoResponse, error) GetPluginCapabilities(ctx context.Context, in *GetPluginCapabilitiesRequest, opts ...grpc.CallOption) (*GetPluginCapabilitiesResponse, error) Probe(ctx context.Context, in *ProbeRequest, opts ...grpc.CallOption) (*ProbeResponse, error) @@ -2151,15 +1922,6 @@ func NewIdentityClient(cc *grpc.ClientConn) IdentityClient { return &identityClient{cc} } -func (c *identityClient) GetSupportedVersions(ctx context.Context, in *GetSupportedVersionsRequest, opts ...grpc.CallOption) (*GetSupportedVersionsResponse, error) { - out := new(GetSupportedVersionsResponse) - err := grpc.Invoke(ctx, "/csi.v1.Identity/GetSupportedVersions", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *identityClient) GetPluginInfo(ctx context.Context, in *GetPluginInfoRequest, opts ...grpc.CallOption) (*GetPluginInfoResponse, error) { out := new(GetPluginInfoResponse) err := grpc.Invoke(ctx, "/csi.v1.Identity/GetPluginInfo", in, out, c.cc, opts...) @@ -2190,7 +1952,6 @@ func (c *identityClient) Probe(ctx context.Context, in *ProbeRequest, opts ...gr // Server API for Identity service type IdentityServer interface { - GetSupportedVersions(context.Context, *GetSupportedVersionsRequest) (*GetSupportedVersionsResponse, error) GetPluginInfo(context.Context, *GetPluginInfoRequest) (*GetPluginInfoResponse, error) GetPluginCapabilities(context.Context, *GetPluginCapabilitiesRequest) (*GetPluginCapabilitiesResponse, error) Probe(context.Context, *ProbeRequest) (*ProbeResponse, error) @@ -2200,24 +1961,6 @@ func RegisterIdentityServer(s *grpc.Server, srv IdentityServer) { s.RegisterService(&_Identity_serviceDesc, srv) } -func _Identity_GetSupportedVersions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetSupportedVersionsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(IdentityServer).GetSupportedVersions(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/csi.v1.Identity/GetSupportedVersions", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(IdentityServer).GetSupportedVersions(ctx, req.(*GetSupportedVersionsRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _Identity_GetPluginInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetPluginInfoRequest) if err := dec(in); err != nil { @@ -2276,10 +2019,6 @@ var _Identity_serviceDesc = grpc.ServiceDesc{ ServiceName: "csi.v1.Identity", HandlerType: (*IdentityServer)(nil), Methods: []grpc.MethodDesc{ - { - MethodName: "GetSupportedVersions", - Handler: _Identity_GetSupportedVersions_Handler, - }, { MethodName: "GetPluginInfo", Handler: _Identity_GetPluginInfo_Handler, @@ -2824,154 +2563,145 @@ var _Node_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("csi.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 2369 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x1a, 0x4b, 0x6c, 0xdb, 0xc8, - 0xd5, 0xd4, 0xc7, 0xb2, 0x9e, 0xed, 0x44, 0x19, 0x3b, 0x89, 0x42, 0xdb, 0x89, 0x43, 0x6f, 0xb2, - 0xc9, 0x7e, 0xb4, 0x58, 0xb7, 0x5d, 0x64, 0x37, 0xde, 0x74, 0x6d, 0x59, 0x95, 0x55, 0xcb, 0xb2, - 0x4b, 0xcb, 0x09, 0x76, 0xfb, 0xe1, 0xd2, 0xd2, 0xd8, 0x61, 0x23, 0x93, 0x0a, 0x49, 0x19, 0xd1, - 0xa5, 0xe8, 0x6d, 0x6f, 0xbd, 0xb5, 0x40, 0x81, 0x16, 0x05, 0x7a, 0xec, 0xa9, 0xc7, 0x1e, 0x8a, - 0x3d, 0x17, 0x68, 0x4f, 0x05, 0x0a, 0xf4, 0xd6, 0x73, 0x81, 0x02, 0xbd, 0xf5, 0x5c, 0x70, 0x66, - 0x48, 0x0d, 0xa9, 0x21, 0x25, 0xd9, 0x9b, 0x6d, 0x4f, 0x22, 0xdf, 0x7f, 0xde, 0xbc, 0x79, 0xf3, - 0xde, 0xa3, 0x20, 0xdf, 0x72, 0x8c, 0x52, 0xd7, 0xb6, 0x5c, 0x0b, 0x4d, 0x7b, 0x8f, 0xe7, 0xef, - 0x2b, 0x2b, 0xb0, 0x54, 0xc5, 0xee, 0x61, 0xaf, 0xdb, 0xb5, 0x6c, 0x17, 0xb7, 0x9f, 0x62, 0xdb, - 0x31, 0x2c, 0xd3, 0x51, 0xf1, 0xcb, 0x1e, 0x76, 0x5c, 0xe5, 0x47, 0xb0, 0x2c, 0x46, 0x3b, 0x5d, - 0xcb, 0x74, 0x30, 0x7a, 0x02, 0xc8, 0xf1, 0x91, 0xda, 0x39, 0xc3, 0x16, 0xa5, 0xd5, 0xf4, 0x83, - 0xd9, 0xf5, 0xab, 0x25, 0xaa, 0xa3, 0xc4, 0xb8, 0xd4, 0x6b, 0x4e, 0x54, 0x8e, 0xb2, 0x0b, 0x39, - 0xf6, 0x8c, 0x16, 0x21, 0x7b, 0xa6, 0xff, 0xd8, 0xb2, 0x8b, 0xd2, 0xaa, 0xf4, 0x20, 0xab, 0xd2, - 0x17, 0x02, 0x35, 0x4c, 0xcb, 0x2e, 0xa6, 0x18, 0xd4, 0x7b, 0xf1, 0xa0, 0x5d, 0xdd, 0x6d, 0x3d, - 0x2f, 0xa6, 0x29, 0x94, 0xbc, 0x28, 0x9b, 0xb0, 0x58, 0xc5, 0xee, 0x41, 0xa7, 0x77, 0x6a, 0x98, - 0x35, 0xf3, 0xc4, 0x62, 0x8b, 0x40, 0x0f, 0x21, 0xc7, 0x4c, 0x23, 0xb2, 0x05, 0x96, 0xf9, 0x78, - 0xe5, 0xef, 0x12, 0x5c, 0x8f, 0xc8, 0x60, 0x2b, 0x45, 0x90, 0x31, 0xf5, 0x33, 0x4c, 0x24, 0xe4, - 0x55, 0xf2, 0x8c, 0xee, 0xc1, 0x95, 0x73, 0x6c, 0xb6, 0x2d, 0xdb, 0x5f, 0x3a, 0xb1, 0x32, 0xaf, - 0xce, 0x53, 0xa8, 0xbf, 0xb2, 0x2a, 0xcc, 0x9c, 0xe9, 0xa6, 0x71, 0x82, 0x1d, 0xb7, 0x98, 0x26, - 0xae, 0x79, 0xdb, 0x37, 0x40, 0xa8, 0xab, 0xb4, 0xc7, 0xa8, 0x2b, 0xa6, 0x6b, 0xf7, 0xd5, 0x80, - 0x59, 0x7e, 0x0c, 0xf3, 0x21, 0x14, 0x2a, 0x40, 0xfa, 0x05, 0xee, 0x33, 0x9b, 0xbc, 0x47, 0xcf, - 0x33, 0xe7, 0x7a, 0xa7, 0x87, 0x99, 0x25, 0xf4, 0xe5, 0xa3, 0xd4, 0x23, 0x49, 0xa9, 0x91, 0xad, - 0xa4, 0xda, 0xca, 0x7a, 0x57, 0x3f, 0x36, 0x3a, 0x86, 0x6b, 0x60, 0xe7, 0x02, 0x5e, 0xfa, 0x21, - 0xac, 0xc4, 0x88, 0x62, 0xce, 0xda, 0x80, 0xb9, 0x16, 0x07, 0x2f, 0xa6, 0xc8, 0xaa, 0x8b, 0xbe, - 0xc0, 0x08, 0x67, 0x5f, 0x0d, 0x51, 0x2b, 0x7f, 0x96, 0xa0, 0x10, 0x25, 0x41, 0x1b, 0x90, 0x73, - 0xb0, 0x7d, 0x6e, 0xb4, 0x30, 0x33, 0x6f, 0x35, 0x4e, 0x5a, 0xe9, 0x90, 0xd2, 0xed, 0x4c, 0xa9, - 0x3e, 0x8b, 0xfc, 0x12, 0x72, 0x0c, 0x8a, 0x3e, 0x84, 0x8c, 0xdb, 0xef, 0x52, 0x29, 0x57, 0xd6, - 0xef, 0x8d, 0x92, 0x52, 0x6a, 0xf6, 0xbb, 0x58, 0x25, 0x2c, 0xca, 0xdb, 0x90, 0xf1, 0xde, 0xd0, - 0x2c, 0xe4, 0x8e, 0x1a, 0xbb, 0x8d, 0xfd, 0x67, 0x8d, 0xc2, 0x14, 0xba, 0x01, 0xa8, 0xbc, 0xdf, - 0x68, 0xaa, 0xfb, 0xf5, 0x7a, 0x45, 0xd5, 0x0e, 0x2b, 0xea, 0xd3, 0x5a, 0xb9, 0x52, 0x90, 0xb6, - 0xa6, 0xa9, 0x1e, 0xe5, 0x43, 0x98, 0x3b, 0xb0, 0xad, 0x63, 0x7c, 0x01, 0x3f, 0x5f, 0x85, 0x79, - 0xc6, 0x4a, 0xfd, 0xaa, 0xfc, 0x31, 0x03, 0x0b, 0x65, 0x1b, 0xeb, 0x2e, 0x7e, 0x6a, 0x75, 0x7a, - 0x67, 0x17, 0x90, 0x19, 0xc4, 0x71, 0x8a, 0x8b, 0xe3, 0x0d, 0xb8, 0xe2, 0x6d, 0x40, 0xcb, 0x70, - 0xfb, 0x9a, 0xad, 0x9b, 0xa7, 0x98, 0x9c, 0xab, 0xd9, 0xf5, 0xeb, 0xbe, 0x94, 0x32, 0xc3, 0xaa, - 0x1e, 0x52, 0x9d, 0x6f, 0xf1, 0xaf, 0xa8, 0x06, 0x0b, 0xe7, 0xc4, 0x1a, 0x2d, 0xb4, 0xe7, 0x99, - 0xf0, 0x9e, 0x53, 0x83, 0xb9, 0x3d, 0x47, 0xe7, 0x61, 0x88, 0x81, 0x1d, 0xb4, 0x0b, 0xd0, 0xd5, - 0x6d, 0xfd, 0x0c, 0xbb, 0xd8, 0x76, 0x8a, 0xd9, 0xf0, 0x59, 0x11, 0x2c, 0xbc, 0x74, 0x10, 0x50, - 0xd3, 0xb3, 0xc2, 0xb1, 0xa3, 0x9f, 0x4a, 0xb0, 0xd2, 0xb2, 0x4c, 0xd7, 0xb6, 0x3a, 0x1d, 0x6c, - 0x6b, 0x2d, 0xc2, 0xee, 0xfd, 0xb4, 0xb1, 0xe9, 0x1a, 0x7a, 0xc7, 0x29, 0x4e, 0x13, 0x05, 0x1b, - 0x49, 0x0a, 0xca, 0x81, 0x00, 0x8a, 0x2d, 0x0f, 0xd8, 0xa9, 0xc6, 0xa5, 0x56, 0x3c, 0x85, 0xfc, - 0x31, 0x5c, 0x8d, 0x58, 0x38, 0xc9, 0x91, 0x95, 0x1b, 0xb0, 0x3a, 0x4a, 0xff, 0x44, 0x29, 0xe0, - 0x09, 0x2c, 0x86, 0xd7, 0xc8, 0x8e, 0xeb, 0x7d, 0x98, 0xa6, 0x9b, 0xc1, 0xa2, 0xe7, 0x4a, 0x78, - 0xd3, 0x54, 0x86, 0x55, 0x7e, 0x97, 0x81, 0x42, 0x74, 0x1f, 0xd1, 0x06, 0x64, 0x8f, 0x3b, 0x56, - 0xeb, 0x05, 0xe3, 0x7d, 0x23, 0x6e, 0xc3, 0x4b, 0x5b, 0x1e, 0x15, 0x85, 0xee, 0x4c, 0xa9, 0x94, - 0xc9, 0xe3, 0x3e, 0xb3, 0x7a, 0xa6, 0x4b, 0x8c, 0x4d, 0xe2, 0xde, 0xf3, 0xa8, 0x06, 0xdc, 0x84, - 0x09, 0x6d, 0xc3, 0xac, 0xde, 0x6a, 0x61, 0xc7, 0xd1, 0xce, 0xac, 0xb6, 0x1f, 0xb5, 0x6b, 0xb1, - 0x32, 0x36, 0x09, 0xed, 0x9e, 0xd5, 0xc6, 0x2a, 0xe8, 0xc1, 0xb3, 0x3c, 0x0f, 0xb3, 0x9c, 0x6d, - 0x72, 0x15, 0x66, 0x39, 0x65, 0xe8, 0x26, 0xe4, 0x4e, 0x1c, 0x2d, 0x48, 0x19, 0x79, 0x75, 0xfa, - 0xc4, 0x21, 0x59, 0xe0, 0x0e, 0xcc, 0x12, 0x2b, 0xb4, 0x93, 0x8e, 0x7e, 0x4a, 0x73, 0x5c, 0x5e, - 0x05, 0x02, 0xfa, 0x8e, 0x07, 0x91, 0xff, 0x25, 0x01, 0x0c, 0x54, 0xa2, 0x0d, 0xc8, 0x10, 0x2b, - 0x69, 0xe2, 0x79, 0x30, 0x86, 0x95, 0x25, 0x62, 0x2a, 0xe1, 0x52, 0x7e, 0x23, 0x41, 0x86, 0x88, - 0x89, 0x26, 0x9f, 0xc3, 0x5a, 0xa3, 0x5a, 0xaf, 0x68, 0x8d, 0xfd, 0xed, 0x8a, 0xf6, 0x4c, 0xad, - 0x35, 0x2b, 0x6a, 0x41, 0x42, 0x4b, 0x70, 0x93, 0x87, 0xab, 0x95, 0xcd, 0xed, 0x8a, 0xaa, 0xed, - 0x37, 0xea, 0x9f, 0x16, 0x52, 0x48, 0x86, 0x1b, 0x7b, 0x47, 0xf5, 0x66, 0x6d, 0x18, 0x97, 0x46, - 0xcb, 0x50, 0xe4, 0x70, 0x4c, 0x06, 0x13, 0x9b, 0xf1, 0xc4, 0x72, 0x58, 0xfa, 0xc8, 0x90, 0xd9, - 0xad, 0xf9, 0x60, 0x33, 0x48, 0xde, 0x7b, 0x06, 0xf3, 0xa1, 0xb4, 0xe1, 0xdd, 0x96, 0x36, 0x7e, - 0xd9, 0x33, 0x6c, 0xdc, 0xd6, 0x8e, 0xfb, 0x2e, 0x76, 0x88, 0x27, 0xd2, 0xea, 0xbc, 0x0f, 0xdd, - 0xf2, 0x80, 0x9e, 0x5b, 0x3b, 0xc6, 0x99, 0xe1, 0x32, 0x9a, 0x14, 0xa1, 0x01, 0x02, 0x22, 0x04, - 0xca, 0x97, 0x12, 0x4c, 0xb3, 0xbd, 0xb9, 0xc7, 0x25, 0xae, 0x90, 0x48, 0x1f, 0x4a, 0x45, 0x5e, - 0x81, 0x94, 0xd1, 0x66, 0xc7, 0x21, 0x65, 0xb4, 0xd1, 0x13, 0x00, 0xdd, 0x75, 0x6d, 0xe3, 0xb8, - 0xe7, 0xb1, 0xd0, 0x2b, 0xf9, 0x76, 0x78, 0x3f, 0x4a, 0x9b, 0x01, 0x01, 0xcb, 0x2c, 0x03, 0x0e, - 0xef, 0x58, 0x47, 0xd0, 0x13, 0x1d, 0xc3, 0xdf, 0xa7, 0x60, 0x61, 0x1b, 0x77, 0xf0, 0x25, 0xb2, - 0xf8, 0x12, 0xe4, 0x59, 0xce, 0x0d, 0x16, 0x36, 0x43, 0x01, 0xb5, 0x76, 0x34, 0xf1, 0xb5, 0x89, - 0xaa, 0x50, 0xe2, 0x4b, 0x87, 0x13, 0x9f, 0xc0, 0x18, 0x2e, 0xf1, 0x51, 0x6c, 0x52, 0xe2, 0x1b, - 0xa2, 0x08, 0x67, 0x2e, 0xb1, 0x80, 0x89, 0x5c, 0x76, 0x03, 0x16, 0xc3, 0x46, 0xb2, 0x0b, 0xf1, - 0x3f, 0x19, 0xb8, 0x3d, 0x50, 0x74, 0xd0, 0x3b, 0xee, 0x18, 0xce, 0xf3, 0xd7, 0xe3, 0xd5, 0x9b, - 0x90, 0x33, 0xad, 0x36, 0x41, 0xa5, 0x69, 0x1e, 0xf0, 0x5e, 0x6b, 0x6d, 0x54, 0x81, 0x6b, 0xd1, - 0xfb, 0xaf, 0x5f, 0xcc, 0x10, 0x55, 0xf1, 0xb7, 0x5f, 0xe1, 0x3c, 0x9a, 0x47, 0x65, 0x98, 0xb1, - 0xb1, 0xde, 0xb6, 0xcc, 0x4e, 0xbf, 0x98, 0x5d, 0x95, 0x1e, 0xcc, 0xa8, 0xc1, 0x3b, 0xfa, 0x99, - 0x04, 0xb7, 0xb9, 0x1d, 0xed, 0xd2, 0x75, 0x0a, 0xee, 0xb2, 0x9d, 0xe0, 0x2e, 0x4b, 0x74, 0xca, - 0x30, 0x7a, 0x68, 0x7b, 0x97, 0x5b, 0x09, 0x24, 0xc8, 0x08, 0xd6, 0xcc, 0x1d, 0xa4, 0x5c, 0xe4, - 0x3a, 0x4d, 0x36, 0x81, 0xbe, 0x45, 0x8f, 0x19, 0xf3, 0xcb, 0x00, 0x2c, 0xef, 0xc3, 0xdd, 0x91, - 0xd6, 0x4e, 0x74, 0xab, 0x96, 0xe1, 0xba, 0x50, 0xf7, 0x44, 0x01, 0xf9, 0xa5, 0x04, 0x77, 0x62, - 0x17, 0xc8, 0xae, 0xd5, 0xef, 0xc3, 0x9c, 0xbf, 0x53, 0x86, 0x79, 0x62, 0xb1, 0xb6, 0xe8, 0xd1, - 0x48, 0xff, 0xb0, 0x2e, 0x80, 0x41, 0xbd, 0xce, 0x80, 0xfa, 0x66, 0xb6, 0x3b, 0x80, 0xc8, 0x4f, - 0xa0, 0x10, 0x25, 0x98, 0x68, 0x01, 0xff, 0x4e, 0xf1, 0x47, 0xf4, 0xc8, 0xec, 0xfe, 0x4f, 0xce, - 0xce, 0x2f, 0x24, 0x58, 0xe5, 0x02, 0xbb, 0x67, 0x8a, 0x42, 0x9b, 0x56, 0x92, 0xf5, 0x61, 0xbf, - 0x89, 0xad, 0x16, 0x11, 0x0c, 0x85, 0x37, 0x77, 0x9c, 0x44, 0x44, 0xf2, 0xf7, 0x60, 0x6d, 0x0c, - 0x31, 0x13, 0x79, 0x7c, 0x8d, 0x0f, 0xe4, 0x21, 0xd3, 0x59, 0x42, 0xfb, 0x67, 0x0a, 0xee, 0x3e, - 0xd5, 0x3b, 0x46, 0x3b, 0xa8, 0xd2, 0x2e, 0xd7, 0xab, 0x25, 0xef, 0x4b, 0x4c, 0xe9, 0x9e, 0xbe, - 0x40, 0xe9, 0xde, 0x11, 0x65, 0x04, 0xba, 0x73, 0xdf, 0x0e, 0x04, 0x8d, 0x5a, 0xd8, 0xd8, 0x49, - 0xe1, 0x2b, 0x39, 0xc3, 0x3f, 0x00, 0x25, 0xc9, 0x22, 0x76, 0x8a, 0x97, 0x21, 0x1f, 0xcc, 0x2d, - 0x88, 0xdc, 0x19, 0x75, 0x00, 0x40, 0x45, 0xc8, 0x9d, 0x61, 0xc7, 0xd1, 0x4f, 0x7d, 0xf9, 0xfe, - 0xab, 0xf2, 0x85, 0x04, 0xa8, 0x6e, 0x38, 0xac, 0x8c, 0xbc, 0xc8, 0xd6, 0x79, 0x05, 0xa6, 0xfe, - 0x4a, 0xc3, 0xa6, 0x6b, 0x1b, 0xac, 0x12, 0xca, 0xaa, 0x70, 0xa6, 0xbf, 0xaa, 0x50, 0x88, 0x57, - 0xfe, 0x38, 0xae, 0x6e, 0xbb, 0x86, 0x79, 0xaa, 0xb9, 0xd6, 0x0b, 0x6c, 0xb2, 0xd3, 0x35, 0xef, - 0x43, 0x9b, 0x1e, 0x50, 0xf9, 0xad, 0x04, 0x0b, 0x21, 0x4b, 0xd8, 0xca, 0x1e, 0x43, 0xce, 0x97, - 0x4d, 0x53, 0xd3, 0x5d, 0xdf, 0x14, 0x01, 0x75, 0x89, 0x6e, 0x85, 0xcf, 0x81, 0x56, 0x00, 0x4c, - 0xfc, 0xca, 0x65, 0x7a, 0xe9, 0xda, 0xf3, 0x1e, 0x84, 0xe8, 0x94, 0xdf, 0x83, 0x2c, 0xdd, 0x90, - 0x71, 0x7b, 0x8b, 0x9f, 0xa7, 0x00, 0x55, 0xb1, 0x1b, 0x94, 0x8c, 0x93, 0xbb, 0x2b, 0x26, 0x98, - 0x53, 0x17, 0x08, 0xe6, 0xef, 0x86, 0xfa, 0x50, 0x7a, 0x1c, 0xde, 0xe2, 0x66, 0x36, 0x11, 0x2b, - 0x93, 0xda, 0xd0, 0x4b, 0xf6, 0x80, 0xca, 0x36, 0x2c, 0x84, 0x14, 0xb2, 0xbd, 0x7b, 0x17, 0x90, - 0x7e, 0xae, 0x1b, 0x1d, 0xfd, 0xb8, 0x43, 0xd7, 0xeb, 0x61, 0x59, 0xf5, 0x7b, 0x2d, 0xc0, 0xf8, - 0x6c, 0xca, 0x1e, 0x9f, 0xec, 0x99, 0xbc, 0x4b, 0x0c, 0x80, 0x3a, 0x7c, 0x2a, 0x1b, 0x12, 0xc7, - 0x4c, 0xac, 0x0a, 0x87, 0x40, 0x6b, 0xc3, 0x69, 0x9c, 0x4d, 0x5a, 0x62, 0xe7, 0x41, 0xbf, 0x4e, - 0xc1, 0x52, 0x02, 0x35, 0x7a, 0x0c, 0x69, 0xbb, 0xdb, 0x62, 0x46, 0xbf, 0x39, 0x86, 0xfc, 0x92, - 0x7a, 0x50, 0xde, 0x99, 0x52, 0x3d, 0x2e, 0xf9, 0x0f, 0x12, 0xa4, 0xd5, 0x83, 0x32, 0xfa, 0x24, - 0x34, 0x16, 0x7a, 0x67, 0x4c, 0x29, 0xfc, 0x74, 0xc8, 0x12, 0x4d, 0x87, 0x8a, 0xb0, 0x58, 0x56, - 0x2b, 0x9b, 0xcd, 0x8a, 0xb6, 0x5d, 0xa9, 0x57, 0x9a, 0x15, 0xed, 0xe9, 0x7e, 0xfd, 0x68, 0xaf, - 0x52, 0x90, 0xbc, 0x4e, 0xeb, 0xe0, 0x68, 0xab, 0x5e, 0x3b, 0xdc, 0xd1, 0x8e, 0x1a, 0xfe, 0x13, - 0xc3, 0xa6, 0x50, 0x01, 0xe6, 0xea, 0xb5, 0xc3, 0x26, 0x03, 0x1c, 0x16, 0xd2, 0x1e, 0xa4, 0x5a, - 0x69, 0x6a, 0xe5, 0xcd, 0x83, 0xcd, 0x72, 0xad, 0xf9, 0x69, 0x21, 0x13, 0x4c, 0x98, 0xfe, 0x92, - 0x85, 0x1b, 0x0d, 0xab, 0x8d, 0x0f, 0x5d, 0xfd, 0xf4, 0x35, 0xb5, 0x14, 0x6a, 0xa4, 0x94, 0xa1, - 0x47, 0xe2, 0x3d, 0x5f, 0x98, 0x58, 0x7b, 0x72, 0x05, 0x83, 0x4a, 0xb0, 0xe0, 0xb8, 0xfa, 0x29, - 0x49, 0x5e, 0xba, 0x7d, 0x8a, 0x5d, 0xad, 0xab, 0xbb, 0xcf, 0x49, 0xe5, 0x9c, 0x57, 0xaf, 0x31, - 0x54, 0x93, 0x60, 0x0e, 0x74, 0xf7, 0xb9, 0xb8, 0xce, 0xce, 0x4e, 0x5c, 0x67, 0x9b, 0x70, 0x83, - 0xd4, 0x22, 0x9e, 0x02, 0xd1, 0x38, 0xe8, 0xd1, 0x88, 0x45, 0x05, 0xe0, 0xa1, 0x9a, 0x62, 0xd1, - 0x14, 0xa0, 0x90, 0x1e, 0x5f, 0x2a, 0x7f, 0x73, 0x84, 0xaa, 0x71, 0x6f, 0xc3, 0x4b, 0xd6, 0x82, - 0x72, 0x15, 0x6e, 0xc5, 0xae, 0xea, 0xeb, 0x2f, 0xad, 0x6f, 0xc1, 0xcd, 0x21, 0x7f, 0xb0, 0xea, - 0xe8, 0x6f, 0x29, 0x28, 0x7a, 0xb8, 0x23, 0xd3, 0x79, 0x7d, 0xb1, 0x1e, 0x13, 0x97, 0xe9, 0xb8, - 0xb8, 0x3c, 0x87, 0x22, 0x09, 0xa8, 0x9e, 0x39, 0x1c, 0x52, 0x99, 0x70, 0x4b, 0x14, 0x67, 0x3b, - 0x8f, 0x18, 0x0a, 0x2b, 0x12, 0xae, 0xc3, 0x48, 0xb9, 0x06, 0x4b, 0x09, 0x6c, 0x13, 0xb9, 0x7c, - 0x89, 0x06, 0x40, 0xc4, 0x34, 0xe6, 0xf4, 0x5f, 0x4e, 0x53, 0xa7, 0xbf, 0xd6, 0xee, 0xba, 0x29, - 0x4c, 0x30, 0xef, 0xf3, 0x8e, 0x13, 0x76, 0x91, 0x5f, 0x6d, 0x8a, 0xb9, 0x03, 0xb3, 0x3c, 0x5d, - 0x96, 0xd0, 0x81, 0x3b, 0x22, 0x07, 0x4d, 0x5f, 0xaa, 0xd7, 0xcf, 0x45, 0x7a, 0x7d, 0x3f, 0x9c, - 0x44, 0x9d, 0xd0, 0xcc, 0x70, 0x38, 0x09, 0xbd, 0xc2, 0x21, 0xc4, 0xe1, 0x24, 0x68, 0xe9, 0x5b, - 0xa2, 0x3c, 0x95, 0x27, 0x0a, 0x3f, 0x18, 0xa9, 0xf0, 0xeb, 0xca, 0x54, 0x2c, 0xe6, 0xff, 0x6f, - 0xc6, 0x00, 0xec, 0xe0, 0x08, 0x1b, 0x78, 0xe5, 0xaf, 0x29, 0x90, 0xe9, 0xb1, 0x7a, 0xad, 0xcd, - 0x75, 0x24, 0x68, 0xd3, 0x43, 0x41, 0xfb, 0x13, 0x90, 0x59, 0x82, 0x8a, 0xef, 0xae, 0x3f, 0x09, - 0xa7, 0xa8, 0x6e, 0x5c, 0x54, 0xc5, 0x77, 0xd4, 0x45, 0x33, 0x06, 0x2d, 0xef, 0xc2, 0x4a, 0x22, - 0xeb, 0x44, 0x1e, 0x5f, 0xf1, 0xb3, 0x9e, 0xb8, 0x7f, 0xfe, 0x18, 0x0a, 0x1e, 0xba, 0x8a, 0xdd, - 0x5a, 0xfb, 0x02, 0x85, 0xed, 0x3b, 0x70, 0x8d, 0x63, 0x67, 0x85, 0x2c, 0x37, 0xbd, 0x90, 0xf8, - 0xe9, 0x85, 0x52, 0xa5, 0xfb, 0x7b, 0xf9, 0x7a, 0xfa, 0x73, 0xba, 0xa8, 0xb8, 0x4a, 0x7a, 0x33, - 0x52, 0x49, 0xd3, 0x6e, 0x6d, 0x25, 0x54, 0x3d, 0x8c, 0xa8, 0xa1, 0xff, 0x24, 0xc1, 0x75, 0x21, - 0x1d, 0xfa, 0x16, 0x5f, 0x3d, 0xdf, 0x4d, 0x94, 0xc9, 0xd7, 0xcd, 0x5d, 0x5a, 0x36, 0x7f, 0x14, - 0x2a, 0x9b, 0xef, 0x8f, 0x64, 0xe7, 0x0b, 0xe6, 0x77, 0x63, 0x0a, 0xe6, 0xc3, 0xe6, 0x66, 0xb5, - 0xa2, 0x1d, 0x35, 0xe8, 0xaf, 0x5f, 0x30, 0xfb, 0xe5, 0xee, 0xfa, 0x3f, 0x52, 0x30, 0x53, 0x23, - 0x01, 0xe4, 0xf6, 0x51, 0x8b, 0x7c, 0xf3, 0x1f, 0xfa, 0x83, 0x02, 0x5a, 0xe3, 0xba, 0xb5, 0xb8, - 0x7f, 0x37, 0xc8, 0x6f, 0x24, 0x13, 0xb1, 0x90, 0x9a, 0x42, 0x0d, 0x98, 0x0f, 0x7d, 0xa8, 0x47, - 0xcb, 0x31, 0xdf, 0xef, 0xa9, 0xd8, 0x95, 0xc4, 0xaf, 0xfb, 0xca, 0x14, 0x3a, 0xe1, 0xfe, 0x64, - 0x10, 0xea, 0x3b, 0xdf, 0x18, 0xe2, 0x14, 0x04, 0x96, 0x7c, 0x6f, 0x04, 0x55, 0xa0, 0xe7, 0x03, - 0xc8, 0x92, 0xef, 0xc7, 0x68, 0x31, 0xf8, 0xca, 0xcd, 0x7d, 0x89, 0x96, 0xaf, 0x47, 0xa0, 0x3e, - 0xdf, 0xfa, 0x17, 0xd3, 0x00, 0x83, 0xc6, 0x07, 0xed, 0xc2, 0x1c, 0xff, 0xd9, 0x10, 0x2d, 0x25, - 0x7c, 0x30, 0x95, 0x97, 0xc5, 0xc8, 0xc0, 0xa6, 0x5d, 0x98, 0xe3, 0x27, 0xf9, 0x03, 0x61, 0x82, - 0x8f, 0x10, 0x03, 0x61, 0xc2, 0xe1, 0xff, 0x14, 0xea, 0xc0, 0xcd, 0x98, 0x29, 0x2a, 0xba, 0x3f, - 0xde, 0x18, 0x5a, 0x7e, 0x73, 0xcc, 0x71, 0xac, 0x32, 0x85, 0x6c, 0xb8, 0x15, 0x3b, 0xc0, 0x43, - 0x0f, 0xc6, 0x1d, 0x4f, 0xca, 0x0f, 0xc7, 0xa0, 0x0c, 0x74, 0xf6, 0x40, 0x8e, 0x9f, 0x51, 0xa1, - 0x87, 0x63, 0x4f, 0xd6, 0xe4, 0xb7, 0xc6, 0x21, 0x0d, 0xd4, 0xee, 0xc0, 0x2c, 0x37, 0x03, 0x42, - 0xb2, 0x70, 0x30, 0x44, 0x05, 0x2f, 0x25, 0x0c, 0x8d, 0xa8, 0x24, 0x6e, 0x7e, 0x31, 0x90, 0x34, - 0x3c, 0x45, 0x19, 0x48, 0x12, 0x0c, 0x3c, 0xa2, 0xee, 0x8f, 0xa4, 0x4a, 0x91, 0xfb, 0xc5, 0x69, - 0x59, 0xe4, 0xfe, 0x98, 0xbc, 0xab, 0x4c, 0xad, 0xff, 0x2a, 0x03, 0x19, 0x2f, 0x97, 0xa1, 0x26, - 0x5c, 0x8d, 0x34, 0x25, 0xe8, 0x76, 0x72, 0xf7, 0x26, 0xdf, 0x89, 0xc5, 0x07, 0x4b, 0xfa, 0x8c, - 0x5e, 0x37, 0xa1, 0xba, 0x1b, 0xad, 0x8e, 0xea, 0x16, 0xe4, 0xbb, 0x09, 0x14, 0x51, 0xd9, 0xe1, - 0x53, 0xb1, 0x3a, 0xaa, 0x92, 0x0b, 0xcb, 0x8e, 0x3b, 0x09, 0x9f, 0xc3, 0x82, 0xe0, 0x12, 0x46, - 0xca, 0xe8, 0x22, 0x42, 0x5e, 0x4b, 0xa4, 0x09, 0x34, 0x6c, 0x41, 0x3e, 0xb8, 0x88, 0x51, 0x91, - 0xe7, 0xe1, 0xaf, 0x76, 0xf9, 0x96, 0x00, 0x13, 0xb5, 0x32, 0x1a, 0x2a, 0x4a, 0x84, 0x47, 0x14, - 0x24, 0x6b, 0x89, 0x34, 0xbe, 0x86, 0xad, 0xec, 0x67, 0xe9, 0x96, 0x63, 0x1c, 0x4f, 0x93, 0xff, - 0xd4, 0x7d, 0xe3, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xd5, 0x78, 0x2f, 0xbb, 0x60, 0x27, 0x00, - 0x00, + // 2238 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x1a, 0x4d, 0x6f, 0xe3, 0xc6, + 0xd5, 0xd4, 0x97, 0xed, 0x27, 0xdb, 0xd1, 0x8e, 0xbd, 0xb6, 0x96, 0xfe, 0x58, 0x9b, 0xce, 0x6e, + 0x9c, 0x2f, 0x05, 0x71, 0xdb, 0x60, 0x9b, 0x75, 0xb7, 0xb1, 0x65, 0x55, 0x56, 0x2d, 0xcb, 0x2e, + 0x2d, 0x7b, 0x91, 0x34, 0x05, 0x43, 0x4b, 0x63, 0x2f, 0xb1, 0x34, 0xa9, 0x25, 0x29, 0x61, 0x75, + 0x29, 0x7a, 0x29, 0x7a, 0x2b, 0xd0, 0x4b, 0x4f, 0x2d, 0x8a, 0xf6, 0x52, 0x20, 0xbf, 0xa0, 0xa7, + 0x3d, 0xf5, 0x50, 0x20, 0x7f, 0xa0, 0xbf, 0xa1, 0x28, 0xfa, 0x03, 0x7a, 0x2a, 0xc8, 0x19, 0x52, + 0x43, 0x6a, 0x48, 0x49, 0xd9, 0x45, 0xd0, 0x93, 0xc5, 0xf7, 0x3d, 0x6f, 0xde, 0xbc, 0x79, 0xef, + 0x8d, 0x61, 0xb6, 0x65, 0x6b, 0xa5, 0x8e, 0x65, 0x3a, 0x26, 0xca, 0xb9, 0x3f, 0x7b, 0x1f, 0x4b, + 0xcb, 0xb0, 0x54, 0xc5, 0xce, 0x99, 0xde, 0xbd, 0xd1, 0x8c, 0x9a, 0x71, 0x6d, 0xca, 0xf8, 0x45, + 0x17, 0xdb, 0x8e, 0xf4, 0x4f, 0x01, 0xee, 0x46, 0x10, 0x76, 0xc7, 0x34, 0x6c, 0x8c, 0x10, 0x64, + 0x0c, 0xf5, 0x16, 0x17, 0x85, 0x4d, 0x61, 0x67, 0x56, 0xf6, 0x7e, 0xa3, 0x07, 0xb0, 0xd0, 0xc3, + 0x46, 0xdb, 0xb4, 0x94, 0x1e, 0xb6, 0x6c, 0xcd, 0x34, 0x8a, 0x29, 0x0f, 0x3b, 0x4f, 0xa0, 0x97, + 0x04, 0x88, 0xaa, 0x30, 0x73, 0xab, 0x1a, 0xda, 0x35, 0xb6, 0x9d, 0x62, 0x7a, 0x33, 0xbd, 0x93, + 0xdf, 0x7d, 0xbf, 0x44, 0xec, 0x28, 0x71, 0x75, 0x95, 0x4e, 0x28, 0x75, 0xc5, 0x70, 0xac, 0xbe, + 0x1c, 0x30, 0x8b, 0x8f, 0x61, 0x3e, 0x84, 0x42, 0x05, 0x48, 0x3f, 0xc7, 0x7d, 0x6a, 0x93, 0xfb, + 0x13, 0x2d, 0x41, 0xb6, 0xa7, 0xea, 0x5d, 0x4c, 0x2d, 0x21, 0x1f, 0x9f, 0xa6, 0x1e, 0x09, 0xd2, + 0x06, 0xac, 0x05, 0xda, 0xca, 0x6a, 0x47, 0xbd, 0xd2, 0x74, 0xcd, 0xd1, 0xb0, 0xed, 0x2f, 0xfd, + 0x17, 0xb0, 0x1e, 0x83, 0xa7, 0x1e, 0xd8, 0x83, 0xb9, 0x16, 0x03, 0x2f, 0xa6, 0xbc, 0xa5, 0x14, + 0xfd, 0xa5, 0x44, 0x38, 0xfb, 0x72, 0x88, 0x5a, 0xfa, 0x46, 0x80, 0x42, 0x94, 0x04, 0xed, 0xc1, + 0xb4, 0x8d, 0xad, 0x9e, 0xd6, 0x22, 0x7e, 0xcd, 0xef, 0x6e, 0xc6, 0x49, 0x2b, 0x9d, 0x13, 0xba, + 0xa3, 0x29, 0xd9, 0x67, 0x11, 0x5f, 0xc0, 0x34, 0x85, 0xa2, 0x1f, 0x42, 0xc6, 0xe9, 0x77, 0x88, + 0x94, 0x85, 0xdd, 0x07, 0xa3, 0xa4, 0x94, 0x9a, 0xfd, 0x0e, 0x96, 0x3d, 0x16, 0xe9, 0x7d, 0xc8, + 0xb8, 0x5f, 0x28, 0x0f, 0xd3, 0x17, 0x8d, 0xe3, 0xc6, 0xe9, 0xd3, 0x46, 0x61, 0x0a, 0x2d, 0x03, + 0x2a, 0x9f, 0x36, 0x9a, 0xf2, 0x69, 0xbd, 0x5e, 0x91, 0x95, 0xf3, 0x8a, 0x7c, 0x59, 0x2b, 0x57, + 0x0a, 0xc2, 0x41, 0x8e, 0xe8, 0x91, 0x16, 0x60, 0xee, 0xcc, 0x32, 0xaf, 0xb0, 0xef, 0xbc, 0xb7, + 0x60, 0x9e, 0x7e, 0x13, 0x67, 0x49, 0xbf, 0xcb, 0xc0, 0x62, 0xd9, 0xc2, 0xaa, 0x83, 0x2f, 0x4d, + 0xbd, 0x7b, 0xeb, 0x13, 0x72, 0xc3, 0x68, 0x0f, 0x16, 0x5c, 0x57, 0xb5, 0x34, 0xa7, 0xaf, 0x58, + 0xaa, 0x71, 0x43, 0x36, 0x2f, 0xbf, 0x7b, 0xd7, 0x5f, 0x46, 0x99, 0x62, 0x65, 0x17, 0x29, 0xcf, + 0xb7, 0xd8, 0x4f, 0x54, 0x83, 0xc5, 0x9e, 0xa7, 0x42, 0x09, 0xed, 0x4e, 0x3a, 0xbc, 0x3b, 0xc4, + 0x0a, 0x66, 0x77, 0x50, 0x2f, 0x0c, 0xd1, 0xb0, 0x8d, 0x8e, 0x01, 0x3a, 0xaa, 0xa5, 0xde, 0x62, + 0x07, 0x5b, 0x76, 0x31, 0x13, 0x0e, 0x55, 0xce, 0x6a, 0x4a, 0x67, 0x01, 0x35, 0x09, 0x55, 0x86, + 0x1d, 0xfd, 0x4a, 0x80, 0xf5, 0x96, 0x69, 0x38, 0x96, 0xa9, 0xeb, 0xd8, 0x52, 0x5a, 0x1e, 0xbb, + 0xfb, 0xa7, 0x8d, 0x0d, 0x47, 0x53, 0x75, 0xbb, 0x98, 0xf5, 0x14, 0xec, 0x25, 0x29, 0x28, 0x07, + 0x02, 0x08, 0xb6, 0x3c, 0x60, 0x27, 0x1a, 0x57, 0x5b, 0xf1, 0x14, 0xe2, 0x8f, 0xe0, 0xad, 0x88, + 0x85, 0x93, 0x9c, 0x18, 0xb1, 0x01, 0x9b, 0xa3, 0xf4, 0x4f, 0x74, 0x02, 0x9f, 0xc0, 0x52, 0x78, + 0x8d, 0xf4, 0x60, 0x3d, 0x84, 0x1c, 0xd9, 0x0c, 0x7a, 0x08, 0x16, 0xc2, 0x9b, 0x26, 0x53, 0xac, + 0xf4, 0x75, 0x06, 0x0a, 0xd1, 0x7d, 0x44, 0x7b, 0x90, 0xbd, 0xd2, 0xcd, 0xd6, 0x73, 0xca, 0xfb, + 0x76, 0xdc, 0x86, 0x97, 0x0e, 0x5c, 0x2a, 0x02, 0x3d, 0x9a, 0x92, 0x09, 0x93, 0xcb, 0x7d, 0x6b, + 0x76, 0x0d, 0x87, 0x46, 0x5c, 0x3c, 0xf7, 0x89, 0x4b, 0x35, 0xe0, 0xf6, 0x98, 0xd0, 0x21, 0xe4, + 0xd5, 0x56, 0x0b, 0xdb, 0xb6, 0x72, 0x6b, 0xb6, 0x71, 0x31, 0xed, 0xc9, 0xd8, 0x8e, 0x95, 0xb1, + 0xef, 0xd1, 0x9e, 0x98, 0x6d, 0x2c, 0x83, 0x1a, 0xfc, 0x16, 0xe7, 0x21, 0xcf, 0xd8, 0x26, 0x56, + 0x21, 0xcf, 0x28, 0x43, 0x2b, 0x30, 0x7d, 0x6d, 0x2b, 0xc1, 0xe1, 0x9e, 0x95, 0x73, 0xd7, 0xb6, + 0x77, 0x5e, 0xef, 0x43, 0xde, 0xb3, 0x42, 0xb9, 0xd6, 0xd5, 0x1b, 0x92, 0x8d, 0x66, 0x65, 0xf0, + 0x40, 0x3f, 0x71, 0x21, 0xe2, 0xbf, 0x05, 0x80, 0x81, 0x4a, 0xb4, 0x07, 0x19, 0xcf, 0x4a, 0x92, + 0x22, 0x76, 0xc6, 0xb0, 0xb2, 0xe4, 0x99, 0xea, 0x71, 0x49, 0x7f, 0x12, 0x20, 0xe3, 0x89, 0x89, + 0xa6, 0x89, 0xf3, 0x5a, 0xa3, 0x5a, 0xaf, 0x28, 0x8d, 0xd3, 0xc3, 0x8a, 0xf2, 0x54, 0xae, 0x35, + 0x2b, 0x72, 0x41, 0x40, 0xab, 0xb0, 0xc2, 0xc2, 0xe5, 0xca, 0xfe, 0x61, 0x45, 0x56, 0x4e, 0x1b, + 0xf5, 0xcf, 0x0b, 0x29, 0x24, 0xc2, 0xf2, 0xc9, 0x45, 0xbd, 0x59, 0x1b, 0xc6, 0xa5, 0xd1, 0x1a, + 0x14, 0x19, 0x1c, 0x95, 0x41, 0xc5, 0x66, 0x5c, 0xb1, 0x0c, 0x96, 0xfc, 0xa4, 0xc8, 0xec, 0xc1, + 0x7c, 0xb0, 0x19, 0x5e, 0x86, 0x7a, 0x0a, 0xf3, 0xa1, 0xb4, 0xe1, 0x5e, 0x56, 0x16, 0x7e, 0xd1, + 0xd5, 0x2c, 0xdc, 0x56, 0xae, 0xfa, 0x0e, 0xb6, 0x3d, 0x4f, 0xa4, 0xe5, 0x79, 0x1f, 0x7a, 0xe0, + 0x02, 0x5d, 0xb7, 0xea, 0xda, 0xad, 0xe6, 0x50, 0x9a, 0x94, 0x47, 0x03, 0x1e, 0xc8, 0x23, 0x90, + 0x5e, 0x09, 0x90, 0xa3, 0x7b, 0xf3, 0x80, 0x49, 0x5c, 0x21, 0x91, 0x3e, 0x94, 0x88, 0x5c, 0x80, + 0x94, 0xd6, 0xa6, 0xc7, 0x21, 0xa5, 0xb5, 0xd1, 0x13, 0x00, 0xd5, 0x71, 0x2c, 0xed, 0xaa, 0xeb, + 0x04, 0x89, 0x6a, 0x23, 0xbc, 0x1f, 0xa5, 0xfd, 0x80, 0x80, 0x66, 0x96, 0x01, 0x87, 0x7b, 0xac, + 0x23, 0xe8, 0x89, 0x8e, 0xe1, 0xaf, 0x53, 0xb0, 0x78, 0x88, 0x75, 0x1c, 0x4d, 0xcd, 0xab, 0x30, + 0x4b, 0x13, 0xa9, 0xd6, 0xa6, 0x92, 0x66, 0x08, 0xa0, 0xd6, 0x8e, 0x66, 0xb3, 0xb6, 0xc7, 0x1f, + 0xca, 0x66, 0xa9, 0x70, 0x36, 0xe3, 0x68, 0x60, 0xb2, 0x19, 0xc1, 0x26, 0x65, 0xb3, 0x21, 0x8a, + 0x70, 0x3a, 0xe2, 0x0b, 0x98, 0xc8, 0x0f, 0xcb, 0xb0, 0x14, 0x36, 0x92, 0x5e, 0x5d, 0xdf, 0x64, + 0x60, 0x63, 0xa0, 0xe8, 0xac, 0x7b, 0xa5, 0x6b, 0xf6, 0xb3, 0x09, 0x5c, 0xb5, 0x02, 0xd3, 0x86, + 0xd9, 0xf6, 0x50, 0x44, 0x67, 0xce, 0xfd, 0xac, 0xb5, 0x51, 0x05, 0xee, 0x44, 0x6f, 0xaa, 0x3e, + 0x4d, 0x1a, 0xf1, 0xf7, 0x54, 0xa1, 0x17, 0xcd, 0x78, 0x22, 0xcc, 0x58, 0x58, 0x6d, 0x9b, 0x86, + 0xde, 0x2f, 0x66, 0x36, 0x85, 0x9d, 0x19, 0x39, 0xf8, 0x46, 0xbf, 0x15, 0x60, 0x83, 0xd9, 0xa6, + 0x0e, 0x31, 0x9e, 0x73, 0xeb, 0x1c, 0x05, 0xb7, 0x4e, 0xe2, 0x4a, 0x87, 0xd1, 0x43, 0x7b, 0xb6, + 0xd6, 0x4a, 0x20, 0x41, 0x5a, 0xb0, 0x66, 0x26, 0xe4, 0x73, 0x91, 0x8b, 0x2f, 0xd9, 0x04, 0xf2, + 0x15, 0x3d, 0x10, 0xd4, 0x2f, 0x03, 0xb0, 0x78, 0x0a, 0x5b, 0x23, 0xad, 0x9d, 0xe8, 0xfe, 0x2b, + 0xc3, 0x5d, 0xae, 0xee, 0x89, 0xa2, 0xec, 0x95, 0x00, 0xf7, 0x63, 0x17, 0x48, 0x2f, 0xc0, 0x9f, + 0xc3, 0x9c, 0xbf, 0x53, 0x9a, 0x71, 0x6d, 0x16, 0x05, 0xcf, 0x3f, 0x8f, 0x46, 0xfa, 0x87, 0x96, + 0xcb, 0x14, 0xea, 0x96, 0xd0, 0xc4, 0x37, 0xf9, 0xce, 0x00, 0x22, 0x3e, 0x81, 0x42, 0x94, 0x60, + 0xa2, 0x05, 0xfc, 0x3d, 0xc5, 0x9e, 0xbb, 0x0b, 0xa3, 0xf3, 0xe6, 0x0e, 0xc4, 0xef, 0x05, 0xd8, + 0x64, 0xa2, 0xb5, 0x6b, 0xf0, 0xe2, 0x95, 0xe4, 0xc7, 0xfa, 0xb0, 0x33, 0xf8, 0xa6, 0xf0, 0x08, + 0x86, 0x62, 0x96, 0x39, 0x23, 0x3c, 0x22, 0xf1, 0x67, 0xb0, 0x3d, 0x86, 0x98, 0x89, 0xdc, 0xb8, + 0xcd, 0x46, 0xe7, 0x90, 0xe9, 0x34, 0xf5, 0xbc, 0x4a, 0xc1, 0xd6, 0xa5, 0xaa, 0x6b, 0xed, 0xa0, + 0x48, 0xe2, 0x74, 0x2a, 0xc9, 0xce, 0x8e, 0x29, 0x87, 0x53, 0xdf, 0xa2, 0x1c, 0xd6, 0x79, 0x67, + 0x97, 0x6c, 0xc7, 0x8f, 0x03, 0x41, 0xa3, 0xac, 0x1d, 0xfb, 0xf8, 0xbe, 0x91, 0xd3, 0xf6, 0x25, + 0x48, 0x49, 0x16, 0xd1, 0xf3, 0xb6, 0x06, 0xb3, 0x76, 0xb7, 0xd3, 0x31, 0x2d, 0x07, 0x13, 0x07, + 0xce, 0xc8, 0x03, 0x00, 0x2a, 0xc2, 0xf4, 0x2d, 0xb6, 0x6d, 0xf5, 0xc6, 0x97, 0xef, 0x7f, 0x4a, + 0x5f, 0x02, 0xaa, 0x6b, 0x36, 0xad, 0xcc, 0x82, 0xed, 0x70, 0x0b, 0x31, 0xf5, 0xa5, 0x82, 0x0d, + 0xc7, 0xd2, 0x68, 0x09, 0x90, 0x95, 0xe1, 0x56, 0x7d, 0x59, 0x21, 0x10, 0xb7, 0x4c, 0xb0, 0x1d, + 0xd5, 0x72, 0x34, 0xe3, 0x46, 0x71, 0xcc, 0xe7, 0x38, 0x68, 0x93, 0x7d, 0x68, 0xd3, 0x05, 0x4a, + 0x7f, 0x11, 0x60, 0x31, 0x24, 0x9e, 0x5a, 0xfb, 0x18, 0xa6, 0x07, 0xb2, 0x5d, 0xe7, 0x6f, 0xf9, + 0xce, 0xe7, 0x50, 0x97, 0x88, 0x7b, 0x7d, 0x0e, 0xb4, 0x0e, 0x60, 0xe0, 0x97, 0x4e, 0x48, 0xef, + 0xac, 0x0b, 0xf1, 0x74, 0x8a, 0x1f, 0x41, 0x96, 0x38, 0x79, 0xdc, 0x1a, 0xfc, 0x5f, 0x02, 0xa0, + 0x2a, 0x76, 0x82, 0xd2, 0x8a, 0xfa, 0x20, 0x26, 0xea, 0x84, 0x6f, 0x11, 0x75, 0x3f, 0x0d, 0x35, + 0x61, 0x24, 0x6e, 0xdf, 0x63, 0xe6, 0x05, 0x11, 0xd5, 0x49, 0x3d, 0xd8, 0x6b, 0x36, 0x40, 0xd2, + 0x21, 0x2c, 0x86, 0x14, 0xd2, 0x0d, 0xf9, 0x10, 0x90, 0xda, 0x53, 0x35, 0x5d, 0xbd, 0xd2, 0xc9, + 0x7a, 0x5d, 0x2c, 0x2d, 0xfd, 0xee, 0x04, 0x18, 0x9f, 0x4d, 0x92, 0xd8, 0xfc, 0x49, 0xe5, 0x45, + 0x87, 0x0f, 0x3a, 0x9b, 0x1d, 0x86, 0x68, 0xa8, 0xde, 0x2a, 0x77, 0x00, 0xb1, 0x3d, 0x9c, 0x19, + 0x69, 0x97, 0x1f, 0x3b, 0x8b, 0xf8, 0x63, 0x0a, 0x56, 0x13, 0xa8, 0xd1, 0x63, 0x48, 0x5b, 0x9d, + 0x16, 0x8d, 0x84, 0x77, 0xc6, 0x90, 0x5f, 0x92, 0xcf, 0xca, 0x47, 0x53, 0xb2, 0xcb, 0x25, 0xfe, + 0x4d, 0x80, 0xb4, 0x7c, 0x56, 0x46, 0x9f, 0x85, 0x46, 0x12, 0x1f, 0x8c, 0x29, 0x85, 0x9d, 0x4c, + 0x98, 0xbc, 0xc9, 0x44, 0x11, 0x96, 0xca, 0x72, 0x65, 0xbf, 0x59, 0x51, 0x0e, 0x2b, 0xf5, 0x4a, + 0xb3, 0xa2, 0x5c, 0x9e, 0xd6, 0x2f, 0x4e, 0x2a, 0x05, 0xc1, 0xed, 0x1d, 0xce, 0x2e, 0x0e, 0xea, + 0xb5, 0xf3, 0x23, 0xe5, 0xa2, 0xe1, 0xff, 0xa2, 0xd8, 0x14, 0x2a, 0xc0, 0x5c, 0xbd, 0x76, 0xde, + 0xa4, 0x80, 0xf3, 0x42, 0xda, 0x85, 0x54, 0x2b, 0x4d, 0xa5, 0xbc, 0x7f, 0xb6, 0x5f, 0xae, 0x35, + 0x3f, 0x2f, 0x64, 0x82, 0xe9, 0xc6, 0x9f, 0xb3, 0xb0, 0xdc, 0x30, 0xdb, 0xf8, 0xdc, 0x51, 0x6f, + 0x26, 0x29, 0x92, 0xe5, 0xc8, 0x3d, 0x4e, 0x36, 0xe8, 0x23, 0x7f, 0xe9, 0x7c, 0x91, 0xc9, 0xd7, + 0x37, 0x2a, 0xc1, 0xa2, 0xed, 0xa8, 0x37, 0x5e, 0xee, 0x50, 0xad, 0x1b, 0xec, 0x28, 0x1d, 0xd5, + 0x79, 0xe6, 0x95, 0x8d, 0xb3, 0xf2, 0x1d, 0x8a, 0x6a, 0x7a, 0x98, 0x33, 0xd5, 0x79, 0xc6, 0x2f, + 0x32, 0x33, 0x13, 0x17, 0x99, 0x06, 0x2c, 0x7b, 0x77, 0xb6, 0xab, 0x80, 0x37, 0xb5, 0x78, 0x34, + 0x62, 0x51, 0x01, 0x78, 0xe8, 0xee, 0x5d, 0x32, 0x38, 0x28, 0xa4, 0xc6, 0xd7, 0x89, 0xdf, 0x1f, + 0xa1, 0x6a, 0xdc, 0x0b, 0xe6, 0x35, 0x0b, 0x21, 0xb1, 0x0a, 0xf7, 0x62, 0x57, 0xf5, 0xdd, 0xd7, + 0x95, 0xf7, 0x60, 0x65, 0xc8, 0x1f, 0xb4, 0x8a, 0xf8, 0x3a, 0x05, 0x45, 0x17, 0x77, 0x61, 0xd8, + 0x13, 0x06, 0x70, 0x4c, 0xb0, 0xa5, 0xe2, 0x82, 0xad, 0x07, 0x45, 0x2f, 0x4a, 0xba, 0xc6, 0x70, + 0x9c, 0xa4, 0xc3, 0x45, 0x7e, 0x9c, 0x41, 0x2c, 0x62, 0x28, 0x56, 0xbc, 0x18, 0x1c, 0x46, 0x8a, + 0x35, 0x58, 0x4d, 0x60, 0x9b, 0xc8, 0x8f, 0xab, 0x64, 0x57, 0x23, 0xa6, 0x51, 0x4f, 0xfe, 0x27, + 0x4b, 0x3c, 0x39, 0x79, 0x13, 0xd8, 0xe4, 0xa6, 0x82, 0x8f, 0x59, 0x6f, 0x70, 0x9b, 0x9d, 0x37, + 0x9b, 0x0c, 0xee, 0x43, 0x9e, 0xa5, 0xcb, 0x78, 0x74, 0xe0, 0x8c, 0xc8, 0x16, 0xd9, 0xd7, 0x6a, + 0x49, 0x73, 0x91, 0x96, 0xd4, 0x8f, 0x11, 0x5e, 0x6d, 0x3f, 0x3d, 0x1c, 0x23, 0x5c, 0xaf, 0x30, + 0x08, 0x7e, 0x8c, 0x70, 0x3a, 0xcf, 0x16, 0x2f, 0xa3, 0xcc, 0x78, 0x0a, 0x3f, 0x19, 0xa9, 0xf0, + 0xbb, 0xca, 0x29, 0x34, 0x90, 0xff, 0x6f, 0xba, 0x55, 0x7a, 0x1a, 0xb8, 0x7d, 0xa6, 0xf4, 0xd7, + 0x14, 0x88, 0xe4, 0xac, 0x4c, 0xde, 0x03, 0x46, 0x22, 0x31, 0x35, 0x14, 0x89, 0xbf, 0x04, 0x91, + 0xa6, 0x92, 0xf8, 0x26, 0xf0, 0xb3, 0x70, 0x32, 0xe9, 0xc4, 0x85, 0x4a, 0x7c, 0xe3, 0x57, 0x34, + 0x62, 0xd0, 0xe2, 0x31, 0xac, 0x27, 0xb2, 0x4e, 0xe4, 0xc6, 0x75, 0x3f, 0x3f, 0xf1, 0xdb, 0x3c, + 0x04, 0x05, 0x17, 0x5d, 0xc5, 0x4e, 0xad, 0xed, 0x57, 0x80, 0x1f, 0xc0, 0x1d, 0x06, 0x46, 0x2b, + 0x3e, 0xa6, 0x73, 0x16, 0xd8, 0xce, 0x59, 0x5a, 0x23, 0x3b, 0x11, 0x53, 0x4d, 0x7e, 0x45, 0xd4, + 0xc7, 0xd5, 0x91, 0xfb, 0x91, 0x3a, 0x92, 0x54, 0xe9, 0xeb, 0xa1, 0x6b, 0x76, 0x44, 0x05, 0xf9, + 0x0f, 0x01, 0xee, 0x72, 0xe9, 0xd0, 0x0f, 0xd8, 0xda, 0x71, 0x2b, 0x51, 0x26, 0x5b, 0x35, 0x76, + 0x48, 0xd1, 0xf8, 0x69, 0xa8, 0x68, 0x7c, 0x38, 0x92, 0x9d, 0x2d, 0x17, 0x3f, 0x8c, 0x29, 0x17, + 0xcf, 0x9b, 0xfb, 0xd5, 0x8a, 0x72, 0xd1, 0x20, 0x7f, 0xfd, 0x72, 0xd1, 0x2f, 0xf6, 0x76, 0xff, + 0x2b, 0xc0, 0x4c, 0xcd, 0xdb, 0x6a, 0xa7, 0x8f, 0x1a, 0x30, 0x1f, 0x7a, 0x92, 0x44, 0x6b, 0x31, + 0x2f, 0x95, 0x9e, 0xa3, 0xc5, 0xf5, 0xc4, 0x77, 0x4c, 0x69, 0x0a, 0x5d, 0x33, 0xcf, 0xa9, 0xa1, + 0x2e, 0xe7, 0xed, 0x21, 0x4e, 0xce, 0x46, 0x8a, 0x0f, 0x46, 0x50, 0x05, 0x7a, 0x3e, 0x81, 0xac, + 0xf7, 0xfe, 0x86, 0x96, 0x82, 0xa7, 0x3f, 0xe6, 0x79, 0x4e, 0xbc, 0x1b, 0x81, 0xfa, 0x7c, 0xbb, + 0xbf, 0xc9, 0x01, 0x0c, 0x2a, 0x72, 0x74, 0x0c, 0x73, 0xec, 0x0b, 0x0d, 0x5a, 0x4d, 0x78, 0x9b, + 0x12, 0xd7, 0xf8, 0xc8, 0xc0, 0xa6, 0x63, 0x98, 0x63, 0xe7, 0xab, 0x03, 0x61, 0x9c, 0xd1, 0xf0, + 0x40, 0x18, 0x77, 0x24, 0x3b, 0x85, 0x74, 0x58, 0x89, 0x19, 0x83, 0xa1, 0x87, 0xe3, 0xcd, 0x11, + 0xc5, 0x77, 0xc6, 0x9c, 0xa7, 0x49, 0x53, 0xc8, 0x82, 0x7b, 0xb1, 0xc3, 0x1a, 0xb4, 0x33, 0xee, + 0x28, 0x4a, 0x7c, 0x77, 0x0c, 0xca, 0x40, 0x67, 0x17, 0xc4, 0xf8, 0xd1, 0x05, 0x7a, 0x77, 0xec, + 0x81, 0x8b, 0xf8, 0xde, 0x38, 0xa4, 0x81, 0xda, 0x23, 0xc8, 0x33, 0x63, 0x04, 0x24, 0x72, 0x67, + 0x0b, 0x44, 0xf0, 0x6a, 0xc2, 0xdc, 0x81, 0x48, 0x62, 0xba, 0xe5, 0x81, 0xa4, 0xe1, 0x9e, 0x7d, + 0x20, 0x89, 0xd3, 0x5e, 0x47, 0xdd, 0x1f, 0xc9, 0x62, 0x3c, 0xf7, 0xf3, 0xd3, 0x20, 0xcf, 0xfd, + 0x31, 0x29, 0x51, 0x9a, 0xda, 0xfd, 0x43, 0x06, 0x32, 0x6e, 0x9a, 0x41, 0x4d, 0x78, 0x2b, 0x52, + 0x58, 0xa3, 0x8d, 0xe4, 0x0e, 0x44, 0xbc, 0x1f, 0x8b, 0x0f, 0x96, 0xf4, 0x05, 0x49, 0xef, 0xa1, + 0x32, 0x13, 0x6d, 0x8e, 0x2a, 0x8e, 0xc5, 0xad, 0x04, 0x8a, 0xa8, 0xec, 0xf0, 0xa9, 0xd8, 0x1c, + 0x55, 0xe3, 0x84, 0x65, 0xc7, 0x9d, 0x84, 0xaf, 0x60, 0x91, 0x73, 0x93, 0x21, 0x69, 0xf4, 0x4d, + 0x2c, 0x6e, 0x27, 0xd2, 0x04, 0x1a, 0x0e, 0x60, 0x36, 0xb8, 0xf8, 0x50, 0x91, 0xe5, 0x61, 0xef, + 0x47, 0xf1, 0x1e, 0x07, 0x13, 0xb5, 0x32, 0x1a, 0x2a, 0x52, 0x84, 0x87, 0x17, 0x24, 0xdb, 0x89, + 0x34, 0xbe, 0x86, 0x83, 0xec, 0x17, 0xe9, 0x96, 0xad, 0x5d, 0xe5, 0xbc, 0x7f, 0xa3, 0xf9, 0xde, + 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x53, 0x92, 0xe9, 0xd7, 0x53, 0x23, 0x00, 0x00, } diff --git a/spec.md b/spec.md index 12ab8218..46564690 100644 --- a/spec.md +++ b/spec.md @@ -283,9 +283,6 @@ There are three sets of RPCs: ```protobuf service Identity { - rpc GetSupportedVersions (GetSupportedVersionsRequest) - returns (GetSupportedVersionsResponse) {} - rpc GetPluginInfo(GetPluginInfoRequest) returns (GetPluginInfoResponse) {} @@ -374,7 +371,6 @@ The status `code` MUST contain a [canonical error code](https://github.com/grpc/ | Condition | gRPC Code | Description | Recovery Behavior | |-----------|-----------|-------------|-------------------| -| Unsupported request version | 3 INVALID_ARGUMENT | Indicates that the version specified in the request is not supported by the Plugin. | Caller MUST NOT retry; caller SHOULD call `GetSupportedVersions` to discover which CSI versions the Plugin supports. | | Missing required field | 3 INVALID_ARGUMENT | Indicates that a required field is missing from the request. More human-readable information MAY be provided in the `error_description` field. | Caller MUST fix the request by adding the missing required field before retrying. | | Invalid or unsupported field in the request | 3 INVALID_ARGUMENT | Indicates that the one ore more fields in this field is either not allowed by the Plugin or has an invalid value. More human-readable information MAY be provided in the gRPC `status.message` field. | Caller MUST fix the field before retrying. | @@ -385,33 +381,14 @@ The status `details` MUST be empty. In the future, this spec may require `detail ### Identity Service RPC -Identity service RPCs allow a CO to negotiate an API protocol version that MAY be used for subsequent RPCs across all CSI services with respect to a particular CSI plugin. +Identity service RPCs allow a CO to query a plugin for capabilities, health, and other metadata. The general flow of the success case MAY be as follows (protos illustrated in YAML for brevity): -1. CO queries supported versions via Identity RPC. The CO is expected to gracefully handle, in the manner of its own choosing, the case wherein the returned `supported_versions` from the plugin are not supported by the CO. - -``` - # CO --(GetSupportedVersions)--> Plugin - request: {} - response: - supported_versions: - - major: 0 - minor: 2 - patch: 0 - - major: 0 - minor: 1 - patch: 0 -``` - -2. CO queries metadata via Identity RPC, using a supported API protocol version (as per the reply from the prior step): the requested `version` MUST match an entry from the aforementioned `supported_versions` array. +1. CO queries metadata via Identity RPC. ``` # CO --(GetPluginInfo)--> Plugin request: - version: - major: 0 - minor: 1 - patch: 0 response: name: org.foo.whizbang.super-plugin vendor_version: blue-green @@ -419,75 +396,29 @@ The general flow of the success case MAY be as follows (protos illustrated in YA baz: qaz ``` -3. CO queries available capabilities of the plugin. +2. CO queries available capabilities of the plugin. ``` # CO --(GetPluginCapabilities)--> Plugin request: - version: - major: 0 - minor: 2 - patch: 0 response: capabilities: - service: type: CONTROLLER_SERVICE ``` -4. CO queries the readiness of the plugin. +3. CO queries the readiness of the plugin. ``` # CO --(Probe)--> Plugin request: - version: - major: 0 - minor: 2 - patch: 0 response: {} ``` -#### `GetSupportedVersions` - -A Plugin SHALL reply with a list of supported CSI versions. -The initial version of the CSI specification is 0.1.0 (in *major.minor.patch* format). -A CO MAY execute plugin RPCs in the manner prescribed by any such supported CSI version. -The versions returned by this call are orthogonal to any vendor-specific version metadata (see `vendor_version` in `GetPluginInfoResponse`). - -NOTE: Changes to this RPC should be approached very conservatively since the request/response protobufs here are critical for proper client-server version negotiation. -Future changes to this RPC MUST **guarantee** backwards compatibility. - -```protobuf -message GetSupportedVersionsRequest { -} - -message GetSupportedVersionsResponse { - // All the CSI versions that the Plugin supports. This field is - // REQUIRED. - repeated Version supported_versions = 1; -} - -// Specifies a version in Semantic Version 2.0 format. -// (http://semver.org/spec/v2.0.0.html) -message Version { - // The value of this field MUST NOT be negative. - int32 major = 1; // This field is REQUIRED. - // The value of this field MUST NOT be negative. - int32 minor = 2; // This field is REQUIRED. - // The value of this field MUST NOT be negative. - int32 patch = 3; // This field is REQUIRED. -} -``` - -##### GetSupportedVersions Errors - -If the plugin is unable to complete the GetSupportedVersions call successfully, it MUST return a non-ok gRPC code in the gRPC status. - #### `GetPluginInfo` ```protobuf message GetPluginInfoRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; } message GetPluginInfoResponse { @@ -519,8 +450,6 @@ All instances of the same version (see `vendor_version` of `GetPluginInfoRespons ```protobuf message GetPluginCapabilitiesRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; } message GetPluginCapabilitiesResponse { @@ -570,15 +499,13 @@ Such actions MAY include, but SHALL NOT be limited to, the following: * Notifying the plugin supervisor. The Plugin MAY verify that it has the right configurations, devices, dependencies and drivers in order to run and return a success if the validation succeeds. -The CO MAY invoke this RPC at any time after version negotiation has been completed (see `GetSupportedVersions`). +The CO MAY invoke this RPC at any time. A CO MAY invoke this call multiple times with the understanding that a plugin's implementation MAY NOT be trivial and there MAY be overhead incurred by such repeated calls. The SP SHALL document guidance and known limitations regarding a particular Plugin's implementation of this RPC. For example, the SP MAY document the maximum frequency at which its Probe implementation should be called. ```protobuf message ProbeRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; } message ProbeResponse { @@ -610,9 +537,6 @@ If a volume corresponding to the specified volume `name` already exists and is c ```protobuf message CreateVolumeRequest { - // The API version assumed by the CO. This field is REQUIRED. - Version version = 1; - // 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 @@ -628,12 +552,12 @@ message CreateVolumeRequest { // 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. - string name = 2; + string name = 1; // 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. - CapacityRange capacity_range = 3; + CapacityRange capacity_range = 2; // The capabilities that the provisioned volume MUST have: the Plugin // MUST provision a volume that could satisfy ALL of the @@ -643,12 +567,12 @@ message CreateVolumeRequest { // early validation: if ANY of the specified volume capabilities are // not supported by the Plugin, the call SHALL fail. This field is // REQUIRED. - repeated VolumeCapability volume_capabilities = 4; + repeated VolumeCapability volume_capabilities = 3; // 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. - map parameters = 5; + map parameters = 4; // Credentials used by Controller plugin to authenticate/authorize // volume creation request. @@ -661,7 +585,7 @@ message CreateVolumeRequest { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - map controller_create_credentials = 6; + map controller_create_credentials = 5; } message CreateVolumeResponse { @@ -797,12 +721,9 @@ If a volume corresponding to the specified `volume_id` does not exist or the art ```protobuf message DeleteVolumeRequest { - // The API version assumed by the CO. This field is REQUIRED. - Version version = 1; - // The ID of the volume to be deprovisioned. // This field is REQUIRED. - string volume_id = 2; + string volume_id = 1; // Credentials used by Controller plugin to authenticate/authorize // volume deletion request. @@ -815,10 +736,11 @@ message DeleteVolumeRequest { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - map controller_delete_credentials = 3; + map controller_delete_credentials = 2; } -message DeleteVolumeResponse {} +message DeleteVolumeResponse { +} ``` ##### DeleteVolume Errors @@ -850,24 +772,21 @@ The CO MAY call this RPC for publishing a volume to multiple nodes if the volume ```protobuf message ControllerPublishVolumeRequest { - // The API version assumed by the CO. This field is REQUIRED. - Version version = 1; - // The ID of the volume to be used on a node. // This field is REQUIRED. - string volume_id = 2; + string volume_id = 1; // The ID of the node. This field is REQUIRED. The CO SHALL set this // field to match the node ID returned by `NodeGetId`. - string node_id = 3; + string node_id = 2; // The capability of the volume the CO expects the volume to have. // This is a REQUIRED field. - VolumeCapability volume_capability = 4; + VolumeCapability volume_capability = 3; // Whether to publish the volume in readonly mode. This field is // REQUIRED. - bool readonly = 5; + bool readonly = 4; // Credentials used by Controller plugin to authenticate/authorize // controller publish request. @@ -880,12 +799,12 @@ message ControllerPublishVolumeRequest { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - map controller_publish_credentials = 6; + map controller_publish_credentials = 5; // Attributes of the volume to be used on a node. This field is // OPTIONAL and MUST match the attributes of the Volume identified // by `volume_id`. - map volume_attributes = 7; + map volume_attributes = 6; } message ControllerPublishVolumeResponse { @@ -929,18 +848,15 @@ If this operation failed, or the CO does not know if the operation failed or not ```protobuf message ControllerUnpublishVolumeRequest { - // The API version assumed by the CO. This field is REQUIRED. - Version version = 1; - // The ID of the volume. This field is REQUIRED. - string volume_id = 2; + string volume_id = 1; // The ID of the node. This field is OPTIONAL. The CO SHOULD set this // field to match the node ID returned by `NodeGetId` 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. - string node_id = 3; + string node_id = 2; // Credentials used by Controller plugin to authenticate/authorize // controller unpublish request. @@ -953,10 +869,11 @@ message ControllerUnpublishVolumeRequest { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - map controller_unpublish_credentials = 4; + map controller_unpublish_credentials = 3; } -message ControllerUnpublishVolumeResponse {} +message ControllerUnpublishVolumeResponse { +} ``` ##### ControllerUnpublishVolume Errors @@ -982,20 +899,17 @@ This operation MUST be idempotent. ```protobuf message ValidateVolumeCapabilitiesRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; - // The ID of the volume to check. This field is REQUIRED. - string volume_id = 2; + string volume_id = 1; // The capabilities that the CO wants to check for the volume. This // call SHALL return "supported" only if all the volume capabilities // specified below are supported. This field is REQUIRED. - repeated VolumeCapability volume_capabilities = 3; + repeated VolumeCapability volume_capabilities = 2; // Attributes of the volume to check. This field is OPTIONAL and MUST // match the attributes of the Volume identified by `volume_id`. - map volume_attributes = 4; + map volume_attributes = 3; } message ValidateVolumeCapabilitiesResponse { @@ -1028,9 +942,6 @@ The Plugin SHALL return the information about all the volumes that it knows abou ```protobuf message ListVolumesRequest { - // The API version assumed by the CO. This field is REQUIRED. - Version version = 1; - // 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` @@ -1039,13 +950,13 @@ message ListVolumesRequest { // 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. - int32 max_entries = 2; + int32 max_entries = 1; // 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. - string starting_token = 3; + string starting_token = 2; } message ListVolumesResponse { @@ -1083,21 +994,18 @@ The RPC allows the CO to query the capacity of the storage pool from which the c ```protobuf message GetCapacityRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; - // 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. - repeated VolumeCapability volume_capabilities = 2; + repeated VolumeCapability volume_capabilities = 1; // 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. - map parameters = 3; + map parameters = 2; } message GetCapacityResponse { @@ -1121,8 +1029,6 @@ A Controller Plugin MUST implement this RPC call. This RPC allows the CO to chec ```protobuf message ControllerGetCapabilitiesRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; } message ControllerGetCapabilitiesResponse { @@ -1189,29 +1095,26 @@ If this RPC failed, or the CO does not know if it failed or not, it MAY choose t ```protobuf message NodeStageVolumeRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; - // The ID of the volume to publish. This field is REQUIRED. - string volume_id = 2; + string volume_id = 1; // 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. - map publish_info = 3; + map publish_info = 2; // 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 that there is only one // staging_target_path per volume. // This is a REQUIRED field. - string staging_target_path = 4; + string staging_target_path = 3; // The capability of the volume the CO expects the volume to have. // This is a REQUIRED field. - VolumeCapability volume_capability = 5; + VolumeCapability volume_capability = 4; // Credentials used by Node plugin to authenticate/authorize node // stage request. @@ -1224,15 +1127,16 @@ message NodeStageVolumeRequest { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - map node_stage_credentials = 6; + map node_stage_credentials = 5; // Attributes of the volume to publish. This field is OPTIONAL and // MUST match the attributes of the VolumeInfo identified by // `volume_id`. - map volume_attributes = 7; + map volume_attributes = 6; } -message NodeStageVolumeResponse {} +message NodeStageVolumeResponse { +} ``` #### NodeStageVolume Errors @@ -1270,16 +1174,13 @@ If this RPC failed, or the CO does not know if it failed or not, it MAY choose t ```protobuf message NodeUnstageVolumeRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; - // The ID of the volume. This field is REQUIRED. - string volume_id = 2; + string volume_id = 1; // The path at which the volume was published. It MUST be an absolute // path in the root filesystem of the process serving this request. // This is a REQUIRED field. - string staging_target_path = 3; + string staging_target_path = 2; // Credentials used by Node plugin to authenticate/authorize node // unstage request. @@ -1292,10 +1193,11 @@ message NodeUnstageVolumeRequest { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - map node_unstage_credentials = 4; + map node_unstage_credentials = 3; } -message NodeUnstageVolumeResponse {} +message NodeUnstageVolumeResponse { +} ``` #### NodeUnstageVolume Errors @@ -1342,18 +1244,15 @@ The following table shows what the Plugin SHOULD return when receiving a second ```protobuf message NodePublishVolumeRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; - // The ID of the volume to publish. This field is REQUIRED. - string volume_id = 2; + string volume_id = 1; // 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. - map publish_info = 3; + map publish_info = 2; // The path to which the device was mounted by `NodeStageVolume`. // It MUST be an absolute path in the root filesystem of the process @@ -1361,7 +1260,7 @@ message NodePublishVolumeRequest { // It MUST be set if the Node Plugin implements the // `STAGE_UNSTAGE_VOLUME` node capability. // This is an OPTIONAL field. - string staging_target_path = 4; + string staging_target_path = 3; // The path to which the volume will be published. It MUST be an // absolute path in the root filesystem of the process serving this @@ -1369,15 +1268,15 @@ message NodePublishVolumeRequest { // The CO SHALL ensure that the path exists, and that the process // serving the request has `read` and `write` permissions to the path. // This is a REQUIRED field. - string target_path = 5; + string target_path = 4; // The capability of the volume the CO expects the volume to have. // This is a REQUIRED field. - VolumeCapability volume_capability = 6; + VolumeCapability volume_capability = 5; // Whether to publish the volume in readonly mode. This field is // REQUIRED. - bool readonly = 7; + bool readonly = 6; // Credentials used by Node plugin to authenticate/authorize node // publish request. @@ -1390,16 +1289,17 @@ message NodePublishVolumeRequest { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - map node_publish_credentials = 8; + map node_publish_credentials = 7; // Attributes of the volume to publish. This field is OPTIONAL and // MUST match the attributes of the Volume identified by // `volume_id`. - map volume_attributes = 9; + map volume_attributes = 8; } -message NodePublishVolumeResponse {} +message NodePublishVolumeResponse { +} ``` ##### NodePublishVolume Errors @@ -1433,16 +1333,13 @@ If this RPC failed, or the CO does not know if it failed or not, it can choose t ```protobuf message NodeUnpublishVolumeRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; - // The ID of the volume. This field is REQUIRED. - string volume_id = 2; + string volume_id = 1; // The path at which the volume was published. It MUST be an absolute // path in the root filesystem of the process serving this request. // This is a REQUIRED field. - string target_path = 3; + string target_path = 2; // Credentials used by Node plugin to authenticate/authorize node // unpublish request. @@ -1455,10 +1352,11 @@ message NodeUnpublishVolumeRequest { // passing through the required credentials. This information is // sensitive and MUST be treated as such (not logged, etc.) by the CO. // This field is OPTIONAL. - map node_unpublish_credentials = 4; + map node_unpublish_credentials = 3; } -message NodeUnpublishVolumeResponse {} +message NodeUnpublishVolumeResponse { +} ``` ##### NodeUnpublishVolume Errors @@ -1482,8 +1380,6 @@ The result of this call will be used by CO in `ControllerPublishVolume`. ```protobuf message NodeGetIdRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; } message NodeGetIdResponse { @@ -1511,8 +1407,6 @@ This RPC allows the CO to check the supported capabilities of node service provi ```protobuf message NodeGetCapabilitiesRequest { - // The API version assumed by the CO. This is a REQUIRED field. - Version version = 1; } message NodeGetCapabilitiesResponse { @@ -1586,7 +1480,7 @@ If the plugin is unable to complete the NodeGetCapabilities call successfully, i * CO: monitor `/path/to/unix/domain/socket.sock`. * Plugin: read `CSI_ENDPOINT`, create UNIX socket at specified path, bind and listen. * CO: observe that socket now exists, establish connection. -* CO: invoke `GetSupportedVersions`. +* CO: invoke `GetPluginCapabilities`. #### Filesystem From 1d5166ed499a69af53d57c08d2c6e1f398056fb6 Mon Sep 17 00:00:00 2001 From: James DeFelice Date: Thu, 22 Feb 2018 22:41:36 +0000 Subject: [PATCH 6/7] make: tighten up sed expression --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index fa69d61d..9a463a1a 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ CSI_PROTO := csi.proto # built on Travis-CI. $(CSI_PROTO).tmp: $(CSI_SPEC) cat $? | \ - sed -n -e '/```protobuf$$/,/```$$/ p' | \ + sed -n -e '/```protobuf$$/,/^```$$/ p' | \ sed -e 's@^```.*$$@////////@g' > $@ # This is the target for building the CSI protobuf file. From 2f2882b75a12d619d252a37b35d478028e481ecf Mon Sep 17 00:00:00 2001 From: James DeFelice Date: Thu, 22 Feb 2018 22:46:39 +0000 Subject: [PATCH 7/7] make: remove /////// from generated files --- Makefile | 3 +-- csi.proto | 38 -------------------------------------- lib/go/csi/v1/csi.pb.go | 34 ---------------------------------- 3 files changed, 1 insertion(+), 74 deletions(-) diff --git a/Makefile b/Makefile index 9a463a1a..e5ea0d50 100644 --- a/Makefile +++ b/Makefile @@ -9,8 +9,7 @@ CSI_PROTO := csi.proto # built on Travis-CI. $(CSI_PROTO).tmp: $(CSI_SPEC) cat $? | \ - sed -n -e '/```protobuf$$/,/^```$$/ p' | \ - sed -e 's@^```.*$$@////////@g' > $@ + sed -n -e '/```protobuf$$/,/^```$$/ { /```/!p }' > "$@" # This is the target for building the CSI protobuf file. # diff --git a/csi.proto b/csi.proto index 8eccf00d..de7e24f7 100644 --- a/csi.proto +++ b/csi.proto @@ -1,10 +1,7 @@ -//////// syntax = "proto3"; package csi.v1; option go_package = "csi"; -//////// -//////// service Identity { rpc GetPluginInfo(GetPluginInfoRequest) returns (GetPluginInfoResponse) {} @@ -61,8 +58,6 @@ service Node { rpc NodeGetCapabilities (NodeGetCapabilitiesRequest) returns (NodeGetCapabilitiesResponse) {} } -//////// -//////// message GetPluginInfoRequest { } @@ -82,8 +77,6 @@ message GetPluginInfoResponse { // This field is OPTIONAL. Values are opaque to the CO. map manifest = 3; } -//////// -//////// message GetPluginCapabilitiesRequest { } @@ -117,16 +110,12 @@ message PluginCapability { Service service = 1; } } -//////// -//////// message ProbeRequest { } message ProbeResponse { // Intentionally empty. } -//////// -//////// message CreateVolumeRequest { // The suggested name for the storage space. This field is REQUIRED. // It serves two purposes: @@ -285,8 +274,6 @@ message Volume { // be passed to volume validation and publishing calls. map attributes = 3; } -//////// -//////// message DeleteVolumeRequest { // The ID of the volume to be deprovisioned. // This field is REQUIRED. @@ -308,8 +295,6 @@ message DeleteVolumeRequest { message DeleteVolumeResponse { } -//////// -//////// message ControllerPublishVolumeRequest { // The ID of the volume to be used on a node. // This field is REQUIRED. @@ -353,8 +338,6 @@ message ControllerPublishVolumeResponse { // This information is opaque to the CO. This field is OPTIONAL. map publish_info = 1; } -//////// -//////// message ControllerUnpublishVolumeRequest { // The ID of the volume. This field is REQUIRED. string volume_id = 1; @@ -382,8 +365,6 @@ message ControllerUnpublishVolumeRequest { message ControllerUnpublishVolumeResponse { } -//////// -//////// message ValidateVolumeCapabilitiesRequest { // The ID of the volume to check. This field is REQUIRED. string volume_id = 1; @@ -408,8 +389,6 @@ message ValidateVolumeCapabilitiesResponse { // An empty string is equal to an unspecified field value. string message = 2; } -//////// -//////// message ListVolumesRequest { // If specified (non-zero value), the Plugin MUST NOT return more // entries than this number in the response. If the actual number of @@ -443,8 +422,6 @@ message ListVolumesResponse { // An empty string is equal to an unspecified field value. string next_token = 2; } -//////// -//////// message GetCapacityRequest { // If specified, the Plugin SHALL report the capacity of the storage // that can be used to provision volumes that satisfy ALL of the @@ -469,8 +446,6 @@ message GetCapacityResponse { // The value of this field MUST NOT be negative. int64 available_capacity = 1; } -//////// -//////// message ControllerGetCapabilitiesRequest { } @@ -499,8 +474,6 @@ message ControllerServiceCapability { RPC rpc = 1; } } -//////// -//////// message NodeStageVolumeRequest { // The ID of the volume to publish. This field is REQUIRED. string volume_id = 1; @@ -544,8 +517,6 @@ message NodeStageVolumeRequest { message NodeStageVolumeResponse { } -//////// -//////// message NodeUnstageVolumeRequest { // The ID of the volume. This field is REQUIRED. string volume_id = 1; @@ -571,8 +542,6 @@ message NodeUnstageVolumeRequest { message NodeUnstageVolumeResponse { } -//////// -//////// message NodePublishVolumeRequest { // The ID of the volume to publish. This field is REQUIRED. string volume_id = 1; @@ -630,8 +599,6 @@ message NodePublishVolumeRequest { message NodePublishVolumeResponse { } -//////// -//////// message NodeUnpublishVolumeRequest { // The ID of the volume. This field is REQUIRED. string volume_id = 1; @@ -657,8 +624,6 @@ message NodeUnpublishVolumeRequest { message NodeUnpublishVolumeResponse { } -//////// -//////// message NodeGetIdRequest { } @@ -668,8 +633,6 @@ message NodeGetIdResponse { // This is a REQUIRED field. string node_id = 1; } -//////// -//////// message NodeGetCapabilitiesRequest { } @@ -695,4 +658,3 @@ message NodeServiceCapability { RPC rpc = 1; } } -//////// diff --git a/lib/go/csi/v1/csi.pb.go b/lib/go/csi/v1/csi.pb.go index e6459805..c6093c5a 100644 --- a/lib/go/csi/v1/csi.pb.go +++ b/lib/go/csi/v1/csi.pb.go @@ -201,8 +201,6 @@ func (NodeServiceCapability_RPC_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{39, 0, 0} } -// ////// -// ////// type GetPluginInfoRequest struct { } @@ -252,8 +250,6 @@ func (m *GetPluginInfoResponse) GetManifest() map[string]string { return nil } -// ////// -// ////// type GetPluginCapabilitiesRequest struct { } @@ -387,8 +383,6 @@ func (m *PluginCapability_Service) GetType() PluginCapability_Service_Type { return PluginCapability_Service_UNKNOWN } -// ////// -// ////// type ProbeRequest struct { } @@ -405,8 +399,6 @@ func (m *ProbeResponse) String() string { return proto.CompactTextStr func (*ProbeResponse) ProtoMessage() {} func (*ProbeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } -// ////// -// ////// type CreateVolumeRequest struct { // The suggested name for the storage space. This field is REQUIRED. // It serves two purposes: @@ -788,8 +780,6 @@ func (m *Volume) GetAttributes() map[string]string { return nil } -// ////// -// ////// type DeleteVolumeRequest struct { // The ID of the volume to be deprovisioned. // This field is REQUIRED. @@ -835,8 +825,6 @@ func (m *DeleteVolumeResponse) String() string { return proto.Compact func (*DeleteVolumeResponse) ProtoMessage() {} func (*DeleteVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } -// ////// -// ////// type ControllerPublishVolumeRequest struct { // The ID of the volume to be used on a node. // This field is REQUIRED. @@ -937,8 +925,6 @@ func (m *ControllerPublishVolumeResponse) GetPublishInfo() map[string]string { return nil } -// ////// -// ////// type ControllerUnpublishVolumeRequest struct { // The ID of the volume. This field is REQUIRED. VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` @@ -1000,8 +986,6 @@ func (*ControllerUnpublishVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } -// ////// -// ////// type ValidateVolumeCapabilitiesRequest struct { // The ID of the volume to check. This field is REQUIRED. VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` @@ -1073,8 +1057,6 @@ func (m *ValidateVolumeCapabilitiesResponse) GetMessage() string { return "" } -// ////// -// ////// type ListVolumesRequest struct { // If specified (non-zero value), the Plugin MUST NOT return more // entries than this number in the response. If the actual number of @@ -1157,8 +1139,6 @@ func (m *ListVolumesResponse_Entry) GetVolume() *Volume { return nil } -// ////// -// ////// type GetCapacityRequest struct { // If specified, the Plugin SHALL report the capacity of the storage // that can be used to provision volumes that satisfy ALL of the @@ -1214,8 +1194,6 @@ func (m *GetCapacityResponse) GetAvailableCapacity() int64 { return 0 } -// ////// -// ////// type ControllerGetCapabilitiesRequest struct { } @@ -1355,8 +1333,6 @@ func (m *ControllerServiceCapability_RPC) GetType() ControllerServiceCapability_ return ControllerServiceCapability_RPC_UNKNOWN } -// ////// -// ////// type NodeStageVolumeRequest struct { // The ID of the volume to publish. This field is REQUIRED. VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` @@ -1448,8 +1424,6 @@ func (m *NodeStageVolumeResponse) String() string { return proto.Comp func (*NodeStageVolumeResponse) ProtoMessage() {} func (*NodeStageVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } -// ////// -// ////// type NodeUnstageVolumeRequest struct { // The ID of the volume. This field is REQUIRED. VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` @@ -1505,8 +1479,6 @@ func (m *NodeUnstageVolumeResponse) String() string { return proto.Co func (*NodeUnstageVolumeResponse) ProtoMessage() {} func (*NodeUnstageVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } -// ////// -// ////// type NodePublishVolumeRequest struct { // The ID of the volume to publish. This field is REQUIRED. VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` @@ -1623,8 +1595,6 @@ func (m *NodePublishVolumeResponse) String() string { return proto.Co func (*NodePublishVolumeResponse) ProtoMessage() {} func (*NodePublishVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } -// ////// -// ////// type NodeUnpublishVolumeRequest struct { // The ID of the volume. This field is REQUIRED. VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` @@ -1680,8 +1650,6 @@ func (m *NodeUnpublishVolumeResponse) String() string { return proto. func (*NodeUnpublishVolumeResponse) ProtoMessage() {} func (*NodeUnpublishVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } -// ////// -// ////// type NodeGetIdRequest struct { } @@ -1709,8 +1677,6 @@ func (m *NodeGetIdResponse) GetNodeId() string { return "" } -// ////// -// ////// type NodeGetCapabilitiesRequest struct { }