@dxos/protocols 0.8.4-main.bc674ce → 0.8.4-main.bd9b33e6c8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/README.md +1 -1
  2. package/dist/src/FeedProtocol.d.ts +528 -0
  3. package/dist/src/FeedProtocol.d.ts.map +1 -0
  4. package/dist/src/FeedProtocol.js +237 -0
  5. package/dist/src/FeedProtocol.js.map +1 -0
  6. package/dist/src/FunctionProtocol.d.ts +2 -2
  7. package/dist/src/FunctionProtocol.d.ts.map +1 -1
  8. package/dist/src/buf/proto/gen/dxos/client/queue_pb.d.ts +42 -0
  9. package/dist/src/buf/proto/gen/dxos/client/queue_pb.d.ts.map +1 -1
  10. package/dist/src/buf/proto/gen/dxos/client/queue_pb.js +7 -2
  11. package/dist/src/buf/proto/gen/dxos/client/queue_pb.js.map +1 -1
  12. package/dist/src/buf/proto/gen/dxos/client/services_pb.d.ts +5 -1
  13. package/dist/src/buf/proto/gen/dxos/client/services_pb.d.ts.map +1 -1
  14. package/dist/src/buf/proto/gen/dxos/client/services_pb.js +5 -1
  15. package/dist/src/buf/proto/gen/dxos/client/services_pb.js.map +1 -1
  16. package/dist/src/buf/proto/gen/dxos/config_pb.d.ts +0 -4
  17. package/dist/src/buf/proto/gen/dxos/config_pb.d.ts.map +1 -1
  18. package/dist/src/buf/proto/gen/dxos/config_pb.js +1 -1
  19. package/dist/src/buf/proto/gen/dxos/config_pb.js.map +1 -1
  20. package/dist/src/buf/proto/gen/dxos/edge/messenger_pb.d.ts +28 -0
  21. package/dist/src/buf/proto/gen/dxos/edge/messenger_pb.d.ts.map +1 -1
  22. package/dist/src/buf/proto/gen/dxos/edge/messenger_pb.js +10 -5
  23. package/dist/src/buf/proto/gen/dxos/edge/messenger_pb.js.map +1 -1
  24. package/dist/src/buf/proto/gen/dxos/google_pb.js +1 -1
  25. package/dist/src/buf/proto/gen/dxos/halo/credentials_pb.d.ts +1 -0
  26. package/dist/src/buf/proto/gen/dxos/halo/credentials_pb.d.ts.map +1 -1
  27. package/dist/src/buf/proto/gen/dxos/halo/credentials_pb.js.map +1 -1
  28. package/dist/src/buf/proto/gen/dxos/tracing_pb.js +1 -1
  29. package/dist/src/codec.test.js +1 -1
  30. package/dist/src/edge/EdgeFunctionEnv.d.ts +11 -23
  31. package/dist/src/edge/EdgeFunctionEnv.d.ts.map +1 -1
  32. package/dist/src/edge/edge.d.ts +161 -0
  33. package/dist/src/edge/edge.d.ts.map +1 -1
  34. package/dist/src/edge/edge.js +9 -0
  35. package/dist/src/edge/edge.js.map +1 -1
  36. package/dist/src/edge/errors.d.ts +1 -1
  37. package/dist/src/edge/errors.js +1 -1
  38. package/dist/src/edge/index.d.ts +3 -3
  39. package/dist/src/edge/index.js +3 -3
  40. package/dist/src/errors/encoding.d.ts +1 -1
  41. package/dist/src/errors/encoding.js +1 -1
  42. package/dist/src/errors/errors.d.ts +1 -1
  43. package/dist/src/errors/errors.js +1 -1
  44. package/dist/src/errors/errors.test.js +1 -1
  45. package/dist/src/errors/helpers.d.ts +1 -1
  46. package/dist/src/errors/index.d.ts +5 -5
  47. package/dist/src/errors/index.js +5 -5
  48. package/dist/src/index.d.ts +12 -12
  49. package/dist/src/index.d.ts.map +1 -1
  50. package/dist/src/index.js +11 -12
  51. package/dist/src/index.js.map +1 -1
  52. package/dist/src/indexing.test.js +1 -1
  53. package/dist/src/proto/gen/dxos/client/services.d.ts +998 -973
  54. package/dist/src/proto/gen/dxos/client/services.d.ts.map +1 -1
  55. package/dist/src/proto/gen/dxos/client/services.js +95 -94
  56. package/dist/src/proto/gen/dxos/client/services.js.map +1 -1
  57. package/dist/src/proto/gen/dxos/config.d.ts +0 -5
  58. package/dist/src/proto/gen/dxos/config.d.ts.map +1 -1
  59. package/dist/src/proto/gen/dxos/config.js.map +1 -1
  60. package/dist/src/proto/gen/dxos/devtools/host.d.ts +31 -31
  61. package/dist/src/proto/gen/dxos/devtools/host.d.ts.map +1 -1
  62. package/dist/src/proto/gen/dxos/edge/messenger.d.ts +24 -0
  63. package/dist/src/proto/gen/dxos/edge/messenger.d.ts.map +1 -1
  64. package/dist/src/proto/gen/dxos/edge/messenger.js.map +1 -1
  65. package/dist/src/proto/gen/dxos/halo/credentials.d.ts +1 -1
  66. package/dist/src/proto/gen/google/protobuf.d.ts +326 -40
  67. package/dist/src/proto/gen/google/protobuf.d.ts.map +1 -1
  68. package/dist/src/proto/gen/google/protobuf.js +127 -1
  69. package/dist/src/proto/gen/google/protobuf.js.map +1 -1
  70. package/dist/src/proto/gen/index.d.ts +26 -0
  71. package/dist/src/proto/gen/index.d.ts.map +1 -1
  72. package/dist/src/proto/gen/index.js +1 -1
  73. package/dist/src/proto/gen/index.js.map +1 -1
  74. package/dist/src/proto/index.d.ts +2 -2
  75. package/dist/src/proto/index.js +1 -1
  76. package/dist/src/proto/types.d.ts +1 -1
  77. package/dist/src/space-archive.d.ts +60 -1
  78. package/dist/src/space-archive.d.ts.map +1 -1
  79. package/dist/src/space-archive.js +13 -1
  80. package/dist/src/space-archive.js.map +1 -1
  81. package/dist/src/types.d.ts +2 -2
  82. package/dist/tsconfig.tsbuildinfo +1 -1
  83. package/package.json +14 -14
  84. package/src/FeedProtocol.ts +320 -0
  85. package/src/FunctionProtocol.ts +2 -4
  86. package/src/buf/proto/gen/dxos/agent/dashboard_pb.ts +1 -1
  87. package/src/buf/proto/gen/dxos/agent/echo-proxy_pb.ts +1 -1
  88. package/src/buf/proto/gen/dxos/agent/epoch_pb.ts +1 -1
  89. package/src/buf/proto/gen/dxos/agent/functions_pb.ts +1 -1
  90. package/src/buf/proto/gen/dxos/bot_pb.ts +1 -1
  91. package/src/buf/proto/gen/dxos/client/invitation_pb.ts +1 -1
  92. package/src/buf/proto/gen/dxos/client/logging_pb.ts +1 -1
  93. package/src/buf/proto/gen/dxos/client/queue_pb.ts +51 -2
  94. package/src/buf/proto/gen/dxos/client/services_pb.ts +7 -2
  95. package/src/buf/proto/gen/dxos/config_pb.ts +2 -7
  96. package/src/buf/proto/gen/dxos/devtools/diagnostics_pb.ts +1 -1
  97. package/src/buf/proto/gen/dxos/devtools/host_pb.ts +1 -1
  98. package/src/buf/proto/gen/dxos/devtools/swarm_pb.ts +1 -1
  99. package/src/buf/proto/gen/dxos/echo/blob_pb.ts +1 -1
  100. package/src/buf/proto/gen/dxos/echo/feed_pb.ts +1 -1
  101. package/src/buf/proto/gen/dxos/echo/filter_pb.ts +1 -1
  102. package/src/buf/proto/gen/dxos/echo/indexing_pb.ts +1 -1
  103. package/src/buf/proto/gen/dxos/echo/metadata_pb.ts +1 -1
  104. package/src/buf/proto/gen/dxos/echo/model/document_pb.ts +1 -1
  105. package/src/buf/proto/gen/dxos/echo/model/messenger_pb.ts +1 -1
  106. package/src/buf/proto/gen/dxos/echo/model/text_pb.ts +1 -1
  107. package/src/buf/proto/gen/dxos/echo/object_pb.ts +1 -1
  108. package/src/buf/proto/gen/dxos/echo/query_pb.ts +1 -1
  109. package/src/buf/proto/gen/dxos/echo/service_pb.ts +1 -1
  110. package/src/buf/proto/gen/dxos/echo/snapshot_pb.ts +1 -1
  111. package/src/buf/proto/gen/dxos/echo/timeframe_pb.ts +1 -1
  112. package/src/buf/proto/gen/dxos/edge/calls_pb.ts +1 -1
  113. package/src/buf/proto/gen/dxos/edge/messenger_pb.ts +39 -6
  114. package/src/buf/proto/gen/dxos/edge/signal_pb.ts +1 -1
  115. package/src/buf/proto/gen/dxos/error_pb.ts +1 -1
  116. package/src/buf/proto/gen/dxos/field_options_pb.ts +1 -1
  117. package/src/buf/proto/gen/dxos/google_pb.ts +1 -1
  118. package/src/buf/proto/gen/dxos/gravity_pb.ts +1 -1
  119. package/src/buf/proto/gen/dxos/halo/credentials/auth_pb.ts +1 -1
  120. package/src/buf/proto/gen/dxos/halo/credentials/greet_pb.ts +1 -1
  121. package/src/buf/proto/gen/dxos/halo/credentials/identity_pb.ts +1 -1
  122. package/src/buf/proto/gen/dxos/halo/credentials_pb.ts +2 -1
  123. package/src/buf/proto/gen/dxos/halo/invitations_pb.ts +1 -1
  124. package/src/buf/proto/gen/dxos/halo/keyring_pb.ts +1 -1
  125. package/src/buf/proto/gen/dxos/halo/keys_pb.ts +1 -1
  126. package/src/buf/proto/gen/dxos/halo/signed_pb.ts +1 -1
  127. package/src/buf/proto/gen/dxos/iframe_pb.ts +1 -1
  128. package/src/buf/proto/gen/dxos/keys_pb.ts +1 -1
  129. package/src/buf/proto/gen/dxos/mesh/bridge_pb.ts +1 -1
  130. package/src/buf/proto/gen/dxos/mesh/broadcast_pb.ts +1 -1
  131. package/src/buf/proto/gen/dxos/mesh/messaging_pb.ts +1 -1
  132. package/src/buf/proto/gen/dxos/mesh/muxer_pb.ts +1 -1
  133. package/src/buf/proto/gen/dxos/mesh/presence_pb.ts +1 -1
  134. package/src/buf/proto/gen/dxos/mesh/protocol_pb.ts +1 -1
  135. package/src/buf/proto/gen/dxos/mesh/replicator_pb.ts +1 -1
  136. package/src/buf/proto/gen/dxos/mesh/signal_pb.ts +1 -1
  137. package/src/buf/proto/gen/dxos/mesh/swarm_pb.ts +1 -1
  138. package/src/buf/proto/gen/dxos/mesh/teleport/admission-discovery_pb.ts +1 -1
  139. package/src/buf/proto/gen/dxos/mesh/teleport/auth_pb.ts +1 -1
  140. package/src/buf/proto/gen/dxos/mesh/teleport/automerge_pb.ts +1 -1
  141. package/src/buf/proto/gen/dxos/mesh/teleport/blobsync_pb.ts +1 -1
  142. package/src/buf/proto/gen/dxos/mesh/teleport/control_pb.ts +1 -1
  143. package/src/buf/proto/gen/dxos/mesh/teleport/gossip_pb.ts +1 -1
  144. package/src/buf/proto/gen/dxos/mesh/teleport/notarization_pb.ts +1 -1
  145. package/src/buf/proto/gen/dxos/mesh/teleport/replicator_pb.ts +1 -1
  146. package/src/buf/proto/gen/dxos/registry_pb.ts +1 -1
  147. package/src/buf/proto/gen/dxos/rpc_pb.ts +1 -1
  148. package/src/buf/proto/gen/dxos/service/agentmanager_pb.ts +1 -1
  149. package/src/buf/proto/gen/dxos/service/publisher_pb.ts +1 -1
  150. package/src/buf/proto/gen/dxos/service/supervisor_pb.ts +1 -1
  151. package/src/buf/proto/gen/dxos/service/tunnel_pb.ts +1 -1
  152. package/src/buf/proto/gen/dxos/tracing_pb.ts +1 -1
  153. package/src/buf/proto/gen/dxos/type_pb.ts +1 -1
  154. package/src/buf/proto/gen/dxos/value_pb.ts +1 -1
  155. package/src/buf/proto/gen/example/testing/data_pb.ts +1 -1
  156. package/src/buf/proto/gen/example/testing/rpc_pb.ts +1 -1
  157. package/src/codec.test.ts +1 -1
  158. package/src/edge/EdgeFunctionEnv.ts +20 -26
  159. package/src/edge/edge.ts +115 -0
  160. package/src/edge/errors.ts +1 -1
  161. package/src/edge/index.ts +3 -3
  162. package/src/errors/encoding.ts +2 -2
  163. package/src/errors/errors.test.ts +1 -1
  164. package/src/errors/errors.ts +2 -2
  165. package/src/errors/helpers.ts +1 -1
  166. package/src/errors/index.ts +5 -5
  167. package/src/index.ts +12 -14
  168. package/src/indexing.test.ts +1 -1
  169. package/src/proto/dxos/client/queue.proto +11 -0
  170. package/src/proto/dxos/client/services.proto +1 -0
  171. package/src/proto/dxos/config.proto +1 -3
  172. package/src/proto/dxos/edge/messenger.proto +10 -0
  173. package/src/proto/dxos/halo/credentials.proto +1 -0
  174. package/src/proto/gen/dxos/client/services.ts +998 -973
  175. package/src/proto/gen/dxos/config.ts +0 -5
  176. package/src/proto/gen/dxos/devtools/host.ts +31 -31
  177. package/src/proto/gen/dxos/edge/messenger.ts +24 -0
  178. package/src/proto/gen/dxos/halo/credentials.ts +1 -1
  179. package/src/proto/gen/google/protobuf.ts +326 -40
  180. package/src/proto/gen/index.ts +27 -1
  181. package/src/proto/index.ts +2 -2
  182. package/src/proto/types.ts +1 -1
  183. package/src/space-archive.ts +70 -1
  184. package/src/types.ts +2 -2
  185. package/dist/src/queue.d.ts +0 -3
  186. package/dist/src/queue.d.ts.map +0 -1
  187. package/dist/src/queue.js +0 -5
  188. package/dist/src/queue.js.map +0 -1
  189. package/src/queue.ts +0 -14
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/protocols",
3
- "version": "0.8.4-main.bc674ce",
3
+ "version": "0.8.4-main.bd9b33e6c8",
4
4
  "description": "Protobuf definitions for DXOS protocols.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -63,23 +63,23 @@
63
63
  "src"
64
64
  ],
