@archont561/qgis-sdk 0.4.0 → 0.6.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.
- package/README.md +31 -32
- package/dist/bridge.d.ts +2 -2
- package/dist/bridge.js +5 -9
- package/dist/host.d.ts +2 -2
- package/dist/host.js +27 -3
- package/dist/index.d.ts +43 -37
- package/dist/index.js +114 -432
- package/dist/react.d.ts +38 -58
- package/dist/react.js +41 -128
- package/dist/shared/chunk-72sjmz60.js +902 -0
- package/dist/shared/{chunk-khemhx86.d.ts → chunk-7tgzmz0m.d.ts} +98 -4
- package/dist/shared/{chunk-wtv4vt4q.d.ts → chunk-8c12nwme.d.ts} +51 -71
- package/dist/shared/chunk-b11znjn6.d.ts +342 -0
- package/dist/shared/{chunk-tmca1ynt.d.ts → chunk-nwz8n14x.d.ts} +72 -4
- package/dist/shared/chunk-stre69mw.js +777 -0
- package/dist/shared/chunk-xg5ntw1c.js +414 -0
- package/dist/svelte.d.ts +75 -0
- package/dist/svelte.js +70 -0
- package/dist/testing.d.ts +10 -4
- package/dist/testing.js +7 -4
- package/dist/vue.d.ts +106 -0
- package/dist/vue.js +91 -0
- package/package.json +23 -5
- package/dist/shared/chunk-8gawbn19.js +0 -433
- package/dist/shared/chunk-jjx14tgd.d.ts +0 -55
- package/dist/shared/chunk-vqyymknv.js +0 -414
|
@@ -1,414 +0,0 @@
|
|
|
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:f96bdf1046434de3c5eae01efb34c8ad2bcd1cf241a3dc42f6c4b613dc7d7d6f";
|
|
8
|
-
var HOST_SCHEMA_VERSION2 = 1;
|
|
9
|
-
var HOST_OPERATIONS2 = [
|
|
10
|
-
"files.export",
|
|
11
|
-
"layers.get",
|
|
12
|
-
"layers.list",
|
|
13
|
-
"layers.open_vector",
|
|
14
|
-
"network.fetch",
|
|
15
|
-
"notifications.info",
|
|
16
|
-
"project.layer_ids",
|
|
17
|
-
"settings.get",
|
|
18
|
-
"styles.apply"
|
|
19
|
-
];
|
|
20
|
-
|
|
21
|
-
class QgisSdkHostContractError2 extends QgisSdkError2 {
|
|
22
|
-
operation;
|
|
23
|
-
constructor(operation, message) {
|
|
24
|
-
super(`operation "${operation}": ${message}`, "contract_validation_failed");
|
|
25
|
-
this.operation = operation;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
function isRecord(value) {
|
|
29
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
30
|
-
}
|
|
31
|
-
function hasOnly(value, keys) {
|
|
32
|
-
return Object.keys(value).every((key) => keys.includes(key));
|
|
33
|
-
}
|
|
34
|
-
function isSafeInteger(value) {
|
|
35
|
-
return typeof value === "number" && Number.isSafeInteger(value);
|
|
36
|
-
}
|
|
37
|
-
function ExportRequest2(value, strict = false) {
|
|
38
|
-
if (!isRecord(value))
|
|
39
|
-
return false;
|
|
40
|
-
if (!("file" in value))
|
|
41
|
-
return false;
|
|
42
|
-
if (!("content" in value))
|
|
43
|
-
return false;
|
|
44
|
-
if (value["content"] !== undefined && !(typeof value["content"] === "string")) {
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
if (value["file"] !== undefined && !FileRef2(value["file"], strict)) {
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
if (strict && !hasOnly(value, ["content", "file"]))
|
|
51
|
-
return false;
|
|
52
|
-
return true;
|
|
53
|
-
}
|
|
54
|
-
function ExportResult2(value, strict = false) {
|
|
55
|
-
if (!isRecord(value))
|
|
56
|
-
return false;
|
|
57
|
-
if (!("bytes_written" in value))
|
|
58
|
-
return false;
|
|
59
|
-
if (!("name" in value))
|
|
60
|
-
return false;
|
|
61
|
-
if (value["bytes_written"] !== undefined && !isSafeInteger(value["bytes_written"])) {
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
if (strict && !hasOnly(value, ["bytes_written", "name"]))
|
|
68
|
-
return false;
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
function FetchRequest2(value, strict = false) {
|
|
72
|
-
if (!isRecord(value))
|
|
73
|
-
return false;
|
|
74
|
-
if (!("url" in value))
|
|
75
|
-
return false;
|
|
76
|
-
if (value["auth_config"] !== undefined && !(typeof value["auth_config"] === "string")) {
|
|
77
|
-
return false;
|
|
78
|
-
}
|
|
79
|
-
if (value["body"] !== undefined && !(typeof value["body"] === "string")) {
|
|
80
|
-
return false;
|
|
81
|
-
}
|
|
82
|
-
if (value["headers"] !== undefined && !(Array.isArray(value["headers"]) && value["headers"].every((item) => HttpHeader2(item, strict)))) {
|
|
83
|
-
return false;
|
|
84
|
-
}
|
|
85
|
-
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")) {
|
|
86
|
-
return false;
|
|
87
|
-
}
|
|
88
|
-
if (value["timeout_seconds"] !== undefined && !(typeof value["timeout_seconds"] === "number" && Number.isFinite(value["timeout_seconds"]) && value["timeout_seconds"] >= 0.1 && value["timeout_seconds"] <= 300)) {
|
|
89
|
-
return false;
|
|
90
|
-
}
|
|
91
|
-
if (value["url"] !== undefined && !(typeof value["url"] === "string")) {
|
|
92
|
-
return false;
|
|
93
|
-
}
|
|
94
|
-
if (strict && !hasOnly(value, ["auth_config", "body", "headers", "method", "timeout_seconds", "url"]))
|
|
95
|
-
return false;
|
|
96
|
-
return true;
|
|
97
|
-
}
|
|
98
|
-
function FileRef2(value, strict = false) {
|
|
99
|
-
if (!isRecord(value))
|
|
100
|
-
return false;
|
|
101
|
-
if (!("kind" in value))
|
|
102
|
-
return false;
|
|
103
|
-
if (!("id" in value))
|
|
104
|
-
return false;
|
|
105
|
-
if (value["id"] !== undefined && !(typeof value["id"] === "string" && new RegExp("^(?:[a-f0-9]{16,64})$").test(value["id"]))) {
|
|
106
|
-
return false;
|
|
107
|
-
}
|
|
108
|
-
if (value["kind"] !== undefined && !(value["kind"] === "file")) {
|
|
109
|
-
return false;
|
|
110
|
-
}
|
|
111
|
-
if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
|
|
112
|
-
return false;
|
|
113
|
-
}
|
|
114
|
-
if (value["operations"] !== undefined && !(Array.isArray(value["operations"]) && value["operations"].every((item) => item === "read" || item === "write"))) {
|
|
115
|
-
return false;
|
|
116
|
-
}
|
|
117
|
-
if (strict && !hasOnly(value, ["id", "kind", "name", "operations"]))
|
|
118
|
-
return false;
|
|
119
|
-
return true;
|
|
120
|
-
}
|
|
121
|
-
function HttpHeader2(value, strict = false) {
|
|
122
|
-
if (!isRecord(value))
|
|
123
|
-
return false;
|
|
124
|
-
if (!("name" in value))
|
|
125
|
-
return false;
|
|
126
|
-
if (!("value" in value))
|
|
127
|
-
return false;
|
|
128
|
-
if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
|
|
129
|
-
return false;
|
|
130
|
-
}
|
|
131
|
-
if (value["value"] !== undefined && !(typeof value["value"] === "string")) {
|
|
132
|
-
return false;
|
|
133
|
-
}
|
|
134
|
-
if (strict && !hasOnly(value, ["name", "value"]))
|
|
135
|
-
return false;
|
|
136
|
-
return true;
|
|
137
|
-
}
|
|
138
|
-
function IdPage2(value, strict = false) {
|
|
139
|
-
if (!isRecord(value))
|
|
140
|
-
return false;
|
|
141
|
-
if (!("items" in value))
|
|
142
|
-
return false;
|
|
143
|
-
if (!("truncated" in value))
|
|
144
|
-
return false;
|
|
145
|
-
if (value["items"] !== undefined && !(Array.isArray(value["items"]) && value["items"].every((item) => typeof item === "string"))) {
|
|
146
|
-
return false;
|
|
147
|
-
}
|
|
148
|
-
if (value["next_cursor"] !== undefined && !(typeof value["next_cursor"] === "string")) {
|
|
149
|
-
return false;
|
|
150
|
-
}
|
|
151
|
-
if (value["truncated"] !== undefined && !(typeof value["truncated"] === "boolean")) {
|
|
152
|
-
return false;
|
|
153
|
-
}
|
|
154
|
-
if (strict && !hasOnly(value, ["items", "next_cursor", "truncated"]))
|
|
155
|
-
return false;
|
|
156
|
-
return true;
|
|
157
|
-
}
|
|
158
|
-
function LayerPage2(value, strict = false) {
|
|
159
|
-
if (!isRecord(value))
|
|
160
|
-
return false;
|
|
161
|
-
if (!("items" in value))
|
|
162
|
-
return false;
|
|
163
|
-
if (!("truncated" in value))
|
|
164
|
-
return false;
|
|
165
|
-
if (value["items"] !== undefined && !(Array.isArray(value["items"]) && value["items"].every((item) => VectorLayerInfo2(item, strict)))) {
|
|
166
|
-
return false;
|
|
167
|
-
}
|
|
168
|
-
if (value["next_cursor"] !== undefined && !(typeof value["next_cursor"] === "string")) {
|
|
169
|
-
return false;
|
|
170
|
-
}
|
|
171
|
-
if (value["truncated"] !== undefined && !(typeof value["truncated"] === "boolean")) {
|
|
172
|
-
return false;
|
|
173
|
-
}
|
|
174
|
-
if (strict && !hasOnly(value, ["items", "next_cursor", "truncated"]))
|
|
175
|
-
return false;
|
|
176
|
-
return true;
|
|
177
|
-
}
|
|
178
|
-
function LayerRequest2(value, strict = false) {
|
|
179
|
-
if (!isRecord(value))
|
|
180
|
-
return false;
|
|
181
|
-
if (!("layer_id" in value))
|
|
182
|
-
return false;
|
|
183
|
-
if (value["layer_id"] !== undefined && !(typeof value["layer_id"] === "string")) {
|
|
184
|
-
return false;
|
|
185
|
-
}
|
|
186
|
-
if (strict && !hasOnly(value, ["layer_id"]))
|
|
187
|
-
return false;
|
|
188
|
-
return true;
|
|
189
|
-
}
|
|
190
|
-
function NetworkFetchData2(value, strict = false) {
|
|
191
|
-
if (!isRecord(value))
|
|
192
|
-
return false;
|
|
193
|
-
if (!("url" in value))
|
|
194
|
-
return false;
|
|
195
|
-
if (!("status_code" in value))
|
|
196
|
-
return false;
|
|
197
|
-
if (!("reason" in value))
|
|
198
|
-
return false;
|
|
199
|
-
if (!("headers" in value))
|
|
200
|
-
return false;
|
|
201
|
-
if (!("text" in value))
|
|
202
|
-
return false;
|
|
203
|
-
if (!("base64" in value))
|
|
204
|
-
return false;
|
|
205
|
-
if (value["base64"] !== undefined && !(typeof value["base64"] === "string" || value["base64"] === null)) {
|
|
206
|
-
return false;
|
|
207
|
-
}
|
|
208
|
-
if (value["headers"] !== undefined && !(Array.isArray(value["headers"]) && value["headers"].every((item) => HttpHeader2(item, strict)))) {
|
|
209
|
-
return false;
|
|
210
|
-
}
|
|
211
|
-
if (value["reason"] !== undefined && !(typeof value["reason"] === "string")) {
|
|
212
|
-
return false;
|
|
213
|
-
}
|
|
214
|
-
if (value["status_code"] !== undefined && !isSafeInteger(value["status_code"])) {
|
|
215
|
-
return false;
|
|
216
|
-
}
|
|
217
|
-
if (value["text"] !== undefined && !(typeof value["text"] === "string" || value["text"] === null)) {
|
|
218
|
-
return false;
|
|
219
|
-
}
|
|
220
|
-
if (value["url"] !== undefined && !(typeof value["url"] === "string")) {
|
|
221
|
-
return false;
|
|
222
|
-
}
|
|
223
|
-
if (strict && !hasOnly(value, ["base64", "headers", "reason", "status_code", "text", "url"]))
|
|
224
|
-
return false;
|
|
225
|
-
return true;
|
|
226
|
-
}
|
|
227
|
-
function NotificationsInfoRequest2(value, strict = false) {
|
|
228
|
-
if (!isRecord(value))
|
|
229
|
-
return false;
|
|
230
|
-
if (!("message" in value))
|
|
231
|
-
return false;
|
|
232
|
-
if (value["message"] !== undefined && !(typeof value["message"] === "string")) {
|
|
233
|
-
return false;
|
|
234
|
-
}
|
|
235
|
-
if (strict && !hasOnly(value, ["message"]))
|
|
236
|
-
return false;
|
|
237
|
-
return true;
|
|
238
|
-
}
|
|
239
|
-
function OpenVectorRequest2(value, strict = false) {
|
|
240
|
-
if (!isRecord(value))
|
|
241
|
-
return false;
|
|
242
|
-
if (!("file" in value))
|
|
243
|
-
return false;
|
|
244
|
-
if (value["file"] !== undefined && !FileRef2(value["file"], strict)) {
|
|
245
|
-
return false;
|
|
246
|
-
}
|
|
247
|
-
if (strict && !hasOnly(value, ["file"]))
|
|
248
|
-
return false;
|
|
249
|
-
return true;
|
|
250
|
-
}
|
|
251
|
-
function PageRequest2(value, strict = false) {
|
|
252
|
-
if (!isRecord(value))
|
|
253
|
-
return false;
|
|
254
|
-
if (value["cursor"] !== undefined && !(typeof value["cursor"] === "string" && new RegExp("^(?:[0-9]+)$").test(value["cursor"]))) {
|
|
255
|
-
return false;
|
|
256
|
-
}
|
|
257
|
-
if (value["limit"] !== undefined && !(isSafeInteger(value["limit"]) && value["limit"] >= 1 && value["limit"] <= 200)) {
|
|
258
|
-
return false;
|
|
259
|
-
}
|
|
260
|
-
if (strict && !hasOnly(value, ["cursor", "limit"]))
|
|
261
|
-
return false;
|
|
262
|
-
return true;
|
|
263
|
-
}
|
|
264
|
-
function SettingsGetRequest2(value, strict = false) {
|
|
265
|
-
if (!isRecord(value))
|
|
266
|
-
return false;
|
|
267
|
-
if (!("key" in value))
|
|
268
|
-
return false;
|
|
269
|
-
if (value["default"] !== undefined && !(typeof value["default"] === "string" || value["default"] === null)) {
|
|
270
|
-
return false;
|
|
271
|
-
}
|
|
272
|
-
if (value["key"] !== undefined && !(typeof value["key"] === "string")) {
|
|
273
|
-
return false;
|
|
274
|
-
}
|
|
275
|
-
if (strict && !hasOnly(value, ["default", "key"]))
|
|
276
|
-
return false;
|
|
277
|
-
return true;
|
|
278
|
-
}
|
|
279
|
-
function StylesApplyRequest2(value, strict = false) {
|
|
280
|
-
if (!isRecord(value))
|
|
281
|
-
return false;
|
|
282
|
-
if (!("layer_id" in value))
|
|
283
|
-
return false;
|
|
284
|
-
if (!("style" in value))
|
|
285
|
-
return false;
|
|
286
|
-
if (value["layer_id"] !== undefined && !(typeof value["layer_id"] === "string")) {
|
|
287
|
-
return false;
|
|
288
|
-
}
|
|
289
|
-
if (value["style"] !== undefined && !(typeof value["style"] === "string")) {
|
|
290
|
-
return false;
|
|
291
|
-
}
|
|
292
|
-
if (strict && !hasOnly(value, ["layer_id", "style"]))
|
|
293
|
-
return false;
|
|
294
|
-
return true;
|
|
295
|
-
}
|
|
296
|
-
function VectorLayerInfo2(value, strict = false) {
|
|
297
|
-
if (!isRecord(value))
|
|
298
|
-
return false;
|
|
299
|
-
if (!("id" in value))
|
|
300
|
-
return false;
|
|
301
|
-
if (!("name" in value))
|
|
302
|
-
return false;
|
|
303
|
-
if (!("geometry_type" in value))
|
|
304
|
-
return false;
|
|
305
|
-
if (!("field_names" in value))
|
|
306
|
-
return false;
|
|
307
|
-
if (!("crs" in value))
|
|
308
|
-
return false;
|
|
309
|
-
if (value["crs"] !== undefined && !(typeof value["crs"] === "string" || value["crs"] === null)) {
|
|
310
|
-
return false;
|
|
311
|
-
}
|
|
312
|
-
if (value["field_names"] !== undefined && !(Array.isArray(value["field_names"]) && value["field_names"].every((item) => typeof item === "string"))) {
|
|
313
|
-
return false;
|
|
314
|
-
}
|
|
315
|
-
if (value["geometry_type"] !== undefined && !(value["geometry_type"] === "point" || value["geometry_type"] === "line" || value["geometry_type"] === "polygon" || value["geometry_type"] === "none")) {
|
|
316
|
-
return false;
|
|
317
|
-
}
|
|
318
|
-
if (value["id"] !== undefined && !(typeof value["id"] === "string")) {
|
|
319
|
-
return false;
|
|
320
|
-
}
|
|
321
|
-
if (value["name"] !== undefined && !(typeof value["name"] === "string")) {
|
|
322
|
-
return false;
|
|
323
|
-
}
|
|
324
|
-
if (strict && !hasOnly(value, ["crs", "field_names", "geometry_type", "id", "name"]))
|
|
325
|
-
return false;
|
|
326
|
-
return true;
|
|
327
|
-
}
|
|
328
|
-
function NetworkFetchEvent2(value, strict = false) {
|
|
329
|
-
if (!isRecord(value))
|
|
330
|
-
return false;
|
|
331
|
-
if (value.kind === "data")
|
|
332
|
-
return NetworkFetchData2(value.payload, strict);
|
|
333
|
-
return false;
|
|
334
|
-
}
|
|
335
|
-
function createHost2(client) {
|
|
336
|
-
return {
|
|
337
|
-
files: {
|
|
338
|
-
export: (input, options) => call(client, "files.export", input, options, ExportRequest2, ExportResult2)
|
|
339
|
-
},
|
|
340
|
-
layers: {
|
|
341
|
-
get: (input, options) => call(client, "layers.get", input, options, LayerRequest2, VectorLayerInfo2),
|
|
342
|
-
list: (input, options) => call(client, "layers.list", input, options, PageRequest2, LayerPage2),
|
|
343
|
-
open_vector: (input, options) => call(client, "layers.open_vector", input, options, OpenVectorRequest2, VectorLayerInfo2)
|
|
344
|
-
},
|
|
345
|
-
network: {
|
|
346
|
-
fetch: (input, handlers, options) => open(client, "network.fetch", input, handlers, options, FetchRequest2, NetworkFetchEvent2)
|
|
347
|
-
},
|
|
348
|
-
notifications: {
|
|
349
|
-
info: (input, options) => call(client, "notifications.info", input, options, NotificationsInfoRequest2, (candidate) => candidate === null)
|
|
350
|
-
},
|
|
351
|
-
project: {
|
|
352
|
-
layer_ids: (input, options) => call(client, "project.layer_ids", input, options, PageRequest2, IdPage2)
|
|
353
|
-
},
|
|
354
|
-
settings: {
|
|
355
|
-
get: (input, options) => call(client, "settings.get", input, options, SettingsGetRequest2, (candidate) => typeof candidate === "string" || candidate === null)
|
|
356
|
-
},
|
|
357
|
-
styles: {
|
|
358
|
-
apply: (input, options) => call(client, "styles.apply", input, options, StylesApplyRequest2, (candidate) => candidate === null)
|
|
359
|
-
}
|
|
360
|
-
};
|
|
361
|
-
}
|
|
362
|
-
async function call(client, operation, input, options, acceptInput, acceptOutput) {
|
|
363
|
-
if (input !== undefined && !acceptInput(input, true)) {
|
|
364
|
-
throw new QgisSdkHostContractError2(operation, "the arguments do not match the declared request");
|
|
365
|
-
}
|
|
366
|
-
const value = await client.invoke(operation, input ?? {}, options);
|
|
367
|
-
if (!acceptOutput(value)) {
|
|
368
|
-
throw new QgisSdkHostContractError2(operation, "the response does not match the declared result");
|
|
369
|
-
}
|
|
370
|
-
return value;
|
|
371
|
-
}
|
|
372
|
-
async function open(client, operation, input, handlers, options, acceptInput, acceptEvent) {
|
|
373
|
-
if (!acceptInput(input, true)) {
|
|
374
|
-
throw new QgisSdkHostContractError2(operation, "the arguments do not match the declared request");
|
|
375
|
-
}
|
|
376
|
-
let ended = false;
|
|
377
|
-
let violated = false;
|
|
378
|
-
let handle = null;
|
|
379
|
-
const end = (terminal) => {
|
|
380
|
-
if (ended)
|
|
381
|
-
return;
|
|
382
|
-
ended = true;
|
|
383
|
-
handlers.onTerminal?.(terminal);
|
|
384
|
-
};
|
|
385
|
-
handle = await client.subscribe(operation, input, {
|
|
386
|
-
onEvent: (event) => {
|
|
387
|
-
if (ended)
|
|
388
|
-
return;
|
|
389
|
-
if (acceptEvent(event)) {
|
|
390
|
-
handlers.onEvent?.(event);
|
|
391
|
-
return;
|
|
392
|
-
}
|
|
393
|
-
end({
|
|
394
|
-
kind: "error",
|
|
395
|
-
message: new QgisSdkHostContractError2(operation, "an event does not match the declared events").message
|
|
396
|
-
});
|
|
397
|
-
if (handle === null) {
|
|
398
|
-
violated = true;
|
|
399
|
-
} else {
|
|
400
|
-
handle.close();
|
|
401
|
-
}
|
|
402
|
-
},
|
|
403
|
-
onTerminal: end
|
|
404
|
-
}, options);
|
|
405
|
-
if (violated) {
|
|
406
|
-
handle.close();
|
|
407
|
-
}
|
|
408
|
-
return handle;
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
export { HOST_ID2, HOST_FINGERPRINT2, HOST_SCHEMA_VERSION2, HOST_OPERATIONS2, QgisSdkHostContractError2, ExportRequest2, ExportResult2, FetchRequest2, FileRef2, HttpHeader2, IdPage2, LayerPage2, LayerRequest2, NetworkFetchData2, NotificationsInfoRequest2, OpenVectorRequest2, PageRequest2, SettingsGetRequest2, StylesApplyRequest2, VectorLayerInfo2, NetworkFetchEvent2, createHost2 };
|
|
412
|
-
|
|
413
|
-
//# debugId=14FA6E1BACC48E4964756E2164756E21
|
|
414
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2dlbmVyYXRlZC9ob3N0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8vIEdlbmVyYXRlZCBieSBxZ2lzLXNkay4gRG8gbm90IGVkaXQuXG4vLyBTb3VyY2U6IHRoZSBjdXJhdGVkIGhvc3QgbWFuaWZlc3QgaW4gcWdpc19zZGsuYnJpZGdlLmhvc3QuXG4vLyBSZWdlbmVyYXRlIHdpdGggYHFnaXMtc2RrIGJyaWRnZSBnZW5lcmF0ZSAtLWhvc3RgOyBDSSBmYWlscyBvbiBkcmlmdC5cblxuaW1wb3J0IHsgUWdpc1Nka0Vycm9yIH0gZnJvbSBcIi4uL2Vycm9yc1wiO1xuXG5leHBvcnQgY29uc3QgSE9TVF9JRCA9IFwicWdpcy5ob3N0XCI7XG5leHBvcnQgY29uc3QgSE9TVF9GSU5HRVJQUklOVCA9IFwic2hhMjU2OmY5NmJkZjEwNDY0MzRkZTNjNWVhZTAxZWZiMzRjOGFkMmJjZDFjZjI0MWEzZGM0MmY2YzRiNjEzZGM3ZDdkNmZcIjtcbmV4cG9ydCBjb25zdCBIT1NUX1NDSEVNQV9WRVJTSU9OID0gMTtcblxuLyoqIEV2ZXJ5IGRlY2xhcmVkIG9wZXJhdGlvbiBpZCwgc28gYSBuYW1lIGNhbiBiZSBjaGVja2VkLCBub3QgZ3Vlc3NlZC4gKi9cbmV4cG9ydCBjb25zdCBIT1NUX09QRVJBVElPTlMgPSBbXG5cdFwiZmlsZXMuZXhwb3J0XCIsXG5cdFwibGF5ZXJzLmdldFwiLFxuXHRcImxheWVycy5saXN0XCIsXG5cdFwibGF5ZXJzLm9wZW5fdmVjdG9yXCIsXG5cdFwibmV0d29yay5mZXRjaFwiLFxuXHRcIm5vdGlmaWNhdGlvbnMuaW5mb1wiLFxuXHRcInByb2plY3QubGF5ZXJfaWRzXCIsXG5cdFwic2V0dGluZ3MuZ2V0XCIsXG5cdFwic3R5bGVzLmFwcGx5XCIsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBIb3N0T3BlcmF0aW9uSWQgPSAodHlwZW9mIEhPU1RfT1BFUkFUSU9OUylbbnVtYmVyXTtcblxuZXhwb3J0IGludGVyZmFjZSBIb3N0SW52b2tlT3B0aW9ucyB7XG5cdHJlYWRvbmx5IHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG4vKiogVGhlIGNsaWVudCB0aGlzIG1vZHVsZSB3cmFwczogYW55dGhpbmcgd2l0aCBhIGNvcnJlbGF0ZWQgaW52b2tlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3N0Q2xpZW50TGlrZSB7XG5cdGludm9rZShcblx0XHRvcGVyYXRpb246IHN0cmluZyxcblx0XHRwYXlsb2FkPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+LFxuXHRcdG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucyxcblx0KTogUHJvbWlzZTx1bmtub3duPjtcblx0c3Vic2NyaWJlKFxuXHRcdG9wZXJhdGlvbjogc3RyaW5nLFxuXHRcdHBheWxvYWQ/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4sXG5cdFx0aGFuZGxlcnM/OiBIb3N0U3RyZWFtSGFuZGxlcnM8e1xuXHRcdFx0cmVhZG9ubHkga2luZDogXCJkYXRhXCIgfCBcInByb2dyZXNzXCIgfCBcInN0YXRlXCI7XG5cdFx0XHRyZWFkb25seSBwYXlsb2FkOiB1bmtub3duO1xuXHRcdH0+LFxuXHRcdG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucyxcblx0KTogUHJvbWlzZTxIb3N0U3RyZWFtSGFuZGxlPjtcbn1cblxuLyoqIEhvdyBhIHN0cmVhbSBlbmRlZDsgYGRyb3BwZWRgIGlzIG9ubHkgcHJlc2VudCBmb3IgYSBnYXAuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RTdHJlYW1UZXJtaW5hbCB7XG5cdHJlYWRvbmx5IGtpbmQ6IFwiY29tcGxldGVcIiB8IFwiZXJyb3JcIiB8IFwiY2FuY2VsbGVkXCIgfCBcImdhcFwiIHwgXCJkaXNwb3NlZFwiO1xuXHRyZWFkb25seSBtZXNzYWdlPzogc3RyaW5nO1xuXHRyZWFkb25seSBkcm9wcGVkPzogbnVtYmVyO1xufVxuXG4vKiogV2hhdCBhIHN0cmVhbSByZXBvcnRzOiB0eXBlZCBldmVudHMsIHRoZW4gZXhhY3RseSBvbmUgZW5kLiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3N0U3RyZWFtSGFuZGxlcnM8RT4ge1xuXHRyZWFkb25seSBvbkV2ZW50PzogKGV2ZW50OiBFKSA9PiB2b2lkO1xuXHRyZWFkb25seSBvblRlcm1pbmFsPzogKHRlcm1pbmFsOiBIb3N0U3RyZWFtVGVybWluYWwpID0+IHZvaWQ7XG59XG5cbi8qKiBBIGxpdmUgc3RyZWFtLCBhcyB0aGUgY2FsbGVyIGhvbGRzIGl0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3N0U3RyZWFtSGFuZGxlIHtcblx0cmVhZG9ubHkgaWQ6IHN0cmluZztcblx0cmVhZG9ubHkgY2xvc2VkOiBib29sZWFuO1xuXHRjbG9zZSgpOiB2b2lkO1xufVxuXG4vKiogQW4gYXJndW1lbnQgb3IgYSByZXNwb25zZSB0aGF0IGRvZXMgbm90IG1hdGNoIGl0cyBkZWNsYXJlZCBzY2hlbWEuICovXG5leHBvcnQgY2xhc3MgUWdpc1Nka0hvc3RDb250cmFjdEVycm9yIGV4dGVuZHMgUWdpc1Nka0Vycm9yIHtcblx0cHVibGljIHJlYWRvbmx5IG9wZXJhdGlvbjogc3RyaW5nO1xuXHRwdWJsaWMgY29uc3RydWN0b3Iob3BlcmF0aW9uOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuXHRcdHN1cGVyKGBvcGVyYXRpb24gXCIke29wZXJhdGlvbn1cIjogJHttZXNzYWdlfWAsIFwiY29udHJhY3RfdmFsaWRhdGlvbl9mYWlsZWRcIik7XG5cdFx0dGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247XG5cdH1cbn1cblxuZnVuY3Rpb24gaXNSZWNvcmQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBoYXNPbmx5KFxuXHR2YWx1ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGtleXM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogYm9vbGVhbiB7XG5cdHJldHVybiBPYmplY3Qua2V5cyh2YWx1ZSkuZXZlcnkoKGtleSkgPT4ga2V5cy5pbmNsdWRlcyhrZXkpKTtcbn1cblxuZnVuY3Rpb24gaXNTYWZlSW50ZWdlcih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bWJlciB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzU2FmZUludGVnZXIodmFsdWUpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydFJlcXVlc3Qge1xuXHRyZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG5cdHJlYWRvbmx5IGZpbGU6IEZpbGVSZWY7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0UmVzdWx0IHtcblx0cmVhZG9ubHkgYnl0ZXNfd3JpdHRlbjogbnVtYmVyO1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmV0Y2hSZXF1ZXN0IHtcblx0cmVhZG9ubHkgYXV0aF9jb25maWc/OiBzdHJpbmc7XG5cdHJlYWRvbmx5IGJvZHk/OiBzdHJpbmc7XG5cdHJlYWRvbmx5IGhlYWRlcnM/OiByZWFkb25seSBIdHRwSGVhZGVyW107XG5cdHJlYWRvbmx5IG1ldGhvZD86IFwiR0VUXCIgfCBcIkhFQURcIiB8IFwiUE9TVFwiIHwgXCJQVVRcIiB8IFwiUEFUQ0hcIiB8IFwiREVMRVRFXCIgfCBcIk9QVElPTlNcIjtcblx0cmVhZG9ubHkgdGltZW91dF9zZWNvbmRzPzogbnVtYmVyO1xuXHRyZWFkb25seSB1cmw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWxlUmVmIHtcblx0cmVhZG9ubHkgaWQ6IHN0cmluZztcblx0cmVhZG9ubHkga2luZDogXCJmaWxlXCI7XG5cdHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cdHJlYWRvbmx5IG9wZXJhdGlvbnM/OiByZWFkb25seSAoXCJyZWFkXCIgfCBcIndyaXRlXCIpW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cEhlYWRlciB7XG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblx0cmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZFBhZ2Uge1xuXHRyZWFkb25seSBpdGVtczogcmVhZG9ubHkgc3RyaW5nW107XG5cdHJlYWRvbmx5IG5leHRfY3Vyc29yPzogc3RyaW5nO1xuXHRyZWFkb25seSB0cnVuY2F0ZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5ZXJQYWdlIHtcblx0cmVhZG9ubHkgaXRlbXM6IHJlYWRvbmx5IFZlY3RvckxheWVySW5mb1tdO1xuXHRyZWFkb25seSBuZXh0X2N1cnNvcj86IHN0cmluZztcblx0cmVhZG9ubHkgdHJ1bmNhdGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExheWVyUmVxdWVzdCB7XG5cdHJlYWRvbmx5IGxheWVyX2lkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya0ZldGNoRGF0YSB7XG5cdHJlYWRvbmx5IGJhc2U2NDogc3RyaW5nIHwgbnVsbDtcblx0cmVhZG9ubHkgaGVhZGVyczogcmVhZG9ubHkgSHR0cEhlYWRlcltdO1xuXHRyZWFkb25seSByZWFzb246IHN0cmluZztcblx0cmVhZG9ubHkgc3RhdHVzX2NvZGU6IG51bWJlcjtcblx0cmVhZG9ubHkgdGV4dDogc3RyaW5nIHwgbnVsbDtcblx0cmVhZG9ubHkgdXJsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uc0luZm9SZXF1ZXN0IHtcblx0cmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5WZWN0b3JSZXF1ZXN0IHtcblx0cmVhZG9ubHkgZmlsZTogRmlsZVJlZjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdlUmVxdWVzdCB7XG5cdHJlYWRvbmx5IGN1cnNvcj86IHN0cmluZztcblx0cmVhZG9ubHkgbGltaXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2V0dGluZ3NHZXRSZXF1ZXN0IHtcblx0cmVhZG9ubHkgZGVmYXVsdD86IHN0cmluZyB8IG51bGw7XG5cdHJlYWRvbmx5IGtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0eWxlc0FwcGx5UmVxdWVzdCB7XG5cdHJlYWRvbmx5IGxheWVyX2lkOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHN0eWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVjdG9yTGF5ZXJJbmZvIHtcblx0cmVhZG9ubHkgY3JzOiBzdHJpbmcgfCBudWxsO1xuXHRyZWFkb25seSBmaWVsZF9uYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG5cdHJlYWRvbmx5IGdlb21ldHJ5X3R5cGU6IFwicG9pbnRcIiB8IFwibGluZVwiIHwgXCJwb2x5Z29uXCIgfCBcIm5vbmVcIjtcblx0cmVhZG9ubHkgaWQ6IHN0cmluZztcblx0cmVhZG9ubHkgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRXhwb3J0UmVxdWVzdCh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBFeHBvcnRSZXF1ZXN0IHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJmaWxlXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiY29udGVudFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWVbXCJjb250ZW50XCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJjb250ZW50XCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJmaWxlXCJdICE9PSB1bmRlZmluZWQgJiYgIShGaWxlUmVmKHZhbHVlW1wiZmlsZVwiXSwgc3RyaWN0KSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHN0cmljdCAmJiAhaGFzT25seSh2YWx1ZSwgW1wiY29udGVudFwiLCBcImZpbGVcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRXhwb3J0UmVzdWx0KHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIEV4cG9ydFJlc3VsdCB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiYnl0ZXNfd3JpdHRlblwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcIm5hbWVcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wiYnl0ZXNfd3JpdHRlblwiXSAhPT0gdW5kZWZpbmVkICYmICEoaXNTYWZlSW50ZWdlcih2YWx1ZVtcImJ5dGVzX3dyaXR0ZW5cIl0pKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJuYW1lXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJuYW1lXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJieXRlc193cml0dGVuXCIsIFwibmFtZVwiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGZXRjaFJlcXVlc3QodmFsdWU6IHVua25vd24sIHN0cmljdCA9IGZhbHNlKTogdmFsdWUgaXMgRmV0Y2hSZXF1ZXN0IHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJ1cmxcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wiYXV0aF9jb25maWdcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImF1dGhfY29uZmlnXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJib2R5XCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJib2R5XCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJoZWFkZXJzXCJdICE9PSB1bmRlZmluZWQgJiYgISgoQXJyYXkuaXNBcnJheSh2YWx1ZVtcImhlYWRlcnNcIl0pICYmIHZhbHVlW1wiaGVhZGVyc1wiXS5ldmVyeSgoaXRlbSkgPT4gSHR0cEhlYWRlcihpdGVtLCBzdHJpY3QpKSkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm1ldGhvZFwiXSAhPT0gdW5kZWZpbmVkICYmICEoKHZhbHVlW1wibWV0aG9kXCJdID09PSBcIkdFVFwiIHx8IHZhbHVlW1wibWV0aG9kXCJdID09PSBcIkhFQURcIiB8fCB2YWx1ZVtcIm1ldGhvZFwiXSA9PT0gXCJQT1NUXCIgfHwgdmFsdWVbXCJtZXRob2RcIl0gPT09IFwiUFVUXCIgfHwgdmFsdWVbXCJtZXRob2RcIl0gPT09IFwiUEFUQ0hcIiB8fCB2YWx1ZVtcIm1ldGhvZFwiXSA9PT0gXCJERUxFVEVcIiB8fCB2YWx1ZVtcIm1ldGhvZFwiXSA9PT0gXCJPUFRJT05TXCIpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJ0aW1lb3V0X3NlY29uZHNcIl0gIT09IHVuZGVmaW5lZCAmJiAhKCh0eXBlb2YgdmFsdWVbXCJ0aW1lb3V0X3NlY29uZHNcIl0gPT09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlW1widGltZW91dF9zZWNvbmRzXCJdKSAmJiB2YWx1ZVtcInRpbWVvdXRfc2Vjb25kc1wiXSA+PSAwLjEgJiYgdmFsdWVbXCJ0aW1lb3V0X3NlY29uZHNcIl0gPD0gMzAwKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1widXJsXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJ1cmxcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImF1dGhfY29uZmlnXCIsIFwiYm9keVwiLCBcImhlYWRlcnNcIiwgXCJtZXRob2RcIiwgXCJ0aW1lb3V0X3NlY29uZHNcIiwgXCJ1cmxcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRmlsZVJlZih2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBGaWxlUmVmIHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJraW5kXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wiaWRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImlkXCJdID09PSBcInN0cmluZ1wiICYmIG5ldyBSZWdFeHAoXCJeKD86W2EtZjAtOV17MTYsNjR9KSRcIikudGVzdCh2YWx1ZVtcImlkXCJdKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wia2luZFwiXSAhPT0gdW5kZWZpbmVkICYmICEoKHZhbHVlW1wia2luZFwiXSA9PT0gXCJmaWxlXCIpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJuYW1lXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJuYW1lXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJvcGVyYXRpb25zXCJdICE9PSB1bmRlZmluZWQgJiYgISgoQXJyYXkuaXNBcnJheSh2YWx1ZVtcIm9wZXJhdGlvbnNcIl0pICYmIHZhbHVlW1wib3BlcmF0aW9uc1wiXS5ldmVyeSgoaXRlbSkgPT4gKGl0ZW0gPT09IFwicmVhZFwiIHx8IGl0ZW0gPT09IFwid3JpdGVcIikpKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHN0cmljdCAmJiAhaGFzT25seSh2YWx1ZSwgW1wiaWRcIiwgXCJraW5kXCIsIFwibmFtZVwiLCBcIm9wZXJhdGlvbnNcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gSHR0cEhlYWRlcih2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBIdHRwSGVhZGVyIHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJuYW1lXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwidmFsdWVcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wibmFtZVwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wibmFtZVwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1widmFsdWVcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcInZhbHVlXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJuYW1lXCIsIFwidmFsdWVcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gSWRQYWdlKHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIElkUGFnZSB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwiaXRlbXNcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJ0cnVuY2F0ZWRcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wiaXRlbXNcIl0gIT09IHVuZGVmaW5lZCAmJiAhKChBcnJheS5pc0FycmF5KHZhbHVlW1wiaXRlbXNcIl0pICYmIHZhbHVlW1wiaXRlbXNcIl0uZXZlcnkoKGl0ZW0pID0+IHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcIm5leHRfY3Vyc29yXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJuZXh0X2N1cnNvclwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1widHJ1bmNhdGVkXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJ0cnVuY2F0ZWRcIl0gPT09IFwiYm9vbGVhblwiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJpdGVtc1wiLCBcIm5leHRfY3Vyc29yXCIsIFwidHJ1bmNhdGVkXCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIExheWVyUGFnZSh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBMYXllclBhZ2Uge1xuXHRpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcIml0ZW1zXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwidHJ1bmNhdGVkXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcIml0ZW1zXCJdICE9PSB1bmRlZmluZWQgJiYgISgoQXJyYXkuaXNBcnJheSh2YWx1ZVtcIml0ZW1zXCJdKSAmJiB2YWx1ZVtcIml0ZW1zXCJdLmV2ZXJ5KChpdGVtKSA9PiBWZWN0b3JMYXllckluZm8oaXRlbSwgc3RyaWN0KSkpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJuZXh0X2N1cnNvclwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wibmV4dF9jdXJzb3JcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcInRydW5jYXRlZFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1widHJ1bmNhdGVkXCJdID09PSBcImJvb2xlYW5cIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHN0cmljdCAmJiAhaGFzT25seSh2YWx1ZSwgW1wiaXRlbXNcIiwgXCJuZXh0X2N1cnNvclwiLCBcInRydW5jYXRlZFwiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBMYXllclJlcXVlc3QodmFsdWU6IHVua25vd24sIHN0cmljdCA9IGZhbHNlKTogdmFsdWUgaXMgTGF5ZXJSZXF1ZXN0IHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJsYXllcl9pZFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWVbXCJsYXllcl9pZFwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wibGF5ZXJfaWRcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImxheWVyX2lkXCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE5ldHdvcmtGZXRjaERhdGEodmFsdWU6IHVua25vd24sIHN0cmljdCA9IGZhbHNlKTogdmFsdWUgaXMgTmV0d29ya0ZldGNoRGF0YSB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwidXJsXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwic3RhdHVzX2NvZGVcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJyZWFzb25cIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJoZWFkZXJzXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwidGV4dFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImJhc2U2NFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWVbXCJiYXNlNjRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKCh0eXBlb2YgdmFsdWVbXCJiYXNlNjRcIl0gPT09IFwic3RyaW5nXCIgfHwgdmFsdWVbXCJiYXNlNjRcIl0gPT09IG51bGwpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJoZWFkZXJzXCJdICE9PSB1bmRlZmluZWQgJiYgISgoQXJyYXkuaXNBcnJheSh2YWx1ZVtcImhlYWRlcnNcIl0pICYmIHZhbHVlW1wiaGVhZGVyc1wiXS5ldmVyeSgoaXRlbSkgPT4gSHR0cEhlYWRlcihpdGVtLCBzdHJpY3QpKSkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh2YWx1ZVtcInJlYXNvblwiXSAhPT0gdW5kZWZpbmVkICYmICEodHlwZW9mIHZhbHVlW1wicmVhc29uXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJzdGF0dXNfY29kZVwiXSAhPT0gdW5kZWZpbmVkICYmICEoaXNTYWZlSW50ZWdlcih2YWx1ZVtcInN0YXR1c19jb2RlXCJdKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1widGV4dFwiXSAhPT0gdW5kZWZpbmVkICYmICEoKHR5cGVvZiB2YWx1ZVtcInRleHRcIl0gPT09IFwic3RyaW5nXCIgfHwgdmFsdWVbXCJ0ZXh0XCJdID09PSBudWxsKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1widXJsXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJ1cmxcIl0gPT09IFwic3RyaW5nXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImJhc2U2NFwiLCBcImhlYWRlcnNcIiwgXCJyZWFzb25cIiwgXCJzdGF0dXNfY29kZVwiLCBcInRleHRcIiwgXCJ1cmxcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTm90aWZpY2F0aW9uc0luZm9SZXF1ZXN0KHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIE5vdGlmaWNhdGlvbnNJbmZvUmVxdWVzdCB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwibWVzc2FnZVwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWVbXCJtZXNzYWdlXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJtZXNzYWdlXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJtZXNzYWdlXCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9wZW5WZWN0b3JSZXF1ZXN0KHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIE9wZW5WZWN0b3JSZXF1ZXN0IHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJmaWxlXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcImZpbGVcIl0gIT09IHVuZGVmaW5lZCAmJiAhKEZpbGVSZWYodmFsdWVbXCJmaWxlXCJdLCBzdHJpY3QpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJmaWxlXCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFBhZ2VSZXF1ZXN0KHZhbHVlOiB1bmtub3duLCBzdHJpY3QgPSBmYWxzZSk6IHZhbHVlIGlzIFBhZ2VSZXF1ZXN0IHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlW1wiY3Vyc29yXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJjdXJzb3JcIl0gPT09IFwic3RyaW5nXCIgJiYgbmV3IFJlZ0V4cChcIl4oPzpbMC05XSspJFwiKS50ZXN0KHZhbHVlW1wiY3Vyc29yXCJdKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wibGltaXRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKChpc1NhZmVJbnRlZ2VyKHZhbHVlW1wibGltaXRcIl0pICYmIHZhbHVlW1wibGltaXRcIl0gPj0gMSAmJiB2YWx1ZVtcImxpbWl0XCJdIDw9IDIwMCkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChzdHJpY3QgJiYgIWhhc09ubHkodmFsdWUsIFtcImN1cnNvclwiLCBcImxpbWl0XCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNldHRpbmdzR2V0UmVxdWVzdCh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBTZXR0aW5nc0dldFJlcXVlc3Qge1xuXHRpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImtleVwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWVbXCJkZWZhdWx0XCJdICE9PSB1bmRlZmluZWQgJiYgISgodHlwZW9mIHZhbHVlW1wiZGVmYXVsdFwiXSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZVtcImRlZmF1bHRcIl0gPT09IG51bGwpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJrZXlcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImtleVwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHN0cmljdCAmJiAhaGFzT25seSh2YWx1ZSwgW1wiZGVmYXVsdFwiLCBcImtleVwiXSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTdHlsZXNBcHBseVJlcXVlc3QodmFsdWU6IHVua25vd24sIHN0cmljdCA9IGZhbHNlKTogdmFsdWUgaXMgU3R5bGVzQXBwbHlSZXF1ZXN0IHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJsYXllcl9pZFwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcInN0eWxlXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZVtcImxheWVyX2lkXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJsYXllcl9pZFwiXSA9PT0gXCJzdHJpbmdcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wic3R5bGVcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcInN0eWxlXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJsYXllcl9pZFwiLCBcInN0eWxlXCJdKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFZlY3RvckxheWVySW5mbyh2YWx1ZTogdW5rbm93biwgc3RyaWN0ID0gZmFsc2UpOiB2YWx1ZSBpcyBWZWN0b3JMYXllckluZm8ge1xuXHRpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImlkXCIgaW4gdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKFwibmFtZVwiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImdlb21ldHJ5X3R5cGVcIiBpbiB2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCEoXCJmaWVsZF9uYW1lc1wiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShcImNyc1wiIGluIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWVbXCJjcnNcIl0gIT09IHVuZGVmaW5lZCAmJiAhKCh0eXBlb2YgdmFsdWVbXCJjcnNcIl0gPT09IFwic3RyaW5nXCIgfHwgdmFsdWVbXCJjcnNcIl0gPT09IG51bGwpKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJmaWVsZF9uYW1lc1wiXSAhPT0gdW5kZWZpbmVkICYmICEoKEFycmF5LmlzQXJyYXkodmFsdWVbXCJmaWVsZF9uYW1lc1wiXSkgJiYgdmFsdWVbXCJmaWVsZF9uYW1lc1wiXS5ldmVyeSgoaXRlbSkgPT4gdHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIpKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wiZ2VvbWV0cnlfdHlwZVwiXSAhPT0gdW5kZWZpbmVkICYmICEoKHZhbHVlW1wiZ2VvbWV0cnlfdHlwZVwiXSA9PT0gXCJwb2ludFwiIHx8IHZhbHVlW1wiZ2VvbWV0cnlfdHlwZVwiXSA9PT0gXCJsaW5lXCIgfHwgdmFsdWVbXCJnZW9tZXRyeV90eXBlXCJdID09PSBcInBvbHlnb25cIiB8fCB2YWx1ZVtcImdlb21ldHJ5X3R5cGVcIl0gPT09IFwibm9uZVwiKSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHZhbHVlW1wiaWRcIl0gIT09IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZVtcImlkXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodmFsdWVbXCJuYW1lXCJdICE9PSB1bmRlZmluZWQgJiYgISh0eXBlb2YgdmFsdWVbXCJuYW1lXCJdID09PSBcInN0cmluZ1wiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoc3RyaWN0ICYmICFoYXNPbmx5KHZhbHVlLCBbXCJjcnNcIiwgXCJmaWVsZF9uYW1lc1wiLCBcImdlb21ldHJ5X3R5cGVcIiwgXCJpZFwiLCBcIm5hbWVcIl0pKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0cnVlO1xufVxuXG4vKiogT25lIGV2ZW50IG9mIGBuZXR3b3JrLmZldGNoYCwgbmFycm93ZWQgYnkgaXRzIGtpbmQuICovXG5leHBvcnQgdHlwZSBOZXR3b3JrRmV0Y2hFdmVudCA9XG5cdHwgeyByZWFkb25seSBraW5kOiBcImRhdGFcIjsgcmVhZG9ubHkgcGF5bG9hZDogTmV0d29ya0ZldGNoRGF0YSB9O1xuXG5leHBvcnQgZnVuY3Rpb24gTmV0d29ya0ZldGNoRXZlbnQodmFsdWU6IHVua25vd24sIHN0cmljdCA9IGZhbHNlKTogdmFsdWUgaXMgTmV0d29ya0ZldGNoRXZlbnQge1xuXHRpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWUua2luZCA9PT0gXCJkYXRhXCIpIHJldHVybiBOZXR3b3JrRmV0Y2hEYXRhKHZhbHVlLnBheWxvYWQsIHN0cmljdCk7XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqIEV2ZXJ5IG9wZXJhdGlvbiB0aGlzIHN1cmZhY2UgZGVjbGFyZXMsIGFzIGNhbGxhYmxlIG1ldGhvZHMuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RPcGVyYXRpb25zIHtcblx0cmVhZG9ubHkgZmlsZXM6IHtcblx0XHRyZWFkb25seSBleHBvcnQ6IChpbnB1dDogRXhwb3J0UmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PiBQcm9taXNlPEV4cG9ydFJlc3VsdD47XG5cdH07XG5cdHJlYWRvbmx5IGxheWVyczoge1xuXHRcdHJlYWRvbmx5IGdldDogKGlucHV0OiBMYXllclJlcXVlc3QsIG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucykgPT4gUHJvbWlzZTxWZWN0b3JMYXllckluZm8+O1xuXHRcdHJlYWRvbmx5IGxpc3Q6IChpbnB1dD86IFBhZ2VSZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+IFByb21pc2U8TGF5ZXJQYWdlPjtcblx0XHRyZWFkb25seSBvcGVuX3ZlY3RvcjogKGlucHV0OiBPcGVuVmVjdG9yUmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PiBQcm9taXNlPFZlY3RvckxheWVySW5mbz47XG5cdH07XG5cdHJlYWRvbmx5IG5ldHdvcms6IHtcblx0XHRyZWFkb25seSBmZXRjaDogKGlucHV0OiBGZXRjaFJlcXVlc3QsIGhhbmRsZXJzOiBIb3N0U3RyZWFtSGFuZGxlcnM8TmV0d29ya0ZldGNoRXZlbnQ+LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+IFByb21pc2U8SG9zdFN0cmVhbUhhbmRsZT47XG5cdH07XG5cdHJlYWRvbmx5IG5vdGlmaWNhdGlvbnM6IHtcblx0XHRyZWFkb25seSBpbmZvOiAoaW5wdXQ6IE5vdGlmaWNhdGlvbnNJbmZvUmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PiBQcm9taXNlPG51bGw+O1xuXHR9O1xuXHRyZWFkb25seSBwcm9qZWN0OiB7XG5cdFx0cmVhZG9ubHkgbGF5ZXJfaWRzOiAoaW5wdXQ/OiBQYWdlUmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PiBQcm9taXNlPElkUGFnZT47XG5cdH07XG5cdHJlYWRvbmx5IHNldHRpbmdzOiB7XG5cdFx0cmVhZG9ubHkgZ2V0OiAoaW5wdXQ6IFNldHRpbmdzR2V0UmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PiBQcm9taXNlPHN0cmluZyB8IG51bGw+O1xuXHR9O1xuXHRyZWFkb25seSBzdHlsZXM6IHtcblx0XHRyZWFkb25seSBhcHBseTogKGlucHV0OiBTdHlsZXNBcHBseVJlcXVlc3QsIG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucykgPT4gUHJvbWlzZTxudWxsPjtcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhvc3QoY2xpZW50OiBIb3N0Q2xpZW50TGlrZSk6IEhvc3RPcGVyYXRpb25zIHtcblx0cmV0dXJuIHtcblx0XHRmaWxlczoge1xuXHRcdFx0ZXhwb3J0OiAoaW5wdXQ6IEV4cG9ydFJlcXVlc3QsIG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucykgPT5cblx0XHRcdFx0Y2FsbDxFeHBvcnRSZXN1bHQ+KFxuXHRcdFx0XHRcdGNsaWVudCwgXCJmaWxlcy5leHBvcnRcIiwgaW5wdXQsIG9wdGlvbnMsXG5cdFx0XHRcdFx0RXhwb3J0UmVxdWVzdCxcblx0XHRcdFx0XHRFeHBvcnRSZXN1bHQsXG5cdFx0XHRcdCksXG5cdFx0fSxcblx0XHRsYXllcnM6IHtcblx0XHRcdGdldDogKGlucHV0OiBMYXllclJlcXVlc3QsIG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucykgPT5cblx0XHRcdFx0Y2FsbDxWZWN0b3JMYXllckluZm8+KFxuXHRcdFx0XHRcdGNsaWVudCwgXCJsYXllcnMuZ2V0XCIsIGlucHV0LCBvcHRpb25zLFxuXHRcdFx0XHRcdExheWVyUmVxdWVzdCxcblx0XHRcdFx0XHRWZWN0b3JMYXllckluZm8sXG5cdFx0XHRcdCksXG5cdFx0XHRsaXN0OiAoaW5wdXQ/OiBQYWdlUmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PlxuXHRcdFx0XHRjYWxsPExheWVyUGFnZT4oXG5cdFx0XHRcdFx0Y2xpZW50LCBcImxheWVycy5saXN0XCIsIGlucHV0LCBvcHRpb25zLFxuXHRcdFx0XHRcdFBhZ2VSZXF1ZXN0LFxuXHRcdFx0XHRcdExheWVyUGFnZSxcblx0XHRcdFx0KSxcblx0XHRcdG9wZW5fdmVjdG9yOiAoaW5wdXQ6IE9wZW5WZWN0b3JSZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+XG5cdFx0XHRcdGNhbGw8VmVjdG9yTGF5ZXJJbmZvPihcblx0XHRcdFx0XHRjbGllbnQsIFwibGF5ZXJzLm9wZW5fdmVjdG9yXCIsIGlucHV0LCBvcHRpb25zLFxuXHRcdFx0XHRcdE9wZW5WZWN0b3JSZXF1ZXN0LFxuXHRcdFx0XHRcdFZlY3RvckxheWVySW5mbyxcblx0XHRcdFx0KSxcblx0XHR9LFxuXHRcdG5ldHdvcms6IHtcblx0XHRcdGZldGNoOiAoaW5wdXQ6IEZldGNoUmVxdWVzdCwgaGFuZGxlcnM6IEhvc3RTdHJlYW1IYW5kbGVyczxOZXR3b3JrRmV0Y2hFdmVudD4sIG9wdGlvbnM/OiBIb3N0SW52b2tlT3B0aW9ucykgPT5cblx0XHRcdFx0b3BlbjxOZXR3b3JrRmV0Y2hFdmVudD4oXG5cdFx0XHRcdFx0Y2xpZW50LCBcIm5ldHdvcmsuZmV0Y2hcIiwgaW5wdXQsIGhhbmRsZXJzLCBvcHRpb25zLFxuXHRcdFx0XHRcdEZldGNoUmVxdWVzdCxcblx0XHRcdFx0XHROZXR3b3JrRmV0Y2hFdmVudCxcblx0XHRcdFx0KSxcblx0XHR9LFxuXHRcdG5vdGlmaWNhdGlvbnM6IHtcblx0XHRcdGluZm86IChpbnB1dDogTm90aWZpY2F0aW9uc0luZm9SZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+XG5cdFx0XHRcdGNhbGw8bnVsbD4oXG5cdFx0XHRcdFx0Y2xpZW50LCBcIm5vdGlmaWNhdGlvbnMuaW5mb1wiLCBpbnB1dCwgb3B0aW9ucyxcblx0XHRcdFx0XHROb3RpZmljYXRpb25zSW5mb1JlcXVlc3QsXG5cdFx0XHRcdFx0KGNhbmRpZGF0ZTogdW5rbm93bikgPT4gY2FuZGlkYXRlID09PSBudWxsLFxuXHRcdFx0XHQpLFxuXHRcdH0sXG5cdFx0cHJvamVjdDoge1xuXHRcdFx0bGF5ZXJfaWRzOiAoaW5wdXQ/OiBQYWdlUmVxdWVzdCwgb3B0aW9ucz86IEhvc3RJbnZva2VPcHRpb25zKSA9PlxuXHRcdFx0XHRjYWxsPElkUGFnZT4oXG5cdFx0XHRcdFx0Y2xpZW50LCBcInByb2plY3QubGF5ZXJfaWRzXCIsIGlucHV0LCBvcHRpb25zLFxuXHRcdFx0XHRcdFBhZ2VSZXF1ZXN0LFxuXHRcdFx0XHRcdElkUGFnZSxcblx0XHRcdFx0KSxcblx0XHR9LFxuXHRcdHNldHRpbmdzOiB7XG5cdFx0XHRnZXQ6IChpbnB1dDogU2V0dGluZ3NHZXRSZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+XG5cdFx0XHRcdGNhbGw8c3RyaW5nIHwgbnVsbD4oXG5cdFx0XHRcdFx0Y2xpZW50LCBcInNldHRpbmdzLmdldFwiLCBpbnB1dCwgb3B0aW9ucyxcblx0XHRcdFx0XHRTZXR0aW5nc0dldFJlcXVlc3QsXG5cdFx0XHRcdFx0KGNhbmRpZGF0ZTogdW5rbm93bikgPT4gKHR5cGVvZiBjYW5kaWRhdGUgPT09IFwic3RyaW5nXCIgfHwgY2FuZGlkYXRlID09PSBudWxsKSxcblx0XHRcdFx0KSxcblx0XHR9LFxuXHRcdHN0eWxlczoge1xuXHRcdFx0YXBwbHk6IChpbnB1dDogU3R5bGVzQXBwbHlSZXF1ZXN0LCBvcHRpb25zPzogSG9zdEludm9rZU9wdGlvbnMpID0+XG5cdFx0XHRcdGNhbGw8bnVsbD4oXG5cdFx0XHRcdFx0Y2xpZW50LCBcInN0eWxlcy5hcHBseVwiLCBpbnB1dCwgb3B0aW9ucyxcblx0XHRcdFx0XHRTdHlsZXNBcHBseVJlcXVlc3QsXG5cdFx0XHRcdFx0KGNhbmRpZGF0ZTogdW5rbm93bikgPT4gY2FuZGlkYXRlID09PSBudWxsLFxuXHRcdFx0XHQpLFxuXHRcdH0sXG5cdH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhbGw8VD4oXG5cdGNsaWVudDogSG9zdENsaWVudExpa2UsXG5cdG9wZXJhdGlvbjogc3RyaW5nLFxuXHRpbnB1dDogdW5rbm93bixcblx0b3B0aW9uczogSG9zdEludm9rZU9wdGlvbnMgfCB1bmRlZmluZWQsXG5cdGFjY2VwdElucHV0OiAodmFsdWU6IHVua25vd24sIHN0cmljdD86IGJvb2xlYW4pID0+IGJvb2xlYW4sXG5cdGFjY2VwdE91dHB1dDogKHZhbHVlOiB1bmtub3duKSA9PiBib29sZWFuLFxuKTogUHJvbWlzZTxUPiB7XG5cdGlmIChpbnB1dCAhPT0gdW5kZWZpbmVkICYmICFhY2NlcHRJbnB1dChpbnB1dCwgdHJ1ZSkpIHtcblx0XHR0aHJvdyBuZXcgUWdpc1Nka0hvc3RDb250cmFjdEVycm9yKG9wZXJhdGlvbiwgXCJ0aGUgYXJndW1lbnRzIGRvIG5vdCBtYXRjaCB0aGUgZGVjbGFyZWQgcmVxdWVzdFwiKTtcblx0fVxuXHRjb25zdCB2YWx1ZSA9IGF3YWl0IGNsaWVudC5pbnZva2UoXG5cdFx0b3BlcmF0aW9uLFxuXHRcdChpbnB1dCA/PyB7fSkgYXMgUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+LFxuXHRcdG9wdGlvbnMsXG5cdCk7XG5cdGlmICghYWNjZXB0T3V0cHV0KHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBRZ2lzU2RrSG9zdENvbnRyYWN0RXJyb3Iob3BlcmF0aW9uLCBcInRoZSByZXNwb25zZSBkb2VzIG5vdCBtYXRjaCB0aGUgZGVjbGFyZWQgcmVzdWx0XCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZSBhcyBUO1xufVxuXG5hc3luYyBmdW5jdGlvbiBvcGVuPEUgZXh0ZW5kcyB7IHJlYWRvbmx5IGtpbmQ6IHN0cmluZyB9Pihcblx0Y2xpZW50OiBIb3N0Q2xpZW50TGlrZSxcblx0b3BlcmF0aW9uOiBzdHJpbmcsXG5cdGlucHV0OiB1bmtub3duLFxuXHRoYW5kbGVyczogSG9zdFN0cmVhbUhhbmRsZXJzPEU+LFxuXHRvcHRpb25zOiBIb3N0SW52b2tlT3B0aW9ucyB8IHVuZGVmaW5lZCxcblx0YWNjZXB0SW5wdXQ6ICh2YWx1ZTogdW5rbm93biwgc3RyaWN0PzogYm9vbGVhbikgPT4gYm9vbGVhbixcblx0YWNjZXB0RXZlbnQ6ICh2YWx1ZTogdW5rbm93bikgPT4gdmFsdWUgaXMgRSxcbik6IFByb21pc2U8SG9zdFN0cmVhbUhhbmRsZT4ge1xuXHRpZiAoIWFjY2VwdElucHV0KGlucHV0LCB0cnVlKSkge1xuXHRcdHRocm93IG5ldyBRZ2lzU2RrSG9zdENvbnRyYWN0RXJyb3Iob3BlcmF0aW9uLCBcInRoZSBhcmd1bWVudHMgZG8gbm90IG1hdGNoIHRoZSBkZWNsYXJlZCByZXF1ZXN0XCIpO1xuXHR9XG5cdC8vIFRoZSB0eXBlZCBzdHJlYW0gZW5kcyBleGFjdGx5IG9uY2UsIGxpa2UgdGhlIHN1YnNjcmlwdGlvbiB1bmRlciBpdDogYVxuXHQvLyBjb250cmFjdCB2aW9sYXRpb24gZW5kcyBpdCBoZXJlLCBjbG9zZXMgdGhlIHN1YnNjcmlwdGlvbiwgYW5kIHRoZVxuXHQvLyBgZGlzcG9zZWRgIHRoZSBjbGllbnQgdGhlbiByZXBvcnRzIGlzIG5vdCBkZWxpdmVyZWQgYSBzZWNvbmQgdGltZS5cblx0bGV0IGVuZGVkID0gZmFsc2U7XG5cdGxldCB2aW9sYXRlZCA9IGZhbHNlO1xuXHRsZXQgaGFuZGxlOiBIb3N0U3RyZWFtSGFuZGxlIHwgbnVsbCA9IG51bGw7XG5cdGNvbnN0IGVuZCA9ICh0ZXJtaW5hbDogSG9zdFN0cmVhbVRlcm1pbmFsKTogdm9pZCA9PiB7XG5cdFx0aWYgKGVuZGVkKSByZXR1cm47XG5cdFx0ZW5kZWQgPSB0cnVlO1xuXHRcdGhhbmRsZXJzLm9uVGVybWluYWw/Lih0ZXJtaW5hbCk7XG5cdH07XG5cdGhhbmRsZSA9IGF3YWl0IGNsaWVudC5zdWJzY3JpYmUoXG5cdFx0b3BlcmF0aW9uLFxuXHRcdGlucHV0IGFzIFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pixcblx0XHR7XG5cdFx0XHRvbkV2ZW50OiAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKGVuZGVkKSByZXR1cm47XG5cdFx0XHRcdGlmIChhY2NlcHRFdmVudChldmVudCkpIHtcblx0XHRcdFx0XHRoYW5kbGVycy5vbkV2ZW50Py4oZXZlbnQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbmQoe1xuXHRcdFx0XHRcdGtpbmQ6IFwiZXJyb3JcIixcblx0XHRcdFx0XHRtZXNzYWdlOiBuZXcgUWdpc1Nka0hvc3RDb250cmFjdEVycm9yKFxuXHRcdFx0XHRcdFx0b3BlcmF0aW9uLFxuXHRcdFx0XHRcdFx0XCJhbiBldmVudCBkb2VzIG5vdCBtYXRjaCB0aGUgZGVjbGFyZWQgZXZlbnRzXCIsXG5cdFx0XHRcdFx0KS5tZXNzYWdlLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGhhbmRsZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdHZpb2xhdGVkID0gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRoYW5kbGUuY2xvc2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9uVGVybWluYWw6IGVuZCxcblx0XHR9LFxuXHRcdG9wdGlvbnMsXG5cdCk7XG5cdGlmICh2aW9sYXRlZCkge1xuXHRcdGhhbmRsZS5jbG9zZSgpO1xuXHR9XG5cdHJldHVybiBoYW5kbGU7XG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQU1PLElBQU0sV0FBVTtBQUNoQixJQUFNLG9CQUFtQjtBQUN6QixJQUFNLHVCQUFzQjtBQUc1QixJQUFNLG1CQUFrQjtBQUFBLEVBQzlCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUFBO0FBK0NPLE1BQU0sa0NBQWlDLGNBQWE7QUFBQSxFQUMxQztBQUFBLEVBQ1QsV0FBVyxDQUFDLFdBQW1CLFNB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VUFDQSxTQUNBLGFBQ0EsYUFDNEI7QUFBQSxFQUM1QixJQUFJLENBQUMsWUFBWSxPQUFPLElBQUksR0FBRztBQUFBLElBQzlCLE1BQU0sSUFBSSwwQkFBeUIsV0FBVyxpREFBaUQ7QUFBQSxFQUNoRztBQUFBLEVBSUEsSUFBSSxRQUFRO0FBQUEsRUFDWixJQUFJLFdBQVc7QUFBQSxFQUNmLElBQUksU0FBa0M7QUFBQSxFQUN0QyxNQUFNLE1BQU0sQ0FBQyxhQUF1QztBQUFBLElBQ25ELElBQUk7QUFBQSxNQUFPO0FBQUEsSUFDWCxRQUFRO0FBQUEsSUFDUixTQUFTLGFBQWEsUUFBUTtBQUFBO0FBQUEsRUFFL0IsU0FBUyxNQUFNLE9BQU8sVUFDckIsV0FDQSxPQUNBO0FBQUEsSUFDQyxTQUFTLENBQUMsVUFBVTtBQUFBLE1BQ25CLElBQUk7QUFBQSxRQUFPO0FBQUEsTUFDWCxJQUFJLFlBQVksS0FBSyxHQUFHO0FBQUEsUUFDdkIsU0FBUyxVQUFVLEtBQUs7QUFBQSxRQUN4QjtBQUFBLE1BQ0Q7QUFBQSxNQUNBLElBQUk7QUFBQSxRQUNILE1BQU07QUFBQSxRQUNOLFNBQVMsSUFBSSwwQkFDWixXQUNBLDZDQUNELEVBQUU7QUFBQSxNQUNILENBQUM7QUFBQSxNQUNELElBQUksV0FBVyxNQUFNO0FBQUEsUUFDcEIsV0FBVztBQUFBLE1BQ1osRUFBTztBQUFBLFFBQ04sT0FBTyxNQUFNO0FBQUE7QUFBQTtBQUFBLElBR2YsWUFBWTtBQUFBLEVBQ2IsR0FDQSxPQUNEO0FBQUEsRUFDQSxJQUFJLFVBQVU7QUFBQSxJQUNiLE9BQU8sTUFBTTtBQUFBLEVBQ2Q7QUFBQSxFQUNBLE9BQU87QUFBQTsiLAogICJkZWJ1Z0lkIjogIjE0RkE2RTFCQUNDNDhFNDk2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|