Signed-off-by: kejiang <ke.jiang@zilliz.com>

Co-authored-by: kejiang <ke.jiang@zilliz.com>
pull/16549/head
codeman 2022-04-19 16:35:39 +08:00 committed by GitHub
parent 426f607637
commit f5e1ded854
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 1693 additions and 469 deletions

View File

@ -287,3 +287,5 @@ common:
storageType: minio
security:
authorizationEnabled: false

View File

@ -389,6 +389,10 @@ class CreateCredentialRequestDefaultTypeInternal {
public:
::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<CreateCredentialRequest> _instance;
} _CreateCredentialRequest_default_instance_;
class UpdateCredentialRequestDefaultTypeInternal {
public:
::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<UpdateCredentialRequest> _instance;
} _UpdateCredentialRequest_default_instance_;
class DeleteCredentialRequestDefaultTypeInternal {
public:
::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<DeleteCredentialRequest> _instance;
@ -1716,6 +1720,21 @@ static void InitDefaultsscc_info_StringResponse_milvus_2eproto() {
{{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsscc_info_StringResponse_milvus_2eproto}, {
&scc_info_Status_common_2eproto.base,}};
static void InitDefaultsscc_info_UpdateCredentialRequest_milvus_2eproto() {
GOOGLE_PROTOBUF_VERIFY_VERSION;
{
void* ptr = &::milvus::proto::milvus::_UpdateCredentialRequest_default_instance_;
new (ptr) ::milvus::proto::milvus::UpdateCredentialRequest();
::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
}
::milvus::proto::milvus::UpdateCredentialRequest::InitAsDefaultInstance();
}
::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_UpdateCredentialRequest_milvus_2eproto =
{{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsscc_info_UpdateCredentialRequest_milvus_2eproto}, {
&scc_info_MsgBase_common_2eproto.base,}};
static void InitDefaultsscc_info_VectorIDs_milvus_2eproto() {
GOOGLE_PROTOBUF_VERIFY_VERSION;
@ -1747,7 +1766,7 @@ static void InitDefaultsscc_info_VectorsArray_milvus_2eproto() {
&scc_info_VectorIDs_milvus_2eproto.base,
&scc_info_VectorField_schema_2eproto.base,}};
static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_milvus_2eproto[89];
static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_milvus_2eproto[90];
static const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* file_level_enum_descriptors_milvus_2eproto[2];
static constexpr ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor const** file_level_service_descriptors_milvus_2eproto = nullptr;
@ -2508,6 +2527,17 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_milvus_2eproto::offsets[] PROT
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::CreateCredentialRequest, created_utc_timestamps_),
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::CreateCredentialRequest, modified_utc_timestamps_),
~0u, // no _has_bits_
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::UpdateCredentialRequest, _internal_metadata_),
~0u, // no _extensions_
~0u, // no _oneof_case_
~0u, // no _weak_field_map_
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::UpdateCredentialRequest, base_),
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::UpdateCredentialRequest, username_),
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::UpdateCredentialRequest, oldpassword_),
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::UpdateCredentialRequest, newpassword_),
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::UpdateCredentialRequest, created_utc_timestamps_),
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::UpdateCredentialRequest, modified_utc_timestamps_),
~0u, // no _has_bits_
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::DeleteCredentialRequest, _internal_metadata_),
~0u, // no _extensions_
~0u, // no _oneof_case_
@ -2615,9 +2645,10 @@ static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOB
{ 726, -1, sizeof(::milvus::proto::milvus::ReplicaInfo)},
{ 736, -1, sizeof(::milvus::proto::milvus::ShardReplica)},
{ 745, -1, sizeof(::milvus::proto::milvus::CreateCredentialRequest)},
{ 755, -1, sizeof(::milvus::proto::milvus::DeleteCredentialRequest)},
{ 762, -1, sizeof(::milvus::proto::milvus::ListCredUsersResponse)},
{ 769, -1, sizeof(::milvus::proto::milvus::ListCredUsersRequest)},
{ 755, -1, sizeof(::milvus::proto::milvus::UpdateCredentialRequest)},
{ 766, -1, sizeof(::milvus::proto::milvus::DeleteCredentialRequest)},
{ 773, -1, sizeof(::milvus::proto::milvus::ListCredUsersResponse)},
{ 780, -1, sizeof(::milvus::proto::milvus::ListCredUsersRequest)},
};
static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = {
@ -2707,6 +2738,7 @@ static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] =
reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::milvus::proto::milvus::_ReplicaInfo_default_instance_),
reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::milvus::proto::milvus::_ShardReplica_default_instance_),
reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::milvus::proto::milvus::_CreateCredentialRequest_default_instance_),
reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::milvus::proto::milvus::_UpdateCredentialRequest_default_instance_),
reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::milvus::proto::milvus::_DeleteCredentialRequest_default_instance_),
reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::milvus::proto::milvus::_ListCredUsersResponse_default_instance_),
reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::milvus::proto::milvus::_ListCredUsersRequest_default_instance_),
@ -3009,143 +3041,148 @@ const char descriptor_table_protodef_milvus_2eproto[] PROTOBUF_SECTION_VARIABLE(
"lvus.proto.common.MsgBase\022\020\n\010username\030\002 "
"\001(\t\022\020\n\010password\030\003 \001(\t\022\036\n\026created_utc_tim"
"estamps\030\004 \001(\004\022\037\n\027modified_utc_timestamps"
"\030\005 \001(\004\"W\n\027DeleteCredentialRequest\022*\n\004bas"
"e\030\001 \001(\0132\034.milvus.proto.common.MsgBase\022\020\n"
"\010username\030\002 \001(\t\"W\n\025ListCredUsersResponse"
"\022+\n\006status\030\001 \001(\0132\033.milvus.proto.common.S"
"tatus\022\021\n\tusernames\030\002 \003(\t\"B\n\024ListCredUser"
"sRequest\022*\n\004base\030\001 \001(\0132\034.milvus.proto.co"
"mmon.MsgBase*!\n\010ShowType\022\007\n\003All\020\000\022\014\n\010InM"
"emory\020\001*>\n\017PlaceholderType\022\010\n\004None\020\000\022\020\n\014"
"BinaryVector\020d\022\017\n\013FloatVector\020e2\270$\n\rMilv"
"usService\022_\n\020CreateCollection\022,.milvus.p"
"roto.milvus.CreateCollectionRequest\032\033.mi"
"lvus.proto.common.Status\"\000\022[\n\016DropCollec"
"tion\022*.milvus.proto.milvus.DropCollectio"
"nRequest\032\033.milvus.proto.common.Status\"\000\022"
"_\n\rHasCollection\022).milvus.proto.milvus.H"
"asCollectionRequest\032!.milvus.proto.milvu"
"s.BoolResponse\"\000\022[\n\016LoadCollection\022*.mil"
"vus.proto.milvus.LoadCollectionRequest\032\033"
"\030\005 \001(\004\"\302\001\n\027UpdateCredentialRequest\022*\n\004ba"
"se\030\001 \001(\0132\034.milvus.proto.common.MsgBase\022\020"
"\n\010username\030\002 \001(\t\022\023\n\013oldPassword\030\003 \001(\t\022\023\n"
"\013newPassword\030\004 \001(\t\022\036\n\026created_utc_timest"
"amps\030\005 \001(\004\022\037\n\027modified_utc_timestamps\030\006 "
"\001(\004\"W\n\027DeleteCredentialRequest\022*\n\004base\030\001"
" \001(\0132\034.milvus.proto.common.MsgBase\022\020\n\010us"
"ername\030\002 \001(\t\"W\n\025ListCredUsersResponse\022+\n"
"\006status\030\001 \001(\0132\033.milvus.proto.common.Stat"
"us\022\021\n\tusernames\030\002 \003(\t\"B\n\024ListCredUsersRe"
"quest\022*\n\004base\030\001 \001(\0132\034.milvus.proto.commo"
"n.MsgBase*!\n\010ShowType\022\007\n\003All\020\000\022\014\n\010InMemo"
"ry\020\001*>\n\017PlaceholderType\022\010\n\004None\020\000\022\020\n\014Bin"
"aryVector\020d\022\017\n\013FloatVector\020e2\270$\n\rMilvusS"
"ervice\022_\n\020CreateCollection\022,.milvus.prot"
"o.milvus.CreateCollectionRequest\032\033.milvu"
"s.proto.common.Status\"\000\022[\n\016DropCollectio"
"n\022*.milvus.proto.milvus.DropCollectionRe"
"quest\032\033.milvus.proto.common.Status\"\000\022_\n\r"
"HasCollection\022).milvus.proto.milvus.HasC"
"ollectionRequest\032!.milvus.proto.milvus.B"
"oolResponse\"\000\022[\n\016LoadCollection\022*.milvus"
".proto.milvus.LoadCollectionRequest\032\033.mi"
"lvus.proto.common.Status\"\000\022a\n\021ReleaseCol"
"lection\022-.milvus.proto.milvus.ReleaseCol"
"lectionRequest\032\033.milvus.proto.common.Sta"
"tus\"\000\022w\n\022DescribeCollection\022..milvus.pro"
"to.milvus.DescribeCollectionRequest\032/.mi"
"lvus.proto.milvus.DescribeCollectionResp"
"onse\"\000\022\206\001\n\027GetCollectionStatistics\0223.mil"
"vus.proto.milvus.GetCollectionStatistics"
"Request\0324.milvus.proto.milvus.GetCollect"
"ionStatisticsResponse\"\000\022n\n\017ShowCollectio"
"ns\022+.milvus.proto.milvus.ShowCollections"
"Request\032,.milvus.proto.milvus.ShowCollec"
"tionsResponse\"\000\022]\n\017CreatePartition\022+.mil"
"vus.proto.milvus.CreatePartitionRequest\032"
"\033.milvus.proto.common.Status\"\000\022Y\n\rDropPa"
"rtition\022).milvus.proto.milvus.DropPartit"
"ionRequest\032\033.milvus.proto.common.Status\""
"\000\022]\n\014HasPartition\022(.milvus.proto.milvus."
"HasPartitionRequest\032!.milvus.proto.milvu"
"s.BoolResponse\"\000\022[\n\016LoadPartitions\022*.mil"
"vus.proto.milvus.LoadPartitionsRequest\032\033"
".milvus.proto.common.Status\"\000\022a\n\021Release"
"Collection\022-.milvus.proto.milvus.Release"
"CollectionRequest\032\033.milvus.proto.common."
"Status\"\000\022w\n\022DescribeCollection\022..milvus."
"proto.milvus.DescribeCollectionRequest\032/"
".milvus.proto.milvus.DescribeCollectionR"
"esponse\"\000\022\206\001\n\027GetCollectionStatistics\0223."
"milvus.proto.milvus.GetCollectionStatist"
"icsRequest\0324.milvus.proto.milvus.GetColl"
"ectionStatisticsResponse\"\000\022n\n\017ShowCollec"
"tions\022+.milvus.proto.milvus.ShowCollecti"
"onsRequest\032,.milvus.proto.milvus.ShowCol"
"lectionsResponse\"\000\022]\n\017CreatePartition\022+."
"milvus.proto.milvus.CreatePartitionReque"
"st\032\033.milvus.proto.common.Status\"\000\022Y\n\rDro"
"pPartition\022).milvus.proto.milvus.DropPar"
"titionRequest\032\033.milvus.proto.common.Stat"
"us\"\000\022]\n\014HasPartition\022(.milvus.proto.milv"
"us.HasPartitionRequest\032!.milvus.proto.mi"
"lvus.BoolResponse\"\000\022[\n\016LoadPartitions\022*."
"milvus.proto.milvus.LoadPartitionsReques"
"t\032\033.milvus.proto.common.Status\"\000\022a\n\021Rele"
"asePartitions\022-.milvus.proto.milvus.Rele"
"asePartitionsRequest\032\033.milvus.proto.comm"
"on.Status\"\000\022\203\001\n\026GetPartitionStatistics\0222"
".milvus.proto.milvus.GetPartitionStatist"
"icsRequest\0323.milvus.proto.milvus.GetPart"
"itionStatisticsResponse\"\000\022k\n\016ShowPartiti"
"ons\022*.milvus.proto.milvus.ShowPartitions"
"Request\032+.milvus.proto.milvus.ShowPartit"
"ionsResponse\"\000\022U\n\013CreateAlias\022\'.milvus.p"
"roto.milvus.CreateAliasRequest\032\033.milvus."
"proto.common.Status\"\000\022Q\n\tDropAlias\022%.mil"
"vus.proto.milvus.DropAliasRequest\032\033.milv"
"us.proto.common.Status\"\000\022S\n\nAlterAlias\022&"
".milvus.proto.milvus.AlterAliasRequest\032\033"
".milvus.proto.common.Status\"\000\022U\n\013CreateI"
"ndex\022\'.milvus.proto.milvus.CreateIndexRe"
"quest\032\033.milvus.proto.common.Status\"\000\022h\n\r"
"DescribeIndex\022).milvus.proto.milvus.Desc"
"ribeIndexRequest\032*.milvus.proto.milvus.D"
"escribeIndexResponse\"\000\022h\n\rGetIndexState\022"
").milvus.proto.milvus.GetIndexStateReque"
"st\032*.milvus.proto.milvus.GetIndexStateRe"
"sponse\"\000\022\200\001\n\025GetIndexBuildProgress\0221.mil"
"vus.proto.milvus.GetIndexBuildProgressRe"
"quest\0322.milvus.proto.milvus.GetIndexBuil"
"dProgressResponse\"\000\022Q\n\tDropIndex\022%.milvu"
"s.proto.milvus.DropIndexRequest\032\033.milvus"
".proto.common.Status\"\000\022S\n\006Insert\022\".milvu"
"s.proto.milvus.InsertRequest\032#.milvus.pr"
"oto.milvus.MutationResult\"\000\022S\n\006Delete\022\"."
"milvus.proto.milvus.DeleteRequest\032#.milv"
"us.proto.milvus.MutationResult\"\000\022R\n\006Sear"
"ch\022\".milvus.proto.milvus.SearchRequest\032\""
".milvus.proto.milvus.SearchResults\"\000\022P\n\005"
"Flush\022!.milvus.proto.milvus.FlushRequest"
"\032\".milvus.proto.milvus.FlushResponse\"\000\022O"
"\n\005Query\022!.milvus.proto.milvus.QueryReque"
"st\032!.milvus.proto.milvus.QueryResults\"\000\022"
"d\n\014CalcDistance\022(.milvus.proto.milvus.Ca"
"lcDistanceRequest\032(.milvus.proto.milvus."
"CalcDistanceResults\"\000\022h\n\rGetFlushState\022)"
".milvus.proto.milvus.GetFlushStateReques"
"t\032*.milvus.proto.milvus.GetFlushStateRes"
"ponse\"\000\022\211\001\n\030GetPersistentSegmentInfo\0224.m"
"ilvus.proto.milvus.GetPersistentSegmentI"
"nfoRequest\0325.milvus.proto.milvus.GetPers"
"istentSegmentInfoResponse\"\000\022z\n\023GetQueryS"
"egmentInfo\022/.milvus.proto.milvus.GetQuer"
"ySegmentInfoRequest\0320.milvus.proto.milvu"
"s.GetQuerySegmentInfoResponse\"\000\022b\n\013GetRe"
"plicas\022\'.milvus.proto.milvus.GetReplicas"
"Request\032(.milvus.proto.milvus.GetReplica"
"sResponse\"\000\022P\n\005Dummy\022!.milvus.proto.milv"
"us.DummyRequest\032\".milvus.proto.milvus.Du"
"mmyResponse\"\000\022e\n\014RegisterLink\022(.milvus.p"
"roto.milvus.RegisterLinkRequest\032).milvus"
".proto.milvus.RegisterLinkResponse\"\000\022_\n\n"
"GetMetrics\022&.milvus.proto.milvus.GetMetr"
"icsRequest\032\'.milvus.proto.milvus.GetMetr"
"icsResponse\"\000\022U\n\013LoadBalance\022\'.milvus.pr"
"oto.milvus.LoadBalanceRequest\032\033.milvus.p"
"roto.common.Status\"\000\022w\n\022GetCompactionSta"
"te\022..milvus.proto.milvus.GetCompactionSt"
"ateRequest\032/.milvus.proto.milvus.GetComp"
"actionStateResponse\"\000\022q\n\020ManualCompactio"
"n\022,.milvus.proto.milvus.ManualCompaction"
"Request\032-.milvus.proto.milvus.ManualComp"
"actionResponse\"\000\022\200\001\n\033GetCompactionStateW"
"ithPlans\022..milvus.proto.milvus.GetCompac"
"tionPlansRequest\032/.milvus.proto.milvus.G"
"etCompactionPlansResponse\"\000\022S\n\006Import\022\"."
"milvus.proto.milvus.ImportRequest\032#.milv"
"us.proto.milvus.ImportResponse\"\000\022k\n\016GetI"
"mportState\022*.milvus.proto.milvus.GetImpo"
"rtStateRequest\032+.milvus.proto.milvus.Get"
"ImportStateResponse\"\000\022_\n\020CreateCredentia"
"l\022,.milvus.proto.milvus.CreateCredential"
"Request\032\033.milvus.proto.common.Status\"\000\022_"
"\n\020UpdateCredential\022,.milvus.proto.milvus"
".CreateCredentialRequest\032\033.milvus.proto."
"common.Status\"\000\022_\n\020DeleteCredential\022,.mi"
"lvus.proto.milvus.DeleteCredentialReques"
"t\032\033.milvus.proto.common.Status\"\000\022h\n\rList"
"CredUsers\022).milvus.proto.milvus.ListCred"
"UsersRequest\032*.milvus.proto.milvus.ListC"
"redUsersResponse\"\0002u\n\014ProxyService\022e\n\014Re"
"gisterLink\022(.milvus.proto.milvus.Registe"
"rLinkRequest\032).milvus.proto.milvus.Regis"
"terLinkResponse\"\000BW\n\016io.milvus.grpcB\013Mil"
"vusProtoP\001Z3github.com/milvus-io/milvus/"
"internal/proto/milvuspb\240\001\001b\006proto3"
"Partitions\022-.milvus.proto.milvus.Release"
"PartitionsRequest\032\033.milvus.proto.common."
"Status\"\000\022\203\001\n\026GetPartitionStatistics\0222.mi"
"lvus.proto.milvus.GetPartitionStatistics"
"Request\0323.milvus.proto.milvus.GetPartiti"
"onStatisticsResponse\"\000\022k\n\016ShowPartitions"
"\022*.milvus.proto.milvus.ShowPartitionsReq"
"uest\032+.milvus.proto.milvus.ShowPartition"
"sResponse\"\000\022U\n\013CreateAlias\022\'.milvus.prot"
"o.milvus.CreateAliasRequest\032\033.milvus.pro"
"to.common.Status\"\000\022Q\n\tDropAlias\022%.milvus"
".proto.milvus.DropAliasRequest\032\033.milvus."
"proto.common.Status\"\000\022S\n\nAlterAlias\022&.mi"
"lvus.proto.milvus.AlterAliasRequest\032\033.mi"
"lvus.proto.common.Status\"\000\022U\n\013CreateInde"
"x\022\'.milvus.proto.milvus.CreateIndexReque"
"st\032\033.milvus.proto.common.Status\"\000\022h\n\rDes"
"cribeIndex\022).milvus.proto.milvus.Describ"
"eIndexRequest\032*.milvus.proto.milvus.Desc"
"ribeIndexResponse\"\000\022h\n\rGetIndexState\022).m"
"ilvus.proto.milvus.GetIndexStateRequest\032"
"*.milvus.proto.milvus.GetIndexStateRespo"
"nse\"\000\022\200\001\n\025GetIndexBuildProgress\0221.milvus"
".proto.milvus.GetIndexBuildProgressReque"
"st\0322.milvus.proto.milvus.GetIndexBuildPr"
"ogressResponse\"\000\022Q\n\tDropIndex\022%.milvus.p"
"roto.milvus.DropIndexRequest\032\033.milvus.pr"
"oto.common.Status\"\000\022S\n\006Insert\022\".milvus.p"
"roto.milvus.InsertRequest\032#.milvus.proto"
".milvus.MutationResult\"\000\022S\n\006Delete\022\".mil"
"vus.proto.milvus.DeleteRequest\032#.milvus."
"proto.milvus.MutationResult\"\000\022R\n\006Search\022"
"\".milvus.proto.milvus.SearchRequest\032\".mi"
"lvus.proto.milvus.SearchResults\"\000\022P\n\005Flu"
"sh\022!.milvus.proto.milvus.FlushRequest\032\"."
"milvus.proto.milvus.FlushResponse\"\000\022O\n\005Q"
"uery\022!.milvus.proto.milvus.QueryRequest\032"
"!.milvus.proto.milvus.QueryResults\"\000\022d\n\014"
"CalcDistance\022(.milvus.proto.milvus.CalcD"
"istanceRequest\032(.milvus.proto.milvus.Cal"
"cDistanceResults\"\000\022h\n\rGetFlushState\022).mi"
"lvus.proto.milvus.GetFlushStateRequest\032*"
".milvus.proto.milvus.GetFlushStateRespon"
"se\"\000\022\211\001\n\030GetPersistentSegmentInfo\0224.milv"
"us.proto.milvus.GetPersistentSegmentInfo"
"Request\0325.milvus.proto.milvus.GetPersist"
"entSegmentInfoResponse\"\000\022z\n\023GetQuerySegm"
"entInfo\022/.milvus.proto.milvus.GetQuerySe"
"gmentInfoRequest\0320.milvus.proto.milvus.G"
"etQuerySegmentInfoResponse\"\000\022b\n\013GetRepli"
"cas\022\'.milvus.proto.milvus.GetReplicasReq"
"uest\032(.milvus.proto.milvus.GetReplicasRe"
"sponse\"\000\022P\n\005Dummy\022!.milvus.proto.milvus."
"DummyRequest\032\".milvus.proto.milvus.Dummy"
"Response\"\000\022e\n\014RegisterLink\022(.milvus.prot"
"o.milvus.RegisterLinkRequest\032).milvus.pr"
"oto.milvus.RegisterLinkResponse\"\000\022_\n\nGet"
"Metrics\022&.milvus.proto.milvus.GetMetrics"
"Request\032\'.milvus.proto.milvus.GetMetrics"
"Response\"\000\022U\n\013LoadBalance\022\'.milvus.proto"
".milvus.LoadBalanceRequest\032\033.milvus.prot"
"o.common.Status\"\000\022w\n\022GetCompactionState\022"
"..milvus.proto.milvus.GetCompactionState"
"Request\032/.milvus.proto.milvus.GetCompact"
"ionStateResponse\"\000\022q\n\020ManualCompaction\022,"
".milvus.proto.milvus.ManualCompactionReq"
"uest\032-.milvus.proto.milvus.ManualCompact"
"ionResponse\"\000\022\200\001\n\033GetCompactionStateWith"
"Plans\022..milvus.proto.milvus.GetCompactio"
"nPlansRequest\032/.milvus.proto.milvus.GetC"
"ompactionPlansResponse\"\000\022S\n\006Import\022\".mil"
"vus.proto.milvus.ImportRequest\032#.milvus."
"proto.milvus.ImportResponse\"\000\022k\n\016GetImpo"
"rtState\022*.milvus.proto.milvus.GetImportS"
"tateRequest\032+.milvus.proto.milvus.GetImp"
"ortStateResponse\"\000\022_\n\020CreateCredential\022,"
".milvus.proto.milvus.CreateCredentialReq"
"uest\032\033.milvus.proto.common.Status\"\000\022_\n\020U"
"pdateCredential\022,.milvus.proto.milvus.Up"
"dateCredentialRequest\032\033.milvus.proto.com"
"mon.Status\"\000\022_\n\020DeleteCredential\022,.milvu"
"s.proto.milvus.DeleteCredentialRequest\032\033"
".milvus.proto.common.Status\"\000\022h\n\rListCre"
"dUsers\022).milvus.proto.milvus.ListCredUse"
"rsRequest\032*.milvus.proto.milvus.ListCred"
"UsersResponse\"\0002u\n\014ProxyService\022e\n\014Regis"
"terLink\022(.milvus.proto.milvus.RegisterLi"
"nkRequest\032).milvus.proto.milvus.Register"
"LinkResponse\"\000BW\n\016io.milvus.grpcB\013Milvus"
"ProtoP\001Z3github.com/milvus-io/milvus/int"
"ernal/proto/milvuspb\240\001\001b\006proto3"
;
static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_milvus_2eproto_deps[2] = {
&::descriptor_table_common_2eproto,
&::descriptor_table_schema_2eproto,
};
static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_milvus_2eproto_sccs[89] = {
static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_milvus_2eproto_sccs[90] = {
&scc_info_AlterAliasRequest_milvus_2eproto.base,
&scc_info_BoolResponse_milvus_2eproto.base,
&scc_info_CalcDistanceRequest_milvus_2eproto.base,
@ -3233,16 +3270,17 @@ static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_mil
&scc_info_ShowSegmentsRequest_milvus_2eproto.base,
&scc_info_ShowSegmentsResponse_milvus_2eproto.base,
&scc_info_StringResponse_milvus_2eproto.base,
&scc_info_UpdateCredentialRequest_milvus_2eproto.base,
&scc_info_VectorIDs_milvus_2eproto.base,
&scc_info_VectorsArray_milvus_2eproto.base,
};
static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_milvus_2eproto_once;
static bool descriptor_table_milvus_2eproto_initialized = false;
const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_milvus_2eproto = {
&descriptor_table_milvus_2eproto_initialized, descriptor_table_protodef_milvus_2eproto, "milvus.proto", 17074,
&descriptor_table_milvus_2eproto_once, descriptor_table_milvus_2eproto_sccs, descriptor_table_milvus_2eproto_deps, 89, 2,
&descriptor_table_milvus_2eproto_initialized, descriptor_table_protodef_milvus_2eproto, "milvus.proto", 17271,
&descriptor_table_milvus_2eproto_once, descriptor_table_milvus_2eproto_sccs, descriptor_table_milvus_2eproto_deps, 90, 2,
schemas, file_default_instances, TableStruct_milvus_2eproto::offsets,
file_level_metadata_milvus_2eproto, 89, file_level_enum_descriptors_milvus_2eproto, file_level_service_descriptors_milvus_2eproto,
file_level_metadata_milvus_2eproto, 90, file_level_enum_descriptors_milvus_2eproto, file_level_service_descriptors_milvus_2eproto,
};
// Force running AddDescriptors() at dynamic initialization time.
@ -39759,6 +39797,557 @@ void CreateCredentialRequest::InternalSwap(CreateCredentialRequest* other) {
}
// ===================================================================
void UpdateCredentialRequest::InitAsDefaultInstance() {
::milvus::proto::milvus::_UpdateCredentialRequest_default_instance_._instance.get_mutable()->base_ = const_cast< ::milvus::proto::common::MsgBase*>(
::milvus::proto::common::MsgBase::internal_default_instance());
}
class UpdateCredentialRequest::_Internal {
public:
static const ::milvus::proto::common::MsgBase& base(const UpdateCredentialRequest* msg);
};
const ::milvus::proto::common::MsgBase&
UpdateCredentialRequest::_Internal::base(const UpdateCredentialRequest* msg) {
return *msg->base_;
}
void UpdateCredentialRequest::clear_base() {
if (GetArenaNoVirtual() == nullptr && base_ != nullptr) {
delete base_;
}
base_ = nullptr;
}
UpdateCredentialRequest::UpdateCredentialRequest()
: ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) {
SharedCtor();
// @@protoc_insertion_point(constructor:milvus.proto.milvus.UpdateCredentialRequest)
}
UpdateCredentialRequest::UpdateCredentialRequest(const UpdateCredentialRequest& from)
: ::PROTOBUF_NAMESPACE_ID::Message(),
_internal_metadata_(nullptr) {
_internal_metadata_.MergeFrom(from._internal_metadata_);
username_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
if (!from.username().empty()) {
username_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.username_);
}
oldpassword_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
if (!from.oldpassword().empty()) {
oldpassword_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.oldpassword_);
}
newpassword_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
if (!from.newpassword().empty()) {
newpassword_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.newpassword_);
}
if (from.has_base()) {
base_ = new ::milvus::proto::common::MsgBase(*from.base_);
} else {
base_ = nullptr;
}
::memcpy(&created_utc_timestamps_, &from.created_utc_timestamps_,
static_cast<size_t>(reinterpret_cast<char*>(&modified_utc_timestamps_) -
reinterpret_cast<char*>(&created_utc_timestamps_)) + sizeof(modified_utc_timestamps_));
// @@protoc_insertion_point(copy_constructor:milvus.proto.milvus.UpdateCredentialRequest)
}
void UpdateCredentialRequest::SharedCtor() {
::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_UpdateCredentialRequest_milvus_2eproto.base);
username_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
oldpassword_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
newpassword_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
::memset(&base_, 0, static_cast<size_t>(
reinterpret_cast<char*>(&modified_utc_timestamps_) -
reinterpret_cast<char*>(&base_)) + sizeof(modified_utc_timestamps_));
}
UpdateCredentialRequest::~UpdateCredentialRequest() {
// @@protoc_insertion_point(destructor:milvus.proto.milvus.UpdateCredentialRequest)
SharedDtor();
}
void UpdateCredentialRequest::SharedDtor() {
username_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
oldpassword_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
newpassword_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
if (this != internal_default_instance()) delete base_;
}
void UpdateCredentialRequest::SetCachedSize(int size) const {
_cached_size_.Set(size);
}
const UpdateCredentialRequest& UpdateCredentialRequest::default_instance() {
::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_UpdateCredentialRequest_milvus_2eproto.base);
return *internal_default_instance();
}
void UpdateCredentialRequest::Clear() {
// @@protoc_insertion_point(message_clear_start:milvus.proto.milvus.UpdateCredentialRequest)
::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
// Prevent compiler warnings about cached_has_bits being unused
(void) cached_has_bits;
username_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
oldpassword_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
newpassword_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
if (GetArenaNoVirtual() == nullptr && base_ != nullptr) {
delete base_;
}
base_ = nullptr;
::memset(&created_utc_timestamps_, 0, static_cast<size_t>(
reinterpret_cast<char*>(&modified_utc_timestamps_) -
reinterpret_cast<char*>(&created_utc_timestamps_)) + sizeof(modified_utc_timestamps_));
_internal_metadata_.Clear();
}
#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
const char* UpdateCredentialRequest::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
while (!ctx->Done(&ptr)) {
::PROTOBUF_NAMESPACE_ID::uint32 tag;
ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
CHK_(ptr);
switch (tag >> 3) {
// .milvus.proto.common.MsgBase base = 1;
case 1:
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
ptr = ctx->ParseMessage(mutable_base(), ptr);
CHK_(ptr);
} else goto handle_unusual;
continue;
// string username = 2;
case 2:
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_username(), ptr, ctx, "milvus.proto.milvus.UpdateCredentialRequest.username");
CHK_(ptr);
} else goto handle_unusual;
continue;
// string oldPassword = 3;
case 3:
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 26)) {
ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_oldpassword(), ptr, ctx, "milvus.proto.milvus.UpdateCredentialRequest.oldPassword");
CHK_(ptr);
} else goto handle_unusual;
continue;
// string newPassword = 4;
case 4:
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 34)) {
ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_newpassword(), ptr, ctx, "milvus.proto.milvus.UpdateCredentialRequest.newPassword");
CHK_(ptr);
} else goto handle_unusual;
continue;
// uint64 created_utc_timestamps = 5;
case 5:
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 40)) {
created_utc_timestamps_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr);
CHK_(ptr);
} else goto handle_unusual;
continue;
// uint64 modified_utc_timestamps = 6;
case 6:
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 48)) {
modified_utc_timestamps_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr);
CHK_(ptr);
} else goto handle_unusual;
continue;
default: {
handle_unusual:
if ((tag & 7) == 4 || tag == 0) {
ctx->SetLastTag(tag);
goto success;
}
ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx);
CHK_(ptr != nullptr);
continue;
}
} // switch
} // while
success:
return ptr;
failure:
ptr = nullptr;
goto success;
#undef CHK_
}
#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
bool UpdateCredentialRequest::MergePartialFromCodedStream(
::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure
::PROTOBUF_NAMESPACE_ID::uint32 tag;
// @@protoc_insertion_point(parse_start:milvus.proto.milvus.UpdateCredentialRequest)
for (;;) {
::std::pair<::PROTOBUF_NAMESPACE_ID::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
tag = p.first;
if (!p.second) goto handle_unusual;
switch (::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::GetTagFieldNumber(tag)) {
// .milvus.proto.common.MsgBase base = 1;
case 1: {
if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (10 & 0xFF)) {
DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadMessage(
input, mutable_base()));
} else {
goto handle_unusual;
}
break;
}
// string username = 2;
case 2: {
if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (18 & 0xFF)) {
DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString(
input, this->mutable_username()));
DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
this->username().data(), static_cast<int>(this->username().length()),
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE,
"milvus.proto.milvus.UpdateCredentialRequest.username"));
} else {
goto handle_unusual;
}
break;
}
// string oldPassword = 3;
case 3: {
if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (26 & 0xFF)) {
DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString(
input, this->mutable_oldpassword()));
DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
this->oldpassword().data(), static_cast<int>(this->oldpassword().length()),
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE,
"milvus.proto.milvus.UpdateCredentialRequest.oldPassword"));
} else {
goto handle_unusual;
}
break;
}
// string newPassword = 4;
case 4: {
if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (34 & 0xFF)) {
DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString(
input, this->mutable_newpassword()));
DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
this->newpassword().data(), static_cast<int>(this->newpassword().length()),
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE,
"milvus.proto.milvus.UpdateCredentialRequest.newPassword"));
} else {
goto handle_unusual;
}
break;
}
// uint64 created_utc_timestamps = 5;
case 5: {
if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (40 & 0xFF)) {
DO_((::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadPrimitive<
::PROTOBUF_NAMESPACE_ID::uint64, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_UINT64>(
input, &created_utc_timestamps_)));
} else {
goto handle_unusual;
}
break;
}
// uint64 modified_utc_timestamps = 6;
case 6: {
if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (48 & 0xFF)) {
DO_((::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadPrimitive<
::PROTOBUF_NAMESPACE_ID::uint64, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_UINT64>(
input, &modified_utc_timestamps_)));
} else {
goto handle_unusual;
}
break;
}
default: {
handle_unusual:
if (tag == 0) {
goto success;
}
DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SkipField(
input, tag, _internal_metadata_.mutable_unknown_fields()));
break;
}
}
}
success:
// @@protoc_insertion_point(parse_success:milvus.proto.milvus.UpdateCredentialRequest)
return true;
failure:
// @@protoc_insertion_point(parse_failure:milvus.proto.milvus.UpdateCredentialRequest)
return false;
#undef DO_
}
#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
void UpdateCredentialRequest::SerializeWithCachedSizes(
::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const {
// @@protoc_insertion_point(serialize_start:milvus.proto.milvus.UpdateCredentialRequest)
::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
(void) cached_has_bits;
// .milvus.proto.common.MsgBase base = 1;
if (this->has_base()) {
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteMessageMaybeToArray(
1, _Internal::base(this), output);
}
// string username = 2;
if (this->username().size() > 0) {
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
this->username().data(), static_cast<int>(this->username().length()),
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
"milvus.proto.milvus.UpdateCredentialRequest.username");
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringMaybeAliased(
2, this->username(), output);
}
// string oldPassword = 3;
if (this->oldpassword().size() > 0) {
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
this->oldpassword().data(), static_cast<int>(this->oldpassword().length()),
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
"milvus.proto.milvus.UpdateCredentialRequest.oldPassword");
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringMaybeAliased(
3, this->oldpassword(), output);
}
// string newPassword = 4;
if (this->newpassword().size() > 0) {
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
this->newpassword().data(), static_cast<int>(this->newpassword().length()),
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
"milvus.proto.milvus.UpdateCredentialRequest.newPassword");
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringMaybeAliased(
4, this->newpassword(), output);
}
// uint64 created_utc_timestamps = 5;
if (this->created_utc_timestamps() != 0) {
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64(5, this->created_utc_timestamps(), output);
}
// uint64 modified_utc_timestamps = 6;
if (this->modified_utc_timestamps() != 0) {
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64(6, this->modified_utc_timestamps(), output);
}
if (_internal_metadata_.have_unknown_fields()) {
::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFields(
_internal_metadata_.unknown_fields(), output);
}
// @@protoc_insertion_point(serialize_end:milvus.proto.milvus.UpdateCredentialRequest)
}
::PROTOBUF_NAMESPACE_ID::uint8* UpdateCredentialRequest::InternalSerializeWithCachedSizesToArray(
::PROTOBUF_NAMESPACE_ID::uint8* target) const {
// @@protoc_insertion_point(serialize_to_array_start:milvus.proto.milvus.UpdateCredentialRequest)
::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
(void) cached_has_bits;
// .milvus.proto.common.MsgBase base = 1;
if (this->has_base()) {
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
InternalWriteMessageToArray(
1, _Internal::base(this), target);
}
// string username = 2;
if (this->username().size() > 0) {
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
this->username().data(), static_cast<int>(this->username().length()),
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
"milvus.proto.milvus.UpdateCredentialRequest.username");
target =
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringToArray(
2, this->username(), target);
}
// string oldPassword = 3;
if (this->oldpassword().size() > 0) {
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
this->oldpassword().data(), static_cast<int>(this->oldpassword().length()),
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
"milvus.proto.milvus.UpdateCredentialRequest.oldPassword");
target =
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringToArray(
3, this->oldpassword(), target);
}
// string newPassword = 4;
if (this->newpassword().size() > 0) {
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
this->newpassword().data(), static_cast<int>(this->newpassword().length()),
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
"milvus.proto.milvus.UpdateCredentialRequest.newPassword");
target =
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringToArray(
4, this->newpassword(), target);
}
// uint64 created_utc_timestamps = 5;
if (this->created_utc_timestamps() != 0) {
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64ToArray(5, this->created_utc_timestamps(), target);
}
// uint64 modified_utc_timestamps = 6;
if (this->modified_utc_timestamps() != 0) {
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64ToArray(6, this->modified_utc_timestamps(), target);
}
if (_internal_metadata_.have_unknown_fields()) {
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFieldsToArray(
_internal_metadata_.unknown_fields(), target);
}
// @@protoc_insertion_point(serialize_to_array_end:milvus.proto.milvus.UpdateCredentialRequest)
return target;
}
size_t UpdateCredentialRequest::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:milvus.proto.milvus.UpdateCredentialRequest)
size_t total_size = 0;
if (_internal_metadata_.have_unknown_fields()) {
total_size +=
::PROTOBUF_NAMESPACE_ID::internal::WireFormat::ComputeUnknownFieldsSize(
_internal_metadata_.unknown_fields());
}
::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
// Prevent compiler warnings about cached_has_bits being unused
(void) cached_has_bits;
// string username = 2;
if (this->username().size() > 0) {
total_size += 1 +
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
this->username());
}
// string oldPassword = 3;
if (this->oldpassword().size() > 0) {
total_size += 1 +
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
this->oldpassword());
}
// string newPassword = 4;
if (this->newpassword().size() > 0) {
total_size += 1 +
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
this->newpassword());
}
// .milvus.proto.common.MsgBase base = 1;
if (this->has_base()) {
total_size += 1 +
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
*base_);
}
// uint64 created_utc_timestamps = 5;
if (this->created_utc_timestamps() != 0) {
total_size += 1 +
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::UInt64Size(
this->created_utc_timestamps());
}
// uint64 modified_utc_timestamps = 6;
if (this->modified_utc_timestamps() != 0) {
total_size += 1 +
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::UInt64Size(
this->modified_utc_timestamps());
}
int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
SetCachedSize(cached_size);
return total_size;
}
void UpdateCredentialRequest::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:milvus.proto.milvus.UpdateCredentialRequest)
GOOGLE_DCHECK_NE(&from, this);
const UpdateCredentialRequest* source =
::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated<UpdateCredentialRequest>(
&from);
if (source == nullptr) {
// @@protoc_insertion_point(generalized_merge_from_cast_fail:milvus.proto.milvus.UpdateCredentialRequest)
::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this);
} else {
// @@protoc_insertion_point(generalized_merge_from_cast_success:milvus.proto.milvus.UpdateCredentialRequest)
MergeFrom(*source);
}
}
void UpdateCredentialRequest::MergeFrom(const UpdateCredentialRequest& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:milvus.proto.milvus.UpdateCredentialRequest)
GOOGLE_DCHECK_NE(&from, this);
_internal_metadata_.MergeFrom(from._internal_metadata_);
::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
(void) cached_has_bits;
if (from.username().size() > 0) {
username_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.username_);
}
if (from.oldpassword().size() > 0) {
oldpassword_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.oldpassword_);
}
if (from.newpassword().size() > 0) {
newpassword_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.newpassword_);
}
if (from.has_base()) {
mutable_base()->::milvus::proto::common::MsgBase::MergeFrom(from.base());
}
if (from.created_utc_timestamps() != 0) {
set_created_utc_timestamps(from.created_utc_timestamps());
}
if (from.modified_utc_timestamps() != 0) {
set_modified_utc_timestamps(from.modified_utc_timestamps());
}
}
void UpdateCredentialRequest::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:milvus.proto.milvus.UpdateCredentialRequest)
if (&from == this) return;
Clear();
MergeFrom(from);
}
void UpdateCredentialRequest::CopyFrom(const UpdateCredentialRequest& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:milvus.proto.milvus.UpdateCredentialRequest)
if (&from == this) return;
Clear();
MergeFrom(from);
}
bool UpdateCredentialRequest::IsInitialized() const {
return true;
}
void UpdateCredentialRequest::InternalSwap(UpdateCredentialRequest* other) {
using std::swap;
_internal_metadata_.Swap(&other->_internal_metadata_);
username_.Swap(&other->username_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
GetArenaNoVirtual());
oldpassword_.Swap(&other->oldpassword_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
GetArenaNoVirtual());
newpassword_.Swap(&other->newpassword_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
GetArenaNoVirtual());
swap(base_, other->base_);
swap(created_utc_timestamps_, other->created_utc_timestamps_);
swap(modified_utc_timestamps_, other->modified_utc_timestamps_);
}
::PROTOBUF_NAMESPACE_ID::Metadata UpdateCredentialRequest::GetMetadata() const {
return GetMetadataStatic();
}
// ===================================================================
void DeleteCredentialRequest::InitAsDefaultInstance() {
@ -40961,6 +41550,9 @@ template<> PROTOBUF_NOINLINE ::milvus::proto::milvus::ShardReplica* Arena::Creat
template<> PROTOBUF_NOINLINE ::milvus::proto::milvus::CreateCredentialRequest* Arena::CreateMaybeMessage< ::milvus::proto::milvus::CreateCredentialRequest >(Arena* arena) {
return Arena::CreateInternal< ::milvus::proto::milvus::CreateCredentialRequest >(arena);
}
template<> PROTOBUF_NOINLINE ::milvus::proto::milvus::UpdateCredentialRequest* Arena::CreateMaybeMessage< ::milvus::proto::milvus::UpdateCredentialRequest >(Arena* arena) {
return Arena::CreateInternal< ::milvus::proto::milvus::UpdateCredentialRequest >(arena);
}
template<> PROTOBUF_NOINLINE ::milvus::proto::milvus::DeleteCredentialRequest* Arena::CreateMaybeMessage< ::milvus::proto::milvus::DeleteCredentialRequest >(Arena* arena) {
return Arena::CreateInternal< ::milvus::proto::milvus::DeleteCredentialRequest >(arena);
}

View File

@ -53,7 +53,7 @@ struct TableStruct_milvus_2eproto {
PROTOBUF_SECTION_VARIABLE(protodesc_cold);
static const ::PROTOBUF_NAMESPACE_ID::internal::AuxillaryParseTableField aux[]
PROTOBUF_SECTION_VARIABLE(protodesc_cold);
static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[89]
static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[90]
PROTOBUF_SECTION_VARIABLE(protodesc_cold);
static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[];
static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[];
@ -324,6 +324,9 @@ extern ShowSegmentsResponseDefaultTypeInternal _ShowSegmentsResponse_default_ins
class StringResponse;
class StringResponseDefaultTypeInternal;
extern StringResponseDefaultTypeInternal _StringResponse_default_instance_;
class UpdateCredentialRequest;
class UpdateCredentialRequestDefaultTypeInternal;
extern UpdateCredentialRequestDefaultTypeInternal _UpdateCredentialRequest_default_instance_;
class VectorIDs;
class VectorIDsDefaultTypeInternal;
extern VectorIDsDefaultTypeInternal _VectorIDs_default_instance_;
@ -421,6 +424,7 @@ template<> ::milvus::proto::milvus::ShowPartitionsResponse* Arena::CreateMaybeMe
template<> ::milvus::proto::milvus::ShowSegmentsRequest* Arena::CreateMaybeMessage<::milvus::proto::milvus::ShowSegmentsRequest>(Arena*);
template<> ::milvus::proto::milvus::ShowSegmentsResponse* Arena::CreateMaybeMessage<::milvus::proto::milvus::ShowSegmentsResponse>(Arena*);
template<> ::milvus::proto::milvus::StringResponse* Arena::CreateMaybeMessage<::milvus::proto::milvus::StringResponse>(Arena*);
template<> ::milvus::proto::milvus::UpdateCredentialRequest* Arena::CreateMaybeMessage<::milvus::proto::milvus::UpdateCredentialRequest>(Arena*);
template<> ::milvus::proto::milvus::VectorIDs* Arena::CreateMaybeMessage<::milvus::proto::milvus::VectorIDs>(Arena*);
template<> ::milvus::proto::milvus::VectorsArray* Arena::CreateMaybeMessage<::milvus::proto::milvus::VectorsArray>(Arena*);
PROTOBUF_NAMESPACE_CLOSE
@ -14685,6 +14689,193 @@ class CreateCredentialRequest :
};
// -------------------------------------------------------------------
class UpdateCredentialRequest :
public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:milvus.proto.milvus.UpdateCredentialRequest) */ {
public:
UpdateCredentialRequest();
virtual ~UpdateCredentialRequest();
UpdateCredentialRequest(const UpdateCredentialRequest& from);
UpdateCredentialRequest(UpdateCredentialRequest&& from) noexcept
: UpdateCredentialRequest() {
*this = ::std::move(from);
}
inline UpdateCredentialRequest& operator=(const UpdateCredentialRequest& from) {
CopyFrom(from);
return *this;
}
inline UpdateCredentialRequest& operator=(UpdateCredentialRequest&& from) noexcept {
if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
if (this != &from) InternalSwap(&from);
} else {
CopyFrom(from);
}
return *this;
}
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
return GetDescriptor();
}
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor;
}
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection;
}
static const UpdateCredentialRequest& default_instance();
static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY
static inline const UpdateCredentialRequest* internal_default_instance() {
return reinterpret_cast<const UpdateCredentialRequest*>(
&_UpdateCredentialRequest_default_instance_);
}
static constexpr int kIndexInFileMessages =
86;
friend void swap(UpdateCredentialRequest& a, UpdateCredentialRequest& b) {
a.Swap(&b);
}
inline void Swap(UpdateCredentialRequest* other) {
if (other == this) return;
InternalSwap(other);
}
// implements Message ----------------------------------------------
inline UpdateCredentialRequest* New() const final {
return CreateMaybeMessage<UpdateCredentialRequest>(nullptr);
}
UpdateCredentialRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
return CreateMaybeMessage<UpdateCredentialRequest>(arena);
}
void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
void CopyFrom(const UpdateCredentialRequest& from);
void MergeFrom(const UpdateCredentialRequest& from);
PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
size_t ByteSizeLong() const final;
#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
#else
bool MergePartialFromCodedStream(
::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final;
#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
void SerializeWithCachedSizes(
::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final;
::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray(
::PROTOBUF_NAMESPACE_ID::uint8* target) const final;
int GetCachedSize() const final { return _cached_size_.Get(); }
private:
inline void SharedCtor();
inline void SharedDtor();
void SetCachedSize(int size) const final;
void InternalSwap(UpdateCredentialRequest* other);
friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
return "milvus.proto.milvus.UpdateCredentialRequest";
}
private:
inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
return nullptr;
}
inline void* MaybeArenaPtr() const {
return nullptr;
}
public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_milvus_2eproto);
return ::descriptor_table_milvus_2eproto.file_level_metadata[kIndexInFileMessages];
}
public:
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
enum : int {
kUsernameFieldNumber = 2,
kOldPasswordFieldNumber = 3,
kNewPasswordFieldNumber = 4,
kBaseFieldNumber = 1,
kCreatedUtcTimestampsFieldNumber = 5,
kModifiedUtcTimestampsFieldNumber = 6,
};
// string username = 2;
void clear_username();
const std::string& username() const;
void set_username(const std::string& value);
void set_username(std::string&& value);
void set_username(const char* value);
void set_username(const char* value, size_t size);
std::string* mutable_username();
std::string* release_username();
void set_allocated_username(std::string* username);
// string oldPassword = 3;
void clear_oldpassword();
const std::string& oldpassword() const;
void set_oldpassword(const std::string& value);
void set_oldpassword(std::string&& value);
void set_oldpassword(const char* value);
void set_oldpassword(const char* value, size_t size);
std::string* mutable_oldpassword();
std::string* release_oldpassword();
void set_allocated_oldpassword(std::string* oldpassword);
// string newPassword = 4;
void clear_newpassword();
const std::string& newpassword() const;
void set_newpassword(const std::string& value);
void set_newpassword(std::string&& value);
void set_newpassword(const char* value);
void set_newpassword(const char* value, size_t size);
std::string* mutable_newpassword();
std::string* release_newpassword();
void set_allocated_newpassword(std::string* newpassword);
// .milvus.proto.common.MsgBase base = 1;
bool has_base() const;
void clear_base();
const ::milvus::proto::common::MsgBase& base() const;
::milvus::proto::common::MsgBase* release_base();
::milvus::proto::common::MsgBase* mutable_base();
void set_allocated_base(::milvus::proto::common::MsgBase* base);
// uint64 created_utc_timestamps = 5;
void clear_created_utc_timestamps();
::PROTOBUF_NAMESPACE_ID::uint64 created_utc_timestamps() const;
void set_created_utc_timestamps(::PROTOBUF_NAMESPACE_ID::uint64 value);
// uint64 modified_utc_timestamps = 6;
void clear_modified_utc_timestamps();
::PROTOBUF_NAMESPACE_ID::uint64 modified_utc_timestamps() const;
void set_modified_utc_timestamps(::PROTOBUF_NAMESPACE_ID::uint64 value);
// @@protoc_insertion_point(class_scope:milvus.proto.milvus.UpdateCredentialRequest)
private:
class _Internal;
::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr username_;
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr oldpassword_;
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr newpassword_;
::milvus::proto::common::MsgBase* base_;
::PROTOBUF_NAMESPACE_ID::uint64 created_utc_timestamps_;
::PROTOBUF_NAMESPACE_ID::uint64 modified_utc_timestamps_;
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
friend struct ::TableStruct_milvus_2eproto;
};
// -------------------------------------------------------------------
class DeleteCredentialRequest :
public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:milvus.proto.milvus.DeleteCredentialRequest) */ {
public:
@ -14727,7 +14918,7 @@ class DeleteCredentialRequest :
&_DeleteCredentialRequest_default_instance_);
}
static constexpr int kIndexInFileMessages =
86;
87;
friend void swap(DeleteCredentialRequest& a, DeleteCredentialRequest& b) {
a.Swap(&b);
@ -14874,7 +15065,7 @@ class ListCredUsersResponse :
&_ListCredUsersResponse_default_instance_);
}
static constexpr int kIndexInFileMessages =
87;
88;
friend void swap(ListCredUsersResponse& a, ListCredUsersResponse& b) {
a.Swap(&b);
@ -15027,7 +15218,7 @@ class ListCredUsersRequest :
&_ListCredUsersRequest_default_instance_);
}
static constexpr int kIndexInFileMessages =
88;
89;
friend void swap(ListCredUsersRequest& a, ListCredUsersRequest& b) {
a.Swap(&b);
@ -27743,6 +27934,236 @@ inline void CreateCredentialRequest::set_modified_utc_timestamps(::PROTOBUF_NAME
// -------------------------------------------------------------------
// UpdateCredentialRequest
// .milvus.proto.common.MsgBase base = 1;
inline bool UpdateCredentialRequest::has_base() const {
return this != internal_default_instance() && base_ != nullptr;
}
inline const ::milvus::proto::common::MsgBase& UpdateCredentialRequest::base() const {
const ::milvus::proto::common::MsgBase* p = base_;
// @@protoc_insertion_point(field_get:milvus.proto.milvus.UpdateCredentialRequest.base)
return p != nullptr ? *p : *reinterpret_cast<const ::milvus::proto::common::MsgBase*>(
&::milvus::proto::common::_MsgBase_default_instance_);
}
inline ::milvus::proto::common::MsgBase* UpdateCredentialRequest::release_base() {
// @@protoc_insertion_point(field_release:milvus.proto.milvus.UpdateCredentialRequest.base)
::milvus::proto::common::MsgBase* temp = base_;
base_ = nullptr;
return temp;
}
inline ::milvus::proto::common::MsgBase* UpdateCredentialRequest::mutable_base() {
if (base_ == nullptr) {
auto* p = CreateMaybeMessage<::milvus::proto::common::MsgBase>(GetArenaNoVirtual());
base_ = p;
}
// @@protoc_insertion_point(field_mutable:milvus.proto.milvus.UpdateCredentialRequest.base)
return base_;
}
inline void UpdateCredentialRequest::set_allocated_base(::milvus::proto::common::MsgBase* base) {
::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
if (message_arena == nullptr) {
delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(base_);
}
if (base) {
::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
if (message_arena != submessage_arena) {
base = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
message_arena, base, submessage_arena);
}
} else {
}
base_ = base;
// @@protoc_insertion_point(field_set_allocated:milvus.proto.milvus.UpdateCredentialRequest.base)
}
// string username = 2;
inline void UpdateCredentialRequest::clear_username() {
username_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline const std::string& UpdateCredentialRequest::username() const {
// @@protoc_insertion_point(field_get:milvus.proto.milvus.UpdateCredentialRequest.username)
return username_.GetNoArena();
}
inline void UpdateCredentialRequest::set_username(const std::string& value) {
username_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
// @@protoc_insertion_point(field_set:milvus.proto.milvus.UpdateCredentialRequest.username)
}
inline void UpdateCredentialRequest::set_username(std::string&& value) {
username_.SetNoArena(
&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
// @@protoc_insertion_point(field_set_rvalue:milvus.proto.milvus.UpdateCredentialRequest.username)
}
inline void UpdateCredentialRequest::set_username(const char* value) {
GOOGLE_DCHECK(value != nullptr);
username_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
// @@protoc_insertion_point(field_set_char:milvus.proto.milvus.UpdateCredentialRequest.username)
}
inline void UpdateCredentialRequest::set_username(const char* value, size_t size) {
username_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
::std::string(reinterpret_cast<const char*>(value), size));
// @@protoc_insertion_point(field_set_pointer:milvus.proto.milvus.UpdateCredentialRequest.username)
}
inline std::string* UpdateCredentialRequest::mutable_username() {
// @@protoc_insertion_point(field_mutable:milvus.proto.milvus.UpdateCredentialRequest.username)
return username_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline std::string* UpdateCredentialRequest::release_username() {
// @@protoc_insertion_point(field_release:milvus.proto.milvus.UpdateCredentialRequest.username)
return username_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline void UpdateCredentialRequest::set_allocated_username(std::string* username) {
if (username != nullptr) {
} else {
}
username_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), username);
// @@protoc_insertion_point(field_set_allocated:milvus.proto.milvus.UpdateCredentialRequest.username)
}
// string oldPassword = 3;
inline void UpdateCredentialRequest::clear_oldpassword() {
oldpassword_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline const std::string& UpdateCredentialRequest::oldpassword() const {
// @@protoc_insertion_point(field_get:milvus.proto.milvus.UpdateCredentialRequest.oldPassword)
return oldpassword_.GetNoArena();
}
inline void UpdateCredentialRequest::set_oldpassword(const std::string& value) {
oldpassword_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
// @@protoc_insertion_point(field_set:milvus.proto.milvus.UpdateCredentialRequest.oldPassword)
}
inline void UpdateCredentialRequest::set_oldpassword(std::string&& value) {
oldpassword_.SetNoArena(
&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
// @@protoc_insertion_point(field_set_rvalue:milvus.proto.milvus.UpdateCredentialRequest.oldPassword)
}
inline void UpdateCredentialRequest::set_oldpassword(const char* value) {
GOOGLE_DCHECK(value != nullptr);
oldpassword_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
// @@protoc_insertion_point(field_set_char:milvus.proto.milvus.UpdateCredentialRequest.oldPassword)
}
inline void UpdateCredentialRequest::set_oldpassword(const char* value, size_t size) {
oldpassword_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
::std::string(reinterpret_cast<const char*>(value), size));
// @@protoc_insertion_point(field_set_pointer:milvus.proto.milvus.UpdateCredentialRequest.oldPassword)
}
inline std::string* UpdateCredentialRequest::mutable_oldpassword() {
// @@protoc_insertion_point(field_mutable:milvus.proto.milvus.UpdateCredentialRequest.oldPassword)
return oldpassword_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline std::string* UpdateCredentialRequest::release_oldpassword() {
// @@protoc_insertion_point(field_release:milvus.proto.milvus.UpdateCredentialRequest.oldPassword)
return oldpassword_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline void UpdateCredentialRequest::set_allocated_oldpassword(std::string* oldpassword) {
if (oldpassword != nullptr) {
} else {
}
oldpassword_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), oldpassword);
// @@protoc_insertion_point(field_set_allocated:milvus.proto.milvus.UpdateCredentialRequest.oldPassword)
}
// string newPassword = 4;
inline void UpdateCredentialRequest::clear_newpassword() {
newpassword_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline const std::string& UpdateCredentialRequest::newpassword() const {
// @@protoc_insertion_point(field_get:milvus.proto.milvus.UpdateCredentialRequest.newPassword)
return newpassword_.GetNoArena();
}
inline void UpdateCredentialRequest::set_newpassword(const std::string& value) {
newpassword_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
// @@protoc_insertion_point(field_set:milvus.proto.milvus.UpdateCredentialRequest.newPassword)
}
inline void UpdateCredentialRequest::set_newpassword(std::string&& value) {
newpassword_.SetNoArena(
&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
// @@protoc_insertion_point(field_set_rvalue:milvus.proto.milvus.UpdateCredentialRequest.newPassword)
}
inline void UpdateCredentialRequest::set_newpassword(const char* value) {
GOOGLE_DCHECK(value != nullptr);
newpassword_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
// @@protoc_insertion_point(field_set_char:milvus.proto.milvus.UpdateCredentialRequest.newPassword)
}
inline void UpdateCredentialRequest::set_newpassword(const char* value, size_t size) {
newpassword_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
::std::string(reinterpret_cast<const char*>(value), size));
// @@protoc_insertion_point(field_set_pointer:milvus.proto.milvus.UpdateCredentialRequest.newPassword)
}
inline std::string* UpdateCredentialRequest::mutable_newpassword() {
// @@protoc_insertion_point(field_mutable:milvus.proto.milvus.UpdateCredentialRequest.newPassword)
return newpassword_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline std::string* UpdateCredentialRequest::release_newpassword() {
// @@protoc_insertion_point(field_release:milvus.proto.milvus.UpdateCredentialRequest.newPassword)
return newpassword_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline void UpdateCredentialRequest::set_allocated_newpassword(std::string* newpassword) {
if (newpassword != nullptr) {
} else {
}
newpassword_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), newpassword);
// @@protoc_insertion_point(field_set_allocated:milvus.proto.milvus.UpdateCredentialRequest.newPassword)
}
// uint64 created_utc_timestamps = 5;
inline void UpdateCredentialRequest::clear_created_utc_timestamps() {
created_utc_timestamps_ = PROTOBUF_ULONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::uint64 UpdateCredentialRequest::created_utc_timestamps() const {
// @@protoc_insertion_point(field_get:milvus.proto.milvus.UpdateCredentialRequest.created_utc_timestamps)
return created_utc_timestamps_;
}
inline void UpdateCredentialRequest::set_created_utc_timestamps(::PROTOBUF_NAMESPACE_ID::uint64 value) {
created_utc_timestamps_ = value;
// @@protoc_insertion_point(field_set:milvus.proto.milvus.UpdateCredentialRequest.created_utc_timestamps)
}
// uint64 modified_utc_timestamps = 6;
inline void UpdateCredentialRequest::clear_modified_utc_timestamps() {
modified_utc_timestamps_ = PROTOBUF_ULONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::uint64 UpdateCredentialRequest::modified_utc_timestamps() const {
// @@protoc_insertion_point(field_get:milvus.proto.milvus.UpdateCredentialRequest.modified_utc_timestamps)
return modified_utc_timestamps_;
}
inline void UpdateCredentialRequest::set_modified_utc_timestamps(::PROTOBUF_NAMESPACE_ID::uint64 value) {
modified_utc_timestamps_ = value;
// @@protoc_insertion_point(field_set:milvus.proto.milvus.UpdateCredentialRequest.modified_utc_timestamps)
}
// -------------------------------------------------------------------
// DeleteCredentialRequest
// .milvus.proto.common.MsgBase base = 1;
@ -28183,6 +28604,8 @@ inline void ListCredUsersRequest::set_allocated_base(::milvus::proto::common::Ms
// -------------------------------------------------------------------
// -------------------------------------------------------------------
// @@protoc_insertion_point(namespace_scope)

View File

@ -727,7 +727,7 @@ func (s *Server) CreateCredential(ctx context.Context, req *milvuspb.CreateCrede
return s.proxy.CreateCredential(ctx, req)
}
func (s *Server) UpdateCredential(ctx context.Context, req *milvuspb.CreateCredentialRequest) (*commonpb.Status, error) {
func (s *Server) UpdateCredential(ctx context.Context, req *milvuspb.UpdateCredentialRequest) (*commonpb.Status, error) {
return s.proxy.UpdateCredential(ctx, req)
}

View File

@ -752,7 +752,7 @@ func (m *MockProxy) CreateCredential(ctx context.Context, req *milvuspb.CreateCr
return nil, nil
}
func (m *MockProxy) UpdateCredential(ctx context.Context, req *milvuspb.CreateCredentialRequest) (*commonpb.Status, error) {
func (m *MockProxy) UpdateCredential(ctx context.Context, req *milvuspb.UpdateCredentialRequest) (*commonpb.Status, error) {
return nil, nil
}

View File

@ -69,7 +69,7 @@ service MilvusService {
// https://wiki.lfaidata.foundation/display/MIL/MEP+27+--+Support+Basic+Authentication
rpc CreateCredential(CreateCredentialRequest) returns (common.Status) {}
rpc UpdateCredential(CreateCredentialRequest) returns (common.Status) {}
rpc UpdateCredential(UpdateCredentialRequest) returns (common.Status) {}
rpc DeleteCredential(DeleteCredentialRequest) returns (common.Status) {}
rpc ListCredUsers(ListCredUsersRequest) returns (ListCredUsersResponse) {}
}
@ -878,6 +878,21 @@ message CreateCredentialRequest {
uint64 modified_utc_timestamps = 5;
}
message UpdateCredentialRequest {
// Not useful for now
common.MsgBase base = 1;
// username
string username = 2;
// old password
string oldPassword = 3;
// new password
string newPassword = 4;
// create time
uint64 created_utc_timestamps = 5;
// modify time
uint64 modified_utc_timestamps = 6;
}
message DeleteCredentialRequest {
// Not useful for now
common.MsgBase base = 1;

View File

@ -5513,6 +5513,91 @@ func (m *CreateCredentialRequest) GetModifiedUtcTimestamps() uint64 {
return 0
}
type UpdateCredentialRequest struct {
// Not useful for now
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
// username
Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"`
// old password
OldPassword string `protobuf:"bytes,3,opt,name=oldPassword,proto3" json:"oldPassword,omitempty"`
// new password
NewPassword string `protobuf:"bytes,4,opt,name=newPassword,proto3" json:"newPassword,omitempty"`
// create time
CreatedUtcTimestamps uint64 `protobuf:"varint,5,opt,name=created_utc_timestamps,json=createdUtcTimestamps,proto3" json:"created_utc_timestamps,omitempty"`
// modify time
ModifiedUtcTimestamps uint64 `protobuf:"varint,6,opt,name=modified_utc_timestamps,json=modifiedUtcTimestamps,proto3" json:"modified_utc_timestamps,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *UpdateCredentialRequest) Reset() { *m = UpdateCredentialRequest{} }
func (m *UpdateCredentialRequest) String() string { return proto.CompactTextString(m) }
func (*UpdateCredentialRequest) ProtoMessage() {}
func (*UpdateCredentialRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_02345ba45cc0e303, []int{85}
}
func (m *UpdateCredentialRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UpdateCredentialRequest.Unmarshal(m, b)
}
func (m *UpdateCredentialRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_UpdateCredentialRequest.Marshal(b, m, deterministic)
}
func (m *UpdateCredentialRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_UpdateCredentialRequest.Merge(m, src)
}
func (m *UpdateCredentialRequest) XXX_Size() int {
return xxx_messageInfo_UpdateCredentialRequest.Size(m)
}
func (m *UpdateCredentialRequest) XXX_DiscardUnknown() {
xxx_messageInfo_UpdateCredentialRequest.DiscardUnknown(m)
}
var xxx_messageInfo_UpdateCredentialRequest proto.InternalMessageInfo
func (m *UpdateCredentialRequest) GetBase() *commonpb.MsgBase {
if m != nil {
return m.Base
}
return nil
}
func (m *UpdateCredentialRequest) GetUsername() string {
if m != nil {
return m.Username
}
return ""
}
func (m *UpdateCredentialRequest) GetOldPassword() string {
if m != nil {
return m.OldPassword
}
return ""
}
func (m *UpdateCredentialRequest) GetNewPassword() string {
if m != nil {
return m.NewPassword
}
return ""
}
func (m *UpdateCredentialRequest) GetCreatedUtcTimestamps() uint64 {
if m != nil {
return m.CreatedUtcTimestamps
}
return 0
}
func (m *UpdateCredentialRequest) GetModifiedUtcTimestamps() uint64 {
if m != nil {
return m.ModifiedUtcTimestamps
}
return 0
}
type DeleteCredentialRequest struct {
// Not useful for now
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
@ -5527,7 +5612,7 @@ func (m *DeleteCredentialRequest) Reset() { *m = DeleteCredentialRequest
func (m *DeleteCredentialRequest) String() string { return proto.CompactTextString(m) }
func (*DeleteCredentialRequest) ProtoMessage() {}
func (*DeleteCredentialRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_02345ba45cc0e303, []int{85}
return fileDescriptor_02345ba45cc0e303, []int{86}
}
func (m *DeleteCredentialRequest) XXX_Unmarshal(b []byte) error {
@ -5576,7 +5661,7 @@ func (m *ListCredUsersResponse) Reset() { *m = ListCredUsersResponse{} }
func (m *ListCredUsersResponse) String() string { return proto.CompactTextString(m) }
func (*ListCredUsersResponse) ProtoMessage() {}
func (*ListCredUsersResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_02345ba45cc0e303, []int{86}
return fileDescriptor_02345ba45cc0e303, []int{87}
}
func (m *ListCredUsersResponse) XXX_Unmarshal(b []byte) error {
@ -5623,7 +5708,7 @@ func (m *ListCredUsersRequest) Reset() { *m = ListCredUsersRequest{} }
func (m *ListCredUsersRequest) String() string { return proto.CompactTextString(m) }
func (*ListCredUsersRequest) ProtoMessage() {}
func (*ListCredUsersRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_02345ba45cc0e303, []int{87}
return fileDescriptor_02345ba45cc0e303, []int{88}
}
func (m *ListCredUsersRequest) XXX_Unmarshal(b []byte) error {
@ -5740,6 +5825,7 @@ func init() {
proto.RegisterType((*ReplicaInfo)(nil), "milvus.proto.milvus.ReplicaInfo")
proto.RegisterType((*ShardReplica)(nil), "milvus.proto.milvus.ShardReplica")
proto.RegisterType((*CreateCredentialRequest)(nil), "milvus.proto.milvus.CreateCredentialRequest")
proto.RegisterType((*UpdateCredentialRequest)(nil), "milvus.proto.milvus.UpdateCredentialRequest")
proto.RegisterType((*DeleteCredentialRequest)(nil), "milvus.proto.milvus.DeleteCredentialRequest")
proto.RegisterType((*ListCredUsersResponse)(nil), "milvus.proto.milvus.ListCredUsersResponse")
proto.RegisterType((*ListCredUsersRequest)(nil), "milvus.proto.milvus.ListCredUsersRequest")
@ -5748,270 +5834,273 @@ func init() {
func init() { proto.RegisterFile("milvus.proto", fileDescriptor_02345ba45cc0e303) }
var fileDescriptor_02345ba45cc0e303 = []byte{
// 4201 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x3c, 0x4d, 0x6f, 0x1c, 0xc9,
0x75, 0xec, 0x19, 0xce, 0xd7, 0x9b, 0x19, 0x72, 0x54, 0xfc, 0x9a, 0x1d, 0x49, 0x2b, 0xaa, 0xf7,
0x8b, 0x2b, 0x79, 0x25, 0x2f, 0xb5, 0xde, 0x75, 0x76, 0x9d, 0xac, 0x25, 0x31, 0x2b, 0x11, 0x2b,
0x29, 0x74, 0x73, 0xd7, 0x86, 0xb3, 0x10, 0x06, 0xc5, 0xee, 0xe2, 0xb0, 0xa3, 0x9e, 0xee, 0x71,
0x57, 0x8d, 0x28, 0xee, 0xc9, 0x80, 0x83, 0x7c, 0xc0, 0x9b, 0x35, 0x82, 0x18, 0xf9, 0x38, 0x24,
0x08, 0xf2, 0x71, 0xc8, 0x21, 0x41, 0x6c, 0x07, 0x89, 0x91, 0x4b, 0x72, 0xc8, 0x21, 0x87, 0x00,
0xf9, 0xb8, 0x04, 0x41, 0x2e, 0xf9, 0x03, 0x39, 0x04, 0xc8, 0x31, 0x87, 0xa0, 0x3e, 0xba, 0xa7,
0xbb, 0xa7, 0x7a, 0x38, 0xd4, 0x58, 0x26, 0x75, 0x9b, 0x7e, 0xf5, 0x5e, 0xd5, 0xab, 0x57, 0xaf,
0x5e, 0xbd, 0x7a, 0xef, 0xd5, 0x40, 0xa3, 0xef, 0x7a, 0x8f, 0x87, 0xf4, 0xda, 0x20, 0x0c, 0x58,
0x80, 0x96, 0x92, 0x5f, 0xd7, 0xe4, 0x47, 0xa7, 0x61, 0x07, 0xfd, 0x7e, 0xe0, 0x4b, 0x60, 0xa7,
0x41, 0xed, 0x03, 0xd2, 0xc7, 0xf2, 0xcb, 0xfc, 0x03, 0x03, 0xd0, 0xed, 0x90, 0x60, 0x46, 0x6e,
0x7a, 0x2e, 0xa6, 0x16, 0xf9, 0xd6, 0x90, 0x50, 0x86, 0xbe, 0x08, 0xf3, 0x7b, 0x98, 0x92, 0xb6,
0xb1, 0x6e, 0x6c, 0xd4, 0x37, 0x2f, 0x5c, 0x4b, 0x75, 0xab, 0xba, 0xbb, 0x4f, 0x7b, 0xb7, 0x30,
0x25, 0x96, 0xc0, 0x44, 0x6b, 0x50, 0x71, 0xf6, 0xba, 0x3e, 0xee, 0x93, 0x76, 0x61, 0xdd, 0xd8,
0xa8, 0x59, 0x65, 0x67, 0xef, 0x01, 0xee, 0x13, 0xf4, 0x1a, 0x2c, 0xda, 0x81, 0xe7, 0x11, 0x9b,
0xb9, 0x81, 0x2f, 0x11, 0x8a, 0x02, 0x61, 0x61, 0x04, 0x16, 0x88, 0xcb, 0x50, 0xc2, 0x9c, 0x87,
0xf6, 0xbc, 0x68, 0x96, 0x1f, 0x26, 0x85, 0xd6, 0x56, 0x18, 0x0c, 0x9e, 0x15, 0x77, 0xf1, 0xa0,
0xc5, 0xe4, 0xa0, 0xbf, 0x6f, 0xc0, 0xb9, 0x9b, 0x1e, 0x23, 0xe1, 0x19, 0x15, 0xca, 0xef, 0x16,
0x60, 0x4d, 0xae, 0xda, 0xed, 0x18, 0xfd, 0x34, 0xb9, 0x5c, 0x85, 0xb2, 0xd4, 0x2a, 0xc1, 0x66,
0xc3, 0x52, 0x5f, 0xe8, 0x22, 0x00, 0x3d, 0xc0, 0xa1, 0x43, 0xbb, 0xfe, 0xb0, 0xdf, 0x2e, 0xad,
0x1b, 0x1b, 0x25, 0xab, 0x26, 0x21, 0x0f, 0x86, 0x7d, 0x64, 0xc1, 0x39, 0x3b, 0xf0, 0xa9, 0x4b,
0x19, 0xf1, 0xed, 0xa3, 0xae, 0x47, 0x1e, 0x13, 0xaf, 0x5d, 0x5e, 0x37, 0x36, 0x16, 0x36, 0x5f,
0xd1, 0xf2, 0x7d, 0x7b, 0x84, 0x7d, 0x8f, 0x23, 0x5b, 0x2d, 0x3b, 0x03, 0x31, 0xbf, 0x6b, 0xc0,
0x0a, 0x57, 0x98, 0x33, 0x21, 0x18, 0xf3, 0xcf, 0x0c, 0x58, 0xbe, 0x8b, 0xe9, 0xd9, 0x58, 0xa5,
0x8b, 0x00, 0xcc, 0xed, 0x93, 0x2e, 0x65, 0xb8, 0x3f, 0x10, 0x2b, 0x35, 0x6f, 0xd5, 0x38, 0x64,
0x97, 0x03, 0xcc, 0x6f, 0x42, 0xe3, 0x56, 0x10, 0x78, 0x16, 0xa1, 0x83, 0xc0, 0xa7, 0x04, 0xdd,
0x80, 0x32, 0x65, 0x98, 0x0d, 0xa9, 0x62, 0xf2, 0xbc, 0x96, 0xc9, 0x5d, 0x81, 0x62, 0x29, 0x54,
0xae, 0xaf, 0x8f, 0xb1, 0x37, 0x94, 0x3c, 0x56, 0x2d, 0xf9, 0x61, 0x7e, 0x02, 0x0b, 0xbb, 0x2c,
0x74, 0xfd, 0xde, 0x4f, 0xb0, 0xf3, 0x5a, 0xd4, 0xf9, 0xbf, 0x19, 0xf0, 0xc2, 0x16, 0xa1, 0x76,
0xe8, 0xee, 0x9d, 0x91, 0xed, 0x60, 0x42, 0x63, 0x04, 0xd9, 0xde, 0x12, 0xa2, 0x2e, 0x5a, 0x29,
0x58, 0x66, 0x31, 0x4a, 0xd9, 0xc5, 0xf8, 0x76, 0x09, 0x3a, 0xba, 0x49, 0xcd, 0x22, 0xbe, 0x9f,
0x8d, 0x77, 0x69, 0x41, 0x10, 0x65, 0xf6, 0x98, 0x3a, 0x17, 0x46, 0xa3, 0xed, 0x0a, 0x40, 0xbc,
0x99, 0xb3, 0xb3, 0x2a, 0x6a, 0x66, 0xb5, 0x09, 0x2b, 0x8f, 0xdd, 0x90, 0x0d, 0xb1, 0xd7, 0xb5,
0x0f, 0xb0, 0xef, 0x13, 0x4f, 0xc8, 0x89, 0x9b, 0xaf, 0xe2, 0x46, 0xcd, 0x5a, 0x52, 0x8d, 0xb7,
0x65, 0x1b, 0x17, 0x16, 0x45, 0x6f, 0xc1, 0xea, 0xe0, 0xe0, 0x88, 0xba, 0xf6, 0x18, 0x51, 0x49,
0x10, 0x2d, 0x47, 0xad, 0x29, 0xaa, 0xab, 0x70, 0xce, 0x16, 0x16, 0xd0, 0xe9, 0x72, 0xa9, 0x49,
0x31, 0x96, 0x85, 0x18, 0x5b, 0xaa, 0xe1, 0xa3, 0x08, 0xce, 0xd9, 0x8a, 0x90, 0x87, 0xcc, 0x4e,
0x10, 0x54, 0x04, 0xc1, 0x92, 0x6a, 0xfc, 0x98, 0xd9, 0x23, 0x9a, 0xb4, 0xed, 0xaa, 0x66, 0x6d,
0x57, 0x1b, 0x2a, 0xc2, 0x16, 0x13, 0xda, 0xae, 0x09, 0x36, 0xa3, 0x4f, 0xb4, 0x0d, 0x8b, 0x94,
0xe1, 0x90, 0x75, 0x07, 0x01, 0x75, 0xb9, 0x5c, 0x68, 0x1b, 0xd6, 0x8b, 0x1b, 0xf5, 0xcd, 0x75,
0xed, 0x22, 0x7d, 0x48, 0x8e, 0xb6, 0x30, 0xc3, 0x3b, 0xd8, 0x0d, 0xad, 0x05, 0x41, 0xb8, 0x13,
0xd1, 0xe9, 0x0d, 0x64, 0x7d, 0x26, 0x03, 0xa9, 0xd3, 0xe2, 0x86, 0xd6, 0x76, 0xfd, 0xd0, 0x80,
0x95, 0x7b, 0x01, 0x76, 0xce, 0xc6, 0x9e, 0x7a, 0x05, 0x16, 0x42, 0x32, 0xf0, 0x5c, 0x1b, 0xf3,
0xf5, 0xd8, 0x23, 0xa1, 0xd8, 0x55, 0x25, 0xab, 0xa9, 0xa0, 0x0f, 0x04, 0xd0, 0xfc, 0xdc, 0x80,
0xb6, 0x45, 0x3c, 0x82, 0xe9, 0xd9, 0xb0, 0x05, 0xe6, 0xf7, 0x0d, 0x78, 0xf1, 0x0e, 0x61, 0x89,
0x5d, 0xc5, 0x30, 0x73, 0x29, 0x73, 0xed, 0xd3, 0xf4, 0x2b, 0xcc, 0xef, 0x19, 0x70, 0x29, 0x97,
0xad, 0x59, 0x8c, 0xcc, 0x3b, 0x50, 0xe2, 0xbf, 0x68, 0xbb, 0x20, 0x74, 0xfe, 0x72, 0x9e, 0xce,
0x7f, 0x9d, 0xdb, 0x6e, 0xa1, 0xf4, 0x12, 0xdf, 0xfc, 0x2f, 0x03, 0x56, 0x77, 0x0f, 0x82, 0xc3,
0x11, 0x4b, 0xcf, 0x42, 0x40, 0x69, 0xb3, 0x5b, 0xcc, 0x98, 0x5d, 0xf4, 0x26, 0xcc, 0xb3, 0xa3,
0x01, 0x11, 0xba, 0xb5, 0xb0, 0x79, 0xf1, 0x9a, 0xc6, 0x9d, 0xbe, 0xc6, 0x99, 0xfc, 0xe8, 0x68,
0x40, 0x2c, 0x81, 0x8a, 0x5e, 0x87, 0x56, 0x46, 0xe4, 0x91, 0xe1, 0x5a, 0x4c, 0xcb, 0x9c, 0x9a,
0x3f, 0x2e, 0xc0, 0xda, 0xd8, 0x14, 0x67, 0x11, 0xb6, 0x6e, 0xec, 0x82, 0x76, 0x6c, 0xbe, 0x7f,
0x12, 0xa8, 0xae, 0xc3, 0x3d, 0xde, 0xe2, 0x46, 0xd1, 0x6a, 0x26, 0xec, 0xb7, 0x43, 0xd1, 0x1b,
0x80, 0xc6, 0xcc, 0xaa, 0xb4, 0xde, 0xf3, 0xd6, 0xb9, 0xac, 0x5d, 0x15, 0xb6, 0x5b, 0x6b, 0x58,
0xa5, 0x08, 0xe6, 0xad, 0x65, 0x8d, 0x65, 0xa5, 0xe8, 0x4d, 0x58, 0x76, 0xfd, 0xfb, 0xa4, 0x1f,
0x84, 0x47, 0xdd, 0x01, 0x09, 0x6d, 0xe2, 0x33, 0xdc, 0x23, 0xb4, 0x5d, 0x16, 0x1c, 0x2d, 0x45,
0x6d, 0x3b, 0xa3, 0x26, 0xf3, 0x47, 0x06, 0xac, 0x4a, 0x8f, 0x77, 0x07, 0x87, 0xcc, 0x3d, 0x03,
0xd6, 0x68, 0x10, 0xf1, 0x21, 0xf1, 0xa4, 0x7f, 0xde, 0x8c, 0xa1, 0x62, 0x97, 0xfd, 0xc0, 0x80,
0x65, 0xee, 0x8c, 0x3e, 0x4f, 0x3c, 0xff, 0xa5, 0x01, 0x4b, 0x77, 0x31, 0x7d, 0x9e, 0x58, 0xfe,
0x2b, 0x75, 0x52, 0xc5, 0x3c, 0x9f, 0xea, 0x95, 0xed, 0x35, 0x58, 0x4c, 0x33, 0x1d, 0x79, 0x3f,
0x0b, 0x29, 0xae, 0xa9, 0xf9, 0x37, 0xa3, 0xb3, 0xea, 0x39, 0xe3, 0xfc, 0x6f, 0x0d, 0xb8, 0x78,
0x87, 0xb0, 0x98, 0xeb, 0x33, 0x71, 0xa6, 0x4d, 0xab, 0x2d, 0x9f, 0xcb, 0x13, 0x59, 0xcb, 0xfc,
0xa9, 0x9c, 0x7c, 0xdf, 0x2d, 0xc0, 0x0a, 0x3f, 0x16, 0xce, 0x86, 0x12, 0x4c, 0x73, 0x79, 0xd1,
0x28, 0x4a, 0x49, 0xa7, 0x28, 0xf1, 0x79, 0x5a, 0x9e, 0xfa, 0x3c, 0x35, 0x7f, 0x58, 0x90, 0x7e,
0x40, 0x52, 0x1a, 0xb3, 0x2c, 0x8b, 0x86, 0xd7, 0x82, 0x96, 0x57, 0x13, 0x1a, 0x31, 0x64, 0x7b,
0x2b, 0x3a, 0x1f, 0x53, 0xb0, 0x33, 0x7b, 0x3c, 0x7e, 0x66, 0xc0, 0x6a, 0x74, 0x5d, 0xdc, 0x25,
0xbd, 0x3e, 0xf1, 0xd9, 0xd3, 0xeb, 0x50, 0x56, 0x03, 0x0a, 0x1a, 0x0d, 0xb8, 0x00, 0x35, 0x2a,
0xc7, 0x89, 0x6f, 0x82, 0x23, 0x80, 0xf9, 0x77, 0x06, 0xac, 0x8d, 0xb1, 0x33, 0xcb, 0x22, 0xb6,
0xa1, 0xe2, 0xfa, 0x0e, 0x79, 0x12, 0x73, 0x13, 0x7d, 0xf2, 0x96, 0xbd, 0xa1, 0xeb, 0x39, 0x31,
0x1b, 0xd1, 0x27, 0xba, 0x0c, 0x0d, 0xe2, 0xe3, 0x3d, 0x8f, 0x74, 0x05, 0xae, 0x50, 0xe4, 0xaa,
0x55, 0x97, 0xb0, 0x6d, 0x0e, 0xe2, 0xc4, 0xfb, 0x2e, 0x11, 0xc4, 0x25, 0x49, 0xac, 0x3e, 0xcd,
0xdf, 0x30, 0x60, 0x89, 0x6b, 0xa1, 0xe2, 0x9e, 0x3e, 0x5b, 0x69, 0xae, 0x43, 0x3d, 0xa1, 0x66,
0x6a, 0x22, 0x49, 0x90, 0xf9, 0x08, 0x96, 0xd3, 0xec, 0xcc, 0x22, 0xcd, 0x17, 0x01, 0xe2, 0xb5,
0x92, 0xbb, 0xa1, 0x68, 0x25, 0x20, 0xe6, 0x67, 0x85, 0x28, 0x28, 0x2c, 0xc4, 0x74, 0xca, 0x31,
0x2b, 0xb1, 0x24, 0x49, 0x7b, 0x5e, 0x13, 0x10, 0xd1, 0xbc, 0x05, 0x0d, 0xf2, 0x84, 0x85, 0xb8,
0x3b, 0xc0, 0x21, 0xee, 0xcb, 0x6d, 0x35, 0x95, 0xe9, 0xad, 0x0b, 0xb2, 0x1d, 0x41, 0xc5, 0x07,
0x11, 0x2a, 0x22, 0x07, 0x29, 0xcb, 0x41, 0x04, 0x44, 0x1c, 0x18, 0xff, 0xc8, 0xbd, 0x38, 0xa5,
0xcd, 0x67, 0x5d, 0x20, 0xe9, 0xa9, 0x94, 0xb2, 0x53, 0xf9, 0x53, 0x03, 0x5a, 0x62, 0x0a, 0x72,
0x3e, 0x03, 0xde, 0x6d, 0x86, 0xc6, 0xc8, 0xd0, 0x4c, 0xd8, 0x7b, 0x3f, 0x03, 0x65, 0x25, 0xf7,
0xe2, 0xb4, 0x72, 0x57, 0x04, 0xc7, 0x4c, 0xc3, 0xfc, 0x23, 0x03, 0x56, 0x32, 0x22, 0x9f, 0x45,
0xe1, 0x3f, 0x02, 0x24, 0x67, 0xe8, 0x8c, 0xa6, 0x1d, 0x9d, 0xd3, 0xaf, 0x68, 0x0f, 0xa5, 0xac,
0x90, 0xac, 0x73, 0x6e, 0x06, 0x42, 0xcd, 0x7f, 0x31, 0xe0, 0xc2, 0x1d, 0xc2, 0x04, 0xea, 0x2d,
0x6e, 0x74, 0x76, 0xc2, 0xa0, 0x17, 0x12, 0x4a, 0x9f, 0x5f, 0xfd, 0xf8, 0x6d, 0xe9, 0xd8, 0xe9,
0xa6, 0x34, 0x8b, 0xfc, 0x2f, 0x43, 0x43, 0x8c, 0x41, 0x9c, 0x6e, 0x18, 0x1c, 0x52, 0xa5, 0x47,
0x75, 0x05, 0xb3, 0x82, 0x43, 0xa1, 0x10, 0x2c, 0x60, 0xd8, 0x93, 0x08, 0xea, 0x44, 0x11, 0x10,
0xde, 0x2c, 0xf6, 0x60, 0xc4, 0x18, 0xef, 0x9c, 0x3c, 0xbf, 0x32, 0xfe, 0x13, 0x03, 0x56, 0x32,
0x53, 0x99, 0x45, 0xb6, 0x5f, 0x92, 0x6e, 0xa7, 0x9c, 0xcc, 0xc2, 0xe6, 0x25, 0x2d, 0x4d, 0x62,
0x30, 0x89, 0x8d, 0x2e, 0x41, 0x7d, 0x1f, 0xbb, 0x5e, 0x37, 0x24, 0x98, 0x06, 0xbe, 0x9a, 0x28,
0x70, 0x90, 0x25, 0x20, 0xe6, 0x3f, 0x18, 0x32, 0xf3, 0xf6, 0x9c, 0x5b, 0xbc, 0x3f, 0x2e, 0x40,
0x73, 0xdb, 0xa7, 0x24, 0x64, 0x67, 0xff, 0x6a, 0x82, 0xde, 0x87, 0xba, 0x98, 0x18, 0xed, 0x3a,
0x98, 0x61, 0x75, 0x9a, 0xbd, 0xa8, 0x0d, 0xd3, 0x7f, 0xc0, 0xf1, 0xb6, 0x30, 0xc3, 0x96, 0x94,
0x0e, 0xe5, 0xbf, 0xd1, 0x79, 0xa8, 0x1d, 0x60, 0x7a, 0xd0, 0x7d, 0x44, 0x8e, 0xa4, 0xbf, 0xd8,
0xb4, 0xaa, 0x1c, 0xf0, 0x21, 0x39, 0xa2, 0xe8, 0x05, 0xa8, 0xfa, 0xc3, 0xbe, 0xdc, 0x60, 0x95,
0x75, 0x63, 0xa3, 0x69, 0x55, 0xfc, 0x61, 0x5f, 0x6c, 0xaf, 0x7f, 0x2a, 0xc0, 0xc2, 0xfd, 0x21,
0xbf, 0x08, 0x89, 0x24, 0xc3, 0xd0, 0x63, 0x4f, 0xa7, 0x8c, 0x57, 0xa0, 0x28, 0x5d, 0x0a, 0x4e,
0xd1, 0xd6, 0x32, 0xbe, 0xbd, 0x45, 0x2d, 0x8e, 0x24, 0x02, 0xec, 0x43, 0xdb, 0x56, 0xde, 0x59,
0x51, 0x30, 0x5b, 0xe3, 0x10, 0xe9, 0x9b, 0x9d, 0x87, 0x1a, 0x09, 0xc3, 0xd8, 0x77, 0x13, 0x53,
0x21, 0x61, 0x28, 0x1b, 0x4d, 0x68, 0x60, 0xfb, 0x91, 0x1f, 0x1c, 0x7a, 0xc4, 0xe9, 0x11, 0x47,
0x2c, 0x7b, 0xd5, 0x4a, 0xc1, 0xa4, 0x62, 0xf0, 0x85, 0xef, 0xda, 0x3e, 0x13, 0xa7, 0x7a, 0x91,
0x2b, 0x06, 0x87, 0xdc, 0xf6, 0x19, 0x6f, 0x76, 0x88, 0x47, 0x18, 0x11, 0xcd, 0x15, 0xd9, 0x2c,
0x21, 0xaa, 0x79, 0x38, 0x88, 0xa9, 0xab, 0xb2, 0x59, 0x42, 0x78, 0xf3, 0x05, 0xa8, 0x8d, 0xb2,
0x08, 0xb5, 0x51, 0x18, 0x51, 0x00, 0xcc, 0xff, 0x34, 0xa0, 0xb9, 0x25, 0xba, 0x7a, 0x0e, 0x94,
0x0e, 0xc1, 0x3c, 0x79, 0x32, 0x08, 0xd5, 0xd6, 0x11, 0xbf, 0x27, 0xea, 0x91, 0xf9, 0x18, 0x5a,
0x3b, 0x1e, 0xb6, 0xc9, 0x41, 0xe0, 0x39, 0x24, 0x14, 0x67, 0x3b, 0x6a, 0x41, 0x91, 0xe1, 0x9e,
0x72, 0x1e, 0xf8, 0x4f, 0xf4, 0x65, 0x75, 0xf5, 0x93, 0x66, 0xe9, 0x65, 0xed, 0x29, 0x9b, 0xe8,
0x26, 0x11, 0x51, 0x5d, 0x85, 0xb2, 0xc8, 0xec, 0x49, 0xb7, 0xa2, 0x61, 0xa9, 0x2f, 0xf3, 0x61,
0x6a, 0xdc, 0x3b, 0x61, 0x30, 0x1c, 0xa0, 0x6d, 0x68, 0x0c, 0x46, 0x30, 0xae, 0xab, 0xf9, 0x67,
0x7a, 0x96, 0x69, 0x2b, 0x45, 0x6a, 0xfe, 0x77, 0x11, 0x9a, 0xbb, 0x04, 0x87, 0xf6, 0xc1, 0xf3,
0x10, 0x83, 0xe1, 0x12, 0x77, 0xa8, 0xa7, 0x56, 0x8d, 0xff, 0x44, 0x57, 0xe1, 0x5c, 0x62, 0x42,
0xdd, 0x1e, 0x17, 0x90, 0xd0, 0xfb, 0x86, 0xd5, 0x1a, 0x64, 0x05, 0xf7, 0x0e, 0x54, 0x1d, 0xea,
0x75, 0xc5, 0x12, 0x55, 0xc4, 0x12, 0xe9, 0xe7, 0xb7, 0x45, 0x3d, 0xb1, 0x34, 0x15, 0x47, 0xfe,
0x40, 0x2f, 0x41, 0x33, 0x18, 0xb2, 0xc1, 0x90, 0x75, 0xa5, 0xdd, 0x69, 0x57, 0x05, 0x7b, 0x0d,
0x09, 0x14, 0x66, 0x89, 0xa2, 0x0f, 0xa0, 0x49, 0x85, 0x28, 0x23, 0xc7, 0xbc, 0x36, 0xad, 0x83,
0xd8, 0x90, 0x74, 0xca, 0x33, 0x7f, 0x1d, 0x5a, 0x2c, 0xc4, 0x8f, 0x89, 0x97, 0xc8, 0xd9, 0x81,
0xd8, 0x6d, 0x8b, 0x12, 0x3e, 0xca, 0xd7, 0x5d, 0x87, 0xa5, 0xde, 0x10, 0x87, 0xd8, 0x67, 0x84,
0x24, 0xb0, 0xeb, 0x02, 0x1b, 0xc5, 0x4d, 0x31, 0x81, 0xf9, 0x21, 0xcc, 0xdf, 0x75, 0x99, 0x10,
0x24, 0xb7, 0x59, 0x86, 0xb8, 0x06, 0x09, 0xcb, 0xf4, 0x02, 0x54, 0xc3, 0xe0, 0x50, 0xda, 0xe0,
0x82, 0x50, 0xc1, 0x4a, 0x18, 0x1c, 0x0a, 0x03, 0x2b, 0x2a, 0x1d, 0x82, 0x50, 0xe9, 0x66, 0xc1,
0x52, 0x5f, 0xe6, 0x5f, 0x18, 0x23, 0xe5, 0xe1, 0xe6, 0x93, 0x3e, 0x9d, 0xfd, 0x7c, 0x1f, 0x2a,
0xa1, 0xa4, 0x9f, 0x98, 0xa3, 0x4d, 0x8e, 0x24, 0xce, 0x80, 0x88, 0x6a, 0xfa, 0x04, 0xd0, 0x2f,
0x1b, 0xd0, 0xf8, 0xc0, 0x1b, 0xd2, 0x67, 0xa1, 0xec, 0xba, 0xb4, 0x44, 0x51, 0x9f, 0x12, 0xf9,
0xcd, 0x02, 0x34, 0x15, 0x1b, 0xb3, 0x38, 0x41, 0xb9, 0xac, 0xec, 0x42, 0x9d, 0x0f, 0xd9, 0xa5,
0xa4, 0x17, 0xc5, 0x74, 0xea, 0x9b, 0x9b, 0x5a, 0xf3, 0x90, 0x62, 0x43, 0xa4, 0xc1, 0x77, 0x05,
0xd1, 0xcf, 0xfb, 0x2c, 0x3c, 0xb2, 0xc0, 0x8e, 0x01, 0x9d, 0x87, 0xb0, 0x98, 0x69, 0xe6, 0x4a,
0xf4, 0x88, 0x1c, 0x45, 0xf6, 0xef, 0x11, 0x39, 0x42, 0x6f, 0x25, 0x8b, 0x15, 0xf2, 0x4e, 0xf1,
0x7b, 0x81, 0xdf, 0xbb, 0x19, 0x86, 0xf8, 0x48, 0x15, 0x33, 0xbc, 0x5b, 0xf8, 0xb2, 0x61, 0xfe,
0x7d, 0x01, 0x1a, 0x5f, 0x1b, 0x92, 0xf0, 0xe8, 0x34, 0xed, 0x50, 0x74, 0x2a, 0xcc, 0x27, 0x4e,
0x85, 0xb1, 0xad, 0x5f, 0xd2, 0x6c, 0x7d, 0x8d, 0x01, 0x2b, 0x6b, 0x0d, 0x98, 0x6e, 0x6f, 0x57,
0x4e, 0xb4, 0xb7, 0xab, 0xb9, 0x7b, 0xfb, 0xcf, 0x8d, 0x58, 0x84, 0x33, 0xed, 0xc6, 0x94, 0x3b,
0x56, 0x38, 0xb1, 0x3b, 0x36, 0xf5, 0x6e, 0xfc, 0x81, 0x01, 0xb5, 0xaf, 0x13, 0x9b, 0x05, 0x21,
0xb7, 0x3f, 0x1a, 0x32, 0x63, 0x0a, 0xd7, 0xb8, 0x90, 0x75, 0x8d, 0x6f, 0x40, 0xd5, 0x75, 0xba,
0x98, 0xeb, 0x97, 0x18, 0x77, 0x92, 0x4b, 0x56, 0x71, 0x1d, 0xa1, 0x88, 0xd3, 0x27, 0x01, 0x7e,
0xc7, 0x80, 0x86, 0xe4, 0x99, 0x4a, 0xca, 0xf7, 0x12, 0xc3, 0x19, 0x3a, 0xa5, 0x57, 0x1f, 0xf1,
0x44, 0xef, 0xce, 0x8d, 0x86, 0xbd, 0x09, 0xc0, 0x85, 0xac, 0xc8, 0xe5, 0x9e, 0x59, 0xd7, 0x72,
0x2b, 0xc9, 0x85, 0xc0, 0xef, 0xce, 0x59, 0x35, 0x4e, 0x25, 0xba, 0xb8, 0x55, 0x81, 0x92, 0xa0,
0x36, 0xff, 0xcf, 0x80, 0xa5, 0xdb, 0xd8, 0xb3, 0xb7, 0x5c, 0xca, 0xb0, 0x6f, 0xcf, 0xe0, 0x84,
0xbd, 0x0b, 0x95, 0x60, 0xd0, 0xf5, 0xc8, 0x3e, 0x53, 0x2c, 0x5d, 0x9e, 0x30, 0x23, 0x29, 0x06,
0xab, 0x1c, 0x0c, 0xee, 0x91, 0x7d, 0x86, 0xbe, 0x02, 0xd5, 0x60, 0xd0, 0x0d, 0xdd, 0xde, 0x01,
0x53, 0xd2, 0x9f, 0x82, 0xb8, 0x12, 0x0c, 0x2c, 0x4e, 0x91, 0x88, 0xad, 0xcc, 0x9f, 0x30, 0xb6,
0x62, 0xfe, 0xeb, 0xd8, 0xf4, 0x67, 0xd8, 0x03, 0xef, 0x42, 0xd5, 0xf5, 0x59, 0xd7, 0x71, 0x69,
0x24, 0x82, 0x8b, 0x7a, 0x1d, 0xf2, 0x99, 0x98, 0x81, 0x58, 0x53, 0x9f, 0xf1, 0xb1, 0xd1, 0x57,
0x01, 0xf6, 0xbd, 0x00, 0x2b, 0x6a, 0x29, 0x83, 0x4b, 0xfa, 0xed, 0xc3, 0xd1, 0x22, 0xfa, 0x9a,
0x20, 0xe2, 0x3d, 0x8c, 0x96, 0xf4, 0x9f, 0x0d, 0x58, 0xd9, 0x21, 0xa1, 0x2c, 0x65, 0x61, 0x2a,
0x0c, 0xba, 0xed, 0xef, 0x07, 0xe9, 0x48, 0xb4, 0x91, 0x89, 0x44, 0xff, 0x64, 0xa2, 0xaf, 0xa9,
0x9b, 0x93, 0xcc, 0x87, 0x44, 0x37, 0xa7, 0x28, 0xeb, 0x23, 0x6f, 0x9e, 0x0b, 0x39, 0xcb, 0xa4,
0xf8, 0x4d, 0x5e, 0xc0, 0xcd, 0xdf, 0x92, 0x15, 0x18, 0xda, 0x49, 0x3d, 0xbd, 0xc2, 0xae, 0x82,
0xb2, 0xf4, 0x19, 0xbb, 0xff, 0x2a, 0x64, 0x6c, 0x47, 0x8e, 0x21, 0xfa, 0x3d, 0x03, 0xd6, 0xf3,
0xb9, 0x9a, 0xe5, 0x88, 0xfe, 0x2a, 0x94, 0x5c, 0x7f, 0x3f, 0x88, 0xc2, 0x6e, 0x57, 0xf4, 0x2e,
0xba, 0x76, 0x5c, 0x49, 0x68, 0xfe, 0x75, 0x01, 0x5a, 0xc2, 0xa8, 0x9f, 0xc2, 0xf2, 0xf7, 0x49,
0xbf, 0x4b, 0xdd, 0x4f, 0x49, 0xb4, 0xfc, 0x7d, 0xd2, 0xdf, 0x75, 0x3f, 0x25, 0x29, 0xcd, 0x28,
0xa5, 0x35, 0x63, 0x72, 0x54, 0x39, 0x19, 0x56, 0xad, 0xa4, 0xc3, 0xaa, 0xab, 0x50, 0xf6, 0x03,
0x87, 0x6c, 0x6f, 0xa9, 0x6b, 0xa7, 0xfa, 0x1a, 0xa9, 0x5a, 0xed, 0x84, 0xaa, 0xf6, 0xb9, 0x01,
0x9d, 0x3b, 0x84, 0x65, 0x65, 0x77, 0x7a, 0x5a, 0xf6, 0x3d, 0x03, 0xce, 0x6b, 0x19, 0x9a, 0x45,
0xc1, 0xde, 0x4b, 0x2b, 0x98, 0xfe, 0x0e, 0x38, 0x36, 0xa4, 0xd2, 0xad, 0x37, 0xa1, 0xb1, 0x35,
0xec, 0xf7, 0x63, 0x97, 0xeb, 0x32, 0x34, 0x42, 0xf9, 0x53, 0x5e, 0x91, 0xe4, 0xf9, 0x5b, 0x57,
0x30, 0x7e, 0x11, 0x32, 0xaf, 0x42, 0x53, 0x91, 0x28, 0xae, 0x3b, 0x50, 0x0d, 0xd5, 0x6f, 0x85,
0x1f, 0x7f, 0x9b, 0x2b, 0xb0, 0x64, 0x91, 0x1e, 0x57, 0xed, 0xf0, 0x9e, 0xeb, 0x3f, 0x52, 0xc3,
0x98, 0xdf, 0x31, 0x60, 0x39, 0x0d, 0x57, 0x7d, 0xbd, 0x0d, 0x15, 0xec, 0x38, 0x21, 0xa1, 0x74,
0xe2, 0xb2, 0xdc, 0x94, 0x38, 0x56, 0x84, 0x9c, 0x90, 0x5c, 0x61, 0x6a, 0xc9, 0x99, 0x5d, 0x38,
0x77, 0x87, 0xb0, 0xfb, 0x84, 0x85, 0x33, 0x65, 0xf0, 0xdb, 0xfc, 0xf2, 0x22, 0x88, 0x95, 0x5a,
0x44, 0x9f, 0xe6, 0x67, 0x06, 0xa0, 0xe4, 0x08, 0xb3, 0x2c, 0x73, 0x52, 0xca, 0x85, 0xb4, 0x94,
0x65, 0x91, 0x53, 0x7f, 0x10, 0xf8, 0xc4, 0x67, 0x49, 0x77, 0xab, 0x19, 0x43, 0x85, 0xfa, 0xfd,
0xc8, 0x00, 0x74, 0x2f, 0xc0, 0xce, 0x2d, 0xec, 0xcd, 0xe6, 0x1e, 0x5c, 0x04, 0xa0, 0xa1, 0xdd,
0x55, 0xbb, 0xb5, 0xa0, 0xac, 0x4f, 0x68, 0x3f, 0x90, 0x1b, 0xf6, 0x12, 0xd4, 0x1d, 0xca, 0x54,
0x73, 0x94, 0x50, 0x06, 0x87, 0x32, 0xd9, 0x2e, 0x8a, 0x58, 0x29, 0xc1, 0x1e, 0x71, 0xba, 0x89,
0x7c, 0xdc, 0xbc, 0x40, 0x6b, 0xc9, 0x86, 0xdd, 0x51, 0x56, 0xee, 0x21, 0xac, 0xdd, 0xc7, 0xfe,
0x10, 0x7b, 0xb7, 0x83, 0xfe, 0x00, 0xa7, 0x0a, 0x1b, 0xb3, 0x66, 0xce, 0xd0, 0x98, 0xb9, 0x17,
0x65, 0xe5, 0x9b, 0x74, 0xad, 0x05, 0xaf, 0xf3, 0x56, 0x02, 0x62, 0x52, 0x68, 0x8f, 0x77, 0x3f,
0xcb, 0x42, 0x09, 0xa6, 0xa2, 0xae, 0x92, 0xb6, 0x77, 0x04, 0x33, 0xdf, 0x87, 0x17, 0x44, 0x15,
0x62, 0x04, 0x4a, 0x85, 0xf6, 0xb3, 0x1d, 0x18, 0x9a, 0x0e, 0x7e, 0xb5, 0x20, 0x4c, 0xdb, 0x58,
0x0f, 0xb3, 0x30, 0xfe, 0x6e, 0x3a, 0xa2, 0xfe, 0x72, 0x4e, 0xa5, 0x6d, 0x7a, 0x44, 0x15, 0x56,
0xdf, 0x80, 0x45, 0xf2, 0x84, 0xd8, 0x43, 0xe6, 0xfa, 0xbd, 0x1d, 0x0f, 0xfb, 0x0f, 0x02, 0x75,
0xa0, 0x64, 0xc1, 0xe8, 0x65, 0x68, 0x72, 0xe9, 0x07, 0x43, 0xa6, 0xf0, 0xe4, 0xc9, 0x92, 0x06,
0xf2, 0xfe, 0xf8, 0x7c, 0x3d, 0xc2, 0x88, 0xa3, 0xf0, 0xe4, 0x31, 0x93, 0x05, 0x8f, 0x89, 0x92,
0x83, 0xe9, 0x49, 0x44, 0xf9, 0xef, 0x46, 0x46, 0x94, 0xaa, 0x87, 0xd3, 0x12, 0xe5, 0x5d, 0x80,
0x3e, 0x09, 0x7b, 0x64, 0x5b, 0x18, 0x75, 0x79, 0x73, 0xdf, 0xd0, 0x1a, 0xf5, 0x51, 0x07, 0xf7,
0x23, 0x02, 0x2b, 0x41, 0x6b, 0xde, 0x81, 0x25, 0x0d, 0x0a, 0xb7, 0x57, 0x34, 0x18, 0x86, 0x36,
0x89, 0x82, 0x3f, 0xd1, 0x27, 0x3f, 0xdf, 0x18, 0x0e, 0x7b, 0x84, 0x29, 0xa5, 0x55, 0x5f, 0xe6,
0xdb, 0x22, 0x09, 0x25, 0x02, 0x05, 0x29, 0x4d, 0x4d, 0x27, 0xd4, 0x8d, 0xb1, 0x84, 0xfa, 0xbe,
0xc8, 0xf8, 0x24, 0xe9, 0x66, 0x2c, 0x86, 0xd8, 0xe7, 0x5d, 0x11, 0x47, 0xbd, 0xb2, 0x88, 0x3e,
0xcd, 0xff, 0x35, 0xa0, 0xb9, 0xdd, 0x1f, 0x04, 0xa3, 0x64, 0xc7, 0xd4, 0x57, 0xc9, 0xf1, 0x60,
0x71, 0x41, 0x17, 0x2c, 0x7e, 0x09, 0x9a, 0xe9, 0x1a, 0x7d, 0x19, 0xd7, 0x69, 0xd8, 0xc9, 0xda,
0xfc, 0xf3, 0x50, 0x0b, 0x83, 0xc3, 0x2e, 0x37, 0x91, 0x8e, 0x2a, 0xbb, 0xa8, 0x86, 0xc1, 0x21,
0x37, 0x9c, 0x0e, 0x5a, 0x86, 0xd2, 0xbe, 0xeb, 0xc5, 0x15, 0x43, 0xf2, 0x03, 0xbd, 0xc7, 0x2f,
0x5a, 0x32, 0x2d, 0x5b, 0x9e, 0xf6, 0xbe, 0x13, 0x51, 0x98, 0x9f, 0xc0, 0x42, 0x34, 0xeb, 0x19,
0x9f, 0x97, 0x30, 0x4c, 0x1f, 0x45, 0x15, 0x11, 0xf2, 0xc3, 0xbc, 0x2a, 0xb3, 0x75, 0xa2, 0xff,
0xd4, 0xa2, 0x23, 0x98, 0xe7, 0x18, 0x6a, 0x2f, 0x89, 0xdf, 0x7c, 0x01, 0x56, 0xb3, 0xd8, 0xb3,
0xb0, 0xf4, 0x76, 0x7a, 0xff, 0xe8, 0x5f, 0x10, 0x24, 0x47, 0x53, 0x7b, 0x47, 0xad, 0x80, 0x1d,
0x0c, 0x7d, 0xa6, 0x0c, 0x10, 0x5f, 0x81, 0xdb, 0xfc, 0x1b, 0xad, 0x41, 0xc5, 0x75, 0xba, 0x1e,
0xbf, 0x93, 0xc9, 0xb3, 0xa6, 0xec, 0x3a, 0xf7, 0xf8, 0x7d, 0xed, 0x9d, 0xc8, 0x83, 0x9a, 0xba,
0x8c, 0x42, 0x79, 0x4f, 0xdf, 0x97, 0xe7, 0xbb, 0x25, 0x4b, 0xf1, 0x9f, 0x71, 0xb1, 0xcc, 0x06,
0xb4, 0x0e, 0x5d, 0x76, 0xd0, 0x15, 0x6f, 0x31, 0xc4, 0xe1, 0x2a, 0xf3, 0xc5, 0x55, 0x6b, 0x81,
0xc3, 0x77, 0x39, 0x98, 0x1f, 0xb0, 0xd4, 0xfc, 0x35, 0x03, 0x96, 0x52, 0x6c, 0xcd, 0xb2, 0x14,
0x5f, 0xe1, 0x7e, 0x87, 0xec, 0x48, 0x79, 0x98, 0xeb, 0x5a, 0x63, 0xa4, 0x46, 0x13, 0x46, 0x28,
0xa6, 0x30, 0xff, 0xc3, 0x80, 0x7a, 0xa2, 0x85, 0x5f, 0x5b, 0x54, 0xdb, 0xe8, 0xda, 0x12, 0x03,
0xa6, 0x12, 0xc3, 0x4b, 0x30, 0xda, 0x9a, 0x89, 0x7a, 0xee, 0x44, 0xbd, 0x9a, 0x43, 0xd1, 0x5d,
0x58, 0x90, 0x62, 0x8a, 0x59, 0xd7, 0x46, 0x13, 0xe2, 0x4a, 0x3c, 0x1c, 0x3a, 0x8a, 0x4b, 0xab,
0x49, 0x13, 0x5f, 0x32, 0x79, 0x18, 0x38, 0x44, 0x8c, 0x54, 0x92, 0xd6, 0x52, 0xf8, 0x35, 0x0e,
0xe5, 0xd7, 0x8b, 0x46, 0x92, 0x94, 0xbb, 0x68, 0x1e, 0xc1, 0x0e, 0x09, 0xe3, 0xb9, 0xc5, 0xdf,
0xdc, 0x27, 0x92, 0xbf, 0xbb, 0xdc, 0x65, 0x55, 0x46, 0x06, 0x24, 0x88, 0x7b, 0xb3, 0xe8, 0x55,
0x58, 0x74, 0xfa, 0xa9, 0x87, 0x40, 0x91, 0x13, 0xe7, 0xf4, 0x13, 0x2f, 0x80, 0x52, 0x0c, 0xcd,
0xa7, 0x19, 0xfa, 0x1f, 0x23, 0x7e, 0x1e, 0x19, 0x12, 0x87, 0xf8, 0xcc, 0xc5, 0xde, 0xd3, 0xeb,
0x64, 0x07, 0xaa, 0x43, 0x4a, 0xc2, 0x84, 0x4d, 0x8c, 0xbf, 0x79, 0xdb, 0x00, 0x53, 0x7a, 0x18,
0x84, 0x8e, 0xe2, 0x32, 0xfe, 0x9e, 0x50, 0xfc, 0x27, 0x9f, 0xde, 0xe9, 0x8b, 0xff, 0xde, 0x86,
0xb5, 0x7e, 0xe0, 0xb8, 0xfb, 0xae, 0xae, 0x66, 0x90, 0x93, 0xad, 0x44, 0xcd, 0x29, 0x3a, 0xb3,
0x07, 0x6b, 0x32, 0xe3, 0xf8, 0x8c, 0xa7, 0x6c, 0xfe, 0x12, 0xac, 0x70, 0x63, 0xc1, 0x87, 0xf9,
0x98, 0x92, 0x70, 0xc6, 0x5d, 0x75, 0x01, 0x6a, 0x51, 0xcf, 0x51, 0x5d, 0xe6, 0x08, 0x60, 0xde,
0x85, 0xe5, 0xcc, 0x58, 0x4f, 0x39, 0xa3, 0x2b, 0x97, 0xa1, 0x1a, 0xd5, 0x99, 0xa2, 0x0a, 0x14,
0x6f, 0x7a, 0x5e, 0x6b, 0x0e, 0x35, 0xa0, 0xba, 0xad, 0x8a, 0x29, 0x5b, 0xc6, 0x95, 0x9f, 0x83,
0xc5, 0x4c, 0x3e, 0x12, 0x55, 0x61, 0xfe, 0x41, 0xe0, 0x93, 0xd6, 0x1c, 0x6a, 0x41, 0xe3, 0x96,
0xeb, 0xe3, 0xf0, 0x48, 0x46, 0xeb, 0x5a, 0x0e, 0x5a, 0x84, 0xba, 0x88, 0x5a, 0x29, 0x00, 0xd9,
0xfc, 0xf1, 0xcb, 0xd0, 0xbc, 0x2f, 0x18, 0xd9, 0x25, 0xe1, 0x63, 0xd7, 0x26, 0xa8, 0x0b, 0xad,
0xec, 0x2b, 0x5d, 0xf4, 0x05, 0xbd, 0x07, 0xa3, 0x7f, 0xcc, 0xdb, 0x99, 0x24, 0x43, 0x73, 0x0e,
0x7d, 0x02, 0x0b, 0xe9, 0xb7, 0xae, 0x48, 0x1f, 0x56, 0xd1, 0x3e, 0x88, 0x3d, 0xae, 0xf3, 0x2e,
0x34, 0x53, 0x4f, 0x57, 0xd1, 0xeb, 0xda, 0xbe, 0x75, 0xcf, 0x5b, 0x3b, 0x7a, 0xfb, 0x92, 0x7c,
0x5e, 0x2a, 0xb9, 0x4f, 0xbf, 0x2f, 0xcb, 0xe1, 0x5e, 0xfb, 0x08, 0xed, 0x38, 0xee, 0x31, 0x9c,
0x1b, 0x7b, 0x07, 0x86, 0xde, 0xc8, 0xb1, 0xd8, 0xfa, 0xf7, 0x62, 0xc7, 0x0d, 0x71, 0x08, 0x68,
0xfc, 0x89, 0x26, 0xba, 0xa6, 0x5f, 0x81, 0xbc, 0x07, 0xaa, 0x9d, 0xeb, 0x53, 0xe3, 0xc7, 0x82,
0xfb, 0x15, 0x03, 0xd6, 0x72, 0x1e, 0x6f, 0xa1, 0x1b, 0xda, 0xee, 0x26, 0xbf, 0x40, 0xeb, 0xbc,
0x75, 0x32, 0xa2, 0x98, 0x11, 0x1f, 0x16, 0x33, 0xef, 0x99, 0xd0, 0xd5, 0xdc, 0x1a, 0xef, 0xf1,
0x87, 0x5d, 0x9d, 0x2f, 0x4c, 0x87, 0x1c, 0x8f, 0xf7, 0x10, 0x16, 0x33, 0x8f, 0x80, 0x72, 0xc6,
0xd3, 0x3f, 0x15, 0x3a, 0x6e, 0x41, 0xbf, 0x09, 0xcd, 0xd4, 0x6b, 0x9d, 0x1c, 0x8d, 0xd7, 0xbd,
0xe8, 0x39, 0xae, 0xeb, 0x87, 0xd0, 0x48, 0x3e, 0xaa, 0x41, 0x1b, 0x79, 0x7b, 0x69, 0xac, 0xe3,
0x93, 0x6c, 0xa5, 0x51, 0xcd, 0xfc, 0x84, 0xad, 0x34, 0xf6, 0xcc, 0x60, 0xfa, 0xad, 0x94, 0xe8,
0x7f, 0xe2, 0x56, 0x3a, 0xf1, 0x10, 0xdf, 0x91, 0x7e, 0xb3, 0xe6, 0x4d, 0x06, 0xda, 0xcc, 0xd3,
0xcd, 0xfc, 0xd7, 0x27, 0x9d, 0x1b, 0x27, 0xa2, 0x89, 0xa5, 0xf8, 0x08, 0x16, 0xd2, 0x2f, 0x0f,
0x72, 0xa4, 0xa8, 0x7d, 0xac, 0xd1, 0xb9, 0x3a, 0x15, 0x6e, 0x3c, 0xd8, 0xc7, 0x50, 0x4f, 0xfc,
0xf1, 0x06, 0x7a, 0x6d, 0x82, 0x1e, 0x27, 0xff, 0x85, 0xe2, 0x38, 0x49, 0x7e, 0x0d, 0x6a, 0xf1,
0xff, 0x65, 0xa0, 0x57, 0x72, 0xf5, 0xf7, 0x24, 0x5d, 0xee, 0x02, 0x8c, 0xfe, 0x0c, 0x03, 0xbd,
0xaa, 0xed, 0x73, 0xec, 0xdf, 0x32, 0x8e, 0xeb, 0x34, 0x9e, 0xbe, 0x2c, 0xe8, 0x9a, 0x34, 0xfd,
0x64, 0x05, 0xe2, 0x71, 0xdd, 0x1e, 0x40, 0x33, 0x55, 0x37, 0x9c, 0xb7, 0x85, 0x35, 0xe5, 0xdc,
0x9d, 0x2b, 0xd3, 0xa0, 0xc6, 0xeb, 0x77, 0x00, 0xcd, 0x54, 0x15, 0x67, 0xce, 0x48, 0xba, 0xa2,
0xd5, 0x9c, 0x91, 0xb4, 0x45, 0xa1, 0xe6, 0x1c, 0xfa, 0x76, 0xa2, 0x60, 0x34, 0x55, 0x94, 0x8b,
0xde, 0x9c, 0xd8, 0x8f, 0xae, 0x26, 0xb9, 0xb3, 0x79, 0x12, 0x92, 0x98, 0x05, 0xa5, 0x55, 0x52,
0xa4, 0xf9, 0x5a, 0x75, 0x92, 0x95, 0xda, 0x85, 0xb2, 0xac, 0xcb, 0x44, 0x66, 0x4e, 0x05, 0x76,
0xa2, 0x68, 0xb3, 0xf3, 0x92, 0x16, 0x27, 0x5d, 0xb2, 0x28, 0x3b, 0x95, 0x5e, 0x70, 0x4e, 0xa7,
0xa9, 0xa2, 0xbc, 0x69, 0x3b, 0xb5, 0xa0, 0x2c, 0x0b, 0x6e, 0x72, 0x3a, 0x4d, 0x15, 0x8d, 0x75,
0x26, 0xe3, 0x88, 0x4c, 0xac, 0x39, 0x87, 0x76, 0xa0, 0x24, 0xc2, 0x41, 0xe8, 0xf2, 0xa4, 0x5a,
0x94, 0x49, 0x3d, 0xa6, 0xca, 0x55, 0xcc, 0x39, 0xf4, 0x0b, 0x50, 0x12, 0xc9, 0x8d, 0x9c, 0x1e,
0x93, 0x05, 0x25, 0x9d, 0x89, 0x28, 0x11, 0x8b, 0x0e, 0x34, 0x92, 0x59, 0xe4, 0x9c, 0x23, 0x4b,
0x93, 0x67, 0xef, 0x4c, 0x83, 0x19, 0x8d, 0x22, 0xb7, 0xd1, 0x28, 0x34, 0x96, 0xbf, 0x8d, 0xc6,
0xc2, 0x6e, 0xf9, 0xdb, 0x68, 0x3c, 0xd2, 0x66, 0xce, 0xa1, 0x5f, 0x37, 0xa0, 0x9d, 0x97, 0xda,
0x44, 0xb9, 0x1e, 0xd0, 0xa4, 0xfc, 0x6c, 0xe7, 0x4b, 0x27, 0xa4, 0x8a, 0x79, 0xf9, 0x54, 0x04,
0x26, 0xc6, 0x92, 0x99, 0xd7, 0xf3, 0xfa, 0xcb, 0x49, 0xdd, 0x75, 0xbe, 0x38, 0x3d, 0x41, 0x3c,
0xf6, 0x1e, 0xd4, 0x13, 0x41, 0x91, 0x1c, 0xcb, 0x3b, 0x1e, 0xcd, 0xc9, 0x59, 0x55, 0x4d, 0x7c,
0x45, 0xaa, 0xb7, 0xc8, 0x8d, 0xe5, 0x28, 0x63, 0x32, 0xd5, 0x96, 0xa3, 0xde, 0xa9, 0xd4, 0x9a,
0x39, 0x87, 0x08, 0x34, 0x92, 0x89, 0xb2, 0x1c, 0x6d, 0xd4, 0xe4, 0xd8, 0x3a, 0xaf, 0x4f, 0x81,
0x19, 0x0f, 0xd3, 0x05, 0x18, 0x25, 0xaa, 0x72, 0xce, 0xba, 0xb1, 0x5c, 0x59, 0xe7, 0xb5, 0x63,
0xf1, 0x92, 0xc7, 0x7e, 0x22, 0xf5, 0x94, 0x23, 0xfd, 0xf1, 0xe4, 0xd4, 0x14, 0x77, 0x91, 0xf1,
0x34, 0x48, 0xce, 0x5d, 0x24, 0x37, 0xe3, 0xd2, 0xb9, 0x3e, 0x35, 0x7e, 0x3c, 0x9f, 0x6f, 0x41,
0x2b, 0x9b, 0x36, 0xca, 0xb9, 0xe3, 0xe6, 0x24, 0xaf, 0x3a, 0x6f, 0x4c, 0x89, 0x9d, 0x3c, 0x0f,
0xcf, 0x8f, 0xf3, 0xf4, 0x0d, 0x97, 0x1d, 0x88, 0x8c, 0xc5, 0x34, 0xb3, 0x4e, 0x26, 0x47, 0xa6,
0x99, 0x75, 0x2a, 0x15, 0xa2, 0x0e, 0x2f, 0x11, 0x75, 0xcd, 0x3b, 0xbc, 0x92, 0x41, 0xf8, 0x9c,
0x73, 0x26, 0x1d, 0xb2, 0x96, 0xee, 0x67, 0x3a, 0x76, 0x8c, 0xf2, 0xfd, 0x84, 0xb1, 0x70, 0x74,
0x8e, 0xfb, 0xa9, 0x0f, 0x46, 0x0b, 0x45, 0x6f, 0x65, 0x43, 0x64, 0x93, 0x63, 0x13, 0xd9, 0xb0,
0xd2, 0xf1, 0xe1, 0x83, 0xd6, 0xc7, 0x03, 0xe7, 0xd9, 0x0e, 0x90, 0x8d, 0x78, 0xe5, 0x0c, 0x90,
0x13, 0x18, 0x9b, 0xc2, 0x97, 0x4c, 0x45, 0x9f, 0x72, 0x8e, 0x26, 0x5d, 0x84, 0x2a, 0xe7, 0x68,
0xd2, 0x06, 0xce, 0xcc, 0xb9, 0xcd, 0x21, 0x34, 0x76, 0xc2, 0xe0, 0xc9, 0x51, 0x14, 0x38, 0xfa,
0xe9, 0x18, 0xbb, 0x5b, 0xdf, 0x80, 0x05, 0x37, 0xc6, 0xe9, 0x85, 0x03, 0xfb, 0x56, 0x5d, 0x06,
0xb0, 0x76, 0x38, 0xf1, 0x8e, 0xf1, 0x8b, 0x37, 0x7a, 0x2e, 0x3b, 0x18, 0xee, 0x71, 0xc9, 0x5c,
0x97, 0x68, 0x6f, 0xb8, 0x81, 0xfa, 0x75, 0xdd, 0xf5, 0x19, 0x09, 0x7d, 0xec, 0x5d, 0x17, 0x43,
0x29, 0xe8, 0x60, 0xef, 0x0f, 0x0d, 0x63, 0xaf, 0x2c, 0x40, 0x37, 0xfe, 0x3f, 0x00, 0x00, 0xff,
0xff, 0x81, 0xda, 0xa3, 0x80, 0x9d, 0x50, 0x00, 0x00,
// 4247 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x7c, 0x4b, 0x8f, 0x1c, 0xc9,
0x71, 0xf0, 0x54, 0xf7, 0xf4, 0x2b, 0xba, 0x7b, 0xa6, 0x99, 0xf3, 0xea, 0x6d, 0x92, 0xcb, 0x61,
0xed, 0x6b, 0x96, 0xd4, 0x92, 0xda, 0xe1, 0x6a, 0x57, 0xdf, 0xae, 0x3e, 0xaf, 0x48, 0x8e, 0x97,
0x1c, 0x2c, 0x49, 0x8f, 0x6a, 0x76, 0x25, 0xc8, 0x0b, 0xa2, 0x91, 0x53, 0x95, 0xd3, 0x53, 0x66,
0x75, 0x55, 0xab, 0x32, 0x9b, 0xc3, 0xd9, 0x93, 0x00, 0x19, 0x7e, 0x40, 0xeb, 0x15, 0x0c, 0x0b,
0xb6, 0x75, 0xb0, 0x61, 0xf8, 0x71, 0xf0, 0xc1, 0x86, 0x25, 0x19, 0xb6, 0xe0, 0x8b, 0x7d, 0xf0,
0xc1, 0x07, 0x03, 0x7e, 0x5c, 0x0c, 0xc3, 0x17, 0xff, 0x01, 0x1f, 0x0c, 0xf8, 0xe8, 0x83, 0x91,
0x8f, 0xaa, 0xae, 0xaa, 0xce, 0xea, 0xe9, 0x61, 0x8b, 0x9a, 0xe1, 0xad, 0x2b, 0x32, 0x22, 0x33,
0x32, 0x32, 0x32, 0x32, 0x32, 0x22, 0xb2, 0xa1, 0xd1, 0x77, 0xbd, 0xc7, 0x43, 0x7a, 0x6d, 0x10,
0x06, 0x2c, 0x40, 0x4b, 0xc9, 0xaf, 0x6b, 0xf2, 0xa3, 0xd3, 0xb0, 0x83, 0x7e, 0x3f, 0xf0, 0x25,
0xb0, 0xd3, 0xa0, 0xf6, 0x01, 0xe9, 0x63, 0xf9, 0x65, 0xfe, 0xbe, 0x01, 0xe8, 0x76, 0x48, 0x30,
0x23, 0x37, 0x3d, 0x17, 0x53, 0x8b, 0x7c, 0x6b, 0x48, 0x28, 0x43, 0x5f, 0x84, 0xf9, 0x3d, 0x4c,
0x49, 0xdb, 0x58, 0x37, 0x36, 0xea, 0x9b, 0x17, 0xae, 0xa5, 0xba, 0x55, 0xdd, 0xdd, 0xa7, 0xbd,
0x5b, 0x98, 0x12, 0x4b, 0x60, 0xa2, 0x35, 0xa8, 0x38, 0x7b, 0x5d, 0x1f, 0xf7, 0x49, 0xbb, 0xb0,
0x6e, 0x6c, 0xd4, 0xac, 0xb2, 0xb3, 0xf7, 0x00, 0xf7, 0x09, 0x7a, 0x0d, 0x16, 0xed, 0xc0, 0xf3,
0x88, 0xcd, 0xdc, 0xc0, 0x97, 0x08, 0x45, 0x81, 0xb0, 0x30, 0x02, 0x0b, 0xc4, 0x65, 0x28, 0x61,
0xce, 0x43, 0x7b, 0x5e, 0x34, 0xcb, 0x0f, 0x93, 0x42, 0x6b, 0x2b, 0x0c, 0x06, 0xcf, 0x8a, 0xbb,
0x78, 0xd0, 0x62, 0x72, 0xd0, 0xdf, 0x33, 0xe0, 0xdc, 0x4d, 0x8f, 0x91, 0xf0, 0x8c, 0x0a, 0xe5,
0x77, 0x0b, 0xb0, 0x26, 0x57, 0xed, 0x76, 0x8c, 0x7e, 0x9a, 0x5c, 0xae, 0x42, 0x59, 0x6a, 0x95,
0x60, 0xb3, 0x61, 0xa9, 0x2f, 0x74, 0x11, 0x80, 0x1e, 0xe0, 0xd0, 0xa1, 0x5d, 0x7f, 0xd8, 0x6f,
0x97, 0xd6, 0x8d, 0x8d, 0x92, 0x55, 0x93, 0x90, 0x07, 0xc3, 0x3e, 0xb2, 0xe0, 0x9c, 0x1d, 0xf8,
0xd4, 0xa5, 0x8c, 0xf8, 0xf6, 0x51, 0xd7, 0x23, 0x8f, 0x89, 0xd7, 0x2e, 0xaf, 0x1b, 0x1b, 0x0b,
0x9b, 0xaf, 0x68, 0xf9, 0xbe, 0x3d, 0xc2, 0xbe, 0xc7, 0x91, 0xad, 0x96, 0x9d, 0x81, 0x98, 0xdf,
0x35, 0x60, 0x85, 0x2b, 0xcc, 0x99, 0x10, 0x8c, 0xf9, 0xa7, 0x06, 0x2c, 0xdf, 0xc5, 0xf4, 0x6c,
0xac, 0xd2, 0x45, 0x00, 0xe6, 0xf6, 0x49, 0x97, 0x32, 0xdc, 0x1f, 0x88, 0x95, 0x9a, 0xb7, 0x6a,
0x1c, 0xb2, 0xcb, 0x01, 0xe6, 0x37, 0xa1, 0x71, 0x2b, 0x08, 0x3c, 0x8b, 0xd0, 0x41, 0xe0, 0x53,
0x82, 0x6e, 0x40, 0x99, 0x32, 0xcc, 0x86, 0x54, 0x31, 0x79, 0x5e, 0xcb, 0xe4, 0xae, 0x40, 0xb1,
0x14, 0x2a, 0xd7, 0xd7, 0xc7, 0xd8, 0x1b, 0x4a, 0x1e, 0xab, 0x96, 0xfc, 0x30, 0x3f, 0x81, 0x85,
0x5d, 0x16, 0xba, 0x7e, 0xef, 0xa7, 0xd8, 0x79, 0x2d, 0xea, 0xfc, 0x5f, 0x0d, 0x78, 0x61, 0x8b,
0x50, 0x3b, 0x74, 0xf7, 0xce, 0xc8, 0x76, 0x30, 0xa1, 0x31, 0x82, 0x6c, 0x6f, 0x09, 0x51, 0x17,
0xad, 0x14, 0x2c, 0xb3, 0x18, 0xa5, 0xec, 0x62, 0x7c, 0xbb, 0x04, 0x1d, 0xdd, 0xa4, 0x66, 0x11,
0xdf, 0xff, 0x8f, 0x77, 0x69, 0x41, 0x10, 0x65, 0xf6, 0x98, 0x3a, 0x17, 0x46, 0xa3, 0xed, 0x0a,
0x40, 0xbc, 0x99, 0xb3, 0xb3, 0x2a, 0x6a, 0x66, 0xb5, 0x09, 0x2b, 0x8f, 0xdd, 0x90, 0x0d, 0xb1,
0xd7, 0xb5, 0x0f, 0xb0, 0xef, 0x13, 0x4f, 0xc8, 0x89, 0x9b, 0xaf, 0xe2, 0x46, 0xcd, 0x5a, 0x52,
0x8d, 0xb7, 0x65, 0x1b, 0x17, 0x16, 0x45, 0x6f, 0xc1, 0xea, 0xe0, 0xe0, 0x88, 0xba, 0xf6, 0x18,
0x51, 0x49, 0x10, 0x2d, 0x47, 0xad, 0x29, 0xaa, 0xab, 0x70, 0xce, 0x16, 0x16, 0xd0, 0xe9, 0x72,
0xa9, 0x49, 0x31, 0x96, 0x85, 0x18, 0x5b, 0xaa, 0xe1, 0xa3, 0x08, 0xce, 0xd9, 0x8a, 0x90, 0x87,
0xcc, 0x4e, 0x10, 0x54, 0x04, 0xc1, 0x92, 0x6a, 0xfc, 0x98, 0xd9, 0x23, 0x9a, 0xb4, 0xed, 0xaa,
0x66, 0x6d, 0x57, 0x1b, 0x2a, 0xc2, 0x16, 0x13, 0xda, 0xae, 0x09, 0x36, 0xa3, 0x4f, 0xb4, 0x0d,
0x8b, 0x94, 0xe1, 0x90, 0x75, 0x07, 0x01, 0x75, 0xb9, 0x5c, 0x68, 0x1b, 0xd6, 0x8b, 0x1b, 0xf5,
0xcd, 0x75, 0xed, 0x22, 0x7d, 0x48, 0x8e, 0xb6, 0x30, 0xc3, 0x3b, 0xd8, 0x0d, 0xad, 0x05, 0x41,
0xb8, 0x13, 0xd1, 0xe9, 0x0d, 0x64, 0x7d, 0x26, 0x03, 0xa9, 0xd3, 0xe2, 0x86, 0xd6, 0x76, 0xfd,
0xc8, 0x80, 0x95, 0x7b, 0x01, 0x76, 0xce, 0xc6, 0x9e, 0x7a, 0x05, 0x16, 0x42, 0x32, 0xf0, 0x5c,
0x1b, 0xf3, 0xf5, 0xd8, 0x23, 0xa1, 0xd8, 0x55, 0x25, 0xab, 0xa9, 0xa0, 0x0f, 0x04, 0xd0, 0xfc,
0xdc, 0x80, 0xb6, 0x45, 0x3c, 0x82, 0xe9, 0xd9, 0xb0, 0x05, 0xe6, 0xf7, 0x0d, 0x78, 0xf1, 0x0e,
0x61, 0x89, 0x5d, 0xc5, 0x30, 0x73, 0x29, 0x73, 0xed, 0xd3, 0xf4, 0x2b, 0xcc, 0xef, 0x19, 0x70,
0x29, 0x97, 0xad, 0x59, 0x8c, 0xcc, 0x3b, 0x50, 0xe2, 0xbf, 0x68, 0xbb, 0x20, 0x74, 0xfe, 0x72,
0x9e, 0xce, 0x7f, 0x9d, 0xdb, 0x6e, 0xa1, 0xf4, 0x12, 0xdf, 0xfc, 0x4f, 0x03, 0x56, 0x77, 0x0f,
0x82, 0xc3, 0x11, 0x4b, 0xcf, 0x42, 0x40, 0x69, 0xb3, 0x5b, 0xcc, 0x98, 0x5d, 0xf4, 0x26, 0xcc,
0xb3, 0xa3, 0x01, 0x11, 0xba, 0xb5, 0xb0, 0x79, 0xf1, 0x9a, 0xc6, 0x9d, 0xbe, 0xc6, 0x99, 0xfc,
0xe8, 0x68, 0x40, 0x2c, 0x81, 0x8a, 0x5e, 0x87, 0x56, 0x46, 0xe4, 0x91, 0xe1, 0x5a, 0x4c, 0xcb,
0x9c, 0x9a, 0x3f, 0x29, 0xc0, 0xda, 0xd8, 0x14, 0x67, 0x11, 0xb6, 0x6e, 0xec, 0x82, 0x76, 0x6c,
0xbe, 0x7f, 0x12, 0xa8, 0xae, 0xc3, 0x3d, 0xde, 0xe2, 0x46, 0xd1, 0x6a, 0x26, 0xec, 0xb7, 0x43,
0xd1, 0x1b, 0x80, 0xc6, 0xcc, 0xaa, 0xb4, 0xde, 0xf3, 0xd6, 0xb9, 0xac, 0x5d, 0x15, 0xb6, 0x5b,
0x6b, 0x58, 0xa5, 0x08, 0xe6, 0xad, 0x65, 0x8d, 0x65, 0xa5, 0xe8, 0x4d, 0x58, 0x76, 0xfd, 0xfb,
0xa4, 0x1f, 0x84, 0x47, 0xdd, 0x01, 0x09, 0x6d, 0xe2, 0x33, 0xdc, 0x23, 0xb4, 0x5d, 0x16, 0x1c,
0x2d, 0x45, 0x6d, 0x3b, 0xa3, 0x26, 0xf3, 0xc7, 0x06, 0xac, 0x4a, 0x8f, 0x77, 0x07, 0x87, 0xcc,
0x3d, 0x03, 0xd6, 0x68, 0x10, 0xf1, 0x21, 0xf1, 0xa4, 0x7f, 0xde, 0x8c, 0xa1, 0x62, 0x97, 0xfd,
0xd0, 0x80, 0x65, 0xee, 0x8c, 0x3e, 0x4f, 0x3c, 0xff, 0x85, 0x01, 0x4b, 0x77, 0x31, 0x7d, 0x9e,
0x58, 0xfe, 0x4b, 0x75, 0x52, 0xc5, 0x3c, 0x9f, 0xea, 0x95, 0xed, 0x35, 0x58, 0x4c, 0x33, 0x1d,
0x79, 0x3f, 0x0b, 0x29, 0xae, 0xa9, 0xf9, 0xd7, 0xa3, 0xb3, 0xea, 0x39, 0xe3, 0xfc, 0x6f, 0x0c,
0xb8, 0x78, 0x87, 0xb0, 0x98, 0xeb, 0x33, 0x71, 0xa6, 0x4d, 0xab, 0x2d, 0x9f, 0xcb, 0x13, 0x59,
0xcb, 0xfc, 0xa9, 0x9c, 0x7c, 0xdf, 0x2d, 0xc0, 0x0a, 0x3f, 0x16, 0xce, 0x86, 0x12, 0x4c, 0x73,
0x79, 0xd1, 0x28, 0x4a, 0x49, 0xa7, 0x28, 0xf1, 0x79, 0x5a, 0x9e, 0xfa, 0x3c, 0x35, 0x7f, 0x54,
0x90, 0x7e, 0x40, 0x52, 0x1a, 0xb3, 0x2c, 0x8b, 0x86, 0xd7, 0x82, 0x96, 0x57, 0x13, 0x1a, 0x31,
0x64, 0x7b, 0x2b, 0x3a, 0x1f, 0x53, 0xb0, 0x33, 0x7b, 0x3c, 0x7e, 0x66, 0xc0, 0x6a, 0x74, 0x5d,
0xdc, 0x25, 0xbd, 0x3e, 0xf1, 0xd9, 0xd3, 0xeb, 0x50, 0x56, 0x03, 0x0a, 0x1a, 0x0d, 0xb8, 0x00,
0x35, 0x2a, 0xc7, 0x89, 0x6f, 0x82, 0x23, 0x80, 0xf9, 0xb7, 0x06, 0xac, 0x8d, 0xb1, 0x33, 0xcb,
0x22, 0xb6, 0xa1, 0xe2, 0xfa, 0x0e, 0x79, 0x12, 0x73, 0x13, 0x7d, 0xf2, 0x96, 0xbd, 0xa1, 0xeb,
0x39, 0x31, 0x1b, 0xd1, 0x27, 0xba, 0x0c, 0x0d, 0xe2, 0xe3, 0x3d, 0x8f, 0x74, 0x05, 0xae, 0x50,
0xe4, 0xaa, 0x55, 0x97, 0xb0, 0x6d, 0x0e, 0xe2, 0xc4, 0xfb, 0x2e, 0x11, 0xc4, 0x25, 0x49, 0xac,
0x3e, 0xcd, 0xdf, 0x30, 0x60, 0x89, 0x6b, 0xa1, 0xe2, 0x9e, 0x3e, 0x5b, 0x69, 0xae, 0x43, 0x3d,
0xa1, 0x66, 0x6a, 0x22, 0x49, 0x90, 0xf9, 0x08, 0x96, 0xd3, 0xec, 0xcc, 0x22, 0xcd, 0x17, 0x01,
0xe2, 0xb5, 0x92, 0xbb, 0xa1, 0x68, 0x25, 0x20, 0xe6, 0x67, 0x85, 0x28, 0x28, 0x2c, 0xc4, 0x74,
0xca, 0x31, 0x2b, 0xb1, 0x24, 0x49, 0x7b, 0x5e, 0x13, 0x10, 0xd1, 0xbc, 0x05, 0x0d, 0xf2, 0x84,
0x85, 0xb8, 0x3b, 0xc0, 0x21, 0xee, 0xcb, 0x6d, 0x35, 0x95, 0xe9, 0xad, 0x0b, 0xb2, 0x1d, 0x41,
0xc5, 0x07, 0x11, 0x2a, 0x22, 0x07, 0x29, 0xcb, 0x41, 0x04, 0x44, 0x1c, 0x18, 0xff, 0xc0, 0xbd,
0x38, 0xa5, 0xcd, 0x67, 0x5d, 0x20, 0xe9, 0xa9, 0x94, 0xb2, 0x53, 0xf9, 0x13, 0x03, 0x5a, 0x62,
0x0a, 0x72, 0x3e, 0x03, 0xde, 0x6d, 0x86, 0xc6, 0xc8, 0xd0, 0x4c, 0xd8, 0x7b, 0xff, 0x0f, 0xca,
0x4a, 0xee, 0xc5, 0x69, 0xe5, 0xae, 0x08, 0x8e, 0x99, 0x86, 0xf9, 0x87, 0x06, 0xac, 0x64, 0x44,
0x3e, 0x8b, 0xc2, 0x7f, 0x04, 0x48, 0xce, 0xd0, 0x19, 0x4d, 0x3b, 0x3a, 0xa7, 0x5f, 0xd1, 0x1e,
0x4a, 0x59, 0x21, 0x59, 0xe7, 0xdc, 0x0c, 0x84, 0x9a, 0xff, 0x6c, 0xc0, 0x85, 0x3b, 0x84, 0x09,
0xd4, 0x5b, 0xdc, 0xe8, 0xec, 0x84, 0x41, 0x2f, 0x24, 0x94, 0x3e, 0xbf, 0xfa, 0xf1, 0xdb, 0xd2,
0xb1, 0xd3, 0x4d, 0x69, 0x16, 0xf9, 0x5f, 0x86, 0x86, 0x18, 0x83, 0x38, 0xdd, 0x30, 0x38, 0xa4,
0x4a, 0x8f, 0xea, 0x0a, 0x66, 0x05, 0x87, 0x42, 0x21, 0x58, 0xc0, 0xb0, 0x27, 0x11, 0xd4, 0x89,
0x22, 0x20, 0xbc, 0x59, 0xec, 0xc1, 0x88, 0x31, 0xde, 0x39, 0x79, 0x7e, 0x65, 0xfc, 0xc7, 0x06,
0xac, 0x64, 0xa6, 0x32, 0x8b, 0x6c, 0xbf, 0x24, 0xdd, 0x4e, 0x39, 0x99, 0x85, 0xcd, 0x4b, 0x5a,
0x9a, 0xc4, 0x60, 0x12, 0x1b, 0x5d, 0x82, 0xfa, 0x3e, 0x76, 0xbd, 0x6e, 0x48, 0x30, 0x0d, 0x7c,
0x35, 0x51, 0xe0, 0x20, 0x4b, 0x40, 0xcc, 0xbf, 0x37, 0x64, 0xe6, 0xed, 0x39, 0xb7, 0x78, 0x7f,
0x54, 0x80, 0xe6, 0xb6, 0x4f, 0x49, 0xc8, 0xce, 0xfe, 0xd5, 0x04, 0xbd, 0x0f, 0x75, 0x31, 0x31,
0xda, 0x75, 0x30, 0xc3, 0xea, 0x34, 0x7b, 0x51, 0x1b, 0xa6, 0xff, 0x80, 0xe3, 0x6d, 0x61, 0x86,
0x2d, 0x29, 0x1d, 0xca, 0x7f, 0xa3, 0xf3, 0x50, 0x3b, 0xc0, 0xf4, 0xa0, 0xfb, 0x88, 0x1c, 0x49,
0x7f, 0xb1, 0x69, 0x55, 0x39, 0xe0, 0x43, 0x72, 0x44, 0xd1, 0x0b, 0x50, 0xf5, 0x87, 0x7d, 0xb9,
0xc1, 0x2a, 0xeb, 0xc6, 0x46, 0xd3, 0xaa, 0xf8, 0xc3, 0xbe, 0xd8, 0x5e, 0xff, 0x58, 0x80, 0x85,
0xfb, 0x43, 0x7e, 0x11, 0x12, 0x49, 0x86, 0xa1, 0xc7, 0x9e, 0x4e, 0x19, 0xaf, 0x40, 0x51, 0xba,
0x14, 0x9c, 0xa2, 0xad, 0x65, 0x7c, 0x7b, 0x8b, 0x5a, 0x1c, 0x49, 0x04, 0xd8, 0x87, 0xb6, 0xad,
0xbc, 0xb3, 0xa2, 0x60, 0xb6, 0xc6, 0x21, 0xd2, 0x37, 0x3b, 0x0f, 0x35, 0x12, 0x86, 0xb1, 0xef,
0x26, 0xa6, 0x42, 0xc2, 0x50, 0x36, 0x9a, 0xd0, 0xc0, 0xf6, 0x23, 0x3f, 0x38, 0xf4, 0x88, 0xd3,
0x23, 0x8e, 0x58, 0xf6, 0xaa, 0x95, 0x82, 0x49, 0xc5, 0xe0, 0x0b, 0xdf, 0xb5, 0x7d, 0x26, 0x4e,
0xf5, 0x22, 0x57, 0x0c, 0x0e, 0xb9, 0xed, 0x33, 0xde, 0xec, 0x10, 0x8f, 0x30, 0x22, 0x9a, 0x2b,
0xb2, 0x59, 0x42, 0x54, 0xf3, 0x70, 0x10, 0x53, 0x57, 0x65, 0xb3, 0x84, 0xf0, 0xe6, 0x0b, 0x50,
0x1b, 0x65, 0x11, 0x6a, 0xa3, 0x30, 0xa2, 0x00, 0x98, 0xff, 0x61, 0x40, 0x73, 0x4b, 0x74, 0xf5,
0x1c, 0x28, 0x1d, 0x82, 0x79, 0xf2, 0x64, 0x10, 0xaa, 0xad, 0x23, 0x7e, 0x4f, 0xd4, 0x23, 0xf3,
0x31, 0xb4, 0x76, 0x3c, 0x6c, 0x93, 0x83, 0xc0, 0x73, 0x48, 0x28, 0xce, 0x76, 0xd4, 0x82, 0x22,
0xc3, 0x3d, 0xe5, 0x3c, 0xf0, 0x9f, 0xe8, 0xcb, 0xea, 0xea, 0x27, 0xcd, 0xd2, 0xcb, 0xda, 0x53,
0x36, 0xd1, 0x4d, 0x22, 0xa2, 0xba, 0x0a, 0x65, 0x91, 0xd9, 0x93, 0x6e, 0x45, 0xc3, 0x52, 0x5f,
0xe6, 0xc3, 0xd4, 0xb8, 0x77, 0xc2, 0x60, 0x38, 0x40, 0xdb, 0xd0, 0x18, 0x8c, 0x60, 0x5c, 0x57,
0xf3, 0xcf, 0xf4, 0x2c, 0xd3, 0x56, 0x8a, 0xd4, 0xfc, 0xaf, 0x22, 0x34, 0x77, 0x09, 0x0e, 0xed,
0x83, 0xe7, 0x21, 0x06, 0xc3, 0x25, 0xee, 0x50, 0x4f, 0xad, 0x1a, 0xff, 0x89, 0xae, 0xc2, 0xb9,
0xc4, 0x84, 0xba, 0x3d, 0x2e, 0x20, 0xa1, 0xf7, 0x0d, 0xab, 0x35, 0xc8, 0x0a, 0xee, 0x1d, 0xa8,
0x3a, 0xd4, 0xeb, 0x8a, 0x25, 0xaa, 0x88, 0x25, 0xd2, 0xcf, 0x6f, 0x8b, 0x7a, 0x62, 0x69, 0x2a,
0x8e, 0xfc, 0x81, 0x5e, 0x82, 0x66, 0x30, 0x64, 0x83, 0x21, 0xeb, 0x4a, 0xbb, 0xd3, 0xae, 0x0a,
0xf6, 0x1a, 0x12, 0x28, 0xcc, 0x12, 0x45, 0x1f, 0x40, 0x93, 0x0a, 0x51, 0x46, 0x8e, 0x79, 0x6d,
0x5a, 0x07, 0xb1, 0x21, 0xe9, 0x94, 0x67, 0xfe, 0x3a, 0xb4, 0x58, 0x88, 0x1f, 0x13, 0x2f, 0x91,
0xb3, 0x03, 0xb1, 0xdb, 0x16, 0x25, 0x7c, 0x94, 0xaf, 0xbb, 0x0e, 0x4b, 0xbd, 0x21, 0x0e, 0xb1,
0xcf, 0x08, 0x49, 0x60, 0xd7, 0x05, 0x36, 0x8a, 0x9b, 0x62, 0x02, 0xf3, 0x43, 0x98, 0xbf, 0xeb,
0x32, 0x21, 0x48, 0x6e, 0xb3, 0x0c, 0x71, 0x0d, 0x12, 0x96, 0xe9, 0x05, 0xa8, 0x86, 0xc1, 0xa1,
0xb4, 0xc1, 0x05, 0xa1, 0x82, 0x95, 0x30, 0x38, 0x14, 0x06, 0x56, 0x54, 0x3a, 0x04, 0xa1, 0xd2,
0xcd, 0x82, 0xa5, 0xbe, 0xcc, 0x3f, 0x37, 0x46, 0xca, 0xc3, 0xcd, 0x27, 0x7d, 0x3a, 0xfb, 0xf9,
0x3e, 0x54, 0x42, 0x49, 0x3f, 0x31, 0x47, 0x9b, 0x1c, 0x49, 0x9c, 0x01, 0x11, 0xd5, 0xf4, 0x09,
0xa0, 0x5f, 0x36, 0xa0, 0xf1, 0x81, 0x37, 0xa4, 0xcf, 0x42, 0xd9, 0x75, 0x69, 0x89, 0xa2, 0x3e,
0x25, 0xf2, 0x9b, 0x05, 0x68, 0x2a, 0x36, 0x66, 0x71, 0x82, 0x72, 0x59, 0xd9, 0x85, 0x3a, 0x1f,
0xb2, 0x4b, 0x49, 0x2f, 0x8a, 0xe9, 0xd4, 0x37, 0x37, 0xb5, 0xe6, 0x21, 0xc5, 0x86, 0x48, 0x83,
0xef, 0x0a, 0xa2, 0x9f, 0xf7, 0x59, 0x78, 0x64, 0x81, 0x1d, 0x03, 0x3a, 0x0f, 0x61, 0x31, 0xd3,
0xcc, 0x95, 0xe8, 0x11, 0x39, 0x8a, 0xec, 0xdf, 0x23, 0x72, 0x84, 0xde, 0x4a, 0x16, 0x2b, 0xe4,
0x9d, 0xe2, 0xf7, 0x02, 0xbf, 0x77, 0x33, 0x0c, 0xf1, 0x91, 0x2a, 0x66, 0x78, 0xb7, 0xf0, 0x65,
0xc3, 0xfc, 0xbb, 0x02, 0x34, 0xbe, 0x36, 0x24, 0xe1, 0xd1, 0x69, 0xda, 0xa1, 0xe8, 0x54, 0x98,
0x4f, 0x9c, 0x0a, 0x63, 0x5b, 0xbf, 0xa4, 0xd9, 0xfa, 0x1a, 0x03, 0x56, 0xd6, 0x1a, 0x30, 0xdd,
0xde, 0xae, 0x9c, 0x68, 0x6f, 0x57, 0x73, 0xf7, 0xf6, 0x9f, 0x19, 0xb1, 0x08, 0x67, 0xda, 0x8d,
0x29, 0x77, 0xac, 0x70, 0x62, 0x77, 0x6c, 0xea, 0xdd, 0xf8, 0x43, 0x03, 0x6a, 0x5f, 0x27, 0x36,
0x0b, 0x42, 0x6e, 0x7f, 0x34, 0x64, 0xc6, 0x14, 0xae, 0x71, 0x21, 0xeb, 0x1a, 0xdf, 0x80, 0xaa,
0xeb, 0x74, 0x31, 0xd7, 0x2f, 0x31, 0xee, 0x24, 0x97, 0xac, 0xe2, 0x3a, 0x42, 0x11, 0xa7, 0x4f,
0x02, 0xfc, 0x8e, 0x01, 0x0d, 0xc9, 0x33, 0x95, 0x94, 0xef, 0x25, 0x86, 0x33, 0x74, 0x4a, 0xaf,
0x3e, 0xe2, 0x89, 0xde, 0x9d, 0x1b, 0x0d, 0x7b, 0x13, 0x80, 0x0b, 0x59, 0x91, 0xcb, 0x3d, 0xb3,
0xae, 0xe5, 0x56, 0x92, 0x0b, 0x81, 0xdf, 0x9d, 0xb3, 0x6a, 0x9c, 0x4a, 0x74, 0x71, 0xab, 0x02,
0x25, 0x41, 0x6d, 0xfe, 0xaf, 0x01, 0x4b, 0xb7, 0xb1, 0x67, 0x6f, 0xb9, 0x94, 0x61, 0xdf, 0x9e,
0xc1, 0x09, 0x7b, 0x17, 0x2a, 0xc1, 0xa0, 0xeb, 0x91, 0x7d, 0xa6, 0x58, 0xba, 0x3c, 0x61, 0x46,
0x52, 0x0c, 0x56, 0x39, 0x18, 0xdc, 0x23, 0xfb, 0x0c, 0x7d, 0x05, 0xaa, 0xc1, 0xa0, 0x1b, 0xba,
0xbd, 0x03, 0xa6, 0xa4, 0x3f, 0x05, 0x71, 0x25, 0x18, 0x58, 0x9c, 0x22, 0x11, 0x5b, 0x99, 0x3f,
0x61, 0x6c, 0xc5, 0xfc, 0x97, 0xb1, 0xe9, 0xcf, 0xb0, 0x07, 0xde, 0x85, 0xaa, 0xeb, 0xb3, 0xae,
0xe3, 0xd2, 0x48, 0x04, 0x17, 0xf5, 0x3a, 0xe4, 0x33, 0x31, 0x03, 0xb1, 0xa6, 0x3e, 0xe3, 0x63,
0xa3, 0xaf, 0x02, 0xec, 0x7b, 0x01, 0x56, 0xd4, 0x52, 0x06, 0x97, 0xf4, 0xdb, 0x87, 0xa3, 0x45,
0xf4, 0x35, 0x41, 0xc4, 0x7b, 0x18, 0x2d, 0xe9, 0x3f, 0x19, 0xb0, 0xb2, 0x43, 0x42, 0x59, 0xca,
0xc2, 0x54, 0x18, 0x74, 0xdb, 0xdf, 0x0f, 0xd2, 0x91, 0x68, 0x23, 0x13, 0x89, 0xfe, 0xe9, 0x44,
0x5f, 0x53, 0x37, 0x27, 0x99, 0x0f, 0x89, 0x6e, 0x4e, 0x51, 0xd6, 0x47, 0xde, 0x3c, 0x17, 0x72,
0x96, 0x49, 0xf1, 0x9b, 0xbc, 0x80, 0x9b, 0xbf, 0x25, 0x2b, 0x30, 0xb4, 0x93, 0x7a, 0x7a, 0x85,
0x5d, 0x05, 0x65, 0xe9, 0x33, 0x76, 0xff, 0x55, 0xc8, 0xd8, 0x8e, 0x1c, 0x43, 0xf4, 0x03, 0x03,
0xd6, 0xf3, 0xb9, 0x9a, 0xe5, 0x88, 0xfe, 0x2a, 0x94, 0x5c, 0x7f, 0x3f, 0x88, 0xc2, 0x6e, 0x57,
0xf4, 0x2e, 0xba, 0x76, 0x5c, 0x49, 0x68, 0xfe, 0x55, 0x01, 0x5a, 0xc2, 0xa8, 0x9f, 0xc2, 0xf2,
0xf7, 0x49, 0xbf, 0x4b, 0xdd, 0x4f, 0x49, 0xb4, 0xfc, 0x7d, 0xd2, 0xdf, 0x75, 0x3f, 0x25, 0x29,
0xcd, 0x28, 0xa5, 0x35, 0x63, 0x72, 0x54, 0x39, 0x19, 0x56, 0xad, 0xa4, 0xc3, 0xaa, 0xab, 0x50,
0xf6, 0x03, 0x87, 0x6c, 0x6f, 0xa9, 0x6b, 0xa7, 0xfa, 0x1a, 0xa9, 0x5a, 0xed, 0x84, 0xaa, 0xf6,
0xb9, 0x01, 0x9d, 0x3b, 0x84, 0x65, 0x65, 0x77, 0x7a, 0x5a, 0xf6, 0x3d, 0x03, 0xce, 0x6b, 0x19,
0x9a, 0x45, 0xc1, 0xde, 0x4b, 0x2b, 0x98, 0xfe, 0x0e, 0x38, 0x36, 0xa4, 0xd2, 0xad, 0x37, 0xa1,
0xb1, 0x35, 0xec, 0xf7, 0x63, 0x97, 0xeb, 0x32, 0x34, 0x42, 0xf9, 0x53, 0x5e, 0x91, 0xe4, 0xf9,
0x5b, 0x57, 0x30, 0x7e, 0x11, 0x32, 0xaf, 0x42, 0x53, 0x91, 0x28, 0xae, 0x3b, 0x50, 0x0d, 0xd5,
0x6f, 0x85, 0x1f, 0x7f, 0x9b, 0x2b, 0xb0, 0x64, 0x91, 0x1e, 0x57, 0xed, 0xf0, 0x9e, 0xeb, 0x3f,
0x52, 0xc3, 0x98, 0xdf, 0x31, 0x60, 0x39, 0x0d, 0x57, 0x7d, 0xbd, 0x0d, 0x15, 0xec, 0x38, 0x21,
0xa1, 0x74, 0xe2, 0xb2, 0xdc, 0x94, 0x38, 0x56, 0x84, 0x9c, 0x90, 0x5c, 0x61, 0x6a, 0xc9, 0x99,
0x5d, 0x38, 0x77, 0x87, 0xb0, 0xfb, 0x84, 0x85, 0x33, 0x65, 0xf0, 0xdb, 0xfc, 0xf2, 0x22, 0x88,
0x95, 0x5a, 0x44, 0x9f, 0xe6, 0x67, 0x06, 0xa0, 0xe4, 0x08, 0xb3, 0x2c, 0x73, 0x52, 0xca, 0x85,
0xb4, 0x94, 0x65, 0x91, 0x53, 0x7f, 0x10, 0xf8, 0xc4, 0x67, 0x49, 0x77, 0xab, 0x19, 0x43, 0x85,
0xfa, 0xfd, 0xd8, 0x00, 0x74, 0x2f, 0xc0, 0xce, 0x2d, 0xec, 0xcd, 0xe6, 0x1e, 0x5c, 0x04, 0xa0,
0xa1, 0xdd, 0x55, 0xbb, 0xb5, 0xa0, 0xac, 0x4f, 0x68, 0x3f, 0x90, 0x1b, 0xf6, 0x12, 0xd4, 0x1d,
0xca, 0x54, 0x73, 0x94, 0x50, 0x06, 0x87, 0x32, 0xd9, 0x2e, 0x8a, 0x58, 0x29, 0xc1, 0x1e, 0x71,
0xba, 0x89, 0x7c, 0xdc, 0xbc, 0x40, 0x6b, 0xc9, 0x86, 0xdd, 0x51, 0x56, 0xee, 0x21, 0xac, 0xdd,
0xc7, 0xfe, 0x10, 0x7b, 0xb7, 0x83, 0xfe, 0x00, 0xa7, 0x0a, 0x1b, 0xb3, 0x66, 0xce, 0xd0, 0x98,
0xb9, 0x17, 0x65, 0xe5, 0x9b, 0x74, 0xad, 0x05, 0xaf, 0xf3, 0x56, 0x02, 0x62, 0x52, 0x68, 0x8f,
0x77, 0x3f, 0xcb, 0x42, 0x09, 0xa6, 0xa2, 0xae, 0x92, 0xb6, 0x77, 0x04, 0x33, 0xdf, 0x87, 0x17,
0x44, 0x15, 0x62, 0x04, 0x4a, 0x85, 0xf6, 0xb3, 0x1d, 0x18, 0x9a, 0x0e, 0x7e, 0xb5, 0x20, 0x4c,
0xdb, 0x58, 0x0f, 0xb3, 0x30, 0xfe, 0x6e, 0x3a, 0xa2, 0xfe, 0x72, 0x4e, 0xa5, 0x6d, 0x7a, 0x44,
0x15, 0x56, 0xdf, 0x80, 0x45, 0xf2, 0x84, 0xd8, 0x43, 0xe6, 0xfa, 0xbd, 0x1d, 0x0f, 0xfb, 0x0f,
0x02, 0x75, 0xa0, 0x64, 0xc1, 0xe8, 0x65, 0x68, 0x72, 0xe9, 0x07, 0x43, 0xa6, 0xf0, 0xe4, 0xc9,
0x92, 0x06, 0xf2, 0xfe, 0xf8, 0x7c, 0x3d, 0xc2, 0x88, 0xa3, 0xf0, 0xe4, 0x31, 0x93, 0x05, 0x8f,
0x89, 0x92, 0x83, 0xe9, 0x49, 0x44, 0xf9, 0x6f, 0x46, 0x46, 0x94, 0xaa, 0x87, 0xd3, 0x12, 0xe5,
0x5d, 0x80, 0x3e, 0x09, 0x7b, 0x64, 0x5b, 0x18, 0x75, 0x79, 0x73, 0xdf, 0xd0, 0x1a, 0xf5, 0x51,
0x07, 0xf7, 0x23, 0x02, 0x2b, 0x41, 0x6b, 0xde, 0x81, 0x25, 0x0d, 0x0a, 0xb7, 0x57, 0x34, 0x18,
0x86, 0x36, 0x89, 0x82, 0x3f, 0xd1, 0x27, 0x3f, 0xdf, 0x18, 0x0e, 0x7b, 0x84, 0x29, 0xa5, 0x55,
0x5f, 0xe6, 0xdb, 0x22, 0x09, 0x25, 0x02, 0x05, 0x29, 0x4d, 0x4d, 0x27, 0xd4, 0x8d, 0xb1, 0x84,
0xfa, 0xbe, 0xc8, 0xf8, 0x24, 0xe9, 0x66, 0x2c, 0x86, 0xd8, 0xe7, 0x5d, 0x11, 0x47, 0xbd, 0xb2,
0x88, 0x3e, 0xcd, 0xff, 0x31, 0xa0, 0xb9, 0xdd, 0x1f, 0x04, 0xa3, 0x64, 0xc7, 0xd4, 0x57, 0xc9,
0xf1, 0x60, 0x71, 0x41, 0x17, 0x2c, 0x7e, 0x09, 0x9a, 0xe9, 0x1a, 0x7d, 0x19, 0xd7, 0x69, 0xd8,
0xc9, 0xda, 0xfc, 0xf3, 0x50, 0x0b, 0x83, 0xc3, 0x2e, 0x37, 0x91, 0x8e, 0x2a, 0xbb, 0xa8, 0x86,
0xc1, 0x21, 0x37, 0x9c, 0x0e, 0x5a, 0x86, 0xd2, 0xbe, 0xeb, 0xc5, 0x15, 0x43, 0xf2, 0x03, 0xbd,
0xc7, 0x2f, 0x5a, 0x32, 0x2d, 0x5b, 0x9e, 0xf6, 0xbe, 0x13, 0x51, 0x98, 0x9f, 0xc0, 0x42, 0x34,
0xeb, 0x19, 0x9f, 0x97, 0x30, 0x4c, 0x1f, 0x45, 0x15, 0x11, 0xf2, 0xc3, 0xbc, 0x2a, 0xb3, 0x75,
0xa2, 0xff, 0xd4, 0xa2, 0x23, 0x98, 0xe7, 0x18, 0x6a, 0x2f, 0x89, 0xdf, 0x7c, 0x01, 0x56, 0xb3,
0xd8, 0xb3, 0xb0, 0xf4, 0x76, 0x7a, 0xff, 0xe8, 0x5f, 0x10, 0x24, 0x47, 0x53, 0x7b, 0x47, 0xad,
0x80, 0x1d, 0x0c, 0x7d, 0xa6, 0x0c, 0x10, 0x5f, 0x81, 0xdb, 0xfc, 0x1b, 0xad, 0x41, 0xc5, 0x75,
0xba, 0x1e, 0xbf, 0x93, 0xc9, 0xb3, 0xa6, 0xec, 0x3a, 0xf7, 0xf8, 0x7d, 0xed, 0x9d, 0xc8, 0x83,
0x9a, 0xba, 0x8c, 0x42, 0x79, 0x4f, 0xdf, 0x97, 0xe7, 0xbb, 0x25, 0x4b, 0xf1, 0x9f, 0x71, 0xb1,
0xcc, 0x06, 0xb4, 0x0e, 0x5d, 0x76, 0xd0, 0x15, 0x6f, 0x31, 0xc4, 0xe1, 0x2a, 0xf3, 0xc5, 0x55,
0x6b, 0x81, 0xc3, 0x77, 0x39, 0x98, 0x1f, 0xb0, 0xd4, 0xfc, 0x35, 0x03, 0x96, 0x52, 0x6c, 0xcd,
0xb2, 0x14, 0x5f, 0xe1, 0x7e, 0x87, 0xec, 0x48, 0x79, 0x98, 0xeb, 0x5a, 0x63, 0xa4, 0x46, 0x13,
0x46, 0x28, 0xa6, 0x30, 0xff, 0xdd, 0x80, 0x7a, 0xa2, 0x85, 0x5f, 0x5b, 0x54, 0xdb, 0xe8, 0xda,
0x12, 0x03, 0xa6, 0x12, 0xc3, 0x4b, 0x30, 0xda, 0x9a, 0x89, 0x7a, 0xee, 0x44, 0xbd, 0x9a, 0x43,
0xd1, 0x5d, 0x58, 0x90, 0x62, 0x8a, 0x59, 0xd7, 0x46, 0x13, 0xe2, 0x4a, 0x3c, 0x1c, 0x3a, 0x8a,
0x4b, 0xab, 0x49, 0x13, 0x5f, 0x32, 0x79, 0x18, 0x38, 0x44, 0x8c, 0x54, 0x92, 0xd6, 0x52, 0xf8,
0x35, 0x0e, 0xe5, 0xd7, 0x8b, 0x46, 0x92, 0x94, 0xbb, 0x68, 0x1e, 0xc1, 0x0e, 0x09, 0xe3, 0xb9,
0xc5, 0xdf, 0xdc, 0x27, 0x92, 0xbf, 0xbb, 0xdc, 0x65, 0x55, 0x46, 0x06, 0x24, 0x88, 0x7b, 0xb3,
0xe8, 0x55, 0x58, 0x74, 0xfa, 0xa9, 0x87, 0x40, 0x91, 0x13, 0xe7, 0xf4, 0x13, 0x2f, 0x80, 0x52,
0x0c, 0xcd, 0xa7, 0x19, 0xfa, 0x6f, 0x23, 0x7e, 0x1e, 0x19, 0x12, 0x87, 0xf8, 0xcc, 0xc5, 0xde,
0xd3, 0xeb, 0x64, 0x07, 0xaa, 0x43, 0x4a, 0xc2, 0x84, 0x4d, 0x8c, 0xbf, 0x79, 0xdb, 0x00, 0x53,
0x7a, 0x18, 0x84, 0x8e, 0xe2, 0x32, 0xfe, 0x9e, 0x50, 0xfc, 0x27, 0x9f, 0xde, 0xe9, 0x8b, 0xff,
0xde, 0x86, 0xb5, 0x7e, 0xe0, 0xb8, 0xfb, 0xae, 0xae, 0x66, 0x90, 0x93, 0xad, 0x44, 0xcd, 0x29,
0x3a, 0xf3, 0x07, 0x05, 0x58, 0xfb, 0x78, 0xe0, 0xfc, 0x0c, 0xe6, 0xbc, 0x0e, 0xf5, 0xc0, 0x73,
0x76, 0xd2, 0xd3, 0x4e, 0x82, 0x38, 0x86, 0x4f, 0x0e, 0x63, 0x0c, 0x19, 0x42, 0x4e, 0x82, 0x26,
0x16, 0x46, 0x3e, 0x95, 0x6c, 0xca, 0x93, 0x64, 0xd3, 0x83, 0x35, 0x99, 0x8d, 0x7d, 0xc6, 0xa2,
0x31, 0x7f, 0x09, 0x56, 0xb8, 0x21, 0xe5, 0xc3, 0x7c, 0x4c, 0x49, 0x38, 0xa3, 0xc5, 0xb9, 0x00,
0xb5, 0xa8, 0xe7, 0xa8, 0x66, 0x75, 0x04, 0x30, 0xef, 0xc2, 0x72, 0x66, 0xac, 0xa7, 0x9c, 0xd1,
0x95, 0xcb, 0x50, 0x8d, 0x6a, 0x70, 0x51, 0x05, 0x8a, 0x37, 0x3d, 0xaf, 0x35, 0x87, 0x1a, 0x50,
0xdd, 0x56, 0x85, 0xa6, 0x2d, 0xe3, 0xca, 0xcf, 0xc1, 0x62, 0x26, 0x57, 0x8b, 0xaa, 0x30, 0xff,
0x20, 0xf0, 0x49, 0x6b, 0x0e, 0xb5, 0xa0, 0x71, 0xcb, 0xf5, 0x71, 0x78, 0x24, 0x23, 0x99, 0x2d,
0x07, 0x2d, 0x42, 0x5d, 0x44, 0xf4, 0x14, 0x80, 0x6c, 0xfe, 0xe4, 0x65, 0x68, 0xde, 0x17, 0x8c,
0xec, 0x92, 0xf0, 0xb1, 0x6b, 0x13, 0xd4, 0x85, 0x56, 0xf6, 0x05, 0x33, 0xfa, 0x82, 0xde, 0xbb,
0xd3, 0x3f, 0x74, 0xee, 0x4c, 0x92, 0xa1, 0x39, 0x87, 0x3e, 0x81, 0x85, 0xf4, 0x3b, 0x60, 0xa4,
0x0f, 0x39, 0x69, 0x1f, 0x0b, 0x1f, 0xd7, 0x79, 0x17, 0x9a, 0xa9, 0x67, 0xbd, 0xe8, 0x75, 0x6d,
0xdf, 0xba, 0xa7, 0xbf, 0x1d, 0xbd, 0xed, 0x4d, 0x3e, 0xbd, 0x95, 0xdc, 0xa7, 0xdf, 0xde, 0xe5,
0x70, 0xaf, 0x7d, 0xa0, 0x77, 0x1c, 0xf7, 0x18, 0xce, 0x8d, 0xbd, 0x91, 0x43, 0x6f, 0xe4, 0x9c,
0x66, 0xfa, 0xb7, 0x74, 0xc7, 0x0d, 0x71, 0x08, 0x68, 0xfc, 0xf9, 0x2a, 0xba, 0xa6, 0x5f, 0x81,
0xbc, 0xc7, 0xbb, 0x9d, 0xeb, 0x53, 0xe3, 0xc7, 0x82, 0xfb, 0x15, 0x03, 0xd6, 0x72, 0x1e, 0xb6,
0xa1, 0x1b, 0xda, 0xee, 0x26, 0xbf, 0xce, 0xeb, 0xbc, 0x75, 0x32, 0xa2, 0x98, 0x11, 0x1f, 0x16,
0x33, 0x6f, 0xbd, 0xd0, 0xd5, 0xdc, 0xfa, 0xf7, 0xf1, 0x47, 0x6f, 0x9d, 0x2f, 0x4c, 0x87, 0x1c,
0x8f, 0xf7, 0x10, 0x16, 0x33, 0x0f, 0xa4, 0x72, 0xc6, 0xd3, 0x3f, 0xa3, 0x3a, 0x6e, 0x41, 0xbf,
0x09, 0xcd, 0xd4, 0x4b, 0xa6, 0x1c, 0x8d, 0xd7, 0xbd, 0x76, 0x3a, 0xae, 0xeb, 0x87, 0xd0, 0x48,
0x3e, 0x38, 0x42, 0x1b, 0x79, 0x7b, 0x69, 0xac, 0xe3, 0x93, 0x6c, 0xa5, 0xd1, 0x7b, 0x82, 0x09,
0x5b, 0x69, 0xec, 0x09, 0xc6, 0xf4, 0x5b, 0x29, 0xd1, 0xff, 0xc4, 0xad, 0x74, 0xe2, 0x21, 0xbe,
0x23, 0xef, 0x14, 0x9a, 0xf7, 0x2a, 0x68, 0x33, 0x4f, 0x37, 0xf3, 0x5f, 0xe6, 0x74, 0x6e, 0x9c,
0x88, 0x26, 0x96, 0xe2, 0x23, 0x58, 0x48, 0xbf, 0xca, 0xc8, 0x91, 0xa2, 0xf6, 0x21, 0x4b, 0xe7,
0xea, 0x54, 0xb8, 0xf1, 0x60, 0x1f, 0x43, 0x3d, 0xf1, 0xa7, 0x24, 0xe8, 0xb5, 0x09, 0x7a, 0x9c,
0xfc, 0x87, 0x8e, 0xe3, 0x24, 0xf9, 0x35, 0xa8, 0xc5, 0xff, 0x25, 0x82, 0x5e, 0xc9, 0xd5, 0xdf,
0x93, 0x74, 0xb9, 0x0b, 0x30, 0xfa, 0xa3, 0x10, 0xf4, 0xaa, 0xb6, 0xcf, 0xb1, 0x7f, 0x12, 0x39,
0xae, 0xd3, 0x78, 0xfa, 0xb2, 0xd8, 0x6d, 0xd2, 0xf4, 0x93, 0xd5, 0x99, 0xc7, 0x75, 0x7b, 0x00,
0xcd, 0x54, 0x4d, 0x75, 0xde, 0x16, 0xd6, 0x94, 0xba, 0x77, 0xae, 0x4c, 0x83, 0x1a, 0xaf, 0xdf,
0x01, 0x34, 0x53, 0x15, 0xae, 0x39, 0x23, 0xe9, 0x0a, 0x7a, 0x73, 0x46, 0xd2, 0x16, 0xcc, 0x9a,
0x73, 0xe8, 0xdb, 0x89, 0x62, 0xda, 0x54, 0xc1, 0x32, 0x7a, 0x73, 0x62, 0x3f, 0xba, 0x7a, 0xed,
0xce, 0xe6, 0x49, 0x48, 0x62, 0x16, 0x94, 0x56, 0x49, 0x91, 0xe6, 0x6b, 0xd5, 0x49, 0x56, 0x6a,
0x17, 0xca, 0xb2, 0x66, 0x15, 0x99, 0x39, 0xd5, 0xe9, 0x89, 0x82, 0xd6, 0xce, 0x4b, 0x5a, 0x9c,
0x74, 0x39, 0xa7, 0xec, 0x54, 0x7a, 0xc1, 0x39, 0x9d, 0xa6, 0x0a, 0x16, 0xa7, 0xed, 0xd4, 0x82,
0xb2, 0x2c, 0x46, 0xca, 0xe9, 0x34, 0x55, 0x50, 0xd7, 0x99, 0x8c, 0x23, 0xb2, 0xd4, 0xe6, 0x1c,
0xda, 0x81, 0x92, 0x08, 0x95, 0xa1, 0xcb, 0x93, 0xea, 0x74, 0x26, 0xf5, 0x98, 0x2a, 0xe5, 0x31,
0xe7, 0xd0, 0x2f, 0x40, 0x49, 0x24, 0x7e, 0x72, 0x7a, 0x4c, 0x16, 0xdb, 0x74, 0x26, 0xa2, 0x44,
0x2c, 0x3a, 0xd0, 0x48, 0x66, 0xd8, 0x73, 0x8e, 0x2c, 0x4d, 0x0d, 0x42, 0x67, 0x1a, 0xcc, 0x68,
0x14, 0xb9, 0x8d, 0x46, 0x61, 0xc3, 0xfc, 0x6d, 0x34, 0x16, 0x92, 0xcc, 0xdf, 0x46, 0xe3, 0x51,
0x48, 0x73, 0x0e, 0xfd, 0xba, 0x01, 0xed, 0xbc, 0xb4, 0x2f, 0xca, 0xf5, 0x80, 0x26, 0xe5, 0xae,
0x3b, 0x5f, 0x3a, 0x21, 0x55, 0xcc, 0xcb, 0xa7, 0x22, 0x68, 0x33, 0x96, 0xe8, 0xbd, 0x9e, 0xd7,
0x5f, 0x4e, 0x5a, 0xb3, 0xf3, 0xc5, 0xe9, 0x09, 0xe2, 0xb1, 0xf7, 0xa0, 0x9e, 0x08, 0x18, 0xe5,
0x58, 0xde, 0xf1, 0x48, 0x57, 0xce, 0xaa, 0x6a, 0x62, 0x4f, 0x52, 0xbd, 0x45, 0xde, 0x30, 0x47,
0x19, 0x93, 0x69, 0xc8, 0x1c, 0xf5, 0x4e, 0xa5, 0x1d, 0xcd, 0x39, 0x44, 0xa0, 0x91, 0x4c, 0x22,
0xe6, 0x68, 0xa3, 0x26, 0xff, 0xd8, 0x79, 0x7d, 0x0a, 0xcc, 0x78, 0x98, 0x2e, 0xc0, 0x28, 0x89,
0x97, 0x73, 0xd6, 0x8d, 0xe5, 0x11, 0x3b, 0xaf, 0x1d, 0x8b, 0x97, 0x3c, 0xf6, 0x13, 0x69, 0xb9,
0x1c, 0xe9, 0x8f, 0x27, 0xee, 0xa6, 0xb8, 0x8b, 0x8c, 0xa7, 0x88, 0x72, 0xee, 0x22, 0xb9, 0xd9,
0xa8, 0xce, 0xf5, 0xa9, 0xf1, 0xe3, 0xf9, 0x7c, 0x0b, 0x5a, 0xd9, 0x94, 0x5a, 0xce, 0x1d, 0x37,
0x27, 0xb1, 0xd7, 0x79, 0x63, 0x4a, 0xec, 0xe4, 0x79, 0x78, 0x7e, 0x9c, 0xa7, 0x6f, 0xb8, 0xec,
0x40, 0x64, 0x73, 0xa6, 0x99, 0x75, 0x32, 0x71, 0x34, 0xcd, 0xac, 0x53, 0x69, 0x22, 0x75, 0x78,
0x89, 0x88, 0x74, 0xde, 0xe1, 0x95, 0x4c, 0x50, 0xe4, 0x9c, 0x33, 0xe9, 0x70, 0xbe, 0x74, 0x3f,
0xd3, 0x71, 0x75, 0x94, 0xef, 0x27, 0x8c, 0x85, 0xea, 0x73, 0xdc, 0x4f, 0x7d, 0xa0, 0x5e, 0x28,
0x7a, 0x2b, 0x1b, 0x3e, 0x9c, 0x1c, 0x9b, 0xc8, 0x86, 0x95, 0x8e, 0x0f, 0x1f, 0xb4, 0xb2, 0xb1,
0xba, 0x9c, 0x01, 0x72, 0x42, 0x7a, 0x53, 0x0c, 0x90, 0x8d, 0x78, 0xe5, 0x0c, 0x90, 0x13, 0x18,
0x9b, 0xc2, 0x97, 0x4c, 0x45, 0x9f, 0x72, 0x8e, 0x26, 0x5d, 0x84, 0x2a, 0xe7, 0x68, 0xd2, 0x06,
0xce, 0xcc, 0xb9, 0xcd, 0x21, 0x34, 0x76, 0xc2, 0xe0, 0xc9, 0x51, 0x14, 0x38, 0xfa, 0xd9, 0x18,
0xbb, 0x5b, 0xdf, 0x80, 0x05, 0x37, 0xc6, 0xe9, 0x85, 0x03, 0xfb, 0x56, 0x5d, 0x06, 0xb0, 0x76,
0x38, 0xf1, 0x8e, 0xf1, 0x8b, 0x37, 0x7a, 0x2e, 0x3b, 0x18, 0xee, 0x71, 0xc9, 0x5c, 0x97, 0x68,
0x6f, 0xb8, 0x81, 0xfa, 0x75, 0xdd, 0xf5, 0x19, 0x09, 0x7d, 0xec, 0x5d, 0x17, 0x43, 0x29, 0xe8,
0x60, 0xef, 0x0f, 0x0c, 0x63, 0xaf, 0x2c, 0x40, 0x37, 0xfe, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xc5,
0x6f, 0xa3, 0xd8, 0xb9, 0x51, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -6073,7 +6162,7 @@ type MilvusServiceClient interface {
GetImportState(ctx context.Context, in *GetImportStateRequest, opts ...grpc.CallOption) (*GetImportStateResponse, error)
// https://wiki.lfaidata.foundation/display/MIL/MEP+27+--+Support+Basic+Authentication
CreateCredential(ctx context.Context, in *CreateCredentialRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
UpdateCredential(ctx context.Context, in *CreateCredentialRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
UpdateCredential(ctx context.Context, in *UpdateCredentialRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
DeleteCredential(ctx context.Context, in *DeleteCredentialRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
ListCredUsers(ctx context.Context, in *ListCredUsersRequest, opts ...grpc.CallOption) (*ListCredUsersResponse, error)
}
@ -6473,7 +6562,7 @@ func (c *milvusServiceClient) CreateCredential(ctx context.Context, in *CreateCr
return out, nil
}
func (c *milvusServiceClient) UpdateCredential(ctx context.Context, in *CreateCredentialRequest, opts ...grpc.CallOption) (*commonpb.Status, error) {
func (c *milvusServiceClient) UpdateCredential(ctx context.Context, in *UpdateCredentialRequest, opts ...grpc.CallOption) (*commonpb.Status, error) {
out := new(commonpb.Status)
err := c.cc.Invoke(ctx, "/milvus.proto.milvus.MilvusService/UpdateCredential", in, out, opts...)
if err != nil {
@ -6549,7 +6638,7 @@ type MilvusServiceServer interface {
GetImportState(context.Context, *GetImportStateRequest) (*GetImportStateResponse, error)
// https://wiki.lfaidata.foundation/display/MIL/MEP+27+--+Support+Basic+Authentication
CreateCredential(context.Context, *CreateCredentialRequest) (*commonpb.Status, error)
UpdateCredential(context.Context, *CreateCredentialRequest) (*commonpb.Status, error)
UpdateCredential(context.Context, *UpdateCredentialRequest) (*commonpb.Status, error)
DeleteCredential(context.Context, *DeleteCredentialRequest) (*commonpb.Status, error)
ListCredUsers(context.Context, *ListCredUsersRequest) (*ListCredUsersResponse, error)
}
@ -6687,7 +6776,7 @@ func (*UnimplementedMilvusServiceServer) GetImportState(ctx context.Context, req
func (*UnimplementedMilvusServiceServer) CreateCredential(ctx context.Context, req *CreateCredentialRequest) (*commonpb.Status, error) {
return nil, status.Errorf(codes.Unimplemented, "method CreateCredential not implemented")
}
func (*UnimplementedMilvusServiceServer) UpdateCredential(ctx context.Context, req *CreateCredentialRequest) (*commonpb.Status, error) {
func (*UnimplementedMilvusServiceServer) UpdateCredential(ctx context.Context, req *UpdateCredentialRequest) (*commonpb.Status, error) {
return nil, status.Errorf(codes.Unimplemented, "method UpdateCredential not implemented")
}
func (*UnimplementedMilvusServiceServer) DeleteCredential(ctx context.Context, req *DeleteCredentialRequest) (*commonpb.Status, error) {
@ -7476,7 +7565,7 @@ func _MilvusService_CreateCredential_Handler(srv interface{}, ctx context.Contex
}
func _MilvusService_UpdateCredential_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CreateCredentialRequest)
in := new(UpdateCredentialRequest)
if err := dec(in); err != nil {
return nil, err
}
@ -7488,7 +7577,7 @@ func _MilvusService_UpdateCredential_Handler(srv interface{}, ctx context.Contex
FullMethod: "/milvus.proto.milvus.MilvusService/UpdateCredential",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MilvusServiceServer).UpdateCredential(ctx, req.(*CreateCredentialRequest))
return srv.(MilvusServiceServer).UpdateCredential(ctx, req.(*UpdateCredentialRequest))
}
return interceptor(ctx, in, info, handler)
}

View File

@ -68,8 +68,7 @@ func AuthenticationInterceptor(ctx context.Context) (context.Context, error) {
// check:
// 1. if rpc call from a member (like index/query/data component)
// 2. if rpc call from sdk
usernames, _ := globalMetaCache.GetCredUsernames(ctx)
if len(usernames) > 0 {
if Params.CommonCfg.AuthorizationEnabled {
if !validSourceID(ctx, md[strings.ToLower(util.HeaderSourceID)]) &&
!validAuth(ctx, md[strings.ToLower(util.HeaderAuthorize)]) {
return nil, ErrUnauthenticated()

View File

@ -44,6 +44,7 @@ func TestValidSourceID(t *testing.T) {
func TestAuthenticationInterceptor(t *testing.T) {
ctx := context.Background()
Params.CommonCfg.AuthorizationEnabled = true // mock authorization is turned on
// no metadata
_, err := AuthenticationInterceptor(ctx)
assert.NotNil(t, err)

View File

@ -4098,10 +4098,17 @@ func (node *Proxy) CreateCredential(ctx context.Context, req *milvuspb.CreateCre
return result, err
}
func (node *Proxy) UpdateCredential(ctx context.Context, req *milvuspb.CreateCredentialRequest) (*commonpb.Status, error) {
func (node *Proxy) UpdateCredential(ctx context.Context, req *milvuspb.UpdateCredentialRequest) (*commonpb.Status, error) {
log.Debug("UpdateCredential", zap.String("role", typeutil.RootCoordRole), zap.String("username", req.Username))
// validate params
rawPassword, err := crypto.Base64Decode(req.Password)
rawOldPassword, err := crypto.Base64Decode(req.OldPassword)
if err != nil {
log.Error("decode old password fail", zap.String("username", req.Username), zap.Error(err))
return &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UpdateCredentialFailure,
Reason: "decode old password fail when updating:" + req.Username,
}, nil
}
rawNewPassword, err := crypto.Base64Decode(req.NewPassword)
if err != nil {
log.Error("decode password fail", zap.String("username", req.Username), zap.Error(err))
return &commonpb.Status{
@ -4109,14 +4116,31 @@ func (node *Proxy) UpdateCredential(ctx context.Context, req *milvuspb.CreateCre
Reason: "decode password fail when updating:" + req.Username,
}, nil
}
if err = ValidatePassword(rawPassword); err != nil {
// valid new password
if err = ValidatePassword(rawNewPassword); err != nil {
log.Error("illegal password", zap.String("username", req.Username), zap.Error(err))
return &commonpb.Status{
ErrorCode: commonpb.ErrorCode_IllegalArgument,
Reason: err.Error(),
}, nil
}
encryptedPassword, err := crypto.PasswordEncrypt(rawPassword)
// check old password is correct
oldCredInfo, err := globalMetaCache.GetCredentialInfo(ctx, req.Username)
if err != nil {
log.Error("found no credential", zap.String("username", req.Username), zap.Error(err))
return &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UpdateCredentialFailure,
Reason: "found no credential:" + req.Username,
}, nil
}
if !crypto.PasswordVerify(rawOldPassword, oldCredInfo.EncryptedPassword) {
return &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UpdateCredentialFailure,
Reason: "old password is not correct:" + req.Username,
}, nil
}
// update meta data
encryptedPassword, err := crypto.PasswordEncrypt(rawNewPassword)
if err != nil {
log.Error("encrypt password fail", zap.String("username", req.Username), zap.Error(err))
return &commonpb.Status{
@ -4124,11 +4148,11 @@ func (node *Proxy) UpdateCredential(ctx context.Context, req *milvuspb.CreateCre
Reason: "encrypt password fail when updating:" + req.Username,
}, nil
}
credInfo := &internalpb.CredentialInfo{
updateCredReq := &internalpb.CredentialInfo{
Username: req.Username,
EncryptedPassword: encryptedPassword,
}
result, err := node.rootCoord.UpdateCredential(ctx, credInfo)
result, err := node.rootCoord.UpdateCredential(ctx, updateCredReq)
if err != nil { // for error like conntext timeout etc.
log.Error("update credential fail", zap.String("username", req.Username), zap.Error(err))
return &commonpb.Status{

View File

@ -30,14 +30,11 @@ import (
"testing"
"time"
"github.com/milvus-io/milvus/internal/proto/rootcoordpb"
"github.com/milvus-io/milvus/internal/util/crypto"
ot "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing"
"google.golang.org/grpc"
"google.golang.org/grpc/keepalive"
"github.com/milvus-io/milvus/internal/util/crypto"
"github.com/milvus-io/milvus/internal/util/dependency"
"github.com/milvus-io/milvus/internal/util/trace"
@ -58,6 +55,7 @@ import (
"github.com/milvus-io/milvus/internal/util/distance"
"github.com/milvus-io/milvus/internal/proto/proxypb"
"github.com/milvus-io/milvus/internal/proto/rootcoordpb"
"github.com/golang/protobuf/proto"
@ -1972,22 +1970,23 @@ func TestProxy(t *testing.T) {
assert.Equal(t, 0, len(resp.CollectionNames))
})
username := "test_username_" + funcutil.RandomString(15)
password := "xxx"
wg.Add(1)
t.Run("credential apis", func(t *testing.T) {
t.Run("credential CREATE api", func(t *testing.T) {
defer wg.Done()
// 1. create credential
password := "xxx"
newPassword := "yyy"
constructCreateCredentialRequest := func(rand string) *milvuspb.CreateCredentialRequest {
constructCreateCredentialRequest := func() *milvuspb.CreateCredentialRequest {
return &milvuspb.CreateCredentialRequest{
Base: nil,
Username: "test_username_" + rand,
Username: username,
Password: crypto.Base64Encode(password),
}
}
// success
createCredentialReq := constructCreateCredentialRequest(funcutil.RandomString(15))
createCredentialReq := constructCreateCredentialRequest()
resp, err := proxy.CreateCredential(ctx, createCredentialReq)
assert.NoError(t, err)
assert.Equal(t, commonpb.ErrorCode_Success, resp.ErrorCode)
@ -1998,49 +1997,90 @@ func TestProxy(t *testing.T) {
assert.NotEqual(t, commonpb.ErrorCode_Success, resp.ErrorCode)
// invalid username
reqInvalidField := constructCreateCredentialRequest(funcutil.RandomString(15))
reqInvalidField.Username = "11_invalid_username"
resp, err = proxy.CreateCredential(ctx, reqInvalidField)
createCredentialReq.Username = "11_invalid_username"
resp, err = proxy.CreateCredential(ctx, createCredentialReq)
assert.NoError(t, err)
assert.NotEqual(t, commonpb.ErrorCode_Success, resp.ErrorCode)
// invalid password (not decode)
reqInvalidField = constructCreateCredentialRequest(funcutil.RandomString(15))
reqInvalidField.Password = "not_decoded_password"
resp, err = proxy.CreateCredential(ctx, reqInvalidField)
createCredentialReq.Password = "not_decoded_password"
resp, err = proxy.CreateCredential(ctx, createCredentialReq)
assert.NoError(t, err)
assert.NotEqual(t, commonpb.ErrorCode_Success, resp.ErrorCode)
// invalid password (length gt 256)
reqInvalidField = constructCreateCredentialRequest(funcutil.RandomString(15))
reqInvalidField.Password = "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjkkkkkkkkkkllllllllllmmmmmmmmmnnnnnnnnnnnooooooooooppppppppppqqqqqqqqqqrrrrrrrrrrsssssssssstttttttttttuuuuuuuuuuuvvvvvvvvvvwwwwwwwwwwwxxxxxxxxxxyyyyyyyyyzzzzzzzzzzz"
resp, err = proxy.CreateCredential(ctx, reqInvalidField)
assert.NoError(t, err)
assert.NotEqual(t, commonpb.ErrorCode_Success, resp.ErrorCode)
// 2. update credential
createCredentialReq.Password = crypto.Base64Encode(newPassword)
updateResp, err := proxy.UpdateCredential(ctx, createCredentialReq)
assert.NoError(t, err)
assert.Equal(t, commonpb.ErrorCode_Success, updateResp.ErrorCode)
// invalid password (not decode)
createCredentialReq.Password = newPassword
updateResp, err = proxy.UpdateCredential(ctx, createCredentialReq)
assert.NoError(t, err)
assert.NotEqual(t, commonpb.ErrorCode_Success, updateResp.ErrorCode)
// invalid password (length gt 256)
createCredentialReq.Password = "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjkkkkkkkkkkllllllllllmmmmmmmmmnnnnnnnnnnnooooooooooppppppppppqqqqqqqqqqrrrrrrrrrrsssssssssstttttttttttuuuuuuuuuuuvvvvvvvvvvwwwwwwwwwwwxxxxxxxxxxyyyyyyyyyzzzzzzzzzzz"
updateResp, err = proxy.UpdateCredential(ctx, createCredentialReq)
resp, err = proxy.CreateCredential(ctx, createCredentialReq)
assert.NoError(t, err)
assert.NotEqual(t, commonpb.ErrorCode_Success, resp.ErrorCode)
})
wg.Add(1)
t.Run("credential UPDATE api", func(t *testing.T) {
defer wg.Done()
// 2. update credential
newPassword := "yyy"
constructUpdateCredentialRequest := func() *milvuspb.UpdateCredentialRequest {
return &milvuspb.UpdateCredentialRequest{
Base: nil,
Username: username,
OldPassword: crypto.Base64Encode(password),
NewPassword: crypto.Base64Encode(newPassword),
}
}
// cannot update non-existing user's password
updateCredentialReq := constructUpdateCredentialRequest()
updateCredentialReq.Username = "test_username_" + funcutil.RandomString(15)
updateResp, err := proxy.UpdateCredential(ctx, updateCredentialReq)
assert.NoError(t, err)
assert.NotEqual(t, commonpb.ErrorCode_Success, updateResp.ErrorCode)
// success
updateCredentialReq.Username = username
updateCredentialReq.NewPassword = crypto.Base64Encode(newPassword)
updateResp, err = proxy.UpdateCredential(ctx, updateCredentialReq)
assert.NoError(t, err)
assert.Equal(t, commonpb.ErrorCode_Success, updateResp.ErrorCode)
// invalid old password (not decode)
updateCredentialReq.OldPassword = password
updateCredentialReq.NewPassword = crypto.Base64Encode(newPassword)
updateResp, err = proxy.UpdateCredential(ctx, updateCredentialReq)
assert.NoError(t, err)
assert.NotEqual(t, commonpb.ErrorCode_Success, updateResp.ErrorCode)
// invalid new password (not decode)
updateCredentialReq.OldPassword = crypto.Base64Encode(password)
updateCredentialReq.NewPassword = newPassword
updateResp, err = proxy.UpdateCredential(ctx, updateCredentialReq)
assert.NoError(t, err)
assert.NotEqual(t, commonpb.ErrorCode_Success, updateResp.ErrorCode)
// invalid password (length gt 256)
updateCredentialReq.NewPassword = "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjkkkkkkkkkkllllllllllmmmmmmmmmnnnnnnnnnnnooooooooooppppppppppqqqqqqqqqqrrrrrrrrrrsssssssssstttttttttttuuuuuuuuuuuvvvvvvvvvvwwwwwwwwwwwxxxxxxxxxxyyyyyyyyyzzzzzzzzzzz"
updateResp, err = proxy.UpdateCredential(ctx, updateCredentialReq)
assert.NoError(t, err)
assert.NotEqual(t, commonpb.ErrorCode_Success, updateResp.ErrorCode)
// wrong password
updateCredentialReq.OldPassword = crypto.Base64Encode("wrong_password")
updateCredentialReq.NewPassword = crypto.Base64Encode(newPassword)
updateResp, err = proxy.UpdateCredential(ctx, updateCredentialReq)
assert.NoError(t, err)
assert.NotEqual(t, commonpb.ErrorCode_Success, updateResp.ErrorCode)
})
wg.Add(1)
t.Run("credential GET api", func(t *testing.T) {
defer wg.Done()
// 3. get credential
newPassword := "yyy"
constructGetCredentialRequest := func() *rootcoordpb.GetCredentialRequest {
return &rootcoordpb.GetCredentialRequest{
Base: nil,
Username: createCredentialReq.Username,
Username: username,
}
}
getCredentialReq := constructGetCredentialRequest()
@ -2052,6 +2092,11 @@ func TestProxy(t *testing.T) {
getCredentialReq.Username = "("
getResp, err = rootCoordClient.GetCredential(ctx, getCredentialReq)
assert.Error(t, err)
})
wg.Add(1)
t.Run("credential LIST api", func(t *testing.T) {
defer wg.Done()
// 4. list credential usernames
constructListCredUsersRequest := func() *milvuspb.ListCredUsersRequest {
@ -2063,12 +2108,17 @@ func TestProxy(t *testing.T) {
listUsersResp, err := proxy.ListCredUsers(ctx, listCredUsersReq)
assert.NoError(t, err)
assert.True(t, len(listUsersResp.Usernames) > 0)
})
wg.Add(1)
t.Run("credential DELETE api", func(t *testing.T) {
defer wg.Done()
// 5. delete credential
constructDelCredRequest := func() *milvuspb.DeleteCredentialRequest {
return &milvuspb.DeleteCredentialRequest{
Base: nil,
Username: createCredentialReq.Username,
Username: username,
}
}
delCredReq := constructDelCredRequest()
@ -2847,7 +2897,7 @@ func TestProxy(t *testing.T) {
wg.Add(1)
t.Run("UpdateCredential fail, timeout", func(t *testing.T) {
defer wg.Done()
resp, err := proxy.UpdateCredential(shortCtx, &milvuspb.CreateCredentialRequest{Username: "xxx"})
resp, err := proxy.UpdateCredential(shortCtx, &milvuspb.UpdateCredentialRequest{Username: "xxx"})
assert.NoError(t, err)
assert.NotEqual(t, commonpb.ErrorCode_Success, resp.ErrorCode)
})

View File

@ -1360,7 +1360,12 @@ func (mt *MetaTable) AddCredential(credInfo *internalpb.CredentialInfo) error {
return fmt.Errorf("username is empty")
}
k := fmt.Sprintf("%s/%s", CredentialPrefix, credInfo.Username)
err := mt.txn.Save(k, credInfo.EncryptedPassword)
v, err := proto.Marshal(&internalpb.CredentialInfo{EncryptedPassword: credInfo.EncryptedPassword})
if err != nil {
log.Error("MetaTable marshal credential info fail", zap.String("key", k), zap.Error(err))
return fmt.Errorf("metaTable marshal credential info fail key:%s, err:%w", k, err)
}
err = mt.txn.Save(k, string(v))
if err != nil {
log.Error("MetaTable save fail", zap.Error(err))
return fmt.Errorf("save credential fail key:%s, err:%w", credInfo.Username, err)
@ -1379,7 +1384,13 @@ func (mt *MetaTable) getCredential(username string) (*internalpb.CredentialInfo,
log.Warn("MetaTable load fail", zap.String("key", k), zap.Error(err))
return nil, err
}
return &internalpb.CredentialInfo{Username: username, EncryptedPassword: v}, nil
credentialInfo := internalpb.CredentialInfo{}
err = proto.Unmarshal([]byte(v), &credentialInfo)
if err != nil {
return nil, fmt.Errorf("get credential unmarshal err:%w", err)
}
return &internalpb.CredentialInfo{Username: username, EncryptedPassword: credentialInfo.EncryptedPassword}, nil
}
// DeleteCredential delete credential

View File

@ -25,6 +25,8 @@ import (
"testing"
"time"
"github.com/milvus-io/milvus/internal/proto/internalpb"
"github.com/golang/protobuf/proto"
"github.com/milvus-io/milvus/internal/kv"
etcdkv "github.com/milvus-io/milvus/internal/kv/etcd"
@ -1135,6 +1137,14 @@ func TestMetaTable(t *testing.T) {
assert.EqualError(t, err, fmt.Sprintf("cannot find index, id = %d", idxInfo[0].IndexID))
})
wg.Add(1)
t.Run("add credential failed", func(t *testing.T) {
defer wg.Done()
err = mt.AddCredential(&internalpb.CredentialInfo{Username: "x", EncryptedPassword: "a\xc5z"})
assert.NotNil(t, err)
})
wg.Add(1)
t.Run("delete credential failed", func(t *testing.T) {
defer wg.Done()

View File

@ -1134,7 +1134,7 @@ type ProxyComponent interface {
// CreateCredential create new user and password
CreateCredential(ctx context.Context, req *milvuspb.CreateCredentialRequest) (*commonpb.Status, error)
// UpdateCredential update password for a user
UpdateCredential(ctx context.Context, req *milvuspb.CreateCredentialRequest) (*commonpb.Status, error)
UpdateCredential(ctx context.Context, req *milvuspb.UpdateCredentialRequest) (*commonpb.Status, error)
// DeleteCredential delete a user
DeleteCredential(ctx context.Context, req *milvuspb.DeleteCredentialRequest) (*commonpb.Status, error)
// ListCredUsers list all usernames

View File

@ -125,6 +125,8 @@ type commonConfig struct {
SimdType string
IndexSliceSize int64
StorageType string
AuthorizationEnabled bool
}
func (p *commonConfig) init(base *BaseTable) {
@ -160,6 +162,8 @@ func (p *commonConfig) init(base *BaseTable) {
p.initSimdType()
p.initIndexSliceSize()
p.initStorageType()
p.initEnableAuthorization()
}
func (p *commonConfig) initClusterPrefix() {
@ -348,6 +352,10 @@ func (p *commonConfig) initStorageType() {
p.StorageType = p.Base.LoadWithDefault("storageType", "minio")
}
func (p *commonConfig) initEnableAuthorization() {
p.AuthorizationEnabled = p.Base.ParseBool("common.security.authorizationEnabled", false)
}
///////////////////////////////////////////////////////////////////////////////
// --- rootcoord ---
type rootCoordConfig struct {