@dbx-tools/shared-genie 0.9.40 → 0.9.43

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.
@@ -4,92 +4,35 @@
4
4
  // Generated by ts-to-zod
5
5
  import { z } from "zod";
6
6
  export const authorizationDetailsGrantRuleSchema = z.object({
7
- /**
8
- * @description Permission sets for dashboard are defined in iam-common/rbac-common/permission-sets/definitions/TreeStoreBasePermissionSets Ex: `permissionSets/dashboard.runner`
9
- */
10
7
  permission_set: z.string().optional().describe("Permission sets for dashboard are defined in iam-common/rbac-common/permission-sets/definitions/TreeStoreBasePermissionSets Ex: `permissionSets/dashboard.runner`")
11
8
  });
12
9
  export const cronScheduleSchema = z.object({
13
- /**
14
- * @description A cron expression using quartz syntax. EX: `0 0 8 * * ?` represents everyday at 8am. See [Cron Trigger] for details. [Cron Trigger]: http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html
15
- */
16
10
  quartz_cron_expression: z.string().describe("A cron expression using quartz syntax. EX: `0 0 8 * * ?` represents everyday at 8am. See [Cron Trigger] for details. [Cron Trigger]: http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html"),
17
- /**
18
- * @description A Java timezone id. The schedule will be resolved with respect to this timezone. See [Java TimeZone] for details. [Java TimeZone]: https://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html
19
- */
20
11
  timezone_id: z.string().describe("A Java timezone id. The schedule will be resolved with respect to this timezone. See [Java TimeZone] for details. [Java TimeZone]: https://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html")
21
12
  });
22
13
  export const lifecycleStateSchema = z.union([z.literal("ACTIVE"), z.literal("TRASHED")]);
23
14
  export const dashboardViewSchema = z.literal("DASHBOARD_VIEW_BASIC");
24
15
  export const deleteScheduleRequestSchema = z.object({
25
- /**
26
- * @description UUID identifying the dashboard to which the schedule belongs.
27
- */
28
16
  dashboard_id: z.string().describe("UUID identifying the dashboard to which the schedule belongs."),
29
- /**
30
- * @description The etag for the schedule. Optionally, it can be provided to verify that the schedule has not been modified from its last retrieval.
31
- */
32
17
  etag: z.string().optional().describe("The etag for the schedule. Optionally, it can be provided to verify that the schedule has not been modified from its last retrieval."),
33
- /**
34
- * @description UUID identifying the schedule.
35
- */
36
18
  schedule_id: z.string().describe("UUID identifying the schedule.")
37
19
  });
38
20
  export const deleteSubscriptionRequestSchema = z.object({
39
- /**
40
- * @description UUID identifying the dashboard which the subscription belongs.
41
- */
42
21
  dashboard_id: z.string().describe("UUID identifying the dashboard which the subscription belongs."),
43
- /**
44
- * @description The etag for the subscription. Can be optionally provided to ensure that the subscription has not been modified since the last read.
45
- */
46
22
  etag: z.string().optional().describe("The etag for the subscription. Can be optionally provided to ensure that the subscription has not been modified since the last read."),
47
- /**
48
- * @description UUID identifying the schedule which the subscription belongs.
49
- */
50
23
  schedule_id: z.string().describe("UUID identifying the schedule which the subscription belongs."),
51
- /**
52
- * @description UUID identifying the subscription.
53
- */
54
24
  subscription_id: z.string().describe("UUID identifying the subscription.")
55
25
  });
56
- /**
57
- * @description Follow-up questions suggested by Genie
58
- */
59
26
  export const genieSuggestedQuestionsAttachmentSchema = z.object({
60
- /**
61
- * @description The suggested follow-up questions
62
- */
63
27
  questions: z.array(z.string()).optional().describe("The suggested follow-up questions")
64
28
  });
65
29
  export const genieConversationSchema = z.object({
66
- /**
67
- * @description Conversation ID
68
- */
69
30
  conversation_id: z.string().describe("Conversation ID"),
70
- /**
71
- * @description Timestamp when the message was created
72
- */
73
31
  created_timestamp: z.number().optional().describe("Timestamp when the message was created"),
74
- /**
75
- * @description Conversation ID. Legacy identifier, use conversation_id instead
76
- */
77
32
  id: z.string().describe("Conversation ID. Legacy identifier, use conversation_id instead"),
78
- /**
79
- * @description Timestamp when the message was last updated
80
- */
81
33
  last_updated_timestamp: z.number().optional().describe("Timestamp when the message was last updated"),
82
- /**
83
- * @description Genie space ID
84
- */
85
34
  space_id: z.string().describe("Genie space ID"),
86
- /**
87
- * @description Conversation title
88
- */
89
35
  title: z.string().describe("Conversation title"),
90
- /**
91
- * @description ID of the user who created the conversation
92
- */
93
36
  user_id: z.number().describe("ID of the user who created the conversation")
94
37
  });
