Make SearchResults and QueryResults return collectionID (#15377)

* Make SearchResults and QueryResults return collectionID

Signed-off-by: Filipe Caixeta <filipecaixeta@gmail.com>

* add return collection name from QueryRequest and SearchRequest

Signed-off-by: Filipe Caixeta <filipecaixeta@gmail.com>

* remove comment

Signed-off-by: Filipe Caixeta <filipecaixeta@gmail.com>
pull/15422/head
Filipe Caixeta 2022-01-27 11:55:41 -03:00 committed by GitHub
parent a62e2ef05f
commit dee1961b4d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 1064 additions and 638 deletions

File diff suppressed because it is too large Load Diff

View File

@ -2032,6 +2032,7 @@ class DescribeCollectionResponse :
kPhysicalChannelNamesFieldNumber = 5, kPhysicalChannelNamesFieldNumber = 5,
kAliasesFieldNumber = 9, kAliasesFieldNumber = 9,
kStartPositionsFieldNumber = 10, kStartPositionsFieldNumber = 10,
kCollectionNameFieldNumber = 12,
kStatusFieldNumber = 1, kStatusFieldNumber = 1,
kSchemaFieldNumber = 2, kSchemaFieldNumber = 2,
kCollectionIDFieldNumber = 3, kCollectionIDFieldNumber = 3,
@ -2102,6 +2103,17 @@ class DescribeCollectionResponse :
const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyDataPair >& const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyDataPair >&
start_positions() const; start_positions() const;
// string collection_name = 12;
void clear_collection_name();
const std::string& collection_name() const;
void set_collection_name(const std::string& value);
void set_collection_name(std::string&& value);
void set_collection_name(const char* value);
void set_collection_name(const char* value, size_t size);
std::string* mutable_collection_name();
std::string* release_collection_name();
void set_allocated_collection_name(std::string* collection_name);
// .milvus.proto.common.Status status = 1; // .milvus.proto.common.Status status = 1;
bool has_status() const; bool has_status() const;
void clear_status(); void clear_status();
@ -2152,6 +2164,7 @@ class DescribeCollectionResponse :
::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> physical_channel_names_; ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> physical_channel_names_;
::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> aliases_; ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> aliases_;
::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyDataPair > start_positions_; ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyDataPair > start_positions_;
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr collection_name_;
::milvus::proto::common::Status* status_; ::milvus::proto::common::Status* status_;
::milvus::proto::schema::CollectionSchema* schema_; ::milvus::proto::schema::CollectionSchema* schema_;
::PROTOBUF_NAMESPACE_ID::int64 collectionid_; ::PROTOBUF_NAMESPACE_ID::int64 collectionid_;
@ -8390,9 +8403,21 @@ class SearchResults :
// accessors ------------------------------------------------------- // accessors -------------------------------------------------------
enum : int { enum : int {
kCollectionNameFieldNumber = 3,
kStatusFieldNumber = 1, kStatusFieldNumber = 1,
kResultsFieldNumber = 2, kResultsFieldNumber = 2,
}; };
// string collection_name = 3;
void clear_collection_name();
const std::string& collection_name() const;
void set_collection_name(const std::string& value);
void set_collection_name(std::string&& value);
void set_collection_name(const char* value);
void set_collection_name(const char* value, size_t size);
std::string* mutable_collection_name();
std::string* release_collection_name();
void set_allocated_collection_name(std::string* collection_name);
// .milvus.proto.common.Status status = 1; // .milvus.proto.common.Status status = 1;
bool has_status() const; bool has_status() const;
void clear_status(); void clear_status();
@ -8414,6 +8439,7 @@ class SearchResults :
class _Internal; class _Internal;
::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_; ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr collection_name_;
::milvus::proto::common::Status* status_; ::milvus::proto::common::Status* status_;
::milvus::proto::schema::SearchResultData* results_; ::milvus::proto::schema::SearchResultData* results_;
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
@ -9121,6 +9147,7 @@ class QueryResults :
enum : int { enum : int {
kFieldsDataFieldNumber = 2, kFieldsDataFieldNumber = 2,
kCollectionNameFieldNumber = 3,
kStatusFieldNumber = 1, kStatusFieldNumber = 1,
}; };
// repeated .milvus.proto.schema.FieldData fields_data = 2; // repeated .milvus.proto.schema.FieldData fields_data = 2;
@ -9134,6 +9161,17 @@ class QueryResults :
const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::schema::FieldData >& const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::schema::FieldData >&
fields_data() const; fields_data() const;
// string collection_name = 3;
void clear_collection_name();
const std::string& collection_name() const;
void set_collection_name(const std::string& value);
void set_collection_name(std::string&& value);
void set_collection_name(const char* value);
void set_collection_name(const char* value, size_t size);
std::string* mutable_collection_name();
std::string* release_collection_name();
void set_allocated_collection_name(std::string* collection_name);
// .milvus.proto.common.Status status = 1; // .milvus.proto.common.Status status = 1;
bool has_status() const; bool has_status() const;
void clear_status(); void clear_status();
@ -9148,6 +9186,7 @@ class QueryResults :
::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_; ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::schema::FieldData > fields_data_; ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::schema::FieldData > fields_data_;
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr collection_name_;
::milvus::proto::common::Status* status_; ::milvus::proto::common::Status* status_;
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
friend struct ::TableStruct_milvus_2eproto; friend struct ::TableStruct_milvus_2eproto;
@ -14931,6 +14970,57 @@ inline void DescribeCollectionResponse::set_consistency_level(::milvus::proto::c
// @@protoc_insertion_point(field_set:milvus.proto.milvus.DescribeCollectionResponse.consistency_level) // @@protoc_insertion_point(field_set:milvus.proto.milvus.DescribeCollectionResponse.consistency_level)
} }
// string collection_name = 12;
inline void DescribeCollectionResponse::clear_collection_name() {
collection_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline const std::string& DescribeCollectionResponse::collection_name() const {
// @@protoc_insertion_point(field_get:milvus.proto.milvus.DescribeCollectionResponse.collection_name)
return collection_name_.GetNoArena();
}
inline void DescribeCollectionResponse::set_collection_name(const std::string& value) {
collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
// @@protoc_insertion_point(field_set:milvus.proto.milvus.DescribeCollectionResponse.collection_name)
}
inline void DescribeCollectionResponse::set_collection_name(std::string&& value) {
collection_name_.SetNoArena(
&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
// @@protoc_insertion_point(field_set_rvalue:milvus.proto.milvus.DescribeCollectionResponse.collection_name)
}
inline void DescribeCollectionResponse::set_collection_name(const char* value) {
GOOGLE_DCHECK(value != nullptr);
collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
// @@protoc_insertion_point(field_set_char:milvus.proto.milvus.DescribeCollectionResponse.collection_name)
}
inline void DescribeCollectionResponse::set_collection_name(const char* value, size_t size) {
collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
::std::string(reinterpret_cast<const char*>(value), size));
// @@protoc_insertion_point(field_set_pointer:milvus.proto.milvus.DescribeCollectionResponse.collection_name)
}
inline std::string* DescribeCollectionResponse::mutable_collection_name() {
// @@protoc_insertion_point(field_mutable:milvus.proto.milvus.DescribeCollectionResponse.collection_name)
return collection_name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline std::string* DescribeCollectionResponse::release_collection_name() {
// @@protoc_insertion_point(field_release:milvus.proto.milvus.DescribeCollectionResponse.collection_name)
return collection_name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline void DescribeCollectionResponse::set_allocated_collection_name(std::string* collection_name) {
if (collection_name != nullptr) {
} else {
}
collection_name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), collection_name);
// @@protoc_insertion_point(field_set_allocated:milvus.proto.milvus.DescribeCollectionResponse.collection_name)
}
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// LoadCollectionRequest // LoadCollectionRequest
@ -21300,6 +21390,57 @@ inline void SearchResults::set_allocated_results(::milvus::proto::schema::Search
// @@protoc_insertion_point(field_set_allocated:milvus.proto.milvus.SearchResults.results) // @@protoc_insertion_point(field_set_allocated:milvus.proto.milvus.SearchResults.results)
} }
// string collection_name = 3;
inline void SearchResults::clear_collection_name() {
collection_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline const std::string& SearchResults::collection_name() const {
// @@protoc_insertion_point(field_get:milvus.proto.milvus.SearchResults.collection_name)
return collection_name_.GetNoArena();
}
inline void SearchResults::set_collection_name(const std::string& value) {
collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
// @@protoc_insertion_point(field_set:milvus.proto.milvus.SearchResults.collection_name)
}
inline void SearchResults::set_collection_name(std::string&& value) {
collection_name_.SetNoArena(
&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
// @@protoc_insertion_point(field_set_rvalue:milvus.proto.milvus.SearchResults.collection_name)
}
inline void SearchResults::set_collection_name(const char* value) {
GOOGLE_DCHECK(value != nullptr);
collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
// @@protoc_insertion_point(field_set_char:milvus.proto.milvus.SearchResults.collection_name)
}
inline void SearchResults::set_collection_name(const char* value, size_t size) {
collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
::std::string(reinterpret_cast<const char*>(value), size));
// @@protoc_insertion_point(field_set_pointer:milvus.proto.milvus.SearchResults.collection_name)
}
inline std::string* SearchResults::mutable_collection_name() {
// @@protoc_insertion_point(field_mutable:milvus.proto.milvus.SearchResults.collection_name)
return collection_name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline std::string* SearchResults::release_collection_name() {
// @@protoc_insertion_point(field_release:milvus.proto.milvus.SearchResults.collection_name)
return collection_name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline void SearchResults::set_allocated_collection_name(std::string* collection_name) {
if (collection_name != nullptr) {
} else {
}
collection_name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), collection_name);
// @@protoc_insertion_point(field_set_allocated:milvus.proto.milvus.SearchResults.collection_name)
}
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// FlushRequest // FlushRequest
@ -22018,6 +22159,57 @@ QueryResults::fields_data() const {
return fields_data_; return fields_data_;
} }
// string collection_name = 3;
inline void QueryResults::clear_collection_name() {
collection_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline const std::string& QueryResults::collection_name() const {
// @@protoc_insertion_point(field_get:milvus.proto.milvus.QueryResults.collection_name)
return collection_name_.GetNoArena();
}
inline void QueryResults::set_collection_name(const std::string& value) {
collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
// @@protoc_insertion_point(field_set:milvus.proto.milvus.QueryResults.collection_name)
}
inline void QueryResults::set_collection_name(std::string&& value) {
collection_name_.SetNoArena(
&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
// @@protoc_insertion_point(field_set_rvalue:milvus.proto.milvus.QueryResults.collection_name)
}
inline void QueryResults::set_collection_name(const char* value) {
GOOGLE_DCHECK(value != nullptr);
collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
// @@protoc_insertion_point(field_set_char:milvus.proto.milvus.QueryResults.collection_name)
}
inline void QueryResults::set_collection_name(const char* value, size_t size) {
collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
::std::string(reinterpret_cast<const char*>(value), size));
// @@protoc_insertion_point(field_set_pointer:milvus.proto.milvus.QueryResults.collection_name)
}
inline std::string* QueryResults::mutable_collection_name() {
// @@protoc_insertion_point(field_mutable:milvus.proto.milvus.QueryResults.collection_name)
return collection_name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline std::string* QueryResults::release_collection_name() {
// @@protoc_insertion_point(field_release:milvus.proto.milvus.QueryResults.collection_name)
return collection_name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline void QueryResults::set_allocated_collection_name(std::string* collection_name) {
if (collection_name != nullptr) {
} else {
}
collection_name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), collection_name);
// @@protoc_insertion_point(field_set_allocated:milvus.proto.milvus.QueryResults.collection_name)
}
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// VectorIDs // VectorIDs

View File

@ -176,6 +176,8 @@ message DescribeCollectionResponse {
repeated common.KeyDataPair start_positions = 10; repeated common.KeyDataPair start_positions = 10;
// The consistency level that the collection used, modification is not supported now. // The consistency level that the collection used, modification is not supported now.
common.ConsistencyLevel consistency_level = 11; common.ConsistencyLevel consistency_level = 11;
// The collection name
string collection_name = 12;
} }
/** /**
@ -594,6 +596,7 @@ message Hits {
message SearchResults { message SearchResults {
common.Status status = 1; common.Status status = 1;
schema.SearchResultData results = 2; schema.SearchResultData results = 2;
string collection_name = 3;
} }
message FlushRequest { message FlushRequest {
@ -622,6 +625,7 @@ message QueryRequest {
message QueryResults { message QueryResults {
common.Status status = 1; common.Status status = 1;
repeated schema.FieldData fields_data = 2; repeated schema.FieldData fields_data = 2;
string collection_name = 3;
} }
message VectorIDs { message VectorIDs {

View File

@ -678,6 +678,8 @@ type DescribeCollectionResponse struct {
StartPositions []*commonpb.KeyDataPair `protobuf:"bytes,10,rep,name=start_positions,json=startPositions,proto3" json:"start_positions,omitempty"` StartPositions []*commonpb.KeyDataPair `protobuf:"bytes,10,rep,name=start_positions,json=startPositions,proto3" json:"start_positions,omitempty"`
// The consistency level that the collection used, modification is not supported now. // The consistency level that the collection used, modification is not supported now.
ConsistencyLevel commonpb.ConsistencyLevel `protobuf:"varint,11,opt,name=consistency_level,json=consistencyLevel,proto3,enum=milvus.proto.common.ConsistencyLevel" json:"consistency_level,omitempty"` ConsistencyLevel commonpb.ConsistencyLevel `protobuf:"varint,11,opt,name=consistency_level,json=consistencyLevel,proto3,enum=milvus.proto.common.ConsistencyLevel" json:"consistency_level,omitempty"`
// The collection name
CollectionName string `protobuf:"bytes,12,opt,name=collection_name,json=collectionName,proto3" json:"collection_name,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
@ -785,6 +787,13 @@ func (m *DescribeCollectionResponse) GetConsistencyLevel() commonpb.ConsistencyL
return commonpb.ConsistencyLevel_Strong return commonpb.ConsistencyLevel_Strong
} }
func (m *DescribeCollectionResponse) GetCollectionName() string {
if m != nil {
return m.CollectionName
}
return ""
}
//* //*
// Load collection data into query nodes, then you can do vector search on this collection. // Load collection data into query nodes, then you can do vector search on this collection.
type LoadCollectionRequest struct { type LoadCollectionRequest struct {
@ -3196,6 +3205,7 @@ func (m *Hits) GetScores() []float32 {
type SearchResults struct { type SearchResults struct {
Status *commonpb.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` Status *commonpb.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
Results *schemapb.SearchResultData `protobuf:"bytes,2,opt,name=results,proto3" json:"results,omitempty"` Results *schemapb.SearchResultData `protobuf:"bytes,2,opt,name=results,proto3" json:"results,omitempty"`
CollectionName string `protobuf:"bytes,3,opt,name=collection_name,json=collectionName,proto3" json:"collection_name,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
@ -3240,6 +3250,13 @@ func (m *SearchResults) GetResults() *schemapb.SearchResultData {
return nil return nil
} }
func (m *SearchResults) GetCollectionName() string {
if m != nil {
return m.CollectionName
}
return ""
}
type FlushRequest struct { type FlushRequest struct {
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"` Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
DbName string `protobuf:"bytes,2,opt,name=db_name,json=dbName,proto3" json:"db_name,omitempty"` DbName string `protobuf:"bytes,2,opt,name=db_name,json=dbName,proto3" json:"db_name,omitempty"`
@ -3448,6 +3465,7 @@ func (m *QueryRequest) GetGuaranteeTimestamp() uint64 {
type QueryResults struct { type QueryResults struct {
Status *commonpb.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` Status *commonpb.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
FieldsData []*schemapb.FieldData `protobuf:"bytes,2,rep,name=fields_data,json=fieldsData,proto3" json:"fields_data,omitempty"` FieldsData []*schemapb.FieldData `protobuf:"bytes,2,rep,name=fields_data,json=fieldsData,proto3" json:"fields_data,omitempty"`
CollectionName string `protobuf:"bytes,3,opt,name=collection_name,json=collectionName,proto3" json:"collection_name,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
@ -3492,6 +3510,13 @@ func (m *QueryResults) GetFieldsData() []*schemapb.FieldData {
return nil return nil
} }
func (m *QueryResults) GetCollectionName() string {
if m != nil {
return m.CollectionName
}
return ""
}
type VectorIDs struct { type VectorIDs struct {
CollectionName string `protobuf:"bytes,1,opt,name=collection_name,json=collectionName,proto3" json:"collection_name,omitempty"` CollectionName string `protobuf:"bytes,1,opt,name=collection_name,json=collectionName,proto3" json:"collection_name,omitempty"`
FieldName string `protobuf:"bytes,2,opt,name=field_name,json=fieldName,proto3" json:"field_name,omitempty"` FieldName string `protobuf:"bytes,2,opt,name=field_name,json=fieldName,proto3" json:"field_name,omitempty"`
@ -5005,232 +5030,233 @@ func init() {
func init() { proto.RegisterFile("milvus.proto", fileDescriptor_02345ba45cc0e303) } func init() { proto.RegisterFile("milvus.proto", fileDescriptor_02345ba45cc0e303) }
var fileDescriptor_02345ba45cc0e303 = []byte{ var fileDescriptor_02345ba45cc0e303 = []byte{
// 3594 bytes of a gzipped FileDescriptorProto // 3609 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x3b, 0x4b, 0x73, 0x1b, 0xc7, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x3b, 0x4b, 0x73, 0x1b, 0xc7,
0xd1, 0x5c, 0x80, 0x78, 0x35, 0x00, 0x12, 0x1c, 0x52, 0x14, 0x04, 0xbd, 0xa8, 0xb5, 0x65, 0x51, 0xd1, 0x5c, 0x80, 0x78, 0x35, 0x00, 0x12, 0x1c, 0x52, 0x14, 0x04, 0xbd, 0xa8, 0xb5, 0x65, 0x51,
0x92, 0x25, 0x59, 0x94, 0x5f, 0x9f, 0xfc, 0x25, 0xb6, 0x24, 0xc6, 0x12, 0xcb, 0x92, 0x42, 0x2f, 0x92, 0x25, 0x59, 0x94, 0x5f, 0x9f, 0xfc, 0x7d, 0x9f, 0x2d, 0x89, 0xb1, 0xc4, 0xb2, 0xa4, 0xd0,
0x6d, 0xa7, 0x1c, 0x97, 0x0a, 0xb5, 0xc4, 0x0e, 0xc1, 0x2d, 0x2d, 0x76, 0xe1, 0x9d, 0x81, 0x24, 0x4b, 0xdb, 0x29, 0xc7, 0xa5, 0x42, 0x2d, 0xb1, 0x43, 0x70, 0x4b, 0x8b, 0x5d, 0x78, 0x67, 0x20,
0xfa, 0x94, 0x2a, 0xc7, 0x49, 0xa5, 0xec, 0xd8, 0x95, 0x4a, 0x2a, 0x8f, 0x43, 0x72, 0xc8, 0xe3, 0x89, 0x3e, 0xb9, 0xca, 0x79, 0x54, 0xca, 0x8e, 0x5d, 0xa9, 0xa4, 0xf2, 0x38, 0x24, 0x87, 0x3c,
0x90, 0x5b, 0x1c, 0xa7, 0x92, 0x54, 0x2e, 0xc9, 0x21, 0x87, 0x1c, 0x52, 0x95, 0xc7, 0xc5, 0x87, 0x0e, 0x39, 0x24, 0x15, 0xc7, 0xa9, 0x24, 0x95, 0x4b, 0x72, 0xc8, 0x21, 0x87, 0x54, 0xe5, 0x71,
0x5c, 0xf2, 0x07, 0xfc, 0x0f, 0x72, 0x48, 0xcd, 0x63, 0x17, 0xbb, 0x8b, 0x59, 0x10, 0x14, 0xac, 0xc9, 0x21, 0x97, 0xfc, 0x01, 0xff, 0x83, 0x1c, 0x52, 0xf3, 0xd8, 0xc5, 0xee, 0x62, 0x16, 0x04,
0x90, 0xbc, 0xed, 0xf4, 0x74, 0xf7, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0x42, 0xa5, 0x63, 0x05, 0x2b, 0x24, 0x6f, 0x3b, 0x3d, 0xdd, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0xbd, 0x50,
0x3b, 0xf7, 0x7a, 0xe4, 0x7c, 0xd7, 0xf7, 0xa8, 0x87, 0x66, 0xa3, 0xad, 0xf3, 0xa2, 0xd1, 0xa8, 0xe9, 0xd8, 0xce, 0xbd, 0x1e, 0x39, 0xdf, 0xf5, 0x3d, 0xea, 0xa1, 0xd9, 0x68, 0xeb, 0xbc, 0x68,
0xb4, 0xbc, 0x4e, 0xc7, 0x73, 0x05, 0xb0, 0x51, 0x21, 0xad, 0x4d, 0xdc, 0x31, 0x45, 0x4b, 0xff, 0x34, 0x2a, 0x2d, 0xaf, 0xd3, 0xf1, 0x5c, 0x01, 0x6c, 0x54, 0x48, 0x6b, 0x13, 0x77, 0x4c, 0xd1,
0x89, 0x06, 0xe8, 0x9a, 0x8f, 0x4d, 0x8a, 0xaf, 0x38, 0xb6, 0x49, 0x0c, 0xfc, 0x76, 0x0f, 0x13, 0xd2, 0x7f, 0xa0, 0x01, 0xba, 0xe6, 0x63, 0x93, 0xe2, 0x2b, 0x8e, 0x6d, 0x12, 0x03, 0xbf, 0xdd,
0x8a, 0x9e, 0x82, 0xc9, 0x75, 0x93, 0xe0, 0xba, 0xb6, 0xa0, 0x2d, 0x96, 0x97, 0x8e, 0x9c, 0x8f, 0xc3, 0x84, 0xa2, 0xa7, 0x60, 0x72, 0xdd, 0x24, 0xb8, 0xae, 0x2d, 0x68, 0x8b, 0xe5, 0xa5, 0x23,
0xb1, 0x95, 0xec, 0x6e, 0x91, 0xf6, 0x55, 0x93, 0x60, 0x83, 0x63, 0xa2, 0x83, 0x50, 0xb0, 0xd6, 0xe7, 0x63, 0x6c, 0x25, 0xbb, 0x5b, 0xa4, 0x7d, 0xd5, 0x24, 0xd8, 0xe0, 0x98, 0xe8, 0x20, 0x14,
0x9b, 0xae, 0xd9, 0xc1, 0xf5, 0xcc, 0x82, 0xb6, 0x58, 0x32, 0xf2, 0xd6, 0xfa, 0x6d, 0xb3, 0x83, 0xac, 0xf5, 0xa6, 0x6b, 0x76, 0x70, 0x3d, 0xb3, 0xa0, 0x2d, 0x96, 0x8c, 0xbc, 0xb5, 0x7e, 0xdb,
0xd1, 0x29, 0x98, 0x6e, 0x79, 0x8e, 0x83, 0x5b, 0xd4, 0xf6, 0x5c, 0x81, 0x90, 0xe5, 0x08, 0x53, 0xec, 0x60, 0x74, 0x0a, 0xa6, 0x5b, 0x9e, 0xe3, 0xe0, 0x16, 0xb5, 0x3d, 0x57, 0x20, 0x64, 0x39,
0x7d, 0x30, 0x47, 0x9c, 0x83, 0x9c, 0xc9, 0x64, 0xa8, 0x4f, 0xf2, 0x6e, 0xd1, 0xd0, 0x09, 0xd4, 0xc2, 0x54, 0x1f, 0xcc, 0x11, 0xe7, 0x20, 0x67, 0x32, 0x19, 0xea, 0x93, 0xbc, 0x5b, 0x34, 0x74,
0x96, 0x7d, 0xaf, 0xfb, 0xa8, 0xa4, 0x0b, 0x07, 0xcd, 0x46, 0x07, 0xfd, 0xb1, 0x06, 0x33, 0x57, 0x02, 0xb5, 0x65, 0xdf, 0xeb, 0x3e, 0x2a, 0xe9, 0xc2, 0x41, 0xb3, 0xd1, 0x41, 0xbf, 0xaf, 0xc1,
0x1c, 0x8a, 0xfd, 0x3d, 0xaa, 0x94, 0x1f, 0x66, 0xe0, 0xa0, 0x58, 0xb5, 0x6b, 0x21, 0xfa, 0x6e, 0xcc, 0x15, 0x87, 0x62, 0x7f, 0x8f, 0x2a, 0xe5, 0xbb, 0x19, 0x38, 0x28, 0x56, 0xed, 0x5a, 0x88,
0x4a, 0x39, 0x0f, 0x79, 0x61, 0x55, 0x5c, 0xcc, 0x8a, 0x21, 0x5b, 0xe8, 0x28, 0x00, 0xd9, 0x34, 0xbe, 0x9b, 0x52, 0xce, 0x43, 0x5e, 0x58, 0x15, 0x17, 0xb3, 0x62, 0xc8, 0x16, 0x3a, 0x0a, 0x40,
0x7d, 0x8b, 0x34, 0xdd, 0x5e, 0xa7, 0x9e, 0x5b, 0xd0, 0x16, 0x73, 0x46, 0x49, 0x40, 0x6e, 0xf7, 0x36, 0x4d, 0xdf, 0x22, 0x4d, 0xb7, 0xd7, 0xa9, 0xe7, 0x16, 0xb4, 0xc5, 0x9c, 0x51, 0x12, 0x90,
0x3a, 0xc8, 0x80, 0x99, 0x96, 0xe7, 0x12, 0x9b, 0x50, 0xec, 0xb6, 0xb6, 0x9a, 0x0e, 0xbe, 0x87, 0xdb, 0xbd, 0x0e, 0x32, 0x60, 0xa6, 0xe5, 0xb9, 0xc4, 0x26, 0x14, 0xbb, 0xad, 0xad, 0xa6, 0x83,
0x9d, 0x7a, 0x7e, 0x41, 0x5b, 0x9c, 0x5a, 0x3a, 0xa9, 0x94, 0xfb, 0x5a, 0x1f, 0xfb, 0x26, 0x43, 0xef, 0x61, 0xa7, 0x9e, 0x5f, 0xd0, 0x16, 0xa7, 0x96, 0x4e, 0x2a, 0xe5, 0xbe, 0xd6, 0xc7, 0xbe,
0x36, 0x6a, 0xad, 0x04, 0x44, 0x7f, 0x5f, 0x83, 0x03, 0xcc, 0x60, 0xf6, 0x84, 0x62, 0xf4, 0x5f, 0xc9, 0x90, 0x8d, 0x5a, 0x2b, 0x01, 0xd1, 0xdf, 0xd7, 0xe0, 0x00, 0x33, 0x98, 0x3d, 0xa1, 0x18,
0x6a, 0x30, 0x77, 0xc3, 0x24, 0x7b, 0x63, 0x95, 0x8e, 0x02, 0x50, 0xbb, 0x83, 0x9b, 0x84, 0x9a, 0xfd, 0xa7, 0x1a, 0xcc, 0xdd, 0x30, 0xc9, 0xde, 0x58, 0xa5, 0xa3, 0x00, 0xd4, 0xee, 0xe0, 0x26,
0x9d, 0x2e, 0x5f, 0xa9, 0x49, 0xa3, 0xc4, 0x20, 0x6b, 0x0c, 0xa0, 0xbf, 0x09, 0x95, 0xab, 0x9e, 0xa1, 0x66, 0xa7, 0xcb, 0x57, 0x6a, 0xd2, 0x28, 0x31, 0xc8, 0x1a, 0x03, 0xe8, 0x6f, 0x42, 0xe5,
0xe7, 0x18, 0x98, 0x74, 0x3d, 0x97, 0x60, 0x74, 0x09, 0xf2, 0x84, 0x9a, 0xb4, 0x47, 0xa4, 0x90, 0xaa, 0xe7, 0x39, 0x06, 0x26, 0x5d, 0xcf, 0x25, 0x18, 0x5d, 0x82, 0x3c, 0xa1, 0x26, 0xed, 0x11,
0x87, 0x95, 0x42, 0xae, 0x71, 0x14, 0x43, 0xa2, 0x32, 0x7b, 0xbd, 0x67, 0x3a, 0x3d, 0x21, 0x63, 0x29, 0xe4, 0x61, 0xa5, 0x90, 0x6b, 0x1c, 0xc5, 0x90, 0xa8, 0xcc, 0x5e, 0xef, 0x99, 0x4e, 0x4f,
0xd1, 0x10, 0x0d, 0xfd, 0x2d, 0x98, 0x5a, 0xa3, 0xbe, 0xed, 0xb6, 0x3f, 0x47, 0xe6, 0xa5, 0x80, 0xc8, 0x58, 0x34, 0x44, 0x43, 0x7f, 0x0b, 0xa6, 0xd6, 0xa8, 0x6f, 0xbb, 0xed, 0xcf, 0x90, 0x79,
0xf9, 0x3f, 0x35, 0x38, 0xb4, 0x8c, 0x49, 0xcb, 0xb7, 0xd7, 0xf7, 0xc8, 0x76, 0xd0, 0xa1, 0xd2, 0x29, 0x60, 0xfe, 0x77, 0x0d, 0x0e, 0x2d, 0x63, 0xd2, 0xf2, 0xed, 0xf5, 0x3d, 0xb2, 0x1d, 0x74,
0x87, 0xac, 0x2c, 0x73, 0x55, 0x67, 0x8d, 0x18, 0x2c, 0xb1, 0x18, 0xb9, 0xe4, 0x62, 0x7c, 0x3a, 0xa8, 0xf4, 0x21, 0x2b, 0xcb, 0x5c, 0xd5, 0x59, 0x23, 0x06, 0x4b, 0x2c, 0x46, 0x2e, 0xb9, 0x18,
0x09, 0x0d, 0xd5, 0xa4, 0xc6, 0x51, 0xdf, 0x17, 0xc2, 0x5d, 0x9a, 0xe1, 0x44, 0x89, 0x3d, 0x26, 0xef, 0xe6, 0xa0, 0xa1, 0x9a, 0xd4, 0x38, 0xea, 0xfb, 0xbf, 0x70, 0x97, 0x66, 0x38, 0x51, 0x62,
0xcf, 0x85, 0xfe, 0x68, 0x6b, 0x1c, 0x10, 0x6e, 0xe6, 0xe4, 0xac, 0xb2, 0x8a, 0x59, 0x2d, 0xc1, 0x8f, 0xc9, 0x73, 0xa1, 0x3f, 0xda, 0x1a, 0x07, 0x84, 0x9b, 0x39, 0x39, 0xab, 0xac, 0x62, 0x56,
0x81, 0x7b, 0xb6, 0x4f, 0x7b, 0xa6, 0xd3, 0x6c, 0x6d, 0x9a, 0xae, 0x8b, 0x1d, 0xae, 0x27, 0xe6, 0x4b, 0x70, 0xe0, 0x9e, 0xed, 0xd3, 0x9e, 0xe9, 0x34, 0x5b, 0x9b, 0xa6, 0xeb, 0x62, 0x87, 0xeb,
0xbe, 0xb2, 0x8b, 0x25, 0x63, 0x56, 0x76, 0x5e, 0x13, 0x7d, 0x4c, 0x59, 0x04, 0x3d, 0x0d, 0xf3, 0x89, 0xb9, 0xaf, 0xec, 0x62, 0xc9, 0x98, 0x95, 0x9d, 0xd7, 0x44, 0x1f, 0x53, 0x16, 0x41, 0x4f,
0xdd, 0xcd, 0x2d, 0x62, 0xb7, 0x06, 0x88, 0x72, 0x9c, 0x68, 0x2e, 0xe8, 0x8d, 0x51, 0x9d, 0x85, 0xc3, 0x7c, 0x77, 0x73, 0x8b, 0xd8, 0xad, 0x01, 0xa2, 0x1c, 0x27, 0x9a, 0x0b, 0x7a, 0x63, 0x54,
0x99, 0x16, 0xf7, 0x80, 0x56, 0x93, 0x69, 0x4d, 0xa8, 0x31, 0xcf, 0xd5, 0x58, 0x93, 0x1d, 0xaf, 0x67, 0x61, 0xa6, 0xc5, 0x3d, 0xa0, 0xd5, 0x64, 0x5a, 0x13, 0x6a, 0xcc, 0x73, 0x35, 0xd6, 0x64,
0x05, 0x70, 0x26, 0x56, 0x80, 0xdc, 0xa3, 0xad, 0x08, 0x41, 0x81, 0x13, 0xcc, 0xca, 0xce, 0xd7, 0xc7, 0x6b, 0x01, 0x9c, 0x89, 0x15, 0x20, 0xf7, 0x68, 0x2b, 0x42, 0x50, 0xe0, 0x04, 0xb3, 0xb2,
0x69, 0xab, 0x4f, 0x13, 0xf7, 0x5d, 0xc5, 0xa4, 0xef, 0xaa, 0x43, 0x81, 0xfb, 0x62, 0x4c, 0xea, 0xf3, 0x75, 0xda, 0xea, 0xd3, 0xc4, 0x7d, 0x57, 0x31, 0xe9, 0xbb, 0xea, 0x50, 0xe0, 0xbe, 0x18,
0x25, 0x2e, 0x66, 0xd0, 0x44, 0x2b, 0x30, 0x4d, 0xa8, 0xe9, 0xd3, 0x66, 0xd7, 0x23, 0x36, 0xd3, 0x93, 0x7a, 0x89, 0x8b, 0x19, 0x34, 0xd1, 0x0a, 0x4c, 0x13, 0x6a, 0xfa, 0xb4, 0xd9, 0xf5, 0x88,
0x0b, 0xa9, 0xc3, 0x42, 0x76, 0xb1, 0xbc, 0xb4, 0xa0, 0x5c, 0xa4, 0x57, 0xf0, 0xd6, 0xb2, 0x49, 0xcd, 0xf4, 0x42, 0xea, 0xb0, 0x90, 0x5d, 0x2c, 0x2f, 0x2d, 0x28, 0x17, 0xe9, 0x15, 0xbc, 0xb5,
0xcd, 0x55, 0xd3, 0xf6, 0x8d, 0x29, 0x4e, 0xb8, 0x1a, 0xd0, 0xa9, 0x1d, 0x64, 0x79, 0x7c, 0x07, 0x6c, 0x52, 0x73, 0xd5, 0xb4, 0x7d, 0x63, 0x8a, 0x13, 0xae, 0x06, 0x74, 0x6a, 0x07, 0x59, 0x1e,
0x79, 0xd3, 0x33, 0xad, 0xbd, 0xe1, 0x20, 0x3f, 0xd4, 0xa0, 0x6e, 0x60, 0x07, 0x9b, 0x64, 0x6f, 0xcb, 0x41, 0xaa, 0xac, 0xb8, 0xa2, 0xf4, 0x5d, 0xcc, 0x93, 0xde, 0xf4, 0x4c, 0x6b, 0x6f, 0x78,
0xec, 0x5d, 0xfd, 0x7b, 0x1a, 0x1c, 0xbb, 0x8e, 0x69, 0x64, 0x17, 0x50, 0x93, 0xda, 0x84, 0xda, 0xd2, 0x0f, 0x35, 0xa8, 0x1b, 0xd8, 0xc1, 0x26, 0xd9, 0x1b, 0x9b, 0x5c, 0xff, 0x96, 0x06, 0xc7,
0xad, 0xdd, 0x8c, 0x03, 0xf4, 0x8f, 0x34, 0x38, 0x9e, 0x2a, 0xd6, 0x38, 0x4e, 0xe1, 0x39, 0xc8, 0xae, 0x63, 0x1a, 0xd9, 0x2e, 0xd4, 0xa4, 0x36, 0xa1, 0x76, 0x6b, 0x37, 0x03, 0x06, 0xfd, 0x23,
0xb1, 0x2f, 0x52, 0xcf, 0x70, 0x1b, 0x3d, 0x91, 0x66, 0xa3, 0x6f, 0x30, 0x5f, 0xcb, 0x8d, 0x54, 0x0d, 0x8e, 0xa7, 0x8a, 0x35, 0x8e, 0xf7, 0x78, 0x0e, 0x72, 0xec, 0x8b, 0xd4, 0x33, 0xdc, 0x98,
0xe0, 0xeb, 0xff, 0xd6, 0x60, 0x7e, 0x6d, 0xd3, 0xbb, 0xdf, 0x17, 0xe9, 0x51, 0x28, 0x28, 0xee, 0x4f, 0xa4, 0x19, 0xf3, 0x1b, 0xcc, 0x29, 0x73, 0x6b, 0x16, 0xf8, 0xfa, 0xbf, 0x34, 0x98, 0x5f,
0x26, 0xb3, 0x09, 0x37, 0x89, 0x2e, 0xc2, 0x24, 0xdd, 0xea, 0x62, 0xee, 0x61, 0xa7, 0x96, 0x8e, 0xdb, 0xf4, 0xee, 0xf7, 0x45, 0x7a, 0x14, 0x0a, 0x8a, 0xfb, 0xd3, 0x6c, 0xc2, 0x9f, 0xa2, 0x8b,
0x9e, 0x57, 0x84, 0xbf, 0xe7, 0x99, 0x90, 0xaf, 0x6d, 0x75, 0xb1, 0xc1, 0x51, 0xd1, 0x69, 0xa8, 0x30, 0x49, 0xb7, 0xba, 0x98, 0xbb, 0xe2, 0xa9, 0xa5, 0xa3, 0xe7, 0x15, 0x71, 0xf2, 0x79, 0x26,
0x25, 0x54, 0x1e, 0x38, 0x9a, 0xe9, 0xb8, 0xce, 0x89, 0xfe, 0xfb, 0x0c, 0x1c, 0x1c, 0x98, 0xe2, 0xe4, 0x6b, 0x5b, 0x5d, 0x6c, 0x70, 0x54, 0x74, 0x1a, 0x6a, 0x09, 0x95, 0x07, 0x1e, 0x69, 0x3a,
0x38, 0xca, 0x56, 0x8d, 0x9d, 0x51, 0x8e, 0x8d, 0x4e, 0x42, 0xc4, 0x04, 0x9a, 0xb6, 0xc5, 0x22, 0xae, 0x73, 0xa2, 0xff, 0x36, 0x03, 0x07, 0x07, 0xa6, 0x38, 0x8e, 0xb2, 0x55, 0x63, 0x67, 0x94,
0xd4, 0xec, 0x62, 0xd6, 0xa8, 0x46, 0xfc, 0xad, 0x45, 0xd0, 0x39, 0x40, 0x03, 0x6e, 0x50, 0x78, 0x63, 0xa3, 0x93, 0x10, 0x31, 0x81, 0xa6, 0x6d, 0xb1, 0x50, 0x36, 0xbb, 0x98, 0x35, 0xaa, 0x11,
0xdb, 0x49, 0x63, 0x26, 0xe9, 0x07, 0xb9, 0xaf, 0x55, 0x3a, 0x42, 0xa1, 0x82, 0x49, 0x63, 0x4e, 0xc7, 0x6c, 0x11, 0x74, 0x0e, 0xd0, 0x80, 0xbf, 0x14, 0x6e, 0x79, 0xd2, 0x98, 0x49, 0x3a, 0x4c,
0xe1, 0x09, 0x09, 0xba, 0x08, 0x73, 0xb6, 0x7b, 0x0b, 0x77, 0x3c, 0x7f, 0xab, 0xd9, 0xc5, 0x7e, 0xee, 0x94, 0x95, 0x1e, 0x53, 0xa8, 0x60, 0xd2, 0x98, 0x53, 0xb8, 0x4c, 0x82, 0x2e, 0xc2, 0x9c,
0x0b, 0xbb, 0xd4, 0x6c, 0x63, 0x52, 0xcf, 0x73, 0x89, 0x66, 0x83, 0xbe, 0xd5, 0x7e, 0x97, 0xfe, 0xed, 0xde, 0xc2, 0x1d, 0xcf, 0xdf, 0x6a, 0x76, 0xb1, 0xdf, 0xc2, 0x2e, 0x35, 0xdb, 0x98, 0xd4,
0x89, 0x06, 0xf3, 0x22, 0x42, 0x5d, 0x35, 0x7d, 0x6a, 0xef, 0xf6, 0x89, 0x7c, 0x12, 0xa6, 0xba, 0xf3, 0x5c, 0xa2, 0xd9, 0xa0, 0x6f, 0xb5, 0xdf, 0xa5, 0x7f, 0xa2, 0xc1, 0xbc, 0x08, 0x65, 0x57,
0x81, 0x1c, 0x02, 0x4f, 0xc4, 0xd3, 0xd5, 0x10, 0xca, 0x77, 0xd9, 0xc7, 0x1a, 0xcc, 0xb1, 0xe0, 0x4d, 0x9f, 0xda, 0xbb, 0x7d, 0x74, 0x9f, 0x84, 0xa9, 0x6e, 0x20, 0x87, 0xc0, 0x13, 0x81, 0x77,
0x71, 0x3f, 0xc9, 0xfc, 0x2b, 0x0d, 0x66, 0x6f, 0x98, 0x64, 0x3f, 0x89, 0xfc, 0x1b, 0x79, 0x04, 0x35, 0x84, 0xf2, 0x5d, 0xf6, 0xb1, 0x06, 0x73, 0x2c, 0xca, 0xdc, 0x4f, 0x32, 0xff, 0x42, 0x83,
0x85, 0x32, 0xef, 0xea, 0x15, 0xeb, 0x14, 0x4c, 0xc7, 0x85, 0x0e, 0xa2, 0x95, 0xa9, 0x98, 0xd4, 0xd9, 0x1b, 0x26, 0xd9, 0x4f, 0x22, 0xff, 0x4a, 0x1e, 0x41, 0xa1, 0xcc, 0xbb, 0x7a, 0x17, 0x3b,
0x44, 0xff, 0x5d, 0xff, 0xac, 0xda, 0x67, 0x92, 0xff, 0x41, 0x83, 0xa3, 0xd7, 0x31, 0x0d, 0xa5, 0x05, 0xd3, 0x71, 0xa1, 0x83, 0xb0, 0x66, 0x2a, 0x26, 0x35, 0xd1, 0x7f, 0xd3, 0x3f, 0xab, 0xf6,
0xde, 0x13, 0x67, 0xda, 0xa8, 0xd6, 0xf2, 0xa1, 0x38, 0x91, 0x95, 0xc2, 0xef, 0xca, 0xc9, 0xf7, 0x99, 0xe4, 0xbf, 0xd3, 0xe0, 0xe8, 0x75, 0x4c, 0x43, 0xa9, 0xf7, 0xc4, 0x99, 0x36, 0xaa, 0xb5,
0x7e, 0x06, 0x0e, 0xb0, 0x63, 0x61, 0x6f, 0x18, 0xc1, 0x28, 0x97, 0x0d, 0x85, 0xa1, 0xe4, 0x54, 0x7c, 0x28, 0x4e, 0x64, 0xa5, 0xf0, 0xbb, 0x72, 0xf2, 0xbd, 0x9f, 0x81, 0x03, 0xec, 0x58, 0xd8,
0x86, 0x12, 0x9e, 0xa7, 0xf9, 0x91, 0xcf, 0x53, 0xfd, 0xd7, 0x19, 0x11, 0x07, 0x44, 0xb5, 0x31, 0x1b, 0x46, 0x30, 0xca, 0xad, 0x44, 0x61, 0x28, 0x39, 0x95, 0xa1, 0x84, 0xe7, 0x69, 0x7e, 0xe4,
0xce, 0xb2, 0x28, 0x64, 0xcd, 0x28, 0x65, 0xd5, 0xa1, 0x12, 0x42, 0x56, 0x96, 0x83, 0xf3, 0x31, 0xf3, 0x54, 0xff, 0x65, 0x46, 0xc4, 0x01, 0x51, 0x6d, 0x8c, 0xb3, 0x2c, 0x0a, 0x59, 0x33, 0x4a,
0x06, 0xdb, 0xb3, 0xc7, 0xe3, 0x07, 0x1a, 0xcc, 0x07, 0xd7, 0xbb, 0x35, 0xdc, 0xee, 0x60, 0x97, 0x59, 0x75, 0xa8, 0x84, 0x90, 0x95, 0xe5, 0xe0, 0x7c, 0x8c, 0xc1, 0xf6, 0xec, 0xf1, 0xf8, 0x81,
0x3e, 0xbc, 0x0d, 0x25, 0x2d, 0x20, 0xa3, 0xb0, 0x80, 0x23, 0x50, 0x22, 0x62, 0x9c, 0xf0, 0xe6, 0x06, 0xf3, 0xc1, 0x3d, 0x70, 0x0d, 0xb7, 0x3b, 0xd8, 0xa5, 0x0f, 0x6f, 0x43, 0x49, 0x0b, 0xc8,
0xd6, 0x07, 0xe8, 0x7f, 0xd4, 0xe0, 0xe0, 0x80, 0x38, 0xe3, 0x2c, 0x62, 0x1d, 0x0a, 0xb6, 0x6b, 0x28, 0x2c, 0xe0, 0x08, 0x94, 0x88, 0x18, 0x27, 0xbc, 0xe2, 0xf5, 0x01, 0xfa, 0xef, 0x35, 0x38,
0xe1, 0x07, 0xa1, 0x34, 0x41, 0x93, 0xf5, 0xac, 0xf7, 0x6c, 0xc7, 0x0a, 0xc5, 0x08, 0x9a, 0xe8, 0x38, 0x20, 0xce, 0x38, 0x8b, 0x58, 0x87, 0x82, 0xed, 0x5a, 0xf8, 0x41, 0x28, 0x4d, 0xd0, 0x64,
0x04, 0x54, 0xb0, 0x6b, 0xae, 0x3b, 0xb8, 0xc9, 0x71, 0xb9, 0x21, 0x17, 0x8d, 0xb2, 0x80, 0xad, 0x3d, 0xeb, 0x3d, 0xdb, 0xb1, 0x42, 0x31, 0x82, 0x26, 0x3a, 0x01, 0x15, 0xec, 0x9a, 0xeb, 0x0e,
0x30, 0x10, 0x23, 0xde, 0xb0, 0x31, 0x27, 0xce, 0x09, 0x62, 0xd9, 0xd4, 0xbf, 0xad, 0xc1, 0x2c, 0x6e, 0x72, 0x5c, 0x6e, 0xc8, 0x45, 0xa3, 0x2c, 0x60, 0x2b, 0x0c, 0xc4, 0x88, 0x37, 0x6c, 0xcc,
0xb3, 0x42, 0x29, 0x3d, 0x79, 0xb4, 0xda, 0x5c, 0x80, 0x72, 0xc4, 0xcc, 0xe4, 0x44, 0xa2, 0x20, 0x89, 0x73, 0x82, 0x58, 0x36, 0xf5, 0xaf, 0x6b, 0x30, 0xcb, 0xac, 0x50, 0x4a, 0x4f, 0x1e, 0xad,
0xfd, 0x2e, 0xcc, 0xc5, 0xc5, 0x19, 0x47, 0x9b, 0xc7, 0x00, 0xc2, 0xb5, 0x12, 0xbb, 0x21, 0x6b, 0x36, 0x17, 0xa0, 0x1c, 0x31, 0x33, 0x39, 0x91, 0x28, 0x48, 0xbf, 0x0b, 0x73, 0x71, 0x71, 0xc6,
0x44, 0x20, 0xfa, 0x67, 0x61, 0x12, 0x97, 0xab, 0x69, 0x97, 0x73, 0x4c, 0x7c, 0x49, 0xa2, 0xfe, 0xd1, 0xe6, 0x31, 0x80, 0x70, 0xad, 0xc4, 0x6e, 0xc8, 0x1a, 0x11, 0x88, 0xfe, 0x69, 0x98, 0xed,
0xbc, 0xc4, 0x21, 0xbc, 0x7b, 0x19, 0x2a, 0xf8, 0x01, 0xf5, 0xcd, 0x66, 0xd7, 0xf4, 0xcd, 0x8e, 0xe5, 0x6a, 0xda, 0xe5, 0x64, 0x14, 0x5f, 0x92, 0xa8, 0x3f, 0x2f, 0x71, 0x08, 0xef, 0x5e, 0x86,
0xd8, 0x56, 0x23, 0xb9, 0xde, 0x32, 0x27, 0x5b, 0xe5, 0x54, 0xfa, 0x5f, 0x58, 0x98, 0x26, 0xcd, 0x0a, 0x7e, 0x40, 0x7d, 0xb3, 0xd9, 0x35, 0x7d, 0xb3, 0x23, 0xb6, 0xd5, 0x48, 0xae, 0xb7, 0xcc,
0x75, 0xaf, 0xcf, 0xf8, 0x28, 0x00, 0x37, 0x67, 0xd1, 0x9d, 0x13, 0xdd, 0x1c, 0xc2, 0x0f, 0xb7, 0xc9, 0x56, 0x39, 0x95, 0xfe, 0x27, 0x16, 0xa6, 0x49, 0x73, 0xdd, 0xeb, 0x33, 0x3e, 0x0a, 0xc0,
0x5f, 0x68, 0x50, 0xe3, 0x53, 0x10, 0xf3, 0xe9, 0x32, 0xb6, 0x09, 0x1a, 0x2d, 0x41, 0x33, 0x64, 0xcd, 0x59, 0x74, 0xe7, 0x44, 0x37, 0x87, 0xf0, 0xc3, 0xed, 0x27, 0x1a, 0xd4, 0xf8, 0x14, 0xc4,
0x73, 0xfd, 0x1f, 0xe4, 0xa5, 0x62, 0xb3, 0xa3, 0x2a, 0x56, 0x12, 0x6c, 0x33, 0x0d, 0xfd, 0xa7, 0x7c, 0xba, 0x8c, 0x6d, 0x82, 0x46, 0x4b, 0xd0, 0x0c, 0xd9, 0x5c, 0xff, 0x03, 0x79, 0xa9, 0xd8,
0x1a, 0x1c, 0x48, 0xa8, 0x7c, 0x1c, 0x8b, 0x7e, 0x0d, 0x90, 0x98, 0xa1, 0xd5, 0x9f, 0x76, 0x70, 0xec, 0xa8, 0x8a, 0x95, 0x04, 0xdb, 0x4c, 0x43, 0xff, 0xa1, 0x06, 0x07, 0x12, 0x2a, 0x1f, 0xc7,
0x10, 0x9f, 0x54, 0x9e, 0x3a, 0x49, 0x25, 0x19, 0x33, 0x76, 0x02, 0x42, 0xf4, 0xbf, 0x6b, 0x70, 0xa2, 0x5f, 0x03, 0x24, 0x66, 0x68, 0xf5, 0xa7, 0x1d, 0x1c, 0xc4, 0x27, 0x95, 0xa7, 0x4e, 0x52,
0xe4, 0x3a, 0xa6, 0x1c, 0xf5, 0x2a, 0xf3, 0x2a, 0xab, 0xbe, 0xd7, 0xf6, 0x31, 0x21, 0xfb, 0xd7, 0x49, 0xc6, 0x8c, 0x9d, 0x80, 0x10, 0xfd, 0xaf, 0x1a, 0x1c, 0xb9, 0x8e, 0x29, 0x47, 0xbd, 0xca,
0x3e, 0xbe, 0x2f, 0x22, 0x37, 0xd5, 0x94, 0xc6, 0xd1, 0xff, 0x09, 0xa8, 0xf0, 0x31, 0xb0, 0xd5, 0xbc, 0xca, 0xaa, 0xef, 0xb5, 0x7d, 0x4c, 0xc8, 0xfe, 0xb5, 0x8f, 0x6f, 0x8b, 0xc8, 0x4d, 0x35,
0xf4, 0xbd, 0xfb, 0x44, 0xda, 0x51, 0x59, 0xc2, 0x0c, 0xef, 0x3e, 0x37, 0x08, 0xea, 0x51, 0xd3, 0xa5, 0x71, 0xf4, 0x7f, 0x02, 0x2a, 0x7c, 0x0c, 0x6c, 0x35, 0x7d, 0xef, 0x3e, 0x91, 0x76, 0x54,
0x11, 0x08, 0xf2, 0xc8, 0xe0, 0x10, 0xd6, 0xcd, 0xf7, 0x60, 0x20, 0x18, 0x63, 0x8e, 0xf7, 0xaf, 0x96, 0x30, 0xc3, 0xbb, 0xcf, 0x0d, 0x82, 0x7a, 0xd4, 0x74, 0x04, 0x82, 0x3c, 0x32, 0x38, 0x84,
0x8e, 0x7f, 0xae, 0xc1, 0x81, 0xc4, 0x54, 0xc6, 0xd1, 0xed, 0x33, 0x22, 0xae, 0x14, 0x93, 0x99, 0x75, 0xf3, 0x3d, 0x18, 0x08, 0xc6, 0x98, 0xe3, 0xfd, 0xab, 0xe3, 0x1f, 0x6b, 0x70, 0x20, 0x31,
0x5a, 0x3a, 0xae, 0xa4, 0x89, 0x0c, 0x26, 0xb0, 0xd1, 0x71, 0x28, 0x6f, 0x98, 0xb6, 0xd3, 0xf4, 0x95, 0x71, 0x74, 0xfb, 0x8c, 0x88, 0x2b, 0xc5, 0x64, 0xa6, 0x96, 0x8e, 0x2b, 0x69, 0x22, 0x83,
0xb1, 0x49, 0x3c, 0x57, 0x4e, 0x14, 0x18, 0xc8, 0xe0, 0x10, 0xfd, 0xcf, 0x9a, 0x78, 0x0a, 0xdb, 0x09, 0x6c, 0x74, 0x1c, 0xca, 0x1b, 0xa6, 0xed, 0x34, 0x7d, 0x6c, 0x12, 0xcf, 0x95, 0x13, 0x05,
0xe7, 0x1e, 0xef, 0x67, 0x19, 0xa8, 0xae, 0xb8, 0x04, 0xfb, 0x74, 0xef, 0xdf, 0x3d, 0xd0, 0x8b, 0x06, 0x32, 0x38, 0x44, 0xff, 0xa3, 0x26, 0xde, 0xcc, 0xf6, 0xb9, 0xc7, 0xfb, 0x51, 0x06, 0xaa,
0x50, 0xe6, 0x13, 0x23, 0x4d, 0xcb, 0xa4, 0xa6, 0x3c, 0xae, 0x8e, 0x29, 0xf3, 0xe6, 0x2f, 0x33, 0x2b, 0x2e, 0xc1, 0x3e, 0xdd, 0xfb, 0x77, 0x0f, 0xf4, 0x22, 0x94, 0xf9, 0xc4, 0x48, 0xd3, 0x32,
0xbc, 0x65, 0x93, 0x9a, 0x86, 0xd0, 0x0e, 0x61, 0xdf, 0xe8, 0x30, 0x94, 0x36, 0x4d, 0xb2, 0xd9, 0xa9, 0x29, 0x8f, 0xab, 0x63, 0xca, 0x04, 0xfb, 0xcb, 0x0c, 0x6f, 0xd9, 0xa4, 0xa6, 0x21, 0xb4,
0xbc, 0x8b, 0xb7, 0x44, 0x40, 0x58, 0x35, 0x8a, 0x0c, 0xf0, 0x0a, 0xde, 0x22, 0xe8, 0x10, 0x14, 0x43, 0xd8, 0x37, 0x3a, 0x0c, 0xa5, 0x4d, 0x93, 0x6c, 0x36, 0xef, 0xe2, 0x2d, 0x11, 0x10, 0x56,
0xdd, 0x5e, 0x47, 0x6c, 0xb0, 0xc2, 0x82, 0xb6, 0x58, 0x35, 0x0a, 0x6e, 0xaf, 0xc3, 0xb7, 0xd7, 0x8d, 0x22, 0x03, 0xbc, 0x82, 0xb7, 0x08, 0x3a, 0x04, 0x45, 0xb7, 0xd7, 0x11, 0x1b, 0xac, 0xb0,
0x5f, 0x33, 0x30, 0x75, 0xab, 0xc7, 0x6e, 0x3a, 0x3c, 0xeb, 0xdf, 0x73, 0xe8, 0xc3, 0x19, 0xe3, 0xa0, 0x2d, 0x56, 0x8d, 0x82, 0xdb, 0xeb, 0xf0, 0xed, 0xf5, 0xe7, 0x0c, 0x4c, 0xdd, 0xea, 0xb1,
0x19, 0xc8, 0x8a, 0x98, 0x81, 0x51, 0xd4, 0x95, 0x82, 0xaf, 0x2c, 0x13, 0x83, 0x21, 0xf1, 0x8c, 0x9b, 0x0e, 0x7f, 0x1e, 0xe8, 0x39, 0xf4, 0xe1, 0x8c, 0xf1, 0x0c, 0x64, 0x45, 0xcc, 0xc0, 0x28,
0x77, 0xaf, 0xd5, 0x92, 0xe1, 0x57, 0x96, 0x0b, 0x5b, 0x62, 0x10, 0x11, 0x7c, 0x1d, 0x86, 0x12, 0xea, 0x4a, 0xc1, 0x57, 0x96, 0x89, 0xc1, 0x90, 0x78, 0x6a, 0xbc, 0xd7, 0x6a, 0xc9, 0xf0, 0x2b,
0xf6, 0xfd, 0x30, 0x38, 0xe3, 0x53, 0xc1, 0xbe, 0x2f, 0x3a, 0x75, 0xa8, 0x98, 0xad, 0xbb, 0xae, 0xcb, 0x85, 0x2d, 0x31, 0x88, 0x08, 0xbe, 0x0e, 0x43, 0x09, 0xfb, 0x7e, 0x18, 0x9c, 0xf1, 0xa9,
0x77, 0xdf, 0xc1, 0x56, 0x1b, 0x5b, 0x7c, 0xd9, 0x8b, 0x46, 0x0c, 0x26, 0x0c, 0x83, 0x2d, 0x7c, 0x60, 0xdf, 0x17, 0x9d, 0x3a, 0x54, 0xcc, 0xd6, 0x5d, 0xd7, 0xbb, 0xef, 0x60, 0xab, 0x8d, 0x2d,
0xb3, 0xe5, 0x52, 0x7e, 0xc5, 0xc8, 0x32, 0xc3, 0x60, 0x90, 0x6b, 0x2e, 0x65, 0xdd, 0x16, 0x76, 0xbe, 0xec, 0x45, 0x23, 0x06, 0x13, 0x86, 0xc1, 0x16, 0xbe, 0xd9, 0x72, 0x29, 0xbf, 0x62, 0x64,
0x30, 0xc5, 0xbc, 0xbb, 0x20, 0xba, 0x05, 0x44, 0x76, 0xf7, 0xba, 0x21, 0x75, 0x51, 0x74, 0x0b, 0x99, 0x61, 0x30, 0xc8, 0x35, 0x97, 0xb2, 0x6e, 0x0b, 0x3b, 0x98, 0x62, 0xde, 0x5d, 0x10, 0xdd,
0x08, 0xeb, 0x3e, 0x02, 0xa5, 0x7e, 0x5a, 0xbf, 0xd4, 0xcf, 0x13, 0x72, 0x80, 0xfe, 0x2f, 0x0d, 0x02, 0x22, 0xbb, 0x7b, 0xdd, 0x90, 0xba, 0x28, 0xba, 0x05, 0x84, 0x75, 0x1f, 0x81, 0x52, 0x3f,
0xaa, 0xcb, 0x9c, 0xd5, 0x3e, 0x30, 0x3a, 0x04, 0x93, 0xf8, 0x41, 0xd7, 0x97, 0x5b, 0x87, 0x7f, 0xff, 0x5f, 0xea, 0xe7, 0x09, 0x39, 0x40, 0xff, 0xa7, 0x06, 0xd5, 0x65, 0xce, 0x6a, 0x1f, 0x18,
0x0f, 0xb5, 0x23, 0xfd, 0x1e, 0xd4, 0x56, 0x1d, 0xb3, 0x85, 0x37, 0x3d, 0xc7, 0xc2, 0x3e, 0x3f, 0x1d, 0x82, 0x49, 0xfc, 0xa0, 0xeb, 0xcb, 0xad, 0xc3, 0xbf, 0x87, 0xda, 0x91, 0x7e, 0x0f, 0x6a,
0xdb, 0x51, 0x0d, 0xb2, 0xd4, 0x6c, 0xcb, 0xe0, 0x81, 0x7d, 0xa2, 0xe7, 0xe5, 0xdd, 0x4e, 0xb8, 0xab, 0x8e, 0xd9, 0xc2, 0x9b, 0x9e, 0x63, 0x61, 0x9f, 0x9f, 0xed, 0xa8, 0x06, 0x59, 0x6a, 0xb6,
0xa5, 0xc7, 0x95, 0xa7, 0x6c, 0x84, 0x4d, 0x24, 0x65, 0x3a, 0x0f, 0x79, 0xfe, 0xd4, 0x26, 0xc2, 0x65, 0xf0, 0xc0, 0x3e, 0xd1, 0xf3, 0xf2, 0x6e, 0x27, 0xdc, 0xd2, 0xe3, 0xca, 0x53, 0x36, 0xc2,
0x8a, 0x8a, 0x21, 0x5b, 0xfa, 0x9d, 0xd8, 0xb8, 0xd7, 0x7d, 0xaf, 0xd7, 0x45, 0x2b, 0x50, 0xe9, 0x26, 0x92, 0x32, 0x9d, 0x87, 0x3c, 0x7f, 0x93, 0x13, 0x61, 0x45, 0xc5, 0x90, 0x2d, 0xfd, 0x4e,
0xf6, 0x61, 0xcc, 0x56, 0xd3, 0xcf, 0xf4, 0xa4, 0xd0, 0x46, 0x8c, 0x54, 0xff, 0x2c, 0x0b, 0xd5, 0x6c, 0xdc, 0xeb, 0xbe, 0xd7, 0xeb, 0xa2, 0x15, 0xa8, 0x74, 0xfb, 0x30, 0x66, 0xab, 0xe9, 0x67,
0x35, 0x6c, 0xfa, 0xad, 0xcd, 0xfd, 0x90, 0x64, 0x61, 0x1a, 0xb7, 0x88, 0x23, 0x57, 0x8d, 0x7d, 0x7a, 0x52, 0x68, 0x23, 0x46, 0xaa, 0x7f, 0x9a, 0x85, 0xea, 0x1a, 0x36, 0xfd, 0xd6, 0xe6, 0x7e,
0xa2, 0xb3, 0x30, 0x13, 0x99, 0x50, 0xb3, 0xcd, 0x14, 0xc4, 0xed, 0xbe, 0x62, 0xd4, 0xba, 0x49, 0x48, 0xb2, 0x30, 0x8d, 0x5b, 0xc4, 0x91, 0xab, 0xc6, 0x3e, 0xd1, 0x59, 0x98, 0x89, 0x4c, 0xa8,
0xc5, 0x3d, 0x07, 0x45, 0x8b, 0x38, 0x4d, 0xbe, 0x44, 0x05, 0xbe, 0x44, 0xea, 0xf9, 0x2d, 0x13, 0xd9, 0x66, 0x0a, 0xe2, 0x76, 0x5f, 0x31, 0x6a, 0xdd, 0xa4, 0xe2, 0x9e, 0x83, 0xa2, 0x45, 0x9c,
0x87, 0x2f, 0x4d, 0xc1, 0x12, 0x1f, 0xe8, 0x31, 0xa8, 0x7a, 0x3d, 0xda, 0xed, 0xd1, 0xa6, 0xf0, 0x26, 0x5f, 0xa2, 0x02, 0x5f, 0x22, 0xf5, 0xfc, 0x96, 0x89, 0xc3, 0x97, 0xa6, 0x60, 0x89, 0x0f,
0x3b, 0xf5, 0x22, 0x17, 0xaf, 0x22, 0x80, 0xdc, 0x2d, 0x11, 0xf4, 0x32, 0x54, 0x09, 0x57, 0x65, 0xf4, 0x18, 0x54, 0xbd, 0x1e, 0xed, 0xf6, 0x68, 0x53, 0xf8, 0x9d, 0x7a, 0x91, 0x8b, 0x57, 0x11,
0x10, 0x79, 0x97, 0x46, 0x0d, 0x10, 0x2b, 0x82, 0x4e, 0x84, 0xde, 0xe8, 0x34, 0xd4, 0xa8, 0x6f, 0x40, 0xee, 0x96, 0x08, 0x7a, 0x19, 0xaa, 0x84, 0xab, 0x32, 0x88, 0xbc, 0x4b, 0xa3, 0x06, 0x88,
0xde, 0xc3, 0x4e, 0xe4, 0x11, 0x0d, 0xf8, 0x6e, 0x9b, 0x16, 0xf0, 0xfe, 0x03, 0xda, 0x05, 0x98, 0x15, 0x41, 0x27, 0x42, 0x6f, 0x74, 0x1a, 0x6a, 0xd4, 0x37, 0xef, 0x61, 0x27, 0xf2, 0xda, 0x06,
0x6d, 0xf7, 0x4c, 0xdf, 0x74, 0x29, 0xc6, 0x11, 0xec, 0x32, 0xc7, 0x46, 0x61, 0x57, 0x48, 0xa0, 0x7c, 0xb7, 0x4d, 0x0b, 0x78, 0xff, 0xa5, 0xed, 0x02, 0xcc, 0xb6, 0x7b, 0xa6, 0x6f, 0xba, 0x14,
0xbf, 0x02, 0x93, 0x37, 0x6c, 0xca, 0x15, 0xc9, 0x7c, 0x96, 0xc6, 0xef, 0x39, 0xdc, 0x33, 0x1d, 0xe3, 0x08, 0x76, 0x99, 0x63, 0xa3, 0xb0, 0x2b, 0x24, 0xd0, 0x5f, 0x81, 0xc9, 0x1b, 0x36, 0xe5,
0x82, 0xa2, 0xef, 0xdd, 0x17, 0x3e, 0x38, 0xc3, 0x4d, 0xb0, 0xe0, 0x7b, 0xf7, 0xb9, 0x83, 0xe5, 0x8a, 0x64, 0x3e, 0x4b, 0xe3, 0xf7, 0x1c, 0xee, 0x99, 0x0e, 0x41, 0xd1, 0xf7, 0xee, 0x0b, 0x1f,
0xa5, 0x07, 0x9e, 0x2f, 0x6d, 0x33, 0x63, 0xc8, 0x96, 0xfe, 0x9e, 0xd6, 0x37, 0x1e, 0xe6, 0x3e, 0x9c, 0xe1, 0x26, 0x58, 0xf0, 0xbd, 0xfb, 0xdc, 0xc1, 0xf2, 0x1a, 0x05, 0xcf, 0x97, 0xb6, 0x99,
0xc9, 0xc3, 0xf9, 0xcf, 0x17, 0xa1, 0xe0, 0x0b, 0xfa, 0xa1, 0x8f, 0xa6, 0xd1, 0x91, 0xf8, 0x19, 0x31, 0x64, 0x4b, 0xff, 0xb9, 0xd6, 0x37, 0x1e, 0xe6, 0x3e, 0xc9, 0xc3, 0xf9, 0xcf, 0x17, 0xa1,
0x10, 0x50, 0xe9, 0x5f, 0xd7, 0xa0, 0xf2, 0xb2, 0xd3, 0x23, 0x8f, 0xc2, 0x86, 0x55, 0xcf, 0x09, 0xe0, 0x0b, 0xfa, 0xa1, 0xaf, 0xab, 0xd1, 0x91, 0xf8, 0x19, 0x10, 0x50, 0x8d, 0xfe, 0xc2, 0xf3,
0x59, 0xf5, 0x53, 0xc6, 0x77, 0x32, 0x50, 0x95, 0x62, 0x8c, 0x13, 0xdb, 0xa4, 0x8a, 0xb2, 0x06, 0x25, 0x0d, 0x2a, 0x2f, 0x3b, 0x3d, 0xf2, 0x28, 0x8c, 0x5d, 0xf5, 0xee, 0x90, 0x55, 0xbf, 0x79,
0x65, 0x36, 0x64, 0x93, 0xe0, 0x76, 0x90, 0x8b, 0x29, 0x2f, 0x2d, 0x29, 0x77, 0x7d, 0x4c, 0x0c, 0x7c, 0x23, 0x03, 0x55, 0x29, 0xc6, 0x38, 0x41, 0x50, 0xaa, 0x28, 0x6b, 0x50, 0x66, 0x43, 0x36,
0xfe, 0xdc, 0xbc, 0xc6, 0x89, 0xbe, 0xe4, 0x52, 0x7f, 0xcb, 0x80, 0x56, 0x08, 0x68, 0xdc, 0x81, 0x09, 0x6e, 0x07, 0x49, 0x9b, 0xf2, 0xd2, 0x92, 0xd2, 0x3d, 0xc4, 0xc4, 0xe0, 0x0f, 0xd8, 0x6b,
0xe9, 0x44, 0x37, 0xb3, 0x8d, 0xbb, 0x78, 0x2b, 0x70, 0x6b, 0x77, 0xf1, 0x16, 0x7a, 0x3a, 0x5a, 0x9c, 0xe8, 0x73, 0x2e, 0xf5, 0xb7, 0x0c, 0x68, 0x85, 0x80, 0xc6, 0x1d, 0x98, 0x4e, 0x74, 0x33,
0x14, 0x90, 0x76, 0x38, 0xdf, 0xf4, 0xdc, 0xf6, 0x15, 0xdf, 0x37, 0xb7, 0x64, 0xd1, 0xc0, 0xe5, 0x23, 0xba, 0x8b, 0xb7, 0x02, 0xff, 0x77, 0x17, 0x6f, 0xa1, 0xa7, 0xa3, 0x65, 0x06, 0x69, 0xa7,
0xcc, 0xf3, 0x9a, 0xfe, 0xa7, 0x0c, 0x54, 0x5e, 0xed, 0x61, 0x7f, 0x6b, 0x37, 0xdd, 0x4b, 0xe0, 0xf8, 0x4d, 0xcf, 0x6d, 0x5f, 0xf1, 0x7d, 0x73, 0x4b, 0x96, 0x21, 0x5c, 0xce, 0x3c, 0xaf, 0xe9,
0xec, 0x27, 0x23, 0xce, 0x7e, 0x60, 0x47, 0xe7, 0x14, 0x3b, 0x5a, 0xe1, 0x97, 0xf2, 0x4a, 0xbf, 0x7f, 0xc8, 0x40, 0xe5, 0xd5, 0x1e, 0xf6, 0xb7, 0x76, 0xd3, 0x0f, 0x05, 0xa7, 0xc2, 0x64, 0xe4,
0xa4, 0xda, 0xb2, 0x85, 0x1d, 0x6d, 0xd9, 0x62, 0xea, 0x96, 0x65, 0xd6, 0x2d, 0x55, 0x38, 0xd6, 0x54, 0x18, 0xd8, 0xfa, 0x39, 0xc5, 0xd6, 0x57, 0x38, 0xb0, 0xbc, 0xd2, 0x81, 0xa9, 0xf6, 0x76,
0x26, 0x8b, 0x45, 0x59, 0x99, 0x9d, 0x46, 0x59, 0xfa, 0xc7, 0x1a, 0x94, 0xde, 0xc0, 0x2d, 0xea, 0x61, 0x47, 0x7b, 0xbb, 0x98, 0xba, 0xb7, 0x7f, 0xa6, 0x85, 0x2a, 0x1c, 0x6b, 0x37, 0xc6, 0xc2,
0xf9, 0xcc, 0x5b, 0x28, 0x74, 0xaf, 0x8d, 0x10, 0xc8, 0x66, 0x92, 0x81, 0xec, 0x25, 0x28, 0xda, 0xb1, 0xcc, 0x8e, 0xc3, 0xb1, 0x91, 0x77, 0xe3, 0xc7, 0x1a, 0x94, 0xde, 0xc0, 0x2d, 0xea, 0xf9,
0x56, 0xd3, 0x64, 0x66, 0xc3, 0x17, 0x6f, 0x58, 0x00, 0x55, 0xb0, 0x2d, 0x6e, 0x5f, 0xa3, 0xe7, 0xcc, 0xff, 0x28, 0xc8, 0xb4, 0x11, 0x42, 0xe3, 0x4c, 0x32, 0x34, 0xbe, 0x04, 0x45, 0xdb, 0x6a,
0xe4, 0x7f, 0xa0, 0x41, 0x45, 0xc8, 0x4c, 0x04, 0xe5, 0x0b, 0x91, 0xe1, 0x34, 0x95, 0x2d, 0xcb, 0x9a, 0xcc, 0xbe, 0xf8, 0xb8, 0xc3, 0x42, 0xb2, 0x82, 0x6d, 0x71, 0x43, 0x1c, 0x3d, 0xcb, 0xff,
0x46, 0x38, 0xd1, 0x1b, 0x13, 0xfd, 0x61, 0xaf, 0x00, 0x30, 0xdd, 0x49, 0x72, 0xb1, 0x15, 0x16, 0x1d, 0x0d, 0x2a, 0x42, 0x66, 0x22, 0x28, 0x5f, 0x88, 0x0c, 0xa7, 0xa9, 0x8c, 0x5e, 0x36, 0xc2,
0x94, 0xd2, 0x0a, 0x72, 0xae, 0xc7, 0x1b, 0x13, 0x46, 0x89, 0x51, 0x71, 0x16, 0x57, 0x0b, 0x90, 0x89, 0xde, 0x98, 0xe8, 0x0f, 0x7b, 0x05, 0x80, 0x29, 0x59, 0x92, 0x8b, 0x3d, 0xb3, 0xa0, 0x94,
0xe3, 0xd4, 0xfa, 0x7f, 0x34, 0x98, 0xbd, 0x66, 0x3a, 0xad, 0x65, 0x9b, 0x50, 0xd3, 0x6d, 0x8d, 0x56, 0x90, 0x73, 0x85, 0xdf, 0x98, 0x30, 0x4a, 0x8c, 0x8a, 0xb3, 0xb8, 0x5a, 0x80, 0x1c, 0xa7,
0x11, 0x32, 0x5d, 0x86, 0x82, 0xd7, 0x6d, 0x3a, 0x78, 0x83, 0x4a, 0x91, 0x4e, 0x0c, 0x99, 0x91, 0xd6, 0xff, 0xad, 0xc1, 0xec, 0x35, 0xd3, 0x69, 0x2d, 0xdb, 0x84, 0x9a, 0x6e, 0x6b, 0x8c, 0x20,
0x50, 0x83, 0x91, 0xf7, 0xba, 0x37, 0xf1, 0x06, 0x45, 0xff, 0x0f, 0x45, 0xaf, 0xdb, 0xf4, 0xed, 0xec, 0x32, 0x14, 0xbc, 0x6e, 0xd3, 0xc1, 0x1b, 0x54, 0x8a, 0x74, 0x62, 0xc8, 0x8c, 0x84, 0x1a,
0xf6, 0x26, 0x95, 0xda, 0x1f, 0x81, 0xb8, 0xe0, 0x75, 0x0d, 0x46, 0x11, 0xc9, 0x84, 0x4c, 0xee, 0x8c, 0xbc, 0xd7, 0xbd, 0x89, 0x37, 0x28, 0xfa, 0x5f, 0x28, 0x7a, 0xdd, 0xa6, 0x6f, 0xb7, 0x37,
0x30, 0x13, 0xa2, 0xff, 0x63, 0x60, 0xfa, 0x63, 0x98, 0xf6, 0x65, 0x28, 0xda, 0x2e, 0x6d, 0x5a, 0xa9, 0xd4, 0xfe, 0x08, 0xc4, 0x05, 0xaf, 0x6b, 0x30, 0x8a, 0x48, 0x6e, 0x65, 0x72, 0x87, 0xb9,
0x36, 0x09, 0x54, 0x70, 0x54, 0x6d, 0x43, 0x2e, 0xe5, 0x33, 0xe0, 0x6b, 0xea, 0x52, 0x36, 0x36, 0x15, 0xfd, 0x6f, 0x03, 0xd3, 0x1f, 0x63, 0x0f, 0x5c, 0x86, 0xa2, 0xed, 0xd2, 0xa6, 0x65, 0x93,
0x7a, 0x09, 0x60, 0xc3, 0xf1, 0x4c, 0x49, 0x2d, 0x74, 0x70, 0x5c, 0xbd, 0x2b, 0x18, 0x5a, 0x40, 0x40, 0x05, 0x47, 0xd5, 0x36, 0xe4, 0x52, 0x3e, 0x03, 0xbe, 0xa6, 0x2e, 0x65, 0x63, 0xa3, 0x97,
0x5f, 0xe2, 0x44, 0x8c, 0x43, 0x7f, 0x49, 0xff, 0xa6, 0xc1, 0x81, 0x55, 0xec, 0x8b, 0x4a, 0x10, 0x00, 0x36, 0x1c, 0xcf, 0x94, 0xd4, 0x42, 0x07, 0xc7, 0xd5, 0xdb, 0x87, 0xa1, 0x05, 0xf4, 0x25,
0x2a, 0xb3, 0x92, 0x2b, 0xee, 0x86, 0x17, 0x4f, 0x0c, 0x6b, 0x89, 0xc4, 0xf0, 0xe7, 0x93, 0x0c, 0x4e, 0xc4, 0x38, 0xf4, 0x97, 0xf4, 0x2f, 0x1a, 0x1c, 0x58, 0xc5, 0xbe, 0x28, 0x42, 0xa1, 0x32,
0x8d, 0xdd, 0x73, 0xc4, 0xf3, 0x44, 0x70, 0xcf, 0x09, 0x1e, 0x61, 0xc4, 0x3d, 0x71, 0x2a, 0x65, 0xcf, 0xb9, 0xe2, 0x6e, 0x78, 0xf1, 0x54, 0xb3, 0x96, 0x48, 0x35, 0x7f, 0x36, 0xe9, 0xd5, 0xd8,
0x99, 0xa4, 0xbc, 0xd1, 0xeb, 0xb2, 0xfe, 0x5d, 0x51, 0x10, 0xa1, 0x9c, 0xd4, 0xc3, 0x1b, 0xec, 0xcd, 0x49, 0x3c, 0x78, 0x04, 0x37, 0xa7, 0xe0, 0x59, 0x47, 0xdc, 0x3c, 0xa7, 0x52, 0x96, 0x49,
0x3c, 0x48, 0x07, 0x9e, 0x70, 0xe7, 0x4f, 0x40, 0xc2, 0x77, 0xa4, 0x94, 0x69, 0xfc, 0x48, 0x83, 0xca, 0x1b, 0xbd, 0x80, 0xeb, 0xdf, 0x14, 0x25, 0x16, 0xca, 0x49, 0x3d, 0xbc, 0xc1, 0xce, 0x83,
0x85, 0x74, 0xa9, 0xc6, 0x39, 0x79, 0x5f, 0x82, 0x9c, 0xed, 0x6e, 0x78, 0x41, 0x92, 0xec, 0x8c, 0xf4, 0xf4, 0x09, 0xbf, 0xff, 0x04, 0x24, 0x7c, 0x47, 0x8a, 0x23, 0xfa, 0x9e, 0x06, 0x0b, 0xe9,
0x3a, 0xa0, 0x56, 0x8e, 0x2b, 0x08, 0xf5, 0xdf, 0x66, 0xa0, 0xc6, 0x7d, 0xf5, 0x2e, 0x2c, 0x7f, 0x52, 0x8d, 0x73, 0x44, 0xbf, 0x04, 0x39, 0xdb, 0xdd, 0xf0, 0x82, 0xb4, 0xdb, 0x19, 0x75, 0x88,
0x07, 0x77, 0x9a, 0xc4, 0x7e, 0x07, 0x07, 0xcb, 0xdf, 0xc1, 0x9d, 0x35, 0xfb, 0x1d, 0x1c, 0xb3, 0xae, 0x1c, 0x57, 0x10, 0xea, 0xbf, 0xce, 0x40, 0x8d, 0x3b, 0xf5, 0x5d, 0x58, 0xfe, 0x0e, 0xee,
0x8c, 0x5c, 0xdc, 0x32, 0xe2, 0x69, 0x84, 0xfc, 0x90, 0x24, 0x68, 0x21, 0x9e, 0x04, 0x9d, 0x87, 0x34, 0x89, 0xfd, 0x0e, 0x0e, 0x96, 0xbf, 0x83, 0x3b, 0x6b, 0xf6, 0x3b, 0x38, 0x66, 0x19, 0xb9,
0xbc, 0xeb, 0x59, 0x78, 0x65, 0x59, 0x5e, 0x12, 0x65, 0xab, 0x6f, 0x6a, 0xa5, 0x1d, 0x9a, 0xda, 0xb8, 0x65, 0xc4, 0x13, 0x13, 0xf9, 0x21, 0x69, 0xd5, 0x42, 0x3c, 0xad, 0x3a, 0x0f, 0x79, 0xd7,
0x87, 0x1a, 0x34, 0xae, 0x63, 0x9a, 0xd4, 0xdd, 0xee, 0x59, 0xd9, 0x47, 0x1a, 0x1c, 0x56, 0x0a, 0xb3, 0xf0, 0xca, 0xb2, 0xbc, 0x76, 0xca, 0x56, 0xdf, 0xd4, 0x4a, 0x3b, 0x34, 0xb5, 0x0f, 0x35,
0x34, 0x8e, 0x81, 0xbd, 0x10, 0x37, 0x30, 0xf5, 0x8d, 0x6d, 0x60, 0x48, 0x69, 0x5b, 0x17, 0xa1, 0x68, 0x5c, 0xc7, 0x34, 0xa9, 0xbb, 0xdd, 0xb3, 0xb2, 0x8f, 0x34, 0x38, 0xac, 0x14, 0x68, 0x1c,
0xb2, 0xdc, 0xeb, 0x74, 0xc2, 0x48, 0xea, 0x04, 0x54, 0x7c, 0xf1, 0x29, 0x2e, 0x34, 0xe2, 0xfc, 0x03, 0x7b, 0x21, 0x6e, 0x60, 0xea, 0x3b, 0xe0, 0xc0, 0x90, 0xd2, 0xb6, 0x2e, 0x42, 0x65, 0xb9,
0x2d, 0x4b, 0x18, 0xbb, 0xb6, 0xe8, 0x67, 0xa1, 0x2a, 0x49, 0xa4, 0xd4, 0x0d, 0x28, 0xfa, 0xf2, 0xd7, 0xe9, 0x84, 0x21, 0xd7, 0x09, 0xa8, 0xf8, 0xe2, 0x53, 0x5c, 0x91, 0xc4, 0xf9, 0x5b, 0x96,
0x5b, 0xe2, 0x87, 0x6d, 0xfd, 0x00, 0xcc, 0x1a, 0xb8, 0xcd, 0x4c, 0xdb, 0xbf, 0x69, 0xbb, 0x77, 0x30, 0x76, 0x11, 0xd2, 0xcf, 0x42, 0x55, 0x92, 0x48, 0xa9, 0x1b, 0x50, 0xf4, 0xe5, 0xb7, 0xc4,
0xe5, 0x30, 0xfa, 0xbb, 0x1a, 0xcc, 0xc5, 0xe1, 0x92, 0xd7, 0xb3, 0x50, 0x30, 0x2d, 0xcb, 0xc7, 0x0f, 0xdb, 0xfa, 0x01, 0x98, 0x35, 0x70, 0x9b, 0x99, 0xb6, 0x7f, 0xd3, 0x76, 0xef, 0xca, 0x61,
0x84, 0x0c, 0x5d, 0x96, 0x2b, 0x02, 0xc7, 0x08, 0x90, 0x23, 0x9a, 0xcb, 0x8c, 0xac, 0x39, 0xbd, 0xf4, 0xf7, 0x34, 0x98, 0x8b, 0xc3, 0x25, 0xaf, 0x67, 0xa1, 0x60, 0x5a, 0x96, 0x8f, 0x09, 0x19,
0x09, 0x33, 0xd7, 0x31, 0xbd, 0x85, 0xa9, 0x3f, 0xd6, 0x83, 0x7a, 0x9d, 0x5d, 0x35, 0x38, 0xb1, 0xba, 0x2c, 0x57, 0x04, 0x8e, 0x11, 0x20, 0x47, 0x34, 0x97, 0x19, 0x59, 0x73, 0x7a, 0x13, 0x66,
0x34, 0x8b, 0xa0, 0xa9, 0x7f, 0xa0, 0x01, 0x8a, 0x8e, 0x30, 0xce, 0x32, 0x47, 0xb5, 0x9c, 0x89, 0xae, 0x63, 0x7a, 0x0b, 0x53, 0x7f, 0xac, 0x27, 0xfa, 0x3a, 0xbb, 0xbc, 0x70, 0x62, 0x69, 0x16,
0x6b, 0x59, 0xd4, 0x1c, 0x75, 0xba, 0x9e, 0x8b, 0x5d, 0x1a, 0x8d, 0x59, 0xab, 0x21, 0x94, 0x9b, 0x41, 0x53, 0xff, 0x40, 0x03, 0x14, 0x1d, 0x61, 0x9c, 0x65, 0x8e, 0x6a, 0x39, 0x13, 0xd7, 0xb2,
0xdf, 0x27, 0x1a, 0xa0, 0x9b, 0x9e, 0x69, 0x5d, 0x35, 0x9d, 0xf1, 0xc2, 0x83, 0xa3, 0x00, 0xc4, 0xa8, 0x62, 0xea, 0x74, 0x3d, 0x17, 0xbb, 0x34, 0x1a, 0x6e, 0x55, 0x43, 0x28, 0x37, 0xbf, 0x4f,
0x6f, 0x35, 0xe5, 0x6e, 0xcd, 0x48, 0xef, 0xe3, 0xb7, 0x6e, 0x8b, 0x0d, 0x7b, 0x1c, 0xca, 0x16, 0x34, 0x40, 0x37, 0x3d, 0xd3, 0xba, 0x6a, 0x3a, 0xe3, 0x85, 0x07, 0x47, 0x01, 0x88, 0xdf, 0x6a,
0xa1, 0xb2, 0x3b, 0x78, 0xdf, 0x05, 0x8b, 0x50, 0xd1, 0xcf, 0x6b, 0x40, 0x09, 0x36, 0x1d, 0x6c, 0xca, 0xdd, 0x9a, 0x91, 0xde, 0xc7, 0x6f, 0xdd, 0x16, 0x1b, 0xf6, 0x38, 0x94, 0x2d, 0x42, 0x65,
0x35, 0x23, 0xcf, 0x63, 0x93, 0x1c, 0xad, 0x26, 0x3a, 0xd6, 0xfa, 0x8f, 0x64, 0x77, 0xe0, 0xe0, 0x77, 0xf0, 0x62, 0x0c, 0x16, 0xa1, 0xa2, 0x9f, 0x97, 0x9f, 0x12, 0x6c, 0x3a, 0xd8, 0x6a, 0x46,
0x2d, 0xd3, 0xed, 0x99, 0xce, 0x35, 0xaf, 0xd3, 0x35, 0x63, 0x75, 0x86, 0x49, 0x37, 0xa7, 0x29, 0x1e, 0xdc, 0x26, 0x39, 0x5a, 0x4d, 0x74, 0xac, 0xf5, 0x9f, 0xdd, 0xee, 0xc0, 0xc1, 0x5b, 0xa6,
0xdc, 0xdc, 0x31, 0x51, 0x88, 0x26, 0x22, 0x66, 0x2e, 0xeb, 0xa4, 0x11, 0x81, 0xe8, 0x04, 0xea, 0xdb, 0x33, 0x9d, 0x6b, 0x5e, 0xa7, 0x6b, 0xc6, 0x2a, 0x17, 0x93, 0x6e, 0x4e, 0x53, 0xb8, 0xb9,
0x83, 0xec, 0xc7, 0x59, 0x28, 0x2e, 0x54, 0xc0, 0x2a, 0xea, 0x7b, 0xfb, 0x30, 0xfd, 0x45, 0x38, 0x63, 0xa2, 0xb4, 0x4d, 0x84, 0xd6, 0x5c, 0xd6, 0x49, 0x23, 0x02, 0xd1, 0x09, 0xd4, 0x07, 0xd9,
0xc4, 0x8b, 0x02, 0x03, 0x50, 0x2c, 0x11, 0x9f, 0x64, 0xa0, 0x29, 0x18, 0x7c, 0x33, 0xc3, 0x5d, 0x8f, 0xb3, 0x50, 0x5c, 0xa8, 0x80, 0x55, 0xd4, 0xf7, 0xf6, 0x61, 0xfa, 0x8b, 0x70, 0x88, 0x97,
0xdb, 0x00, 0x87, 0x71, 0x04, 0xbf, 0x1c, 0xcf, 0x7f, 0x3f, 0x9e, 0x52, 0xa8, 0x1a, 0x1f, 0x51, 0x19, 0x06, 0xa0, 0x58, 0x6a, 0x3f, 0xc9, 0x40, 0x53, 0x30, 0xf8, 0x6a, 0x86, 0xbb, 0xb6, 0x01,
0x26, 0xc1, 0x17, 0x61, 0x1a, 0x3f, 0xc0, 0xad, 0x1e, 0xb5, 0xdd, 0xf6, 0xaa, 0x63, 0xba, 0xb7, 0x0e, 0xe3, 0x08, 0x7e, 0x39, 0x9e, 0x51, 0x7f, 0x3c, 0xa5, 0x46, 0x36, 0x3e, 0xa2, 0x4c, 0xab,
0x3d, 0x79, 0xa0, 0x24, 0xc1, 0xe8, 0x71, 0xa8, 0x32, 0xed, 0x7b, 0x3d, 0x2a, 0xf1, 0xc4, 0xc9, 0x2f, 0xc2, 0x34, 0x7e, 0x80, 0x5b, 0x3d, 0x6a, 0xbb, 0xed, 0x55, 0xc7, 0x74, 0x6f, 0x7b, 0xf2,
0x12, 0x07, 0x32, 0x7e, 0x6c, 0xbe, 0x0e, 0xa6, 0xd8, 0x92, 0x78, 0xe2, 0x98, 0x49, 0x82, 0x07, 0x40, 0x49, 0x82, 0xd1, 0xe3, 0x50, 0x65, 0xda, 0xf7, 0x7a, 0x54, 0xe2, 0x89, 0x93, 0x25, 0x0e,
0x54, 0xc9, 0xc0, 0x64, 0x27, 0xaa, 0xfc, 0x54, 0x4b, 0xa8, 0x52, 0x72, 0xd8, 0x2d, 0x55, 0xde, 0x64, 0xfc, 0xd8, 0x7c, 0x1d, 0x4c, 0xb1, 0x25, 0xf1, 0xc4, 0x31, 0x93, 0x04, 0x0f, 0xa8, 0x92,
0x00, 0xe8, 0x60, 0xbf, 0x8d, 0x57, 0xb8, 0x53, 0x17, 0x17, 0xf2, 0x45, 0xa5, 0x53, 0xef, 0x33, 0x81, 0xc9, 0x4e, 0x54, 0xf9, 0x0f, 0x2d, 0xa1, 0x4a, 0xc9, 0x61, 0xb7, 0x54, 0x79, 0x03, 0xa0,
0xb8, 0x15, 0x10, 0x18, 0x11, 0x5a, 0xfd, 0x3a, 0xcc, 0x2a, 0x50, 0x98, 0xbf, 0x22, 0x5e, 0xcf, 0x83, 0xfd, 0x36, 0x5e, 0xe1, 0x4e, 0x5d, 0xdc, 0xdc, 0x17, 0x95, 0x4e, 0xbd, 0xcf, 0xe0, 0x56,
0x6f, 0xe1, 0x20, 0x55, 0x13, 0x34, 0xd9, 0xf9, 0x46, 0x4d, 0xbf, 0x8d, 0xa9, 0x34, 0x5a, 0xd9, 0x40, 0x60, 0x44, 0x68, 0xf5, 0xeb, 0x30, 0xab, 0x40, 0x61, 0xfe, 0x8a, 0x78, 0x3d, 0xbf, 0x85,
0xd2, 0x9f, 0xe5, 0x4f, 0x46, 0xfc, 0xfe, 0x1f, 0xb3, 0xd4, 0xf8, 0xfb, 0xb6, 0x36, 0xf0, 0xbe, 0x83, 0xe4, 0x4f, 0xd0, 0x64, 0xe7, 0x1b, 0x35, 0xfd, 0x36, 0xa6, 0xd2, 0x68, 0x65, 0x4b, 0x7f,
0xbd, 0xc1, 0xdf, 0x67, 0xa2, 0x74, 0x63, 0xd6, 0x26, 0x6c, 0x30, 0x56, 0xd8, 0x92, 0x3f, 0x29, 0x96, 0x3f, 0x42, 0xf1, 0x44, 0x41, 0xcc, 0x52, 0xe3, 0x2f, 0xe6, 0xda, 0xc0, 0x8b, 0xf9, 0x06,
0x04, 0xcd, 0x33, 0x27, 0xa0, 0x18, 0x14, 0xb7, 0xa0, 0x02, 0x64, 0xaf, 0x38, 0x4e, 0x6d, 0x02, 0x7f, 0xf1, 0x89, 0xd2, 0x8d, 0x59, 0xed, 0xb0, 0xc1, 0x58, 0x61, 0x4b, 0xfe, 0x1f, 0x11, 0x34,
0x55, 0xa0, 0xb8, 0x22, 0x2b, 0x38, 0x6a, 0xda, 0x99, 0x2f, 0xc2, 0x74, 0x22, 0x47, 0x8a, 0x8a, 0xcf, 0x9c, 0x80, 0x62, 0x50, 0x2e, 0x83, 0x0a, 0x90, 0xbd, 0xe2, 0x38, 0xb5, 0x09, 0x54, 0x81,
0x30, 0x79, 0xdb, 0x73, 0x71, 0x6d, 0x02, 0xd5, 0xa0, 0x72, 0xd5, 0x76, 0x4d, 0x7f, 0x4b, 0xdc, 0xe2, 0x8a, 0xac, 0x09, 0xa9, 0x69, 0x67, 0xfe, 0x1f, 0xa6, 0x13, 0x59, 0x57, 0x54, 0x84, 0xc9,
0x49, 0x6a, 0x16, 0x9a, 0x86, 0x32, 0x8f, 0xcd, 0x25, 0x00, 0x2f, 0xbd, 0x77, 0x1c, 0xaa, 0xb7, 0xdb, 0x9e, 0x8b, 0x6b, 0x13, 0xa8, 0x06, 0x95, 0xab, 0xb6, 0x6b, 0xfa, 0x5b, 0xe2, 0x4e, 0x52,
0xb8, 0x8c, 0x6b, 0xd8, 0xbf, 0x67, 0xb7, 0x30, 0x6a, 0x42, 0x2d, 0xf9, 0x2b, 0x0f, 0x7a, 0x52, 0xb3, 0xd0, 0x34, 0x94, 0x79, 0x6c, 0x2e, 0x01, 0x78, 0xe9, 0xcb, 0xc7, 0xa1, 0x7a, 0x8b, 0xcb,
0xbd, 0x4e, 0xea, 0x3f, 0x7e, 0x1a, 0xc3, 0x66, 0xad, 0x4f, 0xa0, 0xb7, 0x60, 0x2a, 0xfe, 0x43, 0xb8, 0x86, 0xfd, 0x7b, 0x76, 0x0b, 0xa3, 0x26, 0xd4, 0x92, 0x7f, 0x11, 0xa1, 0x27, 0xd5, 0xeb,
0x0c, 0x52, 0x07, 0x8f, 0xca, 0xbf, 0x66, 0xb6, 0x63, 0xde, 0x84, 0x6a, 0xec, 0xff, 0x16, 0x74, 0xa4, 0xfe, 0xd9, 0xa8, 0x31, 0x6c, 0xd6, 0xfa, 0x04, 0x7a, 0x0b, 0xa6, 0xe2, 0xff, 0xe2, 0x20,
0x5a, 0xc9, 0x5b, 0xf5, 0x0f, 0x4c, 0x43, 0x7d, 0x9f, 0x8b, 0xfe, 0x83, 0x22, 0xa4, 0x8f, 0x57, 0x75, 0xf0, 0xa8, 0xfc, 0x61, 0x67, 0x3b, 0xe6, 0x4d, 0xa8, 0xc6, 0x7e, 0xad, 0x41, 0xa7, 0x95,
0xab, 0xa7, 0x48, 0xaf, 0x2c, 0x69, 0xdf, 0x4e, 0x7a, 0x13, 0x66, 0x06, 0x8a, 0xcf, 0xd1, 0x39, 0xbc, 0x55, 0xbf, 0xdf, 0x34, 0xd4, 0xf7, 0xb9, 0xe8, 0xef, 0x2f, 0x42, 0xfa, 0x78, 0xfd, 0x7b,
0x25, 0xff, 0xb4, 0x22, 0xf5, 0xed, 0x86, 0xb8, 0x0f, 0x68, 0xf0, 0x3f, 0x0e, 0x74, 0x5e, 0xbd, 0x8a, 0xf4, 0xca, 0x22, 0xf9, 0xed, 0xa4, 0x37, 0x61, 0x66, 0xa0, 0x9c, 0x1d, 0x9d, 0x53, 0xf2,
0x02, 0x69, 0x7f, 0xb1, 0x34, 0x2e, 0x8c, 0x8c, 0x1f, 0x2a, 0xee, 0x1b, 0x1a, 0x1c, 0x4c, 0xa9, 0x4f, 0x2b, 0x7b, 0xdf, 0x6e, 0x88, 0xfb, 0x80, 0x06, 0x7f, 0x21, 0x41, 0xe7, 0xd5, 0x2b, 0x90,
0x18, 0x47, 0x97, 0x94, 0xec, 0x86, 0x97, 0xbd, 0x37, 0x9e, 0xde, 0x19, 0x51, 0x28, 0x88, 0x0b, 0xf6, 0x03, 0x4d, 0xe3, 0xc2, 0xc8, 0xf8, 0xa1, 0xe2, 0xbe, 0xa2, 0xc1, 0xc1, 0x94, 0x1a, 0x74,
0xd3, 0x89, 0x22, 0x6a, 0x74, 0x36, 0xb5, 0xb0, 0x6c, 0xb0, 0x9a, 0xbc, 0xf1, 0xe4, 0x68, 0xc8, 0x74, 0x49, 0xc9, 0x6e, 0x78, 0x21, 0x7d, 0xe3, 0xe9, 0x9d, 0x11, 0x85, 0x82, 0xb8, 0x30, 0x9d,
0xe1, 0x78, 0x77, 0x60, 0x3a, 0x51, 0x79, 0x9c, 0x32, 0x9e, 0xba, 0x3e, 0x79, 0xbb, 0x05, 0x7d, 0x28, 0xcb, 0x46, 0x67, 0x53, 0x4b, 0xd5, 0x06, 0xeb, 0xd3, 0x1b, 0x4f, 0x8e, 0x86, 0x1c, 0x8e,
0x13, 0xaa, 0xb1, 0x12, 0xe1, 0x14, 0x8b, 0x57, 0x95, 0x11, 0x6f, 0xc7, 0xfa, 0x0e, 0x54, 0xa2, 0x77, 0x07, 0xa6, 0x13, 0xb5, 0xcc, 0x29, 0xe3, 0xa9, 0x2b, 0x9e, 0xb7, 0x5b, 0xd0, 0x37, 0xa1,
0x95, 0xbc, 0x68, 0x31, 0x6d, 0x2f, 0x0d, 0x30, 0xde, 0xc9, 0x56, 0xea, 0x17, 0xea, 0x0d, 0xd9, 0x1a, 0x2b, 0x3a, 0x4e, 0xb1, 0x78, 0x55, 0x61, 0xf2, 0x76, 0xac, 0xef, 0x40, 0x25, 0x5a, 0x1b,
0x4a, 0x03, 0xb5, 0x8d, 0xa3, 0x6f, 0xa5, 0x08, 0xff, 0xa1, 0x5b, 0x69, 0xc7, 0x43, 0xbc, 0xab, 0x8c, 0x16, 0xd3, 0xf6, 0xd2, 0x00, 0xe3, 0x9d, 0x6c, 0xa5, 0x7e, 0xe9, 0xdf, 0x90, 0xad, 0x34,
0xc1, 0xbc, 0xba, 0x10, 0x14, 0x2d, 0xa5, 0xd9, 0x66, 0x7a, 0xc9, 0x6b, 0xe3, 0xd2, 0x8e, 0x68, 0x50, 0x2d, 0x39, 0xfa, 0x56, 0x8a, 0xf0, 0x1f, 0xba, 0x95, 0x76, 0x3c, 0xc4, 0x7b, 0x1a, 0xcc,
0x42, 0x2d, 0xde, 0x85, 0xa9, 0x78, 0xb9, 0x63, 0x8a, 0x16, 0x95, 0x15, 0xa2, 0x8d, 0xb3, 0x23, 0xab, 0x4b, 0x4b, 0xd1, 0x52, 0x9a, 0x6d, 0xa6, 0x17, 0xd1, 0x36, 0x2e, 0xed, 0x88, 0x26, 0xd4,
0xe1, 0x86, 0x83, 0xbd, 0x0e, 0xe5, 0xc8, 0xdf, 0xb9, 0xe8, 0xd4, 0x10, 0x3b, 0x8e, 0xfe, 0xaa, 0xe2, 0x5d, 0x98, 0x8a, 0x17, 0x50, 0xa6, 0x68, 0x51, 0x59, 0x73, 0xda, 0x38, 0x3b, 0x12, 0x6e,
0xba, 0x9d, 0x26, 0x5f, 0x85, 0x52, 0xf8, 0x53, 0x2d, 0x3a, 0x99, 0x6a, 0xbf, 0x3b, 0x61, 0xb9, 0x38, 0xd8, 0xeb, 0x50, 0x8e, 0xfc, 0x18, 0x8c, 0x4e, 0x0d, 0xb1, 0xe3, 0xe8, 0x5f, 0xb2, 0xdb,
0x06, 0xd0, 0xff, 0x63, 0x16, 0x3d, 0xa1, 0xe4, 0x39, 0xf0, 0x4b, 0xed, 0x76, 0x4c, 0xc3, 0xe9, 0x69, 0xf2, 0x55, 0x28, 0x85, 0xff, 0xf3, 0xa2, 0x93, 0xa9, 0xf6, 0xbb, 0x13, 0x96, 0x6b, 0x00,
0x8b, 0x47, 0xe6, 0x61, 0xd3, 0x8f, 0x56, 0x45, 0x6c, 0xc7, 0x76, 0x13, 0xaa, 0xb1, 0x5a, 0xa6, 0xfd, 0x9f, 0x75, 0xd1, 0x13, 0x4a, 0x9e, 0x03, 0x7f, 0xf3, 0x6e, 0xc7, 0x34, 0x9c, 0xbe, 0x78,
0xb4, 0x2d, 0xac, 0x28, 0x31, 0x6b, 0x9c, 0x19, 0x05, 0x35, 0x5c, 0xbf, 0x4d, 0xa8, 0xc6, 0x2a, 0xb6, 0x1e, 0x36, 0xfd, 0x68, 0x9d, 0xc5, 0x76, 0x6c, 0x37, 0xa1, 0x1a, 0xab, 0x8e, 0x4a, 0xdb,
0x4b, 0x52, 0x46, 0x52, 0x15, 0xd2, 0xa4, 0x8c, 0xa4, 0x2c, 0x54, 0xd1, 0x27, 0xd0, 0xd7, 0x22, 0xc2, 0x8a, 0xa2, 0xb5, 0xc6, 0x99, 0x51, 0x50, 0xc3, 0xf5, 0xdb, 0x84, 0x6a, 0xac, 0x56, 0x25,
0x45, 0x2c, 0xb1, 0x42, 0x21, 0x74, 0x71, 0x28, 0x1f, 0x55, 0x9d, 0x54, 0x63, 0x69, 0x27, 0x24, 0x65, 0x24, 0x55, 0x69, 0x4e, 0xca, 0x48, 0xca, 0xd2, 0x17, 0x7d, 0x02, 0xbd, 0x1b, 0x29, 0x8b,
0xa1, 0x08, 0xd2, 0xaa, 0x84, 0x4a, 0xd3, 0xad, 0x6a, 0x27, 0x2b, 0xb5, 0x06, 0x79, 0x51, 0x2b, 0x89, 0x95, 0x1e, 0xa1, 0x8b, 0x43, 0xf9, 0xa8, 0x2a, 0xaf, 0x1a, 0x4b, 0x3b, 0x21, 0x09, 0x45,
0x82, 0xf4, 0x94, 0xaa, 0xb0, 0x48, 0x21, 0x49, 0xe3, 0x31, 0x25, 0x4e, 0xbc, 0x8c, 0x42, 0x30, 0x90, 0x56, 0x25, 0x54, 0x9a, 0x6e, 0x55, 0x3b, 0x59, 0xa9, 0x35, 0xc8, 0x8b, 0xea, 0x13, 0xa4,
0x15, 0xb5, 0x00, 0x29, 0x4c, 0x63, 0x85, 0x02, 0xa3, 0x32, 0x35, 0x20, 0x2f, 0x1e, 0x01, 0x53, 0xa7, 0xd4, 0x99, 0x45, 0x4a, 0x53, 0x1a, 0x8f, 0x29, 0x71, 0xe2, 0x85, 0x19, 0x82, 0xa9, 0xa8,
0x98, 0xc6, 0x1e, 0xb2, 0x1b, 0xc3, 0x71, 0xc4, 0xcb, 0xe1, 0x04, 0x5a, 0x85, 0x1c, 0x0f, 0x7a, 0x2e, 0x48, 0x61, 0x1a, 0x2b, 0x3d, 0x18, 0x95, 0xa9, 0x01, 0x79, 0xf1, 0xac, 0x98, 0xc2, 0x34,
0xd1, 0x89, 0x61, 0x0f, 0x69, 0xc3, 0x38, 0xc6, 0xde, 0xda, 0xf4, 0x09, 0xf4, 0x65, 0xc8, 0xf1, 0xf6, 0x34, 0xde, 0x18, 0x8e, 0xc3, 0xf3, 0xcd, 0xfa, 0x04, 0x5a, 0x85, 0x1c, 0x0f, 0x7a, 0xd1,
0x14, 0x4e, 0x0a, 0xc7, 0xe8, 0x6b, 0x58, 0x63, 0x28, 0x4a, 0x20, 0xa2, 0x05, 0x95, 0x68, 0xae, 0x89, 0x61, 0x2f, 0x6e, 0xc3, 0x38, 0xc6, 0x1e, 0xe5, 0xf4, 0x09, 0xf4, 0x79, 0xc8, 0xf1, 0x14,
0x3c, 0xe5, 0xc8, 0x52, 0xbc, 0x26, 0x34, 0x46, 0xc1, 0x0c, 0x46, 0x11, 0xdb, 0xa8, 0x7f, 0x01, 0x4e, 0x0a, 0xc7, 0xe8, 0xb3, 0x59, 0x63, 0x28, 0x4a, 0x20, 0xa2, 0x05, 0x95, 0x68, 0xae, 0x3c,
0x48, 0xdf, 0x46, 0x03, 0x97, 0x8b, 0xf4, 0x6d, 0x34, 0x78, 0x9f, 0xd0, 0x27, 0xd0, 0xb7, 0x34, 0xe5, 0xc8, 0x52, 0xbc, 0x26, 0x34, 0x46, 0xc1, 0x0c, 0x46, 0x11, 0xdb, 0xa8, 0x7f, 0x01, 0x48,
0xa8, 0xa7, 0x25, 0x70, 0x51, 0x6a, 0x04, 0x34, 0x2c, 0x0b, 0xdd, 0x78, 0x66, 0x87, 0x54, 0xa1, 0xdf, 0x46, 0x03, 0x97, 0x8b, 0xf4, 0x6d, 0x34, 0x78, 0x9f, 0xd0, 0x27, 0xd0, 0xd7, 0x34, 0xa8,
0x2c, 0xef, 0xc0, 0xac, 0x22, 0xcb, 0x87, 0x2e, 0xa4, 0xf1, 0x4b, 0x49, 0x50, 0x36, 0x9e, 0x1a, 0xa7, 0x25, 0x70, 0x51, 0x6a, 0x04, 0x34, 0x2c, 0x0b, 0xdd, 0x78, 0x66, 0x87, 0x54, 0xa1, 0x2c,
0x9d, 0x20, 0x1c, 0x7b, 0x15, 0x72, 0x3c, 0x3b, 0x97, 0x62, 0x28, 0xd1, 0x64, 0x5f, 0x8a, 0xe9, 0xef, 0xc0, 0xac, 0x22, 0xcb, 0x87, 0x2e, 0xa4, 0xf1, 0x4b, 0x49, 0x50, 0x36, 0x9e, 0x1a, 0x9d,
0xc5, 0x92, 0x7b, 0xfa, 0x04, 0xc2, 0x50, 0x89, 0xa6, 0xea, 0x52, 0x2c, 0x45, 0x91, 0xe5, 0x6b, 0x20, 0x1c, 0x7b, 0x15, 0x72, 0x3c, 0x3b, 0x97, 0x62, 0x28, 0xd1, 0x64, 0x5f, 0x8a, 0xe9, 0xc5,
0x9c, 0x1e, 0x01, 0x33, 0x1c, 0xa6, 0x09, 0xd0, 0x4f, 0x95, 0xa5, 0x9c, 0x43, 0x03, 0xd9, 0xba, 0x92, 0x7b, 0xfa, 0x04, 0xc2, 0x50, 0x89, 0xa6, 0xea, 0x52, 0x2c, 0x45, 0x91, 0xe5, 0x6b, 0x9c,
0xc6, 0xa9, 0x6d, 0xf1, 0xa2, 0x47, 0x72, 0x24, 0xf9, 0x95, 0x72, 0x26, 0x0d, 0xa6, 0xc7, 0x46, 0x1e, 0x01, 0x33, 0x1c, 0xa6, 0x09, 0xd0, 0x4f, 0x95, 0xa5, 0x9c, 0x43, 0x03, 0xd9, 0xba, 0xc6,
0xb8, 0x27, 0x0c, 0x26, 0x62, 0x52, 0xee, 0x09, 0xa9, 0x39, 0x9f, 0xc6, 0x85, 0x91, 0xf1, 0xc3, 0xa9, 0x6d, 0xf1, 0xa2, 0x47, 0x72, 0x24, 0xf9, 0x95, 0x72, 0x26, 0x0d, 0xa6, 0xc7, 0x46, 0xb8,
0xf9, 0xbc, 0x0d, 0xb5, 0x64, 0xe2, 0x2a, 0xe5, 0xfe, 0x99, 0x92, 0x3e, 0x6b, 0x9c, 0x1b, 0x11, 0x27, 0x0c, 0x26, 0x62, 0x52, 0xee, 0x09, 0xa9, 0x39, 0x9f, 0xc6, 0x85, 0x91, 0xf1, 0xc3, 0xf9,
0x3b, 0x7a, 0x56, 0x1d, 0x1e, 0x94, 0xe9, 0x2b, 0x36, 0xdd, 0xe4, 0x39, 0x93, 0x51, 0x66, 0x1d, 0xbc, 0x0d, 0xb5, 0x64, 0xe2, 0x2a, 0xe5, 0xfe, 0x99, 0x92, 0x3e, 0x6b, 0x9c, 0x1b, 0x11, 0x3b,
0x4d, 0xcf, 0x8c, 0x32, 0xeb, 0x58, 0x32, 0x46, 0x9f, 0x58, 0xea, 0x41, 0x65, 0xd5, 0xf7, 0x1e, 0x7a, 0x56, 0x1d, 0x1e, 0x94, 0xe9, 0x0b, 0x36, 0xdd, 0xe4, 0x39, 0x93, 0x51, 0x66, 0x1d, 0x4d,
0x6c, 0x05, 0xb7, 0xf0, 0xff, 0x8d, 0x75, 0x5e, 0x7d, 0xe6, 0xab, 0x97, 0xda, 0x36, 0xdd, 0xec, 0xcf, 0x8c, 0x32, 0xeb, 0x58, 0x32, 0x46, 0x9f, 0x58, 0xea, 0x41, 0x65, 0xd5, 0xf7, 0x1e, 0x6c,
0xad, 0xb3, 0xf5, 0xbf, 0x20, 0x70, 0xcf, 0xd9, 0x9e, 0xfc, 0xba, 0x60, 0xbb, 0x14, 0xfb, 0xae, 0x05, 0xb7, 0xf0, 0xff, 0x8e, 0x75, 0x5e, 0x7d, 0xe6, 0x8b, 0x97, 0xda, 0x36, 0xdd, 0xec, 0xad,
0xe9, 0x5c, 0xe0, 0xbc, 0x24, 0xb4, 0xbb, 0xbe, 0x9e, 0xe7, 0xed, 0x4b, 0xff, 0x0d, 0x00, 0x00, 0xb3, 0xf5, 0xbf, 0x20, 0x70, 0xcf, 0xd9, 0x9e, 0xfc, 0xba, 0x60, 0xbb, 0x14, 0xfb, 0xae, 0xe9,
0xff, 0xff, 0x86, 0x01, 0x16, 0x1c, 0xed, 0x45, 0x00, 0x00, 0x5c, 0xe0, 0xbc, 0x24, 0xb4, 0xbb, 0xbe, 0x9e, 0xe7, 0xed, 0x4b, 0xff, 0x09, 0x00, 0x00, 0xff,
0xff, 0xef, 0xdb, 0xd5, 0x05, 0x68, 0x46, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.

View File

@ -1340,6 +1340,7 @@ type searchTask struct {
query *milvuspb.SearchRequest query *milvuspb.SearchRequest
chMgr channelsMgr chMgr channelsMgr
qc types.QueryCoord qc types.QueryCoord
collectionName string
} }
func (st *searchTask) TraceCtx() context.Context { func (st *searchTask) TraceCtx() context.Context {
@ -1659,14 +1660,15 @@ func (st *searchTask) Execute(ctx context.Context) error {
msgPack.Msgs[0] = tsMsg msgPack.Msgs[0] = tsMsg
collectionName := st.query.CollectionName collectionName := st.query.CollectionName
collID, err := globalMetaCache.GetCollectionID(ctx, collectionName) info, err := globalMetaCache.GetCollectionInfo(ctx, collectionName)
if err != nil { // err is not nil if collection not exists if err != nil { // err is not nil if collection not exists
return err return err
} }
st.collectionName = info.schema.Name
stream, err := st.chMgr.getDQLStream(collID) stream, err := st.chMgr.getDQLStream(info.collID)
if err != nil { if err != nil {
err = st.chMgr.createDQLStream(collID) err = st.chMgr.createDQLStream(info.collID)
if err != nil { if err != nil {
st.result = &milvuspb.SearchResults{ st.result = &milvuspb.SearchResults{
Status: &commonpb.Status{ Status: &commonpb.Status{
@ -1676,7 +1678,7 @@ func (st *searchTask) Execute(ctx context.Context) error {
} }
return err return err
} }
stream, err = st.chMgr.getDQLStream(collID) stream, err = st.chMgr.getDQLStream(info.collID)
if err != nil { if err != nil {
st.result = &milvuspb.SearchResults{ st.result = &milvuspb.SearchResults{
Status: &commonpb.Status{ Status: &commonpb.Status{
@ -1920,6 +1922,7 @@ func (st *searchTask) PostExecute(ctx context.Context) error {
ErrorCode: commonpb.ErrorCode_UnexpectedError, ErrorCode: commonpb.ErrorCode_UnexpectedError,
Reason: filterReason, Reason: filterReason,
}, },
CollectionName: st.collectionName,
} }
return fmt.Errorf("no Available QueryNode result, filter reason %s: id %d", filterReason, st.ID()) return fmt.Errorf("no Available QueryNode result, filter reason %s: id %d", filterReason, st.ID())
} }
@ -1943,6 +1946,7 @@ func (st *searchTask) PostExecute(ctx context.Context) error {
NumQueries: searchResults[0].NumQueries, NumQueries: searchResults[0].NumQueries,
Topks: make([]int64, searchResults[0].NumQueries), Topks: make([]int64, searchResults[0].NumQueries),
}, },
CollectionName: st.collectionName,
} }
return nil return nil
} }
@ -1951,6 +1955,7 @@ func (st *searchTask) PostExecute(ctx context.Context) error {
if err != nil { if err != nil {
return err return err
} }
st.result.CollectionName = st.collectionName
schema, err := globalMetaCache.GetCollectionSchema(ctx, st.query.CollectionName) schema, err := globalMetaCache.GetCollectionSchema(ctx, st.query.CollectionName)
if err != nil { if err != nil {
@ -1982,6 +1987,7 @@ type queryTask struct {
chMgr channelsMgr chMgr channelsMgr
qc types.QueryCoord qc types.QueryCoord
ids *schemapb.IDs ids *schemapb.IDs
collectionName string
} }
func (qt *queryTask) TraceCtx() context.Context { func (qt *queryTask) TraceCtx() context.Context {
@ -2079,12 +2085,13 @@ func (qt *queryTask) PreExecute(ctx context.Context) error {
log.Info("Validate collection name.", zap.Any("collectionName", collectionName), log.Info("Validate collection name.", zap.Any("collectionName", collectionName),
zap.Any("requestID", qt.Base.MsgID), zap.Any("requestType", "query")) zap.Any("requestID", qt.Base.MsgID), zap.Any("requestType", "query"))
collectionID, err := globalMetaCache.GetCollectionID(ctx, collectionName) info, err := globalMetaCache.GetCollectionInfo(ctx, collectionName)
if err != nil { if err != nil {
log.Debug("Failed to get collection id.", zap.Any("collectionName", collectionName), log.Debug("Failed to get collection id.", zap.Any("collectionName", collectionName),
zap.Any("requestID", qt.Base.MsgID), zap.Any("requestType", "query")) zap.Any("requestID", qt.Base.MsgID), zap.Any("requestType", "query"))
return err return err
} }
qt.collectionName = info.schema.Name
log.Info("Get collection id by name.", zap.Any("collectionName", collectionName), log.Info("Get collection id by name.", zap.Any("collectionName", collectionName),
zap.Any("requestID", qt.Base.MsgID), zap.Any("requestType", "query")) zap.Any("requestID", qt.Base.MsgID), zap.Any("requestType", "query"))
@ -2116,11 +2123,11 @@ func (qt *queryTask) PreExecute(ctx context.Context) error {
} }
log.Debug("QueryCoord show collections", log.Debug("QueryCoord show collections",
zap.Any("collections", showResp.CollectionIDs), zap.Any("collections", showResp.CollectionIDs),
zap.Any("collID", collectionID)) zap.Any("collID", info.collID))
collectionLoaded := false collectionLoaded := false
for _, collID := range showResp.CollectionIDs { for _, collID := range showResp.CollectionIDs {
if collectionID == collID { if info.collID == collID {
collectionLoaded = true collectionLoaded = true
break break
} }
@ -2217,7 +2224,7 @@ func (qt *queryTask) PreExecute(ctx context.Context) error {
qt.ResultChannelID = Params.ProxyCfg.RetrieveResultChannelNames[0] qt.ResultChannelID = Params.ProxyCfg.RetrieveResultChannelNames[0]
qt.DbID = 0 // todo(yukun) qt.DbID = 0 // todo(yukun)
qt.CollectionID = collectionID qt.CollectionID = info.collID
qt.PartitionIDs = make([]UniqueID, 0) qt.PartitionIDs = make([]UniqueID, 0)
partitionsMap, err := globalMetaCache.GetPartitions(ctx, collectionName) partitionsMap, err := globalMetaCache.GetPartitions(ctx, collectionName)
@ -2383,6 +2390,7 @@ func (qt *queryTask) PostExecute(ctx context.Context) error {
ErrorCode: commonpb.ErrorCode_UnexpectedError, ErrorCode: commonpb.ErrorCode_UnexpectedError,
Reason: reason, Reason: reason,
}, },
CollectionName: qt.collectionName,
} }
log.Debug("Query failed on all querynodes.", log.Debug("Query failed on all querynodes.",
zap.Any("requestID", qt.Base.MsgID), zap.Any("requestType", "query")) zap.Any("requestID", qt.Base.MsgID), zap.Any("requestType", "query"))
@ -2394,6 +2402,7 @@ func (qt *queryTask) PostExecute(ctx context.Context) error {
if err != nil { if err != nil {
return err return err
} }
qt.result.CollectionName = qt.collectionName
if len(qt.result.FieldsData) > 0 { if len(qt.result.FieldsData) > 0 {
qt.result.Status = &commonpb.Status{ qt.result.Status = &commonpb.Status{

View File

@ -447,6 +447,7 @@ func (t *DescribeCollectionReqTask) Execute(ctx context.Context) error {
t.Rsp.CreatedUtcTimestamp = uint64(createdPhysicalTime) t.Rsp.CreatedUtcTimestamp = uint64(createdPhysicalTime)
t.Rsp.Aliases = t.core.MetaTable.ListAliases(collInfo.ID) t.Rsp.Aliases = t.core.MetaTable.ListAliases(collInfo.ID)
t.Rsp.StartPositions = collInfo.GetStartPositions() t.Rsp.StartPositions = collInfo.GetStartPositions()
t.Rsp.CollectionName = t.Rsp.Schema.Name
return nil return nil
} }