65
65
  "dependencies": {
66
- "@bufbuild/protobuf": "2.10.1",
67
- "@dxos/codec-protobuf": "0.8.4-main.bc674ce",
68
- "@dxos/invariant": "0.8.4-main.bc674ce",
69
- "@dxos/errors": "0.8.4-main.bc674ce",
70
- "@dxos/timeframe": "0.8.4-main.bc674ce",
71
- "@dxos/util": "0.8.4-main.bc674ce",
72
- "@dxos/keys": "0.8.4-main.bc674ce",
73
- "@dxos/effect": "0.8.4-main.bc674ce"
66
+ "@bufbuild/protobuf": "2.11.0",
67
+ "@dxos/codec-protobuf": "0.8.4-main.bd9b33e6c8",
68
+ "@dxos/effect": "0.8.4-main.bd9b33e6c8",
69
+ "@dxos/errors": "0.8.4-main.bd9b33e6c8",
70
+ "@dxos/invariant": "0.8.4-main.bd9b33e6c8",
71
+ "@dxos/timeframe": "0.8.4-main.bd9b33e6c8",
72
+ "@dxos/keys": "0.8.4-main.bd9b33e6c8",
73
+ "@dxos/util": "0.8.4-main.bd9b33e6c8"
74
74
  },
75
75
  "devDependencies": {
76
- "@bufbuild/buf": "1.61.0",
77
- "@bufbuild/protoc-gen-es": "2.10.1",
78
- "effect": "3.19.11",
79
- "@dxos/protobuf-compiler": "0.8.4-main.bc674ce"
76
+ "@bufbuild/buf": "1.65.0",
77
+ "@bufbuild/protoc-gen-es": "2.11.0",
78
+ "effect": "3.20.0",
79
+ "@dxos/protobuf-compiler": "0.8.4-main.bd9b33e6c8"
80
80
  },
81
81
  "peerDependencies": {
82
- "effect": "3.19.11"
82
+ "effect": "3.20.0"
83
83
  },
84
84
  "publishConfig": {
85
85
  "access": "public"
@@ -0,0 +1,320 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ export {
6
+ type QueueService,
7
+ type QueueQuery,
8
+ type QueueQueryResult as QueryResult,
9
+ type QueryQueueRequest,
10
+ type InsertIntoQueueRequest,
11
+ type DeleteFromQueueRequest,
12
+ type SyncQueueRequest,
13
+ } from './proto/gen/dxos/client/services.js';
14
+
15
+ export const KEY_QUEUE_POSITION = 'org.dxos.key.queue-position';
16
+
17
+ import * as Schema from 'effect/Schema';
18
+
19
+ import { invariant } from '@dxos/invariant';
20
+ import { SpaceId } from '@dxos/keys';
21
+
22
+ import { EdgeService } from './edge/edge.js';
23
+
24
+ /**
25
+ * Opaque pagination cursor for feed queries.
26
+ */
27
+ export const FeedCursor = Schema.String.pipe(Schema.brand('@dxos/feed/FeedCursor'));
28
+ export type FeedCursor = Schema.Schema.Type<typeof FeedCursor>;
29
+
30
+ /**
31
+ * Replicated queue block payload and ordering metadata.
32
+ */
33
+ export const Block = Schema.Struct({
34
+ /**
35
+ * Appears on blocks returned from query.
36
+ */
37
+ feedId: Schema.UndefinedOr(Schema.String),
38
+
39
+ /**
40
+ * Actor that produced this block.
41
+ */
42
+ actorId: Schema.String,
43
+
44
+ /**
45
+ * Per-feed monotonic sequence assigned by the actor.
46
+ */
47
+ sequence: Schema.Number,
48
+
49
+ /**
50
+ * Actor of the immediate predecessor block, if any.
51
+ */
52
+ prevActorId: Schema.NullOr(Schema.String),
53
+
54
+ /**
55
+ * Sequence of the immediate predecessor block, if any.
56
+ */
57
+ prevSequence: Schema.NullOr(Schema.Number),
58
+
59
+ /**
60
+ * Globally ordered position assigned by a position authority.
61
+ * Unlike `sequence` (per-feed causal order), this enables merged incremental reads across feeds.
62
+ */
63
+ position: Schema.NullOr(Schema.Number),
64
+
65
+ /**
66
+ * Milliseconds since Unix epoch when the block was created.
67
+ */
68
+ timestamp: Schema.Number,
69
+
70
+ /**
71
+ * Serialized application payload.
72
+ */
73
+ data: Schema.Uint8Array,
74
+
75
+ /**
76
+ * Local insertion ID.
77
+ * Not replicated.
78
+ */
79
+ // TODO(dmaretskyi): Remove. Use cursors.
80
+ insertionId: Schema.optional(Schema.Number),
81
+ });
82
+ export interface Block extends Schema.Schema.Type<typeof Block> {}
83
+
84
+ //
85
+ // RPC Schemas
86
+ //
87
+
88
+ /**
89
+ * Query parameters for retrieving blocks from one namespace in one space.
90
+ */
91
+ export const QueryRequest = Schema.Struct({
92
+ /**
93
+ * Optional request correlation identifier.
94
+ */
95
+ requestId: Schema.optional(Schema.String),
96
+
97
+ /**
98
+ * Target space identifier.
99
+ */
100
+ spaceId: SpaceId,
101
+
102
+ /**
103
+ * Feed namespace to query.
104
+ */
105
+ feedNamespace: Schema.String,
106
+
107
+ query: Schema.optional(
108
+ Schema.Union(
109
+ Schema.Struct({
110
+ /**
111
+ * Explicit list of feed IDs to read from.
112
+ */
113
+ feedIds: Schema.Array(Schema.String),
114
+ }),
115
+ Schema.Struct({
116
+ /**
117
+ * Existing subscription to resolve feed IDs from.
118
+ */
119
+ subscriptionId: Schema.String,
120
+ }),
121
+ ),
122
+ ),
123
+
124
+ /**
125
+ * Get changes following this cursor (exclusive).
126
+ *
127
+ * Must not be used with `position`.
128
+ */
129
+ cursor: Schema.optional(FeedCursor),
130
+
131
+ /**
132
+ * Get changes following this position.
133
+ * Returned blocks have strictly greater position than this.
134
+ *
135
+ * Must not be used with `cursor`.
136
+ */
137
+ position: Schema.optional(Schema.Number),
138
+
139
+ /**
140
+ * Only return blocks that are not positioned.
141
+ *
142
+ * Must not be used with `cursor` or `position`.
143
+ */
144
+ unpositionedOnly: Schema.optional(Schema.Boolean),
145
+
146
+ /**
147
+ * Maximum number of blocks to return.
148
+ */
149
+ limit: Schema.optional(Schema.Number),
150
+ });
151
+ export interface QueryRequest extends Schema.Schema.Type<typeof QueryRequest> {}
152
+
153
+ /**
154
+ * Result payload for a query operation.
155
+ */
156
+ export const QueryResponse = Schema.Struct({
157
+ /**
158
+ * Echoed request correlation identifier.
159
+ */
160
+ requestId: Schema.optional(Schema.String),
161
+
162
+ /**
163
+ * Cursor to continue reading from this result boundary.
164
+ */
165
+ nextCursor: FeedCursor,
166
+
167
+ /**
168
+ * Indicates whether more matching blocks are available.
169
+ */
170
+ hasMore: Schema.Boolean,
171
+
172
+ /**
173
+ * Returned blocks for the current page.
174
+ */
175
+ blocks: Schema.Array(Block),
176
+ });
177
+ export interface QueryResponse extends Schema.Schema.Type<typeof QueryResponse> {}
178
+
179
+ /**
180
+ * Parameters for creating or refreshing a feed subscription.
181
+ */
182
+ export const SubscribeRequest = Schema.Struct({
183
+ /**
184
+ * Optional request correlation identifier.
185
+ */
186
+ requestId: Schema.optional(Schema.String),
187
+
188
+ /**
189
+ * Optional space scope for the subscription.
190
+ */
191
+ spaceId: Schema.optional(Schema.String),
192
+
193
+ /**
194
+ * Feeds to include in the subscription.
195
+ */
196
+ feedIds: Schema.Array(Schema.String),
197
+ });
198
+ export interface SubscribeRequest extends Schema.Schema.Type<typeof SubscribeRequest> {}
199
+
200
+ /**
201
+ * Response payload for subscription creation.
202
+ */
203
+ export const SubscribeResponse = Schema.Struct({
204
+ /**
205
+ * Echoed request correlation identifier.
206
+ */
207
+ requestId: Schema.optional(Schema.String),
208
+
209
+ /**
210
+ * Identifier to use in subsequent subscription queries.
211
+ */
212
+ subscriptionId: Schema.String,
213
+
214
+ /**
215
+ * Expiration timestamp in milliseconds since Unix epoch.
216
+ */
217
+ expiresAt: Schema.Number,
218
+ });
219
+ export interface SubscribeResponse extends Schema.Schema.Type<typeof SubscribeResponse> {}
220
+
221
+ /**
222
+ * Request payload for appending one or more blocks.
223
+ */
224
+ export const AppendRequest = Schema.Struct({
225
+ /**
226
+ * Optional request correlation identifier.
227
+ */
228
+ requestId: Schema.optional(Schema.String),
229
+
230
+ /**
231
+ * Target space identifier.
232
+ */
233
+ spaceId: Schema.String,
234
+
235
+ /**
236
+ * Namespace that all appended blocks belong to.
237
+ */
238
+ feedNamespace: Schema.String,
239
+
240
+ /**
241
+ * Blocks to append.
242
+ */
243
+ blocks: Schema.Array(Block),
244
+ });
245
+ export interface AppendRequest extends Schema.Schema.Type<typeof AppendRequest> {}
246
+
247
+ /**
248
+ * Result payload for append operations.
249
+ */
250
+ export const AppendResponse = Schema.Struct({
251
+ /**
252
+ * Echoed request correlation identifier.
253
+ */
254
+ requestId: Schema.optional(Schema.String),
255
+
256
+ /**
257
+ * Assigned global positions for appended blocks.
258
+ */
259
+ positions: Schema.Array(Schema.Number),
260
+ });
261
+ export interface AppendResponse extends Schema.Schema.Type<typeof AppendResponse> {}
262
+
263
+ /**
264
+ * Tagged transport message union for queue protocol RPC traffic.
265
+ */
266
+ export const ProtocolMessage = Schema.Union(
267
+ Schema.TaggedStruct('QueryRequest', QueryRequest.fields),
268
+ Schema.TaggedStruct('QueryResponse', QueryResponse.fields),
269
+ Schema.TaggedStruct('SubscribeRequest', SubscribeRequest.fields),
270
+ Schema.TaggedStruct('SubscribeResponse', SubscribeResponse.fields),
271
+ Schema.TaggedStruct('AppendRequest', AppendRequest.fields),
272
+ Schema.TaggedStruct('AppendResponse', AppendResponse.fields),
273
+ Schema.TaggedStruct('Error', {
274
+ /**
275
+ * Human-readable error message.
276
+ */
277
+ message: Schema.String,
278
+ }),
279
+ ).pipe(
280
+ Schema.extend(
281
+ Schema.Struct({
282
+ senderPeerId: Schema.UndefinedOr(Schema.String),
283
+ /**
284
+ * Could be undefined if the recipient could be assumed from the context.
285
+ */
286
+ recipientPeerId: Schema.UndefinedOr(Schema.String),
287
+ }),
288
+ ),
289
+ );
290
+ export type ProtocolMessage = Schema.Schema.Type<typeof ProtocolMessage>;
291
+
292
+ /**
293
+ * Reserved namespaces with protocol-level semantics.
294
+ */
295
+ export const WellKnownNamespaces = {
296
+ data: 'data',
297
+ trace: 'trace',
298
+ } as const;
299
+
300
+ export const isWellKnownNamespace = (namespace: string) =>
301
+ Object.values(WellKnownNamespaces).includes(namespace as any);
302
+
303
+ /**
304
+ * Encodes queue replicator service identifier as `<service>:<namespace>:<spaceId>`.
305
+ */
306
+ export const encodeServiceId = (namespace: string, spaceId: SpaceId) =>
307
+ `${EdgeService.QUEUE_REPLICATOR}:${namespace}:${spaceId}`;
308
+
309
+ /**
310
+ * Decodes and validates queue replicator service identifier.
311
+ */
312
+ export const decodeServiceId = (
313
+ serviceId: string,
314
+ ): { namespace: keyof typeof WellKnownNamespaces; spaceId: SpaceId } => {
315
+ const [service, namespace, spaceId] = serviceId.split(':');
316
+ invariant(service === EdgeService.QUEUE_REPLICATOR, `Invalid service: ${service}`);
317
+ invariant(isWellKnownNamespace(namespace), `Invalid namespace: ${namespace}`);
318
+ invariant(SpaceId.isValid(spaceId), `Invalid spaceId: ${spaceId}`);
319
+ return { namespace: namespace as keyof typeof WellKnownNamespaces, spaceId };
320
+ };
@@ -7,7 +7,7 @@ import type * as QueryProto from '@dxos/protocols/proto/dxos/echo/query';
7
7
  import type * as DataProto from '@dxos/protocols/proto/dxos/echo/service';
8
8
 
9
9
  import { type EdgeFunctionEnv } from './edge';
10
- import { type QueueService } from './queue';
10
+ import type * as FeedProtocol from './FeedProtocol';
11
11
 
12
12
  //
13
13
  // Function protocol definition
@@ -18,8 +18,6 @@ import { type QueueService } from './queue';
18
18
  // - Protobuf service definitions are allowed (Q: What about PublicKey, Timeframe, etc.).
19
19
  // - Breaking changes in this interface should be carefully considered.
20
20
 
21
- // TODO(dmaretskyi): Consider moving this to protocols.
22
-
23
21
  /**
24
22
  * Function implementation.
25
23
  * This is a contract between the user-defined function and the runtime.
@@ -77,7 +75,7 @@ export interface Context {
77
75
  * Queue service.
78
76
  * Available if the function is invoked in context of a space.
79
77
  */
80
- queueService?: QueueService;
78
+ queueService?: FeedProtocol.QueueService;
81
79
 
82
80
  /**
83
81
  * Functions service.
@@ -2,7 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- // @generated by protoc-gen-es v2.10.1 with parameter "target=ts,import_extension=js"
5
+ // @generated by protoc-gen-es v2.11.0 with parameter "target=ts,import_extension=js"
6
6
  // @generated from file dxos/agent/dashboard.proto (package dxos.agent.dashboard, syntax proto3)
7
7
  /* eslint-disable */
8
8
 
@@ -2,7 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- // @generated by protoc-gen-es v2.10.1 with parameter "target=ts,import_extension=js"
5
+ // @generated by protoc-gen-es v2.11.0 with parameter "target=ts,import_extension=js"
6
6
  // @generated from file dxos/agent/echo-proxy.proto (package dxos.agent.echoproxy, syntax proto3)
7
7
  /* eslint-disable */
8
8
 
@@ -2,7 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- // @generated by protoc-gen-es v2.10.1 with parameter "target=ts,import_extension=js"
5
+ // @generated by protoc-gen-es v2.11.0 with parameter "target=ts,import_extension=js"
6
6
  // @generated from file dxos/agent/epoch.proto (package dxos.agent.epoch, syntax proto3)
7
7
  /* eslint-disable */
8
8
 
@@ -2,7 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- // @generated by protoc-gen-es v2.10.1 with parameter "target=ts,import_extension=js"
5
+ // @generated by protoc-gen-es v2.11.0 with parameter "target=ts,import_extension=js"
6
6
  // @generated from file dxos/agent/functions.proto (package dxos.agent.functions, syntax proto3)
7
7
  /* eslint-disable */
8
8
 
@@ -2,7 +2,7 @@
2
2
  // Copyright 2020 DXOS.org
3
3
  //
4
4
 
5
- // @generated by protoc-gen-es v2.10.1 with parameter "target=ts,import_extension=js"
5
+ // @generated by protoc-gen-es v2.11.0 with parameter "target=ts,import_extension=js"
6
6
  // @generated from file dxos/bot.proto (package dxos.bot, syntax proto3)
7
7
  /* eslint-disable */
8
8
 
@@ -2,7 +2,7 @@
2
2
  // Copyright 2021 DXOS.org
3
3
  //
4
4
 
5
- // @generated by protoc-gen-es v2.10.1 with parameter "target=ts,import_extension=js"
5
+ // @generated by protoc-gen-es v2.11.0 with parameter "target=ts,import_extension=js"
6
6
  // @generated from file dxos/client/invitation.proto (package dxos.client.services, syntax proto3)
7
7
  /* eslint-disable */
8
8
 
@@ -2,7 +2,7 @@
2
2
  // Copyright 2021 DXOS.org
3
3
  //
4
4
 
5
- // @generated by protoc-gen-es v2.10.1 with parameter "target=ts,import_extension=js"
5
+ // @generated by protoc-gen-es v2.11.0 with parameter "target=ts,import_extension=js"
6
6
  // @generated from file dxos/client/logging.proto (package dxos.client.services, syntax proto3)
7
7
  /* eslint-disable */
8
8
 
@@ -1,4 +1,4 @@
1
- // @generated by protoc-gen-es v2.10.1 with parameter "target=ts,import_extension=js"
1
+ // @generated by protoc-gen-es v2.11.0 with parameter "target=ts,import_extension=js"
2
2
  // @generated from file dxos/client/queue.proto (package dxos.client.services, syntax proto3)
3
3
  /* eslint-disable */
4
4
 
@@ -12,7 +12,7 @@ import type { JsonObject, Message } from "@bufbuild/protobuf";
12
12
  * Describes the file dxos/client/queue.proto.
13
13
  */
14
14
  export const file_dxos_client_queue: GenFile = /*@__PURE__*/
15
- fileDesc("ChdkeG9zL2NsaWVudC9xdWV1ZS5wcm90bxIUZHhvcy5jbGllbnQuc2VydmljZXMi0wIKClF1ZXVlUXVlcnkSEAoIc3BhY2VfaWQYASABKAkSHQoQcXVldWVzX25hbWVzcGFjZRgCIAEoCUgAiAEBEhEKCXF1ZXVlX2lkcxgDIAMoCRISCgVhZnRlchgEIAEoCUgBiAEBEhMKBmJlZm9yZRgFIAEoCUgCiAEBEhsKDmJlZ2luX3Bvc2l0aW9uGAYgASgDSAOIAQESGQoMZW5kX3Bvc2l0aW9uGAcgASgDSASIAQESEgoFbGltaXQYCCABKAVIBYgBARIUCgdyZXZlcnNlGAkgASgISAaIAQESEgoKb2JqZWN0X2lkcxhkIAMoCUITChFfcXVldWVzX25hbWVzcGFjZUIICgZfYWZ0ZXJCCQoHX2JlZm9yZUIRCg9fYmVnaW5fcG9zaXRpb25CDwoNX2VuZF9wb3NpdGlvbkIICgZfbGltaXRCCgoIX3JldmVyc2UiZgoQUXVldWVRdWVyeVJlc3VsdBIoCgdvYmplY3RzGAEgAygLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBITCgtuZXh0X2N1cnNvchgCIAEoCRITCgtwcmV2X2N1cnNvchgDIAEoCSJEChFRdWVyeVF1ZXVlUmVxdWVzdBIvCgVxdWVyeRgBIAEoCzIgLmR4b3MuY2xpZW50LnNlcnZpY2VzLlF1ZXVlUXVlcnkifAoWSW5zZXJ0SW50b1F1ZXVlUmVxdWVzdBIUCgxzdWJzcGFjZV90YWcYASABKAkSEAoIc3BhY2VfaWQYAiABKAkSEAoIcXVldWVfaWQYAyABKAkSKAoHb2JqZWN0cxgEIAMoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QiZgoWRGVsZXRlRnJvbVF1ZXVlUmVxdWVzdBIUCgxzdWJzcGFjZV90YWcYASABKAkSEAoIc3BhY2VfaWQYAiABKAkSEAoIcXVldWVfaWQYAyABKAkSEgoKb2JqZWN0X2lkcxgEIAMoCTKfAgoMUXVldWVTZXJ2aWNlEl0KClF1ZXJ5UXVldWUSJy5keG9zLmNsaWVudC5zZXJ2aWNlcy5RdWVyeVF1ZXVlUmVxdWVzdBomLmR4b3MuY2xpZW50LnNlcnZpY2VzLlF1ZXVlUXVlcnlSZXN1bHQSVwoPSW5zZXJ0SW50b1F1ZXVlEiwuZHhvcy5jbGllbnQuc2VydmljZXMuSW5zZXJ0SW50b1F1ZXVlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJXCg9EZWxldGVGcm9tUXVldWUSLC5keG9zLmNsaWVudC5zZXJ2aWNlcy5EZWxldGVGcm9tUXVldWVSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5YgZwcm90bzM", [file_google_protobuf_struct, file_google_protobuf_empty]);
15
+ fileDesc("ChdkeG9zL2NsaWVudC9xdWV1ZS5wcm90bxIUZHhvcy5jbGllbnQuc2VydmljZXMi0wIKClF1ZXVlUXVlcnkSEAoIc3BhY2VfaWQYASABKAkSHQoQcXVldWVzX25hbWVzcGFjZRgCIAEoCUgAiAEBEhEKCXF1ZXVlX2lkcxgDIAMoCRISCgVhZnRlchgEIAEoCUgBiAEBEhMKBmJlZm9yZRgFIAEoCUgCiAEBEhsKDmJlZ2luX3Bvc2l0aW9uGAYgASgDSAOIAQESGQoMZW5kX3Bvc2l0aW9uGAcgASgDSASIAQESEgoFbGltaXQYCCABKAVIBYgBARIUCgdyZXZlcnNlGAkgASgISAaIAQESEgoKb2JqZWN0X2lkcxhkIAMoCUITChFfcXVldWVzX25hbWVzcGFjZUIICgZfYWZ0ZXJCCQoHX2JlZm9yZUIRCg9fYmVnaW5fcG9zaXRpb25CDwoNX2VuZF9wb3NpdGlvbkIICgZfbGltaXRCCgoIX3JldmVyc2UiZgoQUXVldWVRdWVyeVJlc3VsdBIoCgdvYmplY3RzGAEgAygLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBITCgtuZXh0X2N1cnNvchgCIAEoCRITCgtwcmV2X2N1cnNvchgDIAEoCSJEChFRdWVyeVF1ZXVlUmVxdWVzdBIvCgVxdWVyeRgBIAEoCzIgLmR4b3MuY2xpZW50LnNlcnZpY2VzLlF1ZXVlUXVlcnkifAoWSW5zZXJ0SW50b1F1ZXVlUmVxdWVzdBIUCgxzdWJzcGFjZV90YWcYASABKAkSEAoIc3BhY2VfaWQYAiABKAkSEAoIcXVldWVfaWQYAyABKAkSKAoHb2JqZWN0cxgEIAMoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QiZgoWRGVsZXRlRnJvbVF1ZXVlUmVxdWVzdBIUCgxzdWJzcGFjZV90YWcYASABKAkSEAoIc3BhY2VfaWQYAiABKAkSEAoIcXVldWVfaWQYAyABKAkSEgoKb2JqZWN0X2lkcxgEIAMoCSKgAQoQU3luY1F1ZXVlUmVxdWVzdBIUCgxzdWJzcGFjZV90YWcYASABKAkSEAoIc3BhY2VfaWQYAiABKAkSEAoIcXVldWVfaWQYAyABKAkSGAoLc2hvdWxkX3B1c2gYBCABKAhIAIgBARIYCgtzaG91bGRfcHVsbBgFIAEoCEgBiAEBQg4KDF9zaG91bGRfcHVzaEIOCgxfc2hvdWxkX3B1bGwy7AIKDFF1ZXVlU2VydmljZRJdCgpRdWVyeVF1ZXVlEicuZHhvcy5jbGllbnQuc2VydmljZXMuUXVlcnlRdWV1ZVJlcXVlc3QaJi5keG9zLmNsaWVudC5zZXJ2aWNlcy5RdWV1ZVF1ZXJ5UmVzdWx0ElcKD0luc2VydEludG9RdWV1ZRIsLmR4b3MuY2xpZW50LnNlcnZpY2VzLkluc2VydEludG9RdWV1ZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSVwoPRGVsZXRlRnJvbVF1ZXVlEiwuZHhvcy5jbGllbnQuc2VydmljZXMuRGVsZXRlRnJvbVF1ZXVlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJLCglTeW5jUXVldWUSJi5keG9zLmNsaWVudC5zZXJ2aWNlcy5TeW5jUXVldWVSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5YgZwcm90bzM", [file_google_protobuf_struct, file_google_protobuf_empty]);
16
16
 
17
17
  /**
18
18
  * @generated from message dxos.client.services.QueueQuery
@@ -198,6 +198,47 @@ export type DeleteFromQueueRequest = Message<"dxos.client.services.DeleteFromQue
198
198
  export const DeleteFromQueueRequestSchema: GenMessage<DeleteFromQueueRequest> = /*@__PURE__*/
199
199
  messageDesc(file_dxos_client_queue, 4);
200
200
 
201
+ /**
202
+ * @generated from message dxos.client.services.SyncQueueRequest
203
+ */
204
+ export type SyncQueueRequest = Message<"dxos.client.services.SyncQueueRequest"> & {
205
+ /**
206
+ * @generated from field: string subspace_tag = 1;
207
+ */
208
+ subspaceTag: string;
209
+
210
+ /**
211
+ * @generated from field: string space_id = 2;
212
+ */
213
+ spaceId: string;
214
+
215
+ /**
216
+ * @generated from field: string queue_id = 3;
217
+ */
218
+ queueId: string;
219
+
220
+ /**
221
+ * / Whether to push local changes to the server. Defaults to true.
222
+ *
223
+ * @generated from field: optional bool should_push = 4;
224
+ */
225
+ shouldPush?: boolean;
226
+
227
+ /**
228
+ * / Whether to pull remote changes from the server. Defaults to true.
229
+ *
230
+ * @generated from field: optional bool should_pull = 5;
231
+ */
232
+ shouldPull?: boolean;
233
+ };
234
+
235
+ /**
236
+ * Describes the message dxos.client.services.SyncQueueRequest.
237
+ * Use `create(SyncQueueRequestSchema)` to create a new message.
238
+ */
239
+ export const SyncQueueRequestSchema: GenMessage<SyncQueueRequest> = /*@__PURE__*/
240
+ messageDesc(file_dxos_client_queue, 5);
241
+
201
242
  /**
202
243
  * @generated from service dxos.client.services.QueueService
203
244
  */
@@ -226,6 +267,14 @@ export const QueueService: GenService<{
226
267
  input: typeof DeleteFromQueueRequestSchema;
227
268
  output: typeof EmptySchema;
228
269
  },
270
+ /**
271
+ * @generated from rpc dxos.client.services.QueueService.SyncQueue
272
+ */
273
+ syncQueue: {
274
+ methodKind: "unary";
275
+ input: typeof SyncQueueRequestSchema;
276
+ output: typeof EmptySchema;
277
+ },
229
278
  }> = /*@__PURE__*/