95
38
  export const genieConversationSummarySchema = z.object({
@@ -98,259 +41,94 @@ export const genieConversationSummarySchema = z.object({
98
41
  title: z.string()
99
42
  });
100
43
  export const genieCreateConversationMessageRequestSchema = z.object({
101
- /**
102
- * @description User message content.
103
- */
104
44
  content: z.string().describe("User message content."),
105
- /**
106
- * @description The ID associated with the conversation.
107
- */
108
45
  conversation_id: z.string().describe("The ID associated with the conversation."),
109
- /**
110
- * @description The ID associated with the Genie space where the conversation is started.
111
- */
112
46
  space_id: z.string().describe("The ID associated with the Genie space where the conversation is started.")
113
47
  });
114
48
  export const genieDeleteConversationMessageRequestSchema = z.object({
115
- /**
116
- * @description The ID associated with the conversation.
117
- */
118
49
  conversation_id: z.string().describe("The ID associated with the conversation."),
119
- /**
120
- * @description The ID associated with the message to delete.
121
- */
122
50
  message_id: z.string().describe("The ID associated with the message to delete."),
123
- /**
124
- * @description The ID associated with the Genie space where the message is located.
125
- */
126
51
  space_id: z.string().describe("The ID associated with the Genie space where the message is located.")
127
52
  });
128
53
  export const genieDeleteConversationRequestSchema = z.object({
129
- /**
130
- * @description The ID of the conversation to delete.
131
- */
132
54
  conversation_id: z.string().describe("The ID of the conversation to delete."),
133
- /**
134
- * @description The ID associated with the Genie space where the conversation is located.
135
- */
136
55
  space_id: z.string().describe("The ID associated with the Genie space where the conversation is located.")
137
56
  });
138
57
  export const genieExecuteMessageAttachmentQueryRequestSchema = z.object({
139
- /**
140
- * @description Attachment ID
141
- */
142
58
  attachment_id: z.string().describe("Attachment ID"),
143
- /**
144
- * @description Conversation ID
145
- */
146
59
  conversation_id: z.string().describe("Conversation ID"),
147
- /**
148
- * @description Message ID
149
- */
150
60
  message_id: z.string().describe("Message ID"),
151
- /**
152
- * @description Genie space ID
153
- */
154
61
  space_id: z.string().describe("Genie space ID")
155
62
  });
156
63
  export const genieExecuteMessageQueryRequestSchema = z.object({
157
- /**
158
- * @description Conversation ID
159
- */
160
64
  conversation_id: z.string().describe("Conversation ID"),
161
- /**
162
- * @description Message ID
163
- */
164
65
  message_id: z.string().describe("Message ID"),
165
- /**
166
- * @description Genie space ID
167
- */
168
66
  space_id: z.string().describe("Genie space ID")
169
67
  });
170
- /**
171
- * @description Feedback rating for Genie messages
172
- */
173
68
  export const genieFeedbackRatingSchema = z.union([z.literal("NEGATIVE"), z.literal("NONE"), z.literal("POSITIVE")]).describe("Feedback rating for Genie messages");
174
69
  export const genieGetConversationMessageRequestSchema = z.object({
175
- /**
176
- * @description The ID associated with the target conversation.
177
- */
178
70
  conversation_id: z.string().describe("The ID associated with the target conversation."),
179
- /**
180
- * @description The ID associated with the target message from the identified conversation.
181
- */
182
71
  message_id: z.string().describe("The ID associated with the target message from the identified conversation."),
183
- /**
184
- * @description The ID associated with the Genie space where the target conversation is located.
185
- */
186
72
  space_id: z.string().describe("The ID associated with the Genie space where the target conversation is located.")
187
73
  });
188
74
  export const genieGetMessageAttachmentQueryResultRequestSchema = z.object({
189
- /**
190
- * @description Attachment ID
191
- */
192
75
  attachment_id: z.string().describe("Attachment ID"),
193
- /**
194
- * @description Conversation ID
195
- */
196
76
  conversation_id: z.string().describe("Conversation ID"),
197
- /**
198
- * @description Message ID
199
- */
200
77
  message_id: z.string().describe("Message ID"),
201
- /**
202
- * @description Genie space ID
203
- */
204
78
  space_id: z.string().describe("Genie space ID")
205
79
  });
206
80
  export const genieGetMessageQueryResultRequestSchema = z.object({
207
- /**
208
- * @description Conversation ID
209
- */
210
81
  conversation_id: z.string().describe("Conversation ID"),
211
- /**
212
- * @description Message ID
213
- */
214
82
  message_id: z.string().describe("Message ID"),
215
- /**
216
- * @description Genie space ID
217
- */
218
83
  space_id: z.string().describe("Genie space ID")
219
84
  });
220
85
  export const genieGetMessageQueryResultResponseSchema = z.object({
221
- /**
222
- * @description SQL Statement Execution response. See [Get status, manifest, and result first chunk](:method:statementexecution/getstatement) for more details.
223
- */
224
86
  statement_response: z.unknown().optional().describe("SQL Statement Execution response. See [Get status, manifest, and result first chunk](:method:statementexecution/getstatement) for more details.")
225
87
  });
226
88
  export const genieGetQueryResultByAttachmentRequestSchema = z.object({
227
- /**
228
- * @description Attachment ID
229
- */
230
89
  attachment_id: z.string().describe("Attachment ID"),
231
- /**
232
- * @description Conversation ID
233
- */
234
90
  conversation_id: z.string().describe("Conversation ID"),
235
- /**
236
- * @description Message ID
237
- */
238
91
  message_id: z.string().describe("Message ID"),
239
- /**
240
- * @description Genie space ID
241
- */
242
92
  space_id: z.string().describe("Genie space ID")
243
93
  });
244
94
  export const genieGetSpaceRequestSchema = z.object({
245
- /**
246
- * @description The ID associated with the Genie space
247
- */
248
95
  space_id: z.string().describe("The ID associated with the Genie space")
249
96
  });
250
97
  export const genieListConversationMessagesRequestSchema = z.object({
251
- /**
252
- * @description The ID of the conversation to list messages from
253
- */
254
98
  conversation_id: z.string().describe("The ID of the conversation to list messages from"),
255
- /**
256
- * @description Maximum number of messages to return per page
257
- */
258
99
  page_size: z.number().optional().describe("Maximum number of messages to return per page"),
259
- /**
260
- * @description Token to get the next page of results
261
- */
262
100
  page_token: z.string().optional().describe("Token to get the next page of results"),
263
- /**
264
- * @description The ID associated with the Genie space where the conversation is located
265
- */
266
101
  space_id: z.string().describe("The ID associated with the Genie space where the conversation is located")
267
102
  });
268
103
  export const genieListConversationsRequestSchema = z.object({
269
- /**
270
- * @description Include all conversations in the space across all users. Requires at least CAN MANAGE permission on the space.
271
- */
272
104
  include_all: z.boolean().optional().describe("Include all conversations in the space across all users. Requires at least CAN MANAGE permission on the space."),
273
- /**
274
- * @description Maximum number of conversations to return per page
275
- */
276
105
  page_size: z.number().optional().describe("Maximum number of conversations to return per page"),
277
- /**
278
- * @description Token to get the next page of results
279
- */
280
106
  page_token: z.string().optional().describe("Token to get the next page of results"),
281
- /**
282
- * @description The ID of the Genie space to retrieve conversations from.
283
- */
284
107
  space_id: z.string().describe("The ID of the Genie space to retrieve conversations from.")
285
108
  });
286
109
  export const genieListConversationsResponseSchema = z.object({
287
- /**
288
- * @description List of conversations in the Genie space
289
- */
290
110
  conversations: z.array(genieConversationSummarySchema).optional().describe("List of conversations in the Genie space"),
291
- /**
292
- * @description Token to get the next page of results
293
- */
294
111
  next_page_token: z.string().optional().describe("Token to get the next page of results")
295
112
  });
296
113
  export const genieListSpacesRequestSchema = z.object({
297
- /**
298
- * @description Maximum number of spaces to return per page
299
- */
300
114
  page_size: z.number().optional().describe("Maximum number of spaces to return per page"),
301
- /**
302
- * @description Pagination token for getting the next page of results
303
- */
304
115
  page_token: z.string().optional().describe("Pagination token for getting the next page of results")
305
116
  });
306
117
  export const genieSpaceSchema = z.object({
307
- /**
308
- * @description Description of the Genie Space
309
- */
310
118
  description: z.string().optional().describe("Description of the Genie Space"),
311
- /**
312
- * @description Genie space ID
313
- */
314
119
  space_id: z.string().describe("Genie space ID"),
315
- /**
316
- * @description Title of the Genie Space
317
- */
318
120
  title: z.string().describe("Title of the Genie Space"),
319
- /**
320
- * @description Warehouse associated with the Genie Space
321
- */
322
121
  warehouse_id: z.string().optional().describe("Warehouse associated with the Genie Space")
323
122
  });
324
- /**
325
- * @description Feedback containing rating and optional comment
326
- */
327
123
  export const genieFeedbackSchema = z.object({
328
- /**
329
- * @description The feedback rating
330
- */
331
124
  rating: genieFeedbackRatingSchema.optional().describe("The feedback rating")
332
125
  });
333
126
  export const resultSchema = z.object({
334
- /**
335
- * @description If result is truncated
336
- */
337
127
  is_truncated: z.boolean().optional().describe("If result is truncated"),
338
- /**
339
- * @description Row count of the result
340
- */
341
128
  row_count: z.number().optional().describe("Row count of the result"),
342
- /**
343
- * @description Statement Execution API statement id. Use [Get status, manifest, and result first chunk](:method:statementexecution/getstatement) to get the full result data.
344
- */
345
129
  statement_id: z.string().optional().describe("Statement Execution API statement id. Use [Get status, manifest, and result first chunk](:method:statementexecution/getstatement) to get the full result data."),
346
- /**
347
- * @description JWT corresponding to the statement contained in this result
348
- */
349
130
  statement_id_signature: z.string().optional().describe("JWT corresponding to the statement contained in this result")
350
131
  });
351
- /**
352
- * @description MessageStatus. The possible values are: * `FETCHING_METADATA`: Fetching metadata from the data sources. * `FILTERING_CONTEXT`: Running smart context step to determine relevant context. * `ASKING_AI`: Waiting for the LLM to respond to the user's question. * `PENDING_WAREHOUSE`: Waiting for warehouse before the SQL query can start executing. * `EXECUTING_QUERY`: Executing a generated SQL query. Get the SQL query result by calling [getMessageAttachmentQueryResult](:method:genie/getMessageAttachmentQueryResult) API. * `FAILED`: The response generation or query execution failed. See `error` field. * `COMPLETED`: Message processing is completed. Results are in the `attachments` field. Get the SQL query result by calling [getMessageAttachmentQueryResult](:method:genie/getMessageAttachmentQueryResult) API. * `SUBMITTED`: Message has been submitted. * `QUERY_RESULT_EXPIRED`: SQL result is not available anymore. The user needs to rerun the query. Rerun the SQL query result by calling [executeMessageAttachmentQuery](:method:genie/executeMessageAttachmentQuery) API. * `CANCELLED`: Message has been cancelled.
353
- */
354
132
  export const messageStatusSchema = z.union([z.literal("ASKING_AI"), z.literal("CANCELLED"), z.literal("COMPLETED"), z.literal("EXECUTING_QUERY"), z.literal("FAILED"), z.literal("FETCHING_METADATA"), z.literal("FILTERING_CONTEXT"), z.literal("PENDING_WAREHOUSE"), z.literal("QUERY_RESULT_EXPIRED"), z.literal("SUBMITTED")]).describe("MessageStatus. The possible values are: * `FETCHING_METADATA`: Fetching metadata from the data sources. * `FILTERING_CONTEXT`: Running smart context step to determine relevant context. * `ASKING_AI`: Waiting for the LLM to respond to the user's question. * `PENDING_WAREHOUSE`: Waiting for warehouse before the SQL query can start executing. * `EXECUTING_QUERY`: Executing a generated SQL query. Get the SQL query result by calling [getMessageAttachmentQueryResult](:method:genie/getMessageAttachmentQueryResult) API. * `FAILED`: The response generation or query execution failed. See `error` field. * `COMPLETED`: Message processing is completed. Results are in the `attachments` field. Get the SQL query result by calling [getMessageAttachmentQueryResult](:method:genie/getMessageAttachmentQueryResult) API. * `SUBMITTED`: Message has been submitted. * `QUERY_RESULT_EXPIRED`: SQL result is not available anymore. The user needs to rerun the query. Rerun the SQL query result by calling [executeMessageAttachmentQuery](:method:genie/executeMessageAttachmentQuery) API. * `CANCELLED`: Message has been cancelled.");
355
133
  export const queryAttachmentParameterSchema = z.object({
356
134
  keyword: z.string().optional(),
@@ -358,459 +136,168 @@ export const queryAttachmentParameterSchema = z.object({
358
136
  value: z.string().optional()
359
137
  });
360
138
  export const genieResultMetadataSchema = z.object({
361
- /**
362
- * @description Indicates whether the result set is truncated.
363
- */
364
139
  is_truncated: z.boolean().optional().describe("Indicates whether the result set is truncated."),
365
- /**
366
- * @description The number of rows in the result set.
367
- */
368
140
  row_count: z.number().optional().describe("The number of rows in the result set.")
369
141
  });
370
142
  export const genieSendMessageFeedbackRequestSchema = z.object({
371
- /**
372
- * @description The ID associated with the conversation.
373
- */
374
143
  conversation_id: z.string().describe("The ID associated with the conversation."),
375
- /**
376
- * @description The ID associated with the message to provide feedback for.
377
- */
378
144
  message_id: z.string().describe("The ID associated with the message to provide feedback for."),
379
- /**
380
- * @description The rating (POSITIVE, NEGATIVE, or NONE).
381
- */
382
145
  rating: genieFeedbackRatingSchema.describe("The rating (POSITIVE, NEGATIVE, or NONE)."),
383
- /**
384
- * @description The ID associated with the Genie space where the message is located.
385
- */
386
146
  space_id: z.string().describe("The ID associated with the Genie space where the message is located.")
387
147
  });
388
148
  export const genieStartConversationMessageRequestSchema = z.object({
389
- /**
390
- * @description The text of the message that starts the conversation.
391
- */
392
149
  content: z.string().describe("The text of the message that starts the conversation."),
393
- /**
394
- * @description The ID associated with the Genie space where you want to start a conversation.
395
- */
396
150
  space_id: z.string().describe("The ID associated with the Genie space where you want to start a conversation.")
397
151
  });
398
152
  export const genieTrashSpaceRequestSchema = z.object({
399
- /**
400
- * @description The ID associated with the Genie space to be sent to the trash.
401
- */
402
153
  space_id: z.string().describe("The ID associated with the Genie space to be sent to the trash.")
403
154
  });
404
155
  export const getDashboardRequestSchema = z.object({
405
- /**
406
- * @description UUID identifying the dashboard.
407
- */
408
156
  dashboard_id: z.string().describe("UUID identifying the dashboard.")
409
157
  });
410
158
  export const getPublishedDashboardRequestSchema = z.object({
411
- /**
412
- * @description UUID identifying the published dashboard.
413
- */
414
159
  dashboard_id: z.string().describe("UUID identifying the published dashboard.")
415
160
  });
416
161
  export const getPublishedDashboardTokenInfoRequestSchema = z.object({
417
- /**
418
- * @description UUID identifying the published dashboard.
419
- */
420
162
  dashboard_id: z.string().describe("UUID identifying the published dashboard."),
421
- /**
422
- * @description Provided external value to be included in the custom claim.
423
- */
424
163
  external_value: z.string().optional().describe("Provided external value to be included in the custom claim."),
425
- /**
426
- * @description Provided external viewer id to be included in the custom claim.
427
- */
428
164
  external_viewer_id: z.string().optional().describe("Provided external viewer id to be included in the custom claim.")
429
165
  });
430
166
  export const authorizationDetailsSchema = z.object({
431
- /**
432
- * @description Represents downscoped permission rules with specific access rights. This field is specific to `workspace_rule_set` constraint.
433
- */
434
167
  grant_rules: z.array(authorizationDetailsGrantRuleSchema).optional().describe("Represents downscoped permission rules with specific access rights. This field is specific to `workspace_rule_set` constraint."),
435
- /**
436
- * @description The acl path of the tree store resource resource.
437
- */
438
168
  resource_legacy_acl_path: z.string().optional().describe("The acl path of the tree store resource resource."),
439
- /**
440
- * @description The resource name to which the authorization rule applies. This field is specific to `workspace_rule_set` constraint. Format: `workspaces/{workspace_id}/dashboards/{dashboard_id}`
441
- */
442
169
  resource_name: z.string().optional().describe("The resource name to which the authorization rule applies. This field is specific to `workspace_rule_set` constraint. Format: `workspaces/{workspace_id}/dashboards/{dashboard_id}`"),
443
- /**
444
- * @description The type of authorization downscoping policy. Ex: `workspace_rule_set` defines access rules for a specific workspace resource
445
- */
446
170
  type: z.string().optional().describe("The type of authorization downscoping policy. Ex: `workspace_rule_set` defines access rules for a specific workspace resource")
447
171
  });
448
172
  export const getScheduleRequestSchema = z.object({
449
- /**
450
- * @description UUID identifying the dashboard to which the schedule belongs.
451
- */
452
173
  dashboard_id: z.string().describe("UUID identifying the dashboard to which the schedule belongs."),
453
- /**
454
- * @description UUID identifying the schedule.
455
- */
456
174
  schedule_id: z.string().describe("UUID identifying the schedule.")
457
175
  });
458
176
  export const getSubscriptionRequestSchema = z.object({
459
- /**
460
- * @description UUID identifying the dashboard which the subscription belongs.
461
- */
462
177
  dashboard_id: z.string().describe("UUID identifying the dashboard which the subscription belongs."),
463
- /**
464
- * @description UUID identifying the schedule which the subscription belongs.
465
- */
466
178
  schedule_id: z.string().describe("UUID identifying the schedule which the subscription belongs."),
467
- /**
468
- * @description UUID identifying the subscription.
469
- */
470
179
  subscription_id: z.string().describe("UUID identifying the subscription.")
471
180
  });
472
181
  export const listDashboardsRequestSchema = z.object({
473
- /**
474
- * @description The number of dashboards to return per page.
475
- */
476
182
  page_size: z.number().optional().describe("The number of dashboards to return per page."),
477
- /**
478
- * @description A page token, received from a previous `ListDashboards` call. This token can be used to retrieve the subsequent page.
479
- */
480
183
  page_token: z.string().optional().describe("A page token, received from a previous `ListDashboards` call. This token can be used to retrieve the subsequent page."),
481
- /**
482
- * @description The flag to include dashboards located in the trash. If unspecified, only active dashboards will be returned.
483
- */
484
184
  show_trashed: z.boolean().optional().describe("The flag to include dashboards located in the trash. If unspecified, only active dashboards will be returned."),
485
- /**
486
- * @description `DASHBOARD_VIEW_BASIC`only includes summary metadata from the dashboard.
487
- */
488
185
  view: dashboardViewSchema.optional().describe("`DASHBOARD_VIEW_BASIC`only includes summary metadata from the dashboard.")
489
186
  });
490
187
  export const dashboardSchema = z.object({
491
- /**
492
- * @description The timestamp of when the dashboard was created.
493
- */
494
188
  create_time: z.string().optional().describe("The timestamp of when the dashboard was created."),
495
- /**
496
- * @description UUID identifying the dashboard.
497
- */
498
189
  dashboard_id: z.string().optional().describe("UUID identifying the dashboard."),
499
- /**
500
- * @description The display name of the dashboard.
501
- */
502
190
  display_name: z.string().optional().describe("The display name of the dashboard."),
503
- /**
504
- * @description The etag for the dashboard. Can be optionally provided on updates to ensure that the dashboard has not been modified since the last read. This field is excluded in List Dashboards responses.
505
- */
506
191
  etag: z.string().optional().describe("The etag for the dashboard. Can be optionally provided on updates to ensure that the dashboard has not been modified since the last read. This field is excluded in List Dashboards responses."),
507
- /**
508
- * @description The state of the dashboard resource. Used for tracking trashed status.
509
- */
510
192
  lifecycle_state: lifecycleStateSchema.optional().describe("The state of the dashboard resource. Used for tracking trashed status."),
511
- /**
512
- * @description The workspace path of the folder containing the dashboard. Includes leading slash and no trailing slash. This field is excluded in List Dashboards responses.
513
- */
514
193
  parent_path: z.string().optional().describe("The workspace path of the folder containing the dashboard. Includes leading slash and no trailing slash. This field is excluded in List Dashboards responses."),
515
- /**
516
- * @description The workspace path of the dashboard asset, including the file name. Exported dashboards always have the file extension `.lvdash.json`. This field is excluded in List Dashboards responses.
517
- */
518
194
  path: z.string().optional().describe("The workspace path of the dashboard asset, including the file name. Exported dashboards always have the file extension `.lvdash.json`. This field is excluded in List Dashboards responses."),
519
- /**
520
- * @description The contents of the dashboard in serialized string form. This field is excluded in List Dashboards responses. Use the [get dashboard API] to retrieve an example response, which includes the `serialized_dashboard` field. This field provides the structure of the JSON string that represents the dashboard's layout and components. [get dashboard API]: https://docs.databricks.com/api/workspace/lakeview/get
521
- */
522
195
  serialized_dashboard: z.string().optional().describe("The contents of the dashboard in serialized string form. This field is excluded in List Dashboards responses. Use the [get dashboard API] to retrieve an example response, which includes the `serialized_dashboard` field. This field provides the structure of the JSON string that represents the dashboard's layout and components. [get dashboard API]: https://docs.databricks.com/api/workspace/lakeview/get"),
523
- /**
524
- * @description The timestamp of when the dashboard was last updated by the user. This field is excluded in List Dashboards responses.
525
- */
526
196
  update_time: z.string().optional().describe("The timestamp of when the dashboard was last updated by the user. This field is excluded in List Dashboards responses."),
527
- /**
528
- * @description The warehouse ID used to run the dashboard.
529
- */
530
197
  warehouse_id: z.string().optional().describe("The warehouse ID used to run the dashboard.")
531
198
  });
532
199
  export const listSchedulesRequestSchema = z.object({
533
- /**
534
- * @description UUID identifying the dashboard to which the schedules belongs.
535
- */
536
200
  dashboard_id: z.string().describe("UUID identifying the dashboard to which the schedules belongs."),
537
- /**
538
- * @description The number of schedules to return per page.
539
- */
540
201
  page_size: z.number().optional().describe("The number of schedules to return per page."),
541
- /**
542
- * @description A page token, received from a previous `ListSchedules` call. Use this to retrieve the subsequent page.
543
- */
544
202
  page_token: z.string().optional().describe("A page token, received from a previous `ListSchedules` call. Use this to retrieve the subsequent page.")
545
203
  });
546
204
  export const listSubscriptionsRequestSchema = z.object({
547
- /**
548
- * @description UUID identifying the dashboard which the subscriptions belongs.
549
- */
550
205
  dashboard_id: z.string().describe("UUID identifying the dashboard which the subscriptions belongs."),
551
- /**
552
- * @description The number of subscriptions to return per page.
553
- */
554
206
  page_size: z.number().optional().describe("The number of subscriptions to return per page."),
555
- /**
556
- * @description A page token, received from a previous `ListSubscriptions` call. Use this to retrieve the subsequent page.
557
- */
558
207
  page_token: z.string().optional().describe("A page token, received from a previous `ListSubscriptions` call. Use this to retrieve the subsequent page."),
559
- /**
560
- * @description UUID identifying the schedule which the subscriptions belongs.
561
- */
562
208
  schedule_id: z.string().describe("UUID identifying the schedule which the subscriptions belongs.")
563
209
  });
564
210
  export const messageErrorTypeSchema = z.union([z.literal("BLOCK_MULTIPLE_EXECUTIONS_EXCEPTION"), z.literal("CHAT_COMPLETION_CLIENT_EXCEPTION"), z.literal("CHAT_COMPLETION_CLIENT_TIMEOUT_EXCEPTION"), z.literal("CHAT_COMPLETION_NETWORK_EXCEPTION"), z.literal("CONTENT_FILTER_EXCEPTION"), z.literal("CONTEXT_EXCEEDED_EXCEPTION"), z.literal("COULD_NOT_GET_MODEL_DEPLOYMENTS_EXCEPTION"), z.literal("COULD_NOT_GET_UC_SCHEMA_EXCEPTION"), z.literal("DEPLOYMENT_NOT_FOUND_EXCEPTION"), z.literal("DESCRIBE_QUERY_INVALID_SQL_ERROR"), z.literal("DESCRIBE_QUERY_TIMEOUT"), z.literal("DESCRIBE_QUERY_UNEXPECTED_FAILURE"), z.literal("EXCEEDED_MAX_TOKEN_LENGTH_EXCEPTION"), z.literal("FUNCTIONS_NOT_AVAILABLE_EXCEPTION"), z.literal("FUNCTION_ARGUMENTS_INVALID_EXCEPTION"), z.literal("FUNCTION_ARGUMENTS_INVALID_JSON_EXCEPTION"), z.literal("FUNCTION_ARGUMENTS_INVALID_TYPE_EXCEPTION"), z.literal("FUNCTION_CALL_MISSING_PARAMETER_EXCEPTION"), z.literal("GENERATED_SQL_QUERY_TOO_LONG_EXCEPTION"), z.literal("GENERIC_CHAT_COMPLETION_EXCEPTION"), z.literal("GENERIC_CHAT_COMPLETION_SERVICE_EXCEPTION"), z.literal("GENERIC_SQL_EXEC_API_CALL_EXCEPTION"), z.literal("ILLEGAL_PARAMETER_DEFINITION_EXCEPTION"), z.literal("INTERNAL_CATALOG_ASSET_CREATION_FAILED_EXCEPTION"), z.literal("INTERNAL_CATALOG_ASSET_CREATION_ONGOING_EXCEPTION"), z.literal("INTERNAL_CATALOG_ASSET_CREATION_UNSUPPORTED_EXCEPTION"), z.literal("INTERNAL_CATALOG_MISSING_UC_PATH_EXCEPTION"), z.literal("INTERNAL_CATALOG_PATH_OVERLAP_EXCEPTION"), z.literal("INVALID_CERTIFIED_ANSWER_FUNCTION_EXCEPTION"), z.literal("INVALID_CERTIFIED_ANSWER_IDENTIFIER_EXCEPTION"), z.literal("INVALID_CHAT_COMPLETION_ARGUMENTS_JSON_EXCEPTION"), z.literal("INVALID_CHAT_COMPLETION_JSON_EXCEPTION"), z.literal("INVALID_COMPLETION_REQUEST_EXCEPTION"), z.literal("INVALID_FUNCTION_CALL_EXCEPTION"), z.literal("INVALID_SQL_MULTIPLE_DATASET_REFERENCES_EXCEPTION"), z.literal("INVALID_SQL_MULTIPLE_STATEMENTS_EXCEPTION"), z.literal("INVALID_SQL_UNKNOWN_TABLE_EXCEPTION"), z.literal("INVALID_TABLE_IDENTIFIER_EXCEPTION"), z.literal("LOCAL_CONTEXT_EXCEEDED_EXCEPTION"), z.literal("MESSAGE_ATTACHMENT_TOO_LONG_ERROR"), z.literal("MESSAGE_CANCELLED_WHILE_EXECUTING_EXCEPTION"), z.literal("MESSAGE_DELETED_WHILE_EXECUTING_EXCEPTION"), z.literal("MESSAGE_UPDATED_WHILE_EXECUTING_EXCEPTION"), z.literal("MISSING_SQL_QUERY_EXCEPTION"), z.literal("NO_DEPLOYMENTS_AVAILABLE_TO_WORKSPACE"), z.literal("NO_QUERY_TO_VISUALIZE_EXCEPTION"), z.literal("NO_TABLES_TO_QUERY_EXCEPTION"), z.literal("RATE_LIMIT_EXCEEDED_GENERIC_EXCEPTION"), z.literal("RATE_LIMIT_EXCEEDED_SPECIFIED_WAIT_EXCEPTION"), z.literal("REPLY_PROCESS_TIMEOUT_EXCEPTION"), z.literal("RETRYABLE_PROCESSING_EXCEPTION"), z.literal("SQL_EXECUTION_EXCEPTION"), z.literal("STOP_PROCESS_DUE_TO_AUTO_REGENERATE"), z.literal("TABLES_MISSING_EXCEPTION"), z.literal("TOO_MANY_CERTIFIED_ANSWERS_EXCEPTION"), z.literal("TOO_MANY_TABLES_EXCEPTION"), z.literal("UNEXPECTED_REPLY_PROCESS_EXCEPTION"), z.literal("UNKNOWN_AI_MODEL"), z.literal("UNSUPPORTED_CONVERSATION_TYPE_EXCEPTION"), z.literal("WAREHOUSE_ACCESS_MISSING_EXCEPTION"), z.literal("WAREHOUSE_NOT_FOUND_EXCEPTION")]);
565
211
  export const migrateDashboardRequestSchema = z.object({
566
- /**
567
- * @description Display name for the new Lakeview dashboard.
568
- */
569
212
  display_name: z.string().optional().describe("Display name for the new Lakeview dashboard."),
570
- /**
571
- * @description The workspace path of the folder to contain the migrated Lakeview dashboard.
572
- */
573
213
  parent_path: z.string().optional().describe("The workspace path of the folder to contain the migrated Lakeview dashboard."),
574
- /**
575
- * @description UUID of the dashboard to be migrated.
576
- */
577
214
  source_dashboard_id: z.string().describe("UUID of the dashboard to be migrated."),
578
- /**
579
- * @description Flag to indicate if mustache parameter syntax ({{ param }}) should be auto-updated to named syntax (:param) when converting datasets in the dashboard.
580
- */
581
215
  update_parameter_syntax: z.boolean().optional().describe("Flag to indicate if mustache parameter syntax ({{ param }}) should be auto-updated to named syntax (:param) when converting datasets in the dashboard.")
582
216
  });
583
217
  export const publishRequestSchema = z.object({
584
- /**
585
- * @description UUID identifying the dashboard to be published.
586
- */
587
218
  dashboard_id: z.string().describe("UUID identifying the dashboard to be published."),
588
- /**
589
- * @description Flag to indicate if the publisher's credentials should be embedded in the published dashboard. These embedded credentials will be used to execute the published dashboard's queries.
590
- */
591
219
  embed_credentials: z.boolean().optional().describe("Flag to indicate if the publisher's credentials should be embedded in the published dashboard. These embedded credentials will be used to execute the published dashboard's queries."),
592
- /**
593
- * @description The ID of the warehouse that can be used to override the warehouse which was set in the draft.
594
- */
595
220
  warehouse_id: z.string().optional().describe("The ID of the warehouse that can be used to override the warehouse which was set in the draft.")
596
221
  });
597
222
  export const publishedDashboardSchema = z.object({
598
- /**
599
- * @description The display name of the published dashboard.
600
- */
601
223
  display_name: z.string().optional().describe("The display name of the published dashboard."),
602
- /**
603
- * @description Indicates whether credentials are embedded in the published dashboard.
604
- */
605
224
  embed_credentials: z.boolean().optional().describe("Indicates whether credentials are embedded in the published dashboard."),
606
- /**
607
- * @description The timestamp of when the published dashboard was last revised.
608
- */
609
225
  revision_create_time: z.string().optional().describe("The timestamp of when the published dashboard was last revised."),
610
- /**
611
- * @description The warehouse ID used to run the published dashboard.
612
- */
613
226
  warehouse_id: z.string().optional().describe("The warehouse ID used to run the published dashboard.")
614
227
  });
615
228
  export const schedulePauseStatusSchema = z.union([z.literal("PAUSED"), z.literal("UNPAUSED")]);
616
229
  export const subscriptionSubscriberDestinationSchema = z.object({
617
- /**
618
- * @description The canonical identifier of the destination to receive email notification.
619
- */
620
230
  destination_id: z.string().describe("The canonical identifier of the destination to receive email notification.")
621
231
  });
622
232
  export const subscriptionSubscriberUserSchema = z.object({
623
- /**
624
- * @description UserId of the subscriber.
625
- */
626
233
  user_id: z.number().describe("UserId of the subscriber.")
627
234
  });
628
235
  export const subscriberSchema = z.object({
629
- /**
630
- * @description The destination to receive the subscription email. This parameter is mutually exclusive with `user_subscriber`.
631
- */
632
236
  destination_subscriber: subscriptionSubscriberDestinationSchema.optional().describe("The destination to receive the subscription email. This parameter is mutually exclusive with `user_subscriber`."),
633
- /**
634
- * @description The user to receive the subscription email. This parameter is mutually exclusive with `destination_subscriber`.
635
- */
636
237
  user_subscriber: subscriptionSubscriberUserSchema.optional().describe("The user to receive the subscription email. This parameter is mutually exclusive with `destination_subscriber`.")
637
238
  });
638
- /**
639
- * @description Purpose/intent of a text attachment
640
- */
641
239
  export const textAttachmentPurposeSchema = z.literal("FOLLOW_UP_QUESTION").describe("Purpose/intent of a text attachment");
642
240
  export const trashDashboardRequestSchema = z.object({
643
- /**
644
- * @description UUID identifying the dashboard.
645
- */
646
241
  dashboard_id: z.string().describe("UUID identifying the dashboard.")
647
242
  });
648
243
  export const unpublishDashboardRequestSchema = z.object({
649
- /**
650
- * @description UUID identifying the published dashboard.
651
- */
652
244
  dashboard_id: z.string().describe("UUID identifying the published dashboard.")
653
245
  });
654
246
  export const updateDashboardRequestSchema = z.object({
655
247
  dashboard: dashboardSchema,
656
- /**
657
- * @description UUID identifying the dashboard.
658
- */
659
248
  dashboard_id: z.string().describe("UUID identifying the dashboard.")
660
249
  });
661
250
  export const scheduleSchema = z.object({
662
- /**
663
- * @description A timestamp indicating when the schedule was created.
664
- */
665
251
  create_time: z.string().optional().describe("A timestamp indicating when the schedule was created."),
666
- /**
667
- * @description The cron expression describing the frequency of the periodic refresh for this schedule.
668
- */
669
252
  cron_schedule: cronScheduleSchema.describe("The cron expression describing the frequency of the periodic refresh for this schedule."),
670
- /**
671
- * @description UUID identifying the dashboard to which the schedule belongs.
672
- */
673
253
  dashboard_id: z.string().optional().describe("UUID identifying the dashboard to which the schedule belongs."),
674
- /**
675
- * @description The display name for schedule.
676
- */
677
254
  display_name: z.string().optional().describe("The display name for schedule."),
678
- /**
679
- * @description The etag for the schedule. Must be left empty on create, must be provided on updates to ensure that the schedule has not been modified since the last read, and can be optionally provided on delete.
680
- */
681
255
  etag: z.string().optional().describe("The etag for the schedule. Must be left empty on create, must be provided on updates to ensure that the schedule has not been modified since the last read, and can be optionally provided on delete."),
682
- /**
683
- * @description The status indicates whether this schedule is paused or not.
684
- */
685
256
  pause_status: schedulePauseStatusSchema.optional().describe("The status indicates whether this schedule is paused or not."),
686
- /**
687
- * @description UUID identifying the schedule.
688
- */
689
257
  schedule_id: z.string().optional().describe("UUID identifying the schedule."),
690
- /**
691
- * @description A timestamp indicating when the schedule was last updated.
692
- */
693
258
  update_time: z.string().optional().describe("A timestamp indicating when the schedule was last updated."),
694
- /**
695
- * @description The warehouse id to run the dashboard with for the schedule.
696
- */
697
259
  warehouse_id: z.string().optional().describe("The warehouse id to run the dashboard with for the schedule.")
698
260
  });
699
261
  export const createDashboardRequestSchema = z.object({
700
262
  dashboard: dashboardSchema
701
263
  });
702
264
  export const createScheduleRequestSchema = z.object({
703
- /**
704
- * @description UUID identifying the dashboard to which the schedule belongs.
705
- */
706
265
  dashboard_id: z.string().describe("UUID identifying the dashboard to which the schedule belongs."),
707
- /**
708
- * @description The schedule to create. A dashboard is limited to 10 schedules.
709
- */
710
266
  schedule: scheduleSchema.describe("The schedule to create. A dashboard is limited to 10 schedules.")
711
267
  });
712
268
  export const subscriptionSchema = z.object({
713
- /**
714
- * @description A timestamp indicating when the subscription was created.
715
- */
716
269
  create_time: z.string().optional().describe("A timestamp indicating when the subscription was created."),
717
- /**
718
- * @description UserId of the user who adds subscribers (users or notification destinations) to the dashboard's schedule.
719
- */
720
270
  created_by_user_id: z.number().optional().describe("UserId of the user who adds subscribers (users or notification destinations) to the dashboard's schedule."),
721
- /**
722
- * @description UUID identifying the dashboard to which the subscription belongs.
723
- */
724
271
  dashboard_id: z.string().optional().describe("UUID identifying the dashboard to which the subscription belongs."),
725
- /**
726
- * @description The etag for the subscription. Must be left empty on create, can be optionally provided on delete to ensure that the subscription has not been deleted since the last read.
727
- */
728
272
  etag: z.string().optional().describe("The etag for the subscription. Must be left empty on create, can be optionally provided on delete to ensure that the subscription has not been deleted since the last read."),
729
- /**
730
- * @description UUID identifying the schedule to which the subscription belongs.
731
- */
732
273
  schedule_id: z.string().optional().describe("UUID identifying the schedule to which the subscription belongs."),
733
- /**
734
- * @description Subscriber details for users and destinations to be added as subscribers to the schedule.
735
- */
736
274
  subscriber: subscriberSchema.describe("Subscriber details for users and destinations to be added as subscribers to the schedule."),
737
- /**
738
- * @description UUID identifying the subscription.
739
- */
740
275
  subscription_id: z.string().optional().describe("UUID identifying the subscription."),
741
- /**
742
- * @description A timestamp indicating when the subscription was last updated.
743
- */
744
276
  update_time: z.string().optional().describe("A timestamp indicating when the subscription was last updated.")
745
277
  });
746
278
  export const genieQueryAttachmentSchema = z.object({
747
- /**
748
- * @description Description of the query
749
- */
750
279
  description: z.string().optional().describe("Description of the query"),
751
280
  id: z.string().optional(),
752
- /**
753
- * @description Time when the user updated the query last
754
- */
755
281
  last_updated_timestamp: z.number().optional().describe("Time when the user updated the query last"),
756
282
  parameters: z.array(queryAttachmentParameterSchema).optional(),
757
- /**
758
- * @description AI generated SQL query
759
- */
760
283
  query: z.string().optional().describe("AI generated SQL query"),
761
- /**
762
- * @description Metadata associated with the query result.
763
- */
764
284
  query_result_metadata: genieResultMetadataSchema.optional().describe("Metadata associated with the query result."),
765
- /**
766
- * @description Statement Execution API statement id. Use [Get status, manifest, and result first chunk](:method:statementexecution/getstatement) to get the full result data.
767
- */
768
285
  statement_id: z.string().optional().describe("Statement Execution API statement id. Use [Get status, manifest, and result first chunk](:method:statementexecution/getstatement) to get the full result data."),
769
- /**
770
- * @description Name of the query
771
- */
772
286
  title: z.string().optional().describe("Name of the query")
773
287
  });
774
288
  export const textAttachmentSchema = z.object({
775
- /**
776
- * @description AI generated message
777
- */
778
289
  content: z.string().optional().describe("AI generated message"),
779
290
  id: z.string().optional(),
780
- /**
781
- * @description Purpose/intent of this text attachment
782
- */
783
291
  purpose: textAttachmentPurposeSchema.optional().describe("Purpose/intent of this text attachment")
784
292
  });
785
293
  export const genieListSpacesResponseSchema = z.object({
786
- /**
787
- * @description Token to get the next page of results
788
- */
789
294
  next_page_token: z.string().optional().describe("Token to get the next page of results"),
790
- /**
791
- * @description List of Genie spaces
792
- */
793
295
  spaces: z.array(genieSpaceSchema).optional().describe("List of Genie spaces")
794
296
  });
795
- /**
796
- * @description Genie AI Response
797
- */
798
297
  export const genieAttachmentSchema = z.object({
799
- /**
800
- * @description Attachment ID
801
- */
802
298
  attachment_id: z.string().optional().describe("Attachment ID"),
803
- /**
804
- * @description Query Attachment if Genie responds with a SQL query
805
- */
806
299
  query: genieQueryAttachmentSchema.optional().describe("Query Attachment if Genie responds with a SQL query"),
807
- /**
808
- * @description Follow-up questions suggested by Genie
809
- */
810
300
  suggested_questions: genieSuggestedQuestionsAttachmentSchema.optional().describe("Follow-up questions suggested by Genie"),
811
- /**
812
- * @description Text Attachment if Genie responds with text
813
- */
814
301
  text: textAttachmentSchema.optional().describe("Text Attachment if Genie responds with text")
815
302
  });
816
303
  export const messageErrorSchema = z.object({
@@ -818,142 +305,55 @@ export const messageErrorSchema = z.object({
818
305
  type: messageErrorTypeSchema.optional()
819
306
  });
820
307
  export const genieMessageSchema = z.object({
821
- /**
822
- * @description AI-generated response to the message
823
- */
824
308
  attachments: z.array(genieAttachmentSchema).optional().describe("AI-generated response to the message"),
825
- /**
826
- * @description User message content
827
- */
828
309
  content: z.string().describe("User message content"),
829
- /**
830
- * @description Conversation ID
831
- */
832
310
  conversation_id: z.string().describe("Conversation ID"),
833
- /**
834
- * @description Timestamp when the message was created
835
- */
836
311
  created_timestamp: z.number().optional().describe("Timestamp when the message was created"),
837
- /**
838
- * @description Error message if Genie failed to respond to the message
839
- */
840
312
  error: messageErrorSchema.optional().describe("Error message if Genie failed to respond to the message"),
841
- /**
842
- * @description User feedback for the message if provided
843
- */
844
313
  feedback: genieFeedbackSchema.optional().describe("User feedback for the message if provided"),
845
- /**
846
- * @description Message ID. Legacy identifier, use message_id instead
847
- */
848
314
  id: z.string().describe("Message ID. Legacy identifier, use message_id instead"),
849
- /**
850
- * @description Timestamp when the message was last updated
851
- */
852
315
  last_updated_timestamp: z.number().optional().describe("Timestamp when the message was last updated"),
853
- /**
854
- * @description Message ID
855
- */
856
316
  message_id: z.string().describe("Message ID"),
857
- /**
858
- * @description The result of SQL query if the message includes a query attachment. Deprecated. Use `query_result_metadata` in `GenieQueryAttachment` instead.
859
- */
860
317
  query_result: resultSchema.optional().describe("The result of SQL query if the message includes a query attachment. Deprecated. Use `query_result_metadata` in `GenieQueryAttachment` instead."),
861
- /**
862
- * @description Genie space ID
863
- */
864
318
  space_id: z.string().describe("Genie space ID"),
865
- /**
866
- * @description MessageStatus. The possible values are: * `FETCHING_METADATA`: Fetching metadata from the data sources. * `FILTERING_CONTEXT`: Running smart context step to determine relevant context. * `ASKING_AI`: Waiting for the LLM to respond to the user's question. * `PENDING_WAREHOUSE`: Waiting for warehouse before the SQL query can start executing. * `EXECUTING_QUERY`: Executing a generated SQL query. Get the SQL query result by calling [getMessageAttachmentQueryResult](:method:genie/getMessageAttachmentQueryResult) API. * `FAILED`: The response generation or query execution failed. See `error` field. * `COMPLETED`: Message processing is completed. Results are in the `attachments` field. Get the SQL query result by calling [getMessageAttachmentQueryResult](:method:genie/getMessageAttachmentQueryResult) API. * `SUBMITTED`: Message has been submitted. * `QUERY_RESULT_EXPIRED`: SQL result is not available anymore. The user needs to rerun the query. Rerun the SQL query result by calling [executeMessageAttachmentQuery](:method:genie/executeMessageAttachmentQuery) API. * `CANCELLED`: Message has been cancelled.
867
- */
868
319
  status: messageStatusSchema.optional().describe("MessageStatus. The possible values are: * `FETCHING_METADATA`: Fetching metadata from the data sources. * `FILTERING_CONTEXT`: Running smart context step to determine relevant context. * `ASKING_AI`: Waiting for the LLM to respond to the user's question. * `PENDING_WAREHOUSE`: Waiting for warehouse before the SQL query can start executing. * `EXECUTING_QUERY`: Executing a generated SQL query. Get the SQL query result by calling [getMessageAttachmentQueryResult](:method:genie/getMessageAttachmentQueryResult) API. * `FAILED`: The response generation or query execution failed. See `error` field. * `COMPLETED`: Message processing is completed. Results are in the `attachments` field. Get the SQL query result by calling [getMessageAttachmentQueryResult](:method:genie/getMessageAttachmentQueryResult) API. * `SUBMITTED`: Message has been submitted. * `QUERY_RESULT_EXPIRED`: SQL result is not available anymore. The user needs to rerun the query. Rerun the SQL query result by calling [executeMessageAttachmentQuery](:method:genie/executeMessageAttachmentQuery) API. * `CANCELLED`: Message has been cancelled."),
869
- /**
870
- * @description ID of the user who created the message
871
- */
872
320
  user_id: z.number().optional().describe("ID of the user who created the message")
873
321
  });
874
322
  export const getPublishedDashboardTokenInfoResponseSchema = z.object({
875
- /**
876
- * @description Authorization constraints for accessing the published dashboard. Currently includes `workspace_rule_set` and could be enriched with `unity_catalog_privileges` before oAuth token generation.
877
- */
878
323
  authorization_details: z.array(authorizationDetailsSchema).optional().describe("Authorization constraints for accessing the published dashboard. Currently includes `workspace_rule_set` and could be enriched with `unity_catalog_privileges` before oAuth token generation."),
879
- /**
880
- * @description Custom claim generated from external_value and external_viewer_id. Format: `urn:aibi:external_data:<external_value>:<external_viewer_id>:<dashboard_id>`
881
- */
882
324
  custom_claim: z.string().optional().describe("Custom claim generated from external_value and external_viewer_id. Format: `urn:aibi:external_data:<external_value>:<external_viewer_id>:<dashboard_id>`"),
883
- /**
884
- * @description Scope defining access permissions.
885
- */
886
325
  scope: z.string().optional().describe("Scope defining access permissions.")
887
326
  });
888
327
  export const listDashboardsResponseSchema = z.object({
889
328
  dashboards: z.array(dashboardSchema).optional(),
890
- /**
891
- * @description A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent dashboards.
892
- */
893
329
  next_page_token: z.string().optional().describe("A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent dashboards.")
894
330
  });
895
331
  export const listSchedulesResponseSchema = z.object({
896
- /**
897
- * @description A token that can be used as a `page_token` in subsequent requests to retrieve the next page of results. If this field is omitted, there are no subsequent schedules.
898
- */
899
332
  next_page_token: z.string().optional().describe("A token that can be used as a `page_token` in subsequent requests to retrieve the next page of results. If this field is omitted, there are no subsequent schedules."),
900
333
  schedules: z.array(scheduleSchema).optional()
901
334
  });
902
335
  export const listSubscriptionsResponseSchema = z.object({
903
- /**
904
- * @description A token that can be used as a `page_token` in subsequent requests to retrieve the next page of results. If this field is omitted, there are no subsequent subscriptions.
905
- */
906
336
  next_page_token: z.string().optional().describe("A token that can be used as a `page_token` in subsequent requests to retrieve the next page of results. If this field is omitted, there are no subsequent subscriptions."),
907
337
  subscriptions: z.array(subscriptionSchema).optional()
908
338
  });
909
339
  export const updateScheduleRequestSchema = z.object({
910
- /**
911
- * @description UUID identifying the dashboard to which the schedule belongs.
912
- */
913
340
  dashboard_id: z.string().describe("UUID identifying the dashboard to which the schedule belongs."),
914
- /**
915
- * @description The schedule to update.
916
- */
917
341
  schedule: scheduleSchema.describe("The schedule to update."),
918
- /**
919
- * @description UUID identifying the schedule.
920
- */
921
342
  schedule_id: z.string().describe("UUID identifying the schedule.")
922
343
  });
923
344
  export const createSubscriptionRequestSchema = z.object({
924
- /**
925
- * @description UUID identifying the dashboard to which the subscription belongs.
926
- */
927
345
  dashboard_id: z.string().describe("UUID identifying the dashboard to which the subscription belongs."),
928
- /**
929
- * @description UUID identifying the schedule to which the subscription belongs.
930
- */
931
346
  schedule_id: z.string().describe("UUID identifying the schedule to which the subscription belongs."),
932
- /**
933
- * @description The subscription to create. A schedule is limited to 100 subscriptions.
934
- */
935
347
  subscription: subscriptionSchema.describe("The subscription to create. A schedule is limited to 100 subscriptions.")
936
348
  });
937
349
  export const genieListConversationMessagesResponseSchema = z.object({
938
- /**
939
- * @description List of messages in the conversation.
940
- */
941
350
  messages: z.array(genieMessageSchema).optional().describe("List of messages in the conversation."),
942
- /**
943
- * @description The token to use for retrieving the next page of results.
944
- */
945
351
  next_page_token: z.string().optional().describe("The token to use for retrieving the next page of results.")
946
352
  });
947
353
  export const genieStartConversationResponseSchema = z.object({
948
354
  conversation: genieConversationSchema.optional(),
949
- /**
950
- * @description Conversation ID
951
- */
952
355
  conversation_id: z.string().describe("Conversation ID"),
953
356
  message: genieMessageSchema.optional(),
954
- /**
955
- * @description Message ID
956
- */
957
357
  message_id: z.string().describe("Message ID")
958
358
  });
959
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXNoYm9hcmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdFQUFnRTtBQUNoRSwrRUFBK0U7QUFDL0Usd0VBQXdFO0FBRXhFLHlCQUF5QjtBQUN6QixPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLE1BQU0sQ0FBQyxNQUFNLG1DQUFtQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDeEQ7O0dBRUQ7SUFDQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxtS0FBbUssQ0FBQztDQUN0TixDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3ZDOztHQUVEO0lBQ0Msc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyw0TkFBNE4sQ0FBQztJQUN6UTs7R0FFRDtJQUNDLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLHNNQUFzTSxDQUFDO0NBQzNPLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXpGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUVyRSxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2hEOztHQUVEO0lBQ0MsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENB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QU0sQ0FBQyxNQUFNLDJDQUEyQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDaEU7O0dBRUQ7SUFDQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyx1Q0FBdUMsQ0FBQztJQUNsRzs7R0FFRDtJQUNDLGVBQWUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLDJEQUEyRCxDQUFDO0NBQy9HLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLG9DQUFvQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDekQsWUFBWSxFQUFFLHVCQUF1QixDQUFDLFFBQVEsRUFBRTtJQUNoRDs7R0FFRDtJQUNDLGVBQWUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO0lBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7SUFDdEM7O0dBRUQ7SUFDQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7Q0FDaEQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiBzeW50aCAoY29kZWdlbjogdHMtdG8tem9kKSAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgdXBzdHJlYW0gLmQudHMgZGVjbGFyZWQgaW4gcGFja2FnZS5qc29uIGNvZGVnZW4uaW5wdXRzLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbi8vIEdlbmVyYXRlZCBieSB0cy10by16b2RcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmV4cG9ydCBjb25zdCBhdXRob3JpemF0aW9uRGV0YWlsc0dyYW50UnVsZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBQZXJtaXNzaW9uIHNldHMgZm9yIGRhc2hib2FyZCBhcmUgZGVmaW5lZCBpbiBpYW0tY29tbW9uL3JiYWMtY29tbW9uL3Blcm1pc3Npb24tc2V0cy9kZWZpbml0aW9ucy9UcmVlU3RvcmVCYXNlUGVybWlzc2lvblNldHMgRXg6IGBwZXJtaXNzaW9uU2V0cy9kYXNoYm9hcmQucnVubmVyYFxuICovXG4gICAgcGVybWlzc2lvbl9zZXQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlBlcm1pc3Npb24gc2V0cyBmb3IgZGFzaGJvYXJkIGFyZSBkZWZpbmVkIGluIGlhbS1jb21tb24vcmJhYy1jb21tb24vcGVybWlzc2lvbi1zZXRzL2RlZmluaXRpb25zL1RyZWVTdG9yZUJhc2VQZXJtaXNzaW9uU2V0cyBFeDogYHBlcm1pc3Npb25TZXRzL2Rhc2hib2FyZC5ydW5uZXJgXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGNyb25TY2hlZHVsZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBBIGNyb24gZXhwcmVzc2lvbiB1c2luZyBxdWFydHogc3ludGF4LiBFWDogYDAgMCA4ICogKiA/YCByZXByZXNlbnRzIGV2ZXJ5ZGF5IGF0IDhhbS4gU2VlIFtDcm9uIFRyaWdnZXJdIGZvciBkZXRhaWxzLiBbQ3JvbiBUcmlnZ2VyXTogaHR0cDovL3d3dy5xdWFydHotc2NoZWR1bGVyLm9yZy9kb2N1bWVudGF0aW9uL3F1YXJ0ei0yLjMuMC90dXRvcmlhbHMvY3JvbnRyaWdnZXIuaHRtbFxuICovXG4gICAgcXVhcnR6X2Nyb25fZXhwcmVzc2lvbjogei5zdHJpbmcoKS5kZXNjcmliZShcIkEgY3JvbiBleHByZXNzaW9uIHVzaW5nIHF1YXJ0eiBzeW50YXguIEVYOiBgMCAwIDggKiAqID9gIHJlcHJlc2VudHMgZXZlcnlkYXkgYXQgOGFtLiBTZWUgW0Nyb24gVHJpZ2dlcl0gZm9yIGRldGFpbHMuIFtDcm9uIFRyaWdnZXJdOiBodHRwOi8vd3d3LnF1YXJ0ei1zY2hlZHVsZXIub3JnL2RvY3VtZW50YXRpb24vcXVhcnR6LTIuMy4wL3R1dG9yaWFscy9jcm9udHJpZ2dlci5odG1sXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIEEgSmF2YSB0aW1lem9uZSBpZC4gVGhlIHNjaGVkdWxlIHdpbGwgYmUgcmVzb2x2ZWQgd2l0aCByZXNwZWN0IHRvIHRoaXMgdGltZXpvbmUuIFNlZSBbSmF2YSBUaW1lWm9uZV0gZm9yIGRldGFpbHMuIFtKYXZhIFRpbWVab25lXTogaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlLzcvZG9jcy9hcGkvamF2YS91dGlsL1RpbWVab25lLmh0bWxcbiAqL1xuICAgIHRpbWV6b25lX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiQSBKYXZhIHRpbWV6b25lIGlkLiBUaGUgc2NoZWR1bGUgd2lsbCBiZSByZXNvbHZlZCB3aXRoIHJlc3BlY3QgdG8gdGhpcyB0aW1lem9uZS4gU2VlIFtKYXZhIFRpbWVab25lXSBmb3IgZGV0YWlscy4gW0phdmEgVGltZVpvbmVdOiBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2UvNy9kb2NzL2FwaS9qYXZhL3V0aWwvVGltZVpvbmUuaHRtbFwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBsaWZlY3ljbGVTdGF0ZVNjaGVtYSA9IHoudW5pb24oW3oubGl0ZXJhbChcIkFDVElWRVwiKSwgei5saXRlcmFsKFwiVFJBU0hFRFwiKV0pO1xuXG5leHBvcnQgY29uc3QgZGFzaGJvYXJkVmlld1NjaGVtYSA9IHoubGl0ZXJhbChcIkRBU0hCT0FSRF9WSUVXX0JBU0lDXCIpO1xuXG5leHBvcnQgY29uc3QgZGVsZXRlU2NoZWR1bGVSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFVVSUQgaWRlbnRpZnlpbmcgdGhlIGRhc2hib2FyZCB0byB3aGljaCB0aGUgc2NoZWR1bGUgYmVsb25ncy5cbiAqL1xuICAgIGRhc2hib2FyZF9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIGRhc2hib2FyZCB0byB3aGljaCB0aGUgc2NoZWR1bGUgYmVsb25ncy5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIGV0YWcgZm9yIHRoZSBzY2hlZHVsZS4gT3B0aW9uYWxseSwgaXQgY2FuIGJlIHByb3ZpZGVkIHRvIHZlcmlmeSB0aGF0IHRoZSBzY2hlZHVsZSBoYXMgbm90IGJlZW4gbW9kaWZpZWQgZnJvbSBpdHMgbGFzdCByZXRyaWV2YWwuXG4gKi9cbiAgICBldGFnOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgZXRhZyBmb3IgdGhlIHNjaGVkdWxlLiBPcHRpb25hbGx5LCBpdCBjYW4gYmUgcHJvdmlkZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIHNjaGVkdWxlIGhhcyBub3QgYmVlbiBtb2RpZmllZCBmcm9tIGl0cyBsYXN0IHJldHJpZXZhbC5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVVVJRCBpZGVudGlmeWluZyB0aGUgc2NoZWR1bGUuXG4gKi9cbiAgICBzY2hlZHVsZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIHNjaGVkdWxlLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBkZWxldGVTdWJzY3JpcHRpb25SZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFVVSUQgaWRlbnRpZnlpbmcgdGhlIGRhc2hib2FyZCB3aGljaCB0aGUgc3Vic2NyaXB0aW9uIGJlbG9uZ3MuXG4gKi9cbiAgICBkYXNoYm9hcmRfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQgd2hpY2ggdGhlIHN1YnNjcmlwdGlvbiBiZWxvbmdzLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgZXRhZyBmb3IgdGhlIHN1YnNjcmlwdGlvbi4gQ2FuIGJlIG9wdGlvbmFsbHkgcHJvdmlkZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHN1YnNjcmlwdGlvbiBoYXMgbm90IGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIGxhc3QgcmVhZC5cbiAqL1xuICAgIGV0YWc6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBldGFnIGZvciB0aGUgc3Vic2NyaXB0aW9uLiBDYW4gYmUgb3B0aW9uYWxseSBwcm92aWRlZCB0byBlbnN1cmUgdGhhdCB0aGUgc3Vic2NyaXB0aW9uIGhhcyBub3QgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUgbGFzdCByZWFkLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBVVUlEIGlkZW50aWZ5aW5nIHRoZSBzY2hlZHVsZSB3aGljaCB0aGUgc3Vic2NyaXB0aW9uIGJlbG9uZ3MuXG4gKi9cbiAgICBzY2hlZHVsZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIHNjaGVkdWxlIHdoaWNoIHRoZSBzdWJzY3JpcHRpb24gYmVsb25ncy5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVVVJRCBpZGVudGlmeWluZyB0aGUgc3Vic2NyaXB0aW9uLlxuICovXG4gICAgc3Vic2NyaXB0aW9uX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgc3Vic2NyaXB0aW9uLlwiKVxufSk7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZvbGxvdy11cCBxdWVzdGlvbnMgc3VnZ2VzdGVkIGJ5IEdlbmllXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5pZVN1Z2dlc3RlZFF1ZXN0aW9uc0F0dGFjaG1lbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIHN1Z2dlc3RlZCBmb2xsb3ctdXAgcXVlc3Rpb25zXG4gKi9cbiAgICBxdWVzdGlvbnM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBzdWdnZXN0ZWQgZm9sbG93LXVwIHF1ZXN0aW9uc1wiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5pZUNvbnZlcnNhdGlvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJzYXRpb24gSURcbiAqL1xuICAgIGNvbnZlcnNhdGlvbl9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIkNvbnZlcnNhdGlvbiBJRFwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBUaW1lc3RhbXAgd2hlbiB0aGUgbWVzc2FnZSB3YXMgY3JlYXRlZFxuICovXG4gICAgY3JlYXRlZF90aW1lc3RhbXA6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRpbWVzdGFtcCB3aGVuIHRoZSBtZXNzYWdlIHdhcyBjcmVhdGVkXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnNhdGlvbiBJRC4gTGVnYWN5IGlkZW50aWZpZXIsIHVzZSBjb252ZXJzYXRpb25faWQgaW5zdGVhZFxuICovXG4gICAgaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJDb252ZXJzYXRpb24gSUQuIExlZ2FjeSBpZGVudGlmaWVyLCB1c2UgY29udmVyc2F0aW9uX2lkIGluc3RlYWRcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGltZXN0YW1wIHdoZW4gdGhlIG1lc3NhZ2Ugd2FzIGxhc3QgdXBkYXRlZFxuICovXG4gICAgbGFzdF91cGRhdGVkX3RpbWVzdGFtcDogei5udW1iZXIoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGltZXN0YW1wIHdoZW4gdGhlIG1lc3NhZ2Ugd2FzIGxhc3QgdXBkYXRlZFwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBHZW5pZSBzcGFjZSBJRFxuICovXG4gICAgc3BhY2VfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJHZW5pZSBzcGFjZSBJRFwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJzYXRpb24gdGl0bGVcbiAqL1xuICAgIHRpdGxlOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiQ29udmVyc2F0aW9uIHRpdGxlXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIElEIG9mIHRoZSB1c2VyIHdobyBjcmVhdGVkIHRoZSBjb252ZXJzYXRpb25cbiAqL1xuICAgIHVzZXJfaWQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJJRCBvZiB0aGUgdXNlciB3aG8gY3JlYXRlZCB0aGUgY29udmVyc2F0aW9uXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdlbmllQ29udmVyc2F0aW9uU3VtbWFyeVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBjb252ZXJzYXRpb25faWQ6IHouc3RyaW5nKCksXG4gICAgY3JlYXRlZF90aW1lc3RhbXA6IHoubnVtYmVyKCksXG4gICAgdGl0bGU6IHouc3RyaW5nKClcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VuaWVDcmVhdGVDb252ZXJzYXRpb25NZXNzYWdlUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBVc2VyIG1lc3NhZ2UgY29udGVudC5cbiAqL1xuICAgIGNvbnRlbnQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJVc2VyIG1lc3NhZ2UgY29udGVudC5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29udmVyc2F0aW9uLlxuICovXG4gICAgY29udmVyc2F0aW9uX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29udmVyc2F0aW9uLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBHZW5pZSBzcGFjZSB3aGVyZSB0aGUgY29udmVyc2F0aW9uIGlzIHN0YXJ0ZWQuXG4gKi9cbiAgICBzcGFjZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIEdlbmllIHNwYWNlIHdoZXJlIHRoZSBjb252ZXJzYXRpb24gaXMgc3RhcnRlZC5cIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VuaWVEZWxldGVDb252ZXJzYXRpb25NZXNzYWdlUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb252ZXJzYXRpb24uXG4gKi9cbiAgICBjb252ZXJzYXRpb25faWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb252ZXJzYXRpb24uXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIG1lc3NhZ2UgdG8gZGVsZXRlLlxuICovXG4gICAgbWVzc2FnZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIG1lc3NhZ2UgdG8gZGVsZXRlLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBHZW5pZSBzcGFjZSB3aGVyZSB0aGUgbWVzc2FnZSBpcyBsb2NhdGVkLlxuICovXG4gICAgc3BhY2VfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBHZW5pZSBzcGFjZSB3aGVyZSB0aGUgbWVzc2FnZSBpcyBsb2NhdGVkLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5pZURlbGV0ZUNvbnZlcnNhdGlvblJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIElEIG9mIHRoZSBjb252ZXJzYXRpb24gdG8gZGVsZXRlLlxuICovXG4gICAgY29udmVyc2F0aW9uX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIElEIG9mIHRoZSBjb252ZXJzYXRpb24gdG8gZGVsZXRlLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBHZW5pZSBzcGFjZSB3aGVyZSB0aGUgY29udmVyc2F0aW9uIGlzIGxvY2F0ZWQuXG4gKi9cbiAgICBzcGFjZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIEdlbmllIHNwYWNlIHdoZXJlIHRoZSBjb252ZXJzYXRpb24gaXMgbG9jYXRlZC5cIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VuaWVFeGVjdXRlTWVzc2FnZUF0dGFjaG1lbnRRdWVyeVJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gQXR0YWNobWVudCBJRFxuICovXG4gICAgYXR0YWNobWVudF9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIkF0dGFjaG1lbnQgSURcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVyc2F0aW9uIElEXG4gKi9cbiAgICBjb252ZXJzYXRpb25faWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJDb252ZXJzYXRpb24gSURcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gTWVzc2FnZSBJRFxuICovXG4gICAgbWVzc2FnZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIk1lc3NhZ2UgSURcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gR2VuaWUgc3BhY2UgSURcbiAqL1xuICAgIHNwYWNlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiR2VuaWUgc3BhY2UgSURcIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VuaWVFeGVjdXRlTWVzc2FnZVF1ZXJ5UmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJzYXRpb24gSURcbiAqL1xuICAgIGNvbnZlcnNhdGlvbl9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIkNvbnZlcnNhdGlvbiBJRFwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBNZXNzYWdlIElEXG4gKi9cbiAgICBtZXNzYWdlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiTWVzc2FnZSBJRFwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBHZW5pZSBzcGFjZSBJRFxuICovXG4gICAgc3BhY2VfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJHZW5pZSBzcGFjZSBJRFwiKVxufSk7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZlZWRiYWNrIHJhdGluZyBmb3IgR2VuaWUgbWVzc2FnZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGdlbmllRmVlZGJhY2tSYXRpbmdTY2hlbWEgPSB6LnVuaW9uKFt6LmxpdGVyYWwoXCJORUdBVElWRVwiKSwgei5saXRlcmFsKFwiTk9ORVwiKSwgei5saXRlcmFsKFwiUE9TSVRJVkVcIildKS5kZXNjcmliZShcIkZlZWRiYWNrIHJhdGluZyBmb3IgR2VuaWUgbWVzc2FnZXNcIik7XG5cbmV4cG9ydCBjb25zdCBnZW5pZUdldENvbnZlcnNhdGlvbk1lc3NhZ2VSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIHRhcmdldCBjb252ZXJzYXRpb24uXG4gKi9cbiAgICBjb252ZXJzYXRpb25faWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQgY29udmVyc2F0aW9uLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQgbWVzc2FnZSBmcm9tIHRoZSBpZGVudGlmaWVkIGNvbnZlcnNhdGlvbi5cbiAqL1xuICAgIG1lc3NhZ2VfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQgbWVzc2FnZSBmcm9tIHRoZSBpZGVudGlmaWVkIGNvbnZlcnNhdGlvbi5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgR2VuaWUgc3BhY2Ugd2hlcmUgdGhlIHRhcmdldCBjb252ZXJzYXRpb24gaXMgbG9jYXRlZC5cbiAqL1xuICAgIHNwYWNlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgR2VuaWUgc3BhY2Ugd2hlcmUgdGhlIHRhcmdldCBjb252ZXJzYXRpb24gaXMgbG9jYXRlZC5cIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VuaWVHZXRNZXNzYWdlQXR0YWNobWVudFF1ZXJ5UmVzdWx0UmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBBdHRhY2htZW50IElEXG4gKi9cbiAgICBhdHRhY2htZW50X2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiQXR0YWNobWVudCBJRFwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJzYXRpb24gSURcbiAqL1xuICAgIGNvbnZlcnNhdGlvbl9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIkNvbnZlcnNhdGlvbiBJRFwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBNZXNzYWdlIElEXG4gKi9cbiAgICBtZXNzYWdlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiTWVzc2FnZSBJRFwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBHZW5pZSBzcGFjZSBJRFxuICovXG4gICAgc3BhY2VfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJHZW5pZSBzcGFjZSBJRFwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5pZUdldE1lc3NhZ2VRdWVyeVJlc3VsdFJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVyc2F0aW9uIElEXG4gKi9cbiAgICBjb252ZXJzYXRpb25faWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJDb252ZXJzYXRpb24gSURcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gTWVzc2FnZSBJRFxuICovXG4gICAgbWVzc2FnZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIk1lc3NhZ2UgSURcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gR2VuaWUgc3BhY2UgSURcbiAqL1xuICAgIHNwYWNlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiR2VuaWUgc3BhY2UgSURcIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VuaWVHZXRNZXNzYWdlUXVlcnlSZXN1bHRSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBTUUwgU3RhdGVtZW50IEV4ZWN1dGlvbiByZXNwb25zZS4gU2VlIFtHZXQgc3RhdHVzLCBtYW5pZmVzdCwgYW5kIHJlc3VsdCBmaXJzdCBjaHVua10oOm1ldGhvZDpzdGF0ZW1lbnRleGVjdXRpb24vZ2V0c3RhdGVtZW50KSBmb3IgbW9yZSBkZXRhaWxzLlxuICovXG4gICAgc3RhdGVtZW50X3Jlc3BvbnNlOiB6LnVua25vd24oKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiU1FMIFN0YXRlbWVudCBFeGVjdXRpb24gcmVzcG9uc2UuIFNlZSBbR2V0IHN0YXR1cywgbWFuaWZlc3QsIGFuZCByZXN1bHQgZmlyc3QgY2h1bmtdKDptZXRob2Q6c3RhdGVtZW50ZXhlY3V0aW9uL2dldHN0YXRlbWVudCkgZm9yIG1vcmUgZGV0YWlscy5cIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VuaWVHZXRRdWVyeVJlc3VsdEJ5QXR0YWNobWVudFJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gQXR0YWNobWVudCBJRFxuICovXG4gICAgYXR0YWNobWVudF9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIkF0dGFjaG1lbnQgSURcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVyc2F0aW9uIElEXG4gKi9cbiAgICBjb252ZXJzYXRpb25faWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJDb252ZXJzYXRpb24gSURcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gTWVzc2FnZSBJRFxuICovXG4gICAgbWVzc2FnZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIk1lc3NhZ2UgSURcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gR2VuaWUgc3BhY2UgSURcbiAqL1xuICAgIHNwYWNlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiR2VuaWUgc3BhY2UgSURcIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VuaWVHZXRTcGFjZVJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgR2VuaWUgc3BhY2VcbiAqL1xuICAgIHNwYWNlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgR2VuaWUgc3BhY2VcIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VuaWVMaXN0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSBJRCBvZiB0aGUgY29udmVyc2F0aW9uIHRvIGxpc3QgbWVzc2FnZXMgZnJvbVxuICovXG4gICAgY29udmVyc2F0aW9uX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIElEIG9mIHRoZSBjb252ZXJzYXRpb24gdG8gbGlzdCBtZXNzYWdlcyBmcm9tXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIE1heGltdW0gbnVtYmVyIG9mIG1lc3NhZ2VzIHRvIHJldHVybiBwZXIgcGFnZVxuICovXG4gICAgcGFnZV9zaXplOiB6Lm51bWJlcigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJNYXhpbXVtIG51bWJlciBvZiBtZXNzYWdlcyB0byByZXR1cm4gcGVyIHBhZ2VcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVG9rZW4gdG8gZ2V0IHRoZSBuZXh0IHBhZ2Ugb2YgcmVzdWx0c1xuICovXG4gICAgcGFnZV90b2tlbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVG9rZW4gdG8gZ2V0IHRoZSBuZXh0IHBhZ2Ugb2YgcmVzdWx0c1wiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBHZW5pZSBzcGFjZSB3aGVyZSB0aGUgY29udmVyc2F0aW9uIGlzIGxvY2F0ZWRcbiAqL1xuICAgIHNwYWNlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgR2VuaWUgc3BhY2Ugd2hlcmUgdGhlIGNvbnZlcnNhdGlvbiBpcyBsb2NhdGVkXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdlbmllTGlzdENvbnZlcnNhdGlvbnNSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIEluY2x1ZGUgYWxsIGNvbnZlcnNhdGlvbnMgaW4gdGhlIHNwYWNlIGFjcm9zcyBhbGwgdXNlcnMuIFJlcXVpcmVzIGF0IGxlYXN0IENBTiBNQU5BR0UgcGVybWlzc2lvbiBvbiB0aGUgc3BhY2UuXG4gKi9cbiAgICBpbmNsdWRlX2FsbDogei5ib29sZWFuKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkluY2x1ZGUgYWxsIGNvbnZlcnNhdGlvbnMgaW4gdGhlIHNwYWNlIGFjcm9zcyBhbGwgdXNlcnMuIFJlcXVpcmVzIGF0IGxlYXN0IENBTiBNQU5BR0UgcGVybWlzc2lvbiBvbiB0aGUgc3BhY2UuXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIE1heGltdW0gbnVtYmVyIG9mIGNvbnZlcnNhdGlvbnMgdG8gcmV0dXJuIHBlciBwYWdlXG4gKi9cbiAgICBwYWdlX3NpemU6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIk1heGltdW0gbnVtYmVyIG9mIGNvbnZlcnNhdGlvbnMgdG8gcmV0dXJuIHBlciBwYWdlXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRva2VuIHRvIGdldCB0aGUgbmV4dCBwYWdlIG9mIHJlc3VsdHNcbiAqL1xuICAgIHBhZ2VfdG9rZW46IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRva2VuIHRvIGdldCB0aGUgbmV4dCBwYWdlIG9mIHJlc3VsdHNcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIElEIG9mIHRoZSBHZW5pZSBzcGFjZSB0byByZXRyaWV2ZSBjb252ZXJzYXRpb25zIGZyb20uXG4gKi9cbiAgICBzcGFjZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBJRCBvZiB0aGUgR2VuaWUgc3BhY2UgdG8gcmV0cmlldmUgY29udmVyc2F0aW9ucyBmcm9tLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5pZUxpc3RDb252ZXJzYXRpb25zUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gTGlzdCBvZiBjb252ZXJzYXRpb25zIGluIHRoZSBHZW5pZSBzcGFjZVxuICovXG4gICAgY29udmVyc2F0aW9uczogei5hcnJheShnZW5pZUNvbnZlcnNhdGlvblN1bW1hcnlTY2hlbWEpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJMaXN0IG9mIGNvbnZlcnNhdGlvbnMgaW4gdGhlIEdlbmllIHNwYWNlXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRva2VuIHRvIGdldCB0aGUgbmV4dCBwYWdlIG9mIHJlc3VsdHNcbiAqL1xuICAgIG5leHRfcGFnZV90b2tlbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVG9rZW4gdG8gZ2V0IHRoZSBuZXh0IHBhZ2Ugb2YgcmVzdWx0c1wiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5pZUxpc3RTcGFjZXNSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIE1heGltdW0gbnVtYmVyIG9mIHNwYWNlcyB0byByZXR1cm4gcGVyIHBhZ2VcbiAqL1xuICAgIHBhZ2Vfc2l6ZTogei5udW1iZXIoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiTWF4aW11bSBudW1iZXIgb2Ygc3BhY2VzIHRvIHJldHVybiBwZXIgcGFnZVwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBQYWdpbmF0aW9uIHRva2VuIGZvciBnZXR0aW5nIHRoZSBuZXh0IHBhZ2Ugb2YgcmVzdWx0c1xuICovXG4gICAgcGFnZV90b2tlbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiUGFnaW5hdGlvbiB0b2tlbiBmb3IgZ2V0dGluZyB0aGUgbmV4dCBwYWdlIG9mIHJlc3VsdHNcIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VuaWVTcGFjZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBEZXNjcmlwdGlvbiBvZiB0aGUgR2VuaWUgU3BhY2VcbiAqL1xuICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJEZXNjcmlwdGlvbiBvZiB0aGUgR2VuaWUgU3BhY2VcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gR2VuaWUgc3BhY2UgSURcbiAqL1xuICAgIHNwYWNlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiR2VuaWUgc3BhY2UgSURcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGl0bGUgb2YgdGhlIEdlbmllIFNwYWNlXG4gKi9cbiAgICB0aXRsZTogei5zdHJpbmcoKS5kZXNjcmliZShcIlRpdGxlIG9mIHRoZSBHZW5pZSBTcGFjZVwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBXYXJlaG91c2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBHZW5pZSBTcGFjZVxuICovXG4gICAgd2FyZWhvdXNlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJXYXJlaG91c2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBHZW5pZSBTcGFjZVwiKVxufSk7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZlZWRiYWNrIGNvbnRhaW5pbmcgcmF0aW5nIGFuZCBvcHRpb25hbCBjb21tZW50XG4gKi9cbmV4cG9ydCBjb25zdCBnZW5pZUZlZWRiYWNrU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSBmZWVkYmFjayByYXRpbmdcbiAqL1xuICAgIHJhdGluZzogZ2VuaWVGZWVkYmFja1JhdGluZ1NjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIGZlZWRiYWNrIHJhdGluZ1wiKVxufSk7XG5cbmV4cG9ydCBjb25zdCByZXN1bHRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gSWYgcmVzdWx0IGlzIHRydW5jYXRlZFxuICovXG4gICAgaXNfdHJ1bmNhdGVkOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiSWYgcmVzdWx0IGlzIHRydW5jYXRlZFwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBSb3cgY291bnQgb2YgdGhlIHJlc3VsdFxuICovXG4gICAgcm93X2NvdW50OiB6Lm51bWJlcigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJSb3cgY291bnQgb2YgdGhlIHJlc3VsdFwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBTdGF0ZW1lbnQgRXhlY3V0aW9uIEFQSSBzdGF0ZW1lbnQgaWQuIFVzZSBbR2V0IHN0YXR1cywgbWFuaWZlc3QsIGFuZCByZXN1bHQgZmlyc3QgY2h1bmtdKDptZXRob2Q6c3RhdGVtZW50ZXhlY3V0aW9uL2dldHN0YXRlbWVudCkgdG8gZ2V0IHRoZSBmdWxsIHJlc3VsdCBkYXRhLlxuICovXG4gICAgc3RhdGVtZW50X2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJTdGF0ZW1lbnQgRXhlY3V0aW9uIEFQSSBzdGF0ZW1lbnQgaWQuIFVzZSBbR2V0IHN0YXR1cywgbWFuaWZlc3QsIGFuZCByZXN1bHQgZmlyc3QgY2h1bmtdKDptZXRob2Q6c3RhdGVtZW50ZXhlY3V0aW9uL2dldHN0YXRlbWVudCkgdG8gZ2V0IHRoZSBmdWxsIHJlc3VsdCBkYXRhLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBKV1QgY29ycmVzcG9uZGluZyB0byB0aGUgc3RhdGVtZW50IGNvbnRhaW5lZCBpbiB0aGlzIHJlc3VsdFxuICovXG4gICAgc3RhdGVtZW50X2lkX3NpZ25hdHVyZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiSldUIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN0YXRlbWVudCBjb250YWluZWQgaW4gdGhpcyByZXN1bHRcIilcbn0pO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBNZXNzYWdlU3RhdHVzLiBUaGUgcG9zc2libGUgdmFsdWVzIGFyZTogKiBgRkVUQ0hJTkdfTUVUQURBVEFgOiBGZXRjaGluZyBtZXRhZGF0YSBmcm9tIHRoZSBkYXRhIHNvdXJjZXMuICogYEZJTFRFUklOR19DT05URVhUYDogUnVubmluZyBzbWFydCBjb250ZXh0IHN0ZXAgdG8gZGV0ZXJtaW5lIHJlbGV2YW50IGNvbnRleHQuICogYEFTS0lOR19BSWA6IFdhaXRpbmcgZm9yIHRoZSBMTE0gdG8gcmVzcG9uZCB0byB0aGUgdXNlcidzIHF1ZXN0aW9uLiAqIGBQRU5ESU5HX1dBUkVIT1VTRWA6IFdhaXRpbmcgZm9yIHdhcmVob3VzZSBiZWZvcmUgdGhlIFNRTCBxdWVyeSBjYW4gc3RhcnQgZXhlY3V0aW5nLiAqIGBFWEVDVVRJTkdfUVVFUllgOiBFeGVjdXRpbmcgYSBnZW5lcmF0ZWQgU1FMIHF1ZXJ5LiBHZXQgdGhlIFNRTCBxdWVyeSByZXN1bHQgYnkgY2FsbGluZyBbZ2V0TWVzc2FnZUF0dGFjaG1lbnRRdWVyeVJlc3VsdF0oOm1ldGhvZDpnZW5pZS9nZXRNZXNzYWdlQXR0YWNobWVudFF1ZXJ5UmVzdWx0KSBBUEkuICogYEZBSUxFRGA6IFRoZSByZXNwb25zZSBnZW5lcmF0aW9uIG9yIHF1ZXJ5IGV4ZWN1dGlvbiBmYWlsZWQuIFNlZSBgZXJyb3JgIGZpZWxkLiAqIGBDT01QTEVURURgOiBNZXNzYWdlIHByb2Nlc3NpbmcgaXMgY29tcGxldGVkLiBSZXN1bHRzIGFyZSBpbiB0aGUgYGF0dGFjaG1lbnRzYCBmaWVsZC4gR2V0IHRoZSBTUUwgcXVlcnkgcmVzdWx0IGJ5IGNhbGxpbmcgW2dldE1lc3NhZ2VBdHRhY2htZW50UXVlcnlSZXN1bHRdKDptZXRob2Q6Z2VuaWUvZ2V0TWVzc2FnZUF0dGFjaG1lbnRRdWVyeVJlc3VsdCkgQVBJLiAqIGBTVUJNSVRURURgOiBNZXNzYWdlIGhhcyBiZWVuIHN1Ym1pdHRlZC4gKiBgUVVFUllfUkVTVUxUX0VYUElSRURgOiBTUUwgcmVzdWx0IGlzIG5vdCBhdmFpbGFibGUgYW55bW9yZS4gVGhlIHVzZXIgbmVlZHMgdG8gcmVydW4gdGhlIHF1ZXJ5LiBSZXJ1biB0aGUgU1FMIHF1ZXJ5IHJlc3VsdCBieSBjYWxsaW5nIFtleGVjdXRlTWVzc2FnZUF0dGFjaG1lbnRRdWVyeV0oOm1ldGhvZDpnZW5pZS9leGVjdXRlTWVzc2FnZUF0dGFjaG1lbnRRdWVyeSkgQVBJLiAqIGBDQU5DRUxMRURgOiBNZXNzYWdlIGhhcyBiZWVuIGNhbmNlbGxlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1lc3NhZ2VTdGF0dXNTY2hlbWEgPSB6LnVuaW9uKFt6LmxpdGVyYWwoXCJBU0tJTkdfQUlcIiksIHoubGl0ZXJhbChcIkNBTkNFTExFRFwiKSwgei5saXRlcmFsKFwiQ09NUExFVEVEXCIpLCB6LmxpdGVyYWwoXCJFWEVDVVRJTkdfUVVFUllcIiksIHoubGl0ZXJhbChcIkZBSUxFRFwiKSwgei5saXRlcmFsKFwiRkVUQ0hJTkdfTUVUQURBVEFcIiksIHoubGl0ZXJhbChcIkZJTFRFUklOR19DT05URVhUXCIpLCB6LmxpdGVyYWwoXCJQRU5ESU5HX1dBUkVIT1VTRVwiKSwgei5saXRlcmFsKFwiUVVFUllfUkVTVUxUX0VYUElSRURcIiksIHoubGl0ZXJhbChcIlNVQk1JVFRFRFwiKV0pLmRlc2NyaWJlKFwiTWVzc2FnZVN0YXR1cy4gVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmU6ICogYEZFVENISU5HX01FVEFEQVRBYDogRmV0Y2hpbmcgbWV0YWRhdGEgZnJvbSB0aGUgZGF0YSBzb3VyY2VzLiAqIGBGSUxURVJJTkdfQ09OVEVYVGA6IFJ1bm5pbmcgc21hcnQgY29udGV4dCBzdGVwIHRvIGRldGVybWluZSByZWxldmFudCBjb250ZXh0LiAqIGBBU0tJTkdfQUlgOiBXYWl0aW5nIGZvciB0aGUgTExNIHRvIHJlc3BvbmQgdG8gdGhlIHVzZXIncyBxdWVzdGlvbi4gKiBgUEVORElOR19XQVJFSE9VU0VgOiBXYWl0aW5nIGZvciB3YXJlaG91c2UgYmVmb3JlIHRoZSBTUUwgcXVlcnkgY2FuIHN0YXJ0IGV4ZWN1dGluZy4gKiBgRVhFQ1VUSU5HX1FVRVJZYDogRXhlY3V0aW5nIGEgZ2VuZXJhdGVkIFNRTCBxdWVyeS4gR2V0IHRoZSBTUUwgcXVlcnkgcmVzdWx0IGJ5IGNhbGxpbmcgW2dldE1lc3NhZ2VBdHRhY2htZW50UXVlcnlSZXN1bHRdKDptZXRob2Q6Z2VuaWUvZ2V0TWVzc2FnZUF0dGFjaG1lbnRRdWVyeVJlc3VsdCkgQVBJLiAqIGBGQUlMRURgOiBUaGUgcmVzcG9uc2UgZ2VuZXJhdGlvbiBvciBxdWVyeSBleGVjdXRpb24gZmFpbGVkLiBTZWUgYGVycm9yYCBmaWVsZC4gKiBgQ09NUExFVEVEYDogTWVzc2FnZSBwcm9jZXNzaW5nIGlzIGNvbXBsZXRlZC4gUmVzdWx0cyBhcmUgaW4gdGhlIGBhdHRhY2htZW50c2AgZmllbGQuIEdldCB0aGUgU1FMIHF1ZXJ5IHJlc3VsdCBieSBjYWxsaW5nIFtnZXRNZXNzYWdlQXR0YWNobWVudFF1ZXJ5UmVzdWx0XSg6bWV0aG9kOmdlbmllL2dldE1lc3NhZ2VBdHRhY2htZW50UXVlcnlSZXN1bHQpIEFQSS4gKiBgU1VCTUlUVEVEYDogTWVzc2FnZSBoYXMgYmVlbiBzdWJtaXR0ZWQuICogYFFVRVJZX1JFU1VMVF9FWFBJUkVEYDogU1FMIHJlc3VsdCBpcyBub3QgYXZhaWxhYmxlIGFueW1vcmUuIFRoZSB1c2VyIG5lZWRzIHRvIHJlcnVuIHRoZSBxdWVyeS4gUmVydW4gdGhlIFNRTCBxdWVyeSByZXN1bHQgYnkgY2FsbGluZyBbZXhlY3V0ZU1lc3NhZ2VBdHRhY2htZW50UXVlcnldKDptZXRob2Q6Z2VuaWUvZXhlY3V0ZU1lc3NhZ2VBdHRhY2htZW50UXVlcnkpIEFQSS4gKiBgQ0FOQ0VMTEVEYDogTWVzc2FnZSBoYXMgYmVlbiBjYW5jZWxsZWQuXCIpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlBdHRhY2htZW50UGFyYW1ldGVyU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGtleXdvcmQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBzcWxfdHlwZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHZhbHVlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VuaWVSZXN1bHRNZXRhZGF0YVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVzdWx0IHNldCBpcyB0cnVuY2F0ZWQuXG4gKi9cbiAgICBpc190cnVuY2F0ZWQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJJbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVzdWx0IHNldCBpcyB0cnVuY2F0ZWQuXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgcmVzdWx0IHNldC5cbiAqL1xuICAgIHJvd19jb3VudDogei5udW1iZXIoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIG51bWJlciBvZiByb3dzIGluIHRoZSByZXN1bHQgc2V0LlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5pZVNlbmRNZXNzYWdlRmVlZGJhY2tSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnZlcnNhdGlvbi5cbiAqL1xuICAgIGNvbnZlcnNhdGlvbl9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnZlcnNhdGlvbi5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZSB0byBwcm92aWRlIGZlZWRiYWNrIGZvci5cbiAqL1xuICAgIG1lc3NhZ2VfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlIHRvIHByb3ZpZGUgZmVlZGJhY2sgZm9yLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgcmF0aW5nIChQT1NJVElWRSwgTkVHQVRJVkUsIG9yIE5PTkUpLlxuICovXG4gICAgcmF0aW5nOiBnZW5pZUZlZWRiYWNrUmF0aW5nU2NoZW1hLmRlc2NyaWJlKFwiVGhlIHJhdGluZyAoUE9TSVRJVkUsIE5FR0FUSVZFLCBvciBOT05FKS5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgR2VuaWUgc3BhY2Ugd2hlcmUgdGhlIG1lc3NhZ2UgaXMgbG9jYXRlZC5cbiAqL1xuICAgIHNwYWNlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgR2VuaWUgc3BhY2Ugd2hlcmUgdGhlIG1lc3NhZ2UgaXMgbG9jYXRlZC5cIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VuaWVTdGFydENvbnZlcnNhdGlvbk1lc3NhZ2VSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSB0ZXh0IG9mIHRoZSBtZXNzYWdlIHRoYXQgc3RhcnRzIHRoZSBjb252ZXJzYXRpb24uXG4gKi9cbiAgICBjb250ZW50OiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIHRleHQgb2YgdGhlIG1lc3NhZ2UgdGhhdCBzdGFydHMgdGhlIGNvbnZlcnNhdGlvbi5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgR2VuaWUgc3BhY2Ugd2hlcmUgeW91IHdhbnQgdG8gc3RhcnQgYSBjb252ZXJzYXRpb24uXG4gKi9cbiAgICBzcGFjZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIEdlbmllIHNwYWNlIHdoZXJlIHlvdSB3YW50IHRvIHN0YXJ0IGEgY29udmVyc2F0aW9uLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5pZVRyYXNoU3BhY2VSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIEdlbmllIHNwYWNlIHRvIGJlIHNlbnQgdG8gdGhlIHRyYXNoLlxuICovXG4gICAgc3BhY2VfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBHZW5pZSBzcGFjZSB0byBiZSBzZW50IHRvIHRoZSB0cmFzaC5cIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2V0RGFzaGJvYXJkUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQuXG4gKi9cbiAgICBkYXNoYm9hcmRfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQuXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdldFB1Ymxpc2hlZERhc2hib2FyZFJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVVVJRCBpZGVudGlmeWluZyB0aGUgcHVibGlzaGVkIGRhc2hib2FyZC5cbiAqL1xuICAgIGRhc2hib2FyZF9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIHB1Ymxpc2hlZCBkYXNoYm9hcmQuXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdldFB1Ymxpc2hlZERhc2hib2FyZFRva2VuSW5mb1JlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVVVJRCBpZGVudGlmeWluZyB0aGUgcHVibGlzaGVkIGRhc2hib2FyZC5cbiAqL1xuICAgIGRhc2hib2FyZF9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIHB1Ymxpc2hlZCBkYXNoYm9hcmQuXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVkIGV4dGVybmFsIHZhbHVlIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBjdXN0b20gY2xhaW0uXG4gKi9cbiAgICBleHRlcm5hbF92YWx1ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiUHJvdmlkZWQgZXh0ZXJuYWwgdmFsdWUgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGN1c3RvbSBjbGFpbS5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZWQgZXh0ZXJuYWwgdmlld2VyIGlkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBjdXN0b20gY2xhaW0uXG4gKi9cbiAgICBleHRlcm5hbF92aWV3ZXJfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlByb3ZpZGVkIGV4dGVybmFsIHZpZXdlciBpZCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgY3VzdG9tIGNsYWltLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBhdXRob3JpemF0aW9uRGV0YWlsc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBSZXByZXNlbnRzIGRvd25zY29wZWQgcGVybWlzc2lvbiBydWxlcyB3aXRoIHNwZWNpZmljIGFjY2VzcyByaWdodHMuIFRoaXMgZmllbGQgaXMgc3BlY2lmaWMgdG8gYHdvcmtzcGFjZV9ydWxlX3NldGAgY29uc3RyYWludC5cbiAqL1xuICAgIGdyYW50X3J1bGVzOiB6LmFycmF5KGF1dGhvcml6YXRpb25EZXRhaWxzR3JhbnRSdWxlU2NoZW1hKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiUmVwcmVzZW50cyBkb3duc2NvcGVkIHBlcm1pc3Npb24gcnVsZXMgd2l0aCBzcGVjaWZpYyBhY2Nlc3MgcmlnaHRzLiBUaGlzIGZpZWxkIGlzIHNwZWNpZmljIHRvIGB3b3Jrc3BhY2VfcnVsZV9zZXRgIGNvbnN0cmFpbnQuXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSBhY2wgcGF0aCBvZiB0aGUgdHJlZSBzdG9yZSByZXNvdXJjZSByZXNvdXJjZS5cbiAqL1xuICAgIHJlc291cmNlX2xlZ2FjeV9hY2xfcGF0aDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIGFjbCBwYXRoIG9mIHRoZSB0cmVlIHN0b3JlIHJlc291cmNlIHJlc291cmNlLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgcmVzb3VyY2UgbmFtZSB0byB3aGljaCB0aGUgYXV0aG9yaXphdGlvbiBydWxlIGFwcGxpZXMuIFRoaXMgZmllbGQgaXMgc3BlY2lmaWMgdG8gYHdvcmtzcGFjZV9ydWxlX3NldGAgY29uc3RyYWludC4gRm9ybWF0OiBgd29ya3NwYWNlcy97d29ya3NwYWNlX2lkfS9kYXNoYm9hcmRzL3tkYXNoYm9hcmRfaWR9YFxuICovXG4gICAgcmVzb3VyY2VfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIHJlc291cmNlIG5hbWUgdG8gd2hpY2ggdGhlIGF1dGhvcml6YXRpb24gcnVsZSBhcHBsaWVzLiBUaGlzIGZpZWxkIGlzIHNwZWNpZmljIHRvIGB3b3Jrc3BhY2VfcnVsZV9zZXRgIGNvbnN0cmFpbnQuIEZvcm1hdDogYHdvcmtzcGFjZXMve3dvcmtzcGFjZV9pZH0vZGFzaGJvYXJkcy97ZGFzaGJvYXJkX2lkfWBcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIHR5cGUgb2YgYXV0aG9yaXphdGlvbiBkb3duc2NvcGluZyBwb2xpY3kuIEV4OiBgd29ya3NwYWNlX3J1bGVfc2V0YCBkZWZpbmVzIGFjY2VzcyBydWxlcyBmb3IgYSBzcGVjaWZpYyB3b3Jrc3BhY2UgcmVzb3VyY2VcbiAqL1xuICAgIHR5cGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSB0eXBlIG9mIGF1dGhvcml6YXRpb24gZG93bnNjb3BpbmcgcG9saWN5LiBFeDogYHdvcmtzcGFjZV9ydWxlX3NldGAgZGVmaW5lcyBhY2Nlc3MgcnVsZXMgZm9yIGEgc3BlY2lmaWMgd29ya3NwYWNlIHJlc291cmNlXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdldFNjaGVkdWxlUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQgdG8gd2hpY2ggdGhlIHNjaGVkdWxlIGJlbG9uZ3MuXG4gKi9cbiAgICBkYXNoYm9hcmRfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQgdG8gd2hpY2ggdGhlIHNjaGVkdWxlIGJlbG9uZ3MuXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFVVSUQgaWRlbnRpZnlpbmcgdGhlIHNjaGVkdWxlLlxuICovXG4gICAgc2NoZWR1bGVfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJVVUlEIGlkZW50aWZ5aW5nIHRoZSBzY2hlZHVsZS5cIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2V0U3Vic2NyaXB0aW9uUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQgd2hpY2ggdGhlIHN1YnNjcmlwdGlvbiBiZWxvbmdzLlxuICovXG4gICAgZGFzaGJvYXJkX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgZGFzaGJvYXJkIHdoaWNoIHRoZSBzdWJzY3JpcHRpb24gYmVsb25ncy5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVVVJRCBpZGVudGlmeWluZyB0aGUgc2NoZWR1bGUgd2hpY2ggdGhlIHN1YnNjcmlwdGlvbiBiZWxvbmdzLlxuICovXG4gICAgc2NoZWR1bGVfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJVVUlEIGlkZW50aWZ5aW5nIHRoZSBzY2hlZHVsZSB3aGljaCB0aGUgc3Vic2NyaXB0aW9uIGJlbG9uZ3MuXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFVVSUQgaWRlbnRpZnlpbmcgdGhlIHN1YnNjcmlwdGlvbi5cbiAqL1xuICAgIHN1YnNjcmlwdGlvbl9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIHN1YnNjcmlwdGlvbi5cIilcbn0pO1xuXG5leHBvcnQgY29uc3QgbGlzdERhc2hib2FyZHNSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSBudW1iZXIgb2YgZGFzaGJvYXJkcyB0byByZXR1cm4gcGVyIHBhZ2UuXG4gKi9cbiAgICBwYWdlX3NpemU6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBudW1iZXIgb2YgZGFzaGJvYXJkcyB0byByZXR1cm4gcGVyIHBhZ2UuXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIEEgcGFnZSB0b2tlbiwgcmVjZWl2ZWQgZnJvbSBhIHByZXZpb3VzIGBMaXN0RGFzaGJvYXJkc2AgY2FsbC4gVGhpcyB0b2tlbiBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgc3Vic2VxdWVudCBwYWdlLlxuICovXG4gICAgcGFnZV90b2tlbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiQSBwYWdlIHRva2VuLCByZWNlaXZlZCBmcm9tIGEgcHJldmlvdXMgYExpc3REYXNoYm9hcmRzYCBjYWxsLiBUaGlzIHRva2VuIGNhbiBiZSB1c2VkIHRvIHJldHJpZXZlIHRoZSBzdWJzZXF1ZW50IHBhZ2UuXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSBmbGFnIHRvIGluY2x1ZGUgZGFzaGJvYXJkcyBsb2NhdGVkIGluIHRoZSB0cmFzaC4gSWYgdW5zcGVjaWZpZWQsIG9ubHkgYWN0aXZlIGRhc2hib2FyZHMgd2lsbCBiZSByZXR1cm5lZC5cbiAqL1xuICAgIHNob3dfdHJhc2hlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBmbGFnIHRvIGluY2x1ZGUgZGFzaGJvYXJkcyBsb2NhdGVkIGluIHRoZSB0cmFzaC4gSWYgdW5zcGVjaWZpZWQsIG9ubHkgYWN0aXZlIGRhc2hib2FyZHMgd2lsbCBiZSByZXR1cm5lZC5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gYERBU0hCT0FSRF9WSUVXX0JBU0lDYG9ubHkgaW5jbHVkZXMgc3VtbWFyeSBtZXRhZGF0YSBmcm9tIHRoZSBkYXNoYm9hcmQuXG4gKi9cbiAgICB2aWV3OiBkYXNoYm9hcmRWaWV3U2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJgREFTSEJPQVJEX1ZJRVdfQkFTSUNgb25seSBpbmNsdWRlcyBzdW1tYXJ5IG1ldGFkYXRhIGZyb20gdGhlIGRhc2hib2FyZC5cIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZGFzaGJvYXJkU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSB0aW1lc3RhbXAgb2Ygd2hlbiB0aGUgZGFzaGJvYXJkIHdhcyBjcmVhdGVkLlxuICovXG4gICAgY3JlYXRlX3RpbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSB0aW1lc3RhbXAgb2Ygd2hlbiB0aGUgZGFzaGJvYXJkIHdhcyBjcmVhdGVkLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQuXG4gKi9cbiAgICBkYXNoYm9hcmRfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIGRhc2hib2FyZC5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgZGFzaGJvYXJkLlxuICovXG4gICAgZGlzcGxheV9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBkYXNoYm9hcmQuXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSBldGFnIGZvciB0aGUgZGFzaGJvYXJkLiBDYW4gYmUgb3B0aW9uYWxseSBwcm92aWRlZCBvbiB1cGRhdGVzIHRvIGVuc3VyZSB0aGF0IHRoZSBkYXNoYm9hcmQgaGFzIG5vdCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHJlYWQuIFRoaXMgZmllbGQgaXMgZXhjbHVkZWQgaW4gTGlzdCBEYXNoYm9hcmRzIHJlc3BvbnNlcy5cbiAqL1xuICAgIGV0YWc6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBldGFnIGZvciB0aGUgZGFzaGJvYXJkLiBDYW4gYmUgb3B0aW9uYWxseSBwcm92aWRlZCBvbiB1cGRhdGVzIHRvIGVuc3VyZSB0aGF0IHRoZSBkYXNoYm9hcmQgaGFzIG5vdCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHJlYWQuIFRoaXMgZmllbGQgaXMgZXhjbHVkZWQgaW4gTGlzdCBEYXNoYm9hcmRzIHJlc3BvbnNlcy5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIHN0YXRlIG9mIHRoZSBkYXNoYm9hcmQgcmVzb3VyY2UuIFVzZWQgZm9yIHRyYWNraW5nIHRyYXNoZWQgc3RhdHVzLlxuICovXG4gICAgbGlmZWN5Y2xlX3N0YXRlOiBsaWZlY3ljbGVTdGF0ZVNjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIHN0YXRlIG9mIHRoZSBkYXNoYm9hcmQgcmVzb3VyY2UuIFVzZWQgZm9yIHRyYWNraW5nIHRyYXNoZWQgc3RhdHVzLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgd29ya3NwYWNlIHBhdGggb2YgdGhlIGZvbGRlciBjb250YWluaW5nIHRoZSBkYXNoYm9hcmQuIEluY2x1ZGVzIGxlYWRpbmcgc2xhc2ggYW5kIG5vIHRyYWlsaW5nIHNsYXNoLiBUaGlzIGZpZWxkIGlzIGV4Y2x1ZGVkIGluIExpc3QgRGFzaGJvYXJkcyByZXNwb25zZXMuXG4gKi9cbiAgICBwYXJlbnRfcGF0aDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIHdvcmtzcGFjZSBwYXRoIG9mIHRoZSBmb2xkZXIgY29udGFpbmluZyB0aGUgZGFzaGJvYXJkLiBJbmNsdWRlcyBsZWFkaW5nIHNsYXNoIGFuZCBubyB0cmFpbGluZyBzbGFzaC4gVGhpcyBmaWVsZCBpcyBleGNsdWRlZCBpbiBMaXN0IERhc2hib2FyZHMgcmVzcG9uc2VzLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgd29ya3NwYWNlIHBhdGggb2YgdGhlIGRhc2hib2FyZCBhc3NldCwgaW5jbHVkaW5nIHRoZSBmaWxlIG5hbWUuIEV4cG9ydGVkIGRhc2hib2FyZHMgYWx3YXlzIGhhdmUgdGhlIGZpbGUgZXh0ZW5zaW9uIGAubHZkYXNoLmpzb25gLiBUaGlzIGZpZWxkIGlzIGV4Y2x1ZGVkIGluIExpc3QgRGFzaGJvYXJkcyByZXNwb25zZXMuXG4gKi9cbiAgICBwYXRoOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgd29ya3NwYWNlIHBhdGggb2YgdGhlIGRhc2hib2FyZCBhc3NldCwgaW5jbHVkaW5nIHRoZSBmaWxlIG5hbWUuIEV4cG9ydGVkIGRhc2hib2FyZHMgYWx3YXlzIGhhdmUgdGhlIGZpbGUgZXh0ZW5zaW9uIGAubHZkYXNoLmpzb25gLiBUaGlzIGZpZWxkIGlzIGV4Y2x1ZGVkIGluIExpc3QgRGFzaGJvYXJkcyByZXNwb25zZXMuXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSBjb250ZW50cyBvZiB0aGUgZGFzaGJvYXJkIGluIHNlcmlhbGl6ZWQgc3RyaW5nIGZvcm0uIFRoaXMgZmllbGQgaXMgZXhjbHVkZWQgaW4gTGlzdCBEYXNoYm9hcmRzIHJlc3BvbnNlcy4gVXNlIHRoZSBbZ2V0IGRhc2hib2FyZCBBUEldIHRvIHJldHJpZXZlIGFuIGV4YW1wbGUgcmVzcG9uc2UsIHdoaWNoIGluY2x1ZGVzIHRoZSBgc2VyaWFsaXplZF9kYXNoYm9hcmRgIGZpZWxkLiBUaGlzIGZpZWxkIHByb3ZpZGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIEpTT04gc3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUgZGFzaGJvYXJkJ3MgbGF5b3V0IGFuZCBjb21wb25lbnRzLiBbZ2V0IGRhc2hib2FyZCBBUEldOiBodHRwczovL2RvY3MuZGF0YWJyaWNrcy5jb20vYXBpL3dvcmtzcGFjZS9sYWtldmlldy9nZXRcbiAqL1xuICAgIHNlcmlhbGl6ZWRfZGFzaGJvYXJkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgY29udGVudHMgb2YgdGhlIGRhc2hib2FyZCBpbiBzZXJpYWxpemVkIHN0cmluZyBmb3JtLiBUaGlzIGZpZWxkIGlzIGV4Y2x1ZGVkIGluIExpc3QgRGFzaGJvYXJkcyByZXNwb25zZXMuIFVzZSB0aGUgW2dldCBkYXNoYm9hcmQgQVBJXSB0byByZXRyaWV2ZSBhbiBleGFtcGxlIHJlc3BvbnNlLCB3aGljaCBpbmNsdWRlcyB0aGUgYHNlcmlhbGl6ZWRfZGFzaGJvYXJkYCBmaWVsZC4gVGhpcyBmaWVsZCBwcm92aWRlcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBKU09OIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGRhc2hib2FyZCdzIGxheW91dCBhbmQgY29tcG9uZW50cy4gW2dldCBkYXNoYm9hcmQgQVBJXTogaHR0cHM6Ly9kb2NzLmRhdGFicmlja3MuY29tL2FwaS93b3Jrc3BhY2UvbGFrZXZpZXcvZ2V0XCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSB0aW1lc3RhbXAgb2Ygd2hlbiB0aGUgZGFzaGJvYXJkIHdhcyBsYXN0IHVwZGF0ZWQgYnkgdGhlIHVzZXIuIFRoaXMgZmllbGQgaXMgZXhjbHVkZWQgaW4gTGlzdCBEYXNoYm9hcmRzIHJlc3BvbnNlcy5cbiAqL1xuICAgIHVwZGF0ZV90aW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgdGltZXN0YW1wIG9mIHdoZW4gdGhlIGRhc2hib2FyZCB3YXMgbGFzdCB1cGRhdGVkIGJ5IHRoZSB1c2VyLiBUaGlzIGZpZWxkIGlzIGV4Y2x1ZGVkIGluIExpc3QgRGFzaGJvYXJkcyByZXNwb25zZXMuXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSB3YXJlaG91c2UgSUQgdXNlZCB0byBydW4gdGhlIGRhc2hib2FyZC5cbiAqL1xuICAgIHdhcmVob3VzZV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIHdhcmVob3VzZSBJRCB1c2VkIHRvIHJ1biB0aGUgZGFzaGJvYXJkLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBsaXN0U2NoZWR1bGVzUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQgdG8gd2hpY2ggdGhlIHNjaGVkdWxlcyBiZWxvbmdzLlxuICovXG4gICAgZGFzaGJvYXJkX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgZGFzaGJvYXJkIHRvIHdoaWNoIHRoZSBzY2hlZHVsZXMgYmVsb25ncy5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIG51bWJlciBvZiBzY2hlZHVsZXMgdG8gcmV0dXJuIHBlciBwYWdlLlxuICovXG4gICAgcGFnZV9zaXplOiB6Lm51bWJlcigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgbnVtYmVyIG9mIHNjaGVkdWxlcyB0byByZXR1cm4gcGVyIHBhZ2UuXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIEEgcGFnZSB0b2tlbiwgcmVjZWl2ZWQgZnJvbSBhIHByZXZpb3VzIGBMaXN0U2NoZWR1bGVzYCBjYWxsLiBVc2UgdGhpcyB0byByZXRyaWV2ZSB0aGUgc3Vic2VxdWVudCBwYWdlLlxuICovXG4gICAgcGFnZV90b2tlbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiQSBwYWdlIHRva2VuLCByZWNlaXZlZCBmcm9tIGEgcHJldmlvdXMgYExpc3RTY2hlZHVsZXNgIGNhbGwuIFVzZSB0aGlzIHRvIHJldHJpZXZlIHRoZSBzdWJzZXF1ZW50IHBhZ2UuXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGxpc3RTdWJzY3JpcHRpb25zUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQgd2hpY2ggdGhlIHN1YnNjcmlwdGlvbnMgYmVsb25ncy5cbiAqL1xuICAgIGRhc2hib2FyZF9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIGRhc2hib2FyZCB3aGljaCB0aGUgc3Vic2NyaXB0aW9ucyBiZWxvbmdzLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgbnVtYmVyIG9mIHN1YnNjcmlwdGlvbnMgdG8gcmV0dXJuIHBlciBwYWdlLlxuICovXG4gICAgcGFnZV9zaXplOiB6Lm51bWJlcigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgbnVtYmVyIG9mIHN1YnNjcmlwdGlvbnMgdG8gcmV0dXJuIHBlciBwYWdlLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBBIHBhZ2UgdG9rZW4sIHJlY2VpdmVkIGZyb20gYSBwcmV2aW91cyBgTGlzdFN1YnNjcmlwdGlvbnNgIGNhbGwuIFVzZSB0aGlzIHRvIHJldHJpZXZlIHRoZSBzdWJzZXF1ZW50IHBhZ2UuXG4gKi9cbiAgICBwYWdlX3Rva2VuOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJBIHBhZ2UgdG9rZW4sIHJlY2VpdmVkIGZyb20gYSBwcmV2aW91cyBgTGlzdFN1YnNjcmlwdGlvbnNgIGNhbGwuIFVzZSB0aGlzIHRvIHJldHJpZXZlIHRoZSBzdWJzZXF1ZW50IHBhZ2UuXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFVVSUQgaWRlbnRpZnlpbmcgdGhlIHNjaGVkdWxlIHdoaWNoIHRoZSBzdWJzY3JpcHRpb25zIGJlbG9uZ3MuXG4gKi9cbiAgICBzY2hlZHVsZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIHNjaGVkdWxlIHdoaWNoIHRoZSBzdWJzY3JpcHRpb25zIGJlbG9uZ3MuXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IG1lc3NhZ2VFcnJvclR5cGVTY2hlbWEgPSB6LnVuaW9uKFt6LmxpdGVyYWwoXCJCTE9DS19NVUxUSVBMRV9FWEVDVVRJT05TX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiQ0hBVF9DT01QTEVUSU9OX0NMSUVOVF9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIkNIQVRfQ09NUExFVElPTl9DTElFTlRfVElNRU9VVF9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIkNIQVRfQ09NUExFVElPTl9ORVRXT1JLX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiQ09OVEVOVF9GSUxURVJfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJDT05URVhUX0VYQ0VFREVEX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiQ09VTERfTk9UX0dFVF9NT0RFTF9ERVBMT1lNRU5UU19FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIkNPVUxEX05PVF9HRVRfVUNfU0NIRU1BX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiREVQTE9ZTUVOVF9OT1RfRk9VTkRfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJERVNDUklCRV9RVUVSWV9JTlZBTElEX1NRTF9FUlJPUlwiKSwgei5saXRlcmFsKFwiREVTQ1JJQkVfUVVFUllfVElNRU9VVFwiKSwgei5saXRlcmFsKFwiREVTQ1JJQkVfUVVFUllfVU5FWFBFQ1RFRF9GQUlMVVJFXCIpLCB6LmxpdGVyYWwoXCJFWENFRURFRF9NQVhfVE9LRU5fTEVOR1RIX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiRlVOQ1RJT05TX05PVF9BVkFJTEFCTEVfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJGVU5DVElPTl9BUkdVTUVOVFNfSU5WQUxJRF9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIkZVTkNUSU9OX0FSR1VNRU5UU19JTlZBTElEX0pTT05fRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJGVU5DVElPTl9BUkdVTUVOVFNfSU5WQUxJRF9UWVBFX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiRlVOQ1RJT05fQ0FMTF9NSVNTSU5HX1BBUkFNRVRFUl9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIkdFTkVSQVRFRF9TUUxfUVVFUllfVE9PX0xPTkdfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJHRU5FUklDX0NIQVRfQ09NUExFVElPTl9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIkdFTkVSSUNfQ0hBVF9DT01QTEVUSU9OX1NFUlZJQ0VfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJHRU5FUklDX1NRTF9FWEVDX0FQSV9DQUxMX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiSUxMRUdBTF9QQVJBTUVURVJfREVGSU5JVElPTl9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIklOVEVSTkFMX0NBVEFMT0dfQVNTRVRfQ1JFQVRJT05fRkFJTEVEX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiSU5URVJOQUxfQ0FUQUxPR19BU1NFVF9DUkVBVElPTl9PTkdPSU5HX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiSU5URVJOQUxfQ0FUQUxPR19BU1NFVF9DUkVBVElPTl9VTlNVUFBPUlRFRF9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIklOVEVSTkFMX0NBVEFMT0dfTUlTU0lOR19VQ19QQVRIX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiSU5URVJOQUxfQ0FUQUxPR19QQVRIX09WRVJMQVBfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJJTlZBTElEX0NFUlRJRklFRF9BTlNXRVJfRlVOQ1RJT05fRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJJTlZBTElEX0NFUlRJRklFRF9BTlNXRVJfSURFTlRJRklFUl9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIklOVkFMSURfQ0hBVF9DT01QTEVUSU9OX0FSR1VNRU5UU19KU09OX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiSU5WQUxJRF9DSEFUX0NPTVBMRVRJT05fSlNPTl9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIklOVkFMSURfQ09NUExFVElPTl9SRVFVRVNUX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiSU5WQUxJRF9GVU5DVElPTl9DQUxMX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiSU5WQUxJRF9TUUxfTVVMVElQTEVfREFUQVNFVF9SRUZFUkVOQ0VTX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiSU5WQUxJRF9TUUxfTVVMVElQTEVfU1RBVEVNRU5UU19FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIklOVkFMSURfU1FMX1VOS05PV05fVEFCTEVfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJJTlZBTElEX1RBQkxFX0lERU5USUZJRVJfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJMT0NBTF9DT05URVhUX0VYQ0VFREVEX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiTUVTU0FHRV9BVFRBQ0hNRU5UX1RPT19MT05HX0VSUk9SXCIpLCB6LmxpdGVyYWwoXCJNRVNTQUdFX0NBTkNFTExFRF9XSElMRV9FWEVDVVRJTkdfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJNRVNTQUdFX0RFTEVURURfV0hJTEVfRVhFQ1VUSU5HX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiTUVTU0FHRV9VUERBVEVEX1dISUxFX0VYRUNVVElOR19FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIk1JU1NJTkdfU1FMX1FVRVJZX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiTk9fREVQTE9ZTUVOVFNfQVZBSUxBQkxFX1RPX1dPUktTUEFDRVwiKSwgei5saXRlcmFsKFwiTk9fUVVFUllfVE9fVklTVUFMSVpFX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiTk9fVEFCTEVTX1RPX1FVRVJZX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiUkFURV9MSU1JVF9FWENFRURFRF9HRU5FUklDX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiUkFURV9MSU1JVF9FWENFRURFRF9TUEVDSUZJRURfV0FJVF9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIlJFUExZX1BST0NFU1NfVElNRU9VVF9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIlJFVFJZQUJMRV9QUk9DRVNTSU5HX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiU1FMX0VYRUNVVElPTl9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIlNUT1BfUFJPQ0VTU19EVUVfVE9fQVVUT19SRUdFTkVSQVRFXCIpLCB6LmxpdGVyYWwoXCJUQUJMRVNfTUlTU0lOR19FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIlRPT19NQU5ZX0NFUlRJRklFRF9BTlNXRVJTX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiVE9PX01BTllfVEFCTEVTX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiVU5FWFBFQ1RFRF9SRVBMWV9QUk9DRVNTX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiVU5LTk9XTl9BSV9NT0RFTFwiKSwgei5saXRlcmFsKFwiVU5TVVBQT1JURURfQ09OVkVSU0FUSU9OX1RZUEVfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJXQVJFSE9VU0VfQUNDRVNTX01JU1NJTkdfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJXQVJFSE9VU0VfTk9UX0ZPVU5EX0VYQ0VQVElPTlwiKV0pO1xuXG5leHBvcnQgY29uc3QgbWlncmF0ZURhc2hib2FyZFJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gRGlzcGxheSBuYW1lIGZvciB0aGUgbmV3IExha2V2aWV3IGRhc2hib2FyZC5cbiAqL1xuICAgIGRpc3BsYXlfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiRGlzcGxheSBuYW1lIGZvciB0aGUgbmV3IExha2V2aWV3IGRhc2hib2FyZC5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIHdvcmtzcGFjZSBwYXRoIG9mIHRoZSBmb2xkZXIgdG8gY29udGFpbiB0aGUgbWlncmF0ZWQgTGFrZXZpZXcgZGFzaGJvYXJkLlxuICovXG4gICAgcGFyZW50X3BhdGg6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSB3b3Jrc3BhY2UgcGF0aCBvZiB0aGUgZm9sZGVyIHRvIGNvbnRhaW4gdGhlIG1pZ3JhdGVkIExha2V2aWV3IGRhc2hib2FyZC5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVVVJRCBvZiB0aGUgZGFzaGJvYXJkIHRvIGJlIG1pZ3JhdGVkLlxuICovXG4gICAgc291cmNlX2Rhc2hib2FyZF9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVVSUQgb2YgdGhlIGRhc2hib2FyZCB0byBiZSBtaWdyYXRlZC5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gRmxhZyB0byBpbmRpY2F0ZSBpZiBtdXN0YWNoZSBwYXJhbWV0ZXIgc3ludGF4ICh7eyBwYXJhbSB9fSkgc2hvdWxkIGJlIGF1dG8tdXBkYXRlZCB0byBuYW1lZCBzeW50YXggKDpwYXJhbSkgd2hlbiBjb252ZXJ0aW5nIGRhdGFzZXRzIGluIHRoZSBkYXNoYm9hcmQuXG4gKi9cbiAgICB1cGRhdGVfcGFyYW1ldGVyX3N5bnRheDogei5ib29sZWFuKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkZsYWcgdG8gaW5kaWNhdGUgaWYgbXVzdGFjaGUgcGFyYW1ldGVyIHN5bnRheCAoe3sgcGFyYW0gfX0pIHNob3VsZCBiZSBhdXRvLXVwZGF0ZWQgdG8gbmFtZWQgc3ludGF4ICg6cGFyYW0pIHdoZW4gY29udmVydGluZyBkYXRhc2V0cyBpbiB0aGUgZGFzaGJvYXJkLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBwdWJsaXNoUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQgdG8gYmUgcHVibGlzaGVkLlxuICovXG4gICAgZGFzaGJvYXJkX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgZGFzaGJvYXJkIHRvIGJlIHB1Ymxpc2hlZC5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgcHVibGlzaGVyJ3MgY3JlZGVudGlhbHMgc2hvdWxkIGJlIGVtYmVkZGVkIGluIHRoZSBwdWJsaXNoZWQgZGFzaGJvYXJkLiBUaGVzZSBlbWJlZGRlZCBjcmVkZW50aWFscyB3aWxsIGJlIHVzZWQgdG8gZXhlY3V0ZSB0aGUgcHVibGlzaGVkIGRhc2hib2FyZCdzIHF1ZXJpZXMuXG4gKi9cbiAgICBlbWJlZF9jcmVkZW50aWFsczogei5ib29sZWFuKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlIHB1Ymxpc2hlcidzIGNyZWRlbnRpYWxzIHNob3VsZCBiZSBlbWJlZGRlZCBpbiB0aGUgcHVibGlzaGVkIGRhc2hib2FyZC4gVGhlc2UgZW1iZWRkZWQgY3JlZGVudGlhbHMgd2lsbCBiZSB1c2VkIHRvIGV4ZWN1dGUgdGhlIHB1Ymxpc2hlZCBkYXNoYm9hcmQncyBxdWVyaWVzLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgSUQgb2YgdGhlIHdhcmVob3VzZSB0aGF0IGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSB3YXJlaG91c2Ugd2hpY2ggd2FzIHNldCBpbiB0aGUgZHJhZnQuXG4gKi9cbiAgICB3YXJlaG91c2VfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBJRCBvZiB0aGUgd2FyZWhvdXNlIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIHdhcmVob3VzZSB3aGljaCB3YXMgc2V0IGluIHRoZSBkcmFmdC5cIilcbn0pO1xuXG5leHBvcnQgY29uc3QgcHVibGlzaGVkRGFzaGJvYXJkU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHB1Ymxpc2hlZCBkYXNoYm9hcmQuXG4gKi9cbiAgICBkaXNwbGF5X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHB1Ymxpc2hlZCBkYXNoYm9hcmQuXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIEluZGljYXRlcyB3aGV0aGVyIGNyZWRlbnRpYWxzIGFyZSBlbWJlZGRlZCBpbiB0aGUgcHVibGlzaGVkIGRhc2hib2FyZC5cbiAqL1xuICAgIGVtYmVkX2NyZWRlbnRpYWxzOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiSW5kaWNhdGVzIHdoZXRoZXIgY3JlZGVudGlhbHMgYXJlIGVtYmVkZGVkIGluIHRoZSBwdWJsaXNoZWQgZGFzaGJvYXJkLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgdGltZXN0YW1wIG9mIHdoZW4gdGhlIHB1Ymxpc2hlZCBkYXNoYm9hcmQgd2FzIGxhc3QgcmV2aXNlZC5cbiAqL1xuICAgIHJldmlzaW9uX2NyZWF0ZV90aW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgdGltZXN0YW1wIG9mIHdoZW4gdGhlIHB1Ymxpc2hlZCBkYXNoYm9hcmQgd2FzIGxhc3QgcmV2aXNlZC5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIHdhcmVob3VzZSBJRCB1c2VkIHRvIHJ1biB0aGUgcHVibGlzaGVkIGRhc2hib2FyZC5cbiAqL1xuICAgIHdhcmVob3VzZV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIHdhcmVob3VzZSBJRCB1c2VkIHRvIHJ1biB0aGUgcHVibGlzaGVkIGRhc2hib2FyZC5cIilcbn0pO1xuXG5leHBvcnQgY29uc3Qgc2NoZWR1bGVQYXVzZVN0YXR1c1NjaGVtYSA9IHoudW5pb24oW3oubGl0ZXJhbChcIlBBVVNFRFwiKSwgei5saXRlcmFsKFwiVU5QQVVTRURcIildKTtcblxuZXhwb3J0IGNvbnN0IHN1YnNjcmlwdGlvblN1YnNjcmliZXJEZXN0aW5hdGlvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgY2Fub25pY2FsIGlkZW50aWZpZXIgb2YgdGhlIGRlc3RpbmF0aW9uIHRvIHJlY2VpdmUgZW1haWwgbm90aWZpY2F0aW9uLlxuICovXG4gICAgZGVzdGluYXRpb25faWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgY2Fub25pY2FsIGlkZW50aWZpZXIgb2YgdGhlIGRlc3RpbmF0aW9uIHRvIHJlY2VpdmUgZW1haWwgbm90aWZpY2F0aW9uLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBzdWJzY3JpcHRpb25TdWJzY3JpYmVyVXNlclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBVc2VySWQgb2YgdGhlIHN1YnNjcmliZXIuXG4gKi9cbiAgICB1c2VyX2lkOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVXNlcklkIG9mIHRoZSBzdWJzY3JpYmVyLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBzdWJzY3JpYmVyU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSBkZXN0aW5hdGlvbiB0byByZWNlaXZlIHRoZSBzdWJzY3JpcHRpb24gZW1haWwuIFRoaXMgcGFyYW1ldGVyIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGB1c2VyX3N1YnNjcmliZXJgLlxuICovXG4gICAgZGVzdGluYXRpb25fc3Vic2NyaWJlcjogc3Vic2NyaXB0aW9uU3Vic2NyaWJlckRlc3RpbmF0aW9uU2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgZGVzdGluYXRpb24gdG8gcmVjZWl2ZSB0aGUgc3Vic2NyaXB0aW9uIGVtYWlsLiBUaGlzIHBhcmFtZXRlciBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgdXNlcl9zdWJzY3JpYmVyYC5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIHVzZXIgdG8gcmVjZWl2ZSB0aGUgc3Vic2NyaXB0aW9uIGVtYWlsLiBUaGlzIHBhcmFtZXRlciBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgZGVzdGluYXRpb25fc3Vic2NyaWJlcmAuXG4gKi9cbiAgICB1c2VyX3N1YnNjcmliZXI6IHN1YnNjcmlwdGlvblN1YnNjcmliZXJVc2VyU2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgdXNlciB0byByZWNlaXZlIHRoZSBzdWJzY3JpcHRpb24gZW1haWwuIFRoaXMgcGFyYW1ldGVyIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGBkZXN0aW5hdGlvbl9zdWJzY3JpYmVyYC5cIilcbn0pO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQdXJwb3NlL2ludGVudCBvZiBhIHRleHQgYXR0YWNobWVudFxuICovXG5leHBvcnQgY29uc3QgdGV4dEF0dGFjaG1lbnRQdXJwb3NlU2NoZW1hID0gei5saXRlcmFsKFwiRk9MTE9XX1VQX1FVRVNUSU9OXCIpLmRlc2NyaWJlKFwiUHVycG9zZS9pbnRlbnQgb2YgYSB0ZXh0IGF0dGFjaG1lbnRcIik7XG5cbmV4cG9ydCBjb25zdCB0cmFzaERhc2hib2FyZFJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVVVJRCBpZGVudGlmeWluZyB0aGUgZGFzaGJvYXJkLlxuICovXG4gICAgZGFzaGJvYXJkX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgZGFzaGJvYXJkLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCB1bnB1Ymxpc2hEYXNoYm9hcmRSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFVVSUQgaWRlbnRpZnlpbmcgdGhlIHB1Ymxpc2hlZCBkYXNoYm9hcmQuXG4gKi9cbiAgICBkYXNoYm9hcmRfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJVVUlEIGlkZW50aWZ5aW5nIHRoZSBwdWJsaXNoZWQgZGFzaGJvYXJkLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVEYXNoYm9hcmRSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGRhc2hib2FyZDogZGFzaGJvYXJkU2NoZW1hLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFVVSUQgaWRlbnRpZnlpbmcgdGhlIGRhc2hib2FyZC5cbiAqL1xuICAgIGRhc2hib2FyZF9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIGRhc2hib2FyZC5cIilcbn0pO1xuXG5leHBvcnQgY29uc3Qgc2NoZWR1bGVTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gQSB0aW1lc3RhbXAgaW5kaWNhdGluZyB3aGVuIHRoZSBzY2hlZHVsZSB3YXMgY3JlYXRlZC5cbiAqL1xuICAgIGNyZWF0ZV90aW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJBIHRpbWVzdGFtcCBpbmRpY2F0aW5nIHdoZW4gdGhlIHNjaGVkdWxlIHdhcyBjcmVhdGVkLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgY3JvbiBleHByZXNzaW9uIGRlc2NyaWJpbmcgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgcGVyaW9kaWMgcmVmcmVzaCBmb3IgdGhpcyBzY2hlZHVsZS5cbiAqL1xuICAgIGNyb25fc2NoZWR1bGU6IGNyb25TY2hlZHVsZVNjaGVtYS5kZXNjcmliZShcIlRoZSBjcm9uIGV4cHJlc3Npb24gZGVzY3JpYmluZyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBwZXJpb2RpYyByZWZyZXNoIGZvciB0aGlzIHNjaGVkdWxlLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQgdG8gd2hpY2ggdGhlIHNjaGVkdWxlIGJlbG9uZ3MuXG4gKi9cbiAgICBkYXNoYm9hcmRfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIGRhc2hib2FyZCB0byB3aGljaCB0aGUgc2NoZWR1bGUgYmVsb25ncy5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIGRpc3BsYXkgbmFtZSBmb3Igc2NoZWR1bGUuXG4gKi9cbiAgICBkaXNwbGF5X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBkaXNwbGF5IG5hbWUgZm9yIHNjaGVkdWxlLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgZXRhZyBmb3IgdGhlIHNjaGVkdWxlLiBNdXN0IGJlIGxlZnQgZW1wdHkgb24gY3JlYXRlLCBtdXN0IGJlIHByb3ZpZGVkIG9uIHVwZGF0ZXMgdG8gZW5zdXJlIHRoYXQgdGhlIHNjaGVkdWxlIGhhcyBub3QgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUgbGFzdCByZWFkLCBhbmQgY2FuIGJlIG9wdGlvbmFsbHkgcHJvdmlkZWQgb24gZGVsZXRlLlxuICovXG4gICAgZXRhZzogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIGV0YWcgZm9yIHRoZSBzY2hlZHVsZS4gTXVzdCBiZSBsZWZ0IGVtcHR5IG9uIGNyZWF0ZSwgbXVzdCBiZSBwcm92aWRlZCBvbiB1cGRhdGVzIHRvIGVuc3VyZSB0aGF0IHRoZSBzY2hlZHVsZSBoYXMgbm90IGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIGxhc3QgcmVhZCwgYW5kIGNhbiBiZSBvcHRpb25hbGx5IHByb3ZpZGVkIG9uIGRlbGV0ZS5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIHN0YXR1cyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIHNjaGVkdWxlIGlzIHBhdXNlZCBvciBub3QuXG4gKi9cbiAgICBwYXVzZV9zdGF0dXM6IHNjaGVkdWxlUGF1c2VTdGF0dXNTY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBzdGF0dXMgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBzY2hlZHVsZSBpcyBwYXVzZWQgb3Igbm90LlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBVVUlEIGlkZW50aWZ5aW5nIHRoZSBzY2hlZHVsZS5cbiAqL1xuICAgIHNjaGVkdWxlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJVVUlEIGlkZW50aWZ5aW5nIHRoZSBzY2hlZHVsZS5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gQSB0aW1lc3RhbXAgaW5kaWNhdGluZyB3aGVuIHRoZSBzY2hlZHVsZSB3YXMgbGFzdCB1cGRhdGVkLlxuICovXG4gICAgdXBkYXRlX3RpbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkEgdGltZXN0YW1wIGluZGljYXRpbmcgd2hlbiB0aGUgc2NoZWR1bGUgd2FzIGxhc3QgdXBkYXRlZC5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIHdhcmVob3VzZSBpZCB0byBydW4gdGhlIGRhc2hib2FyZCB3aXRoIGZvciB0aGUgc2NoZWR1bGUuXG4gKi9cbiAgICB3YXJlaG91c2VfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSB3YXJlaG91c2UgaWQgdG8gcnVuIHRoZSBkYXNoYm9hcmQgd2l0aCBmb3IgdGhlIHNjaGVkdWxlLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVEYXNoYm9hcmRSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGRhc2hib2FyZDogZGFzaGJvYXJkU2NoZW1hXG59KTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNjaGVkdWxlUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQgdG8gd2hpY2ggdGhlIHNjaGVkdWxlIGJlbG9uZ3MuXG4gKi9cbiAgICBkYXNoYm9hcmRfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQgdG8gd2hpY2ggdGhlIHNjaGVkdWxlIGJlbG9uZ3MuXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSBzY2hlZHVsZSB0byBjcmVhdGUuIEEgZGFzaGJvYXJkIGlzIGxpbWl0ZWQgdG8gMTAgc2NoZWR1bGVzLlxuICovXG4gICAgc2NoZWR1bGU6IHNjaGVkdWxlU2NoZW1hLmRlc2NyaWJlKFwiVGhlIHNjaGVkdWxlIHRvIGNyZWF0ZS4gQSBkYXNoYm9hcmQgaXMgbGltaXRlZCB0byAxMCBzY2hlZHVsZXMuXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IHN1YnNjcmlwdGlvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBBIHRpbWVzdGFtcCBpbmRpY2F0aW5nIHdoZW4gdGhlIHN1YnNjcmlwdGlvbiB3YXMgY3JlYXRlZC5cbiAqL1xuICAgIGNyZWF0ZV90aW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJBIHRpbWVzdGFtcCBpbmRpY2F0aW5nIHdoZW4gdGhlIHN1YnNjcmlwdGlvbiB3YXMgY3JlYXRlZC5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVXNlcklkIG9mIHRoZSB1c2VyIHdobyBhZGRzIHN1YnNjcmliZXJzICh1c2VycyBvciBub3RpZmljYXRpb24gZGVzdGluYXRpb25zKSB0byB0aGUgZGFzaGJvYXJkJ3Mgc2NoZWR1bGUuXG4gKi9cbiAgICBjcmVhdGVkX2J5X3VzZXJfaWQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlVzZXJJZCBvZiB0aGUgdXNlciB3aG8gYWRkcyBzdWJzY3JpYmVycyAodXNlcnMgb3Igbm90aWZpY2F0aW9uIGRlc3RpbmF0aW9ucykgdG8gdGhlIGRhc2hib2FyZCdzIHNjaGVkdWxlLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQgdG8gd2hpY2ggdGhlIHN1YnNjcmlwdGlvbiBiZWxvbmdzLlxuICovXG4gICAgZGFzaGJvYXJkX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQgdG8gd2hpY2ggdGhlIHN1YnNjcmlwdGlvbiBiZWxvbmdzLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgZXRhZyBmb3IgdGhlIHN1YnNjcmlwdGlvbi4gTXVzdCBiZSBsZWZ0IGVtcHR5IG9uIGNyZWF0ZSwgY2FuIGJlIG9wdGlvbmFsbHkgcHJvdmlkZWQgb24gZGVsZXRlIHRvIGVuc3VyZSB0aGF0IHRoZSBzdWJzY3JpcHRpb24gaGFzIG5vdCBiZWVuIGRlbGV0ZWQgc2luY2UgdGhlIGxhc3QgcmVhZC5cbiAqL1xuICAgIGV0YWc6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBldGFnIGZvciB0aGUgc3Vic2NyaXB0aW9uLiBNdXN0IGJlIGxlZnQgZW1wdHkgb24gY3JlYXRlLCBjYW4gYmUgb3B0aW9uYWxseSBwcm92aWRlZCBvbiBkZWxldGUgdG8gZW5zdXJlIHRoYXQgdGhlIHN1YnNjcmlwdGlvbiBoYXMgbm90IGJlZW4gZGVsZXRlZCBzaW5jZSB0aGUgbGFzdCByZWFkLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBVVUlEIGlkZW50aWZ5aW5nIHRoZSBzY2hlZHVsZSB0byB3aGljaCB0aGUgc3Vic2NyaXB0aW9uIGJlbG9uZ3MuXG4gKi9cbiAgICBzY2hlZHVsZV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgc2NoZWR1bGUgdG8gd2hpY2ggdGhlIHN1YnNjcmlwdGlvbiBiZWxvbmdzLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBTdWJzY3JpYmVyIGRldGFpbHMgZm9yIHVzZXJzIGFuZCBkZXN0aW5hdGlvbnMgdG8gYmUgYWRkZWQgYXMgc3Vic2NyaWJlcnMgdG8gdGhlIHNjaGVkdWxlLlxuICovXG4gICAgc3Vic2NyaWJlcjogc3Vic2NyaWJlclNjaGVtYS5kZXNjcmliZShcIlN1YnNjcmliZXIgZGV0YWlscyBmb3IgdXNlcnMgYW5kIGRlc3RpbmF0aW9ucyB0byBiZSBhZGRlZCBhcyBzdWJzY3JpYmVycyB0byB0aGUgc2NoZWR1bGUuXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFVVSUQgaWRlbnRpZnlpbmcgdGhlIHN1YnNjcmlwdGlvbi5cbiAqL1xuICAgIHN1YnNjcmlwdGlvbl9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgc3Vic2NyaXB0aW9uLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBBIHRpbWVzdGFtcCBpbmRpY2F0aW5nIHdoZW4gdGhlIHN1YnNjcmlwdGlvbiB3YXMgbGFzdCB1cGRhdGVkLlxuICovXG4gICAgdXBkYXRlX3RpbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkEgdGltZXN0YW1wIGluZGljYXRpbmcgd2hlbiB0aGUgc3Vic2NyaXB0aW9uIHdhcyBsYXN0IHVwZGF0ZWQuXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdlbmllUXVlcnlBdHRhY2htZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIERlc2NyaXB0aW9uIG9mIHRoZSBxdWVyeVxuICovXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkRlc2NyaXB0aW9uIG9mIHRoZSBxdWVyeVwiKSxcbiAgICBpZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRpbWUgd2hlbiB0aGUgdXNlciB1cGRhdGVkIHRoZSBxdWVyeSBsYXN0XG4gKi9cbiAgICBsYXN0X3VwZGF0ZWRfdGltZXN0YW1wOiB6Lm51bWJlcigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaW1lIHdoZW4gdGhlIHVzZXIgdXBkYXRlZCB0aGUgcXVlcnkgbGFzdFwiKSxcbiAgICBwYXJhbWV0ZXJzOiB6LmFycmF5KHF1ZXJ5QXR0YWNobWVudFBhcmFtZXRlclNjaGVtYSkub3B0aW9uYWwoKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBBSSBnZW5lcmF0ZWQgU1FMIHF1ZXJ5XG4gKi9cbiAgICBxdWVyeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiQUkgZ2VuZXJhdGVkIFNRTCBxdWVyeVwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBNZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHF1ZXJ5IHJlc3VsdC5cbiAqL1xuICAgIHF1ZXJ5X3Jlc3VsdF9tZXRhZGF0YTogZ2VuaWVSZXN1bHRNZXRhZGF0YVNjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiTWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBxdWVyeSByZXN1bHQuXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFN0YXRlbWVudCBFeGVjdXRpb24gQVBJIHN0YXRlbWVudCBpZC4gVXNlIFtHZXQgc3RhdHVzLCBtYW5pZmVzdCwgYW5kIHJlc3VsdCBmaXJzdCBjaHVua10oOm1ldGhvZDpzdGF0ZW1lbnRleGVjdXRpb24vZ2V0c3RhdGVtZW50KSB0byBnZXQgdGhlIGZ1bGwgcmVzdWx0IGRhdGEuXG4gKi9cbiAgICBzdGF0ZW1lbnRfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlN0YXRlbWVudCBFeGVjdXRpb24gQVBJIHN0YXRlbWVudCBpZC4gVXNlIFtHZXQgc3RhdHVzLCBtYW5pZmVzdCwgYW5kIHJlc3VsdCBmaXJzdCBjaHVua10oOm1ldGhvZDpzdGF0ZW1lbnRleGVjdXRpb24vZ2V0c3RhdGVtZW50KSB0byBnZXQgdGhlIGZ1bGwgcmVzdWx0IGRhdGEuXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIE5hbWUgb2YgdGhlIHF1ZXJ5XG4gKi9cbiAgICB0aXRsZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiTmFtZSBvZiB0aGUgcXVlcnlcIilcbn0pO1xuXG5leHBvcnQgY29uc3QgdGV4dEF0dGFjaG1lbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gQUkgZ2VuZXJhdGVkIG1lc3NhZ2VcbiAqL1xuICAgIGNvbnRlbnQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkFJIGdlbmVyYXRlZCBtZXNzYWdlXCIpLFxuICAgIGlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gUHVycG9zZS9pbnRlbnQgb2YgdGhpcyB0ZXh0IGF0dGFjaG1lbnRcbiAqL1xuICAgIHB1cnBvc2U6IHRleHRBdHRhY2htZW50UHVycG9zZVNjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiUHVycG9zZS9pbnRlbnQgb2YgdGhpcyB0ZXh0IGF0dGFjaG1lbnRcIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VuaWVMaXN0U3BhY2VzUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVG9rZW4gdG8gZ2V0IHRoZSBuZXh0IHBhZ2Ugb2YgcmVzdWx0c1xuICovXG4gICAgbmV4dF9wYWdlX3Rva2VuOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUb2tlbiB0byBnZXQgdGhlIG5leHQgcGFnZSBvZiByZXN1bHRzXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIExpc3Qgb2YgR2VuaWUgc3BhY2VzXG4gKi9cbiAgICBzcGFjZXM6IHouYXJyYXkoZ2VuaWVTcGFjZVNjaGVtYSkub3B0aW9uYWwoKS5kZXNjcmliZShcIkxpc3Qgb2YgR2VuaWUgc3BhY2VzXCIpXG59KTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gR2VuaWUgQUkgUmVzcG9uc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGdlbmllQXR0YWNobWVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBBdHRhY2htZW50IElEXG4gKi9cbiAgICBhdHRhY2htZW50X2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJBdHRhY2htZW50IElEXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFF1ZXJ5IEF0dGFjaG1lbnQgaWYgR2VuaWUgcmVzcG9uZHMgd2l0aCBhIFNRTCBxdWVyeVxuICovXG4gICAgcXVlcnk6IGdlbmllUXVlcnlBdHRhY2htZW50U2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJRdWVyeSBBdHRhY2htZW50IGlmIEdlbmllIHJlc3BvbmRzIHdpdGggYSBTUUwgcXVlcnlcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gRm9sbG93LXVwIHF1ZXN0aW9ucyBzdWdnZXN0ZWQgYnkgR2VuaWVcbiAqL1xuICAgIHN1Z2dlc3RlZF9xdWVzdGlvbnM6IGdlbmllU3VnZ2VzdGVkUXVlc3Rpb25zQXR0YWNobWVudFNjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiRm9sbG93LXVwIHF1ZXN0aW9ucyBzdWdnZXN0ZWQgYnkgR2VuaWVcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGV4dCBBdHRhY2htZW50IGlmIEdlbmllIHJlc3BvbmRzIHdpdGggdGV4dFxuICovXG4gICAgdGV4dDogdGV4dEF0dGFjaG1lbnRTY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShcIlRleHQgQXR0YWNobWVudCBpZiBHZW5pZSByZXNwb25kcyB3aXRoIHRleHRcIilcbn0pO1xuXG5leHBvcnQgY29uc3QgbWVzc2FnZUVycm9yU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgdHlwZTogbWVzc2FnZUVycm9yVHlwZVNjaGVtYS5vcHRpb25hbCgpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdlbmllTWVzc2FnZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBBSS1nZW5lcmF0ZWQgcmVzcG9uc2UgdG8gdGhlIG1lc3NhZ2VcbiAqL1xuICAgIGF0dGFjaG1lbnRzOiB6LmFycmF5KGdlbmllQXR0YWNobWVudFNjaGVtYSkub3B0aW9uYWwoKS5kZXNjcmliZShcIkFJLWdlbmVyYXRlZCByZXNwb25zZSB0byB0aGUgbWVzc2FnZVwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBVc2VyIG1lc3NhZ2UgY29udGVudFxuICovXG4gICAgY29udGVudDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVzZXIgbWVzc2FnZSBjb250ZW50XCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnNhdGlvbiBJRFxuICovXG4gICAgY29udmVyc2F0aW9uX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiQ29udmVyc2F0aW9uIElEXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRpbWVzdGFtcCB3aGVuIHRoZSBtZXNzYWdlIHdhcyBjcmVhdGVkXG4gKi9cbiAgICBjcmVhdGVkX3RpbWVzdGFtcDogei5udW1iZXIoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGltZXN0YW1wIHdoZW4gdGhlIG1lc3NhZ2Ugd2FzIGNyZWF0ZWRcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gRXJyb3IgbWVzc2FnZSBpZiBHZW5pZSBmYWlsZWQgdG8gcmVzcG9uZCB0byB0aGUgbWVzc2FnZVxuICovXG4gICAgZXJyb3I6IG1lc3NhZ2VFcnJvclNjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiRXJyb3IgbWVzc2FnZSBpZiBHZW5pZSBmYWlsZWQgdG8gcmVzcG9uZCB0byB0aGUgbWVzc2FnZVwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBVc2VyIGZlZWRiYWNrIGZvciB0aGUgbWVzc2FnZSBpZiBwcm92aWRlZFxuICovXG4gICAgZmVlZGJhY2s6IGdlbmllRmVlZGJhY2tTY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShcIlVzZXIgZmVlZGJhY2sgZm9yIHRoZSBtZXNzYWdlIGlmIHByb3ZpZGVkXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIE1lc3NhZ2UgSUQuIExlZ2FjeSBpZGVudGlmaWVyLCB1c2UgbWVzc2FnZV9pZCBpbnN0ZWFkXG4gKi9cbiAgICBpZDogei5zdHJpbmcoKS5kZXNjcmliZShcIk1lc3NhZ2UgSUQuIExlZ2FjeSBpZGVudGlmaWVyLCB1c2UgbWVzc2FnZV9pZCBpbnN0ZWFkXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRpbWVzdGFtcCB3aGVuIHRoZSBtZXNzYWdlIHdhcyBsYXN0IHVwZGF0ZWRcbiAqL1xuICAgIGxhc3RfdXBkYXRlZF90aW1lc3RhbXA6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRpbWVzdGFtcCB3aGVuIHRoZSBtZXNzYWdlIHdhcyBsYXN0IHVwZGF0ZWRcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gTWVzc2FnZSBJRFxuICovXG4gICAgbWVzc2FnZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIk1lc3NhZ2UgSURcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIHJlc3VsdCBvZiBTUUwgcXVlcnkgaWYgdGhlIG1lc3NhZ2UgaW5jbHVkZXMgYSBxdWVyeSBhdHRhY2htZW50LiBEZXByZWNhdGVkLiBVc2UgYHF1ZXJ5X3Jlc3VsdF9tZXRhZGF0YWAgaW4gYEdlbmllUXVlcnlBdHRhY2htZW50YCBpbnN0ZWFkLlxuICovXG4gICAgcXVlcnlfcmVzdWx0OiByZXN1bHRTY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSByZXN1bHQgb2YgU1FMIHF1ZXJ5IGlmIHRoZSBtZXNzYWdlIGluY2x1ZGVzIGEgcXVlcnkgYXR0YWNobWVudC4gRGVwcmVjYXRlZC4gVXNlIGBxdWVyeV9yZXN1bHRfbWV0YWRhdGFgIGluIGBHZW5pZVF1ZXJ5QXR0YWNobWVudGAgaW5zdGVhZC5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gR2VuaWUgc3BhY2UgSURcbiAqL1xuICAgIHNwYWNlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiR2VuaWUgc3BhY2UgSURcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gTWVzc2FnZVN0YXR1cy4gVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmU6ICogYEZFVENISU5HX01FVEFEQVRBYDogRmV0Y2hpbmcgbWV0YWRhdGEgZnJvbSB0aGUgZGF0YSBzb3VyY2VzLiAqIGBGSUxURVJJTkdfQ09OVEVYVGA6IFJ1bm5pbmcgc21hcnQgY29udGV4dCBzdGVwIHRvIGRldGVybWluZSByZWxldmFudCBjb250ZXh0LiAqIGBBU0tJTkdfQUlgOiBXYWl0aW5nIGZvciB0aGUgTExNIHRvIHJlc3BvbmQgdG8gdGhlIHVzZXIncyBxdWVzdGlvbi4gKiBgUEVORElOR19XQVJFSE9VU0VgOiBXYWl0aW5nIGZvciB3YXJlaG91c2UgYmVmb3JlIHRoZSBTUUwgcXVlcnkgY2FuIHN0YXJ0IGV4ZWN1dGluZy4gKiBgRVhFQ1VUSU5HX1FVRVJZYDogRXhlY3V0aW5nIGEgZ2VuZXJhdGVkIFNRTCBxdWVyeS4gR2V0IHRoZSBTUUwgcXVlcnkgcmVzdWx0IGJ5IGNhbGxpbmcgW2dldE1lc3NhZ2VBdHRhY2htZW50UXVlcnlSZXN1bHRdKDptZXRob2Q6Z2VuaWUvZ2V0TWVzc2FnZUF0dGFjaG1lbnRRdWVyeVJlc3VsdCkgQVBJLiAqIGBGQUlMRURgOiBUaGUgcmVzcG9uc2UgZ2VuZXJhdGlvbiBvciBxdWVyeSBleGVjdXRpb24gZmFpbGVkLiBTZWUgYGVycm9yYCBmaWVsZC4gKiBgQ09NUExFVEVEYDogTWVzc2FnZSBwcm9jZXNzaW5nIGlzIGNvbXBsZXRlZC4gUmVzdWx0cyBhcmUgaW4gdGhlIGBhdHRhY2htZW50c2AgZmllbGQuIEdldCB0aGUgU1FMIHF1ZXJ5IHJlc3VsdCBieSBjYWxsaW5nIFtnZXRNZXNzYWdlQXR0YWNobWVudFF1ZXJ5UmVzdWx0XSg6bWV0aG9kOmdlbmllL2dldE1lc3NhZ2VBdHRhY2htZW50UXVlcnlSZXN1bHQpIEFQSS4gKiBgU1VCTUlUVEVEYDogTWVzc2FnZSBoYXMgYmVlbiBzdWJtaXR0ZWQuICogYFFVRVJZX1JFU1VMVF9FWFBJUkVEYDogU1FMIHJlc3VsdCBpcyBub3QgYXZhaWxhYmxlIGFueW1vcmUuIFRoZSB1c2VyIG5lZWRzIHRvIHJlcnVuIHRoZSBxdWVyeS4gUmVydW4gdGhlIFNRTCBxdWVyeSByZXN1bHQgYnkgY2FsbGluZyBbZXhlY3V0ZU1lc3NhZ2VBdHRhY2htZW50UXVlcnldKDptZXRob2Q6Z2VuaWUvZXhlY3V0ZU1lc3NhZ2VBdHRhY2htZW50UXVlcnkpIEFQSS4gKiBgQ0FOQ0VMTEVEYDogTWVzc2FnZSBoYXMgYmVlbiBjYW5jZWxsZWQuXG4gKi9cbiAgICBzdGF0dXM6IG1lc3NhZ2VTdGF0dXNTY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShcIk1lc3NhZ2VTdGF0dXMuIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOiAqIGBGRVRDSElOR19NRVRBREFUQWA6IEZldGNoaW5nIG1ldGFkYXRhIGZyb20gdGhlIGRhdGEgc291cmNlcy4gKiBgRklMVEVSSU5HX0NPTlRFWFRgOiBSdW5uaW5nIHNtYXJ0IGNvbnRleHQgc3RlcCB0byBkZXRlcm1pbmUgcmVsZXZhbnQgY29udGV4dC4gKiBgQVNLSU5HX0FJYDogV2FpdGluZyBmb3IgdGhlIExMTSB0byByZXNwb25kIHRvIHRoZSB1c2VyJ3MgcXVlc3Rpb24uICogYFBFTkRJTkdfV0FSRUhPVVNFYDogV2FpdGluZyBmb3Igd2FyZWhvdXNlIGJlZm9yZSB0aGUgU1FMIHF1ZXJ5IGNhbiBzdGFydCBleGVjdXRpbmcuICogYEVYRUNVVElOR19RVUVSWWA6IEV4ZWN1dGluZyBhIGdlbmVyYXRlZCBTUUwgcXVlcnkuIEdldCB0aGUgU1FMIHF1ZXJ5IHJlc3VsdCBieSBjYWxsaW5nIFtnZXRNZXNzYWdlQXR0YWNobWVudFF1ZXJ5UmVzdWx0XSg6bWV0aG9kOmdlbmllL2dldE1lc3NhZ2VBdHRhY2htZW50UXVlcnlSZXN1bHQpIEFQSS4gKiBgRkFJTEVEYDogVGhlIHJlc3BvbnNlIGdlbmVyYXRpb24gb3IgcXVlcnkgZXhlY3V0aW9uIGZhaWxlZC4gU2VlIGBlcnJvcmAgZmllbGQuICogYENPTVBMRVRFRGA6IE1lc3NhZ2UgcHJvY2Vzc2luZyBpcyBjb21wbGV0ZWQuIFJlc3VsdHMgYXJlIGluIHRoZSBgYXR0YWNobWVudHNgIGZpZWxkLiBHZXQgdGhlIFNRTCBxdWVyeSByZXN1bHQgYnkgY2FsbGluZyBbZ2V0TWVzc2FnZUF0dGFjaG1lbnRRdWVyeVJlc3VsdF0oOm1ldGhvZDpnZW5pZS9nZXRNZXNzYWdlQXR0YWNobWVudFF1ZXJ5UmVzdWx0KSBBUEkuICogYFNVQk1JVFRFRGA6IE1lc3NhZ2UgaGFzIGJlZW4gc3VibWl0dGVkLiAqIGBRVUVSWV9SRVNVTFRfRVhQSVJFRGA6IFNRTCByZXN1bHQgaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlLiBUaGUgdXNlciBuZWVkcyB0byByZXJ1biB0aGUgcXVlcnkuIFJlcnVuIHRoZSBTUUwgcXVlcnkgcmVzdWx0IGJ5IGNhbGxpbmcgW2V4ZWN1dGVNZXNzYWdlQXR0YWNobWVudFF1ZXJ5XSg6bWV0aG9kOmdlbmllL2V4ZWN1dGVNZXNzYWdlQXR0YWNobWVudFF1ZXJ5KSBBUEkuICogYENBTkNFTExFRGA6IE1lc3NhZ2UgaGFzIGJlZW4gY2FuY2VsbGVkLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBJRCBvZiB0aGUgdXNlciB3aG8gY3JlYXRlZCB0aGUgbWVzc2FnZVxuICovXG4gICAgdXNlcl9pZDogei5udW1iZXIoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiSUQgb2YgdGhlIHVzZXIgd2hvIGNyZWF0ZWQgdGhlIG1lc3NhZ2VcIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2V0UHVibGlzaGVkRGFzaGJvYXJkVG9rZW5JbmZvUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gQXV0aG9yaXphdGlvbiBjb25zdHJhaW50cyBmb3IgYWNjZXNzaW5nIHRoZSBwdWJsaXNoZWQgZGFzaGJvYXJkLiBDdXJyZW50bHkgaW5jbHVkZXMgYHdvcmtzcGFjZV9ydWxlX3NldGAgYW5kIGNvdWxkIGJlIGVucmljaGVkIHdpdGggYHVuaXR5X2NhdGFsb2dfcHJpdmlsZWdlc2AgYmVmb3JlIG9BdXRoIHRva2VuIGdlbmVyYXRpb24uXG4gKi9cbiAgICBhdXRob3JpemF0aW9uX2RldGFpbHM6IHouYXJyYXkoYXV0aG9yaXphdGlvbkRldGFpbHNTY2hlbWEpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJBdXRob3JpemF0aW9uIGNvbnN0cmFpbnRzIGZvciBhY2Nlc3NpbmcgdGhlIHB1Ymxpc2hlZCBkYXNoYm9hcmQuIEN1cnJlbnRseSBpbmNsdWRlcyBgd29ya3NwYWNlX3J1bGVfc2V0YCBhbmQgY291bGQgYmUgZW5yaWNoZWQgd2l0aCBgdW5pdHlfY2F0YWxvZ19wcml2aWxlZ2VzYCBiZWZvcmUgb0F1dGggdG9rZW4gZ2VuZXJhdGlvbi5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gQ3VzdG9tIGNsYWltIGdlbmVyYXRlZCBmcm9tIGV4dGVybmFsX3ZhbHVlIGFuZCBleHRlcm5hbF92aWV3ZXJfaWQuIEZvcm1hdDogYHVybjphaWJpOmV4dGVybmFsX2RhdGE6PGV4dGVybmFsX3ZhbHVlPjo8ZXh0ZXJuYWxfdmlld2VyX2lkPjo8ZGFzaGJvYXJkX2lkPmBcbiAqL1xuICAgIGN1c3RvbV9jbGFpbTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiQ3VzdG9tIGNsYWltIGdlbmVyYXRlZCBmcm9tIGV4dGVybmFsX3ZhbHVlIGFuZCBleHRlcm5hbF92aWV3ZXJfaWQuIEZvcm1hdDogYHVybjphaWJpOmV4dGVybmFsX2RhdGE6PGV4dGVybmFsX3ZhbHVlPjo8ZXh0ZXJuYWxfdmlld2VyX2lkPjo8ZGFzaGJvYXJkX2lkPmBcIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gU2NvcGUgZGVmaW5pbmcgYWNjZXNzIHBlcm1pc3Npb25zLlxuICovXG4gICAgc2NvcGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlNjb3BlIGRlZmluaW5nIGFjY2VzcyBwZXJtaXNzaW9ucy5cIilcbn0pO1xuXG5leHBvcnQgY29uc3QgbGlzdERhc2hib2FyZHNSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBkYXNoYm9hcmRzOiB6LmFycmF5KGRhc2hib2FyZFNjaGVtYSkub3B0aW9uYWwoKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBBIHRva2VuLCB3aGljaCBjYW4gYmUgc2VudCBhcyBgcGFnZV90b2tlbmAgdG8gcmV0cmlldmUgdGhlIG5leHQgcGFnZS4gSWYgdGhpcyBmaWVsZCBpcyBvbWl0dGVkLCB0aGVyZSBhcmUgbm8gc3Vic2VxdWVudCBkYXNoYm9hcmRzLlxuICovXG4gICAgbmV4dF9wYWdlX3Rva2VuOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJBIHRva2VuLCB3aGljaCBjYW4gYmUgc2VudCBhcyBgcGFnZV90b2tlbmAgdG8gcmV0cmlldmUgdGhlIG5leHQgcGFnZS4gSWYgdGhpcyBmaWVsZCBpcyBvbWl0dGVkLCB0aGVyZSBhcmUgbm8gc3Vic2VxdWVudCBkYXNoYm9hcmRzLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBsaXN0U2NoZWR1bGVzUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gQSB0b2tlbiB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgYHBhZ2VfdG9rZW5gIGluIHN1YnNlcXVlbnQgcmVxdWVzdHMgdG8gcmV0cmlldmUgdGhlIG5leHQgcGFnZSBvZiByZXN1bHRzLiBJZiB0aGlzIGZpZWxkIGlzIG9taXR0ZWQsIHRoZXJlIGFyZSBubyBzdWJzZXF1ZW50IHNjaGVkdWxlcy5cbiAqL1xuICAgIG5leHRfcGFnZV90b2tlbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiQSB0b2tlbiB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgYHBhZ2VfdG9rZW5gIGluIHN1YnNlcXVlbnQgcmVxdWVzdHMgdG8gcmV0cmlldmUgdGhlIG5leHQgcGFnZSBvZiByZXN1bHRzLiBJZiB0aGlzIGZpZWxkIGlzIG9taXR0ZWQsIHRoZXJlIGFyZSBubyBzdWJzZXF1ZW50IHNjaGVkdWxlcy5cIiksXG4gICAgc2NoZWR1bGVzOiB6LmFycmF5KHNjaGVkdWxlU2NoZW1hKS5vcHRpb25hbCgpXG59KTtcblxuZXhwb3J0IGNvbnN0IGxpc3RTdWJzY3JpcHRpb25zUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gQSB0b2tlbiB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgYHBhZ2VfdG9rZW5gIGluIHN1YnNlcXVlbnQgcmVxdWVzdHMgdG8gcmV0cmlldmUgdGhlIG5leHQgcGFnZSBvZiByZXN1bHRzLiBJZiB0aGlzIGZpZWxkIGlzIG9taXR0ZWQsIHRoZXJlIGFyZSBubyBzdWJzZXF1ZW50IHN1YnNjcmlwdGlvbnMuXG4gKi9cbiAgICBuZXh0X3BhZ2VfdG9rZW46IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkEgdG9rZW4gdGhhdCBjYW4gYmUgdXNlZCBhcyBhIGBwYWdlX3Rva2VuYCBpbiBzdWJzZXF1ZW50IHJlcXVlc3RzIHRvIHJldHJpZXZlIHRoZSBuZXh0IHBhZ2Ugb2YgcmVzdWx0cy4gSWYgdGhpcyBmaWVsZCBpcyBvbWl0dGVkLCB0aGVyZSBhcmUgbm8gc3Vic2VxdWVudCBzdWJzY3JpcHRpb25zLlwiKSxcbiAgICBzdWJzY3JpcHRpb25zOiB6LmFycmF5KHN1YnNjcmlwdGlvblNjaGVtYSkub3B0aW9uYWwoKVxufSk7XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVTY2hlZHVsZVJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVVVJRCBpZGVudGlmeWluZyB0aGUgZGFzaGJvYXJkIHRvIHdoaWNoIHRoZSBzY2hlZHVsZSBiZWxvbmdzLlxuICovXG4gICAgZGFzaGJvYXJkX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgZGFzaGJvYXJkIHRvIHdoaWNoIHRoZSBzY2hlZHVsZSBiZWxvbmdzLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgc2NoZWR1bGUgdG8gdXBkYXRlLlxuICovXG4gICAgc2NoZWR1bGU6IHNjaGVkdWxlU2NoZW1hLmRlc2NyaWJlKFwiVGhlIHNjaGVkdWxlIHRvIHVwZGF0ZS5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVVVJRCBpZGVudGlmeWluZyB0aGUgc2NoZWR1bGUuXG4gKi9cbiAgICBzY2hlZHVsZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIHNjaGVkdWxlLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTdWJzY3JpcHRpb25SZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFVVSUQgaWRlbnRpZnlpbmcgdGhlIGRhc2hib2FyZCB0byB3aGljaCB0aGUgc3Vic2NyaXB0aW9uIGJlbG9uZ3MuXG4gKi9cbiAgICBkYXNoYm9hcmRfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQgdG8gd2hpY2ggdGhlIHN1YnNjcmlwdGlvbiBiZWxvbmdzLlwiKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBVVUlEIGlkZW50aWZ5aW5nIHRoZSBzY2hlZHVsZSB0byB3aGljaCB0aGUgc3Vic2NyaXB0aW9uIGJlbG9uZ3MuXG4gKi9cbiAgICBzY2hlZHVsZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIHNjaGVkdWxlIHRvIHdoaWNoIHRoZSBzdWJzY3JpcHRpb24gYmVsb25ncy5cIiksXG4gICAgLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIHN1YnNjcmlwdGlvbiB0byBjcmVhdGUuIEEgc2NoZWR1bGUgaXMgbGltaXRlZCB0byAxMDAgc3Vic2NyaXB0aW9ucy5cbiAqL1xuICAgIHN1YnNjcmlwdGlvbjogc3Vic2NyaXB0aW9uU2NoZW1hLmRlc2NyaWJlKFwiVGhlIHN1YnNjcmlwdGlvbiB0byBjcmVhdGUuIEEgc2NoZWR1bGUgaXMgbGltaXRlZCB0byAxMDAgc3Vic2NyaXB0aW9ucy5cIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VuaWVMaXN0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBMaXN0IG9mIG1lc3NhZ2VzIGluIHRoZSBjb252ZXJzYXRpb24uXG4gKi9cbiAgICBtZXNzYWdlczogei5hcnJheShnZW5pZU1lc3NhZ2VTY2hlbWEpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJMaXN0IG9mIG1lc3NhZ2VzIGluIHRoZSBjb252ZXJzYXRpb24uXCIpLFxuICAgIC8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSB0b2tlbiB0byB1c2UgZm9yIHJldHJpZXZpbmcgdGhlIG5leHQgcGFnZSBvZiByZXN1bHRzLlxuICovXG4gICAgbmV4dF9wYWdlX3Rva2VuOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgdG9rZW4gdG8gdXNlIGZvciByZXRyaWV2aW5nIHRoZSBuZXh0IHBhZ2Ugb2YgcmVzdWx0cy5cIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VuaWVTdGFydENvbnZlcnNhdGlvblJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGNvbnZlcnNhdGlvbjogZ2VuaWVDb252ZXJzYXRpb25TY2hlbWEub3B0aW9uYWwoKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJzYXRpb24gSURcbiAqL1xuICAgIGNvbnZlcnNhdGlvbl9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIkNvbnZlcnNhdGlvbiBJRFwiKSxcbiAgICBtZXNzYWdlOiBnZW5pZU1lc3NhZ2VTY2hlbWEub3B0aW9uYWwoKSxcbiAgICAvKipcbiAqIEBkZXNjcmlwdGlvbiBNZXNzYWdlIElEXG4gKi9cbiAgICBtZXNzYWdlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiTWVzc2FnZSBJRFwiKVxufSk7XG5cbmV4cG9ydCB0eXBlIEF1dGhvcml6YXRpb25EZXRhaWxzR3JhbnRSdWxlID0gei5pbmZlcjx0eXBlb2YgYXV0aG9yaXphdGlvbkRldGFpbHNHcmFudFJ1bGVTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBDcm9uU2NoZWR1bGUgPSB6LmluZmVyPHR5cGVvZiBjcm9uU2NoZWR1bGVTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBMaWZlY3ljbGVTdGF0ZSA9IHouaW5mZXI8dHlwZW9mIGxpZmVjeWNsZVN0YXRlU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgRGFzaGJvYXJkVmlldyA9IHouaW5mZXI8dHlwZW9mIGRhc2hib2FyZFZpZXdTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBEZWxldGVTY2hlZHVsZVJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBkZWxldGVTY2hlZHVsZVJlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBEZWxldGVTdWJzY3JpcHRpb25SZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgZGVsZXRlU3Vic2NyaXB0aW9uUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdlbmllU3VnZ2VzdGVkUXVlc3Rpb25zQXR0YWNobWVudCA9IHouaW5mZXI8dHlwZW9mIGdlbmllU3VnZ2VzdGVkUXVlc3Rpb25zQXR0YWNobWVudFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdlbmllQ29udmVyc2F0aW9uID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVDb252ZXJzYXRpb25TY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZW5pZUNvbnZlcnNhdGlvblN1bW1hcnkgPSB6LmluZmVyPHR5cGVvZiBnZW5pZUNvbnZlcnNhdGlvblN1bW1hcnlTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZW5pZUNyZWF0ZUNvbnZlcnNhdGlvbk1lc3NhZ2VSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVDcmVhdGVDb252ZXJzYXRpb25NZXNzYWdlUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdlbmllRGVsZXRlQ29udmVyc2F0aW9uTWVzc2FnZVJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBnZW5pZURlbGV0ZUNvbnZlcnNhdGlvbk1lc3NhZ2VSZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVEZWxldGVDb252ZXJzYXRpb25SZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVEZWxldGVDb252ZXJzYXRpb25SZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVFeGVjdXRlTWVzc2FnZUF0dGFjaG1lbnRRdWVyeVJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBnZW5pZUV4ZWN1dGVNZXNzYWdlQXR0YWNobWVudFF1ZXJ5UmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdlbmllRXhlY3V0ZU1lc3NhZ2VRdWVyeVJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBnZW5pZUV4ZWN1dGVNZXNzYWdlUXVlcnlSZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVGZWVkYmFja1JhdGluZyA9IHouaW5mZXI8dHlwZW9mIGdlbmllRmVlZGJhY2tSYXRpbmdTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZW5pZUdldENvbnZlcnNhdGlvbk1lc3NhZ2VSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVHZXRDb252ZXJzYXRpb25NZXNzYWdlUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdlbmllR2V0TWVzc2FnZUF0dGFjaG1lbnRRdWVyeVJlc3VsdFJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBnZW5pZUdldE1lc3NhZ2VBdHRhY2htZW50UXVlcnlSZXN1bHRSZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVHZXRNZXNzYWdlUXVlcnlSZXN1bHRSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVHZXRNZXNzYWdlUXVlcnlSZXN1bHRSZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVHZXRNZXNzYWdlUXVlcnlSZXN1bHRSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIGdlbmllR2V0TWVzc2FnZVF1ZXJ5UmVzdWx0UmVzcG9uc2VTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZW5pZUdldFF1ZXJ5UmVzdWx0QnlBdHRhY2htZW50UmVxdWVzdCA9IHouaW5mZXI8dHlwZW9mIGdlbmllR2V0UXVlcnlSZXN1bHRCeUF0dGFjaG1lbnRSZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVHZXRTcGFjZVJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBnZW5pZUdldFNwYWNlUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdlbmllTGlzdENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdCA9IHouaW5mZXI8dHlwZW9mIGdlbmllTGlzdENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdlbmllTGlzdENvbnZlcnNhdGlvbnNSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVMaXN0Q29udmVyc2F0aW9uc1JlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZW5pZUxpc3RDb252ZXJzYXRpb25zUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBnZW5pZUxpc3RDb252ZXJzYXRpb25zUmVzcG9uc2VTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZW5pZUxpc3RTcGFjZXNSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVMaXN0U3BhY2VzUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdlbmllU3BhY2UgPSB6LmluZmVyPHR5cGVvZiBnZW5pZVNwYWNlU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVGZWVkYmFjayA9IHouaW5mZXI8dHlwZW9mIGdlbmllRmVlZGJhY2tTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiByZXN1bHRTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlU3RhdHVzID0gei5pbmZlcjx0eXBlb2YgbWVzc2FnZVN0YXR1c1NjaGVtYT47XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5QXR0YWNobWVudFBhcmFtZXRlciA9IHouaW5mZXI8dHlwZW9mIHF1ZXJ5QXR0YWNobWVudFBhcmFtZXRlclNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdlbmllUmVzdWx0TWV0YWRhdGEgPSB6LmluZmVyPHR5cGVvZiBnZW5pZVJlc3VsdE1ldGFkYXRhU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVTZW5kTWVzc2FnZUZlZWRiYWNrUmVxdWVzdCA9IHouaW5mZXI8dHlwZW9mIGdlbmllU2VuZE1lc3NhZ2VGZWVkYmFja1JlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZW5pZVN0YXJ0Q29udmVyc2F0aW9uTWVzc2FnZVJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBnZW5pZVN0YXJ0Q29udmVyc2F0aW9uTWVzc2FnZVJlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZW5pZVRyYXNoU3BhY2VSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVUcmFzaFNwYWNlUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdldERhc2hib2FyZFJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBnZXREYXNoYm9hcmRSZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2V0UHVibGlzaGVkRGFzaGJvYXJkUmVxdWVzdCA9IHouaW5mZXI8dHlwZW9mIGdldFB1Ymxpc2hlZERhc2hib2FyZFJlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZXRQdWJsaXNoZWREYXNoYm9hcmRUb2tlbkluZm9SZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgZ2V0UHVibGlzaGVkRGFzaGJvYXJkVG9rZW5JbmZvUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEF1dGhvcml6YXRpb25EZXRhaWxzID0gei5pbmZlcjx0eXBlb2YgYXV0aG9yaXphdGlvbkRldGFpbHNTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZXRTY2hlZHVsZVJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBnZXRTY2hlZHVsZVJlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZXRTdWJzY3JpcHRpb25SZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgZ2V0U3Vic2NyaXB0aW9uUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIExpc3REYXNoYm9hcmRzUmVxdWVzdCA9IHouaW5mZXI8dHlwZW9mIGxpc3REYXNoYm9hcmRzUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIERhc2hib2FyZCA9IHouaW5mZXI8dHlwZW9mIGRhc2hib2FyZFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIExpc3RTY2hlZHVsZXNSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgbGlzdFNjaGVkdWxlc1JlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBMaXN0U3Vic2NyaXB0aW9uc1JlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBsaXN0U3Vic2NyaXB0aW9uc1JlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlRXJyb3JUeXBlID0gei5pbmZlcjx0eXBlb2YgbWVzc2FnZUVycm9yVHlwZVNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIE1pZ3JhdGVEYXNoYm9hcmRSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgbWlncmF0ZURhc2hib2FyZFJlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBQdWJsaXNoUmVxdWVzdCA9IHouaW5mZXI8dHlwZW9mIHB1Ymxpc2hSZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgUHVibGlzaGVkRGFzaGJvYXJkID0gei5pbmZlcjx0eXBlb2YgcHVibGlzaGVkRGFzaGJvYXJkU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgU2NoZWR1bGVQYXVzZVN0YXR1cyA9IHouaW5mZXI8dHlwZW9mIHNjaGVkdWxlUGF1c2VTdGF0dXNTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb25TdWJzY3JpYmVyRGVzdGluYXRpb24gPSB6LmluZmVyPHR5cGVvZiBzdWJzY3JpcHRpb25TdWJzY3JpYmVyRGVzdGluYXRpb25TY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb25TdWJzY3JpYmVyVXNlciA9IHouaW5mZXI8dHlwZW9mIHN1YnNjcmlwdGlvblN1YnNjcmliZXJVc2VyU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaWJlciA9IHouaW5mZXI8dHlwZW9mIHN1YnNjcmliZXJTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBUZXh0QXR0YWNobWVudFB1cnBvc2UgPSB6LmluZmVyPHR5cGVvZiB0ZXh0QXR0YWNobWVudFB1cnBvc2VTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBUcmFzaERhc2hib2FyZFJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiB0cmFzaERhc2hib2FyZFJlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBVbnB1Ymxpc2hEYXNoYm9hcmRSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgdW5wdWJsaXNoRGFzaGJvYXJkUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIFVwZGF0ZURhc2hib2FyZFJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiB1cGRhdGVEYXNoYm9hcmRSZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgU2NoZWR1bGUgPSB6LmluZmVyPHR5cGVvZiBzY2hlZHVsZVNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIENyZWF0ZURhc2hib2FyZFJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBjcmVhdGVEYXNoYm9hcmRSZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgQ3JlYXRlU2NoZWR1bGVSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgY3JlYXRlU2NoZWR1bGVSZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uID0gei5pbmZlcjx0eXBlb2Ygc3Vic2NyaXB0aW9uU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVRdWVyeUF0dGFjaG1lbnQgPSB6LmluZmVyPHR5cGVvZiBnZW5pZVF1ZXJ5QXR0YWNobWVudFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIFRleHRBdHRhY2htZW50ID0gei5pbmZlcjx0eXBlb2YgdGV4dEF0dGFjaG1lbnRTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZW5pZUxpc3RTcGFjZXNSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIGdlbmllTGlzdFNwYWNlc1Jlc3BvbnNlU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVBdHRhY2htZW50ID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVBdHRhY2htZW50U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZUVycm9yID0gei5pbmZlcjx0eXBlb2YgbWVzc2FnZUVycm9yU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVNZXNzYWdlID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVNZXNzYWdlU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2V0UHVibGlzaGVkRGFzaGJvYXJkVG9rZW5JbmZvUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBnZXRQdWJsaXNoZWREYXNoYm9hcmRUb2tlbkluZm9SZXNwb25zZVNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIExpc3REYXNoYm9hcmRzUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBsaXN0RGFzaGJvYXJkc1Jlc3BvbnNlU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgTGlzdFNjaGVkdWxlc1Jlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgbGlzdFNjaGVkdWxlc1Jlc3BvbnNlU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgTGlzdFN1YnNjcmlwdGlvbnNSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIGxpc3RTdWJzY3JpcHRpb25zUmVzcG9uc2VTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBVcGRhdGVTY2hlZHVsZVJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiB1cGRhdGVTY2hlZHVsZVJlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVTdWJzY3JpcHRpb25SZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgY3JlYXRlU3Vic2NyaXB0aW9uUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdlbmllTGlzdENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBnZW5pZUxpc3RDb252ZXJzYXRpb25NZXNzYWdlc1Jlc3BvbnNlU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVTdGFydENvbnZlcnNhdGlvblJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVTdGFydENvbnZlcnNhdGlvblJlc3BvbnNlU2NoZW1hPjtcbiJdfQ==
359
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXNoYm9hcmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdFQUFnRTtBQUNoRSwrRUFBK0U7QUFDL0Usd0VBQXdFO0FBRXhFLHlCQUF5QjtBQUN6QixPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLE1BQU0sQ0FBQyxNQUFNLG1DQUFtQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDeEQsY0FBYyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsbUtBQW1LLENBQUM7Q0FDdE4sQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN2QyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLDROQUE0TixDQUFDO0lBQ3pRLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLHNNQUFzTSxDQUFDO0NBQzNPLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXpGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUVyRSxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2hELFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLCtEQUErRCxDQUFDO0lBQ2xHLElBQUksRUFBRSxDQUFDLENBQUMsTUFB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QUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztJQUN2RCxPQUFPLEVBQUUsa0JBQWtCLENBQUMsUUFBUSxFQUFFO0lBQ3RDLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztDQUNoRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHN5bnRoIChjb2RlZ2VuOiB0cy10by16b2QpIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSB1cHN0cmVhbSAuZC50cyBkZWNsYXJlZCBpbiBwYWNrYWdlLmpzb24gY29kZWdlbi5pbnB1dHMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuLy8gR2VuZXJhdGVkIGJ5IHRzLXRvLXpvZFxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuZXhwb3J0IGNvbnN0IGF1dGhvcml6YXRpb25EZXRhaWxzR3JhbnRSdWxlU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIHBlcm1pc3Npb25fc2V0OiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJQZXJtaXNzaW9uIHNldHMgZm9yIGRhc2hib2FyZCBhcmUgZGVmaW5lZCBpbiBpYW0tY29tbW9uL3JiYWMtY29tbW9uL3Blcm1pc3Npb24tc2V0cy9kZWZpbml0aW9ucy9UcmVlU3RvcmVCYXNlUGVybWlzc2lvblNldHMgRXg6IGBwZXJtaXNzaW9uU2V0cy9kYXNoYm9hcmQucnVubmVyYFwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBjcm9uU2NoZWR1bGVTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgcXVhcnR6X2Nyb25fZXhwcmVzc2lvbjogei5zdHJpbmcoKS5kZXNjcmliZShcIkEgY3JvbiBleHByZXNzaW9uIHVzaW5nIHF1YXJ0eiBzeW50YXguIEVYOiBgMCAwIDggKiAqID9gIHJlcHJlc2VudHMgZXZlcnlkYXkgYXQgOGFtLiBTZWUgW0Nyb24gVHJpZ2dlcl0gZm9yIGRldGFpbHMuIFtDcm9uIFRyaWdnZXJdOiBodHRwOi8vd3d3LnF1YXJ0ei1zY2hlZHVsZXIub3JnL2RvY3VtZW50YXRpb24vcXVhcnR6LTIuMy4wL3R1dG9yaWFscy9jcm9udHJpZ2dlci5odG1sXCIpLFxuICAgIHRpbWV6b25lX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiQSBKYXZhIHRpbWV6b25lIGlkLiBUaGUgc2NoZWR1bGUgd2lsbCBiZSByZXNvbHZlZCB3aXRoIHJlc3BlY3QgdG8gdGhpcyB0aW1lem9uZS4gU2VlIFtKYXZhIFRpbWVab25lXSBmb3IgZGV0YWlscy4gW0phdmEgVGltZVpvbmVdOiBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2UvNy9kb2NzL2FwaS9qYXZhL3V0aWwvVGltZVpvbmUuaHRtbFwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBsaWZlY3ljbGVTdGF0ZVNjaGVtYSA9IHoudW5pb24oW3oubGl0ZXJhbChcIkFDVElWRVwiKSwgei5saXRlcmFsKFwiVFJBU0hFRFwiKV0pO1xuXG5leHBvcnQgY29uc3QgZGFzaGJvYXJkVmlld1NjaGVtYSA9IHoubGl0ZXJhbChcIkRBU0hCT0FSRF9WSUVXX0JBU0lDXCIpO1xuXG5leHBvcnQgY29uc3QgZGVsZXRlU2NoZWR1bGVSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGRhc2hib2FyZF9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIGRhc2hib2FyZCB0byB3aGljaCB0aGUgc2NoZWR1bGUgYmVsb25ncy5cIiksXG4gICAgZXRhZzogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIGV0YWcgZm9yIHRoZSBzY2hlZHVsZS4gT3B0aW9uYWxseSwgaXQgY2FuIGJlIHByb3ZpZGVkIHRvIHZlcmlmeSB0aGF0IHRoZSBzY2hlZHVsZSBoYXMgbm90IGJlZW4gbW9kaWZpZWQgZnJvbSBpdHMgbGFzdCByZXRyaWV2YWwuXCIpLFxuICAgIHNjaGVkdWxlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgc2NoZWR1bGUuXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVN1YnNjcmlwdGlvblJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgZGFzaGJvYXJkX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgZGFzaGJvYXJkIHdoaWNoIHRoZSBzdWJzY3JpcHRpb24gYmVsb25ncy5cIiksXG4gICAgZXRhZzogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIGV0YWcgZm9yIHRoZSBzdWJzY3JpcHRpb24uIENhbiBiZSBvcHRpb25hbGx5IHByb3ZpZGVkIHRvIGVuc3VyZSB0aGF0IHRoZSBzdWJzY3JpcHRpb24gaGFzIG5vdCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHJlYWQuXCIpLFxuICAgIHNjaGVkdWxlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgc2NoZWR1bGUgd2hpY2ggdGhlIHN1YnNjcmlwdGlvbiBiZWxvbmdzLlwiKSxcbiAgICBzdWJzY3JpcHRpb25faWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJVVUlEIGlkZW50aWZ5aW5nIHRoZSBzdWJzY3JpcHRpb24uXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdlbmllU3VnZ2VzdGVkUXVlc3Rpb25zQXR0YWNobWVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBxdWVzdGlvbnM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBzdWdnZXN0ZWQgZm9sbG93LXVwIHF1ZXN0aW9uc1wiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5pZUNvbnZlcnNhdGlvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBjb252ZXJzYXRpb25faWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJDb252ZXJzYXRpb24gSURcIiksXG4gICAgY3JlYXRlZF90aW1lc3RhbXA6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRpbWVzdGFtcCB3aGVuIHRoZSBtZXNzYWdlIHdhcyBjcmVhdGVkXCIpLFxuICAgIGlkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiQ29udmVyc2F0aW9uIElELiBMZWdhY3kgaWRlbnRpZmllciwgdXNlIGNvbnZlcnNhdGlvbl9pZCBpbnN0ZWFkXCIpLFxuICAgIGxhc3RfdXBkYXRlZF90aW1lc3RhbXA6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRpbWVzdGFtcCB3aGVuIHRoZSBtZXNzYWdlIHdhcyBsYXN0IHVwZGF0ZWRcIiksXG4gICAgc3BhY2VfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJHZW5pZSBzcGFjZSBJRFwiKSxcbiAgICB0aXRsZTogei5zdHJpbmcoKS5kZXNjcmliZShcIkNvbnZlcnNhdGlvbiB0aXRsZVwiKSxcbiAgICB1c2VyX2lkOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiSUQgb2YgdGhlIHVzZXIgd2hvIGNyZWF0ZWQgdGhlIGNvbnZlcnNhdGlvblwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5pZUNvbnZlcnNhdGlvblN1bW1hcnlTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgY29udmVyc2F0aW9uX2lkOiB6LnN0cmluZygpLFxuICAgIGNyZWF0ZWRfdGltZXN0YW1wOiB6Lm51bWJlcigpLFxuICAgIHRpdGxlOiB6LnN0cmluZygpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdlbmllQ3JlYXRlQ29udmVyc2F0aW9uTWVzc2FnZVJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgY29udGVudDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVzZXIgbWVzc2FnZSBjb250ZW50LlwiKSxcbiAgICBjb252ZXJzYXRpb25faWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb252ZXJzYXRpb24uXCIpLFxuICAgIHNwYWNlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgR2VuaWUgc3BhY2Ugd2hlcmUgdGhlIGNvbnZlcnNhdGlvbiBpcyBzdGFydGVkLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5pZURlbGV0ZUNvbnZlcnNhdGlvbk1lc3NhZ2VSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGNvbnZlcnNhdGlvbl9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnZlcnNhdGlvbi5cIiksXG4gICAgbWVzc2FnZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIG1lc3NhZ2UgdG8gZGVsZXRlLlwiKSxcbiAgICBzcGFjZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIEdlbmllIHNwYWNlIHdoZXJlIHRoZSBtZXNzYWdlIGlzIGxvY2F0ZWQuXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdlbmllRGVsZXRlQ29udmVyc2F0aW9uUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBjb252ZXJzYXRpb25faWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgSUQgb2YgdGhlIGNvbnZlcnNhdGlvbiB0byBkZWxldGUuXCIpLFxuICAgIHNwYWNlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgR2VuaWUgc3BhY2Ugd2hlcmUgdGhlIGNvbnZlcnNhdGlvbiBpcyBsb2NhdGVkLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5pZUV4ZWN1dGVNZXNzYWdlQXR0YWNobWVudFF1ZXJ5UmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBhdHRhY2htZW50X2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiQXR0YWNobWVudCBJRFwiKSxcbiAgICBjb252ZXJzYXRpb25faWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJDb252ZXJzYXRpb24gSURcIiksXG4gICAgbWVzc2FnZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIk1lc3NhZ2UgSURcIiksXG4gICAgc3BhY2VfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJHZW5pZSBzcGFjZSBJRFwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5pZUV4ZWN1dGVNZXNzYWdlUXVlcnlSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGNvbnZlcnNhdGlvbl9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIkNvbnZlcnNhdGlvbiBJRFwiKSxcbiAgICBtZXNzYWdlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiTWVzc2FnZSBJRFwiKSxcbiAgICBzcGFjZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIkdlbmllIHNwYWNlIElEXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdlbmllRmVlZGJhY2tSYXRpbmdTY2hlbWEgPSB6LnVuaW9uKFt6LmxpdGVyYWwoXCJORUdBVElWRVwiKSwgei5saXRlcmFsKFwiTk9ORVwiKSwgei5saXRlcmFsKFwiUE9TSVRJVkVcIildKS5kZXNjcmliZShcIkZlZWRiYWNrIHJhdGluZyBmb3IgR2VuaWUgbWVzc2FnZXNcIik7XG5cbmV4cG9ydCBjb25zdCBnZW5pZUdldENvbnZlcnNhdGlvbk1lc3NhZ2VSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGNvbnZlcnNhdGlvbl9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIHRhcmdldCBjb252ZXJzYXRpb24uXCIpLFxuICAgIG1lc3NhZ2VfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQgbWVzc2FnZSBmcm9tIHRoZSBpZGVudGlmaWVkIGNvbnZlcnNhdGlvbi5cIiksXG4gICAgc3BhY2VfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBHZW5pZSBzcGFjZSB3aGVyZSB0aGUgdGFyZ2V0IGNvbnZlcnNhdGlvbiBpcyBsb2NhdGVkLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5pZUdldE1lc3NhZ2VBdHRhY2htZW50UXVlcnlSZXN1bHRSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGF0dGFjaG1lbnRfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJBdHRhY2htZW50IElEXCIpLFxuICAgIGNvbnZlcnNhdGlvbl9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIkNvbnZlcnNhdGlvbiBJRFwiKSxcbiAgICBtZXNzYWdlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiTWVzc2FnZSBJRFwiKSxcbiAgICBzcGFjZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIkdlbmllIHNwYWNlIElEXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdlbmllR2V0TWVzc2FnZVF1ZXJ5UmVzdWx0UmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBjb252ZXJzYXRpb25faWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJDb252ZXJzYXRpb24gSURcIiksXG4gICAgbWVzc2FnZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIk1lc3NhZ2UgSURcIiksXG4gICAgc3BhY2VfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJHZW5pZSBzcGFjZSBJRFwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5pZUdldE1lc3NhZ2VRdWVyeVJlc3VsdFJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIHN0YXRlbWVudF9yZXNwb25zZTogei51bmtub3duKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlNRTCBTdGF0ZW1lbnQgRXhlY3V0aW9uIHJlc3BvbnNlLiBTZWUgW0dldCBzdGF0dXMsIG1hbmlmZXN0LCBhbmQgcmVzdWx0IGZpcnN0IGNodW5rXSg6bWV0aG9kOnN0YXRlbWVudGV4ZWN1dGlvbi9nZXRzdGF0ZW1lbnQpIGZvciBtb3JlIGRldGFpbHMuXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdlbmllR2V0UXVlcnlSZXN1bHRCeUF0dGFjaG1lbnRSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGF0dGFjaG1lbnRfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJBdHRhY2htZW50IElEXCIpLFxuICAgIGNvbnZlcnNhdGlvbl9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIkNvbnZlcnNhdGlvbiBJRFwiKSxcbiAgICBtZXNzYWdlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiTWVzc2FnZSBJRFwiKSxcbiAgICBzcGFjZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIkdlbmllIHNwYWNlIElEXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdlbmllR2V0U3BhY2VSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIHNwYWNlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgR2VuaWUgc3BhY2VcIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VuaWVMaXN0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGNvbnZlcnNhdGlvbl9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBJRCBvZiB0aGUgY29udmVyc2F0aW9uIHRvIGxpc3QgbWVzc2FnZXMgZnJvbVwiKSxcbiAgICBwYWdlX3NpemU6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIk1heGltdW0gbnVtYmVyIG9mIG1lc3NhZ2VzIHRvIHJldHVybiBwZXIgcGFnZVwiKSxcbiAgICBwYWdlX3Rva2VuOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUb2tlbiB0byBnZXQgdGhlIG5leHQgcGFnZSBvZiByZXN1bHRzXCIpLFxuICAgIHNwYWNlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgR2VuaWUgc3BhY2Ugd2hlcmUgdGhlIGNvbnZlcnNhdGlvbiBpcyBsb2NhdGVkXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdlbmllTGlzdENvbnZlcnNhdGlvbnNSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGluY2x1ZGVfYWxsOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiSW5jbHVkZSBhbGwgY29udmVyc2F0aW9ucyBpbiB0aGUgc3BhY2UgYWNyb3NzIGFsbCB1c2Vycy4gUmVxdWlyZXMgYXQgbGVhc3QgQ0FOIE1BTkFHRSBwZXJtaXNzaW9uIG9uIHRoZSBzcGFjZS5cIiksXG4gICAgcGFnZV9zaXplOiB6Lm51bWJlcigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJNYXhpbXVtIG51bWJlciBvZiBjb252ZXJzYXRpb25zIHRvIHJldHVybiBwZXIgcGFnZVwiKSxcbiAgICBwYWdlX3Rva2VuOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUb2tlbiB0byBnZXQgdGhlIG5leHQgcGFnZSBvZiByZXN1bHRzXCIpLFxuICAgIHNwYWNlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIElEIG9mIHRoZSBHZW5pZSBzcGFjZSB0byByZXRyaWV2ZSBjb252ZXJzYXRpb25zIGZyb20uXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdlbmllTGlzdENvbnZlcnNhdGlvbnNSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBjb252ZXJzYXRpb25zOiB6LmFycmF5KGdlbmllQ29udmVyc2F0aW9uU3VtbWFyeVNjaGVtYSkub3B0aW9uYWwoKS5kZXNjcmliZShcIkxpc3Qgb2YgY29udmVyc2F0aW9ucyBpbiB0aGUgR2VuaWUgc3BhY2VcIiksXG4gICAgbmV4dF9wYWdlX3Rva2VuOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUb2tlbiB0byBnZXQgdGhlIG5leHQgcGFnZSBvZiByZXN1bHRzXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdlbmllTGlzdFNwYWNlc1JlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgcGFnZV9zaXplOiB6Lm51bWJlcigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJNYXhpbXVtIG51bWJlciBvZiBzcGFjZXMgdG8gcmV0dXJuIHBlciBwYWdlXCIpLFxuICAgIHBhZ2VfdG9rZW46IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlBhZ2luYXRpb24gdG9rZW4gZm9yIGdldHRpbmcgdGhlIG5leHQgcGFnZSBvZiByZXN1bHRzXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdlbmllU3BhY2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkRlc2NyaXB0aW9uIG9mIHRoZSBHZW5pZSBTcGFjZVwiKSxcbiAgICBzcGFjZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIkdlbmllIHNwYWNlIElEXCIpLFxuICAgIHRpdGxlOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGl0bGUgb2YgdGhlIEdlbmllIFNwYWNlXCIpLFxuICAgIHdhcmVob3VzZV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiV2FyZWhvdXNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgR2VuaWUgU3BhY2VcIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VuaWVGZWVkYmFja1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgICByYXRpbmc6IGdlbmllRmVlZGJhY2tSYXRpbmdTY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBmZWVkYmFjayByYXRpbmdcIilcbn0pO1xuXG5leHBvcnQgY29uc3QgcmVzdWx0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGlzX3RydW5jYXRlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIklmIHJlc3VsdCBpcyB0cnVuY2F0ZWRcIiksXG4gICAgcm93X2NvdW50OiB6Lm51bWJlcigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJSb3cgY291bnQgb2YgdGhlIHJlc3VsdFwiKSxcbiAgICBzdGF0ZW1lbnRfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlN0YXRlbWVudCBFeGVjdXRpb24gQVBJIHN0YXRlbWVudCBpZC4gVXNlIFtHZXQgc3RhdHVzLCBtYW5pZmVzdCwgYW5kIHJlc3VsdCBmaXJzdCBjaHVua10oOm1ldGhvZDpzdGF0ZW1lbnRleGVjdXRpb24vZ2V0c3RhdGVtZW50KSB0byBnZXQgdGhlIGZ1bGwgcmVzdWx0IGRhdGEuXCIpLFxuICAgIHN0YXRlbWVudF9pZF9zaWduYXR1cmU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkpXVCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzdGF0ZW1lbnQgY29udGFpbmVkIGluIHRoaXMgcmVzdWx0XCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IG1lc3NhZ2VTdGF0dXNTY2hlbWEgPSB6LnVuaW9uKFt6LmxpdGVyYWwoXCJBU0tJTkdfQUlcIiksIHoubGl0ZXJhbChcIkNBTkNFTExFRFwiKSwgei5saXRlcmFsKFwiQ09NUExFVEVEXCIpLCB6LmxpdGVyYWwoXCJFWEVDVVRJTkdfUVVFUllcIiksIHoubGl0ZXJhbChcIkZBSUxFRFwiKSwgei5saXRlcmFsKFwiRkVUQ0hJTkdfTUVUQURBVEFcIiksIHoubGl0ZXJhbChcIkZJTFRFUklOR19DT05URVhUXCIpLCB6LmxpdGVyYWwoXCJQRU5ESU5HX1dBUkVIT1VTRVwiKSwgei5saXRlcmFsKFwiUVVFUllfUkVTVUxUX0VYUElSRURcIiksIHoubGl0ZXJhbChcIlNVQk1JVFRFRFwiKV0pLmRlc2NyaWJlKFwiTWVzc2FnZVN0YXR1cy4gVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmU6ICogYEZFVENISU5HX01FVEFEQVRBYDogRmV0Y2hpbmcgbWV0YWRhdGEgZnJvbSB0aGUgZGF0YSBzb3VyY2VzLiAqIGBGSUxURVJJTkdfQ09OVEVYVGA6IFJ1bm5pbmcgc21hcnQgY29udGV4dCBzdGVwIHRvIGRldGVybWluZSByZWxldmFudCBjb250ZXh0LiAqIGBBU0tJTkdfQUlgOiBXYWl0aW5nIGZvciB0aGUgTExNIHRvIHJlc3BvbmQgdG8gdGhlIHVzZXIncyBxdWVzdGlvbi4gKiBgUEVORElOR19XQVJFSE9VU0VgOiBXYWl0aW5nIGZvciB3YXJlaG91c2UgYmVmb3JlIHRoZSBTUUwgcXVlcnkgY2FuIHN0YXJ0IGV4ZWN1dGluZy4gKiBgRVhFQ1VUSU5HX1FVRVJZYDogRXhlY3V0aW5nIGEgZ2VuZXJhdGVkIFNRTCBxdWVyeS4gR2V0IHRoZSBTUUwgcXVlcnkgcmVzdWx0IGJ5IGNhbGxpbmcgW2dldE1lc3NhZ2VBdHRhY2htZW50UXVlcnlSZXN1bHRdKDptZXRob2Q6Z2VuaWUvZ2V0TWVzc2FnZUF0dGFjaG1lbnRRdWVyeVJlc3VsdCkgQVBJLiAqIGBGQUlMRURgOiBUaGUgcmVzcG9uc2UgZ2VuZXJhdGlvbiBvciBxdWVyeSBleGVjdXRpb24gZmFpbGVkLiBTZWUgYGVycm9yYCBmaWVsZC4gKiBgQ09NUExFVEVEYDogTWVzc2FnZSBwcm9jZXNzaW5nIGlzIGNvbXBsZXRlZC4gUmVzdWx0cyBhcmUgaW4gdGhlIGBhdHRhY2htZW50c2AgZmllbGQuIEdldCB0aGUgU1FMIHF1ZXJ5IHJlc3VsdCBieSBjYWxsaW5nIFtnZXRNZXNzYWdlQXR0YWNobWVudFF1ZXJ5UmVzdWx0XSg6bWV0aG9kOmdlbmllL2dldE1lc3NhZ2VBdHRhY2htZW50UXVlcnlSZXN1bHQpIEFQSS4gKiBgU1VCTUlUVEVEYDogTWVzc2FnZSBoYXMgYmVlbiBzdWJtaXR0ZWQuICogYFFVRVJZX1JFU1VMVF9FWFBJUkVEYDogU1FMIHJlc3VsdCBpcyBub3QgYXZhaWxhYmxlIGFueW1vcmUuIFRoZSB1c2VyIG5lZWRzIHRvIHJlcnVuIHRoZSBxdWVyeS4gUmVydW4gdGhlIFNRTCBxdWVyeSByZXN1bHQgYnkgY2FsbGluZyBbZXhlY3V0ZU1lc3NhZ2VBdHRhY2htZW50UXVlcnldKDptZXRob2Q6Z2VuaWUvZXhlY3V0ZU1lc3NhZ2VBdHRhY2htZW50UXVlcnkpIEFQSS4gKiBgQ0FOQ0VMTEVEYDogTWVzc2FnZSBoYXMgYmVlbiBjYW5jZWxsZWQuXCIpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlBdHRhY2htZW50UGFyYW1ldGVyU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGtleXdvcmQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBzcWxfdHlwZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHZhbHVlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VuaWVSZXN1bHRNZXRhZGF0YVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBpc190cnVuY2F0ZWQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJJbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVzdWx0IHNldCBpcyB0cnVuY2F0ZWQuXCIpLFxuICAgIHJvd19jb3VudDogei5udW1iZXIoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIG51bWJlciBvZiByb3dzIGluIHRoZSByZXN1bHQgc2V0LlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5pZVNlbmRNZXNzYWdlRmVlZGJhY2tSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGNvbnZlcnNhdGlvbl9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnZlcnNhdGlvbi5cIiksXG4gICAgbWVzc2FnZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIG1lc3NhZ2UgdG8gcHJvdmlkZSBmZWVkYmFjayBmb3IuXCIpLFxuICAgIHJhdGluZzogZ2VuaWVGZWVkYmFja1JhdGluZ1NjaGVtYS5kZXNjcmliZShcIlRoZSByYXRpbmcgKFBPU0lUSVZFLCBORUdBVElWRSwgb3IgTk9ORSkuXCIpLFxuICAgIHNwYWNlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgR2VuaWUgc3BhY2Ugd2hlcmUgdGhlIG1lc3NhZ2UgaXMgbG9jYXRlZC5cIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VuaWVTdGFydENvbnZlcnNhdGlvbk1lc3NhZ2VSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGNvbnRlbnQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgdGV4dCBvZiB0aGUgbWVzc2FnZSB0aGF0IHN0YXJ0cyB0aGUgY29udmVyc2F0aW9uLlwiKSxcbiAgICBzcGFjZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIEdlbmllIHNwYWNlIHdoZXJlIHlvdSB3YW50IHRvIHN0YXJ0IGEgY29udmVyc2F0aW9uLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5pZVRyYXNoU3BhY2VSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIHNwYWNlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgR2VuaWUgc3BhY2UgdG8gYmUgc2VudCB0byB0aGUgdHJhc2guXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdldERhc2hib2FyZFJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgZGFzaGJvYXJkX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgZGFzaGJvYXJkLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZXRQdWJsaXNoZWREYXNoYm9hcmRSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGRhc2hib2FyZF9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIHB1Ymxpc2hlZCBkYXNoYm9hcmQuXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdldFB1Ymxpc2hlZERhc2hib2FyZFRva2VuSW5mb1JlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgZGFzaGJvYXJkX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgcHVibGlzaGVkIGRhc2hib2FyZC5cIiksXG4gICAgZXh0ZXJuYWxfdmFsdWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlByb3ZpZGVkIGV4dGVybmFsIHZhbHVlIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBjdXN0b20gY2xhaW0uXCIpLFxuICAgIGV4dGVybmFsX3ZpZXdlcl9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiUHJvdmlkZWQgZXh0ZXJuYWwgdmlld2VyIGlkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBjdXN0b20gY2xhaW0uXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGF1dGhvcml6YXRpb25EZXRhaWxzU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGdyYW50X3J1bGVzOiB6LmFycmF5KGF1dGhvcml6YXRpb25EZXRhaWxzR3JhbnRSdWxlU2NoZW1hKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiUmVwcmVzZW50cyBkb3duc2NvcGVkIHBlcm1pc3Npb24gcnVsZXMgd2l0aCBzcGVjaWZpYyBhY2Nlc3MgcmlnaHRzLiBUaGlzIGZpZWxkIGlzIHNwZWNpZmljIHRvIGB3b3Jrc3BhY2VfcnVsZV9zZXRgIGNvbnN0cmFpbnQuXCIpLFxuICAgIHJlc291cmNlX2xlZ2FjeV9hY2xfcGF0aDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIGFjbCBwYXRoIG9mIHRoZSB0cmVlIHN0b3JlIHJlc291cmNlIHJlc291cmNlLlwiKSxcbiAgICByZXNvdXJjZV9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgcmVzb3VyY2UgbmFtZSB0byB3aGljaCB0aGUgYXV0aG9yaXphdGlvbiBydWxlIGFwcGxpZXMuIFRoaXMgZmllbGQgaXMgc3BlY2lmaWMgdG8gYHdvcmtzcGFjZV9ydWxlX3NldGAgY29uc3RyYWludC4gRm9ybWF0OiBgd29ya3NwYWNlcy97d29ya3NwYWNlX2lkfS9kYXNoYm9hcmRzL3tkYXNoYm9hcmRfaWR9YFwiKSxcbiAgICB0eXBlOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgdHlwZSBvZiBhdXRob3JpemF0aW9uIGRvd25zY29waW5nIHBvbGljeS4gRXg6IGB3b3Jrc3BhY2VfcnVsZV9zZXRgIGRlZmluZXMgYWNjZXNzIHJ1bGVzIGZvciBhIHNwZWNpZmljIHdvcmtzcGFjZSByZXNvdXJjZVwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZXRTY2hlZHVsZVJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgZGFzaGJvYXJkX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgZGFzaGJvYXJkIHRvIHdoaWNoIHRoZSBzY2hlZHVsZSBiZWxvbmdzLlwiKSxcbiAgICBzY2hlZHVsZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIHNjaGVkdWxlLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZXRTdWJzY3JpcHRpb25SZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGRhc2hib2FyZF9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIGRhc2hib2FyZCB3aGljaCB0aGUgc3Vic2NyaXB0aW9uIGJlbG9uZ3MuXCIpLFxuICAgIHNjaGVkdWxlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgc2NoZWR1bGUgd2hpY2ggdGhlIHN1YnNjcmlwdGlvbiBiZWxvbmdzLlwiKSxcbiAgICBzdWJzY3JpcHRpb25faWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJVVUlEIGlkZW50aWZ5aW5nIHRoZSBzdWJzY3JpcHRpb24uXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGxpc3REYXNoYm9hcmRzUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBwYWdlX3NpemU6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBudW1iZXIgb2YgZGFzaGJvYXJkcyB0byByZXR1cm4gcGVyIHBhZ2UuXCIpLFxuICAgIHBhZ2VfdG9rZW46IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkEgcGFnZSB0b2tlbiwgcmVjZWl2ZWQgZnJvbSBhIHByZXZpb3VzIGBMaXN0RGFzaGJvYXJkc2AgY2FsbC4gVGhpcyB0b2tlbiBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgc3Vic2VxdWVudCBwYWdlLlwiKSxcbiAgICBzaG93X3RyYXNoZWQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgZmxhZyB0byBpbmNsdWRlIGRhc2hib2FyZHMgbG9jYXRlZCBpbiB0aGUgdHJhc2guIElmIHVuc3BlY2lmaWVkLCBvbmx5IGFjdGl2ZSBkYXNoYm9hcmRzIHdpbGwgYmUgcmV0dXJuZWQuXCIpLFxuICAgIHZpZXc6IGRhc2hib2FyZFZpZXdTY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShcImBEQVNIQk9BUkRfVklFV19CQVNJQ2Bvbmx5IGluY2x1ZGVzIHN1bW1hcnkgbWV0YWRhdGEgZnJvbSB0aGUgZGFzaGJvYXJkLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBkYXNoYm9hcmRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgY3JlYXRlX3RpbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSB0aW1lc3RhbXAgb2Ygd2hlbiB0aGUgZGFzaGJvYXJkIHdhcyBjcmVhdGVkLlwiKSxcbiAgICBkYXNoYm9hcmRfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIGRhc2hib2FyZC5cIiksXG4gICAgZGlzcGxheV9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBkYXNoYm9hcmQuXCIpLFxuICAgIGV0YWc6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBldGFnIGZvciB0aGUgZGFzaGJvYXJkLiBDYW4gYmUgb3B0aW9uYWxseSBwcm92aWRlZCBvbiB1cGRhdGVzIHRvIGVuc3VyZSB0aGF0IHRoZSBkYXNoYm9hcmQgaGFzIG5vdCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHJlYWQuIFRoaXMgZmllbGQgaXMgZXhjbHVkZWQgaW4gTGlzdCBEYXNoYm9hcmRzIHJlc3BvbnNlcy5cIiksXG4gICAgbGlmZWN5Y2xlX3N0YXRlOiBsaWZlY3ljbGVTdGF0ZVNjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIHN0YXRlIG9mIHRoZSBkYXNoYm9hcmQgcmVzb3VyY2UuIFVzZWQgZm9yIHRyYWNraW5nIHRyYXNoZWQgc3RhdHVzLlwiKSxcbiAgICBwYXJlbnRfcGF0aDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIHdvcmtzcGFjZSBwYXRoIG9mIHRoZSBmb2xkZXIgY29udGFpbmluZyB0aGUgZGFzaGJvYXJkLiBJbmNsdWRlcyBsZWFkaW5nIHNsYXNoIGFuZCBubyB0cmFpbGluZyBzbGFzaC4gVGhpcyBmaWVsZCBpcyBleGNsdWRlZCBpbiBMaXN0IERhc2hib2FyZHMgcmVzcG9uc2VzLlwiKSxcbiAgICBwYXRoOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgd29ya3NwYWNlIHBhdGggb2YgdGhlIGRhc2hib2FyZCBhc3NldCwgaW5jbHVkaW5nIHRoZSBmaWxlIG5hbWUuIEV4cG9ydGVkIGRhc2hib2FyZHMgYWx3YXlzIGhhdmUgdGhlIGZpbGUgZXh0ZW5zaW9uIGAubHZkYXNoLmpzb25gLiBUaGlzIGZpZWxkIGlzIGV4Y2x1ZGVkIGluIExpc3QgRGFzaGJvYXJkcyByZXNwb25zZXMuXCIpLFxuICAgIHNlcmlhbGl6ZWRfZGFzaGJvYXJkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgY29udGVudHMgb2YgdGhlIGRhc2hib2FyZCBpbiBzZXJpYWxpemVkIHN0cmluZyBmb3JtLiBUaGlzIGZpZWxkIGlzIGV4Y2x1ZGVkIGluIExpc3QgRGFzaGJvYXJkcyByZXNwb25zZXMuIFVzZSB0aGUgW2dldCBkYXNoYm9hcmQgQVBJXSB0byByZXRyaWV2ZSBhbiBleGFtcGxlIHJlc3BvbnNlLCB3aGljaCBpbmNsdWRlcyB0aGUgYHNlcmlhbGl6ZWRfZGFzaGJvYXJkYCBmaWVsZC4gVGhpcyBmaWVsZCBwcm92aWRlcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBKU09OIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGRhc2hib2FyZCdzIGxheW91dCBhbmQgY29tcG9uZW50cy4gW2dldCBkYXNoYm9hcmQgQVBJXTogaHR0cHM6Ly9kb2NzLmRhdGFicmlja3MuY29tL2FwaS93b3Jrc3BhY2UvbGFrZXZpZXcvZ2V0XCIpLFxuICAgIHVwZGF0ZV90aW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgdGltZXN0YW1wIG9mIHdoZW4gdGhlIGRhc2hib2FyZCB3YXMgbGFzdCB1cGRhdGVkIGJ5IHRoZSB1c2VyLiBUaGlzIGZpZWxkIGlzIGV4Y2x1ZGVkIGluIExpc3QgRGFzaGJvYXJkcyByZXNwb25zZXMuXCIpLFxuICAgIHdhcmVob3VzZV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIHdhcmVob3VzZSBJRCB1c2VkIHRvIHJ1biB0aGUgZGFzaGJvYXJkLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBsaXN0U2NoZWR1bGVzUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBkYXNoYm9hcmRfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQgdG8gd2hpY2ggdGhlIHNjaGVkdWxlcyBiZWxvbmdzLlwiKSxcbiAgICBwYWdlX3NpemU6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBudW1iZXIgb2Ygc2NoZWR1bGVzIHRvIHJldHVybiBwZXIgcGFnZS5cIiksXG4gICAgcGFnZV90b2tlbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiQSBwYWdlIHRva2VuLCByZWNlaXZlZCBmcm9tIGEgcHJldmlvdXMgYExpc3RTY2hlZHVsZXNgIGNhbGwuIFVzZSB0aGlzIHRvIHJldHJpZXZlIHRoZSBzdWJzZXF1ZW50IHBhZ2UuXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGxpc3RTdWJzY3JpcHRpb25zUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBkYXNoYm9hcmRfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQgd2hpY2ggdGhlIHN1YnNjcmlwdGlvbnMgYmVsb25ncy5cIiksXG4gICAgcGFnZV9zaXplOiB6Lm51bWJlcigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgbnVtYmVyIG9mIHN1YnNjcmlwdGlvbnMgdG8gcmV0dXJuIHBlciBwYWdlLlwiKSxcbiAgICBwYWdlX3Rva2VuOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJBIHBhZ2UgdG9rZW4sIHJlY2VpdmVkIGZyb20gYSBwcmV2aW91cyBgTGlzdFN1YnNjcmlwdGlvbnNgIGNhbGwuIFVzZSB0aGlzIHRvIHJldHJpZXZlIHRoZSBzdWJzZXF1ZW50IHBhZ2UuXCIpLFxuICAgIHNjaGVkdWxlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgc2NoZWR1bGUgd2hpY2ggdGhlIHN1YnNjcmlwdGlvbnMgYmVsb25ncy5cIilcbn0pO1xuXG5leHBvcnQgY29uc3QgbWVzc2FnZUVycm9yVHlwZVNjaGVtYSA9IHoudW5pb24oW3oubGl0ZXJhbChcIkJMT0NLX01VTFRJUExFX0VYRUNVVElPTlNfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJDSEFUX0NPTVBMRVRJT05fQ0xJRU5UX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiQ0hBVF9DT01QTEVUSU9OX0NMSUVOVF9USU1FT1VUX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiQ0hBVF9DT01QTEVUSU9OX05FVFdPUktfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJDT05URU5UX0ZJTFRFUl9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIkNPTlRFWFRfRVhDRUVERURfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJDT1VMRF9OT1RfR0VUX01PREVMX0RFUExPWU1FTlRTX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiQ09VTERfTk9UX0dFVF9VQ19TQ0hFTUFfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJERVBMT1lNRU5UX05PVF9GT1VORF9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIkRFU0NSSUJFX1FVRVJZX0lOVkFMSURfU1FMX0VSUk9SXCIpLCB6LmxpdGVyYWwoXCJERVNDUklCRV9RVUVSWV9USU1FT1VUXCIpLCB6LmxpdGVyYWwoXCJERVNDUklCRV9RVUVSWV9VTkVYUEVDVEVEX0ZBSUxVUkVcIiksIHoubGl0ZXJhbChcIkVYQ0VFREVEX01BWF9UT0tFTl9MRU5HVEhfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJGVU5DVElPTlNfTk9UX0FWQUlMQUJMRV9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIkZVTkNUSU9OX0FSR1VNRU5UU19JTlZBTElEX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiRlVOQ1RJT05fQVJHVU1FTlRTX0lOVkFMSURfSlNPTl9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIkZVTkNUSU9OX0FSR1VNRU5UU19JTlZBTElEX1RZUEVfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJGVU5DVElPTl9DQUxMX01JU1NJTkdfUEFSQU1FVEVSX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiR0VORVJBVEVEX1NRTF9RVUVSWV9UT09fTE9OR19FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIkdFTkVSSUNfQ0hBVF9DT01QTEVUSU9OX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiR0VORVJJQ19DSEFUX0NPTVBMRVRJT05fU0VSVklDRV9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIkdFTkVSSUNfU1FMX0VYRUNfQVBJX0NBTExfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJJTExFR0FMX1BBUkFNRVRFUl9ERUZJTklUSU9OX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiSU5URVJOQUxfQ0FUQUxPR19BU1NFVF9DUkVBVElPTl9GQUlMRURfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJJTlRFUk5BTF9DQVRBTE9HX0FTU0VUX0NSRUFUSU9OX09OR09JTkdfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJJTlRFUk5BTF9DQVRBTE9HX0FTU0VUX0NSRUFUSU9OX1VOU1VQUE9SVEVEX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiSU5URVJOQUxfQ0FUQUxPR19NSVNTSU5HX1VDX1BBVEhfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJJTlRFUk5BTF9DQVRBTE9HX1BBVEhfT1ZFUkxBUF9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIklOVkFMSURfQ0VSVElGSUVEX0FOU1dFUl9GVU5DVElPTl9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIklOVkFMSURfQ0VSVElGSUVEX0FOU1dFUl9JREVOVElGSUVSX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiSU5WQUxJRF9DSEFUX0NPTVBMRVRJT05fQVJHVU1FTlRTX0pTT05fRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJJTlZBTElEX0NIQVRfQ09NUExFVElPTl9KU09OX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiSU5WQUxJRF9DT01QTEVUSU9OX1JFUVVFU1RfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJJTlZBTElEX0ZVTkNUSU9OX0NBTExfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJJTlZBTElEX1NRTF9NVUxUSVBMRV9EQVRBU0VUX1JFRkVSRU5DRVNfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJJTlZBTElEX1NRTF9NVUxUSVBMRV9TVEFURU1FTlRTX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiSU5WQUxJRF9TUUxfVU5LTk9XTl9UQUJMRV9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIklOVkFMSURfVEFCTEVfSURFTlRJRklFUl9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIkxPQ0FMX0NPTlRFWFRfRVhDRUVERURfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJNRVNTQUdFX0FUVEFDSE1FTlRfVE9PX0xPTkdfRVJST1JcIiksIHoubGl0ZXJhbChcIk1FU1NBR0VfQ0FOQ0VMTEVEX1dISUxFX0VYRUNVVElOR19FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIk1FU1NBR0VfREVMRVRFRF9XSElMRV9FWEVDVVRJTkdfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJNRVNTQUdFX1VQREFURURfV0hJTEVfRVhFQ1VUSU5HX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiTUlTU0lOR19TUUxfUVVFUllfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJOT19ERVBMT1lNRU5UU19BVkFJTEFCTEVfVE9fV09SS1NQQUNFXCIpLCB6LmxpdGVyYWwoXCJOT19RVUVSWV9UT19WSVNVQUxJWkVfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJOT19UQUJMRVNfVE9fUVVFUllfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJSQVRFX0xJTUlUX0VYQ0VFREVEX0dFTkVSSUNfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJSQVRFX0xJTUlUX0VYQ0VFREVEX1NQRUNJRklFRF9XQUlUX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiUkVQTFlfUFJPQ0VTU19USU1FT1VUX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiUkVUUllBQkxFX1BST0NFU1NJTkdfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJTUUxfRVhFQ1VUSU9OX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiU1RPUF9QUk9DRVNTX0RVRV9UT19BVVRPX1JFR0VORVJBVEVcIiksIHoubGl0ZXJhbChcIlRBQkxFU19NSVNTSU5HX0VYQ0VQVElPTlwiKSwgei5saXRlcmFsKFwiVE9PX01BTllfQ0VSVElGSUVEX0FOU1dFUlNfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJUT09fTUFOWV9UQUJMRVNfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJVTkVYUEVDVEVEX1JFUExZX1BST0NFU1NfRVhDRVBUSU9OXCIpLCB6LmxpdGVyYWwoXCJVTktOT1dOX0FJX01PREVMXCIpLCB6LmxpdGVyYWwoXCJVTlNVUFBPUlRFRF9DT05WRVJTQVRJT05fVFlQRV9FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIldBUkVIT1VTRV9BQ0NFU1NfTUlTU0lOR19FWENFUFRJT05cIiksIHoubGl0ZXJhbChcIldBUkVIT1VTRV9OT1RfRk9VTkRfRVhDRVBUSU9OXCIpXSk7XG5cbmV4cG9ydCBjb25zdCBtaWdyYXRlRGFzaGJvYXJkUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBkaXNwbGF5X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkRpc3BsYXkgbmFtZSBmb3IgdGhlIG5ldyBMYWtldmlldyBkYXNoYm9hcmQuXCIpLFxuICAgIHBhcmVudF9wYXRoOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgd29ya3NwYWNlIHBhdGggb2YgdGhlIGZvbGRlciB0byBjb250YWluIHRoZSBtaWdyYXRlZCBMYWtldmlldyBkYXNoYm9hcmQuXCIpLFxuICAgIHNvdXJjZV9kYXNoYm9hcmRfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJVVUlEIG9mIHRoZSBkYXNoYm9hcmQgdG8gYmUgbWlncmF0ZWQuXCIpLFxuICAgIHVwZGF0ZV9wYXJhbWV0ZXJfc3ludGF4OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiRmxhZyB0byBpbmRpY2F0ZSBpZiBtdXN0YWNoZSBwYXJhbWV0ZXIgc3ludGF4ICh7eyBwYXJhbSB9fSkgc2hvdWxkIGJlIGF1dG8tdXBkYXRlZCB0byBuYW1lZCBzeW50YXggKDpwYXJhbSkgd2hlbiBjb252ZXJ0aW5nIGRhdGFzZXRzIGluIHRoZSBkYXNoYm9hcmQuXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IHB1Ymxpc2hSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGRhc2hib2FyZF9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIGRhc2hib2FyZCB0byBiZSBwdWJsaXNoZWQuXCIpLFxuICAgIGVtYmVkX2NyZWRlbnRpYWxzOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgcHVibGlzaGVyJ3MgY3JlZGVudGlhbHMgc2hvdWxkIGJlIGVtYmVkZGVkIGluIHRoZSBwdWJsaXNoZWQgZGFzaGJvYXJkLiBUaGVzZSBlbWJlZGRlZCBjcmVkZW50aWFscyB3aWxsIGJlIHVzZWQgdG8gZXhlY3V0ZSB0aGUgcHVibGlzaGVkIGRhc2hib2FyZCdzIHF1ZXJpZXMuXCIpLFxuICAgIHdhcmVob3VzZV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIElEIG9mIHRoZSB3YXJlaG91c2UgdGhhdCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgd2FyZWhvdXNlIHdoaWNoIHdhcyBzZXQgaW4gdGhlIGRyYWZ0LlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBwdWJsaXNoZWREYXNoYm9hcmRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgZGlzcGxheV9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBwdWJsaXNoZWQgZGFzaGJvYXJkLlwiKSxcbiAgICBlbWJlZF9jcmVkZW50aWFsczogei5ib29sZWFuKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkluZGljYXRlcyB3aGV0aGVyIGNyZWRlbnRpYWxzIGFyZSBlbWJlZGRlZCBpbiB0aGUgcHVibGlzaGVkIGRhc2hib2FyZC5cIiksXG4gICAgcmV2aXNpb25fY3JlYXRlX3RpbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSB0aW1lc3RhbXAgb2Ygd2hlbiB0aGUgcHVibGlzaGVkIGRhc2hib2FyZCB3YXMgbGFzdCByZXZpc2VkLlwiKSxcbiAgICB3YXJlaG91c2VfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSB3YXJlaG91c2UgSUQgdXNlZCB0byBydW4gdGhlIHB1Ymxpc2hlZCBkYXNoYm9hcmQuXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IHNjaGVkdWxlUGF1c2VTdGF0dXNTY2hlbWEgPSB6LnVuaW9uKFt6LmxpdGVyYWwoXCJQQVVTRURcIiksIHoubGl0ZXJhbChcIlVOUEFVU0VEXCIpXSk7XG5cbmV4cG9ydCBjb25zdCBzdWJzY3JpcHRpb25TdWJzY3JpYmVyRGVzdGluYXRpb25TY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgZGVzdGluYXRpb25faWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgY2Fub25pY2FsIGlkZW50aWZpZXIgb2YgdGhlIGRlc3RpbmF0aW9uIHRvIHJlY2VpdmUgZW1haWwgbm90aWZpY2F0aW9uLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBzdWJzY3JpcHRpb25TdWJzY3JpYmVyVXNlclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICB1c2VyX2lkOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVXNlcklkIG9mIHRoZSBzdWJzY3JpYmVyLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBzdWJzY3JpYmVyU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGRlc3RpbmF0aW9uX3N1YnNjcmliZXI6IHN1YnNjcmlwdGlvblN1YnNjcmliZXJEZXN0aW5hdGlvblNjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIGRlc3RpbmF0aW9uIHRvIHJlY2VpdmUgdGhlIHN1YnNjcmlwdGlvbiBlbWFpbC4gVGhpcyBwYXJhbWV0ZXIgaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYHVzZXJfc3Vic2NyaWJlcmAuXCIpLFxuICAgIHVzZXJfc3Vic2NyaWJlcjogc3Vic2NyaXB0aW9uU3Vic2NyaWJlclVzZXJTY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSB1c2VyIHRvIHJlY2VpdmUgdGhlIHN1YnNjcmlwdGlvbiBlbWFpbC4gVGhpcyBwYXJhbWV0ZXIgaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYGRlc3RpbmF0aW9uX3N1YnNjcmliZXJgLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCB0ZXh0QXR0YWNobWVudFB1cnBvc2VTY2hlbWEgPSB6LmxpdGVyYWwoXCJGT0xMT1dfVVBfUVVFU1RJT05cIikuZGVzY3JpYmUoXCJQdXJwb3NlL2ludGVudCBvZiBhIHRleHQgYXR0YWNobWVudFwiKTtcblxuZXhwb3J0IGNvbnN0IHRyYXNoRGFzaGJvYXJkUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBkYXNoYm9hcmRfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQuXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IHVucHVibGlzaERhc2hib2FyZFJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgZGFzaGJvYXJkX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgcHVibGlzaGVkIGRhc2hib2FyZC5cIilcbn0pO1xuXG5leHBvcnQgY29uc3QgdXBkYXRlRGFzaGJvYXJkUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBkYXNoYm9hcmQ6IGRhc2hib2FyZFNjaGVtYSxcbiAgICBkYXNoYm9hcmRfaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQuXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IHNjaGVkdWxlU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGNyZWF0ZV90aW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJBIHRpbWVzdGFtcCBpbmRpY2F0aW5nIHdoZW4gdGhlIHNjaGVkdWxlIHdhcyBjcmVhdGVkLlwiKSxcbiAgICBjcm9uX3NjaGVkdWxlOiBjcm9uU2NoZWR1bGVTY2hlbWEuZGVzY3JpYmUoXCJUaGUgY3JvbiBleHByZXNzaW9uIGRlc2NyaWJpbmcgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgcGVyaW9kaWMgcmVmcmVzaCBmb3IgdGhpcyBzY2hlZHVsZS5cIiksXG4gICAgZGFzaGJvYXJkX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQgdG8gd2hpY2ggdGhlIHNjaGVkdWxlIGJlbG9uZ3MuXCIpLFxuICAgIGRpc3BsYXlfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIGRpc3BsYXkgbmFtZSBmb3Igc2NoZWR1bGUuXCIpLFxuICAgIGV0YWc6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBldGFnIGZvciB0aGUgc2NoZWR1bGUuIE11c3QgYmUgbGVmdCBlbXB0eSBvbiBjcmVhdGUsIG11c3QgYmUgcHJvdmlkZWQgb24gdXBkYXRlcyB0byBlbnN1cmUgdGhhdCB0aGUgc2NoZWR1bGUgaGFzIG5vdCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHJlYWQsIGFuZCBjYW4gYmUgb3B0aW9uYWxseSBwcm92aWRlZCBvbiBkZWxldGUuXCIpLFxuICAgIHBhdXNlX3N0YXR1czogc2NoZWR1bGVQYXVzZVN0YXR1c1NjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIHN0YXR1cyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIHNjaGVkdWxlIGlzIHBhdXNlZCBvciBub3QuXCIpLFxuICAgIHNjaGVkdWxlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJVVUlEIGlkZW50aWZ5aW5nIHRoZSBzY2hlZHVsZS5cIiksXG4gICAgdXBkYXRlX3RpbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkEgdGltZXN0YW1wIGluZGljYXRpbmcgd2hlbiB0aGUgc2NoZWR1bGUgd2FzIGxhc3QgdXBkYXRlZC5cIiksXG4gICAgd2FyZWhvdXNlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgd2FyZWhvdXNlIGlkIHRvIHJ1biB0aGUgZGFzaGJvYXJkIHdpdGggZm9yIHRoZSBzY2hlZHVsZS5cIilcbn0pO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRGFzaGJvYXJkUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBkYXNoYm9hcmQ6IGRhc2hib2FyZFNjaGVtYVxufSk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTY2hlZHVsZVJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgZGFzaGJvYXJkX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgZGFzaGJvYXJkIHRvIHdoaWNoIHRoZSBzY2hlZHVsZSBiZWxvbmdzLlwiKSxcbiAgICBzY2hlZHVsZTogc2NoZWR1bGVTY2hlbWEuZGVzY3JpYmUoXCJUaGUgc2NoZWR1bGUgdG8gY3JlYXRlLiBBIGRhc2hib2FyZCBpcyBsaW1pdGVkIHRvIDEwIHNjaGVkdWxlcy5cIilcbn0pO1xuXG5leHBvcnQgY29uc3Qgc3Vic2NyaXB0aW9uU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGNyZWF0ZV90aW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJBIHRpbWVzdGFtcCBpbmRpY2F0aW5nIHdoZW4gdGhlIHN1YnNjcmlwdGlvbiB3YXMgY3JlYXRlZC5cIiksXG4gICAgY3JlYXRlZF9ieV91c2VyX2lkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJVc2VySWQgb2YgdGhlIHVzZXIgd2hvIGFkZHMgc3Vic2NyaWJlcnMgKHVzZXJzIG9yIG5vdGlmaWNhdGlvbiBkZXN0aW5hdGlvbnMpIHRvIHRoZSBkYXNoYm9hcmQncyBzY2hlZHVsZS5cIiksXG4gICAgZGFzaGJvYXJkX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJVVUlEIGlkZW50aWZ5aW5nIHRoZSBkYXNoYm9hcmQgdG8gd2hpY2ggdGhlIHN1YnNjcmlwdGlvbiBiZWxvbmdzLlwiKSxcbiAgICBldGFnOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgZXRhZyBmb3IgdGhlIHN1YnNjcmlwdGlvbi4gTXVzdCBiZSBsZWZ0IGVtcHR5IG9uIGNyZWF0ZSwgY2FuIGJlIG9wdGlvbmFsbHkgcHJvdmlkZWQgb24gZGVsZXRlIHRvIGVuc3VyZSB0aGF0IHRoZSBzdWJzY3JpcHRpb24gaGFzIG5vdCBiZWVuIGRlbGV0ZWQgc2luY2UgdGhlIGxhc3QgcmVhZC5cIiksXG4gICAgc2NoZWR1bGVfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIHNjaGVkdWxlIHRvIHdoaWNoIHRoZSBzdWJzY3JpcHRpb24gYmVsb25ncy5cIiksXG4gICAgc3Vic2NyaWJlcjogc3Vic2NyaWJlclNjaGVtYS5kZXNjcmliZShcIlN1YnNjcmliZXIgZGV0YWlscyBmb3IgdXNlcnMgYW5kIGRlc3RpbmF0aW9ucyB0byBiZSBhZGRlZCBhcyBzdWJzY3JpYmVycyB0byB0aGUgc2NoZWR1bGUuXCIpLFxuICAgIHN1YnNjcmlwdGlvbl9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgc3Vic2NyaXB0aW9uLlwiKSxcbiAgICB1cGRhdGVfdGltZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiQSB0aW1lc3RhbXAgaW5kaWNhdGluZyB3aGVuIHRoZSBzdWJzY3JpcHRpb24gd2FzIGxhc3QgdXBkYXRlZC5cIilcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VuaWVRdWVyeUF0dGFjaG1lbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkRlc2NyaXB0aW9uIG9mIHRoZSBxdWVyeVwiKSxcbiAgICBpZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGxhc3RfdXBkYXRlZF90aW1lc3RhbXA6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRpbWUgd2hlbiB0aGUgdXNlciB1cGRhdGVkIHRoZSBxdWVyeSBsYXN0XCIpLFxuICAgIHBhcmFtZXRlcnM6IHouYXJyYXkocXVlcnlBdHRhY2htZW50UGFyYW1ldGVyU2NoZW1hKS5vcHRpb25hbCgpLFxuICAgIHF1ZXJ5OiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJBSSBnZW5lcmF0ZWQgU1FMIHF1ZXJ5XCIpLFxuICAgIHF1ZXJ5X3Jlc3VsdF9tZXRhZGF0YTogZ2VuaWVSZXN1bHRNZXRhZGF0YVNjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiTWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBxdWVyeSByZXN1bHQuXCIpLFxuICAgIHN0YXRlbWVudF9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiU3RhdGVtZW50IEV4ZWN1dGlvbiBBUEkgc3RhdGVtZW50IGlkLiBVc2UgW0dldCBzdGF0dXMsIG1hbmlmZXN0LCBhbmQgcmVzdWx0IGZpcnN0IGNodW5rXSg6bWV0aG9kOnN0YXRlbWVudGV4ZWN1dGlvbi9nZXRzdGF0ZW1lbnQpIHRvIGdldCB0aGUgZnVsbCByZXN1bHQgZGF0YS5cIiksXG4gICAgdGl0bGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIk5hbWUgb2YgdGhlIHF1ZXJ5XCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IHRleHRBdHRhY2htZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGNvbnRlbnQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkFJIGdlbmVyYXRlZCBtZXNzYWdlXCIpLFxuICAgIGlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgcHVycG9zZTogdGV4dEF0dGFjaG1lbnRQdXJwb3NlU2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJQdXJwb3NlL2ludGVudCBvZiB0aGlzIHRleHQgYXR0YWNobWVudFwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5pZUxpc3RTcGFjZXNSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBuZXh0X3BhZ2VfdG9rZW46IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRva2VuIHRvIGdldCB0aGUgbmV4dCBwYWdlIG9mIHJlc3VsdHNcIiksXG4gICAgc3BhY2VzOiB6LmFycmF5KGdlbmllU3BhY2VTY2hlbWEpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJMaXN0IG9mIEdlbmllIHNwYWNlc1wiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5pZUF0dGFjaG1lbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgYXR0YWNobWVudF9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiQXR0YWNobWVudCBJRFwiKSxcbiAgICBxdWVyeTogZ2VuaWVRdWVyeUF0dGFjaG1lbnRTY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShcIlF1ZXJ5IEF0dGFjaG1lbnQgaWYgR2VuaWUgcmVzcG9uZHMgd2l0aCBhIFNRTCBxdWVyeVwiKSxcbiAgICBzdWdnZXN0ZWRfcXVlc3Rpb25zOiBnZW5pZVN1Z2dlc3RlZFF1ZXN0aW9uc0F0dGFjaG1lbnRTY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShcIkZvbGxvdy11cCBxdWVzdGlvbnMgc3VnZ2VzdGVkIGJ5IEdlbmllXCIpLFxuICAgIHRleHQ6IHRleHRBdHRhY2htZW50U2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUZXh0IEF0dGFjaG1lbnQgaWYgR2VuaWUgcmVzcG9uZHMgd2l0aCB0ZXh0XCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IG1lc3NhZ2VFcnJvclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHR5cGU6IG1lc3NhZ2VFcnJvclR5cGVTY2hlbWEub3B0aW9uYWwoKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5pZU1lc3NhZ2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgYXR0YWNobWVudHM6IHouYXJyYXkoZ2VuaWVBdHRhY2htZW50U2NoZW1hKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiQUktZ2VuZXJhdGVkIHJlc3BvbnNlIHRvIHRoZSBtZXNzYWdlXCIpLFxuICAgIGNvbnRlbnQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJVc2VyIG1lc3NhZ2UgY29udGVudFwiKSxcbiAgICBjb252ZXJzYXRpb25faWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJDb252ZXJzYXRpb24gSURcIiksXG4gICAgY3JlYXRlZF90aW1lc3RhbXA6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRpbWVzdGFtcCB3aGVuIHRoZSBtZXNzYWdlIHdhcyBjcmVhdGVkXCIpLFxuICAgIGVycm9yOiBtZXNzYWdlRXJyb3JTY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShcIkVycm9yIG1lc3NhZ2UgaWYgR2VuaWUgZmFpbGVkIHRvIHJlc3BvbmQgdG8gdGhlIG1lc3NhZ2VcIiksXG4gICAgZmVlZGJhY2s6IGdlbmllRmVlZGJhY2tTY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShcIlVzZXIgZmVlZGJhY2sgZm9yIHRoZSBtZXNzYWdlIGlmIHByb3ZpZGVkXCIpLFxuICAgIGlkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiTWVzc2FnZSBJRC4gTGVnYWN5IGlkZW50aWZpZXIsIHVzZSBtZXNzYWdlX2lkIGluc3RlYWRcIiksXG4gICAgbGFzdF91cGRhdGVkX3RpbWVzdGFtcDogei5udW1iZXIoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGltZXN0YW1wIHdoZW4gdGhlIG1lc3NhZ2Ugd2FzIGxhc3QgdXBkYXRlZFwiKSxcbiAgICBtZXNzYWdlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiTWVzc2FnZSBJRFwiKSxcbiAgICBxdWVyeV9yZXN1bHQ6IHJlc3VsdFNjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIHJlc3VsdCBvZiBTUUwgcXVlcnkgaWYgdGhlIG1lc3NhZ2UgaW5jbHVkZXMgYSBxdWVyeSBhdHRhY2htZW50LiBEZXByZWNhdGVkLiBVc2UgYHF1ZXJ5X3Jlc3VsdF9tZXRhZGF0YWAgaW4gYEdlbmllUXVlcnlBdHRhY2htZW50YCBpbnN0ZWFkLlwiKSxcbiAgICBzcGFjZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIkdlbmllIHNwYWNlIElEXCIpLFxuICAgIHN0YXR1czogbWVzc2FnZVN0YXR1c1NjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiTWVzc2FnZVN0YXR1cy4gVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmU6ICogYEZFVENISU5HX01FVEFEQVRBYDogRmV0Y2hpbmcgbWV0YWRhdGEgZnJvbSB0aGUgZGF0YSBzb3VyY2VzLiAqIGBGSUxURVJJTkdfQ09OVEVYVGA6IFJ1bm5pbmcgc21hcnQgY29udGV4dCBzdGVwIHRvIGRldGVybWluZSByZWxldmFudCBjb250ZXh0LiAqIGBBU0tJTkdfQUlgOiBXYWl0aW5nIGZvciB0aGUgTExNIHRvIHJlc3BvbmQgdG8gdGhlIHVzZXIncyBxdWVzdGlvbi4gKiBgUEVORElOR19XQVJFSE9VU0VgOiBXYWl0aW5nIGZvciB3YXJlaG91c2UgYmVmb3JlIHRoZSBTUUwgcXVlcnkgY2FuIHN0YXJ0IGV4ZWN1dGluZy4gKiBgRVhFQ1VUSU5HX1FVRVJZYDogRXhlY3V0aW5nIGEgZ2VuZXJhdGVkIFNRTCBxdWVyeS4gR2V0IHRoZSBTUUwgcXVlcnkgcmVzdWx0IGJ5IGNhbGxpbmcgW2dldE1lc3NhZ2VBdHRhY2htZW50UXVlcnlSZXN1bHRdKDptZXRob2Q6Z2VuaWUvZ2V0TWVzc2FnZUF0dGFjaG1lbnRRdWVyeVJlc3VsdCkgQVBJLiAqIGBGQUlMRURgOiBUaGUgcmVzcG9uc2UgZ2VuZXJhdGlvbiBvciBxdWVyeSBleGVjdXRpb24gZmFpbGVkLiBTZWUgYGVycm9yYCBmaWVsZC4gKiBgQ09NUExFVEVEYDogTWVzc2FnZSBwcm9jZXNzaW5nIGlzIGNvbXBsZXRlZC4gUmVzdWx0cyBhcmUgaW4gdGhlIGBhdHRhY2htZW50c2AgZmllbGQuIEdldCB0aGUgU1FMIHF1ZXJ5IHJlc3VsdCBieSBjYWxsaW5nIFtnZXRNZXNzYWdlQXR0YWNobWVudFF1ZXJ5UmVzdWx0XSg6bWV0aG9kOmdlbmllL2dldE1lc3NhZ2VBdHRhY2htZW50UXVlcnlSZXN1bHQpIEFQSS4gKiBgU1VCTUlUVEVEYDogTWVzc2FnZSBoYXMgYmVlbiBzdWJtaXR0ZWQuICogYFFVRVJZX1JFU1VMVF9FWFBJUkVEYDogU1FMIHJlc3VsdCBpcyBub3QgYXZhaWxhYmxlIGFueW1vcmUuIFRoZSB1c2VyIG5lZWRzIHRvIHJlcnVuIHRoZSBxdWVyeS4gUmVydW4gdGhlIFNRTCBxdWVyeSByZXN1bHQgYnkgY2FsbGluZyBbZXhlY3V0ZU1lc3NhZ2VBdHRhY2htZW50UXVlcnldKDptZXRob2Q6Z2VuaWUvZXhlY3V0ZU1lc3NhZ2VBdHRhY2htZW50UXVlcnkpIEFQSS4gKiBgQ0FOQ0VMTEVEYDogTWVzc2FnZSBoYXMgYmVlbiBjYW5jZWxsZWQuXCIpLFxuICAgIHVzZXJfaWQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIklEIG9mIHRoZSB1c2VyIHdobyBjcmVhdGVkIHRoZSBtZXNzYWdlXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdldFB1Ymxpc2hlZERhc2hib2FyZFRva2VuSW5mb1Jlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGF1dGhvcml6YXRpb25fZGV0YWlsczogei5hcnJheShhdXRob3JpemF0aW9uRGV0YWlsc1NjaGVtYSkub3B0aW9uYWwoKS5kZXNjcmliZShcIkF1dGhvcml6YXRpb24gY29uc3RyYWludHMgZm9yIGFjY2Vzc2luZyB0aGUgcHVibGlzaGVkIGRhc2hib2FyZC4gQ3VycmVudGx5IGluY2x1ZGVzIGB3b3Jrc3BhY2VfcnVsZV9zZXRgIGFuZCBjb3VsZCBiZSBlbnJpY2hlZCB3aXRoIGB1bml0eV9jYXRhbG9nX3ByaXZpbGVnZXNgIGJlZm9yZSBvQXV0aCB0b2tlbiBnZW5lcmF0aW9uLlwiKSxcbiAgICBjdXN0b21fY2xhaW06IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkN1c3RvbSBjbGFpbSBnZW5lcmF0ZWQgZnJvbSBleHRlcm5hbF92YWx1ZSBhbmQgZXh0ZXJuYWxfdmlld2VyX2lkLiBGb3JtYXQ6IGB1cm46YWliaTpleHRlcm5hbF9kYXRhOjxleHRlcm5hbF92YWx1ZT46PGV4dGVybmFsX3ZpZXdlcl9pZD46PGRhc2hib2FyZF9pZD5gXCIpLFxuICAgIHNjb3BlOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJTY29wZSBkZWZpbmluZyBhY2Nlc3MgcGVybWlzc2lvbnMuXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGxpc3REYXNoYm9hcmRzUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgZGFzaGJvYXJkczogei5hcnJheShkYXNoYm9hcmRTY2hlbWEpLm9wdGlvbmFsKCksXG4gICAgbmV4dF9wYWdlX3Rva2VuOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJBIHRva2VuLCB3aGljaCBjYW4gYmUgc2VudCBhcyBgcGFnZV90b2tlbmAgdG8gcmV0cmlldmUgdGhlIG5leHQgcGFnZS4gSWYgdGhpcyBmaWVsZCBpcyBvbWl0dGVkLCB0aGVyZSBhcmUgbm8gc3Vic2VxdWVudCBkYXNoYm9hcmRzLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBsaXN0U2NoZWR1bGVzUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgbmV4dF9wYWdlX3Rva2VuOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJBIHRva2VuIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBgcGFnZV90b2tlbmAgaW4gc3Vic2VxdWVudCByZXF1ZXN0cyB0byByZXRyaWV2ZSB0aGUgbmV4dCBwYWdlIG9mIHJlc3VsdHMuIElmIHRoaXMgZmllbGQgaXMgb21pdHRlZCwgdGhlcmUgYXJlIG5vIHN1YnNlcXVlbnQgc2NoZWR1bGVzLlwiKSxcbiAgICBzY2hlZHVsZXM6IHouYXJyYXkoc2NoZWR1bGVTY2hlbWEpLm9wdGlvbmFsKClcbn0pO1xuXG5leHBvcnQgY29uc3QgbGlzdFN1YnNjcmlwdGlvbnNSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBuZXh0X3BhZ2VfdG9rZW46IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkEgdG9rZW4gdGhhdCBjYW4gYmUgdXNlZCBhcyBhIGBwYWdlX3Rva2VuYCBpbiBzdWJzZXF1ZW50IHJlcXVlc3RzIHRvIHJldHJpZXZlIHRoZSBuZXh0IHBhZ2Ugb2YgcmVzdWx0cy4gSWYgdGhpcyBmaWVsZCBpcyBvbWl0dGVkLCB0aGVyZSBhcmUgbm8gc3Vic2VxdWVudCBzdWJzY3JpcHRpb25zLlwiKSxcbiAgICBzdWJzY3JpcHRpb25zOiB6LmFycmF5KHN1YnNjcmlwdGlvblNjaGVtYSkub3B0aW9uYWwoKVxufSk7XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVTY2hlZHVsZVJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgZGFzaGJvYXJkX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgZGFzaGJvYXJkIHRvIHdoaWNoIHRoZSBzY2hlZHVsZSBiZWxvbmdzLlwiKSxcbiAgICBzY2hlZHVsZTogc2NoZWR1bGVTY2hlbWEuZGVzY3JpYmUoXCJUaGUgc2NoZWR1bGUgdG8gdXBkYXRlLlwiKSxcbiAgICBzY2hlZHVsZV9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIHNjaGVkdWxlLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTdWJzY3JpcHRpb25SZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGRhc2hib2FyZF9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlVVSUQgaWRlbnRpZnlpbmcgdGhlIGRhc2hib2FyZCB0byB3aGljaCB0aGUgc3Vic2NyaXB0aW9uIGJlbG9uZ3MuXCIpLFxuICAgIHNjaGVkdWxlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVVVJRCBpZGVudGlmeWluZyB0aGUgc2NoZWR1bGUgdG8gd2hpY2ggdGhlIHN1YnNjcmlwdGlvbiBiZWxvbmdzLlwiKSxcbiAgICBzdWJzY3JpcHRpb246IHN1YnNjcmlwdGlvblNjaGVtYS5kZXNjcmliZShcIlRoZSBzdWJzY3JpcHRpb24gdG8gY3JlYXRlLiBBIHNjaGVkdWxlIGlzIGxpbWl0ZWQgdG8gMTAwIHN1YnNjcmlwdGlvbnMuXCIpXG59KTtcblxuZXhwb3J0IGNvbnN0IGdlbmllTGlzdENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgbWVzc2FnZXM6IHouYXJyYXkoZ2VuaWVNZXNzYWdlU2NoZW1hKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiTGlzdCBvZiBtZXNzYWdlcyBpbiB0aGUgY29udmVyc2F0aW9uLlwiKSxcbiAgICBuZXh0X3BhZ2VfdG9rZW46IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSB0b2tlbiB0byB1c2UgZm9yIHJldHJpZXZpbmcgdGhlIG5leHQgcGFnZSBvZiByZXN1bHRzLlwiKVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5pZVN0YXJ0Q29udmVyc2F0aW9uUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgY29udmVyc2F0aW9uOiBnZW5pZUNvbnZlcnNhdGlvblNjaGVtYS5vcHRpb25hbCgpLFxuICAgIGNvbnZlcnNhdGlvbl9pZDogei5zdHJpbmcoKS5kZXNjcmliZShcIkNvbnZlcnNhdGlvbiBJRFwiKSxcbiAgICBtZXNzYWdlOiBnZW5pZU1lc3NhZ2VTY2hlbWEub3B0aW9uYWwoKSxcbiAgICBtZXNzYWdlX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiTWVzc2FnZSBJRFwiKVxufSk7XG5cbmV4cG9ydCB0eXBlIEF1dGhvcml6YXRpb25EZXRhaWxzR3JhbnRSdWxlID0gei5pbmZlcjx0eXBlb2YgYXV0aG9yaXphdGlvbkRldGFpbHNHcmFudFJ1bGVTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBDcm9uU2NoZWR1bGUgPSB6LmluZmVyPHR5cGVvZiBjcm9uU2NoZWR1bGVTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBMaWZlY3ljbGVTdGF0ZSA9IHouaW5mZXI8dHlwZW9mIGxpZmVjeWNsZVN0YXRlU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgRGFzaGJvYXJkVmlldyA9IHouaW5mZXI8dHlwZW9mIGRhc2hib2FyZFZpZXdTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBEZWxldGVTY2hlZHVsZVJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBkZWxldGVTY2hlZHVsZVJlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBEZWxldGVTdWJzY3JpcHRpb25SZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgZGVsZXRlU3Vic2NyaXB0aW9uUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdlbmllU3VnZ2VzdGVkUXVlc3Rpb25zQXR0YWNobWVudCA9IHouaW5mZXI8dHlwZW9mIGdlbmllU3VnZ2VzdGVkUXVlc3Rpb25zQXR0YWNobWVudFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdlbmllQ29udmVyc2F0aW9uID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVDb252ZXJzYXRpb25TY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZW5pZUNvbnZlcnNhdGlvblN1bW1hcnkgPSB6LmluZmVyPHR5cGVvZiBnZW5pZUNvbnZlcnNhdGlvblN1bW1hcnlTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZW5pZUNyZWF0ZUNvbnZlcnNhdGlvbk1lc3NhZ2VSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVDcmVhdGVDb252ZXJzYXRpb25NZXNzYWdlUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdlbmllRGVsZXRlQ29udmVyc2F0aW9uTWVzc2FnZVJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBnZW5pZURlbGV0ZUNvbnZlcnNhdGlvbk1lc3NhZ2VSZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVEZWxldGVDb252ZXJzYXRpb25SZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVEZWxldGVDb252ZXJzYXRpb25SZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVFeGVjdXRlTWVzc2FnZUF0dGFjaG1lbnRRdWVyeVJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBnZW5pZUV4ZWN1dGVNZXNzYWdlQXR0YWNobWVudFF1ZXJ5UmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdlbmllRXhlY3V0ZU1lc3NhZ2VRdWVyeVJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBnZW5pZUV4ZWN1dGVNZXNzYWdlUXVlcnlSZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVGZWVkYmFja1JhdGluZyA9IHouaW5mZXI8dHlwZW9mIGdlbmllRmVlZGJhY2tSYXRpbmdTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZW5pZUdldENvbnZlcnNhdGlvbk1lc3NhZ2VSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVHZXRDb252ZXJzYXRpb25NZXNzYWdlUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdlbmllR2V0TWVzc2FnZUF0dGFjaG1lbnRRdWVyeVJlc3VsdFJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBnZW5pZUdldE1lc3NhZ2VBdHRhY2htZW50UXVlcnlSZXN1bHRSZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVHZXRNZXNzYWdlUXVlcnlSZXN1bHRSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVHZXRNZXNzYWdlUXVlcnlSZXN1bHRSZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVHZXRNZXNzYWdlUXVlcnlSZXN1bHRSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIGdlbmllR2V0TWVzc2FnZVF1ZXJ5UmVzdWx0UmVzcG9uc2VTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZW5pZUdldFF1ZXJ5UmVzdWx0QnlBdHRhY2htZW50UmVxdWVzdCA9IHouaW5mZXI8dHlwZW9mIGdlbmllR2V0UXVlcnlSZXN1bHRCeUF0dGFjaG1lbnRSZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVHZXRTcGFjZVJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBnZW5pZUdldFNwYWNlUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdlbmllTGlzdENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdCA9IHouaW5mZXI8dHlwZW9mIGdlbmllTGlzdENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdlbmllTGlzdENvbnZlcnNhdGlvbnNSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVMaXN0Q29udmVyc2F0aW9uc1JlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZW5pZUxpc3RDb252ZXJzYXRpb25zUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBnZW5pZUxpc3RDb252ZXJzYXRpb25zUmVzcG9uc2VTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZW5pZUxpc3RTcGFjZXNSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVMaXN0U3BhY2VzUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdlbmllU3BhY2UgPSB6LmluZmVyPHR5cGVvZiBnZW5pZVNwYWNlU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVGZWVkYmFjayA9IHouaW5mZXI8dHlwZW9mIGdlbmllRmVlZGJhY2tTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiByZXN1bHRTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlU3RhdHVzID0gei5pbmZlcjx0eXBlb2YgbWVzc2FnZVN0YXR1c1NjaGVtYT47XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5QXR0YWNobWVudFBhcmFtZXRlciA9IHouaW5mZXI8dHlwZW9mIHF1ZXJ5QXR0YWNobWVudFBhcmFtZXRlclNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdlbmllUmVzdWx0TWV0YWRhdGEgPSB6LmluZmVyPHR5cGVvZiBnZW5pZVJlc3VsdE1ldGFkYXRhU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVTZW5kTWVzc2FnZUZlZWRiYWNrUmVxdWVzdCA9IHouaW5mZXI8dHlwZW9mIGdlbmllU2VuZE1lc3NhZ2VGZWVkYmFja1JlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZW5pZVN0YXJ0Q29udmVyc2F0aW9uTWVzc2FnZVJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBnZW5pZVN0YXJ0Q29udmVyc2F0aW9uTWVzc2FnZVJlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZW5pZVRyYXNoU3BhY2VSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVUcmFzaFNwYWNlUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdldERhc2hib2FyZFJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBnZXREYXNoYm9hcmRSZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2V0UHVibGlzaGVkRGFzaGJvYXJkUmVxdWVzdCA9IHouaW5mZXI8dHlwZW9mIGdldFB1Ymxpc2hlZERhc2hib2FyZFJlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZXRQdWJsaXNoZWREYXNoYm9hcmRUb2tlbkluZm9SZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgZ2V0UHVibGlzaGVkRGFzaGJvYXJkVG9rZW5JbmZvUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEF1dGhvcml6YXRpb25EZXRhaWxzID0gei5pbmZlcjx0eXBlb2YgYXV0aG9yaXphdGlvbkRldGFpbHNTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZXRTY2hlZHVsZVJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBnZXRTY2hlZHVsZVJlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZXRTdWJzY3JpcHRpb25SZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgZ2V0U3Vic2NyaXB0aW9uUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIExpc3REYXNoYm9hcmRzUmVxdWVzdCA9IHouaW5mZXI8dHlwZW9mIGxpc3REYXNoYm9hcmRzUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIERhc2hib2FyZCA9IHouaW5mZXI8dHlwZW9mIGRhc2hib2FyZFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIExpc3RTY2hlZHVsZXNSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgbGlzdFNjaGVkdWxlc1JlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBMaXN0U3Vic2NyaXB0aW9uc1JlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBsaXN0U3Vic2NyaXB0aW9uc1JlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlRXJyb3JUeXBlID0gei5pbmZlcjx0eXBlb2YgbWVzc2FnZUVycm9yVHlwZVNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIE1pZ3JhdGVEYXNoYm9hcmRSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgbWlncmF0ZURhc2hib2FyZFJlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBQdWJsaXNoUmVxdWVzdCA9IHouaW5mZXI8dHlwZW9mIHB1Ymxpc2hSZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgUHVibGlzaGVkRGFzaGJvYXJkID0gei5pbmZlcjx0eXBlb2YgcHVibGlzaGVkRGFzaGJvYXJkU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgU2NoZWR1bGVQYXVzZVN0YXR1cyA9IHouaW5mZXI8dHlwZW9mIHNjaGVkdWxlUGF1c2VTdGF0dXNTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb25TdWJzY3JpYmVyRGVzdGluYXRpb24gPSB6LmluZmVyPHR5cGVvZiBzdWJzY3JpcHRpb25TdWJzY3JpYmVyRGVzdGluYXRpb25TY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb25TdWJzY3JpYmVyVXNlciA9IHouaW5mZXI8dHlwZW9mIHN1YnNjcmlwdGlvblN1YnNjcmliZXJVc2VyU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaWJlciA9IHouaW5mZXI8dHlwZW9mIHN1YnNjcmliZXJTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBUZXh0QXR0YWNobWVudFB1cnBvc2UgPSB6LmluZmVyPHR5cGVvZiB0ZXh0QXR0YWNobWVudFB1cnBvc2VTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBUcmFzaERhc2hib2FyZFJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiB0cmFzaERhc2hib2FyZFJlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBVbnB1Ymxpc2hEYXNoYm9hcmRSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgdW5wdWJsaXNoRGFzaGJvYXJkUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIFVwZGF0ZURhc2hib2FyZFJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiB1cGRhdGVEYXNoYm9hcmRSZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgU2NoZWR1bGUgPSB6LmluZmVyPHR5cGVvZiBzY2hlZHVsZVNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIENyZWF0ZURhc2hib2FyZFJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBjcmVhdGVEYXNoYm9hcmRSZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgQ3JlYXRlU2NoZWR1bGVSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgY3JlYXRlU2NoZWR1bGVSZXF1ZXN0U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uID0gei5pbmZlcjx0eXBlb2Ygc3Vic2NyaXB0aW9uU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVRdWVyeUF0dGFjaG1lbnQgPSB6LmluZmVyPHR5cGVvZiBnZW5pZVF1ZXJ5QXR0YWNobWVudFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIFRleHRBdHRhY2htZW50ID0gei5pbmZlcjx0eXBlb2YgdGV4dEF0dGFjaG1lbnRTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHZW5pZUxpc3RTcGFjZXNSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIGdlbmllTGlzdFNwYWNlc1Jlc3BvbnNlU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVBdHRhY2htZW50ID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVBdHRhY2htZW50U2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZUVycm9yID0gei5pbmZlcjx0eXBlb2YgbWVzc2FnZUVycm9yU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVNZXNzYWdlID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVNZXNzYWdlU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2V0UHVibGlzaGVkRGFzaGJvYXJkVG9rZW5JbmZvUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBnZXRQdWJsaXNoZWREYXNoYm9hcmRUb2tlbkluZm9SZXNwb25zZVNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIExpc3REYXNoYm9hcmRzUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBsaXN0RGFzaGJvYXJkc1Jlc3BvbnNlU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgTGlzdFNjaGVkdWxlc1Jlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgbGlzdFNjaGVkdWxlc1Jlc3BvbnNlU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgTGlzdFN1YnNjcmlwdGlvbnNSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIGxpc3RTdWJzY3JpcHRpb25zUmVzcG9uc2VTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBVcGRhdGVTY2hlZHVsZVJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiB1cGRhdGVTY2hlZHVsZVJlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVTdWJzY3JpcHRpb25SZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgY3JlYXRlU3Vic2NyaXB0aW9uUmVxdWVzdFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEdlbmllTGlzdENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBnZW5pZUxpc3RDb252ZXJzYXRpb25NZXNzYWdlc1Jlc3BvbnNlU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuaWVTdGFydENvbnZlcnNhdGlvblJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgZ2VuaWVTdGFydENvbnZlcnNhdGlvblJlc3BvbnNlU2NoZW1hPjtcbiJdfQ==