From 262c484cec74239c4d0c9e48ddd529ce8bed25cb Mon Sep 17 00:00:00 2001 From: neza2017 Date: Tue, 27 Apr 2021 10:30:55 +0800 Subject: [PATCH] the return struct of "DescribeIndex" should contain "filed_name" (#5055) Signed-off-by: yefu.chen --- internal/core/src/pb/milvus.pb.cc | 375 ++++++++++-------- internal/core/src/pb/milvus.pb.h | 64 +++ .../masterservice/masterservice_test.go | 2 +- internal/masterservice/master_service_test.go | 5 +- internal/masterservice/meta_table.go | 10 +- internal/masterservice/meta_table_test.go | 12 +- internal/masterservice/task.go | 10 +- internal/masterservice/util.go | 17 + internal/masterservice/util_test.go | 22 + internal/proto/milvus.proto | 1 + internal/proto/milvuspb/milvus.pb.go | 248 ++++++------ 11 files changed, 475 insertions(+), 291 deletions(-) diff --git a/internal/core/src/pb/milvus.pb.cc b/internal/core/src/pb/milvus.pb.cc index 769866b21d..a3fff11333 100644 --- a/internal/core/src/pb/milvus.pb.cc +++ b/internal/core/src/pb/milvus.pb.cc @@ -1210,6 +1210,7 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_milvus_2eproto::offsets[] PROT PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::IndexDescription, index_name_), PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::IndexDescription, indexid_), PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::IndexDescription, params_), + PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::IndexDescription, field_name_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::DescribeIndexResponse, _internal_metadata_), ~0u, // no _extensions_ @@ -1410,26 +1411,26 @@ static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOB { 211, -1, sizeof(::milvus::proto::milvus::CreateIndexRequest)}, { 221, -1, sizeof(::milvus::proto::milvus::DescribeIndexRequest)}, { 231, -1, sizeof(::milvus::proto::milvus::IndexDescription)}, - { 239, -1, sizeof(::milvus::proto::milvus::DescribeIndexResponse)}, - { 246, -1, sizeof(::milvus::proto::milvus::GetIndexStateRequest)}, - { 256, -1, sizeof(::milvus::proto::milvus::GetIndexStateResponse)}, - { 263, -1, sizeof(::milvus::proto::milvus::DropIndexRequest)}, - { 273, -1, sizeof(::milvus::proto::milvus::InsertRequest)}, - { 284, -1, sizeof(::milvus::proto::milvus::InsertResponse)}, - { 292, -1, sizeof(::milvus::proto::milvus::PlaceholderValue)}, - { 300, -1, sizeof(::milvus::proto::milvus::PlaceholderGroup)}, - { 306, -1, sizeof(::milvus::proto::milvus::SearchRequest)}, - { 317, -1, sizeof(::milvus::proto::milvus::Hits)}, - { 325, -1, sizeof(::milvus::proto::milvus::SearchResults)}, - { 332, -1, sizeof(::milvus::proto::milvus::FlushRequest)}, - { 340, -1, sizeof(::milvus::proto::milvus::PersistentSegmentInfo)}, - { 354, -1, sizeof(::milvus::proto::milvus::GetPersistentSegmentInfoRequest)}, - { 362, -1, sizeof(::milvus::proto::milvus::GetPersistentSegmentInfoResponse)}, - { 369, -1, sizeof(::milvus::proto::milvus::QuerySegmentInfo)}, - { 381, -1, sizeof(::milvus::proto::milvus::GetQuerySegmentInfoRequest)}, - { 389, -1, sizeof(::milvus::proto::milvus::GetQuerySegmentInfoResponse)}, - { 396, -1, sizeof(::milvus::proto::milvus::RegisterLinkRequest)}, - { 401, -1, sizeof(::milvus::proto::milvus::RegisterLinkResponse)}, + { 240, -1, sizeof(::milvus::proto::milvus::DescribeIndexResponse)}, + { 247, -1, sizeof(::milvus::proto::milvus::GetIndexStateRequest)}, + { 257, -1, sizeof(::milvus::proto::milvus::GetIndexStateResponse)}, + { 264, -1, sizeof(::milvus::proto::milvus::DropIndexRequest)}, + { 274, -1, sizeof(::milvus::proto::milvus::InsertRequest)}, + { 285, -1, sizeof(::milvus::proto::milvus::InsertResponse)}, + { 293, -1, sizeof(::milvus::proto::milvus::PlaceholderValue)}, + { 301, -1, sizeof(::milvus::proto::milvus::PlaceholderGroup)}, + { 307, -1, sizeof(::milvus::proto::milvus::SearchRequest)}, + { 318, -1, sizeof(::milvus::proto::milvus::Hits)}, + { 326, -1, sizeof(::milvus::proto::milvus::SearchResults)}, + { 333, -1, sizeof(::milvus::proto::milvus::FlushRequest)}, + { 341, -1, sizeof(::milvus::proto::milvus::PersistentSegmentInfo)}, + { 355, -1, sizeof(::milvus::proto::milvus::GetPersistentSegmentInfoRequest)}, + { 363, -1, sizeof(::milvus::proto::milvus::GetPersistentSegmentInfoResponse)}, + { 370, -1, sizeof(::milvus::proto::milvus::QuerySegmentInfo)}, + { 382, -1, sizeof(::milvus::proto::milvus::GetQuerySegmentInfoRequest)}, + { 390, -1, sizeof(::milvus::proto::milvus::GetQuerySegmentInfoResponse)}, + { 397, -1, sizeof(::milvus::proto::milvus::RegisterLinkRequest)}, + { 402, -1, sizeof(::milvus::proto::milvus::RegisterLinkResponse)}, }; static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = { @@ -1572,142 +1573,143 @@ const char descriptor_table_protodef_milvus_2eproto[] PROTOBUF_SECTION_VARIABLE( "ribeIndexRequest\022*\n\004base\030\001 \001(\0132\034.milvus." "proto.common.MsgBase\022\017\n\007db_name\030\002 \001(\t\022\027\n" "\017collection_name\030\003 \001(\t\022\022\n\nfield_name\030\004 \001" - "(\t\022\022\n\nindex_name\030\005 \001(\t\"j\n\020IndexDescripti" + "(\t\022\022\n\nindex_name\030\005 \001(\t\"~\n\020IndexDescripti" "on\022\022\n\nindex_name\030\001 \001(\t\022\017\n\007indexID\030\002 \001(\003\022" "1\n\006params\030\003 \003(\0132!.milvus.proto.common.Ke" - "yValuePair\"\207\001\n\025DescribeIndexResponse\022+\n\006" - "status\030\001 \001(\0132\033.milvus.proto.common.Statu" - "s\022A\n\022index_descriptions\030\002 \003(\0132%.milvus.p" - "roto.milvus.IndexDescription\"\224\001\n\024GetInde" - "xStateRequest\022*\n\004base\030\001 \001(\0132\034.milvus.pro" - "to.common.MsgBase\022\017\n\007db_name\030\002 \001(\t\022\027\n\017co" - "llection_name\030\003 \001(\t\022\022\n\nfield_name\030\004 \001(\t\022" - "\022\n\nindex_name\030\005 \001(\t\"t\n\025GetIndexStateResp" - "onse\022+\n\006status\030\001 \001(\0132\033.milvus.proto.comm" - "on.Status\022.\n\005state\030\002 \001(\0162\037.milvus.proto." - "common.IndexState\"\220\001\n\020DropIndexRequest\022*" - "\n\004base\030\001 \001(\0132\034.milvus.proto.common.MsgBa" - "se\022\017\n\007db_name\030\002 \001(\t\022\027\n\017collection_name\030\003" - " \001(\t\022\022\n\nfield_name\030\004 \001(\t\022\022\n\nindex_name\030\005" - " \001(\t\"\275\001\n\rInsertRequest\022*\n\004base\030\001 \001(\0132\034.m" - "ilvus.proto.common.MsgBase\022\017\n\007db_name\030\002 " - "\001(\t\022\027\n\017collection_name\030\003 \001(\t\022\026\n\016partitio" - "n_name\030\004 \001(\t\022+\n\010row_data\030\005 \003(\0132\031.milvus." - "proto.common.Blob\022\021\n\thash_keys\030\006 \003(\r\"e\n\016" - "InsertResponse\022+\n\006status\030\001 \001(\0132\033.milvus." - "proto.common.Status\022\023\n\013rowID_begin\030\002 \001(\003" - "\022\021\n\trowID_end\030\003 \001(\003\"c\n\020PlaceholderValue\022" - "\013\n\003tag\030\001 \001(\t\0222\n\004type\030\002 \001(\0162$.milvus.prot" - "o.milvus.PlaceholderType\022\016\n\006values\030\003 \003(\014" - "\"O\n\020PlaceholderGroup\022;\n\014placeholders\030\001 \003" - "(\0132%.milvus.proto.milvus.PlaceholderValu" - "e\"\246\001\n\rSearchRequest\022*\n\004base\030\001 \001(\0132\034.milv" - "us.proto.common.MsgBase\022\017\n\007db_name\030\002 \001(\t" - "\022\027\n\017collection_name\030\003 \001(\t\022\027\n\017partition_n" - "ames\030\004 \003(\t\022\013\n\003dsl\030\005 \001(\t\022\031\n\021placeholder_g" - "roup\030\006 \001(\014\"5\n\004Hits\022\013\n\003IDs\030\001 \003(\003\022\020\n\010row_d" - "ata\030\002 \003(\014\022\016\n\006scores\030\003 \003(\002\"J\n\rSearchResul" - "ts\022+\n\006status\030\001 \001(\0132\033.milvus.proto.common" - ".Status\022\014\n\004hits\030\002 \003(\014\"e\n\014FlushRequest\022*\n" - "\004base\030\001 \001(\0132\034.milvus.proto.common.MsgBas" - "e\022\017\n\007db_name\030\002 \001(\t\022\030\n\020collection_names\030\003" - " \003(\t\"\351\001\n\025PersistentSegmentInfo\022\021\n\tsegmen" - "tID\030\001 \001(\003\022\024\n\014collectionID\030\002 \001(\003\022\023\n\013parti" - "tionID\030\003 \001(\003\022\021\n\topen_time\030\004 \001(\004\022\023\n\013seale" - "d_time\030\005 \001(\004\022\024\n\014flushed_time\030\006 \001(\004\022\020\n\010nu" - "m_rows\030\007 \001(\003\022\020\n\010mem_size\030\010 \001(\003\0220\n\005state\030" - "\t \001(\0162!.milvus.proto.common.SegmentState" - "\"u\n\037GetPersistentSegmentInfoRequest\022*\n\004b" - "ase\030\001 \001(\0132\034.milvus.proto.common.MsgBase\022" - "\016\n\006dbName\030\002 \001(\t\022\026\n\016collectionName\030\003 \001(\t\"" - "\212\001\n GetPersistentSegmentInfoResponse\022+\n\006" - "status\030\001 \001(\0132\033.milvus.proto.common.Statu" - "s\0229\n\005infos\030\002 \003(\0132*.milvus.proto.milvus.P" - "ersistentSegmentInfo\"\231\001\n\020QuerySegmentInf" - "o\022\021\n\tsegmentID\030\001 \001(\003\022\024\n\014collectionID\030\002 \001" - "(\003\022\023\n\013partitionID\030\003 \001(\003\022\020\n\010mem_size\030\004 \001(" - "\003\022\020\n\010num_rows\030\005 \001(\003\022\022\n\nindex_name\030\006 \001(\t\022" - "\017\n\007indexID\030\007 \001(\003\"p\n\032GetQuerySegmentInfoR" - "equest\022*\n\004base\030\001 \001(\0132\034.milvus.proto.comm" - "on.MsgBase\022\016\n\006dbName\030\002 \001(\t\022\026\n\016collection" - "Name\030\003 \001(\t\"\200\001\n\033GetQuerySegmentInfoRespon" - "se\022+\n\006status\030\001 \001(\0132\033.milvus.proto.common" - ".Status\0224\n\005infos\030\002 \003(\0132%.milvus.proto.mi" - "lvus.QuerySegmentInfo\"\025\n\023RegisterLinkReq" - "uest\"r\n\024RegisterLinkResponse\022-\n\007address\030" - "\001 \001(\0132\034.milvus.proto.common.Address\022+\n\006s" - "tatus\030\002 \001(\0132\033.milvus.proto.common.Status" - "*>\n\017PlaceholderType\022\010\n\004None\020\000\022\020\n\014BinaryV" - "ector\020d\022\017\n\013FloatVector\020e2\215\024\n\rMilvusServi" - "ce\022_\n\020CreateCollection\022,.milvus.proto.mi" - "lvus.CreateCollectionRequest\032\033.milvus.pr" - "oto.common.Status\"\000\022[\n\016DropCollection\022*." - "milvus.proto.milvus.DropCollectionReques" - "t\032\033.milvus.proto.common.Status\"\000\022_\n\rHasC" - "ollection\022).milvus.proto.milvus.HasColle" - "ctionRequest\032!.milvus.proto.milvus.BoolR" - "esponse\"\000\022[\n\016LoadCollection\022*.milvus.pro" - "to.milvus.LoadCollectionRequest\032\033.milvus" - ".proto.common.Status\"\000\022a\n\021ReleaseCollect" - "ion\022-.milvus.proto.milvus.ReleaseCollect" - "ionRequest\032\033.milvus.proto.common.Status\"" - "\000\022w\n\022DescribeCollection\022..milvus.proto.m" - "ilvus.DescribeCollectionRequest\032/.milvus" - ".proto.milvus.DescribeCollectionResponse" - "\"\000\022\206\001\n\027GetCollectionStatistics\0223.milvus." - "proto.milvus.GetCollectionStatisticsRequ" - "est\0324.milvus.proto.milvus.GetCollectionS" - "tatisticsResponse\"\000\022n\n\017ShowCollections\022+" - ".milvus.proto.milvus.ShowCollectionsRequ" - "est\032,.milvus.proto.milvus.ShowCollection" - "sResponse\"\000\022]\n\017CreatePartition\022+.milvus." - "proto.milvus.CreatePartitionRequest\032\033.mi" - "lvus.proto.common.Status\"\000\022Y\n\rDropPartit" - "ion\022).milvus.proto.milvus.DropPartitionR" - "equest\032\033.milvus.proto.common.Status\"\000\022]\n" - "\014HasPartition\022(.milvus.proto.milvus.HasP" - "artitionRequest\032!.milvus.proto.milvus.Bo" - "olResponse\"\000\022[\n\016LoadPartitions\022*.milvus." - "proto.milvus.LoadPartitionsRequest\032\033.mil" - "vus.proto.common.Status\"\000\022a\n\021ReleasePart" - "itions\022-.milvus.proto.milvus.ReleasePart" - "itionsRequest\032\033.milvus.proto.common.Stat" - "us\"\000\022\203\001\n\026GetPartitionStatistics\0222.milvus" - ".proto.milvus.GetPartitionStatisticsRequ" - "est\0323.milvus.proto.milvus.GetPartitionSt" - "atisticsResponse\"\000\022k\n\016ShowPartitions\022*.m" - "ilvus.proto.milvus.ShowPartitionsRequest" - "\032+.milvus.proto.milvus.ShowPartitionsRes" - "ponse\"\000\022U\n\013CreateIndex\022\'.milvus.proto.mi" - "lvus.CreateIndexRequest\032\033.milvus.proto.c" - "ommon.Status\"\000\022h\n\rDescribeIndex\022).milvus" - ".proto.milvus.DescribeIndexRequest\032*.mil" - "vus.proto.milvus.DescribeIndexResponse\"\000" - "\022h\n\rGetIndexState\022).milvus.proto.milvus." - "GetIndexStateRequest\032*.milvus.proto.milv" - "us.GetIndexStateResponse\"\000\022Q\n\tDropIndex\022" - "%.milvus.proto.milvus.DropIndexRequest\032\033" - ".milvus.proto.common.Status\"\000\022S\n\006Insert\022" - "\".milvus.proto.milvus.InsertRequest\032#.mi" - "lvus.proto.milvus.InsertResponse\"\000\022R\n\006Se" - "arch\022\".milvus.proto.milvus.SearchRequest" - "\032\".milvus.proto.milvus.SearchResults\"\000\022I" - "\n\005Flush\022!.milvus.proto.milvus.FlushReque" - "st\032\033.milvus.proto.common.Status\"\000\022\211\001\n\030Ge" - "tPersistentSegmentInfo\0224.milvus.proto.mi" - "lvus.GetPersistentSegmentInfoRequest\0325.m" - "ilvus.proto.milvus.GetPersistentSegmentI" - "nfoResponse\"\000\022z\n\023GetQuerySegmentInfo\022/.m" - "ilvus.proto.milvus.GetQuerySegmentInfoRe" - "quest\0320.milvus.proto.milvus.GetQuerySegm" - "entInfoResponse\"\000\022e\n\014RegisterLink\022(.milv" - "us.proto.milvus.RegisterLinkRequest\032).mi" - "lvus.proto.milvus.RegisterLinkResponse\"\000" - "2u\n\014ProxyService\022e\n\014RegisterLink\022(.milvu" - "s.proto.milvus.RegisterLinkRequest\032).mil" - "vus.proto.milvus.RegisterLinkResponse\"\000B" - "5Z3github.com/milvus-io/milvus/internal/" - "proto/milvuspbb\006proto3" + "yValuePair\022\022\n\nfield_name\030\004 \001(\t\"\207\001\n\025Descr" + "ibeIndexResponse\022+\n\006status\030\001 \001(\0132\033.milvu" + "s.proto.common.Status\022A\n\022index_descripti" + "ons\030\002 \003(\0132%.milvus.proto.milvus.IndexDes" + "cription\"\224\001\n\024GetIndexStateRequest\022*\n\004bas" + "e\030\001 \001(\0132\034.milvus.proto.common.MsgBase\022\017\n" + "\007db_name\030\002 \001(\t\022\027\n\017collection_name\030\003 \001(\t\022" + "\022\n\nfield_name\030\004 \001(\t\022\022\n\nindex_name\030\005 \001(\t\"" + "t\n\025GetIndexStateResponse\022+\n\006status\030\001 \001(\013" + "2\033.milvus.proto.common.Status\022.\n\005state\030\002" + " \001(\0162\037.milvus.proto.common.IndexState\"\220\001" + "\n\020DropIndexRequest\022*\n\004base\030\001 \001(\0132\034.milvu" + "s.proto.common.MsgBase\022\017\n\007db_name\030\002 \001(\t\022" + "\027\n\017collection_name\030\003 \001(\t\022\022\n\nfield_name\030\004" + " \001(\t\022\022\n\nindex_name\030\005 \001(\t\"\275\001\n\rInsertReque" + "st\022*\n\004base\030\001 \001(\0132\034.milvus.proto.common.M" + "sgBase\022\017\n\007db_name\030\002 \001(\t\022\027\n\017collection_na" + "me\030\003 \001(\t\022\026\n\016partition_name\030\004 \001(\t\022+\n\010row_" + "data\030\005 \003(\0132\031.milvus.proto.common.Blob\022\021\n" + "\thash_keys\030\006 \003(\r\"e\n\016InsertResponse\022+\n\006st" + "atus\030\001 \001(\0132\033.milvus.proto.common.Status\022" + "\023\n\013rowID_begin\030\002 \001(\003\022\021\n\trowID_end\030\003 \001(\003\"" + "c\n\020PlaceholderValue\022\013\n\003tag\030\001 \001(\t\0222\n\004type" + "\030\002 \001(\0162$.milvus.proto.milvus.Placeholder" + "Type\022\016\n\006values\030\003 \003(\014\"O\n\020PlaceholderGroup" + "\022;\n\014placeholders\030\001 \003(\0132%.milvus.proto.mi" + "lvus.PlaceholderValue\"\246\001\n\rSearchRequest\022" + "*\n\004base\030\001 \001(\0132\034.milvus.proto.common.MsgB" + "ase\022\017\n\007db_name\030\002 \001(\t\022\027\n\017collection_name\030" + "\003 \001(\t\022\027\n\017partition_names\030\004 \003(\t\022\013\n\003dsl\030\005 " + "\001(\t\022\031\n\021placeholder_group\030\006 \001(\014\"5\n\004Hits\022\013" + "\n\003IDs\030\001 \003(\003\022\020\n\010row_data\030\002 \003(\014\022\016\n\006scores\030" + "\003 \003(\002\"J\n\rSearchResults\022+\n\006status\030\001 \001(\0132\033" + ".milvus.proto.common.Status\022\014\n\004hits\030\002 \003(" + "\014\"e\n\014FlushRequest\022*\n\004base\030\001 \001(\0132\034.milvus" + ".proto.common.MsgBase\022\017\n\007db_name\030\002 \001(\t\022\030" + "\n\020collection_names\030\003 \003(\t\"\351\001\n\025PersistentS" + "egmentInfo\022\021\n\tsegmentID\030\001 \001(\003\022\024\n\014collect" + "ionID\030\002 \001(\003\022\023\n\013partitionID\030\003 \001(\003\022\021\n\topen" + "_time\030\004 \001(\004\022\023\n\013sealed_time\030\005 \001(\004\022\024\n\014flus" + "hed_time\030\006 \001(\004\022\020\n\010num_rows\030\007 \001(\003\022\020\n\010mem_" + "size\030\010 \001(\003\0220\n\005state\030\t \001(\0162!.milvus.proto" + ".common.SegmentState\"u\n\037GetPersistentSeg" + "mentInfoRequest\022*\n\004base\030\001 \001(\0132\034.milvus.p" + "roto.common.MsgBase\022\016\n\006dbName\030\002 \001(\t\022\026\n\016c" + "ollectionName\030\003 \001(\t\"\212\001\n GetPersistentSeg" + "mentInfoResponse\022+\n\006status\030\001 \001(\0132\033.milvu" + "s.proto.common.Status\0229\n\005infos\030\002 \003(\0132*.m" + "ilvus.proto.milvus.PersistentSegmentInfo" + "\"\231\001\n\020QuerySegmentInfo\022\021\n\tsegmentID\030\001 \001(\003" + "\022\024\n\014collectionID\030\002 \001(\003\022\023\n\013partitionID\030\003 " + "\001(\003\022\020\n\010mem_size\030\004 \001(\003\022\020\n\010num_rows\030\005 \001(\003\022" + "\022\n\nindex_name\030\006 \001(\t\022\017\n\007indexID\030\007 \001(\003\"p\n\032" + "GetQuerySegmentInfoRequest\022*\n\004base\030\001 \001(\013" + "2\034.milvus.proto.common.MsgBase\022\016\n\006dbName" + "\030\002 \001(\t\022\026\n\016collectionName\030\003 \001(\t\"\200\001\n\033GetQu" + "erySegmentInfoResponse\022+\n\006status\030\001 \001(\0132\033" + ".milvus.proto.common.Status\0224\n\005infos\030\002 \003" + "(\0132%.milvus.proto.milvus.QuerySegmentInf" + "o\"\025\n\023RegisterLinkRequest\"r\n\024RegisterLink" + "Response\022-\n\007address\030\001 \001(\0132\034.milvus.proto" + ".common.Address\022+\n\006status\030\002 \001(\0132\033.milvus" + ".proto.common.Status*>\n\017PlaceholderType\022" + "\010\n\004None\020\000\022\020\n\014BinaryVector\020d\022\017\n\013FloatVect" + "or\020e2\215\024\n\rMilvusService\022_\n\020CreateCollecti" + "on\022,.milvus.proto.milvus.CreateCollectio" + "nRequest\032\033.milvus.proto.common.Status\"\000\022" + "[\n\016DropCollection\022*.milvus.proto.milvus." + "DropCollectionRequest\032\033.milvus.proto.com" + "mon.Status\"\000\022_\n\rHasCollection\022).milvus.p" + "roto.milvus.HasCollectionRequest\032!.milvu" + "s.proto.milvus.BoolResponse\"\000\022[\n\016LoadCol" + "lection\022*.milvus.proto.milvus.LoadCollec" + "tionRequest\032\033.milvus.proto.common.Status" + "\"\000\022a\n\021ReleaseCollection\022-.milvus.proto.m" + "ilvus.ReleaseCollectionRequest\032\033.milvus." + "proto.common.Status\"\000\022w\n\022DescribeCollect" + "ion\022..milvus.proto.milvus.DescribeCollec" + "tionRequest\032/.milvus.proto.milvus.Descri" + "beCollectionResponse\"\000\022\206\001\n\027GetCollection" + "Statistics\0223.milvus.proto.milvus.GetColl" + "ectionStatisticsRequest\0324.milvus.proto.m" + "ilvus.GetCollectionStatisticsResponse\"\000\022" + "n\n\017ShowCollections\022+.milvus.proto.milvus" + ".ShowCollectionsRequest\032,.milvus.proto.m" + "ilvus.ShowCollectionsResponse\"\000\022]\n\017Creat" + "ePartition\022+.milvus.proto.milvus.CreateP" + "artitionRequest\032\033.milvus.proto.common.St" + "atus\"\000\022Y\n\rDropPartition\022).milvus.proto.m" + "ilvus.DropPartitionRequest\032\033.milvus.prot" + "o.common.Status\"\000\022]\n\014HasPartition\022(.milv" + "us.proto.milvus.HasPartitionRequest\032!.mi" + "lvus.proto.milvus.BoolResponse\"\000\022[\n\016Load" + "Partitions\022*.milvus.proto.milvus.LoadPar" + "titionsRequest\032\033.milvus.proto.common.Sta" + "tus\"\000\022a\n\021ReleasePartitions\022-.milvus.prot" + "o.milvus.ReleasePartitionsRequest\032\033.milv" + "us.proto.common.Status\"\000\022\203\001\n\026GetPartitio" + "nStatistics\0222.milvus.proto.milvus.GetPar" + "titionStatisticsRequest\0323.milvus.proto.m" + "ilvus.GetPartitionStatisticsResponse\"\000\022k" + "\n\016ShowPartitions\022*.milvus.proto.milvus.S" + "howPartitionsRequest\032+.milvus.proto.milv" + "us.ShowPartitionsResponse\"\000\022U\n\013CreateInd" + "ex\022\'.milvus.proto.milvus.CreateIndexRequ" + "est\032\033.milvus.proto.common.Status\"\000\022h\n\rDe" + "scribeIndex\022).milvus.proto.milvus.Descri" + "beIndexRequest\032*.milvus.proto.milvus.Des" + "cribeIndexResponse\"\000\022h\n\rGetIndexState\022)." + "milvus.proto.milvus.GetIndexStateRequest" + "\032*.milvus.proto.milvus.GetIndexStateResp" + "onse\"\000\022Q\n\tDropIndex\022%.milvus.proto.milvu" + "s.DropIndexRequest\032\033.milvus.proto.common" + ".Status\"\000\022S\n\006Insert\022\".milvus.proto.milvu" + "s.InsertRequest\032#.milvus.proto.milvus.In" + "sertResponse\"\000\022R\n\006Search\022\".milvus.proto." + "milvus.SearchRequest\032\".milvus.proto.milv" + "us.SearchResults\"\000\022I\n\005Flush\022!.milvus.pro" + "to.milvus.FlushRequest\032\033.milvus.proto.co" + "mmon.Status\"\000\022\211\001\n\030GetPersistentSegmentIn" + "fo\0224.milvus.proto.milvus.GetPersistentSe" + "gmentInfoRequest\0325.milvus.proto.milvus.G" + "etPersistentSegmentInfoResponse\"\000\022z\n\023Get" + "QuerySegmentInfo\022/.milvus.proto.milvus.G" + "etQuerySegmentInfoRequest\0320.milvus.proto" + ".milvus.GetQuerySegmentInfoResponse\"\000\022e\n" + "\014RegisterLink\022(.milvus.proto.milvus.Regi" + "sterLinkRequest\032).milvus.proto.milvus.Re" + "gisterLinkResponse\"\0002u\n\014ProxyService\022e\n\014" + "RegisterLink\022(.milvus.proto.milvus.Regis" + "terLinkRequest\032).milvus.proto.milvus.Reg" + "isterLinkResponse\"\000B5Z3github.com/milvus" + "-io/milvus/internal/proto/milvuspbb\006prot" + "o3" ; static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_milvus_2eproto_deps[2] = { &::descriptor_table_common_2eproto, @@ -1767,7 +1769,7 @@ static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_mil 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", 8902, + &descriptor_table_milvus_2eproto_initialized, descriptor_table_protodef_milvus_2eproto, "milvus.proto", 8922, &descriptor_table_milvus_2eproto_once, descriptor_table_milvus_2eproto_sccs, descriptor_table_milvus_2eproto_deps, 49, 2, schemas, file_default_instances, TableStruct_milvus_2eproto::offsets, file_level_metadata_milvus_2eproto, 49, file_level_enum_descriptors_milvus_2eproto, file_level_service_descriptors_milvus_2eproto, @@ -13173,6 +13175,10 @@ IndexDescription::IndexDescription(const IndexDescription& from) if (!from.index_name().empty()) { index_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.index_name_); } + field_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); + if (!from.field_name().empty()) { + field_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.field_name_); + } indexid_ = from.indexid_; // @@protoc_insertion_point(copy_constructor:milvus.proto.milvus.IndexDescription) } @@ -13180,6 +13186,7 @@ IndexDescription::IndexDescription(const IndexDescription& from) void IndexDescription::SharedCtor() { ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_IndexDescription_milvus_2eproto.base); index_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); + field_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); indexid_ = PROTOBUF_LONGLONG(0); } @@ -13190,6 +13197,7 @@ IndexDescription::~IndexDescription() { void IndexDescription::SharedDtor() { index_name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); + field_name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); } void IndexDescription::SetCachedSize(int size) const { @@ -13209,6 +13217,7 @@ void IndexDescription::Clear() { params_.Clear(); index_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); + field_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); indexid_ = PROTOBUF_LONGLONG(0); _internal_metadata_.Clear(); } @@ -13247,6 +13256,13 @@ const char* IndexDescription::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPA } while (::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<::PROTOBUF_NAMESPACE_ID::uint8>(ptr) == 26); } else goto handle_unusual; continue; + // string field_name = 4; + case 4: + if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 34)) { + ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_field_name(), ptr, ctx, "milvus.proto.milvus.IndexDescription.field_name"); + CHK_(ptr); + } else goto handle_unusual; + continue; default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -13316,6 +13332,21 @@ bool IndexDescription::MergePartialFromCodedStream( break; } + // string field_name = 4; + case 4: { + if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (34 & 0xFF)) { + DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString( + input, this->mutable_field_name())); + DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + this->field_name().data(), static_cast(this->field_name().length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE, + "milvus.proto.milvus.IndexDescription.field_name")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -13367,6 +13398,16 @@ void IndexDescription::SerializeWithCachedSizes( output); } + // string field_name = 4; + if (this->field_name().size() > 0) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + this->field_name().data(), static_cast(this->field_name().length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, + "milvus.proto.milvus.IndexDescription.field_name"); + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringMaybeAliased( + 4, this->field_name(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -13404,6 +13445,17 @@ void IndexDescription::SerializeWithCachedSizes( 3, this->params(static_cast(i)), target); } + // string field_name = 4; + if (this->field_name().size() > 0) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + this->field_name().data(), static_cast(this->field_name().length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, + "milvus.proto.milvus.IndexDescription.field_name"); + target = + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringToArray( + 4, this->field_name(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -13443,6 +13495,13 @@ size_t IndexDescription::ByteSizeLong() const { this->index_name()); } + // string field_name = 4; + if (this->field_name().size() > 0) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( + this->field_name()); + } + // int64 indexID = 2; if (this->indexid() != 0) { total_size += 1 + @@ -13482,6 +13541,10 @@ void IndexDescription::MergeFrom(const IndexDescription& from) { index_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.index_name_); } + if (from.field_name().size() > 0) { + + field_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.field_name_); + } if (from.indexid() != 0) { set_indexid(from.indexid()); } @@ -13511,6 +13574,8 @@ void IndexDescription::InternalSwap(IndexDescription* other) { CastToBase(¶ms_)->InternalSwap(CastToBase(&other->params_)); index_name_.Swap(&other->index_name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + field_name_.Swap(&other->field_name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); swap(indexid_, other->indexid_); } diff --git a/internal/core/src/pb/milvus.pb.h b/internal/core/src/pb/milvus.pb.h index 238f7467bc..b80af24725 100644 --- a/internal/core/src/pb/milvus.pb.h +++ b/internal/core/src/pb/milvus.pb.h @@ -4936,6 +4936,7 @@ class IndexDescription : enum : int { kParamsFieldNumber = 3, kIndexNameFieldNumber = 1, + kFieldNameFieldNumber = 4, kIndexIDFieldNumber = 2, }; // repeated .milvus.proto.common.KeyValuePair params = 3; @@ -4960,6 +4961,17 @@ class IndexDescription : std::string* release_index_name(); void set_allocated_index_name(std::string* index_name); + // string field_name = 4; + void clear_field_name(); + const std::string& field_name() const; + void set_field_name(const std::string& value); + void set_field_name(std::string&& value); + void set_field_name(const char* value); + void set_field_name(const char* value, size_t size); + std::string* mutable_field_name(); + std::string* release_field_name(); + void set_allocated_field_name(std::string* field_name); + // int64 indexID = 2; void clear_indexid(); ::PROTOBUF_NAMESPACE_ID::int64 indexid() const; @@ -4972,6 +4984,7 @@ class IndexDescription : ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_; ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyValuePair > params_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr index_name_; + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr field_name_; ::PROTOBUF_NAMESPACE_ID::int64 indexid_; mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; friend struct ::TableStruct_milvus_2eproto; @@ -12442,6 +12455,57 @@ IndexDescription::params() const { return params_; } +// string field_name = 4; +inline void IndexDescription::clear_field_name() { + field_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); +} +inline const std::string& IndexDescription::field_name() const { + // @@protoc_insertion_point(field_get:milvus.proto.milvus.IndexDescription.field_name) + return field_name_.GetNoArena(); +} +inline void IndexDescription::set_field_name(const std::string& value) { + + field_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:milvus.proto.milvus.IndexDescription.field_name) +} +inline void IndexDescription::set_field_name(std::string&& value) { + + field_name_.SetNoArena( + &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:milvus.proto.milvus.IndexDescription.field_name) +} +inline void IndexDescription::set_field_name(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + field_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:milvus.proto.milvus.IndexDescription.field_name) +} +inline void IndexDescription::set_field_name(const char* value, size_t size) { + + field_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:milvus.proto.milvus.IndexDescription.field_name) +} +inline std::string* IndexDescription::mutable_field_name() { + + // @@protoc_insertion_point(field_mutable:milvus.proto.milvus.IndexDescription.field_name) + return field_name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); +} +inline std::string* IndexDescription::release_field_name() { + // @@protoc_insertion_point(field_release:milvus.proto.milvus.IndexDescription.field_name) + + return field_name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); +} +inline void IndexDescription::set_allocated_field_name(std::string* field_name) { + if (field_name != nullptr) { + + } else { + + } + field_name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), field_name); + // @@protoc_insertion_point(field_set_allocated:milvus.proto.milvus.IndexDescription.field_name) +} + // ------------------------------------------------------------------- // DescribeIndexResponse diff --git a/internal/distributed/masterservice/masterservice_test.go b/internal/distributed/masterservice/masterservice_test.go index 0bc4dd71b7..bda0666670 100644 --- a/internal/distributed/masterservice/masterservice_test.go +++ b/internal/distributed/masterservice/masterservice_test.go @@ -626,7 +626,7 @@ func TestGrpcService(t *testing.T) { FieldName: "vector", IndexName: cms.Params.DefaultIndexName, } - idx, err := core.MetaTable.GetIndexByName("testColl", cms.Params.DefaultIndexName) + _, idx, err := core.MetaTable.GetIndexByName("testColl", cms.Params.DefaultIndexName) assert.Nil(t, err) assert.Equal(t, len(idx), 1) rsp, err := cli.DropIndex(ctx, req) diff --git a/internal/masterservice/master_service_test.go b/internal/masterservice/master_service_test.go index e0253bf5fc..559fc552ac 100644 --- a/internal/masterservice/master_service_test.go +++ b/internal/masterservice/master_service_test.go @@ -703,6 +703,7 @@ func TestMasterService(t *testing.T) { assert.Equal(t, rsp.Status.ErrorCode, commonpb.ErrorCode_Success) assert.Equal(t, len(rsp.IndexDescriptions), 1) assert.Equal(t, rsp.IndexDescriptions[0].IndexName, Params.DefaultIndexName) + assert.Equal(t, rsp.IndexDescriptions[0].FieldName, "vector") }) t.Run("describe index not exist", func(t *testing.T) { @@ -859,7 +860,7 @@ func TestMasterService(t *testing.T) { FieldName: "vector", IndexName: Params.DefaultIndexName, } - idx, err := core.MetaTable.GetIndexByName("testColl", Params.DefaultIndexName) + _, idx, err := core.MetaTable.GetIndexByName("testColl", Params.DefaultIndexName) assert.Nil(t, err) assert.Equal(t, len(idx), 1) @@ -872,7 +873,7 @@ func TestMasterService(t *testing.T) { assert.Equal(t, im.idxDropID[0], idx[0].IndexID) im.mutex.Unlock() - idx, err = core.MetaTable.GetIndexByName("testColl", Params.DefaultIndexName) + _, idx, err = core.MetaTable.GetIndexByName("testColl", Params.DefaultIndexName) assert.Nil(t, err) assert.Equal(t, len(idx), 0) }) diff --git a/internal/masterservice/meta_table.go b/internal/masterservice/meta_table.go index 6af517180e..fc26e8e0ec 100644 --- a/internal/masterservice/meta_table.go +++ b/internal/masterservice/meta_table.go @@ -924,30 +924,30 @@ func (mt *metaTable) GetNotIndexedSegments(collName string, fieldName string, id return rstID, fieldSchema, nil } -func (mt *metaTable) GetIndexByName(collName, indexName string) ([]pb.IndexInfo, error) { +func (mt *metaTable) GetIndexByName(collName, indexName string) (pb.CollectionInfo, []pb.IndexInfo, error) { mt.ddLock.RLock() defer mt.ddLock.RUnlock() collID, ok := mt.collName2ID[collName] if !ok { - return nil, fmt.Errorf("collection %s not found", collName) + return pb.CollectionInfo{}, nil, fmt.Errorf("collection %s not found", collName) } collMeta, ok := mt.collID2Meta[collID] if !ok { - return nil, fmt.Errorf("collection %s not found", collName) + return pb.CollectionInfo{}, nil, fmt.Errorf("collection %s not found", collName) } rstIndex := make([]pb.IndexInfo, 0, len(collMeta.FieldIndexes)) for _, idx := range collMeta.FieldIndexes { idxInfo, ok := mt.indexID2Meta[idx.IndexID] if !ok { - return nil, fmt.Errorf("index id = %d not found", idx.IndexID) + return pb.CollectionInfo{}, nil, fmt.Errorf("index id = %d not found", idx.IndexID) } if indexName == "" || idxInfo.IndexName == indexName { rstIndex = append(rstIndex, idxInfo) } } - return rstIndex, nil + return collMeta, rstIndex, nil } func (mt *metaTable) GetIndexByID(indexID typeutil.UniqueID) (*pb.IndexInfo, error) { diff --git a/internal/masterservice/meta_table_test.go b/internal/masterservice/meta_table_test.go index 360eb84802..6437e8fc37 100644 --- a/internal/masterservice/meta_table_test.go +++ b/internal/masterservice/meta_table_test.go @@ -341,7 +341,7 @@ func TestMetaTable(t *testing.T) { }) t.Run("get index by name", func(t *testing.T) { - idx, err := mt.GetIndexByName("testColl", "field110") + _, idx, err := mt.GetIndexByName("testColl", "field110") assert.Nil(t, err) assert.Equal(t, len(idx), 1) assert.Equal(t, idx[0].IndexID, int64(10000)) @@ -357,7 +357,7 @@ func TestMetaTable(t *testing.T) { } assert.True(t, EqualKeyPairArray(idx[0].IndexParams, params)) - idx, err = mt.GetIndexByName("testColl", "idx201") + _, idx, err = mt.GetIndexByName("testColl", "idx201") assert.Nil(t, err) assert.Zero(t, len(idx)) }) @@ -388,11 +388,11 @@ func TestMetaTable(t *testing.T) { assert.Nil(t, err) assert.False(t, ok) - idxs, err := mt.GetIndexByName("testColl", "field110") + _, idxs, err := mt.GetIndexByName("testColl", "field110") assert.Nil(t, err) assert.Zero(t, len(idxs)) - idxs, err = mt.GetIndexByName("testColl", "field110-1") + _, idxs, err = mt.GetIndexByName("testColl", "field110-1") assert.Nil(t, err) assert.Equal(t, len(idxs), 1) assert.Equal(t, idxs[0].IndexID, int64(2001)) @@ -961,7 +961,7 @@ func TestMetaTable(t *testing.T) { assert.Nil(t, err) mt.collName2ID["abc"] = 123 - _, err = mt.GetIndexByName("abc", "hij") + _, _, err = mt.GetIndexByName("abc", "hij") assert.NotNil(t, err) assert.EqualError(t, err, "collection abc not found") @@ -978,7 +978,7 @@ func TestMetaTable(t *testing.T) { err = mt.AddCollection(collInfo, partInfo, idxInfo) assert.Nil(t, err) mt.indexID2Meta = make(map[int64]pb.IndexInfo) - _, err = mt.GetIndexByName(collInfo.Schema.Name, idxInfo[0].IndexName) + _, _, err = mt.GetIndexByName(collInfo.Schema.Name, idxInfo[0].IndexName) assert.NotNil(t, err) assert.EqualError(t, err, fmt.Sprintf("index id = %d not found", idxInfo[0].IndexID)) diff --git a/internal/masterservice/task.go b/internal/masterservice/task.go index c996310a15..6b078e376e 100644 --- a/internal/masterservice/task.go +++ b/internal/masterservice/task.go @@ -781,15 +781,21 @@ func (t *DescribeIndexReqTask) Execute(ctx context.Context) error { if t.Type() != commonpb.MsgType_DescribeIndex { return fmt.Errorf("describe index, msg type = %s", commonpb.MsgType_name[int32(t.Type())]) } - idx, err := t.core.MetaTable.GetIndexByName(t.Req.CollectionName, t.Req.IndexName) + coll, idx, err := t.core.MetaTable.GetIndexByName(t.Req.CollectionName, t.Req.IndexName) if err != nil { return err } for _, i := range idx { + f, err := GetFieldSchemaByIndexID(&coll, typeutil.UniqueID(i.IndexID)) + if err != nil { + log.Warn("get field schema by index id failed", zap.String("collection name", t.Req.CollectionName), zap.String("index name", t.Req.IndexName), zap.Error(err)) + continue + } desc := &milvuspb.IndexDescription{ IndexName: i.IndexName, Params: i.IndexParams, IndexID: i.IndexID, + FieldName: f.Name, } t.Rsp.IndexDescriptions = append(t.Rsp.IndexDescriptions, desc) } @@ -821,7 +827,7 @@ func (t *DropIndexReqTask) Execute(ctx context.Context) error { if t.Type() != commonpb.MsgType_DropIndex { return fmt.Errorf("drop index, msg type = %s", commonpb.MsgType_name[int32(t.Type())]) } - info, err := t.core.MetaTable.GetIndexByName(t.Req.CollectionName, t.Req.IndexName) + _, info, err := t.core.MetaTable.GetIndexByName(t.Req.CollectionName, t.Req.IndexName) if err != nil { log.Warn("GetIndexByName failed,", zap.String("collection name", t.Req.CollectionName), zap.String("field name", t.Req.FieldName), zap.String("index name", t.Req.IndexName), zap.Error(err)) return err diff --git a/internal/masterservice/util.go b/internal/masterservice/util.go index d7a2d9a41d..2ac5e927e7 100644 --- a/internal/masterservice/util.go +++ b/internal/masterservice/util.go @@ -49,3 +49,20 @@ func GetFieldSchemaByID(coll *etcdpb.CollectionInfo, fieldID typeutil.UniqueID) } return nil, fmt.Errorf("field id = %d not found", fieldID) } + +//GetFieldSchemaByIndexID return the field schema by it's index id +func GetFieldSchemaByIndexID(coll *etcdpb.CollectionInfo, idxID typeutil.UniqueID) (*schemapb.FieldSchema, error) { + var fieldID typeutil.UniqueID + exist := false + for _, f := range coll.FieldIndexes { + if f.IndexID == idxID { + fieldID = f.FiledID + exist = true + break + } + } + if !exist { + return nil, fmt.Errorf("index id = %d is not attach to any field", idxID) + } + return GetFieldSchemaByID(coll, fieldID) +} diff --git a/internal/masterservice/util_test.go b/internal/masterservice/util_test.go index 5f880515d8..4c58d020e1 100644 --- a/internal/masterservice/util_test.go +++ b/internal/masterservice/util_test.go @@ -68,3 +68,25 @@ func Test_GetFieldSchemaByID(t *testing.T) { _, err = GetFieldSchemaByID(coll, 2) assert.NotNil(t, err) } + +func Test_GetFieldSchemaByIndexID(t *testing.T) { + coll := &etcdpb.CollectionInfo{ + Schema: &schemapb.CollectionSchema{ + Fields: []*schemapb.FieldSchema{ + { + FieldID: 1, + }, + }, + }, + FieldIndexes: []*etcdpb.FieldIndexInfo{ + { + FiledID: 1, + IndexID: 2, + }, + }, + } + _, err := GetFieldSchemaByIndexID(coll, 2) + assert.Nil(t, err) + _, err = GetFieldSchemaByIndexID(coll, 3) + assert.NotNil(t, err) +} diff --git a/internal/proto/milvus.proto b/internal/proto/milvus.proto index 55c88a39ca..4a38c10442 100644 --- a/internal/proto/milvus.proto +++ b/internal/proto/milvus.proto @@ -221,6 +221,7 @@ message IndexDescription { string index_name = 1; int64 indexID = 2; repeated common.KeyValuePair params = 3; + string field_name = 4; } message DescribeIndexResponse { diff --git a/internal/proto/milvuspb/milvus.pb.go b/internal/proto/milvuspb/milvus.pb.go index 31e14a6000..46fc0e824d 100644 --- a/internal/proto/milvuspb/milvus.pb.go +++ b/internal/proto/milvuspb/milvus.pb.go @@ -1655,6 +1655,7 @@ type IndexDescription struct { IndexName string `protobuf:"bytes,1,opt,name=index_name,json=indexName,proto3" json:"index_name,omitempty"` IndexID int64 `protobuf:"varint,2,opt,name=indexID,proto3" json:"indexID,omitempty"` Params []*commonpb.KeyValuePair `protobuf:"bytes,3,rep,name=params,proto3" json:"params,omitempty"` + FieldName string `protobuf:"bytes,4,opt,name=field_name,json=fieldName,proto3" json:"field_name,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1706,6 +1707,13 @@ func (m *IndexDescription) GetParams() []*commonpb.KeyValuePair { return nil } +func (m *IndexDescription) GetFieldName() string { + if m != nil { + return m.FieldName + } + return "" +} + type DescribeIndexResponse struct { Status *commonpb.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` IndexDescriptions []*IndexDescription `protobuf:"bytes,2,rep,name=index_descriptions,json=indexDescriptions,proto3" json:"index_descriptions,omitempty"` @@ -2936,130 +2944,130 @@ func init() { func init() { proto.RegisterFile("milvus.proto", fileDescriptor_02345ba45cc0e303) } var fileDescriptor_02345ba45cc0e303 = []byte{ - // 1959 bytes of a gzipped FileDescriptorProto + // 1962 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xdd, 0x6f, 0x1b, 0xc7, 0x11, 0xf7, 0x92, 0x14, 0x45, 0x0d, 0x8f, 0x12, 0xbd, 0xfa, 0x30, 0x7d, 0x8e, 0x63, 0xf9, 0x5a, 0x37, 0xb2, 0x9d, 0x58, 0x81, 0x14, 0xf7, 0x03, 0x45, 0x8b, 0x56, 0x51, 0x23, 0x0b, 0x4e, 0x02, - 0xe5, 0xe8, 0x06, 0x4d, 0x03, 0x83, 0x58, 0xf2, 0xd6, 0xe4, 0xc1, 0xc7, 0x3b, 0xf6, 0xf6, 0x68, - 0x99, 0x7e, 0x4d, 0x11, 0xa0, 0x1f, 0x71, 0x1e, 0xda, 0x97, 0xf6, 0xb1, 0x40, 0x9f, 0xdb, 0xa2, + 0xe5, 0xe8, 0x06, 0x4d, 0x03, 0x83, 0x58, 0xf2, 0xd6, 0xe2, 0xc1, 0xc7, 0x3b, 0xf6, 0xf6, 0x68, + 0x99, 0x7e, 0x4d, 0x51, 0xa0, 0x1f, 0x71, 0x1e, 0xda, 0x97, 0xf6, 0xb1, 0x40, 0x9e, 0xdb, 0xa2, 0x01, 0x0a, 0xf4, 0xb9, 0x0f, 0x05, 0xfa, 0x77, 0xf4, 0xa9, 0xe8, 0x9f, 0x50, 0xa0, 0xd8, 0xdd, - 0xe3, 0xf1, 0xee, 0xb8, 0x47, 0x51, 0x66, 0x1c, 0x51, 0x6f, 0xb7, 0x73, 0xb3, 0x3b, 0xbf, 0x9d, - 0x9d, 0x99, 0x9d, 0x9d, 0x01, 0xad, 0x6b, 0x3b, 0x4f, 0xfa, 0xec, 0x4e, 0xcf, 0xf7, 0x02, 0x0f, - 0xaf, 0xc6, 0x47, 0x77, 0xe4, 0x40, 0xd7, 0x5a, 0x5e, 0xb7, 0xeb, 0xb9, 0x92, 0xa8, 0x6b, 0xac, - 0xd5, 0xa1, 0x5d, 0x22, 0x47, 0xc6, 0x1f, 0x11, 0x5c, 0x7a, 0xdb, 0xa7, 0x24, 0xa0, 0x6f, 0x7b, - 0x8e, 0x43, 0x5b, 0x81, 0xed, 0xb9, 0x26, 0xfd, 0x59, 0x9f, 0xb2, 0x00, 0xbf, 0x09, 0x85, 0x26, - 0x61, 0xb4, 0x86, 0x36, 0xd1, 0x56, 0x79, 0xe7, 0x95, 0x3b, 0x89, 0xb5, 0xc3, 0x35, 0xdf, 0x63, - 0xed, 0x3d, 0xc2, 0xa8, 0x29, 0x38, 0xf1, 0x25, 0x58, 0xb4, 0x9a, 0x0d, 0x97, 0x74, 0x69, 0x2d, - 0xb7, 0x89, 0xb6, 0x96, 0xcc, 0xa2, 0xd5, 0x7c, 0x9f, 0x74, 0x29, 0x7e, 0x0d, 0x56, 0x5a, 0xd1, - 0xfa, 0x92, 0x21, 0x2f, 0x18, 0x96, 0x47, 0x64, 0xc1, 0xb8, 0x01, 0x45, 0x89, 0xaf, 0x56, 0xd8, - 0x44, 0x5b, 0x9a, 0x19, 0x8e, 0x8c, 0x5f, 0x21, 0x58, 0xdf, 0xf7, 0xbd, 0xde, 0x5c, 0xa0, 0x34, - 0x7e, 0x89, 0x60, 0xed, 0x1e, 0x61, 0xf3, 0x01, 0xe6, 0x23, 0xd0, 0xf6, 0x3c, 0xcf, 0x31, 0x29, - 0xeb, 0x79, 0x2e, 0xa3, 0x78, 0x17, 0x8a, 0x2c, 0x20, 0x41, 0x9f, 0x85, 0x28, 0xae, 0x28, 0x51, - 0xd4, 0x05, 0x8b, 0x19, 0xb2, 0xe2, 0x35, 0x58, 0x78, 0x42, 0x9c, 0xbe, 0x04, 0x51, 0x32, 0xe5, - 0xc0, 0xf8, 0x18, 0x96, 0xeb, 0x81, 0x6f, 0xbb, 0xed, 0x2f, 0x71, 0xf1, 0xa5, 0xe1, 0xe2, 0x7f, - 0x45, 0x70, 0x79, 0x9f, 0xb2, 0x96, 0x6f, 0x37, 0xe7, 0xc4, 0xf8, 0x0c, 0xd0, 0x46, 0x94, 0xc3, - 0x7d, 0x61, 0x82, 0x79, 0x33, 0x41, 0x33, 0xbe, 0x40, 0xa0, 0xab, 0x50, 0xcf, 0xa2, 0x9f, 0xef, - 0x45, 0x46, 0x9f, 0x13, 0x93, 0x6e, 0x24, 0x27, 0x85, 0x0e, 0x3b, 0x92, 0x56, 0x17, 0x84, 0xa1, - 0x6f, 0x8c, 0xc1, 0xce, 0x2b, 0x60, 0x73, 0xff, 0x79, 0xd7, 0x23, 0xd6, 0x7c, 0x98, 0xec, 0x73, - 0x04, 0x35, 0x93, 0x3a, 0x94, 0xb0, 0xf9, 0x38, 0x79, 0xe3, 0xb7, 0x08, 0x5e, 0x3d, 0xa0, 0x41, - 0x4c, 0xc5, 0x01, 0x09, 0x6c, 0x16, 0xd8, 0x2d, 0x76, 0x96, 0xb0, 0x3e, 0x47, 0x70, 0x2d, 0x13, - 0xd6, 0x2c, 0x16, 0xf7, 0x2d, 0x58, 0xe0, 0x5f, 0xac, 0x96, 0xdb, 0xcc, 0x6f, 0x95, 0x77, 0xae, - 0x2b, 0xe7, 0xdc, 0xa7, 0x83, 0x0f, 0xb9, 0xa7, 0x1e, 0x11, 0xdb, 0x37, 0x25, 0xbf, 0xd1, 0x82, - 0x8d, 0x7a, 0xc7, 0x3b, 0x1e, 0x21, 0x7a, 0x09, 0xfa, 0x31, 0x06, 0x70, 0x69, 0x4c, 0xc8, 0x2c, - 0xbb, 0xbd, 0x09, 0xd5, 0x94, 0xbe, 0xe5, 0xc6, 0x97, 0xcc, 0x95, 0xa4, 0xc2, 0x19, 0x0f, 0x4a, - 0x1b, 0xf2, 0x3e, 0x3c, 0x22, 0x7e, 0x60, 0x9f, 0x75, 0x44, 0xba, 0x01, 0xcb, 0xbd, 0x21, 0x0e, - 0xc9, 0x57, 0x10, 0x7c, 0x95, 0x88, 0x2a, 0x14, 0xf6, 0x17, 0x04, 0x6b, 0xfc, 0x76, 0x3c, 0x4f, - 0x98, 0xff, 0x8c, 0x60, 0xf5, 0x1e, 0x61, 0xe7, 0x09, 0xf2, 0x17, 0x61, 0x10, 0x8d, 0x30, 0x9f, - 0x65, 0x70, 0xe0, 0x8c, 0x49, 0xd0, 0xac, 0x56, 0x10, 0x46, 0xbd, 0x9c, 0x40, 0xcd, 0x8c, 0xbf, - 0x8d, 0xa2, 0xed, 0x39, 0x43, 0xfe, 0x77, 0x04, 0x57, 0x0f, 0x68, 0x10, 0xa1, 0x9e, 0x8b, 0xa8, - 0x3c, 0xad, 0xb5, 0x3c, 0x97, 0x77, 0x8a, 0x12, 0xfc, 0x99, 0xc4, 0xee, 0x3f, 0x21, 0x58, 0xe7, - 0x71, 0x75, 0x3e, 0x8c, 0x60, 0x9a, 0x64, 0xeb, 0xf7, 0x48, 0x5e, 0x37, 0x71, 0xc4, 0xb3, 0xa8, - 0x4e, 0x61, 0x78, 0x39, 0x95, 0xe1, 0x71, 0x70, 0x11, 0xe5, 0x70, 0x9f, 0xd5, 0xf2, 0x9b, 0x79, - 0x0e, 0x2e, 0x4e, 0x33, 0x7e, 0x8d, 0x60, 0x63, 0x98, 0x09, 0xd6, 0x69, 0xbb, 0x4b, 0xdd, 0xe0, - 0xc5, 0xf5, 0x99, 0xd6, 0x46, 0x6e, 0x5c, 0x1b, 0xf8, 0x15, 0x58, 0x62, 0x52, 0x4e, 0x94, 0xe4, - 0x8d, 0x08, 0xe2, 0x25, 0x37, 0x06, 0x67, 0x16, 0x65, 0xd5, 0x60, 0xd1, 0x76, 0x2d, 0xfa, 0x34, - 0x42, 0x33, 0x1c, 0xf2, 0x3f, 0xcd, 0xbe, 0xed, 0x58, 0x11, 0x8c, 0xe1, 0x10, 0x5f, 0x07, 0x8d, - 0xba, 0xa4, 0xe9, 0xd0, 0x86, 0xe0, 0x15, 0x87, 0x5a, 0x32, 0xcb, 0x92, 0x76, 0xc8, 0x49, 0xc6, - 0x67, 0x08, 0x56, 0xf9, 0x99, 0x86, 0x18, 0xd9, 0xcb, 0xd5, 0xd9, 0x26, 0x94, 0x63, 0x87, 0x16, - 0xc2, 0x8d, 0x93, 0x8c, 0xc7, 0xb0, 0x96, 0x84, 0x33, 0x8b, 0xce, 0x5e, 0x05, 0x88, 0x4e, 0x44, - 0xda, 0x56, 0xde, 0x8c, 0x51, 0x8c, 0xff, 0x22, 0xc0, 0x32, 0xbd, 0x10, 0xca, 0x38, 0x4b, 0xff, - 0xbb, 0x0a, 0xf0, 0xc8, 0xa6, 0x8e, 0x15, 0x8f, 0x60, 0x4b, 0x82, 0x22, 0x7e, 0xef, 0x83, 0x46, - 0x9f, 0x06, 0x3e, 0x69, 0xf4, 0x88, 0x4f, 0xba, 0xac, 0xb6, 0x30, 0x6d, 0xb0, 0x29, 0x8b, 0x69, - 0x47, 0x62, 0x96, 0xf1, 0x4f, 0x9e, 0x98, 0x84, 0x46, 0x39, 0xef, 0x3b, 0xbe, 0x0a, 0x20, 0x8c, - 0x56, 0xfe, 0x5e, 0x90, 0xbf, 0x05, 0x45, 0x84, 0xf3, 0x4f, 0x11, 0x54, 0xc5, 0x16, 0xe4, 0x7e, - 0x7a, 0x7c, 0xd9, 0xd4, 0x1c, 0x94, 0x9a, 0x33, 0xc1, 0x85, 0xbe, 0x03, 0xc5, 0x50, 0xb1, 0xf9, - 0x69, 0x15, 0x1b, 0x4e, 0x30, 0xfe, 0x80, 0x60, 0x3d, 0xa5, 0xd3, 0x59, 0x4c, 0xf6, 0x01, 0x60, - 0xb9, 0x05, 0x6b, 0xb4, 0xaf, 0xe1, 0xdd, 0x92, 0x7a, 0x88, 0x86, 0x83, 0xb4, 0x16, 0xcc, 0x8b, - 0x76, 0x8a, 0x22, 0x0f, 0xfe, 0x80, 0x06, 0x82, 0x95, 0x0b, 0xa4, 0xe7, 0xf7, 0xe0, 0x3f, 0x41, - 0xb0, 0x9e, 0xda, 0xca, 0x2c, 0xfa, 0xbe, 0x2b, 0xaf, 0x6f, 0xb9, 0x99, 0xe5, 0x9d, 0x6b, 0xca, - 0x39, 0x31, 0x61, 0x92, 0xdb, 0xf8, 0x07, 0x82, 0x2a, 0x4f, 0xf1, 0xcf, 0xb9, 0x17, 0xfd, 0x0f, - 0x41, 0xe5, 0xd0, 0x65, 0xd4, 0x0f, 0xe6, 0x3f, 0x83, 0xc3, 0x6f, 0x41, 0xc9, 0xf7, 0x8e, 0x1b, - 0x16, 0x09, 0x48, 0x18, 0xff, 0x2e, 0x2b, 0xe1, 0xed, 0x39, 0x5e, 0xd3, 0x5c, 0xf4, 0xbd, 0xe3, - 0x7d, 0x12, 0x10, 0x7c, 0x05, 0x96, 0x3a, 0x84, 0x75, 0x1a, 0x8f, 0xe9, 0x80, 0xd5, 0x8a, 0x9b, - 0xf9, 0xad, 0x8a, 0x59, 0xe2, 0x84, 0xfb, 0x74, 0xc0, 0xb8, 0x31, 0x2d, 0x0f, 0xf7, 0x3f, 0x8b, - 0x15, 0x5d, 0x83, 0xb2, 0xef, 0x1d, 0x1f, 0xee, 0x37, 0x9a, 0xb4, 0x6d, 0xbb, 0x61, 0x74, 0x01, - 0x41, 0xda, 0xe3, 0x14, 0x8e, 0x42, 0x32, 0x50, 0xd7, 0x0a, 0xaf, 0xbd, 0x92, 0x20, 0xfc, 0xc8, - 0xb5, 0x8c, 0x27, 0x50, 0x3d, 0x72, 0x48, 0x8b, 0x76, 0x3c, 0xc7, 0xa2, 0xbe, 0x08, 0x31, 0xb8, - 0x0a, 0xf9, 0x80, 0xb4, 0xc3, 0x18, 0xc6, 0x3f, 0xf1, 0xb7, 0xa1, 0x10, 0x0c, 0x7a, 0x43, 0x43, - 0xfd, 0xba, 0x32, 0x16, 0xc4, 0x96, 0x79, 0x30, 0xe8, 0x51, 0x53, 0xcc, 0xc0, 0x1b, 0x50, 0x14, - 0x35, 0x3e, 0x19, 0xdd, 0x34, 0x33, 0x1c, 0x19, 0x0f, 0x13, 0x72, 0x0f, 0x7c, 0xaf, 0xdf, 0xc3, - 0x87, 0xa0, 0xf5, 0x46, 0x34, 0xae, 0x84, 0xec, 0xc8, 0x93, 0x06, 0x6d, 0x26, 0xa6, 0x1a, 0xff, - 0x41, 0x50, 0xa9, 0x53, 0xe2, 0xb7, 0x3a, 0xe7, 0xe1, 0x75, 0xc3, 0x35, 0x6e, 0x31, 0x27, 0xf4, - 0x11, 0xfe, 0x89, 0x6f, 0xc3, 0xc5, 0xd8, 0x86, 0x1a, 0x6d, 0xae, 0xa0, 0x5a, 0x51, 0x14, 0xc2, - 0xab, 0xbd, 0x94, 0xe2, 0x8c, 0xfb, 0x50, 0xb8, 0x67, 0x07, 0x62, 0x19, 0x9e, 0x6c, 0x20, 0x91, - 0x6c, 0xf0, 0x4f, 0x7c, 0x39, 0x66, 0xb7, 0x39, 0x71, 0x00, 0x91, 0x71, 0x8a, 0xfa, 0xba, 0xe7, - 0x87, 0x27, 0x93, 0x33, 0xc3, 0x91, 0xf1, 0x93, 0x91, 0xe6, 0x58, 0xdf, 0x09, 0xd8, 0x8b, 0x59, - 0x25, 0x86, 0x42, 0xc7, 0x0e, 0x5f, 0x26, 0x9a, 0x29, 0xbe, 0x8d, 0x9f, 0x23, 0xd0, 0xde, 0x71, - 0xfa, 0xec, 0x65, 0x9c, 0x89, 0xaa, 0xb0, 0x93, 0x57, 0x17, 0x76, 0xfe, 0x95, 0x83, 0xf5, 0x23, - 0xea, 0x33, 0x9b, 0x05, 0xd4, 0x0d, 0xc2, 0x6c, 0xef, 0xd0, 0x7d, 0xe4, 0x25, 0xd3, 0x6a, 0x94, - 0x4a, 0xab, 0xbf, 0x9c, 0x24, 0x93, 0x7b, 0xa3, 0xd7, 0xa3, 0x6e, 0x23, 0xb0, 0xc3, 0x58, 0x53, - 0x30, 0x4b, 0x9c, 0xf0, 0xc0, 0xee, 0x52, 0xee, 0xcb, 0x8c, 0x12, 0x87, 0x5a, 0xf2, 0xf7, 0x82, - 0xf8, 0x0d, 0x92, 0x24, 0x18, 0xae, 0x83, 0xf6, 0x88, 0x6b, 0x70, 0xc8, 0x51, 0x14, 0x1c, 0xe5, - 0x90, 0x26, 0x58, 0x2e, 0x43, 0xc9, 0xed, 0x77, 0x1b, 0xbe, 0x77, 0xcc, 0x6a, 0x8b, 0x32, 0xd5, - 0x70, 0xfb, 0x5d, 0xd3, 0x3b, 0x16, 0xd6, 0xd0, 0xa5, 0xdd, 0x06, 0xb3, 0x9f, 0xd1, 0x5a, 0x49, - 0xfe, 0xea, 0xd2, 0x6e, 0xdd, 0x7e, 0x46, 0x87, 0x4f, 0x49, 0x5a, 0x5b, 0x12, 0x2e, 0xae, 0x4e, - 0x42, 0x42, 0x5d, 0x25, 0x6e, 0xa3, 0xdf, 0xc8, 0xc2, 0xa4, 0x52, 0xa1, 0x2f, 0x7e, 0xce, 0x1b, - 0x10, 0x1e, 0x6c, 0xea, 0x98, 0xbf, 0x01, 0x29, 0x1f, 0xcb, 0x28, 0x97, 0xfe, 0x0e, 0xc1, 0x66, - 0x36, 0xaa, 0x59, 0xc2, 0xed, 0x0f, 0x60, 0xc1, 0x76, 0x1f, 0x79, 0xc3, 0xbc, 0xe8, 0x96, 0x3a, - 0x3a, 0x29, 0xe5, 0xca, 0x89, 0xc6, 0xbf, 0x11, 0x54, 0x3f, 0xe8, 0x53, 0x7f, 0xf0, 0x55, 0x9b, - 0x5e, 0xfc, 0xf8, 0x0b, 0xc9, 0xe3, 0x8f, 0x1b, 0xcd, 0x42, 0xd2, 0x68, 0x92, 0xd7, 0x78, 0x71, - 0x42, 0x62, 0xbb, 0x98, 0x48, 0x6c, 0x8d, 0xe7, 0x08, 0xf4, 0x03, 0x1a, 0xa4, 0xb7, 0x7a, 0x76, - 0x46, 0xf1, 0x39, 0x82, 0x2b, 0x4a, 0x40, 0xb3, 0xd8, 0xc3, 0x77, 0x93, 0xf6, 0xa0, 0xbe, 0xad, - 0xc6, 0x44, 0x86, 0xa6, 0xb0, 0x0e, 0xab, 0x26, 0x6d, 0x73, 0x4b, 0xf1, 0xdf, 0xb5, 0xdd, 0xc7, - 0xa1, 0x6a, 0x78, 0x6a, 0xb0, 0x96, 0xa4, 0x87, 0x08, 0xbf, 0x09, 0x8b, 0xc4, 0xb2, 0x7c, 0xca, - 0xd8, 0x44, 0xb5, 0xfd, 0x50, 0xf2, 0x98, 0x43, 0xe6, 0xd8, 0xce, 0x72, 0x53, 0xef, 0xec, 0xd6, - 0xf7, 0x61, 0x25, 0x75, 0xa7, 0xe3, 0x12, 0x14, 0xde, 0xf7, 0x5c, 0x5a, 0xbd, 0x80, 0xab, 0xa0, - 0xed, 0xd9, 0x2e, 0xf1, 0x07, 0x1f, 0xd2, 0x56, 0xe0, 0xf9, 0x55, 0x0b, 0xaf, 0x40, 0xf9, 0x1d, - 0xc7, 0x23, 0x41, 0x48, 0xa0, 0x3b, 0x9f, 0xad, 0x41, 0xe5, 0x3d, 0x21, 0xa6, 0x4e, 0xfd, 0x27, - 0x76, 0x8b, 0xe2, 0x06, 0x54, 0xd3, 0x1d, 0x66, 0xfc, 0xba, 0x52, 0x61, 0x19, 0x8d, 0x68, 0x7d, - 0x12, 0x70, 0xe3, 0x02, 0xfe, 0x18, 0x96, 0x93, 0xad, 0x61, 0xac, 0xf6, 0x4f, 0x65, 0xff, 0xf8, - 0xa4, 0xc5, 0x1b, 0x50, 0x49, 0x74, 0x7a, 0xf1, 0x4d, 0xe5, 0xda, 0xaa, 0x6e, 0xb0, 0x7e, 0x5d, - 0xc9, 0x1a, 0x6f, 0xd6, 0x4a, 0xf4, 0xc9, 0xc6, 0x5c, 0x06, 0x7a, 0x65, 0xf7, 0xee, 0x24, 0xf4, - 0x04, 0x2e, 0x8e, 0xf5, 0xd9, 0xf0, 0x1b, 0xca, 0xf5, 0xb3, 0xfa, 0x71, 0x27, 0x89, 0x38, 0x06, - 0x3c, 0xde, 0x0f, 0xc5, 0x77, 0xd4, 0x27, 0x90, 0xd5, 0xee, 0xd5, 0xb7, 0xa7, 0xe6, 0x8f, 0x14, - 0xf7, 0x29, 0x82, 0x4b, 0x19, 0xcd, 0x31, 0xbc, 0xab, 0x5c, 0x6e, 0x72, 0x87, 0x4f, 0x7f, 0xeb, - 0x74, 0x93, 0x22, 0x20, 0x2e, 0xac, 0xa4, 0xda, 0x55, 0xf8, 0xb6, 0x72, 0x29, 0x75, 0xe7, 0x4c, - 0x7f, 0x7d, 0x3a, 0xe6, 0x48, 0xde, 0x43, 0x58, 0x49, 0xb5, 0xa8, 0x32, 0xe4, 0xa9, 0x1b, 0x59, - 0x27, 0x1d, 0xe8, 0x47, 0x50, 0x49, 0xf4, 0x92, 0x32, 0x2c, 0x5e, 0xd5, 0x6f, 0x3a, 0x69, 0xe9, - 0x87, 0xa0, 0xc5, 0x5b, 0x3e, 0x78, 0x2b, 0xcb, 0x97, 0xc6, 0x16, 0x3e, 0x8d, 0x2b, 0x8d, 0xaa, - 0xc5, 0x13, 0x5c, 0x69, 0xac, 0x08, 0x3e, 0xbd, 0x2b, 0xc5, 0xd6, 0x9f, 0xe8, 0x4a, 0xa7, 0x16, - 0xf1, 0x09, 0x82, 0x0d, 0x75, 0xc7, 0x00, 0xef, 0x64, 0xd9, 0x66, 0x76, 0x6f, 0x44, 0xdf, 0x3d, - 0xd5, 0x9c, 0x48, 0x8b, 0x8f, 0x61, 0x39, 0x59, 0x73, 0xcf, 0xd0, 0xa2, 0xb2, 0x95, 0xa0, 0xdf, - 0x9e, 0x8a, 0x37, 0x12, 0xf6, 0x63, 0x28, 0xc7, 0xea, 0xa1, 0xf8, 0xb5, 0x09, 0x76, 0x1c, 0xaf, - 0x7c, 0x9c, 0xa4, 0xc9, 0x0e, 0x54, 0x12, 0x25, 0xb2, 0x2c, 0x1b, 0x56, 0x94, 0x26, 0xf5, 0x5b, - 0xd3, 0xb0, 0x46, 0x1b, 0xe8, 0x40, 0x25, 0x51, 0x1c, 0xca, 0x90, 0xa4, 0xaa, 0x85, 0x65, 0x48, - 0x52, 0xd6, 0x9a, 0x8c, 0x0b, 0xf8, 0x03, 0x58, 0x8a, 0x0a, 0x40, 0xf8, 0x46, 0xa6, 0x4f, 0x9e, - 0x46, 0x4d, 0x75, 0x28, 0xca, 0x62, 0x04, 0x36, 0x32, 0x2a, 0x7d, 0xb1, 0x4a, 0x8d, 0xfe, 0xb5, - 0x89, 0x3c, 0x11, 0x4e, 0x13, 0x8a, 0xf2, 0x29, 0x99, 0xb1, 0x68, 0xe2, 0x85, 0xae, 0x4f, 0xe6, - 0x11, 0x6f, 0x51, 0xe3, 0x02, 0x3e, 0x84, 0x05, 0xf1, 0x86, 0xc4, 0xea, 0x38, 0x10, 0x7f, 0x5f, - 0x9e, 0xb4, 0xe7, 0x5f, 0x20, 0xa8, 0x65, 0x3d, 0x12, 0x70, 0xe6, 0x15, 0x30, 0xe9, 0xa5, 0xa3, - 0xdf, 0x3d, 0xe5, 0xac, 0x48, 0x55, 0xcf, 0x60, 0x55, 0x91, 0x9a, 0xe2, 0xed, 0xac, 0xf5, 0x32, - 0xb2, 0x6a, 0xfd, 0xcd, 0xe9, 0x27, 0x44, 0xb2, 0x29, 0x68, 0xf1, 0x6c, 0x33, 0x23, 0x16, 0x2b, - 0x12, 0x55, 0xfd, 0xe6, 0x14, 0x9c, 0x43, 0x31, 0x3b, 0x7d, 0xd0, 0x8e, 0x7c, 0xef, 0xe9, 0x60, - 0x98, 0x0d, 0x7e, 0x35, 0x62, 0xf7, 0xee, 0xfe, 0x74, 0xb7, 0x6d, 0x07, 0x9d, 0x7e, 0x93, 0x9f, - 0xff, 0xb6, 0xe4, 0x7d, 0xc3, 0xf6, 0xc2, 0xaf, 0x6d, 0xdb, 0x0d, 0xa8, 0xef, 0x12, 0x67, 0x5b, - 0xac, 0x15, 0x52, 0x7b, 0xcd, 0x66, 0x51, 0x8c, 0x77, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x24, - 0xe8, 0x83, 0x71, 0x56, 0x29, 0x00, 0x00, + 0xe3, 0xf1, 0xee, 0xb8, 0x47, 0x52, 0x66, 0x1c, 0x51, 0x6f, 0xb7, 0x73, 0xb3, 0x3b, 0xbf, 0x9d, + 0x9d, 0x99, 0x9d, 0x9d, 0x01, 0xad, 0x63, 0x3b, 0x4f, 0x7a, 0xec, 0x4e, 0xd7, 0xf7, 0x02, 0x0f, + 0xaf, 0xc6, 0x47, 0x77, 0xe4, 0x40, 0xd7, 0x5a, 0x5e, 0xa7, 0xe3, 0xb9, 0x92, 0xa8, 0x6b, 0xac, + 0xd5, 0xa6, 0x1d, 0x22, 0x47, 0xc6, 0xe7, 0x08, 0x2e, 0xbd, 0xed, 0x53, 0x12, 0xd0, 0xb7, 0x3d, + 0xc7, 0xa1, 0xad, 0xc0, 0xf6, 0x5c, 0x93, 0xfe, 0xac, 0x47, 0x59, 0x80, 0xdf, 0x84, 0x42, 0x93, + 0x30, 0x5a, 0x43, 0x9b, 0x68, 0xab, 0xbc, 0xf3, 0xca, 0x9d, 0xc4, 0xda, 0xe1, 0x9a, 0xef, 0xb1, + 0xe3, 0x3d, 0xc2, 0xa8, 0x29, 0x38, 0xf1, 0x25, 0x58, 0xb4, 0x9a, 0x0d, 0x97, 0x74, 0x68, 0x2d, + 0xb7, 0x89, 0xb6, 0x96, 0xcc, 0xa2, 0xd5, 0x7c, 0x9f, 0x74, 0x28, 0x7e, 0x0d, 0x56, 0x5a, 0xd1, + 0xfa, 0x92, 0x21, 0x2f, 0x18, 0x96, 0x87, 0x64, 0xc1, 0xb8, 0x01, 0x45, 0x89, 0xaf, 0x56, 0xd8, + 0x44, 0x5b, 0x9a, 0x19, 0x8e, 0x8c, 0x5f, 0x23, 0x58, 0xdf, 0xf7, 0xbd, 0xee, 0x5c, 0xa0, 0x34, + 0x7e, 0x85, 0x60, 0xed, 0x1e, 0x61, 0xf3, 0x01, 0xe6, 0x23, 0xd0, 0xf6, 0x3c, 0xcf, 0x31, 0x29, + 0xeb, 0x7a, 0x2e, 0xa3, 0x78, 0x17, 0x8a, 0x2c, 0x20, 0x41, 0x8f, 0x85, 0x28, 0xae, 0x28, 0x51, + 0xd4, 0x05, 0x8b, 0x19, 0xb2, 0xe2, 0x35, 0x58, 0x78, 0x42, 0x9c, 0x9e, 0x04, 0x51, 0x32, 0xe5, + 0xc0, 0xf8, 0x18, 0x96, 0xeb, 0x81, 0x6f, 0xbb, 0xc7, 0x5f, 0xe2, 0xe2, 0x4b, 0x83, 0xc5, 0xff, + 0x8a, 0xe0, 0xf2, 0x3e, 0x65, 0x2d, 0xdf, 0x6e, 0xce, 0x89, 0xf1, 0x19, 0xa0, 0x0d, 0x29, 0x87, + 0xfb, 0xc2, 0x04, 0xf3, 0x66, 0x82, 0x66, 0x7c, 0x81, 0x40, 0x57, 0xa1, 0x9e, 0x45, 0x3f, 0xdf, + 0x8b, 0x8c, 0x3e, 0x27, 0x26, 0xdd, 0x48, 0x4e, 0x0a, 0x1d, 0x76, 0x28, 0xad, 0x2e, 0x08, 0x03, + 0xdf, 0x18, 0x81, 0x9d, 0x57, 0xc0, 0xe6, 0xfe, 0xf3, 0xae, 0x47, 0xac, 0xf9, 0x30, 0xd9, 0xe7, + 0x08, 0x6a, 0x26, 0x75, 0x28, 0x61, 0xf3, 0x71, 0xf2, 0xc6, 0xef, 0x10, 0xbc, 0x7a, 0x40, 0x83, + 0x98, 0x8a, 0x03, 0x12, 0xd8, 0x2c, 0xb0, 0x5b, 0xec, 0x2c, 0x61, 0x7d, 0x86, 0xe0, 0x5a, 0x26, + 0xac, 0x59, 0x2c, 0xee, 0x5b, 0xb0, 0xc0, 0xbf, 0x58, 0x2d, 0xb7, 0x99, 0xdf, 0x2a, 0xef, 0x5c, + 0x57, 0xce, 0xb9, 0x4f, 0xfb, 0x1f, 0x72, 0x4f, 0x3d, 0x22, 0xb6, 0x6f, 0x4a, 0x7e, 0xa3, 0x05, + 0x1b, 0xf5, 0xb6, 0x77, 0x32, 0x44, 0xf4, 0x12, 0xf4, 0x63, 0xf4, 0xe1, 0xd2, 0x88, 0x90, 0x59, + 0x76, 0x7b, 0x13, 0xaa, 0x29, 0x7d, 0xcb, 0x8d, 0x2f, 0x99, 0x2b, 0x49, 0x85, 0x33, 0x1e, 0x94, + 0x36, 0xe4, 0x7d, 0x78, 0x44, 0xfc, 0xc0, 0x3e, 0xeb, 0x88, 0x74, 0x03, 0x96, 0xbb, 0x03, 0x1c, + 0x92, 0xaf, 0x20, 0xf8, 0x2a, 0x11, 0x55, 0x28, 0xec, 0x2f, 0x08, 0xd6, 0xf8, 0xed, 0x78, 0x9e, + 0x30, 0xff, 0x19, 0xc1, 0xea, 0x3d, 0xc2, 0xce, 0x13, 0xe4, 0x2f, 0xc2, 0x20, 0x1a, 0x61, 0x3e, + 0xcb, 0xe0, 0xc0, 0x19, 0x93, 0xa0, 0x59, 0xad, 0x20, 0x8c, 0x7a, 0x39, 0x81, 0x9a, 0x19, 0x7f, + 0x1b, 0x46, 0xdb, 0x73, 0x86, 0xfc, 0xef, 0x08, 0xae, 0x1e, 0xd0, 0x20, 0x42, 0x3d, 0x17, 0x51, + 0x79, 0x5a, 0x6b, 0x79, 0x2e, 0xef, 0x14, 0x25, 0xf8, 0x33, 0x89, 0xdd, 0x7f, 0x42, 0xb0, 0xce, + 0xe3, 0xea, 0x7c, 0x18, 0xc1, 0x34, 0xc9, 0xd6, 0x1f, 0x90, 0xbc, 0x6e, 0xe2, 0x88, 0x67, 0x51, + 0x9d, 0xc2, 0xf0, 0x72, 0x2a, 0xc3, 0xe3, 0xe0, 0x22, 0xca, 0xe1, 0x3e, 0xab, 0xe5, 0x37, 0xf3, + 0x1c, 0x5c, 0x9c, 0x66, 0xfc, 0x06, 0xc1, 0xc6, 0x20, 0x13, 0xac, 0xd3, 0xe3, 0x0e, 0x75, 0x83, + 0x17, 0xd7, 0x67, 0x5a, 0x1b, 0xb9, 0x51, 0x6d, 0xe0, 0x57, 0x60, 0x89, 0x49, 0x39, 0x51, 0x92, + 0x37, 0x24, 0x88, 0x97, 0xdc, 0x08, 0x9c, 0x59, 0x94, 0x55, 0x83, 0x45, 0xdb, 0xb5, 0xe8, 0xd3, + 0x08, 0xcd, 0x60, 0xc8, 0xff, 0x34, 0x7b, 0xb6, 0x63, 0x45, 0x30, 0x06, 0x43, 0x7c, 0x1d, 0x34, + 0xea, 0x92, 0xa6, 0x43, 0x1b, 0x82, 0x57, 0x1c, 0x6a, 0xc9, 0x2c, 0x4b, 0xda, 0x21, 0x27, 0x19, + 0x9f, 0x22, 0x58, 0xe5, 0x67, 0x1a, 0x62, 0x64, 0x2f, 0x57, 0x67, 0x9b, 0x50, 0x8e, 0x1d, 0x5a, + 0x08, 0x37, 0x4e, 0x32, 0x1e, 0xc3, 0x5a, 0x12, 0xce, 0x2c, 0x3a, 0x7b, 0x15, 0x20, 0x3a, 0x11, + 0x69, 0x5b, 0x79, 0x33, 0x46, 0x31, 0xfe, 0x8b, 0x00, 0xcb, 0xf4, 0x42, 0x28, 0xe3, 0x2c, 0xfd, + 0xef, 0x2a, 0xc0, 0x23, 0x9b, 0x3a, 0x56, 0x3c, 0x82, 0x2d, 0x09, 0x8a, 0xf8, 0xbd, 0x0f, 0x1a, + 0x7d, 0x1a, 0xf8, 0xa4, 0xd1, 0x25, 0x3e, 0xe9, 0xb0, 0xda, 0xc2, 0xb4, 0xc1, 0xa6, 0x2c, 0xa6, + 0x1d, 0x89, 0x59, 0xc6, 0x3f, 0x79, 0x62, 0x12, 0x1a, 0xe5, 0xbc, 0xef, 0xf8, 0x2a, 0x80, 0x30, + 0x5a, 0xf9, 0x7b, 0x41, 0xfe, 0x16, 0x14, 0x11, 0xce, 0x3f, 0x47, 0x50, 0x15, 0x5b, 0x90, 0xfb, + 0xe9, 0xf2, 0x65, 0x53, 0x73, 0x50, 0x6a, 0xce, 0x18, 0x17, 0xfa, 0x0e, 0x14, 0x43, 0xc5, 0xe6, + 0xa7, 0x55, 0x6c, 0x38, 0x61, 0xc2, 0x36, 0x8c, 0x3f, 0x22, 0x58, 0x4f, 0xa9, 0x7c, 0x16, 0x8b, + 0x7e, 0x00, 0x58, 0xee, 0xd0, 0x1a, 0x6e, 0x7b, 0x70, 0xf5, 0xa4, 0xde, 0xa9, 0xe1, 0x20, 0xad, + 0x24, 0xf3, 0xa2, 0x9d, 0xa2, 0x48, 0xbb, 0x38, 0xa0, 0x81, 0x60, 0xe5, 0x02, 0xe9, 0xf9, 0xb5, + 0x8b, 0x4f, 0x10, 0xac, 0xa7, 0xb6, 0x32, 0x8b, 0xbe, 0xef, 0xca, 0xdb, 0x5d, 0x6e, 0x66, 0x79, + 0xe7, 0x9a, 0x72, 0x4e, 0x4c, 0x98, 0xe4, 0x36, 0xfe, 0x81, 0xa0, 0xca, 0x5f, 0x00, 0xe7, 0xdc, + 0xc9, 0xfe, 0x87, 0xa0, 0x72, 0xe8, 0x32, 0xea, 0x07, 0xf3, 0x9f, 0xe0, 0xe1, 0xb7, 0xa0, 0xe4, + 0x7b, 0x27, 0x0d, 0x8b, 0x04, 0x24, 0x0c, 0x8f, 0x97, 0x95, 0xf0, 0xf6, 0x1c, 0xaf, 0x69, 0x2e, + 0xfa, 0xde, 0xc9, 0x3e, 0x09, 0x08, 0xbe, 0x02, 0x4b, 0x6d, 0xc2, 0xda, 0x8d, 0xc7, 0xb4, 0xcf, + 0x6a, 0xc5, 0xcd, 0xfc, 0x56, 0xc5, 0x2c, 0x71, 0xc2, 0x7d, 0xda, 0x67, 0xdc, 0x98, 0x96, 0x07, + 0xfb, 0x9f, 0xc5, 0x8a, 0xae, 0x41, 0xd9, 0xf7, 0x4e, 0x0e, 0xf7, 0x1b, 0x4d, 0x7a, 0x6c, 0xbb, + 0x61, 0xf0, 0x01, 0x41, 0xda, 0xe3, 0x14, 0x8e, 0x42, 0x32, 0x50, 0xd7, 0x0a, 0x6f, 0xc5, 0x92, + 0x20, 0xfc, 0xc8, 0xb5, 0x8c, 0x27, 0x50, 0x3d, 0x72, 0x48, 0x8b, 0xb6, 0x3d, 0xc7, 0xa2, 0xbe, + 0x88, 0x40, 0xb8, 0x0a, 0xf9, 0x80, 0x1c, 0x87, 0x21, 0x8e, 0x7f, 0xe2, 0x6f, 0x43, 0x21, 0xe8, + 0x77, 0x07, 0x86, 0xfa, 0x75, 0x65, 0x2c, 0x88, 0x2d, 0xf3, 0xa0, 0xdf, 0xa5, 0xa6, 0x98, 0x81, + 0x37, 0xa0, 0x28, 0x4a, 0x80, 0x32, 0xf8, 0x69, 0x66, 0x38, 0x32, 0x1e, 0x26, 0xe4, 0x1e, 0xf8, + 0x5e, 0xaf, 0x8b, 0x0f, 0x41, 0xeb, 0x0e, 0x69, 0x5c, 0x09, 0xd9, 0x91, 0x27, 0x0d, 0xda, 0x4c, + 0x4c, 0x35, 0xfe, 0x83, 0xa0, 0x52, 0xa7, 0xc4, 0x6f, 0xb5, 0xcf, 0xc3, 0xe3, 0x87, 0x6b, 0xdc, + 0x62, 0x4e, 0xe8, 0x23, 0xfc, 0x13, 0xdf, 0x86, 0x8b, 0xb1, 0x0d, 0x35, 0x8e, 0xb9, 0x82, 0x6a, + 0x45, 0x51, 0x27, 0xaf, 0x76, 0x53, 0x8a, 0x33, 0xee, 0x43, 0xe1, 0x9e, 0x1d, 0x88, 0x65, 0x78, + 0x2e, 0x82, 0x44, 0x2e, 0xc2, 0x3f, 0xf1, 0xe5, 0x98, 0xdd, 0xe6, 0xc4, 0x01, 0x44, 0xc6, 0x29, + 0xca, 0xef, 0x9e, 0x1f, 0x9e, 0x4c, 0xce, 0x0c, 0x47, 0xc6, 0x4f, 0x86, 0x9a, 0x63, 0x3d, 0x27, + 0x60, 0x2f, 0x66, 0x95, 0x18, 0x0a, 0x6d, 0x3b, 0x7c, 0xb8, 0x68, 0xa6, 0xf8, 0x36, 0x7e, 0x8e, + 0x40, 0x7b, 0xc7, 0xe9, 0xb1, 0x97, 0x71, 0x26, 0xaa, 0xba, 0x4f, 0x5e, 0x5d, 0xf7, 0xf9, 0x57, + 0x0e, 0xd6, 0x8f, 0xa8, 0xcf, 0x6c, 0x16, 0x50, 0x37, 0x08, 0x93, 0xc1, 0x43, 0xf7, 0x91, 0x97, + 0xcc, 0xba, 0x51, 0x2a, 0xeb, 0xfe, 0x72, 0x72, 0x50, 0xee, 0x8d, 0x5e, 0x97, 0xba, 0x8d, 0xc0, + 0x0e, 0x63, 0x4d, 0xc1, 0x2c, 0x71, 0xc2, 0x03, 0xbb, 0x43, 0xb9, 0x2f, 0x33, 0x4a, 0x1c, 0x6a, + 0xc9, 0xdf, 0x0b, 0xe2, 0x37, 0x48, 0x92, 0x60, 0xb8, 0x0e, 0xda, 0x23, 0xae, 0xc1, 0x01, 0x47, + 0x51, 0x70, 0x94, 0x43, 0x9a, 0x60, 0xb9, 0x0c, 0x25, 0xb7, 0xd7, 0x69, 0xf8, 0xde, 0x09, 0xab, + 0x2d, 0xca, 0x4c, 0xc4, 0xed, 0x75, 0x4c, 0xef, 0x44, 0x58, 0x43, 0x87, 0x76, 0x1a, 0xcc, 0x7e, + 0x46, 0x6b, 0x25, 0xf9, 0xab, 0x43, 0x3b, 0x75, 0xfb, 0x19, 0x1d, 0xbc, 0x34, 0x69, 0x6d, 0x49, + 0xb8, 0xb8, 0x3a, 0x47, 0x09, 0x75, 0x95, 0xb8, 0x8d, 0x7e, 0x2b, 0xeb, 0x96, 0x4a, 0x85, 0xbe, + 0xf8, 0x39, 0x6f, 0x40, 0x78, 0xb0, 0xa9, 0x63, 0xfe, 0x06, 0xa4, 0x7c, 0x2c, 0xa3, 0x9a, 0xfa, + 0x7b, 0x04, 0x9b, 0xd9, 0xa8, 0x66, 0x09, 0xb7, 0x3f, 0x80, 0x05, 0xdb, 0x7d, 0xe4, 0x0d, 0xf2, + 0xa2, 0x5b, 0xea, 0xe8, 0xa4, 0x94, 0x2b, 0x27, 0x1a, 0xff, 0x46, 0x50, 0xfd, 0xa0, 0x47, 0xfd, + 0xfe, 0x57, 0x6d, 0x7a, 0xf1, 0xe3, 0x2f, 0x24, 0x8f, 0x3f, 0x6e, 0x34, 0x0b, 0x49, 0xa3, 0x49, + 0x5e, 0xe3, 0xc5, 0x31, 0x79, 0xef, 0x62, 0x22, 0xef, 0x35, 0x9e, 0x23, 0xd0, 0x0f, 0x68, 0x90, + 0xde, 0xea, 0xd9, 0x19, 0xc5, 0x67, 0x08, 0xae, 0x28, 0x01, 0xcd, 0x62, 0x0f, 0xdf, 0x4d, 0xda, + 0x83, 0xfa, 0xb6, 0x1a, 0x11, 0x19, 0x9a, 0xc2, 0x3a, 0xac, 0x9a, 0xf4, 0x98, 0x5b, 0x8a, 0xff, + 0xae, 0xed, 0x3e, 0x0e, 0x55, 0xc3, 0x53, 0x83, 0xb5, 0x24, 0x3d, 0x44, 0xf8, 0x4d, 0x58, 0x24, + 0x96, 0xe5, 0x53, 0xc6, 0xc6, 0xaa, 0xed, 0x87, 0x92, 0xc7, 0x1c, 0x30, 0xc7, 0x76, 0x96, 0x9b, + 0x7a, 0x67, 0xb7, 0xbe, 0x0f, 0x2b, 0xa9, 0x3b, 0x1d, 0x97, 0xa0, 0xf0, 0xbe, 0xe7, 0xd2, 0xea, + 0x05, 0x5c, 0x05, 0x6d, 0xcf, 0x76, 0x89, 0xdf, 0xff, 0x90, 0xb6, 0x02, 0xcf, 0xaf, 0x5a, 0x78, + 0x05, 0xca, 0xef, 0x38, 0x1e, 0x09, 0x42, 0x02, 0xdd, 0xf9, 0x74, 0x0d, 0x2a, 0xef, 0x09, 0x31, + 0x75, 0xea, 0x3f, 0xb1, 0x5b, 0x14, 0x37, 0xa0, 0x9a, 0x6e, 0x40, 0xe3, 0xd7, 0x95, 0x0a, 0xcb, + 0xe8, 0x53, 0xeb, 0xe3, 0x80, 0x1b, 0x17, 0xf0, 0xc7, 0xb0, 0x9c, 0xec, 0x1c, 0x63, 0xb5, 0x7f, + 0x2a, 0xdb, 0xcb, 0x93, 0x16, 0x6f, 0x40, 0x25, 0xd1, 0x08, 0xc6, 0x37, 0x95, 0x6b, 0xab, 0x9a, + 0xc5, 0xfa, 0x75, 0x25, 0x6b, 0xbc, 0x97, 0x2b, 0xd1, 0x27, 0xfb, 0x76, 0x19, 0xe8, 0x95, 0xcd, + 0xbd, 0x49, 0xe8, 0x09, 0x5c, 0x1c, 0x69, 0xc3, 0xe1, 0x37, 0x94, 0xeb, 0x67, 0xb5, 0xeb, 0x26, + 0x89, 0x38, 0x01, 0x3c, 0xda, 0x2e, 0xc5, 0x77, 0xd4, 0x27, 0x90, 0xd5, 0x0d, 0xd6, 0xb7, 0xa7, + 0xe6, 0x8f, 0x14, 0xf7, 0x0b, 0x04, 0x97, 0x32, 0x7a, 0x67, 0x78, 0x57, 0xb9, 0xdc, 0xf8, 0x06, + 0xa0, 0xfe, 0xd6, 0xe9, 0x26, 0x45, 0x40, 0x5c, 0x58, 0x49, 0x75, 0xb3, 0xf0, 0x6d, 0xe5, 0x52, + 0xea, 0xc6, 0x9a, 0xfe, 0xfa, 0x74, 0xcc, 0x91, 0xbc, 0x87, 0xb0, 0x92, 0xea, 0x60, 0x65, 0xc8, + 0x53, 0xf7, 0xb9, 0x26, 0x1d, 0xe8, 0x47, 0x50, 0x49, 0xb4, 0x9a, 0x32, 0x2c, 0x5e, 0xd5, 0x8e, + 0x9a, 0xb4, 0xf4, 0x43, 0xd0, 0xe2, 0x1d, 0x21, 0xbc, 0x95, 0xe5, 0x4b, 0x23, 0x0b, 0x9f, 0xc6, + 0x95, 0x86, 0xc5, 0xe4, 0x31, 0xae, 0x34, 0x52, 0x23, 0x9f, 0xde, 0x95, 0x62, 0xeb, 0x8f, 0x75, + 0xa5, 0x53, 0x8b, 0xf8, 0x04, 0xc1, 0x86, 0xba, 0xa1, 0x80, 0x77, 0xb2, 0x6c, 0x33, 0xbb, 0x75, + 0xa2, 0xef, 0x9e, 0x6a, 0x4e, 0xa4, 0xc5, 0xc7, 0xb0, 0x9c, 0x2c, 0xc9, 0x67, 0x68, 0x51, 0xd9, + 0x69, 0xd0, 0x6f, 0x4f, 0xc5, 0x1b, 0x09, 0xfb, 0x31, 0x94, 0x63, 0xe5, 0x52, 0xfc, 0xda, 0x18, + 0x3b, 0x8e, 0x57, 0x3e, 0x26, 0x69, 0xb2, 0x0d, 0x95, 0x44, 0x89, 0x2c, 0xcb, 0x86, 0x15, 0x95, + 0x4b, 0xfd, 0xd6, 0x34, 0xac, 0xd1, 0x06, 0xda, 0x50, 0x49, 0x14, 0x87, 0x32, 0x24, 0xa9, 0x6a, + 0x61, 0x19, 0x92, 0x94, 0xb5, 0x26, 0xe3, 0x02, 0xfe, 0x00, 0x96, 0xa2, 0x02, 0x10, 0xbe, 0x91, + 0xe9, 0x93, 0xa7, 0x51, 0x53, 0x1d, 0x8a, 0xb2, 0x18, 0x81, 0x8d, 0x8c, 0x4a, 0x5f, 0xac, 0x52, + 0xa3, 0x7f, 0x6d, 0x2c, 0x4f, 0x84, 0xd3, 0x84, 0xa2, 0x7c, 0x4a, 0x66, 0x2c, 0x9a, 0x78, 0xa1, + 0xeb, 0xe3, 0x79, 0xc4, 0x5b, 0xd4, 0xb8, 0x80, 0x0f, 0x61, 0x41, 0xbc, 0x21, 0xb1, 0x3a, 0x0e, + 0xc4, 0xdf, 0x97, 0x93, 0xf6, 0xfc, 0x4b, 0x04, 0xb5, 0xac, 0x47, 0x02, 0xce, 0xbc, 0x02, 0xc6, + 0xbd, 0x74, 0xf4, 0xbb, 0xa7, 0x9c, 0x15, 0xa9, 0xea, 0x19, 0xac, 0x2a, 0x52, 0x53, 0xbc, 0x9d, + 0xb5, 0x5e, 0x46, 0x56, 0xad, 0xbf, 0x39, 0xfd, 0x84, 0x48, 0x36, 0x05, 0x2d, 0x9e, 0x6d, 0x66, + 0xc4, 0x62, 0x45, 0xa2, 0xaa, 0xdf, 0x9c, 0x82, 0x73, 0x20, 0x66, 0xa7, 0x07, 0xda, 0x91, 0xef, + 0x3d, 0xed, 0x0f, 0xb2, 0xc1, 0xaf, 0x46, 0xec, 0xde, 0xdd, 0x9f, 0xee, 0x1e, 0xdb, 0x41, 0xbb, + 0xd7, 0xe4, 0xe7, 0xbf, 0x2d, 0x79, 0xdf, 0xb0, 0xbd, 0xf0, 0x6b, 0xdb, 0x76, 0x03, 0xea, 0xbb, + 0xc4, 0xd9, 0x16, 0x6b, 0x85, 0xd4, 0x6e, 0xb3, 0x59, 0x14, 0xe3, 0xdd, 0xff, 0x07, 0x00, 0x00, + 0xff, 0xff, 0x97, 0x7b, 0xe8, 0xa8, 0x75, 0x29, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used.