diff --git a/examples/node-js-basic/package.json b/examples/node-js-basic/package.json index 4e48b3a..a8cd6e3 100644 --- a/examples/node-js-basic/package.json +++ b/examples/node-js-basic/package.json @@ -15,6 +15,6 @@ "author": "Qdrant Team", "license": "Apache-2.0", "dependencies": { - "@qdrant/qdrant-js": "^1.15.1" + "@qdrant/qdrant-js": "^1.16.0" } } diff --git a/packages/js-client-grpc/CHANGELOG.md b/packages/js-client-grpc/CHANGELOG.md index b760914..3765791 100644 --- a/packages/js-client-grpc/CHANGELOG.md +++ b/packages/js-client-grpc/CHANGELOG.md @@ -1,5 +1,16 @@ # @qdrant/js-client-grpc +## 1.16.0 + +### Minor Changes + +- Qdrant v1.16.0 API +- Breaking: removed `/locks` API +- Breaking: removed `init_from` parameter from collection creation +- Breaking: removed `vectors_count` from collection info +- Breaking: Updated `@connectrpc/connect` dependency to v2 +- Added option to disable gRPC channel compression + ## 1.15.1 ### Minor Changes diff --git a/packages/js-client-grpc/package.json b/packages/js-client-grpc/package.json index 572a473..d7479db 100644 --- a/packages/js-client-grpc/package.json +++ b/packages/js-client-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@qdrant/js-client-grpc", - "version": "1.15.1", + "version": "1.16.0", "engines": { "node": ">=18.0.0", "pnpm": ">=8" diff --git a/packages/js-client-grpc/proto/collections.proto b/packages/js-client-grpc/proto/collections.proto index 6aeedd1..df9c27b 100644 --- a/packages/js-client-grpc/proto/collections.proto +++ b/packages/js-client-grpc/proto/collections.proto @@ -4,6 +4,7 @@ package qdrant; option csharp_namespace = "Qdrant.Client.Grpc"; import "json_with_int.proto"; +import "common.proto"; enum Datatype { Default = 0; @@ -12,6 +13,10 @@ enum Datatype { Float16 = 3; } +// --------------------------------------------- +// ------------- Collection Config ------------- +// --------------------------------------------- + message VectorParams { uint64 size = 1; // Size of the vectors Distance distance = 2; // Distance function used for comparing vectors @@ -724,6 +729,12 @@ message RestartTransfer { ShardTransferMethod method = 4; } +message ReplicatePoints { + ShardKey from_shard_key = 1; // Source shard key + ShardKey to_shard_key = 2; // Target shard key + optional Filter filter = 3; // If set - only points matching the filter will be replicated +} + enum ShardTransferMethod { StreamRecords = 0; // Stream shard records in batches Snapshot = 1; // Snapshot the shard and recover it on the target peer @@ -758,6 +769,7 @@ message UpdateCollectionClusterSetupRequest { CreateShardKey create_shard_key = 7; DeleteShardKey delete_shard_key = 8; RestartTransfer restart_transfer = 9; + ReplicatePoints replicate_points = 10; } optional uint64 timeout = 6; // Wait timeout for operation commit in seconds, if not specified - default value will be supplied } diff --git a/packages/js-client-grpc/proto/common.proto b/packages/js-client-grpc/proto/common.proto new file mode 100644 index 0000000..70da917 --- /dev/null +++ b/packages/js-client-grpc/proto/common.proto @@ -0,0 +1,142 @@ +syntax = "proto3"; +package qdrant; + +option csharp_namespace = "Qdrant.Client.Grpc"; +option java_outer_classname = "Points"; + +import "google/protobuf/timestamp.proto"; + +message PointId { + oneof point_id_options { + uint64 num = 1; // Numerical ID of the point + string uuid = 2; // UUID + } +} + +message GeoPoint { + double lon = 1; + double lat = 2; +} + +message Filter { + repeated Condition should = 1; // At least one of those conditions should match + repeated Condition must = 2; // All conditions must match + repeated Condition must_not = 3; // All conditions must NOT match + optional MinShould min_should = 4; // At least minimum amount of given conditions should match +} + +message MinShould { + repeated Condition conditions = 1; + uint64 min_count = 2; +} + +message Condition { + oneof condition_one_of { + FieldCondition field = 1; + IsEmptyCondition is_empty = 2; + HasIdCondition has_id = 3; + Filter filter = 4; + IsNullCondition is_null = 5; + NestedCondition nested = 6; + HasVectorCondition has_vector = 7; + } +} + +message IsEmptyCondition { + string key = 1; +} + +message IsNullCondition { + string key = 1; +} + +message HasIdCondition { + repeated PointId has_id = 1; +} + +message HasVectorCondition { + string has_vector = 1; +} + +message NestedCondition { + string key = 1; // Path to nested object + Filter filter = 2; // Filter condition +} + +message FieldCondition { + string key = 1; + Match match = 2; // Check if point has field with a given value + Range range = 3; // Check if points value lies in a given range + GeoBoundingBox geo_bounding_box = 4; // Check if points geolocation lies in a given area + GeoRadius geo_radius = 5; // Check if geo point is within a given radius + ValuesCount values_count = 6; // Check number of values for a specific field + GeoPolygon geo_polygon = 7; // Check if geo point is within a given polygon + DatetimeRange datetime_range = 8; // Check if datetime is within a given range + optional bool is_empty = 9; // Check if field is empty + optional bool is_null = 10; // Check if field is null +} + +message Match { + oneof match_value { + string keyword = 1; // Match string keyword + int64 integer = 2; // Match integer + bool boolean = 3; // Match boolean + string text = 4; // Match text + RepeatedStrings keywords = 5; // Match multiple keywords + RepeatedIntegers integers = 6; // Match multiple integers + RepeatedIntegers except_integers = 7; // Match any other value except those integers + RepeatedStrings except_keywords = 8; // Match any other value except those keywords + string phrase = 9; // Match phrase text + string text_any = 10; // Match any word in the text + } +} + +message RepeatedStrings { + repeated string strings = 1; +} + +message RepeatedIntegers { + repeated int64 integers = 1; +} + +message Range { + optional double lt = 1; + optional double gt = 2; + optional double gte = 3; + optional double lte = 4; +} + +message DatetimeRange { + optional google.protobuf.Timestamp lt = 1; + optional google.protobuf.Timestamp gt = 2; + optional google.protobuf.Timestamp gte = 3; + optional google.protobuf.Timestamp lte = 4; +} + +message GeoBoundingBox { + GeoPoint top_left = 1; // north-west corner + GeoPoint bottom_right = 2; // south-east corner +} + +message GeoRadius { + GeoPoint center = 1; // Center of the circle + float radius = 2; // In meters +} + +message GeoLineString { + repeated GeoPoint points = 1; // Ordered sequence of GeoPoints representing the line +} + +// For a valid GeoPolygon, both the exterior and interior GeoLineStrings must consist of a minimum of 4 points. +// Additionally, the first and last points of each GeoLineString must be the same. +message GeoPolygon { + GeoLineString exterior = 1; // The exterior line bounds the surface + repeated GeoLineString interiors = 2; // Interior lines (if present) bound holes within the surface +} + +message ValuesCount { + optional uint64 lt = 1; + optional uint64 gt = 2; + optional uint64 gte = 3; + optional uint64 lte = 4; +} \ No newline at end of file diff --git a/packages/js-client-grpc/proto/points.proto b/packages/js-client-grpc/proto/points.proto index 2b6c5e7..fd50fa9 100644 --- a/packages/js-client-grpc/proto/points.proto +++ b/packages/js-client-grpc/proto/points.proto @@ -4,6 +4,7 @@ package qdrant; option csharp_namespace = "Qdrant.Client.Grpc"; import "collections.proto"; +import "common.proto"; import "google/protobuf/timestamp.proto"; import "json_with_int.proto"; @@ -31,17 +32,6 @@ message ReadConsistency { } } -// --------------------------------------------- -// ------------- Point Id Requests ------------- -// --------------------------------------------- - -message PointId { - oneof point_id_options { - uint64 num = 1; // Numerical ID of the point - string uuid = 2; // UUID - } -} - message SparseIndices { repeated uint32 data = 1; } @@ -1075,133 +1065,6 @@ message SearchMatrixOffsetsResponse { optional Usage usage = 3; } -// --------------------------------------------- -// ------------- Filter Conditions ------------- -// --------------------------------------------- - -message Filter { - repeated Condition should = 1; // At least one of those conditions should match - repeated Condition must = 2; // All conditions must match - repeated Condition must_not = 3; // All conditions must NOT match - optional MinShould min_should = 4; // At least minimum amount of given conditions should match -} - -message MinShould { - repeated Condition conditions = 1; - uint64 min_count = 2; -} - -message Condition { - oneof condition_one_of { - FieldCondition field = 1; - IsEmptyCondition is_empty = 2; - HasIdCondition has_id = 3; - Filter filter = 4; - IsNullCondition is_null = 5; - NestedCondition nested = 6; - HasVectorCondition has_vector = 7; - } -} - -message IsEmptyCondition { - string key = 1; -} - -message IsNullCondition { - string key = 1; -} - -message HasIdCondition { - repeated PointId has_id = 1; -} - -message HasVectorCondition { - string has_vector = 1; -} - -message NestedCondition { - string key = 1; // Path to nested object - Filter filter = 2; // Filter condition -} - -message FieldCondition { - string key = 1; - Match match = 2; // Check if point has field with a given value - Range range = 3; // Check if points value lies in a given range - GeoBoundingBox geo_bounding_box = 4; // Check if points geolocation lies in a given area - GeoRadius geo_radius = 5; // Check if geo point is within a given radius - ValuesCount values_count = 6; // Check number of values for a specific field - GeoPolygon geo_polygon = 7; // Check if geo point is within a given polygon - DatetimeRange datetime_range = 8; // Check if datetime is within a given range - optional bool is_empty = 9; // Check if field is empty - optional bool is_null = 10; // Check if field is null -} - -message Match { - oneof match_value { - string keyword = 1; // Match string keyword - int64 integer = 2; // Match integer - bool boolean = 3; // Match boolean - string text = 4; // Match text - RepeatedStrings keywords = 5; // Match multiple keywords - RepeatedIntegers integers = 6; // Match multiple integers - RepeatedIntegers except_integers = 7; // Match any other value except those integers - RepeatedStrings except_keywords = 8; // Match any other value except those keywords - string phrase = 9; // Match phrase text - string text_any = 10; // Match any word in the text - } -} - -message RepeatedStrings { - repeated string strings = 1; -} - -message RepeatedIntegers { - repeated int64 integers = 1; -} - -message Range { - optional double lt = 1; - optional double gt = 2; - optional double gte = 3; - optional double lte = 4; -} - -message DatetimeRange { - optional google.protobuf.Timestamp lt = 1; - optional google.protobuf.Timestamp gt = 2; - optional google.protobuf.Timestamp gte = 3; - optional google.protobuf.Timestamp lte = 4; -} - -message GeoBoundingBox { - GeoPoint top_left = 1; // north-west corner - GeoPoint bottom_right = 2; // south-east corner -} - -message GeoRadius { - GeoPoint center = 1; // Center of the circle - float radius = 2; // In meters -} - -message GeoLineString { - repeated GeoPoint points = 1; // Ordered sequence of GeoPoints representing the line -} - -// For a valid GeoPolygon, both the exterior and interior GeoLineStrings must consist of a minimum of 4 points. -// Additionally, the first and last points of each GeoLineString must be the same. -message GeoPolygon { - GeoLineString exterior = 1; // The exterior line bounds the surface - repeated GeoLineString interiors = 2; // Interior lines (if present) bound holes within the surface -} - -message ValuesCount { - optional uint64 lt = 1; - optional uint64 gt = 2; - optional uint64 gte = 3; - optional uint64 lte = 4; -} - // --------------------------------------------- // -------------- Points Selector -------------- // --------------------------------------------- @@ -1229,12 +1092,6 @@ message PointStruct { optional Vectors vectors = 4; } - -message GeoPoint { - double lon = 1; - double lat = 2; -} - // --------------------------------------------- // ----------- Measurements collector ---------- // --------------------------------------------- diff --git a/packages/js-client-grpc/src/client-version.ts b/packages/js-client-grpc/src/client-version.ts index e4bf975..796cab7 100644 --- a/packages/js-client-grpc/src/client-version.ts +++ b/packages/js-client-grpc/src/client-version.ts @@ -1,4 +1,4 @@ -export const PACKAGE_VERSION = '1.15.1'; +export const PACKAGE_VERSION = '1.16.0'; interface Version { major: number; diff --git a/packages/js-client-grpc/src/index.ts b/packages/js-client-grpc/src/index.ts index cb7d0ec..04c8c43 100644 --- a/packages/js-client-grpc/src/index.ts +++ b/packages/js-client-grpc/src/index.ts @@ -5,6 +5,7 @@ export * from './proto/collections_pb.js'; export * from './proto/json_with_int_pb.js'; export * from './proto/points_pb.js'; export * from './proto/qdrant_pb.js'; +export * from './proto/common_pb.js'; export * from './proto/snapshots_service_pb.js'; // Helper functions diff --git a/packages/js-client-grpc/src/proto/collections_pb.ts b/packages/js-client-grpc/src/proto/collections_pb.ts index bf8881e..8474630 100644 --- a/packages/js-client-grpc/src/proto/collections_pb.ts +++ b/packages/js-client-grpc/src/proto/collections_pb.ts @@ -6,13 +6,15 @@ import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2" import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2"; import type { Value } from "./json_with_int_pb.js"; import { file_json_with_int } from "./json_with_int_pb.js"; +import type { Filter } from "./common_pb.js"; +import { file_common } from "./common_pb.js"; import type { Message } from "@bufbuild/protobuf"; /** * Describes the file collections.proto. */ export const file_collections: GenFile = /*@__PURE__*/ - fileDesc("ChFjb2xsZWN0aW9ucy5wcm90bxIGcWRyYW50IoMDCgxWZWN0b3JQYXJhbXMSDAoEc2l6ZRgBIAEoBBIiCghkaXN0YW5jZRgCIAEoDjIQLnFkcmFudC5EaXN0YW5jZRIwCgtobnN3X2NvbmZpZxgDIAEoCzIWLnFkcmFudC5IbnN3Q29uZmlnRGlmZkgAiAEBEjwKE3F1YW50aXphdGlvbl9jb25maWcYBCABKAsyGi5xZHJhbnQuUXVhbnRpemF0aW9uQ29uZmlnSAGIAQESFAoHb25fZGlzaxgFIAEoCEgCiAEBEicKCGRhdGF0eXBlGAYgASgOMhAucWRyYW50LkRhdGF0eXBlSAOIAQESOgoSbXVsdGl2ZWN0b3JfY29uZmlnGAcgASgLMhkucWRyYW50Lk11bHRpVmVjdG9yQ29uZmlnSASIAQFCDgoMX2huc3dfY29uZmlnQhYKFF9xdWFudGl6YXRpb25fY29uZmlnQgoKCF9vbl9kaXNrQgsKCV9kYXRhdHlwZUIVChNfbXVsdGl2ZWN0b3JfY29uZmlnItABChBWZWN0b3JQYXJhbXNEaWZmEjAKC2huc3dfY29uZmlnGAEgASgLMhYucWRyYW50Lkhuc3dDb25maWdEaWZmSACIAQESQAoTcXVhbnRpemF0aW9uX2NvbmZpZxgCIAEoCzIeLnFkcmFudC5RdWFudGl6YXRpb25Db25maWdEaWZmSAGIAQESFAoHb25fZGlzaxgDIAEoCEgCiAEBQg4KDF9obnN3X2NvbmZpZ0IWChRfcXVhbnRpemF0aW9uX2NvbmZpZ0IKCghfb25fZGlzayKCAQoPVmVjdG9yUGFyYW1zTWFwEi0KA21hcBgBIAMoCzIgLnFkcmFudC5WZWN0b3JQYXJhbXNNYXAuTWFwRW50cnkaQAoITWFwRW50cnkSCwoDa2V5GAEgASgJEiMKBXZhbHVlGAIgASgLMhQucWRyYW50LlZlY3RvclBhcmFtczoCOAEijgEKE1ZlY3RvclBhcmFtc0RpZmZNYXASMQoDbWFwGAEgAygLMiQucWRyYW50LlZlY3RvclBhcmFtc0RpZmZNYXAuTWFwRW50cnkaRAoITWFwRW50cnkSCwoDa2V5GAEgASgJEicKBXZhbHVlGAIgASgLMhgucWRyYW50LlZlY3RvclBhcmFtc0RpZmY6AjgBInAKDVZlY3RvcnNDb25maWcSJgoGcGFyYW1zGAEgASgLMhQucWRyYW50LlZlY3RvclBhcmFtc0gAEi0KCnBhcmFtc19tYXAYAiABKAsyFy5xZHJhbnQuVmVjdG9yUGFyYW1zTWFwSABCCAoGY29uZmlnInwKEVZlY3RvcnNDb25maWdEaWZmEioKBnBhcmFtcxgBIAEoCzIYLnFkcmFudC5WZWN0b3JQYXJhbXNEaWZmSAASMQoKcGFyYW1zX21hcBgCIAEoCzIbLnFkcmFudC5WZWN0b3JQYXJhbXNEaWZmTWFwSABCCAoGY29uZmlnIoMBChJTcGFyc2VWZWN0b3JQYXJhbXMSLQoFaW5kZXgYASABKAsyGS5xZHJhbnQuU3BhcnNlSW5kZXhDb25maWdIAIgBARInCghtb2RpZmllchgCIAEoDjIQLnFkcmFudC5Nb2RpZmllckgBiAEBQggKBl9pbmRleEILCglfbW9kaWZpZXIijgEKElNwYXJzZVZlY3RvckNvbmZpZxIwCgNtYXAYASADKAsyIy5xZHJhbnQuU3BhcnNlVmVjdG9yQ29uZmlnLk1hcEVudHJ5GkYKCE1hcEVudHJ5EgsKA2tleRgBIAEoCRIpCgV2YWx1ZRgCIAEoCzIaLnFkcmFudC5TcGFyc2VWZWN0b3JQYXJhbXM6AjgBIkYKEU11bHRpVmVjdG9yQ29uZmlnEjEKCmNvbXBhcmF0b3IYASABKA4yHS5xZHJhbnQuTXVsdGlWZWN0b3JDb21wYXJhdG9yIjMKGEdldENvbGxlY3Rpb25JbmZvUmVxdWVzdBIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkiMgoXQ29sbGVjdGlvbkV4aXN0c1JlcXVlc3QSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJIiIKEENvbGxlY3Rpb25FeGlzdHMSDgoGZXhpc3RzGAEgASgIIlIKGENvbGxlY3Rpb25FeGlzdHNSZXNwb25zZRIoCgZyZXN1bHQYASABKAsyGC5xZHJhbnQuQ29sbGVjdGlvbkV4aXN0cxIMCgR0aW1lGAIgASgBIhgKFkxpc3RDb2xsZWN0aW9uc1JlcXVlc3QiJQoVQ29sbGVjdGlvbkRlc2NyaXB0aW9uEgwKBG5hbWUYASABKAkiUQoZR2V0Q29sbGVjdGlvbkluZm9SZXNwb25zZRImCgZyZXN1bHQYASABKAsyFi5xZHJhbnQuQ29sbGVjdGlvbkluZm8SDAoEdGltZRgCIAEoASJbChdMaXN0Q29sbGVjdGlvbnNSZXNwb25zZRIyCgtjb2xsZWN0aW9ucxgBIAMoCzIdLnFkcmFudC5Db2xsZWN0aW9uRGVzY3JpcHRpb24SDAoEdGltZRgCIAEoASKEAQoWTWF4T3B0aW1pemF0aW9uVGhyZWFkcxIPCgV2YWx1ZRgBIAEoBEgAEjkKB3NldHRpbmcYAiABKA4yJi5xZHJhbnQuTWF4T3B0aW1pemF0aW9uVGhyZWFkcy5TZXR0aW5nSAAiEwoHU2V0dGluZxIICgRBdXRvEABCCQoHdmFyaWFudCIsCg9PcHRpbWl6ZXJTdGF0dXMSCgoCb2sYASABKAgSDQoFZXJyb3IYAiABKAkiJAoRQ29sbGVjdGlvbldhcm5pbmcSDwoHbWVzc2FnZRgBIAEoCSLAAgoOSG5zd0NvbmZpZ0RpZmYSDgoBbRgBIAEoBEgAiAEBEhkKDGVmX2NvbnN0cnVjdBgCIAEoBEgBiAEBEiAKE2Z1bGxfc2Nhbl90aHJlc2hvbGQYAyABKARIAogBARIhChRtYXhfaW5kZXhpbmdfdGhyZWFkcxgEIAEoBEgDiAEBEhQKB29uX2Rpc2sYBSABKAhIBIgBARIWCglwYXlsb2FkX20YBiABKARIBYgBARIbCg5pbmxpbmVfc3RvcmFnZRgHIAEoCEgGiAEBQgQKAl9tQg8KDV9lZl9jb25zdHJ1Y3RCFgoUX2Z1bGxfc2Nhbl90aHJlc2hvbGRCFwoVX21heF9pbmRleGluZ190aHJlYWRzQgoKCF9vbl9kaXNrQgwKCl9wYXlsb2FkX21CEQoPX2lubGluZV9zdG9yYWdlIqUBChFTcGFyc2VJbmRleENvbmZpZxIgChNmdWxsX3NjYW5fdGhyZXNob2xkGAEgASgESACIAQESFAoHb25fZGlzaxgCIAEoCEgBiAEBEicKCGRhdGF0eXBlGAMgASgOMhAucWRyYW50LkRhdGF0eXBlSAKIAQFCFgoUX2Z1bGxfc2Nhbl90aHJlc2hvbGRCCgoIX29uX2Rpc2tCCwoJX2RhdGF0eXBlIq8BCg1XYWxDb25maWdEaWZmEhwKD3dhbF9jYXBhY2l0eV9tYhgBIAEoBEgAiAEBEh8KEndhbF9zZWdtZW50c19haGVhZBgCIAEoBEgBiAEBEh4KEXdhbF9yZXRhaW5fY2xvc2VkGAMgASgESAKIAQFCEgoQX3dhbF9jYXBhY2l0eV9tYkIVChNfd2FsX3NlZ21lbnRzX2FoZWFkQhQKEl93YWxfcmV0YWluX2Nsb3NlZCLmBAoUT3B0aW1pemVyc0NvbmZpZ0RpZmYSHgoRZGVsZXRlZF90aHJlc2hvbGQYASABKAFIAIgBARIlChh2YWN1dW1fbWluX3ZlY3Rvcl9udW1iZXIYAiABKARIAYgBARIjChZkZWZhdWx0X3NlZ21lbnRfbnVtYmVyGAMgASgESAKIAQESHQoQbWF4X3NlZ21lbnRfc2l6ZRgEIAEoBEgDiAEBEh0KEG1lbW1hcF90aHJlc2hvbGQYBSABKARIBIgBARIfChJpbmRleGluZ190aHJlc2hvbGQYBiABKARIBYgBARIfChJmbHVzaF9pbnRlcnZhbF9zZWMYByABKARIBogBARIwCiNkZXByZWNhdGVkX21heF9vcHRpbWl6YXRpb25fdGhyZWFkcxgIIAEoBEgHiAEBEkUKGG1heF9vcHRpbWl6YXRpb25fdGhyZWFkcxgJIAEoCzIeLnFkcmFudC5NYXhPcHRpbWl6YXRpb25UaHJlYWRzSAiIAQFCFAoSX2RlbGV0ZWRfdGhyZXNob2xkQhsKGV92YWN1dW1fbWluX3ZlY3Rvcl9udW1iZXJCGQoXX2RlZmF1bHRfc2VnbWVudF9udW1iZXJCEwoRX21heF9zZWdtZW50X3NpemVCEwoRX21lbW1hcF90aHJlc2hvbGRCFQoTX2luZGV4aW5nX3RocmVzaG9sZEIVChNfZmx1c2hfaW50ZXJ2YWxfc2VjQiYKJF9kZXByZWNhdGVkX21heF9vcHRpbWl6YXRpb25fdGhyZWFkc0IbChlfbWF4X29wdGltaXphdGlvbl90aHJlYWRzIogBChJTY2FsYXJRdWFudGl6YXRpb24SJgoEdHlwZRgBIAEoDjIYLnFkcmFudC5RdWFudGl6YXRpb25UeXBlEhUKCHF1YW50aWxlGAIgASgCSACIAQESFwoKYWx3YXlzX3JhbRgDIAEoCEgBiAEBQgsKCV9xdWFudGlsZUINCgtfYWx3YXlzX3JhbSJsChNQcm9kdWN0UXVhbnRpemF0aW9uEi0KC2NvbXByZXNzaW9uGAEgASgOMhgucWRyYW50LkNvbXByZXNzaW9uUmF0aW8SFwoKYWx3YXlzX3JhbRgCIAEoCEgAiAEBQg0KC19hbHdheXNfcmFtIrYBCh9CaW5hcnlRdWFudGl6YXRpb25RdWVyeUVuY29kaW5nEkIKB3NldHRpbmcYBCABKA4yLy5xZHJhbnQuQmluYXJ5UXVhbnRpemF0aW9uUXVlcnlFbmNvZGluZy5TZXR0aW5nSAAiRAoHU2V0dGluZxILCgdEZWZhdWx0EAASCgoGQmluYXJ5EAESDwoLU2NhbGFyNEJpdHMQAhIPCgtTY2FsYXI4Qml0cxADQgkKB3ZhcmlhbnQi3QEKEkJpbmFyeVF1YW50aXphdGlvbhIXCgphbHdheXNfcmFtGAEgASgISACIAQESOQoIZW5jb2RpbmcYAiABKA4yIi5xZHJhbnQuQmluYXJ5UXVhbnRpemF0aW9uRW5jb2RpbmdIAYgBARJECg5xdWVyeV9lbmNvZGluZxgDIAEoCzInLnFkcmFudC5CaW5hcnlRdWFudGl6YXRpb25RdWVyeUVuY29kaW5nSAKIAQFCDQoLX2Fsd2F5c19yYW1CCwoJX2VuY29kaW5nQhEKD19xdWVyeV9lbmNvZGluZyKwAQoSUXVhbnRpemF0aW9uQ29uZmlnEiwKBnNjYWxhchgBIAEoCzIaLnFkcmFudC5TY2FsYXJRdWFudGl6YXRpb25IABIuCgdwcm9kdWN0GAIgASgLMhsucWRyYW50LlByb2R1Y3RRdWFudGl6YXRpb25IABIsCgZiaW5hcnkYAyABKAsyGi5xZHJhbnQuQmluYXJ5UXVhbnRpemF0aW9uSABCDgoMcXVhbnRpemF0aW9uIgoKCERpc2FibGVkItoBChZRdWFudGl6YXRpb25Db25maWdEaWZmEiwKBnNjYWxhchgBIAEoCzIaLnFkcmFudC5TY2FsYXJRdWFudGl6YXRpb25IABIuCgdwcm9kdWN0GAIgASgLMhsucWRyYW50LlByb2R1Y3RRdWFudGl6YXRpb25IABIkCghkaXNhYmxlZBgDIAEoCzIQLnFkcmFudC5EaXNhYmxlZEgAEiwKBmJpbmFyeRgEIAEoCzIaLnFkcmFudC5CaW5hcnlRdWFudGl6YXRpb25IAEIOCgxxdWFudGl6YXRpb24iuQkKEFN0cmljdE1vZGVDb25maWcSFAoHZW5hYmxlZBgBIAEoCEgAiAEBEhwKD21heF9xdWVyeV9saW1pdBgCIAEoDUgBiAEBEhgKC21heF90aW1lb3V0GAMgASgNSAKIAQESKQocdW5pbmRleGVkX2ZpbHRlcmluZ19yZXRyaWV2ZRgEIAEoCEgDiAEBEicKGnVuaW5kZXhlZF9maWx0ZXJpbmdfdXBkYXRlGAUgASgISASIAQESHwoSc2VhcmNoX21heF9obnN3X2VmGAYgASgNSAWIAQESHwoSc2VhcmNoX2FsbG93X2V4YWN0GAcgASgISAaIAQESJAoXc2VhcmNoX21heF9vdmVyc2FtcGxpbmcYCCABKAJIB4gBARIhChR1cHNlcnRfbWF4X2JhdGNoc2l6ZRgJIAEoBEgIiAEBEi0KIG1heF9jb2xsZWN0aW9uX3ZlY3Rvcl9zaXplX2J5dGVzGAogASgESAmIAQESHAoPcmVhZF9yYXRlX2xpbWl0GAsgASgNSAqIAQESHQoQd3JpdGVfcmF0ZV9saW1pdBgMIAEoDUgLiAEBEi4KIW1heF9jb2xsZWN0aW9uX3BheWxvYWRfc2l6ZV9ieXRlcxgNIAEoBEgMiAEBEiIKFWZpbHRlcl9tYXhfY29uZGl0aW9ucxgOIAEoBEgNiAEBEh8KEmNvbmRpdGlvbl9tYXhfc2l6ZRgPIAEoBEgOiAEBEkQKEm11bHRpdmVjdG9yX2NvbmZpZxgQIAEoCzIjLnFkcmFudC5TdHJpY3RNb2RlTXVsdGl2ZWN0b3JDb25maWdID4gBARI6Cg1zcGFyc2VfY29uZmlnGBEgASgLMh4ucWRyYW50LlN0cmljdE1vZGVTcGFyc2VDb25maWdIEIgBARIdChBtYXhfcG9pbnRzX2NvdW50GBIgASgESBGIAQESJAoXbWF4X3BheWxvYWRfaW5kZXhfY291bnQYEyABKARIEogBAUIKCghfZW5hYmxlZEISChBfbWF4X3F1ZXJ5X2xpbWl0Qg4KDF9tYXhfdGltZW91dEIfCh1fdW5pbmRleGVkX2ZpbHRlcmluZ19yZXRyaWV2ZUIdChtfdW5pbmRleGVkX2ZpbHRlcmluZ191cGRhdGVCFQoTX3NlYXJjaF9tYXhfaG5zd19lZkIVChNfc2VhcmNoX2FsbG93X2V4YWN0QhoKGF9zZWFyY2hfbWF4X292ZXJzYW1wbGluZ0IXChVfdXBzZXJ0X21heF9iYXRjaHNpemVCIwohX21heF9jb2xsZWN0aW9uX3ZlY3Rvcl9zaXplX2J5dGVzQhIKEF9yZWFkX3JhdGVfbGltaXRCEwoRX3dyaXRlX3JhdGVfbGltaXRCJAoiX21heF9jb2xsZWN0aW9uX3BheWxvYWRfc2l6ZV9ieXRlc0IYChZfZmlsdGVyX21heF9jb25kaXRpb25zQhUKE19jb25kaXRpb25fbWF4X3NpemVCFQoTX211bHRpdmVjdG9yX2NvbmZpZ0IQCg5fc3BhcnNlX2NvbmZpZ0ITChFfbWF4X3BvaW50c19jb3VudEIaChhfbWF4X3BheWxvYWRfaW5kZXhfY291bnQisAEKFlN0cmljdE1vZGVTcGFyc2VDb25maWcSRwoNc3BhcnNlX2NvbmZpZxgBIAMoCzIwLnFkcmFudC5TdHJpY3RNb2RlU3BhcnNlQ29uZmlnLlNwYXJzZUNvbmZpZ0VudHJ5Gk0KEVNwYXJzZUNvbmZpZ0VudHJ5EgsKA2tleRgBIAEoCRInCgV2YWx1ZRgCIAEoCzIYLnFkcmFudC5TdHJpY3RNb2RlU3BhcnNlOgI4ASI6ChBTdHJpY3RNb2RlU3BhcnNlEhcKCm1heF9sZW5ndGgYCiABKARIAIgBAUINCgtfbWF4X2xlbmd0aCLOAQobU3RyaWN0TW9kZU11bHRpdmVjdG9yQ29uZmlnElYKEm11bHRpdmVjdG9yX2NvbmZpZxgBIAMoCzI6LnFkcmFudC5TdHJpY3RNb2RlTXVsdGl2ZWN0b3JDb25maWcuTXVsdGl2ZWN0b3JDb25maWdFbnRyeRpXChZNdWx0aXZlY3RvckNvbmZpZ0VudHJ5EgsKA2tleRgBIAEoCRIsCgV2YWx1ZRgCIAEoCzIdLnFkcmFudC5TdHJpY3RNb2RlTXVsdGl2ZWN0b3I6AjgBIkEKFVN0cmljdE1vZGVNdWx0aXZlY3RvchIYCgttYXhfdmVjdG9ycxgBIAEoBEgAiAEBQg4KDF9tYXhfdmVjdG9ycyKbCAoQQ3JlYXRlQ29sbGVjdGlvbhIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSMAoLaG5zd19jb25maWcYBCABKAsyFi5xZHJhbnQuSG5zd0NvbmZpZ0RpZmZIAIgBARIuCgp3YWxfY29uZmlnGAUgASgLMhUucWRyYW50LldhbENvbmZpZ0RpZmZIAYgBARI8ChFvcHRpbWl6ZXJzX2NvbmZpZxgGIAEoCzIcLnFkcmFudC5PcHRpbWl6ZXJzQ29uZmlnRGlmZkgCiAEBEhkKDHNoYXJkX251bWJlchgHIAEoDUgDiAEBEhwKD29uX2Rpc2tfcGF5bG9hZBgIIAEoCEgEiAEBEhQKB3RpbWVvdXQYCSABKARIBYgBARIyCg52ZWN0b3JzX2NvbmZpZxgKIAEoCzIVLnFkcmFudC5WZWN0b3JzQ29uZmlnSAaIAQESHwoScmVwbGljYXRpb25fZmFjdG9yGAsgASgNSAeIAQESJQoYd3JpdGVfY29uc2lzdGVuY3lfZmFjdG9yGAwgASgNSAiIAQESPAoTcXVhbnRpemF0aW9uX2NvbmZpZxgOIAEoCzIaLnFkcmFudC5RdWFudGl6YXRpb25Db25maWdICYgBARI0Cg9zaGFyZGluZ19tZXRob2QYDyABKA4yFi5xZHJhbnQuU2hhcmRpbmdNZXRob2RICogBARI+ChVzcGFyc2VfdmVjdG9yc19jb25maWcYECABKAsyGi5xZHJhbnQuU3BhcnNlVmVjdG9yQ29uZmlnSAuIAQESOQoSc3RyaWN0X21vZGVfY29uZmlnGBEgASgLMhgucWRyYW50LlN0cmljdE1vZGVDb25maWdIDIgBARI4CghtZXRhZGF0YRgSIAMoCzImLnFkcmFudC5DcmVhdGVDb2xsZWN0aW9uLk1ldGFkYXRhRW50cnkaPgoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5xZHJhbnQuVmFsdWU6AjgBQg4KDF9obnN3X2NvbmZpZ0INCgtfd2FsX2NvbmZpZ0IUChJfb3B0aW1pemVyc19jb25maWdCDwoNX3NoYXJkX251bWJlckISChBfb25fZGlza19wYXlsb2FkQgoKCF90aW1lb3V0QhEKD192ZWN0b3JzX2NvbmZpZ0IVChNfcmVwbGljYXRpb25fZmFjdG9yQhsKGV93cml0ZV9jb25zaXN0ZW5jeV9mYWN0b3JCFgoUX3F1YW50aXphdGlvbl9jb25maWdCEgoQX3NoYXJkaW5nX21ldGhvZEIYChZfc3BhcnNlX3ZlY3RvcnNfY29uZmlnQhUKE19zdHJpY3RfbW9kZV9jb25maWdKBAgCEANKBAgDEARKBAgNEA4i7AUKEFVwZGF0ZUNvbGxlY3Rpb24SFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEjwKEW9wdGltaXplcnNfY29uZmlnGAIgASgLMhwucWRyYW50Lk9wdGltaXplcnNDb25maWdEaWZmSACIAQESFAoHdGltZW91dBgDIAEoBEgBiAEBEjEKBnBhcmFtcxgEIAEoCzIcLnFkcmFudC5Db2xsZWN0aW9uUGFyYW1zRGlmZkgCiAEBEjAKC2huc3dfY29uZmlnGAUgASgLMhYucWRyYW50Lkhuc3dDb25maWdEaWZmSAOIAQESNgoOdmVjdG9yc19jb25maWcYBiABKAsyGS5xZHJhbnQuVmVjdG9yc0NvbmZpZ0RpZmZIBIgBARJAChNxdWFudGl6YXRpb25fY29uZmlnGAcgASgLMh4ucWRyYW50LlF1YW50aXphdGlvbkNvbmZpZ0RpZmZIBYgBARI+ChVzcGFyc2VfdmVjdG9yc19jb25maWcYCCABKAsyGi5xZHJhbnQuU3BhcnNlVmVjdG9yQ29uZmlnSAaIAQESOQoSc3RyaWN0X21vZGVfY29uZmlnGAkgASgLMhgucWRyYW50LlN0cmljdE1vZGVDb25maWdIB4gBARI4CghtZXRhZGF0YRgKIAMoCzImLnFkcmFudC5VcGRhdGVDb2xsZWN0aW9uLk1ldGFkYXRhRW50cnkaPgoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5xZHJhbnQuVmFsdWU6AjgBQhQKEl9vcHRpbWl6ZXJzX2NvbmZpZ0IKCghfdGltZW91dEIJCgdfcGFyYW1zQg4KDF9obnN3X2NvbmZpZ0IRCg9fdmVjdG9yc19jb25maWdCFgoUX3F1YW50aXphdGlvbl9jb25maWdCGAoWX3NwYXJzZV92ZWN0b3JzX2NvbmZpZ0IVChNfc3RyaWN0X21vZGVfY29uZmlnIk0KEERlbGV0ZUNvbGxlY3Rpb24SFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhQKB3RpbWVvdXQYAiABKARIAIgBAUIKCghfdGltZW91dCI7ChtDb2xsZWN0aW9uT3BlcmF0aW9uUmVzcG9uc2USDgoGcmVzdWx0GAEgASgIEgwKBHRpbWUYAiABKAEi7gMKEENvbGxlY3Rpb25QYXJhbXMSFAoMc2hhcmRfbnVtYmVyGAMgASgNEhcKD29uX2Rpc2tfcGF5bG9hZBgEIAEoCBIyCg52ZWN0b3JzX2NvbmZpZxgFIAEoCzIVLnFkcmFudC5WZWN0b3JzQ29uZmlnSACIAQESHwoScmVwbGljYXRpb25fZmFjdG9yGAYgASgNSAGIAQESJQoYd3JpdGVfY29uc2lzdGVuY3lfZmFjdG9yGAcgASgNSAKIAQESIAoTcmVhZF9mYW5fb3V0X2ZhY3RvchgIIAEoDUgDiAEBEjQKD3NoYXJkaW5nX21ldGhvZBgJIAEoDjIWLnFkcmFudC5TaGFyZGluZ01ldGhvZEgEiAEBEj4KFXNwYXJzZV92ZWN0b3JzX2NvbmZpZxgKIAEoCzIaLnFkcmFudC5TcGFyc2VWZWN0b3JDb25maWdIBYgBAUIRCg9fdmVjdG9yc19jb25maWdCFQoTX3JlcGxpY2F0aW9uX2ZhY3RvckIbChlfd3JpdGVfY29uc2lzdGVuY3lfZmFjdG9yQhYKFF9yZWFkX2Zhbl9vdXRfZmFjdG9yQhIKEF9zaGFyZGluZ19tZXRob2RCGAoWX3NwYXJzZV92ZWN0b3JzX2NvbmZpZ0oECAEQAkoECAIQAyL+AQoUQ29sbGVjdGlvblBhcmFtc0RpZmYSHwoScmVwbGljYXRpb25fZmFjdG9yGAEgASgNSACIAQESJQoYd3JpdGVfY29uc2lzdGVuY3lfZmFjdG9yGAIgASgNSAGIAQESHAoPb25fZGlza19wYXlsb2FkGAMgASgISAKIAQESIAoTcmVhZF9mYW5fb3V0X2ZhY3RvchgEIAEoDUgDiAEBQhUKE19yZXBsaWNhdGlvbl9mYWN0b3JCGwoZX3dyaXRlX2NvbnNpc3RlbmN5X2ZhY3RvckISChBfb25fZGlza19wYXlsb2FkQhYKFF9yZWFkX2Zhbl9vdXRfZmFjdG9yIu4DChBDb2xsZWN0aW9uQ29uZmlnEigKBnBhcmFtcxgBIAEoCzIYLnFkcmFudC5Db2xsZWN0aW9uUGFyYW1zEisKC2huc3dfY29uZmlnGAIgASgLMhYucWRyYW50Lkhuc3dDb25maWdEaWZmEjYKEG9wdGltaXplcl9jb25maWcYAyABKAsyHC5xZHJhbnQuT3B0aW1pemVyc0NvbmZpZ0RpZmYSKQoKd2FsX2NvbmZpZxgEIAEoCzIVLnFkcmFudC5XYWxDb25maWdEaWZmEjwKE3F1YW50aXphdGlvbl9jb25maWcYBSABKAsyGi5xZHJhbnQuUXVhbnRpemF0aW9uQ29uZmlnSACIAQESOQoSc3RyaWN0X21vZGVfY29uZmlnGAYgASgLMhgucWRyYW50LlN0cmljdE1vZGVDb25maWdIAYgBARI4CghtZXRhZGF0YRgHIAMoCzImLnFkcmFudC5Db2xsZWN0aW9uQ29uZmlnLk1ldGFkYXRhRW50cnkaPgoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5xZHJhbnQuVmFsdWU6AjgBQhYKFF9xdWFudGl6YXRpb25fY29uZmlnQhUKE19zdHJpY3RfbW9kZV9jb25maWciXAoSS2V5d29yZEluZGV4UGFyYW1zEhYKCWlzX3RlbmFudBgBIAEoCEgAiAEBEhQKB29uX2Rpc2sYAiABKAhIAYgBAUIMCgpfaXNfdGVuYW50QgoKCF9vbl9kaXNrIqABChJJbnRlZ2VySW5kZXhQYXJhbXMSEwoGbG9va3VwGAEgASgISACIAQESEgoFcmFuZ2UYAiABKAhIAYgBARIZCgxpc19wcmluY2lwYWwYAyABKAhIAogBARIUCgdvbl9kaXNrGAQgASgISAOIAQFCCQoHX2xvb2t1cEIICgZfcmFuZ2VCDwoNX2lzX3ByaW5jaXBhbEIKCghfb25fZGlzayJgChBGbG9hdEluZGV4UGFyYW1zEhQKB29uX2Rpc2sYASABKAhIAIgBARIZCgxpc19wcmluY2lwYWwYAiABKAhIAYgBAUIKCghfb25fZGlza0IPCg1faXNfcHJpbmNpcGFsIjIKDkdlb0luZGV4UGFyYW1zEhQKB29uX2Rpc2sYASABKAhIAIgBAUIKCghfb25fZGlzayIxCgxTdG9wd29yZHNTZXQSEQoJbGFuZ3VhZ2VzGAEgAygJEg4KBmN1c3RvbRgCIAMoCSK4AwoPVGV4dEluZGV4UGFyYW1zEigKCXRva2VuaXplchgBIAEoDjIVLnFkcmFudC5Ub2tlbml6ZXJUeXBlEhYKCWxvd2VyY2FzZRgCIAEoCEgAiAEBEhoKDW1pbl90b2tlbl9sZW4YAyABKARIAYgBARIaCg1tYXhfdG9rZW5fbGVuGAQgASgESAKIAQESFAoHb25fZGlzaxgFIAEoCEgDiAEBEiwKCXN0b3B3b3JkcxgGIAEoCzIULnFkcmFudC5TdG9wd29yZHNTZXRIBIgBARIcCg9waHJhc2VfbWF0Y2hpbmcYByABKAhIBYgBARIvCgdzdGVtbWVyGAggASgLMhkucWRyYW50LlN0ZW1taW5nQWxnb3JpdGhtSAaIAQESGgoNYXNjaWlfZm9sZGluZxgJIAEoCEgHiAEBQgwKCl9sb3dlcmNhc2VCEAoOX21pbl90b2tlbl9sZW5CEAoOX21heF90b2tlbl9sZW5CCgoIX29uX2Rpc2tCDAoKX3N0b3B3b3Jkc0ISChBfcGhyYXNlX21hdGNoaW5nQgoKCF9zdGVtbWVyQhAKDl9hc2NpaV9mb2xkaW5nIlIKEVN0ZW1taW5nQWxnb3JpdGhtEioKCHNub3diYWxsGAEgASgLMhYucWRyYW50LlNub3diYWxsUGFyYW1zSABCEQoPc3RlbW1pbmdfcGFyYW1zIiIKDlNub3diYWxsUGFyYW1zEhAKCGxhbmd1YWdlGAEgASgJIjMKD0Jvb2xJbmRleFBhcmFtcxIUCgdvbl9kaXNrGAEgASgISACIAQFCCgoIX29uX2Rpc2siYwoTRGF0ZXRpbWVJbmRleFBhcmFtcxIUCgdvbl9kaXNrGAEgASgISACIAQESGQoMaXNfcHJpbmNpcGFsGAIgASgISAGIAQFCCgoIX29uX2Rpc2tCDwoNX2lzX3ByaW5jaXBhbCJZCg9VdWlkSW5kZXhQYXJhbXMSFgoJaXNfdGVuYW50GAEgASgISACIAQESFAoHb25fZGlzaxgCIAEoCEgBiAEBQgwKCl9pc190ZW5hbnRCCgoIX29uX2Rpc2si6AMKElBheWxvYWRJbmRleFBhcmFtcxI6ChRrZXl3b3JkX2luZGV4X3BhcmFtcxgDIAEoCzIaLnFkcmFudC5LZXl3b3JkSW5kZXhQYXJhbXNIABI6ChRpbnRlZ2VyX2luZGV4X3BhcmFtcxgCIAEoCzIaLnFkcmFudC5JbnRlZ2VySW5kZXhQYXJhbXNIABI2ChJmbG9hdF9pbmRleF9wYXJhbXMYBCABKAsyGC5xZHJhbnQuRmxvYXRJbmRleFBhcmFtc0gAEjIKEGdlb19pbmRleF9wYXJhbXMYBSABKAsyFi5xZHJhbnQuR2VvSW5kZXhQYXJhbXNIABI0ChF0ZXh0X2luZGV4X3BhcmFtcxgBIAEoCzIXLnFkcmFudC5UZXh0SW5kZXhQYXJhbXNIABI0ChFib29sX2luZGV4X3BhcmFtcxgGIAEoCzIXLnFkcmFudC5Cb29sSW5kZXhQYXJhbXNIABI8ChVkYXRldGltZV9pbmRleF9wYXJhbXMYByABKAsyGy5xZHJhbnQuRGF0ZXRpbWVJbmRleFBhcmFtc0gAEjQKEXV1aWRfaW5kZXhfcGFyYW1zGAggASgLMhcucWRyYW50LlV1aWRJbmRleFBhcmFtc0gAQg4KDGluZGV4X3BhcmFtcyKdAQoRUGF5bG9hZFNjaGVtYUluZm8SLAoJZGF0YV90eXBlGAEgASgOMhkucWRyYW50LlBheWxvYWRTY2hlbWFUeXBlEi8KBnBhcmFtcxgCIAEoCzIaLnFkcmFudC5QYXlsb2FkSW5kZXhQYXJhbXNIAIgBARITCgZwb2ludHMYAyABKARIAYgBAUIJCgdfcGFyYW1zQgkKB19wb2ludHMi7AMKDkNvbGxlY3Rpb25JbmZvEigKBnN0YXR1cxgBIAEoDjIYLnFkcmFudC5Db2xsZWN0aW9uU3RhdHVzEjEKEG9wdGltaXplcl9zdGF0dXMYAiABKAsyFy5xZHJhbnQuT3B0aW1pemVyU3RhdHVzEhYKDnNlZ21lbnRzX2NvdW50GAQgASgEEigKBmNvbmZpZxgHIAEoCzIYLnFkcmFudC5Db2xsZWN0aW9uQ29uZmlnEkEKDnBheWxvYWRfc2NoZW1hGAggAygLMikucWRyYW50LkNvbGxlY3Rpb25JbmZvLlBheWxvYWRTY2hlbWFFbnRyeRIZCgxwb2ludHNfY291bnQYCSABKARIAIgBARIiChVpbmRleGVkX3ZlY3RvcnNfY291bnQYCiABKARIAYgBARIrCgh3YXJuaW5ncxgLIAMoCzIZLnFkcmFudC5Db2xsZWN0aW9uV2FybmluZxpPChJQYXlsb2FkU2NoZW1hRW50cnkSCwoDa2V5GAEgASgJEigKBXZhbHVlGAIgASgLMhkucWRyYW50LlBheWxvYWRTY2hlbWFJbmZvOgI4AUIPCg1fcG9pbnRzX2NvdW50QhgKFl9pbmRleGVkX3ZlY3RvcnNfY291bnRKBAgDEARKBAgFEAZKBAgGEAciWwoNQ2hhbmdlQWxpYXNlcxIoCgdhY3Rpb25zGAEgAygLMhcucWRyYW50LkFsaWFzT3BlcmF0aW9ucxIUCgd0aW1lb3V0GAIgASgESACIAQFCCgoIX3RpbWVvdXQiogEKD0FsaWFzT3BlcmF0aW9ucxIrCgxjcmVhdGVfYWxpYXMYASABKAsyEy5xZHJhbnQuQ3JlYXRlQWxpYXNIABIrCgxyZW5hbWVfYWxpYXMYAiABKAsyEy5xZHJhbnQuUmVuYW1lQWxpYXNIABIrCgxkZWxldGVfYWxpYXMYAyABKAsyEy5xZHJhbnQuRGVsZXRlQWxpYXNIAEIICgZhY3Rpb24iOgoLQ3JlYXRlQWxpYXMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhIKCmFsaWFzX25hbWUYAiABKAkiPQoLUmVuYW1lQWxpYXMSFgoOb2xkX2FsaWFzX25hbWUYASABKAkSFgoObmV3X2FsaWFzX25hbWUYAiABKAkiIQoLRGVsZXRlQWxpYXMSEgoKYWxpYXNfbmFtZRgBIAEoCSIUChJMaXN0QWxpYXNlc1JlcXVlc3QiNwocTGlzdENvbGxlY3Rpb25BbGlhc2VzUmVxdWVzdBIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkiPwoQQWxpYXNEZXNjcmlwdGlvbhISCgphbGlhc19uYW1lGAEgASgJEhcKD2NvbGxlY3Rpb25fbmFtZRgCIAEoCSJOChNMaXN0QWxpYXNlc1Jlc3BvbnNlEikKB2FsaWFzZXMYASADKAsyGC5xZHJhbnQuQWxpYXNEZXNjcmlwdGlvbhIMCgR0aW1lGAIgASgBIjcKHENvbGxlY3Rpb25DbHVzdGVySW5mb1JlcXVlc3QSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJIjYKCFNoYXJkS2V5EhEKB2tleXdvcmQYASABKAlIABIQCgZudW1iZXIYAiABKARIAEIFCgNrZXkilQEKDkxvY2FsU2hhcmRJbmZvEhAKCHNoYXJkX2lkGAEgASgNEhQKDHBvaW50c19jb3VudBgCIAEoBBIjCgVzdGF0ZRgDIAEoDjIULnFkcmFudC5SZXBsaWNhU3RhdGUSKAoJc2hhcmRfa2V5GAQgASgLMhAucWRyYW50LlNoYXJkS2V5SACIAQFCDAoKX3NoYXJkX2tleSKRAQoPUmVtb3RlU2hhcmRJbmZvEhAKCHNoYXJkX2lkGAEgASgNEg8KB3BlZXJfaWQYAiABKAQSIwoFc3RhdGUYAyABKA4yFC5xZHJhbnQuUmVwbGljYVN0YXRlEigKCXNoYXJkX2tleRgEIAEoCzIQLnFkcmFudC5TaGFyZEtleUgAiAEBQgwKCl9zaGFyZF9rZXkidwoRU2hhcmRUcmFuc2ZlckluZm8SEAoIc2hhcmRfaWQYASABKA0SGAoLdG9fc2hhcmRfaWQYBSABKA1IAIgBARIMCgRmcm9tGAIgASgEEgoKAnRvGAMgASgEEgwKBHN5bmMYBCABKAhCDgoMX3RvX3NoYXJkX2lkIpsBCg5SZXNoYXJkaW5nSW5mbxIQCghzaGFyZF9pZBgBIAEoDRIPCgdwZWVyX2lkGAIgASgEEigKCXNoYXJkX2tleRgDIAEoCzIQLnFkcmFudC5TaGFyZEtleUgAiAEBEi4KCWRpcmVjdGlvbhgEIAEoDjIbLnFkcmFudC5SZXNoYXJkaW5nRGlyZWN0aW9uQgwKCl9zaGFyZF9rZXkijgIKHUNvbGxlY3Rpb25DbHVzdGVySW5mb1Jlc3BvbnNlEg8KB3BlZXJfaWQYASABKAQSEwoLc2hhcmRfY291bnQYAiABKAQSLAoMbG9jYWxfc2hhcmRzGAMgAygLMhYucWRyYW50LkxvY2FsU2hhcmRJbmZvEi4KDXJlbW90ZV9zaGFyZHMYBCADKAsyFy5xZHJhbnQuUmVtb3RlU2hhcmRJbmZvEjIKD3NoYXJkX3RyYW5zZmVycxgFIAMoCzIZLnFkcmFudC5TaGFyZFRyYW5zZmVySW5mbxI1ChVyZXNoYXJkaW5nX29wZXJhdGlvbnMYBiADKAsyFi5xZHJhbnQuUmVzaGFyZGluZ0luZm8irgEKCU1vdmVTaGFyZBIQCghzaGFyZF9pZBgBIAEoDRIYCgt0b19zaGFyZF9pZBgFIAEoDUgAiAEBEhQKDGZyb21fcGVlcl9pZBgCIAEoBBISCgp0b19wZWVyX2lkGAMgASgEEjAKBm1ldGhvZBgEIAEoDjIbLnFkcmFudC5TaGFyZFRyYW5zZmVyTWV0aG9kSAGIAQFCDgoMX3RvX3NoYXJkX2lkQgkKB19tZXRob2QiswEKDlJlcGxpY2F0ZVNoYXJkEhAKCHNoYXJkX2lkGAEgASgNEhgKC3RvX3NoYXJkX2lkGAUgASgNSACIAQESFAoMZnJvbV9wZWVyX2lkGAIgASgEEhIKCnRvX3BlZXJfaWQYAyABKAQSMAoGbWV0aG9kGAQgASgOMhsucWRyYW50LlNoYXJkVHJhbnNmZXJNZXRob2RIAYgBAUIOCgxfdG9fc2hhcmRfaWRCCQoHX21ldGhvZCJ6ChJBYm9ydFNoYXJkVHJhbnNmZXISEAoIc2hhcmRfaWQYASABKA0SGAoLdG9fc2hhcmRfaWQYBCABKA1IAIgBARIUCgxmcm9tX3BlZXJfaWQYAiABKAQSEgoKdG9fcGVlcl9pZBgDIAEoBEIOCgxfdG9fc2hhcmRfaWQipAEKD1Jlc3RhcnRUcmFuc2ZlchIQCghzaGFyZF9pZBgBIAEoDRIYCgt0b19zaGFyZF9pZBgFIAEoDUgAiAEBEhQKDGZyb21fcGVlcl9pZBgCIAEoBBISCgp0b19wZWVyX2lkGAMgASgEEisKBm1ldGhvZBgEIAEoDjIbLnFkcmFudC5TaGFyZFRyYW5zZmVyTWV0aG9kQg4KDF90b19zaGFyZF9pZCIsCgdSZXBsaWNhEhAKCHNoYXJkX2lkGAEgASgNEg8KB3BlZXJfaWQYAiABKAQi8gEKDkNyZWF0ZVNoYXJkS2V5EiMKCXNoYXJkX2tleRgBIAEoCzIQLnFkcmFudC5TaGFyZEtleRIaCg1zaGFyZHNfbnVtYmVyGAIgASgNSACIAQESHwoScmVwbGljYXRpb25fZmFjdG9yGAMgASgNSAGIAQESEQoJcGxhY2VtZW50GAQgAygEEjAKDWluaXRpYWxfc3RhdGUYBSABKA4yFC5xZHJhbnQuUmVwbGljYVN0YXRlSAKIAQFCEAoOX3NoYXJkc19udW1iZXJCFQoTX3JlcGxpY2F0aW9uX2ZhY3RvckIQCg5faW5pdGlhbF9zdGF0ZSI1Cg5EZWxldGVTaGFyZEtleRIjCglzaGFyZF9rZXkYASABKAsyEC5xZHJhbnQuU2hhcmRLZXkixQMKI1VwZGF0ZUNvbGxlY3Rpb25DbHVzdGVyU2V0dXBSZXF1ZXN0EhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRInCgptb3ZlX3NoYXJkGAIgASgLMhEucWRyYW50Lk1vdmVTaGFyZEgAEjEKD3JlcGxpY2F0ZV9zaGFyZBgDIAEoCzIWLnFkcmFudC5SZXBsaWNhdGVTaGFyZEgAEjQKDmFib3J0X3RyYW5zZmVyGAQgASgLMhoucWRyYW50LkFib3J0U2hhcmRUcmFuc2ZlckgAEicKDGRyb3BfcmVwbGljYRgFIAEoCzIPLnFkcmFudC5SZXBsaWNhSAASMgoQY3JlYXRlX3NoYXJkX2tleRgHIAEoCzIWLnFkcmFudC5DcmVhdGVTaGFyZEtleUgAEjIKEGRlbGV0ZV9zaGFyZF9rZXkYCCABKAsyFi5xZHJhbnQuRGVsZXRlU2hhcmRLZXlIABIzChByZXN0YXJ0X3RyYW5zZmVyGAkgASgLMhcucWRyYW50LlJlc3RhcnRUcmFuc2ZlckgAEhQKB3RpbWVvdXQYBiABKARIAYgBAUILCglvcGVyYXRpb25CCgoIX3RpbWVvdXQiNgokVXBkYXRlQ29sbGVjdGlvbkNsdXN0ZXJTZXR1cFJlc3BvbnNlEg4KBnJlc3VsdBgBIAEoCCJ7ChVDcmVhdGVTaGFyZEtleVJlcXVlc3QSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEicKB3JlcXVlc3QYAiABKAsyFi5xZHJhbnQuQ3JlYXRlU2hhcmRLZXkSFAoHdGltZW91dBgDIAEoBEgAiAEBQgoKCF90aW1lb3V0InsKFURlbGV0ZVNoYXJkS2V5UmVxdWVzdBIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSJwoHcmVxdWVzdBgCIAEoCzIWLnFkcmFudC5EZWxldGVTaGFyZEtleRIUCgd0aW1lb3V0GAMgASgESACIAQFCCgoIX3RpbWVvdXQiKAoWQ3JlYXRlU2hhcmRLZXlSZXNwb25zZRIOCgZyZXN1bHQYASABKAgiKAoWRGVsZXRlU2hhcmRLZXlSZXNwb25zZRIOCgZyZXN1bHQYASABKAgqPAoIRGF0YXR5cGUSCwoHRGVmYXVsdBAAEgsKB0Zsb2F0MzIQARIJCgVVaW50OBACEgsKB0Zsb2F0MTYQAyodCghNb2RpZmllchIICgROb25lEAASBwoDSWRmEAEqIwoVTXVsdGlWZWN0b3JDb21wYXJhdG9yEgoKBk1heFNpbRAAKk8KCERpc3RhbmNlEhMKD1Vua25vd25EaXN0YW5jZRAAEgoKBkNvc2luZRABEgoKBkV1Y2xpZBACEgcKA0RvdBADEg0KCU1hbmhhdHRhbhAEKlkKEENvbGxlY3Rpb25TdGF0dXMSGwoXVW5rbm93bkNvbGxlY3Rpb25TdGF0dXMQABIJCgVHcmVlbhABEgoKBlllbGxvdxACEgcKA1JlZBADEggKBEdyZXkQBCp+ChFQYXlsb2FkU2NoZW1hVHlwZRIPCgtVbmtub3duVHlwZRAAEgsKB0tleXdvcmQQARILCgdJbnRlZ2VyEAISCQoFRmxvYXQQAxIHCgNHZW8QBBIICgRUZXh0EAUSCAoEQm9vbBAGEgwKCERhdGV0aW1lEAcSCAoEVXVpZBAIKjUKEFF1YW50aXphdGlvblR5cGUSFwoTVW5rbm93blF1YW50aXphdGlvbhAAEggKBEludDgQASo9ChBDb21wcmVzc2lvblJhdGlvEgYKAng0EAASBgoCeDgQARIHCgN4MTYQAhIHCgN4MzIQAxIHCgN4NjQQBCpJChpCaW5hcnlRdWFudGl6YXRpb25FbmNvZGluZxIKCgZPbmVCaXQQABILCgdUd29CaXRzEAESEgoOT25lQW5kSGFsZkJpdHMQAiomCg5TaGFyZGluZ01ldGhvZBIICgRBdXRvEAASCgoGQ3VzdG9tEAEqVAoNVG9rZW5pemVyVHlwZRILCgdVbmtub3duEAASCgoGUHJlZml4EAESDgoKV2hpdGVzcGFjZRACEggKBFdvcmQQAxIQCgxNdWx0aWxpbmd1YWwQBCqtAQoMUmVwbGljYVN0YXRlEgoKBkFjdGl2ZRAAEggKBERlYWQQARILCgdQYXJ0aWFsEAISEAoMSW5pdGlhbGl6aW5nEAMSDAoITGlzdGVuZXIQBBITCg9QYXJ0aWFsU25hcHNob3QQBRIMCghSZWNvdmVyeRAGEg4KClJlc2hhcmRpbmcQBxIXChNSZXNoYXJkaW5nU2NhbGVEb3duEAgSDgoKQWN0aXZlUmVhZBAJKicKE1Jlc2hhcmRpbmdEaXJlY3Rpb24SBgoCVXAQABIICgREb3duEAEqYQoTU2hhcmRUcmFuc2Zlck1ldGhvZBIRCg1TdHJlYW1SZWNvcmRzEAASDAoIU25hcHNob3QQARIMCghXYWxEZWx0YRACEhsKF1Jlc2hhcmRpbmdTdHJlYW1SZWNvcmRzEANCFaoCElFkcmFudC5DbGllbnQuR3JwY2IGcHJvdG8z", [file_json_with_int]); + fileDesc("ChFjb2xsZWN0aW9ucy5wcm90bxIGcWRyYW50IoMDCgxWZWN0b3JQYXJhbXMSDAoEc2l6ZRgBIAEoBBIiCghkaXN0YW5jZRgCIAEoDjIQLnFkcmFudC5EaXN0YW5jZRIwCgtobnN3X2NvbmZpZxgDIAEoCzIWLnFkcmFudC5IbnN3Q29uZmlnRGlmZkgAiAEBEjwKE3F1YW50aXphdGlvbl9jb25maWcYBCABKAsyGi5xZHJhbnQuUXVhbnRpemF0aW9uQ29uZmlnSAGIAQESFAoHb25fZGlzaxgFIAEoCEgCiAEBEicKCGRhdGF0eXBlGAYgASgOMhAucWRyYW50LkRhdGF0eXBlSAOIAQESOgoSbXVsdGl2ZWN0b3JfY29uZmlnGAcgASgLMhkucWRyYW50Lk11bHRpVmVjdG9yQ29uZmlnSASIAQFCDgoMX2huc3dfY29uZmlnQhYKFF9xdWFudGl6YXRpb25fY29uZmlnQgoKCF9vbl9kaXNrQgsKCV9kYXRhdHlwZUIVChNfbXVsdGl2ZWN0b3JfY29uZmlnItABChBWZWN0b3JQYXJhbXNEaWZmEjAKC2huc3dfY29uZmlnGAEgASgLMhYucWRyYW50Lkhuc3dDb25maWdEaWZmSACIAQESQAoTcXVhbnRpemF0aW9uX2NvbmZpZxgCIAEoCzIeLnFkcmFudC5RdWFudGl6YXRpb25Db25maWdEaWZmSAGIAQESFAoHb25fZGlzaxgDIAEoCEgCiAEBQg4KDF9obnN3X2NvbmZpZ0IWChRfcXVhbnRpemF0aW9uX2NvbmZpZ0IKCghfb25fZGlzayKCAQoPVmVjdG9yUGFyYW1zTWFwEi0KA21hcBgBIAMoCzIgLnFkcmFudC5WZWN0b3JQYXJhbXNNYXAuTWFwRW50cnkaQAoITWFwRW50cnkSCwoDa2V5GAEgASgJEiMKBXZhbHVlGAIgASgLMhQucWRyYW50LlZlY3RvclBhcmFtczoCOAEijgEKE1ZlY3RvclBhcmFtc0RpZmZNYXASMQoDbWFwGAEgAygLMiQucWRyYW50LlZlY3RvclBhcmFtc0RpZmZNYXAuTWFwRW50cnkaRAoITWFwRW50cnkSCwoDa2V5GAEgASgJEicKBXZhbHVlGAIgASgLMhgucWRyYW50LlZlY3RvclBhcmFtc0RpZmY6AjgBInAKDVZlY3RvcnNDb25maWcSJgoGcGFyYW1zGAEgASgLMhQucWRyYW50LlZlY3RvclBhcmFtc0gAEi0KCnBhcmFtc19tYXAYAiABKAsyFy5xZHJhbnQuVmVjdG9yUGFyYW1zTWFwSABCCAoGY29uZmlnInwKEVZlY3RvcnNDb25maWdEaWZmEioKBnBhcmFtcxgBIAEoCzIYLnFkcmFudC5WZWN0b3JQYXJhbXNEaWZmSAASMQoKcGFyYW1zX21hcBgCIAEoCzIbLnFkcmFudC5WZWN0b3JQYXJhbXNEaWZmTWFwSABCCAoGY29uZmlnIoMBChJTcGFyc2VWZWN0b3JQYXJhbXMSLQoFaW5kZXgYASABKAsyGS5xZHJhbnQuU3BhcnNlSW5kZXhDb25maWdIAIgBARInCghtb2RpZmllchgCIAEoDjIQLnFkcmFudC5Nb2RpZmllckgBiAEBQggKBl9pbmRleEILCglfbW9kaWZpZXIijgEKElNwYXJzZVZlY3RvckNvbmZpZxIwCgNtYXAYASADKAsyIy5xZHJhbnQuU3BhcnNlVmVjdG9yQ29uZmlnLk1hcEVudHJ5GkYKCE1hcEVudHJ5EgsKA2tleRgBIAEoCRIpCgV2YWx1ZRgCIAEoCzIaLnFkcmFudC5TcGFyc2VWZWN0b3JQYXJhbXM6AjgBIkYKEU11bHRpVmVjdG9yQ29uZmlnEjEKCmNvbXBhcmF0b3IYASABKA4yHS5xZHJhbnQuTXVsdGlWZWN0b3JDb21wYXJhdG9yIjMKGEdldENvbGxlY3Rpb25JbmZvUmVxdWVzdBIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkiMgoXQ29sbGVjdGlvbkV4aXN0c1JlcXVlc3QSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJIiIKEENvbGxlY3Rpb25FeGlzdHMSDgoGZXhpc3RzGAEgASgIIlIKGENvbGxlY3Rpb25FeGlzdHNSZXNwb25zZRIoCgZyZXN1bHQYASABKAsyGC5xZHJhbnQuQ29sbGVjdGlvbkV4aXN0cxIMCgR0aW1lGAIgASgBIhgKFkxpc3RDb2xsZWN0aW9uc1JlcXVlc3QiJQoVQ29sbGVjdGlvbkRlc2NyaXB0aW9uEgwKBG5hbWUYASABKAkiUQoZR2V0Q29sbGVjdGlvbkluZm9SZXNwb25zZRImCgZyZXN1bHQYASABKAsyFi5xZHJhbnQuQ29sbGVjdGlvbkluZm8SDAoEdGltZRgCIAEoASJbChdMaXN0Q29sbGVjdGlvbnNSZXNwb25zZRIyCgtjb2xsZWN0aW9ucxgBIAMoCzIdLnFkcmFudC5Db2xsZWN0aW9uRGVzY3JpcHRpb24SDAoEdGltZRgCIAEoASKEAQoWTWF4T3B0aW1pemF0aW9uVGhyZWFkcxIPCgV2YWx1ZRgBIAEoBEgAEjkKB3NldHRpbmcYAiABKA4yJi5xZHJhbnQuTWF4T3B0aW1pemF0aW9uVGhyZWFkcy5TZXR0aW5nSAAiEwoHU2V0dGluZxIICgRBdXRvEABCCQoHdmFyaWFudCIsCg9PcHRpbWl6ZXJTdGF0dXMSCgoCb2sYASABKAgSDQoFZXJyb3IYAiABKAkiJAoRQ29sbGVjdGlvbldhcm5pbmcSDwoHbWVzc2FnZRgBIAEoCSLAAgoOSG5zd0NvbmZpZ0RpZmYSDgoBbRgBIAEoBEgAiAEBEhkKDGVmX2NvbnN0cnVjdBgCIAEoBEgBiAEBEiAKE2Z1bGxfc2Nhbl90aHJlc2hvbGQYAyABKARIAogBARIhChRtYXhfaW5kZXhpbmdfdGhyZWFkcxgEIAEoBEgDiAEBEhQKB29uX2Rpc2sYBSABKAhIBIgBARIWCglwYXlsb2FkX20YBiABKARIBYgBARIbCg5pbmxpbmVfc3RvcmFnZRgHIAEoCEgGiAEBQgQKAl9tQg8KDV9lZl9jb25zdHJ1Y3RCFgoUX2Z1bGxfc2Nhbl90aHJlc2hvbGRCFwoVX21heF9pbmRleGluZ190aHJlYWRzQgoKCF9vbl9kaXNrQgwKCl9wYXlsb2FkX21CEQoPX2lubGluZV9zdG9yYWdlIqUBChFTcGFyc2VJbmRleENvbmZpZxIgChNmdWxsX3NjYW5fdGhyZXNob2xkGAEgASgESACIAQESFAoHb25fZGlzaxgCIAEoCEgBiAEBEicKCGRhdGF0eXBlGAMgASgOMhAucWRyYW50LkRhdGF0eXBlSAKIAQFCFgoUX2Z1bGxfc2Nhbl90aHJlc2hvbGRCCgoIX29uX2Rpc2tCCwoJX2RhdGF0eXBlIq8BCg1XYWxDb25maWdEaWZmEhwKD3dhbF9jYXBhY2l0eV9tYhgBIAEoBEgAiAEBEh8KEndhbF9zZWdtZW50c19haGVhZBgCIAEoBEgBiAEBEh4KEXdhbF9yZXRhaW5fY2xvc2VkGAMgASgESAKIAQFCEgoQX3dhbF9jYXBhY2l0eV9tYkIVChNfd2FsX3NlZ21lbnRzX2FoZWFkQhQKEl93YWxfcmV0YWluX2Nsb3NlZCLmBAoUT3B0aW1pemVyc0NvbmZpZ0RpZmYSHgoRZGVsZXRlZF90aHJlc2hvbGQYASABKAFIAIgBARIlChh2YWN1dW1fbWluX3ZlY3Rvcl9udW1iZXIYAiABKARIAYgBARIjChZkZWZhdWx0X3NlZ21lbnRfbnVtYmVyGAMgASgESAKIAQESHQoQbWF4X3NlZ21lbnRfc2l6ZRgEIAEoBEgDiAEBEh0KEG1lbW1hcF90aHJlc2hvbGQYBSABKARIBIgBARIfChJpbmRleGluZ190aHJlc2hvbGQYBiABKARIBYgBARIfChJmbHVzaF9pbnRlcnZhbF9zZWMYByABKARIBogBARIwCiNkZXByZWNhdGVkX21heF9vcHRpbWl6YXRpb25fdGhyZWFkcxgIIAEoBEgHiAEBEkUKGG1heF9vcHRpbWl6YXRpb25fdGhyZWFkcxgJIAEoCzIeLnFkcmFudC5NYXhPcHRpbWl6YXRpb25UaHJlYWRzSAiIAQFCFAoSX2RlbGV0ZWRfdGhyZXNob2xkQhsKGV92YWN1dW1fbWluX3ZlY3Rvcl9udW1iZXJCGQoXX2RlZmF1bHRfc2VnbWVudF9udW1iZXJCEwoRX21heF9zZWdtZW50X3NpemVCEwoRX21lbW1hcF90aHJlc2hvbGRCFQoTX2luZGV4aW5nX3RocmVzaG9sZEIVChNfZmx1c2hfaW50ZXJ2YWxfc2VjQiYKJF9kZXByZWNhdGVkX21heF9vcHRpbWl6YXRpb25fdGhyZWFkc0IbChlfbWF4X29wdGltaXphdGlvbl90aHJlYWRzIogBChJTY2FsYXJRdWFudGl6YXRpb24SJgoEdHlwZRgBIAEoDjIYLnFkcmFudC5RdWFudGl6YXRpb25UeXBlEhUKCHF1YW50aWxlGAIgASgCSACIAQESFwoKYWx3YXlzX3JhbRgDIAEoCEgBiAEBQgsKCV9xdWFudGlsZUINCgtfYWx3YXlzX3JhbSJsChNQcm9kdWN0UXVhbnRpemF0aW9uEi0KC2NvbXByZXNzaW9uGAEgASgOMhgucWRyYW50LkNvbXByZXNzaW9uUmF0aW8SFwoKYWx3YXlzX3JhbRgCIAEoCEgAiAEBQg0KC19hbHdheXNfcmFtIrYBCh9CaW5hcnlRdWFudGl6YXRpb25RdWVyeUVuY29kaW5nEkIKB3NldHRpbmcYBCABKA4yLy5xZHJhbnQuQmluYXJ5UXVhbnRpemF0aW9uUXVlcnlFbmNvZGluZy5TZXR0aW5nSAAiRAoHU2V0dGluZxILCgdEZWZhdWx0EAASCgoGQmluYXJ5EAESDwoLU2NhbGFyNEJpdHMQAhIPCgtTY2FsYXI4Qml0cxADQgkKB3ZhcmlhbnQi3QEKEkJpbmFyeVF1YW50aXphdGlvbhIXCgphbHdheXNfcmFtGAEgASgISACIAQESOQoIZW5jb2RpbmcYAiABKA4yIi5xZHJhbnQuQmluYXJ5UXVhbnRpemF0aW9uRW5jb2RpbmdIAYgBARJECg5xdWVyeV9lbmNvZGluZxgDIAEoCzInLnFkcmFudC5CaW5hcnlRdWFudGl6YXRpb25RdWVyeUVuY29kaW5nSAKIAQFCDQoLX2Fsd2F5c19yYW1CCwoJX2VuY29kaW5nQhEKD19xdWVyeV9lbmNvZGluZyKwAQoSUXVhbnRpemF0aW9uQ29uZmlnEiwKBnNjYWxhchgBIAEoCzIaLnFkcmFudC5TY2FsYXJRdWFudGl6YXRpb25IABIuCgdwcm9kdWN0GAIgASgLMhsucWRyYW50LlByb2R1Y3RRdWFudGl6YXRpb25IABIsCgZiaW5hcnkYAyABKAsyGi5xZHJhbnQuQmluYXJ5UXVhbnRpemF0aW9uSABCDgoMcXVhbnRpemF0aW9uIgoKCERpc2FibGVkItoBChZRdWFudGl6YXRpb25Db25maWdEaWZmEiwKBnNjYWxhchgBIAEoCzIaLnFkcmFudC5TY2FsYXJRdWFudGl6YXRpb25IABIuCgdwcm9kdWN0GAIgASgLMhsucWRyYW50LlByb2R1Y3RRdWFudGl6YXRpb25IABIkCghkaXNhYmxlZBgDIAEoCzIQLnFkcmFudC5EaXNhYmxlZEgAEiwKBmJpbmFyeRgEIAEoCzIaLnFkcmFudC5CaW5hcnlRdWFudGl6YXRpb25IAEIOCgxxdWFudGl6YXRpb24iuQkKEFN0cmljdE1vZGVDb25maWcSFAoHZW5hYmxlZBgBIAEoCEgAiAEBEhwKD21heF9xdWVyeV9saW1pdBgCIAEoDUgBiAEBEhgKC21heF90aW1lb3V0GAMgASgNSAKIAQESKQocdW5pbmRleGVkX2ZpbHRlcmluZ19yZXRyaWV2ZRgEIAEoCEgDiAEBEicKGnVuaW5kZXhlZF9maWx0ZXJpbmdfdXBkYXRlGAUgASgISASIAQESHwoSc2VhcmNoX21heF9obnN3X2VmGAYgASgNSAWIAQESHwoSc2VhcmNoX2FsbG93X2V4YWN0GAcgASgISAaIAQESJAoXc2VhcmNoX21heF9vdmVyc2FtcGxpbmcYCCABKAJIB4gBARIhChR1cHNlcnRfbWF4X2JhdGNoc2l6ZRgJIAEoBEgIiAEBEi0KIG1heF9jb2xsZWN0aW9uX3ZlY3Rvcl9zaXplX2J5dGVzGAogASgESAmIAQESHAoPcmVhZF9yYXRlX2xpbWl0GAsgASgNSAqIAQESHQoQd3JpdGVfcmF0ZV9saW1pdBgMIAEoDUgLiAEBEi4KIW1heF9jb2xsZWN0aW9uX3BheWxvYWRfc2l6ZV9ieXRlcxgNIAEoBEgMiAEBEiIKFWZpbHRlcl9tYXhfY29uZGl0aW9ucxgOIAEoBEgNiAEBEh8KEmNvbmRpdGlvbl9tYXhfc2l6ZRgPIAEoBEgOiAEBEkQKEm11bHRpdmVjdG9yX2NvbmZpZxgQIAEoCzIjLnFkcmFudC5TdHJpY3RNb2RlTXVsdGl2ZWN0b3JDb25maWdID4gBARI6Cg1zcGFyc2VfY29uZmlnGBEgASgLMh4ucWRyYW50LlN0cmljdE1vZGVTcGFyc2VDb25maWdIEIgBARIdChBtYXhfcG9pbnRzX2NvdW50GBIgASgESBGIAQESJAoXbWF4X3BheWxvYWRfaW5kZXhfY291bnQYEyABKARIEogBAUIKCghfZW5hYmxlZEISChBfbWF4X3F1ZXJ5X2xpbWl0Qg4KDF9tYXhfdGltZW91dEIfCh1fdW5pbmRleGVkX2ZpbHRlcmluZ19yZXRyaWV2ZUIdChtfdW5pbmRleGVkX2ZpbHRlcmluZ191cGRhdGVCFQoTX3NlYXJjaF9tYXhfaG5zd19lZkIVChNfc2VhcmNoX2FsbG93X2V4YWN0QhoKGF9zZWFyY2hfbWF4X292ZXJzYW1wbGluZ0IXChVfdXBzZXJ0X21heF9iYXRjaHNpemVCIwohX21heF9jb2xsZWN0aW9uX3ZlY3Rvcl9zaXplX2J5dGVzQhIKEF9yZWFkX3JhdGVfbGltaXRCEwoRX3dyaXRlX3JhdGVfbGltaXRCJAoiX21heF9jb2xsZWN0aW9uX3BheWxvYWRfc2l6ZV9ieXRlc0IYChZfZmlsdGVyX21heF9jb25kaXRpb25zQhUKE19jb25kaXRpb25fbWF4X3NpemVCFQoTX211bHRpdmVjdG9yX2NvbmZpZ0IQCg5fc3BhcnNlX2NvbmZpZ0ITChFfbWF4X3BvaW50c19jb3VudEIaChhfbWF4X3BheWxvYWRfaW5kZXhfY291bnQisAEKFlN0cmljdE1vZGVTcGFyc2VDb25maWcSRwoNc3BhcnNlX2NvbmZpZxgBIAMoCzIwLnFkcmFudC5TdHJpY3RNb2RlU3BhcnNlQ29uZmlnLlNwYXJzZUNvbmZpZ0VudHJ5Gk0KEVNwYXJzZUNvbmZpZ0VudHJ5EgsKA2tleRgBIAEoCRInCgV2YWx1ZRgCIAEoCzIYLnFkcmFudC5TdHJpY3RNb2RlU3BhcnNlOgI4ASI6ChBTdHJpY3RNb2RlU3BhcnNlEhcKCm1heF9sZW5ndGgYCiABKARIAIgBAUINCgtfbWF4X2xlbmd0aCLOAQobU3RyaWN0TW9kZU11bHRpdmVjdG9yQ29uZmlnElYKEm11bHRpdmVjdG9yX2NvbmZpZxgBIAMoCzI6LnFkcmFudC5TdHJpY3RNb2RlTXVsdGl2ZWN0b3JDb25maWcuTXVsdGl2ZWN0b3JDb25maWdFbnRyeRpXChZNdWx0aXZlY3RvckNvbmZpZ0VudHJ5EgsKA2tleRgBIAEoCRIsCgV2YWx1ZRgCIAEoCzIdLnFkcmFudC5TdHJpY3RNb2RlTXVsdGl2ZWN0b3I6AjgBIkEKFVN0cmljdE1vZGVNdWx0aXZlY3RvchIYCgttYXhfdmVjdG9ycxgBIAEoBEgAiAEBQg4KDF9tYXhfdmVjdG9ycyKbCAoQQ3JlYXRlQ29sbGVjdGlvbhIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSMAoLaG5zd19jb25maWcYBCABKAsyFi5xZHJhbnQuSG5zd0NvbmZpZ0RpZmZIAIgBARIuCgp3YWxfY29uZmlnGAUgASgLMhUucWRyYW50LldhbENvbmZpZ0RpZmZIAYgBARI8ChFvcHRpbWl6ZXJzX2NvbmZpZxgGIAEoCzIcLnFkcmFudC5PcHRpbWl6ZXJzQ29uZmlnRGlmZkgCiAEBEhkKDHNoYXJkX251bWJlchgHIAEoDUgDiAEBEhwKD29uX2Rpc2tfcGF5bG9hZBgIIAEoCEgEiAEBEhQKB3RpbWVvdXQYCSABKARIBYgBARIyCg52ZWN0b3JzX2NvbmZpZxgKIAEoCzIVLnFkcmFudC5WZWN0b3JzQ29uZmlnSAaIAQESHwoScmVwbGljYXRpb25fZmFjdG9yGAsgASgNSAeIAQESJQoYd3JpdGVfY29uc2lzdGVuY3lfZmFjdG9yGAwgASgNSAiIAQESPAoTcXVhbnRpemF0aW9uX2NvbmZpZxgOIAEoCzIaLnFkcmFudC5RdWFudGl6YXRpb25Db25maWdICYgBARI0Cg9zaGFyZGluZ19tZXRob2QYDyABKA4yFi5xZHJhbnQuU2hhcmRpbmdNZXRob2RICogBARI+ChVzcGFyc2VfdmVjdG9yc19jb25maWcYECABKAsyGi5xZHJhbnQuU3BhcnNlVmVjdG9yQ29uZmlnSAuIAQESOQoSc3RyaWN0X21vZGVfY29uZmlnGBEgASgLMhgucWRyYW50LlN0cmljdE1vZGVDb25maWdIDIgBARI4CghtZXRhZGF0YRgSIAMoCzImLnFkcmFudC5DcmVhdGVDb2xsZWN0aW9uLk1ldGFkYXRhRW50cnkaPgoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5xZHJhbnQuVmFsdWU6AjgBQg4KDF9obnN3X2NvbmZpZ0INCgtfd2FsX2NvbmZpZ0IUChJfb3B0aW1pemVyc19jb25maWdCDwoNX3NoYXJkX251bWJlckISChBfb25fZGlza19wYXlsb2FkQgoKCF90aW1lb3V0QhEKD192ZWN0b3JzX2NvbmZpZ0IVChNfcmVwbGljYXRpb25fZmFjdG9yQhsKGV93cml0ZV9jb25zaXN0ZW5jeV9mYWN0b3JCFgoUX3F1YW50aXphdGlvbl9jb25maWdCEgoQX3NoYXJkaW5nX21ldGhvZEIYChZfc3BhcnNlX3ZlY3RvcnNfY29uZmlnQhUKE19zdHJpY3RfbW9kZV9jb25maWdKBAgCEANKBAgDEARKBAgNEA4i7AUKEFVwZGF0ZUNvbGxlY3Rpb24SFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEjwKEW9wdGltaXplcnNfY29uZmlnGAIgASgLMhwucWRyYW50Lk9wdGltaXplcnNDb25maWdEaWZmSACIAQESFAoHdGltZW91dBgDIAEoBEgBiAEBEjEKBnBhcmFtcxgEIAEoCzIcLnFkcmFudC5Db2xsZWN0aW9uUGFyYW1zRGlmZkgCiAEBEjAKC2huc3dfY29uZmlnGAUgASgLMhYucWRyYW50Lkhuc3dDb25maWdEaWZmSAOIAQESNgoOdmVjdG9yc19jb25maWcYBiABKAsyGS5xZHJhbnQuVmVjdG9yc0NvbmZpZ0RpZmZIBIgBARJAChNxdWFudGl6YXRpb25fY29uZmlnGAcgASgLMh4ucWRyYW50LlF1YW50aXphdGlvbkNvbmZpZ0RpZmZIBYgBARI+ChVzcGFyc2VfdmVjdG9yc19jb25maWcYCCABKAsyGi5xZHJhbnQuU3BhcnNlVmVjdG9yQ29uZmlnSAaIAQESOQoSc3RyaWN0X21vZGVfY29uZmlnGAkgASgLMhgucWRyYW50LlN0cmljdE1vZGVDb25maWdIB4gBARI4CghtZXRhZGF0YRgKIAMoCzImLnFkcmFudC5VcGRhdGVDb2xsZWN0aW9uLk1ldGFkYXRhRW50cnkaPgoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5xZHJhbnQuVmFsdWU6AjgBQhQKEl9vcHRpbWl6ZXJzX2NvbmZpZ0IKCghfdGltZW91dEIJCgdfcGFyYW1zQg4KDF9obnN3X2NvbmZpZ0IRCg9fdmVjdG9yc19jb25maWdCFgoUX3F1YW50aXphdGlvbl9jb25maWdCGAoWX3NwYXJzZV92ZWN0b3JzX2NvbmZpZ0IVChNfc3RyaWN0X21vZGVfY29uZmlnIk0KEERlbGV0ZUNvbGxlY3Rpb24SFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhQKB3RpbWVvdXQYAiABKARIAIgBAUIKCghfdGltZW91dCI7ChtDb2xsZWN0aW9uT3BlcmF0aW9uUmVzcG9uc2USDgoGcmVzdWx0GAEgASgIEgwKBHRpbWUYAiABKAEi7gMKEENvbGxlY3Rpb25QYXJhbXMSFAoMc2hhcmRfbnVtYmVyGAMgASgNEhcKD29uX2Rpc2tfcGF5bG9hZBgEIAEoCBIyCg52ZWN0b3JzX2NvbmZpZxgFIAEoCzIVLnFkcmFudC5WZWN0b3JzQ29uZmlnSACIAQESHwoScmVwbGljYXRpb25fZmFjdG9yGAYgASgNSAGIAQESJQoYd3JpdGVfY29uc2lzdGVuY3lfZmFjdG9yGAcgASgNSAKIAQESIAoTcmVhZF9mYW5fb3V0X2ZhY3RvchgIIAEoDUgDiAEBEjQKD3NoYXJkaW5nX21ldGhvZBgJIAEoDjIWLnFkcmFudC5TaGFyZGluZ01ldGhvZEgEiAEBEj4KFXNwYXJzZV92ZWN0b3JzX2NvbmZpZxgKIAEoCzIaLnFkcmFudC5TcGFyc2VWZWN0b3JDb25maWdIBYgBAUIRCg9fdmVjdG9yc19jb25maWdCFQoTX3JlcGxpY2F0aW9uX2ZhY3RvckIbChlfd3JpdGVfY29uc2lzdGVuY3lfZmFjdG9yQhYKFF9yZWFkX2Zhbl9vdXRfZmFjdG9yQhIKEF9zaGFyZGluZ19tZXRob2RCGAoWX3NwYXJzZV92ZWN0b3JzX2NvbmZpZ0oECAEQAkoECAIQAyL+AQoUQ29sbGVjdGlvblBhcmFtc0RpZmYSHwoScmVwbGljYXRpb25fZmFjdG9yGAEgASgNSACIAQESJQoYd3JpdGVfY29uc2lzdGVuY3lfZmFjdG9yGAIgASgNSAGIAQESHAoPb25fZGlza19wYXlsb2FkGAMgASgISAKIAQESIAoTcmVhZF9mYW5fb3V0X2ZhY3RvchgEIAEoDUgDiAEBQhUKE19yZXBsaWNhdGlvbl9mYWN0b3JCGwoZX3dyaXRlX2NvbnNpc3RlbmN5X2ZhY3RvckISChBfb25fZGlza19wYXlsb2FkQhYKFF9yZWFkX2Zhbl9vdXRfZmFjdG9yIu4DChBDb2xsZWN0aW9uQ29uZmlnEigKBnBhcmFtcxgBIAEoCzIYLnFkcmFudC5Db2xsZWN0aW9uUGFyYW1zEisKC2huc3dfY29uZmlnGAIgASgLMhYucWRyYW50Lkhuc3dDb25maWdEaWZmEjYKEG9wdGltaXplcl9jb25maWcYAyABKAsyHC5xZHJhbnQuT3B0aW1pemVyc0NvbmZpZ0RpZmYSKQoKd2FsX2NvbmZpZxgEIAEoCzIVLnFkcmFudC5XYWxDb25maWdEaWZmEjwKE3F1YW50aXphdGlvbl9jb25maWcYBSABKAsyGi5xZHJhbnQuUXVhbnRpemF0aW9uQ29uZmlnSACIAQESOQoSc3RyaWN0X21vZGVfY29uZmlnGAYgASgLMhgucWRyYW50LlN0cmljdE1vZGVDb25maWdIAYgBARI4CghtZXRhZGF0YRgHIAMoCzImLnFkcmFudC5Db2xsZWN0aW9uQ29uZmlnLk1ldGFkYXRhRW50cnkaPgoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5xZHJhbnQuVmFsdWU6AjgBQhYKFF9xdWFudGl6YXRpb25fY29uZmlnQhUKE19zdHJpY3RfbW9kZV9jb25maWciXAoSS2V5d29yZEluZGV4UGFyYW1zEhYKCWlzX3RlbmFudBgBIAEoCEgAiAEBEhQKB29uX2Rpc2sYAiABKAhIAYgBAUIMCgpfaXNfdGVuYW50QgoKCF9vbl9kaXNrIqABChJJbnRlZ2VySW5kZXhQYXJhbXMSEwoGbG9va3VwGAEgASgISACIAQESEgoFcmFuZ2UYAiABKAhIAYgBARIZCgxpc19wcmluY2lwYWwYAyABKAhIAogBARIUCgdvbl9kaXNrGAQgASgISAOIAQFCCQoHX2xvb2t1cEIICgZfcmFuZ2VCDwoNX2lzX3ByaW5jaXBhbEIKCghfb25fZGlzayJgChBGbG9hdEluZGV4UGFyYW1zEhQKB29uX2Rpc2sYASABKAhIAIgBARIZCgxpc19wcmluY2lwYWwYAiABKAhIAYgBAUIKCghfb25fZGlza0IPCg1faXNfcHJpbmNpcGFsIjIKDkdlb0luZGV4UGFyYW1zEhQKB29uX2Rpc2sYASABKAhIAIgBAUIKCghfb25fZGlzayIxCgxTdG9wd29yZHNTZXQSEQoJbGFuZ3VhZ2VzGAEgAygJEg4KBmN1c3RvbRgCIAMoCSK4AwoPVGV4dEluZGV4UGFyYW1zEigKCXRva2VuaXplchgBIAEoDjIVLnFkcmFudC5Ub2tlbml6ZXJUeXBlEhYKCWxvd2VyY2FzZRgCIAEoCEgAiAEBEhoKDW1pbl90b2tlbl9sZW4YAyABKARIAYgBARIaCg1tYXhfdG9rZW5fbGVuGAQgASgESAKIAQESFAoHb25fZGlzaxgFIAEoCEgDiAEBEiwKCXN0b3B3b3JkcxgGIAEoCzIULnFkcmFudC5TdG9wd29yZHNTZXRIBIgBARIcCg9waHJhc2VfbWF0Y2hpbmcYByABKAhIBYgBARIvCgdzdGVtbWVyGAggASgLMhkucWRyYW50LlN0ZW1taW5nQWxnb3JpdGhtSAaIAQESGgoNYXNjaWlfZm9sZGluZxgJIAEoCEgHiAEBQgwKCl9sb3dlcmNhc2VCEAoOX21pbl90b2tlbl9sZW5CEAoOX21heF90b2tlbl9sZW5CCgoIX29uX2Rpc2tCDAoKX3N0b3B3b3Jkc0ISChBfcGhyYXNlX21hdGNoaW5nQgoKCF9zdGVtbWVyQhAKDl9hc2NpaV9mb2xkaW5nIlIKEVN0ZW1taW5nQWxnb3JpdGhtEioKCHNub3diYWxsGAEgASgLMhYucWRyYW50LlNub3diYWxsUGFyYW1zSABCEQoPc3RlbW1pbmdfcGFyYW1zIiIKDlNub3diYWxsUGFyYW1zEhAKCGxhbmd1YWdlGAEgASgJIjMKD0Jvb2xJbmRleFBhcmFtcxIUCgdvbl9kaXNrGAEgASgISACIAQFCCgoIX29uX2Rpc2siYwoTRGF0ZXRpbWVJbmRleFBhcmFtcxIUCgdvbl9kaXNrGAEgASgISACIAQESGQoMaXNfcHJpbmNpcGFsGAIgASgISAGIAQFCCgoIX29uX2Rpc2tCDwoNX2lzX3ByaW5jaXBhbCJZCg9VdWlkSW5kZXhQYXJhbXMSFgoJaXNfdGVuYW50GAEgASgISACIAQESFAoHb25fZGlzaxgCIAEoCEgBiAEBQgwKCl9pc190ZW5hbnRCCgoIX29uX2Rpc2si6AMKElBheWxvYWRJbmRleFBhcmFtcxI6ChRrZXl3b3JkX2luZGV4X3BhcmFtcxgDIAEoCzIaLnFkcmFudC5LZXl3b3JkSW5kZXhQYXJhbXNIABI6ChRpbnRlZ2VyX2luZGV4X3BhcmFtcxgCIAEoCzIaLnFkcmFudC5JbnRlZ2VySW5kZXhQYXJhbXNIABI2ChJmbG9hdF9pbmRleF9wYXJhbXMYBCABKAsyGC5xZHJhbnQuRmxvYXRJbmRleFBhcmFtc0gAEjIKEGdlb19pbmRleF9wYXJhbXMYBSABKAsyFi5xZHJhbnQuR2VvSW5kZXhQYXJhbXNIABI0ChF0ZXh0X2luZGV4X3BhcmFtcxgBIAEoCzIXLnFkcmFudC5UZXh0SW5kZXhQYXJhbXNIABI0ChFib29sX2luZGV4X3BhcmFtcxgGIAEoCzIXLnFkcmFudC5Cb29sSW5kZXhQYXJhbXNIABI8ChVkYXRldGltZV9pbmRleF9wYXJhbXMYByABKAsyGy5xZHJhbnQuRGF0ZXRpbWVJbmRleFBhcmFtc0gAEjQKEXV1aWRfaW5kZXhfcGFyYW1zGAggASgLMhcucWRyYW50LlV1aWRJbmRleFBhcmFtc0gAQg4KDGluZGV4X3BhcmFtcyKdAQoRUGF5bG9hZFNjaGVtYUluZm8SLAoJZGF0YV90eXBlGAEgASgOMhkucWRyYW50LlBheWxvYWRTY2hlbWFUeXBlEi8KBnBhcmFtcxgCIAEoCzIaLnFkcmFudC5QYXlsb2FkSW5kZXhQYXJhbXNIAIgBARITCgZwb2ludHMYAyABKARIAYgBAUIJCgdfcGFyYW1zQgkKB19wb2ludHMi7AMKDkNvbGxlY3Rpb25JbmZvEigKBnN0YXR1cxgBIAEoDjIYLnFkcmFudC5Db2xsZWN0aW9uU3RhdHVzEjEKEG9wdGltaXplcl9zdGF0dXMYAiABKAsyFy5xZHJhbnQuT3B0aW1pemVyU3RhdHVzEhYKDnNlZ21lbnRzX2NvdW50GAQgASgEEigKBmNvbmZpZxgHIAEoCzIYLnFkcmFudC5Db2xsZWN0aW9uQ29uZmlnEkEKDnBheWxvYWRfc2NoZW1hGAggAygLMikucWRyYW50LkNvbGxlY3Rpb25JbmZvLlBheWxvYWRTY2hlbWFFbnRyeRIZCgxwb2ludHNfY291bnQYCSABKARIAIgBARIiChVpbmRleGVkX3ZlY3RvcnNfY291bnQYCiABKARIAYgBARIrCgh3YXJuaW5ncxgLIAMoCzIZLnFkcmFudC5Db2xsZWN0aW9uV2FybmluZxpPChJQYXlsb2FkU2NoZW1hRW50cnkSCwoDa2V5GAEgASgJEigKBXZhbHVlGAIgASgLMhkucWRyYW50LlBheWxvYWRTY2hlbWFJbmZvOgI4AUIPCg1fcG9pbnRzX2NvdW50QhgKFl9pbmRleGVkX3ZlY3RvcnNfY291bnRKBAgDEARKBAgFEAZKBAgGEAciWwoNQ2hhbmdlQWxpYXNlcxIoCgdhY3Rpb25zGAEgAygLMhcucWRyYW50LkFsaWFzT3BlcmF0aW9ucxIUCgd0aW1lb3V0GAIgASgESACIAQFCCgoIX3RpbWVvdXQiogEKD0FsaWFzT3BlcmF0aW9ucxIrCgxjcmVhdGVfYWxpYXMYASABKAsyEy5xZHJhbnQuQ3JlYXRlQWxpYXNIABIrCgxyZW5hbWVfYWxpYXMYAiABKAsyEy5xZHJhbnQuUmVuYW1lQWxpYXNIABIrCgxkZWxldGVfYWxpYXMYAyABKAsyEy5xZHJhbnQuRGVsZXRlQWxpYXNIAEIICgZhY3Rpb24iOgoLQ3JlYXRlQWxpYXMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhIKCmFsaWFzX25hbWUYAiABKAkiPQoLUmVuYW1lQWxpYXMSFgoOb2xkX2FsaWFzX25hbWUYASABKAkSFgoObmV3X2FsaWFzX25hbWUYAiABKAkiIQoLRGVsZXRlQWxpYXMSEgoKYWxpYXNfbmFtZRgBIAEoCSIUChJMaXN0QWxpYXNlc1JlcXVlc3QiNwocTGlzdENvbGxlY3Rpb25BbGlhc2VzUmVxdWVzdBIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkiPwoQQWxpYXNEZXNjcmlwdGlvbhISCgphbGlhc19uYW1lGAEgASgJEhcKD2NvbGxlY3Rpb25fbmFtZRgCIAEoCSJOChNMaXN0QWxpYXNlc1Jlc3BvbnNlEikKB2FsaWFzZXMYASADKAsyGC5xZHJhbnQuQWxpYXNEZXNjcmlwdGlvbhIMCgR0aW1lGAIgASgBIjcKHENvbGxlY3Rpb25DbHVzdGVySW5mb1JlcXVlc3QSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJIjYKCFNoYXJkS2V5EhEKB2tleXdvcmQYASABKAlIABIQCgZudW1iZXIYAiABKARIAEIFCgNrZXkilQEKDkxvY2FsU2hhcmRJbmZvEhAKCHNoYXJkX2lkGAEgASgNEhQKDHBvaW50c19jb3VudBgCIAEoBBIjCgVzdGF0ZRgDIAEoDjIULnFkcmFudC5SZXBsaWNhU3RhdGUSKAoJc2hhcmRfa2V5GAQgASgLMhAucWRyYW50LlNoYXJkS2V5SACIAQFCDAoKX3NoYXJkX2tleSKRAQoPUmVtb3RlU2hhcmRJbmZvEhAKCHNoYXJkX2lkGAEgASgNEg8KB3BlZXJfaWQYAiABKAQSIwoFc3RhdGUYAyABKA4yFC5xZHJhbnQuUmVwbGljYVN0YXRlEigKCXNoYXJkX2tleRgEIAEoCzIQLnFkcmFudC5TaGFyZEtleUgAiAEBQgwKCl9zaGFyZF9rZXkidwoRU2hhcmRUcmFuc2ZlckluZm8SEAoIc2hhcmRfaWQYASABKA0SGAoLdG9fc2hhcmRfaWQYBSABKA1IAIgBARIMCgRmcm9tGAIgASgEEgoKAnRvGAMgASgEEgwKBHN5bmMYBCABKAhCDgoMX3RvX3NoYXJkX2lkIpsBCg5SZXNoYXJkaW5nSW5mbxIQCghzaGFyZF9pZBgBIAEoDRIPCgdwZWVyX2lkGAIgASgEEigKCXNoYXJkX2tleRgDIAEoCzIQLnFkcmFudC5TaGFyZEtleUgAiAEBEi4KCWRpcmVjdGlvbhgEIAEoDjIbLnFkcmFudC5SZXNoYXJkaW5nRGlyZWN0aW9uQgwKCl9zaGFyZF9rZXkijgIKHUNvbGxlY3Rpb25DbHVzdGVySW5mb1Jlc3BvbnNlEg8KB3BlZXJfaWQYASABKAQSEwoLc2hhcmRfY291bnQYAiABKAQSLAoMbG9jYWxfc2hhcmRzGAMgAygLMhYucWRyYW50LkxvY2FsU2hhcmRJbmZvEi4KDXJlbW90ZV9zaGFyZHMYBCADKAsyFy5xZHJhbnQuUmVtb3RlU2hhcmRJbmZvEjIKD3NoYXJkX3RyYW5zZmVycxgFIAMoCzIZLnFkcmFudC5TaGFyZFRyYW5zZmVySW5mbxI1ChVyZXNoYXJkaW5nX29wZXJhdGlvbnMYBiADKAsyFi5xZHJhbnQuUmVzaGFyZGluZ0luZm8irgEKCU1vdmVTaGFyZBIQCghzaGFyZF9pZBgBIAEoDRIYCgt0b19zaGFyZF9pZBgFIAEoDUgAiAEBEhQKDGZyb21fcGVlcl9pZBgCIAEoBBISCgp0b19wZWVyX2lkGAMgASgEEjAKBm1ldGhvZBgEIAEoDjIbLnFkcmFudC5TaGFyZFRyYW5zZmVyTWV0aG9kSAGIAQFCDgoMX3RvX3NoYXJkX2lkQgkKB19tZXRob2QiswEKDlJlcGxpY2F0ZVNoYXJkEhAKCHNoYXJkX2lkGAEgASgNEhgKC3RvX3NoYXJkX2lkGAUgASgNSACIAQESFAoMZnJvbV9wZWVyX2lkGAIgASgEEhIKCnRvX3BlZXJfaWQYAyABKAQSMAoGbWV0aG9kGAQgASgOMhsucWRyYW50LlNoYXJkVHJhbnNmZXJNZXRob2RIAYgBAUIOCgxfdG9fc2hhcmRfaWRCCQoHX21ldGhvZCJ6ChJBYm9ydFNoYXJkVHJhbnNmZXISEAoIc2hhcmRfaWQYASABKA0SGAoLdG9fc2hhcmRfaWQYBCABKA1IAIgBARIUCgxmcm9tX3BlZXJfaWQYAiABKAQSEgoKdG9fcGVlcl9pZBgDIAEoBEIOCgxfdG9fc2hhcmRfaWQipAEKD1Jlc3RhcnRUcmFuc2ZlchIQCghzaGFyZF9pZBgBIAEoDRIYCgt0b19zaGFyZF9pZBgFIAEoDUgAiAEBEhQKDGZyb21fcGVlcl9pZBgCIAEoBBISCgp0b19wZWVyX2lkGAMgASgEEisKBm1ldGhvZBgEIAEoDjIbLnFkcmFudC5TaGFyZFRyYW5zZmVyTWV0aG9kQg4KDF90b19zaGFyZF9pZCKTAQoPUmVwbGljYXRlUG9pbnRzEigKDmZyb21fc2hhcmRfa2V5GAEgASgLMhAucWRyYW50LlNoYXJkS2V5EiYKDHRvX3NoYXJkX2tleRgCIAEoCzIQLnFkcmFudC5TaGFyZEtleRIjCgZmaWx0ZXIYAyABKAsyDi5xZHJhbnQuRmlsdGVySACIAQFCCQoHX2ZpbHRlciIsCgdSZXBsaWNhEhAKCHNoYXJkX2lkGAEgASgNEg8KB3BlZXJfaWQYAiABKAQi8gEKDkNyZWF0ZVNoYXJkS2V5EiMKCXNoYXJkX2tleRgBIAEoCzIQLnFkcmFudC5TaGFyZEtleRIaCg1zaGFyZHNfbnVtYmVyGAIgASgNSACIAQESHwoScmVwbGljYXRpb25fZmFjdG9yGAMgASgNSAGIAQESEQoJcGxhY2VtZW50GAQgAygEEjAKDWluaXRpYWxfc3RhdGUYBSABKA4yFC5xZHJhbnQuUmVwbGljYVN0YXRlSAKIAQFCEAoOX3NoYXJkc19udW1iZXJCFQoTX3JlcGxpY2F0aW9uX2ZhY3RvckIQCg5faW5pdGlhbF9zdGF0ZSI1Cg5EZWxldGVTaGFyZEtleRIjCglzaGFyZF9rZXkYASABKAsyEC5xZHJhbnQuU2hhcmRLZXki+gMKI1VwZGF0ZUNvbGxlY3Rpb25DbHVzdGVyU2V0dXBSZXF1ZXN0EhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRInCgptb3ZlX3NoYXJkGAIgASgLMhEucWRyYW50Lk1vdmVTaGFyZEgAEjEKD3JlcGxpY2F0ZV9zaGFyZBgDIAEoCzIWLnFkcmFudC5SZXBsaWNhdGVTaGFyZEgAEjQKDmFib3J0X3RyYW5zZmVyGAQgASgLMhoucWRyYW50LkFib3J0U2hhcmRUcmFuc2ZlckgAEicKDGRyb3BfcmVwbGljYRgFIAEoCzIPLnFkcmFudC5SZXBsaWNhSAASMgoQY3JlYXRlX3NoYXJkX2tleRgHIAEoCzIWLnFkcmFudC5DcmVhdGVTaGFyZEtleUgAEjIKEGRlbGV0ZV9zaGFyZF9rZXkYCCABKAsyFi5xZHJhbnQuRGVsZXRlU2hhcmRLZXlIABIzChByZXN0YXJ0X3RyYW5zZmVyGAkgASgLMhcucWRyYW50LlJlc3RhcnRUcmFuc2ZlckgAEjMKEHJlcGxpY2F0ZV9wb2ludHMYCiABKAsyFy5xZHJhbnQuUmVwbGljYXRlUG9pbnRzSAASFAoHdGltZW91dBgGIAEoBEgBiAEBQgsKCW9wZXJhdGlvbkIKCghfdGltZW91dCI2CiRVcGRhdGVDb2xsZWN0aW9uQ2x1c3RlclNldHVwUmVzcG9uc2USDgoGcmVzdWx0GAEgASgIInsKFUNyZWF0ZVNoYXJkS2V5UmVxdWVzdBIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSJwoHcmVxdWVzdBgCIAEoCzIWLnFkcmFudC5DcmVhdGVTaGFyZEtleRIUCgd0aW1lb3V0GAMgASgESACIAQFCCgoIX3RpbWVvdXQiewoVRGVsZXRlU2hhcmRLZXlSZXF1ZXN0EhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRInCgdyZXF1ZXN0GAIgASgLMhYucWRyYW50LkRlbGV0ZVNoYXJkS2V5EhQKB3RpbWVvdXQYAyABKARIAIgBAUIKCghfdGltZW91dCIoChZDcmVhdGVTaGFyZEtleVJlc3BvbnNlEg4KBnJlc3VsdBgBIAEoCCIoChZEZWxldGVTaGFyZEtleVJlc3BvbnNlEg4KBnJlc3VsdBgBIAEoCCo8CghEYXRhdHlwZRILCgdEZWZhdWx0EAASCwoHRmxvYXQzMhABEgkKBVVpbnQ4EAISCwoHRmxvYXQxNhADKh0KCE1vZGlmaWVyEggKBE5vbmUQABIHCgNJZGYQASojChVNdWx0aVZlY3RvckNvbXBhcmF0b3ISCgoGTWF4U2ltEAAqTwoIRGlzdGFuY2USEwoPVW5rbm93bkRpc3RhbmNlEAASCgoGQ29zaW5lEAESCgoGRXVjbGlkEAISBwoDRG90EAMSDQoJTWFuaGF0dGFuEAQqWQoQQ29sbGVjdGlvblN0YXR1cxIbChdVbmtub3duQ29sbGVjdGlvblN0YXR1cxAAEgkKBUdyZWVuEAESCgoGWWVsbG93EAISBwoDUmVkEAMSCAoER3JleRAEKn4KEVBheWxvYWRTY2hlbWFUeXBlEg8KC1Vua25vd25UeXBlEAASCwoHS2V5d29yZBABEgsKB0ludGVnZXIQAhIJCgVGbG9hdBADEgcKA0dlbxAEEggKBFRleHQQBRIICgRCb29sEAYSDAoIRGF0ZXRpbWUQBxIICgRVdWlkEAgqNQoQUXVhbnRpemF0aW9uVHlwZRIXChNVbmtub3duUXVhbnRpemF0aW9uEAASCAoESW50OBABKj0KEENvbXByZXNzaW9uUmF0aW8SBgoCeDQQABIGCgJ4OBABEgcKA3gxNhACEgcKA3gzMhADEgcKA3g2NBAEKkkKGkJpbmFyeVF1YW50aXphdGlvbkVuY29kaW5nEgoKBk9uZUJpdBAAEgsKB1R3b0JpdHMQARISCg5PbmVBbmRIYWxmQml0cxACKiYKDlNoYXJkaW5nTWV0aG9kEggKBEF1dG8QABIKCgZDdXN0b20QASpUCg1Ub2tlbml6ZXJUeXBlEgsKB1Vua25vd24QABIKCgZQcmVmaXgQARIOCgpXaGl0ZXNwYWNlEAISCAoEV29yZBADEhAKDE11bHRpbGluZ3VhbBAEKq0BCgxSZXBsaWNhU3RhdGUSCgoGQWN0aXZlEAASCAoERGVhZBABEgsKB1BhcnRpYWwQAhIQCgxJbml0aWFsaXppbmcQAxIMCghMaXN0ZW5lchAEEhMKD1BhcnRpYWxTbmFwc2hvdBAFEgwKCFJlY292ZXJ5EAYSDgoKUmVzaGFyZGluZxAHEhcKE1Jlc2hhcmRpbmdTY2FsZURvd24QCBIOCgpBY3RpdmVSZWFkEAkqJwoTUmVzaGFyZGluZ0RpcmVjdGlvbhIGCgJVcBAAEggKBERvd24QASphChNTaGFyZFRyYW5zZmVyTWV0aG9kEhEKDVN0cmVhbVJlY29yZHMQABIMCghTbmFwc2hvdBABEgwKCFdhbERlbHRhEAISGwoXUmVzaGFyZGluZ1N0cmVhbVJlY29yZHMQA0IVqgISUWRyYW50LkNsaWVudC5HcnBjYgZwcm90bzM", [file_json_with_int, file_common]); /** * @generated from message qdrant.VectorParams @@ -2774,6 +2776,39 @@ export type RestartTransfer = Message<"qdrant.RestartTransfer"> & { export const RestartTransferSchema: GenMessage = /*@__PURE__*/ messageDesc(file_collections, 76); +/** + * @generated from message qdrant.ReplicatePoints + */ +export type ReplicatePoints = Message<"qdrant.ReplicatePoints"> & { + /** + * Source shard key + * + * @generated from field: qdrant.ShardKey from_shard_key = 1; + */ + fromShardKey?: ShardKey; + + /** + * Target shard key + * + * @generated from field: qdrant.ShardKey to_shard_key = 2; + */ + toShardKey?: ShardKey; + + /** + * If set - only points matching the filter will be replicated + * + * @generated from field: optional qdrant.Filter filter = 3; + */ + filter?: Filter; +}; + +/** + * Describes the message qdrant.ReplicatePoints. + * Use `create(ReplicatePointsSchema)` to create a new message. + */ +export const ReplicatePointsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_collections, 77); + /** * @generated from message qdrant.Replica */ @@ -2794,7 +2829,7 @@ export type Replica = Message<"qdrant.Replica"> & { * Use `create(ReplicaSchema)` to create a new message. */ export const ReplicaSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 77); + messageDesc(file_collections, 78); /** * @generated from message qdrant.CreateShardKey @@ -2841,7 +2876,7 @@ export type CreateShardKey = Message<"qdrant.CreateShardKey"> & { * Use `create(CreateShardKeySchema)` to create a new message. */ export const CreateShardKeySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 78); + messageDesc(file_collections, 79); /** * @generated from message qdrant.DeleteShardKey @@ -2860,7 +2895,7 @@ export type DeleteShardKey = Message<"qdrant.DeleteShardKey"> & { * Use `create(DeleteShardKeySchema)` to create a new message. */ export const DeleteShardKeySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 79); + messageDesc(file_collections, 80); /** * @generated from message qdrant.UpdateCollectionClusterSetupRequest @@ -2918,6 +2953,12 @@ export type UpdateCollectionClusterSetupRequest = Message<"qdrant.UpdateCollecti */ value: RestartTransfer; case: "restartTransfer"; + } | { + /** + * @generated from field: qdrant.ReplicatePoints replicate_points = 10; + */ + value: ReplicatePoints; + case: "replicatePoints"; } | { case: undefined; value?: undefined }; /** @@ -2933,7 +2974,7 @@ export type UpdateCollectionClusterSetupRequest = Message<"qdrant.UpdateCollecti * Use `create(UpdateCollectionClusterSetupRequestSchema)` to create a new message. */ export const UpdateCollectionClusterSetupRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 80); + messageDesc(file_collections, 81); /** * @generated from message qdrant.UpdateCollectionClusterSetupResponse @@ -2950,7 +2991,7 @@ export type UpdateCollectionClusterSetupResponse = Message<"qdrant.UpdateCollect * Use `create(UpdateCollectionClusterSetupResponseSchema)` to create a new message. */ export const UpdateCollectionClusterSetupResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 81); + messageDesc(file_collections, 82); /** * @generated from message qdrant.CreateShardKeyRequest @@ -2983,7 +3024,7 @@ export type CreateShardKeyRequest = Message<"qdrant.CreateShardKeyRequest"> & { * Use `create(CreateShardKeyRequestSchema)` to create a new message. */ export const CreateShardKeyRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 82); + messageDesc(file_collections, 83); /** * @generated from message qdrant.DeleteShardKeyRequest @@ -3016,7 +3057,7 @@ export type DeleteShardKeyRequest = Message<"qdrant.DeleteShardKeyRequest"> & { * Use `create(DeleteShardKeyRequestSchema)` to create a new message. */ export const DeleteShardKeyRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 83); + messageDesc(file_collections, 84); /** * @generated from message qdrant.CreateShardKeyResponse @@ -3033,7 +3074,7 @@ export type CreateShardKeyResponse = Message<"qdrant.CreateShardKeyResponse"> & * Use `create(CreateShardKeyResponseSchema)` to create a new message. */ export const CreateShardKeyResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 84); + messageDesc(file_collections, 85); /** * @generated from message qdrant.DeleteShardKeyResponse @@ -3050,7 +3091,7 @@ export type DeleteShardKeyResponse = Message<"qdrant.DeleteShardKeyResponse"> & * Use `create(DeleteShardKeyResponseSchema)` to create a new message. */ export const DeleteShardKeyResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 85); + messageDesc(file_collections, 86); /** * @generated from enum qdrant.Datatype diff --git a/packages/js-client-grpc/src/proto/common_pb.ts b/packages/js-client-grpc/src/proto/common_pb.ts new file mode 100644 index 0000000..e1b407d --- /dev/null +++ b/packages/js-client-grpc/src/proto/common_pb.ts @@ -0,0 +1,693 @@ +// @generated by protoc-gen-es v2.10.1 with parameter "target=ts,import_extension=js" +// @generated from file common.proto (package qdrant, syntax proto3) +/* eslint-disable */ + +import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2"; +import type { Timestamp } from "@bufbuild/protobuf/wkt"; +import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt"; +import type { Message } from "@bufbuild/protobuf"; + +/** + * Describes the file common.proto. + */ +export const file_common: GenFile = /*@__PURE__*/ + fileDesc("Cgxjb21tb24ucHJvdG8SBnFkcmFudCI8CgdQb2ludElkEg0KA251bRgBIAEoBEgAEg4KBHV1aWQYAiABKAlIAEISChBwb2ludF9pZF9vcHRpb25zIiQKCEdlb1BvaW50EgsKA2xvbhgBIAEoARILCgNsYXQYAiABKAEirAEKBkZpbHRlchIhCgZzaG91bGQYASADKAsyES5xZHJhbnQuQ29uZGl0aW9uEh8KBG11c3QYAiADKAsyES5xZHJhbnQuQ29uZGl0aW9uEiMKCG11c3Rfbm90GAMgAygLMhEucWRyYW50LkNvbmRpdGlvbhIqCgptaW5fc2hvdWxkGAQgASgLMhEucWRyYW50Lk1pblNob3VsZEgAiAEBQg0KC19taW5fc2hvdWxkIkUKCU1pblNob3VsZBIlCgpjb25kaXRpb25zGAEgAygLMhEucWRyYW50LkNvbmRpdGlvbhIRCgltaW5fY291bnQYAiABKAQiywIKCUNvbmRpdGlvbhInCgVmaWVsZBgBIAEoCzIWLnFkcmFudC5GaWVsZENvbmRpdGlvbkgAEiwKCGlzX2VtcHR5GAIgASgLMhgucWRyYW50LklzRW1wdHlDb25kaXRpb25IABIoCgZoYXNfaWQYAyABKAsyFi5xZHJhbnQuSGFzSWRDb25kaXRpb25IABIgCgZmaWx0ZXIYBCABKAsyDi5xZHJhbnQuRmlsdGVySAASKgoHaXNfbnVsbBgFIAEoCzIXLnFkcmFudC5Jc051bGxDb25kaXRpb25IABIpCgZuZXN0ZWQYBiABKAsyFy5xZHJhbnQuTmVzdGVkQ29uZGl0aW9uSAASMAoKaGFzX3ZlY3RvchgHIAEoCzIaLnFkcmFudC5IYXNWZWN0b3JDb25kaXRpb25IAEISChBjb25kaXRpb25fb25lX29mIh8KEElzRW1wdHlDb25kaXRpb24SCwoDa2V5GAEgASgJIh4KD0lzTnVsbENvbmRpdGlvbhILCgNrZXkYASABKAkiMQoOSGFzSWRDb25kaXRpb24SHwoGaGFzX2lkGAEgAygLMg8ucWRyYW50LlBvaW50SWQiKAoSSGFzVmVjdG9yQ29uZGl0aW9uEhIKCmhhc192ZWN0b3IYASABKAkiPgoPTmVzdGVkQ29uZGl0aW9uEgsKA2tleRgBIAEoCRIeCgZmaWx0ZXIYAiABKAsyDi5xZHJhbnQuRmlsdGVyIvsCCg5GaWVsZENvbmRpdGlvbhILCgNrZXkYASABKAkSHAoFbWF0Y2gYAiABKAsyDS5xZHJhbnQuTWF0Y2gSHAoFcmFuZ2UYAyABKAsyDS5xZHJhbnQuUmFuZ2USMAoQZ2VvX2JvdW5kaW5nX2JveBgEIAEoCzIWLnFkcmFudC5HZW9Cb3VuZGluZ0JveBIlCgpnZW9fcmFkaXVzGAUgASgLMhEucWRyYW50Lkdlb1JhZGl1cxIpCgx2YWx1ZXNfY291bnQYBiABKAsyEy5xZHJhbnQuVmFsdWVzQ291bnQSJwoLZ2VvX3BvbHlnb24YByABKAsyEi5xZHJhbnQuR2VvUG9seWdvbhItCg5kYXRldGltZV9yYW5nZRgIIAEoCzIVLnFkcmFudC5EYXRldGltZVJhbmdlEhUKCGlzX2VtcHR5GAkgASgISACIAQESFAoHaXNfbnVsbBgKIAEoCEgBiAEBQgsKCV9pc19lbXB0eUIKCghfaXNfbnVsbCLJAgoFTWF0Y2gSEQoHa2V5d29yZBgBIAEoCUgAEhEKB2ludGVnZXIYAiABKANIABIRCgdib29sZWFuGAMgASgISAASDgoEdGV4dBgEIAEoCUgAEisKCGtleXdvcmRzGAUgASgLMhcucWRyYW50LlJlcGVhdGVkU3RyaW5nc0gAEiwKCGludGVnZXJzGAYgASgLMhgucWRyYW50LlJlcGVhdGVkSW50ZWdlcnNIABIzCg9leGNlcHRfaW50ZWdlcnMYByABKAsyGC5xZHJhbnQuUmVwZWF0ZWRJbnRlZ2Vyc0gAEjIKD2V4Y2VwdF9rZXl3b3JkcxgIIAEoCzIXLnFkcmFudC5SZXBlYXRlZFN0cmluZ3NIABIQCgZwaHJhc2UYCSABKAlIABISCgh0ZXh0X2FueRgKIAEoCUgAQg0KC21hdGNoX3ZhbHVlIiIKD1JlcGVhdGVkU3RyaW5ncxIPCgdzdHJpbmdzGAEgAygJIiQKEFJlcGVhdGVkSW50ZWdlcnMSEAoIaW50ZWdlcnMYASADKAMiawoFUmFuZ2USDwoCbHQYASABKAFIAIgBARIPCgJndBgCIAEoAUgBiAEBEhAKA2d0ZRgDIAEoAUgCiAEBEhAKA2x0ZRgEIAEoAUgDiAEBQgUKA19sdEIFCgNfZ3RCBgoEX2d0ZUIGCgRfbHRlIuMBCg1EYXRldGltZVJhbmdlEisKAmx0GAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAiAEBEisKAmd0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgBiAEBEiwKA2d0ZRgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAogBARIsCgNsdGUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAOIAQFCBQoDX2x0QgUKA19ndEIGCgRfZ3RlQgYKBF9sdGUiXAoOR2VvQm91bmRpbmdCb3gSIgoIdG9wX2xlZnQYASABKAsyEC5xZHJhbnQuR2VvUG9pbnQSJgoMYm90dG9tX3JpZ2h0GAIgASgLMhAucWRyYW50Lkdlb1BvaW50Ij0KCUdlb1JhZGl1cxIgCgZjZW50ZXIYASABKAsyEC5xZHJhbnQuR2VvUG9pbnQSDgoGcmFkaXVzGAIgASgCIjEKDUdlb0xpbmVTdHJpbmcSIAoGcG9pbnRzGAEgAygLMhAucWRyYW50Lkdlb1BvaW50Il8KCkdlb1BvbHlnb24SJwoIZXh0ZXJpb3IYASABKAsyFS5xZHJhbnQuR2VvTGluZVN0cmluZxIoCglpbnRlcmlvcnMYAiADKAsyFS5xZHJhbnQuR2VvTGluZVN0cmluZyJxCgtWYWx1ZXNDb3VudBIPCgJsdBgBIAEoBEgAiAEBEg8KAmd0GAIgASgESAGIAQESEAoDZ3RlGAMgASgESAKIAQESEAoDbHRlGAQgASgESAOIAQFCBQoDX2x0QgUKA19ndEIGCgRfZ3RlQgYKBF9sdGVCHUIGUG9pbnRzqgISUWRyYW50LkNsaWVudC5HcnBjYgZwcm90bzM", [file_google_protobuf_timestamp]); + +/** + * @generated from message qdrant.PointId + */ +export type PointId = Message<"qdrant.PointId"> & { + /** + * @generated from oneof qdrant.PointId.point_id_options + */ + pointIdOptions: { + /** + * Numerical ID of the point + * + * @generated from field: uint64 num = 1; + */ + value: bigint; + case: "num"; + } | { + /** + * UUID + * + * @generated from field: string uuid = 2; + */ + value: string; + case: "uuid"; + } | { case: undefined; value?: undefined }; +}; + +/** + * Describes the message qdrant.PointId. + * Use `create(PointIdSchema)` to create a new message. + */ +export const PointIdSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 0); + +/** + * @generated from message qdrant.GeoPoint + */ +export type GeoPoint = Message<"qdrant.GeoPoint"> & { + /** + * @generated from field: double lon = 1; + */ + lon: number; + + /** + * @generated from field: double lat = 2; + */ + lat: number; +}; + +/** + * Describes the message qdrant.GeoPoint. + * Use `create(GeoPointSchema)` to create a new message. + */ +export const GeoPointSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 1); + +/** + * @generated from message qdrant.Filter + */ +export type Filter = Message<"qdrant.Filter"> & { + /** + * At least one of those conditions should match + * + * @generated from field: repeated qdrant.Condition should = 1; + */ + should: Condition[]; + + /** + * All conditions must match + * + * @generated from field: repeated qdrant.Condition must = 2; + */ + must: Condition[]; + + /** + * All conditions must NOT match + * + * @generated from field: repeated qdrant.Condition must_not = 3; + */ + mustNot: Condition[]; + + /** + * At least minimum amount of given conditions should match + * + * @generated from field: optional qdrant.MinShould min_should = 4; + */ + minShould?: MinShould; +}; + +/** + * Describes the message qdrant.Filter. + * Use `create(FilterSchema)` to create a new message. + */ +export const FilterSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 2); + +/** + * @generated from message qdrant.MinShould + */ +export type MinShould = Message<"qdrant.MinShould"> & { + /** + * @generated from field: repeated qdrant.Condition conditions = 1; + */ + conditions: Condition[]; + + /** + * @generated from field: uint64 min_count = 2; + */ + minCount: bigint; +}; + +/** + * Describes the message qdrant.MinShould. + * Use `create(MinShouldSchema)` to create a new message. + */ +export const MinShouldSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 3); + +/** + * @generated from message qdrant.Condition + */ +export type Condition = Message<"qdrant.Condition"> & { + /** + * @generated from oneof qdrant.Condition.condition_one_of + */ + conditionOneOf: { + /** + * @generated from field: qdrant.FieldCondition field = 1; + */ + value: FieldCondition; + case: "field"; + } | { + /** + * @generated from field: qdrant.IsEmptyCondition is_empty = 2; + */ + value: IsEmptyCondition; + case: "isEmpty"; + } | { + /** + * @generated from field: qdrant.HasIdCondition has_id = 3; + */ + value: HasIdCondition; + case: "hasId"; + } | { + /** + * @generated from field: qdrant.Filter filter = 4; + */ + value: Filter; + case: "filter"; + } | { + /** + * @generated from field: qdrant.IsNullCondition is_null = 5; + */ + value: IsNullCondition; + case: "isNull"; + } | { + /** + * @generated from field: qdrant.NestedCondition nested = 6; + */ + value: NestedCondition; + case: "nested"; + } | { + /** + * @generated from field: qdrant.HasVectorCondition has_vector = 7; + */ + value: HasVectorCondition; + case: "hasVector"; + } | { case: undefined; value?: undefined }; +}; + +/** + * Describes the message qdrant.Condition. + * Use `create(ConditionSchema)` to create a new message. + */ +export const ConditionSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 4); + +/** + * @generated from message qdrant.IsEmptyCondition + */ +export type IsEmptyCondition = Message<"qdrant.IsEmptyCondition"> & { + /** + * @generated from field: string key = 1; + */ + key: string; +}; + +/** + * Describes the message qdrant.IsEmptyCondition. + * Use `create(IsEmptyConditionSchema)` to create a new message. + */ +export const IsEmptyConditionSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 5); + +/** + * @generated from message qdrant.IsNullCondition + */ +export type IsNullCondition = Message<"qdrant.IsNullCondition"> & { + /** + * @generated from field: string key = 1; + */ + key: string; +}; + +/** + * Describes the message qdrant.IsNullCondition. + * Use `create(IsNullConditionSchema)` to create a new message. + */ +export const IsNullConditionSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 6); + +/** + * @generated from message qdrant.HasIdCondition + */ +export type HasIdCondition = Message<"qdrant.HasIdCondition"> & { + /** + * @generated from field: repeated qdrant.PointId has_id = 1; + */ + hasId: PointId[]; +}; + +/** + * Describes the message qdrant.HasIdCondition. + * Use `create(HasIdConditionSchema)` to create a new message. + */ +export const HasIdConditionSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 7); + +/** + * @generated from message qdrant.HasVectorCondition + */ +export type HasVectorCondition = Message<"qdrant.HasVectorCondition"> & { + /** + * @generated from field: string has_vector = 1; + */ + hasVector: string; +}; + +/** + * Describes the message qdrant.HasVectorCondition. + * Use `create(HasVectorConditionSchema)` to create a new message. + */ +export const HasVectorConditionSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 8); + +/** + * @generated from message qdrant.NestedCondition + */ +export type NestedCondition = Message<"qdrant.NestedCondition"> & { + /** + * Path to nested object + * + * @generated from field: string key = 1; + */ + key: string; + + /** + * Filter condition + * + * @generated from field: qdrant.Filter filter = 2; + */ + filter?: Filter; +}; + +/** + * Describes the message qdrant.NestedCondition. + * Use `create(NestedConditionSchema)` to create a new message. + */ +export const NestedConditionSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 9); + +/** + * @generated from message qdrant.FieldCondition + */ +export type FieldCondition = Message<"qdrant.FieldCondition"> & { + /** + * @generated from field: string key = 1; + */ + key: string; + + /** + * Check if point has field with a given value + * + * @generated from field: qdrant.Match match = 2; + */ + match?: Match; + + /** + * Check if points value lies in a given range + * + * @generated from field: qdrant.Range range = 3; + */ + range?: Range; + + /** + * Check if points geolocation lies in a given area + * + * @generated from field: qdrant.GeoBoundingBox geo_bounding_box = 4; + */ + geoBoundingBox?: GeoBoundingBox; + + /** + * Check if geo point is within a given radius + * + * @generated from field: qdrant.GeoRadius geo_radius = 5; + */ + geoRadius?: GeoRadius; + + /** + * Check number of values for a specific field + * + * @generated from field: qdrant.ValuesCount values_count = 6; + */ + valuesCount?: ValuesCount; + + /** + * Check if geo point is within a given polygon + * + * @generated from field: qdrant.GeoPolygon geo_polygon = 7; + */ + geoPolygon?: GeoPolygon; + + /** + * Check if datetime is within a given range + * + * @generated from field: qdrant.DatetimeRange datetime_range = 8; + */ + datetimeRange?: DatetimeRange; + + /** + * Check if field is empty + * + * @generated from field: optional bool is_empty = 9; + */ + isEmpty?: boolean; + + /** + * Check if field is null + * + * @generated from field: optional bool is_null = 10; + */ + isNull?: boolean; +}; + +/** + * Describes the message qdrant.FieldCondition. + * Use `create(FieldConditionSchema)` to create a new message. + */ +export const FieldConditionSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 10); + +/** + * @generated from message qdrant.Match + */ +export type Match = Message<"qdrant.Match"> & { + /** + * @generated from oneof qdrant.Match.match_value + */ + matchValue: { + /** + * Match string keyword + * + * @generated from field: string keyword = 1; + */ + value: string; + case: "keyword"; + } | { + /** + * Match integer + * + * @generated from field: int64 integer = 2; + */ + value: bigint; + case: "integer"; + } | { + /** + * Match boolean + * + * @generated from field: bool boolean = 3; + */ + value: boolean; + case: "boolean"; + } | { + /** + * Match text + * + * @generated from field: string text = 4; + */ + value: string; + case: "text"; + } | { + /** + * Match multiple keywords + * + * @generated from field: qdrant.RepeatedStrings keywords = 5; + */ + value: RepeatedStrings; + case: "keywords"; + } | { + /** + * Match multiple integers + * + * @generated from field: qdrant.RepeatedIntegers integers = 6; + */ + value: RepeatedIntegers; + case: "integers"; + } | { + /** + * Match any other value except those integers + * + * @generated from field: qdrant.RepeatedIntegers except_integers = 7; + */ + value: RepeatedIntegers; + case: "exceptIntegers"; + } | { + /** + * Match any other value except those keywords + * + * @generated from field: qdrant.RepeatedStrings except_keywords = 8; + */ + value: RepeatedStrings; + case: "exceptKeywords"; + } | { + /** + * Match phrase text + * + * @generated from field: string phrase = 9; + */ + value: string; + case: "phrase"; + } | { + /** + * Match any word in the text + * + * @generated from field: string text_any = 10; + */ + value: string; + case: "textAny"; + } | { case: undefined; value?: undefined }; +}; + +/** + * Describes the message qdrant.Match. + * Use `create(MatchSchema)` to create a new message. + */ +export const MatchSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 11); + +/** + * @generated from message qdrant.RepeatedStrings + */ +export type RepeatedStrings = Message<"qdrant.RepeatedStrings"> & { + /** + * @generated from field: repeated string strings = 1; + */ + strings: string[]; +}; + +/** + * Describes the message qdrant.RepeatedStrings. + * Use `create(RepeatedStringsSchema)` to create a new message. + */ +export const RepeatedStringsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 12); + +/** + * @generated from message qdrant.RepeatedIntegers + */ +export type RepeatedIntegers = Message<"qdrant.RepeatedIntegers"> & { + /** + * @generated from field: repeated int64 integers = 1; + */ + integers: bigint[]; +}; + +/** + * Describes the message qdrant.RepeatedIntegers. + * Use `create(RepeatedIntegersSchema)` to create a new message. + */ +export const RepeatedIntegersSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 13); + +/** + * @generated from message qdrant.Range + */ +export type Range = Message<"qdrant.Range"> & { + /** + * @generated from field: optional double lt = 1; + */ + lt?: number; + + /** + * @generated from field: optional double gt = 2; + */ + gt?: number; + + /** + * @generated from field: optional double gte = 3; + */ + gte?: number; + + /** + * @generated from field: optional double lte = 4; + */ + lte?: number; +}; + +/** + * Describes the message qdrant.Range. + * Use `create(RangeSchema)` to create a new message. + */ +export const RangeSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 14); + +/** + * @generated from message qdrant.DatetimeRange + */ +export type DatetimeRange = Message<"qdrant.DatetimeRange"> & { + /** + * @generated from field: optional google.protobuf.Timestamp lt = 1; + */ + lt?: Timestamp; + + /** + * @generated from field: optional google.protobuf.Timestamp gt = 2; + */ + gt?: Timestamp; + + /** + * @generated from field: optional google.protobuf.Timestamp gte = 3; + */ + gte?: Timestamp; + + /** + * @generated from field: optional google.protobuf.Timestamp lte = 4; + */ + lte?: Timestamp; +}; + +/** + * Describes the message qdrant.DatetimeRange. + * Use `create(DatetimeRangeSchema)` to create a new message. + */ +export const DatetimeRangeSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 15); + +/** + * @generated from message qdrant.GeoBoundingBox + */ +export type GeoBoundingBox = Message<"qdrant.GeoBoundingBox"> & { + /** + * north-west corner + * + * @generated from field: qdrant.GeoPoint top_left = 1; + */ + topLeft?: GeoPoint; + + /** + * south-east corner + * + * @generated from field: qdrant.GeoPoint bottom_right = 2; + */ + bottomRight?: GeoPoint; +}; + +/** + * Describes the message qdrant.GeoBoundingBox. + * Use `create(GeoBoundingBoxSchema)` to create a new message. + */ +export const GeoBoundingBoxSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 16); + +/** + * @generated from message qdrant.GeoRadius + */ +export type GeoRadius = Message<"qdrant.GeoRadius"> & { + /** + * Center of the circle + * + * @generated from field: qdrant.GeoPoint center = 1; + */ + center?: GeoPoint; + + /** + * In meters + * + * @generated from field: float radius = 2; + */ + radius: number; +}; + +/** + * Describes the message qdrant.GeoRadius. + * Use `create(GeoRadiusSchema)` to create a new message. + */ +export const GeoRadiusSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 17); + +/** + * @generated from message qdrant.GeoLineString + */ +export type GeoLineString = Message<"qdrant.GeoLineString"> & { + /** + * Ordered sequence of GeoPoints representing the line + * + * @generated from field: repeated qdrant.GeoPoint points = 1; + */ + points: GeoPoint[]; +}; + +/** + * Describes the message qdrant.GeoLineString. + * Use `create(GeoLineStringSchema)` to create a new message. + */ +export const GeoLineStringSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 18); + +/** + * For a valid GeoPolygon, both the exterior and interior GeoLineStrings must consist of a minimum of 4 points. + * Additionally, the first and last points of each GeoLineString must be the same. + * + * @generated from message qdrant.GeoPolygon + */ +export type GeoPolygon = Message<"qdrant.GeoPolygon"> & { + /** + * The exterior line bounds the surface + * + * @generated from field: qdrant.GeoLineString exterior = 1; + */ + exterior?: GeoLineString; + + /** + * Interior lines (if present) bound holes within the surface + * + * @generated from field: repeated qdrant.GeoLineString interiors = 2; + */ + interiors: GeoLineString[]; +}; + +/** + * Describes the message qdrant.GeoPolygon. + * Use `create(GeoPolygonSchema)` to create a new message. + */ +export const GeoPolygonSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 19); + +/** + * @generated from message qdrant.ValuesCount + */ +export type ValuesCount = Message<"qdrant.ValuesCount"> & { + /** + * @generated from field: optional uint64 lt = 1; + */ + lt?: bigint; + + /** + * @generated from field: optional uint64 gt = 2; + */ + gt?: bigint; + + /** + * @generated from field: optional uint64 gte = 3; + */ + gte?: bigint; + + /** + * @generated from field: optional uint64 lte = 4; + */ + lte?: bigint; +}; + +/** + * Describes the message qdrant.ValuesCount. + * Use `create(ValuesCountSchema)` to create a new message. + */ +export const ValuesCountSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_common, 20); + diff --git a/packages/js-client-grpc/src/proto/points_pb.ts b/packages/js-client-grpc/src/proto/points_pb.ts index 39d751b..89728cf 100644 --- a/packages/js-client-grpc/src/proto/points_pb.ts +++ b/packages/js-client-grpc/src/proto/points_pb.ts @@ -6,6 +6,8 @@ import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2" import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2"; import type { PayloadIndexParams, ShardKey } from "./collections_pb.js"; import { file_collections } from "./collections_pb.js"; +import type { Condition, Filter, GeoPoint, PointId } from "./common_pb.js"; +import { file_common } from "./common_pb.js"; import type { Timestamp } from "@bufbuild/protobuf/wkt"; import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt"; import type { Value } from "./json_with_int_pb.js"; @@ -16,7 +18,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file points.proto. */ export const file_points: GenFile = /*@__PURE__*/ - fileDesc("Cgxwb2ludHMucHJvdG8SBnFkcmFudCI4Cg1Xcml0ZU9yZGVyaW5nEicKBHR5cGUYASABKA4yGS5xZHJhbnQuV3JpdGVPcmRlcmluZ1R5cGUiWQoPUmVhZENvbnNpc3RlbmN5EisKBHR5cGUYASABKA4yGy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5VHlwZUgAEhAKBmZhY3RvchgCIAEoBEgAQgcKBXZhbHVlIjwKB1BvaW50SWQSDQoDbnVtGAEgASgESAASDgoEdXVpZBgCIAEoCUgAQhIKEHBvaW50X2lkX29wdGlvbnMiHQoNU3BhcnNlSW5kaWNlcxIMCgRkYXRhGAEgAygNIpYBCghEb2N1bWVudBIMCgR0ZXh0GAEgASgJEg0KBW1vZGVsGAMgASgJEi4KB29wdGlvbnMYBCADKAsyHS5xZHJhbnQuRG9jdW1lbnQuT3B0aW9uc0VudHJ5Gj0KDE9wdGlvbnNFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5xZHJhbnQuVmFsdWU6AjgBIqABCgVJbWFnZRIcCgVpbWFnZRgBIAEoCzINLnFkcmFudC5WYWx1ZRINCgVtb2RlbBgCIAEoCRIrCgdvcHRpb25zGAMgAygLMhoucWRyYW50LkltYWdlLk9wdGlvbnNFbnRyeRo9CgxPcHRpb25zRW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0ucWRyYW50LlZhbHVlOgI4ASK1AQoPSW5mZXJlbmNlT2JqZWN0Eh0KBm9iamVjdBgBIAEoCzINLnFkcmFudC5WYWx1ZRINCgVtb2RlbBgCIAEoCRI1CgdvcHRpb25zGAMgAygLMiQucWRyYW50LkluZmVyZW5jZU9iamVjdC5PcHRpb25zRW50cnkaPQoMT3B0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLnFkcmFudC5WYWx1ZToCOAEigwMKBlZlY3RvchIQCgRkYXRhGAEgAygCQgIYARIvCgdpbmRpY2VzGAIgASgLMhUucWRyYW50LlNwYXJzZUluZGljZXNCAhgBSAGIAQESHgoNdmVjdG9yc19jb3VudBgDIAEoDUICGAFIAogBARIkCgVkZW5zZRhlIAEoCzITLnFkcmFudC5EZW5zZVZlY3RvckgAEiYKBnNwYXJzZRhmIAEoCzIULnFkcmFudC5TcGFyc2VWZWN0b3JIABIvCgttdWx0aV9kZW5zZRhnIAEoCzIYLnFkcmFudC5NdWx0aURlbnNlVmVjdG9ySAASJAoIZG9jdW1lbnQYaCABKAsyEC5xZHJhbnQuRG9jdW1lbnRIABIeCgVpbWFnZRhpIAEoCzINLnFkcmFudC5JbWFnZUgAEikKBm9iamVjdBhqIAEoCzIXLnFkcmFudC5JbmZlcmVuY2VPYmplY3RIAEIICgZ2ZWN0b3JCCgoIX2luZGljZXNCEAoOX3ZlY3RvcnNfY291bnQimAIKDFZlY3Rvck91dHB1dBIQCgRkYXRhGAEgAygCQgIYARIvCgdpbmRpY2VzGAIgASgLMhUucWRyYW50LlNwYXJzZUluZGljZXNCAhgBSAGIAQESHgoNdmVjdG9yc19jb3VudBgDIAEoDUICGAFIAogBARIkCgVkZW5zZRhlIAEoCzITLnFkcmFudC5EZW5zZVZlY3RvckgAEiYKBnNwYXJzZRhmIAEoCzIULnFkcmFudC5TcGFyc2VWZWN0b3JIABIvCgttdWx0aV9kZW5zZRhnIAEoCzIYLnFkcmFudC5NdWx0aURlbnNlVmVjdG9ySABCCAoGdmVjdG9yQgoKCF9pbmRpY2VzQhAKDl92ZWN0b3JzX2NvdW50IhsKC0RlbnNlVmVjdG9yEgwKBGRhdGEYASADKAIiLwoMU3BhcnNlVmVjdG9yEg4KBnZhbHVlcxgBIAMoAhIPCgdpbmRpY2VzGAIgAygNIjgKEE11bHRpRGVuc2VWZWN0b3ISJAoHdmVjdG9ycxgBIAMoCzITLnFkcmFudC5EZW5zZVZlY3RvciKnAgoLVmVjdG9ySW5wdXQSHQoCaWQYASABKAsyDy5xZHJhbnQuUG9pbnRJZEgAEiQKBWRlbnNlGAIgASgLMhMucWRyYW50LkRlbnNlVmVjdG9ySAASJgoGc3BhcnNlGAMgASgLMhQucWRyYW50LlNwYXJzZVZlY3RvckgAEi8KC211bHRpX2RlbnNlGAQgASgLMhgucWRyYW50Lk11bHRpRGVuc2VWZWN0b3JIABIkCghkb2N1bWVudBgFIAEoCzIQLnFkcmFudC5Eb2N1bWVudEgAEh4KBWltYWdlGAYgASgLMg0ucWRyYW50LkltYWdlSAASKQoGb2JqZWN0GAcgASgLMhcucWRyYW50LkluZmVyZW5jZU9iamVjdEgAQgkKB3ZhcmlhbnQibgoQU2hhcmRLZXlTZWxlY3RvchIkCgpzaGFyZF9rZXlzGAEgAygLMhAucWRyYW50LlNoYXJkS2V5EicKCGZhbGxiYWNrGAIgASgLMhAucWRyYW50LlNoYXJkS2V5SACIAQFCCwoJX2ZhbGxiYWNrIrMCCgxVcHNlcnRQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhEKBHdhaXQYAiABKAhIAIgBARIjCgZwb2ludHMYAyADKAsyEy5xZHJhbnQuUG9pbnRTdHJ1Y3QSLAoIb3JkZXJpbmcYBCABKAsyFS5xZHJhbnQuV3JpdGVPcmRlcmluZ0gBiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgFIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAKIAQESKgoNdXBkYXRlX2ZpbHRlchgGIAEoCzIOLnFkcmFudC5GaWx0ZXJIA4gBAUIHCgVfd2FpdEILCglfb3JkZXJpbmdCFQoTX3NoYXJkX2tleV9zZWxlY3RvckIQCg5fdXBkYXRlX2ZpbHRlciL4AQoMRGVsZXRlUG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIRCgR3YWl0GAIgASgISACIAQESJgoGcG9pbnRzGAMgASgLMhYucWRyYW50LlBvaW50c1NlbGVjdG9yEiwKCG9yZGVyaW5nGAQgASgLMhUucWRyYW50LldyaXRlT3JkZXJpbmdIAYgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYBSABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgCiAEBQgcKBV93YWl0QgsKCV9vcmRlcmluZ0IVChNfc2hhcmRfa2V5X3NlbGVjdG9yIoUDCglHZXRQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhwKA2lkcxgCIAMoCzIPLnFkcmFudC5Qb2ludElkEjEKDHdpdGhfcGF5bG9hZBgEIAEoCzIbLnFkcmFudC5XaXRoUGF5bG9hZFNlbGVjdG9yEjYKDHdpdGhfdmVjdG9ycxgFIAEoCzIbLnFkcmFudC5XaXRoVmVjdG9yc1NlbGVjdG9ySACIAQESNgoQcmVhZF9jb25zaXN0ZW5jeRgGIAEoCzIXLnFkcmFudC5SZWFkQ29uc2lzdGVuY3lIAYgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYByABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgCiAEBEhQKB3RpbWVvdXQYCCABKARIA4gBAUIPCg1fd2l0aF92ZWN0b3JzQhMKEV9yZWFkX2NvbnNpc3RlbmN5QhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCCgoIX3RpbWVvdXRKBAgDEAQiugIKElVwZGF0ZVBvaW50VmVjdG9ycxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSEQoEd2FpdBgCIAEoCEgAiAEBEiQKBnBvaW50cxgDIAMoCzIULnFkcmFudC5Qb2ludFZlY3RvcnMSLAoIb3JkZXJpbmcYBCABKAsyFS5xZHJhbnQuV3JpdGVPcmRlcmluZ0gBiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgFIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAKIAQESKgoNdXBkYXRlX2ZpbHRlchgGIAEoCzIOLnFkcmFudC5GaWx0ZXJIA4gBAUIHCgVfd2FpdEILCglfb3JkZXJpbmdCFQoTX3NoYXJkX2tleV9zZWxlY3RvckIQCg5fdXBkYXRlX2ZpbHRlciJNCgxQb2ludFZlY3RvcnMSGwoCaWQYASABKAsyDy5xZHJhbnQuUG9pbnRJZBIgCgd2ZWN0b3JzGAIgASgLMg8ucWRyYW50LlZlY3RvcnMisQIKEkRlbGV0ZVBvaW50VmVjdG9ycxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSEQoEd2FpdBgCIAEoCEgAiAEBEi8KD3BvaW50c19zZWxlY3RvchgDIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvchIoCgd2ZWN0b3JzGAQgASgLMhcucWRyYW50LlZlY3RvcnNTZWxlY3RvchIsCghvcmRlcmluZxgFIAEoCzIVLnFkcmFudC5Xcml0ZU9yZGVyaW5nSAGIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAYgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAogBAUIHCgVfd2FpdEILCglfb3JkZXJpbmdCFQoTX3NoYXJkX2tleV9zZWxlY3RvciK1AwoQU2V0UGF5bG9hZFBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSEQoEd2FpdBgCIAEoCEgAiAEBEjYKB3BheWxvYWQYAyADKAsyJS5xZHJhbnQuU2V0UGF5bG9hZFBvaW50cy5QYXlsb2FkRW50cnkSNAoPcG9pbnRzX3NlbGVjdG9yGAUgASgLMhYucWRyYW50LlBvaW50c1NlbGVjdG9ySAGIAQESLAoIb3JkZXJpbmcYBiABKAsyFS5xZHJhbnQuV3JpdGVPcmRlcmluZ0gCiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgHIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAOIAQESEAoDa2V5GAggASgJSASIAQEaPQoMUGF5bG9hZEVudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLnFkcmFudC5WYWx1ZToCOAFCBwoFX3dhaXRCEgoQX3BvaW50c19zZWxlY3RvckILCglfb3JkZXJpbmdCFQoTX3NoYXJkX2tleV9zZWxlY3RvckIGCgRfa2V5SgQIBBAFIrUCChNEZWxldGVQYXlsb2FkUG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIRCgR3YWl0GAIgASgISACIAQESDAoEa2V5cxgDIAMoCRI0Cg9wb2ludHNfc2VsZWN0b3IYBSABKAsyFi5xZHJhbnQuUG9pbnRzU2VsZWN0b3JIAYgBARIsCghvcmRlcmluZxgGIAEoCzIVLnFkcmFudC5Xcml0ZU9yZGVyaW5nSAKIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAcgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIA4gBAUIHCgVfd2FpdEISChBfcG9pbnRzX3NlbGVjdG9yQgsKCV9vcmRlcmluZ0IVChNfc2hhcmRfa2V5X3NlbGVjdG9ySgQIBBAFIv4BChJDbGVhclBheWxvYWRQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhEKBHdhaXQYAiABKAhIAIgBARImCgZwb2ludHMYAyABKAsyFi5xZHJhbnQuUG9pbnRzU2VsZWN0b3ISLAoIb3JkZXJpbmcYBCABKAsyFS5xZHJhbnQuV3JpdGVPcmRlcmluZ0gBiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgFIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAKIAQFCBwoFX3dhaXRCCwoJX29yZGVyaW5nQhUKE19zaGFyZF9rZXlfc2VsZWN0b3IirwIKGkNyZWF0ZUZpZWxkSW5kZXhDb2xsZWN0aW9uEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIRCgR3YWl0GAIgASgISACIAQESEgoKZmllbGRfbmFtZRgDIAEoCRIqCgpmaWVsZF90eXBlGAQgASgOMhEucWRyYW50LkZpZWxkVHlwZUgBiAEBEjsKEmZpZWxkX2luZGV4X3BhcmFtcxgFIAEoCzIaLnFkcmFudC5QYXlsb2FkSW5kZXhQYXJhbXNIAogBARIsCghvcmRlcmluZxgGIAEoCzIVLnFkcmFudC5Xcml0ZU9yZGVyaW5nSAOIAQFCBwoFX3dhaXRCDQoLX2ZpZWxkX3R5cGVCFQoTX2ZpZWxkX2luZGV4X3BhcmFtc0ILCglfb3JkZXJpbmcioAEKGkRlbGV0ZUZpZWxkSW5kZXhDb2xsZWN0aW9uEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIRCgR3YWl0GAIgASgISACIAQESEgoKZmllbGRfbmFtZRgDIAEoCRIsCghvcmRlcmluZxgEIAEoCzIVLnFkcmFudC5Xcml0ZU9yZGVyaW5nSAGIAQFCBwoFX3dhaXRCCwoJX29yZGVyaW5nIigKFlBheWxvYWRJbmNsdWRlU2VsZWN0b3ISDgoGZmllbGRzGAEgAygJIigKFlBheWxvYWRFeGNsdWRlU2VsZWN0b3ISDgoGZmllbGRzGAEgAygJIqEBChNXaXRoUGF5bG9hZFNlbGVjdG9yEhAKBmVuYWJsZRgBIAEoCEgAEjEKB2luY2x1ZGUYAiABKAsyHi5xZHJhbnQuUGF5bG9hZEluY2x1ZGVTZWxlY3RvckgAEjEKB2V4Y2x1ZGUYAyABKAsyHi5xZHJhbnQuUGF5bG9hZEV4Y2x1ZGVTZWxlY3RvckgAQhIKEHNlbGVjdG9yX29wdGlvbnMiggEKDE5hbWVkVmVjdG9ycxIyCgd2ZWN0b3JzGAEgAygLMiEucWRyYW50Lk5hbWVkVmVjdG9ycy5WZWN0b3JzRW50cnkaPgoMVmVjdG9yc0VudHJ5EgsKA2tleRgBIAEoCRIdCgV2YWx1ZRgCIAEoCzIOLnFkcmFudC5WZWN0b3I6AjgBIpQBChJOYW1lZFZlY3RvcnNPdXRwdXQSOAoHdmVjdG9ycxgBIAMoCzInLnFkcmFudC5OYW1lZFZlY3RvcnNPdXRwdXQuVmVjdG9yc0VudHJ5GkQKDFZlY3RvcnNFbnRyeRILCgNrZXkYASABKAkSIwoFdmFsdWUYAiABKAsyFC5xZHJhbnQuVmVjdG9yT3V0cHV0OgI4ASJnCgdWZWN0b3JzEiAKBnZlY3RvchgBIAEoCzIOLnFkcmFudC5WZWN0b3JIABInCgd2ZWN0b3JzGAIgASgLMhQucWRyYW50Lk5hbWVkVmVjdG9yc0gAQhEKD3ZlY3RvcnNfb3B0aW9ucyJ5Cg1WZWN0b3JzT3V0cHV0EiYKBnZlY3RvchgBIAEoCzIULnFkcmFudC5WZWN0b3JPdXRwdXRIABItCgd2ZWN0b3JzGAIgASgLMhoucWRyYW50Lk5hbWVkVmVjdG9yc091dHB1dEgAQhEKD3ZlY3RvcnNfb3B0aW9ucyIgCg9WZWN0b3JzU2VsZWN0b3ISDQoFbmFtZXMYASADKAkiZwoTV2l0aFZlY3RvcnNTZWxlY3RvchIQCgZlbmFibGUYASABKAhIABIqCgdpbmNsdWRlGAIgASgLMhcucWRyYW50LlZlY3RvcnNTZWxlY3RvckgAQhIKEHNlbGVjdG9yX29wdGlvbnMiiAEKGFF1YW50aXphdGlvblNlYXJjaFBhcmFtcxITCgZpZ25vcmUYASABKAhIAIgBARIUCgdyZXNjb3JlGAIgASgISAGIAQESGQoMb3ZlcnNhbXBsaW5nGAMgASgBSAKIAQFCCQoHX2lnbm9yZUIKCghfcmVzY29yZUIPCg1fb3ZlcnNhbXBsaW5nImUKEUFjb3JuU2VhcmNoUGFyYW1zEhMKBmVuYWJsZRgBIAEoCEgAiAEBEhwKD21heF9zZWxlY3Rpdml0eRgCIAEoAUgBiAEBQgkKB19lbmFibGVCEgoQX21heF9zZWxlY3Rpdml0eSKBAgoMU2VhcmNoUGFyYW1zEhQKB2huc3dfZWYYASABKARIAIgBARISCgVleGFjdBgCIAEoCEgBiAEBEjsKDHF1YW50aXphdGlvbhgDIAEoCzIgLnFkcmFudC5RdWFudGl6YXRpb25TZWFyY2hQYXJhbXNIAogBARIZCgxpbmRleGVkX29ubHkYBCABKAhIA4gBARItCgVhY29ybhgFIAEoCzIZLnFkcmFudC5BY29yblNlYXJjaFBhcmFtc0gEiAEBQgoKCF9obnN3X2VmQggKBl9leGFjdEIPCg1fcXVhbnRpemF0aW9uQg8KDV9pbmRleGVkX29ubHlCCAoGX2Fjb3JuIpIFCgxTZWFyY2hQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEg4KBnZlY3RvchgCIAMoAhIeCgZmaWx0ZXIYAyABKAsyDi5xZHJhbnQuRmlsdGVyEg0KBWxpbWl0GAQgASgEEjEKDHdpdGhfcGF5bG9hZBgGIAEoCzIbLnFkcmFudC5XaXRoUGF5bG9hZFNlbGVjdG9yEiQKBnBhcmFtcxgHIAEoCzIULnFkcmFudC5TZWFyY2hQYXJhbXMSHAoPc2NvcmVfdGhyZXNob2xkGAggASgCSACIAQESEwoGb2Zmc2V0GAkgASgESAGIAQESGAoLdmVjdG9yX25hbWUYCiABKAlIAogBARI2Cgx3aXRoX3ZlY3RvcnMYCyABKAsyGy5xZHJhbnQuV2l0aFZlY3RvcnNTZWxlY3RvckgDiAEBEjYKEHJlYWRfY29uc2lzdGVuY3kYDCABKAsyFy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5SASIAQESFAoHdGltZW91dBgNIAEoBEgFiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgOIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAaIAQESMgoOc3BhcnNlX2luZGljZXMYDyABKAsyFS5xZHJhbnQuU3BhcnNlSW5kaWNlc0gHiAEBQhIKEF9zY29yZV90aHJlc2hvbGRCCQoHX29mZnNldEIOCgxfdmVjdG9yX25hbWVCDwoNX3dpdGhfdmVjdG9yc0ITChFfcmVhZF9jb25zaXN0ZW5jeUIKCghfdGltZW91dEIVChNfc2hhcmRfa2V5X3NlbGVjdG9yQhEKD19zcGFyc2VfaW5kaWNlc0oECAUQBiLIAQoRU2VhcmNoQmF0Y2hQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEisKDXNlYXJjaF9wb2ludHMYAiADKAsyFC5xZHJhbnQuU2VhcmNoUG9pbnRzEjYKEHJlYWRfY29uc2lzdGVuY3kYAyABKAsyFy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5SACIAQESFAoHdGltZW91dBgEIAEoBEgBiAEBQhMKEV9yZWFkX2NvbnNpc3RlbmN5QgoKCF90aW1lb3V0IrIBCgpXaXRoTG9va3VwEhIKCmNvbGxlY3Rpb24YASABKAkSNgoMd2l0aF9wYXlsb2FkGAIgASgLMhsucWRyYW50LldpdGhQYXlsb2FkU2VsZWN0b3JIAIgBARI2Cgx3aXRoX3ZlY3RvcnMYAyABKAsyGy5xZHJhbnQuV2l0aFZlY3RvcnNTZWxlY3RvckgBiAEBQg8KDV93aXRoX3BheWxvYWRCDwoNX3dpdGhfdmVjdG9ycyLVBQoRU2VhcmNoUG9pbnRHcm91cHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEg4KBnZlY3RvchgCIAMoAhIeCgZmaWx0ZXIYAyABKAsyDi5xZHJhbnQuRmlsdGVyEg0KBWxpbWl0GAQgASgNEjEKDHdpdGhfcGF5bG9hZBgFIAEoCzIbLnFkcmFudC5XaXRoUGF5bG9hZFNlbGVjdG9yEiQKBnBhcmFtcxgGIAEoCzIULnFkcmFudC5TZWFyY2hQYXJhbXMSHAoPc2NvcmVfdGhyZXNob2xkGAcgASgCSACIAQESGAoLdmVjdG9yX25hbWUYCCABKAlIAYgBARI2Cgx3aXRoX3ZlY3RvcnMYCSABKAsyGy5xZHJhbnQuV2l0aFZlY3RvcnNTZWxlY3RvckgCiAEBEhAKCGdyb3VwX2J5GAogASgJEhIKCmdyb3VwX3NpemUYCyABKA0SNgoQcmVhZF9jb25zaXN0ZW5jeRgMIAEoCzIXLnFkcmFudC5SZWFkQ29uc2lzdGVuY3lIA4gBARIsCgt3aXRoX2xvb2t1cBgNIAEoCzISLnFkcmFudC5XaXRoTG9va3VwSASIAQESFAoHdGltZW91dBgOIAEoBEgFiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgPIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAaIAQESMgoOc3BhcnNlX2luZGljZXMYECABKAsyFS5xZHJhbnQuU3BhcnNlSW5kaWNlc0gHiAEBQhIKEF9zY29yZV90aHJlc2hvbGRCDgoMX3ZlY3Rvcl9uYW1lQg8KDV93aXRoX3ZlY3RvcnNCEwoRX3JlYWRfY29uc2lzdGVuY3lCDgoMX3dpdGhfbG9va3VwQgoKCF90aW1lb3V0QhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCEQoPX3NwYXJzZV9pbmRpY2VzIn0KCVN0YXJ0RnJvbRIPCgVmbG9hdBgBIAEoAUgAEhEKB2ludGVnZXIYAiABKANIABIvCgl0aW1lc3RhbXAYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAASEgoIZGF0ZXRpbWUYBCABKAlIAEIHCgV2YWx1ZSKKAQoHT3JkZXJCeRILCgNrZXkYASABKAkSKQoJZGlyZWN0aW9uGAIgASgOMhEucWRyYW50LkRpcmVjdGlvbkgAiAEBEioKCnN0YXJ0X2Zyb20YAyABKAsyES5xZHJhbnQuU3RhcnRGcm9tSAGIAQFCDAoKX2RpcmVjdGlvbkINCgtfc3RhcnRfZnJvbSKOBAoMU2Nyb2xsUG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIeCgZmaWx0ZXIYAiABKAsyDi5xZHJhbnQuRmlsdGVyEiQKBm9mZnNldBgDIAEoCzIPLnFkcmFudC5Qb2ludElkSACIAQESEgoFbGltaXQYBCABKA1IAYgBARIxCgx3aXRoX3BheWxvYWQYBiABKAsyGy5xZHJhbnQuV2l0aFBheWxvYWRTZWxlY3RvchI2Cgx3aXRoX3ZlY3RvcnMYByABKAsyGy5xZHJhbnQuV2l0aFZlY3RvcnNTZWxlY3RvckgCiAEBEjYKEHJlYWRfY29uc2lzdGVuY3kYCCABKAsyFy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5SAOIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAkgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIBIgBARImCghvcmRlcl9ieRgKIAEoCzIPLnFkcmFudC5PcmRlckJ5SAWIAQESFAoHdGltZW91dBgLIAEoBEgGiAEBQgkKB19vZmZzZXRCCAoGX2xpbWl0Qg8KDV93aXRoX3ZlY3RvcnNCEwoRX3JlYWRfY29uc2lzdGVuY3lCFQoTX3NoYXJkX2tleV9zZWxlY3RvckILCglfb3JkZXJfYnlCCgoIX3RpbWVvdXRKBAgFEAYipQEKDkxvb2t1cExvY2F0aW9uEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIYCgt2ZWN0b3JfbmFtZRgCIAEoCUgAiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgDIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAGIAQFCDgoMX3ZlY3Rvcl9uYW1lQhUKE19zaGFyZF9rZXlfc2VsZWN0b3IizQYKD1JlY29tbWVuZFBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSIQoIcG9zaXRpdmUYAiADKAsyDy5xZHJhbnQuUG9pbnRJZBIhCghuZWdhdGl2ZRgDIAMoCzIPLnFkcmFudC5Qb2ludElkEh4KBmZpbHRlchgEIAEoCzIOLnFkcmFudC5GaWx0ZXISDQoFbGltaXQYBSABKAQSMQoMd2l0aF9wYXlsb2FkGAcgASgLMhsucWRyYW50LldpdGhQYXlsb2FkU2VsZWN0b3ISJAoGcGFyYW1zGAggASgLMhQucWRyYW50LlNlYXJjaFBhcmFtcxIcCg9zY29yZV90aHJlc2hvbGQYCSABKAJIAIgBARITCgZvZmZzZXQYCiABKARIAYgBARISCgV1c2luZxgLIAEoCUgCiAEBEjYKDHdpdGhfdmVjdG9ycxgMIAEoCzIbLnFkcmFudC5XaXRoVmVjdG9yc1NlbGVjdG9ySAOIAQESMAoLbG9va3VwX2Zyb20YDSABKAsyFi5xZHJhbnQuTG9va3VwTG9jYXRpb25IBIgBARI2ChByZWFkX2NvbnNpc3RlbmN5GA4gASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgFiAEBEjAKCHN0cmF0ZWd5GBAgASgOMhkucWRyYW50LlJlY29tbWVuZFN0cmF0ZWd5SAaIAQESKAoQcG9zaXRpdmVfdmVjdG9ycxgRIAMoCzIOLnFkcmFudC5WZWN0b3ISKAoQbmVnYXRpdmVfdmVjdG9ycxgSIAMoCzIOLnFkcmFudC5WZWN0b3ISFAoHdGltZW91dBgTIAEoBEgHiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgUIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAiIAQFCEgoQX3Njb3JlX3RocmVzaG9sZEIJCgdfb2Zmc2V0QggKBl91c2luZ0IPCg1fd2l0aF92ZWN0b3JzQg4KDF9sb29rdXBfZnJvbUITChFfcmVhZF9jb25zaXN0ZW5jeUILCglfc3RyYXRlZ3lCCgoIX3RpbWVvdXRCFQoTX3NoYXJkX2tleV9zZWxlY3RvckoECAYQByLRAQoUUmVjb21tZW5kQmF0Y2hQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEjEKEHJlY29tbWVuZF9wb2ludHMYAiADKAsyFy5xZHJhbnQuUmVjb21tZW5kUG9pbnRzEjYKEHJlYWRfY29uc2lzdGVuY3kYAyABKAsyFy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5SACIAQESFAoHdGltZW91dBgEIAEoBEgBiAEBQhMKEV9yZWFkX2NvbnNpc3RlbmN5QgoKCF90aW1lb3V0IpAHChRSZWNvbW1lbmRQb2ludEdyb3VwcxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSIQoIcG9zaXRpdmUYAiADKAsyDy5xZHJhbnQuUG9pbnRJZBIhCghuZWdhdGl2ZRgDIAMoCzIPLnFkcmFudC5Qb2ludElkEh4KBmZpbHRlchgEIAEoCzIOLnFkcmFudC5GaWx0ZXISDQoFbGltaXQYBSABKA0SMQoMd2l0aF9wYXlsb2FkGAYgASgLMhsucWRyYW50LldpdGhQYXlsb2FkU2VsZWN0b3ISJAoGcGFyYW1zGAcgASgLMhQucWRyYW50LlNlYXJjaFBhcmFtcxIcCg9zY29yZV90aHJlc2hvbGQYCCABKAJIAIgBARISCgV1c2luZxgJIAEoCUgBiAEBEjYKDHdpdGhfdmVjdG9ycxgKIAEoCzIbLnFkcmFudC5XaXRoVmVjdG9yc1NlbGVjdG9ySAKIAQESMAoLbG9va3VwX2Zyb20YCyABKAsyFi5xZHJhbnQuTG9va3VwTG9jYXRpb25IA4gBARIQCghncm91cF9ieRgMIAEoCRISCgpncm91cF9zaXplGA0gASgNEjYKEHJlYWRfY29uc2lzdGVuY3kYDiABKAsyFy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5SASIAQESLAoLd2l0aF9sb29rdXAYDyABKAsyEi5xZHJhbnQuV2l0aExvb2t1cEgFiAEBEjAKCHN0cmF0ZWd5GBEgASgOMhkucWRyYW50LlJlY29tbWVuZFN0cmF0ZWd5SAaIAQESKAoQcG9zaXRpdmVfdmVjdG9ycxgSIAMoCzIOLnFkcmFudC5WZWN0b3ISKAoQbmVnYXRpdmVfdmVjdG9ycxgTIAMoCzIOLnFkcmFudC5WZWN0b3ISFAoHdGltZW91dBgUIAEoBEgHiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgVIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAiIAQFCEgoQX3Njb3JlX3RocmVzaG9sZEIICgZfdXNpbmdCDwoNX3dpdGhfdmVjdG9yc0IOCgxfbG9va3VwX2Zyb21CEwoRX3JlYWRfY29uc2lzdGVuY3lCDgoMX3dpdGhfbG9va3VwQgsKCV9zdHJhdGVneUIKCghfdGltZW91dEIVChNfc2hhcmRfa2V5X3NlbGVjdG9yIkEKDFRhcmdldFZlY3RvchInCgZzaW5nbGUYASABKAsyFS5xZHJhbnQuVmVjdG9yRXhhbXBsZUgAQggKBnRhcmdldCJbCg1WZWN0b3JFeGFtcGxlEh0KAmlkGAEgASgLMg8ucWRyYW50LlBvaW50SWRIABIgCgZ2ZWN0b3IYAiABKAsyDi5xZHJhbnQuVmVjdG9ySABCCQoHZXhhbXBsZSJmChJDb250ZXh0RXhhbXBsZVBhaXISJwoIcG9zaXRpdmUYASABKAsyFS5xZHJhbnQuVmVjdG9yRXhhbXBsZRInCghuZWdhdGl2ZRgCIAEoCzIVLnFkcmFudC5WZWN0b3JFeGFtcGxlIo4FCg5EaXNjb3ZlclBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSJAoGdGFyZ2V0GAIgASgLMhQucWRyYW50LlRhcmdldFZlY3RvchIrCgdjb250ZXh0GAMgAygLMhoucWRyYW50LkNvbnRleHRFeGFtcGxlUGFpchIeCgZmaWx0ZXIYBCABKAsyDi5xZHJhbnQuRmlsdGVyEg0KBWxpbWl0GAUgASgEEjEKDHdpdGhfcGF5bG9hZBgGIAEoCzIbLnFkcmFudC5XaXRoUGF5bG9hZFNlbGVjdG9yEiQKBnBhcmFtcxgHIAEoCzIULnFkcmFudC5TZWFyY2hQYXJhbXMSEwoGb2Zmc2V0GAggASgESACIAQESEgoFdXNpbmcYCSABKAlIAYgBARI2Cgx3aXRoX3ZlY3RvcnMYCiABKAsyGy5xZHJhbnQuV2l0aFZlY3RvcnNTZWxlY3RvckgCiAEBEjAKC2xvb2t1cF9mcm9tGAsgASgLMhYucWRyYW50Lkxvb2t1cExvY2F0aW9uSAOIAQESNgoQcmVhZF9jb25zaXN0ZW5jeRgMIAEoCzIXLnFkcmFudC5SZWFkQ29uc2lzdGVuY3lIBIgBARIUCgd0aW1lb3V0GA0gASgESAWIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGA4gASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIBogBAUIJCgdfb2Zmc2V0QggKBl91c2luZ0IPCg1fd2l0aF92ZWN0b3JzQg4KDF9sb29rdXBfZnJvbUITChFfcmVhZF9jb25zaXN0ZW5jeUIKCghfdGltZW91dEIVChNfc2hhcmRfa2V5X3NlbGVjdG9yIs4BChNEaXNjb3ZlckJhdGNoUG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIvCg9kaXNjb3Zlcl9wb2ludHMYAiADKAsyFi5xZHJhbnQuRGlzY292ZXJQb2ludHMSNgoQcmVhZF9jb25zaXN0ZW5jeRgDIAEoCzIXLnFkcmFudC5SZWFkQ29uc2lzdGVuY3lIAIgBARIUCgd0aW1lb3V0GAQgASgESAGIAQFCEwoRX3JlYWRfY29uc2lzdGVuY3lCCgoIX3RpbWVvdXQipQIKC0NvdW50UG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIeCgZmaWx0ZXIYAiABKAsyDi5xZHJhbnQuRmlsdGVyEhIKBWV4YWN0GAMgASgISACIAQESNgoQcmVhZF9jb25zaXN0ZW5jeRgEIAEoCzIXLnFkcmFudC5SZWFkQ29uc2lzdGVuY3lIAYgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYBSABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgCiAEBEhQKB3RpbWVvdXQYBiABKARIA4gBAUIICgZfZXhhY3RCEwoRX3JlYWRfY29uc2lzdGVuY3lCFQoTX3NoYXJkX2tleV9zZWxlY3RvckIKCghfdGltZW91dCKdAQoOUmVjb21tZW5kSW5wdXQSJQoIcG9zaXRpdmUYASADKAsyEy5xZHJhbnQuVmVjdG9ySW5wdXQSJQoIbmVnYXRpdmUYAiADKAsyEy5xZHJhbnQuVmVjdG9ySW5wdXQSMAoIc3RyYXRlZ3kYAyABKA4yGS5xZHJhbnQuUmVjb21tZW5kU3RyYXRlZ3lIAIgBAUILCglfc3RyYXRlZ3kiYAoQQ29udGV4dElucHV0UGFpchIlCghwb3NpdGl2ZRgBIAEoCzITLnFkcmFudC5WZWN0b3JJbnB1dBIlCghuZWdhdGl2ZRgCIAEoCzITLnFkcmFudC5WZWN0b3JJbnB1dCJbCg1EaXNjb3ZlcklucHV0EiMKBnRhcmdldBgBIAEoCzITLnFkcmFudC5WZWN0b3JJbnB1dBIlCgdjb250ZXh0GAIgASgLMhQucWRyYW50LkNvbnRleHRJbnB1dCI3CgxDb250ZXh0SW5wdXQSJwoFcGFpcnMYASADKAsyGC5xZHJhbnQuQ29udGV4dElucHV0UGFpciKiAQoHRm9ybXVsYRImCgpleHByZXNzaW9uGAEgASgLMhIucWRyYW50LkV4cHJlc3Npb24SLwoIZGVmYXVsdHMYAiADKAsyHS5xZHJhbnQuRm9ybXVsYS5EZWZhdWx0c0VudHJ5Gj4KDURlZmF1bHRzRW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0ucWRyYW50LlZhbHVlOgI4ASLMBQoKRXhwcmVzc2lvbhISCghjb25zdGFudBgBIAEoAkgAEhIKCHZhcmlhYmxlGAIgASgJSAASJgoJY29uZGl0aW9uGAMgASgLMhEucWRyYW50LkNvbmRpdGlvbkgAEisKDGdlb19kaXN0YW5jZRgEIAEoCzITLnFkcmFudC5HZW9EaXN0YW5jZUgAEhIKCGRhdGV0aW1lGAUgASgJSAASFgoMZGF0ZXRpbWVfa2V5GAYgASgJSAASJgoEbXVsdBgHIAEoCzIWLnFkcmFudC5NdWx0RXhwcmVzc2lvbkgAEiQKA3N1bRgIIAEoCzIVLnFkcmFudC5TdW1FeHByZXNzaW9uSAASJAoDZGl2GAkgASgLMhUucWRyYW50LkRpdkV4cHJlc3Npb25IABIhCgNuZWcYCiABKAsyEi5xZHJhbnQuRXhwcmVzc2lvbkgAEiEKA2FicxgLIAEoCzISLnFkcmFudC5FeHByZXNzaW9uSAASIgoEc3FydBgMIAEoCzISLnFkcmFudC5FeHByZXNzaW9uSAASJAoDcG93GA0gASgLMhUucWRyYW50LlBvd0V4cHJlc3Npb25IABIhCgNleHAYDiABKAsyEi5xZHJhbnQuRXhwcmVzc2lvbkgAEiMKBWxvZzEwGA8gASgLMhIucWRyYW50LkV4cHJlc3Npb25IABIgCgJsbhgQIAEoCzISLnFkcmFudC5FeHByZXNzaW9uSAASMgoJZXhwX2RlY2F5GBEgASgLMh0ucWRyYW50LkRlY2F5UGFyYW1zRXhwcmVzc2lvbkgAEjQKC2dhdXNzX2RlY2F5GBIgASgLMh0ucWRyYW50LkRlY2F5UGFyYW1zRXhwcmVzc2lvbkgAEjIKCWxpbl9kZWNheRgTIAEoCzIdLnFkcmFudC5EZWNheVBhcmFtc0V4cHJlc3Npb25IAEIJCgd2YXJpYW50IjsKC0dlb0Rpc3RhbmNlEiAKBm9yaWdpbhgBIAEoCzIQLnFkcmFudC5HZW9Qb2ludBIKCgJ0bxgCIAEoCSIyCg5NdWx0RXhwcmVzc2lvbhIgCgRtdWx0GAEgAygLMhIucWRyYW50LkV4cHJlc3Npb24iMAoNU3VtRXhwcmVzc2lvbhIfCgNzdW0YASADKAsyEi5xZHJhbnQuRXhwcmVzc2lvbiKGAQoNRGl2RXhwcmVzc2lvbhIgCgRsZWZ0GAEgASgLMhIucWRyYW50LkV4cHJlc3Npb24SIQoFcmlnaHQYAiABKAsyEi5xZHJhbnQuRXhwcmVzc2lvbhIcCg9ieV96ZXJvX2RlZmF1bHQYAyABKAJIAIgBAUISChBfYnlfemVyb19kZWZhdWx0IlcKDVBvd0V4cHJlc3Npb24SIAoEYmFzZRgBIAEoCzISLnFkcmFudC5FeHByZXNzaW9uEiQKCGV4cG9uZW50GAIgASgLMhIucWRyYW50LkV4cHJlc3Npb24irAEKFURlY2F5UGFyYW1zRXhwcmVzc2lvbhIdCgF4GAEgASgLMhIucWRyYW50LkV4cHJlc3Npb24SJwoGdGFyZ2V0GAIgASgLMhIucWRyYW50LkV4cHJlc3Npb25IAIgBARISCgVzY2FsZRgDIAEoAkgBiAEBEhUKCG1pZHBvaW50GAQgASgCSAKIAQFCCQoHX3RhcmdldEIICgZfc2NhbGVCCwoJX21pZHBvaW50IlUKE05lYXJlc3RJbnB1dFdpdGhNbXISJAoHbmVhcmVzdBgBIAEoCzITLnFkcmFudC5WZWN0b3JJbnB1dBIYCgNtbXIYAiABKAsyCy5xZHJhbnQuTW1yIl8KA01tchIWCglkaXZlcnNpdHkYAiABKAJIAIgBARIdChBjYW5kaWRhdGVzX2xpbWl0GAMgASgNSAGIAQFCDAoKX2RpdmVyc2l0eUITChFfY2FuZGlkYXRlc19saW1pdCIbCgNScmYSDgoBaxgBIAEoDUgAiAEBQgQKAl9rIp0DCgVRdWVyeRImCgduZWFyZXN0GAEgASgLMhMucWRyYW50LlZlY3RvcklucHV0SAASKwoJcmVjb21tZW5kGAIgASgLMhYucWRyYW50LlJlY29tbWVuZElucHV0SAASKQoIZGlzY292ZXIYAyABKAsyFS5xZHJhbnQuRGlzY292ZXJJbnB1dEgAEicKB2NvbnRleHQYBCABKAsyFC5xZHJhbnQuQ29udGV4dElucHV0SAASIwoIb3JkZXJfYnkYBSABKAsyDy5xZHJhbnQuT3JkZXJCeUgAEiAKBmZ1c2lvbhgGIAEoDjIOLnFkcmFudC5GdXNpb25IABIgCgZzYW1wbGUYByABKA4yDi5xZHJhbnQuU2FtcGxlSAASIgoHZm9ybXVsYRgIIAEoCzIPLnFkcmFudC5Gb3JtdWxhSAASNwoQbmVhcmVzdF93aXRoX21tchgJIAEoCzIbLnFkcmFudC5OZWFyZXN0SW5wdXRXaXRoTW1ySAASGgoDcnJmGAogASgLMgsucWRyYW50LlJyZkgAQgkKB3ZhcmlhbnQi+wIKDVByZWZldGNoUXVlcnkSJwoIcHJlZmV0Y2gYASADKAsyFS5xZHJhbnQuUHJlZmV0Y2hRdWVyeRIhCgVxdWVyeRgCIAEoCzINLnFkcmFudC5RdWVyeUgAiAEBEhIKBXVzaW5nGAMgASgJSAGIAQESIwoGZmlsdGVyGAQgASgLMg4ucWRyYW50LkZpbHRlckgCiAEBEikKBnBhcmFtcxgFIAEoCzIULnFkcmFudC5TZWFyY2hQYXJhbXNIA4gBARIcCg9zY29yZV90aHJlc2hvbGQYBiABKAJIBIgBARISCgVsaW1pdBgHIAEoBEgFiAEBEjAKC2xvb2t1cF9mcm9tGAggASgLMhYucWRyYW50Lkxvb2t1cExvY2F0aW9uSAaIAQFCCAoGX3F1ZXJ5QggKBl91c2luZ0IJCgdfZmlsdGVyQgkKB19wYXJhbXNCEgoQX3Njb3JlX3RocmVzaG9sZEIICgZfbGltaXRCDgoMX2xvb2t1cF9mcm9tIoUGCgtRdWVyeVBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSJwoIcHJlZmV0Y2gYAiADKAsyFS5xZHJhbnQuUHJlZmV0Y2hRdWVyeRIhCgVxdWVyeRgDIAEoCzINLnFkcmFudC5RdWVyeUgAiAEBEhIKBXVzaW5nGAQgASgJSAGIAQESIwoGZmlsdGVyGAUgASgLMg4ucWRyYW50LkZpbHRlckgCiAEBEikKBnBhcmFtcxgGIAEoCzIULnFkcmFudC5TZWFyY2hQYXJhbXNIA4gBARIcCg9zY29yZV90aHJlc2hvbGQYByABKAJIBIgBARISCgVsaW1pdBgIIAEoBEgFiAEBEhMKBm9mZnNldBgJIAEoBEgGiAEBEjYKDHdpdGhfdmVjdG9ycxgKIAEoCzIbLnFkcmFudC5XaXRoVmVjdG9yc1NlbGVjdG9ySAeIAQESNgoMd2l0aF9wYXlsb2FkGAsgASgLMhsucWRyYW50LldpdGhQYXlsb2FkU2VsZWN0b3JICIgBARI2ChByZWFkX2NvbnNpc3RlbmN5GAwgASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgJiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgNIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAqIAQESMAoLbG9va3VwX2Zyb20YDiABKAsyFi5xZHJhbnQuTG9va3VwTG9jYXRpb25IC4gBARIUCgd0aW1lb3V0GA8gASgESAyIAQFCCAoGX3F1ZXJ5QggKBl91c2luZ0IJCgdfZmlsdGVyQgkKB19wYXJhbXNCEgoQX3Njb3JlX3RocmVzaG9sZEIICgZfbGltaXRCCQoHX29mZnNldEIPCg1fd2l0aF92ZWN0b3JzQg8KDV93aXRoX3BheWxvYWRCEwoRX3JlYWRfY29uc2lzdGVuY3lCFQoTX3NoYXJkX2tleV9zZWxlY3RvckIOCgxfbG9va3VwX2Zyb21CCgoIX3RpbWVvdXQixQEKEFF1ZXJ5QmF0Y2hQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEikKDHF1ZXJ5X3BvaW50cxgCIAMoCzITLnFkcmFudC5RdWVyeVBvaW50cxI2ChByZWFkX2NvbnNpc3RlbmN5GAMgASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgAiAEBEhQKB3RpbWVvdXQYBCABKARIAYgBAUITChFfcmVhZF9jb25zaXN0ZW5jeUIKCghfdGltZW91dCLMBgoQUXVlcnlQb2ludEdyb3VwcxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSJwoIcHJlZmV0Y2gYAiADKAsyFS5xZHJhbnQuUHJlZmV0Y2hRdWVyeRIhCgVxdWVyeRgDIAEoCzINLnFkcmFudC5RdWVyeUgAiAEBEhIKBXVzaW5nGAQgASgJSAGIAQESIwoGZmlsdGVyGAUgASgLMg4ucWRyYW50LkZpbHRlckgCiAEBEikKBnBhcmFtcxgGIAEoCzIULnFkcmFudC5TZWFyY2hQYXJhbXNIA4gBARIcCg9zY29yZV90aHJlc2hvbGQYByABKAJIBIgBARIxCgx3aXRoX3BheWxvYWQYCCABKAsyGy5xZHJhbnQuV2l0aFBheWxvYWRTZWxlY3RvchI2Cgx3aXRoX3ZlY3RvcnMYCSABKAsyGy5xZHJhbnQuV2l0aFZlY3RvcnNTZWxlY3RvckgFiAEBEjAKC2xvb2t1cF9mcm9tGAogASgLMhYucWRyYW50Lkxvb2t1cExvY2F0aW9uSAaIAQESEgoFbGltaXQYCyABKARIB4gBARIXCgpncm91cF9zaXplGAwgASgESAiIAQESEAoIZ3JvdXBfYnkYDSABKAkSNgoQcmVhZF9jb25zaXN0ZW5jeRgOIAEoCzIXLnFkcmFudC5SZWFkQ29uc2lzdGVuY3lICYgBARIsCgt3aXRoX2xvb2t1cBgPIAEoCzISLnFkcmFudC5XaXRoTG9va3VwSAqIAQESFAoHdGltZW91dBgQIAEoBEgLiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgRIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAyIAQFCCAoGX3F1ZXJ5QggKBl91c2luZ0IJCgdfZmlsdGVyQgkKB19wYXJhbXNCEgoQX3Njb3JlX3RocmVzaG9sZEIPCg1fd2l0aF92ZWN0b3JzQg4KDF9sb29rdXBfZnJvbUIICgZfbGltaXRCDQoLX2dyb3VwX3NpemVCEwoRX3JlYWRfY29uc2lzdGVuY3lCDgoMX3dpdGhfbG9va3VwQgoKCF90aW1lb3V0QhUKE19zaGFyZF9rZXlfc2VsZWN0b3Ii4AIKC0ZhY2V0Q291bnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRILCgNrZXkYAiABKAkSIwoGZmlsdGVyGAMgASgLMg4ucWRyYW50LkZpbHRlckgAiAEBEhIKBWxpbWl0GAQgASgESAGIAQESEgoFZXhhY3QYBSABKAhIAogBARIUCgd0aW1lb3V0GAYgASgESAOIAQESNgoQcmVhZF9jb25zaXN0ZW5jeRgHIAEoCzIXLnFkcmFudC5SZWFkQ29uc2lzdGVuY3lIBIgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYCCABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgFiAEBQgkKB19maWx0ZXJCCAoGX2xpbWl0QggKBl9leGFjdEIKCghfdGltZW91dEITChFfcmVhZF9jb25zaXN0ZW5jeUIVChNfc2hhcmRfa2V5X3NlbGVjdG9yIl4KCkZhY2V0VmFsdWUSFgoMc3RyaW5nX3ZhbHVlGAEgASgJSAASFwoNaW50ZWdlcl92YWx1ZRgCIAEoA0gAEhQKCmJvb2xfdmFsdWUYAyABKAhIAEIJCgd2YXJpYW50IjwKCEZhY2V0SGl0EiEKBXZhbHVlGAEgASgLMhIucWRyYW50LkZhY2V0VmFsdWUSDQoFY291bnQYAiABKAQi+gIKElNlYXJjaE1hdHJpeFBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSIwoGZmlsdGVyGAIgASgLMg4ucWRyYW50LkZpbHRlckgAiAEBEhMKBnNhbXBsZRgDIAEoBEgBiAEBEhIKBWxpbWl0GAQgASgESAKIAQESEgoFdXNpbmcYBSABKAlIA4gBARIUCgd0aW1lb3V0GAYgASgESASIAQESNgoQcmVhZF9jb25zaXN0ZW5jeRgHIAEoCzIXLnFkcmFudC5SZWFkQ29uc2lzdGVuY3lIBYgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYCCABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgGiAEBQgkKB19maWx0ZXJCCQoHX3NhbXBsZUIICgZfbGltaXRCCAoGX3VzaW5nQgoKCF90aW1lb3V0QhMKEV9yZWFkX2NvbnNpc3RlbmN5QhUKE19zaGFyZF9rZXlfc2VsZWN0b3IiPAoRU2VhcmNoTWF0cml4UGFpcnMSJwoFcGFpcnMYASADKAsyGC5xZHJhbnQuU2VhcmNoTWF0cml4UGFpciJZChBTZWFyY2hNYXRyaXhQYWlyEhoKAWEYASABKAsyDy5xZHJhbnQuUG9pbnRJZBIaCgFiGAIgASgLMg8ucWRyYW50LlBvaW50SWQSDQoFc2NvcmUYAyABKAIibQoTU2VhcmNoTWF0cml4T2Zmc2V0cxITCgtvZmZzZXRzX3JvdxgBIAMoBBITCgtvZmZzZXRzX2NvbBgCIAMoBBIOCgZzY29yZXMYAyADKAISHAoDaWRzGAQgAygLMg8ucWRyYW50LlBvaW50SWQikRMKFVBvaW50c1VwZGF0ZU9wZXJhdGlvbhI/CgZ1cHNlcnQYASABKAsyLS5xZHJhbnQuUG9pbnRzVXBkYXRlT3BlcmF0aW9uLlBvaW50U3RydWN0TGlzdEgAEjcKEWRlbGV0ZV9kZXByZWNhdGVkGAIgASgLMhYucWRyYW50LlBvaW50c1NlbGVjdG9yQgIYAUgAEj8KC3NldF9wYXlsb2FkGAMgASgLMigucWRyYW50LlBvaW50c1VwZGF0ZU9wZXJhdGlvbi5TZXRQYXlsb2FkSAASSwoRb3ZlcndyaXRlX3BheWxvYWQYBCABKAsyLi5xZHJhbnQuUG9pbnRzVXBkYXRlT3BlcmF0aW9uLk92ZXJ3cml0ZVBheWxvYWRIABJFCg5kZWxldGVfcGF5bG9hZBgFIAEoCzIrLnFkcmFudC5Qb2ludHNVcGRhdGVPcGVyYXRpb24uRGVsZXRlUGF5bG9hZEgAEj4KGGNsZWFyX3BheWxvYWRfZGVwcmVjYXRlZBgGIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvckICGAFIABJFCg51cGRhdGVfdmVjdG9ycxgHIAEoCzIrLnFkcmFudC5Qb2ludHNVcGRhdGVPcGVyYXRpb24uVXBkYXRlVmVjdG9yc0gAEkUKDmRlbGV0ZV92ZWN0b3JzGAggASgLMisucWRyYW50LlBvaW50c1VwZGF0ZU9wZXJhdGlvbi5EZWxldGVWZWN0b3JzSAASQwoNZGVsZXRlX3BvaW50cxgJIAEoCzIqLnFkcmFudC5Qb2ludHNVcGRhdGVPcGVyYXRpb24uRGVsZXRlUG9pbnRzSAASQwoNY2xlYXJfcGF5bG9hZBgKIAEoCzIqLnFkcmFudC5Qb2ludHNVcGRhdGVPcGVyYXRpb24uQ2xlYXJQYXlsb2FkSAAaxgEKD1BvaW50U3RydWN0TGlzdBIjCgZwb2ludHMYASADKAsyEy5xZHJhbnQuUG9pbnRTdHJ1Y3QSOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAIgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAIgBARIqCg11cGRhdGVfZmlsdGVyGAMgASgLMg4ucWRyYW50LkZpbHRlckgBiAEBQhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCEAoOX3VwZGF0ZV9maWx0ZXIayQIKClNldFBheWxvYWQSRgoHcGF5bG9hZBgBIAMoCzI1LnFkcmFudC5Qb2ludHNVcGRhdGVPcGVyYXRpb24uU2V0UGF5bG9hZC5QYXlsb2FkRW50cnkSNAoPcG9pbnRzX3NlbGVjdG9yGAIgASgLMhYucWRyYW50LlBvaW50c1NlbGVjdG9ySACIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAMgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAYgBARIQCgNrZXkYBCABKAlIAogBARo9CgxQYXlsb2FkRW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0ucWRyYW50LlZhbHVlOgI4AUISChBfcG9pbnRzX3NlbGVjdG9yQhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCBgoEX2tleRrVAgoQT3ZlcndyaXRlUGF5bG9hZBJMCgdwYXlsb2FkGAEgAygLMjsucWRyYW50LlBvaW50c1VwZGF0ZU9wZXJhdGlvbi5PdmVyd3JpdGVQYXlsb2FkLlBheWxvYWRFbnRyeRI0Cg9wb2ludHNfc2VsZWN0b3IYAiABKAsyFi5xZHJhbnQuUG9pbnRzU2VsZWN0b3JIAIgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYAyABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgBiAEBEhAKA2tleRgEIAEoCUgCiAEBGj0KDFBheWxvYWRFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5xZHJhbnQuVmFsdWU6AjgBQhIKEF9wb2ludHNfc2VsZWN0b3JCFQoTX3NoYXJkX2tleV9zZWxlY3RvckIGCgRfa2V5GrkBCg1EZWxldGVQYXlsb2FkEgwKBGtleXMYASADKAkSNAoPcG9pbnRzX3NlbGVjdG9yGAIgASgLMhYucWRyYW50LlBvaW50c1NlbGVjdG9ySACIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAMgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAYgBAUISChBfcG9pbnRzX3NlbGVjdG9yQhUKE19zaGFyZF9rZXlfc2VsZWN0b3IaxQEKDVVwZGF0ZVZlY3RvcnMSJAoGcG9pbnRzGAEgAygLMhQucWRyYW50LlBvaW50VmVjdG9ycxI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYAiABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgAiAEBEioKDXVwZGF0ZV9maWx0ZXIYAyABKAsyDi5xZHJhbnQuRmlsdGVySAGIAQFCFQoTX3NoYXJkX2tleV9zZWxlY3RvckIQCg5fdXBkYXRlX2ZpbHRlchq8AQoNRGVsZXRlVmVjdG9ycxIvCg9wb2ludHNfc2VsZWN0b3IYASABKAsyFi5xZHJhbnQuUG9pbnRzU2VsZWN0b3ISKAoHdmVjdG9ycxgCIAEoCzIXLnFkcmFudC5WZWN0b3JzU2VsZWN0b3ISOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAMgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAIgBAUIVChNfc2hhcmRfa2V5X3NlbGVjdG9yGogBCgxEZWxldGVQb2ludHMSJgoGcG9pbnRzGAEgASgLMhYucWRyYW50LlBvaW50c1NlbGVjdG9yEjkKEnNoYXJkX2tleV9zZWxlY3RvchgCIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySACIAQFCFQoTX3NoYXJkX2tleV9zZWxlY3RvchqIAQoMQ2xlYXJQYXlsb2FkEiYKBnBvaW50cxgBIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvchI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYAiABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgAiAEBQhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCCwoJb3BlcmF0aW9uIrYBChFVcGRhdGVCYXRjaFBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSEQoEd2FpdBgCIAEoCEgAiAEBEjEKCm9wZXJhdGlvbnMYAyADKAsyHS5xZHJhbnQuUG9pbnRzVXBkYXRlT3BlcmF0aW9uEiwKCG9yZGVyaW5nGAQgASgLMhUucWRyYW50LldyaXRlT3JkZXJpbmdIAYgBAUIHCgVfd2FpdEILCglfb3JkZXJpbmciegoXUG9pbnRzT3BlcmF0aW9uUmVzcG9uc2USJAoGcmVzdWx0GAEgASgLMhQucWRyYW50LlVwZGF0ZVJlc3VsdBIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlImAKDFVwZGF0ZVJlc3VsdBIZCgxvcGVyYXRpb25faWQYASABKARIAIgBARIkCgZzdGF0dXMYAiABKA4yFC5xZHJhbnQuVXBkYXRlU3RhdHVzQg8KDV9vcGVyYXRpb25faWQiNwoKT3JkZXJWYWx1ZRINCgNpbnQYASABKANIABIPCgVmbG9hdBgCIAEoAUgAQgkKB3ZhcmlhbnQi8QIKC1Njb3JlZFBvaW50EhsKAmlkGAEgASgLMg8ucWRyYW50LlBvaW50SWQSMQoHcGF5bG9hZBgCIAMoCzIgLnFkcmFudC5TY29yZWRQb2ludC5QYXlsb2FkRW50cnkSDQoFc2NvcmUYAyABKAISDwoHdmVyc2lvbhgFIAEoBBIrCgd2ZWN0b3JzGAYgASgLMhUucWRyYW50LlZlY3RvcnNPdXRwdXRIAIgBARIoCglzaGFyZF9rZXkYByABKAsyEC5xZHJhbnQuU2hhcmRLZXlIAYgBARIsCgtvcmRlcl92YWx1ZRgIIAEoCzISLnFkcmFudC5PcmRlclZhbHVlSAKIAQEaPQoMUGF5bG9hZEVudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLnFkcmFudC5WYWx1ZToCOAFCCgoIX3ZlY3RvcnNCDAoKX3NoYXJkX2tleUIOCgxfb3JkZXJfdmFsdWVKBAgEEAUiXAoHR3JvdXBJZBIYCg51bnNpZ25lZF92YWx1ZRgBIAEoBEgAEhcKDWludGVnZXJfdmFsdWUYAiABKANIABIWCgxzdHJpbmdfdmFsdWUYAyABKAlIAEIGCgRraW5kInQKClBvaW50R3JvdXASGwoCaWQYASABKAsyDy5xZHJhbnQuR3JvdXBJZBIhCgRoaXRzGAIgAygLMhMucWRyYW50LlNjb3JlZFBvaW50EiYKBmxvb2t1cBgDIAEoCzIWLnFkcmFudC5SZXRyaWV2ZWRQb2ludCIyCgxHcm91cHNSZXN1bHQSIgoGZ3JvdXBzGAEgAygLMhIucWRyYW50LlBvaW50R3JvdXAicAoOU2VhcmNoUmVzcG9uc2USIwoGcmVzdWx0GAEgAygLMhMucWRyYW50LlNjb3JlZFBvaW50EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UibwoNUXVlcnlSZXNwb25zZRIjCgZyZXN1bHQYASADKAsyEy5xZHJhbnQuU2NvcmVkUG9pbnQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSJ0ChJRdWVyeUJhdGNoUmVzcG9uc2USIwoGcmVzdWx0GAEgAygLMhMucWRyYW50LkJhdGNoUmVzdWx0EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UidgoTUXVlcnlHcm91cHNSZXNwb25zZRIkCgZyZXN1bHQYASABKAsyFC5xZHJhbnQuR3JvdXBzUmVzdWx0EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UiMgoLQmF0Y2hSZXN1bHQSIwoGcmVzdWx0GAEgAygLMhMucWRyYW50LlNjb3JlZFBvaW50InUKE1NlYXJjaEJhdGNoUmVzcG9uc2USIwoGcmVzdWx0GAEgAygLMhMucWRyYW50LkJhdGNoUmVzdWx0EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UidwoUU2VhcmNoR3JvdXBzUmVzcG9uc2USJAoGcmVzdWx0GAEgASgLMhQucWRyYW50Lkdyb3Vwc1Jlc3VsdBIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlIm8KDUNvdW50UmVzcG9uc2USIwoGcmVzdWx0GAEgASgLMhMucWRyYW50LkNvdW50UmVzdWx0EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UiuAEKDlNjcm9sbFJlc3BvbnNlEi4KEG5leHRfcGFnZV9vZmZzZXQYASABKAsyDy5xZHJhbnQuUG9pbnRJZEgAiAEBEiYKBnJlc3VsdBgCIAMoCzIWLnFkcmFudC5SZXRyaWV2ZWRQb2ludBIMCgR0aW1lGAMgASgBEiEKBXVzYWdlGAQgASgLMg0ucWRyYW50LlVzYWdlSAGIAQFCEwoRX25leHRfcGFnZV9vZmZzZXRCCAoGX3VzYWdlIhwKC0NvdW50UmVzdWx0Eg0KBWNvdW50GAEgASgEItcCCg5SZXRyaWV2ZWRQb2ludBIbCgJpZBgBIAEoCzIPLnFkcmFudC5Qb2ludElkEjQKB3BheWxvYWQYAiADKAsyIy5xZHJhbnQuUmV0cmlldmVkUG9pbnQuUGF5bG9hZEVudHJ5EisKB3ZlY3RvcnMYBCABKAsyFS5xZHJhbnQuVmVjdG9yc091dHB1dEgAiAEBEigKCXNoYXJkX2tleRgFIAEoCzIQLnFkcmFudC5TaGFyZEtleUgBiAEBEiwKC29yZGVyX3ZhbHVlGAYgASgLMhIucWRyYW50Lk9yZGVyVmFsdWVIAogBARo9CgxQYXlsb2FkRW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0ucWRyYW50LlZhbHVlOgI4AUIKCghfdmVjdG9yc0IMCgpfc2hhcmRfa2V5Qg4KDF9vcmRlcl92YWx1ZUoECAMQBCJwCgtHZXRSZXNwb25zZRImCgZyZXN1bHQYASADKAsyFi5xZHJhbnQuUmV0cmlldmVkUG9pbnQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSJzChFSZWNvbW1lbmRSZXNwb25zZRIjCgZyZXN1bHQYASADKAsyEy5xZHJhbnQuU2NvcmVkUG9pbnQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSJ4ChZSZWNvbW1lbmRCYXRjaFJlc3BvbnNlEiMKBnJlc3VsdBgBIAMoCzITLnFkcmFudC5CYXRjaFJlc3VsdBIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlInIKEERpc2NvdmVyUmVzcG9uc2USIwoGcmVzdWx0GAEgAygLMhMucWRyYW50LlNjb3JlZFBvaW50EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UidwoVRGlzY292ZXJCYXRjaFJlc3BvbnNlEiMKBnJlc3VsdBgBIAMoCzITLnFkcmFudC5CYXRjaFJlc3VsdBIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlInoKF1JlY29tbWVuZEdyb3Vwc1Jlc3BvbnNlEiQKBnJlc3VsdBgBIAEoCzIULnFkcmFudC5Hcm91cHNSZXN1bHQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSJ2ChNVcGRhdGVCYXRjaFJlc3BvbnNlEiQKBnJlc3VsdBgBIAMoCzIULnFkcmFudC5VcGRhdGVSZXN1bHQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSJqCg1GYWNldFJlc3BvbnNlEh4KBGhpdHMYASADKAsyEC5xZHJhbnQuRmFjZXRIaXQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSKBAQoZU2VhcmNoTWF0cml4UGFpcnNSZXNwb25zZRIpCgZyZXN1bHQYASABKAsyGS5xZHJhbnQuU2VhcmNoTWF0cml4UGFpcnMSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSKFAQobU2VhcmNoTWF0cml4T2Zmc2V0c1Jlc3BvbnNlEisKBnJlc3VsdBgBIAEoCzIbLnFkcmFudC5TZWFyY2hNYXRyaXhPZmZzZXRzEgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UirAEKBkZpbHRlchIhCgZzaG91bGQYASADKAsyES5xZHJhbnQuQ29uZGl0aW9uEh8KBG11c3QYAiADKAsyES5xZHJhbnQuQ29uZGl0aW9uEiMKCG11c3Rfbm90GAMgAygLMhEucWRyYW50LkNvbmRpdGlvbhIqCgptaW5fc2hvdWxkGAQgASgLMhEucWRyYW50Lk1pblNob3VsZEgAiAEBQg0KC19taW5fc2hvdWxkIkUKCU1pblNob3VsZBIlCgpjb25kaXRpb25zGAEgAygLMhEucWRyYW50LkNvbmRpdGlvbhIRCgltaW5fY291bnQYAiABKAQiywIKCUNvbmRpdGlvbhInCgVmaWVsZBgBIAEoCzIWLnFkcmFudC5GaWVsZENvbmRpdGlvbkgAEiwKCGlzX2VtcHR5GAIgASgLMhgucWRyYW50LklzRW1wdHlDb25kaXRpb25IABIoCgZoYXNfaWQYAyABKAsyFi5xZHJhbnQuSGFzSWRDb25kaXRpb25IABIgCgZmaWx0ZXIYBCABKAsyDi5xZHJhbnQuRmlsdGVySAASKgoHaXNfbnVsbBgFIAEoCzIXLnFkcmFudC5Jc051bGxDb25kaXRpb25IABIpCgZuZXN0ZWQYBiABKAsyFy5xZHJhbnQuTmVzdGVkQ29uZGl0aW9uSAASMAoKaGFzX3ZlY3RvchgHIAEoCzIaLnFkcmFudC5IYXNWZWN0b3JDb25kaXRpb25IAEISChBjb25kaXRpb25fb25lX29mIh8KEElzRW1wdHlDb25kaXRpb24SCwoDa2V5GAEgASgJIh4KD0lzTnVsbENvbmRpdGlvbhILCgNrZXkYASABKAkiMQoOSGFzSWRDb25kaXRpb24SHwoGaGFzX2lkGAEgAygLMg8ucWRyYW50LlBvaW50SWQiKAoSSGFzVmVjdG9yQ29uZGl0aW9uEhIKCmhhc192ZWN0b3IYASABKAkiPgoPTmVzdGVkQ29uZGl0aW9uEgsKA2tleRgBIAEoCRIeCgZmaWx0ZXIYAiABKAsyDi5xZHJhbnQuRmlsdGVyIvsCCg5GaWVsZENvbmRpdGlvbhILCgNrZXkYASABKAkSHAoFbWF0Y2gYAiABKAsyDS5xZHJhbnQuTWF0Y2gSHAoFcmFuZ2UYAyABKAsyDS5xZHJhbnQuUmFuZ2USMAoQZ2VvX2JvdW5kaW5nX2JveBgEIAEoCzIWLnFkcmFudC5HZW9Cb3VuZGluZ0JveBIlCgpnZW9fcmFkaXVzGAUgASgLMhEucWRyYW50Lkdlb1JhZGl1cxIpCgx2YWx1ZXNfY291bnQYBiABKAsyEy5xZHJhbnQuVmFsdWVzQ291bnQSJwoLZ2VvX3BvbHlnb24YByABKAsyEi5xZHJhbnQuR2VvUG9seWdvbhItCg5kYXRldGltZV9yYW5nZRgIIAEoCzIVLnFkcmFudC5EYXRldGltZVJhbmdlEhUKCGlzX2VtcHR5GAkgASgISACIAQESFAoHaXNfbnVsbBgKIAEoCEgBiAEBQgsKCV9pc19lbXB0eUIKCghfaXNfbnVsbCLJAgoFTWF0Y2gSEQoHa2V5d29yZBgBIAEoCUgAEhEKB2ludGVnZXIYAiABKANIABIRCgdib29sZWFuGAMgASgISAASDgoEdGV4dBgEIAEoCUgAEisKCGtleXdvcmRzGAUgASgLMhcucWRyYW50LlJlcGVhdGVkU3RyaW5nc0gAEiwKCGludGVnZXJzGAYgASgLMhgucWRyYW50LlJlcGVhdGVkSW50ZWdlcnNIABIzCg9leGNlcHRfaW50ZWdlcnMYByABKAsyGC5xZHJhbnQuUmVwZWF0ZWRJbnRlZ2Vyc0gAEjIKD2V4Y2VwdF9rZXl3b3JkcxgIIAEoCzIXLnFkcmFudC5SZXBlYXRlZFN0cmluZ3NIABIQCgZwaHJhc2UYCSABKAlIABISCgh0ZXh0X2FueRgKIAEoCUgAQg0KC21hdGNoX3ZhbHVlIiIKD1JlcGVhdGVkU3RyaW5ncxIPCgdzdHJpbmdzGAEgAygJIiQKEFJlcGVhdGVkSW50ZWdlcnMSEAoIaW50ZWdlcnMYASADKAMiawoFUmFuZ2USDwoCbHQYASABKAFIAIgBARIPCgJndBgCIAEoAUgBiAEBEhAKA2d0ZRgDIAEoAUgCiAEBEhAKA2x0ZRgEIAEoAUgDiAEBQgUKA19sdEIFCgNfZ3RCBgoEX2d0ZUIGCgRfbHRlIuMBCg1EYXRldGltZVJhbmdlEisKAmx0GAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAiAEBEisKAmd0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgBiAEBEiwKA2d0ZRgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAogBARIsCgNsdGUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAOIAQFCBQoDX2x0QgUKA19ndEIGCgRfZ3RlQgYKBF9sdGUiXAoOR2VvQm91bmRpbmdCb3gSIgoIdG9wX2xlZnQYASABKAsyEC5xZHJhbnQuR2VvUG9pbnQSJgoMYm90dG9tX3JpZ2h0GAIgASgLMhAucWRyYW50Lkdlb1BvaW50Ij0KCUdlb1JhZGl1cxIgCgZjZW50ZXIYASABKAsyEC5xZHJhbnQuR2VvUG9pbnQSDgoGcmFkaXVzGAIgASgCIjEKDUdlb0xpbmVTdHJpbmcSIAoGcG9pbnRzGAEgAygLMhAucWRyYW50Lkdlb1BvaW50Il8KCkdlb1BvbHlnb24SJwoIZXh0ZXJpb3IYASABKAsyFS5xZHJhbnQuR2VvTGluZVN0cmluZxIoCglpbnRlcmlvcnMYAiADKAsyFS5xZHJhbnQuR2VvTGluZVN0cmluZyJxCgtWYWx1ZXNDb3VudBIPCgJsdBgBIAEoBEgAiAEBEg8KAmd0GAIgASgESAGIAQESEAoDZ3RlGAMgASgESAKIAQESEAoDbHRlGAQgASgESAOIAQFCBQoDX2x0QgUKA19ndEIGCgRfZ3RlQgYKBF9sdGUidQoOUG9pbnRzU2VsZWN0b3ISJwoGcG9pbnRzGAEgASgLMhUucWRyYW50LlBvaW50c0lkc0xpc3RIABIgCgZmaWx0ZXIYAiABKAsyDi5xZHJhbnQuRmlsdGVySABCGAoWcG9pbnRzX3NlbGVjdG9yX29uZV9vZiItCg1Qb2ludHNJZHNMaXN0EhwKA2lkcxgBIAMoCzIPLnFkcmFudC5Qb2ludElkItUBCgtQb2ludFN0cnVjdBIbCgJpZBgBIAEoCzIPLnFkcmFudC5Qb2ludElkEjEKB3BheWxvYWQYAyADKAsyIC5xZHJhbnQuUG9pbnRTdHJ1Y3QuUGF5bG9hZEVudHJ5EiUKB3ZlY3RvcnMYBCABKAsyDy5xZHJhbnQuVmVjdG9yc0gAiAEBGj0KDFBheWxvYWRFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5xZHJhbnQuVmFsdWU6AjgBQgoKCF92ZWN0b3JzSgQIAhADIiQKCEdlb1BvaW50EgsKA2xvbhgBIAEoARILCgNsYXQYAiABKAEigAEKBVVzYWdlEiwKCGhhcmR3YXJlGAEgASgLMhUucWRyYW50LkhhcmR3YXJlVXNhZ2VIAIgBARIuCglpbmZlcmVuY2UYAiABKAsyFi5xZHJhbnQuSW5mZXJlbmNlVXNhZ2VIAYgBAUILCglfaGFyZHdhcmVCDAoKX2luZmVyZW5jZSKHAQoOSW5mZXJlbmNlVXNhZ2USMgoGbW9kZWxzGAEgAygLMiIucWRyYW50LkluZmVyZW5jZVVzYWdlLk1vZGVsc0VudHJ5GkEKC01vZGVsc0VudHJ5EgsKA2tleRgBIAEoCRIhCgV2YWx1ZRgCIAEoCzISLnFkcmFudC5Nb2RlbFVzYWdlOgI4ASIcCgpNb2RlbFVzYWdlEg4KBnRva2VucxgBIAEoBCK/AQoNSGFyZHdhcmVVc2FnZRILCgNjcHUYASABKAQSFwoPcGF5bG9hZF9pb19yZWFkGAIgASgEEhgKEHBheWxvYWRfaW9fd3JpdGUYAyABKAQSHQoVcGF5bG9hZF9pbmRleF9pb19yZWFkGAQgASgEEh4KFnBheWxvYWRfaW5kZXhfaW9fd3JpdGUYBSABKAQSFgoOdmVjdG9yX2lvX3JlYWQYBiABKAQSFwoPdmVjdG9yX2lvX3dyaXRlGAcgASgEKjUKEVdyaXRlT3JkZXJpbmdUeXBlEggKBFdlYWsQABIKCgZNZWRpdW0QARIKCgZTdHJvbmcQAio4ChNSZWFkQ29uc2lzdGVuY3lUeXBlEgcKA0FsbBAAEgwKCE1ham9yaXR5EAESCgoGUXVvcnVtEAIqrQEKCUZpZWxkVHlwZRIUChBGaWVsZFR5cGVLZXl3b3JkEAASFAoQRmllbGRUeXBlSW50ZWdlchABEhIKDkZpZWxkVHlwZUZsb2F0EAISEAoMRmllbGRUeXBlR2VvEAMSEQoNRmllbGRUeXBlVGV4dBAEEhEKDUZpZWxkVHlwZUJvb2wQBRIVChFGaWVsZFR5cGVEYXRldGltZRAGEhEKDUZpZWxkVHlwZVV1aWQQByoeCglEaXJlY3Rpb24SBwoDQXNjEAASCAoERGVzYxABKkQKEVJlY29tbWVuZFN0cmF0ZWd5EhEKDUF2ZXJhZ2VWZWN0b3IQABINCglCZXN0U2NvcmUQARINCglTdW1TY29yZXMQAiobCgZGdXNpb24SBwoDUlJGEAASCAoEREJTRhABKhQKBlNhbXBsZRIKCgZSYW5kb20QACpbCgxVcGRhdGVTdGF0dXMSFwoTVW5rbm93blVwZGF0ZVN0YXR1cxAAEhAKDEFja25vd2xlZGdlZBABEg0KCUNvbXBsZXRlZBACEhEKDUNsb2NrUmVqZWN0ZWQQA0IVqgISUWRyYW50LkNsaWVudC5HcnBjYgZwcm90bzM", [file_collections, file_google_protobuf_timestamp, file_json_with_int]); + fileDesc("Cgxwb2ludHMucHJvdG8SBnFkcmFudCI4Cg1Xcml0ZU9yZGVyaW5nEicKBHR5cGUYASABKA4yGS5xZHJhbnQuV3JpdGVPcmRlcmluZ1R5cGUiWQoPUmVhZENvbnNpc3RlbmN5EisKBHR5cGUYASABKA4yGy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5VHlwZUgAEhAKBmZhY3RvchgCIAEoBEgAQgcKBXZhbHVlIh0KDVNwYXJzZUluZGljZXMSDAoEZGF0YRgBIAMoDSKWAQoIRG9jdW1lbnQSDAoEdGV4dBgBIAEoCRINCgVtb2RlbBgDIAEoCRIuCgdvcHRpb25zGAQgAygLMh0ucWRyYW50LkRvY3VtZW50Lk9wdGlvbnNFbnRyeRo9CgxPcHRpb25zRW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0ucWRyYW50LlZhbHVlOgI4ASKgAQoFSW1hZ2USHAoFaW1hZ2UYASABKAsyDS5xZHJhbnQuVmFsdWUSDQoFbW9kZWwYAiABKAkSKwoHb3B0aW9ucxgDIAMoCzIaLnFkcmFudC5JbWFnZS5PcHRpb25zRW50cnkaPQoMT3B0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLnFkcmFudC5WYWx1ZToCOAEitQEKD0luZmVyZW5jZU9iamVjdBIdCgZvYmplY3QYASABKAsyDS5xZHJhbnQuVmFsdWUSDQoFbW9kZWwYAiABKAkSNQoHb3B0aW9ucxgDIAMoCzIkLnFkcmFudC5JbmZlcmVuY2VPYmplY3QuT3B0aW9uc0VudHJ5Gj0KDE9wdGlvbnNFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5xZHJhbnQuVmFsdWU6AjgBIoMDCgZWZWN0b3ISEAoEZGF0YRgBIAMoAkICGAESLwoHaW5kaWNlcxgCIAEoCzIVLnFkcmFudC5TcGFyc2VJbmRpY2VzQgIYAUgBiAEBEh4KDXZlY3RvcnNfY291bnQYAyABKA1CAhgBSAKIAQESJAoFZGVuc2UYZSABKAsyEy5xZHJhbnQuRGVuc2VWZWN0b3JIABImCgZzcGFyc2UYZiABKAsyFC5xZHJhbnQuU3BhcnNlVmVjdG9ySAASLwoLbXVsdGlfZGVuc2UYZyABKAsyGC5xZHJhbnQuTXVsdGlEZW5zZVZlY3RvckgAEiQKCGRvY3VtZW50GGggASgLMhAucWRyYW50LkRvY3VtZW50SAASHgoFaW1hZ2UYaSABKAsyDS5xZHJhbnQuSW1hZ2VIABIpCgZvYmplY3QYaiABKAsyFy5xZHJhbnQuSW5mZXJlbmNlT2JqZWN0SABCCAoGdmVjdG9yQgoKCF9pbmRpY2VzQhAKDl92ZWN0b3JzX2NvdW50IpgCCgxWZWN0b3JPdXRwdXQSEAoEZGF0YRgBIAMoAkICGAESLwoHaW5kaWNlcxgCIAEoCzIVLnFkcmFudC5TcGFyc2VJbmRpY2VzQgIYAUgBiAEBEh4KDXZlY3RvcnNfY291bnQYAyABKA1CAhgBSAKIAQESJAoFZGVuc2UYZSABKAsyEy5xZHJhbnQuRGVuc2VWZWN0b3JIABImCgZzcGFyc2UYZiABKAsyFC5xZHJhbnQuU3BhcnNlVmVjdG9ySAASLwoLbXVsdGlfZGVuc2UYZyABKAsyGC5xZHJhbnQuTXVsdGlEZW5zZVZlY3RvckgAQggKBnZlY3RvckIKCghfaW5kaWNlc0IQCg5fdmVjdG9yc19jb3VudCIbCgtEZW5zZVZlY3RvchIMCgRkYXRhGAEgAygCIi8KDFNwYXJzZVZlY3RvchIOCgZ2YWx1ZXMYASADKAISDwoHaW5kaWNlcxgCIAMoDSI4ChBNdWx0aURlbnNlVmVjdG9yEiQKB3ZlY3RvcnMYASADKAsyEy5xZHJhbnQuRGVuc2VWZWN0b3IipwIKC1ZlY3RvcklucHV0Eh0KAmlkGAEgASgLMg8ucWRyYW50LlBvaW50SWRIABIkCgVkZW5zZRgCIAEoCzITLnFkcmFudC5EZW5zZVZlY3RvckgAEiYKBnNwYXJzZRgDIAEoCzIULnFkcmFudC5TcGFyc2VWZWN0b3JIABIvCgttdWx0aV9kZW5zZRgEIAEoCzIYLnFkcmFudC5NdWx0aURlbnNlVmVjdG9ySAASJAoIZG9jdW1lbnQYBSABKAsyEC5xZHJhbnQuRG9jdW1lbnRIABIeCgVpbWFnZRgGIAEoCzINLnFkcmFudC5JbWFnZUgAEikKBm9iamVjdBgHIAEoCzIXLnFkcmFudC5JbmZlcmVuY2VPYmplY3RIAEIJCgd2YXJpYW50Im4KEFNoYXJkS2V5U2VsZWN0b3ISJAoKc2hhcmRfa2V5cxgBIAMoCzIQLnFkcmFudC5TaGFyZEtleRInCghmYWxsYmFjaxgCIAEoCzIQLnFkcmFudC5TaGFyZEtleUgAiAEBQgsKCV9mYWxsYmFjayKzAgoMVXBzZXJ0UG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIRCgR3YWl0GAIgASgISACIAQESIwoGcG9pbnRzGAMgAygLMhMucWRyYW50LlBvaW50U3RydWN0EiwKCG9yZGVyaW5nGAQgASgLMhUucWRyYW50LldyaXRlT3JkZXJpbmdIAYgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYBSABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgCiAEBEioKDXVwZGF0ZV9maWx0ZXIYBiABKAsyDi5xZHJhbnQuRmlsdGVySAOIAQFCBwoFX3dhaXRCCwoJX29yZGVyaW5nQhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCEAoOX3VwZGF0ZV9maWx0ZXIi+AEKDERlbGV0ZVBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSEQoEd2FpdBgCIAEoCEgAiAEBEiYKBnBvaW50cxgDIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvchIsCghvcmRlcmluZxgEIAEoCzIVLnFkcmFudC5Xcml0ZU9yZGVyaW5nSAGIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAUgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAogBAUIHCgVfd2FpdEILCglfb3JkZXJpbmdCFQoTX3NoYXJkX2tleV9zZWxlY3RvciKFAwoJR2V0UG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIcCgNpZHMYAiADKAsyDy5xZHJhbnQuUG9pbnRJZBIxCgx3aXRoX3BheWxvYWQYBCABKAsyGy5xZHJhbnQuV2l0aFBheWxvYWRTZWxlY3RvchI2Cgx3aXRoX3ZlY3RvcnMYBSABKAsyGy5xZHJhbnQuV2l0aFZlY3RvcnNTZWxlY3RvckgAiAEBEjYKEHJlYWRfY29uc2lzdGVuY3kYBiABKAsyFy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5SAGIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAcgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAogBARIUCgd0aW1lb3V0GAggASgESAOIAQFCDwoNX3dpdGhfdmVjdG9yc0ITChFfcmVhZF9jb25zaXN0ZW5jeUIVChNfc2hhcmRfa2V5X3NlbGVjdG9yQgoKCF90aW1lb3V0SgQIAxAEIroCChJVcGRhdGVQb2ludFZlY3RvcnMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhEKBHdhaXQYAiABKAhIAIgBARIkCgZwb2ludHMYAyADKAsyFC5xZHJhbnQuUG9pbnRWZWN0b3JzEiwKCG9yZGVyaW5nGAQgASgLMhUucWRyYW50LldyaXRlT3JkZXJpbmdIAYgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYBSABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgCiAEBEioKDXVwZGF0ZV9maWx0ZXIYBiABKAsyDi5xZHJhbnQuRmlsdGVySAOIAQFCBwoFX3dhaXRCCwoJX29yZGVyaW5nQhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCEAoOX3VwZGF0ZV9maWx0ZXIiTQoMUG9pbnRWZWN0b3JzEhsKAmlkGAEgASgLMg8ucWRyYW50LlBvaW50SWQSIAoHdmVjdG9ycxgCIAEoCzIPLnFkcmFudC5WZWN0b3JzIrECChJEZWxldGVQb2ludFZlY3RvcnMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhEKBHdhaXQYAiABKAhIAIgBARIvCg9wb2ludHNfc2VsZWN0b3IYAyABKAsyFi5xZHJhbnQuUG9pbnRzU2VsZWN0b3ISKAoHdmVjdG9ycxgEIAEoCzIXLnFkcmFudC5WZWN0b3JzU2VsZWN0b3ISLAoIb3JkZXJpbmcYBSABKAsyFS5xZHJhbnQuV3JpdGVPcmRlcmluZ0gBiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgGIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAKIAQFCBwoFX3dhaXRCCwoJX29yZGVyaW5nQhUKE19zaGFyZF9rZXlfc2VsZWN0b3IitQMKEFNldFBheWxvYWRQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhEKBHdhaXQYAiABKAhIAIgBARI2CgdwYXlsb2FkGAMgAygLMiUucWRyYW50LlNldFBheWxvYWRQb2ludHMuUGF5bG9hZEVudHJ5EjQKD3BvaW50c19zZWxlY3RvchgFIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvckgBiAEBEiwKCG9yZGVyaW5nGAYgASgLMhUucWRyYW50LldyaXRlT3JkZXJpbmdIAogBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYByABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgDiAEBEhAKA2tleRgIIAEoCUgEiAEBGj0KDFBheWxvYWRFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5xZHJhbnQuVmFsdWU6AjgBQgcKBV93YWl0QhIKEF9wb2ludHNfc2VsZWN0b3JCCwoJX29yZGVyaW5nQhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCBgoEX2tleUoECAQQBSK1AgoTRGVsZXRlUGF5bG9hZFBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSEQoEd2FpdBgCIAEoCEgAiAEBEgwKBGtleXMYAyADKAkSNAoPcG9pbnRzX3NlbGVjdG9yGAUgASgLMhYucWRyYW50LlBvaW50c1NlbGVjdG9ySAGIAQESLAoIb3JkZXJpbmcYBiABKAsyFS5xZHJhbnQuV3JpdGVPcmRlcmluZ0gCiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgHIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAOIAQFCBwoFX3dhaXRCEgoQX3BvaW50c19zZWxlY3RvckILCglfb3JkZXJpbmdCFQoTX3NoYXJkX2tleV9zZWxlY3RvckoECAQQBSL+AQoSQ2xlYXJQYXlsb2FkUG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIRCgR3YWl0GAIgASgISACIAQESJgoGcG9pbnRzGAMgASgLMhYucWRyYW50LlBvaW50c1NlbGVjdG9yEiwKCG9yZGVyaW5nGAQgASgLMhUucWRyYW50LldyaXRlT3JkZXJpbmdIAYgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYBSABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgCiAEBQgcKBV93YWl0QgsKCV9vcmRlcmluZ0IVChNfc2hhcmRfa2V5X3NlbGVjdG9yIq8CChpDcmVhdGVGaWVsZEluZGV4Q29sbGVjdGlvbhIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSEQoEd2FpdBgCIAEoCEgAiAEBEhIKCmZpZWxkX25hbWUYAyABKAkSKgoKZmllbGRfdHlwZRgEIAEoDjIRLnFkcmFudC5GaWVsZFR5cGVIAYgBARI7ChJmaWVsZF9pbmRleF9wYXJhbXMYBSABKAsyGi5xZHJhbnQuUGF5bG9hZEluZGV4UGFyYW1zSAKIAQESLAoIb3JkZXJpbmcYBiABKAsyFS5xZHJhbnQuV3JpdGVPcmRlcmluZ0gDiAEBQgcKBV93YWl0Qg0KC19maWVsZF90eXBlQhUKE19maWVsZF9pbmRleF9wYXJhbXNCCwoJX29yZGVyaW5nIqABChpEZWxldGVGaWVsZEluZGV4Q29sbGVjdGlvbhIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSEQoEd2FpdBgCIAEoCEgAiAEBEhIKCmZpZWxkX25hbWUYAyABKAkSLAoIb3JkZXJpbmcYBCABKAsyFS5xZHJhbnQuV3JpdGVPcmRlcmluZ0gBiAEBQgcKBV93YWl0QgsKCV9vcmRlcmluZyIoChZQYXlsb2FkSW5jbHVkZVNlbGVjdG9yEg4KBmZpZWxkcxgBIAMoCSIoChZQYXlsb2FkRXhjbHVkZVNlbGVjdG9yEg4KBmZpZWxkcxgBIAMoCSKhAQoTV2l0aFBheWxvYWRTZWxlY3RvchIQCgZlbmFibGUYASABKAhIABIxCgdpbmNsdWRlGAIgASgLMh4ucWRyYW50LlBheWxvYWRJbmNsdWRlU2VsZWN0b3JIABIxCgdleGNsdWRlGAMgASgLMh4ucWRyYW50LlBheWxvYWRFeGNsdWRlU2VsZWN0b3JIAEISChBzZWxlY3Rvcl9vcHRpb25zIoIBCgxOYW1lZFZlY3RvcnMSMgoHdmVjdG9ycxgBIAMoCzIhLnFkcmFudC5OYW1lZFZlY3RvcnMuVmVjdG9yc0VudHJ5Gj4KDFZlY3RvcnNFbnRyeRILCgNrZXkYASABKAkSHQoFdmFsdWUYAiABKAsyDi5xZHJhbnQuVmVjdG9yOgI4ASKUAQoSTmFtZWRWZWN0b3JzT3V0cHV0EjgKB3ZlY3RvcnMYASADKAsyJy5xZHJhbnQuTmFtZWRWZWN0b3JzT3V0cHV0LlZlY3RvcnNFbnRyeRpECgxWZWN0b3JzRW50cnkSCwoDa2V5GAEgASgJEiMKBXZhbHVlGAIgASgLMhQucWRyYW50LlZlY3Rvck91dHB1dDoCOAEiZwoHVmVjdG9ycxIgCgZ2ZWN0b3IYASABKAsyDi5xZHJhbnQuVmVjdG9ySAASJwoHdmVjdG9ycxgCIAEoCzIULnFkcmFudC5OYW1lZFZlY3RvcnNIAEIRCg92ZWN0b3JzX29wdGlvbnMieQoNVmVjdG9yc091dHB1dBImCgZ2ZWN0b3IYASABKAsyFC5xZHJhbnQuVmVjdG9yT3V0cHV0SAASLQoHdmVjdG9ycxgCIAEoCzIaLnFkcmFudC5OYW1lZFZlY3RvcnNPdXRwdXRIAEIRCg92ZWN0b3JzX29wdGlvbnMiIAoPVmVjdG9yc1NlbGVjdG9yEg0KBW5hbWVzGAEgAygJImcKE1dpdGhWZWN0b3JzU2VsZWN0b3ISEAoGZW5hYmxlGAEgASgISAASKgoHaW5jbHVkZRgCIAEoCzIXLnFkcmFudC5WZWN0b3JzU2VsZWN0b3JIAEISChBzZWxlY3Rvcl9vcHRpb25zIogBChhRdWFudGl6YXRpb25TZWFyY2hQYXJhbXMSEwoGaWdub3JlGAEgASgISACIAQESFAoHcmVzY29yZRgCIAEoCEgBiAEBEhkKDG92ZXJzYW1wbGluZxgDIAEoAUgCiAEBQgkKB19pZ25vcmVCCgoIX3Jlc2NvcmVCDwoNX292ZXJzYW1wbGluZyJlChFBY29yblNlYXJjaFBhcmFtcxITCgZlbmFibGUYASABKAhIAIgBARIcCg9tYXhfc2VsZWN0aXZpdHkYAiABKAFIAYgBAUIJCgdfZW5hYmxlQhIKEF9tYXhfc2VsZWN0aXZpdHkigQIKDFNlYXJjaFBhcmFtcxIUCgdobnN3X2VmGAEgASgESACIAQESEgoFZXhhY3QYAiABKAhIAYgBARI7CgxxdWFudGl6YXRpb24YAyABKAsyIC5xZHJhbnQuUXVhbnRpemF0aW9uU2VhcmNoUGFyYW1zSAKIAQESGQoMaW5kZXhlZF9vbmx5GAQgASgISAOIAQESLQoFYWNvcm4YBSABKAsyGS5xZHJhbnQuQWNvcm5TZWFyY2hQYXJhbXNIBIgBAUIKCghfaG5zd19lZkIICgZfZXhhY3RCDwoNX3F1YW50aXphdGlvbkIPCg1faW5kZXhlZF9vbmx5QggKBl9hY29ybiKSBQoMU2VhcmNoUG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIOCgZ2ZWN0b3IYAiADKAISHgoGZmlsdGVyGAMgASgLMg4ucWRyYW50LkZpbHRlchINCgVsaW1pdBgEIAEoBBIxCgx3aXRoX3BheWxvYWQYBiABKAsyGy5xZHJhbnQuV2l0aFBheWxvYWRTZWxlY3RvchIkCgZwYXJhbXMYByABKAsyFC5xZHJhbnQuU2VhcmNoUGFyYW1zEhwKD3Njb3JlX3RocmVzaG9sZBgIIAEoAkgAiAEBEhMKBm9mZnNldBgJIAEoBEgBiAEBEhgKC3ZlY3Rvcl9uYW1lGAogASgJSAKIAQESNgoMd2l0aF92ZWN0b3JzGAsgASgLMhsucWRyYW50LldpdGhWZWN0b3JzU2VsZWN0b3JIA4gBARI2ChByZWFkX2NvbnNpc3RlbmN5GAwgASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgEiAEBEhQKB3RpbWVvdXQYDSABKARIBYgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYDiABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgGiAEBEjIKDnNwYXJzZV9pbmRpY2VzGA8gASgLMhUucWRyYW50LlNwYXJzZUluZGljZXNIB4gBAUISChBfc2NvcmVfdGhyZXNob2xkQgkKB19vZmZzZXRCDgoMX3ZlY3Rvcl9uYW1lQg8KDV93aXRoX3ZlY3RvcnNCEwoRX3JlYWRfY29uc2lzdGVuY3lCCgoIX3RpbWVvdXRCFQoTX3NoYXJkX2tleV9zZWxlY3RvckIRCg9fc3BhcnNlX2luZGljZXNKBAgFEAYiyAEKEVNlYXJjaEJhdGNoUG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIrCg1zZWFyY2hfcG9pbnRzGAIgAygLMhQucWRyYW50LlNlYXJjaFBvaW50cxI2ChByZWFkX2NvbnNpc3RlbmN5GAMgASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgAiAEBEhQKB3RpbWVvdXQYBCABKARIAYgBAUITChFfcmVhZF9jb25zaXN0ZW5jeUIKCghfdGltZW91dCKyAQoKV2l0aExvb2t1cBISCgpjb2xsZWN0aW9uGAEgASgJEjYKDHdpdGhfcGF5bG9hZBgCIAEoCzIbLnFkcmFudC5XaXRoUGF5bG9hZFNlbGVjdG9ySACIAQESNgoMd2l0aF92ZWN0b3JzGAMgASgLMhsucWRyYW50LldpdGhWZWN0b3JzU2VsZWN0b3JIAYgBAUIPCg1fd2l0aF9wYXlsb2FkQg8KDV93aXRoX3ZlY3RvcnMi1QUKEVNlYXJjaFBvaW50R3JvdXBzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIOCgZ2ZWN0b3IYAiADKAISHgoGZmlsdGVyGAMgASgLMg4ucWRyYW50LkZpbHRlchINCgVsaW1pdBgEIAEoDRIxCgx3aXRoX3BheWxvYWQYBSABKAsyGy5xZHJhbnQuV2l0aFBheWxvYWRTZWxlY3RvchIkCgZwYXJhbXMYBiABKAsyFC5xZHJhbnQuU2VhcmNoUGFyYW1zEhwKD3Njb3JlX3RocmVzaG9sZBgHIAEoAkgAiAEBEhgKC3ZlY3Rvcl9uYW1lGAggASgJSAGIAQESNgoMd2l0aF92ZWN0b3JzGAkgASgLMhsucWRyYW50LldpdGhWZWN0b3JzU2VsZWN0b3JIAogBARIQCghncm91cF9ieRgKIAEoCRISCgpncm91cF9zaXplGAsgASgNEjYKEHJlYWRfY29uc2lzdGVuY3kYDCABKAsyFy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5SAOIAQESLAoLd2l0aF9sb29rdXAYDSABKAsyEi5xZHJhbnQuV2l0aExvb2t1cEgEiAEBEhQKB3RpbWVvdXQYDiABKARIBYgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYDyABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgGiAEBEjIKDnNwYXJzZV9pbmRpY2VzGBAgASgLMhUucWRyYW50LlNwYXJzZUluZGljZXNIB4gBAUISChBfc2NvcmVfdGhyZXNob2xkQg4KDF92ZWN0b3JfbmFtZUIPCg1fd2l0aF92ZWN0b3JzQhMKEV9yZWFkX2NvbnNpc3RlbmN5Qg4KDF93aXRoX2xvb2t1cEIKCghfdGltZW91dEIVChNfc2hhcmRfa2V5X3NlbGVjdG9yQhEKD19zcGFyc2VfaW5kaWNlcyJ9CglTdGFydEZyb20SDwoFZmxvYXQYASABKAFIABIRCgdpbnRlZ2VyGAIgASgDSAASLwoJdGltZXN0YW1wGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAEhIKCGRhdGV0aW1lGAQgASgJSABCBwoFdmFsdWUiigEKB09yZGVyQnkSCwoDa2V5GAEgASgJEikKCWRpcmVjdGlvbhgCIAEoDjIRLnFkcmFudC5EaXJlY3Rpb25IAIgBARIqCgpzdGFydF9mcm9tGAMgASgLMhEucWRyYW50LlN0YXJ0RnJvbUgBiAEBQgwKCl9kaXJlY3Rpb25CDQoLX3N0YXJ0X2Zyb20ijgQKDFNjcm9sbFBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSHgoGZmlsdGVyGAIgASgLMg4ucWRyYW50LkZpbHRlchIkCgZvZmZzZXQYAyABKAsyDy5xZHJhbnQuUG9pbnRJZEgAiAEBEhIKBWxpbWl0GAQgASgNSAGIAQESMQoMd2l0aF9wYXlsb2FkGAYgASgLMhsucWRyYW50LldpdGhQYXlsb2FkU2VsZWN0b3ISNgoMd2l0aF92ZWN0b3JzGAcgASgLMhsucWRyYW50LldpdGhWZWN0b3JzU2VsZWN0b3JIAogBARI2ChByZWFkX2NvbnNpc3RlbmN5GAggASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgDiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgJIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySASIAQESJgoIb3JkZXJfYnkYCiABKAsyDy5xZHJhbnQuT3JkZXJCeUgFiAEBEhQKB3RpbWVvdXQYCyABKARIBogBAUIJCgdfb2Zmc2V0QggKBl9saW1pdEIPCg1fd2l0aF92ZWN0b3JzQhMKEV9yZWFkX2NvbnNpc3RlbmN5QhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCCwoJX29yZGVyX2J5QgoKCF90aW1lb3V0SgQIBRAGIqUBCg5Mb29rdXBMb2NhdGlvbhIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSGAoLdmVjdG9yX25hbWUYAiABKAlIAIgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYAyABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgBiAEBQg4KDF92ZWN0b3JfbmFtZUIVChNfc2hhcmRfa2V5X3NlbGVjdG9yIs0GCg9SZWNvbW1lbmRQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEiEKCHBvc2l0aXZlGAIgAygLMg8ucWRyYW50LlBvaW50SWQSIQoIbmVnYXRpdmUYAyADKAsyDy5xZHJhbnQuUG9pbnRJZBIeCgZmaWx0ZXIYBCABKAsyDi5xZHJhbnQuRmlsdGVyEg0KBWxpbWl0GAUgASgEEjEKDHdpdGhfcGF5bG9hZBgHIAEoCzIbLnFkcmFudC5XaXRoUGF5bG9hZFNlbGVjdG9yEiQKBnBhcmFtcxgIIAEoCzIULnFkcmFudC5TZWFyY2hQYXJhbXMSHAoPc2NvcmVfdGhyZXNob2xkGAkgASgCSACIAQESEwoGb2Zmc2V0GAogASgESAGIAQESEgoFdXNpbmcYCyABKAlIAogBARI2Cgx3aXRoX3ZlY3RvcnMYDCABKAsyGy5xZHJhbnQuV2l0aFZlY3RvcnNTZWxlY3RvckgDiAEBEjAKC2xvb2t1cF9mcm9tGA0gASgLMhYucWRyYW50Lkxvb2t1cExvY2F0aW9uSASIAQESNgoQcmVhZF9jb25zaXN0ZW5jeRgOIAEoCzIXLnFkcmFudC5SZWFkQ29uc2lzdGVuY3lIBYgBARIwCghzdHJhdGVneRgQIAEoDjIZLnFkcmFudC5SZWNvbW1lbmRTdHJhdGVneUgGiAEBEigKEHBvc2l0aXZlX3ZlY3RvcnMYESADKAsyDi5xZHJhbnQuVmVjdG9yEigKEG5lZ2F0aXZlX3ZlY3RvcnMYEiADKAsyDi5xZHJhbnQuVmVjdG9yEhQKB3RpbWVvdXQYEyABKARIB4gBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYFCABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgIiAEBQhIKEF9zY29yZV90aHJlc2hvbGRCCQoHX29mZnNldEIICgZfdXNpbmdCDwoNX3dpdGhfdmVjdG9yc0IOCgxfbG9va3VwX2Zyb21CEwoRX3JlYWRfY29uc2lzdGVuY3lCCwoJX3N0cmF0ZWd5QgoKCF90aW1lb3V0QhUKE19zaGFyZF9rZXlfc2VsZWN0b3JKBAgGEAci0QEKFFJlY29tbWVuZEJhdGNoUG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIxChByZWNvbW1lbmRfcG9pbnRzGAIgAygLMhcucWRyYW50LlJlY29tbWVuZFBvaW50cxI2ChByZWFkX2NvbnNpc3RlbmN5GAMgASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgAiAEBEhQKB3RpbWVvdXQYBCABKARIAYgBAUITChFfcmVhZF9jb25zaXN0ZW5jeUIKCghfdGltZW91dCKQBwoUUmVjb21tZW5kUG9pbnRHcm91cHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEiEKCHBvc2l0aXZlGAIgAygLMg8ucWRyYW50LlBvaW50SWQSIQoIbmVnYXRpdmUYAyADKAsyDy5xZHJhbnQuUG9pbnRJZBIeCgZmaWx0ZXIYBCABKAsyDi5xZHJhbnQuRmlsdGVyEg0KBWxpbWl0GAUgASgNEjEKDHdpdGhfcGF5bG9hZBgGIAEoCzIbLnFkcmFudC5XaXRoUGF5bG9hZFNlbGVjdG9yEiQKBnBhcmFtcxgHIAEoCzIULnFkcmFudC5TZWFyY2hQYXJhbXMSHAoPc2NvcmVfdGhyZXNob2xkGAggASgCSACIAQESEgoFdXNpbmcYCSABKAlIAYgBARI2Cgx3aXRoX3ZlY3RvcnMYCiABKAsyGy5xZHJhbnQuV2l0aFZlY3RvcnNTZWxlY3RvckgCiAEBEjAKC2xvb2t1cF9mcm9tGAsgASgLMhYucWRyYW50Lkxvb2t1cExvY2F0aW9uSAOIAQESEAoIZ3JvdXBfYnkYDCABKAkSEgoKZ3JvdXBfc2l6ZRgNIAEoDRI2ChByZWFkX2NvbnNpc3RlbmN5GA4gASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgEiAEBEiwKC3dpdGhfbG9va3VwGA8gASgLMhIucWRyYW50LldpdGhMb29rdXBIBYgBARIwCghzdHJhdGVneRgRIAEoDjIZLnFkcmFudC5SZWNvbW1lbmRTdHJhdGVneUgGiAEBEigKEHBvc2l0aXZlX3ZlY3RvcnMYEiADKAsyDi5xZHJhbnQuVmVjdG9yEigKEG5lZ2F0aXZlX3ZlY3RvcnMYEyADKAsyDi5xZHJhbnQuVmVjdG9yEhQKB3RpbWVvdXQYFCABKARIB4gBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYFSABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgIiAEBQhIKEF9zY29yZV90aHJlc2hvbGRCCAoGX3VzaW5nQg8KDV93aXRoX3ZlY3RvcnNCDgoMX2xvb2t1cF9mcm9tQhMKEV9yZWFkX2NvbnNpc3RlbmN5Qg4KDF93aXRoX2xvb2t1cEILCglfc3RyYXRlZ3lCCgoIX3RpbWVvdXRCFQoTX3NoYXJkX2tleV9zZWxlY3RvciJBCgxUYXJnZXRWZWN0b3ISJwoGc2luZ2xlGAEgASgLMhUucWRyYW50LlZlY3RvckV4YW1wbGVIAEIICgZ0YXJnZXQiWwoNVmVjdG9yRXhhbXBsZRIdCgJpZBgBIAEoCzIPLnFkcmFudC5Qb2ludElkSAASIAoGdmVjdG9yGAIgASgLMg4ucWRyYW50LlZlY3RvckgAQgkKB2V4YW1wbGUiZgoSQ29udGV4dEV4YW1wbGVQYWlyEicKCHBvc2l0aXZlGAEgASgLMhUucWRyYW50LlZlY3RvckV4YW1wbGUSJwoIbmVnYXRpdmUYAiABKAsyFS5xZHJhbnQuVmVjdG9yRXhhbXBsZSKOBQoORGlzY292ZXJQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEiQKBnRhcmdldBgCIAEoCzIULnFkcmFudC5UYXJnZXRWZWN0b3ISKwoHY29udGV4dBgDIAMoCzIaLnFkcmFudC5Db250ZXh0RXhhbXBsZVBhaXISHgoGZmlsdGVyGAQgASgLMg4ucWRyYW50LkZpbHRlchINCgVsaW1pdBgFIAEoBBIxCgx3aXRoX3BheWxvYWQYBiABKAsyGy5xZHJhbnQuV2l0aFBheWxvYWRTZWxlY3RvchIkCgZwYXJhbXMYByABKAsyFC5xZHJhbnQuU2VhcmNoUGFyYW1zEhMKBm9mZnNldBgIIAEoBEgAiAEBEhIKBXVzaW5nGAkgASgJSAGIAQESNgoMd2l0aF92ZWN0b3JzGAogASgLMhsucWRyYW50LldpdGhWZWN0b3JzU2VsZWN0b3JIAogBARIwCgtsb29rdXBfZnJvbRgLIAEoCzIWLnFkcmFudC5Mb29rdXBMb2NhdGlvbkgDiAEBEjYKEHJlYWRfY29uc2lzdGVuY3kYDCABKAsyFy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5SASIAQESFAoHdGltZW91dBgNIAEoBEgFiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgOIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAaIAQFCCQoHX29mZnNldEIICgZfdXNpbmdCDwoNX3dpdGhfdmVjdG9yc0IOCgxfbG9va3VwX2Zyb21CEwoRX3JlYWRfY29uc2lzdGVuY3lCCgoIX3RpbWVvdXRCFQoTX3NoYXJkX2tleV9zZWxlY3RvciLOAQoTRGlzY292ZXJCYXRjaFBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSLwoPZGlzY292ZXJfcG9pbnRzGAIgAygLMhYucWRyYW50LkRpc2NvdmVyUG9pbnRzEjYKEHJlYWRfY29uc2lzdGVuY3kYAyABKAsyFy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5SACIAQESFAoHdGltZW91dBgEIAEoBEgBiAEBQhMKEV9yZWFkX2NvbnNpc3RlbmN5QgoKCF90aW1lb3V0IqUCCgtDb3VudFBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSHgoGZmlsdGVyGAIgASgLMg4ucWRyYW50LkZpbHRlchISCgVleGFjdBgDIAEoCEgAiAEBEjYKEHJlYWRfY29uc2lzdGVuY3kYBCABKAsyFy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5SAGIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAUgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAogBARIUCgd0aW1lb3V0GAYgASgESAOIAQFCCAoGX2V4YWN0QhMKEV9yZWFkX2NvbnNpc3RlbmN5QhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCCgoIX3RpbWVvdXQinQEKDlJlY29tbWVuZElucHV0EiUKCHBvc2l0aXZlGAEgAygLMhMucWRyYW50LlZlY3RvcklucHV0EiUKCG5lZ2F0aXZlGAIgAygLMhMucWRyYW50LlZlY3RvcklucHV0EjAKCHN0cmF0ZWd5GAMgASgOMhkucWRyYW50LlJlY29tbWVuZFN0cmF0ZWd5SACIAQFCCwoJX3N0cmF0ZWd5ImAKEENvbnRleHRJbnB1dFBhaXISJQoIcG9zaXRpdmUYASABKAsyEy5xZHJhbnQuVmVjdG9ySW5wdXQSJQoIbmVnYXRpdmUYAiABKAsyEy5xZHJhbnQuVmVjdG9ySW5wdXQiWwoNRGlzY292ZXJJbnB1dBIjCgZ0YXJnZXQYASABKAsyEy5xZHJhbnQuVmVjdG9ySW5wdXQSJQoHY29udGV4dBgCIAEoCzIULnFkcmFudC5Db250ZXh0SW5wdXQiNwoMQ29udGV4dElucHV0EicKBXBhaXJzGAEgAygLMhgucWRyYW50LkNvbnRleHRJbnB1dFBhaXIiogEKB0Zvcm11bGESJgoKZXhwcmVzc2lvbhgBIAEoCzISLnFkcmFudC5FeHByZXNzaW9uEi8KCGRlZmF1bHRzGAIgAygLMh0ucWRyYW50LkZvcm11bGEuRGVmYXVsdHNFbnRyeRo+Cg1EZWZhdWx0c0VudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLnFkcmFudC5WYWx1ZToCOAEizAUKCkV4cHJlc3Npb24SEgoIY29uc3RhbnQYASABKAJIABISCgh2YXJpYWJsZRgCIAEoCUgAEiYKCWNvbmRpdGlvbhgDIAEoCzIRLnFkcmFudC5Db25kaXRpb25IABIrCgxnZW9fZGlzdGFuY2UYBCABKAsyEy5xZHJhbnQuR2VvRGlzdGFuY2VIABISCghkYXRldGltZRgFIAEoCUgAEhYKDGRhdGV0aW1lX2tleRgGIAEoCUgAEiYKBG11bHQYByABKAsyFi5xZHJhbnQuTXVsdEV4cHJlc3Npb25IABIkCgNzdW0YCCABKAsyFS5xZHJhbnQuU3VtRXhwcmVzc2lvbkgAEiQKA2RpdhgJIAEoCzIVLnFkcmFudC5EaXZFeHByZXNzaW9uSAASIQoDbmVnGAogASgLMhIucWRyYW50LkV4cHJlc3Npb25IABIhCgNhYnMYCyABKAsyEi5xZHJhbnQuRXhwcmVzc2lvbkgAEiIKBHNxcnQYDCABKAsyEi5xZHJhbnQuRXhwcmVzc2lvbkgAEiQKA3BvdxgNIAEoCzIVLnFkcmFudC5Qb3dFeHByZXNzaW9uSAASIQoDZXhwGA4gASgLMhIucWRyYW50LkV4cHJlc3Npb25IABIjCgVsb2cxMBgPIAEoCzISLnFkcmFudC5FeHByZXNzaW9uSAASIAoCbG4YECABKAsyEi5xZHJhbnQuRXhwcmVzc2lvbkgAEjIKCWV4cF9kZWNheRgRIAEoCzIdLnFkcmFudC5EZWNheVBhcmFtc0V4cHJlc3Npb25IABI0CgtnYXVzc19kZWNheRgSIAEoCzIdLnFkcmFudC5EZWNheVBhcmFtc0V4cHJlc3Npb25IABIyCglsaW5fZGVjYXkYEyABKAsyHS5xZHJhbnQuRGVjYXlQYXJhbXNFeHByZXNzaW9uSABCCQoHdmFyaWFudCI7CgtHZW9EaXN0YW5jZRIgCgZvcmlnaW4YASABKAsyEC5xZHJhbnQuR2VvUG9pbnQSCgoCdG8YAiABKAkiMgoOTXVsdEV4cHJlc3Npb24SIAoEbXVsdBgBIAMoCzISLnFkcmFudC5FeHByZXNzaW9uIjAKDVN1bUV4cHJlc3Npb24SHwoDc3VtGAEgAygLMhIucWRyYW50LkV4cHJlc3Npb24ihgEKDURpdkV4cHJlc3Npb24SIAoEbGVmdBgBIAEoCzISLnFkcmFudC5FeHByZXNzaW9uEiEKBXJpZ2h0GAIgASgLMhIucWRyYW50LkV4cHJlc3Npb24SHAoPYnlfemVyb19kZWZhdWx0GAMgASgCSACIAQFCEgoQX2J5X3plcm9fZGVmYXVsdCJXCg1Qb3dFeHByZXNzaW9uEiAKBGJhc2UYASABKAsyEi5xZHJhbnQuRXhwcmVzc2lvbhIkCghleHBvbmVudBgCIAEoCzISLnFkcmFudC5FeHByZXNzaW9uIqwBChVEZWNheVBhcmFtc0V4cHJlc3Npb24SHQoBeBgBIAEoCzISLnFkcmFudC5FeHByZXNzaW9uEicKBnRhcmdldBgCIAEoCzISLnFkcmFudC5FeHByZXNzaW9uSACIAQESEgoFc2NhbGUYAyABKAJIAYgBARIVCghtaWRwb2ludBgEIAEoAkgCiAEBQgkKB190YXJnZXRCCAoGX3NjYWxlQgsKCV9taWRwb2ludCJVChNOZWFyZXN0SW5wdXRXaXRoTW1yEiQKB25lYXJlc3QYASABKAsyEy5xZHJhbnQuVmVjdG9ySW5wdXQSGAoDbW1yGAIgASgLMgsucWRyYW50Lk1tciJfCgNNbXISFgoJZGl2ZXJzaXR5GAIgASgCSACIAQESHQoQY2FuZGlkYXRlc19saW1pdBgDIAEoDUgBiAEBQgwKCl9kaXZlcnNpdHlCEwoRX2NhbmRpZGF0ZXNfbGltaXQiGwoDUnJmEg4KAWsYASABKA1IAIgBAUIECgJfayKdAwoFUXVlcnkSJgoHbmVhcmVzdBgBIAEoCzITLnFkcmFudC5WZWN0b3JJbnB1dEgAEisKCXJlY29tbWVuZBgCIAEoCzIWLnFkcmFudC5SZWNvbW1lbmRJbnB1dEgAEikKCGRpc2NvdmVyGAMgASgLMhUucWRyYW50LkRpc2NvdmVySW5wdXRIABInCgdjb250ZXh0GAQgASgLMhQucWRyYW50LkNvbnRleHRJbnB1dEgAEiMKCG9yZGVyX2J5GAUgASgLMg8ucWRyYW50Lk9yZGVyQnlIABIgCgZmdXNpb24YBiABKA4yDi5xZHJhbnQuRnVzaW9uSAASIAoGc2FtcGxlGAcgASgOMg4ucWRyYW50LlNhbXBsZUgAEiIKB2Zvcm11bGEYCCABKAsyDy5xZHJhbnQuRm9ybXVsYUgAEjcKEG5lYXJlc3Rfd2l0aF9tbXIYCSABKAsyGy5xZHJhbnQuTmVhcmVzdElucHV0V2l0aE1tckgAEhoKA3JyZhgKIAEoCzILLnFkcmFudC5ScmZIAEIJCgd2YXJpYW50IvsCCg1QcmVmZXRjaFF1ZXJ5EicKCHByZWZldGNoGAEgAygLMhUucWRyYW50LlByZWZldGNoUXVlcnkSIQoFcXVlcnkYAiABKAsyDS5xZHJhbnQuUXVlcnlIAIgBARISCgV1c2luZxgDIAEoCUgBiAEBEiMKBmZpbHRlchgEIAEoCzIOLnFkcmFudC5GaWx0ZXJIAogBARIpCgZwYXJhbXMYBSABKAsyFC5xZHJhbnQuU2VhcmNoUGFyYW1zSAOIAQESHAoPc2NvcmVfdGhyZXNob2xkGAYgASgCSASIAQESEgoFbGltaXQYByABKARIBYgBARIwCgtsb29rdXBfZnJvbRgIIAEoCzIWLnFkcmFudC5Mb29rdXBMb2NhdGlvbkgGiAEBQggKBl9xdWVyeUIICgZfdXNpbmdCCQoHX2ZpbHRlckIJCgdfcGFyYW1zQhIKEF9zY29yZV90aHJlc2hvbGRCCAoGX2xpbWl0Qg4KDF9sb29rdXBfZnJvbSKFBgoLUXVlcnlQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEicKCHByZWZldGNoGAIgAygLMhUucWRyYW50LlByZWZldGNoUXVlcnkSIQoFcXVlcnkYAyABKAsyDS5xZHJhbnQuUXVlcnlIAIgBARISCgV1c2luZxgEIAEoCUgBiAEBEiMKBmZpbHRlchgFIAEoCzIOLnFkcmFudC5GaWx0ZXJIAogBARIpCgZwYXJhbXMYBiABKAsyFC5xZHJhbnQuU2VhcmNoUGFyYW1zSAOIAQESHAoPc2NvcmVfdGhyZXNob2xkGAcgASgCSASIAQESEgoFbGltaXQYCCABKARIBYgBARITCgZvZmZzZXQYCSABKARIBogBARI2Cgx3aXRoX3ZlY3RvcnMYCiABKAsyGy5xZHJhbnQuV2l0aFZlY3RvcnNTZWxlY3RvckgHiAEBEjYKDHdpdGhfcGF5bG9hZBgLIAEoCzIbLnFkcmFudC5XaXRoUGF5bG9hZFNlbGVjdG9ySAiIAQESNgoQcmVhZF9jb25zaXN0ZW5jeRgMIAEoCzIXLnFkcmFudC5SZWFkQ29uc2lzdGVuY3lICYgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYDSABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgKiAEBEjAKC2xvb2t1cF9mcm9tGA4gASgLMhYucWRyYW50Lkxvb2t1cExvY2F0aW9uSAuIAQESFAoHdGltZW91dBgPIAEoBEgMiAEBQggKBl9xdWVyeUIICgZfdXNpbmdCCQoHX2ZpbHRlckIJCgdfcGFyYW1zQhIKEF9zY29yZV90aHJlc2hvbGRCCAoGX2xpbWl0QgkKB19vZmZzZXRCDwoNX3dpdGhfdmVjdG9yc0IPCg1fd2l0aF9wYXlsb2FkQhMKEV9yZWFkX2NvbnNpc3RlbmN5QhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCDgoMX2xvb2t1cF9mcm9tQgoKCF90aW1lb3V0IsUBChBRdWVyeUJhdGNoUG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIpCgxxdWVyeV9wb2ludHMYAiADKAsyEy5xZHJhbnQuUXVlcnlQb2ludHMSNgoQcmVhZF9jb25zaXN0ZW5jeRgDIAEoCzIXLnFkcmFudC5SZWFkQ29uc2lzdGVuY3lIAIgBARIUCgd0aW1lb3V0GAQgASgESAGIAQFCEwoRX3JlYWRfY29uc2lzdGVuY3lCCgoIX3RpbWVvdXQizAYKEFF1ZXJ5UG9pbnRHcm91cHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEicKCHByZWZldGNoGAIgAygLMhUucWRyYW50LlByZWZldGNoUXVlcnkSIQoFcXVlcnkYAyABKAsyDS5xZHJhbnQuUXVlcnlIAIgBARISCgV1c2luZxgEIAEoCUgBiAEBEiMKBmZpbHRlchgFIAEoCzIOLnFkcmFudC5GaWx0ZXJIAogBARIpCgZwYXJhbXMYBiABKAsyFC5xZHJhbnQuU2VhcmNoUGFyYW1zSAOIAQESHAoPc2NvcmVfdGhyZXNob2xkGAcgASgCSASIAQESMQoMd2l0aF9wYXlsb2FkGAggASgLMhsucWRyYW50LldpdGhQYXlsb2FkU2VsZWN0b3ISNgoMd2l0aF92ZWN0b3JzGAkgASgLMhsucWRyYW50LldpdGhWZWN0b3JzU2VsZWN0b3JIBYgBARIwCgtsb29rdXBfZnJvbRgKIAEoCzIWLnFkcmFudC5Mb29rdXBMb2NhdGlvbkgGiAEBEhIKBWxpbWl0GAsgASgESAeIAQESFwoKZ3JvdXBfc2l6ZRgMIAEoBEgIiAEBEhAKCGdyb3VwX2J5GA0gASgJEjYKEHJlYWRfY29uc2lzdGVuY3kYDiABKAsyFy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5SAmIAQESLAoLd2l0aF9sb29rdXAYDyABKAsyEi5xZHJhbnQuV2l0aExvb2t1cEgKiAEBEhQKB3RpbWVvdXQYECABKARIC4gBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYESABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgMiAEBQggKBl9xdWVyeUIICgZfdXNpbmdCCQoHX2ZpbHRlckIJCgdfcGFyYW1zQhIKEF9zY29yZV90aHJlc2hvbGRCDwoNX3dpdGhfdmVjdG9yc0IOCgxfbG9va3VwX2Zyb21CCAoGX2xpbWl0Qg0KC19ncm91cF9zaXplQhMKEV9yZWFkX2NvbnNpc3RlbmN5Qg4KDF93aXRoX2xvb2t1cEIKCghfdGltZW91dEIVChNfc2hhcmRfa2V5X3NlbGVjdG9yIuACCgtGYWNldENvdW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSCwoDa2V5GAIgASgJEiMKBmZpbHRlchgDIAEoCzIOLnFkcmFudC5GaWx0ZXJIAIgBARISCgVsaW1pdBgEIAEoBEgBiAEBEhIKBWV4YWN0GAUgASgISAKIAQESFAoHdGltZW91dBgGIAEoBEgDiAEBEjYKEHJlYWRfY29uc2lzdGVuY3kYByABKAsyFy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5SASIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAggASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIBYgBAUIJCgdfZmlsdGVyQggKBl9saW1pdEIICgZfZXhhY3RCCgoIX3RpbWVvdXRCEwoRX3JlYWRfY29uc2lzdGVuY3lCFQoTX3NoYXJkX2tleV9zZWxlY3RvciJeCgpGYWNldFZhbHVlEhYKDHN0cmluZ192YWx1ZRgBIAEoCUgAEhcKDWludGVnZXJfdmFsdWUYAiABKANIABIUCgpib29sX3ZhbHVlGAMgASgISABCCQoHdmFyaWFudCI8CghGYWNldEhpdBIhCgV2YWx1ZRgBIAEoCzISLnFkcmFudC5GYWNldFZhbHVlEg0KBWNvdW50GAIgASgEIvoCChJTZWFyY2hNYXRyaXhQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEiMKBmZpbHRlchgCIAEoCzIOLnFkcmFudC5GaWx0ZXJIAIgBARITCgZzYW1wbGUYAyABKARIAYgBARISCgVsaW1pdBgEIAEoBEgCiAEBEhIKBXVzaW5nGAUgASgJSAOIAQESFAoHdGltZW91dBgGIAEoBEgEiAEBEjYKEHJlYWRfY29uc2lzdGVuY3kYByABKAsyFy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5SAWIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAggASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIBogBAUIJCgdfZmlsdGVyQgkKB19zYW1wbGVCCAoGX2xpbWl0QggKBl91c2luZ0IKCghfdGltZW91dEITChFfcmVhZF9jb25zaXN0ZW5jeUIVChNfc2hhcmRfa2V5X3NlbGVjdG9yIjwKEVNlYXJjaE1hdHJpeFBhaXJzEicKBXBhaXJzGAEgAygLMhgucWRyYW50LlNlYXJjaE1hdHJpeFBhaXIiWQoQU2VhcmNoTWF0cml4UGFpchIaCgFhGAEgASgLMg8ucWRyYW50LlBvaW50SWQSGgoBYhgCIAEoCzIPLnFkcmFudC5Qb2ludElkEg0KBXNjb3JlGAMgASgCIm0KE1NlYXJjaE1hdHJpeE9mZnNldHMSEwoLb2Zmc2V0c19yb3cYASADKAQSEwoLb2Zmc2V0c19jb2wYAiADKAQSDgoGc2NvcmVzGAMgAygCEhwKA2lkcxgEIAMoCzIPLnFkcmFudC5Qb2ludElkIpETChVQb2ludHNVcGRhdGVPcGVyYXRpb24SPwoGdXBzZXJ0GAEgASgLMi0ucWRyYW50LlBvaW50c1VwZGF0ZU9wZXJhdGlvbi5Qb2ludFN0cnVjdExpc3RIABI3ChFkZWxldGVfZGVwcmVjYXRlZBgCIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvckICGAFIABI/CgtzZXRfcGF5bG9hZBgDIAEoCzIoLnFkcmFudC5Qb2ludHNVcGRhdGVPcGVyYXRpb24uU2V0UGF5bG9hZEgAEksKEW92ZXJ3cml0ZV9wYXlsb2FkGAQgASgLMi4ucWRyYW50LlBvaW50c1VwZGF0ZU9wZXJhdGlvbi5PdmVyd3JpdGVQYXlsb2FkSAASRQoOZGVsZXRlX3BheWxvYWQYBSABKAsyKy5xZHJhbnQuUG9pbnRzVXBkYXRlT3BlcmF0aW9uLkRlbGV0ZVBheWxvYWRIABI+ChhjbGVhcl9wYXlsb2FkX2RlcHJlY2F0ZWQYBiABKAsyFi5xZHJhbnQuUG9pbnRzU2VsZWN0b3JCAhgBSAASRQoOdXBkYXRlX3ZlY3RvcnMYByABKAsyKy5xZHJhbnQuUG9pbnRzVXBkYXRlT3BlcmF0aW9uLlVwZGF0ZVZlY3RvcnNIABJFCg5kZWxldGVfdmVjdG9ycxgIIAEoCzIrLnFkcmFudC5Qb2ludHNVcGRhdGVPcGVyYXRpb24uRGVsZXRlVmVjdG9yc0gAEkMKDWRlbGV0ZV9wb2ludHMYCSABKAsyKi5xZHJhbnQuUG9pbnRzVXBkYXRlT3BlcmF0aW9uLkRlbGV0ZVBvaW50c0gAEkMKDWNsZWFyX3BheWxvYWQYCiABKAsyKi5xZHJhbnQuUG9pbnRzVXBkYXRlT3BlcmF0aW9uLkNsZWFyUGF5bG9hZEgAGsYBCg9Qb2ludFN0cnVjdExpc3QSIwoGcG9pbnRzGAEgAygLMhMucWRyYW50LlBvaW50U3RydWN0EjkKEnNoYXJkX2tleV9zZWxlY3RvchgCIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySACIAQESKgoNdXBkYXRlX2ZpbHRlchgDIAEoCzIOLnFkcmFudC5GaWx0ZXJIAYgBAUIVChNfc2hhcmRfa2V5X3NlbGVjdG9yQhAKDl91cGRhdGVfZmlsdGVyGskCCgpTZXRQYXlsb2FkEkYKB3BheWxvYWQYASADKAsyNS5xZHJhbnQuUG9pbnRzVXBkYXRlT3BlcmF0aW9uLlNldFBheWxvYWQuUGF5bG9hZEVudHJ5EjQKD3BvaW50c19zZWxlY3RvchgCIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvckgAiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgDIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAGIAQESEAoDa2V5GAQgASgJSAKIAQEaPQoMUGF5bG9hZEVudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLnFkcmFudC5WYWx1ZToCOAFCEgoQX3BvaW50c19zZWxlY3RvckIVChNfc2hhcmRfa2V5X3NlbGVjdG9yQgYKBF9rZXka1QIKEE92ZXJ3cml0ZVBheWxvYWQSTAoHcGF5bG9hZBgBIAMoCzI7LnFkcmFudC5Qb2ludHNVcGRhdGVPcGVyYXRpb24uT3ZlcndyaXRlUGF5bG9hZC5QYXlsb2FkRW50cnkSNAoPcG9pbnRzX3NlbGVjdG9yGAIgASgLMhYucWRyYW50LlBvaW50c1NlbGVjdG9ySACIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAMgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAYgBARIQCgNrZXkYBCABKAlIAogBARo9CgxQYXlsb2FkRW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0ucWRyYW50LlZhbHVlOgI4AUISChBfcG9pbnRzX3NlbGVjdG9yQhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCBgoEX2tleRq5AQoNRGVsZXRlUGF5bG9hZBIMCgRrZXlzGAEgAygJEjQKD3BvaW50c19zZWxlY3RvchgCIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvckgAiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgDIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAGIAQFCEgoQX3BvaW50c19zZWxlY3RvckIVChNfc2hhcmRfa2V5X3NlbGVjdG9yGsUBCg1VcGRhdGVWZWN0b3JzEiQKBnBvaW50cxgBIAMoCzIULnFkcmFudC5Qb2ludFZlY3RvcnMSOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAIgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAIgBARIqCg11cGRhdGVfZmlsdGVyGAMgASgLMg4ucWRyYW50LkZpbHRlckgBiAEBQhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCEAoOX3VwZGF0ZV9maWx0ZXIavAEKDURlbGV0ZVZlY3RvcnMSLwoPcG9pbnRzX3NlbGVjdG9yGAEgASgLMhYucWRyYW50LlBvaW50c1NlbGVjdG9yEigKB3ZlY3RvcnMYAiABKAsyFy5xZHJhbnQuVmVjdG9yc1NlbGVjdG9yEjkKEnNoYXJkX2tleV9zZWxlY3RvchgDIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySACIAQFCFQoTX3NoYXJkX2tleV9zZWxlY3RvchqIAQoMRGVsZXRlUG9pbnRzEiYKBnBvaW50cxgBIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvchI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYAiABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgAiAEBQhUKE19zaGFyZF9rZXlfc2VsZWN0b3IaiAEKDENsZWFyUGF5bG9hZBImCgZwb2ludHMYASABKAsyFi5xZHJhbnQuUG9pbnRzU2VsZWN0b3ISOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAIgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAIgBAUIVChNfc2hhcmRfa2V5X3NlbGVjdG9yQgsKCW9wZXJhdGlvbiK2AQoRVXBkYXRlQmF0Y2hQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhEKBHdhaXQYAiABKAhIAIgBARIxCgpvcGVyYXRpb25zGAMgAygLMh0ucWRyYW50LlBvaW50c1VwZGF0ZU9wZXJhdGlvbhIsCghvcmRlcmluZxgEIAEoCzIVLnFkcmFudC5Xcml0ZU9yZGVyaW5nSAGIAQFCBwoFX3dhaXRCCwoJX29yZGVyaW5nInoKF1BvaW50c09wZXJhdGlvblJlc3BvbnNlEiQKBnJlc3VsdBgBIAEoCzIULnFkcmFudC5VcGRhdGVSZXN1bHQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSJgCgxVcGRhdGVSZXN1bHQSGQoMb3BlcmF0aW9uX2lkGAEgASgESACIAQESJAoGc3RhdHVzGAIgASgOMhQucWRyYW50LlVwZGF0ZVN0YXR1c0IPCg1fb3BlcmF0aW9uX2lkIjcKCk9yZGVyVmFsdWUSDQoDaW50GAEgASgDSAASDwoFZmxvYXQYAiABKAFIAEIJCgd2YXJpYW50IvECCgtTY29yZWRQb2ludBIbCgJpZBgBIAEoCzIPLnFkcmFudC5Qb2ludElkEjEKB3BheWxvYWQYAiADKAsyIC5xZHJhbnQuU2NvcmVkUG9pbnQuUGF5bG9hZEVudHJ5Eg0KBXNjb3JlGAMgASgCEg8KB3ZlcnNpb24YBSABKAQSKwoHdmVjdG9ycxgGIAEoCzIVLnFkcmFudC5WZWN0b3JzT3V0cHV0SACIAQESKAoJc2hhcmRfa2V5GAcgASgLMhAucWRyYW50LlNoYXJkS2V5SAGIAQESLAoLb3JkZXJfdmFsdWUYCCABKAsyEi5xZHJhbnQuT3JkZXJWYWx1ZUgCiAEBGj0KDFBheWxvYWRFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5xZHJhbnQuVmFsdWU6AjgBQgoKCF92ZWN0b3JzQgwKCl9zaGFyZF9rZXlCDgoMX29yZGVyX3ZhbHVlSgQIBBAFIlwKB0dyb3VwSWQSGAoOdW5zaWduZWRfdmFsdWUYASABKARIABIXCg1pbnRlZ2VyX3ZhbHVlGAIgASgDSAASFgoMc3RyaW5nX3ZhbHVlGAMgASgJSABCBgoEa2luZCJ0CgpQb2ludEdyb3VwEhsKAmlkGAEgASgLMg8ucWRyYW50Lkdyb3VwSWQSIQoEaGl0cxgCIAMoCzITLnFkcmFudC5TY29yZWRQb2ludBImCgZsb29rdXAYAyABKAsyFi5xZHJhbnQuUmV0cmlldmVkUG9pbnQiMgoMR3JvdXBzUmVzdWx0EiIKBmdyb3VwcxgBIAMoCzISLnFkcmFudC5Qb2ludEdyb3VwInAKDlNlYXJjaFJlc3BvbnNlEiMKBnJlc3VsdBgBIAMoCzITLnFkcmFudC5TY29yZWRQb2ludBIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlIm8KDVF1ZXJ5UmVzcG9uc2USIwoGcmVzdWx0GAEgAygLMhMucWRyYW50LlNjb3JlZFBvaW50EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UidAoSUXVlcnlCYXRjaFJlc3BvbnNlEiMKBnJlc3VsdBgBIAMoCzITLnFkcmFudC5CYXRjaFJlc3VsdBIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlInYKE1F1ZXJ5R3JvdXBzUmVzcG9uc2USJAoGcmVzdWx0GAEgASgLMhQucWRyYW50Lkdyb3Vwc1Jlc3VsdBIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlIjIKC0JhdGNoUmVzdWx0EiMKBnJlc3VsdBgBIAMoCzITLnFkcmFudC5TY29yZWRQb2ludCJ1ChNTZWFyY2hCYXRjaFJlc3BvbnNlEiMKBnJlc3VsdBgBIAMoCzITLnFkcmFudC5CYXRjaFJlc3VsdBIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlIncKFFNlYXJjaEdyb3Vwc1Jlc3BvbnNlEiQKBnJlc3VsdBgBIAEoCzIULnFkcmFudC5Hcm91cHNSZXN1bHQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSJvCg1Db3VudFJlc3BvbnNlEiMKBnJlc3VsdBgBIAEoCzITLnFkcmFudC5Db3VudFJlc3VsdBIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlIrgBCg5TY3JvbGxSZXNwb25zZRIuChBuZXh0X3BhZ2Vfb2Zmc2V0GAEgASgLMg8ucWRyYW50LlBvaW50SWRIAIgBARImCgZyZXN1bHQYAiADKAsyFi5xZHJhbnQuUmV0cmlldmVkUG9pbnQSDAoEdGltZRgDIAEoARIhCgV1c2FnZRgEIAEoCzINLnFkcmFudC5Vc2FnZUgBiAEBQhMKEV9uZXh0X3BhZ2Vfb2Zmc2V0QggKBl91c2FnZSIcCgtDb3VudFJlc3VsdBINCgVjb3VudBgBIAEoBCLXAgoOUmV0cmlldmVkUG9pbnQSGwoCaWQYASABKAsyDy5xZHJhbnQuUG9pbnRJZBI0CgdwYXlsb2FkGAIgAygLMiMucWRyYW50LlJldHJpZXZlZFBvaW50LlBheWxvYWRFbnRyeRIrCgd2ZWN0b3JzGAQgASgLMhUucWRyYW50LlZlY3RvcnNPdXRwdXRIAIgBARIoCglzaGFyZF9rZXkYBSABKAsyEC5xZHJhbnQuU2hhcmRLZXlIAYgBARIsCgtvcmRlcl92YWx1ZRgGIAEoCzISLnFkcmFudC5PcmRlclZhbHVlSAKIAQEaPQoMUGF5bG9hZEVudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLnFkcmFudC5WYWx1ZToCOAFCCgoIX3ZlY3RvcnNCDAoKX3NoYXJkX2tleUIOCgxfb3JkZXJfdmFsdWVKBAgDEAQicAoLR2V0UmVzcG9uc2USJgoGcmVzdWx0GAEgAygLMhYucWRyYW50LlJldHJpZXZlZFBvaW50EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UicwoRUmVjb21tZW5kUmVzcG9uc2USIwoGcmVzdWx0GAEgAygLMhMucWRyYW50LlNjb3JlZFBvaW50EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UieAoWUmVjb21tZW5kQmF0Y2hSZXNwb25zZRIjCgZyZXN1bHQYASADKAsyEy5xZHJhbnQuQmF0Y2hSZXN1bHQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSJyChBEaXNjb3ZlclJlc3BvbnNlEiMKBnJlc3VsdBgBIAMoCzITLnFkcmFudC5TY29yZWRQb2ludBIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlIncKFURpc2NvdmVyQmF0Y2hSZXNwb25zZRIjCgZyZXN1bHQYASADKAsyEy5xZHJhbnQuQmF0Y2hSZXN1bHQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSJ6ChdSZWNvbW1lbmRHcm91cHNSZXNwb25zZRIkCgZyZXN1bHQYASABKAsyFC5xZHJhbnQuR3JvdXBzUmVzdWx0EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UidgoTVXBkYXRlQmF0Y2hSZXNwb25zZRIkCgZyZXN1bHQYASADKAsyFC5xZHJhbnQuVXBkYXRlUmVzdWx0EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UiagoNRmFjZXRSZXNwb25zZRIeCgRoaXRzGAEgAygLMhAucWRyYW50LkZhY2V0SGl0EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UigQEKGVNlYXJjaE1hdHJpeFBhaXJzUmVzcG9uc2USKQoGcmVzdWx0GAEgASgLMhkucWRyYW50LlNlYXJjaE1hdHJpeFBhaXJzEgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UihQEKG1NlYXJjaE1hdHJpeE9mZnNldHNSZXNwb25zZRIrCgZyZXN1bHQYASABKAsyGy5xZHJhbnQuU2VhcmNoTWF0cml4T2Zmc2V0cxIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlInUKDlBvaW50c1NlbGVjdG9yEicKBnBvaW50cxgBIAEoCzIVLnFkcmFudC5Qb2ludHNJZHNMaXN0SAASIAoGZmlsdGVyGAIgASgLMg4ucWRyYW50LkZpbHRlckgAQhgKFnBvaW50c19zZWxlY3Rvcl9vbmVfb2YiLQoNUG9pbnRzSWRzTGlzdBIcCgNpZHMYASADKAsyDy5xZHJhbnQuUG9pbnRJZCLVAQoLUG9pbnRTdHJ1Y3QSGwoCaWQYASABKAsyDy5xZHJhbnQuUG9pbnRJZBIxCgdwYXlsb2FkGAMgAygLMiAucWRyYW50LlBvaW50U3RydWN0LlBheWxvYWRFbnRyeRIlCgd2ZWN0b3JzGAQgASgLMg8ucWRyYW50LlZlY3RvcnNIAIgBARo9CgxQYXlsb2FkRW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0ucWRyYW50LlZhbHVlOgI4AUIKCghfdmVjdG9yc0oECAIQAyKAAQoFVXNhZ2USLAoIaGFyZHdhcmUYASABKAsyFS5xZHJhbnQuSGFyZHdhcmVVc2FnZUgAiAEBEi4KCWluZmVyZW5jZRgCIAEoCzIWLnFkcmFudC5JbmZlcmVuY2VVc2FnZUgBiAEBQgsKCV9oYXJkd2FyZUIMCgpfaW5mZXJlbmNlIocBCg5JbmZlcmVuY2VVc2FnZRIyCgZtb2RlbHMYASADKAsyIi5xZHJhbnQuSW5mZXJlbmNlVXNhZ2UuTW9kZWxzRW50cnkaQQoLTW9kZWxzRW50cnkSCwoDa2V5GAEgASgJEiEKBXZhbHVlGAIgASgLMhIucWRyYW50Lk1vZGVsVXNhZ2U6AjgBIhwKCk1vZGVsVXNhZ2USDgoGdG9rZW5zGAEgASgEIr8BCg1IYXJkd2FyZVVzYWdlEgsKA2NwdRgBIAEoBBIXCg9wYXlsb2FkX2lvX3JlYWQYAiABKAQSGAoQcGF5bG9hZF9pb193cml0ZRgDIAEoBBIdChVwYXlsb2FkX2luZGV4X2lvX3JlYWQYBCABKAQSHgoWcGF5bG9hZF9pbmRleF9pb193cml0ZRgFIAEoBBIWCg52ZWN0b3JfaW9fcmVhZBgGIAEoBBIXCg92ZWN0b3JfaW9fd3JpdGUYByABKAQqNQoRV3JpdGVPcmRlcmluZ1R5cGUSCAoEV2VhaxAAEgoKBk1lZGl1bRABEgoKBlN0cm9uZxACKjgKE1JlYWRDb25zaXN0ZW5jeVR5cGUSBwoDQWxsEAASDAoITWFqb3JpdHkQARIKCgZRdW9ydW0QAiqtAQoJRmllbGRUeXBlEhQKEEZpZWxkVHlwZUtleXdvcmQQABIUChBGaWVsZFR5cGVJbnRlZ2VyEAESEgoORmllbGRUeXBlRmxvYXQQAhIQCgxGaWVsZFR5cGVHZW8QAxIRCg1GaWVsZFR5cGVUZXh0EAQSEQoNRmllbGRUeXBlQm9vbBAFEhUKEUZpZWxkVHlwZURhdGV0aW1lEAYSEQoNRmllbGRUeXBlVXVpZBAHKh4KCURpcmVjdGlvbhIHCgNBc2MQABIICgREZXNjEAEqRAoRUmVjb21tZW5kU3RyYXRlZ3kSEQoNQXZlcmFnZVZlY3RvchAAEg0KCUJlc3RTY29yZRABEg0KCVN1bVNjb3JlcxACKhsKBkZ1c2lvbhIHCgNSUkYQABIICgREQlNGEAEqFAoGU2FtcGxlEgoKBlJhbmRvbRAAKlsKDFVwZGF0ZVN0YXR1cxIXChNVbmtub3duVXBkYXRlU3RhdHVzEAASEAoMQWNrbm93bGVkZ2VkEAESDQoJQ29tcGxldGVkEAISEQoNQ2xvY2tSZWplY3RlZBADQhWqAhJRZHJhbnQuQ2xpZW50LkdycGNiBnByb3RvMw", [file_collections, file_common, file_google_protobuf_timestamp, file_json_with_int]); /** * @generated from message qdrant.WriteOrdering @@ -70,39 +72,6 @@ export type ReadConsistency = Message<"qdrant.ReadConsistency"> & { export const ReadConsistencySchema: GenMessage = /*@__PURE__*/ messageDesc(file_points, 1); -/** - * @generated from message qdrant.PointId - */ -export type PointId = Message<"qdrant.PointId"> & { - /** - * @generated from oneof qdrant.PointId.point_id_options - */ - pointIdOptions: { - /** - * Numerical ID of the point - * - * @generated from field: uint64 num = 1; - */ - value: bigint; - case: "num"; - } | { - /** - * UUID - * - * @generated from field: string uuid = 2; - */ - value: string; - case: "uuid"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message qdrant.PointId. - * Use `create(PointIdSchema)` to create a new message. - */ -export const PointIdSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 2); - /** * @generated from message qdrant.SparseIndices */ @@ -118,7 +87,7 @@ export type SparseIndices = Message<"qdrant.SparseIndices"> & { * Use `create(SparseIndicesSchema)` to create a new message. */ export const SparseIndicesSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 3); + messageDesc(file_points, 2); /** * @generated from message qdrant.Document @@ -151,7 +120,7 @@ export type Document = Message<"qdrant.Document"> & { * Use `create(DocumentSchema)` to create a new message. */ export const DocumentSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 4); + messageDesc(file_points, 3); /** * @generated from message qdrant.Image @@ -184,7 +153,7 @@ export type Image = Message<"qdrant.Image"> & { * Use `create(ImageSchema)` to create a new message. */ export const ImageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 5); + messageDesc(file_points, 4); /** * @generated from message qdrant.InferenceObject @@ -217,7 +186,7 @@ export type InferenceObject = Message<"qdrant.InferenceObject"> & { * Use `create(InferenceObjectSchema)` to create a new message. */ export const InferenceObjectSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 6); + messageDesc(file_points, 5); /** * @generated from message qdrant.Vector @@ -300,7 +269,7 @@ export type Vector = Message<"qdrant.Vector"> & { * Use `create(VectorSchema)` to create a new message. */ export const VectorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 7); + messageDesc(file_points, 6); /** * @generated from message qdrant.VectorOutput @@ -365,7 +334,7 @@ export type VectorOutput = Message<"qdrant.VectorOutput"> & { * Use `create(VectorOutputSchema)` to create a new message. */ export const VectorOutputSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 8); + messageDesc(file_points, 7); /** * @generated from message qdrant.DenseVector @@ -382,7 +351,7 @@ export type DenseVector = Message<"qdrant.DenseVector"> & { * Use `create(DenseVectorSchema)` to create a new message. */ export const DenseVectorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 9); + messageDesc(file_points, 8); /** * @generated from message qdrant.SparseVector @@ -404,7 +373,7 @@ export type SparseVector = Message<"qdrant.SparseVector"> & { * Use `create(SparseVectorSchema)` to create a new message. */ export const SparseVectorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 10); + messageDesc(file_points, 9); /** * @generated from message qdrant.MultiDenseVector @@ -421,7 +390,7 @@ export type MultiDenseVector = Message<"qdrant.MultiDenseVector"> & { * Use `create(MultiDenseVectorSchema)` to create a new message. */ export const MultiDenseVectorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 11); + messageDesc(file_points, 10); /** * Vector type to be used in queries. Ids will be substituted with their corresponding vectors from the collection. @@ -482,7 +451,7 @@ export type VectorInput = Message<"qdrant.VectorInput"> & { * Use `create(VectorInputSchema)` to create a new message. */ export const VectorInputSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 12); + messageDesc(file_points, 11); /** * @generated from message qdrant.ShardKeySelector @@ -506,7 +475,7 @@ export type ShardKeySelector = Message<"qdrant.ShardKeySelector"> & { * Use `create(ShardKeySelectorSchema)` to create a new message. */ export const ShardKeySelectorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 13); + messageDesc(file_points, 12); /** * @generated from message qdrant.UpsertPoints @@ -558,7 +527,7 @@ export type UpsertPoints = Message<"qdrant.UpsertPoints"> & { * Use `create(UpsertPointsSchema)` to create a new message. */ export const UpsertPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 14); + messageDesc(file_points, 13); /** * @generated from message qdrant.DeletePoints @@ -605,7 +574,7 @@ export type DeletePoints = Message<"qdrant.DeletePoints"> & { * Use `create(DeletePointsSchema)` to create a new message. */ export const DeletePointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 15); + messageDesc(file_points, 14); /** * @generated from message qdrant.GetPoints @@ -666,7 +635,7 @@ export type GetPoints = Message<"qdrant.GetPoints"> & { * Use `create(GetPointsSchema)` to create a new message. */ export const GetPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 16); + messageDesc(file_points, 15); /** * @generated from message qdrant.UpdatePointVectors @@ -720,7 +689,7 @@ export type UpdatePointVectors = Message<"qdrant.UpdatePointVectors"> & { * Use `create(UpdatePointVectorsSchema)` to create a new message. */ export const UpdatePointVectorsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 17); + messageDesc(file_points, 16); /** * @generated from message qdrant.PointVectors @@ -746,7 +715,7 @@ export type PointVectors = Message<"qdrant.PointVectors"> & { * Use `create(PointVectorsSchema)` to create a new message. */ export const PointVectorsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 18); + messageDesc(file_points, 17); /** * @generated from message qdrant.DeletePointVectors @@ -800,7 +769,7 @@ export type DeletePointVectors = Message<"qdrant.DeletePointVectors"> & { * Use `create(DeletePointVectorsSchema)` to create a new message. */ export const DeletePointVectorsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 19); + messageDesc(file_points, 18); /** * @generated from message qdrant.SetPayloadPoints @@ -861,7 +830,7 @@ export type SetPayloadPoints = Message<"qdrant.SetPayloadPoints"> & { * Use `create(SetPayloadPointsSchema)` to create a new message. */ export const SetPayloadPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 20); + messageDesc(file_points, 19); /** * @generated from message qdrant.DeletePayloadPoints @@ -915,7 +884,7 @@ export type DeletePayloadPoints = Message<"qdrant.DeletePayloadPoints"> & { * Use `create(DeletePayloadPointsSchema)` to create a new message. */ export const DeletePayloadPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 21); + messageDesc(file_points, 20); /** * @generated from message qdrant.ClearPayloadPoints @@ -962,7 +931,7 @@ export type ClearPayloadPoints = Message<"qdrant.ClearPayloadPoints"> & { * Use `create(ClearPayloadPointsSchema)` to create a new message. */ export const ClearPayloadPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 22); + messageDesc(file_points, 21); /** * @generated from message qdrant.CreateFieldIndexCollection @@ -1016,7 +985,7 @@ export type CreateFieldIndexCollection = Message<"qdrant.CreateFieldIndexCollect * Use `create(CreateFieldIndexCollectionSchema)` to create a new message. */ export const CreateFieldIndexCollectionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 23); + messageDesc(file_points, 22); /** * @generated from message qdrant.DeleteFieldIndexCollection @@ -1056,7 +1025,7 @@ export type DeleteFieldIndexCollection = Message<"qdrant.DeleteFieldIndexCollect * Use `create(DeleteFieldIndexCollectionSchema)` to create a new message. */ export const DeleteFieldIndexCollectionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 24); + messageDesc(file_points, 23); /** * @generated from message qdrant.PayloadIncludeSelector @@ -1075,7 +1044,7 @@ export type PayloadIncludeSelector = Message<"qdrant.PayloadIncludeSelector"> & * Use `create(PayloadIncludeSelectorSchema)` to create a new message. */ export const PayloadIncludeSelectorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 25); + messageDesc(file_points, 24); /** * @generated from message qdrant.PayloadExcludeSelector @@ -1094,7 +1063,7 @@ export type PayloadExcludeSelector = Message<"qdrant.PayloadExcludeSelector"> & * Use `create(PayloadExcludeSelectorSchema)` to create a new message. */ export const PayloadExcludeSelectorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 26); + messageDesc(file_points, 25); /** * @generated from message qdrant.WithPayloadSelector @@ -1131,7 +1100,7 @@ export type WithPayloadSelector = Message<"qdrant.WithPayloadSelector"> & { * Use `create(WithPayloadSelectorSchema)` to create a new message. */ export const WithPayloadSelectorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 27); + messageDesc(file_points, 26); /** * @generated from message qdrant.NamedVectors @@ -1148,7 +1117,7 @@ export type NamedVectors = Message<"qdrant.NamedVectors"> & { * Use `create(NamedVectorsSchema)` to create a new message. */ export const NamedVectorsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 28); + messageDesc(file_points, 27); /** * @generated from message qdrant.NamedVectorsOutput @@ -1165,7 +1134,7 @@ export type NamedVectorsOutput = Message<"qdrant.NamedVectorsOutput"> & { * Use `create(NamedVectorsOutputSchema)` to create a new message. */ export const NamedVectorsOutputSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 29); + messageDesc(file_points, 28); /** * @generated from message qdrant.Vectors @@ -1194,7 +1163,7 @@ export type Vectors = Message<"qdrant.Vectors"> & { * Use `create(VectorsSchema)` to create a new message. */ export const VectorsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 30); + messageDesc(file_points, 29); /** * @generated from message qdrant.VectorsOutput @@ -1223,7 +1192,7 @@ export type VectorsOutput = Message<"qdrant.VectorsOutput"> & { * Use `create(VectorsOutputSchema)` to create a new message. */ export const VectorsOutputSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 31); + messageDesc(file_points, 30); /** * @generated from message qdrant.VectorsSelector @@ -1242,7 +1211,7 @@ export type VectorsSelector = Message<"qdrant.VectorsSelector"> & { * Use `create(VectorsSelectorSchema)` to create a new message. */ export const VectorsSelectorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 32); + messageDesc(file_points, 31); /** * @generated from message qdrant.WithVectorsSelector @@ -1275,7 +1244,7 @@ export type WithVectorsSelector = Message<"qdrant.WithVectorsSelector"> & { * Use `create(WithVectorsSelectorSchema)` to create a new message. */ export const WithVectorsSelectorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 33); + messageDesc(file_points, 32); /** * @generated from message qdrant.QuantizationSearchParams @@ -1317,7 +1286,7 @@ export type QuantizationSearchParams = Message<"qdrant.QuantizationSearchParams" * Use `create(QuantizationSearchParamsSchema)` to create a new message. */ export const QuantizationSearchParamsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 34); + messageDesc(file_points, 33); /** * @generated from message qdrant.AcornSearchParams @@ -1355,7 +1324,7 @@ export type AcornSearchParams = Message<"qdrant.AcornSearchParams"> & { * Use `create(AcornSearchParamsSchema)` to create a new message. */ export const AcornSearchParamsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 35); + messageDesc(file_points, 34); /** * @generated from message qdrant.SearchParams @@ -1410,7 +1379,7 @@ export type SearchParams = Message<"qdrant.SearchParams"> & { * Use `create(SearchParamsSchema)` to create a new message. */ export const SearchParamsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 36); + messageDesc(file_points, 35); /** * @generated from message qdrant.SearchPoints @@ -1518,7 +1487,7 @@ export type SearchPoints = Message<"qdrant.SearchPoints"> & { * Use `create(SearchPointsSchema)` to create a new message. */ export const SearchPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 37); + messageDesc(file_points, 36); /** * @generated from message qdrant.SearchBatchPoints @@ -1556,7 +1525,7 @@ export type SearchBatchPoints = Message<"qdrant.SearchBatchPoints"> & { * Use `create(SearchBatchPointsSchema)` to create a new message. */ export const SearchBatchPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 38); + messageDesc(file_points, 37); /** * @generated from message qdrant.WithLookup @@ -1589,7 +1558,7 @@ export type WithLookup = Message<"qdrant.WithLookup"> & { * Use `create(WithLookupSchema)` to create a new message. */ export const WithLookupSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 39); + messageDesc(file_points, 38); /** * @generated from message qdrant.SearchPointGroups @@ -1711,7 +1680,7 @@ export type SearchPointGroups = Message<"qdrant.SearchPointGroups"> & { * Use `create(SearchPointGroupsSchema)` to create a new message. */ export const SearchPointGroupsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 40); + messageDesc(file_points, 39); /** * @generated from message qdrant.StartFrom @@ -1752,7 +1721,7 @@ export type StartFrom = Message<"qdrant.StartFrom"> & { * Use `create(StartFromSchema)` to create a new message. */ export const StartFromSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 41); + messageDesc(file_points, 40); /** * @generated from message qdrant.OrderBy @@ -1785,7 +1754,7 @@ export type OrderBy = Message<"qdrant.OrderBy"> & { * Use `create(OrderBySchema)` to create a new message. */ export const OrderBySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 42); + messageDesc(file_points, 41); /** * @generated from message qdrant.ScrollPoints @@ -1865,7 +1834,7 @@ export type ScrollPoints = Message<"qdrant.ScrollPoints"> & { * Use `create(ScrollPointsSchema)` to create a new message. */ export const ScrollPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 43); + messageDesc(file_points, 42); /** * @generated from message qdrant.LookupLocation @@ -1896,7 +1865,7 @@ export type LookupLocation = Message<"qdrant.LookupLocation"> & { * Use `create(LookupLocationSchema)` to create a new message. */ export const LookupLocationSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 44); + messageDesc(file_points, 43); /** * @generated from message qdrant.RecommendPoints @@ -2034,7 +2003,7 @@ export type RecommendPoints = Message<"qdrant.RecommendPoints"> & { * Use `create(RecommendPointsSchema)` to create a new message. */ export const RecommendPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 45); + messageDesc(file_points, 44); /** * @generated from message qdrant.RecommendBatchPoints @@ -2072,7 +2041,7 @@ export type RecommendBatchPoints = Message<"qdrant.RecommendBatchPoints"> & { * Use `create(RecommendBatchPointsSchema)` to create a new message. */ export const RecommendBatchPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 46); + messageDesc(file_points, 45); /** * @generated from message qdrant.RecommendPointGroups @@ -2224,7 +2193,7 @@ export type RecommendPointGroups = Message<"qdrant.RecommendPointGroups"> & { * Use `create(RecommendPointGroupsSchema)` to create a new message. */ export const RecommendPointGroupsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 47); + messageDesc(file_points, 46); /** * @generated from message qdrant.TargetVector @@ -2247,7 +2216,7 @@ export type TargetVector = Message<"qdrant.TargetVector"> & { * Use `create(TargetVectorSchema)` to create a new message. */ export const TargetVectorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 48); + messageDesc(file_points, 47); /** * @generated from message qdrant.VectorExample @@ -2276,7 +2245,7 @@ export type VectorExample = Message<"qdrant.VectorExample"> & { * Use `create(VectorExampleSchema)` to create a new message. */ export const VectorExampleSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 49); + messageDesc(file_points, 48); /** * @generated from message qdrant.ContextExamplePair @@ -2298,7 +2267,7 @@ export type ContextExamplePair = Message<"qdrant.ContextExamplePair"> & { * Use `create(ContextExamplePairSchema)` to create a new message. */ export const ContextExamplePairSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 50); + messageDesc(file_points, 49); /** * @generated from message qdrant.DiscoverPoints @@ -2408,7 +2377,7 @@ export type DiscoverPoints = Message<"qdrant.DiscoverPoints"> & { * Use `create(DiscoverPointsSchema)` to create a new message. */ export const DiscoverPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 51); + messageDesc(file_points, 50); /** * @generated from message qdrant.DiscoverBatchPoints @@ -2446,7 +2415,7 @@ export type DiscoverBatchPoints = Message<"qdrant.DiscoverBatchPoints"> & { * Use `create(DiscoverBatchPointsSchema)` to create a new message. */ export const DiscoverBatchPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 52); + messageDesc(file_points, 51); /** * @generated from message qdrant.CountPoints @@ -2500,7 +2469,7 @@ export type CountPoints = Message<"qdrant.CountPoints"> & { * Use `create(CountPointsSchema)` to create a new message. */ export const CountPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 53); + messageDesc(file_points, 52); /** * @generated from message qdrant.RecommendInput @@ -2533,7 +2502,7 @@ export type RecommendInput = Message<"qdrant.RecommendInput"> & { * Use `create(RecommendInputSchema)` to create a new message. */ export const RecommendInputSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 54); + messageDesc(file_points, 53); /** * @generated from message qdrant.ContextInputPair @@ -2559,7 +2528,7 @@ export type ContextInputPair = Message<"qdrant.ContextInputPair"> & { * Use `create(ContextInputPairSchema)` to create a new message. */ export const ContextInputPairSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 55); + messageDesc(file_points, 54); /** * @generated from message qdrant.DiscoverInput @@ -2585,7 +2554,7 @@ export type DiscoverInput = Message<"qdrant.DiscoverInput"> & { * Use `create(DiscoverInputSchema)` to create a new message. */ export const DiscoverInputSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 56); + messageDesc(file_points, 55); /** * @generated from message qdrant.ContextInput @@ -2604,7 +2573,7 @@ export type ContextInput = Message<"qdrant.ContextInput"> & { * Use `create(ContextInputSchema)` to create a new message. */ export const ContextInputSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 57); + messageDesc(file_points, 56); /** * @generated from message qdrant.Formula @@ -2626,7 +2595,7 @@ export type Formula = Message<"qdrant.Formula"> & { * Use `create(FormulaSchema)` to create a new message. */ export const FormulaSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 58); + messageDesc(file_points, 57); /** * @generated from message qdrant.Expression @@ -2793,7 +2762,7 @@ export type Expression = Message<"qdrant.Expression"> & { * Use `create(ExpressionSchema)` to create a new message. */ export const ExpressionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 59); + messageDesc(file_points, 58); /** * @generated from message qdrant.GeoDistance @@ -2815,7 +2784,7 @@ export type GeoDistance = Message<"qdrant.GeoDistance"> & { * Use `create(GeoDistanceSchema)` to create a new message. */ export const GeoDistanceSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 60); + messageDesc(file_points, 59); /** * @generated from message qdrant.MultExpression @@ -2832,7 +2801,7 @@ export type MultExpression = Message<"qdrant.MultExpression"> & { * Use `create(MultExpressionSchema)` to create a new message. */ export const MultExpressionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 61); + messageDesc(file_points, 60); /** * @generated from message qdrant.SumExpression @@ -2849,7 +2818,7 @@ export type SumExpression = Message<"qdrant.SumExpression"> & { * Use `create(SumExpressionSchema)` to create a new message. */ export const SumExpressionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 62); + messageDesc(file_points, 61); /** * @generated from message qdrant.DivExpression @@ -2876,7 +2845,7 @@ export type DivExpression = Message<"qdrant.DivExpression"> & { * Use `create(DivExpressionSchema)` to create a new message. */ export const DivExpressionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 63); + messageDesc(file_points, 62); /** * @generated from message qdrant.PowExpression @@ -2898,7 +2867,7 @@ export type PowExpression = Message<"qdrant.PowExpression"> & { * Use `create(PowExpressionSchema)` to create a new message. */ export const PowExpressionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 64); + messageDesc(file_points, 63); /** * @generated from message qdrant.DecayParamsExpression @@ -2938,7 +2907,7 @@ export type DecayParamsExpression = Message<"qdrant.DecayParamsExpression"> & { * Use `create(DecayParamsExpressionSchema)` to create a new message. */ export const DecayParamsExpressionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 65); + messageDesc(file_points, 64); /** * @generated from message qdrant.NearestInputWithMmr @@ -2965,7 +2934,7 @@ export type NearestInputWithMmr = Message<"qdrant.NearestInputWithMmr"> & { * Use `create(NearestInputWithMmrSchema)` to create a new message. */ export const NearestInputWithMmrSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 66); + messageDesc(file_points, 65); /** * Maximal Marginal Relevance (MMR) algorithm for re-ranking the points. @@ -3002,7 +2971,7 @@ export type Mmr = Message<"qdrant.Mmr"> & { * Use `create(MmrSchema)` to create a new message. */ export const MmrSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 67); + messageDesc(file_points, 66); /** * Parameterized reciprocal rank fusion @@ -3023,7 +2992,7 @@ export type Rrf = Message<"qdrant.Rrf"> & { * Use `create(RrfSchema)` to create a new message. */ export const RrfSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 68); + messageDesc(file_points, 67); /** * @generated from message qdrant.Query @@ -3120,7 +3089,7 @@ export type Query = Message<"qdrant.Query"> & { * Use `create(QuerySchema)` to create a new message. */ export const QuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 69); + messageDesc(file_points, 68); /** * @generated from message qdrant.PrefetchQuery @@ -3188,7 +3157,7 @@ export type PrefetchQuery = Message<"qdrant.PrefetchQuery"> & { * Use `create(PrefetchQuerySchema)` to create a new message. */ export const PrefetchQuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 70); + messageDesc(file_points, 69); /** * @generated from message qdrant.QueryPoints @@ -3305,7 +3274,7 @@ export type QueryPoints = Message<"qdrant.QueryPoints"> & { * Use `create(QueryPointsSchema)` to create a new message. */ export const QueryPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 71); + messageDesc(file_points, 70); /** * @generated from message qdrant.QueryBatchPoints @@ -3341,7 +3310,7 @@ export type QueryBatchPoints = Message<"qdrant.QueryBatchPoints"> & { * Use `create(QueryBatchPointsSchema)` to create a new message. */ export const QueryBatchPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 72); + messageDesc(file_points, 71); /** * @generated from message qdrant.QueryPointGroups @@ -3472,7 +3441,7 @@ export type QueryPointGroups = Message<"qdrant.QueryPointGroups"> & { * Use `create(QueryPointGroupsSchema)` to create a new message. */ export const QueryPointGroupsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 73); + messageDesc(file_points, 72); /** * @generated from message qdrant.FacetCounts @@ -3540,7 +3509,7 @@ export type FacetCounts = Message<"qdrant.FacetCounts"> & { * Use `create(FacetCountsSchema)` to create a new message. */ export const FacetCountsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 74); + messageDesc(file_points, 73); /** * @generated from message qdrant.FacetValue @@ -3581,7 +3550,7 @@ export type FacetValue = Message<"qdrant.FacetValue"> & { * Use `create(FacetValueSchema)` to create a new message. */ export const FacetValueSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 75); + messageDesc(file_points, 74); /** * @generated from message qdrant.FacetHit @@ -3607,7 +3576,7 @@ export type FacetHit = Message<"qdrant.FacetHit"> & { * Use `create(FacetHitSchema)` to create a new message. */ export const FacetHitSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 76); + messageDesc(file_points, 75); /** * @generated from message qdrant.SearchMatrixPoints @@ -3675,7 +3644,7 @@ export type SearchMatrixPoints = Message<"qdrant.SearchMatrixPoints"> & { * Use `create(SearchMatrixPointsSchema)` to create a new message. */ export const SearchMatrixPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 77); + messageDesc(file_points, 76); /** * @generated from message qdrant.SearchMatrixPairs @@ -3694,7 +3663,7 @@ export type SearchMatrixPairs = Message<"qdrant.SearchMatrixPairs"> & { * Use `create(SearchMatrixPairsSchema)` to create a new message. */ export const SearchMatrixPairsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 78); + messageDesc(file_points, 77); /** * @generated from message qdrant.SearchMatrixPair @@ -3727,7 +3696,7 @@ export type SearchMatrixPair = Message<"qdrant.SearchMatrixPair"> & { * Use `create(SearchMatrixPairSchema)` to create a new message. */ export const SearchMatrixPairSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 79); + messageDesc(file_points, 78); /** * @generated from message qdrant.SearchMatrixOffsets @@ -3767,7 +3736,7 @@ export type SearchMatrixOffsets = Message<"qdrant.SearchMatrixOffsets"> & { * Use `create(SearchMatrixOffsetsSchema)` to create a new message. */ export const SearchMatrixOffsetsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 80); + messageDesc(file_points, 79); /** * @generated from message qdrant.PointsUpdateOperation @@ -3846,7 +3815,7 @@ export type PointsUpdateOperation = Message<"qdrant.PointsUpdateOperation"> & { * Use `create(PointsUpdateOperationSchema)` to create a new message. */ export const PointsUpdateOperationSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 81); + messageDesc(file_points, 80); /** * @generated from message qdrant.PointsUpdateOperation.PointStructList @@ -3877,7 +3846,7 @@ export type PointsUpdateOperation_PointStructList = Message<"qdrant.PointsUpdate * Use `create(PointsUpdateOperation_PointStructListSchema)` to create a new message. */ export const PointsUpdateOperation_PointStructListSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 81, 0); + messageDesc(file_points, 80, 0); /** * @generated from message qdrant.PointsUpdateOperation.SetPayload @@ -3915,7 +3884,7 @@ export type PointsUpdateOperation_SetPayload = Message<"qdrant.PointsUpdateOpera * Use `create(PointsUpdateOperation_SetPayloadSchema)` to create a new message. */ export const PointsUpdateOperation_SetPayloadSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 81, 1); + messageDesc(file_points, 80, 1); /** * @generated from message qdrant.PointsUpdateOperation.OverwritePayload @@ -3953,7 +3922,7 @@ export type PointsUpdateOperation_OverwritePayload = Message<"qdrant.PointsUpdat * Use `create(PointsUpdateOperation_OverwritePayloadSchema)` to create a new message. */ export const PointsUpdateOperation_OverwritePayloadSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 81, 2); + messageDesc(file_points, 80, 2); /** * @generated from message qdrant.PointsUpdateOperation.DeletePayload @@ -3984,7 +3953,7 @@ export type PointsUpdateOperation_DeletePayload = Message<"qdrant.PointsUpdateOp * Use `create(PointsUpdateOperation_DeletePayloadSchema)` to create a new message. */ export const PointsUpdateOperation_DeletePayloadSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 81, 3); + messageDesc(file_points, 80, 3); /** * @generated from message qdrant.PointsUpdateOperation.UpdateVectors @@ -4017,7 +3986,7 @@ export type PointsUpdateOperation_UpdateVectors = Message<"qdrant.PointsUpdateOp * Use `create(PointsUpdateOperation_UpdateVectorsSchema)` to create a new message. */ export const PointsUpdateOperation_UpdateVectorsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 81, 4); + messageDesc(file_points, 80, 4); /** * @generated from message qdrant.PointsUpdateOperation.DeleteVectors @@ -4050,7 +4019,7 @@ export type PointsUpdateOperation_DeleteVectors = Message<"qdrant.PointsUpdateOp * Use `create(PointsUpdateOperation_DeleteVectorsSchema)` to create a new message. */ export const PointsUpdateOperation_DeleteVectorsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 81, 5); + messageDesc(file_points, 80, 5); /** * @generated from message qdrant.PointsUpdateOperation.DeletePoints @@ -4076,7 +4045,7 @@ export type PointsUpdateOperation_DeletePoints = Message<"qdrant.PointsUpdateOpe * Use `create(PointsUpdateOperation_DeletePointsSchema)` to create a new message. */ export const PointsUpdateOperation_DeletePointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 81, 6); + messageDesc(file_points, 80, 6); /** * @generated from message qdrant.PointsUpdateOperation.ClearPayload @@ -4102,7 +4071,7 @@ export type PointsUpdateOperation_ClearPayload = Message<"qdrant.PointsUpdateOpe * Use `create(PointsUpdateOperation_ClearPayloadSchema)` to create a new message. */ export const PointsUpdateOperation_ClearPayloadSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 81, 7); + messageDesc(file_points, 80, 7); /** * @generated from message qdrant.UpdateBatchPoints @@ -4140,7 +4109,7 @@ export type UpdateBatchPoints = Message<"qdrant.UpdateBatchPoints"> & { * Use `create(UpdateBatchPointsSchema)` to create a new message. */ export const UpdateBatchPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 82); + messageDesc(file_points, 81); /** * @generated from message qdrant.PointsOperationResponse @@ -4169,7 +4138,7 @@ export type PointsOperationResponse = Message<"qdrant.PointsOperationResponse"> * Use `create(PointsOperationResponseSchema)` to create a new message. */ export const PointsOperationResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 83); + messageDesc(file_points, 82); /** * @generated from message qdrant.UpdateResult @@ -4195,7 +4164,7 @@ export type UpdateResult = Message<"qdrant.UpdateResult"> & { * Use `create(UpdateResultSchema)` to create a new message. */ export const UpdateResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 84); + messageDesc(file_points, 83); /** * @generated from message qdrant.OrderValue @@ -4224,7 +4193,7 @@ export type OrderValue = Message<"qdrant.OrderValue"> & { * Use `create(OrderValueSchema)` to create a new message. */ export const OrderValueSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 85); + messageDesc(file_points, 84); /** * @generated from message qdrant.ScoredPoint @@ -4285,7 +4254,7 @@ export type ScoredPoint = Message<"qdrant.ScoredPoint"> & { * Use `create(ScoredPointSchema)` to create a new message. */ export const ScoredPointSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 86); + messageDesc(file_points, 85); /** * @generated from message qdrant.GroupId @@ -4326,7 +4295,7 @@ export type GroupId = Message<"qdrant.GroupId"> & { * Use `create(GroupIdSchema)` to create a new message. */ export const GroupIdSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 87); + messageDesc(file_points, 86); /** * @generated from message qdrant.PointGroup @@ -4359,7 +4328,7 @@ export type PointGroup = Message<"qdrant.PointGroup"> & { * Use `create(PointGroupSchema)` to create a new message. */ export const PointGroupSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 88); + messageDesc(file_points, 87); /** * @generated from message qdrant.GroupsResult @@ -4378,7 +4347,7 @@ export type GroupsResult = Message<"qdrant.GroupsResult"> & { * Use `create(GroupsResultSchema)` to create a new message. */ export const GroupsResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 89); + messageDesc(file_points, 88); /** * @generated from message qdrant.SearchResponse @@ -4407,7 +4376,7 @@ export type SearchResponse = Message<"qdrant.SearchResponse"> & { * Use `create(SearchResponseSchema)` to create a new message. */ export const SearchResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 90); + messageDesc(file_points, 89); /** * @generated from message qdrant.QueryResponse @@ -4436,7 +4405,7 @@ export type QueryResponse = Message<"qdrant.QueryResponse"> & { * Use `create(QueryResponseSchema)` to create a new message. */ export const QueryResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 91); + messageDesc(file_points, 90); /** * @generated from message qdrant.QueryBatchResponse @@ -4465,7 +4434,7 @@ export type QueryBatchResponse = Message<"qdrant.QueryBatchResponse"> & { * Use `create(QueryBatchResponseSchema)` to create a new message. */ export const QueryBatchResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 92); + messageDesc(file_points, 91); /** * @generated from message qdrant.QueryGroupsResponse @@ -4494,7 +4463,7 @@ export type QueryGroupsResponse = Message<"qdrant.QueryGroupsResponse"> & { * Use `create(QueryGroupsResponseSchema)` to create a new message. */ export const QueryGroupsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 93); + messageDesc(file_points, 92); /** * @generated from message qdrant.BatchResult @@ -4511,7 +4480,7 @@ export type BatchResult = Message<"qdrant.BatchResult"> & { * Use `create(BatchResultSchema)` to create a new message. */ export const BatchResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 94); + messageDesc(file_points, 93); /** * @generated from message qdrant.SearchBatchResponse @@ -4540,7 +4509,7 @@ export type SearchBatchResponse = Message<"qdrant.SearchBatchResponse"> & { * Use `create(SearchBatchResponseSchema)` to create a new message. */ export const SearchBatchResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 95); + messageDesc(file_points, 94); /** * @generated from message qdrant.SearchGroupsResponse @@ -4569,7 +4538,7 @@ export type SearchGroupsResponse = Message<"qdrant.SearchGroupsResponse"> & { * Use `create(SearchGroupsResponseSchema)` to create a new message. */ export const SearchGroupsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 96); + messageDesc(file_points, 95); /** * @generated from message qdrant.CountResponse @@ -4598,7 +4567,7 @@ export type CountResponse = Message<"qdrant.CountResponse"> & { * Use `create(CountResponseSchema)` to create a new message. */ export const CountResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 97); + messageDesc(file_points, 96); /** * @generated from message qdrant.ScrollResponse @@ -4634,7 +4603,7 @@ export type ScrollResponse = Message<"qdrant.ScrollResponse"> & { * Use `create(ScrollResponseSchema)` to create a new message. */ export const ScrollResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 98); + messageDesc(file_points, 97); /** * @generated from message qdrant.CountResult @@ -4651,7 +4620,7 @@ export type CountResult = Message<"qdrant.CountResult"> & { * Use `create(CountResultSchema)` to create a new message. */ export const CountResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 99); + messageDesc(file_points, 98); /** * @generated from message qdrant.RetrievedPoint @@ -4692,7 +4661,7 @@ export type RetrievedPoint = Message<"qdrant.RetrievedPoint"> & { * Use `create(RetrievedPointSchema)` to create a new message. */ export const RetrievedPointSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 100); + messageDesc(file_points, 99); /** * @generated from message qdrant.GetResponse @@ -4721,7 +4690,7 @@ export type GetResponse = Message<"qdrant.GetResponse"> & { * Use `create(GetResponseSchema)` to create a new message. */ export const GetResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 101); + messageDesc(file_points, 100); /** * @generated from message qdrant.RecommendResponse @@ -4750,7 +4719,7 @@ export type RecommendResponse = Message<"qdrant.RecommendResponse"> & { * Use `create(RecommendResponseSchema)` to create a new message. */ export const RecommendResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 102); + messageDesc(file_points, 101); /** * @generated from message qdrant.RecommendBatchResponse @@ -4779,7 +4748,7 @@ export type RecommendBatchResponse = Message<"qdrant.RecommendBatchResponse"> & * Use `create(RecommendBatchResponseSchema)` to create a new message. */ export const RecommendBatchResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 103); + messageDesc(file_points, 102); /** * @generated from message qdrant.DiscoverResponse @@ -4808,7 +4777,7 @@ export type DiscoverResponse = Message<"qdrant.DiscoverResponse"> & { * Use `create(DiscoverResponseSchema)` to create a new message. */ export const DiscoverResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 104); + messageDesc(file_points, 103); /** * @generated from message qdrant.DiscoverBatchResponse @@ -4837,7 +4806,7 @@ export type DiscoverBatchResponse = Message<"qdrant.DiscoverBatchResponse"> & { * Use `create(DiscoverBatchResponseSchema)` to create a new message. */ export const DiscoverBatchResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 105); + messageDesc(file_points, 104); /** * @generated from message qdrant.RecommendGroupsResponse @@ -4866,7 +4835,7 @@ export type RecommendGroupsResponse = Message<"qdrant.RecommendGroupsResponse"> * Use `create(RecommendGroupsResponseSchema)` to create a new message. */ export const RecommendGroupsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 106); + messageDesc(file_points, 105); /** * @generated from message qdrant.UpdateBatchResponse @@ -4895,7 +4864,7 @@ export type UpdateBatchResponse = Message<"qdrant.UpdateBatchResponse"> & { * Use `create(UpdateBatchResponseSchema)` to create a new message. */ export const UpdateBatchResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 107); + messageDesc(file_points, 106); /** * @generated from message qdrant.FacetResponse @@ -4924,7 +4893,7 @@ export type FacetResponse = Message<"qdrant.FacetResponse"> & { * Use `create(FacetResponseSchema)` to create a new message. */ export const FacetResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 108); + messageDesc(file_points, 107); /** * @generated from message qdrant.SearchMatrixPairsResponse @@ -4953,7 +4922,7 @@ export type SearchMatrixPairsResponse = Message<"qdrant.SearchMatrixPairsRespons * Use `create(SearchMatrixPairsResponseSchema)` to create a new message. */ export const SearchMatrixPairsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 109); + messageDesc(file_points, 108); /** * @generated from message qdrant.SearchMatrixOffsetsResponse @@ -4982,658 +4951,36 @@ export type SearchMatrixOffsetsResponse = Message<"qdrant.SearchMatrixOffsetsRes * Use `create(SearchMatrixOffsetsResponseSchema)` to create a new message. */ export const SearchMatrixOffsetsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 110); + messageDesc(file_points, 109); /** - * @generated from message qdrant.Filter + * @generated from message qdrant.PointsSelector */ -export type Filter = Message<"qdrant.Filter"> & { +export type PointsSelector = Message<"qdrant.PointsSelector"> & { /** - * At least one of those conditions should match - * - * @generated from field: repeated qdrant.Condition should = 1; + * @generated from oneof qdrant.PointsSelector.points_selector_one_of */ - should: Condition[]; - - /** - * All conditions must match - * - * @generated from field: repeated qdrant.Condition must = 2; - */ - must: Condition[]; - - /** - * All conditions must NOT match - * - * @generated from field: repeated qdrant.Condition must_not = 3; - */ - mustNot: Condition[]; - - /** - * At least minimum amount of given conditions should match - * - * @generated from field: optional qdrant.MinShould min_should = 4; - */ - minShould?: MinShould; -}; - -/** - * Describes the message qdrant.Filter. - * Use `create(FilterSchema)` to create a new message. - */ -export const FilterSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 111); - -/** - * @generated from message qdrant.MinShould - */ -export type MinShould = Message<"qdrant.MinShould"> & { - /** - * @generated from field: repeated qdrant.Condition conditions = 1; - */ - conditions: Condition[]; - - /** - * @generated from field: uint64 min_count = 2; - */ - minCount: bigint; -}; - -/** - * Describes the message qdrant.MinShould. - * Use `create(MinShouldSchema)` to create a new message. - */ -export const MinShouldSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 112); - -/** - * @generated from message qdrant.Condition - */ -export type Condition = Message<"qdrant.Condition"> & { - /** - * @generated from oneof qdrant.Condition.condition_one_of - */ - conditionOneOf: { - /** - * @generated from field: qdrant.FieldCondition field = 1; - */ - value: FieldCondition; - case: "field"; - } | { - /** - * @generated from field: qdrant.IsEmptyCondition is_empty = 2; - */ - value: IsEmptyCondition; - case: "isEmpty"; - } | { - /** - * @generated from field: qdrant.HasIdCondition has_id = 3; - */ - value: HasIdCondition; - case: "hasId"; - } | { - /** - * @generated from field: qdrant.Filter filter = 4; - */ - value: Filter; - case: "filter"; - } | { - /** - * @generated from field: qdrant.IsNullCondition is_null = 5; - */ - value: IsNullCondition; - case: "isNull"; - } | { - /** - * @generated from field: qdrant.NestedCondition nested = 6; - */ - value: NestedCondition; - case: "nested"; - } | { - /** - * @generated from field: qdrant.HasVectorCondition has_vector = 7; - */ - value: HasVectorCondition; - case: "hasVector"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message qdrant.Condition. - * Use `create(ConditionSchema)` to create a new message. - */ -export const ConditionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 113); - -/** - * @generated from message qdrant.IsEmptyCondition - */ -export type IsEmptyCondition = Message<"qdrant.IsEmptyCondition"> & { - /** - * @generated from field: string key = 1; - */ - key: string; -}; - -/** - * Describes the message qdrant.IsEmptyCondition. - * Use `create(IsEmptyConditionSchema)` to create a new message. - */ -export const IsEmptyConditionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 114); - -/** - * @generated from message qdrant.IsNullCondition - */ -export type IsNullCondition = Message<"qdrant.IsNullCondition"> & { - /** - * @generated from field: string key = 1; - */ - key: string; -}; - -/** - * Describes the message qdrant.IsNullCondition. - * Use `create(IsNullConditionSchema)` to create a new message. - */ -export const IsNullConditionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 115); - -/** - * @generated from message qdrant.HasIdCondition - */ -export type HasIdCondition = Message<"qdrant.HasIdCondition"> & { - /** - * @generated from field: repeated qdrant.PointId has_id = 1; - */ - hasId: PointId[]; -}; - -/** - * Describes the message qdrant.HasIdCondition. - * Use `create(HasIdConditionSchema)` to create a new message. - */ -export const HasIdConditionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 116); - -/** - * @generated from message qdrant.HasVectorCondition - */ -export type HasVectorCondition = Message<"qdrant.HasVectorCondition"> & { - /** - * @generated from field: string has_vector = 1; - */ - hasVector: string; -}; - -/** - * Describes the message qdrant.HasVectorCondition. - * Use `create(HasVectorConditionSchema)` to create a new message. - */ -export const HasVectorConditionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 117); - -/** - * @generated from message qdrant.NestedCondition - */ -export type NestedCondition = Message<"qdrant.NestedCondition"> & { - /** - * Path to nested object - * - * @generated from field: string key = 1; - */ - key: string; - - /** - * Filter condition - * - * @generated from field: qdrant.Filter filter = 2; - */ - filter?: Filter; -}; - -/** - * Describes the message qdrant.NestedCondition. - * Use `create(NestedConditionSchema)` to create a new message. - */ -export const NestedConditionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 118); - -/** - * @generated from message qdrant.FieldCondition - */ -export type FieldCondition = Message<"qdrant.FieldCondition"> & { - /** - * @generated from field: string key = 1; - */ - key: string; - - /** - * Check if point has field with a given value - * - * @generated from field: qdrant.Match match = 2; - */ - match?: Match; - - /** - * Check if points value lies in a given range - * - * @generated from field: qdrant.Range range = 3; - */ - range?: Range; - - /** - * Check if points geolocation lies in a given area - * - * @generated from field: qdrant.GeoBoundingBox geo_bounding_box = 4; - */ - geoBoundingBox?: GeoBoundingBox; - - /** - * Check if geo point is within a given radius - * - * @generated from field: qdrant.GeoRadius geo_radius = 5; - */ - geoRadius?: GeoRadius; - - /** - * Check number of values for a specific field - * - * @generated from field: qdrant.ValuesCount values_count = 6; - */ - valuesCount?: ValuesCount; - - /** - * Check if geo point is within a given polygon - * - * @generated from field: qdrant.GeoPolygon geo_polygon = 7; - */ - geoPolygon?: GeoPolygon; - - /** - * Check if datetime is within a given range - * - * @generated from field: qdrant.DatetimeRange datetime_range = 8; - */ - datetimeRange?: DatetimeRange; - - /** - * Check if field is empty - * - * @generated from field: optional bool is_empty = 9; - */ - isEmpty?: boolean; - - /** - * Check if field is null - * - * @generated from field: optional bool is_null = 10; - */ - isNull?: boolean; -}; - -/** - * Describes the message qdrant.FieldCondition. - * Use `create(FieldConditionSchema)` to create a new message. - */ -export const FieldConditionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 119); - -/** - * @generated from message qdrant.Match - */ -export type Match = Message<"qdrant.Match"> & { - /** - * @generated from oneof qdrant.Match.match_value - */ - matchValue: { - /** - * Match string keyword - * - * @generated from field: string keyword = 1; - */ - value: string; - case: "keyword"; - } | { - /** - * Match integer - * - * @generated from field: int64 integer = 2; - */ - value: bigint; - case: "integer"; - } | { - /** - * Match boolean - * - * @generated from field: bool boolean = 3; - */ - value: boolean; - case: "boolean"; - } | { - /** - * Match text - * - * @generated from field: string text = 4; - */ - value: string; - case: "text"; - } | { - /** - * Match multiple keywords - * - * @generated from field: qdrant.RepeatedStrings keywords = 5; - */ - value: RepeatedStrings; - case: "keywords"; - } | { - /** - * Match multiple integers - * - * @generated from field: qdrant.RepeatedIntegers integers = 6; - */ - value: RepeatedIntegers; - case: "integers"; - } | { - /** - * Match any other value except those integers - * - * @generated from field: qdrant.RepeatedIntegers except_integers = 7; - */ - value: RepeatedIntegers; - case: "exceptIntegers"; - } | { - /** - * Match any other value except those keywords - * - * @generated from field: qdrant.RepeatedStrings except_keywords = 8; - */ - value: RepeatedStrings; - case: "exceptKeywords"; - } | { - /** - * Match phrase text - * - * @generated from field: string phrase = 9; - */ - value: string; - case: "phrase"; - } | { - /** - * Match any word in the text - * - * @generated from field: string text_any = 10; - */ - value: string; - case: "textAny"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message qdrant.Match. - * Use `create(MatchSchema)` to create a new message. - */ -export const MatchSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 120); - -/** - * @generated from message qdrant.RepeatedStrings - */ -export type RepeatedStrings = Message<"qdrant.RepeatedStrings"> & { - /** - * @generated from field: repeated string strings = 1; - */ - strings: string[]; -}; - -/** - * Describes the message qdrant.RepeatedStrings. - * Use `create(RepeatedStringsSchema)` to create a new message. - */ -export const RepeatedStringsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 121); - -/** - * @generated from message qdrant.RepeatedIntegers - */ -export type RepeatedIntegers = Message<"qdrant.RepeatedIntegers"> & { - /** - * @generated from field: repeated int64 integers = 1; - */ - integers: bigint[]; -}; - -/** - * Describes the message qdrant.RepeatedIntegers. - * Use `create(RepeatedIntegersSchema)` to create a new message. - */ -export const RepeatedIntegersSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 122); - -/** - * @generated from message qdrant.Range - */ -export type Range = Message<"qdrant.Range"> & { - /** - * @generated from field: optional double lt = 1; - */ - lt?: number; - - /** - * @generated from field: optional double gt = 2; - */ - gt?: number; - - /** - * @generated from field: optional double gte = 3; - */ - gte?: number; - - /** - * @generated from field: optional double lte = 4; - */ - lte?: number; -}; - -/** - * Describes the message qdrant.Range. - * Use `create(RangeSchema)` to create a new message. - */ -export const RangeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 123); - -/** - * @generated from message qdrant.DatetimeRange - */ -export type DatetimeRange = Message<"qdrant.DatetimeRange"> & { - /** - * @generated from field: optional google.protobuf.Timestamp lt = 1; - */ - lt?: Timestamp; - - /** - * @generated from field: optional google.protobuf.Timestamp gt = 2; - */ - gt?: Timestamp; - - /** - * @generated from field: optional google.protobuf.Timestamp gte = 3; - */ - gte?: Timestamp; - - /** - * @generated from field: optional google.protobuf.Timestamp lte = 4; - */ - lte?: Timestamp; -}; - -/** - * Describes the message qdrant.DatetimeRange. - * Use `create(DatetimeRangeSchema)` to create a new message. - */ -export const DatetimeRangeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 124); - -/** - * @generated from message qdrant.GeoBoundingBox - */ -export type GeoBoundingBox = Message<"qdrant.GeoBoundingBox"> & { - /** - * north-west corner - * - * @generated from field: qdrant.GeoPoint top_left = 1; - */ - topLeft?: GeoPoint; - - /** - * south-east corner - * - * @generated from field: qdrant.GeoPoint bottom_right = 2; - */ - bottomRight?: GeoPoint; -}; - -/** - * Describes the message qdrant.GeoBoundingBox. - * Use `create(GeoBoundingBoxSchema)` to create a new message. - */ -export const GeoBoundingBoxSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 125); - -/** - * @generated from message qdrant.GeoRadius - */ -export type GeoRadius = Message<"qdrant.GeoRadius"> & { - /** - * Center of the circle - * - * @generated from field: qdrant.GeoPoint center = 1; - */ - center?: GeoPoint; - - /** - * In meters - * - * @generated from field: float radius = 2; - */ - radius: number; -}; - -/** - * Describes the message qdrant.GeoRadius. - * Use `create(GeoRadiusSchema)` to create a new message. - */ -export const GeoRadiusSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 126); - -/** - * @generated from message qdrant.GeoLineString - */ -export type GeoLineString = Message<"qdrant.GeoLineString"> & { - /** - * Ordered sequence of GeoPoints representing the line - * - * @generated from field: repeated qdrant.GeoPoint points = 1; - */ - points: GeoPoint[]; -}; - -/** - * Describes the message qdrant.GeoLineString. - * Use `create(GeoLineStringSchema)` to create a new message. - */ -export const GeoLineStringSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 127); - -/** - * For a valid GeoPolygon, both the exterior and interior GeoLineStrings must consist of a minimum of 4 points. - * Additionally, the first and last points of each GeoLineString must be the same. - * - * @generated from message qdrant.GeoPolygon - */ -export type GeoPolygon = Message<"qdrant.GeoPolygon"> & { - /** - * The exterior line bounds the surface - * - * @generated from field: qdrant.GeoLineString exterior = 1; - */ - exterior?: GeoLineString; - - /** - * Interior lines (if present) bound holes within the surface - * - * @generated from field: repeated qdrant.GeoLineString interiors = 2; - */ - interiors: GeoLineString[]; -}; - -/** - * Describes the message qdrant.GeoPolygon. - * Use `create(GeoPolygonSchema)` to create a new message. - */ -export const GeoPolygonSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 128); - -/** - * @generated from message qdrant.ValuesCount - */ -export type ValuesCount = Message<"qdrant.ValuesCount"> & { - /** - * @generated from field: optional uint64 lt = 1; - */ - lt?: bigint; - - /** - * @generated from field: optional uint64 gt = 2; - */ - gt?: bigint; - - /** - * @generated from field: optional uint64 gte = 3; - */ - gte?: bigint; - - /** - * @generated from field: optional uint64 lte = 4; - */ - lte?: bigint; -}; - -/** - * Describes the message qdrant.ValuesCount. - * Use `create(ValuesCountSchema)` to create a new message. - */ -export const ValuesCountSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 129); - -/** - * @generated from message qdrant.PointsSelector - */ -export type PointsSelector = Message<"qdrant.PointsSelector"> & { - /** - * @generated from oneof qdrant.PointsSelector.points_selector_one_of - */ - pointsSelectorOneOf: { - /** - * @generated from field: qdrant.PointsIdsList points = 1; - */ - value: PointsIdsList; - case: "points"; - } | { - /** - * @generated from field: qdrant.Filter filter = 2; - */ - value: Filter; - case: "filter"; - } | { case: undefined; value?: undefined }; -}; + pointsSelectorOneOf: { + /** + * @generated from field: qdrant.PointsIdsList points = 1; + */ + value: PointsIdsList; + case: "points"; + } | { + /** + * @generated from field: qdrant.Filter filter = 2; + */ + value: Filter; + case: "filter"; + } | { case: undefined; value?: undefined }; +}; /** * Describes the message qdrant.PointsSelector. * Use `create(PointsSelectorSchema)` to create a new message. */ export const PointsSelectorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 130); + messageDesc(file_points, 110); /** * @generated from message qdrant.PointsIdsList @@ -5650,7 +4997,7 @@ export type PointsIdsList = Message<"qdrant.PointsIdsList"> & { * Use `create(PointsIdsListSchema)` to create a new message. */ export const PointsIdsListSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 131); + messageDesc(file_points, 111); /** * @generated from message qdrant.PointStruct @@ -5677,29 +5024,7 @@ export type PointStruct = Message<"qdrant.PointStruct"> & { * Use `create(PointStructSchema)` to create a new message. */ export const PointStructSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 132); - -/** - * @generated from message qdrant.GeoPoint - */ -export type GeoPoint = Message<"qdrant.GeoPoint"> & { - /** - * @generated from field: double lon = 1; - */ - lon: number; - - /** - * @generated from field: double lat = 2; - */ - lat: number; -}; - -/** - * Describes the message qdrant.GeoPoint. - * Use `create(GeoPointSchema)` to create a new message. - */ -export const GeoPointSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 133); + messageDesc(file_points, 112); /** * --------------------------------------------- @@ -5725,7 +5050,7 @@ export type Usage = Message<"qdrant.Usage"> & { * Use `create(UsageSchema)` to create a new message. */ export const UsageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 134); + messageDesc(file_points, 113); /** * @generated from message qdrant.InferenceUsage @@ -5742,7 +5067,7 @@ export type InferenceUsage = Message<"qdrant.InferenceUsage"> & { * Use `create(InferenceUsageSchema)` to create a new message. */ export const InferenceUsageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 135); + messageDesc(file_points, 114); /** * @generated from message qdrant.ModelUsage @@ -5759,7 +5084,7 @@ export type ModelUsage = Message<"qdrant.ModelUsage"> & { * Use `create(ModelUsageSchema)` to create a new message. */ export const ModelUsageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 136); + messageDesc(file_points, 115); /** * @generated from message qdrant.HardwareUsage @@ -5806,7 +5131,7 @@ export type HardwareUsage = Message<"qdrant.HardwareUsage"> & { * Use `create(HardwareUsageSchema)` to create a new message. */ export const HardwareUsageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 137); + messageDesc(file_points, 116); /** * @generated from enum qdrant.WriteOrderingType diff --git a/packages/js-client-rest/CHANGELOG.md b/packages/js-client-rest/CHANGELOG.md index d045156..ce9d6fd 100644 --- a/packages/js-client-rest/CHANGELOG.md +++ b/packages/js-client-rest/CHANGELOG.md @@ -1,5 +1,15 @@ # @qdrant/js-client-rest +## 1.16.0 + +### Minor Changes + +- Qdrant v1.16.0 API +- Breaking: removed `/locks` API +- Breaking: removed `init_from` parameter from collection creation +- Breaking: removed `vectors_count` from collection info +- Added explicit return types for all API methods + ## 1.15.1 ### Minor Changes diff --git a/packages/js-client-rest/package.json b/packages/js-client-rest/package.json index 94598cb..bb7b7cb 100644 --- a/packages/js-client-rest/package.json +++ b/packages/js-client-rest/package.json @@ -1,6 +1,6 @@ { "name": "@qdrant/js-client-rest", - "version": "1.15.1", + "version": "1.16.0", "engines": { "node": ">=18.17.0", "pnpm": ">=8" diff --git a/packages/js-client-rest/src/client-version.ts b/packages/js-client-rest/src/client-version.ts index e4bf975..796cab7 100644 --- a/packages/js-client-rest/src/client-version.ts +++ b/packages/js-client-rest/src/client-version.ts @@ -1,4 +1,4 @@ -export const PACKAGE_VERSION = '1.15.1'; +export const PACKAGE_VERSION = '1.16.0'; interface Version { major: number; diff --git a/packages/qdrant-js/CHANGELOG.md b/packages/qdrant-js/CHANGELOG.md index d930d1f..8fec28b 100644 --- a/packages/qdrant-js/CHANGELOG.md +++ b/packages/qdrant-js/CHANGELOG.md @@ -1,5 +1,14 @@ # @qdrant/qdrant-js +## 1.16.0 + +### Minor Changes + +- Qdrant v1.16.0 API +- Breaking: removed `/locks` API +- Breaking: removed `init_from` parameter from collection creation +- Breaking: removed `vectors_count` from collection info + ## 1.15.1 ### Minor Changes diff --git a/packages/qdrant-js/package.json b/packages/qdrant-js/package.json index 87e137d..735b59f 100644 --- a/packages/qdrant-js/package.json +++ b/packages/qdrant-js/package.json @@ -1,6 +1,6 @@ { "name": "@qdrant/qdrant-js", - "version": "1.15.1", + "version": "1.16.0", "engines": { "node": ">=18.17.0", "pnpm": ">=8" @@ -57,8 +57,8 @@ "clean": "rimraf ./dist" }, "dependencies": { - "@qdrant/js-client-rest": "workspace:1.15.1", - "@qdrant/js-client-grpc": "workspace:1.15.1" + "@qdrant/js-client-rest": "workspace:1.16.0", + "@qdrant/js-client-grpc": "workspace:1.16.0" }, "peerDependencies": { "typescript": ">=4.1" diff --git a/packages/qdrant-js/scripts/integration-tests.sh b/packages/qdrant-js/scripts/integration-tests.sh index 8ba0fe1..474cf31 100755 --- a/packages/qdrant-js/scripts/integration-tests.sh +++ b/packages/qdrant-js/scripts/integration-tests.sh @@ -9,7 +9,7 @@ function stop_docker() docker stop qdrant_test } -QDRANT_LATEST="v1.15.0" +QDRANT_LATEST="v1.16.0" QDRANT_VERSION=${QDRANT_VERSION:-"$QDRANT_LATEST"} QDRANT_HOST='127.0.0.1:6333' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7d60c82..53a0f38 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -122,10 +122,10 @@ importers: packages/qdrant-js: dependencies: '@qdrant/js-client-grpc': - specifier: workspace:1.15.1 + specifier: workspace:1.16.0 version: link:../js-client-grpc '@qdrant/js-client-rest': - specifier: workspace:1.15.1 + specifier: workspace:1.16.0 version: link:../js-client-rest typescript: specifier: '>=4.1'