230
279
  serviceDesc(file_dxos_client_queue, 0);
231
280
 
@@ -2,7 +2,7 @@
2
2
  // Copyright 2021 DXOS.org
3
3
  //
4
4
 
5
- // @generated by protoc-gen-es v2.10.1 with parameter "target=ts,import_extension=js"
5
+ // @generated by protoc-gen-es v2.11.0 with parameter "target=ts,import_extension=js"
6
6
  // @generated from file dxos/client/services.proto (package dxos.client.services, syntax proto3)
7
7
  /* eslint-disable */
8
8
 
@@ -45,7 +45,7 @@ import type { JsonObject, Message } from "@bufbuild/protobuf";
45
45
  * Describes the file dxos/client/services.proto.
46
46
  */
47
47
  export const file_dxos_client_services: GenFile = /*@__PURE__*/
48
- fileDesc("ChpkeG9zL2NsaWVudC9zZXJ2aWNlcy5wcm90bxIUZHhvcy5jbGllbnQuc2VydmljZXMiSQoTVXBkYXRlU3RhdHVzUmVxdWVzdBIyCgZzdGF0dXMYASABKA4yIi5keG9zLmNsaWVudC5zZXJ2aWNlcy5TeXN0ZW1TdGF0dXMiOAoSUXVlcnlTdGF0dXNSZXF1ZXN0EhUKCGludGVydmFsGAEgASgFSACIAQFCCwoJX2ludGVydmFsIkkKE1F1ZXJ5U3RhdHVzUmVzcG9uc2USMgoGc3RhdHVzGAEgASgOMiIuZHhvcy5jbGllbnQuc2VydmljZXMuU3lzdGVtU3RhdHVzIp8BChVHZXREaWFnbm9zdGljc1JlcXVlc3QSSQoEa2V5cxgBIAEoDjI2LmR4b3MuY2xpZW50LnNlcnZpY2VzLkdldERpYWdub3N0aWNzUmVxdWVzdC5LRVlfT1BUSU9OSACIAQEiMgoKS0VZX09QVElPThIICgROT05FEAASDAoIVFJVTkNBVEUQARIMCghIVU1BTklaRRACQgcKBV9rZXlzInUKFkdldERpYWdub3N0aWNzUmVzcG9uc2USLQoJdGltZXN0YW1wGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIsCgtkaWFnbm9zdGljcxgCIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3Qi5AIKCFBsYXRmb3JtEjoKBHR5cGUYASABKA4yLC5keG9zLmNsaWVudC5zZXJ2aWNlcy5QbGF0Zm9ybS5QTEFURk9STV9UWVBFEhcKCnVzZXJfYWdlbnQYAiABKAlIAIgBARIVCghwbGF0Zm9ybRgDIAEoCUgBiAEBEhEKBGFyY2gYBCABKAlIAogBARIUCgdydW50aW1lGAUgASgJSAOIAQESEwoGdXB0aW1lGAYgASgNSASIAQESLAoGbWVtb3J5GAcgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgFiAEBIjkKDVBMQVRGT1JNX1RZUEUSCwoHQlJPV1NFUhAAEhEKDVNIQVJFRF9XT1JLRVIQARIICgROT0RFEAJCDQoLX3VzZXJfYWdlbnRCCwoJX3BsYXRmb3JtQgcKBV9hcmNoQgoKCF9ydW50aW1lQgkKB191cHRpbWVCCQoHX21lbW9yeSLJAQoISWRlbnRpdHkSCwoDZGlkGAQgASgJEioKDGlkZW50aXR5X2tleRgBIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkSLAoJc3BhY2Vfa2V5GAIgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleUgAiAEBEjwKB3Byb2ZpbGUYAyABKAsyJi5keG9zLmhhbG8uY3JlZGVudGlhbHMuUHJvZmlsZURvY3VtZW50SAGIAQFCDAoKX3NwYWNlX2tleUIKCghfcHJvZmlsZSKPAQogUmVxdWVzdFJlY292ZXJ5Q2hhbGxlbmdlUmVzcG9uc2USKAoKZGV2aWNlX2tleRgBIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkSLgoQY29udHJvbF9mZWVkX2tleRgCIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkSEQoJY2hhbGxlbmdlGAMgASgJIroDChZSZWNvdmVySWRlbnRpdHlSZXF1ZXN0EhcKDXJlY292ZXJ5X2NvZGUYASABKAlIABJSCghleHRlcm5hbBgCIAEoCzI+LmR4b3MuY2xpZW50LnNlcnZpY2VzLlJlY292ZXJJZGVudGl0eVJlcXVlc3QuRXh0ZXJuYWxTaWduYXR1cmVIABIPCgV0b2tlbhgDIAEoCUgAGpYCChFFeHRlcm5hbFNpZ25hdHVyZRIoCgpsb29rdXBfa2V5GAEgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRIoCgpkZXZpY2Vfa2V5GAIgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRIuChBjb250cm9sX2ZlZWRfa2V5GAMgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRIRCglzaWduYXR1cmUYBCABKAwSHQoQY2xpZW50X2RhdGFfanNvbhgFIAEoDEgAiAEBEh8KEmF1dGhlbnRpY2F0b3JfZGF0YRgGIAEoDEgBiAEBQhMKEV9jbGllbnRfZGF0YV9qc29uQhUKE19hdXRoZW50aWNhdG9yX2RhdGFCCQoHcmVxdWVzdCKBAQoWUmVjb3ZlcnlDcmVkZW50aWFsRGF0YRIqCgxyZWNvdmVyeV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5EigKCmxvb2t1cF9rZXkYAiABKAsyFC5keG9zLmtleXMuUHVibGljS2V5EhEKCWFsZ29yaXRobRgDIAEoCSJrCh9DcmVhdGVSZWNvdmVyeUNyZWRlbnRpYWxSZXF1ZXN0Ej8KBGRhdGEYASABKAsyLC5keG9zLmNsaWVudC5zZXJ2aWNlcy5SZWNvdmVyeUNyZWRlbnRpYWxEYXRhSACIAQFCBwoFX2RhdGEiUAogQ3JlYXRlUmVjb3ZlcnlDcmVkZW50aWFsUmVzcG9uc2USGgoNcmVjb3ZlcnlfY29kZRgBIAEoCUgAiAEBQhAKDl9yZWNvdmVyeV9jb2RlIlsKFVF1ZXJ5SWRlbnRpdHlSZXNwb25zZRI1CghpZGVudGl0eRgBIAEoCzIeLmR4b3MuY2xpZW50LnNlcnZpY2VzLklkZW50aXR5SACIAQFCCwoJX2lkZW50aXR5InIKF1NpZ25QcmVzZW50YXRpb25SZXF1ZXN0EjkKDHByZXNlbnRhdGlvbhgBIAEoCzIjLmR4b3MuaGFsby5jcmVkZW50aWFscy5QcmVzZW50YXRpb24SEgoFbm9uY2UYAiABKAxIAIgBAUIICgZfbm9uY2UixQEKFUNyZWF0ZUlkZW50aXR5UmVxdWVzdBI8Cgdwcm9maWxlGAEgASgLMiYuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLlByb2ZpbGVEb2N1bWVudEgAiAEBEkkKDmRldmljZV9wcm9maWxlGAMgASgLMiwuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLkRldmljZVByb2ZpbGVEb2N1bWVudEgBiAEBQgoKCF9wcm9maWxlQhEKD19kZXZpY2VfcHJvZmlsZUoECAIQAyKnAgoGRGV2aWNlEigKCmRldmljZV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5Ei4KBGtpbmQYAiABKA4yIC5keG9zLmNsaWVudC5zZXJ2aWNlcy5EZXZpY2VLaW5kEkIKB3Byb2ZpbGUYAyABKAsyLC5keG9zLmhhbG8uY3JlZGVudGlhbHMuRGV2aWNlUHJvZmlsZURvY3VtZW50SACIAQESPAoIcHJlc2VuY2UYBCABKA4yKi5keG9zLmNsaWVudC5zZXJ2aWNlcy5EZXZpY2UuUHJlc2VuY2VTdGF0ZSI1Cg1QcmVzZW5jZVN0YXRlEgsKB09GRkxJTkUQABIKCgZPTkxJTkUQARILCgdSRU1PVkVEEAJCCgoIX3Byb2ZpbGUiRQoUUXVlcnlEZXZpY2VzUmVzcG9uc2USLQoHZGV2aWNlcxgBIAMoCzIcLmR4b3MuY2xpZW50LnNlcnZpY2VzLkRldmljZSKqAQoHQ29udGFjdBIpCgtpZGVudGl0eUtleRgCIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkSPAoHcHJvZmlsZRgBIAEoCzImLmR4b3MuaGFsby5jcmVkZW50aWFscy5Qcm9maWxlRG9jdW1lbnRIAIgBARIqCgxjb21tb25TcGFjZXMYAyADKAsyFC5keG9zLmtleXMuUHVibGljS2V5QgoKCF9wcm9maWxlIj4KC0NvbnRhY3RCb29rEi8KCGNvbnRhY3RzGAEgAygLMh0uZHhvcy5jbGllbnQuc2VydmljZXMuQ29udGFjdCKWAgoLU3BhY2VNZW1iZXISMAoIaWRlbnRpdHkYASABKAsyHi5keG9zLmNsaWVudC5zZXJ2aWNlcy5JZGVudGl0eRJBCghwcmVzZW5jZRgCIAEoDjIvLmR4b3MuY2xpZW50LnNlcnZpY2VzLlNwYWNlTWVtYmVyLlByZXNlbmNlU3RhdGUSMQoKcGVlclN0YXRlcxgDIAMoCzIdLmR4b3MubWVzaC5wcmVzZW5jZS5QZWVyU3RhdGUSNQoEcm9sZRgEIAEoDjInLmR4b3MuaGFsby5jcmVkZW50aWFscy5TcGFjZU1lbWJlci5Sb2xlIigKDVByZXNlbmNlU3RhdGUSCwoHT0ZGTElORRAAEgoKBk9OTElORRABIuYSCgVTcGFjZRIKCgJpZBgFIAEoCRInCglzcGFjZV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5Ei8KBXN0YXRlGAIgASgOMiAuZHhvcy5jbGllbnQuc2VydmljZXMuU3BhY2VTdGF0ZRJACghwaXBlbGluZRgDIAEoCzIpLmR4b3MuY2xpZW50LnNlcnZpY2VzLlNwYWNlLlBpcGVsaW5lU3RhdGVIAIgBARIlCgVlcnJvchgEIAEoCzIRLmR4b3MuZXJyb3IuRXJyb3JIAYgBARJJChBlZGdlX3JlcGxpY2F0aW9uGAYgASgOMiouZHhvcy5lY2hvLm1ldGFkYXRhLkVkZ2VSZXBsaWNhdGlvblNldHRpbmdIAogBARIyCgdtZW1iZXJzGAogAygLMiEuZHhvcy5jbGllbnQuc2VydmljZXMuU3BhY2VNZW1iZXISKgoHY3JlYXRvchgLIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXlIA4gBARIyCgVjYWNoZRgUIAEoCzIeLmR4b3MuZWNoby5tZXRhZGF0YS5TcGFjZUNhY2hlSASIAQESNAoHbWV0cmljcxgVIAEoCzIjLmR4b3MuY2xpZW50LnNlcnZpY2VzLlNwYWNlLk1ldHJpY3Ma1wMKB01ldHJpY3MSLQoEb3BlbhgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBARI8ChNwaXBlbGluZV9pbml0X2JlZ2luGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgBiAEBEj8KFmNvbnRyb2xfcGlwZWxpbmVfcmVhZHkYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAKIAQESOwoSZGF0YV9waXBlbGluZV9vcGVuGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgDiAEBEjwKE2RhdGFfcGlwZWxpbmVfcmVhZHkYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSASIAQESLgoFcmVhZHkYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAWIAQFCBwoFX29wZW5CFgoUX3BpcGVsaW5lX2luaXRfYmVnaW5CGQoXX2NvbnRyb2xfcGlwZWxpbmVfcmVhZHlCFQoTX2RhdGFfcGlwZWxpbmVfb3BlbkIWChRfZGF0YV9waXBlbGluZV9yZWFkeUIICgZfcmVhZHka3AoKDVBpcGVsaW5lU3RhdGUSMwoQY29udHJvbF9mZWVkX2tleRgBIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXlIAIgBARIwCg1kYXRhX2ZlZWRfa2V5GAIgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleUgBiAEBEisKDWNvbnRyb2xfZmVlZHMYEiADKAsyFC5keG9zLmtleXMuUHVibGljS2V5EigKCmRhdGFfZmVlZHMYEyADKAsyFC5keG9zLmtleXMuUHVibGljS2V5Ej0KDWN1cnJlbnRfZXBvY2gYFCABKAsyIS5keG9zLmhhbG8uY3JlZGVudGlhbHMuQ3JlZGVudGlhbEgCiAEBEj0KDWFwcGxpZWRfZXBvY2gYFSABKAsyIS5keG9zLmhhbG8uY3JlZGVudGlhbHMuQ3JlZGVudGlhbEgDiAEBEkwKGWN1cnJlbnRfY29udHJvbF90aW1lZnJhbWUYCiABKAsyJC5keG9zLmVjaG8udGltZWZyYW1lLlRpbWVmcmFtZVZlY3RvckgEiAEBEksKGHRhcmdldF9jb250cm9sX3RpbWVmcmFtZRgLIAEoCzIkLmR4b3MuZWNoby50aW1lZnJhbWUuVGltZWZyYW1lVmVjdG9ySAWIAQESSgoXdG90YWxfY29udHJvbF90aW1lZnJhbWUYDiABKAsyJC5keG9zLmVjaG8udGltZWZyYW1lLlRpbWVmcmFtZVZlY3RvckgGiAEBEkoKF2tub3duX2NvbnRyb2xfdGltZWZyYW1lGA8gASgLMiQuZHhvcy5lY2hvLnRpbWVmcmFtZS5UaW1lZnJhbWVWZWN0b3JIB4gBARJHChRzdGFydF9kYXRhX3RpbWVmcmFtZRhkIAEoCzIkLmR4b3MuZWNoby50aW1lZnJhbWUuVGltZWZyYW1lVmVjdG9ySAiIAQESSQoWY3VycmVudF9kYXRhX3RpbWVmcmFtZRgMIAEoCzIkLmR4b3MuZWNoby50aW1lZnJhbWUuVGltZWZyYW1lVmVjdG9ySAmIAQESSAoVdGFyZ2V0X2RhdGFfdGltZWZyYW1lGA0gASgLMiQuZHhvcy5lY2hvLnRpbWVmcmFtZS5UaW1lZnJhbWVWZWN0b3JICogBARJHChR0b3RhbF9kYXRhX3RpbWVmcmFtZRgQIAEoCzIkLmR4b3MuZWNoby50aW1lZnJhbWUuVGltZWZyYW1lVmVjdG9ySAuIAQESRwoUa25vd25fZGF0YV90aW1lZnJhbWUYESABKAsyJC5keG9zLmVjaG8udGltZWZyYW1lLlRpbWVmcmFtZVZlY3RvckgMiAEBEhsKDnNwYWNlX3Jvb3RfdXJsGBYgASgJSA2IAQFCEwoRX2NvbnRyb2xfZmVlZF9rZXlCEAoOX2RhdGFfZmVlZF9rZXlCEAoOX2N1cnJlbnRfZXBvY2hCEAoOX2FwcGxpZWRfZXBvY2hCHAoaX2N1cnJlbnRfY29udHJvbF90aW1lZnJhbWVCGwoZX3RhcmdldF9jb250cm9sX3RpbWVmcmFtZUIaChhfdG90YWxfY29udHJvbF90aW1lZnJhbWVCGgoYX2tub3duX2NvbnRyb2xfdGltZWZyYW1lQhcKFV9zdGFydF9kYXRhX3RpbWVmcmFtZUIZChdfY3VycmVudF9kYXRhX3RpbWVmcmFtZUIYChZfdGFyZ2V0X2RhdGFfdGltZWZyYW1lQhcKFV90b3RhbF9kYXRhX3RpbWVmcmFtZUIXChVfa25vd25fZGF0YV90aW1lZnJhbWVCEQoPX3NwYWNlX3Jvb3RfdXJsQgsKCV9waXBlbGluZUIICgZfZXJyb3JCEwoRX2VkZ2VfcmVwbGljYXRpb25CCgoIX2NyZWF0b3JCCAoGX2NhY2hlIt0BChJVcGRhdGVTcGFjZVJlcXVlc3QSJwoJc3BhY2Vfa2V5GAEgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRI0CgVzdGF0ZRgCIAEoDjIgLmR4b3MuY2xpZW50LnNlcnZpY2VzLlNwYWNlU3RhdGVIAIgBARJJChBlZGdlX3JlcGxpY2F0aW9uGAMgASgOMiouZHhvcy5lY2hvLm1ldGFkYXRhLkVkZ2VSZXBsaWNhdGlvblNldHRpbmdIAYgBAUIICgZfc3RhdGVCEwoRX2VkZ2VfcmVwbGljYXRpb24iQgoTUXVlcnlTcGFjZXNSZXNwb25zZRIrCgZzcGFjZXMYASADKAsyGy5keG9zLmNsaWVudC5zZXJ2aWNlcy5TcGFjZSJ1ChJQb3N0TWVzc2FnZVJlcXVlc3QSJwoJc3BhY2Vfa2V5GAEgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRIPCgdjaGFubmVsGAIgASgJEiUKB21lc3NhZ2UYAyABKAsyFC5nb29nbGUucHJvdG9idWYuQW55IlQKGFN1YnNjcmliZU1lc3NhZ2VzUmVxdWVzdBInCglzcGFjZV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5Eg8KB2NoYW5uZWwYAiABKAkiegoXV3JpdGVDcmVkZW50aWFsc1JlcXVlc3QSJwoJc3BhY2Vfa2V5GAEgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRI2CgtjcmVkZW50aWFscxgCIAMoCzIhLmR4b3MuaGFsby5jcmVkZW50aWFscy5DcmVkZW50aWFsImQKF1F1ZXJ5Q3JlZGVudGlhbHNSZXF1ZXN0EicKCXNwYWNlX2tleRgBIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkSFAoHbm9fdGFpbBgCIAEoCEgAiAEBQgoKCF9ub190YWlsIvUCChJDcmVhdGVFcG9jaFJlcXVlc3QSJwoJc3BhY2Vfa2V5GAEgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRJKCgltaWdyYXRpb24YAiABKA4yMi5keG9zLmNsaWVudC5zZXJ2aWNlcy5DcmVhdGVFcG9jaFJlcXVlc3QuTWlncmF0aW9uSACIAQESHwoSYXV0b21lcmdlX3Jvb3RfdXJsGAMgASgJSAGIAQEiowEKCU1pZ3JhdGlvbhIICgROT05FEAASEgoOSU5JVF9BVVRPTUVSR0UQARIgChxQUlVORV9BVVRPTUVSR0VfUk9PVF9ISVNUT1JZEAISGwoXRlJBR01FTlRfQVVUT01FUkdFX1JPT1QQAxIaChZSRVBMQUNFX0FVVE9NRVJHRV9ST09UEAQSHQoZTUlHUkFURV9SRUZFUkVOQ0VTX1RPX0RYThAFQgwKCl9taWdyYXRpb25CFQoTX2F1dG9tZXJnZV9yb290X3VybCLIAQoTQ3JlYXRlRXBvY2hSZXNwb25zZRJAChBlcG9jaF9jcmVkZW50aWFsGAEgASgLMiEuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLkNyZWRlbnRpYWxIAIgBARJEChFjb250cm9sX3RpbWVmcmFtZRgCIAEoCzIkLmR4b3MuZWNoby50aW1lZnJhbWUuVGltZWZyYW1lVmVjdG9ySAGIAQFCEwoRX2Vwb2NoX2NyZWRlbnRpYWxCFAoSX2NvbnRyb2xfdGltZWZyYW1lIqcBChdVcGRhdGVNZW1iZXJSb2xlUmVxdWVzdBInCglzcGFjZV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5EigKCm1lbWJlcl9rZXkYAiABKAsyFC5keG9zLmtleXMuUHVibGljS2V5EjkKCG5ld19yb2xlGAMgASgOMicuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLlNwYWNlTWVtYmVyLlJvbGUipQEKE0FkbWl0Q29udGFjdFJlcXVlc3QSLgoHY29udGFjdBgBIAEoCzIdLmR4b3MuY2xpZW50LnNlcnZpY2VzLkNvbnRhY3QSNQoEcm9sZRgCIAEoDjInLmR4b3MuaGFsby5jcmVkZW50aWFscy5TcGFjZU1lbWJlci5Sb2xlEicKCXNwYWNlX2tleRgDIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkiSQoQQ29udGFjdEFkbWlzc2lvbhI1CgpjcmVkZW50aWFsGAEgASgLMiEuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLkNyZWRlbnRpYWwiPwoRSm9pblNwYWNlUmVzcG9uc2USKgoFc3BhY2UYASABKAsyGy5keG9zLmNsaWVudC5zZXJ2aWNlcy5TcGFjZSJAChVKb2luQnlTcGFjZUtleVJlcXVlc3QSJwoJc3BhY2Vfa2V5GAEgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleSIyCgxTcGFjZUFyY2hpdmUSEAoIZmlsZW5hbWUYASABKAkSEAoIY29udGVudHMYAiABKAwiJgoSRXhwb3J0U3BhY2VSZXF1ZXN0EhAKCHNwYWNlX2lkGAEgASgJIkoKE0V4cG9ydFNwYWNlUmVzcG9uc2USMwoHYXJjaGl2ZRgBIAEoCzIiLmR4b3MuY2xpZW50LnNlcnZpY2VzLlNwYWNlQXJjaGl2ZSJJChJJbXBvcnRTcGFjZVJlcXVlc3QSMwoHYXJjaGl2ZRgBIAEoCzIiLmR4b3MuY2xpZW50LnNlcnZpY2VzLlNwYWNlQXJjaGl2ZSIrChNJbXBvcnRTcGFjZVJlc3BvbnNlEhQKDG5ld19zcGFjZV9pZBgBIAEoCSKtAQoXQWNjZXB0SW52aXRhdGlvblJlcXVlc3QSNAoKaW52aXRhdGlvbhgBIAEoCzIgLmR4b3MuY2xpZW50LnNlcnZpY2VzLkludml0YXRpb24SSQoOZGV2aWNlX3Byb2ZpbGUYAiABKAsyLC5keG9zLmhhbG8uY3JlZGVudGlhbHMuRGV2aWNlUHJvZmlsZURvY3VtZW50SACIAQFCEQoPX2RldmljZV9wcm9maWxlIkEKFUF1dGhlbnRpY2F0aW9uUmVxdWVzdBIVCg1pbnZpdGF0aW9uX2lkGAEgASgJEhEKCWF1dGhfY29kZRgCIAEoCSIwChdDYW5jZWxJbnZpdGF0aW9uUmVxdWVzdBIVCg1pbnZpdGF0aW9uX2lkGAEgASgJIoUBChBJbnZpdGF0aW9uTWV0aG9kEjMKB2NyZWF0ZWQYASABKAsyIC5keG9zLmNsaWVudC5zZXJ2aWNlcy5JbnZpdGF0aW9uSAASNAoIYWNjZXB0ZWQYAiABKAsyIC5keG9zLmNsaWVudC5zZXJ2aWNlcy5JbnZpdGF0aW9uSABCBgoEa2luZCLiAgoYUXVlcnlJbnZpdGF0aW9uc1Jlc3BvbnNlEkUKBmFjdGlvbhgBIAEoDjI1LmR4b3MuY2xpZW50LnNlcnZpY2VzLlF1ZXJ5SW52aXRhdGlvbnNSZXNwb25zZS5BY3Rpb24SQQoEdHlwZRgCIAEoDjIzLmR4b3MuY2xpZW50LnNlcnZpY2VzLlF1ZXJ5SW52aXRhdGlvbnNSZXNwb25zZS5UeXBlEjUKC2ludml0YXRpb25zGAMgAygLMiAuZHhvcy5jbGllbnQuc2VydmljZXMuSW52aXRhdGlvbhIVCghleGlzdGluZxgEIAEoCEgAiAEBIj4KBkFjdGlvbhIJCgVBRERFRBAAEgsKB1JFTU9WRUQQARIJCgVTQVZFRBACEhEKDUxPQURfQ09NUExFVEUQAyIhCgRUeXBlEgsKB0NSRUFURUQQABIMCghBQ0NFUFRFRBABQgsKCV9leGlzdGluZyJaCiFMb2FkUGVyc2lzdGVudEludml0YXRpb25zUmVzcG9uc2USNQoLaW52aXRhdGlvbnMYASADKAsyIC5keG9zLmNsaWVudC5zZXJ2aWNlcy5JbnZpdGF0aW9uIoUCCg1OZXR3b3JrU3RhdHVzEjQKBXN3YXJtGAEgASgOMiUuZHhvcy5jbGllbnQuc2VydmljZXMuQ29ubmVjdGlvblN0YXRlEj0KCXNpZ25hbGluZxgCIAMoCzIqLmR4b3MuY2xpZW50LnNlcnZpY2VzLk5ldHdvcmtTdGF0dXMuU2lnbmFsEjcKD2Nvbm5lY3Rpb25faW5mbxgDIAMoCzIeLmR4b3MuZGV2dG9vbHMuc3dhcm0uU3dhcm1JbmZvGkYKBlNpZ25hbBIOCgZzZXJ2ZXIYASABKAkSLAoFc3RhdGUYAiABKA4yHS5keG9zLm1lc2guc2lnbmFsLlNpZ25hbFN0YXRlIksKE1VwZGF0ZUNvbmZpZ1JlcXVlc3QSNAoFc3dhcm0YASABKA4yJS5keG9zLmNsaWVudC5zZXJ2aWNlcy5Db25uZWN0aW9uU3RhdGUiQQoaU3Vic2NyaWJlU3dhcm1TdGF0ZVJlcXVlc3QSIwoFdG9waWMYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5IoECCgpFZGdlU3RhdHVzEj8KBXN0YXRlGAEgASgOMjAuZHhvcy5jbGllbnQuc2VydmljZXMuRWRnZVN0YXR1cy5Db25uZWN0aW9uU3RhdGUSCwoDcnR0GAIgASgFEg4KBnVwdGltZRgDIAEoBRIVCg1yYXRlX2J5dGVzX3VwGAQgASgFEhcKD3JhdGVfYnl0ZXNfZG93bhgFIAEoBRIVCg1tZXNzYWdlc19zZW50GAYgASgFEhkKEW1lc3NhZ2VzX3JlY2VpdmVkGAcgASgFIjMKD0Nvbm5lY3Rpb25TdGF0ZRIRCg1OT1RfQ09OTkVDVEVEEAASDQoJQ09OTkVDVEVEEAEiSwoXUXVlcnlFZGdlU3RhdHVzUmVzcG9uc2USMAoGc3RhdHVzGAEgASgLMiAuZHhvcy5jbGllbnQuc2VydmljZXMuRWRnZVN0YXR1cyKrAQoYUXVlcnlBZ2VudFN0YXR1c1Jlc3BvbnNlEkoKBnN0YXR1cxgBIAEoDjI6LmR4b3MuY2xpZW50LnNlcnZpY2VzLlF1ZXJ5QWdlbnRTdGF0dXNSZXNwb25zZS5BZ2VudFN0YXR1cyJDCgtBZ2VudFN0YXR1cxILCgdVTktOT1dOEAASCgoGQUNUSVZFEAESDAoISU5BQ1RJVkUQAhINCglOT1RfRk9VTkQQAyooCgxTeXN0ZW1TdGF0dXMSDAoISU5BQ1RJVkUQABIKCgZBQ1RJVkUQASomCgpEZXZpY2VLaW5kEgsKB0NVUlJFTlQQABILCgdUUlVTVEVEEAEqKgoPQ29ubmVjdGlvblN0YXRlEgsKB09GRkxJTkUQABIKCgZPTkxJTkUQATLvAwoNU3lzdGVtU2VydmljZRI4CglHZXRDb25maWcSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaEy5keG9zLmNvbmZpZy5Db25maWcSawoOR2V0RGlhZ25vc3RpY3MSKy5keG9zLmNsaWVudC5zZXJ2aWNlcy5HZXREaWFnbm9zdGljc1JlcXVlc3QaLC5keG9zLmNsaWVudC5zZXJ2aWNlcy5HZXREaWFnbm9zdGljc1Jlc3BvbnNlElEKDFVwZGF0ZVN0YXR1cxIpLmR4b3MuY2xpZW50LnNlcnZpY2VzLlVwZGF0ZVN0YXR1c1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSZAoLUXVlcnlTdGF0dXMSKC5keG9zLmNsaWVudC5zZXJ2aWNlcy5RdWVyeVN0YXR1c1JlcXVlc3QaKS5keG9zLmNsaWVudC5zZXJ2aWNlcy5RdWVyeVN0YXR1c1Jlc3BvbnNlMAESNwoFUmVzZXQSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSRQoLR2V0UGxhdGZvcm0SFi5nb29nbGUucHJvdG9idWYuRW1wdHkaHi5keG9zLmNsaWVudC5zZXJ2aWNlcy5QbGF0Zm9ybTK1BgoPSWRlbnRpdHlTZXJ2aWNlEl0KDkNyZWF0ZUlkZW50aXR5EisuZHhvcy5jbGllbnQuc2VydmljZXMuQ3JlYXRlSWRlbnRpdHlSZXF1ZXN0Gh4uZHhvcy5jbGllbnQuc2VydmljZXMuSWRlbnRpdHkSagoYUmVxdWVzdFJlY292ZXJ5Q2hhbGxlbmdlEhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5GjYuZHhvcy5jbGllbnQuc2VydmljZXMuUmVxdWVzdFJlY292ZXJ5Q2hhbGxlbmdlUmVzcG9uc2USXwoPUmVjb3ZlcklkZW50aXR5EiwuZHhvcy5jbGllbnQuc2VydmljZXMuUmVjb3ZlcklkZW50aXR5UmVxdWVzdBoeLmR4b3MuY2xpZW50LnNlcnZpY2VzLklkZW50aXR5EokBChhDcmVhdGVSZWNvdmVyeUNyZWRlbnRpYWwSNS5keG9zLmNsaWVudC5zZXJ2aWNlcy5DcmVhdGVSZWNvdmVyeUNyZWRlbnRpYWxSZXF1ZXN0GjYuZHhvcy5jbGllbnQuc2VydmljZXMuQ3JlYXRlUmVjb3ZlcnlDcmVkZW50aWFsUmVzcG9uc2USVgoNUXVlcnlJZGVudGl0eRIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRorLmR4b3MuY2xpZW50LnNlcnZpY2VzLlF1ZXJ5SWRlbnRpdHlSZXNwb25zZTABElcKDVVwZGF0ZVByb2ZpbGUSJi5keG9zLmhhbG8uY3JlZGVudGlhbHMuUHJvZmlsZURvY3VtZW50Gh4uZHhvcy5jbGllbnQuc2VydmljZXMuSWRlbnRpdHkSZgoQU2lnblByZXNlbnRhdGlvbhItLmR4b3MuY2xpZW50LnNlcnZpY2VzLlNpZ25QcmVzZW50YXRpb25SZXF1ZXN0GiMuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLlByZXNlbnRhdGlvbhJRChRDcmVhdGVBdXRoQ3JlZGVudGlhbBIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRohLmR4b3MuaGFsby5jcmVkZW50aWFscy5DcmVkZW50aWFsMsIBCg5EZXZpY2VzU2VydmljZRJaCgxVcGRhdGVEZXZpY2USLC5keG9zLmhhbG8uY3JlZGVudGlhbHMuRGV2aWNlUHJvZmlsZURvY3VtZW50GhwuZHhvcy5jbGllbnQuc2VydmljZXMuRGV2aWNlElQKDFF1ZXJ5RGV2aWNlcxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRoqLmR4b3MuY2xpZW50LnNlcnZpY2VzLlF1ZXJ5RGV2aWNlc1Jlc3BvbnNlMAEyqQEKD0NvbnRhY3RzU2VydmljZRJICgtHZXRDb250YWN0cxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRohLmR4b3MuY2xpZW50LnNlcnZpY2VzLkNvbnRhY3RCb29rEkwKDVF1ZXJ5Q29udGFjdHMSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaIS5keG9zLmNsaWVudC5zZXJ2aWNlcy5Db250YWN0Qm9vazABMr8JCg1TcGFjZXNTZXJ2aWNlEkIKC0NyZWF0ZVNwYWNlEhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5GhsuZHhvcy5jbGllbnQuc2VydmljZXMuU3BhY2USTwoLVXBkYXRlU3BhY2USKC5keG9zLmNsaWVudC5zZXJ2aWNlcy5VcGRhdGVTcGFjZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSUgoLUXVlcnlTcGFjZXMSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaKS5keG9zLmNsaWVudC5zZXJ2aWNlcy5RdWVyeVNwYWNlc1Jlc3BvbnNlMAESWQoQVXBkYXRlTWVtYmVyUm9sZRItLmR4b3MuY2xpZW50LnNlcnZpY2VzLlVwZGF0ZU1lbWJlclJvbGVSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5ElEKDEFkbWl0Q29udGFjdBIpLmR4b3MuY2xpZW50LnNlcnZpY2VzLkFkbWl0Q29udGFjdFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSZgoOSm9pbkJ5U3BhY2VLZXkSKy5keG9zLmNsaWVudC5zZXJ2aWNlcy5Kb2luQnlTcGFjZUtleVJlcXVlc3QaJy5keG9zLmNsaWVudC5zZXJ2aWNlcy5Kb2luU3BhY2VSZXNwb25zZRJPCgtQb3N0TWVzc2FnZRIoLmR4b3MuY2xpZW50LnNlcnZpY2VzLlBvc3RNZXNzYWdlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJvChFTdWJzY3JpYmVNZXNzYWdlcxIuLmR4b3MuY2xpZW50LnNlcnZpY2VzLlN1YnNjcmliZU1lc3NhZ2VzUmVxdWVzdBooLmR4b3MubWVzaC50ZWxlcG9ydC5nb3NzaXAuR29zc2lwTWVzc2FnZTABElkKEFdyaXRlQ3JlZGVudGlhbHMSLS5keG9zLmNsaWVudC5zZXJ2aWNlcy5Xcml0ZUNyZWRlbnRpYWxzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJmChBRdWVyeUNyZWRlbnRpYWxzEi0uZHhvcy5jbGllbnQuc2VydmljZXMuUXVlcnlDcmVkZW50aWFsc1JlcXVlc3QaIS5keG9zLmhhbG8uY3JlZGVudGlhbHMuQ3JlZGVudGlhbDABEmIKC0NyZWF0ZUVwb2NoEiguZHhvcy5jbGllbnQuc2VydmljZXMuQ3JlYXRlRXBvY2hSZXF1ZXN0GikuZHhvcy5jbGllbnQuc2VydmljZXMuQ3JlYXRlRXBvY2hSZXNwb25zZRJiCgtFeHBvcnRTcGFjZRIoLmR4b3MuY2xpZW50LnNlcnZpY2VzLkV4cG9ydFNwYWNlUmVxdWVzdBopLmR4b3MuY2xpZW50LnNlcnZpY2VzLkV4cG9ydFNwYWNlUmVzcG9uc2USYgoLSW1wb3J0U3BhY2USKC5keG9zLmNsaWVudC5zZXJ2aWNlcy5JbXBvcnRTcGFjZVJlcXVlc3QaKS5keG9zLmNsaWVudC5zZXJ2aWNlcy5JbXBvcnRTcGFjZVJlc3BvbnNlMuMDChJJbnZpdGF0aW9uc1NlcnZpY2USWAoQQ3JlYXRlSW52aXRhdGlvbhIgLmR4b3MuY2xpZW50LnNlcnZpY2VzLkludml0YXRpb24aIC5keG9zLmNsaWVudC5zZXJ2aWNlcy5JbnZpdGF0aW9uMAESZQoQQWNjZXB0SW52aXRhdGlvbhItLmR4b3MuY2xpZW50LnNlcnZpY2VzLkFjY2VwdEludml0YXRpb25SZXF1ZXN0GiAuZHhvcy5jbGllbnQuc2VydmljZXMuSW52aXRhdGlvbjABElMKDEF1dGhlbnRpY2F0ZRIrLmR4b3MuY2xpZW50LnNlcnZpY2VzLkF1dGhlbnRpY2F0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJZChBDYW5jZWxJbnZpdGF0aW9uEi0uZHhvcy5jbGllbnQuc2VydmljZXMuQ2FuY2VsSW52aXRhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSXAoQUXVlcnlJbnZpdGF0aW9ucxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRouLmR4b3MuY2xpZW50LnNlcnZpY2VzLlF1ZXJ5SW52aXRhdGlvbnNSZXNwb25zZTABMosFCg5OZXR3b3JrU2VydmljZRJRCgxVcGRhdGVDb25maWcSKS5keG9zLmNsaWVudC5zZXJ2aWNlcy5VcGRhdGVDb25maWdSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5EkwKC1F1ZXJ5U3RhdHVzEhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5GiMuZHhvcy5jbGllbnQuc2VydmljZXMuTmV0d29ya1N0YXR1czABEkIKCUpvaW5Td2FybRIdLmR4b3MuZWRnZS5zaWduYWwuSm9pblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSRAoKTGVhdmVTd2FybRIeLmR4b3MuZWRnZS5zaWduYWwuTGVhdmVSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5ElAKClF1ZXJ5U3dhcm0SHi5keG9zLmVkZ2Uuc2lnbmFsLlF1ZXJ5UmVxdWVzdBoiLmR4b3MuZWRnZS5tZXNzZW5nZXIuU3dhcm1SZXNwb25zZRJtChNTdWJzY3JpYmVTd2FybVN0YXRlEjAuZHhvcy5jbGllbnQuc2VydmljZXMuU3Vic2NyaWJlU3dhcm1TdGF0ZVJlcXVlc3QaIi5keG9zLmVkZ2UubWVzc2VuZ2VyLlN3YXJtUmVzcG9uc2UwARJACgtTZW5kTWVzc2FnZRIZLmR4b3MuZWRnZS5zaWduYWwuTWVzc2FnZRoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJLChFTdWJzY3JpYmVNZXNzYWdlcxIZLmR4b3MuZWRnZS5tZXNzZW5nZXIuUGVlchoZLmR4b3MuZWRnZS5zaWduYWwuTWVzc2FnZTABMosCChBFZGdlQWdlbnRTZXJ2aWNlEloKD1F1ZXJ5RWRnZVN0YXR1cxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRotLmR4b3MuY2xpZW50LnNlcnZpY2VzLlF1ZXJ5RWRnZVN0YXR1c1Jlc3BvbnNlMAESPQoLQ3JlYXRlQWdlbnQSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSXAoQUXVlcnlBZ2VudFN0YXR1cxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRouLmR4b3MuY2xpZW50LnNlcnZpY2VzLlF1ZXJ5QWdlbnRTdGF0dXNSZXNwb25zZTABYgZwcm90bzM", [file_google_protobuf_any, file_google_protobuf_empty, file_google_protobuf_struct, file_google_protobuf_timestamp, file_dxos_client_invitation, file_dxos_config, file_dxos_devtools_swarm, file_dxos_echo_metadata, file_dxos_echo_timeframe, file_dxos_edge_messenger, file_dxos_edge_signal, file_dxos_error, file_dxos_halo_credentials, file_dxos_keys, file_dxos_mesh_signal, file_dxos_mesh_presence, file_dxos_mesh_teleport_gossip, file_dxos_value]);
48
+ fileDesc("ChpkeG9zL2NsaWVudC9zZXJ2aWNlcy5wcm90bxIUZHhvcy5jbGllbnQuc2VydmljZXMiSQoTVXBkYXRlU3RhdHVzUmVxdWVzdBIyCgZzdGF0dXMYASABKA4yIi5keG9zLmNsaWVudC5zZXJ2aWNlcy5TeXN0ZW1TdGF0dXMiOAoSUXVlcnlTdGF0dXNSZXF1ZXN0EhUKCGludGVydmFsGAEgASgFSACIAQFCCwoJX2ludGVydmFsIkkKE1F1ZXJ5U3RhdHVzUmVzcG9uc2USMgoGc3RhdHVzGAEgASgOMiIuZHhvcy5jbGllbnQuc2VydmljZXMuU3lzdGVtU3RhdHVzIp8BChVHZXREaWFnbm9zdGljc1JlcXVlc3QSSQoEa2V5cxgBIAEoDjI2LmR4b3MuY2xpZW50LnNlcnZpY2VzLkdldERpYWdub3N0aWNzUmVxdWVzdC5LRVlfT1BUSU9OSACIAQEiMgoKS0VZX09QVElPThIICgROT05FEAASDAoIVFJVTkNBVEUQARIMCghIVU1BTklaRRACQgcKBV9rZXlzInUKFkdldERpYWdub3N0aWNzUmVzcG9uc2USLQoJdGltZXN0YW1wGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIsCgtkaWFnbm9zdGljcxgCIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3Qi+gIKCFBsYXRmb3JtEjoKBHR5cGUYASABKA4yLC5keG9zLmNsaWVudC5zZXJ2aWNlcy5QbGF0Zm9ybS5QTEFURk9STV9UWVBFEhcKCnVzZXJfYWdlbnQYAiABKAlIAIgBARIVCghwbGF0Zm9ybRgDIAEoCUgBiAEBEhEKBGFyY2gYBCABKAlIAogBARIUCgdydW50aW1lGAUgASgJSAOIAQESEwoGdXB0aW1lGAYgASgNSASIAQESLAoGbWVtb3J5GAcgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgFiAEBIk8KDVBMQVRGT1JNX1RZUEUSCwoHQlJPV1NFUhAAEhEKDVNIQVJFRF9XT1JLRVIQARIICgROT0RFEAISFAoQREVESUNBVEVEX1dPUktFUhADQg0KC191c2VyX2FnZW50QgsKCV9wbGF0Zm9ybUIHCgVfYXJjaEIKCghfcnVudGltZUIJCgdfdXB0aW1lQgkKB19tZW1vcnkiyQEKCElkZW50aXR5EgsKA2RpZBgEIAEoCRIqCgxpZGVudGl0eV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5EiwKCXNwYWNlX2tleRgCIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXlIAIgBARI8Cgdwcm9maWxlGAMgASgLMiYuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLlByb2ZpbGVEb2N1bWVudEgBiAEBQgwKCl9zcGFjZV9rZXlCCgoIX3Byb2ZpbGUijwEKIFJlcXVlc3RSZWNvdmVyeUNoYWxsZW5nZVJlc3BvbnNlEigKCmRldmljZV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5Ei4KEGNvbnRyb2xfZmVlZF9rZXkYAiABKAsyFC5keG9zLmtleXMuUHVibGljS2V5EhEKCWNoYWxsZW5nZRgDIAEoCSK6AwoWUmVjb3ZlcklkZW50aXR5UmVxdWVzdBIXCg1yZWNvdmVyeV9jb2RlGAEgASgJSAASUgoIZXh0ZXJuYWwYAiABKAsyPi5keG9zLmNsaWVudC5zZXJ2aWNlcy5SZWNvdmVySWRlbnRpdHlSZXF1ZXN0LkV4dGVybmFsU2lnbmF0dXJlSAASDwoFdG9rZW4YAyABKAlIABqWAgoRRXh0ZXJuYWxTaWduYXR1cmUSKAoKbG9va3VwX2tleRgBIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkSKAoKZGV2aWNlX2tleRgCIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkSLgoQY29udHJvbF9mZWVkX2tleRgDIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkSEQoJc2lnbmF0dXJlGAQgASgMEh0KEGNsaWVudF9kYXRhX2pzb24YBSABKAxIAIgBARIfChJhdXRoZW50aWNhdG9yX2RhdGEYBiABKAxIAYgBAUITChFfY2xpZW50X2RhdGFfanNvbkIVChNfYXV0aGVudGljYXRvcl9kYXRhQgkKB3JlcXVlc3QigQEKFlJlY292ZXJ5Q3JlZGVudGlhbERhdGESKgoMcmVjb3Zlcnlfa2V5GAEgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRIoCgpsb29rdXBfa2V5GAIgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRIRCglhbGdvcml0aG0YAyABKAkiawofQ3JlYXRlUmVjb3ZlcnlDcmVkZW50aWFsUmVxdWVzdBI/CgRkYXRhGAEgASgLMiwuZHhvcy5jbGllbnQuc2VydmljZXMuUmVjb3ZlcnlDcmVkZW50aWFsRGF0YUgAiAEBQgcKBV9kYXRhIlAKIENyZWF0ZVJlY292ZXJ5Q3JlZGVudGlhbFJlc3BvbnNlEhoKDXJlY292ZXJ5X2NvZGUYASABKAlIAIgBAUIQCg5fcmVjb3ZlcnlfY29kZSJbChVRdWVyeUlkZW50aXR5UmVzcG9uc2USNQoIaWRlbnRpdHkYASABKAsyHi5keG9zLmNsaWVudC5zZXJ2aWNlcy5JZGVudGl0eUgAiAEBQgsKCV9pZGVudGl0eSJyChdTaWduUHJlc2VudGF0aW9uUmVxdWVzdBI5CgxwcmVzZW50YXRpb24YASABKAsyIy5keG9zLmhhbG8uY3JlZGVudGlhbHMuUHJlc2VudGF0aW9uEhIKBW5vbmNlGAIgASgMSACIAQFCCAoGX25vbmNlIsUBChVDcmVhdGVJZGVudGl0eVJlcXVlc3QSPAoHcHJvZmlsZRgBIAEoCzImLmR4b3MuaGFsby5jcmVkZW50aWFscy5Qcm9maWxlRG9jdW1lbnRIAIgBARJJCg5kZXZpY2VfcHJvZmlsZRgDIAEoCzIsLmR4b3MuaGFsby5jcmVkZW50aWFscy5EZXZpY2VQcm9maWxlRG9jdW1lbnRIAYgBAUIKCghfcHJvZmlsZUIRCg9fZGV2aWNlX3Byb2ZpbGVKBAgCEAMipwIKBkRldmljZRIoCgpkZXZpY2Vfa2V5GAEgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRIuCgRraW5kGAIgASgOMiAuZHhvcy5jbGllbnQuc2VydmljZXMuRGV2aWNlS2luZBJCCgdwcm9maWxlGAMgASgLMiwuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLkRldmljZVByb2ZpbGVEb2N1bWVudEgAiAEBEjwKCHByZXNlbmNlGAQgASgOMiouZHhvcy5jbGllbnQuc2VydmljZXMuRGV2aWNlLlByZXNlbmNlU3RhdGUiNQoNUHJlc2VuY2VTdGF0ZRILCgdPRkZMSU5FEAASCgoGT05MSU5FEAESCwoHUkVNT1ZFRBACQgoKCF9wcm9maWxlIkUKFFF1ZXJ5RGV2aWNlc1Jlc3BvbnNlEi0KB2RldmljZXMYASADKAsyHC5keG9zLmNsaWVudC5zZXJ2aWNlcy5EZXZpY2UiqgEKB0NvbnRhY3QSKQoLaWRlbnRpdHlLZXkYAiABKAsyFC5keG9zLmtleXMuUHVibGljS2V5EjwKB3Byb2ZpbGUYASABKAsyJi5keG9zLmhhbG8uY3JlZGVudGlhbHMuUHJvZmlsZURvY3VtZW50SACIAQESKgoMY29tbW9uU3BhY2VzGAMgAygLMhQuZHhvcy5rZXlzLlB1YmxpY0tleUIKCghfcHJvZmlsZSI+CgtDb250YWN0Qm9vaxIvCghjb250YWN0cxgBIAMoCzIdLmR4b3MuY2xpZW50LnNlcnZpY2VzLkNvbnRhY3QilgIKC1NwYWNlTWVtYmVyEjAKCGlkZW50aXR5GAEgASgLMh4uZHhvcy5jbGllbnQuc2VydmljZXMuSWRlbnRpdHkSQQoIcHJlc2VuY2UYAiABKA4yLy5keG9zLmNsaWVudC5zZXJ2aWNlcy5TcGFjZU1lbWJlci5QcmVzZW5jZVN0YXRlEjEKCnBlZXJTdGF0ZXMYAyADKAsyHS5keG9zLm1lc2gucHJlc2VuY2UuUGVlclN0YXRlEjUKBHJvbGUYBCABKA4yJy5keG9zLmhhbG8uY3JlZGVudGlhbHMuU3BhY2VNZW1iZXIuUm9sZSIoCg1QcmVzZW5jZVN0YXRlEgsKB09GRkxJTkUQABIKCgZPTkxJTkUQASLmEgoFU3BhY2USCgoCaWQYBSABKAkSJwoJc3BhY2Vfa2V5GAEgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRIvCgVzdGF0ZRgCIAEoDjIgLmR4b3MuY2xpZW50LnNlcnZpY2VzLlNwYWNlU3RhdGUSQAoIcGlwZWxpbmUYAyABKAsyKS5keG9zLmNsaWVudC5zZXJ2aWNlcy5TcGFjZS5QaXBlbGluZVN0YXRlSACIAQESJQoFZXJyb3IYBCABKAsyES5keG9zLmVycm9yLkVycm9ySAGIAQESSQoQZWRnZV9yZXBsaWNhdGlvbhgGIAEoDjIqLmR4b3MuZWNoby5tZXRhZGF0YS5FZGdlUmVwbGljYXRpb25TZXR0aW5nSAKIAQESMgoHbWVtYmVycxgKIAMoCzIhLmR4b3MuY2xpZW50LnNlcnZpY2VzLlNwYWNlTWVtYmVyEioKB2NyZWF0b3IYCyABKAsyFC5keG9zLmtleXMuUHVibGljS2V5SAOIAQESMgoFY2FjaGUYFCABKAsyHi5keG9zLmVjaG8ubWV0YWRhdGEuU3BhY2VDYWNoZUgEiAEBEjQKB21ldHJpY3MYFSABKAsyIy5keG9zLmNsaWVudC5zZXJ2aWNlcy5TcGFjZS5NZXRyaWNzGtcDCgdNZXRyaWNzEi0KBG9wZW4YASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSACIAQESPAoTcGlwZWxpbmVfaW5pdF9iZWdpbhgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAYgBARI/ChZjb250cm9sX3BpcGVsaW5lX3JlYWR5GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgCiAEBEjsKEmRhdGFfcGlwZWxpbmVfb3BlbhgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIA4gBARI8ChNkYXRhX3BpcGVsaW5lX3JlYWR5GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgEiAEBEi4KBXJlYWR5GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgFiAEBQgcKBV9vcGVuQhYKFF9waXBlbGluZV9pbml0X2JlZ2luQhkKF19jb250cm9sX3BpcGVsaW5lX3JlYWR5QhUKE19kYXRhX3BpcGVsaW5lX29wZW5CFgoUX2RhdGFfcGlwZWxpbmVfcmVhZHlCCAoGX3JlYWR5GtwKCg1QaXBlbGluZVN0YXRlEjMKEGNvbnRyb2xfZmVlZF9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5SACIAQESMAoNZGF0YV9mZWVkX2tleRgCIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXlIAYgBARIrCg1jb250cm9sX2ZlZWRzGBIgAygLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRIoCgpkYXRhX2ZlZWRzGBMgAygLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRI9Cg1jdXJyZW50X2Vwb2NoGBQgASgLMiEuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLkNyZWRlbnRpYWxIAogBARI9Cg1hcHBsaWVkX2Vwb2NoGBUgASgLMiEuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLkNyZWRlbnRpYWxIA4gBARJMChljdXJyZW50X2NvbnRyb2xfdGltZWZyYW1lGAogASgLMiQuZHhvcy5lY2hvLnRpbWVmcmFtZS5UaW1lZnJhbWVWZWN0b3JIBIgBARJLChh0YXJnZXRfY29udHJvbF90aW1lZnJhbWUYCyABKAsyJC5keG9zLmVjaG8udGltZWZyYW1lLlRpbWVmcmFtZVZlY3RvckgFiAEBEkoKF3RvdGFsX2NvbnRyb2xfdGltZWZyYW1lGA4gASgLMiQuZHhvcy5lY2hvLnRpbWVmcmFtZS5UaW1lZnJhbWVWZWN0b3JIBogBARJKChdrbm93bl9jb250cm9sX3RpbWVmcmFtZRgPIAEoCzIkLmR4b3MuZWNoby50aW1lZnJhbWUuVGltZWZyYW1lVmVjdG9ySAeIAQESRwoUc3RhcnRfZGF0YV90aW1lZnJhbWUYZCABKAsyJC5keG9zLmVjaG8udGltZWZyYW1lLlRpbWVmcmFtZVZlY3RvckgIiAEBEkkKFmN1cnJlbnRfZGF0YV90aW1lZnJhbWUYDCABKAsyJC5keG9zLmVjaG8udGltZWZyYW1lLlRpbWVmcmFtZVZlY3RvckgJiAEBEkgKFXRhcmdldF9kYXRhX3RpbWVmcmFtZRgNIAEoCzIkLmR4b3MuZWNoby50aW1lZnJhbWUuVGltZWZyYW1lVmVjdG9ySAqIAQESRwoUdG90YWxfZGF0YV90aW1lZnJhbWUYECABKAsyJC5keG9zLmVjaG8udGltZWZyYW1lLlRpbWVmcmFtZVZlY3RvckgLiAEBEkcKFGtub3duX2RhdGFfdGltZWZyYW1lGBEgASgLMiQuZHhvcy5lY2hvLnRpbWVmcmFtZS5UaW1lZnJhbWVWZWN0b3JIDIgBARIbCg5zcGFjZV9yb290X3VybBgWIAEoCUgNiAEBQhMKEV9jb250cm9sX2ZlZWRfa2V5QhAKDl9kYXRhX2ZlZWRfa2V5QhAKDl9jdXJyZW50X2Vwb2NoQhAKDl9hcHBsaWVkX2Vwb2NoQhwKGl9jdXJyZW50X2NvbnRyb2xfdGltZWZyYW1lQhsKGV90YXJnZXRfY29udHJvbF90aW1lZnJhbWVCGgoYX3RvdGFsX2NvbnRyb2xfdGltZWZyYW1lQhoKGF9rbm93bl9jb250cm9sX3RpbWVmcmFtZUIXChVfc3RhcnRfZGF0YV90aW1lZnJhbWVCGQoXX2N1cnJlbnRfZGF0YV90aW1lZnJhbWVCGAoWX3RhcmdldF9kYXRhX3RpbWVmcmFtZUIXChVfdG90YWxfZGF0YV90aW1lZnJhbWVCFwoVX2tub3duX2RhdGFfdGltZWZyYW1lQhEKD19zcGFjZV9yb290X3VybEILCglfcGlwZWxpbmVCCAoGX2Vycm9yQhMKEV9lZGdlX3JlcGxpY2F0aW9uQgoKCF9jcmVhdG9yQggKBl9jYWNoZSLdAQoSVXBkYXRlU3BhY2VSZXF1ZXN0EicKCXNwYWNlX2tleRgBIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkSNAoFc3RhdGUYAiABKA4yIC5keG9zLmNsaWVudC5zZXJ2aWNlcy5TcGFjZVN0YXRlSACIAQESSQoQZWRnZV9yZXBsaWNhdGlvbhgDIAEoDjIqLmR4b3MuZWNoby5tZXRhZGF0YS5FZGdlUmVwbGljYXRpb25TZXR0aW5nSAGIAQFCCAoGX3N0YXRlQhMKEV9lZGdlX3JlcGxpY2F0aW9uIkIKE1F1ZXJ5U3BhY2VzUmVzcG9uc2USKwoGc3BhY2VzGAEgAygLMhsuZHhvcy5jbGllbnQuc2VydmljZXMuU3BhY2UidQoSUG9zdE1lc3NhZ2VSZXF1ZXN0EicKCXNwYWNlX2tleRgBIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkSDwoHY2hhbm5lbBgCIAEoCRIlCgdtZXNzYWdlGAMgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueSJUChhTdWJzY3JpYmVNZXNzYWdlc1JlcXVlc3QSJwoJc3BhY2Vfa2V5GAEgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRIPCgdjaGFubmVsGAIgASgJInoKF1dyaXRlQ3JlZGVudGlhbHNSZXF1ZXN0EicKCXNwYWNlX2tleRgBIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkSNgoLY3JlZGVudGlhbHMYAiADKAsyIS5keG9zLmhhbG8uY3JlZGVudGlhbHMuQ3JlZGVudGlhbCJkChdRdWVyeUNyZWRlbnRpYWxzUmVxdWVzdBInCglzcGFjZV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5EhQKB25vX3RhaWwYAiABKAhIAIgBAUIKCghfbm9fdGFpbCL1AgoSQ3JlYXRlRXBvY2hSZXF1ZXN0EicKCXNwYWNlX2tleRgBIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkSSgoJbWlncmF0aW9uGAIgASgOMjIuZHhvcy5jbGllbnQuc2VydmljZXMuQ3JlYXRlRXBvY2hSZXF1ZXN0Lk1pZ3JhdGlvbkgAiAEBEh8KEmF1dG9tZXJnZV9yb290X3VybBgDIAEoCUgBiAEBIqMBCglNaWdyYXRpb24SCAoETk9ORRAAEhIKDklOSVRfQVVUT01FUkdFEAESIAocUFJVTkVfQVVUT01FUkdFX1JPT1RfSElTVE9SWRACEhsKF0ZSQUdNRU5UX0FVVE9NRVJHRV9ST09UEAMSGgoWUkVQTEFDRV9BVVRPTUVSR0VfUk9PVBAEEh0KGU1JR1JBVEVfUkVGRVJFTkNFU19UT19EWE4QBUIMCgpfbWlncmF0aW9uQhUKE19hdXRvbWVyZ2Vfcm9vdF91cmwiyAEKE0NyZWF0ZUVwb2NoUmVzcG9uc2USQAoQZXBvY2hfY3JlZGVudGlhbBgBIAEoCzIhLmR4b3MuaGFsby5jcmVkZW50aWFscy5DcmVkZW50aWFsSACIAQESRAoRY29udHJvbF90aW1lZnJhbWUYAiABKAsyJC5keG9zLmVjaG8udGltZWZyYW1lLlRpbWVmcmFtZVZlY3RvckgBiAEBQhMKEV9lcG9jaF9jcmVkZW50aWFsQhQKEl9jb250cm9sX3RpbWVmcmFtZSKnAQoXVXBkYXRlTWVtYmVyUm9sZVJlcXVlc3QSJwoJc3BhY2Vfa2V5GAEgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRIoCgptZW1iZXJfa2V5GAIgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRI5CghuZXdfcm9sZRgDIAEoDjInLmR4b3MuaGFsby5jcmVkZW50aWFscy5TcGFjZU1lbWJlci5Sb2xlIqUBChNBZG1pdENvbnRhY3RSZXF1ZXN0Ei4KB2NvbnRhY3QYASABKAsyHS5keG9zLmNsaWVudC5zZXJ2aWNlcy5Db250YWN0EjUKBHJvbGUYAiABKA4yJy5keG9zLmhhbG8uY3JlZGVudGlhbHMuU3BhY2VNZW1iZXIuUm9sZRInCglzcGFjZV9rZXkYAyABKAsyFC5keG9zLmtleXMuUHVibGljS2V5IkkKEENvbnRhY3RBZG1pc3Npb24SNQoKY3JlZGVudGlhbBgBIAEoCzIhLmR4b3MuaGFsby5jcmVkZW50aWFscy5DcmVkZW50aWFsIj8KEUpvaW5TcGFjZVJlc3BvbnNlEioKBXNwYWNlGAEgASgLMhsuZHhvcy5jbGllbnQuc2VydmljZXMuU3BhY2UiQAoVSm9pbkJ5U3BhY2VLZXlSZXF1ZXN0EicKCXNwYWNlX2tleRgBIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkiMgoMU3BhY2VBcmNoaXZlEhAKCGZpbGVuYW1lGAEgASgJEhAKCGNvbnRlbnRzGAIgASgMIiYKEkV4cG9ydFNwYWNlUmVxdWVzdBIQCghzcGFjZV9pZBgBIAEoCSJKChNFeHBvcnRTcGFjZVJlc3BvbnNlEjMKB2FyY2hpdmUYASABKAsyIi5keG9zLmNsaWVudC5zZXJ2aWNlcy5TcGFjZUFyY2hpdmUiSQoSSW1wb3J0U3BhY2VSZXF1ZXN0EjMKB2FyY2hpdmUYASABKAsyIi5keG9zLmNsaWVudC5zZXJ2aWNlcy5TcGFjZUFyY2hpdmUiKwoTSW1wb3J0U3BhY2VSZXNwb25zZRIUCgxuZXdfc3BhY2VfaWQYASABKAkirQEKF0FjY2VwdEludml0YXRpb25SZXF1ZXN0EjQKCmludml0YXRpb24YASABKAsyIC5keG9zLmNsaWVudC5zZXJ2aWNlcy5JbnZpdGF0aW9uEkkKDmRldmljZV9wcm9maWxlGAIgASgLMiwuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLkRldmljZVByb2ZpbGVEb2N1bWVudEgAiAEBQhEKD19kZXZpY2VfcHJvZmlsZSJBChVBdXRoZW50aWNhdGlvblJlcXVlc3QSFQoNaW52aXRhdGlvbl9pZBgBIAEoCRIRCglhdXRoX2NvZGUYAiABKAkiMAoXQ2FuY2VsSW52aXRhdGlvblJlcXVlc3QSFQoNaW52aXRhdGlvbl9pZBgBIAEoCSKFAQoQSW52aXRhdGlvbk1ldGhvZBIzCgdjcmVhdGVkGAEgASgLMiAuZHhvcy5jbGllbnQuc2VydmljZXMuSW52aXRhdGlvbkgAEjQKCGFjY2VwdGVkGAIgASgLMiAuZHhvcy5jbGllbnQuc2VydmljZXMuSW52aXRhdGlvbkgAQgYKBGtpbmQi4gIKGFF1ZXJ5SW52aXRhdGlvbnNSZXNwb25zZRJFCgZhY3Rpb24YASABKA4yNS5keG9zLmNsaWVudC5zZXJ2aWNlcy5RdWVyeUludml0YXRpb25zUmVzcG9uc2UuQWN0aW9uEkEKBHR5cGUYAiABKA4yMy5keG9zLmNsaWVudC5zZXJ2aWNlcy5RdWVyeUludml0YXRpb25zUmVzcG9uc2UuVHlwZRI1CgtpbnZpdGF0aW9ucxgDIAMoCzIgLmR4b3MuY2xpZW50LnNlcnZpY2VzLkludml0YXRpb24SFQoIZXhpc3RpbmcYBCABKAhIAIgBASI+CgZBY3Rpb24SCQoFQURERUQQABILCgdSRU1PVkVEEAESCQoFU0FWRUQQAhIRCg1MT0FEX0NPTVBMRVRFEAMiIQoEVHlwZRILCgdDUkVBVEVEEAASDAoIQUNDRVBURUQQAUILCglfZXhpc3RpbmciWgohTG9hZFBlcnNpc3RlbnRJbnZpdGF0aW9uc1Jlc3BvbnNlEjUKC2ludml0YXRpb25zGAEgAygLMiAuZHhvcy5jbGllbnQuc2VydmljZXMuSW52aXRhdGlvbiKFAgoNTmV0d29ya1N0YXR1cxI0CgVzd2FybRgBIAEoDjIlLmR4b3MuY2xpZW50LnNlcnZpY2VzLkNvbm5lY3Rpb25TdGF0ZRI9CglzaWduYWxpbmcYAiADKAsyKi5keG9zLmNsaWVudC5zZXJ2aWNlcy5OZXR3b3JrU3RhdHVzLlNpZ25hbBI3Cg9jb25uZWN0aW9uX2luZm8YAyADKAsyHi5keG9zLmRldnRvb2xzLnN3YXJtLlN3YXJtSW5mbxpGCgZTaWduYWwSDgoGc2VydmVyGAEgASgJEiwKBXN0YXRlGAIgASgOMh0uZHhvcy5tZXNoLnNpZ25hbC5TaWduYWxTdGF0ZSJLChNVcGRhdGVDb25maWdSZXF1ZXN0EjQKBXN3YXJtGAEgASgOMiUuZHhvcy5jbGllbnQuc2VydmljZXMuQ29ubmVjdGlvblN0YXRlIkEKGlN1YnNjcmliZVN3YXJtU3RhdGVSZXF1ZXN0EiMKBXRvcGljGAEgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleSKBAgoKRWRnZVN0YXR1cxI/CgVzdGF0ZRgBIAEoDjIwLmR4b3MuY2xpZW50LnNlcnZpY2VzLkVkZ2VTdGF0dXMuQ29ubmVjdGlvblN0YXRlEgsKA3J0dBgCIAEoBRIOCgZ1cHRpbWUYAyABKAUSFQoNcmF0ZV9ieXRlc191cBgEIAEoBRIXCg9yYXRlX2J5dGVzX2Rvd24YBSABKAUSFQoNbWVzc2FnZXNfc2VudBgGIAEoBRIZChFtZXNzYWdlc19yZWNlaXZlZBgHIAEoBSIzCg9Db25uZWN0aW9uU3RhdGUSEQoNTk9UX0NPTk5FQ1RFRBAAEg0KCUNPTk5FQ1RFRBABIksKF1F1ZXJ5RWRnZVN0YXR1c1Jlc3BvbnNlEjAKBnN0YXR1cxgBIAEoCzIgLmR4b3MuY2xpZW50LnNlcnZpY2VzLkVkZ2VTdGF0dXMiqwEKGFF1ZXJ5QWdlbnRTdGF0dXNSZXNwb25zZRJKCgZzdGF0dXMYASABKA4yOi5keG9zLmNsaWVudC5zZXJ2aWNlcy5RdWVyeUFnZW50U3RhdHVzUmVzcG9uc2UuQWdlbnRTdGF0dXMiQwoLQWdlbnRTdGF0dXMSCwoHVU5LTk9XThAAEgoKBkFDVElWRRABEgwKCElOQUNUSVZFEAISDQoJTk9UX0ZPVU5EEAMqKAoMU3lzdGVtU3RhdHVzEgwKCElOQUNUSVZFEAASCgoGQUNUSVZFEAEqJgoKRGV2aWNlS2luZBILCgdDVVJSRU5UEAASCwoHVFJVU1RFRBABKioKD0Nvbm5lY3Rpb25TdGF0ZRILCgdPRkZMSU5FEAASCgoGT05MSU5FEAEy7wMKDVN5c3RlbVNlcnZpY2USOAoJR2V0Q29uZmlnEhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5GhMuZHhvcy5jb25maWcuQ29uZmlnEmsKDkdldERpYWdub3N0aWNzEisuZHhvcy5jbGllbnQuc2VydmljZXMuR2V0RGlhZ25vc3RpY3NSZXF1ZXN0GiwuZHhvcy5jbGllbnQuc2VydmljZXMuR2V0RGlhZ25vc3RpY3NSZXNwb25zZRJRCgxVcGRhdGVTdGF0dXMSKS5keG9zLmNsaWVudC5zZXJ2aWNlcy5VcGRhdGVTdGF0dXNSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5EmQKC1F1ZXJ5U3RhdHVzEiguZHhvcy5jbGllbnQuc2VydmljZXMuUXVlcnlTdGF0dXNSZXF1ZXN0GikuZHhvcy5jbGllbnQuc2VydmljZXMuUXVlcnlTdGF0dXNSZXNwb25zZTABEjcKBVJlc2V0EhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5EkUKC0dldFBsYXRmb3JtEhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Gh4uZHhvcy5jbGllbnQuc2VydmljZXMuUGxhdGZvcm0ytQYKD0lkZW50aXR5U2VydmljZRJdCg5DcmVhdGVJZGVudGl0eRIrLmR4b3MuY2xpZW50LnNlcnZpY2VzLkNyZWF0ZUlkZW50aXR5UmVxdWVzdBoeLmR4b3MuY2xpZW50LnNlcnZpY2VzLklkZW50aXR5EmoKGFJlcXVlc3RSZWNvdmVyeUNoYWxsZW5nZRIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRo2LmR4b3MuY2xpZW50LnNlcnZpY2VzLlJlcXVlc3RSZWNvdmVyeUNoYWxsZW5nZVJlc3BvbnNlEl8KD1JlY292ZXJJZGVudGl0eRIsLmR4b3MuY2xpZW50LnNlcnZpY2VzLlJlY292ZXJJZGVudGl0eVJlcXVlc3QaHi5keG9zLmNsaWVudC5zZXJ2aWNlcy5JZGVudGl0eRKJAQoYQ3JlYXRlUmVjb3ZlcnlDcmVkZW50aWFsEjUuZHhvcy5jbGllbnQuc2VydmljZXMuQ3JlYXRlUmVjb3ZlcnlDcmVkZW50aWFsUmVxdWVzdBo2LmR4b3MuY2xpZW50LnNlcnZpY2VzLkNyZWF0ZVJlY292ZXJ5Q3JlZGVudGlhbFJlc3BvbnNlElYKDVF1ZXJ5SWRlbnRpdHkSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaKy5keG9zLmNsaWVudC5zZXJ2aWNlcy5RdWVyeUlkZW50aXR5UmVzcG9uc2UwARJXCg1VcGRhdGVQcm9maWxlEiYuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLlByb2ZpbGVEb2N1bWVudBoeLmR4b3MuY2xpZW50LnNlcnZpY2VzLklkZW50aXR5EmYKEFNpZ25QcmVzZW50YXRpb24SLS5keG9zLmNsaWVudC5zZXJ2aWNlcy5TaWduUHJlc2VudGF0aW9uUmVxdWVzdBojLmR4b3MuaGFsby5jcmVkZW50aWFscy5QcmVzZW50YXRpb24SUQoUQ3JlYXRlQXV0aENyZWRlbnRpYWwSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaIS5keG9zLmhhbG8uY3JlZGVudGlhbHMuQ3JlZGVudGlhbDLCAQoORGV2aWNlc1NlcnZpY2USWgoMVXBkYXRlRGV2aWNlEiwuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLkRldmljZVByb2ZpbGVEb2N1bWVudBocLmR4b3MuY2xpZW50LnNlcnZpY2VzLkRldmljZRJUCgxRdWVyeURldmljZXMSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaKi5keG9zLmNsaWVudC5zZXJ2aWNlcy5RdWVyeURldmljZXNSZXNwb25zZTABMqkBCg9Db250YWN0c1NlcnZpY2USSAoLR2V0Q29udGFjdHMSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaIS5keG9zLmNsaWVudC5zZXJ2aWNlcy5Db250YWN0Qm9vaxJMCg1RdWVyeUNvbnRhY3RzEhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5GiEuZHhvcy5jbGllbnQuc2VydmljZXMuQ29udGFjdEJvb2swATK/CQoNU3BhY2VzU2VydmljZRJCCgtDcmVhdGVTcGFjZRIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRobLmR4b3MuY2xpZW50LnNlcnZpY2VzLlNwYWNlEk8KC1VwZGF0ZVNwYWNlEiguZHhvcy5jbGllbnQuc2VydmljZXMuVXBkYXRlU3BhY2VSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5ElIKC1F1ZXJ5U3BhY2VzEhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5GikuZHhvcy5jbGllbnQuc2VydmljZXMuUXVlcnlTcGFjZXNSZXNwb25zZTABElkKEFVwZGF0ZU1lbWJlclJvbGUSLS5keG9zLmNsaWVudC5zZXJ2aWNlcy5VcGRhdGVNZW1iZXJSb2xlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJRCgxBZG1pdENvbnRhY3QSKS5keG9zLmNsaWVudC5zZXJ2aWNlcy5BZG1pdENvbnRhY3RSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5EmYKDkpvaW5CeVNwYWNlS2V5EisuZHhvcy5jbGllbnQuc2VydmljZXMuSm9pbkJ5U3BhY2VLZXlSZXF1ZXN0GicuZHhvcy5jbGllbnQuc2VydmljZXMuSm9pblNwYWNlUmVzcG9uc2USTwoLUG9zdE1lc3NhZ2USKC5keG9zLmNsaWVudC5zZXJ2aWNlcy5Qb3N0TWVzc2FnZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSbwoRU3Vic2NyaWJlTWVzc2FnZXMSLi5keG9zLmNsaWVudC5zZXJ2aWNlcy5TdWJzY3JpYmVNZXNzYWdlc1JlcXVlc3QaKC5keG9zLm1lc2gudGVsZXBvcnQuZ29zc2lwLkdvc3NpcE1lc3NhZ2UwARJZChBXcml0ZUNyZWRlbnRpYWxzEi0uZHhvcy5jbGllbnQuc2VydmljZXMuV3JpdGVDcmVkZW50aWFsc1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSZgoQUXVlcnlDcmVkZW50aWFscxItLmR4b3MuY2xpZW50LnNlcnZpY2VzLlF1ZXJ5Q3JlZGVudGlhbHNSZXF1ZXN0GiEuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLkNyZWRlbnRpYWwwARJiCgtDcmVhdGVFcG9jaBIoLmR4b3MuY2xpZW50LnNlcnZpY2VzLkNyZWF0ZUVwb2NoUmVxdWVzdBopLmR4b3MuY2xpZW50LnNlcnZpY2VzLkNyZWF0ZUVwb2NoUmVzcG9uc2USYgoLRXhwb3J0U3BhY2USKC5keG9zLmNsaWVudC5zZXJ2aWNlcy5FeHBvcnRTcGFjZVJlcXVlc3QaKS5keG9zLmNsaWVudC5zZXJ2aWNlcy5FeHBvcnRTcGFjZVJlc3BvbnNlEmIKC0ltcG9ydFNwYWNlEiguZHhvcy5jbGllbnQuc2VydmljZXMuSW1wb3J0U3BhY2VSZXF1ZXN0GikuZHhvcy5jbGllbnQuc2VydmljZXMuSW1wb3J0U3BhY2VSZXNwb25zZTLjAwoSSW52aXRhdGlvbnNTZXJ2aWNlElgKEENyZWF0ZUludml0YXRpb24SIC5keG9zLmNsaWVudC5zZXJ2aWNlcy5JbnZpdGF0aW9uGiAuZHhvcy5jbGllbnQuc2VydmljZXMuSW52aXRhdGlvbjABEmUKEEFjY2VwdEludml0YXRpb24SLS5keG9zLmNsaWVudC5zZXJ2aWNlcy5BY2NlcHRJbnZpdGF0aW9uUmVxdWVzdBogLmR4b3MuY2xpZW50LnNlcnZpY2VzLkludml0YXRpb24wARJTCgxBdXRoZW50aWNhdGUSKy5keG9zLmNsaWVudC5zZXJ2aWNlcy5BdXRoZW50aWNhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSWQoQQ2FuY2VsSW52aXRhdGlvbhItLmR4b3MuY2xpZW50LnNlcnZpY2VzLkNhbmNlbEludml0YXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5ElwKEFF1ZXJ5SW52aXRhdGlvbnMSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaLi5keG9zLmNsaWVudC5zZXJ2aWNlcy5RdWVyeUludml0YXRpb25zUmVzcG9uc2UwATKLBQoOTmV0d29ya1NlcnZpY2USUQoMVXBkYXRlQ29uZmlnEikuZHhvcy5jbGllbnQuc2VydmljZXMuVXBkYXRlQ29uZmlnUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJMCgtRdWVyeVN0YXR1cxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRojLmR4b3MuY2xpZW50LnNlcnZpY2VzLk5ldHdvcmtTdGF0dXMwARJCCglKb2luU3dhcm0SHS5keG9zLmVkZ2Uuc2lnbmFsLkpvaW5SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5EkQKCkxlYXZlU3dhcm0SHi5keG9zLmVkZ2Uuc2lnbmFsLkxlYXZlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJQCgpRdWVyeVN3YXJtEh4uZHhvcy5lZGdlLnNpZ25hbC5RdWVyeVJlcXVlc3QaIi5keG9zLmVkZ2UubWVzc2VuZ2VyLlN3YXJtUmVzcG9uc2USbQoTU3Vic2NyaWJlU3dhcm1TdGF0ZRIwLmR4b3MuY2xpZW50LnNlcnZpY2VzLlN1YnNjcmliZVN3YXJtU3RhdGVSZXF1ZXN0GiIuZHhvcy5lZGdlLm1lc3Nlbmdlci5Td2FybVJlc3BvbnNlMAESQAoLU2VuZE1lc3NhZ2USGS5keG9zLmVkZ2Uuc2lnbmFsLk1lc3NhZ2UaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSSwoRU3Vic2NyaWJlTWVzc2FnZXMSGS5keG9zLmVkZ2UubWVzc2VuZ2VyLlBlZXIaGS5keG9zLmVkZ2Uuc2lnbmFsLk1lc3NhZ2UwATKLAgoQRWRnZUFnZW50U2VydmljZRJaCg9RdWVyeUVkZ2VTdGF0dXMSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaLS5keG9zLmNsaWVudC5zZXJ2aWNlcy5RdWVyeUVkZ2VTdGF0dXNSZXNwb25zZTABEj0KC0NyZWF0ZUFnZW50EhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5ElwKEFF1ZXJ5QWdlbnRTdGF0dXMSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaLi5keG9zLmNsaWVudC5zZXJ2aWNlcy5RdWVyeUFnZW50U3RhdHVzUmVzcG9uc2UwAWIGcHJvdG8z", [file_google_protobuf_any, file_google_protobuf_empty, file_google_protobuf_struct, file_google_protobuf_timestamp, file_dxos_client_invitation, file_dxos_config, file_dxos_devtools_swarm, file_dxos_echo_metadata, file_dxos_echo_timeframe, file_dxos_edge_messenger, file_dxos_edge_signal, file_dxos_error, file_dxos_halo_credentials, file_dxos_keys, file_dxos_mesh_signal, file_dxos_mesh_presence, file_dxos_mesh_teleport_gossip, file_dxos_value]);
49
49
 
50
50
  /**
51
51
  * @generated from message dxos.client.services.UpdateStatusRequest
@@ -241,6 +241,11 @@ export enum Platform_PLATFORM_TYPE {
241
241
  * @generated from enum value: NODE = 2;
242
242
  */
243
243
  NODE = 2,
244
+
245
+ /**
246
+ * @generated from enum value: DEDICATED_WORKER = 3;
247
+ */
248
+ DEDICATED_WORKER = 3,
244
249
  }
245
250
 
246
251
  /**