diff --git a/gen/go/qdrant/cloud/cluster/v1/cluster.pb.go b/gen/go/qdrant/cloud/cluster/v1/cluster.pb.go index 50ad9434..0e92cdb2 100644 --- a/gen/go/qdrant/cloud/cluster/v1/cluster.pb.go +++ b/gen/go/qdrant/cloud/cluster/v1/cluster.pb.go @@ -721,6 +721,112 @@ func (ClusterScalabilityStatus) EnumDescriptor() ([]byte, []int) { return file_qdrant_cloud_cluster_v1_cluster_proto_rawDescGZIP(), []int{10} } +// ClusterDiskExpansionSupportStatus defines the disk expansion support states of a cluster. +type ClusterDiskExpansionSupportStatus int32 + +const ( + // Disk expansion support is unspecified. + ClusterDiskExpansionSupportStatus_CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_UNSPECIFIED ClusterDiskExpansionSupportStatus = 0 + // Cluster supports disk expansion. + ClusterDiskExpansionSupportStatus_CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_SUPPORTED ClusterDiskExpansionSupportStatus = 1 + // Cluster does not support disk expansion. + ClusterDiskExpansionSupportStatus_CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_NOT_SUPPORTED ClusterDiskExpansionSupportStatus = 2 +) + +// Enum value maps for ClusterDiskExpansionSupportStatus. +var ( + ClusterDiskExpansionSupportStatus_name = map[int32]string{ + 0: "CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_UNSPECIFIED", + 1: "CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_SUPPORTED", + 2: "CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_NOT_SUPPORTED", + } + ClusterDiskExpansionSupportStatus_value = map[string]int32{ + "CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_UNSPECIFIED": 0, + "CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_SUPPORTED": 1, + "CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_NOT_SUPPORTED": 2, + } +) + +func (x ClusterDiskExpansionSupportStatus) Enum() *ClusterDiskExpansionSupportStatus { + p := new(ClusterDiskExpansionSupportStatus) + *p = x + return p +} + +func (x ClusterDiskExpansionSupportStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ClusterDiskExpansionSupportStatus) Descriptor() protoreflect.EnumDescriptor { + return file_qdrant_cloud_cluster_v1_cluster_proto_enumTypes[11].Descriptor() +} + +func (ClusterDiskExpansionSupportStatus) Type() protoreflect.EnumType { + return &file_qdrant_cloud_cluster_v1_cluster_proto_enumTypes[11] +} + +func (x ClusterDiskExpansionSupportStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ClusterDiskExpansionSupportStatus.Descriptor instead. +func (ClusterDiskExpansionSupportStatus) EnumDescriptor() ([]byte, []int) { + return file_qdrant_cloud_cluster_v1_cluster_proto_rawDescGZIP(), []int{11} +} + +// ClusterBackupSupportStatus defines the backup support states of a cluster. +type ClusterBackupSupportStatus int32 + +const ( + // Backup support is unspecified. + ClusterBackupSupportStatus_CLUSTER_BACKUP_SUPPORT_STATUS_UNSPECIFIED ClusterBackupSupportStatus = 0 + // Cluster supports backup. + ClusterBackupSupportStatus_CLUSTER_BACKUP_SUPPORT_STATUS_SUPPORTED ClusterBackupSupportStatus = 1 + // Cluster does not support backup. + ClusterBackupSupportStatus_CLUSTER_BACKUP_SUPPORT_STATUS_NOT_SUPPORTED ClusterBackupSupportStatus = 2 +) + +// Enum value maps for ClusterBackupSupportStatus. +var ( + ClusterBackupSupportStatus_name = map[int32]string{ + 0: "CLUSTER_BACKUP_SUPPORT_STATUS_UNSPECIFIED", + 1: "CLUSTER_BACKUP_SUPPORT_STATUS_SUPPORTED", + 2: "CLUSTER_BACKUP_SUPPORT_STATUS_NOT_SUPPORTED", + } + ClusterBackupSupportStatus_value = map[string]int32{ + "CLUSTER_BACKUP_SUPPORT_STATUS_UNSPECIFIED": 0, + "CLUSTER_BACKUP_SUPPORT_STATUS_SUPPORTED": 1, + "CLUSTER_BACKUP_SUPPORT_STATUS_NOT_SUPPORTED": 2, + } +) + +func (x ClusterBackupSupportStatus) Enum() *ClusterBackupSupportStatus { + p := new(ClusterBackupSupportStatus) + *p = x + return p +} + +func (x ClusterBackupSupportStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ClusterBackupSupportStatus) Descriptor() protoreflect.EnumDescriptor { + return file_qdrant_cloud_cluster_v1_cluster_proto_enumTypes[12].Descriptor() +} + +func (ClusterBackupSupportStatus) Type() protoreflect.EnumType { + return &file_qdrant_cloud_cluster_v1_cluster_proto_enumTypes[12] +} + +func (x ClusterBackupSupportStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ClusterBackupSupportStatus.Descriptor instead. +func (ClusterBackupSupportStatus) EnumDescriptor() ([]byte, []int) { + return file_qdrant_cloud_cluster_v1_cluster_proto_rawDescGZIP(), []int{12} +} + // ListClustersRequest is the request for the ListClusters function type ListClustersRequest struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -3177,6 +3283,9 @@ type ClusterState struct { // For the complete cluster you have to multiply by cluster.configuration.number_of_nodes Resources *ClusterNodeResourcesSummary `protobuf:"bytes,7,opt,name=resources,proto3" json:"resources,omitempty"` // Whether the cluster can be scaled up or down. + // Deprecated: Use capabilities.scalability_info instead + // + // Deprecated: Marked as deprecated in qdrant/cloud/cluster/v1/cluster.proto. ScalabilityInfo *ClusterScalabilityInfo `protobuf:"bytes,8,opt,name=scalability_info,json=scalabilityInfo,proto3" json:"scalability_info,omitempty"` // List of nodes in the cluster. Nodes []*ClusterNodeInfo `protobuf:"bytes,9,rep,name=nodes,proto3" json:"nodes,omitempty"` @@ -3187,7 +3296,9 @@ type ClusterState struct { // When this setting is false (and version 1.9+ is used) you can use EnableClusterJwtRbac to update. // // If enabled, you can generate JWT tokens with fine-grained rules for access control. - JwtRbac bool `protobuf:"varint,10,opt,name=jwt_rbac,json=jwtRbac,proto3" json:"jwt_rbac,omitempty"` + JwtRbac bool `protobuf:"varint,10,opt,name=jwt_rbac,json=jwtRbac,proto3" json:"jwt_rbac,omitempty"` + // Specifies whether some operations are supported by cluster or not. + Capabilities *ClusterCapabilities `protobuf:"bytes,11,opt,name=capabilities,proto3" json:"capabilities,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3271,6 +3382,7 @@ func (x *ClusterState) GetResources() *ClusterNodeResourcesSummary { return nil } +// Deprecated: Marked as deprecated in qdrant/cloud/cluster/v1/cluster.proto. func (x *ClusterState) GetScalabilityInfo() *ClusterScalabilityInfo { if x != nil { return x.ScalabilityInfo @@ -3292,6 +3404,13 @@ func (x *ClusterState) GetJwtRbac() bool { return false } +func (x *ClusterState) GetCapabilities() *ClusterCapabilities { + if x != nil { + return x.Capabilities + } + return nil +} + // ClusterNodeInfo represents a node in a cluster. // All fields in this message are read-only. type ClusterNodeInfo struct { @@ -3674,6 +3793,72 @@ func (x *ClusterScalabilityInfo) GetReason() string { return "" } +// ClusterCapabilities specifies whether some actions are supported by the cluster or not. +type ClusterCapabilities struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Whether the StorageClass used by the cluster supports disk expansion or not. + // Disk scaling will be enabled or disabled based on this for hybrid cloud clusters. + DiskExpansion ClusterDiskExpansionSupportStatus `protobuf:"varint,1,opt,name=disk_expansion,json=diskExpansion,proto3,enum=qdrant.cloud.cluster.v1.ClusterDiskExpansionSupportStatus" json:"disk_expansion,omitempty"` + // Whether it is possible to take a backup for the cluster or not. + // Backup tab will be shown or hidden based on this for hybrid cloud clusters. + Backup ClusterBackupSupportStatus `protobuf:"varint,2,opt,name=backup,proto3,enum=qdrant.cloud.cluster.v1.ClusterBackupSupportStatus" json:"backup,omitempty"` + // Whether the cluster can be scaled up or down. + ScalabilityInfo *ClusterScalabilityInfo `protobuf:"bytes,3,opt,name=scalability_info,json=scalabilityInfo,proto3" json:"scalability_info,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ClusterCapabilities) Reset() { + *x = ClusterCapabilities{} + mi := &file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ClusterCapabilities) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterCapabilities) ProtoMessage() {} + +func (x *ClusterCapabilities) ProtoReflect() protoreflect.Message { + mi := &file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes[44] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClusterCapabilities.ProtoReflect.Descriptor instead. +func (*ClusterCapabilities) Descriptor() ([]byte, []int) { + return file_qdrant_cloud_cluster_v1_cluster_proto_rawDescGZIP(), []int{44} +} + +func (x *ClusterCapabilities) GetDiskExpansion() ClusterDiskExpansionSupportStatus { + if x != nil { + return x.DiskExpansion + } + return ClusterDiskExpansionSupportStatus_CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_UNSPECIFIED +} + +func (x *ClusterCapabilities) GetBackup() ClusterBackupSupportStatus { + if x != nil { + return x.Backup + } + return ClusterBackupSupportStatus_CLUSTER_BACKUP_SUPPORT_STATUS_UNSPECIFIED +} + +func (x *ClusterCapabilities) GetScalabilityInfo() *ClusterScalabilityInfo { + if x != nil { + return x.ScalabilityInfo + } + return nil +} + // QdrantRelease represent a single Qdrant release type QdrantRelease struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -3696,7 +3881,7 @@ type QdrantRelease struct { func (x *QdrantRelease) Reset() { *x = QdrantRelease{} - mi := &file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes[44] + mi := &file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3708,7 +3893,7 @@ func (x *QdrantRelease) String() string { func (*QdrantRelease) ProtoMessage() {} func (x *QdrantRelease) ProtoReflect() protoreflect.Message { - mi := &file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes[44] + mi := &file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3721,7 +3906,7 @@ func (x *QdrantRelease) ProtoReflect() protoreflect.Message { // Deprecated: Use QdrantRelease.ProtoReflect.Descriptor instead. func (*QdrantRelease) Descriptor() ([]byte, []int) { - return file_qdrant_cloud_cluster_v1_cluster_proto_rawDescGZIP(), []int{44} + return file_qdrant_cloud_cluster_v1_cluster_proto_rawDescGZIP(), []int{45} } func (x *QdrantRelease) GetVersion() string { @@ -3783,7 +3968,7 @@ type CreateClusterFromBackupRequest struct { func (x *CreateClusterFromBackupRequest) Reset() { *x = CreateClusterFromBackupRequest{} - mi := &file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes[45] + mi := &file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3795,7 +3980,7 @@ func (x *CreateClusterFromBackupRequest) String() string { func (*CreateClusterFromBackupRequest) ProtoMessage() {} func (x *CreateClusterFromBackupRequest) ProtoReflect() protoreflect.Message { - mi := &file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes[45] + mi := &file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3808,7 +3993,7 @@ func (x *CreateClusterFromBackupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateClusterFromBackupRequest.ProtoReflect.Descriptor instead. func (*CreateClusterFromBackupRequest) Descriptor() ([]byte, []int) { - return file_qdrant_cloud_cluster_v1_cluster_proto_rawDescGZIP(), []int{45} + return file_qdrant_cloud_cluster_v1_cluster_proto_rawDescGZIP(), []int{46} } func (x *CreateClusterFromBackupRequest) GetAccountId() string { @@ -3843,7 +4028,7 @@ type CreateClusterFromBackupResponse struct { func (x *CreateClusterFromBackupResponse) Reset() { *x = CreateClusterFromBackupResponse{} - mi := &file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes[46] + mi := &file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3855,7 +4040,7 @@ func (x *CreateClusterFromBackupResponse) String() string { func (*CreateClusterFromBackupResponse) ProtoMessage() {} func (x *CreateClusterFromBackupResponse) ProtoReflect() protoreflect.Message { - mi := &file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes[46] + mi := &file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3868,7 +4053,7 @@ func (x *CreateClusterFromBackupResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateClusterFromBackupResponse.ProtoReflect.Descriptor instead. func (*CreateClusterFromBackupResponse) Descriptor() ([]byte, []int) { - return file_qdrant_cloud_cluster_v1_cluster_proto_rawDescGZIP(), []int{46} + return file_qdrant_cloud_cluster_v1_cluster_proto_rawDescGZIP(), []int{47} } func (x *CreateClusterFromBackupResponse) GetCluster() *Cluster { @@ -4139,7 +4324,7 @@ const file_qdrant_cloud_cluster_v1_cluster_proto_rawDesc = "" + "\x17_database_storage_classB\x19\n" + "\x17_snapshot_storage_classB\x18\n" + "\x16_volume_snapshot_classB\x1a\n" + - "\x18_volume_attributes_class\"\xd3\x04\n" + + "\x18_volume_attributes_class\"\xaf\x05\n" + "\fClusterState\x12!\n" + "\aversion\x18\x01 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\aversion\x12\x19\n" + "\bnodes_up\x18\x02 \x01(\rR\anodesUp\x12=\n" + @@ -4147,11 +4332,12 @@ const file_qdrant_cloud_cluster_v1_cluster_proto_rawDesc = "" + "\x05phase\x18\x04 \x01(\x0e2%.qdrant.cloud.cluster.v1.ClusterPhaseB\b\xbaH\x05\x82\x01\x02\x10\x01R\x05phase\x12\x16\n" + "\x06reason\x18\x05 \x01(\tR\x06reason\x12L\n" + "\bendpoint\x18\x06 \x01(\v2(.qdrant.cloud.cluster.v1.ClusterEndpointB\x06\xbaH\x03\xc8\x01\x01R\bendpoint\x12Z\n" + - "\tresources\x18\a \x01(\v24.qdrant.cloud.cluster.v1.ClusterNodeResourcesSummaryB\x06\xbaH\x03\xc8\x01\x01R\tresources\x12b\n" + - "\x10scalability_info\x18\b \x01(\v2/.qdrant.cloud.cluster.v1.ClusterScalabilityInfoB\x06\xbaH\x03\xc8\x01\x01R\x0fscalabilityInfo\x12>\n" + + "\tresources\x18\a \x01(\v24.qdrant.cloud.cluster.v1.ClusterNodeResourcesSummaryB\x06\xbaH\x03\xc8\x01\x01R\tresources\x12d\n" + + "\x10scalability_info\x18\b \x01(\v2/.qdrant.cloud.cluster.v1.ClusterScalabilityInfoB\b\xbaH\x03\xc8\x01\x01\x18\x01R\x0fscalabilityInfo\x12>\n" + "\x05nodes\x18\t \x03(\v2(.qdrant.cloud.cluster.v1.ClusterNodeInfoR\x05nodes\x12\x19\n" + "\bjwt_rbac\x18\n" + - " \x01(\bR\ajwtRbac\"\xdc\x02\n" + + " \x01(\bR\ajwtRbac\x12X\n" + + "\fcapabilities\x18\v \x01(\v2,.qdrant.cloud.cluster.v1.ClusterCapabilitiesB\x06\xbaH\x03\xc8\x01\x01R\fcapabilities\"\xdc\x02\n" + "\x0fClusterNodeInfo\x12\x1b\n" + "\x04name\x18\x01 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\x04name\x129\n" + "\n" + @@ -4187,7 +4373,11 @@ const file_qdrant_cloud_cluster_v1_cluster_proto_rawDesc = "" + "\x06status\x18\x01 \x01(\x0e21.qdrant.cloud.cluster.v1.ClusterScalabilityStatusB\n" + "\xbaH\a\x82\x01\x04\x10\x01 \x00R\x06status\x12$\n" + "\x06reason\x18\x02 \x01(\tB\a\xbaH\x04r\x02\x10\x01H\x00R\x06reason\x88\x01\x01B\t\n" + - "\a_reason\"\x93\x02\n" + + "\a_reason\"\xa9\x02\n" + + "\x13ClusterCapabilities\x12a\n" + + "\x0edisk_expansion\x18\x01 \x01(\x0e2:.qdrant.cloud.cluster.v1.ClusterDiskExpansionSupportStatusR\rdiskExpansion\x12K\n" + + "\x06backup\x18\x02 \x01(\x0e23.qdrant.cloud.cluster.v1.ClusterBackupSupportStatusR\x06backup\x12b\n" + + "\x10scalability_info\x18\x03 \x01(\v2/.qdrant.cloud.cluster.v1.ClusterScalabilityInfoB\x06\xbaH\x03\xc8\x01\x01R\x0fscalabilityInfo\"\x93\x02\n" + "\rQdrantRelease\x12!\n" + "\aversion\x18\x01 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\aversion\x12\x18\n" + "\adefault\x18\x02 \x01(\bR\adefault\x129\n" + @@ -4276,7 +4466,15 @@ const file_qdrant_cloud_cluster_v1_cluster_proto_rawDesc = "" + "\x18ClusterScalabilityStatus\x12*\n" + "&CLUSTER_SCALABILITY_STATUS_UNSPECIFIED\x10\x00\x12+\n" + "'CLUSTER_SCALABILITY_STATUS_NOT_SCALABLE\x10\x01\x12'\n" + - "#CLUSTER_SCALABILITY_STATUS_SCALABLE\x10\x022\xcb\x1e\n" + + "#CLUSTER_SCALABILITY_STATUS_SCALABLE\x10\x02*\xc8\x01\n" + + "!ClusterDiskExpansionSupportStatus\x125\n" + + "1CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_UNSPECIFIED\x10\x00\x123\n" + + "/CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_SUPPORTED\x10\x01\x127\n" + + "3CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_NOT_SUPPORTED\x10\x02*\xa9\x01\n" + + "\x1aClusterBackupSupportStatus\x12-\n" + + ")CLUSTER_BACKUP_SUPPORT_STATUS_UNSPECIFIED\x10\x00\x12+\n" + + "'CLUSTER_BACKUP_SUPPORT_STATUS_SUPPORTED\x10\x01\x12/\n" + + "+CLUSTER_BACKUP_SUPPORT_STATUS_NOT_SUPPORTED\x10\x022\xcb\x1e\n" + "\x0eClusterService\x12\xb4\x01\n" + "\fListClusters\x12,.qdrant.cloud.cluster.v1.ListClustersRequest\x1a-.qdrant.cloud.cluster.v1.ListClustersResponse\"G\x8a\xb5\x18\rread:clusters\x82\xd3\xe4\x93\x020\x12./api/cluster/v1/accounts/{account_id}/clusters\x12\xd7\x01\n" + "\n" + @@ -4335,8 +4533,8 @@ func file_qdrant_cloud_cluster_v1_cluster_proto_rawDescGZIP() []byte { return file_qdrant_cloud_cluster_v1_cluster_proto_rawDescData } -var file_qdrant_cloud_cluster_v1_cluster_proto_enumTypes = make([]protoimpl.EnumInfo, 11) -var file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes = make([]protoimpl.MessageInfo, 47) +var file_qdrant_cloud_cluster_v1_cluster_proto_enumTypes = make([]protoimpl.EnumInfo, 13) +var file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes = make([]protoimpl.MessageInfo, 48) var file_qdrant_cloud_cluster_v1_cluster_proto_goTypes = []any{ (ClusterServiceType)(0), // 0: qdrant.cloud.cluster.v1.ClusterServiceType (ClusterConfigurationGpuType)(0), // 1: qdrant.cloud.cluster.v1.ClusterConfigurationGpuType @@ -4349,151 +4547,158 @@ var file_qdrant_cloud_cluster_v1_cluster_proto_goTypes = []any{ (ClusterPhase)(0), // 8: qdrant.cloud.cluster.v1.ClusterPhase (ClusterNodeState)(0), // 9: qdrant.cloud.cluster.v1.ClusterNodeState (ClusterScalabilityStatus)(0), // 10: qdrant.cloud.cluster.v1.ClusterScalabilityStatus - (*ListClustersRequest)(nil), // 11: qdrant.cloud.cluster.v1.ListClustersRequest - (*ListClustersResponse)(nil), // 12: qdrant.cloud.cluster.v1.ListClustersResponse - (*GetClusterRequest)(nil), // 13: qdrant.cloud.cluster.v1.GetClusterRequest - (*GetClusterResponse)(nil), // 14: qdrant.cloud.cluster.v1.GetClusterResponse - (*CreateClusterRequest)(nil), // 15: qdrant.cloud.cluster.v1.CreateClusterRequest - (*CreateClusterResponse)(nil), // 16: qdrant.cloud.cluster.v1.CreateClusterResponse - (*UpdateClusterRequest)(nil), // 17: qdrant.cloud.cluster.v1.UpdateClusterRequest - (*UpdateClusterResponse)(nil), // 18: qdrant.cloud.cluster.v1.UpdateClusterResponse - (*DeleteClusterRequest)(nil), // 19: qdrant.cloud.cluster.v1.DeleteClusterRequest - (*DeleteClusterResponse)(nil), // 20: qdrant.cloud.cluster.v1.DeleteClusterResponse - (*RestartClusterRequest)(nil), // 21: qdrant.cloud.cluster.v1.RestartClusterRequest - (*RestartClusterResponse)(nil), // 22: qdrant.cloud.cluster.v1.RestartClusterResponse - (*SuspendClusterRequest)(nil), // 23: qdrant.cloud.cluster.v1.SuspendClusterRequest - (*SuspendClusterResponse)(nil), // 24: qdrant.cloud.cluster.v1.SuspendClusterResponse - (*UnsuspendClusterRequest)(nil), // 25: qdrant.cloud.cluster.v1.UnsuspendClusterRequest - (*UnsuspendClusterResponse)(nil), // 26: qdrant.cloud.cluster.v1.UnsuspendClusterResponse - (*EnableClusterJwtRbacRequest)(nil), // 27: qdrant.cloud.cluster.v1.EnableClusterJwtRbacRequest - (*EnableClusterJwtRbacResponse)(nil), // 28: qdrant.cloud.cluster.v1.EnableClusterJwtRbacResponse - (*SuggestClusterNameRequest)(nil), // 29: qdrant.cloud.cluster.v1.SuggestClusterNameRequest - (*SuggestClusterNameResponse)(nil), // 30: qdrant.cloud.cluster.v1.SuggestClusterNameResponse - (*ListQdrantReleasesRequest)(nil), // 31: qdrant.cloud.cluster.v1.ListQdrantReleasesRequest - (*ListQdrantReleasesResponse)(nil), // 32: qdrant.cloud.cluster.v1.ListQdrantReleasesResponse - (*GetQdrantReleaseRequest)(nil), // 33: qdrant.cloud.cluster.v1.GetQdrantReleaseRequest - (*GetQdrantReleaseResponse)(nil), // 34: qdrant.cloud.cluster.v1.GetQdrantReleaseResponse - (*Cluster)(nil), // 35: qdrant.cloud.cluster.v1.Cluster - (*ClusterConfiguration)(nil), // 36: qdrant.cloud.cluster.v1.ClusterConfiguration - (*DatabaseConfiguration)(nil), // 37: qdrant.cloud.cluster.v1.DatabaseConfiguration - (*DatabaseConfigurationCollection)(nil), // 38: qdrant.cloud.cluster.v1.DatabaseConfigurationCollection - (*DatabaseConfigurationCollectionVectors)(nil), // 39: qdrant.cloud.cluster.v1.DatabaseConfigurationCollectionVectors - (*DatabaseConfigurationStorage)(nil), // 40: qdrant.cloud.cluster.v1.DatabaseConfigurationStorage - (*DatabaseConfigurationStoragePerformance)(nil), // 41: qdrant.cloud.cluster.v1.DatabaseConfigurationStoragePerformance - (*DatabaseConfigurationService)(nil), // 42: qdrant.cloud.cluster.v1.DatabaseConfigurationService - (*DatabaseConfigurationTls)(nil), // 43: qdrant.cloud.cluster.v1.DatabaseConfigurationTls - (*DatabaseConfigurationInference)(nil), // 44: qdrant.cloud.cluster.v1.DatabaseConfigurationInference - (*AdditionalResources)(nil), // 45: qdrant.cloud.cluster.v1.AdditionalResources - (*DatabaseConfigurationAuditLogging)(nil), // 46: qdrant.cloud.cluster.v1.DatabaseConfigurationAuditLogging - (*Toleration)(nil), // 47: qdrant.cloud.cluster.v1.Toleration - (*ClusterStorageConfiguration)(nil), // 48: qdrant.cloud.cluster.v1.ClusterStorageConfiguration - (*ClusterState)(nil), // 49: qdrant.cloud.cluster.v1.ClusterState - (*ClusterNodeInfo)(nil), // 50: qdrant.cloud.cluster.v1.ClusterNodeInfo - (*ClusterEndpoint)(nil), // 51: qdrant.cloud.cluster.v1.ClusterEndpoint - (*ClusterNodeResourcesSummary)(nil), // 52: qdrant.cloud.cluster.v1.ClusterNodeResourcesSummary - (*ClusterNodeResources)(nil), // 53: qdrant.cloud.cluster.v1.ClusterNodeResources - (*ClusterScalabilityInfo)(nil), // 54: qdrant.cloud.cluster.v1.ClusterScalabilityInfo - (*QdrantRelease)(nil), // 55: qdrant.cloud.cluster.v1.QdrantRelease - (*CreateClusterFromBackupRequest)(nil), // 56: qdrant.cloud.cluster.v1.CreateClusterFromBackupRequest - (*CreateClusterFromBackupResponse)(nil), // 57: qdrant.cloud.cluster.v1.CreateClusterFromBackupResponse - (*timestamppb.Timestamp)(nil), // 58: google.protobuf.Timestamp - (*v1.KeyValue)(nil), // 59: qdrant.cloud.common.v1.KeyValue - (*v1.TopologySpreadConstraint)(nil), // 60: qdrant.cloud.common.v1.TopologySpreadConstraint - (*v1.SecretKeyRef)(nil), // 61: qdrant.cloud.common.v1.SecretKeyRef - (v1.StorageTierType)(0), // 62: qdrant.cloud.common.v1.StorageTierType + (ClusterDiskExpansionSupportStatus)(0), // 11: qdrant.cloud.cluster.v1.ClusterDiskExpansionSupportStatus + (ClusterBackupSupportStatus)(0), // 12: qdrant.cloud.cluster.v1.ClusterBackupSupportStatus + (*ListClustersRequest)(nil), // 13: qdrant.cloud.cluster.v1.ListClustersRequest + (*ListClustersResponse)(nil), // 14: qdrant.cloud.cluster.v1.ListClustersResponse + (*GetClusterRequest)(nil), // 15: qdrant.cloud.cluster.v1.GetClusterRequest + (*GetClusterResponse)(nil), // 16: qdrant.cloud.cluster.v1.GetClusterResponse + (*CreateClusterRequest)(nil), // 17: qdrant.cloud.cluster.v1.CreateClusterRequest + (*CreateClusterResponse)(nil), // 18: qdrant.cloud.cluster.v1.CreateClusterResponse + (*UpdateClusterRequest)(nil), // 19: qdrant.cloud.cluster.v1.UpdateClusterRequest + (*UpdateClusterResponse)(nil), // 20: qdrant.cloud.cluster.v1.UpdateClusterResponse + (*DeleteClusterRequest)(nil), // 21: qdrant.cloud.cluster.v1.DeleteClusterRequest + (*DeleteClusterResponse)(nil), // 22: qdrant.cloud.cluster.v1.DeleteClusterResponse + (*RestartClusterRequest)(nil), // 23: qdrant.cloud.cluster.v1.RestartClusterRequest + (*RestartClusterResponse)(nil), // 24: qdrant.cloud.cluster.v1.RestartClusterResponse + (*SuspendClusterRequest)(nil), // 25: qdrant.cloud.cluster.v1.SuspendClusterRequest + (*SuspendClusterResponse)(nil), // 26: qdrant.cloud.cluster.v1.SuspendClusterResponse + (*UnsuspendClusterRequest)(nil), // 27: qdrant.cloud.cluster.v1.UnsuspendClusterRequest + (*UnsuspendClusterResponse)(nil), // 28: qdrant.cloud.cluster.v1.UnsuspendClusterResponse + (*EnableClusterJwtRbacRequest)(nil), // 29: qdrant.cloud.cluster.v1.EnableClusterJwtRbacRequest + (*EnableClusterJwtRbacResponse)(nil), // 30: qdrant.cloud.cluster.v1.EnableClusterJwtRbacResponse + (*SuggestClusterNameRequest)(nil), // 31: qdrant.cloud.cluster.v1.SuggestClusterNameRequest + (*SuggestClusterNameResponse)(nil), // 32: qdrant.cloud.cluster.v1.SuggestClusterNameResponse + (*ListQdrantReleasesRequest)(nil), // 33: qdrant.cloud.cluster.v1.ListQdrantReleasesRequest + (*ListQdrantReleasesResponse)(nil), // 34: qdrant.cloud.cluster.v1.ListQdrantReleasesResponse + (*GetQdrantReleaseRequest)(nil), // 35: qdrant.cloud.cluster.v1.GetQdrantReleaseRequest + (*GetQdrantReleaseResponse)(nil), // 36: qdrant.cloud.cluster.v1.GetQdrantReleaseResponse + (*Cluster)(nil), // 37: qdrant.cloud.cluster.v1.Cluster + (*ClusterConfiguration)(nil), // 38: qdrant.cloud.cluster.v1.ClusterConfiguration + (*DatabaseConfiguration)(nil), // 39: qdrant.cloud.cluster.v1.DatabaseConfiguration + (*DatabaseConfigurationCollection)(nil), // 40: qdrant.cloud.cluster.v1.DatabaseConfigurationCollection + (*DatabaseConfigurationCollectionVectors)(nil), // 41: qdrant.cloud.cluster.v1.DatabaseConfigurationCollectionVectors + (*DatabaseConfigurationStorage)(nil), // 42: qdrant.cloud.cluster.v1.DatabaseConfigurationStorage + (*DatabaseConfigurationStoragePerformance)(nil), // 43: qdrant.cloud.cluster.v1.DatabaseConfigurationStoragePerformance + (*DatabaseConfigurationService)(nil), // 44: qdrant.cloud.cluster.v1.DatabaseConfigurationService + (*DatabaseConfigurationTls)(nil), // 45: qdrant.cloud.cluster.v1.DatabaseConfigurationTls + (*DatabaseConfigurationInference)(nil), // 46: qdrant.cloud.cluster.v1.DatabaseConfigurationInference + (*AdditionalResources)(nil), // 47: qdrant.cloud.cluster.v1.AdditionalResources + (*DatabaseConfigurationAuditLogging)(nil), // 48: qdrant.cloud.cluster.v1.DatabaseConfigurationAuditLogging + (*Toleration)(nil), // 49: qdrant.cloud.cluster.v1.Toleration + (*ClusterStorageConfiguration)(nil), // 50: qdrant.cloud.cluster.v1.ClusterStorageConfiguration + (*ClusterState)(nil), // 51: qdrant.cloud.cluster.v1.ClusterState + (*ClusterNodeInfo)(nil), // 52: qdrant.cloud.cluster.v1.ClusterNodeInfo + (*ClusterEndpoint)(nil), // 53: qdrant.cloud.cluster.v1.ClusterEndpoint + (*ClusterNodeResourcesSummary)(nil), // 54: qdrant.cloud.cluster.v1.ClusterNodeResourcesSummary + (*ClusterNodeResources)(nil), // 55: qdrant.cloud.cluster.v1.ClusterNodeResources + (*ClusterScalabilityInfo)(nil), // 56: qdrant.cloud.cluster.v1.ClusterScalabilityInfo + (*ClusterCapabilities)(nil), // 57: qdrant.cloud.cluster.v1.ClusterCapabilities + (*QdrantRelease)(nil), // 58: qdrant.cloud.cluster.v1.QdrantRelease + (*CreateClusterFromBackupRequest)(nil), // 59: qdrant.cloud.cluster.v1.CreateClusterFromBackupRequest + (*CreateClusterFromBackupResponse)(nil), // 60: qdrant.cloud.cluster.v1.CreateClusterFromBackupResponse + (*timestamppb.Timestamp)(nil), // 61: google.protobuf.Timestamp + (*v1.KeyValue)(nil), // 62: qdrant.cloud.common.v1.KeyValue + (*v1.TopologySpreadConstraint)(nil), // 63: qdrant.cloud.common.v1.TopologySpreadConstraint + (*v1.SecretKeyRef)(nil), // 64: qdrant.cloud.common.v1.SecretKeyRef + (v1.StorageTierType)(0), // 65: qdrant.cloud.common.v1.StorageTierType } var file_qdrant_cloud_cluster_v1_cluster_proto_depIdxs = []int32{ - 35, // 0: qdrant.cloud.cluster.v1.ListClustersResponse.items:type_name -> qdrant.cloud.cluster.v1.Cluster - 35, // 1: qdrant.cloud.cluster.v1.GetClusterResponse.cluster:type_name -> qdrant.cloud.cluster.v1.Cluster - 35, // 2: qdrant.cloud.cluster.v1.CreateClusterRequest.cluster:type_name -> qdrant.cloud.cluster.v1.Cluster - 35, // 3: qdrant.cloud.cluster.v1.CreateClusterResponse.cluster:type_name -> qdrant.cloud.cluster.v1.Cluster - 35, // 4: qdrant.cloud.cluster.v1.UpdateClusterRequest.cluster:type_name -> qdrant.cloud.cluster.v1.Cluster - 35, // 5: qdrant.cloud.cluster.v1.UpdateClusterResponse.cluster:type_name -> qdrant.cloud.cluster.v1.Cluster - 55, // 6: qdrant.cloud.cluster.v1.ListQdrantReleasesResponse.items:type_name -> qdrant.cloud.cluster.v1.QdrantRelease - 55, // 7: qdrant.cloud.cluster.v1.GetQdrantReleaseResponse.release:type_name -> qdrant.cloud.cluster.v1.QdrantRelease - 58, // 8: qdrant.cloud.cluster.v1.Cluster.created_at:type_name -> google.protobuf.Timestamp - 58, // 9: qdrant.cloud.cluster.v1.Cluster.deleted_at:type_name -> google.protobuf.Timestamp - 59, // 10: qdrant.cloud.cluster.v1.Cluster.labels:type_name -> qdrant.cloud.common.v1.KeyValue - 36, // 11: qdrant.cloud.cluster.v1.Cluster.configuration:type_name -> qdrant.cloud.cluster.v1.ClusterConfiguration - 49, // 12: qdrant.cloud.cluster.v1.Cluster.state:type_name -> qdrant.cloud.cluster.v1.ClusterState - 58, // 13: qdrant.cloud.cluster.v1.ClusterConfiguration.last_modified_at:type_name -> google.protobuf.Timestamp - 45, // 14: qdrant.cloud.cluster.v1.ClusterConfiguration.additional_resources:type_name -> qdrant.cloud.cluster.v1.AdditionalResources - 37, // 15: qdrant.cloud.cluster.v1.ClusterConfiguration.database_configuration:type_name -> qdrant.cloud.cluster.v1.DatabaseConfiguration - 59, // 16: qdrant.cloud.cluster.v1.ClusterConfiguration.node_selector:type_name -> qdrant.cloud.common.v1.KeyValue - 47, // 17: qdrant.cloud.cluster.v1.ClusterConfiguration.tolerations:type_name -> qdrant.cloud.cluster.v1.Toleration - 59, // 18: qdrant.cloud.cluster.v1.ClusterConfiguration.annotations:type_name -> qdrant.cloud.common.v1.KeyValue + 37, // 0: qdrant.cloud.cluster.v1.ListClustersResponse.items:type_name -> qdrant.cloud.cluster.v1.Cluster + 37, // 1: qdrant.cloud.cluster.v1.GetClusterResponse.cluster:type_name -> qdrant.cloud.cluster.v1.Cluster + 37, // 2: qdrant.cloud.cluster.v1.CreateClusterRequest.cluster:type_name -> qdrant.cloud.cluster.v1.Cluster + 37, // 3: qdrant.cloud.cluster.v1.CreateClusterResponse.cluster:type_name -> qdrant.cloud.cluster.v1.Cluster + 37, // 4: qdrant.cloud.cluster.v1.UpdateClusterRequest.cluster:type_name -> qdrant.cloud.cluster.v1.Cluster + 37, // 5: qdrant.cloud.cluster.v1.UpdateClusterResponse.cluster:type_name -> qdrant.cloud.cluster.v1.Cluster + 58, // 6: qdrant.cloud.cluster.v1.ListQdrantReleasesResponse.items:type_name -> qdrant.cloud.cluster.v1.QdrantRelease + 58, // 7: qdrant.cloud.cluster.v1.GetQdrantReleaseResponse.release:type_name -> qdrant.cloud.cluster.v1.QdrantRelease + 61, // 8: qdrant.cloud.cluster.v1.Cluster.created_at:type_name -> google.protobuf.Timestamp + 61, // 9: qdrant.cloud.cluster.v1.Cluster.deleted_at:type_name -> google.protobuf.Timestamp + 62, // 10: qdrant.cloud.cluster.v1.Cluster.labels:type_name -> qdrant.cloud.common.v1.KeyValue + 38, // 11: qdrant.cloud.cluster.v1.Cluster.configuration:type_name -> qdrant.cloud.cluster.v1.ClusterConfiguration + 51, // 12: qdrant.cloud.cluster.v1.Cluster.state:type_name -> qdrant.cloud.cluster.v1.ClusterState + 61, // 13: qdrant.cloud.cluster.v1.ClusterConfiguration.last_modified_at:type_name -> google.protobuf.Timestamp + 47, // 14: qdrant.cloud.cluster.v1.ClusterConfiguration.additional_resources:type_name -> qdrant.cloud.cluster.v1.AdditionalResources + 39, // 15: qdrant.cloud.cluster.v1.ClusterConfiguration.database_configuration:type_name -> qdrant.cloud.cluster.v1.DatabaseConfiguration + 62, // 16: qdrant.cloud.cluster.v1.ClusterConfiguration.node_selector:type_name -> qdrant.cloud.common.v1.KeyValue + 49, // 17: qdrant.cloud.cluster.v1.ClusterConfiguration.tolerations:type_name -> qdrant.cloud.cluster.v1.Toleration + 62, // 18: qdrant.cloud.cluster.v1.ClusterConfiguration.annotations:type_name -> qdrant.cloud.common.v1.KeyValue 0, // 19: qdrant.cloud.cluster.v1.ClusterConfiguration.service_type:type_name -> qdrant.cloud.cluster.v1.ClusterServiceType - 59, // 20: qdrant.cloud.cluster.v1.ClusterConfiguration.service_annotations:type_name -> qdrant.cloud.common.v1.KeyValue - 59, // 21: qdrant.cloud.cluster.v1.ClusterConfiguration.pod_labels:type_name -> qdrant.cloud.common.v1.KeyValue + 62, // 20: qdrant.cloud.cluster.v1.ClusterConfiguration.service_annotations:type_name -> qdrant.cloud.common.v1.KeyValue + 62, // 21: qdrant.cloud.cluster.v1.ClusterConfiguration.pod_labels:type_name -> qdrant.cloud.common.v1.KeyValue 1, // 22: qdrant.cloud.cluster.v1.ClusterConfiguration.gpu_type:type_name -> qdrant.cloud.cluster.v1.ClusterConfigurationGpuType 2, // 23: qdrant.cloud.cluster.v1.ClusterConfiguration.restart_policy:type_name -> qdrant.cloud.cluster.v1.ClusterConfigurationRestartPolicy 3, // 24: qdrant.cloud.cluster.v1.ClusterConfiguration.rebalance_strategy:type_name -> qdrant.cloud.cluster.v1.ClusterConfigurationRebalanceStrategy - 60, // 25: qdrant.cloud.cluster.v1.ClusterConfiguration.topology_spread_constraints:type_name -> qdrant.cloud.common.v1.TopologySpreadConstraint - 48, // 26: qdrant.cloud.cluster.v1.ClusterConfiguration.cluster_storage_configuration:type_name -> qdrant.cloud.cluster.v1.ClusterStorageConfiguration - 38, // 27: qdrant.cloud.cluster.v1.DatabaseConfiguration.collection:type_name -> qdrant.cloud.cluster.v1.DatabaseConfigurationCollection - 40, // 28: qdrant.cloud.cluster.v1.DatabaseConfiguration.storage:type_name -> qdrant.cloud.cluster.v1.DatabaseConfigurationStorage - 42, // 29: qdrant.cloud.cluster.v1.DatabaseConfiguration.service:type_name -> qdrant.cloud.cluster.v1.DatabaseConfigurationService + 63, // 25: qdrant.cloud.cluster.v1.ClusterConfiguration.topology_spread_constraints:type_name -> qdrant.cloud.common.v1.TopologySpreadConstraint + 50, // 26: qdrant.cloud.cluster.v1.ClusterConfiguration.cluster_storage_configuration:type_name -> qdrant.cloud.cluster.v1.ClusterStorageConfiguration + 40, // 27: qdrant.cloud.cluster.v1.DatabaseConfiguration.collection:type_name -> qdrant.cloud.cluster.v1.DatabaseConfigurationCollection + 42, // 28: qdrant.cloud.cluster.v1.DatabaseConfiguration.storage:type_name -> qdrant.cloud.cluster.v1.DatabaseConfigurationStorage + 44, // 29: qdrant.cloud.cluster.v1.DatabaseConfiguration.service:type_name -> qdrant.cloud.cluster.v1.DatabaseConfigurationService 4, // 30: qdrant.cloud.cluster.v1.DatabaseConfiguration.log_level:type_name -> qdrant.cloud.cluster.v1.DatabaseConfigurationLogLevel - 43, // 31: qdrant.cloud.cluster.v1.DatabaseConfiguration.tls:type_name -> qdrant.cloud.cluster.v1.DatabaseConfigurationTls - 44, // 32: qdrant.cloud.cluster.v1.DatabaseConfiguration.inference:type_name -> qdrant.cloud.cluster.v1.DatabaseConfigurationInference - 46, // 33: qdrant.cloud.cluster.v1.DatabaseConfiguration.audit_logging:type_name -> qdrant.cloud.cluster.v1.DatabaseConfigurationAuditLogging - 39, // 34: qdrant.cloud.cluster.v1.DatabaseConfigurationCollection.vectors:type_name -> qdrant.cloud.cluster.v1.DatabaseConfigurationCollectionVectors - 41, // 35: qdrant.cloud.cluster.v1.DatabaseConfigurationStorage.performance:type_name -> qdrant.cloud.cluster.v1.DatabaseConfigurationStoragePerformance - 61, // 36: qdrant.cloud.cluster.v1.DatabaseConfigurationService.api_key:type_name -> qdrant.cloud.common.v1.SecretKeyRef - 61, // 37: qdrant.cloud.cluster.v1.DatabaseConfigurationService.read_only_api_key:type_name -> qdrant.cloud.common.v1.SecretKeyRef - 61, // 38: qdrant.cloud.cluster.v1.DatabaseConfigurationTls.cert:type_name -> qdrant.cloud.common.v1.SecretKeyRef - 61, // 39: qdrant.cloud.cluster.v1.DatabaseConfigurationTls.key:type_name -> qdrant.cloud.common.v1.SecretKeyRef + 45, // 31: qdrant.cloud.cluster.v1.DatabaseConfiguration.tls:type_name -> qdrant.cloud.cluster.v1.DatabaseConfigurationTls + 46, // 32: qdrant.cloud.cluster.v1.DatabaseConfiguration.inference:type_name -> qdrant.cloud.cluster.v1.DatabaseConfigurationInference + 48, // 33: qdrant.cloud.cluster.v1.DatabaseConfiguration.audit_logging:type_name -> qdrant.cloud.cluster.v1.DatabaseConfigurationAuditLogging + 41, // 34: qdrant.cloud.cluster.v1.DatabaseConfigurationCollection.vectors:type_name -> qdrant.cloud.cluster.v1.DatabaseConfigurationCollectionVectors + 43, // 35: qdrant.cloud.cluster.v1.DatabaseConfigurationStorage.performance:type_name -> qdrant.cloud.cluster.v1.DatabaseConfigurationStoragePerformance + 64, // 36: qdrant.cloud.cluster.v1.DatabaseConfigurationService.api_key:type_name -> qdrant.cloud.common.v1.SecretKeyRef + 64, // 37: qdrant.cloud.cluster.v1.DatabaseConfigurationService.read_only_api_key:type_name -> qdrant.cloud.common.v1.SecretKeyRef + 64, // 38: qdrant.cloud.cluster.v1.DatabaseConfigurationTls.cert:type_name -> qdrant.cloud.common.v1.SecretKeyRef + 64, // 39: qdrant.cloud.cluster.v1.DatabaseConfigurationTls.key:type_name -> qdrant.cloud.common.v1.SecretKeyRef 5, // 40: qdrant.cloud.cluster.v1.DatabaseConfigurationAuditLogging.rotation:type_name -> qdrant.cloud.cluster.v1.AuditLogRotation 6, // 41: qdrant.cloud.cluster.v1.Toleration.operator:type_name -> qdrant.cloud.cluster.v1.TolerationOperator 7, // 42: qdrant.cloud.cluster.v1.Toleration.effect:type_name -> qdrant.cloud.cluster.v1.TolerationEffect - 62, // 43: qdrant.cloud.cluster.v1.ClusterStorageConfiguration.storage_tier_type:type_name -> qdrant.cloud.common.v1.StorageTierType - 58, // 44: qdrant.cloud.cluster.v1.ClusterState.restarted_at:type_name -> google.protobuf.Timestamp + 65, // 43: qdrant.cloud.cluster.v1.ClusterStorageConfiguration.storage_tier_type:type_name -> qdrant.cloud.common.v1.StorageTierType + 61, // 44: qdrant.cloud.cluster.v1.ClusterState.restarted_at:type_name -> google.protobuf.Timestamp 8, // 45: qdrant.cloud.cluster.v1.ClusterState.phase:type_name -> qdrant.cloud.cluster.v1.ClusterPhase - 51, // 46: qdrant.cloud.cluster.v1.ClusterState.endpoint:type_name -> qdrant.cloud.cluster.v1.ClusterEndpoint - 52, // 47: qdrant.cloud.cluster.v1.ClusterState.resources:type_name -> qdrant.cloud.cluster.v1.ClusterNodeResourcesSummary - 54, // 48: qdrant.cloud.cluster.v1.ClusterState.scalability_info:type_name -> qdrant.cloud.cluster.v1.ClusterScalabilityInfo - 50, // 49: qdrant.cloud.cluster.v1.ClusterState.nodes:type_name -> qdrant.cloud.cluster.v1.ClusterNodeInfo - 58, // 50: qdrant.cloud.cluster.v1.ClusterNodeInfo.started_at:type_name -> google.protobuf.Timestamp - 51, // 51: qdrant.cloud.cluster.v1.ClusterNodeInfo.endpoint:type_name -> qdrant.cloud.cluster.v1.ClusterEndpoint - 9, // 52: qdrant.cloud.cluster.v1.ClusterNodeInfo.state:type_name -> qdrant.cloud.cluster.v1.ClusterNodeState - 53, // 53: qdrant.cloud.cluster.v1.ClusterNodeResourcesSummary.disk:type_name -> qdrant.cloud.cluster.v1.ClusterNodeResources - 53, // 54: qdrant.cloud.cluster.v1.ClusterNodeResourcesSummary.ram:type_name -> qdrant.cloud.cluster.v1.ClusterNodeResources - 53, // 55: qdrant.cloud.cluster.v1.ClusterNodeResourcesSummary.cpu:type_name -> qdrant.cloud.cluster.v1.ClusterNodeResources - 53, // 56: qdrant.cloud.cluster.v1.ClusterNodeResourcesSummary.gpu:type_name -> qdrant.cloud.cluster.v1.ClusterNodeResources - 53, // 57: qdrant.cloud.cluster.v1.ClusterNodeResourcesSummary.gpu_ram:type_name -> qdrant.cloud.cluster.v1.ClusterNodeResources - 10, // 58: qdrant.cloud.cluster.v1.ClusterScalabilityInfo.status:type_name -> qdrant.cloud.cluster.v1.ClusterScalabilityStatus - 35, // 59: qdrant.cloud.cluster.v1.CreateClusterFromBackupResponse.cluster:type_name -> qdrant.cloud.cluster.v1.Cluster - 11, // 60: qdrant.cloud.cluster.v1.ClusterService.ListClusters:input_type -> qdrant.cloud.cluster.v1.ListClustersRequest - 13, // 61: qdrant.cloud.cluster.v1.ClusterService.GetCluster:input_type -> qdrant.cloud.cluster.v1.GetClusterRequest - 15, // 62: qdrant.cloud.cluster.v1.ClusterService.CreateCluster:input_type -> qdrant.cloud.cluster.v1.CreateClusterRequest - 56, // 63: qdrant.cloud.cluster.v1.ClusterService.CreateClusterFromBackup:input_type -> qdrant.cloud.cluster.v1.CreateClusterFromBackupRequest - 17, // 64: qdrant.cloud.cluster.v1.ClusterService.UpdateCluster:input_type -> qdrant.cloud.cluster.v1.UpdateClusterRequest - 19, // 65: qdrant.cloud.cluster.v1.ClusterService.DeleteCluster:input_type -> qdrant.cloud.cluster.v1.DeleteClusterRequest - 21, // 66: qdrant.cloud.cluster.v1.ClusterService.RestartCluster:input_type -> qdrant.cloud.cluster.v1.RestartClusterRequest - 23, // 67: qdrant.cloud.cluster.v1.ClusterService.SuspendCluster:input_type -> qdrant.cloud.cluster.v1.SuspendClusterRequest - 25, // 68: qdrant.cloud.cluster.v1.ClusterService.UnsuspendCluster:input_type -> qdrant.cloud.cluster.v1.UnsuspendClusterRequest - 27, // 69: qdrant.cloud.cluster.v1.ClusterService.EnableClusterJwtRbac:input_type -> qdrant.cloud.cluster.v1.EnableClusterJwtRbacRequest - 29, // 70: qdrant.cloud.cluster.v1.ClusterService.SuggestClusterName:input_type -> qdrant.cloud.cluster.v1.SuggestClusterNameRequest - 31, // 71: qdrant.cloud.cluster.v1.ClusterService.ListQdrantReleases:input_type -> qdrant.cloud.cluster.v1.ListQdrantReleasesRequest - 33, // 72: qdrant.cloud.cluster.v1.ClusterService.GetQdrantRelease:input_type -> qdrant.cloud.cluster.v1.GetQdrantReleaseRequest - 12, // 73: qdrant.cloud.cluster.v1.ClusterService.ListClusters:output_type -> qdrant.cloud.cluster.v1.ListClustersResponse - 14, // 74: qdrant.cloud.cluster.v1.ClusterService.GetCluster:output_type -> qdrant.cloud.cluster.v1.GetClusterResponse - 16, // 75: qdrant.cloud.cluster.v1.ClusterService.CreateCluster:output_type -> qdrant.cloud.cluster.v1.CreateClusterResponse - 57, // 76: qdrant.cloud.cluster.v1.ClusterService.CreateClusterFromBackup:output_type -> qdrant.cloud.cluster.v1.CreateClusterFromBackupResponse - 18, // 77: qdrant.cloud.cluster.v1.ClusterService.UpdateCluster:output_type -> qdrant.cloud.cluster.v1.UpdateClusterResponse - 20, // 78: qdrant.cloud.cluster.v1.ClusterService.DeleteCluster:output_type -> qdrant.cloud.cluster.v1.DeleteClusterResponse - 22, // 79: qdrant.cloud.cluster.v1.ClusterService.RestartCluster:output_type -> qdrant.cloud.cluster.v1.RestartClusterResponse - 24, // 80: qdrant.cloud.cluster.v1.ClusterService.SuspendCluster:output_type -> qdrant.cloud.cluster.v1.SuspendClusterResponse - 26, // 81: qdrant.cloud.cluster.v1.ClusterService.UnsuspendCluster:output_type -> qdrant.cloud.cluster.v1.UnsuspendClusterResponse - 28, // 82: qdrant.cloud.cluster.v1.ClusterService.EnableClusterJwtRbac:output_type -> qdrant.cloud.cluster.v1.EnableClusterJwtRbacResponse - 30, // 83: qdrant.cloud.cluster.v1.ClusterService.SuggestClusterName:output_type -> qdrant.cloud.cluster.v1.SuggestClusterNameResponse - 32, // 84: qdrant.cloud.cluster.v1.ClusterService.ListQdrantReleases:output_type -> qdrant.cloud.cluster.v1.ListQdrantReleasesResponse - 34, // 85: qdrant.cloud.cluster.v1.ClusterService.GetQdrantRelease:output_type -> qdrant.cloud.cluster.v1.GetQdrantReleaseResponse - 73, // [73:86] is the sub-list for method output_type - 60, // [60:73] is the sub-list for method input_type - 60, // [60:60] is the sub-list for extension type_name - 60, // [60:60] is the sub-list for extension extendee - 0, // [0:60] is the sub-list for field type_name + 53, // 46: qdrant.cloud.cluster.v1.ClusterState.endpoint:type_name -> qdrant.cloud.cluster.v1.ClusterEndpoint + 54, // 47: qdrant.cloud.cluster.v1.ClusterState.resources:type_name -> qdrant.cloud.cluster.v1.ClusterNodeResourcesSummary + 56, // 48: qdrant.cloud.cluster.v1.ClusterState.scalability_info:type_name -> qdrant.cloud.cluster.v1.ClusterScalabilityInfo + 52, // 49: qdrant.cloud.cluster.v1.ClusterState.nodes:type_name -> qdrant.cloud.cluster.v1.ClusterNodeInfo + 57, // 50: qdrant.cloud.cluster.v1.ClusterState.capabilities:type_name -> qdrant.cloud.cluster.v1.ClusterCapabilities + 61, // 51: qdrant.cloud.cluster.v1.ClusterNodeInfo.started_at:type_name -> google.protobuf.Timestamp + 53, // 52: qdrant.cloud.cluster.v1.ClusterNodeInfo.endpoint:type_name -> qdrant.cloud.cluster.v1.ClusterEndpoint + 9, // 53: qdrant.cloud.cluster.v1.ClusterNodeInfo.state:type_name -> qdrant.cloud.cluster.v1.ClusterNodeState + 55, // 54: qdrant.cloud.cluster.v1.ClusterNodeResourcesSummary.disk:type_name -> qdrant.cloud.cluster.v1.ClusterNodeResources + 55, // 55: qdrant.cloud.cluster.v1.ClusterNodeResourcesSummary.ram:type_name -> qdrant.cloud.cluster.v1.ClusterNodeResources + 55, // 56: qdrant.cloud.cluster.v1.ClusterNodeResourcesSummary.cpu:type_name -> qdrant.cloud.cluster.v1.ClusterNodeResources + 55, // 57: qdrant.cloud.cluster.v1.ClusterNodeResourcesSummary.gpu:type_name -> qdrant.cloud.cluster.v1.ClusterNodeResources + 55, // 58: qdrant.cloud.cluster.v1.ClusterNodeResourcesSummary.gpu_ram:type_name -> qdrant.cloud.cluster.v1.ClusterNodeResources + 10, // 59: qdrant.cloud.cluster.v1.ClusterScalabilityInfo.status:type_name -> qdrant.cloud.cluster.v1.ClusterScalabilityStatus + 11, // 60: qdrant.cloud.cluster.v1.ClusterCapabilities.disk_expansion:type_name -> qdrant.cloud.cluster.v1.ClusterDiskExpansionSupportStatus + 12, // 61: qdrant.cloud.cluster.v1.ClusterCapabilities.backup:type_name -> qdrant.cloud.cluster.v1.ClusterBackupSupportStatus + 56, // 62: qdrant.cloud.cluster.v1.ClusterCapabilities.scalability_info:type_name -> qdrant.cloud.cluster.v1.ClusterScalabilityInfo + 37, // 63: qdrant.cloud.cluster.v1.CreateClusterFromBackupResponse.cluster:type_name -> qdrant.cloud.cluster.v1.Cluster + 13, // 64: qdrant.cloud.cluster.v1.ClusterService.ListClusters:input_type -> qdrant.cloud.cluster.v1.ListClustersRequest + 15, // 65: qdrant.cloud.cluster.v1.ClusterService.GetCluster:input_type -> qdrant.cloud.cluster.v1.GetClusterRequest + 17, // 66: qdrant.cloud.cluster.v1.ClusterService.CreateCluster:input_type -> qdrant.cloud.cluster.v1.CreateClusterRequest + 59, // 67: qdrant.cloud.cluster.v1.ClusterService.CreateClusterFromBackup:input_type -> qdrant.cloud.cluster.v1.CreateClusterFromBackupRequest + 19, // 68: qdrant.cloud.cluster.v1.ClusterService.UpdateCluster:input_type -> qdrant.cloud.cluster.v1.UpdateClusterRequest + 21, // 69: qdrant.cloud.cluster.v1.ClusterService.DeleteCluster:input_type -> qdrant.cloud.cluster.v1.DeleteClusterRequest + 23, // 70: qdrant.cloud.cluster.v1.ClusterService.RestartCluster:input_type -> qdrant.cloud.cluster.v1.RestartClusterRequest + 25, // 71: qdrant.cloud.cluster.v1.ClusterService.SuspendCluster:input_type -> qdrant.cloud.cluster.v1.SuspendClusterRequest + 27, // 72: qdrant.cloud.cluster.v1.ClusterService.UnsuspendCluster:input_type -> qdrant.cloud.cluster.v1.UnsuspendClusterRequest + 29, // 73: qdrant.cloud.cluster.v1.ClusterService.EnableClusterJwtRbac:input_type -> qdrant.cloud.cluster.v1.EnableClusterJwtRbacRequest + 31, // 74: qdrant.cloud.cluster.v1.ClusterService.SuggestClusterName:input_type -> qdrant.cloud.cluster.v1.SuggestClusterNameRequest + 33, // 75: qdrant.cloud.cluster.v1.ClusterService.ListQdrantReleases:input_type -> qdrant.cloud.cluster.v1.ListQdrantReleasesRequest + 35, // 76: qdrant.cloud.cluster.v1.ClusterService.GetQdrantRelease:input_type -> qdrant.cloud.cluster.v1.GetQdrantReleaseRequest + 14, // 77: qdrant.cloud.cluster.v1.ClusterService.ListClusters:output_type -> qdrant.cloud.cluster.v1.ListClustersResponse + 16, // 78: qdrant.cloud.cluster.v1.ClusterService.GetCluster:output_type -> qdrant.cloud.cluster.v1.GetClusterResponse + 18, // 79: qdrant.cloud.cluster.v1.ClusterService.CreateCluster:output_type -> qdrant.cloud.cluster.v1.CreateClusterResponse + 60, // 80: qdrant.cloud.cluster.v1.ClusterService.CreateClusterFromBackup:output_type -> qdrant.cloud.cluster.v1.CreateClusterFromBackupResponse + 20, // 81: qdrant.cloud.cluster.v1.ClusterService.UpdateCluster:output_type -> qdrant.cloud.cluster.v1.UpdateClusterResponse + 22, // 82: qdrant.cloud.cluster.v1.ClusterService.DeleteCluster:output_type -> qdrant.cloud.cluster.v1.DeleteClusterResponse + 24, // 83: qdrant.cloud.cluster.v1.ClusterService.RestartCluster:output_type -> qdrant.cloud.cluster.v1.RestartClusterResponse + 26, // 84: qdrant.cloud.cluster.v1.ClusterService.SuspendCluster:output_type -> qdrant.cloud.cluster.v1.SuspendClusterResponse + 28, // 85: qdrant.cloud.cluster.v1.ClusterService.UnsuspendCluster:output_type -> qdrant.cloud.cluster.v1.UnsuspendClusterResponse + 30, // 86: qdrant.cloud.cluster.v1.ClusterService.EnableClusterJwtRbac:output_type -> qdrant.cloud.cluster.v1.EnableClusterJwtRbacResponse + 32, // 87: qdrant.cloud.cluster.v1.ClusterService.SuggestClusterName:output_type -> qdrant.cloud.cluster.v1.SuggestClusterNameResponse + 34, // 88: qdrant.cloud.cluster.v1.ClusterService.ListQdrantReleases:output_type -> qdrant.cloud.cluster.v1.ListQdrantReleasesResponse + 36, // 89: qdrant.cloud.cluster.v1.ClusterService.GetQdrantRelease:output_type -> qdrant.cloud.cluster.v1.GetQdrantReleaseResponse + 77, // [77:90] is the sub-list for method output_type + 64, // [64:77] is the sub-list for method input_type + 64, // [64:64] is the sub-list for extension type_name + 64, // [64:64] is the sub-list for extension extendee + 0, // [0:64] is the sub-list for field type_name } func init() { file_qdrant_cloud_cluster_v1_cluster_proto_init() } @@ -4519,14 +4724,14 @@ func file_qdrant_cloud_cluster_v1_cluster_proto_init() { file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes[39].OneofWrappers = []any{} file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes[41].OneofWrappers = []any{} file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes[43].OneofWrappers = []any{} - file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes[44].OneofWrappers = []any{} + file_qdrant_cloud_cluster_v1_cluster_proto_msgTypes[45].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_qdrant_cloud_cluster_v1_cluster_proto_rawDesc), len(file_qdrant_cloud_cluster_v1_cluster_proto_rawDesc)), - NumEnums: 11, - NumMessages: 47, + NumEnums: 13, + NumMessages: 48, NumExtensions: 0, NumServices: 1, }, diff --git a/gen/openapiv2/qdrant/cloud/cluster/v1/cluster.swagger.json b/gen/openapiv2/qdrant/cloud/cluster/v1/cluster.swagger.json index fa115da0..3672fd80 100644 --- a/gen/openapiv2/qdrant/cloud/cluster/v1/cluster.swagger.json +++ b/gen/openapiv2/qdrant/cloud/cluster/v1/cluster.swagger.json @@ -778,6 +778,34 @@ }, "description": "A Cluster represents one cluster of a Qdrant database." }, + "v1ClusterBackupSupportStatus": { + "type": "string", + "enum": [ + "CLUSTER_BACKUP_SUPPORT_STATUS_UNSPECIFIED", + "CLUSTER_BACKUP_SUPPORT_STATUS_SUPPORTED", + "CLUSTER_BACKUP_SUPPORT_STATUS_NOT_SUPPORTED" + ], + "default": "CLUSTER_BACKUP_SUPPORT_STATUS_UNSPECIFIED", + "description": "ClusterBackupSupportStatus defines the backup support states of a cluster.\n\n - CLUSTER_BACKUP_SUPPORT_STATUS_UNSPECIFIED: Backup support is unspecified.\n - CLUSTER_BACKUP_SUPPORT_STATUS_SUPPORTED: Cluster supports backup.\n - CLUSTER_BACKUP_SUPPORT_STATUS_NOT_SUPPORTED: Cluster does not support backup." + }, + "v1ClusterCapabilities": { + "type": "object", + "properties": { + "diskExpansion": { + "$ref": "#/definitions/v1ClusterDiskExpansionSupportStatus", + "description": "Whether the StorageClass used by the cluster supports disk expansion or not.\nDisk scaling will be enabled or disabled based on this for hybrid cloud clusters." + }, + "backup": { + "$ref": "#/definitions/v1ClusterBackupSupportStatus", + "description": "Whether it is possible to take a backup for the cluster or not.\nBackup tab will be shown or hidden based on this for hybrid cloud clusters." + }, + "scalabilityInfo": { + "$ref": "#/definitions/v1ClusterScalabilityInfo", + "description": "Whether the cluster can be scaled up or down." + } + }, + "description": "ClusterCapabilities specifies whether some actions are supported by the cluster or not." + }, "v1ClusterConfiguration": { "type": "object", "properties": { @@ -927,6 +955,16 @@ "default": "CLUSTER_CONFIGURATION_RESTART_POLICY_UNSPECIFIED", "description": "ClusterConfigurationRestartPolicy defines restart strategies for the cluster's database.\n\n - CLUSTER_CONFIGURATION_RESTART_POLICY_UNSPECIFIED: Restart policy is unspecified.\n - CLUSTER_CONFIGURATION_RESTART_POLICY_ROLLING: Rolling restart policy (one by one).\n - CLUSTER_CONFIGURATION_RESTART_POLICY_PARALLEL: Parallel restart policy (restart all at once).\n - CLUSTER_CONFIGURATION_RESTART_POLICY_AUTOMATIC: Automatic restart policy." }, + "v1ClusterDiskExpansionSupportStatus": { + "type": "string", + "enum": [ + "CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_UNSPECIFIED", + "CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_SUPPORTED", + "CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_NOT_SUPPORTED" + ], + "default": "CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_UNSPECIFIED", + "description": "ClusterDiskExpansionSupportStatus defines the disk expansion support states of a cluster.\n\n - CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_UNSPECIFIED: Disk expansion support is unspecified.\n - CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_SUPPORTED: Cluster supports disk expansion.\n - CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_NOT_SUPPORTED: Cluster does not support disk expansion." + }, "v1ClusterEndpoint": { "type": "object", "properties": { @@ -1145,7 +1183,7 @@ }, "scalabilityInfo": { "$ref": "#/definitions/v1ClusterScalabilityInfo", - "description": "Whether the cluster can be scaled up or down." + "title": "Whether the cluster can be scaled up or down.\nDeprecated: Use capabilities.scalability_info instead" }, "nodes": { "type": "array", @@ -1158,6 +1196,10 @@ "jwtRbac": { "type": "boolean", "description": "Whether or not JWT Role Based Access Control (RBAC) is enabled.\nOn hybrid-cloud this is inferred from the fact a database secret is provided.\nOn managed-cloud this depends on the version of the cluster and whether or not this feature is enabled after an upgrade.\n When this setting is false (and version 1.9+ is used) you can use EnableClusterJwtRbac to update.\nIf enabled, you can generate JWT tokens with fine-grained rules for access control." + }, + "capabilities": { + "$ref": "#/definitions/v1ClusterCapabilities", + "description": "Specifies whether some operations are supported by cluster or not." } }, "description": "ClusterState represents the current state of a cluster\nAll fields in this message are read-only." diff --git a/gen/python/qdrant/cloud/cluster/v1/cluster_pb2.py b/gen/python/qdrant/cloud/cluster/v1/cluster_pb2.py index 46c306cf..2c671ac2 100644 --- a/gen/python/qdrant/cloud/cluster/v1/cluster_pb2.py +++ b/gen/python/qdrant/cloud/cluster/v1/cluster_pb2.py @@ -29,7 +29,7 @@ from qdrant.cloud.event.v1 import events_pb2 as qdrant_dot_cloud_dot_event_dot_v1_dot_events__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%qdrant/cloud/cluster/v1/cluster.proto\x12\x17qdrant.cloud.cluster.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a#qdrant/cloud/common/v1/common.proto\x1a\"qdrant/cloud/event/v1/events.proto\"\xb2\x06\n\x13ListClustersRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\x38\n\x11\x63loud_provider_id\x18\n \x01(\tB\x07\xbaH\x04r\x02\x10\x03H\x00R\x0f\x63loudProviderId\x88\x01\x01\x12\x45\n\x18\x63loud_provider_region_id\x18\x0b \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x01R\x15\x63loudProviderRegionId\x88\x01\x01\x12,\n\tpage_size\x18\x14 \x01(\x05\x42\n\xbaH\x07\x1a\x05\x18\xfa\x01 \x00H\x02R\x08pageSize\x88\x01\x01\x12+\n\npage_token\x18\x15 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x03R\tpageToken\x88\x01\x01:\xc5\x03\xbaH\xc1\x03\x1a\xb1\x01\n\'list_clusters.cloud_provider_id_present\x12\x42\x63loud_provider_id is required when cloud_provider_region_id is set\x1a\x42!has(this.cloud_provider_region_id) || has(this.cloud_provider_id)\x1a\x8a\x02\n cluster.cloud_provider_region_id\x12Hcloud_provider_region_id must be a UUID if cloud_provider_id is \'hybrid\'\x1a\x9b\x01this.cloud_provider_region_id.matches(\'^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$\') || this.cloud_provider_id!= \'hybrid\'B\x14\n\x12_cloud_provider_idB\x1b\n\x19_cloud_provider_region_idB\x0c\n\n_page_sizeB\r\n\x0b_page_token\"\xd4\x01\n\x14ListClustersResponse\x12\x36\n\x05items\x18\x01 \x03(\x0b\x32 .qdrant.cloud.cluster.v1.ClusterR\x05items\x12+\n\ntotal_size\x18\n \x01(\x05\x42\x07\xbaH\x04\x1a\x02(\x00H\x00R\ttotalSize\x88\x01\x01\x12\x34\n\x0fnext_page_token\x18\x0b \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x01R\rnextPageToken\x88\x01\x01\x42\r\n\x0b_total_sizeB\x12\n\x10_next_page_token\"e\n\x11GetClusterRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\'\n\ncluster_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\tclusterId\"X\n\x12GetClusterResponse\x12\x42\n\x07\x63luster\x18\x01 \x01(\x0b\x32 .qdrant.cloud.cluster.v1.ClusterB\x06\xbaH\x03\xc8\x01\x01R\x07\x63luster\"\xcd\x02\n\x14\x43reateClusterRequest\x12\x42\n\x07\x63luster\x18\x01 \x01(\x0b\x32 .qdrant.cloud.cluster.v1.ClusterB\x06\xbaH\x03\xc8\x01\x01R\x07\x63luster:\xf0\x01\xbaH\xec\x01\x1a\xe9\x01\n\"create_cluster.no_read_only_fields\x12Nread-only fields (id, created_at, deleted_at, state) must not be set on create\x1asthis.cluster.id == \'\' && !has(this.cluster.created_at) && !has(this.cluster.deleted_at) && !has(this.cluster.state)\"\xc4\x01\n\x15\x43reateClusterResponse\x12\x42\n\x07\x63luster\x18\x01 \x01(\x0b\x32 .qdrant.cloud.cluster.v1.ClusterB\x06\xbaH\x03\xc8\x01\x01R\x07\x63luster:g\xbaHd\x1a\x62\n\x1c\x63reate_cluster.state_present\x12)state is required for an existing cluster\x1a\x17has(this.cluster.state)\"\xb9\x01\n\x14UpdateClusterRequest\x12\x42\n\x07\x63luster\x18\x01 \x01(\x0b\x32 .qdrant.cloud.cluster.v1.ClusterB\x06\xbaH\x03\xc8\x01\x01R\x07\x63luster:]\xbaHZ\x1aX\n\x19update_cluster.id_present\x12$cluster.id is required for an update\x1a\x15this.cluster.id != \'\'\"\xc4\x01\n\x15UpdateClusterResponse\x12\x42\n\x07\x63luster\x18\x01 \x01(\x0b\x32 .qdrant.cloud.cluster.v1.ClusterB\x06\xbaH\x03\xc8\x01\x01R\x07\x63luster:g\xbaHd\x1a\x62\n\x1cupdate_cluster.state_present\x12)state is required for an existing cluster\x1a\x17has(this.cluster.state)\"\xa7\x01\n\x14\x44\x65leteClusterRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\'\n\ncluster_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\tclusterId\x12*\n\x0e\x64\x65lete_backups\x18\x03 \x01(\x08H\x00R\rdeleteBackups\x88\x01\x01\x42\x11\n\x0f_delete_backups\"\x17\n\x15\x44\x65leteClusterResponse\"i\n\x15RestartClusterRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\'\n\ncluster_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\tclusterId\"\x18\n\x16RestartClusterResponse\"i\n\x15SuspendClusterRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\'\n\ncluster_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\tclusterId\"\x18\n\x16SuspendClusterResponse\"k\n\x17UnsuspendClusterRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\'\n\ncluster_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\tclusterId\"\x1a\n\x18UnsuspendClusterResponse\"o\n\x1b\x45nableClusterJwtRbacRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\'\n\ncluster_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\tclusterId\"\x1e\n\x1c\x45nableClusterJwtRbacResponse\"D\n\x19SuggestClusterNameRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"9\n\x1aSuggestClusterNameResponse\x12\x1b\n\x04name\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04name\"\x81\x01\n\x19ListQdrantReleasesRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12,\n\ncluster_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\tclusterId\x88\x01\x01\x42\r\n\x0b_cluster_id\"Z\n\x1aListQdrantReleasesResponse\x12<\n\x05items\x18\x01 \x03(\x0b\x32&.qdrant.cloud.cluster.v1.QdrantReleaseR\x05items\"e\n\x17GetQdrantReleaseRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12!\n\x07version\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07version\"d\n\x18GetQdrantReleaseResponse\x12H\n\x07release\x18\x01 \x01(\x0b\x32&.qdrant.cloud.cluster.v1.QdrantReleaseB\x06\xbaH\x03\xc8\x01\x01R\x07release\"\xdc\t\n\x07\x43luster\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x39\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\'\n\naccount_id\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12/\n\x04name\x18\x04 \x01(\tB\x1b\xbaH\x18r\x16\x10\x02\x18@2\x10^[a-zA-Z0-9-_]+$R\x04name\x12\x39\n\ndeleted_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tdeletedAt\x12\x33\n\x11\x63loud_provider_id\x18\n \x01(\tB\x07\xbaH\x04r\x02\x10\x03R\x0f\x63loudProviderId\x12@\n\x18\x63loud_provider_region_id\x18\x0b \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x15\x63loudProviderRegionId\x12\x42\n\x06labels\x18\x0c \x03(\x0b\x32 .qdrant.cloud.common.v1.KeyValueB\x08\xbaH\x05\x92\x01\x02\x10\nR\x06labels\x12\xc7\x01\n\x15\x63ost_allocation_label\x18\r \x01(\tB\x8d\x01\xbaH\x89\x01r\x86\x01\x18\xfd\x01\x32\x80\x01^([a-z0-9A-Z]([-a-z0-9A-Z]*[a-z0-9A-Z])?(\\.[a-z0-9A-Z]([-a-z0-9A-Z]*[a-z0-9A-Z])?)*\\/)?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$H\x00R\x13\x63ostAllocationLabel\x88\x01\x01\x12[\n\rconfiguration\x18\x14 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterConfigurationB\x06\xbaH\x03\xc8\x01\x01R\rconfiguration\x12;\n\x05state\x18\x64 \x01(\x0b\x32%.qdrant.cloud.cluster.v1.ClusterStateR\x05state:\xb7\x03\xbaH\xb3\x03\x1a\xa3\x01\n\ncluster.id\x12\x1avalue must be a valid UUID\x1aythis.id.matches(\'^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$\') || !has(this.created_at)\x1a\x8a\x02\n cluster.cloud_provider_region_id\x12Hcloud_provider_region_id must be a UUID if cloud_provider_id is \'hybrid\'\x1a\x9b\x01this.cloud_provider_region_id.matches(\'^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$\') || this.cloud_provider_id!= \'hybrid\'B\x18\n\x16_cost_allocation_label\"\xde\x0f\n\x14\x43lusterConfiguration\x12\x44\n\x10last_modified_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0elastModifiedAt\x12/\n\x0fnumber_of_nodes\x18\x02 \x01(\rB\x07\xbaH\x04*\x02(\x01R\rnumberOfNodes\x12\x45\n\x07version\x18\x03 \x01(\tB&\xbaH#r!2\x1f^(v(\\d+)\\.(\\d+)\\.(\\d+)|latest)$H\x00R\x07version\x88\x01\x01\x12\'\n\npackage_id\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\tpackageId\x12\x64\n\x14\x61\x64\x64itional_resources\x18\x05 \x01(\x0b\x32,.qdrant.cloud.cluster.v1.AdditionalResourcesH\x01R\x13\x61\x64\x64itionalResources\x88\x01\x01\x12j\n\x16\x64\x61tabase_configuration\x18\x07 \x01(\x0b\x32..qdrant.cloud.cluster.v1.DatabaseConfigurationH\x02R\x15\x64\x61tabaseConfiguration\x88\x01\x01\x12O\n\rnode_selector\x18\x08 \x03(\x0b\x32 .qdrant.cloud.common.v1.KeyValueB\x08\xbaH\x05\x92\x01\x02\x10\nR\x0cnodeSelector\x12O\n\x0btolerations\x18\t \x03(\x0b\x32#.qdrant.cloud.cluster.v1.TolerationB\x08\xbaH\x05\x92\x01\x02\x10\nR\x0btolerations\x12L\n\x0b\x61nnotations\x18\n \x03(\x0b\x32 .qdrant.cloud.common.v1.KeyValueB\x08\xbaH\x05\x92\x01\x02\x10\nR\x0b\x61nnotations\x12H\n\x18\x61llowed_ip_source_ranges\x18\x0b \x03(\tB\x0f\xbaH\x0c\x92\x01\t\x10(\"\x05r\x03\xf0\x01\x01R\x15\x61llowedIpSourceRanges\x12_\n\x0cservice_type\x18\x0c \x01(\x0e\x32+.qdrant.cloud.cluster.v1.ClusterServiceTypeB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x03R\x0bserviceType\x88\x01\x01\x12[\n\x13service_annotations\x18\r \x03(\x0b\x32 .qdrant.cloud.common.v1.KeyValueB\x08\xbaH\x05\x92\x01\x02\x10@R\x12serviceAnnotations\x12I\n\npod_labels\x18\x0e \x03(\x0b\x32 .qdrant.cloud.common.v1.KeyValueB\x08\xbaH\x05\x92\x01\x02\x10\nR\tpodLabels\x12\x46\n\x17reserved_cpu_percentage\x18\x14 \x01(\rB\t\xbaH\x06*\x04\x18P(\x01H\x04R\x15reservedCpuPercentage\x88\x01\x01\x12L\n\x1areserved_memory_percentage\x18\x15 \x01(\rB\t\xbaH\x06*\x04\x18P(\x01H\x05R\x18reservedMemoryPercentage\x88\x01\x01\x12`\n\x08gpu_type\x18\x16 \x01(\x0e\x32\x34.qdrant.cloud.cluster.v1.ClusterConfigurationGpuTypeB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x06R\x07gpuType\x88\x01\x01\x12r\n\x0erestart_policy\x18\x17 \x01(\x0e\x32:.qdrant.cloud.cluster.v1.ClusterConfigurationRestartPolicyB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x07R\rrestartPolicy\x88\x01\x01\x12~\n\x12rebalance_strategy\x18\x18 \x01(\x0e\x32>.qdrant.cloud.cluster.v1.ClusterConfigurationRebalanceStrategyB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x08R\x11rebalanceStrategy\x88\x01\x01\x12z\n\x1btopology_spread_constraints\x18\x19 \x03(\x0b\x32\x30.qdrant.cloud.common.v1.TopologySpreadConstraintB\x08\xbaH\x05\x92\x01\x02\x10\nR\x19topologySpreadConstraints\x12}\n\x1d\x63luster_storage_configuration\x18\x1a \x01(\x0b\x32\x34.qdrant.cloud.cluster.v1.ClusterStorageConfigurationH\tR\x1b\x63lusterStorageConfiguration\x88\x01\x01\x42\n\n\x08_versionB\x17\n\x15_additional_resourcesB\x19\n\x17_database_configurationB\x0f\n\r_service_typeB\x1a\n\x18_reserved_cpu_percentageB\x1d\n\x1b_reserved_memory_percentageB\x0b\n\t_gpu_typeB\x11\n\x0f_restart_policyB\x15\n\x13_rebalance_strategyB \n\x1e_cluster_storage_configuration\"\xf1\x05\n\x15\x44\x61tabaseConfiguration\x12]\n\ncollection\x18\x01 \x01(\x0b\x32\x38.qdrant.cloud.cluster.v1.DatabaseConfigurationCollectionH\x00R\ncollection\x88\x01\x01\x12T\n\x07storage\x18\x02 \x01(\x0b\x32\x35.qdrant.cloud.cluster.v1.DatabaseConfigurationStorageH\x01R\x07storage\x88\x01\x01\x12T\n\x07service\x18\x03 \x01(\x0b\x32\x35.qdrant.cloud.cluster.v1.DatabaseConfigurationServiceH\x02R\x07service\x88\x01\x01\x12\x64\n\tlog_level\x18\x04 \x01(\x0e\x32\x36.qdrant.cloud.cluster.v1.DatabaseConfigurationLogLevelB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x03R\x08logLevel\x88\x01\x01\x12H\n\x03tls\x18\x05 \x01(\x0b\x32\x31.qdrant.cloud.cluster.v1.DatabaseConfigurationTlsH\x04R\x03tls\x88\x01\x01\x12Z\n\tinference\x18\x06 \x01(\x0b\x32\x37.qdrant.cloud.cluster.v1.DatabaseConfigurationInferenceH\x05R\tinference\x88\x01\x01\x12\x64\n\raudit_logging\x18\x07 \x01(\x0b\x32:.qdrant.cloud.cluster.v1.DatabaseConfigurationAuditLoggingH\x06R\x0c\x61uditLogging\x88\x01\x01\x42\r\n\x0b_collectionB\n\n\x08_storageB\n\n\x08_serviceB\x0c\n\n_log_levelB\x06\n\x04_tlsB\x0c\n\n_inferenceB\x10\n\x0e_audit_logging\"\xc6\x02\n\x1f\x44\x61tabaseConfigurationCollection\x12;\n\x12replication_factor\x18\x01 \x01(\rB\x07\xbaH\x04*\x02(\x01H\x00R\x11replicationFactor\x88\x01\x01\x12\x46\n\x18write_consistency_factor\x18\x02 \x01(\x05\x42\x07\xbaH\x04\x1a\x02(\x01H\x01R\x16writeConsistencyFactor\x88\x01\x01\x12^\n\x07vectors\x18\x03 \x01(\x0b\x32?.qdrant.cloud.cluster.v1.DatabaseConfigurationCollectionVectorsH\x02R\x07vectors\x88\x01\x01\x42\x15\n\x13_replication_factorB\x1b\n\x19_write_consistency_factorB\n\n\x08_vectors\"R\n&DatabaseConfigurationCollectionVectors\x12\x1c\n\x07on_disk\x18\x01 \x01(\x08H\x00R\x06onDisk\x88\x01\x01\x42\n\n\x08_on_disk\"\x97\x01\n\x1c\x44\x61tabaseConfigurationStorage\x12g\n\x0bperformance\x18\x01 \x01(\x0b\x32@.qdrant.cloud.cluster.v1.DatabaseConfigurationStoragePerformanceH\x00R\x0bperformance\x88\x01\x01\x42\x0e\n\x0c_performance\"\xb2\x01\n\'DatabaseConfigurationStoragePerformance\x12\x35\n\x14optimizer_cpu_budget\x18\x01 \x01(\x05H\x00R\x12optimizerCpuBudget\x88\x01\x01\x12&\n\x0c\x61sync_scorer\x18\x02 \x01(\x08H\x01R\x0b\x61syncScorer\x88\x01\x01\x42\x17\n\x15_optimizer_cpu_budgetB\x0f\n\r_async_scorer\"\x93\x02\n\x1c\x44\x61tabaseConfigurationService\x12\x42\n\x07\x61pi_key\x18\x01 \x01(\x0b\x32$.qdrant.cloud.common.v1.SecretKeyRefH\x00R\x06\x61piKey\x88\x01\x01\x12T\n\x11read_only_api_key\x18\x02 \x01(\x0b\x32$.qdrant.cloud.common.v1.SecretKeyRefH\x01R\x0ereadOnlyApiKey\x88\x01\x01\x12\"\n\nenable_tls\x18\x04 \x01(\x08H\x02R\tenableTls\x88\x01\x01\x42\n\n\x08_api_keyB\x14\n\x12_read_only_api_keyB\r\n\x0b_enable_tlsJ\x04\x08\x03\x10\x04\"\x9c\x01\n\x18\x44\x61tabaseConfigurationTls\x12@\n\x04\x63\x65rt\x18\x01 \x01(\x0b\x32$.qdrant.cloud.common.v1.SecretKeyRefB\x06\xbaH\x03\xc8\x01\x01R\x04\x63\x65rt\x12>\n\x03key\x18\x02 \x01(\x0b\x32$.qdrant.cloud.common.v1.SecretKeyRefB\x06\xbaH\x03\xc8\x01\x01R\x03key\":\n\x1e\x44\x61tabaseConfigurationInference\x12\x18\n\x07\x65nabled\x18\x01 \x01(\x08R\x07\x65nabled\")\n\x13\x41\x64\x64itionalResources\x12\x12\n\x04\x64isk\x18\x03 \x01(\rR\x04\x64isk\"\xb6\x02\n!DatabaseConfigurationAuditLogging\x12\x18\n\x07\x65nabled\x18\x01 \x01(\x08R\x07\x65nabled\x12J\n\x08rotation\x18\x02 \x01(\x0e\x32).qdrant.cloud.cluster.v1.AuditLogRotationH\x00R\x08rotation\x88\x01\x01\x12\x33\n\rmax_log_files\x18\x03 \x01(\rB\n\xbaH\x07*\x05\x18\xe8\x07(\x01H\x01R\x0bmaxLogFiles\x88\x01\x01\x12;\n\x17trust_forwarded_headers\x18\x04 \x01(\x08H\x02R\x15trustForwardedHeaders\x88\x01\x01\x42\x0b\n\t_rotationB\x10\n\x0e_max_log_filesB\x1a\n\x18_trust_forwarded_headers\"\xa4\n\n\nToleration\x12\x1f\n\x03key\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xbd\x02H\x00R\x03key\x88\x01\x01\x12X\n\x08operator\x18\x02 \x01(\x0e\x32+.qdrant.cloud.cluster.v1.TolerationOperatorB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x01R\x08operator\x88\x01\x01\x12M\n\x05value\x18\x03 \x01(\tB2\xbaH/r-2+(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?H\x02R\x05value\x88\x01\x01\x12R\n\x06\x65\x66\x66\x65\x63t\x18\x04 \x01(\x0e\x32).qdrant.cloud.cluster.v1.TolerationEffectB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x03R\x06\x65\x66\x66\x65\x63t\x88\x01\x01\x12;\n\x12toleration_seconds\x18\x05 \x01(\x04\x42\x07\xbaH\x04\x32\x02(\x00H\x04R\x11tolerationSeconds\x88\x01\x01:\xf9\x06\xbaH\xf5\x06\x1at\n\x1btoleration.value_for_exists\x12-value must not be set when operator is Exists\x1a&this.operator != 1 || !has(this.value)\x1a\xae\x01\n\x1atoleration.value_for_equal\x12Qvalue must be set when operator is Equal (or is not set, which defaults to Equal)\x1a=(has(this.operator) && this.operator != 2) || has(this.value)\x1a\xa7\x02\n\"toleration.key_format_when_present\x12\x44key must be a valid Kubernetes qualified name when set and non-empty\x1a\xba\x01!has(this.key) || this.key == \'\' || this.key.matches(\'^([A-Za-z0-9]([-A-Za-z0-9]*[A-Za-z0-9])?(\\\\.[A-Za-z0-9]([-A-Za-z0-9]*[A-Za-z0-9])?)*\\\\/)?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\')\x1a\x8a\x01\n$toleration.key_empty_requires_exists\x12)operator must be \'Exists\' if key is empty\x1a\x37(has(this.key) && this.key != \'\') || this.operator == 1\x1a\x94\x01\n%toleration.seconds_only_for_noexecute\x12\x38tolerationSeconds is only valid when effect is NoExecute\x1a\x31!has(this.toleration_seconds) || this.effect == 3B\x06\n\x04_keyB\x0b\n\t_operatorB\x08\n\x06_valueB\t\n\x07_effectB\x15\n\x13_toleration_seconds\"\xee\x03\n\x1b\x43lusterStorageConfiguration\x12S\n\x11storage_tier_type\x18\x01 \x01(\x0e\x32\'.qdrant.cloud.common.v1.StorageTierTypeR\x0fstorageTierType\x12\x42\n\x16\x64\x61tabase_storage_class\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x00R\x14\x64\x61tabaseStorageClass\x88\x01\x01\x12\x42\n\x16snapshot_storage_class\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x01R\x14snapshotStorageClass\x88\x01\x01\x12@\n\x15volume_snapshot_class\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x02R\x13volumeSnapshotClass\x88\x01\x01\x12\x44\n\x17volume_attributes_class\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x03R\x15volumeAttributesClass\x88\x01\x01\x42\x19\n\x17_database_storage_classB\x19\n\x17_snapshot_storage_classB\x18\n\x16_volume_snapshot_classB\x1a\n\x18_volume_attributes_class\"\xd3\x04\n\x0c\x43lusterState\x12!\n\x07version\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07version\x12\x19\n\x08nodes_up\x18\x02 \x01(\rR\x07nodesUp\x12=\n\x0crestarted_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0brestartedAt\x12\x45\n\x05phase\x18\x04 \x01(\x0e\x32%.qdrant.cloud.cluster.v1.ClusterPhaseB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x05phase\x12\x16\n\x06reason\x18\x05 \x01(\tR\x06reason\x12L\n\x08\x65ndpoint\x18\x06 \x01(\x0b\x32(.qdrant.cloud.cluster.v1.ClusterEndpointB\x06\xbaH\x03\xc8\x01\x01R\x08\x65ndpoint\x12Z\n\tresources\x18\x07 \x01(\x0b\x32\x34.qdrant.cloud.cluster.v1.ClusterNodeResourcesSummaryB\x06\xbaH\x03\xc8\x01\x01R\tresources\x12\x62\n\x10scalability_info\x18\x08 \x01(\x0b\x32/.qdrant.cloud.cluster.v1.ClusterScalabilityInfoB\x06\xbaH\x03\xc8\x01\x01R\x0fscalabilityInfo\x12>\n\x05nodes\x18\t \x03(\x0b\x32(.qdrant.cloud.cluster.v1.ClusterNodeInfoR\x05nodes\x12\x19\n\x08jwt_rbac\x18\n \x01(\x08R\x07jwtRbac\"\xdc\x02\n\x0f\x43lusterNodeInfo\x12\x1b\n\x04name\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04name\x12\x39\n\nstarted_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartedAt\x12\x18\n\x07version\x18\x03 \x01(\tR\x07version\x12\x44\n\x08\x65ndpoint\x18\x04 \x01(\x0b\x32(.qdrant.cloud.cluster.v1.ClusterEndpointR\x08\x65ndpoint\x12I\n\x05state\x18\n \x01(\x0e\x32).qdrant.cloud.cluster.v1.ClusterNodeStateB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x05state\x12\x30\n\x11\x61vailability_zone\x18\x0b \x01(\tH\x00R\x10\x61vailabilityZone\x88\x01\x01\x42\x14\n\x12_availability_zone\"y\n\x0f\x43lusterEndpoint\x12\x1a\n\x03url\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x88\x01\x01R\x03url\x12$\n\trest_port\x18\x02 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\x08restPort\x12$\n\tgrpc_port\x18\x03 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\x08grpcPort\"\xa1\x03\n\x1b\x43lusterNodeResourcesSummary\x12I\n\x04\x64isk\x18\x01 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterNodeResourcesB\x06\xbaH\x03\xc8\x01\x01R\x04\x64isk\x12G\n\x03ram\x18\x02 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterNodeResourcesB\x06\xbaH\x03\xc8\x01\x01R\x03ram\x12G\n\x03\x63pu\x18\x03 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterNodeResourcesB\x06\xbaH\x03\xc8\x01\x01R\x03\x63pu\x12\x44\n\x03gpu\x18\x04 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterNodeResourcesH\x00R\x03gpu\x88\x01\x01\x12K\n\x07gpu_ram\x18\x05 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterNodeResourcesH\x01R\x06gpuRam\x88\x01\x01\x42\x06\n\x04_gpuB\n\n\x08_gpu_ram\"\xfa\x01\n\x14\x43lusterNodeResources\x12\"\n\x04\x62\x61se\x18\x01 \x01(\x01\x42\x0e\xbaH\x0b\x12\t)\x00\x00\x00\x00\x00\x00\x00\x00R\x04\x62\x61se\x12\x34\n\rcomplimentary\x18\x02 \x01(\x01\x42\x0e\xbaH\x0b\x12\t)\x00\x00\x00\x00\x00\x00\x00\x00R\rcomplimentary\x12.\n\nadditional\x18\x03 \x01(\x01\x42\x0e\xbaH\x0b\x12\t)\x00\x00\x00\x00\x00\x00\x00\x00R\nadditional\x12*\n\x08reserved\x18\x04 \x01(\x01\x42\x0e\xbaH\x0b\x12\t)\x00\x00\x00\x00\x00\x00\x00\x00R\x08reserved\x12,\n\tavailable\x18\x05 \x01(\x01\x42\x0e\xbaH\x0b\x12\t)\x00\x00\x00\x00\x00\x00\x00\x00R\tavailable\"\xa0\x01\n\x16\x43lusterScalabilityInfo\x12U\n\x06status\x18\x01 \x01(\x0e\x32\x31.qdrant.cloud.cluster.v1.ClusterScalabilityStatusB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06status\x12$\n\x06reason\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x00R\x06reason\x88\x01\x01\x42\t\n\x07_reason\"\x93\x02\n\rQdrantRelease\x12!\n\x07version\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07version\x12\x18\n\x07\x64\x65\x66\x61ult\x18\x02 \x01(\x08R\x07\x64\x65\x66\x61ult\x12\x39\n\x11release_notes_url\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x88\x01\x01H\x00R\x0freleaseNotesUrl\x88\x01\x01\x12&\n\x07remarks\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x01R\x07remarks\x88\x01\x01\x12\x1e\n\x0b\x65nd_of_life\x18\x05 \x01(\x08R\tendOfLife\x12 \n\x0bunavailable\x18\x06 \x01(\x08R\x0bunavailableB\x14\n\x12_release_notes_urlB\n\n\x08_remarks\"\xb0\x01\n\x1e\x43reateClusterFromBackupRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12%\n\tbackup_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x62\x61\x63kupId\x12>\n\x0c\x63luster_name\x18\x03 \x01(\tB\x1b\xbaH\x18r\x16\x10\x04\x18@2\x10^[a-zA-Z0-9-_]+$R\x0b\x63lusterName\"e\n\x1f\x43reateClusterFromBackupResponse\x12\x42\n\x07\x63luster\x18\x01 \x01(\x0b\x32 .qdrant.cloud.cluster.v1.ClusterB\x06\xbaH\x03\xc8\x01\x01R\x07\x63luster*\xab\x01\n\x12\x43lusterServiceType\x12$\n CLUSTER_SERVICE_TYPE_UNSPECIFIED\x10\x00\x12#\n\x1f\x43LUSTER_SERVICE_TYPE_CLUSTER_IP\x10\x01\x12\"\n\x1e\x43LUSTER_SERVICE_TYPE_NODE_PORT\x10\x02\x12&\n\"CLUSTER_SERVICE_TYPE_LOAD_BALANCER\x10\x03*\xa0\x01\n\x1b\x43lusterConfigurationGpuType\x12.\n*CLUSTER_CONFIGURATION_GPU_TYPE_UNSPECIFIED\x10\x00\x12)\n%CLUSTER_CONFIGURATION_GPU_TYPE_NVIDIA\x10\x01\x12&\n\"CLUSTER_CONFIGURATION_GPU_TYPE_AMD\x10\x02*\xf2\x01\n!ClusterConfigurationRestartPolicy\x12\x34\n0CLUSTER_CONFIGURATION_RESTART_POLICY_UNSPECIFIED\x10\x00\x12\x30\n,CLUSTER_CONFIGURATION_RESTART_POLICY_ROLLING\x10\x01\x12\x31\n-CLUSTER_CONFIGURATION_RESTART_POLICY_PARALLEL\x10\x02\x12\x32\n.CLUSTER_CONFIGURATION_RESTART_POLICY_AUTOMATIC\x10\x03*\x8e\x02\n%ClusterConfigurationRebalanceStrategy\x12\x38\n4CLUSTER_CONFIGURATION_REBALANCE_STRATEGY_UNSPECIFIED\x10\x00\x12\x35\n1CLUSTER_CONFIGURATION_REBALANCE_STRATEGY_BY_COUNT\x10\x01\x12\x34\n0CLUSTER_CONFIGURATION_REBALANCE_STRATEGY_BY_SIZE\x10\x02\x12>\n:CLUSTER_CONFIGURATION_REBALANCE_STRATEGY_BY_COUNT_AND_SIZE\x10\x03*\xd5\x02\n\x1d\x44\x61tabaseConfigurationLogLevel\x12\x30\n,DATABASE_CONFIGURATION_LOG_LEVEL_UNSPECIFIED\x10\x00\x12*\n&DATABASE_CONFIGURATION_LOG_LEVEL_TRACE\x10\x01\x12*\n&DATABASE_CONFIGURATION_LOG_LEVEL_DEBUG\x10\x02\x12)\n%DATABASE_CONFIGURATION_LOG_LEVEL_INFO\x10\x03\x12)\n%DATABASE_CONFIGURATION_LOG_LEVEL_WARN\x10\x04\x12*\n&DATABASE_CONFIGURATION_LOG_LEVEL_ERROR\x10\x05\x12(\n$DATABASE_CONFIGURATION_LOG_LEVEL_OFF\x10\x06*s\n\x10\x41uditLogRotation\x12\"\n\x1e\x41UDIT_LOG_ROTATION_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x41UDIT_LOG_ROTATION_DAILY\x10\x01\x12\x1d\n\x19\x41UDIT_LOG_ROTATION_HOURLY\x10\x02*x\n\x12TolerationOperator\x12#\n\x1fTOLERATION_OPERATOR_UNSPECIFIED\x10\x00\x12\x1e\n\x1aTOLERATION_OPERATOR_EXISTS\x10\x01\x12\x1d\n\x19TOLERATION_OPERATOR_EQUAL\x10\x02*\xa4\x01\n\x10TolerationEffect\x12!\n\x1dTOLERATION_EFFECT_UNSPECIFIED\x10\x00\x12!\n\x1dTOLERATION_EFFECT_NO_SCHEDULE\x10\x01\x12(\n$TOLERATION_EFFECT_PREFER_NO_SCHEDULE\x10\x02\x12 \n\x1cTOLERATION_EFFECT_NO_EXECUTE\x10\x03*\xdf\x04\n\x0c\x43lusterPhase\x12\x1d\n\x19\x43LUSTER_PHASE_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x43LUSTER_PHASE_CREATING\x10\x01\x12\"\n\x1e\x43LUSTER_PHASE_FAILED_TO_CREATE\x10\x02\x12\x1a\n\x16\x43LUSTER_PHASE_UPDATING\x10\x03\x12\"\n\x1e\x43LUSTER_PHASE_FAILED_TO_UPDATE\x10\x04\x12\x19\n\x15\x43LUSTER_PHASE_SCALING\x10\x05\x12\x1b\n\x17\x43LUSTER_PHASE_UPGRADING\x10\x06\x12\x1c\n\x18\x43LUSTER_PHASE_SUSPENDING\x10\x07\x12\x1b\n\x17\x43LUSTER_PHASE_SUSPENDED\x10\x08\x12#\n\x1f\x43LUSTER_PHASE_FAILED_TO_SUSPEND\x10\t\x12\x1a\n\x16\x43LUSTER_PHASE_RESUMING\x10\n\x12\"\n\x1e\x43LUSTER_PHASE_FAILED_TO_RESUME\x10\x0b\x12\x19\n\x15\x43LUSTER_PHASE_HEALTHY\x10\x0c\x12\x1b\n\x17\x43LUSTER_PHASE_NOT_READY\x10\r\x12\x1f\n\x1b\x43LUSTER_PHASE_RECOVERY_MODE\x10\x0e\x12$\n CLUSTER_PHASE_MANUAL_MAINTENANCE\x10\x0f\x12 \n\x1c\x43LUSTER_PHASE_FAILED_TO_SYNC\x10\x10\x12\x1b\n\x17\x43LUSTER_PHASE_NOT_FOUND\x10\x11\x12\x1a\n\x16\x43LUSTER_PHASE_DELETING\x10\x12*\xde\x01\n\x10\x43lusterNodeState\x12\"\n\x1e\x43LUSTER_NODE_STATE_UNSPECIFIED\x10\x00\x12\x1f\n\x1b\x43LUSTER_NODE_STATE_STARTING\x10\x01\x12\x1e\n\x1a\x43LUSTER_NODE_STATE_HEALTHY\x10\x02\x12 \n\x1c\x43LUSTER_NODE_STATE_UNHEALTHY\x10\x03\x12 \n\x1c\x43LUSTER_NODE_STATE_SUSPENDED\x10\x04\x12!\n\x1d\x43LUSTER_NODE_STATE_RECOVERING\x10\x05*\x9c\x01\n\x18\x43lusterScalabilityStatus\x12*\n&CLUSTER_SCALABILITY_STATUS_UNSPECIFIED\x10\x00\x12+\n\'CLUSTER_SCALABILITY_STATUS_NOT_SCALABLE\x10\x01\x12\'\n#CLUSTER_SCALABILITY_STATUS_SCALABLE\x10\x02\x32\xcb\x1e\n\x0e\x43lusterService\x12\xb4\x01\n\x0cListClusters\x12,.qdrant.cloud.cluster.v1.ListClustersRequest\x1a-.qdrant.cloud.cluster.v1.ListClustersResponse\"G\x8a\xb5\x18\rread:clusters\x82\xd3\xe4\x93\x02\x30\x12./api/cluster/v1/accounts/{account_id}/clusters\x12\xd7\x01\n\nGetCluster\x12*.qdrant.cloud.cluster.v1.GetClusterRequest\x1a+.qdrant.cloud.cluster.v1.GetClusterResponse\"p\x8a\xb5\x18\rread:clusters\xba\xb5\x18\x18\n\ncluster_id\x12\ncluster_id\x82\xd3\xe4\x93\x02=\x12;/api/cluster/v1/accounts/{account_id}/clusters/{cluster_id}\x12\xd9\x02\n\rCreateCluster\x12-.qdrant.cloud.cluster.v1.CreateClusterRequest\x1a..qdrant.cloud.cluster.v1.CreateClusterResponse\"\xe8\x01\x8a\xb5\x18\x0ewrite:clusters\x92\xb5\x18\x12\x63luster.account_id\xba\xb5\x18\x1c\n\x0c\x63luster_name\x12\x0c\x63luster.name\xca\xf3\x18[\x08\x01\x12\x07\x63luster\"\x0fresp.cluster.id*=/accounts/{req.cluster.account_id}/clusters/{resp.cluster.id}\x82\xd3\xe4\x93\x02;\"6/api/cluster/v1/accounts/{cluster.account_id}/clusters:\x01*\x12\xb4\x03\n\x17\x43reateClusterFromBackup\x12\x37.qdrant.cloud.cluster.v1.CreateClusterFromBackupRequest\x1a\x38.qdrant.cloud.cluster.v1.CreateClusterFromBackupResponse\"\xa5\x02\x8a\xb5\x18\x0frestore:backups\x8a\xb5\x18\x0ewrite:clusters\xa8\xb5\x18\x01\xba\xb5\x18\x16\n\tbackup_id\x12\tbackup_id\xba\xb5\x18\x1c\n\x0c\x63luster_name\x12\x0c\x63luster_name\xca\xf3\x18t\x08\x01\x12\x07\x63luster\"\x0fresp.cluster.id*5/accounts/{req.account_id}/clusters/{resp.cluster.id}R\x1f\n\x0e\x66rom_backup_id\x12\rreq.backup_id\x82\xd3\xe4\x93\x02\x44\"B/api/cluster/v1/accounts/{account_id}/backups/{backup_id}/clusters\x12\xe0\x02\n\rUpdateCluster\x12-.qdrant.cloud.cluster.v1.UpdateClusterRequest\x1a..qdrant.cloud.cluster.v1.UpdateClusterResponse\"\xef\x01\x8a\xb5\x18\x0ewrite:clusters\x92\xb5\x18\x12\x63luster.account_id\xba\xb5\x18\x18\n\ncluster_id\x12\ncluster.id\xca\xf3\x18Y\x08\x02\x12\x07\x63luster\"\x0ereq.cluster.id*.qdrant.cloud.cluster.v1.ClusterConfigurationRebalanceStrategyB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x08R\x11rebalanceStrategy\x88\x01\x01\x12z\n\x1btopology_spread_constraints\x18\x19 \x03(\x0b\x32\x30.qdrant.cloud.common.v1.TopologySpreadConstraintB\x08\xbaH\x05\x92\x01\x02\x10\nR\x19topologySpreadConstraints\x12}\n\x1d\x63luster_storage_configuration\x18\x1a \x01(\x0b\x32\x34.qdrant.cloud.cluster.v1.ClusterStorageConfigurationH\tR\x1b\x63lusterStorageConfiguration\x88\x01\x01\x42\n\n\x08_versionB\x17\n\x15_additional_resourcesB\x19\n\x17_database_configurationB\x0f\n\r_service_typeB\x1a\n\x18_reserved_cpu_percentageB\x1d\n\x1b_reserved_memory_percentageB\x0b\n\t_gpu_typeB\x11\n\x0f_restart_policyB\x15\n\x13_rebalance_strategyB \n\x1e_cluster_storage_configuration\"\xf1\x05\n\x15\x44\x61tabaseConfiguration\x12]\n\ncollection\x18\x01 \x01(\x0b\x32\x38.qdrant.cloud.cluster.v1.DatabaseConfigurationCollectionH\x00R\ncollection\x88\x01\x01\x12T\n\x07storage\x18\x02 \x01(\x0b\x32\x35.qdrant.cloud.cluster.v1.DatabaseConfigurationStorageH\x01R\x07storage\x88\x01\x01\x12T\n\x07service\x18\x03 \x01(\x0b\x32\x35.qdrant.cloud.cluster.v1.DatabaseConfigurationServiceH\x02R\x07service\x88\x01\x01\x12\x64\n\tlog_level\x18\x04 \x01(\x0e\x32\x36.qdrant.cloud.cluster.v1.DatabaseConfigurationLogLevelB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x03R\x08logLevel\x88\x01\x01\x12H\n\x03tls\x18\x05 \x01(\x0b\x32\x31.qdrant.cloud.cluster.v1.DatabaseConfigurationTlsH\x04R\x03tls\x88\x01\x01\x12Z\n\tinference\x18\x06 \x01(\x0b\x32\x37.qdrant.cloud.cluster.v1.DatabaseConfigurationInferenceH\x05R\tinference\x88\x01\x01\x12\x64\n\raudit_logging\x18\x07 \x01(\x0b\x32:.qdrant.cloud.cluster.v1.DatabaseConfigurationAuditLoggingH\x06R\x0c\x61uditLogging\x88\x01\x01\x42\r\n\x0b_collectionB\n\n\x08_storageB\n\n\x08_serviceB\x0c\n\n_log_levelB\x06\n\x04_tlsB\x0c\n\n_inferenceB\x10\n\x0e_audit_logging\"\xc6\x02\n\x1f\x44\x61tabaseConfigurationCollection\x12;\n\x12replication_factor\x18\x01 \x01(\rB\x07\xbaH\x04*\x02(\x01H\x00R\x11replicationFactor\x88\x01\x01\x12\x46\n\x18write_consistency_factor\x18\x02 \x01(\x05\x42\x07\xbaH\x04\x1a\x02(\x01H\x01R\x16writeConsistencyFactor\x88\x01\x01\x12^\n\x07vectors\x18\x03 \x01(\x0b\x32?.qdrant.cloud.cluster.v1.DatabaseConfigurationCollectionVectorsH\x02R\x07vectors\x88\x01\x01\x42\x15\n\x13_replication_factorB\x1b\n\x19_write_consistency_factorB\n\n\x08_vectors\"R\n&DatabaseConfigurationCollectionVectors\x12\x1c\n\x07on_disk\x18\x01 \x01(\x08H\x00R\x06onDisk\x88\x01\x01\x42\n\n\x08_on_disk\"\x97\x01\n\x1c\x44\x61tabaseConfigurationStorage\x12g\n\x0bperformance\x18\x01 \x01(\x0b\x32@.qdrant.cloud.cluster.v1.DatabaseConfigurationStoragePerformanceH\x00R\x0bperformance\x88\x01\x01\x42\x0e\n\x0c_performance\"\xb2\x01\n\'DatabaseConfigurationStoragePerformance\x12\x35\n\x14optimizer_cpu_budget\x18\x01 \x01(\x05H\x00R\x12optimizerCpuBudget\x88\x01\x01\x12&\n\x0c\x61sync_scorer\x18\x02 \x01(\x08H\x01R\x0b\x61syncScorer\x88\x01\x01\x42\x17\n\x15_optimizer_cpu_budgetB\x0f\n\r_async_scorer\"\x93\x02\n\x1c\x44\x61tabaseConfigurationService\x12\x42\n\x07\x61pi_key\x18\x01 \x01(\x0b\x32$.qdrant.cloud.common.v1.SecretKeyRefH\x00R\x06\x61piKey\x88\x01\x01\x12T\n\x11read_only_api_key\x18\x02 \x01(\x0b\x32$.qdrant.cloud.common.v1.SecretKeyRefH\x01R\x0ereadOnlyApiKey\x88\x01\x01\x12\"\n\nenable_tls\x18\x04 \x01(\x08H\x02R\tenableTls\x88\x01\x01\x42\n\n\x08_api_keyB\x14\n\x12_read_only_api_keyB\r\n\x0b_enable_tlsJ\x04\x08\x03\x10\x04\"\x9c\x01\n\x18\x44\x61tabaseConfigurationTls\x12@\n\x04\x63\x65rt\x18\x01 \x01(\x0b\x32$.qdrant.cloud.common.v1.SecretKeyRefB\x06\xbaH\x03\xc8\x01\x01R\x04\x63\x65rt\x12>\n\x03key\x18\x02 \x01(\x0b\x32$.qdrant.cloud.common.v1.SecretKeyRefB\x06\xbaH\x03\xc8\x01\x01R\x03key\":\n\x1e\x44\x61tabaseConfigurationInference\x12\x18\n\x07\x65nabled\x18\x01 \x01(\x08R\x07\x65nabled\")\n\x13\x41\x64\x64itionalResources\x12\x12\n\x04\x64isk\x18\x03 \x01(\rR\x04\x64isk\"\xb6\x02\n!DatabaseConfigurationAuditLogging\x12\x18\n\x07\x65nabled\x18\x01 \x01(\x08R\x07\x65nabled\x12J\n\x08rotation\x18\x02 \x01(\x0e\x32).qdrant.cloud.cluster.v1.AuditLogRotationH\x00R\x08rotation\x88\x01\x01\x12\x33\n\rmax_log_files\x18\x03 \x01(\rB\n\xbaH\x07*\x05\x18\xe8\x07(\x01H\x01R\x0bmaxLogFiles\x88\x01\x01\x12;\n\x17trust_forwarded_headers\x18\x04 \x01(\x08H\x02R\x15trustForwardedHeaders\x88\x01\x01\x42\x0b\n\t_rotationB\x10\n\x0e_max_log_filesB\x1a\n\x18_trust_forwarded_headers\"\xa4\n\n\nToleration\x12\x1f\n\x03key\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xbd\x02H\x00R\x03key\x88\x01\x01\x12X\n\x08operator\x18\x02 \x01(\x0e\x32+.qdrant.cloud.cluster.v1.TolerationOperatorB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x01R\x08operator\x88\x01\x01\x12M\n\x05value\x18\x03 \x01(\tB2\xbaH/r-2+(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?H\x02R\x05value\x88\x01\x01\x12R\n\x06\x65\x66\x66\x65\x63t\x18\x04 \x01(\x0e\x32).qdrant.cloud.cluster.v1.TolerationEffectB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x03R\x06\x65\x66\x66\x65\x63t\x88\x01\x01\x12;\n\x12toleration_seconds\x18\x05 \x01(\x04\x42\x07\xbaH\x04\x32\x02(\x00H\x04R\x11tolerationSeconds\x88\x01\x01:\xf9\x06\xbaH\xf5\x06\x1at\n\x1btoleration.value_for_exists\x12-value must not be set when operator is Exists\x1a&this.operator != 1 || !has(this.value)\x1a\xae\x01\n\x1atoleration.value_for_equal\x12Qvalue must be set when operator is Equal (or is not set, which defaults to Equal)\x1a=(has(this.operator) && this.operator != 2) || has(this.value)\x1a\xa7\x02\n\"toleration.key_format_when_present\x12\x44key must be a valid Kubernetes qualified name when set and non-empty\x1a\xba\x01!has(this.key) || this.key == \'\' || this.key.matches(\'^([A-Za-z0-9]([-A-Za-z0-9]*[A-Za-z0-9])?(\\\\.[A-Za-z0-9]([-A-Za-z0-9]*[A-Za-z0-9])?)*\\\\/)?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\')\x1a\x8a\x01\n$toleration.key_empty_requires_exists\x12)operator must be \'Exists\' if key is empty\x1a\x37(has(this.key) && this.key != \'\') || this.operator == 1\x1a\x94\x01\n%toleration.seconds_only_for_noexecute\x12\x38tolerationSeconds is only valid when effect is NoExecute\x1a\x31!has(this.toleration_seconds) || this.effect == 3B\x06\n\x04_keyB\x0b\n\t_operatorB\x08\n\x06_valueB\t\n\x07_effectB\x15\n\x13_toleration_seconds\"\xee\x03\n\x1b\x43lusterStorageConfiguration\x12S\n\x11storage_tier_type\x18\x01 \x01(\x0e\x32\'.qdrant.cloud.common.v1.StorageTierTypeR\x0fstorageTierType\x12\x42\n\x16\x64\x61tabase_storage_class\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x00R\x14\x64\x61tabaseStorageClass\x88\x01\x01\x12\x42\n\x16snapshot_storage_class\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x01R\x14snapshotStorageClass\x88\x01\x01\x12@\n\x15volume_snapshot_class\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x02R\x13volumeSnapshotClass\x88\x01\x01\x12\x44\n\x17volume_attributes_class\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x03R\x15volumeAttributesClass\x88\x01\x01\x42\x19\n\x17_database_storage_classB\x19\n\x17_snapshot_storage_classB\x18\n\x16_volume_snapshot_classB\x1a\n\x18_volume_attributes_class\"\xaf\x05\n\x0c\x43lusterState\x12!\n\x07version\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07version\x12\x19\n\x08nodes_up\x18\x02 \x01(\rR\x07nodesUp\x12=\n\x0crestarted_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0brestartedAt\x12\x45\n\x05phase\x18\x04 \x01(\x0e\x32%.qdrant.cloud.cluster.v1.ClusterPhaseB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x05phase\x12\x16\n\x06reason\x18\x05 \x01(\tR\x06reason\x12L\n\x08\x65ndpoint\x18\x06 \x01(\x0b\x32(.qdrant.cloud.cluster.v1.ClusterEndpointB\x06\xbaH\x03\xc8\x01\x01R\x08\x65ndpoint\x12Z\n\tresources\x18\x07 \x01(\x0b\x32\x34.qdrant.cloud.cluster.v1.ClusterNodeResourcesSummaryB\x06\xbaH\x03\xc8\x01\x01R\tresources\x12\x64\n\x10scalability_info\x18\x08 \x01(\x0b\x32/.qdrant.cloud.cluster.v1.ClusterScalabilityInfoB\x08\x18\x01\xbaH\x03\xc8\x01\x01R\x0fscalabilityInfo\x12>\n\x05nodes\x18\t \x03(\x0b\x32(.qdrant.cloud.cluster.v1.ClusterNodeInfoR\x05nodes\x12\x19\n\x08jwt_rbac\x18\n \x01(\x08R\x07jwtRbac\x12X\n\x0c\x63\x61pabilities\x18\x0b \x01(\x0b\x32,.qdrant.cloud.cluster.v1.ClusterCapabilitiesB\x06\xbaH\x03\xc8\x01\x01R\x0c\x63\x61pabilities\"\xdc\x02\n\x0f\x43lusterNodeInfo\x12\x1b\n\x04name\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04name\x12\x39\n\nstarted_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartedAt\x12\x18\n\x07version\x18\x03 \x01(\tR\x07version\x12\x44\n\x08\x65ndpoint\x18\x04 \x01(\x0b\x32(.qdrant.cloud.cluster.v1.ClusterEndpointR\x08\x65ndpoint\x12I\n\x05state\x18\n \x01(\x0e\x32).qdrant.cloud.cluster.v1.ClusterNodeStateB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x05state\x12\x30\n\x11\x61vailability_zone\x18\x0b \x01(\tH\x00R\x10\x61vailabilityZone\x88\x01\x01\x42\x14\n\x12_availability_zone\"y\n\x0f\x43lusterEndpoint\x12\x1a\n\x03url\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x88\x01\x01R\x03url\x12$\n\trest_port\x18\x02 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\x08restPort\x12$\n\tgrpc_port\x18\x03 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\x08grpcPort\"\xa1\x03\n\x1b\x43lusterNodeResourcesSummary\x12I\n\x04\x64isk\x18\x01 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterNodeResourcesB\x06\xbaH\x03\xc8\x01\x01R\x04\x64isk\x12G\n\x03ram\x18\x02 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterNodeResourcesB\x06\xbaH\x03\xc8\x01\x01R\x03ram\x12G\n\x03\x63pu\x18\x03 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterNodeResourcesB\x06\xbaH\x03\xc8\x01\x01R\x03\x63pu\x12\x44\n\x03gpu\x18\x04 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterNodeResourcesH\x00R\x03gpu\x88\x01\x01\x12K\n\x07gpu_ram\x18\x05 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterNodeResourcesH\x01R\x06gpuRam\x88\x01\x01\x42\x06\n\x04_gpuB\n\n\x08_gpu_ram\"\xfa\x01\n\x14\x43lusterNodeResources\x12\"\n\x04\x62\x61se\x18\x01 \x01(\x01\x42\x0e\xbaH\x0b\x12\t)\x00\x00\x00\x00\x00\x00\x00\x00R\x04\x62\x61se\x12\x34\n\rcomplimentary\x18\x02 \x01(\x01\x42\x0e\xbaH\x0b\x12\t)\x00\x00\x00\x00\x00\x00\x00\x00R\rcomplimentary\x12.\n\nadditional\x18\x03 \x01(\x01\x42\x0e\xbaH\x0b\x12\t)\x00\x00\x00\x00\x00\x00\x00\x00R\nadditional\x12*\n\x08reserved\x18\x04 \x01(\x01\x42\x0e\xbaH\x0b\x12\t)\x00\x00\x00\x00\x00\x00\x00\x00R\x08reserved\x12,\n\tavailable\x18\x05 \x01(\x01\x42\x0e\xbaH\x0b\x12\t)\x00\x00\x00\x00\x00\x00\x00\x00R\tavailable\"\xa0\x01\n\x16\x43lusterScalabilityInfo\x12U\n\x06status\x18\x01 \x01(\x0e\x32\x31.qdrant.cloud.cluster.v1.ClusterScalabilityStatusB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06status\x12$\n\x06reason\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x00R\x06reason\x88\x01\x01\x42\t\n\x07_reason\"\xa9\x02\n\x13\x43lusterCapabilities\x12\x61\n\x0e\x64isk_expansion\x18\x01 \x01(\x0e\x32:.qdrant.cloud.cluster.v1.ClusterDiskExpansionSupportStatusR\rdiskExpansion\x12K\n\x06\x62\x61\x63kup\x18\x02 \x01(\x0e\x32\x33.qdrant.cloud.cluster.v1.ClusterBackupSupportStatusR\x06\x62\x61\x63kup\x12\x62\n\x10scalability_info\x18\x03 \x01(\x0b\x32/.qdrant.cloud.cluster.v1.ClusterScalabilityInfoB\x06\xbaH\x03\xc8\x01\x01R\x0fscalabilityInfo\"\x93\x02\n\rQdrantRelease\x12!\n\x07version\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07version\x12\x18\n\x07\x64\x65\x66\x61ult\x18\x02 \x01(\x08R\x07\x64\x65\x66\x61ult\x12\x39\n\x11release_notes_url\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x88\x01\x01H\x00R\x0freleaseNotesUrl\x88\x01\x01\x12&\n\x07remarks\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x01R\x07remarks\x88\x01\x01\x12\x1e\n\x0b\x65nd_of_life\x18\x05 \x01(\x08R\tendOfLife\x12 \n\x0bunavailable\x18\x06 \x01(\x08R\x0bunavailableB\x14\n\x12_release_notes_urlB\n\n\x08_remarks\"\xb0\x01\n\x1e\x43reateClusterFromBackupRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12%\n\tbackup_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x62\x61\x63kupId\x12>\n\x0c\x63luster_name\x18\x03 \x01(\tB\x1b\xbaH\x18r\x16\x10\x04\x18@2\x10^[a-zA-Z0-9-_]+$R\x0b\x63lusterName\"e\n\x1f\x43reateClusterFromBackupResponse\x12\x42\n\x07\x63luster\x18\x01 \x01(\x0b\x32 .qdrant.cloud.cluster.v1.ClusterB\x06\xbaH\x03\xc8\x01\x01R\x07\x63luster*\xab\x01\n\x12\x43lusterServiceType\x12$\n CLUSTER_SERVICE_TYPE_UNSPECIFIED\x10\x00\x12#\n\x1f\x43LUSTER_SERVICE_TYPE_CLUSTER_IP\x10\x01\x12\"\n\x1e\x43LUSTER_SERVICE_TYPE_NODE_PORT\x10\x02\x12&\n\"CLUSTER_SERVICE_TYPE_LOAD_BALANCER\x10\x03*\xa0\x01\n\x1b\x43lusterConfigurationGpuType\x12.\n*CLUSTER_CONFIGURATION_GPU_TYPE_UNSPECIFIED\x10\x00\x12)\n%CLUSTER_CONFIGURATION_GPU_TYPE_NVIDIA\x10\x01\x12&\n\"CLUSTER_CONFIGURATION_GPU_TYPE_AMD\x10\x02*\xf2\x01\n!ClusterConfigurationRestartPolicy\x12\x34\n0CLUSTER_CONFIGURATION_RESTART_POLICY_UNSPECIFIED\x10\x00\x12\x30\n,CLUSTER_CONFIGURATION_RESTART_POLICY_ROLLING\x10\x01\x12\x31\n-CLUSTER_CONFIGURATION_RESTART_POLICY_PARALLEL\x10\x02\x12\x32\n.CLUSTER_CONFIGURATION_RESTART_POLICY_AUTOMATIC\x10\x03*\x8e\x02\n%ClusterConfigurationRebalanceStrategy\x12\x38\n4CLUSTER_CONFIGURATION_REBALANCE_STRATEGY_UNSPECIFIED\x10\x00\x12\x35\n1CLUSTER_CONFIGURATION_REBALANCE_STRATEGY_BY_COUNT\x10\x01\x12\x34\n0CLUSTER_CONFIGURATION_REBALANCE_STRATEGY_BY_SIZE\x10\x02\x12>\n:CLUSTER_CONFIGURATION_REBALANCE_STRATEGY_BY_COUNT_AND_SIZE\x10\x03*\xd5\x02\n\x1d\x44\x61tabaseConfigurationLogLevel\x12\x30\n,DATABASE_CONFIGURATION_LOG_LEVEL_UNSPECIFIED\x10\x00\x12*\n&DATABASE_CONFIGURATION_LOG_LEVEL_TRACE\x10\x01\x12*\n&DATABASE_CONFIGURATION_LOG_LEVEL_DEBUG\x10\x02\x12)\n%DATABASE_CONFIGURATION_LOG_LEVEL_INFO\x10\x03\x12)\n%DATABASE_CONFIGURATION_LOG_LEVEL_WARN\x10\x04\x12*\n&DATABASE_CONFIGURATION_LOG_LEVEL_ERROR\x10\x05\x12(\n$DATABASE_CONFIGURATION_LOG_LEVEL_OFF\x10\x06*s\n\x10\x41uditLogRotation\x12\"\n\x1e\x41UDIT_LOG_ROTATION_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x41UDIT_LOG_ROTATION_DAILY\x10\x01\x12\x1d\n\x19\x41UDIT_LOG_ROTATION_HOURLY\x10\x02*x\n\x12TolerationOperator\x12#\n\x1fTOLERATION_OPERATOR_UNSPECIFIED\x10\x00\x12\x1e\n\x1aTOLERATION_OPERATOR_EXISTS\x10\x01\x12\x1d\n\x19TOLERATION_OPERATOR_EQUAL\x10\x02*\xa4\x01\n\x10TolerationEffect\x12!\n\x1dTOLERATION_EFFECT_UNSPECIFIED\x10\x00\x12!\n\x1dTOLERATION_EFFECT_NO_SCHEDULE\x10\x01\x12(\n$TOLERATION_EFFECT_PREFER_NO_SCHEDULE\x10\x02\x12 \n\x1cTOLERATION_EFFECT_NO_EXECUTE\x10\x03*\xdf\x04\n\x0c\x43lusterPhase\x12\x1d\n\x19\x43LUSTER_PHASE_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x43LUSTER_PHASE_CREATING\x10\x01\x12\"\n\x1e\x43LUSTER_PHASE_FAILED_TO_CREATE\x10\x02\x12\x1a\n\x16\x43LUSTER_PHASE_UPDATING\x10\x03\x12\"\n\x1e\x43LUSTER_PHASE_FAILED_TO_UPDATE\x10\x04\x12\x19\n\x15\x43LUSTER_PHASE_SCALING\x10\x05\x12\x1b\n\x17\x43LUSTER_PHASE_UPGRADING\x10\x06\x12\x1c\n\x18\x43LUSTER_PHASE_SUSPENDING\x10\x07\x12\x1b\n\x17\x43LUSTER_PHASE_SUSPENDED\x10\x08\x12#\n\x1f\x43LUSTER_PHASE_FAILED_TO_SUSPEND\x10\t\x12\x1a\n\x16\x43LUSTER_PHASE_RESUMING\x10\n\x12\"\n\x1e\x43LUSTER_PHASE_FAILED_TO_RESUME\x10\x0b\x12\x19\n\x15\x43LUSTER_PHASE_HEALTHY\x10\x0c\x12\x1b\n\x17\x43LUSTER_PHASE_NOT_READY\x10\r\x12\x1f\n\x1b\x43LUSTER_PHASE_RECOVERY_MODE\x10\x0e\x12$\n CLUSTER_PHASE_MANUAL_MAINTENANCE\x10\x0f\x12 \n\x1c\x43LUSTER_PHASE_FAILED_TO_SYNC\x10\x10\x12\x1b\n\x17\x43LUSTER_PHASE_NOT_FOUND\x10\x11\x12\x1a\n\x16\x43LUSTER_PHASE_DELETING\x10\x12*\xde\x01\n\x10\x43lusterNodeState\x12\"\n\x1e\x43LUSTER_NODE_STATE_UNSPECIFIED\x10\x00\x12\x1f\n\x1b\x43LUSTER_NODE_STATE_STARTING\x10\x01\x12\x1e\n\x1a\x43LUSTER_NODE_STATE_HEALTHY\x10\x02\x12 \n\x1c\x43LUSTER_NODE_STATE_UNHEALTHY\x10\x03\x12 \n\x1c\x43LUSTER_NODE_STATE_SUSPENDED\x10\x04\x12!\n\x1d\x43LUSTER_NODE_STATE_RECOVERING\x10\x05*\x9c\x01\n\x18\x43lusterScalabilityStatus\x12*\n&CLUSTER_SCALABILITY_STATUS_UNSPECIFIED\x10\x00\x12+\n\'CLUSTER_SCALABILITY_STATUS_NOT_SCALABLE\x10\x01\x12\'\n#CLUSTER_SCALABILITY_STATUS_SCALABLE\x10\x02*\xc8\x01\n!ClusterDiskExpansionSupportStatus\x12\x35\n1CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_UNSPECIFIED\x10\x00\x12\x33\n/CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_SUPPORTED\x10\x01\x12\x37\n3CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_NOT_SUPPORTED\x10\x02*\xa9\x01\n\x1a\x43lusterBackupSupportStatus\x12-\n)CLUSTER_BACKUP_SUPPORT_STATUS_UNSPECIFIED\x10\x00\x12+\n\'CLUSTER_BACKUP_SUPPORT_STATUS_SUPPORTED\x10\x01\x12/\n+CLUSTER_BACKUP_SUPPORT_STATUS_NOT_SUPPORTED\x10\x02\x32\xcb\x1e\n\x0e\x43lusterService\x12\xb4\x01\n\x0cListClusters\x12,.qdrant.cloud.cluster.v1.ListClustersRequest\x1a-.qdrant.cloud.cluster.v1.ListClustersResponse\"G\x8a\xb5\x18\rread:clusters\x82\xd3\xe4\x93\x02\x30\x12./api/cluster/v1/accounts/{account_id}/clusters\x12\xd7\x01\n\nGetCluster\x12*.qdrant.cloud.cluster.v1.GetClusterRequest\x1a+.qdrant.cloud.cluster.v1.GetClusterResponse\"p\x8a\xb5\x18\rread:clusters\xba\xb5\x18\x18\n\ncluster_id\x12\ncluster_id\x82\xd3\xe4\x93\x02=\x12;/api/cluster/v1/accounts/{account_id}/clusters/{cluster_id}\x12\xd9\x02\n\rCreateCluster\x12-.qdrant.cloud.cluster.v1.CreateClusterRequest\x1a..qdrant.cloud.cluster.v1.CreateClusterResponse\"\xe8\x01\x8a\xb5\x18\x0ewrite:clusters\x92\xb5\x18\x12\x63luster.account_id\xba\xb5\x18\x1c\n\x0c\x63luster_name\x12\x0c\x63luster.name\xca\xf3\x18[\x08\x01\x12\x07\x63luster\"\x0fresp.cluster.id*=/accounts/{req.cluster.account_id}/clusters/{resp.cluster.id}\x82\xd3\xe4\x93\x02;\"6/api/cluster/v1/accounts/{cluster.account_id}/clusters:\x01*\x12\xb4\x03\n\x17\x43reateClusterFromBackup\x12\x37.qdrant.cloud.cluster.v1.CreateClusterFromBackupRequest\x1a\x38.qdrant.cloud.cluster.v1.CreateClusterFromBackupResponse\"\xa5\x02\x8a\xb5\x18\x0frestore:backups\x8a\xb5\x18\x0ewrite:clusters\xa8\xb5\x18\x01\xba\xb5\x18\x16\n\tbackup_id\x12\tbackup_id\xba\xb5\x18\x1c\n\x0c\x63luster_name\x12\x0c\x63luster_name\xca\xf3\x18t\x08\x01\x12\x07\x63luster\"\x0fresp.cluster.id*5/accounts/{req.account_id}/clusters/{resp.cluster.id}R\x1f\n\x0e\x66rom_backup_id\x12\rreq.backup_id\x82\xd3\xe4\x93\x02\x44\"B/api/cluster/v1/accounts/{account_id}/backups/{backup_id}/clusters\x12\xe0\x02\n\rUpdateCluster\x12-.qdrant.cloud.cluster.v1.UpdateClusterRequest\x1a..qdrant.cloud.cluster.v1.UpdateClusterResponse\"\xef\x01\x8a\xb5\x18\x0ewrite:clusters\x92\xb5\x18\x12\x63luster.account_id\xba\xb5\x18\x18\n\ncluster_id\x12\ncluster.id\xca\xf3\x18Y\x08\x02\x12\x07\x63luster\"\x0ereq.cluster.id* None: ... class ClusterState(_message.Message): - __slots__ = ("version", "nodes_up", "restarted_at", "phase", "reason", "endpoint", "resources", "scalability_info", "nodes", "jwt_rbac") + __slots__ = ("version", "nodes_up", "restarted_at", "phase", "reason", "endpoint", "resources", "scalability_info", "nodes", "jwt_rbac", "capabilities") VERSION_FIELD_NUMBER: _ClassVar[int] NODES_UP_FIELD_NUMBER: _ClassVar[int] RESTARTED_AT_FIELD_NUMBER: _ClassVar[int] @@ -531,6 +549,7 @@ class ClusterState(_message.Message): SCALABILITY_INFO_FIELD_NUMBER: _ClassVar[int] NODES_FIELD_NUMBER: _ClassVar[int] JWT_RBAC_FIELD_NUMBER: _ClassVar[int] + CAPABILITIES_FIELD_NUMBER: _ClassVar[int] version: str nodes_up: int restarted_at: _timestamp_pb2.Timestamp @@ -541,7 +560,8 @@ class ClusterState(_message.Message): scalability_info: ClusterScalabilityInfo nodes: _containers.RepeatedCompositeFieldContainer[ClusterNodeInfo] jwt_rbac: bool - def __init__(self, version: _Optional[str] = ..., nodes_up: _Optional[int] = ..., restarted_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., phase: _Optional[_Union[ClusterPhase, str]] = ..., reason: _Optional[str] = ..., endpoint: _Optional[_Union[ClusterEndpoint, _Mapping]] = ..., resources: _Optional[_Union[ClusterNodeResourcesSummary, _Mapping]] = ..., scalability_info: _Optional[_Union[ClusterScalabilityInfo, _Mapping]] = ..., nodes: _Optional[_Iterable[_Union[ClusterNodeInfo, _Mapping]]] = ..., jwt_rbac: _Optional[bool] = ...) -> None: ... + capabilities: ClusterCapabilities + def __init__(self, version: _Optional[str] = ..., nodes_up: _Optional[int] = ..., restarted_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., phase: _Optional[_Union[ClusterPhase, str]] = ..., reason: _Optional[str] = ..., endpoint: _Optional[_Union[ClusterEndpoint, _Mapping]] = ..., resources: _Optional[_Union[ClusterNodeResourcesSummary, _Mapping]] = ..., scalability_info: _Optional[_Union[ClusterScalabilityInfo, _Mapping]] = ..., nodes: _Optional[_Iterable[_Union[ClusterNodeInfo, _Mapping]]] = ..., jwt_rbac: _Optional[bool] = ..., capabilities: _Optional[_Union[ClusterCapabilities, _Mapping]] = ...) -> None: ... class ClusterNodeInfo(_message.Message): __slots__ = ("name", "started_at", "version", "endpoint", "state", "availability_zone") @@ -605,6 +625,16 @@ class ClusterScalabilityInfo(_message.Message): reason: str def __init__(self, status: _Optional[_Union[ClusterScalabilityStatus, str]] = ..., reason: _Optional[str] = ...) -> None: ... +class ClusterCapabilities(_message.Message): + __slots__ = ("disk_expansion", "backup", "scalability_info") + DISK_EXPANSION_FIELD_NUMBER: _ClassVar[int] + BACKUP_FIELD_NUMBER: _ClassVar[int] + SCALABILITY_INFO_FIELD_NUMBER: _ClassVar[int] + disk_expansion: ClusterDiskExpansionSupportStatus + backup: ClusterBackupSupportStatus + scalability_info: ClusterScalabilityInfo + def __init__(self, disk_expansion: _Optional[_Union[ClusterDiskExpansionSupportStatus, str]] = ..., backup: _Optional[_Union[ClusterBackupSupportStatus, str]] = ..., scalability_info: _Optional[_Union[ClusterScalabilityInfo, _Mapping]] = ...) -> None: ... + class QdrantRelease(_message.Message): __slots__ = ("version", "default", "release_notes_url", "remarks", "end_of_life", "unavailable") VERSION_FIELD_NUMBER: _ClassVar[int] diff --git a/gen/typescript/qdrant/cloud/cluster/v1/cluster_pb.d.ts b/gen/typescript/qdrant/cloud/cluster/v1/cluster_pb.d.ts index 75541ad7..0c26ec14 100644 --- a/gen/typescript/qdrant/cloud/cluster/v1/cluster_pb.d.ts +++ b/gen/typescript/qdrant/cloud/cluster/v1/cluster_pb.d.ts @@ -1945,8 +1945,10 @@ export declare type ClusterState = Message<"qdrant.cloud.cluster.v1.ClusterState /** * Whether the cluster can be scaled up or down. + * Deprecated: Use capabilities.scalability_info instead * - * @generated from field: qdrant.cloud.cluster.v1.ClusterScalabilityInfo scalability_info = 8; + * @generated from field: qdrant.cloud.cluster.v1.ClusterScalabilityInfo scalability_info = 8 [deprecated = true]; + * @deprecated */ scalabilityInfo?: ClusterScalabilityInfo; @@ -1967,6 +1969,13 @@ export declare type ClusterState = Message<"qdrant.cloud.cluster.v1.ClusterState * @generated from field: bool jwt_rbac = 10; */ jwtRbac: boolean; + + /** + * Specifies whether some operations are supported by cluster or not. + * + * @generated from field: qdrant.cloud.cluster.v1.ClusterCapabilities capabilities = 11; + */ + capabilities?: ClusterCapabilities; }; /** @@ -2028,8 +2037,10 @@ export declare type ClusterStateValid = Message<"qdrant.cloud.cluster.v1.Cluster /** * Whether the cluster can be scaled up or down. + * Deprecated: Use capabilities.scalability_info instead * - * @generated from field: qdrant.cloud.cluster.v1.ClusterScalabilityInfo scalability_info = 8; + * @generated from field: qdrant.cloud.cluster.v1.ClusterScalabilityInfo scalability_info = 8 [deprecated = true]; + * @deprecated */ scalabilityInfo: ClusterScalabilityInfoValid; @@ -2050,6 +2061,13 @@ export declare type ClusterStateValid = Message<"qdrant.cloud.cluster.v1.Cluster * @generated from field: bool jwt_rbac = 10; */ jwtRbac: boolean; + + /** + * Specifies whether some operations are supported by cluster or not. + * + * @generated from field: qdrant.cloud.cluster.v1.ClusterCapabilities capabilities = 11; + */ + capabilities: ClusterCapabilitiesValid; }; /** @@ -2328,6 +2346,72 @@ export declare type ClusterScalabilityInfoValid = ClusterScalabilityInfo; */ export declare const ClusterScalabilityInfoSchema: GenMessage; +/** + * ClusterCapabilities specifies whether some actions are supported by the cluster or not. + * + * @generated from message qdrant.cloud.cluster.v1.ClusterCapabilities + */ +export declare type ClusterCapabilities = Message<"qdrant.cloud.cluster.v1.ClusterCapabilities"> & { + /** + * Whether the StorageClass used by the cluster supports disk expansion or not. + * Disk scaling will be enabled or disabled based on this for hybrid cloud clusters. + * + * @generated from field: qdrant.cloud.cluster.v1.ClusterDiskExpansionSupportStatus disk_expansion = 1; + */ + diskExpansion: ClusterDiskExpansionSupportStatus; + + /** + * Whether it is possible to take a backup for the cluster or not. + * Backup tab will be shown or hidden based on this for hybrid cloud clusters. + * + * @generated from field: qdrant.cloud.cluster.v1.ClusterBackupSupportStatus backup = 2; + */ + backup: ClusterBackupSupportStatus; + + /** + * Whether the cluster can be scaled up or down. + * + * @generated from field: qdrant.cloud.cluster.v1.ClusterScalabilityInfo scalability_info = 3; + */ + scalabilityInfo?: ClusterScalabilityInfo; +}; + +/** + * ClusterCapabilities specifies whether some actions are supported by the cluster or not. + * + * @generated from message qdrant.cloud.cluster.v1.ClusterCapabilities + */ +export declare type ClusterCapabilitiesValid = Message<"qdrant.cloud.cluster.v1.ClusterCapabilities"> & { + /** + * Whether the StorageClass used by the cluster supports disk expansion or not. + * Disk scaling will be enabled or disabled based on this for hybrid cloud clusters. + * + * @generated from field: qdrant.cloud.cluster.v1.ClusterDiskExpansionSupportStatus disk_expansion = 1; + */ + diskExpansion: ClusterDiskExpansionSupportStatus; + + /** + * Whether it is possible to take a backup for the cluster or not. + * Backup tab will be shown or hidden based on this for hybrid cloud clusters. + * + * @generated from field: qdrant.cloud.cluster.v1.ClusterBackupSupportStatus backup = 2; + */ + backup: ClusterBackupSupportStatus; + + /** + * Whether the cluster can be scaled up or down. + * + * @generated from field: qdrant.cloud.cluster.v1.ClusterScalabilityInfo scalability_info = 3; + */ + scalabilityInfo: ClusterScalabilityInfoValid; +}; + +/** + * Describes the message qdrant.cloud.cluster.v1.ClusterCapabilities. + * Use `create(ClusterCapabilitiesSchema)` to create a new message. + */ +export declare const ClusterCapabilitiesSchema: GenMessage; + /** * QdrantRelease represent a single Qdrant release * @@ -3014,6 +3098,72 @@ export enum ClusterScalabilityStatus { */ export declare const ClusterScalabilityStatusSchema: GenEnum; +/** + * ClusterDiskExpansionSupportStatus defines the disk expansion support states of a cluster. + * + * @generated from enum qdrant.cloud.cluster.v1.ClusterDiskExpansionSupportStatus + */ +export enum ClusterDiskExpansionSupportStatus { + /** + * Disk expansion support is unspecified. + * + * @generated from enum value: CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * Cluster supports disk expansion. + * + * @generated from enum value: CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_SUPPORTED = 1; + */ + SUPPORTED = 1, + + /** + * Cluster does not support disk expansion. + * + * @generated from enum value: CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_NOT_SUPPORTED = 2; + */ + NOT_SUPPORTED = 2, +} + +/** + * Describes the enum qdrant.cloud.cluster.v1.ClusterDiskExpansionSupportStatus. + */ +export declare const ClusterDiskExpansionSupportStatusSchema: GenEnum; + +/** + * ClusterBackupSupportStatus defines the backup support states of a cluster. + * + * @generated from enum qdrant.cloud.cluster.v1.ClusterBackupSupportStatus + */ +export enum ClusterBackupSupportStatus { + /** + * Backup support is unspecified. + * + * @generated from enum value: CLUSTER_BACKUP_SUPPORT_STATUS_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * Cluster supports backup. + * + * @generated from enum value: CLUSTER_BACKUP_SUPPORT_STATUS_SUPPORTED = 1; + */ + SUPPORTED = 1, + + /** + * Cluster does not support backup. + * + * @generated from enum value: CLUSTER_BACKUP_SUPPORT_STATUS_NOT_SUPPORTED = 2; + */ + NOT_SUPPORTED = 2, +} + +/** + * Describes the enum qdrant.cloud.cluster.v1.ClusterBackupSupportStatus. + */ +export declare const ClusterBackupSupportStatusSchema: GenEnum; + /** * ClusterService is the API used to configure cluster objects. * diff --git a/gen/typescript/qdrant/cloud/cluster/v1/cluster_pb.js b/gen/typescript/qdrant/cloud/cluster/v1/cluster_pb.js index 24f1c2ce..11d667c2 100644 --- a/gen/typescript/qdrant/cloud/cluster/v1/cluster_pb.js +++ b/gen/typescript/qdrant/cloud/cluster/v1/cluster_pb.js @@ -13,7 +13,7 @@ import { file_qdrant_cloud_event_v1_events } from "../../event/v1/events_pb.js"; * Describes the file qdrant/cloud/cluster/v1/cluster.proto. */ export const file_qdrant_cloud_cluster_v1_cluster = /*@__PURE__*/ - fileDesc("CiVxZHJhbnQvY2xvdWQvY2x1c3Rlci92MS9jbHVzdGVyLnByb3RvEhdxZHJhbnQuY2xvdWQuY2x1c3Rlci52MSLqBQoTTGlzdENsdXN0ZXJzUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABARInChFjbG91ZF9wcm92aWRlcl9pZBgKIAEoCUIHukgEcgIQA0gAiAEBEi4KGGNsb3VkX3Byb3ZpZGVyX3JlZ2lvbl9pZBgLIAEoCUIHukgEcgIQAUgBiAEBEiIKCXBhZ2Vfc2l6ZRgUIAEoBUIKukgHGgUY+gEgAEgCiAEBEiAKCnBhZ2VfdG9rZW4YFSABKAlCB7pIBHICEAFIA4gBATrFA7pIwQMasQEKJ2xpc3RfY2x1c3RlcnMuY2xvdWRfcHJvdmlkZXJfaWRfcHJlc2VudBJCY2xvdWRfcHJvdmlkZXJfaWQgaXMgcmVxdWlyZWQgd2hlbiBjbG91ZF9wcm92aWRlcl9yZWdpb25faWQgaXMgc2V0GkIhaGFzKHRoaXMuY2xvdWRfcHJvdmlkZXJfcmVnaW9uX2lkKSB8fCBoYXModGhpcy5jbG91ZF9wcm92aWRlcl9pZCkaigIKIGNsdXN0ZXIuY2xvdWRfcHJvdmlkZXJfcmVnaW9uX2lkEkhjbG91ZF9wcm92aWRlcl9yZWdpb25faWQgbXVzdCBiZSBhIFVVSUQgaWYgY2xvdWRfcHJvdmlkZXJfaWQgaXMgJ2h5YnJpZCcamwF0aGlzLmNsb3VkX3Byb3ZpZGVyX3JlZ2lvbl9pZC5tYXRjaGVzKCdeWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9JCcpIHx8IHRoaXMuY2xvdWRfcHJvdmlkZXJfaWQhPSAnaHlicmlkJ0IUChJfY2xvdWRfcHJvdmlkZXJfaWRCGwoZX2Nsb3VkX3Byb3ZpZGVyX3JlZ2lvbl9pZEIMCgpfcGFnZV9zaXplQg0KC19wYWdlX3Rva2VuIrMBChRMaXN0Q2x1c3RlcnNSZXNwb25zZRIvCgVpdGVtcxgBIAMoCzIgLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXISIAoKdG90YWxfc2l6ZRgKIAEoBUIHukgEGgIoAEgAiAEBEiUKD25leHRfcGFnZV90b2tlbhgLIAEoCUIHukgEcgIQAUgBiAEBQg0KC190b3RhbF9zaXplQhIKEF9uZXh0X3BhZ2VfdG9rZW4iTwoRR2V0Q2x1c3RlclJlcXVlc3QSHAoKYWNjb3VudF9pZBgBIAEoCUIIukgFcgOwAQESHAoKY2x1c3Rlcl9pZBgCIAEoCUIIukgFcgOwAQEiTwoSR2V0Q2x1c3RlclJlc3BvbnNlEjkKB2NsdXN0ZXIYASABKAsyIC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyQga6SAPIAQEixAIKFENyZWF0ZUNsdXN0ZXJSZXF1ZXN0EjkKB2NsdXN0ZXIYASABKAsyIC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyQga6SAPIAQE68AG6SOwBGukBCiJjcmVhdGVfY2x1c3Rlci5ub19yZWFkX29ubHlfZmllbGRzEk5yZWFkLW9ubHkgZmllbGRzIChpZCwgY3JlYXRlZF9hdCwgZGVsZXRlZF9hdCwgc3RhdGUpIG11c3Qgbm90IGJlIHNldCBvbiBjcmVhdGUac3RoaXMuY2x1c3Rlci5pZCA9PSAnJyAmJiAhaGFzKHRoaXMuY2x1c3Rlci5jcmVhdGVkX2F0KSAmJiAhaGFzKHRoaXMuY2x1c3Rlci5kZWxldGVkX2F0KSAmJiAhaGFzKHRoaXMuY2x1c3Rlci5zdGF0ZSkiuwEKFUNyZWF0ZUNsdXN0ZXJSZXNwb25zZRI5CgdjbHVzdGVyGAEgASgLMiAucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckIGukgDyAEBOme6SGQaYgocY3JlYXRlX2NsdXN0ZXIuc3RhdGVfcHJlc2VudBIpc3RhdGUgaXMgcmVxdWlyZWQgZm9yIGFuIGV4aXN0aW5nIGNsdXN0ZXIaF2hhcyh0aGlzLmNsdXN0ZXIuc3RhdGUpIrABChRVcGRhdGVDbHVzdGVyUmVxdWVzdBI5CgdjbHVzdGVyGAEgASgLMiAucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckIGukgDyAEBOl26SFoaWAoZdXBkYXRlX2NsdXN0ZXIuaWRfcHJlc2VudBIkY2x1c3Rlci5pZCBpcyByZXF1aXJlZCBmb3IgYW4gdXBkYXRlGhV0aGlzLmNsdXN0ZXIuaWQgIT0gJyciuwEKFVVwZGF0ZUNsdXN0ZXJSZXNwb25zZRI5CgdjbHVzdGVyGAEgASgLMiAucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckIGukgDyAEBOme6SGQaYgocdXBkYXRlX2NsdXN0ZXIuc3RhdGVfcHJlc2VudBIpc3RhdGUgaXMgcmVxdWlyZWQgZm9yIGFuIGV4aXN0aW5nIGNsdXN0ZXIaF2hhcyh0aGlzLmNsdXN0ZXIuc3RhdGUpIoIBChREZWxldGVDbHVzdGVyUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABARIcCgpjbHVzdGVyX2lkGAIgASgJQgi6SAVyA7ABARIbCg5kZWxldGVfYmFja3VwcxgDIAEoCEgAiAEBQhEKD19kZWxldGVfYmFja3VwcyIXChVEZWxldGVDbHVzdGVyUmVzcG9uc2UiUwoVUmVzdGFydENsdXN0ZXJSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBEhwKCmNsdXN0ZXJfaWQYAiABKAlCCLpIBXIDsAEBIhgKFlJlc3RhcnRDbHVzdGVyUmVzcG9uc2UiUwoVU3VzcGVuZENsdXN0ZXJSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBEhwKCmNsdXN0ZXJfaWQYAiABKAlCCLpIBXIDsAEBIhgKFlN1c3BlbmRDbHVzdGVyUmVzcG9uc2UiVQoXVW5zdXNwZW5kQ2x1c3RlclJlcXVlc3QSHAoKYWNjb3VudF9pZBgBIAEoCUIIukgFcgOwAQESHAoKY2x1c3Rlcl9pZBgCIAEoCUIIukgFcgOwAQEiGgoYVW5zdXNwZW5kQ2x1c3RlclJlc3BvbnNlIlkKG0VuYWJsZUNsdXN0ZXJKd3RSYmFjUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABARIcCgpjbHVzdGVyX2lkGAIgASgJQgi6SAVyA7ABASIeChxFbmFibGVDbHVzdGVySnd0UmJhY1Jlc3BvbnNlIjkKGVN1Z2dlc3RDbHVzdGVyTmFtZVJlcXVlc3QSHAoKYWNjb3VudF9pZBgBIAEoCUIIukgFcgOwAQEiMwoaU3VnZ2VzdENsdXN0ZXJOYW1lUmVzcG9uc2USFQoEbmFtZRgBIAEoCUIHukgEcgIQASJrChlMaXN0UWRyYW50UmVsZWFzZXNSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBEiEKCmNsdXN0ZXJfaWQYAiABKAlCCLpIBXIDsAEBSACIAQFCDQoLX2NsdXN0ZXJfaWQiUwoaTGlzdFFkcmFudFJlbGVhc2VzUmVzcG9uc2USNQoFaXRlbXMYASADKAsyJi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5RZHJhbnRSZWxlYXNlIlEKF0dldFFkcmFudFJlbGVhc2VSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBEhgKB3ZlcnNpb24YAiABKAlCB7pIBHICEAEiWwoYR2V0UWRyYW50UmVsZWFzZVJlc3BvbnNlEj8KB3JlbGVhc2UYASABKAsyJi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5RZHJhbnRSZWxlYXNlQga6SAPIAQEi1ggKB0NsdXN0ZXISCgoCaWQYASABKAkSLgoKY3JlYXRlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASHAoKYWNjb3VudF9pZBgDIAEoCUIIukgFcgOwAQESKQoEbmFtZRgEIAEoCUIbukgYchYQAhhAMhBeW2EtekEtWjAtOS1fXSskEi4KCmRlbGV0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiIKEWNsb3VkX3Byb3ZpZGVyX2lkGAogASgJQge6SARyAhADEikKGGNsb3VkX3Byb3ZpZGVyX3JlZ2lvbl9pZBgLIAEoCUIHukgEcgIQARI6CgZsYWJlbHMYDCADKAsyIC5xZHJhbnQuY2xvdWQuY29tbW9uLnYxLktleVZhbHVlQgi6SAWSAQIQChKyAQoVY29zdF9hbGxvY2F0aW9uX2xhYmVsGA0gASgJQo0BukiJAXKGARj9ATKAAV4oW2EtejAtOUEtWl0oWy1hLXowLTlBLVpdKlthLXowLTlBLVpdKT8oXC5bYS16MC05QS1aXShbLWEtejAtOUEtWl0qW2EtejAtOUEtWl0pPykqXC8pPyhbQS1aYS16MC05XVstQS1aYS16MC05Xy5dKik/W0EtWmEtejAtOV0kSACIAQESTAoNY29uZmlndXJhdGlvbhgUIAEoCzItLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJDb25maWd1cmF0aW9uQga6SAPIAQESNAoFc3RhdGUYZCABKAsyJS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyU3RhdGU6twO6SLMDGqMBCgpjbHVzdGVyLmlkEhp2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVVJRBp5dGhpcy5pZC5tYXRjaGVzKCdeWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9JCcpIHx8ICFoYXModGhpcy5jcmVhdGVkX2F0KRqKAgogY2x1c3Rlci5jbG91ZF9wcm92aWRlcl9yZWdpb25faWQSSGNsb3VkX3Byb3ZpZGVyX3JlZ2lvbl9pZCBtdXN0IGJlIGEgVVVJRCBpZiBjbG91ZF9wcm92aWRlcl9pZCBpcyAnaHlicmlkJxqbAXRoaXMuY2xvdWRfcHJvdmlkZXJfcmVnaW9uX2lkLm1hdGNoZXMoJ15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kJykgfHwgdGhpcy5jbG91ZF9wcm92aWRlcl9pZCE9ICdoeWJyaWQnQhgKFl9jb3N0X2FsbG9jYXRpb25fbGFiZWwigA0KFENsdXN0ZXJDb25maWd1cmF0aW9uEjQKEGxhc3RfbW9kaWZpZWRfYXQYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiAKD251bWJlcl9vZl9ub2RlcxgCIAEoDUIHukgEKgIoARI8Cgd2ZXJzaW9uGAMgASgJQia6SCNyITIfXih2KFxkKylcLihcZCspXC4oXGQrKXxsYXRlc3QpJEgAiAEBEhwKCnBhY2thZ2VfaWQYBCABKAlCCLpIBXIDsAEBEk8KFGFkZGl0aW9uYWxfcmVzb3VyY2VzGAUgASgLMiwucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQWRkaXRpb25hbFJlc291cmNlc0gBiAEBElMKFmRhdGFiYXNlX2NvbmZpZ3VyYXRpb24YByABKAsyLi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25IAogBARJBCg1ub2RlX3NlbGVjdG9yGAggAygLMiAucWRyYW50LmNsb3VkLmNvbW1vbi52MS5LZXlWYWx1ZUIIukgFkgECEAoSQgoLdG9sZXJhdGlvbnMYCSADKAsyIy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5Ub2xlcmF0aW9uQgi6SAWSAQIQChI/Cgthbm5vdGF0aW9ucxgKIAMoCzIgLnFkcmFudC5jbG91ZC5jb21tb24udjEuS2V5VmFsdWVCCLpIBZIBAhAKEjEKGGFsbG93ZWRfaXBfc291cmNlX3JhbmdlcxgLIAMoCUIPukgMkgEJECgiBXID8AEBElIKDHNlcnZpY2VfdHlwZRgMIAEoDjIrLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJTZXJ2aWNlVHlwZUIKukgHggEEEAEgAEgDiAEBEkcKE3NlcnZpY2VfYW5ub3RhdGlvbnMYDSADKAsyIC5xZHJhbnQuY2xvdWQuY29tbW9uLnYxLktleVZhbHVlQgi6SAWSAQIQQBI+Cgpwb2RfbGFiZWxzGA4gAygLMiAucWRyYW50LmNsb3VkLmNvbW1vbi52MS5LZXlWYWx1ZUIIukgFkgECEAoSLwoXcmVzZXJ2ZWRfY3B1X3BlcmNlbnRhZ2UYFCABKA1CCbpIBioEGFAoAUgEiAEBEjIKGnJlc2VydmVkX21lbW9yeV9wZXJjZW50YWdlGBUgASgNQgm6SAYqBBhQKAFIBYgBARJXCghncHVfdHlwZRgWIAEoDjI0LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJDb25maWd1cmF0aW9uR3B1VHlwZUIKukgHggEEEAEgAEgGiAEBEmMKDnJlc3RhcnRfcG9saWN5GBcgASgOMjoucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckNvbmZpZ3VyYXRpb25SZXN0YXJ0UG9saWN5Qgq6SAeCAQQQASAASAeIAQESawoScmViYWxhbmNlX3N0cmF0ZWd5GBggASgOMj4ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckNvbmZpZ3VyYXRpb25SZWJhbGFuY2VTdHJhdGVneUIKukgHggEEEAEgAEgIiAEBEl8KG3RvcG9sb2d5X3NwcmVhZF9jb25zdHJhaW50cxgZIAMoCzIwLnFkcmFudC5jbG91ZC5jb21tb24udjEuVG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50Qgi6SAWSAQIQChJgCh1jbHVzdGVyX3N0b3JhZ2VfY29uZmlndXJhdGlvbhgaIAEoCzI0LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJTdG9yYWdlQ29uZmlndXJhdGlvbkgJiAEBQgoKCF92ZXJzaW9uQhcKFV9hZGRpdGlvbmFsX3Jlc291cmNlc0IZChdfZGF0YWJhc2VfY29uZmlndXJhdGlvbkIPCg1fc2VydmljZV90eXBlQhoKGF9yZXNlcnZlZF9jcHVfcGVyY2VudGFnZUIdChtfcmVzZXJ2ZWRfbWVtb3J5X3BlcmNlbnRhZ2VCCwoJX2dwdV90eXBlQhEKD19yZXN0YXJ0X3BvbGljeUIVChNfcmViYWxhbmNlX3N0cmF0ZWd5QiAKHl9jbHVzdGVyX3N0b3JhZ2VfY29uZmlndXJhdGlvbiKrBQoVRGF0YWJhc2VDb25maWd1cmF0aW9uElEKCmNvbGxlY3Rpb24YASABKAsyOC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25Db2xsZWN0aW9uSACIAQESSwoHc3RvcmFnZRgCIAEoCzI1LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkRhdGFiYXNlQ29uZmlndXJhdGlvblN0b3JhZ2VIAYgBARJLCgdzZXJ2aWNlGAMgASgLMjUucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuRGF0YWJhc2VDb25maWd1cmF0aW9uU2VydmljZUgCiAEBEloKCWxvZ19sZXZlbBgEIAEoDjI2LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkRhdGFiYXNlQ29uZmlndXJhdGlvbkxvZ0xldmVsQgq6SAeCAQQQASAASAOIAQESQwoDdGxzGAUgASgLMjEucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuRGF0YWJhc2VDb25maWd1cmF0aW9uVGxzSASIAQESTwoJaW5mZXJlbmNlGAYgASgLMjcucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuRGF0YWJhc2VDb25maWd1cmF0aW9uSW5mZXJlbmNlSAWIAQESVgoNYXVkaXRfbG9nZ2luZxgHIAEoCzI6LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkRhdGFiYXNlQ29uZmlndXJhdGlvbkF1ZGl0TG9nZ2luZ0gGiAEBQg0KC19jb2xsZWN0aW9uQgoKCF9zdG9yYWdlQgoKCF9zZXJ2aWNlQgwKCl9sb2dfbGV2ZWxCBgoEX3Rsc0IMCgpfaW5mZXJlbmNlQhAKDl9hdWRpdF9sb2dnaW5nIpICCh9EYXRhYmFzZUNvbmZpZ3VyYXRpb25Db2xsZWN0aW9uEigKEnJlcGxpY2F0aW9uX2ZhY3RvchgBIAEoDUIHukgEKgIoAUgAiAEBEi4KGHdyaXRlX2NvbnNpc3RlbmN5X2ZhY3RvchgCIAEoBUIHukgEGgIoAUgBiAEBElUKB3ZlY3RvcnMYAyABKAsyPy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25Db2xsZWN0aW9uVmVjdG9yc0gCiAEBQhUKE19yZXBsaWNhdGlvbl9mYWN0b3JCGwoZX3dyaXRlX2NvbnNpc3RlbmN5X2ZhY3RvckIKCghfdmVjdG9ycyJKCiZEYXRhYmFzZUNvbmZpZ3VyYXRpb25Db2xsZWN0aW9uVmVjdG9ycxIUCgdvbl9kaXNrGAEgASgISACIAQFCCgoIX29uX2Rpc2siigEKHERhdGFiYXNlQ29uZmlndXJhdGlvblN0b3JhZ2USWgoLcGVyZm9ybWFuY2UYASABKAsyQC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25TdG9yYWdlUGVyZm9ybWFuY2VIAIgBAUIOCgxfcGVyZm9ybWFuY2UikQEKJ0RhdGFiYXNlQ29uZmlndXJhdGlvblN0b3JhZ2VQZXJmb3JtYW5jZRIhChRvcHRpbWl6ZXJfY3B1X2J1ZGdldBgBIAEoBUgAiAEBEhkKDGFzeW5jX3Njb3JlchgCIAEoCEgBiAEBQhcKFV9vcHRpbWl6ZXJfY3B1X2J1ZGdldEIPCg1fYXN5bmNfc2NvcmVyIvABChxEYXRhYmFzZUNvbmZpZ3VyYXRpb25TZXJ2aWNlEjoKB2FwaV9rZXkYASABKAsyJC5xZHJhbnQuY2xvdWQuY29tbW9uLnYxLlNlY3JldEtleVJlZkgAiAEBEkQKEXJlYWRfb25seV9hcGlfa2V5GAIgASgLMiQucWRyYW50LmNsb3VkLmNvbW1vbi52MS5TZWNyZXRLZXlSZWZIAYgBARIXCgplbmFibGVfdGxzGAQgASgISAKIAQFCCgoIX2FwaV9rZXlCFAoSX3JlYWRfb25seV9hcGlfa2V5Qg0KC19lbmFibGVfdGxzSgQIAxAEIpEBChhEYXRhYmFzZUNvbmZpZ3VyYXRpb25UbHMSOgoEY2VydBgBIAEoCzIkLnFkcmFudC5jbG91ZC5jb21tb24udjEuU2VjcmV0S2V5UmVmQga6SAPIAQESOQoDa2V5GAIgASgLMiQucWRyYW50LmNsb3VkLmNvbW1vbi52MS5TZWNyZXRLZXlSZWZCBrpIA8gBASIxCh5EYXRhYmFzZUNvbmZpZ3VyYXRpb25JbmZlcmVuY2USDwoHZW5hYmxlZBgBIAEoCCIjChNBZGRpdGlvbmFsUmVzb3VyY2VzEgwKBGRpc2sYAyABKA0i/wEKIURhdGFiYXNlQ29uZmlndXJhdGlvbkF1ZGl0TG9nZ2luZxIPCgdlbmFibGVkGAEgASgIEkAKCHJvdGF0aW9uGAIgASgOMikucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQXVkaXRMb2dSb3RhdGlvbkgAiAEBEiYKDW1heF9sb2dfZmlsZXMYAyABKA1CCrpIByoFGOgHKAFIAYgBARIkChd0cnVzdF9mb3J3YXJkZWRfaGVhZGVycxgEIAEoCEgCiAEBQgsKCV9yb3RhdGlvbkIQCg5fbWF4X2xvZ19maWxlc0IaChhfdHJ1c3RfZm9yd2FyZGVkX2hlYWRlcnMi8wkKClRvbGVyYXRpb24SGgoDa2V5GAEgASgJQgi6SAVyAxi9AkgAiAEBEk4KCG9wZXJhdG9yGAIgASgOMisucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuVG9sZXJhdGlvbk9wZXJhdG9yQgq6SAeCAQQQASAASAGIAQESRgoFdmFsdWUYAyABKAlCMrpIL3ItMisoKFtBLVphLXowLTldWy1BLVphLXowLTlfLl0qKT9bQS1aYS16MC05XSk/SAKIAQESSgoGZWZmZWN0GAQgASgOMikucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuVG9sZXJhdGlvbkVmZmVjdEIKukgHggEEEAEgAEgDiAEBEigKEnRvbGVyYXRpb25fc2Vjb25kcxgFIAEoBEIHukgEMgIoAEgEiAEBOvkGukj1Bhp0Cht0b2xlcmF0aW9uLnZhbHVlX2Zvcl9leGlzdHMSLXZhbHVlIG11c3Qgbm90IGJlIHNldCB3aGVuIG9wZXJhdG9yIGlzIEV4aXN0cxomdGhpcy5vcGVyYXRvciAhPSAxIHx8ICFoYXModGhpcy52YWx1ZSkargEKGnRvbGVyYXRpb24udmFsdWVfZm9yX2VxdWFsElF2YWx1ZSBtdXN0IGJlIHNldCB3aGVuIG9wZXJhdG9yIGlzIEVxdWFsIChvciBpcyBub3Qgc2V0LCB3aGljaCBkZWZhdWx0cyB0byBFcXVhbCkaPShoYXModGhpcy5vcGVyYXRvcikgJiYgdGhpcy5vcGVyYXRvciAhPSAyKSB8fCBoYXModGhpcy52YWx1ZSkapwIKInRvbGVyYXRpb24ua2V5X2Zvcm1hdF93aGVuX3ByZXNlbnQSRGtleSBtdXN0IGJlIGEgdmFsaWQgS3ViZXJuZXRlcyBxdWFsaWZpZWQgbmFtZSB3aGVuIHNldCBhbmQgbm9uLWVtcHR5GroBIWhhcyh0aGlzLmtleSkgfHwgdGhpcy5rZXkgPT0gJycgfHwgdGhpcy5rZXkubWF0Y2hlcygnXihbQS1aYS16MC05XShbLUEtWmEtejAtOV0qW0EtWmEtejAtOV0pPyhcXC5bQS1aYS16MC05XShbLUEtWmEtejAtOV0qW0EtWmEtejAtOV0pPykqXFwvKT8oW0EtWmEtejAtOV1bLUEtWmEtejAtOV8uXSopP1tBLVphLXowLTldJCcpGooBCiR0b2xlcmF0aW9uLmtleV9lbXB0eV9yZXF1aXJlc19leGlzdHMSKW9wZXJhdG9yIG11c3QgYmUgJ0V4aXN0cycgaWYga2V5IGlzIGVtcHR5GjcoaGFzKHRoaXMua2V5KSAmJiB0aGlzLmtleSAhPSAnJykgfHwgdGhpcy5vcGVyYXRvciA9PSAxGpQBCiV0b2xlcmF0aW9uLnNlY29uZHNfb25seV9mb3Jfbm9leGVjdXRlEjh0b2xlcmF0aW9uU2Vjb25kcyBpcyBvbmx5IHZhbGlkIHdoZW4gZWZmZWN0IGlzIE5vRXhlY3V0ZRoxIWhhcyh0aGlzLnRvbGVyYXRpb25fc2Vjb25kcykgfHwgdGhpcy5lZmZlY3QgPT0gM0IGCgRfa2V5QgsKCV9vcGVyYXRvckIICgZfdmFsdWVCCQoHX2VmZmVjdEIVChNfdG9sZXJhdGlvbl9zZWNvbmRzIoUDChtDbHVzdGVyU3RvcmFnZUNvbmZpZ3VyYXRpb24SQgoRc3RvcmFnZV90aWVyX3R5cGUYASABKA4yJy5xZHJhbnQuY2xvdWQuY29tbW9uLnYxLlN0b3JhZ2VUaWVyVHlwZRIsChZkYXRhYmFzZV9zdG9yYWdlX2NsYXNzGAIgASgJQge6SARyAhABSACIAQESLAoWc25hcHNob3Rfc3RvcmFnZV9jbGFzcxgDIAEoCUIHukgEcgIQAUgBiAEBEisKFXZvbHVtZV9zbmFwc2hvdF9jbGFzcxgEIAEoCUIHukgEcgIQAUgCiAEBEi0KF3ZvbHVtZV9hdHRyaWJ1dGVzX2NsYXNzGAUgASgJQge6SARyAhABSAOIAQFCGQoXX2RhdGFiYXNlX3N0b3JhZ2VfY2xhc3NCGQoXX3NuYXBzaG90X3N0b3JhZ2VfY2xhc3NCGAoWX3ZvbHVtZV9zbmFwc2hvdF9jbGFzc0IaChhfdm9sdW1lX2F0dHJpYnV0ZXNfY2xhc3Mi7wMKDENsdXN0ZXJTdGF0ZRIYCgd2ZXJzaW9uGAEgASgJQge6SARyAhABEhAKCG5vZGVzX3VwGAIgASgNEjAKDHJlc3RhcnRlZF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASPgoFcGhhc2UYBCABKA4yJS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyUGhhc2VCCLpIBYIBAhABEg4KBnJlYXNvbhgFIAEoCRJCCghlbmRwb2ludBgGIAEoCzIoLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJFbmRwb2ludEIGukgDyAEBEk8KCXJlc291cmNlcxgHIAEoCzI0LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJOb2RlUmVzb3VyY2VzU3VtbWFyeUIGukgDyAEBElEKEHNjYWxhYmlsaXR5X2luZm8YCCABKAsyLy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyU2NhbGFiaWxpdHlJbmZvQga6SAPIAQESNwoFbm9kZXMYCSADKAsyKC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyTm9kZUluZm8SEAoIand0X3JiYWMYCiABKAginwIKD0NsdXN0ZXJOb2RlSW5mbxIVCgRuYW1lGAEgASgJQge6SARyAhABEi4KCnN0YXJ0ZWRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg8KB3ZlcnNpb24YAyABKAkSOgoIZW5kcG9pbnQYBCABKAsyKC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyRW5kcG9pbnQSQgoFc3RhdGUYCiABKA4yKS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyTm9kZVN0YXRlQgi6SAWCAQIQARIeChFhdmFpbGFiaWxpdHlfem9uZRgLIAEoCUgAiAEBQhQKEl9hdmFpbGFiaWxpdHlfem9uZSJgCg9DbHVzdGVyRW5kcG9pbnQSFQoDdXJsGAEgASgJQgi6SAVyA4gBARIaCglyZXN0X3BvcnQYAiABKAVCB7pIBBoCIAASGgoJZ3JwY19wb3J0GAMgASgFQge6SAQaAiAAIoQDChtDbHVzdGVyTm9kZVJlc291cmNlc1N1bW1hcnkSQwoEZGlzaxgBIAEoCzItLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJOb2RlUmVzb3VyY2VzQga6SAPIAQESQgoDcmFtGAIgASgLMi0ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3Rlck5vZGVSZXNvdXJjZXNCBrpIA8gBARJCCgNjcHUYAyABKAsyLS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyTm9kZVJlc291cmNlc0IGukgDyAEBEj8KA2dwdRgEIAEoCzItLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJOb2RlUmVzb3VyY2VzSACIAQESQwoHZ3B1X3JhbRgFIAEoCzItLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJOb2RlUmVzb3VyY2VzSAGIAQFCBgoEX2dwdUIKCghfZ3B1X3JhbSLEAQoUQ2x1c3Rlck5vZGVSZXNvdXJjZXMSHAoEYmFzZRgBIAEoAUIOukgLEgkpAAAAAAAAAAASJQoNY29tcGxpbWVudGFyeRgCIAEoAUIOukgLEgkpAAAAAAAAAAASIgoKYWRkaXRpb25hbBgDIAEoAUIOukgLEgkpAAAAAAAAAAASIAoIcmVzZXJ2ZWQYBCABKAFCDrpICxIJKQAAAAAAAAAAEiEKCWF2YWlsYWJsZRgFIAEoAUIOukgLEgkpAAAAAAAAAAAikAEKFkNsdXN0ZXJTY2FsYWJpbGl0eUluZm8STQoGc3RhdHVzGAEgASgOMjEucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlclNjYWxhYmlsaXR5U3RhdHVzQgq6SAeCAQQQASAAEhwKBnJlYXNvbhgCIAEoCUIHukgEcgIQAUgAiAEBQgkKB19yZWFzb24izwEKDVFkcmFudFJlbGVhc2USGAoHdmVyc2lvbhgBIAEoCUIHukgEcgIQARIPCgdkZWZhdWx0GAIgASgIEigKEXJlbGVhc2Vfbm90ZXNfdXJsGAMgASgJQgi6SAVyA4gBAUgAiAEBEh0KB3JlbWFya3MYBCABKAlCB7pIBHICEAFIAYgBARITCgtlbmRfb2ZfbGlmZRgFIAEoCBITCgt1bmF2YWlsYWJsZRgGIAEoCEIUChJfcmVsZWFzZV9ub3Rlc191cmxCCgoIX3JlbWFya3MijgEKHkNyZWF0ZUNsdXN0ZXJGcm9tQmFja3VwUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABARIbCgliYWNrdXBfaWQYAiABKAlCCLpIBXIDsAEBEjEKDGNsdXN0ZXJfbmFtZRgDIAEoCUIbukgYchYQBBhAMhBeW2EtekEtWjAtOS1fXSskIlwKH0NyZWF0ZUNsdXN0ZXJGcm9tQmFja3VwUmVzcG9uc2USOQoHY2x1c3RlchgBIAEoCzIgLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJCBrpIA8gBASqrAQoSQ2x1c3RlclNlcnZpY2VUeXBlEiQKIENMVVNURVJfU0VSVklDRV9UWVBFX1VOU1BFQ0lGSUVEEAASIwofQ0xVU1RFUl9TRVJWSUNFX1RZUEVfQ0xVU1RFUl9JUBABEiIKHkNMVVNURVJfU0VSVklDRV9UWVBFX05PREVfUE9SVBACEiYKIkNMVVNURVJfU0VSVklDRV9UWVBFX0xPQURfQkFMQU5DRVIQAyqgAQobQ2x1c3RlckNvbmZpZ3VyYXRpb25HcHVUeXBlEi4KKkNMVVNURVJfQ09ORklHVVJBVElPTl9HUFVfVFlQRV9VTlNQRUNJRklFRBAAEikKJUNMVVNURVJfQ09ORklHVVJBVElPTl9HUFVfVFlQRV9OVklESUEQARImCiJDTFVTVEVSX0NPTkZJR1VSQVRJT05fR1BVX1RZUEVfQU1EEAIq8gEKIUNsdXN0ZXJDb25maWd1cmF0aW9uUmVzdGFydFBvbGljeRI0CjBDTFVTVEVSX0NPTkZJR1VSQVRJT05fUkVTVEFSVF9QT0xJQ1lfVU5TUEVDSUZJRUQQABIwCixDTFVTVEVSX0NPTkZJR1VSQVRJT05fUkVTVEFSVF9QT0xJQ1lfUk9MTElORxABEjEKLUNMVVNURVJfQ09ORklHVVJBVElPTl9SRVNUQVJUX1BPTElDWV9QQVJBTExFTBACEjIKLkNMVVNURVJfQ09ORklHVVJBVElPTl9SRVNUQVJUX1BPTElDWV9BVVRPTUFUSUMQAyqOAgolQ2x1c3RlckNvbmZpZ3VyYXRpb25SZWJhbGFuY2VTdHJhdGVneRI4CjRDTFVTVEVSX0NPTkZJR1VSQVRJT05fUkVCQUxBTkNFX1NUUkFURUdZX1VOU1BFQ0lGSUVEEAASNQoxQ0xVU1RFUl9DT05GSUdVUkFUSU9OX1JFQkFMQU5DRV9TVFJBVEVHWV9CWV9DT1VOVBABEjQKMENMVVNURVJfQ09ORklHVVJBVElPTl9SRUJBTEFOQ0VfU1RSQVRFR1lfQllfU0laRRACEj4KOkNMVVNURVJfQ09ORklHVVJBVElPTl9SRUJBTEFOQ0VfU1RSQVRFR1lfQllfQ09VTlRfQU5EX1NJWkUQAyrVAgodRGF0YWJhc2VDb25maWd1cmF0aW9uTG9nTGV2ZWwSMAosREFUQUJBU0VfQ09ORklHVVJBVElPTl9MT0dfTEVWRUxfVU5TUEVDSUZJRUQQABIqCiZEQVRBQkFTRV9DT05GSUdVUkFUSU9OX0xPR19MRVZFTF9UUkFDRRABEioKJkRBVEFCQVNFX0NPTkZJR1VSQVRJT05fTE9HX0xFVkVMX0RFQlVHEAISKQolREFUQUJBU0VfQ09ORklHVVJBVElPTl9MT0dfTEVWRUxfSU5GTxADEikKJURBVEFCQVNFX0NPTkZJR1VSQVRJT05fTE9HX0xFVkVMX1dBUk4QBBIqCiZEQVRBQkFTRV9DT05GSUdVUkFUSU9OX0xPR19MRVZFTF9FUlJPUhAFEigKJERBVEFCQVNFX0NPTkZJR1VSQVRJT05fTE9HX0xFVkVMX09GRhAGKnMKEEF1ZGl0TG9nUm90YXRpb24SIgoeQVVESVRfTE9HX1JPVEFUSU9OX1VOU1BFQ0lGSUVEEAASHAoYQVVESVRfTE9HX1JPVEFUSU9OX0RBSUxZEAESHQoZQVVESVRfTE9HX1JPVEFUSU9OX0hPVVJMWRACKngKElRvbGVyYXRpb25PcGVyYXRvchIjCh9UT0xFUkFUSU9OX09QRVJBVE9SX1VOU1BFQ0lGSUVEEAASHgoaVE9MRVJBVElPTl9PUEVSQVRPUl9FWElTVFMQARIdChlUT0xFUkFUSU9OX09QRVJBVE9SX0VRVUFMEAIqpAEKEFRvbGVyYXRpb25FZmZlY3QSIQodVE9MRVJBVElPTl9FRkZFQ1RfVU5TUEVDSUZJRUQQABIhCh1UT0xFUkFUSU9OX0VGRkVDVF9OT19TQ0hFRFVMRRABEigKJFRPTEVSQVRJT05fRUZGRUNUX1BSRUZFUl9OT19TQ0hFRFVMRRACEiAKHFRPTEVSQVRJT05fRUZGRUNUX05PX0VYRUNVVEUQAyrfBAoMQ2x1c3RlclBoYXNlEh0KGUNMVVNURVJfUEhBU0VfVU5TUEVDSUZJRUQQABIaChZDTFVTVEVSX1BIQVNFX0NSRUFUSU5HEAESIgoeQ0xVU1RFUl9QSEFTRV9GQUlMRURfVE9fQ1JFQVRFEAISGgoWQ0xVU1RFUl9QSEFTRV9VUERBVElORxADEiIKHkNMVVNURVJfUEhBU0VfRkFJTEVEX1RPX1VQREFURRAEEhkKFUNMVVNURVJfUEhBU0VfU0NBTElORxAFEhsKF0NMVVNURVJfUEhBU0VfVVBHUkFESU5HEAYSHAoYQ0xVU1RFUl9QSEFTRV9TVVNQRU5ESU5HEAcSGwoXQ0xVU1RFUl9QSEFTRV9TVVNQRU5ERUQQCBIjCh9DTFVTVEVSX1BIQVNFX0ZBSUxFRF9UT19TVVNQRU5EEAkSGgoWQ0xVU1RFUl9QSEFTRV9SRVNVTUlORxAKEiIKHkNMVVNURVJfUEhBU0VfRkFJTEVEX1RPX1JFU1VNRRALEhkKFUNMVVNURVJfUEhBU0VfSEVBTFRIWRAMEhsKF0NMVVNURVJfUEhBU0VfTk9UX1JFQURZEA0SHwobQ0xVU1RFUl9QSEFTRV9SRUNPVkVSWV9NT0RFEA4SJAogQ0xVU1RFUl9QSEFTRV9NQU5VQUxfTUFJTlRFTkFOQ0UQDxIgChxDTFVTVEVSX1BIQVNFX0ZBSUxFRF9UT19TWU5DEBASGwoXQ0xVU1RFUl9QSEFTRV9OT1RfRk9VTkQQERIaChZDTFVTVEVSX1BIQVNFX0RFTEVUSU5HEBIq3gEKEENsdXN0ZXJOb2RlU3RhdGUSIgoeQ0xVU1RFUl9OT0RFX1NUQVRFX1VOU1BFQ0lGSUVEEAASHwobQ0xVU1RFUl9OT0RFX1NUQVRFX1NUQVJUSU5HEAESHgoaQ0xVU1RFUl9OT0RFX1NUQVRFX0hFQUxUSFkQAhIgChxDTFVTVEVSX05PREVfU1RBVEVfVU5IRUFMVEhZEAMSIAocQ0xVU1RFUl9OT0RFX1NUQVRFX1NVU1BFTkRFRBAEEiEKHUNMVVNURVJfTk9ERV9TVEFURV9SRUNPVkVSSU5HEAUqnAEKGENsdXN0ZXJTY2FsYWJpbGl0eVN0YXR1cxIqCiZDTFVTVEVSX1NDQUxBQklMSVRZX1NUQVRVU19VTlNQRUNJRklFRBAAEisKJ0NMVVNURVJfU0NBTEFCSUxJVFlfU1RBVFVTX05PVF9TQ0FMQUJMRRABEicKI0NMVVNURVJfU0NBTEFCSUxJVFlfU1RBVFVTX1NDQUxBQkxFEAIyyx4KDkNsdXN0ZXJTZXJ2aWNlErQBCgxMaXN0Q2x1c3RlcnMSLC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5MaXN0Q2x1c3RlcnNSZXF1ZXN0Gi0ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuTGlzdENsdXN0ZXJzUmVzcG9uc2UiR4q1GA1yZWFkOmNsdXN0ZXJzgtPkkwIwEi4vYXBpL2NsdXN0ZXIvdjEvYWNjb3VudHMve2FjY291bnRfaWR9L2NsdXN0ZXJzEtcBCgpHZXRDbHVzdGVyEioucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuR2V0Q2x1c3RlclJlcXVlc3QaKy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5HZXRDbHVzdGVyUmVzcG9uc2UicIq1GA1yZWFkOmNsdXN0ZXJzurUYGAoKY2x1c3Rlcl9pZBIKY2x1c3Rlcl9pZILT5JMCPRI7L2FwaS9jbHVzdGVyL3YxL2FjY291bnRzL3thY2NvdW50X2lkfS9jbHVzdGVycy97Y2x1c3Rlcl9pZH0S2QIKDUNyZWF0ZUNsdXN0ZXISLS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DcmVhdGVDbHVzdGVyUmVxdWVzdBouLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNyZWF0ZUNsdXN0ZXJSZXNwb25zZSLoAYq1GA53cml0ZTpjbHVzdGVyc5K1GBJjbHVzdGVyLmFjY291bnRfaWS6tRgcCgxjbHVzdGVyX25hbWUSDGNsdXN0ZXIubmFtZcrzGFsIARIHY2x1c3RlciIPcmVzcC5jbHVzdGVyLmlkKj0vYWNjb3VudHMve3JlcS5jbHVzdGVyLmFjY291bnRfaWR9L2NsdXN0ZXJzL3tyZXNwLmNsdXN0ZXIuaWR9gtPkkwI7OgEqIjYvYXBpL2NsdXN0ZXIvdjEvYWNjb3VudHMve2NsdXN0ZXIuYWNjb3VudF9pZH0vY2x1c3RlcnMStAMKF0NyZWF0ZUNsdXN0ZXJGcm9tQmFja3VwEjcucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ3JlYXRlQ2x1c3RlckZyb21CYWNrdXBSZXF1ZXN0GjgucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ3JlYXRlQ2x1c3RlckZyb21CYWNrdXBSZXNwb25zZSKlAoq1GA9yZXN0b3JlOmJhY2t1cHOKtRgOd3JpdGU6Y2x1c3RlcnOotRgBurUYFgoJYmFja3VwX2lkEgliYWNrdXBfaWS6tRgcCgxjbHVzdGVyX25hbWUSDGNsdXN0ZXJfbmFtZcrzGHQIARIHY2x1c3RlciIPcmVzcC5jbHVzdGVyLmlkKjUvYWNjb3VudHMve3JlcS5hY2NvdW50X2lkfS9jbHVzdGVycy97cmVzcC5jbHVzdGVyLmlkfVIfCg5mcm9tX2JhY2t1cF9pZBINcmVxLmJhY2t1cF9pZILT5JMCRCJCL2FwaS9jbHVzdGVyL3YxL2FjY291bnRzL3thY2NvdW50X2lkfS9iYWNrdXBzL3tiYWNrdXBfaWR9L2NsdXN0ZXJzEuACCg1VcGRhdGVDbHVzdGVyEi0ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuVXBkYXRlQ2x1c3RlclJlcXVlc3QaLi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5VcGRhdGVDbHVzdGVyUmVzcG9uc2Ui7wGKtRgOd3JpdGU6Y2x1c3RlcnOStRgSY2x1c3Rlci5hY2NvdW50X2lkurUYGAoKY2x1c3Rlcl9pZBIKY2x1c3Rlci5pZMrzGFkIAhIHY2x1c3RlciIOcmVxLmNsdXN0ZXIuaWQqPC9hY2NvdW50cy97cmVxLmNsdXN0ZXIuYWNjb3VudF9pZH0vY2x1c3RlcnMve3JlcS5jbHVzdGVyLmlkfYLT5JMCSDoBKhpDL2FwaS9jbHVzdGVyL3YxL2FjY291bnRzL3tjbHVzdGVyLmFjY291bnRfaWR9L2NsdXN0ZXJzL3tjbHVzdGVyLmlkfRK4AgoNRGVsZXRlQ2x1c3RlchItLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkRlbGV0ZUNsdXN0ZXJSZXF1ZXN0Gi4ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuRGVsZXRlQ2x1c3RlclJlc3BvbnNlIscBirUYD2RlbGV0ZTpjbHVzdGVyc7q1GBgKCmNsdXN0ZXJfaWQSCmNsdXN0ZXJfaWTK8xhRCAMSB2NsdXN0ZXIiDnJlcS5jbHVzdGVyX2lkKjQvYWNjb3VudHMve3JlcS5hY2NvdW50X2lkfS9jbHVzdGVycy97cmVxLmNsdXN0ZXJfaWR9gtPkkwI9KjsvYXBpL2NsdXN0ZXIvdjEvYWNjb3VudHMve2FjY291bnRfaWR9L2NsdXN0ZXJzL3tjbHVzdGVyX2lkfRLLAgoOUmVzdGFydENsdXN0ZXISLi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5SZXN0YXJ0Q2x1c3RlclJlcXVlc3QaLy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5SZXN0YXJ0Q2x1c3RlclJlc3BvbnNlItcBirUYDndyaXRlOmNsdXN0ZXJzurUYGAoKY2x1c3Rlcl9pZBIKY2x1c3Rlcl9pZMrzGFoIBBIHY2x1c3RlciIOcmVxLmNsdXN0ZXJfaWQqNC9hY2NvdW50cy97cmVxLmFjY291bnRfaWR9L2NsdXN0ZXJzL3tyZXEuY2x1c3Rlcl9pZH0yB3Jlc3RhcnSC0+STAkUiQy9hcGkvY2x1c3Rlci92MS9hY2NvdW50cy97YWNjb3VudF9pZH0vY2x1c3RlcnMve2NsdXN0ZXJfaWR9L3Jlc3RhcnQSywIKDlN1c3BlbmRDbHVzdGVyEi4ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuU3VzcGVuZENsdXN0ZXJSZXF1ZXN0Gi8ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuU3VzcGVuZENsdXN0ZXJSZXNwb25zZSLXAYq1GA53cml0ZTpjbHVzdGVyc7q1GBgKCmNsdXN0ZXJfaWQSCmNsdXN0ZXJfaWTK8xhaCAQSB2NsdXN0ZXIiDnJlcS5jbHVzdGVyX2lkKjQvYWNjb3VudHMve3JlcS5hY2NvdW50X2lkfS9jbHVzdGVycy97cmVxLmNsdXN0ZXJfaWR9MgdzdXNwZW5kgtPkkwJFIkMvYXBpL2NsdXN0ZXIvdjEvYWNjb3VudHMve2FjY291bnRfaWR9L2NsdXN0ZXJzL3tjbHVzdGVyX2lkfS9zdXNwZW5kEtUCChBVbnN1c3BlbmRDbHVzdGVyEjAucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuVW5zdXNwZW5kQ2x1c3RlclJlcXVlc3QaMS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5VbnN1c3BlbmRDbHVzdGVyUmVzcG9uc2Ui2wGKtRgOd3JpdGU6Y2x1c3RlcnO6tRgYCgpjbHVzdGVyX2lkEgpjbHVzdGVyX2lkyvMYXAgEEgdjbHVzdGVyIg5yZXEuY2x1c3Rlcl9pZCo0L2FjY291bnRzL3tyZXEuYWNjb3VudF9pZH0vY2x1c3RlcnMve3JlcS5jbHVzdGVyX2lkfTIJdW5zdXNwZW5kgtPkkwJHIkUvYXBpL2NsdXN0ZXIvdjEvYWNjb3VudHMve2FjY291bnRfaWR9L2NsdXN0ZXJzL3tjbHVzdGVyX2lkfS91bnN1c3BlbmQS6QIKFEVuYWJsZUNsdXN0ZXJKd3RSYmFjEjQucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuRW5hYmxlQ2x1c3Rlckp3dFJiYWNSZXF1ZXN0GjUucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuRW5hYmxlQ2x1c3Rlckp3dFJiYWNSZXNwb25zZSLjAYq1GA53cml0ZTpjbHVzdGVyc7q1GBgKCmNsdXN0ZXJfaWQSCmNsdXN0ZXJfaWTK8xhjCAQSB2NsdXN0ZXIiDnJlcS5jbHVzdGVyX2lkKjQvYWNjb3VudHMve3JlcS5hY2NvdW50X2lkfS9jbHVzdGVycy97cmVxLmNsdXN0ZXJfaWR9MhBlbmFibGVkLWp3dC1yYmFjgtPkkwJIIkYvYXBpL2NsdXN0ZXIvdjEvYWNjb3VudHMve2FjY291bnRfaWR9L2NsdXN0ZXJzL3tjbHVzdGVyX2lkfS9lbmFibGUtand0EsYBChJTdWdnZXN0Q2x1c3Rlck5hbWUSMi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5TdWdnZXN0Q2x1c3Rlck5hbWVSZXF1ZXN0GjMucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuU3VnZ2VzdENsdXN0ZXJOYW1lUmVzcG9uc2UiR4q1GACC0+STAj0SOy9hcGkvY2x1c3Rlci92MS9hY2NvdW50cy97YWNjb3VudF9pZH0vY2x1c3RlcnMvc3VnZ2VzdC1uYW1lEuIBChJMaXN0UWRyYW50UmVsZWFzZXMSMi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5MaXN0UWRyYW50UmVsZWFzZXNSZXF1ZXN0GjMucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuTGlzdFFkcmFudFJlbGVhc2VzUmVzcG9uc2UiY4q1GA1yZWFkOmNsdXN0ZXJzurUYGAoKY2x1c3Rlcl9pZBIKY2x1c3Rlcl9pZILT5JMCMBIuL2FwaS9jbHVzdGVyL3YxL2FjY291bnRzL3thY2NvdW50X2lkfS9yZWxlYXNlcxLgAQoQR2V0UWRyYW50UmVsZWFzZRIwLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkdldFFkcmFudFJlbGVhc2VSZXF1ZXN0GjEucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuR2V0UWRyYW50UmVsZWFzZVJlc3BvbnNlImeKtRgNcmVhZDpjbHVzdGVyc7q1GBIKB3ZlcnNpb24SB3ZlcnNpb26C0+STAjoSOC9hcGkvY2x1c3Rlci92MS9hY2NvdW50cy97YWNjb3VudF9pZH0vcmVsZWFzZXMve3ZlcnNpb259GgbCtRgCCAFC/gEKG2NvbS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MUIMQ2x1c3RlclByb3RvUAFaUmdpdGh1Yi5jb20vcWRyYW50L3FkcmFudC1jbG91ZC1wdWJsaWMtYXBpL2dlbi9nby9xZHJhbnQvY2xvdWQvY2x1c3Rlci92MTtjbHVzdGVydjGiAgNRQ0OqAhdRZHJhbnQuQ2xvdWQuQ2x1c3Rlci5WMcoCF1FkcmFudFxDbG91ZFxDbHVzdGVyXFYx4gIjUWRyYW50XENsb3VkXENsdXN0ZXJcVjFcR1BCTWV0YWRhdGHqAhpRZHJhbnQ6OkNsb3VkOjpDbHVzdGVyOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_google_api_annotations, file_google_protobuf_timestamp, file_qdrant_cloud_common_v1_common, file_qdrant_cloud_event_v1_events]); + fileDesc("CiVxZHJhbnQvY2xvdWQvY2x1c3Rlci92MS9jbHVzdGVyLnByb3RvEhdxZHJhbnQuY2xvdWQuY2x1c3Rlci52MSLqBQoTTGlzdENsdXN0ZXJzUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABARInChFjbG91ZF9wcm92aWRlcl9pZBgKIAEoCUIHukgEcgIQA0gAiAEBEi4KGGNsb3VkX3Byb3ZpZGVyX3JlZ2lvbl9pZBgLIAEoCUIHukgEcgIQAUgBiAEBEiIKCXBhZ2Vfc2l6ZRgUIAEoBUIKukgHGgUY+gEgAEgCiAEBEiAKCnBhZ2VfdG9rZW4YFSABKAlCB7pIBHICEAFIA4gBATrFA7pIwQMasQEKJ2xpc3RfY2x1c3RlcnMuY2xvdWRfcHJvdmlkZXJfaWRfcHJlc2VudBJCY2xvdWRfcHJvdmlkZXJfaWQgaXMgcmVxdWlyZWQgd2hlbiBjbG91ZF9wcm92aWRlcl9yZWdpb25faWQgaXMgc2V0GkIhaGFzKHRoaXMuY2xvdWRfcHJvdmlkZXJfcmVnaW9uX2lkKSB8fCBoYXModGhpcy5jbG91ZF9wcm92aWRlcl9pZCkaigIKIGNsdXN0ZXIuY2xvdWRfcHJvdmlkZXJfcmVnaW9uX2lkEkhjbG91ZF9wcm92aWRlcl9yZWdpb25faWQgbXVzdCBiZSBhIFVVSUQgaWYgY2xvdWRfcHJvdmlkZXJfaWQgaXMgJ2h5YnJpZCcamwF0aGlzLmNsb3VkX3Byb3ZpZGVyX3JlZ2lvbl9pZC5tYXRjaGVzKCdeWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9JCcpIHx8IHRoaXMuY2xvdWRfcHJvdmlkZXJfaWQhPSAnaHlicmlkJ0IUChJfY2xvdWRfcHJvdmlkZXJfaWRCGwoZX2Nsb3VkX3Byb3ZpZGVyX3JlZ2lvbl9pZEIMCgpfcGFnZV9zaXplQg0KC19wYWdlX3Rva2VuIrMBChRMaXN0Q2x1c3RlcnNSZXNwb25zZRIvCgVpdGVtcxgBIAMoCzIgLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXISIAoKdG90YWxfc2l6ZRgKIAEoBUIHukgEGgIoAEgAiAEBEiUKD25leHRfcGFnZV90b2tlbhgLIAEoCUIHukgEcgIQAUgBiAEBQg0KC190b3RhbF9zaXplQhIKEF9uZXh0X3BhZ2VfdG9rZW4iTwoRR2V0Q2x1c3RlclJlcXVlc3QSHAoKYWNjb3VudF9pZBgBIAEoCUIIukgFcgOwAQESHAoKY2x1c3Rlcl9pZBgCIAEoCUIIukgFcgOwAQEiTwoSR2V0Q2x1c3RlclJlc3BvbnNlEjkKB2NsdXN0ZXIYASABKAsyIC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyQga6SAPIAQEixAIKFENyZWF0ZUNsdXN0ZXJSZXF1ZXN0EjkKB2NsdXN0ZXIYASABKAsyIC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyQga6SAPIAQE68AG6SOwBGukBCiJjcmVhdGVfY2x1c3Rlci5ub19yZWFkX29ubHlfZmllbGRzEk5yZWFkLW9ubHkgZmllbGRzIChpZCwgY3JlYXRlZF9hdCwgZGVsZXRlZF9hdCwgc3RhdGUpIG11c3Qgbm90IGJlIHNldCBvbiBjcmVhdGUac3RoaXMuY2x1c3Rlci5pZCA9PSAnJyAmJiAhaGFzKHRoaXMuY2x1c3Rlci5jcmVhdGVkX2F0KSAmJiAhaGFzKHRoaXMuY2x1c3Rlci5kZWxldGVkX2F0KSAmJiAhaGFzKHRoaXMuY2x1c3Rlci5zdGF0ZSkiuwEKFUNyZWF0ZUNsdXN0ZXJSZXNwb25zZRI5CgdjbHVzdGVyGAEgASgLMiAucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckIGukgDyAEBOme6SGQaYgocY3JlYXRlX2NsdXN0ZXIuc3RhdGVfcHJlc2VudBIpc3RhdGUgaXMgcmVxdWlyZWQgZm9yIGFuIGV4aXN0aW5nIGNsdXN0ZXIaF2hhcyh0aGlzLmNsdXN0ZXIuc3RhdGUpIrABChRVcGRhdGVDbHVzdGVyUmVxdWVzdBI5CgdjbHVzdGVyGAEgASgLMiAucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckIGukgDyAEBOl26SFoaWAoZdXBkYXRlX2NsdXN0ZXIuaWRfcHJlc2VudBIkY2x1c3Rlci5pZCBpcyByZXF1aXJlZCBmb3IgYW4gdXBkYXRlGhV0aGlzLmNsdXN0ZXIuaWQgIT0gJyciuwEKFVVwZGF0ZUNsdXN0ZXJSZXNwb25zZRI5CgdjbHVzdGVyGAEgASgLMiAucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckIGukgDyAEBOme6SGQaYgocdXBkYXRlX2NsdXN0ZXIuc3RhdGVfcHJlc2VudBIpc3RhdGUgaXMgcmVxdWlyZWQgZm9yIGFuIGV4aXN0aW5nIGNsdXN0ZXIaF2hhcyh0aGlzLmNsdXN0ZXIuc3RhdGUpIoIBChREZWxldGVDbHVzdGVyUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABARIcCgpjbHVzdGVyX2lkGAIgASgJQgi6SAVyA7ABARIbCg5kZWxldGVfYmFja3VwcxgDIAEoCEgAiAEBQhEKD19kZWxldGVfYmFja3VwcyIXChVEZWxldGVDbHVzdGVyUmVzcG9uc2UiUwoVUmVzdGFydENsdXN0ZXJSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBEhwKCmNsdXN0ZXJfaWQYAiABKAlCCLpIBXIDsAEBIhgKFlJlc3RhcnRDbHVzdGVyUmVzcG9uc2UiUwoVU3VzcGVuZENsdXN0ZXJSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBEhwKCmNsdXN0ZXJfaWQYAiABKAlCCLpIBXIDsAEBIhgKFlN1c3BlbmRDbHVzdGVyUmVzcG9uc2UiVQoXVW5zdXNwZW5kQ2x1c3RlclJlcXVlc3QSHAoKYWNjb3VudF9pZBgBIAEoCUIIukgFcgOwAQESHAoKY2x1c3Rlcl9pZBgCIAEoCUIIukgFcgOwAQEiGgoYVW5zdXNwZW5kQ2x1c3RlclJlc3BvbnNlIlkKG0VuYWJsZUNsdXN0ZXJKd3RSYmFjUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABARIcCgpjbHVzdGVyX2lkGAIgASgJQgi6SAVyA7ABASIeChxFbmFibGVDbHVzdGVySnd0UmJhY1Jlc3BvbnNlIjkKGVN1Z2dlc3RDbHVzdGVyTmFtZVJlcXVlc3QSHAoKYWNjb3VudF9pZBgBIAEoCUIIukgFcgOwAQEiMwoaU3VnZ2VzdENsdXN0ZXJOYW1lUmVzcG9uc2USFQoEbmFtZRgBIAEoCUIHukgEcgIQASJrChlMaXN0UWRyYW50UmVsZWFzZXNSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBEiEKCmNsdXN0ZXJfaWQYAiABKAlCCLpIBXIDsAEBSACIAQFCDQoLX2NsdXN0ZXJfaWQiUwoaTGlzdFFkcmFudFJlbGVhc2VzUmVzcG9uc2USNQoFaXRlbXMYASADKAsyJi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5RZHJhbnRSZWxlYXNlIlEKF0dldFFkcmFudFJlbGVhc2VSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBEhgKB3ZlcnNpb24YAiABKAlCB7pIBHICEAEiWwoYR2V0UWRyYW50UmVsZWFzZVJlc3BvbnNlEj8KB3JlbGVhc2UYASABKAsyJi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5RZHJhbnRSZWxlYXNlQga6SAPIAQEi1ggKB0NsdXN0ZXISCgoCaWQYASABKAkSLgoKY3JlYXRlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASHAoKYWNjb3VudF9pZBgDIAEoCUIIukgFcgOwAQESKQoEbmFtZRgEIAEoCUIbukgYchYQAhhAMhBeW2EtekEtWjAtOS1fXSskEi4KCmRlbGV0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiIKEWNsb3VkX3Byb3ZpZGVyX2lkGAogASgJQge6SARyAhADEikKGGNsb3VkX3Byb3ZpZGVyX3JlZ2lvbl9pZBgLIAEoCUIHukgEcgIQARI6CgZsYWJlbHMYDCADKAsyIC5xZHJhbnQuY2xvdWQuY29tbW9uLnYxLktleVZhbHVlQgi6SAWSAQIQChKyAQoVY29zdF9hbGxvY2F0aW9uX2xhYmVsGA0gASgJQo0BukiJAXKGARj9ATKAAV4oW2EtejAtOUEtWl0oWy1hLXowLTlBLVpdKlthLXowLTlBLVpdKT8oXC5bYS16MC05QS1aXShbLWEtejAtOUEtWl0qW2EtejAtOUEtWl0pPykqXC8pPyhbQS1aYS16MC05XVstQS1aYS16MC05Xy5dKik/W0EtWmEtejAtOV0kSACIAQESTAoNY29uZmlndXJhdGlvbhgUIAEoCzItLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJDb25maWd1cmF0aW9uQga6SAPIAQESNAoFc3RhdGUYZCABKAsyJS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyU3RhdGU6twO6SLMDGqMBCgpjbHVzdGVyLmlkEhp2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVVJRBp5dGhpcy5pZC5tYXRjaGVzKCdeWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9JCcpIHx8ICFoYXModGhpcy5jcmVhdGVkX2F0KRqKAgogY2x1c3Rlci5jbG91ZF9wcm92aWRlcl9yZWdpb25faWQSSGNsb3VkX3Byb3ZpZGVyX3JlZ2lvbl9pZCBtdXN0IGJlIGEgVVVJRCBpZiBjbG91ZF9wcm92aWRlcl9pZCBpcyAnaHlicmlkJxqbAXRoaXMuY2xvdWRfcHJvdmlkZXJfcmVnaW9uX2lkLm1hdGNoZXMoJ15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kJykgfHwgdGhpcy5jbG91ZF9wcm92aWRlcl9pZCE9ICdoeWJyaWQnQhgKFl9jb3N0X2FsbG9jYXRpb25fbGFiZWwigA0KFENsdXN0ZXJDb25maWd1cmF0aW9uEjQKEGxhc3RfbW9kaWZpZWRfYXQYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiAKD251bWJlcl9vZl9ub2RlcxgCIAEoDUIHukgEKgIoARI8Cgd2ZXJzaW9uGAMgASgJQia6SCNyITIfXih2KFxkKylcLihcZCspXC4oXGQrKXxsYXRlc3QpJEgAiAEBEhwKCnBhY2thZ2VfaWQYBCABKAlCCLpIBXIDsAEBEk8KFGFkZGl0aW9uYWxfcmVzb3VyY2VzGAUgASgLMiwucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQWRkaXRpb25hbFJlc291cmNlc0gBiAEBElMKFmRhdGFiYXNlX2NvbmZpZ3VyYXRpb24YByABKAsyLi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25IAogBARJBCg1ub2RlX3NlbGVjdG9yGAggAygLMiAucWRyYW50LmNsb3VkLmNvbW1vbi52MS5LZXlWYWx1ZUIIukgFkgECEAoSQgoLdG9sZXJhdGlvbnMYCSADKAsyIy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5Ub2xlcmF0aW9uQgi6SAWSAQIQChI/Cgthbm5vdGF0aW9ucxgKIAMoCzIgLnFkcmFudC5jbG91ZC5jb21tb24udjEuS2V5VmFsdWVCCLpIBZIBAhAKEjEKGGFsbG93ZWRfaXBfc291cmNlX3JhbmdlcxgLIAMoCUIPukgMkgEJECgiBXID8AEBElIKDHNlcnZpY2VfdHlwZRgMIAEoDjIrLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJTZXJ2aWNlVHlwZUIKukgHggEEEAEgAEgDiAEBEkcKE3NlcnZpY2VfYW5ub3RhdGlvbnMYDSADKAsyIC5xZHJhbnQuY2xvdWQuY29tbW9uLnYxLktleVZhbHVlQgi6SAWSAQIQQBI+Cgpwb2RfbGFiZWxzGA4gAygLMiAucWRyYW50LmNsb3VkLmNvbW1vbi52MS5LZXlWYWx1ZUIIukgFkgECEAoSLwoXcmVzZXJ2ZWRfY3B1X3BlcmNlbnRhZ2UYFCABKA1CCbpIBioEGFAoAUgEiAEBEjIKGnJlc2VydmVkX21lbW9yeV9wZXJjZW50YWdlGBUgASgNQgm6SAYqBBhQKAFIBYgBARJXCghncHVfdHlwZRgWIAEoDjI0LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJDb25maWd1cmF0aW9uR3B1VHlwZUIKukgHggEEEAEgAEgGiAEBEmMKDnJlc3RhcnRfcG9saWN5GBcgASgOMjoucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckNvbmZpZ3VyYXRpb25SZXN0YXJ0UG9saWN5Qgq6SAeCAQQQASAASAeIAQESawoScmViYWxhbmNlX3N0cmF0ZWd5GBggASgOMj4ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckNvbmZpZ3VyYXRpb25SZWJhbGFuY2VTdHJhdGVneUIKukgHggEEEAEgAEgIiAEBEl8KG3RvcG9sb2d5X3NwcmVhZF9jb25zdHJhaW50cxgZIAMoCzIwLnFkcmFudC5jbG91ZC5jb21tb24udjEuVG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50Qgi6SAWSAQIQChJgCh1jbHVzdGVyX3N0b3JhZ2VfY29uZmlndXJhdGlvbhgaIAEoCzI0LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJTdG9yYWdlQ29uZmlndXJhdGlvbkgJiAEBQgoKCF92ZXJzaW9uQhcKFV9hZGRpdGlvbmFsX3Jlc291cmNlc0IZChdfZGF0YWJhc2VfY29uZmlndXJhdGlvbkIPCg1fc2VydmljZV90eXBlQhoKGF9yZXNlcnZlZF9jcHVfcGVyY2VudGFnZUIdChtfcmVzZXJ2ZWRfbWVtb3J5X3BlcmNlbnRhZ2VCCwoJX2dwdV90eXBlQhEKD19yZXN0YXJ0X3BvbGljeUIVChNfcmViYWxhbmNlX3N0cmF0ZWd5QiAKHl9jbHVzdGVyX3N0b3JhZ2VfY29uZmlndXJhdGlvbiKrBQoVRGF0YWJhc2VDb25maWd1cmF0aW9uElEKCmNvbGxlY3Rpb24YASABKAsyOC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25Db2xsZWN0aW9uSACIAQESSwoHc3RvcmFnZRgCIAEoCzI1LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkRhdGFiYXNlQ29uZmlndXJhdGlvblN0b3JhZ2VIAYgBARJLCgdzZXJ2aWNlGAMgASgLMjUucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuRGF0YWJhc2VDb25maWd1cmF0aW9uU2VydmljZUgCiAEBEloKCWxvZ19sZXZlbBgEIAEoDjI2LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkRhdGFiYXNlQ29uZmlndXJhdGlvbkxvZ0xldmVsQgq6SAeCAQQQASAASAOIAQESQwoDdGxzGAUgASgLMjEucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuRGF0YWJhc2VDb25maWd1cmF0aW9uVGxzSASIAQESTwoJaW5mZXJlbmNlGAYgASgLMjcucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuRGF0YWJhc2VDb25maWd1cmF0aW9uSW5mZXJlbmNlSAWIAQESVgoNYXVkaXRfbG9nZ2luZxgHIAEoCzI6LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkRhdGFiYXNlQ29uZmlndXJhdGlvbkF1ZGl0TG9nZ2luZ0gGiAEBQg0KC19jb2xsZWN0aW9uQgoKCF9zdG9yYWdlQgoKCF9zZXJ2aWNlQgwKCl9sb2dfbGV2ZWxCBgoEX3Rsc0IMCgpfaW5mZXJlbmNlQhAKDl9hdWRpdF9sb2dnaW5nIpICCh9EYXRhYmFzZUNvbmZpZ3VyYXRpb25Db2xsZWN0aW9uEigKEnJlcGxpY2F0aW9uX2ZhY3RvchgBIAEoDUIHukgEKgIoAUgAiAEBEi4KGHdyaXRlX2NvbnNpc3RlbmN5X2ZhY3RvchgCIAEoBUIHukgEGgIoAUgBiAEBElUKB3ZlY3RvcnMYAyABKAsyPy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25Db2xsZWN0aW9uVmVjdG9yc0gCiAEBQhUKE19yZXBsaWNhdGlvbl9mYWN0b3JCGwoZX3dyaXRlX2NvbnNpc3RlbmN5X2ZhY3RvckIKCghfdmVjdG9ycyJKCiZEYXRhYmFzZUNvbmZpZ3VyYXRpb25Db2xsZWN0aW9uVmVjdG9ycxIUCgdvbl9kaXNrGAEgASgISACIAQFCCgoIX29uX2Rpc2siigEKHERhdGFiYXNlQ29uZmlndXJhdGlvblN0b3JhZ2USWgoLcGVyZm9ybWFuY2UYASABKAsyQC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25TdG9yYWdlUGVyZm9ybWFuY2VIAIgBAUIOCgxfcGVyZm9ybWFuY2UikQEKJ0RhdGFiYXNlQ29uZmlndXJhdGlvblN0b3JhZ2VQZXJmb3JtYW5jZRIhChRvcHRpbWl6ZXJfY3B1X2J1ZGdldBgBIAEoBUgAiAEBEhkKDGFzeW5jX3Njb3JlchgCIAEoCEgBiAEBQhcKFV9vcHRpbWl6ZXJfY3B1X2J1ZGdldEIPCg1fYXN5bmNfc2NvcmVyIvABChxEYXRhYmFzZUNvbmZpZ3VyYXRpb25TZXJ2aWNlEjoKB2FwaV9rZXkYASABKAsyJC5xZHJhbnQuY2xvdWQuY29tbW9uLnYxLlNlY3JldEtleVJlZkgAiAEBEkQKEXJlYWRfb25seV9hcGlfa2V5GAIgASgLMiQucWRyYW50LmNsb3VkLmNvbW1vbi52MS5TZWNyZXRLZXlSZWZIAYgBARIXCgplbmFibGVfdGxzGAQgASgISAKIAQFCCgoIX2FwaV9rZXlCFAoSX3JlYWRfb25seV9hcGlfa2V5Qg0KC19lbmFibGVfdGxzSgQIAxAEIpEBChhEYXRhYmFzZUNvbmZpZ3VyYXRpb25UbHMSOgoEY2VydBgBIAEoCzIkLnFkcmFudC5jbG91ZC5jb21tb24udjEuU2VjcmV0S2V5UmVmQga6SAPIAQESOQoDa2V5GAIgASgLMiQucWRyYW50LmNsb3VkLmNvbW1vbi52MS5TZWNyZXRLZXlSZWZCBrpIA8gBASIxCh5EYXRhYmFzZUNvbmZpZ3VyYXRpb25JbmZlcmVuY2USDwoHZW5hYmxlZBgBIAEoCCIjChNBZGRpdGlvbmFsUmVzb3VyY2VzEgwKBGRpc2sYAyABKA0i/wEKIURhdGFiYXNlQ29uZmlndXJhdGlvbkF1ZGl0TG9nZ2luZxIPCgdlbmFibGVkGAEgASgIEkAKCHJvdGF0aW9uGAIgASgOMikucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQXVkaXRMb2dSb3RhdGlvbkgAiAEBEiYKDW1heF9sb2dfZmlsZXMYAyABKA1CCrpIByoFGOgHKAFIAYgBARIkChd0cnVzdF9mb3J3YXJkZWRfaGVhZGVycxgEIAEoCEgCiAEBQgsKCV9yb3RhdGlvbkIQCg5fbWF4X2xvZ19maWxlc0IaChhfdHJ1c3RfZm9yd2FyZGVkX2hlYWRlcnMi8wkKClRvbGVyYXRpb24SGgoDa2V5GAEgASgJQgi6SAVyAxi9AkgAiAEBEk4KCG9wZXJhdG9yGAIgASgOMisucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuVG9sZXJhdGlvbk9wZXJhdG9yQgq6SAeCAQQQASAASAGIAQESRgoFdmFsdWUYAyABKAlCMrpIL3ItMisoKFtBLVphLXowLTldWy1BLVphLXowLTlfLl0qKT9bQS1aYS16MC05XSk/SAKIAQESSgoGZWZmZWN0GAQgASgOMikucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuVG9sZXJhdGlvbkVmZmVjdEIKukgHggEEEAEgAEgDiAEBEigKEnRvbGVyYXRpb25fc2Vjb25kcxgFIAEoBEIHukgEMgIoAEgEiAEBOvkGukj1Bhp0Cht0b2xlcmF0aW9uLnZhbHVlX2Zvcl9leGlzdHMSLXZhbHVlIG11c3Qgbm90IGJlIHNldCB3aGVuIG9wZXJhdG9yIGlzIEV4aXN0cxomdGhpcy5vcGVyYXRvciAhPSAxIHx8ICFoYXModGhpcy52YWx1ZSkargEKGnRvbGVyYXRpb24udmFsdWVfZm9yX2VxdWFsElF2YWx1ZSBtdXN0IGJlIHNldCB3aGVuIG9wZXJhdG9yIGlzIEVxdWFsIChvciBpcyBub3Qgc2V0LCB3aGljaCBkZWZhdWx0cyB0byBFcXVhbCkaPShoYXModGhpcy5vcGVyYXRvcikgJiYgdGhpcy5vcGVyYXRvciAhPSAyKSB8fCBoYXModGhpcy52YWx1ZSkapwIKInRvbGVyYXRpb24ua2V5X2Zvcm1hdF93aGVuX3ByZXNlbnQSRGtleSBtdXN0IGJlIGEgdmFsaWQgS3ViZXJuZXRlcyBxdWFsaWZpZWQgbmFtZSB3aGVuIHNldCBhbmQgbm9uLWVtcHR5GroBIWhhcyh0aGlzLmtleSkgfHwgdGhpcy5rZXkgPT0gJycgfHwgdGhpcy5rZXkubWF0Y2hlcygnXihbQS1aYS16MC05XShbLUEtWmEtejAtOV0qW0EtWmEtejAtOV0pPyhcXC5bQS1aYS16MC05XShbLUEtWmEtejAtOV0qW0EtWmEtejAtOV0pPykqXFwvKT8oW0EtWmEtejAtOV1bLUEtWmEtejAtOV8uXSopP1tBLVphLXowLTldJCcpGooBCiR0b2xlcmF0aW9uLmtleV9lbXB0eV9yZXF1aXJlc19leGlzdHMSKW9wZXJhdG9yIG11c3QgYmUgJ0V4aXN0cycgaWYga2V5IGlzIGVtcHR5GjcoaGFzKHRoaXMua2V5KSAmJiB0aGlzLmtleSAhPSAnJykgfHwgdGhpcy5vcGVyYXRvciA9PSAxGpQBCiV0b2xlcmF0aW9uLnNlY29uZHNfb25seV9mb3Jfbm9leGVjdXRlEjh0b2xlcmF0aW9uU2Vjb25kcyBpcyBvbmx5IHZhbGlkIHdoZW4gZWZmZWN0IGlzIE5vRXhlY3V0ZRoxIWhhcyh0aGlzLnRvbGVyYXRpb25fc2Vjb25kcykgfHwgdGhpcy5lZmZlY3QgPT0gM0IGCgRfa2V5QgsKCV9vcGVyYXRvckIICgZfdmFsdWVCCQoHX2VmZmVjdEIVChNfdG9sZXJhdGlvbl9zZWNvbmRzIoUDChtDbHVzdGVyU3RvcmFnZUNvbmZpZ3VyYXRpb24SQgoRc3RvcmFnZV90aWVyX3R5cGUYASABKA4yJy5xZHJhbnQuY2xvdWQuY29tbW9uLnYxLlN0b3JhZ2VUaWVyVHlwZRIsChZkYXRhYmFzZV9zdG9yYWdlX2NsYXNzGAIgASgJQge6SARyAhABSACIAQESLAoWc25hcHNob3Rfc3RvcmFnZV9jbGFzcxgDIAEoCUIHukgEcgIQAUgBiAEBEisKFXZvbHVtZV9zbmFwc2hvdF9jbGFzcxgEIAEoCUIHukgEcgIQAUgCiAEBEi0KF3ZvbHVtZV9hdHRyaWJ1dGVzX2NsYXNzGAUgASgJQge6SARyAhABSAOIAQFCGQoXX2RhdGFiYXNlX3N0b3JhZ2VfY2xhc3NCGQoXX3NuYXBzaG90X3N0b3JhZ2VfY2xhc3NCGAoWX3ZvbHVtZV9zbmFwc2hvdF9jbGFzc0IaChhfdm9sdW1lX2F0dHJpYnV0ZXNfY2xhc3MivQQKDENsdXN0ZXJTdGF0ZRIYCgd2ZXJzaW9uGAEgASgJQge6SARyAhABEhAKCG5vZGVzX3VwGAIgASgNEjAKDHJlc3RhcnRlZF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASPgoFcGhhc2UYBCABKA4yJS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyUGhhc2VCCLpIBYIBAhABEg4KBnJlYXNvbhgFIAEoCRJCCghlbmRwb2ludBgGIAEoCzIoLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJFbmRwb2ludEIGukgDyAEBEk8KCXJlc291cmNlcxgHIAEoCzI0LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJOb2RlUmVzb3VyY2VzU3VtbWFyeUIGukgDyAEBElMKEHNjYWxhYmlsaXR5X2luZm8YCCABKAsyLy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyU2NhbGFiaWxpdHlJbmZvQggYAbpIA8gBARI3CgVub2RlcxgJIAMoCzIoLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJOb2RlSW5mbxIQCghqd3RfcmJhYxgKIAEoCBJKCgxjYXBhYmlsaXRpZXMYCyABKAsyLC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyQ2FwYWJpbGl0aWVzQga6SAPIAQEinwIKD0NsdXN0ZXJOb2RlSW5mbxIVCgRuYW1lGAEgASgJQge6SARyAhABEi4KCnN0YXJ0ZWRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg8KB3ZlcnNpb24YAyABKAkSOgoIZW5kcG9pbnQYBCABKAsyKC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyRW5kcG9pbnQSQgoFc3RhdGUYCiABKA4yKS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyTm9kZVN0YXRlQgi6SAWCAQIQARIeChFhdmFpbGFiaWxpdHlfem9uZRgLIAEoCUgAiAEBQhQKEl9hdmFpbGFiaWxpdHlfem9uZSJgCg9DbHVzdGVyRW5kcG9pbnQSFQoDdXJsGAEgASgJQgi6SAVyA4gBARIaCglyZXN0X3BvcnQYAiABKAVCB7pIBBoCIAASGgoJZ3JwY19wb3J0GAMgASgFQge6SAQaAiAAIoQDChtDbHVzdGVyTm9kZVJlc291cmNlc1N1bW1hcnkSQwoEZGlzaxgBIAEoCzItLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJOb2RlUmVzb3VyY2VzQga6SAPIAQESQgoDcmFtGAIgASgLMi0ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3Rlck5vZGVSZXNvdXJjZXNCBrpIA8gBARJCCgNjcHUYAyABKAsyLS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyTm9kZVJlc291cmNlc0IGukgDyAEBEj8KA2dwdRgEIAEoCzItLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJOb2RlUmVzb3VyY2VzSACIAQESQwoHZ3B1X3JhbRgFIAEoCzItLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJOb2RlUmVzb3VyY2VzSAGIAQFCBgoEX2dwdUIKCghfZ3B1X3JhbSLEAQoUQ2x1c3Rlck5vZGVSZXNvdXJjZXMSHAoEYmFzZRgBIAEoAUIOukgLEgkpAAAAAAAAAAASJQoNY29tcGxpbWVudGFyeRgCIAEoAUIOukgLEgkpAAAAAAAAAAASIgoKYWRkaXRpb25hbBgDIAEoAUIOukgLEgkpAAAAAAAAAAASIAoIcmVzZXJ2ZWQYBCABKAFCDrpICxIJKQAAAAAAAAAAEiEKCWF2YWlsYWJsZRgFIAEoAUIOukgLEgkpAAAAAAAAAAAikAEKFkNsdXN0ZXJTY2FsYWJpbGl0eUluZm8STQoGc3RhdHVzGAEgASgOMjEucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlclNjYWxhYmlsaXR5U3RhdHVzQgq6SAeCAQQQASAAEhwKBnJlYXNvbhgCIAEoCUIHukgEcgIQAUgAiAEBQgkKB19yZWFzb24igQIKE0NsdXN0ZXJDYXBhYmlsaXRpZXMSUgoOZGlza19leHBhbnNpb24YASABKA4yOi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyRGlza0V4cGFuc2lvblN1cHBvcnRTdGF0dXMSQwoGYmFja3VwGAIgASgOMjMucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckJhY2t1cFN1cHBvcnRTdGF0dXMSUQoQc2NhbGFiaWxpdHlfaW5mbxgDIAEoCzIvLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJTY2FsYWJpbGl0eUluZm9CBrpIA8gBASLPAQoNUWRyYW50UmVsZWFzZRIYCgd2ZXJzaW9uGAEgASgJQge6SARyAhABEg8KB2RlZmF1bHQYAiABKAgSKAoRcmVsZWFzZV9ub3Rlc191cmwYAyABKAlCCLpIBXIDiAEBSACIAQESHQoHcmVtYXJrcxgEIAEoCUIHukgEcgIQAUgBiAEBEhMKC2VuZF9vZl9saWZlGAUgASgIEhMKC3VuYXZhaWxhYmxlGAYgASgIQhQKEl9yZWxlYXNlX25vdGVzX3VybEIKCghfcmVtYXJrcyKOAQoeQ3JlYXRlQ2x1c3RlckZyb21CYWNrdXBSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBEhsKCWJhY2t1cF9pZBgCIAEoCUIIukgFcgOwAQESMQoMY2x1c3Rlcl9uYW1lGAMgASgJQhu6SBhyFhAEGEAyEF5bYS16QS1aMC05LV9dKyQiXAofQ3JlYXRlQ2x1c3RlckZyb21CYWNrdXBSZXNwb25zZRI5CgdjbHVzdGVyGAEgASgLMiAucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckIGukgDyAEBKqsBChJDbHVzdGVyU2VydmljZVR5cGUSJAogQ0xVU1RFUl9TRVJWSUNFX1RZUEVfVU5TUEVDSUZJRUQQABIjCh9DTFVTVEVSX1NFUlZJQ0VfVFlQRV9DTFVTVEVSX0lQEAESIgoeQ0xVU1RFUl9TRVJWSUNFX1RZUEVfTk9ERV9QT1JUEAISJgoiQ0xVU1RFUl9TRVJWSUNFX1RZUEVfTE9BRF9CQUxBTkNFUhADKqABChtDbHVzdGVyQ29uZmlndXJhdGlvbkdwdVR5cGUSLgoqQ0xVU1RFUl9DT05GSUdVUkFUSU9OX0dQVV9UWVBFX1VOU1BFQ0lGSUVEEAASKQolQ0xVU1RFUl9DT05GSUdVUkFUSU9OX0dQVV9UWVBFX05WSURJQRABEiYKIkNMVVNURVJfQ09ORklHVVJBVElPTl9HUFVfVFlQRV9BTUQQAiryAQohQ2x1c3RlckNvbmZpZ3VyYXRpb25SZXN0YXJ0UG9saWN5EjQKMENMVVNURVJfQ09ORklHVVJBVElPTl9SRVNUQVJUX1BPTElDWV9VTlNQRUNJRklFRBAAEjAKLENMVVNURVJfQ09ORklHVVJBVElPTl9SRVNUQVJUX1BPTElDWV9ST0xMSU5HEAESMQotQ0xVU1RFUl9DT05GSUdVUkFUSU9OX1JFU1RBUlRfUE9MSUNZX1BBUkFMTEVMEAISMgouQ0xVU1RFUl9DT05GSUdVUkFUSU9OX1JFU1RBUlRfUE9MSUNZX0FVVE9NQVRJQxADKo4CCiVDbHVzdGVyQ29uZmlndXJhdGlvblJlYmFsYW5jZVN0cmF0ZWd5EjgKNENMVVNURVJfQ09ORklHVVJBVElPTl9SRUJBTEFOQ0VfU1RSQVRFR1lfVU5TUEVDSUZJRUQQABI1CjFDTFVTVEVSX0NPTkZJR1VSQVRJT05fUkVCQUxBTkNFX1NUUkFURUdZX0JZX0NPVU5UEAESNAowQ0xVU1RFUl9DT05GSUdVUkFUSU9OX1JFQkFMQU5DRV9TVFJBVEVHWV9CWV9TSVpFEAISPgo6Q0xVU1RFUl9DT05GSUdVUkFUSU9OX1JFQkFMQU5DRV9TVFJBVEVHWV9CWV9DT1VOVF9BTkRfU0laRRADKtUCCh1EYXRhYmFzZUNvbmZpZ3VyYXRpb25Mb2dMZXZlbBIwCixEQVRBQkFTRV9DT05GSUdVUkFUSU9OX0xPR19MRVZFTF9VTlNQRUNJRklFRBAAEioKJkRBVEFCQVNFX0NPTkZJR1VSQVRJT05fTE9HX0xFVkVMX1RSQUNFEAESKgomREFUQUJBU0VfQ09ORklHVVJBVElPTl9MT0dfTEVWRUxfREVCVUcQAhIpCiVEQVRBQkFTRV9DT05GSUdVUkFUSU9OX0xPR19MRVZFTF9JTkZPEAMSKQolREFUQUJBU0VfQ09ORklHVVJBVElPTl9MT0dfTEVWRUxfV0FSThAEEioKJkRBVEFCQVNFX0NPTkZJR1VSQVRJT05fTE9HX0xFVkVMX0VSUk9SEAUSKAokREFUQUJBU0VfQ09ORklHVVJBVElPTl9MT0dfTEVWRUxfT0ZGEAYqcwoQQXVkaXRMb2dSb3RhdGlvbhIiCh5BVURJVF9MT0dfUk9UQVRJT05fVU5TUEVDSUZJRUQQABIcChhBVURJVF9MT0dfUk9UQVRJT05fREFJTFkQARIdChlBVURJVF9MT0dfUk9UQVRJT05fSE9VUkxZEAIqeAoSVG9sZXJhdGlvbk9wZXJhdG9yEiMKH1RPTEVSQVRJT05fT1BFUkFUT1JfVU5TUEVDSUZJRUQQABIeChpUT0xFUkFUSU9OX09QRVJBVE9SX0VYSVNUUxABEh0KGVRPTEVSQVRJT05fT1BFUkFUT1JfRVFVQUwQAiqkAQoQVG9sZXJhdGlvbkVmZmVjdBIhCh1UT0xFUkFUSU9OX0VGRkVDVF9VTlNQRUNJRklFRBAAEiEKHVRPTEVSQVRJT05fRUZGRUNUX05PX1NDSEVEVUxFEAESKAokVE9MRVJBVElPTl9FRkZFQ1RfUFJFRkVSX05PX1NDSEVEVUxFEAISIAocVE9MRVJBVElPTl9FRkZFQ1RfTk9fRVhFQ1VURRADKt8ECgxDbHVzdGVyUGhhc2USHQoZQ0xVU1RFUl9QSEFTRV9VTlNQRUNJRklFRBAAEhoKFkNMVVNURVJfUEhBU0VfQ1JFQVRJTkcQARIiCh5DTFVTVEVSX1BIQVNFX0ZBSUxFRF9UT19DUkVBVEUQAhIaChZDTFVTVEVSX1BIQVNFX1VQREFUSU5HEAMSIgoeQ0xVU1RFUl9QSEFTRV9GQUlMRURfVE9fVVBEQVRFEAQSGQoVQ0xVU1RFUl9QSEFTRV9TQ0FMSU5HEAUSGwoXQ0xVU1RFUl9QSEFTRV9VUEdSQURJTkcQBhIcChhDTFVTVEVSX1BIQVNFX1NVU1BFTkRJTkcQBxIbChdDTFVTVEVSX1BIQVNFX1NVU1BFTkRFRBAIEiMKH0NMVVNURVJfUEhBU0VfRkFJTEVEX1RPX1NVU1BFTkQQCRIaChZDTFVTVEVSX1BIQVNFX1JFU1VNSU5HEAoSIgoeQ0xVU1RFUl9QSEFTRV9GQUlMRURfVE9fUkVTVU1FEAsSGQoVQ0xVU1RFUl9QSEFTRV9IRUFMVEhZEAwSGwoXQ0xVU1RFUl9QSEFTRV9OT1RfUkVBRFkQDRIfChtDTFVTVEVSX1BIQVNFX1JFQ09WRVJZX01PREUQDhIkCiBDTFVTVEVSX1BIQVNFX01BTlVBTF9NQUlOVEVOQU5DRRAPEiAKHENMVVNURVJfUEhBU0VfRkFJTEVEX1RPX1NZTkMQEBIbChdDTFVTVEVSX1BIQVNFX05PVF9GT1VORBAREhoKFkNMVVNURVJfUEhBU0VfREVMRVRJTkcQEireAQoQQ2x1c3Rlck5vZGVTdGF0ZRIiCh5DTFVTVEVSX05PREVfU1RBVEVfVU5TUEVDSUZJRUQQABIfChtDTFVTVEVSX05PREVfU1RBVEVfU1RBUlRJTkcQARIeChpDTFVTVEVSX05PREVfU1RBVEVfSEVBTFRIWRACEiAKHENMVVNURVJfTk9ERV9TVEFURV9VTkhFQUxUSFkQAxIgChxDTFVTVEVSX05PREVfU1RBVEVfU1VTUEVOREVEEAQSIQodQ0xVU1RFUl9OT0RFX1NUQVRFX1JFQ09WRVJJTkcQBSqcAQoYQ2x1c3RlclNjYWxhYmlsaXR5U3RhdHVzEioKJkNMVVNURVJfU0NBTEFCSUxJVFlfU1RBVFVTX1VOU1BFQ0lGSUVEEAASKwonQ0xVU1RFUl9TQ0FMQUJJTElUWV9TVEFUVVNfTk9UX1NDQUxBQkxFEAESJwojQ0xVU1RFUl9TQ0FMQUJJTElUWV9TVEFUVVNfU0NBTEFCTEUQAirIAQohQ2x1c3RlckRpc2tFeHBhbnNpb25TdXBwb3J0U3RhdHVzEjUKMUNMVVNURVJfRElTS19FWFBBTlNJT05fU1VQUE9SVF9TVEFUVVNfVU5TUEVDSUZJRUQQABIzCi9DTFVTVEVSX0RJU0tfRVhQQU5TSU9OX1NVUFBPUlRfU1RBVFVTX1NVUFBPUlRFRBABEjcKM0NMVVNURVJfRElTS19FWFBBTlNJT05fU1VQUE9SVF9TVEFUVVNfTk9UX1NVUFBPUlRFRBACKqkBChpDbHVzdGVyQmFja3VwU3VwcG9ydFN0YXR1cxItCilDTFVTVEVSX0JBQ0tVUF9TVVBQT1JUX1NUQVRVU19VTlNQRUNJRklFRBAAEisKJ0NMVVNURVJfQkFDS1VQX1NVUFBPUlRfU1RBVFVTX1NVUFBPUlRFRBABEi8KK0NMVVNURVJfQkFDS1VQX1NVUFBPUlRfU1RBVFVTX05PVF9TVVBQT1JURUQQAjLLHgoOQ2x1c3RlclNlcnZpY2UStAEKDExpc3RDbHVzdGVycxIsLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkxpc3RDbHVzdGVyc1JlcXVlc3QaLS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5MaXN0Q2x1c3RlcnNSZXNwb25zZSJHirUYDXJlYWQ6Y2x1c3RlcnOC0+STAjASLi9hcGkvY2x1c3Rlci92MS9hY2NvdW50cy97YWNjb3VudF9pZH0vY2x1c3RlcnMS1wEKCkdldENsdXN0ZXISKi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5HZXRDbHVzdGVyUmVxdWVzdBorLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkdldENsdXN0ZXJSZXNwb25zZSJwirUYDXJlYWQ6Y2x1c3RlcnO6tRgYCgpjbHVzdGVyX2lkEgpjbHVzdGVyX2lkgtPkkwI9EjsvYXBpL2NsdXN0ZXIvdjEvYWNjb3VudHMve2FjY291bnRfaWR9L2NsdXN0ZXJzL3tjbHVzdGVyX2lkfRLZAgoNQ3JlYXRlQ2x1c3RlchItLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNyZWF0ZUNsdXN0ZXJSZXF1ZXN0Gi4ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ3JlYXRlQ2x1c3RlclJlc3BvbnNlIugBirUYDndyaXRlOmNsdXN0ZXJzkrUYEmNsdXN0ZXIuYWNjb3VudF9pZLq1GBwKDGNsdXN0ZXJfbmFtZRIMY2x1c3Rlci5uYW1lyvMYWwgBEgdjbHVzdGVyIg9yZXNwLmNsdXN0ZXIuaWQqPS9hY2NvdW50cy97cmVxLmNsdXN0ZXIuYWNjb3VudF9pZH0vY2x1c3RlcnMve3Jlc3AuY2x1c3Rlci5pZH2C0+STAjs6ASoiNi9hcGkvY2x1c3Rlci92MS9hY2NvdW50cy97Y2x1c3Rlci5hY2NvdW50X2lkfS9jbHVzdGVycxK0AwoXQ3JlYXRlQ2x1c3RlckZyb21CYWNrdXASNy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DcmVhdGVDbHVzdGVyRnJvbUJhY2t1cFJlcXVlc3QaOC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DcmVhdGVDbHVzdGVyRnJvbUJhY2t1cFJlc3BvbnNlIqUCirUYD3Jlc3RvcmU6YmFja3Vwc4q1GA53cml0ZTpjbHVzdGVyc6i1GAG6tRgWCgliYWNrdXBfaWQSCWJhY2t1cF9pZLq1GBwKDGNsdXN0ZXJfbmFtZRIMY2x1c3Rlcl9uYW1lyvMYdAgBEgdjbHVzdGVyIg9yZXNwLmNsdXN0ZXIuaWQqNS9hY2NvdW50cy97cmVxLmFjY291bnRfaWR9L2NsdXN0ZXJzL3tyZXNwLmNsdXN0ZXIuaWR9Uh8KDmZyb21fYmFja3VwX2lkEg1yZXEuYmFja3VwX2lkgtPkkwJEIkIvYXBpL2NsdXN0ZXIvdjEvYWNjb3VudHMve2FjY291bnRfaWR9L2JhY2t1cHMve2JhY2t1cF9pZH0vY2x1c3RlcnMS4AIKDVVwZGF0ZUNsdXN0ZXISLS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5VcGRhdGVDbHVzdGVyUmVxdWVzdBouLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLlVwZGF0ZUNsdXN0ZXJSZXNwb25zZSLvAYq1GA53cml0ZTpjbHVzdGVyc5K1GBJjbHVzdGVyLmFjY291bnRfaWS6tRgYCgpjbHVzdGVyX2lkEgpjbHVzdGVyLmlkyvMYWQgCEgdjbHVzdGVyIg5yZXEuY2x1c3Rlci5pZCo8L2FjY291bnRzL3tyZXEuY2x1c3Rlci5hY2NvdW50X2lkfS9jbHVzdGVycy97cmVxLmNsdXN0ZXIuaWR9gtPkkwJIOgEqGkMvYXBpL2NsdXN0ZXIvdjEvYWNjb3VudHMve2NsdXN0ZXIuYWNjb3VudF9pZH0vY2x1c3RlcnMve2NsdXN0ZXIuaWR9ErgCCg1EZWxldGVDbHVzdGVyEi0ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuRGVsZXRlQ2x1c3RlclJlcXVlc3QaLi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5EZWxldGVDbHVzdGVyUmVzcG9uc2UixwGKtRgPZGVsZXRlOmNsdXN0ZXJzurUYGAoKY2x1c3Rlcl9pZBIKY2x1c3Rlcl9pZMrzGFEIAxIHY2x1c3RlciIOcmVxLmNsdXN0ZXJfaWQqNC9hY2NvdW50cy97cmVxLmFjY291bnRfaWR9L2NsdXN0ZXJzL3tyZXEuY2x1c3Rlcl9pZH2C0+STAj0qOy9hcGkvY2x1c3Rlci92MS9hY2NvdW50cy97YWNjb3VudF9pZH0vY2x1c3RlcnMve2NsdXN0ZXJfaWR9EssCCg5SZXN0YXJ0Q2x1c3RlchIuLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLlJlc3RhcnRDbHVzdGVyUmVxdWVzdBovLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLlJlc3RhcnRDbHVzdGVyUmVzcG9uc2Ui1wGKtRgOd3JpdGU6Y2x1c3RlcnO6tRgYCgpjbHVzdGVyX2lkEgpjbHVzdGVyX2lkyvMYWggEEgdjbHVzdGVyIg5yZXEuY2x1c3Rlcl9pZCo0L2FjY291bnRzL3tyZXEuYWNjb3VudF9pZH0vY2x1c3RlcnMve3JlcS5jbHVzdGVyX2lkfTIHcmVzdGFydILT5JMCRSJDL2FwaS9jbHVzdGVyL3YxL2FjY291bnRzL3thY2NvdW50X2lkfS9jbHVzdGVycy97Y2x1c3Rlcl9pZH0vcmVzdGFydBLLAgoOU3VzcGVuZENsdXN0ZXISLi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5TdXNwZW5kQ2x1c3RlclJlcXVlc3QaLy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5TdXNwZW5kQ2x1c3RlclJlc3BvbnNlItcBirUYDndyaXRlOmNsdXN0ZXJzurUYGAoKY2x1c3Rlcl9pZBIKY2x1c3Rlcl9pZMrzGFoIBBIHY2x1c3RlciIOcmVxLmNsdXN0ZXJfaWQqNC9hY2NvdW50cy97cmVxLmFjY291bnRfaWR9L2NsdXN0ZXJzL3tyZXEuY2x1c3Rlcl9pZH0yB3N1c3BlbmSC0+STAkUiQy9hcGkvY2x1c3Rlci92MS9hY2NvdW50cy97YWNjb3VudF9pZH0vY2x1c3RlcnMve2NsdXN0ZXJfaWR9L3N1c3BlbmQS1QIKEFVuc3VzcGVuZENsdXN0ZXISMC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5VbnN1c3BlbmRDbHVzdGVyUmVxdWVzdBoxLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLlVuc3VzcGVuZENsdXN0ZXJSZXNwb25zZSLbAYq1GA53cml0ZTpjbHVzdGVyc7q1GBgKCmNsdXN0ZXJfaWQSCmNsdXN0ZXJfaWTK8xhcCAQSB2NsdXN0ZXIiDnJlcS5jbHVzdGVyX2lkKjQvYWNjb3VudHMve3JlcS5hY2NvdW50X2lkfS9jbHVzdGVycy97cmVxLmNsdXN0ZXJfaWR9Mgl1bnN1c3BlbmSC0+STAkciRS9hcGkvY2x1c3Rlci92MS9hY2NvdW50cy97YWNjb3VudF9pZH0vY2x1c3RlcnMve2NsdXN0ZXJfaWR9L3Vuc3VzcGVuZBLpAgoURW5hYmxlQ2x1c3Rlckp3dFJiYWMSNC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5FbmFibGVDbHVzdGVySnd0UmJhY1JlcXVlc3QaNS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5FbmFibGVDbHVzdGVySnd0UmJhY1Jlc3BvbnNlIuMBirUYDndyaXRlOmNsdXN0ZXJzurUYGAoKY2x1c3Rlcl9pZBIKY2x1c3Rlcl9pZMrzGGMIBBIHY2x1c3RlciIOcmVxLmNsdXN0ZXJfaWQqNC9hY2NvdW50cy97cmVxLmFjY291bnRfaWR9L2NsdXN0ZXJzL3tyZXEuY2x1c3Rlcl9pZH0yEGVuYWJsZWQtand0LXJiYWOC0+STAkgiRi9hcGkvY2x1c3Rlci92MS9hY2NvdW50cy97YWNjb3VudF9pZH0vY2x1c3RlcnMve2NsdXN0ZXJfaWR9L2VuYWJsZS1qd3QSxgEKElN1Z2dlc3RDbHVzdGVyTmFtZRIyLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLlN1Z2dlc3RDbHVzdGVyTmFtZVJlcXVlc3QaMy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5TdWdnZXN0Q2x1c3Rlck5hbWVSZXNwb25zZSJHirUYAILT5JMCPRI7L2FwaS9jbHVzdGVyL3YxL2FjY291bnRzL3thY2NvdW50X2lkfS9jbHVzdGVycy9zdWdnZXN0LW5hbWUS4gEKEkxpc3RRZHJhbnRSZWxlYXNlcxIyLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkxpc3RRZHJhbnRSZWxlYXNlc1JlcXVlc3QaMy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5MaXN0UWRyYW50UmVsZWFzZXNSZXNwb25zZSJjirUYDXJlYWQ6Y2x1c3RlcnO6tRgYCgpjbHVzdGVyX2lkEgpjbHVzdGVyX2lkgtPkkwIwEi4vYXBpL2NsdXN0ZXIvdjEvYWNjb3VudHMve2FjY291bnRfaWR9L3JlbGVhc2VzEuABChBHZXRRZHJhbnRSZWxlYXNlEjAucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuR2V0UWRyYW50UmVsZWFzZVJlcXVlc3QaMS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5HZXRRZHJhbnRSZWxlYXNlUmVzcG9uc2UiZ4q1GA1yZWFkOmNsdXN0ZXJzurUYEgoHdmVyc2lvbhIHdmVyc2lvboLT5JMCOhI4L2FwaS9jbHVzdGVyL3YxL2FjY291bnRzL3thY2NvdW50X2lkfS9yZWxlYXNlcy97dmVyc2lvbn0aBsK1GAIIAUL+AQobY29tLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxQgxDbHVzdGVyUHJvdG9QAVpSZ2l0aHViLmNvbS9xZHJhbnQvcWRyYW50LWNsb3VkLXB1YmxpYy1hcGkvZ2VuL2dvL3FkcmFudC9jbG91ZC9jbHVzdGVyL3YxO2NsdXN0ZXJ2MaICA1FDQ6oCF1FkcmFudC5DbG91ZC5DbHVzdGVyLlYxygIXUWRyYW50XENsb3VkXENsdXN0ZXJcVjHiAiNRZHJhbnRcQ2xvdWRcQ2x1c3RlclxWMVxHUEJNZXRhZGF0YeoCGlFkcmFudDo6Q2xvdWQ6OkNsdXN0ZXI6OlYxYgZwcm90bzM", [file_buf_validate_validate, file_google_api_annotations, file_google_protobuf_timestamp, file_qdrant_cloud_common_v1_common, file_qdrant_cloud_event_v1_events]); /** * Describes the message qdrant.cloud.cluster.v1.ListClustersRequest. @@ -323,26 +323,33 @@ export const ClusterNodeResourcesSchema = /*@__PURE__*/ export const ClusterScalabilityInfoSchema = /*@__PURE__*/ messageDesc(file_qdrant_cloud_cluster_v1_cluster, 43); +/** + * Describes the message qdrant.cloud.cluster.v1.ClusterCapabilities. + * Use `create(ClusterCapabilitiesSchema)` to create a new message. + */ +export const ClusterCapabilitiesSchema = /*@__PURE__*/ + messageDesc(file_qdrant_cloud_cluster_v1_cluster, 44); + /** * Describes the message qdrant.cloud.cluster.v1.QdrantRelease. * Use `create(QdrantReleaseSchema)` to create a new message. */ export const QdrantReleaseSchema = /*@__PURE__*/ - messageDesc(file_qdrant_cloud_cluster_v1_cluster, 44); + messageDesc(file_qdrant_cloud_cluster_v1_cluster, 45); /** * Describes the message qdrant.cloud.cluster.v1.CreateClusterFromBackupRequest. * Use `create(CreateClusterFromBackupRequestSchema)` to create a new message. */ export const CreateClusterFromBackupRequestSchema = /*@__PURE__*/ - messageDesc(file_qdrant_cloud_cluster_v1_cluster, 45); + messageDesc(file_qdrant_cloud_cluster_v1_cluster, 46); /** * Describes the message qdrant.cloud.cluster.v1.CreateClusterFromBackupResponse. * Use `create(CreateClusterFromBackupResponseSchema)` to create a new message. */ export const CreateClusterFromBackupResponseSchema = /*@__PURE__*/ - messageDesc(file_qdrant_cloud_cluster_v1_cluster, 46); + messageDesc(file_qdrant_cloud_cluster_v1_cluster, 47); /** * Describes the enum qdrant.cloud.cluster.v1.ClusterServiceType. @@ -502,6 +509,34 @@ export const ClusterScalabilityStatusSchema = /*@__PURE__*/ export const ClusterScalabilityStatus = /*@__PURE__*/ tsEnum(ClusterScalabilityStatusSchema); +/** + * Describes the enum qdrant.cloud.cluster.v1.ClusterDiskExpansionSupportStatus. + */ +export const ClusterDiskExpansionSupportStatusSchema = /*@__PURE__*/ + enumDesc(file_qdrant_cloud_cluster_v1_cluster, 11); + +/** + * ClusterDiskExpansionSupportStatus defines the disk expansion support states of a cluster. + * + * @generated from enum qdrant.cloud.cluster.v1.ClusterDiskExpansionSupportStatus + */ +export const ClusterDiskExpansionSupportStatus = /*@__PURE__*/ + tsEnum(ClusterDiskExpansionSupportStatusSchema); + +/** + * Describes the enum qdrant.cloud.cluster.v1.ClusterBackupSupportStatus. + */ +export const ClusterBackupSupportStatusSchema = /*@__PURE__*/ + enumDesc(file_qdrant_cloud_cluster_v1_cluster, 12); + +/** + * ClusterBackupSupportStatus defines the backup support states of a cluster. + * + * @generated from enum qdrant.cloud.cluster.v1.ClusterBackupSupportStatus + */ +export const ClusterBackupSupportStatus = /*@__PURE__*/ + tsEnum(ClusterBackupSupportStatusSchema); + /** * ClusterService is the API used to configure cluster objects. * diff --git a/proto/qdrant/cloud/cluster/v1/cluster.proto b/proto/qdrant/cloud/cluster/v1/cluster.proto index 4adedf77..f98f3d64 100644 --- a/proto/qdrant/cloud/cluster/v1/cluster.proto +++ b/proto/qdrant/cloud/cluster/v1/cluster.proto @@ -1050,7 +1050,11 @@ message ClusterState { // For the complete cluster you have to multiply by cluster.configuration.number_of_nodes ClusterNodeResourcesSummary resources = 7 [(buf.validate.field).required = true]; // Whether the cluster can be scaled up or down. - ClusterScalabilityInfo scalability_info = 8 [(buf.validate.field).required = true]; + // Deprecated: Use capabilities.scalability_info instead + ClusterScalabilityInfo scalability_info = 8 [ + deprecated = true, + (buf.validate.field).required = true + ]; // List of nodes in the cluster. repeated ClusterNodeInfo nodes = 9; // Whether or not JWT Role Based Access Control (RBAC) is enabled. @@ -1059,6 +1063,8 @@ message ClusterState { // When this setting is false (and version 1.9+ is used) you can use EnableClusterJwtRbac to update. // If enabled, you can generate JWT tokens with fine-grained rules for access control. bool jwt_rbac = 10; + // Specifies whether some operations are supported by cluster or not. + ClusterCapabilities capabilities = 11 [(buf.validate.field).required = true]; } // ClusterNodeInfo represents a node in a cluster. @@ -1160,6 +1166,38 @@ message ClusterScalabilityInfo { optional string reason = 2 [(buf.validate.field).string.min_len = 1]; } +// ClusterDiskExpansionSupportStatus defines the disk expansion support states of a cluster. +enum ClusterDiskExpansionSupportStatus { + // Disk expansion support is unspecified. + CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_UNSPECIFIED = 0; + // Cluster supports disk expansion. + CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_SUPPORTED = 1; + // Cluster does not support disk expansion. + CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_NOT_SUPPORTED = 2; +} + +// ClusterBackupSupportStatus defines the backup support states of a cluster. +enum ClusterBackupSupportStatus { + // Backup support is unspecified. + CLUSTER_BACKUP_SUPPORT_STATUS_UNSPECIFIED = 0; + // Cluster supports backup. + CLUSTER_BACKUP_SUPPORT_STATUS_SUPPORTED = 1; + // Cluster does not support backup. + CLUSTER_BACKUP_SUPPORT_STATUS_NOT_SUPPORTED = 2; +} + +// ClusterCapabilities specifies whether some actions are supported by the cluster or not. +message ClusterCapabilities { + // Whether the StorageClass used by the cluster supports disk expansion or not. + // Disk scaling will be enabled or disabled based on this for hybrid cloud clusters. + ClusterDiskExpansionSupportStatus disk_expansion = 1; + // Whether it is possible to take a backup for the cluster or not. + // Backup tab will be shown or hidden based on this for hybrid cloud clusters. + ClusterBackupSupportStatus backup = 2; + // Whether the cluster can be scaled up or down. + ClusterScalabilityInfo scalability_info = 3 [(buf.validate.field).required = true]; +} + // buf:lint:ignore QDRANT_CLOUD_REQUIRED_ENTITY_FIELDS // QdrantRelease represent a single Qdrant release message QdrantRelease {