@archont561/qgis-sdk 0.4.0 → 0.5.0

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.
@@ -0,0 +1,777 @@
1
+ import {
2
+ QgisSdkError2
3
+ } from "./chunk-2hwva3a3.js";
4
+
5
+ // src/generated/host.ts
6
+ var HOST_ID2 = "qgis.host";
7
+ var HOST_FINGERPRINT2 = "sha256:16790dc8c4d77ef5b5f22636702e913f3d6fb63275d0ae3e5a4ca6e8001a9abd";
8
+ var HOST_SCHEMA_VERSION2 = 1;
9
+ var HOST_OPERATIONS2 = [
10
+ "algorithms.describe",
11
+ "algorithms.list",
12
+ "algorithms.providers",
13
+ "algorithms.run",
14
+ "files.export",
15
+ "layers.get",
16
+ "layers.list",
17
+ "layers.open_vector",
18
+ "network.fetch",
19
+ "notifications.info",
20
+ "project.layer_ids",
21
+ "settings.get",
22
+ "styles.apply"
23
+ ];
24
+
25
+ class QgisSdkHostContractError2 extends QgisSdkError2 {
26
+ operation;
27
+ constructor(operation, message) {
28
+ super(`operation "${operation}": ${message}`, "contract_validation_failed");
29
+ this.operation = operation;
30
+ }
31
+ }
32
+ function isRecord(value) {
33
+ return typeof value === "object" && value !== null && !Array.isArray(value);
34
+ }
35
+ function hasOnly(value, keys) {
36
+ return Object.keys(value).every((key) => keys.includes(key));
37
+ }
38
+ function isSafeInteger(value) {
39
+ return typeof value === "number" && Number.isSafeInteger(value);
40
+ }
41
+ function AlgorithmInfo2(value, strict = false) {
42
+ if (!isRecord(value))
43
+ return false;
44
+ if (!("id" in value))
45
+ return false;
46
+ if (!("provider" in value))
47
+ return false;
48
+ if (!("name" in value))
49
+ return false;
50
+ if (!("label" in value))
51
+ return false;
52
+ if (!("group" in value))
53
+ return false;
54
+ if (!("group_id" in value))
55
+ return false;
56
+ if (!("help" in value))
57
+ return false;
58
+ if (!("deprecated" in value))
59
+ return false;
60
+ if (!("parameters" in value))
61
+ return false;
62
+ if (!("outputs" in value))
63
+ return false;
64
+ if (value["deprecated"] !== undefined && !(typeof value["deprecated"] === "boolean")) {
65
+ return false;
66
+ }
67
+ if (value["group"] !== undefined && !(typeof value["group"] === "string")) {
68
+ return false;
69
+ }
70
+ if (value["group_id"] !== undefined && !(typeof value["group_id"] === "string")) {
71
+ return false;
72
+ }
73
+ if (value["help"] !== undefined && !(typeof value["help"] === "string")) {
74
+ return false;
75
+ }
76
+ if (value["id"] !== undefined && !(typeof value["id"] === "string")) {
77
+ return false;
78
+ }
79
+ if (value["label"] !== undefined && !(typeof value["label"] === "string")) {
80
+ return false;
81
+ }
82
+ if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
83
+ return false;
84
+ }
85
+ if (value["outputs"] !== undefined && !(Array.isArray(value["outputs"]) && value["outputs"].every((item) => OutputInfo2(item, strict)))) {
86
+ return false;
87
+ }
88
+ if (value["parameters"] !== undefined && !(Array.isArray(value["parameters"]) && value["parameters"].every((item) => ParameterInfo2(item, strict)))) {
89
+ return false;
90
+ }
91
+ if (value["provider"] !== undefined && !(typeof value["provider"] === "string")) {
92
+ return false;
93
+ }
94
+ if (strict && !hasOnly(value, ["deprecated", "group", "group_id", "help", "id", "label", "name", "outputs", "parameters", "provider"]))
95
+ return false;
96
+ return true;
97
+ }
98
+ function AlgorithmListRequest2(value, strict = false) {
99
+ if (!isRecord(value))
100
+ return false;
101
+ if (value["cursor"] !== undefined && !(typeof value["cursor"] === "string" && new RegExp("^(?:[0-9]+)$").test(value["cursor"]))) {
102
+ return false;
103
+ }
104
+ if (value["limit"] !== undefined && !(isSafeInteger(value["limit"]) && value["limit"] >= 1 && value["limit"] <= 200)) {
105
+ return false;
106
+ }
107
+ if (value["provider"] !== undefined && !(typeof value["provider"] === "string")) {
108
+ return false;
109
+ }
110
+ if (strict && !hasOnly(value, ["cursor", "limit", "provider"]))
111
+ return false;
112
+ return true;
113
+ }
114
+ function AlgorithmPage2(value, strict = false) {
115
+ if (!isRecord(value))
116
+ return false;
117
+ if (!("items" in value))
118
+ return false;
119
+ if (!("truncated" in value))
120
+ return false;
121
+ if (value["items"] !== undefined && !(Array.isArray(value["items"]) && value["items"].every((item) => AlgorithmSummary2(item, strict)))) {
122
+ return false;
123
+ }
124
+ if (value["next_cursor"] !== undefined && !(typeof value["next_cursor"] === "string")) {
125
+ return false;
126
+ }
127
+ if (value["truncated"] !== undefined && !(typeof value["truncated"] === "boolean")) {
128
+ return false;
129
+ }
130
+ if (strict && !hasOnly(value, ["items", "next_cursor", "truncated"]))
131
+ return false;
132
+ return true;
133
+ }
134
+ function AlgorithmRequest2(value, strict = false) {
135
+ if (!isRecord(value))
136
+ return false;
137
+ if (!("algorithm_id" in value))
138
+ return false;
139
+ if (value["algorithm_id"] !== undefined && !(typeof value["algorithm_id"] === "string")) {
140
+ return false;
141
+ }
142
+ if (strict && !hasOnly(value, ["algorithm_id"]))
143
+ return false;
144
+ return true;
145
+ }
146
+ function AlgorithmSummary2(value, strict = false) {
147
+ if (!isRecord(value))
148
+ return false;
149
+ if (!("id" in value))
150
+ return false;
151
+ if (!("provider" in value))
152
+ return false;
153
+ if (!("name" in value))
154
+ return false;
155
+ if (!("label" in value))
156
+ return false;
157
+ if (!("group" in value))
158
+ return false;
159
+ if (!("deprecated" in value))
160
+ return false;
161
+ if (value["deprecated"] !== undefined && !(typeof value["deprecated"] === "boolean")) {
162
+ return false;
163
+ }
164
+ if (value["group"] !== undefined && !(typeof value["group"] === "string")) {
165
+ return false;
166
+ }
167
+ if (value["id"] !== undefined && !(typeof value["id"] === "string")) {
168
+ return false;
169
+ }
170
+ if (value["label"] !== undefined && !(typeof value["label"] === "string")) {
171
+ return false;
172
+ }
173
+ if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
174
+ return false;
175
+ }
176
+ if (value["provider"] !== undefined && !(typeof value["provider"] === "string")) {
177
+ return false;
178
+ }
179
+ if (strict && !hasOnly(value, ["deprecated", "group", "id", "label", "name", "provider"]))
180
+ return false;
181
+ return true;
182
+ }
183
+ function ExportRequest2(value, strict = false) {
184
+ if (!isRecord(value))
185
+ return false;
186
+ if (!("file" in value))
187
+ return false;
188
+ if (!("content" in value))
189
+ return false;
190
+ if (value["content"] !== undefined && !(typeof value["content"] === "string")) {
191
+ return false;
192
+ }
193
+ if (value["file"] !== undefined && !FileRef2(value["file"], strict)) {
194
+ return false;
195
+ }
196
+ if (strict && !hasOnly(value, ["content", "file"]))
197
+ return false;
198
+ return true;
199
+ }
200
+ function ExportResult2(value, strict = false) {
201
+ if (!isRecord(value))
202
+ return false;
203
+ if (!("bytes_written" in value))
204
+ return false;
205
+ if (!("name" in value))
206
+ return false;
207
+ if (value["bytes_written"] !== undefined && !isSafeInteger(value["bytes_written"])) {
208
+ return false;
209
+ }
210
+ if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
211
+ return false;
212
+ }
213
+ if (strict && !hasOnly(value, ["bytes_written", "name"]))
214
+ return false;
215
+ return true;
216
+ }
217
+ function FetchRequest2(value, strict = false) {
218
+ if (!isRecord(value))
219
+ return false;
220
+ if (!("url" in value))
221
+ return false;
222
+ if (value["auth_config"] !== undefined && !(typeof value["auth_config"] === "string")) {
223
+ return false;
224
+ }
225
+ if (value["body"] !== undefined && !(typeof value["body"] === "string")) {
226
+ return false;
227
+ }
228
+ if (value["headers"] !== undefined && !(Array.isArray(value["headers"]) && value["headers"].every((item) => HttpHeader2(item, strict)))) {
229
+ return false;
230
+ }
231
+ if (value["method"] !== undefined && !(value["method"] === "GET" || value["method"] === "HEAD" || value["method"] === "POST" || value["method"] === "PUT" || value["method"] === "PATCH" || value["method"] === "DELETE" || value["method"] === "OPTIONS")) {
232
+ return false;
233
+ }
234
+ if (value["timeout_seconds"] !== undefined && !(typeof value["timeout_seconds"] === "number" && Number.isFinite(value["timeout_seconds"]) && value["timeout_seconds"] >= 0.1 && value["timeout_seconds"] <= 300)) {
235
+ return false;
236
+ }
237
+ if (value["url"] !== undefined && !(typeof value["url"] === "string")) {
238
+ return false;
239
+ }
240
+ if (strict && !hasOnly(value, ["auth_config", "body", "headers", "method", "timeout_seconds", "url"]))
241
+ return false;
242
+ return true;
243
+ }
244
+ function FileRef2(value, strict = false) {
245
+ if (!isRecord(value))
246
+ return false;
247
+ if (!("kind" in value))
248
+ return false;
249
+ if (!("id" in value))
250
+ return false;
251
+ if (value["id"] !== undefined && !(typeof value["id"] === "string" && new RegExp("^(?:[a-f0-9]{16,64})$").test(value["id"]))) {
252
+ return false;
253
+ }
254
+ if (value["kind"] !== undefined && !(value["kind"] === "file" || value["kind"] === "directory")) {
255
+ return false;
256
+ }
257
+ if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
258
+ return false;
259
+ }
260
+ if (value["operations"] !== undefined && !(Array.isArray(value["operations"]) && value["operations"].every((item) => item === "read" || item === "write"))) {
261
+ return false;
262
+ }
263
+ if (strict && !hasOnly(value, ["id", "kind", "name", "operations"]))
264
+ return false;
265
+ return true;
266
+ }
267
+ function HttpHeader2(value, strict = false) {
268
+ if (!isRecord(value))
269
+ return false;
270
+ if (!("name" in value))
271
+ return false;
272
+ if (!("value" in value))
273
+ return false;
274
+ if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
275
+ return false;
276
+ }
277
+ if (value["value"] !== undefined && !(typeof value["value"] === "string")) {
278
+ return false;
279
+ }
280
+ if (strict && !hasOnly(value, ["name", "value"]))
281
+ return false;
282
+ return true;
283
+ }
284
+ function IdPage2(value, strict = false) {
285
+ if (!isRecord(value))
286
+ return false;
287
+ if (!("items" in value))
288
+ return false;
289
+ if (!("truncated" in value))
290
+ return false;
291
+ if (value["items"] !== undefined && !(Array.isArray(value["items"]) && value["items"].every((item) => typeof item === "string"))) {
292
+ return false;
293
+ }
294
+ if (value["next_cursor"] !== undefined && !(typeof value["next_cursor"] === "string")) {
295
+ return false;
296
+ }
297
+ if (value["truncated"] !== undefined && !(typeof value["truncated"] === "boolean")) {
298
+ return false;
299
+ }
300
+ if (strict && !hasOnly(value, ["items", "next_cursor", "truncated"]))
301
+ return false;
302
+ return true;
303
+ }
304
+ function LayerPage2(value, strict = false) {
305
+ if (!isRecord(value))
306
+ return false;
307
+ if (!("items" in value))
308
+ return false;
309
+ if (!("truncated" in value))
310
+ return false;
311
+ if (value["items"] !== undefined && !(Array.isArray(value["items"]) && value["items"].every((item) => VectorLayerInfo2(item, strict)))) {
312
+ return false;
313
+ }
314
+ if (value["next_cursor"] !== undefined && !(typeof value["next_cursor"] === "string")) {
315
+ return false;
316
+ }
317
+ if (value["truncated"] !== undefined && !(typeof value["truncated"] === "boolean")) {
318
+ return false;
319
+ }
320
+ if (strict && !hasOnly(value, ["items", "next_cursor", "truncated"]))
321
+ return false;
322
+ return true;
323
+ }
324
+ function LayerRequest2(value, strict = false) {
325
+ if (!isRecord(value))
326
+ return false;
327
+ if (!("layer_id" in value))
328
+ return false;
329
+ if (value["layer_id"] !== undefined && !(typeof value["layer_id"] === "string")) {
330
+ return false;
331
+ }
332
+ if (strict && !hasOnly(value, ["layer_id"]))
333
+ return false;
334
+ return true;
335
+ }
336
+ function NetworkFetchData2(value, strict = false) {
337
+ if (!isRecord(value))
338
+ return false;
339
+ if (!("url" in value))
340
+ return false;
341
+ if (!("status_code" in value))
342
+ return false;
343
+ if (!("reason" in value))
344
+ return false;
345
+ if (!("headers" in value))
346
+ return false;
347
+ if (!("text" in value))
348
+ return false;
349
+ if (!("base64" in value))
350
+ return false;
351
+ if (value["base64"] !== undefined && !(typeof value["base64"] === "string" || value["base64"] === null)) {
352
+ return false;
353
+ }
354
+ if (value["headers"] !== undefined && !(Array.isArray(value["headers"]) && value["headers"].every((item) => HttpHeader2(item, strict)))) {
355
+ return false;
356
+ }
357
+ if (value["reason"] !== undefined && !(typeof value["reason"] === "string")) {
358
+ return false;
359
+ }
360
+ if (value["status_code"] !== undefined && !isSafeInteger(value["status_code"])) {
361
+ return false;
362
+ }
363
+ if (value["text"] !== undefined && !(typeof value["text"] === "string" || value["text"] === null)) {
364
+ return false;
365
+ }
366
+ if (value["url"] !== undefined && !(typeof value["url"] === "string")) {
367
+ return false;
368
+ }
369
+ if (strict && !hasOnly(value, ["base64", "headers", "reason", "status_code", "text", "url"]))
370
+ return false;
371
+ return true;
372
+ }
373
+ function NotificationsInfoRequest2(value, strict = false) {
374
+ if (!isRecord(value))
375
+ return false;
376
+ if (!("message" in value))
377
+ return false;
378
+ if (value["message"] !== undefined && !(typeof value["message"] === "string")) {
379
+ return false;
380
+ }
381
+ if (strict && !hasOnly(value, ["message"]))
382
+ return false;
383
+ return true;
384
+ }
385
+ function OpenVectorRequest2(value, strict = false) {
386
+ if (!isRecord(value))
387
+ return false;
388
+ if (!("file" in value))
389
+ return false;
390
+ if (value["file"] !== undefined && !FileRef2(value["file"], strict)) {
391
+ return false;
392
+ }
393
+ if (strict && !hasOnly(value, ["file"]))
394
+ return false;
395
+ return true;
396
+ }
397
+ function OutputInfo2(value, strict = false) {
398
+ if (!isRecord(value))
399
+ return false;
400
+ if (!("name" in value))
401
+ return false;
402
+ if (!("kind" in value))
403
+ return false;
404
+ if (!("label" in value))
405
+ return false;
406
+ if (value["kind"] !== undefined && !(typeof value["kind"] === "string")) {
407
+ return false;
408
+ }
409
+ if (value["label"] !== undefined && !(typeof value["label"] === "string")) {
410
+ return false;
411
+ }
412
+ if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
413
+ return false;
414
+ }
415
+ if (strict && !hasOnly(value, ["kind", "label", "name"]))
416
+ return false;
417
+ return true;
418
+ }
419
+ function PageRequest2(value, strict = false) {
420
+ if (!isRecord(value))
421
+ return false;
422
+ if (value["cursor"] !== undefined && !(typeof value["cursor"] === "string" && new RegExp("^(?:[0-9]+)$").test(value["cursor"]))) {
423
+ return false;
424
+ }
425
+ if (value["limit"] !== undefined && !(isSafeInteger(value["limit"]) && value["limit"] >= 1 && value["limit"] <= 200)) {
426
+ return false;
427
+ }
428
+ if (strict && !hasOnly(value, ["cursor", "limit"]))
429
+ return false;
430
+ return true;
431
+ }
432
+ function ParameterInfo2(value, strict = false) {
433
+ if (!isRecord(value))
434
+ return false;
435
+ if (!("name" in value))
436
+ return false;
437
+ if (!("kind" in value))
438
+ return false;
439
+ if (!("label" in value))
440
+ return false;
441
+ if (!("description" in value))
442
+ return false;
443
+ if (!("optional" in value))
444
+ return false;
445
+ if (!("advanced" in value))
446
+ return false;
447
+ if (!("hidden" in value))
448
+ return false;
449
+ if (!("destination" in value))
450
+ return false;
451
+ if (!("required" in value))
452
+ return false;
453
+ if (!("default_json" in value))
454
+ return false;
455
+ if (!("options" in value))
456
+ return false;
457
+ if (!("multiple" in value))
458
+ return false;
459
+ if (!("number_type" in value))
460
+ return false;
461
+ if (!("minimum" in value))
462
+ return false;
463
+ if (!("maximum" in value))
464
+ return false;
465
+ if (!("extension" in value))
466
+ return false;
467
+ if (value["advanced"] !== undefined && !(typeof value["advanced"] === "boolean")) {
468
+ return false;
469
+ }
470
+ if (value["default_json"] !== undefined && !(typeof value["default_json"] === "string" || value["default_json"] === null)) {
471
+ return false;
472
+ }
473
+ if (value["description"] !== undefined && !(typeof value["description"] === "string")) {
474
+ return false;
475
+ }
476
+ if (value["destination"] !== undefined && !(typeof value["destination"] === "boolean")) {
477
+ return false;
478
+ }
479
+ if (value["extension"] !== undefined && !(typeof value["extension"] === "string" || value["extension"] === null)) {
480
+ return false;
481
+ }
482
+ if (value["hidden"] !== undefined && !(typeof value["hidden"] === "boolean")) {
483
+ return false;
484
+ }
485
+ if (value["kind"] !== undefined && !(typeof value["kind"] === "string")) {
486
+ return false;
487
+ }
488
+ if (value["label"] !== undefined && !(typeof value["label"] === "string")) {
489
+ return false;
490
+ }
491
+ if (value["maximum"] !== undefined && !(typeof value["maximum"] === "number" && Number.isFinite(value["maximum"]) || value["maximum"] === null)) {
492
+ return false;
493
+ }
494
+ if (value["minimum"] !== undefined && !(typeof value["minimum"] === "number" && Number.isFinite(value["minimum"]) || value["minimum"] === null)) {
495
+ return false;
496
+ }
497
+ if (value["multiple"] !== undefined && !(typeof value["multiple"] === "boolean")) {
498
+ return false;
499
+ }
500
+ if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
501
+ return false;
502
+ }
503
+ if (value["number_type"] !== undefined && !(typeof value["number_type"] === "string" || value["number_type"] === null)) {
504
+ return false;
505
+ }
506
+ if (value["optional"] !== undefined && !(typeof value["optional"] === "boolean")) {
507
+ return false;
508
+ }
509
+ if (value["options"] !== undefined && !(Array.isArray(value["options"]) && value["options"].every((item) => typeof item === "string"))) {
510
+ return false;
511
+ }
512
+ if (value["required"] !== undefined && !(typeof value["required"] === "boolean")) {
513
+ return false;
514
+ }
515
+ if (strict && !hasOnly(value, ["advanced", "default_json", "description", "destination", "extension", "hidden", "kind", "label", "maximum", "minimum", "multiple", "name", "number_type", "optional", "options", "required"]))
516
+ return false;
517
+ return true;
518
+ }
519
+ function ProviderInfo2(value, strict = false) {
520
+ if (!isRecord(value))
521
+ return false;
522
+ if (!("id" in value))
523
+ return false;
524
+ if (!("label" in value))
525
+ return false;
526
+ if (!("version" in value))
527
+ return false;
528
+ if (value["id"] !== undefined && !(typeof value["id"] === "string")) {
529
+ return false;
530
+ }
531
+ if (value["label"] !== undefined && !(typeof value["label"] === "string")) {
532
+ return false;
533
+ }
534
+ if (value["version"] !== undefined && !(typeof value["version"] === "string")) {
535
+ return false;
536
+ }
537
+ if (strict && !hasOnly(value, ["id", "label", "version"]))
538
+ return false;
539
+ return true;
540
+ }
541
+ function ProviderPage2(value, strict = false) {
542
+ if (!isRecord(value))
543
+ return false;
544
+ if (!("items" in value))
545
+ return false;
546
+ if (!("truncated" in value))
547
+ return false;
548
+ if (value["items"] !== undefined && !(Array.isArray(value["items"]) && value["items"].every((item) => ProviderInfo2(item, strict)))) {
549
+ return false;
550
+ }
551
+ if (value["next_cursor"] !== undefined && !(typeof value["next_cursor"] === "string")) {
552
+ return false;
553
+ }
554
+ if (value["truncated"] !== undefined && !(typeof value["truncated"] === "boolean")) {
555
+ return false;
556
+ }
557
+ if (strict && !hasOnly(value, ["items", "next_cursor", "truncated"]))
558
+ return false;
559
+ return true;
560
+ }
561
+ function RunAlgorithmRequest2(value, strict = false) {
562
+ if (!isRecord(value))
563
+ return false;
564
+ if (!("algorithm_id" in value))
565
+ return false;
566
+ if (!("params" in value))
567
+ return false;
568
+ if (value["algorithm_id"] !== undefined && !(typeof value["algorithm_id"] === "string")) {
569
+ return false;
570
+ }
571
+ if (value["params"] !== undefined && !isRecord(value["params"])) {
572
+ return false;
573
+ }
574
+ if (strict && !hasOnly(value, ["algorithm_id", "params"]))
575
+ return false;
576
+ return true;
577
+ }
578
+ function RunOutput2(value, strict = false) {
579
+ if (!isRecord(value))
580
+ return false;
581
+ if (!("name" in value))
582
+ return false;
583
+ if (!("kind" in value))
584
+ return false;
585
+ if (value["file"] !== undefined && !FileRef2(value["file"], strict)) {
586
+ return false;
587
+ }
588
+ if (value["kind"] !== undefined && !(value["kind"] === "vector" || value["kind"] === "file" || value["kind"] === "value")) {
589
+ return false;
590
+ }
591
+ if (value["layer"] !== undefined && !VectorLayerInfo2(value["layer"], strict)) {
592
+ return false;
593
+ }
594
+ if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
595
+ return false;
596
+ }
597
+ if (value["value"] !== undefined && !(typeof value["value"] === "string" || typeof value["value"] === "number" && Number.isFinite(value["value"]) || typeof value["value"] === "boolean" || value["value"] === null)) {
598
+ return false;
599
+ }
600
+ if (strict && !hasOnly(value, ["file", "kind", "layer", "name", "value"]))
601
+ return false;
602
+ return true;
603
+ }
604
+ function RunResult2(value, strict = false) {
605
+ if (!isRecord(value))
606
+ return false;
607
+ if (!("algorithm" in value))
608
+ return false;
609
+ if (!("outputs" in value))
610
+ return false;
611
+ if (value["algorithm"] !== undefined && !(typeof value["algorithm"] === "string")) {
612
+ return false;
613
+ }
614
+ if (value["outputs"] !== undefined && !(Array.isArray(value["outputs"]) && value["outputs"].every((item) => RunOutput2(item, strict)))) {
615
+ return false;
616
+ }
617
+ if (strict && !hasOnly(value, ["algorithm", "outputs"]))
618
+ return false;
619
+ return true;
620
+ }
621
+ function SettingsGetRequest2(value, strict = false) {
622
+ if (!isRecord(value))
623
+ return false;
624
+ if (!("key" in value))
625
+ return false;
626
+ if (value["default"] !== undefined && !(typeof value["default"] === "string" || value["default"] === null)) {
627
+ return false;
628
+ }
629
+ if (value["key"] !== undefined && !(typeof value["key"] === "string")) {
630
+ return false;
631
+ }
632
+ if (strict && !hasOnly(value, ["default", "key"]))
633
+ return false;
634
+ return true;
635
+ }
636
+ function StylesApplyRequest2(value, strict = false) {
637
+ if (!isRecord(value))
638
+ return false;
639
+ if (!("layer_id" in value))
640
+ return false;
641
+ if (!("style" in value))
642
+ return false;
643
+ if (value["layer_id"] !== undefined && !(typeof value["layer_id"] === "string")) {
644
+ return false;
645
+ }
646
+ if (value["style"] !== undefined && !(typeof value["style"] === "string")) {
647
+ return false;
648
+ }
649
+ if (strict && !hasOnly(value, ["layer_id", "style"]))
650
+ return false;
651
+ return true;
652
+ }
653
+ function VectorLayerInfo2(value, strict = false) {
654
+ if (!isRecord(value))
655
+ return false;
656
+ if (!("id" in value))
657
+ return false;
658
+ if (!("name" in value))
659
+ return false;
660
+ if (!("geometry_type" in value))
661
+ return false;
662
+ if (!("field_names" in value))
663
+ return false;
664
+ if (!("crs" in value))
665
+ return false;
666
+ if (value["crs"] !== undefined && !(typeof value["crs"] === "string" || value["crs"] === null)) {
667
+ return false;
668
+ }
669
+ if (value["field_names"] !== undefined && !(Array.isArray(value["field_names"]) && value["field_names"].every((item) => typeof item === "string"))) {
670
+ return false;
671
+ }
672
+ if (value["geometry_type"] !== undefined && !(value["geometry_type"] === "point" || value["geometry_type"] === "line" || value["geometry_type"] === "polygon" || value["geometry_type"] === "none")) {
673
+ return false;
674
+ }
675
+ if (value["id"] !== undefined && !(typeof value["id"] === "string")) {
676
+ return false;
677
+ }
678
+ if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
679
+ return false;
680
+ }
681
+ if (strict && !hasOnly(value, ["crs", "field_names", "geometry_type", "id", "name"]))
682
+ return false;
683
+ return true;
684
+ }
685
+ function NetworkFetchEvent2(value, strict = false) {
686
+ if (!isRecord(value))
687
+ return false;
688
+ if (value.kind === "data")
689
+ return NetworkFetchData2(value.payload, strict);
690
+ return false;
691
+ }
692
+ function createHost2(client) {
693
+ return {
694
+ algorithms: {
695
+ describe: (input, options) => call(client, "algorithms.describe", input, options, AlgorithmRequest2, AlgorithmInfo2),
696
+ list: (input, options) => call(client, "algorithms.list", input, options, AlgorithmListRequest2, AlgorithmPage2),
697
+ providers: (input, options) => call(client, "algorithms.providers", input, options, PageRequest2, ProviderPage2),
698
+ run: (input, options) => call(client, "algorithms.run", input, options, RunAlgorithmRequest2, RunResult2)
699
+ },
700
+ files: {
701
+ export: (input, options) => call(client, "files.export", input, options, ExportRequest2, ExportResult2)
702
+ },
703
+ layers: {
704
+ get: (input, options) => call(client, "layers.get", input, options, LayerRequest2, VectorLayerInfo2),
705
+ list: (input, options) => call(client, "layers.list", input, options, PageRequest2, LayerPage2),
706
+ open_vector: (input, options) => call(client, "layers.open_vector", input, options, OpenVectorRequest2, VectorLayerInfo2)
707
+ },
708
+ network: {
709
+ fetch: (input, handlers, options) => open(client, "network.fetch", input, handlers, options, FetchRequest2, NetworkFetchEvent2)
710
+ },
711
+ notifications: {
712
+ info: (input, options) => call(client, "notifications.info", input, options, NotificationsInfoRequest2, (candidate) => candidate === null)
713
+ },
714
+ project: {
715
+ layer_ids: (input, options) => call(client, "project.layer_ids", input, options, PageRequest2, IdPage2)
716
+ },
717
+ settings: {
718
+ get: (input, options) => call(client, "settings.get", input, options, SettingsGetRequest2, (candidate) => typeof candidate === "string" || candidate === null)
719
+ },
720
+ styles: {
721
+ apply: (input, options) => call(client, "styles.apply", input, options, StylesApplyRequest2, (candidate) => candidate === null)
722
+ }
723
+ };
724
+ }
725
+ async function call(client, operation, input, options, acceptInput, acceptOutput) {
726
+ if (input !== undefined && !acceptInput(input, true)) {
727
+ throw new QgisSdkHostContractError2(operation, "the arguments do not match the declared request");
728
+ }
729
+ const value = await client.invoke(operation, input ?? {}, options);
730
+ if (!acceptOutput(value)) {
731
+ throw new QgisSdkHostContractError2(operation, "the response does not match the declared result");
732
+ }
733
+ return value;
734
+ }
735
+ async function open(client, operation, input, handlers, options, acceptInput, acceptEvent) {
736
+ if (!acceptInput(input, true)) {
737
+ throw new QgisSdkHostContractError2(operation, "the arguments do not match the declared request");
738
+ }
739
+ let ended = false;
740
+ let violated = false;
741
+ let handle = null;
742
+ const end = (terminal) => {
743
+ if (ended)
744
+ return;
745
+ ended = true;
746
+ handlers.onTerminal?.(terminal);
747
+ };
748
+ handle = await client.subscribe(operation, input, {
749
+ onEvent: (event) => {
750
+ if (ended)
751
+ return;
752
+ if (acceptEvent(event)) {
753
+ handlers.onEvent?.(event);
754
+ return;
755
+ }
756
+ end({
757
+ kind: "error",
758
+ message: new QgisSdkHostContractError2(operation, "an event does not match the declared events").message
759
+ });
760
+ if (handle === null) {
761
+ violated = true;
762
+ } else {
763
+ handle.close();
764
+ }
765
+ },
766
+ onTerminal: end
767
+ }, options);
768
+ if (violated) {
769
+ handle.close();
770
+ }
771
+ return handle;
772
+ }
773
+
774
+ export { HOST_ID2, HOST_FINGERPRINT2, HOST_SCHEMA_VERSION2, HOST_OPERATIONS2, QgisSdkHostContractError2, AlgorithmInfo2, AlgorithmListRequest2, AlgorithmPage2, AlgorithmRequest2, AlgorithmSummary2, ExportRequest2, ExportResult2, FetchRequest2, FileRef2, HttpHeader2, IdPage2, LayerPage2, LayerRequest2, NetworkFetchData2, NotificationsInfoRequest2, OpenVectorRequest2, OutputInfo2, PageRequest2, ParameterInfo2, ProviderInfo2, ProviderPage2, RunAlgorithmRequest2, RunOutput2, RunResult2, SettingsGetRequest2, StylesApplyRequest2, VectorLayerInfo2, NetworkFetchEvent2, createHost2 };
775
+
776
+ //# debugId=3FC4669017E4A86E64756E2164756E21
777
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2dlbmVyYXRlZC9ob3N0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8vIEdlbmVyYXRlZCBieSBxZ2lzLXNkay4gRG8gbm90IGVkaXQuXG4vLyBTb3VyY2U6IHRoZSBjdXJhdGVkIGhvc3QgbWFuaWZlc3QgaW4gcWdpc19zZGsuYnJpZGdlLmhvc3QuXG4vLyBSZWdlbmVyYXRlIHdpdGggYHFnaXMtc2RrIGJyaWRnZSBnZW5lcmF0ZSAtLWhvc3RgOyBDSSBmYWlscyBvbiBkcmlmdC5cblxuaW1wb3J0IHsgUWdpc1Nka0Vycm9yIH0gZnJvbSBcIi4uL2Vycm9yc1wiO1xuXG5leHBvcnQgY29uc3QgSE9TVF9JRCA9IFwicWdpcy5ob3N0XCI7XG5leHBvcnQgY29uc3QgSE9TVF9GSU5HRVJQUklOVCA9IFwic2hhMjU2OjE2NzkwZGM4YzRkNzdlZjViNWYyMjYzNjcwMmU5MTNmM2Q2ZmI2MzI3NWQwYWUzZTVhNGNhNmU4MDAxYTlhYmRcIjtcbmV4cG9ydCBjb25zdCBIT1NUX1NDSEVNQV9WRVJTSU9OID0gMTtcblxuLyoqIEV2ZXJ5IGRlY2xhcmVkIG9wZXJhdGlvbiBpZCwgc28gYSBuYW1lIGNhbiBiZSBjaGVja2VkLCBub3QgZ3Vlc3NlZC4gKi9cbmV4cG9ydCBjb25zdCBIT1NUX09QRVJBVElPTlMgPSBbXG5cdFwiYWxnb3JpdGhtcy5kZXNjcmliZVwiLFxuXHRcImFsZ29yaXRobXMubGlzdFwiLFxuXHRcImFsZ29yaXRobXMucHJvdmlkZXJzXCIsXG5cdFwiYWxnb3JpdGhtcy5ydW5cIixcblx0XCJmaWxlcy5leHBvcnRcIixcblx0XCJsYXllcnMuZ2V0XCIsXG5cdFwibGF5ZXJzLmxpc3RcIixcblx0XCJsYXllcnMub3Blbl92ZWN0b3JcIixcblx0XCJuZXR3b3JrLmZldGNoXCIsXG5cdFwibm90aWZpY2F0aW9ucy5pbmZvXCIsXG5cdFwicHJvamVjdC5sYXllcl9pZHNcIixcblx0XCJzZXR0aW5ncy5nZXRcIixcblx0XCJzdHlsZXMuYXBwbHlcIixcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEhvc3RPcGVyYXRpb25JZCA9ICh0eXBlb2YgSE9TVF9PUEVSQVRJT05TKVtudW1iZXJdO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RJbnZva2VPcHRpb25zIHtcblx0cmVhZG9ubHkgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8qKiBUaGUgY2xpZW50IHRoaXMgbW9kdWxlIHdyYXBzOiBhbnl0aGluZyB3aXRoIGEgY29ycmVsYXRlZCBpbnZva2UuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RDbGllbnRMaWtlIHtcblx0aW52b2tlKFxuXHRcdG9wZXJhdGlvbjogc3RyaW5nLFxuXHRcdHBheWxvYWQ/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4sXG5cdFx0b3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zLFxuXHQpOiBQcm9taXNlPHVua25vd24+O1xuXHRzdWJzY3JpYmUoXG5cdFx0b3BlcmF0aW9uOiBzdHJpbmcsXG5cdFx0cGF5bG9hZD86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pixcblx0XHRoYW5kbGVycz86IEhvc3RTdHJlYW1IYW5kbGVyczx7XG5cdFx0XHRyZWFkb25seSBraW5kOiBcImRhdGFcIiB8IFwicHJvZ3Jlc3NcIiB8IFwic3RhdGVcIjtcblx0XHRcdHJlYWRvbmx5IHBheWxvYWQ6IHVua25vd247XG5cdFx0fT4sXG5cdFx0b3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zLFxuXHQpOiBQcm9taXNlPEhvc3RTdHJlYW1IYW5kbGU+O1xufVxuXG4vKiogSG93IGEgc3RyZWFtIGVuZGVkOyBgZHJvcHBlZGAgaXMgb25seSBwcmVzZW50IGZvciBhIGdhcC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG9zdFN0cmVhbVRlcm1pbmFsIHtcblx0cmVhZG9ubHkga2luZDogXCJjb21wbGV0ZVwiIHwgXCJlcnJvclwiIHwgXCJjYW5jZWxsZWRcIiB8IFwiZ2FwXCIgfCBcImRpc3Bvc2VkXCI7XG5cdHJlYWRvbmx5IG1lc3NhZ2U/OiBzdHJpbmc7XG5cdHJlYWRvbmx5IGRyb3BwZWQ/OiBudW1iZXI7XG59XG5cbi8qKiBXaGF0IGEgc3RyZWFtIHJlcG9ydHM6IHR5cGVkIGV2ZW50cywgdGhlbiBleGFjdGx5IG9uZSBlbmQuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RTdHJlYW1IYW5kbGVyczxFPiB7XG5cdHJlYWRvbmx5IG9uRXZlbnQ/OiAoZXZlbnQ6IEUpID0+IHZvaWQ7XG5cdHJlYWRvbmx5IG9uVGVybWluYWw/OiAodGVybWluYWw6IEhvc3RTdHJlYW1UZXJtaW5hbCkgPT4gdm9pZDtcbn1cblxuLyoqIEEgbGl2ZSBzdHJlYW0sIGFzIHRoZSBjYWxsZXIgaG9sZHMgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RTdHJlYW1IYW5kbGUge1xuXHRyZWFkb25seSBpZDogc3RyaW5nO1xuXHRyZWFkb25seSBjbG9zZWQ6IGJvb2xlYW47XG5cdGNsb3NlKCk6IHZvaWQ7XG59XG5cbi8qKiBBbiBhcmd1bWVudCBvciBhIHJlc3BvbnNlIHRoYXQgZG9lcyBub3QgbWF0Y2ggaXRzIGRlY2xhcmVkIHNjaGVtYS4gKi9cbmV4cG9ydCBjbGFzcyBRZ2lzU2RrSG9zdENvbnRyYWN0RXJyb3IgZXh0ZW5kcyBRZ2lzU2RrRXJyb3Ige1xuXHRwdWJsaWMgcmVhZG9ubHkgb3BlcmF0aW9uOiBzdHJpbmc7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihvcGVyYXRpb246IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG5cdFx0c3VwZXIoYG9wZXJhdGlvbiBcIiR7b3BlcmF0aW9ufVwiOiAke21lc3NhZ2V9YCwgXCJjb250cmFjdF92YWxpZGF0aW9uX2ZhaWxlZFwiKTtcblx0XHR0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcblx0fVxufVxuXG5mdW5jdGlvbiBpc1JlY29yZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGhhc09ubHkoXG5cdHZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0a2V5czogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiBib29sZWFuIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKHZhbHVlKS5ldmVyeSgoa2V5KSA9PiBrZXlzLmluY2x1ZGVzKGtleSkpO1xufVxuXG5mdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgbnVtYmVyIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWxnb3JpdGhtSW5mbyB7XG5cdHJlYWRvbmx5IGRlcHJlY2F0ZWQ6IGJvb2xlYW47XG5cdHJlYWRvbmx5IGdyb3VwOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGdyb3VwX2lkOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGhlbHA6IHN0cmluZztcblx0cmVhZG9ubHkgaWQ6IHN0cmluZztcblx0cmVhZG9ubHkgbGFiZWw6IHN0cmluZztcblx0cmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXHRyZWFkb25seSBvdXRwdXRzOiByZWFkb25seSBPdXRwdXRJbmZvW107XG5cdHJlYWRvbmx5IHBhcmFtZXRlcnM6IHJlYWRvbmx5IFBhcmFtZXRlckluZm9bXTtcblx0cmVhZG9ubHkgcHJvdmlkZXI6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbGdvcml0aG1MaXN0UmVxdWVzdCB7XG5cdHJlYWRvbmx5IGN1cnNvcj86IHN0cmluZztcblx0cmVhZG9ubHkgbGltaXQ/OiBudW1iZXI7XG5cdHJlYWRvbmx5IHByb3ZpZGVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFsZ29yaXRobVBhZ2Uge1xuXHRyZWFkb25seSBpdGVtczogcmVhZG9ubHkgQWxnb3JpdGhtU3VtbWFyeVtdO1xuXHRyZWFkb25seSBuZXh0X2N1cnNvcj86IHN0cmluZztcblx0cmVhZG9ubHkgdHJ1bmNhdGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFsZ29yaXRobVJlcXVlc3Qge1xuXHRyZWFkb25seSBhbGdvcml0aG1faWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbGdvcml0aG1TdW1tYXJ5IHtcblx0cmVhZG9ubHkgZGVwcmVjYXRlZDogYm9vbGVhbjtcblx0cmVhZG9ubHkgZ3JvdXA6IHN0cmluZztcblx0cmVhZG9ubHkgaWQ6IHN0cmluZztcblx0cmVhZG9ubHkgbGFiZWw6IHN0cmluZztcblx0cmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXHRyZWFkb25seSBwcm92aWRlcjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydFJlcXVlc3Qge1xuXHRyZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG5cdHJlYWRvbmx5IGZpbGU6IEZpbGVSZWY7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0UmVzdWx0IHtcblx0cmVhZG9ubHkgYnl0ZXNfd3JpdHRlbjogbnVtYmVyO1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmV0Y2hSZXF1ZXN0IHtcblx0cmVhZG9ubHkgYXV0aF9jb25maWc/OiBzdHJpbmc7XG5cdHJlYWRvbmx5IGJvZHk/OiBzdHJpbmc7XG5cdHJlYWRvbmx5IGhlYWRlcnM/OiByZWFkb25seSBIdHRwSGVhZGVyW107XG5cdHJlYWRvbmx5IG1ldGhvZD86IFwiR0VUXCIgfCBcIkhFQURcIiB8IFwiUE9TVFwiIHwgXCJQVVRcIiB8IFwiUEFUQ0hcIiB8IFwiREVMRVRFXCIgfCBcIk9QVElPTlNcIjtcblx0cmVhZG9ubHkgdGltZW91dF9zZWNvbmRzPzogbnVtYmVyO1xuXHRyZWFkb25seSB1cmw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWxlUmVmIHtcblx0cmVhZG9ubHkgaWQ6IHN0cmluZztcblx0cmVhZG9ubHkga2luZDogXCJmaWxlXCIgfCBcImRpcmVjdG9yeVwiO1xuXHRyZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXHRyZWFkb25seSBvcGVyYXRpb25zPzogcmVhZG9ubHkgKFwicmVhZFwiIHwgXCJ3cml0ZVwiKVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBIZWFkZXIge1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRQYWdlIHtcblx0cmVhZG9ubHkgaXRlbXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXHRyZWFkb25seSBuZXh0X2N1cnNvcj86IHN0cmluZztcblx0cmVhZG9ubHkgdHJ1bmNhdGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExheWVyUGFnZSB7XG5cdHJlYWRvbmx5IGl0ZW1zOiByZWFkb25seSBWZWN0b3JMYXllckluZm9bXTtcblx0cmVhZG9ubHkgbmV4dF9jdXJzb3I/OiBzdHJpbmc7XG5cdHJlYWRvbmx5IHRydW5jYXRlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYXllclJlcXVlc3Qge1xuXHRyZWFkb25seSBsYXllcl9pZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtGZXRjaERhdGEge1xuXHRyZWFkb25seSBiYXNlNjQ6IHN0cmluZyB8IG51bGw7XG5cdHJlYWRvbmx5IGhlYWRlcnM6IHJlYWRvbmx5IEh0dHBIZWFkZXJbXTtcblx0cmVhZG9ubHkgcmVhc29uOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHN0YXR1c19jb2RlOiBudW1iZXI7XG5cdHJlYWRvbmx5IHRleHQ6IHN0cmluZyB8IG51bGw7XG5cdHJlYWRvbmx5IHVybDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbnNJbmZvUmVxdWVzdCB7XG5cdHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuVmVjdG9yUmVxdWVzdCB7XG5cdHJlYWRvbmx5IGZpbGU6IEZpbGVSZWY7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0SW5mbyB7XG5cdHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcblx0cmVhZG9ubHkgbGFiZWw6IHN0cmluZztcblx0cmVhZG9ubHkgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VSZXF1ZXN0IHtcblx0cmVhZG9ubHkgY3Vyc29yPzogc3RyaW5nO1xuXHRyZWFkb25seSBsaW1pdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJhbWV0ZXJJbmZvIHtcblx0cmVhZG9ubHkgYWR2YW5jZWQ6IGJvb2xlYW47XG5cdHJlYWRvbmx5IGRlZmF1bHRfanNvbjogc3RyaW5nIHwgbnVsbDtcblx0cmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblx0cmVhZG9ubHkgZGVzdGluYXRpb246IGJvb2xlYW47XG5cdHJlYWRvbmx5IGV4dGVuc2lvbjogc3RyaW5nIHwgbnVsbDtcblx0cmVhZG9ubHkgaGlkZGVuOiBib29sZWFuO1xuXHRyZWFkb25seSBraW5kOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG5cdHJlYWRvbmx5IG1heGltdW06IG51bWJlciB8IG51bGw7XG5cdHJlYWRvbmx5IG1pbmltdW06IG51bWJlciB8IG51bGw7XG5cdHJlYWRvbmx5IG11bHRpcGxlOiBib29sZWFuO1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cdHJlYWRvbmx5IG51bWJlcl90eXBlOiBzdHJpbmcgfCBudWxsO1xuXHRyZWFkb25seSBvcHRpb25hbDogYm9vbGVhbjtcblx0cmVhZG9ubHkgb3B0aW9uczogcmVhZG9ubHkgc3RyaW5nW107XG5cdHJlYWRvbmx5IHJlcXVpcmVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVySW5mbyB7XG5cdHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlclBhZ2Uge1xuXHRyZWFkb25seSBpdGVtczogcmVhZG9ubHkgUHJvdmlkZXJJbmZvW107XG5cdHJlYWRvbmx5IG5leHRfY3Vyc29yPzogc3RyaW5nO1xuXHRyZWFkb25seSB0cnVuY2F0ZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVuQWxnb3JpdGhtUmVxdWVzdCB7XG5cdHJlYWRvbmx5IGFsZ29yaXRobV9pZDogc3RyaW5nO1xuXHRyZWFkb25seSBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bk91dHB1dCB7XG5cdHJlYWRvbmx5IGZpbGU/OiBGaWxlUmVmO1xuXHRyZWFkb25seSBraW5kOiBcInZlY3RvclwiIHwgXCJmaWxlXCIgfCBcInZhbHVlXCI7XG5cdHJlYWRvbmx5IGxheWVyPzogVmVjdG9yTGF5ZXJJbmZvO1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVuUmVzdWx0IHtcblx0cmVhZG9ubHkgYWxnb3JpdGhtOiBzdHJpbmc7XG5cdHJlYWRvbmx5IG91dHB1dHM6IHJlYWRvbmx5IFJ1bk91dHB1dFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNldHRpbmdzR2V0UmVxdWVzdCB7XG5cdHJlYWRvbmx5IGRlZmF1bHQ/OiBzdHJpbmcgfCBudWxsO1xuXHRyZWFkb25seSBrZXk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdHlsZXNBcHBseVJlcXVlc3Qge1xuXHRyZWFkb25seSBsYXllcl9pZDogc3RyaW5nO1xuXHRyZWFkb25seSBzdHlsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlY3RvckxheWVySW5mbyB7XG5cdHJlYWRvbmx5IGNyczogc3RyaW5nIHwgbnVsbDtcblx0cmVhZG9ubHkgZmllbGRfbmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXHRyZWFkb25seSBnZW9tZXRyeV90eXBlOiBcInBvaW50XCIgfCBcImxpbmVcIiB8IFwicG9seWdvblwiIHwgXCJub25lXCI7XG5cdHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFsZ29yaXRobUluZm8odmFsdWU6IHVua25vd24sIHN0cmljdCA9IGZhbHNlKTogdmFsdWUgaXMgQWxnb3JpdGhtSW5mbyB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJwcm92aWRlclwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcIm5hbWVcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJsYWJlbFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImdyb3VwXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiZ3JvdXBfaWRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJoZWxwXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiZGVwcmVjYXRlZFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInBhcmFtZXRlcnNcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJvdXRwdXRzXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcImRlcHJlY2F0ZWRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImRlcHJlY2F0ZWRcIl0gPT09IFwiYm9vbGVhblwiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJncm91cFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wiZ3JvdXBcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcImdyb3VwX2lkXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJncm91cF9pZFwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wiaGVscFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wiaGVscFwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wiaWRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImlkXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJsYWJlbFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wibGFiZWxcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm5hbWVcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcIm5hbWVcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm91dHB1dHNcIl0gIT09IHVuZGVmaW5lZCAmJiAhKChBcnJheS5pc0FycmF5KHZhbHVlW1wib3V0cHV0c1wiXSkgJiYgdmFsdWVbXCJvdXRwdXRzXCJdLmV2ZXJ5KChpdGVtKSA9PiBPdXRwdXRJbmZvKGl0ZW0sIHN0cmljdCkpKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wicGFyYW1ldGVyc1wiXSAhPT0gdW5kZWZpbmVkICYmICEoKEFycmF5LmlzQXJyYXkodmFsdWVbXCJwYXJhbWV0ZXJzXCJdKSAmJiB2YWx1ZVtcInBhcmFtZXRlcnNcIl0uZXZlcnkoKGl0ZW0pID0+IFBhcmFtZXRlckluZm8oaXRlbSwgc3RyaWN0KSkpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJwcm92aWRlclwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wicHJvdmlkZXJcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImRlcHJlY2F0ZWRcIiwgXCJncm91cFwiLCBcImdyb3VwX2lkXCIsIFwiaGVscFwiLCBcImlkXCIsIFwibGFiZWxcIiwgXCJuYW1lXCIsIFwib3V0cHV0c1wiLCBcInBhcmFtZXRlcnNcIiwgXCJwcm92aWRlclwiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBbGdvcml0aG1MaXN0UmVxdWVzdCh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBBbGdvcml0aG1MaXN0UmVxdWVzdCB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcImN1cnNvclwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wiY3Vyc29yXCJdID09PSBcInN0cmluZ1wiICYmIG5ldyBSZWdFeHAoXCJeKD86WzAtOV0rKSRcIikudGVzdCh2YWx1ZVtcImN1cnNvclwiXSkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcImxpbWl0XCJdICE9PSB1bmRlZmluZWQgJiYgISgoaXNTYWZlSW50ZWdlcih2YWx1ZVtcImxpbWl0XCJdKSAmJiB2YWx1ZVtcImxpbWl0XCJdID49IDEgJiYgdmFsdWVbXCJsaW1pdFwiXSA8PSAyMDApKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJwcm92aWRlclwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wicHJvdmlkZXJcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImN1cnNvclwiLCBcImxpbWl0XCIsIFwicHJvdmlkZXJcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQWxnb3JpdGhtUGFnZSh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBBbGdvcml0aG1QYWdlIHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJpdGVtc1wiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInRydW5jYXRlZFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWVbXCJpdGVtc1wiXSAhPT0gdW5kZWZpbmVkICYmICEoKEFycmF5LmlzQXJyYXkodmFsdWVbXCJpdGVtc1wiXSkgJiYgdmFsdWVbXCJpdGVtc1wiXS5ldmVyeSgoaXRlbSkgPT4gQWxnb3JpdGhtU3VtbWFyeShpdGVtLCBzdHJpY3QpKSkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm5leHRfY3Vyc29yXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJuZXh0X2N1cnNvclwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1widHJ1bmNhdGVkXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJ0cnVuY2F0ZWRcIl0gPT09IFwiYm9vbGVhblwiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJpdGVtc1wiLCBcIm5leHRfY3Vyc29yXCIsIFwidHJ1bmNhdGVkXCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFsZ29yaXRobVJlcXVlc3QodmFsdWU6IHVua25vd24sIHN0cmljdCA9IGZhbHNlKTogdmFsdWUgaXMgQWxnb3JpdGhtUmVxdWVzdCB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiYWxnb3JpdGhtX2lkXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcImFsZ29yaXRobV9pZFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wiYWxnb3JpdGhtX2lkXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJhbGdvcml0aG1faWRcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQWxnb3JpdGhtU3VtbWFyeSh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBBbGdvcml0aG1TdW1tYXJ5IHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJpZFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInByb3ZpZGVyXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwibmFtZVwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImxhYmVsXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiZ3JvdXBcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJkZXByZWNhdGVkXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcImRlcHJlY2F0ZWRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImRlcHJlY2F0ZWRcIl0gPT09IFwiYm9vbGVhblwiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJncm91cFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wiZ3JvdXBcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcImlkXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJpZFwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wibGFiZWxcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImxhYmVsXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJuYW1lXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJuYW1lXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJwcm92aWRlclwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wicHJvdmlkZXJcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImRlcHJlY2F0ZWRcIiwgXCJncm91cFwiLCBcImlkXCIsIFwibGFiZWxcIiwgXCJuYW1lXCIsIFwicHJvdmlkZXJcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRXhwb3J0UmVxdWVzdCh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBFeHBvcnRSZXF1ZXN0IHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJmaWxlXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiY29udGVudFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWVbXCJjb250ZW50XCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJjb250ZW50XCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJmaWxlXCJdICE9PSB1bmRlZmluZWQgJiYgIShGaWxlUmVmKHZhbHVlW1wiZmlsZVwiXSwgc3RyaWN0KSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHN0cmljdCAmJiAhaGFzT25seSh2YWx1ZSwgW1wiY29udGVudFwiLCBcImZpbGVcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRXhwb3J0UmVzdWx0KHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIEV4cG9ydFJlc3VsdCB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiYnl0ZXNfd3JpdHRlblwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcIm5hbWVcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wiYnl0ZXNfd3JpdHRlblwiXSAhPT0gdW5kZWZpbmVkICYmICEoaXNTYWZlSW50ZWdlcih2YWx1ZVtcImJ5dGVzX3dyaXR0ZW5cIl0pKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJuYW1lXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJuYW1lXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJieXRlc193cml0dGVuXCIsIFwibmFtZVwiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGZXRjaFJlcXVlc3QodmFsdWU6IHVua25vd24sIHN0cmljdCA9IGZhbHNlKTogdmFsdWUgaXMgRmV0Y2hSZXF1ZXN0IHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJ1cmxcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wiYXV0aF9jb25maWdcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImF1dGhfY29uZmlnXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJib2R5XCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJib2R5XCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJoZWFkZXJzXCJdICE9PSB1bmRlZmluZWQgJiYgISgoQXJyYXkuaXNBcnJheSh2YWx1ZVtcImhlYWRlcnNcIl0pICYmIHZhbHVlW1wiaGVhZGVyc1wiXS5ldmVyeSgoaXRlbSkgPT4gSHR0cEhlYWRlcihpdGVtLCBzdHJpY3QpKSkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm1ldGhvZFwiXSAhPT0gdW5kZWZpbmVkICYmICEoKHZhbHVlW1wibWV0aG9kXCJdID09PSBcIkdFVFwiIHx8IHZhbHVlW1wibWV0aG9kXCJdID09PSBcIkhFQURcIiB8fCB2YWx1ZVtcIm1ldGhvZFwiXSA9PT0gXCJQT1NUXCIgfHwgdmFsdWVbXCJtZXRob2RcIl0gPT09IFwiUFVUXCIgfHwgdmFsdWVbXCJtZXRob2RcIl0gPT09IFwiUEFUQ0hcIiB8fCB2YWx1ZVtcIm1ldGhvZFwiXSA9PT0gXCJERUxFVEVcIiB8fCB2YWx1ZVtcIm1ldGhvZFwiXSA9PT0gXCJPUFRJT05TXCIpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJ0aW1lb3V0X3NlY29uZHNcIl0gIT09IHVuZGVmaW5lZCAmJiAhKCh0eXBlb2YgdmFsdWVbXCJ0aW1lb3V0X3NlY29uZHNcIl0gPT09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlW1widGltZW91dF9zZWNvbmRzXCJdKSAmJiB2YWx1ZVtcInRpbWVvdXRfc2Vjb25kc1wiXSA+PSAwLjEgJiYgdmFsdWVbXCJ0aW1lb3V0X3NlY29uZHNcIl0gPD0gMzAwKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1widXJsXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJ1cmxcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImF1dGhfY29uZmlnXCIsIFwiYm9keVwiLCBcImhlYWRlcnNcIiwgXCJtZXRob2RcIiwgXCJ0aW1lb3V0X3NlY29uZHNcIiwgXCJ1cmxcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRmlsZVJlZih2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBGaWxlUmVmIHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJraW5kXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wiaWRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImlkXCJdID09PSBcInN0cmluZ1wiICYmIG5ldyBSZWdFeHAoXCJeKD86W2EtZjAtOV17MTYsNjR9KSRcIikudGVzdCh2YWx1ZVtcImlkXCJdKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wia2luZFwiXSAhPT0gdW5kZWZpbmVkICYmICEoKHZhbHVlW1wia2luZFwiXSA9PT0gXCJmaWxlXCIgfHwgdmFsdWVbXCJraW5kXCJdID09PSBcImRpcmVjdG9yeVwiKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wibmFtZVwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wibmFtZVwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wib3BlcmF0aW9uc1wiXSAhPT0gdW5kZWZpbmVkICYmICEoKEFycmF5LmlzQXJyYXkodmFsdWVbXCJvcGVyYXRpb25zXCJdKSAmJiB2YWx1ZVtcIm9wZXJhdGlvbnNcIl0uZXZlcnkoKGl0ZW0pID0+IChpdGVtID09PSBcInJlYWRcIiB8fCBpdGVtID09PSBcIndyaXRlXCIpKSkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImlkXCIsIFwia2luZFwiLCBcIm5hbWVcIiwgXCJvcGVyYXRpb25zXCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEh0dHBIZWFkZXIodmFsdWU6IHVua25vd24sIHN0cmljdCA9IGZhbHNlKTogdmFsdWUgaXMgSHR0cEhlYWRlciB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwibmFtZVwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInZhbHVlXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcIm5hbWVcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcIm5hbWVcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcInZhbHVlXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJ2YWx1ZVwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHN0cmljdCAmJiAhaGFzT25seSh2YWx1ZSwgW1wibmFtZVwiLCBcInZhbHVlXCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIElkUGFnZSh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBJZFBhZ2Uge1xuXHRpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcIml0ZW1zXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwidHJ1bmNhdGVkXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcIml0ZW1zXCJdICE9PSB1bmRlZmluZWQgJiYgISgoQXJyYXkuaXNBcnJheSh2YWx1ZVtcIml0ZW1zXCJdKSAmJiB2YWx1ZVtcIml0ZW1zXCJdLmV2ZXJ5KChpdGVtKSA9PiB0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJuZXh0X2N1cnNvclwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wibmV4dF9jdXJzb3JcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcInRydW5jYXRlZFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1widHJ1bmNhdGVkXCJdID09PSBcImJvb2xlYW5cIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHN0cmljdCAmJiAhaGFzT25seSh2YWx1ZSwgW1wiaXRlbXNcIiwgXCJuZXh0X2N1cnNvclwiLCBcInRydW5jYXRlZFwiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBMYXllclBhZ2UodmFsdWU6IHVua25vd24sIHN0cmljdCA9IGZhbHNlKTogdmFsdWUgaXMgTGF5ZXJQYWdlIHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJpdGVtc1wiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInRydW5jYXRlZFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWVbXCJpdGVtc1wiXSAhPT0gdW5kZWZpbmVkICYmICEoKEFycmF5LmlzQXJyYXkodmFsdWVbXCJpdGVtc1wiXSkgJiYgdmFsdWVbXCJpdGVtc1wiXS5ldmVyeSgoaXRlbSkgPT4gVmVjdG9yTGF5ZXJJbmZvKGl0ZW0sIHN0cmljdCkpKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wibmV4dF9jdXJzb3JcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcIm5leHRfY3Vyc29yXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJ0cnVuY2F0ZWRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcInRydW5jYXRlZFwiXSA9PT0gXCJib29sZWFuXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcIml0ZW1zXCIsIFwibmV4dF9jdXJzb3JcIiwgXCJ0cnVuY2F0ZWRcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTGF5ZXJSZXF1ZXN0KHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIExheWVyUmVxdWVzdCB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwibGF5ZXJfaWRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wibGF5ZXJfaWRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImxheWVyX2lkXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJsYXllcl9pZFwiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBOZXR3b3JrRmV0Y2hEYXRhKHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIE5ldHdvcmtGZXRjaERhdGEge1xuXHRpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInVybFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInN0YXR1c19jb2RlXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwicmVhc29uXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiaGVhZGVyc1wiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInRleHRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJiYXNlNjRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wiYmFzZTY0XCJdICE9PSB1bmRlZmluZWQgJiYgISgodHlwZW9mIHZhbHVlW1wiYmFzZTY0XCJdID09PSBcInN0cmluZ1wiIHx8IHZhbHVlW1wiYmFzZTY0XCJdID09PSBudWxsKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wiaGVhZGVyc1wiXSAhPT0gdW5kZWZpbmVkICYmICEoKEFycmF5LmlzQXJyYXkodmFsdWVbXCJoZWFkZXJzXCJdKSAmJiB2YWx1ZVtcImhlYWRlcnNcIl0uZXZlcnkoKGl0ZW0pID0+IEh0dHBIZWFkZXIoaXRlbSwgc3RyaWN0KSkpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJyZWFzb25cIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcInJlYXNvblwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wic3RhdHVzX2NvZGVcIl0gIT09IHVuZGVmaW5lZCAmJiAhKGlzU2FmZUludGVnZXIodmFsdWVbXCJzdGF0dXNfY29kZVwiXSkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcInRleHRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKCh0eXBlb2YgdmFsdWVbXCJ0ZXh0XCJdID09PSBcInN0cmluZ1wiIHx8IHZhbHVlW1widGV4dFwiXSA9PT0gbnVsbCkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcInVybFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1widXJsXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJiYXNlNjRcIiwgXCJoZWFkZXJzXCIsIFwicmVhc29uXCIsIFwic3RhdHVzX2NvZGVcIiwgXCJ0ZXh0XCIsIFwidXJsXCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE5vdGlmaWNhdGlvbnNJbmZvUmVxdWVzdCh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBOb3RpZmljYXRpb25zSW5mb1JlcXVlc3Qge1xuXHRpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcIm1lc3NhZ2VcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wibWVzc2FnZVwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wibWVzc2FnZVwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHN0cmljdCAmJiAhaGFzT25seSh2YWx1ZSwgW1wibWVzc2FnZVwiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPcGVuVmVjdG9yUmVxdWVzdCh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBPcGVuVmVjdG9yUmVxdWVzdCB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiZmlsZVwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWVbXCJmaWxlXCJdICE9PSB1bmRlZmluZWQgJiYgIShGaWxlUmVmKHZhbHVlW1wiZmlsZVwiXSwgc3RyaWN0KSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHN0cmljdCAmJiAhaGFzT25seSh2YWx1ZSwgW1wiZmlsZVwiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPdXRwdXRJbmZvKHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIE91dHB1dEluZm8ge1xuXHRpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcIm5hbWVcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJraW5kXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwibGFiZWxcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wia2luZFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wia2luZFwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wibGFiZWxcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImxhYmVsXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJuYW1lXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJuYW1lXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJraW5kXCIsIFwibGFiZWxcIiwgXCJuYW1lXCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFBhZ2VSZXF1ZXN0KHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIFBhZ2VSZXF1ZXN0IHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wiY3Vyc29yXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJjdXJzb3JcIl0gPT09IFwic3RyaW5nXCIgJiYgbmV3IFJlZ0V4cChcIl4oPzpbMC05XSspJFwiKS50ZXN0KHZhbHVlW1wiY3Vyc29yXCJdKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wibGltaXRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKChpc1NhZmVJbnRlZ2VyKHZhbHVlW1wibGltaXRcIl0pICYmIHZhbHVlW1wibGltaXRcIl0gPj0gMSAmJiB2YWx1ZVtcImxpbWl0XCJdIDw9IDIwMCkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImN1cnNvclwiLCBcImxpbWl0XCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFBhcmFtZXRlckluZm8odmFsdWU6IHVua25vd24sIHN0cmljdCA9IGZhbHNlKTogdmFsdWUgaXMgUGFyYW1ldGVySW5mbyB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwibmFtZVwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImtpbmRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJsYWJlbFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImRlc2NyaXB0aW9uXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwib3B0aW9uYWxcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJhZHZhbmNlZFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImhpZGRlblwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImRlc3RpbmF0aW9uXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwicmVxdWlyZWRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJkZWZhdWx0X2pzb25cIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJvcHRpb25zXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwibXVsdGlwbGVcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJudW1iZXJfdHlwZVwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcIm1pbmltdW1cIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJtYXhpbXVtXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiZXh0ZW5zaW9uXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcImFkdmFuY2VkXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJhZHZhbmNlZFwiXSA9PT0gXCJib29sZWFuXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcImRlZmF1bHRfanNvblwiXSAhPT0gdW5kZWZpbmVkICYmICEoKHR5cGVvZiB2YWx1ZVtcImRlZmF1bHRfanNvblwiXSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZVtcImRlZmF1bHRfanNvblwiXSA9PT0gbnVsbCkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcImRlc2NyaXB0aW9uXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJkZXNjcmlwdGlvblwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wiZGVzdGluYXRpb25cIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImRlc3RpbmF0aW9uXCJdID09PSBcImJvb2xlYW5cIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wiZXh0ZW5zaW9uXCJdICE9PSB1bmRlZmluZWQgJiYgISgodHlwZW9mIHZhbHVlW1wiZXh0ZW5zaW9uXCJdID09PSBcInN0cmluZ1wiIHx8IHZhbHVlW1wiZXh0ZW5zaW9uXCJdID09PSBudWxsKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wiaGlkZGVuXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJoaWRkZW5cIl0gPT09IFwiYm9vbGVhblwiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJraW5kXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJraW5kXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJsYWJlbFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wibGFiZWxcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm1heGltdW1cIl0gIT09IHVuZGVmaW5lZCAmJiAhKCh0eXBlb2YgdmFsdWVbXCJtYXhpbXVtXCJdID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZVtcIm1heGltdW1cIl0pIHx8IHZhbHVlW1wibWF4aW11bVwiXSA9PT0gbnVsbCkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm1pbmltdW1cIl0gIT09IHVuZGVmaW5lZCAmJiAhKCh0eXBlb2YgdmFsdWVbXCJtaW5pbXVtXCJdID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZVtcIm1pbmltdW1cIl0pIHx8IHZhbHVlW1wibWluaW11bVwiXSA9PT0gbnVsbCkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm11bHRpcGxlXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJtdWx0aXBsZVwiXSA9PT0gXCJib29sZWFuXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm5hbWVcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcIm5hbWVcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm51bWJlcl90eXBlXCJdICE9PSB1bmRlZmluZWQgJiYgISgodHlwZW9mIHZhbHVlW1wibnVtYmVyX3R5cGVcIl0gPT09IFwic3RyaW5nXCIgfHwgdmFsdWVbXCJudW1iZXJfdHlwZVwiXSA9PT0gbnVsbCkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm9wdGlvbmFsXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJvcHRpb25hbFwiXSA9PT0gXCJib29sZWFuXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm9wdGlvbnNcIl0gIT09IHVuZGVmaW5lZCAmJiAhKChBcnJheS5pc0FycmF5KHZhbHVlW1wib3B0aW9uc1wiXSkgJiYgdmFsdWVbXCJvcHRpb25zXCJdLmV2ZXJ5KChpdGVtKSA9PiB0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJyZXF1aXJlZFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wicmVxdWlyZWRcIl0gPT09IFwiYm9vbGVhblwiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJhZHZhbmNlZFwiLCBcImRlZmF1bHRfanNvblwiLCBcImRlc2NyaXB0aW9uXCIsIFwiZGVzdGluYXRpb25cIiwgXCJleHRlbnNpb25cIiwgXCJoaWRkZW5cIiwgXCJraW5kXCIsIFwibGFiZWxcIiwgXCJtYXhpbXVtXCIsIFwibWluaW11bVwiLCBcIm11bHRpcGxlXCIsIFwibmFtZVwiLCBcIm51bWJlcl90eXBlXCIsIFwib3B0aW9uYWxcIiwgXCJvcHRpb25zXCIsIFwicmVxdWlyZWRcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUHJvdmlkZXJJbmZvKHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIFByb3ZpZGVySW5mbyB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJsYWJlbFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInZlcnNpb25cIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wiaWRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImlkXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJsYWJlbFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wibGFiZWxcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcInZlcnNpb25cIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcInZlcnNpb25cIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImlkXCIsIFwibGFiZWxcIiwgXCJ2ZXJzaW9uXCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFByb3ZpZGVyUGFnZSh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBQcm92aWRlclBhZ2Uge1xuXHRpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcIml0ZW1zXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwidHJ1bmNhdGVkXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcIml0ZW1zXCJdICE9PSB1bmRlZmluZWQgJiYgISgoQXJyYXkuaXNBcnJheSh2YWx1ZVtcIml0ZW1zXCJdKSAmJiB2YWx1ZVtcIml0ZW1zXCJdLmV2ZXJ5KChpdGVtKSA9PiBQcm92aWRlckluZm8oaXRlbSwgc3RyaWN0KSkpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJuZXh0X2N1cnNvclwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wibmV4dF9jdXJzb3JcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcInRydW5jYXRlZFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1widHJ1bmNhdGVkXCJdID09PSBcImJvb2xlYW5cIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHN0cmljdCAmJiAhaGFzT25seSh2YWx1ZSwgW1wiaXRlbXNcIiwgXCJuZXh0X2N1cnNvclwiLCBcInRydW5jYXRlZFwiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSdW5BbGdvcml0aG1SZXF1ZXN0KHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIFJ1bkFsZ29yaXRobVJlcXVlc3Qge1xuXHRpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImFsZ29yaXRobV9pZFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInBhcmFtc1wiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWVbXCJhbGdvcml0aG1faWRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImFsZ29yaXRobV9pZFwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wicGFyYW1zXCJdICE9PSB1bmRlZmluZWQgJiYgIShpc1JlY29yZCh2YWx1ZVtcInBhcmFtc1wiXSkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImFsZ29yaXRobV9pZFwiLCBcInBhcmFtc1wiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSdW5PdXRwdXQodmFsdWU6IHVua25vd24sIHN0cmljdCA9IGZhbHNlKTogdmFsdWUgaXMgUnVuT3V0cHV0IHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJuYW1lXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwia2luZFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWVbXCJmaWxlXCJdICE9PSB1bmRlZmluZWQgJiYgIShGaWxlUmVmKHZhbHVlW1wiZmlsZVwiXSwgc3RyaWN0KSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wia2luZFwiXSAhPT0gdW5kZWZpbmVkICYmICEoKHZhbHVlW1wia2luZFwiXSA9PT0gXCJ2ZWN0b3JcIiB8fCB2YWx1ZVtcImtpbmRcIl0gPT09IFwiZmlsZVwiIHx8IHZhbHVlW1wia2luZFwiXSA9PT0gXCJ2YWx1ZVwiKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wibGF5ZXJcIl0gIT09IHVuZGVmaW5lZCAmJiAhKFZlY3RvckxheWVySW5mbyh2YWx1ZVtcImxheWVyXCJdLCBzdHJpY3QpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJuYW1lXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJuYW1lXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJ2YWx1ZVwiXSAhPT0gdW5kZWZpbmVkICYmICEoKHR5cGVvZiB2YWx1ZVtcInZhbHVlXCJdID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZVtcInZhbHVlXCJdID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZVtcInZhbHVlXCJdKSB8fCB0eXBlb2YgdmFsdWVbXCJ2YWx1ZVwiXSA9PT0gXCJib29sZWFuXCIgfHwgdmFsdWVbXCJ2YWx1ZVwiXSA9PT0gbnVsbCkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImZpbGVcIiwgXCJraW5kXCIsIFwibGF5ZXJcIiwgXCJuYW1lXCIsIFwidmFsdWVcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUnVuUmVzdWx0KHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIFJ1blJlc3VsdCB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiYWxnb3JpdGhtXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwib3V0cHV0c1wiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWVbXCJhbGdvcml0aG1cIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImFsZ29yaXRobVwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wib3V0cHV0c1wiXSAhPT0gdW5kZWZpbmVkICYmICEoKEFycmF5LmlzQXJyYXkodmFsdWVbXCJvdXRwdXRzXCJdKSAmJiB2YWx1ZVtcIm91dHB1dHNcIl0uZXZlcnkoKGl0ZW0pID0+IFJ1bk91dHB1dChpdGVtLCBzdHJpY3QpKSkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImFsZ29yaXRobVwiLCBcIm91dHB1dHNcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU2V0dGluZ3NHZXRSZXF1ZXN0KHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIFNldHRpbmdzR2V0UmVxdWVzdCB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwia2V5XCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcImRlZmF1bHRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKCh0eXBlb2YgdmFsdWVbXCJkZWZhdWx0XCJdID09PSBcInN0cmluZ1wiIHx8IHZhbHVlW1wiZGVmYXVsdFwiXSA9PT0gbnVsbCkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcImtleVwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wia2V5XCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJkZWZhdWx0XCIsIFwia2V5XCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFN0eWxlc0FwcGx5UmVxdWVzdCh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBTdHlsZXNBcHBseVJlcXVlc3Qge1xuXHRpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImxheWVyX2lkXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwic3R5bGVcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wibGF5ZXJfaWRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImxheWVyX2lkXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJzdHlsZVwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wic3R5bGVcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImxheWVyX2lkXCIsIFwic3R5bGVcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVmVjdG9yTGF5ZXJJbmZvKHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIFZlY3RvckxheWVySW5mbyB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJuYW1lXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiZ2VvbWV0cnlfdHlwZVwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImZpZWxkX25hbWVzXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiY3JzXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcImNyc1wiXSAhPT0gdW5kZWZpbmVkICYmICEoKHR5cGVvZiB2YWx1ZVtcImNyc1wiXSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZVtcImNyc1wiXSA9PT0gbnVsbCkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcImZpZWxkX25hbWVzXCJdICE9PSB1bmRlZmluZWQgJiYgISgoQXJyYXkuaXNBcnJheSh2YWx1ZVtcImZpZWxkX25hbWVzXCJdKSAmJiB2YWx1ZVtcImZpZWxkX25hbWVzXCJdLmV2ZXJ5KChpdGVtKSA9PiB0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJnZW9tZXRyeV90eXBlXCJdICE9PSB1bmRlZmluZWQgJiYgISgodmFsdWVbXCJnZW9tZXRyeV90eXBlXCJdID09PSBcInBvaW50XCIgfHwgdmFsdWVbXCJnZW9tZXRyeV90eXBlXCJdID09PSBcImxpbmVcIiB8fCB2YWx1ZVtcImdlb21ldHJ5X3R5cGVcIl0gPT09IFwicG9seWdvblwiIHx8IHZhbHVlW1wiZ2VvbWV0cnlfdHlwZVwiXSA9PT0gXCJub25lXCIpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJpZFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wiaWRcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm5hbWVcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcIm5hbWVcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImNyc1wiLCBcImZpZWxkX25hbWVzXCIsIFwiZ2VvbWV0cnlfdHlwZVwiLCBcImlkXCIsIFwibmFtZVwiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbi8qKiBPbmUgZXZlbnQgb2YgYG5ldHdvcmsuZmV0Y2hgLCBuYXJyb3dlZCBieSBpdHMga2luZC4gKi9cbmV4cG9ydCB0eXBlIE5ldHdvcmtGZXRjaEV2ZW50ID1cblx0fCB7IHJlYWRvbmx5IGtpbmQ6IFwiZGF0YVwiOyByZWFkb25seSBwYXlsb2FkOiBOZXR3b3JrRmV0Y2hEYXRhIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBOZXR3b3JrRmV0Y2hFdmVudCh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBOZXR3b3JrRmV0Y2hFdmVudCB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZS5raW5kID09PSBcImRhdGFcIikgcmV0dXJuIE5ldHdvcmtGZXRjaERhdGEodmFsdWUucGF5bG9hZCwgc3RyaWN0KTtcblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKiogRXZlcnkgb3BlcmF0aW9uIHRoaXMgc3VyZmFjZSBkZWNsYXJlcywgYXMgY2FsbGFibGUgbWV0aG9kcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG9zdE9wZXJhdGlvbnMge1xuXHRyZWFkb25seSBhbGdvcml0aG1zOiB7XG5cdFx0cmVhZG9ubHkgZGVzY3JpYmU6IChpbnB1dDogQWxnb3JpdGhtUmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PiBQcm9taXNlPEFsZ29yaXRobUluZm8+O1xuXHRcdHJlYWRvbmx5IGxpc3Q6IChpbnB1dD86IEFsZ29yaXRobUxpc3RSZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+IFByb21pc2U8QWxnb3JpdGhtUGFnZT47XG5cdFx0cmVhZG9ubHkgcHJvdmlkZXJzOiAoaW5wdXQ/OiBQYWdlUmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PiBQcm9taXNlPFByb3ZpZGVyUGFnZT47XG5cdFx0cmVhZG9ubHkgcnVuOiAoaW5wdXQ6IFJ1bkFsZ29yaXRobVJlcXVlc3QsIG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucykgPT4gUHJvbWlzZTxSdW5SZXN1bHQ+O1xuXHR9O1xuXHRyZWFkb25seSBmaWxlczoge1xuXHRcdHJlYWRvbmx5IGV4cG9ydDogKGlucHV0OiBFeHBvcnRSZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+IFByb21pc2U8RXhwb3J0UmVzdWx0Pjtcblx0fTtcblx0cmVhZG9ubHkgbGF5ZXJzOiB7XG5cdFx0cmVhZG9ubHkgZ2V0OiAoaW5wdXQ6IExheWVyUmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PiBQcm9taXNlPFZlY3RvckxheWVySW5mbz47XG5cdFx0cmVhZG9ubHkgbGlzdDogKGlucHV0PzogUGFnZVJlcXVlc3QsIG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucykgPT4gUHJvbWlzZTxMYXllclBhZ2U+O1xuXHRcdHJlYWRvbmx5IG9wZW5fdmVjdG9yOiAoaW5wdXQ6IE9wZW5WZWN0b3JSZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+IFByb21pc2U8VmVjdG9yTGF5ZXJJbmZvPjtcblx0fTtcblx0cmVhZG9ubHkgbmV0d29yazoge1xuXHRcdHJlYWRvbmx5IGZldGNoOiAoaW5wdXQ6IEZldGNoUmVxdWVzdCwgaGFuZGxlcnM6IEhvc3RTdHJlYW1IYW5kbGVyczxOZXR3b3JrRmV0Y2hFdmVudD4sIG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucykgPT4gUHJvbWlzZTxIb3N0U3RyZWFtSGFuZGxlPjtcblx0fTtcblx0cmVhZG9ubHkgbm90aWZpY2F0aW9uczoge1xuXHRcdHJlYWRvbmx5IGluZm86IChpbnB1dDogTm90aWZpY2F0aW9uc0luZm9SZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+IFByb21pc2U8bnVsbD47XG5cdH07XG5cdHJlYWRvbmx5IHByb2plY3Q6IHtcblx0XHRyZWFkb25seSBsYXllcl9pZHM6IChpbnB1dD86IFBhZ2VSZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+IFByb21pc2U8SWRQYWdlPjtcblx0fTtcblx0cmVhZG9ubHkgc2V0dGluZ3M6IHtcblx0XHRyZWFkb25seSBnZXQ6IChpbnB1dDogU2V0dGluZ3NHZXRSZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+IFByb21pc2U8c3RyaW5nIHwgbnVsbD47XG5cdH07XG5cdHJlYWRvbmx5IHN0eWxlczoge1xuXHRcdHJlYWRvbmx5IGFwcGx5OiAoaW5wdXQ6IFN0eWxlc0FwcGx5UmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PiBQcm9taXNlPG51bGw+O1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSG9zdChjbGllbnQ6IEhvc3RDbGllbnRMaWtlKTogSG9zdE9wZXJhdGlvbnMge1xuXHRyZXR1cm4ge1xuXHRcdGFsZ29yaXRobXM6IHtcblx0XHRcdGRlc2NyaWJlOiAoaW5wdXQ6IEFsZ29yaXRobVJlcXVlc3QsIG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucykgPT5cblx0XHRcdFx0Y2FsbDxBbGdvcml0aG1JbmZvPihcblx0XHRcdFx0XHRjbGllbnQsIFwiYWxnb3JpdGhtcy5kZXNjcmliZVwiLCBpbnB1dCwgb3B0aW9ucyxcblx0XHRcdFx0XHRBbGdvcml0aG1SZXF1ZXN0LFxuXHRcdFx0XHRcdEFsZ29yaXRobUluZm8sXG5cdFx0XHRcdCksXG5cdFx0XHRsaXN0OiAoaW5wdXQ/OiBBbGdvcml0aG1MaXN0UmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PlxuXHRcdFx0XHRjYWxsPEFsZ29yaXRobVBhZ2U+KFxuXHRcdFx0XHRcdGNsaWVudCwgXCJhbGdvcml0aG1zLmxpc3RcIiwgaW5wdXQsIG9wdGlvbnMsXG5cdFx0XHRcdFx0QWxnb3JpdGhtTGlzdFJlcXVlc3QsXG5cdFx0XHRcdFx0QWxnb3JpdGhtUGFnZSxcblx0XHRcdFx0KSxcblx0XHRcdHByb3ZpZGVyczogKGlucHV0PzogUGFnZVJlcXVlc3QsIG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucykgPT5cblx0XHRcdFx0Y2FsbDxQcm92aWRlclBhZ2U+KFxuXHRcdFx0XHRcdGNsaWVudCwgXCJhbGdvcml0aG1zLnByb3ZpZGVyc1wiLCBpbnB1dCwgb3B0aW9ucyxcblx0XHRcdFx0XHRQYWdlUmVxdWVzdCxcblx0XHRcdFx0XHRQcm92aWRlclBhZ2UsXG5cdFx0XHRcdCksXG5cdFx0XHRydW46IChpbnB1dDogUnVuQWxnb3JpdGhtUmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PlxuXHRcdFx0XHRjYWxsPFJ1blJlc3VsdD4oXG5cdFx0XHRcdFx0Y2xpZW50LCBcImFsZ29yaXRobXMucnVuXCIsIGlucHV0LCBvcHRpb25zLFxuXHRcdFx0XHRcdFJ1bkFsZ29yaXRobVJlcXVlc3QsXG5cdFx0XHRcdFx0UnVuUmVzdWx0LFxuXHRcdFx0XHQpLFxuXHRcdH0sXG5cdFx0ZmlsZXM6IHtcblx0XHRcdGV4cG9ydDogKGlucHV0OiBFeHBvcnRSZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+XG5cdFx0XHRcdGNhbGw8RXhwb3J0UmVzdWx0Pihcblx0XHRcdFx0XHRjbGllbnQsIFwiZmlsZXMuZXhwb3J0XCIsIGlucHV0LCBvcHRpb25zLFxuXHRcdFx0XHRcdEV4cG9ydFJlcXVlc3QsXG5cdFx0XHRcdFx0RXhwb3J0UmVzdWx0LFxuXHRcdFx0XHQpLFxuXHRcdH0sXG5cdFx0bGF5ZXJzOiB7XG5cdFx0XHRnZXQ6IChpbnB1dDogTGF5ZXJSZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+XG5cdFx0XHRcdGNhbGw8VmVjdG9yTGF5ZXJJbmZvPihcblx0XHRcdFx0XHRjbGllbnQsIFwibGF5ZXJzLmdldFwiLCBpbnB1dCwgb3B0aW9ucyxcblx0XHRcdFx0XHRMYXllclJlcXVlc3QsXG5cdFx0XHRcdFx0VmVjdG9yTGF5ZXJJbmZvLFxuXHRcdFx0XHQpLFxuXHRcdFx0bGlzdDogKGlucHV0PzogUGFnZVJlcXVlc3QsIG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucykgPT5cblx0XHRcdFx0Y2FsbDxMYXllclBhZ2U+KFxuXHRcdFx0XHRcdGNsaWVudCwgXCJsYXllcnMubGlzdFwiLCBpbnB1dCwgb3B0aW9ucyxcblx0XHRcdFx0XHRQYWdlUmVxdWVzdCxcblx0XHRcdFx0XHRMYXllclBhZ2UsXG5cdFx0XHRcdCksXG5cdFx0XHRvcGVuX3ZlY3RvcjogKGlucHV0OiBPcGVuVmVjdG9yUmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PlxuXHRcdFx0XHRjYWxsPFZlY3RvckxheWVySW5mbz4oXG5cdFx0XHRcdFx0Y2xpZW50LCBcImxheWVycy5vcGVuX3ZlY3RvclwiLCBpbnB1dCwgb3B0aW9ucyxcblx0XHRcdFx0XHRPcGVuVmVjdG9yUmVxdWVzdCxcblx0XHRcdFx0XHRWZWN0b3JMYXllckluZm8sXG5cdFx0XHRcdCksXG5cdFx0fSxcblx0XHRuZXR3b3JrOiB7XG5cdFx0XHRmZXRjaDogKGlucHV0OiBGZXRjaFJlcXVlc3QsIGhhbmRsZXJzOiBIb3N0U3RyZWFtSGFuZGxlcnM8TmV0d29ya0ZldGNoRXZlbnQ+LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+XG5cdFx0XHRcdG9wZW48TmV0d29ya0ZldGNoRXZlbnQ+KFxuXHRcdFx0XHRcdGNsaWVudCwgXCJuZXR3b3JrLmZldGNoXCIsIGlucHV0LCBoYW5kbGVycywgb3B0aW9ucyxcblx0XHRcdFx0XHRGZXRjaFJlcXVlc3QsXG5cdFx0XHRcdFx0TmV0d29ya0ZldGNoRXZlbnQsXG5cdFx0XHRcdCksXG5cdFx0fSxcblx0XHRub3RpZmljYXRpb25zOiB7XG5cdFx0XHRpbmZvOiAoaW5wdXQ6IE5vdGlmaWNhdGlvbnNJbmZvUmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PlxuXHRcdFx0XHRjYWxsPG51bGw+KFxuXHRcdFx0XHRcdGNsaWVudCwgXCJub3RpZmljYXRpb25zLmluZm9cIiwgaW5wdXQsIG9wdGlvbnMsXG5cdFx0XHRcdFx0Tm90aWZpY2F0aW9uc0luZm9SZXF1ZXN0LFxuXHRcdFx0XHRcdChjYW5kaWRhdGU6IHVua25vd24pID0+IGNhbmRpZGF0ZSA9PT0gbnVsbCxcblx0XHRcdFx0KSxcblx0XHR9LFxuXHRcdHByb2plY3Q6IHtcblx0XHRcdGxheWVyX2lkczogKGlucHV0PzogUGFnZVJlcXVlc3QsIG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucykgPT5cblx0XHRcdFx0Y2FsbDxJZFBhZ2U+KFxuXHRcdFx0XHRcdGNsaWVudCwgXCJwcm9qZWN0LmxheWVyX2lkc1wiLCBpbnB1dCwgb3B0aW9ucyxcblx0XHRcdFx0XHRQYWdlUmVxdWVzdCxcblx0XHRcdFx0XHRJZFBhZ2UsXG5cdFx0XHRcdCksXG5cdFx0fSxcblx0XHRzZXR0aW5nczoge1xuXHRcdFx0Z2V0OiAoaW5wdXQ6IFNldHRpbmdzR2V0UmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PlxuXHRcdFx0XHRjYWxsPHN0cmluZyB8IG51bGw+KFxuXHRcdFx0XHRcdGNsaWVudCwgXCJzZXR0aW5ncy5nZXRcIiwgaW5wdXQsIG9wdGlvbnMsXG5cdFx0XHRcdFx0U2V0dGluZ3NHZXRSZXF1ZXN0LFxuXHRcdFx0XHRcdChjYW5kaWRhdGU6IHVua25vd24pID0+ICh0eXBlb2YgY2FuZGlkYXRlID09PSBcInN0cmluZ1wiIHx8IGNhbmRpZGF0ZSA9PT0gbnVsbCksXG5cdFx0XHRcdCksXG5cdFx0fSxcblx0XHRzdHlsZXM6IHtcblx0XHRcdGFwcGx5OiAoaW5wdXQ6IFN0eWxlc0FwcGx5UmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PlxuXHRcdFx0XHRjYWxsPG51bGw+KFxuXHRcdFx0XHRcdGNsaWVudCwgXCJzdHlsZXMuYXBwbHlcIiwgaW5wdXQsIG9wdGlvbnMsXG5cdFx0XHRcdFx0U3R5bGVzQXBwbHlSZXF1ZXN0LFxuXHRcdFx0XHRcdChjYW5kaWRhdGU6IHVua25vd24pID0+IGNhbmRpZGF0ZSA9PT0gbnVsbCxcblx0XHRcdFx0KSxcblx0XHR9LFxuXHR9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjYWxsPFQ+KFxuXHRjbGllbnQ6IEhvc3RDbGllbnRMaWtlLFxuXHRvcGVyYXRpb246IHN0cmluZyxcblx0aW5wdXQ6IHVua25vd24sXG5cdG9wdGlvbnM6IEhvc3RJbnZva2VPcHRpb25zIHwgdW5kZWZpbmVkLFxuXHRhY2NlcHRJbnB1dDogKHZhbHVlOiB1bmtub3duLCBzdHJpY3Q/OiBib29sZWFuKSA9PiBib29sZWFuLFxuXHRhY2NlcHRPdXRwdXQ6ICh2YWx1ZTogdW5rbm93bikgPT4gYm9vbGVhbixcbik6IFByb21pc2U8VD4ge1xuXHRpZiAoaW5wdXQgIT09IHVuZGVmaW5lZCAmJiAhYWNjZXB0SW5wdXQoaW5wdXQsIHRydWUpKSB7XG5cdFx0dGhyb3cgbmV3IFFnaXNTZGtIb3N0Q29udHJhY3RFcnJvcihvcGVyYXRpb24sIFwidGhlIGFyZ3VtZW50cyBkbyBub3QgbWF0Y2ggdGhlIGRlY2xhcmVkIHJlcXVlc3RcIik7XG5cdH1cblx0Y29uc3QgdmFsdWUgPSBhd2FpdCBjbGllbnQuaW52b2tlKFxuXHRcdG9wZXJhdGlvbixcblx0XHQoaW5wdXQgPz8ge30pIGFzIFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pixcblx0XHRvcHRpb25zLFxuXHQpO1xuXHRpZiAoIWFjY2VwdE91dHB1dCh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgUWdpc1Nka0hvc3RDb250cmFjdEVycm9yKG9wZXJhdGlvbiwgXCJ0aGUgcmVzcG9uc2UgZG9lcyBub3QgbWF0Y2ggdGhlIGRlY2xhcmVkIHJlc3VsdFwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWUgYXMgVDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gb3BlbjxFIGV4dGVuZHMgeyByZWFkb25seSBraW5kOiBzdHJpbmcgfT4oXG5cdGNsaWVudDogSG9zdENsaWVudExpa2UsXG5cdG9wZXJhdGlvbjogc3RyaW5nLFxuXHRpbnB1dDogdW5rbm93bixcblx0aGFuZGxlcnM6IEhvc3RTdHJlYW1IYW5kbGVyczxFPixcblx0b3B0aW9uczogSG9zdEludm9rZU9wdGlvbnMgfCB1bmRlZmluZWQsXG5cdGFjY2VwdElucHV0OiAodmFsdWU6IHVua25vd24sIHN0cmljdD86IGJvb2xlYW4pID0+IGJvb2xlYW4sXG5cdGFjY2VwdEV2ZW50OiAodmFsdWU6IHVua25vd24pID0+IHZhbHVlIGlzIEUsXG4pOiBQcm9taXNlPEhvc3RTdHJlYW1IYW5kbGU+IHtcblx0aWYgKCFhY2NlcHRJbnB1dChpbnB1dCwgdHJ1ZSkpIHtcblx0XHR0aHJvdyBuZXcgUWdpc1Nka0hvc3RDb250cmFjdEVycm9yKG9wZXJhdGlvbiwgXCJ0aGUgYXJndW1lbnRzIGRvIG5vdCBtYXRjaCB0aGUgZGVjbGFyZWQgcmVxdWVzdFwiKTtcblx0fVxuXHQvLyBUaGUgdHlwZWQgc3RyZWFtIGVuZHMgZXhhY3RseSBvbmNlLCBsaWtlIHRoZSBzdWJzY3JpcHRpb24gdW5kZXIgaXQ6IGFcblx0Ly8gY29udHJhY3QgdmlvbGF0aW9uIGVuZHMgaXQgaGVyZSwgY2xvc2VzIHRoZSBzdWJzY3JpcHRpb24sIGFuZCB0aGVcblx0Ly8gYGRpc3Bvc2VkYCB0aGUgY2xpZW50IHRoZW4gcmVwb3J0cyBpcyBub3QgZGVsaXZlcmVkIGEgc2Vjb25kIHRpbWUuXG5cdGxldCBlbmRlZCA9IGZhbHNlO1xuXHRsZXQgdmlvbGF0ZWQgPSBmYWxzZTtcblx0bGV0IGhhbmRsZTogSG9zdFN0cmVhbUhhbmRsZSB8IG51bGwgPSBudWxsO1xuXHRjb25zdCBlbmQgPSAodGVybWluYWw6IEhvc3RTdHJlYW1UZXJtaW5hbCk6IHZvaWQgPT4ge1xuXHRcdGlmIChlbmRlZCkgcmV0dXJuO1xuXHRcdGVuZGVkID0gdHJ1ZTtcblx0XHRoYW5kbGVycy5vblRlcm1pbmFsPy4odGVybWluYWwpO1xuXHR9O1xuXHRoYW5kbGUgPSBhd2FpdCBjbGllbnQuc3Vic2NyaWJlKFxuXHRcdG9wZXJhdGlvbixcblx0XHRpbnB1dCBhcyBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4sXG5cdFx0e1xuXHRcdFx0b25FdmVudDogKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChlbmRlZCkgcmV0dXJuO1xuXHRcdFx0XHRpZiAoYWNjZXB0RXZlbnQoZXZlbnQpKSB7XG5cdFx0XHRcdFx0aGFuZGxlcnMub25FdmVudD8uKGV2ZW50KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0ZW5kKHtcblx0XHRcdFx0XHRraW5kOiBcImVycm9yXCIsXG5cdFx0XHRcdFx0bWVzc2FnZTogbmV3IFFnaXNTZGtIb3N0Q29udHJhY3RFcnJvcihcblx0XHRcdFx0XHRcdG9wZXJhdGlvbixcblx0XHRcdFx0XHRcdFwiYW4gZXZlbnQgZG9lcyBub3QgbWF0Y2ggdGhlIGRlY2xhcmVkIGV2ZW50c1wiLFxuXHRcdFx0XHRcdCkubWVzc2FnZSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChoYW5kbGUgPT09IG51bGwpIHtcblx0XHRcdFx0XHR2aW9sYXRlZCA9IHRydWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aGFuZGxlLmNsb3NlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRvblRlcm1pbmFsOiBlbmQsXG5cdFx0fSxcblx0XHRvcHRpb25zLFxuXHQpO1xuXHRpZiAodmlvbGF0ZWQpIHtcblx0XHRoYW5kbGUuY2xvc2UoKTtcblx0fVxuXHRyZXR1cm4gaGFuZGxlO1xufVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFNTyxJQUFNLFdBQVU7QUFDaEIsSUFBTSxvQkFBbUI7QUFDekIsSUFBTSx1QkFBc0I7QUFHNUIsSUFBTSxtQkFBa0I7QUFBQSxFQUM5QjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBQUE7QUErQ08sTUFBTSxrQ0FBaUMsY0FBYTtBQUFBLEVBQzFDO0FBQUEsRUFDVCxXQUFXLENBQUMsV0FBbUIsU0FBaUI7QUFBQSxJQUN0RCxNQUFNLGNBQWMsZUFBZSxXQUFXLDRCQUE0QjtBQUFBLElBQzFFLEtBQUssWUFBWTtBQUFBO0FBRW5CO0FBRUEsU0FBUyxRQUFRLENBQUMsT0FBa0Q7QUFBQSxFQUNuRSxPQUFPLE9BQU8sVUFBVSxZQUFZLFVBQVUsUUFBUSxDQUFDLE1BQU0sUUFBUSxLQUFLO0FBQUE7QUFHM0UsU0FBUyxPQUFPLENBQ2YsT0FDQSxNQUNVO0FBQUEsRUFDVixPQUFPLE9BQU8sS0FBSyxLQUFLLEVBQUUsTUFBTSxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsQ0FBQztBQUFBO0FBRzVELFNBQVMsYUFBYSxDQUFDLE9BQWlDO0FBQUEsRUFDdkQsT0FBTyxPQUFPLFVBQVUsWUFBWSxPQUFPLGNBQWMsS0FBSztBQUFBO0FBdUx4RCxTQUFTLGNBQWEsQ0FBQyxPQUFnQixTQUFTLE9BQStCO0FBQUEsRUFDckYs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QUEsSUFDQyxTQUFTLENBQUMsVUFBVTtBQUFBLE1BQ25CLElBQUk7QUFBQSxRQUFPO0FBQUEsTUFDWCxJQUFJLFlBQVksS0FBSyxHQUFHO0FBQUEsUUFDdkIsU0FBUyxVQUFVLEtBQUs7QUFBQSxRQUN4QjtBQUFBLE1BQ0Q7QUFBQSxNQUNBLElBQUk7QUFBQSxRQUNILE1BQU07QUFBQSxRQUNOLFNBQVMsSUFBSSwwQkFDWixXQUNBLDZDQUNELEVBQUU7QUFBQSxNQUNILENBQUM7QUFBQSxNQUNELElBQUksV0FBVyxNQUFNO0FBQUEsUUFDcEIsV0FBVztBQUFBLE1BQ1osRUFBTztBQUFBLFFBQ04sT0FBTyxNQUFNO0FBQUE7QUFBQTtBQUFBLElBR2YsWUFBWTtBQUFBLEVBQ2IsR0FDQSxPQUNEO0FBQUEsRUFDQSxJQUFJLFVBQVU7QUFBQSxJQUNiLE9BQU8sTUFBTTtBQUFBLEVBQ2Q7QUFBQSxFQUNBLE9BQU87QUFBQTsiLAogICJkZWJ1Z0lkIjogIjNGQzQ2NjkwMTdFNEE4NkU2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9