@stemy/backend 3.2.0 → 3.2.1
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/bundles/stemy-backend.umd.js +230 -141
- package/bundles/stemy-backend.umd.js.map +1 -1
- package/bundles/stemy-backend.umd.min.js +1 -1
- package/bundles/stemy-backend.umd.min.js.map +1 -1
- package/esm2015/public_api.js +2 -2
- package/esm2015/rest-controllers/assets.controller.js +56 -17
- package/esm2015/services/assets.js +7 -1
- package/esm2015/services/entities/asset.js +4 -98
- package/esm2015/services/entities/temp-asset.js +3 -4
- package/esm2015/utils.js +102 -1
- package/fesm2015/stemy-backend.js +170 -118
- package/fesm2015/stemy-backend.js.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +1 -1
- package/rest-controllers/assets.controller.d.ts +5 -1
- package/services/assets.d.ts +1 -0
- package/services/entities/asset.d.ts +1 -4
- package/stemy-backend.metadata.json +1 -1
- package/utils.d.ts +3 -1
package/esm2015/utils.js
CHANGED
|
@@ -17,7 +17,9 @@ import { model, Types } from "mongoose";
|
|
|
17
17
|
import { getValue as getMongoValue, setValue as setMongoValue } from "mongoose/lib/utils";
|
|
18
18
|
import { PassThrough, Readable } from "stream";
|
|
19
19
|
import { ObjectId } from "bson";
|
|
20
|
+
import sharp_ from "sharp";
|
|
20
21
|
import { BadRequestError, createParamDecorator, HttpError } from "routing-controllers";
|
|
22
|
+
const sharp = sharp_;
|
|
21
23
|
export const diContainers = {
|
|
22
24
|
appContainer: null
|
|
23
25
|
};
|
|
@@ -86,6 +88,9 @@ export function lcFirst(value) {
|
|
|
86
88
|
return "";
|
|
87
89
|
return value[0].toLowerCase() + value.substr(1);
|
|
88
90
|
}
|
|
91
|
+
export function isObjectId(id) {
|
|
92
|
+
return typeof id === "string" && id.length == 24 && !isNaN(Number("0x" + id));
|
|
93
|
+
}
|
|
89
94
|
export function firstItem(value) {
|
|
90
95
|
return value[0];
|
|
91
96
|
}
|
|
@@ -275,6 +280,102 @@ export function paginateAggregations(model, aggregations, params, metaProjection
|
|
|
275
280
|
return pagination;
|
|
276
281
|
});
|
|
277
282
|
}
|
|
283
|
+
const cropInterface = {
|
|
284
|
+
x: "number",
|
|
285
|
+
y: "number",
|
|
286
|
+
w: "number",
|
|
287
|
+
h: "number"
|
|
288
|
+
};
|
|
289
|
+
function toCropRegion(cropInfo) {
|
|
290
|
+
let crop = cropInfo;
|
|
291
|
+
if (isString(cropInfo)) {
|
|
292
|
+
try {
|
|
293
|
+
crop = JSON.parse(cropInfo);
|
|
294
|
+
}
|
|
295
|
+
catch (e) {
|
|
296
|
+
return null;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
if (!isInterface(crop, cropInterface))
|
|
300
|
+
return null;
|
|
301
|
+
return {
|
|
302
|
+
width: Math.round(crop.w),
|
|
303
|
+
height: Math.round(crop.h),
|
|
304
|
+
top: Math.round(crop.y),
|
|
305
|
+
left: Math.round(crop.x)
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
export function toImage(src, params, meta) {
|
|
309
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
310
|
+
// Default params and meta
|
|
311
|
+
params = params || {};
|
|
312
|
+
meta = meta || {};
|
|
313
|
+
// Get default crop info
|
|
314
|
+
const crop = toCropRegion(meta.crop);
|
|
315
|
+
// Return the src if there are no params and no default crop exists
|
|
316
|
+
if (meta.extension === "svg" || (Object.keys(params).length == 0 && !crop)) {
|
|
317
|
+
return src;
|
|
318
|
+
}
|
|
319
|
+
// Parse params
|
|
320
|
+
params.rotation = isNaN(params.rotation) ? 0 : Math.round(params.rotation / 90) * 90;
|
|
321
|
+
params.canvasScaleX = isNaN(params.canvasScaleX) ? 1 : Number(params.canvasScaleX);
|
|
322
|
+
params.canvasScaleY = isNaN(params.canvasScaleY) ? 1 : Number(params.canvasScaleY);
|
|
323
|
+
params.scaleX = isNaN(params.scaleX) ? 1 : Number(params.scaleX);
|
|
324
|
+
params.scaleY = isNaN(params.scaleY) ? 1 : Number(params.scaleY);
|
|
325
|
+
params.crop = isBoolean(params.crop) ? params.crop : params.crop == "true";
|
|
326
|
+
let buffer = src instanceof Readable ? yield streamToBuffer(src) : src;
|
|
327
|
+
try {
|
|
328
|
+
// Get crop info
|
|
329
|
+
const cropBefore = toCropRegion(params.cropBefore || (params.crop ? meta.cropBefore : null));
|
|
330
|
+
const cropAfter = toCropRegion(params.cropAfter || (params.crop ? meta.cropAfter : null));
|
|
331
|
+
// Get metadata
|
|
332
|
+
let img = sharp(buffer);
|
|
333
|
+
let { width, height } = yield img.metadata();
|
|
334
|
+
// Crop before resize
|
|
335
|
+
if (cropBefore) {
|
|
336
|
+
width = cropBefore.width;
|
|
337
|
+
height = cropBefore.height;
|
|
338
|
+
img = img.extract(cropBefore);
|
|
339
|
+
}
|
|
340
|
+
else if (crop) {
|
|
341
|
+
width = crop.width;
|
|
342
|
+
height = crop.height;
|
|
343
|
+
img = img.extract(crop);
|
|
344
|
+
}
|
|
345
|
+
// Resize canvas
|
|
346
|
+
const canvasScaleX = (meta === null || meta === void 0 ? void 0 : meta.canvasScaleX) || 1;
|
|
347
|
+
const canvasScaleY = (meta === null || meta === void 0 ? void 0 : meta.canvasScaleY) || 1;
|
|
348
|
+
if (params.canvasScaleX !== canvasScaleX || params.canvasScaleY !== canvasScaleY) {
|
|
349
|
+
width = Math.round(width * params.canvasScaleX);
|
|
350
|
+
height = Math.round(height * params.canvasScaleY);
|
|
351
|
+
img = img.resize({ width, height, background: "#00000000", fit: "contain" });
|
|
352
|
+
}
|
|
353
|
+
// Resize image
|
|
354
|
+
if (params.scaleX !== 1 || params.scaleY !== 1) {
|
|
355
|
+
width = Math.round(width * params.scaleX);
|
|
356
|
+
height = Math.round(height * params.scaleY);
|
|
357
|
+
img = img.resize({ width, height, background: "#00000000", fit: "fill" });
|
|
358
|
+
}
|
|
359
|
+
// Crop after resize
|
|
360
|
+
if (cropAfter) {
|
|
361
|
+
img = img.extract(cropAfter);
|
|
362
|
+
}
|
|
363
|
+
// Rotate
|
|
364
|
+
if (params.rotation !== 0) {
|
|
365
|
+
buffer = yield img.toBuffer();
|
|
366
|
+
img = sharp(buffer).rotate(params.rotation);
|
|
367
|
+
}
|
|
368
|
+
buffer = yield img.toBuffer();
|
|
369
|
+
src = src instanceof Readable ? bufferToStream(buffer) : buffer;
|
|
370
|
+
return src;
|
|
371
|
+
}
|
|
372
|
+
catch (e) {
|
|
373
|
+
console.log("Image conversion error", e);
|
|
374
|
+
src = src instanceof Readable ? bufferToStream(buffer) : buffer;
|
|
375
|
+
return src;
|
|
376
|
+
}
|
|
377
|
+
});
|
|
378
|
+
}
|
|
278
379
|
export function bufferToStream(buffer) {
|
|
279
380
|
const readStream = new PassThrough();
|
|
280
381
|
readStream.end(buffer);
|
|
@@ -720,4 +821,4 @@ export function replaceSpecialChars(str, to = "-") {
|
|
|
720
821
|
return `${str}`.replace(/[&\/\\#, +()$~%.@'":*?<>{}]/g, to);
|
|
721
822
|
}
|
|
722
823
|
export { ɵ0 };
|
|
723
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRWxDLE9BQU8sRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBRWpFLE9BQU8sRUFBQyxLQUFLLEVBQUUsUUFBUSxJQUFJLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxJQUFJLFdBQVcsRUFBQyxNQUFNLElBQUksQ0FBQztBQUNuRixPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQThDLEtBQUssRUFBVSxLQUFLLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDM0YsT0FBTyxFQUFDLFFBQVEsSUFBSSxhQUFhLEVBQUUsUUFBUSxJQUFJLGFBQWEsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ3hGLE9BQU8sRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFrQixNQUFNLFFBQVEsQ0FBQztBQUM5RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzlCLE9BQU8sRUFBUyxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFPN0YsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFrQjtJQUN2QyxZQUFZLEVBQUUsSUFBSTtDQUNyQixDQUFDO0FBSUYsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQVU7SUFDeEMsT0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLE9BQU8sS0FBSyxJQUFJLFdBQVcsQ0FBQztBQUN4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QUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQ3pEO1NBQ0o7YUFBTTtZQUNILEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDdEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTO2dCQUNsQixDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7b0JBQ2pCLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVTtvQkFDbkIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUNoQixDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVM7d0JBQ2xCLENBQUMsQ0FBQyxLQUFLLENBQUE7U0FDdEI7UUFDRCxPQUFPLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDbEQsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEdBQVcsRUFBRSxLQUFhLEdBQUc7SUFDN0QsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtleGVjIGFzIGV4ZWNDaGlsZFByb2Nlc3N9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XHJcbmltcG9ydCB7Y3JlYXRlSGFzaH0gZnJvbSBcImNyeXB0b1wiO1xyXG5pbXBvcnQge0luamVjdGlvblRva2VuLCBEZXBlbmRlbmN5Q29udGFpbmVyfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtmcm9tLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7Y2FuUmVwb3J0RXJyb3J9IGZyb20gXCJyeGpzL2ludGVybmFsL3V0aWwvY2FuUmVwb3J0RXJyb3JcIjtcclxuaW1wb3J0IHtTZXJ2ZXJ9IGZyb20gXCJzb2NrZXQuaW9cIjtcclxuaW1wb3J0IHtta2RpciwgcmVhZEZpbGUgYXMgZnNSZWFkRmlsZSwgdW5saW5rLCB3cml0ZUZpbGUgYXMgZnNXcml0ZUZpbGV9IGZyb20gXCJmc1wiO1xyXG5pbXBvcnQge2Jhc2VuYW1lLCBkaXJuYW1lfSBmcm9tIFwicGF0aFwiO1xyXG5pbXBvcnQge0dyaWRGU0J1Y2tldH0gZnJvbSBcIm1vbmdvZGJcIjtcclxuaW1wb3J0IHtEb2N1bWVudCwgRG9jdW1lbnRRdWVyeSwgRmlsdGVyUXVlcnksIE1vZGVsLCBtb2RlbCwgU2NoZW1hLCBUeXBlc30gZnJvbSBcIm1vbmdvb3NlXCI7XHJcbmltcG9ydCB7Z2V0VmFsdWUgYXMgZ2V0TW9uZ29WYWx1ZSwgc2V0VmFsdWUgYXMgc2V0TW9uZ29WYWx1ZX0gZnJvbSBcIm1vbmdvb3NlL2xpYi91dGlsc1wiO1xyXG5pbXBvcnQge1Bhc3NUaHJvdWdoLCBSZWFkYWJsZSwgUmVhZGFibGVPcHRpb25zfSBmcm9tIFwic3RyZWFtXCI7XHJcbmltcG9ydCB7T2JqZWN0SWR9IGZyb20gXCJic29uXCI7XHJcbmltcG9ydCB7QWN0aW9uLCBCYWRSZXF1ZXN0RXJyb3IsIGNyZWF0ZVBhcmFtRGVjb3JhdG9yLCBIdHRwRXJyb3J9IGZyb20gXCJyb3V0aW5nLWNvbnRyb2xsZXJzXCI7XHJcbmltcG9ydCB7SUNsaWVudFNvY2tldCwgSVBhZ2luYXRpb25CYXNlLCBJUGFnaW5hdGlvblBhcmFtcywgSVJlcXVlc3QsIFR5cGV9IGZyb20gXCIuL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRElDb250YWluZXJzIHtcclxuICAgIGFwcENvbnRhaW5lcjogRGVwZW5kZW5jeUNvbnRhaW5lclxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZGlDb250YWluZXJzOiBJRElDb250YWluZXJzID0ge1xyXG4gICAgYXBwQ29udGFpbmVyOiBudWxsXHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBGaWx0ZXJQcmVkaWNhdGUgPSAodmFsdWU6IGFueSwga2V5PzogYW55LCB0YXJnZXQ/OiBhbnksIHNvdXJjZT86IGFueSkgPT4gYm9vbGVhbjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT0gXCJ1bmRlZmluZWRcIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIWlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGUob2JqOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFwiXFxcXHMoW2EtekEtWl0rKVwiKTtcclxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKS5tYXRjaChyZWdleClbMV0udG9Mb3dlckNhc2UoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBnZXRUeXBlKHZhbHVlKSA9PSBcIm9iamVjdFwiO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheSh2YWx1ZTogYW55KTogdmFsdWUgaXMgQXJyYXk8YW55PiB7XHJcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWU6IGFueSk6IHZhbHVlIGlzIGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGUodmFsdWU6IGFueSk6IHZhbHVlIGlzIERhdGUge1xyXG4gICAgcmV0dXJuICEhdmFsdWUgJiYgdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSAmJiAhaXNOYU4odmFsdWUpICYmIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiB2YWx1ZS5nZXREYXRlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcclxuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8ICh0eXBlICE9PSBcIm9iamVjdFwiICYmIHR5cGUgIT09IFwiZnVuY3Rpb25cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZTogYW55KTogdmFsdWUgaXMgc3RyaW5nIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBGdW5jdGlvbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIgJiYgdmFsdWUucHJvdG90eXBlICYmIHZhbHVlLnByb3RvdHlwZS5jb25zdHJ1Y3RvcikgPT09IHZhbHVlICYmIHZhbHVlLm5hbWUgIT09IFwiT2JqZWN0XCI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1R5cGUodmFsdWU6IGFueSk6IHZhbHVlIGlzIFR5cGU8YW55PiB7XHJcbiAgICByZXR1cm4gaXNDb25zdHJ1Y3Rvcih2YWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVyZmFjZShvYmo6IGFueSwgaW50ZXJGYWNlT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8IGlzQXJyYXkob2JqKSB8fCAhaXNPYmplY3QoaW50ZXJGYWNlT2JqZWN0KSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGludGVyRmFjZU9iamVjdCk7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XHJcbiAgICAgICAgbGV0IHR5cGUgPSBpbnRlckZhY2VPYmplY3Rba2V5XSB8fCBcIlwiO1xyXG4gICAgICAgIGlmICh0eXBlLnN0YXJ0c1dpdGgoXCIqXCIpKSB7XHJcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLnN1YnN0cigxKTtcclxuICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIGdldFR5cGUob2JqW2tleV0pICE9PSB0eXBlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICghb2JqLmhhc093blByb3BlcnR5KGtleSkgfHwgZ2V0VHlwZShvYmpba2V5XSkgIT09IHR5cGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdWNGaXJzdCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiBcIlwiO1xyXG4gICAgcmV0dXJuIHZhbHVlWzBdLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zdWJzdHIoMSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsY0ZpcnN0KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiXCI7XHJcbiAgICByZXR1cm4gdmFsdWVbMF0udG9Mb3dlckNhc2UoKSArIHZhbHVlLnN1YnN0cigxKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0SXRlbTxUPih2YWx1ZTogVFtdKTogVCB7XHJcbiAgICByZXR1cm4gdmFsdWVbMF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsYXN0SXRlbTxUPih2YWx1ZTogVFtdKTogVCB7XHJcbiAgICByZXR1cm4gdmFsdWVbdmFsdWUubGVuZ3RoIC0gMV07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWdyb3VwPFQ+KHZhbHVlOiBUW10sIGNvbXBhcmF0b3I6IChhOiBULCBiOiBUKSA9PiBib29sZWFuKTogQXJyYXk8VFtdPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IEFycmF5PFRbXT4gPSBbXTtcclxuICAgIGlmICghaXNBcnJheSh2YWx1ZSkgfHwgdmFsdWUubGVuZ3RoID09IDApIHJldHVybiByZXN1bHQ7XHJcbiAgICB2YWx1ZSA9IEFycmF5LmZyb20odmFsdWUpO1xyXG4gICAgcmVzdWx0LnB1c2goW3ZhbHVlLnNoaWZ0KCldKTtcclxuICAgIHZhbHVlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSByZXN1bHQuZmluZChnID0+IGcuc29tZShhID0+IGNvbXBhcmF0b3IoYSwgaXRlbSkpKTtcclxuICAgICAgICBpZiAoZ3JvdXApIHtcclxuICAgICAgICAgICAgZ3JvdXAucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQucHVzaChbaXRlbV0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlSXRlbXM8VD4odmFsdWU6IFRbXSk6IFRbXSB7XHJcbiAgICByZXR1cm4gdmFsdWUuZmlsdGVyKCh2LCBpeCkgPT4gdmFsdWUuaW5kZXhPZih2KSA9PT0gaXgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsdWUob2JqOiBhbnksIGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBhbnksIHRyZWVGYWxsYmFjazogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcclxuICAgIGtleSA9IGtleSB8fCBcIlwiO1xyXG4gICAgY29uc3Qga2V5cyA9IGtleS5zcGxpdChcIi5cIik7XHJcbiAgICBsZXQgY3VyS2V5ID0gXCJcIjtcclxuICAgIGRvIHtcclxuICAgICAgICBjdXJLZXkgKz0ga2V5cy5zaGlmdCgpO1xyXG4gICAgICAgIGlmIChpc0RlZmluZWQob2JqKSAmJiBpc0RlZmluZWQob2JqW2N1cktleV0pICYmICh0eXBlb2Ygb2JqW2N1cktleV0gPT09IFwib2JqZWN0XCIgfHwgIWtleXMubGVuZ3RoKSkge1xyXG4gICAgICAgICAgICBvYmogPSBvYmpbY3VyS2V5XTtcclxuICAgICAgICAgICAgY3VyS2V5ID0gXCJcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKCFrZXlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0eXBlb2YgZGVmYXVsdFZhbHVlID09IFwidW5kZWZpbmVkXCIgPyBrZXkucmVwbGFjZShuZXcgUmVnRXhwKGAke2N1cktleX0kYCksIGB7JHtjdXJLZXl9fWApIDogZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgICAgICBvYmogPSB0cmVlRmFsbGJhY2sgPyBvYmogfHwgZGVmYXVsdFZhbHVlIDogZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGN1cktleSArPSBcIi5cIjtcclxuICAgICAgICB9XHJcbiAgICB9IHdoaWxlIChrZXlzLmxlbmd0aCk7XHJcbiAgICByZXR1cm4gb2JqO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBCeTxUPihpdGVtczogVFtdLCBjYjogKGl0ZW06IFQpID0+IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGl0ZW1zLnJlZHVjZSgocmVzLCBpdGVtKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSBjYihpdGVtKTtcclxuICAgICAgICByZXNbZ3JvdXBdID0gcmVzW2dyb3VwXSB8fCBbXTtcclxuICAgICAgICByZXNbZ3JvdXBdLnB1c2goaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH0sIHt9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZTogYW55LCB0eXBlOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICAgICAgdmFsdWUgPSB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcclxuICAgICAgICAgICAgcmV0dXJuICh2YWx1ZSA9PSBcIm5vXCIgfHwgdmFsdWUgPT0gXCJmYWxzZVwiIHx8IHZhbHVlID09IFwiMFwiKSA/IGZhbHNlIDogISF2YWx1ZTtcclxuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHBhcnNlRmxvYXQodmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gaXNOYU4odmFsKSA/IDAgOiB2YWw7XHJcbiAgICAgICAgY2FzZSBcImFycmF5XCI6XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt2YWx1ZX1gLnNwbGl0KFwiLCBcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdFNlcnZpY2VzKHNjaGVtYTogU2NoZW1hPGFueT4sIHNlcnZpY2VzOiB7IFtwcm9wOiBzdHJpbmddOiBJbmplY3Rpb25Ub2tlbjxhbnk+IH0pIHtcclxuICAgIGNvbnN0IHNlcnZpY2VNYXA6IHsgW3Byb3A6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICBPYmplY3Qua2V5cyhzZXJ2aWNlcykuZm9yRWFjaChwcm9wID0+IHtcclxuICAgICAgICBzY2hlbWFcclxuICAgICAgICAgICAgLnZpcnR1YWwocHJvcClcclxuICAgICAgICAgICAgLmdldCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaUNvbnRhaW5lciA9IGRpQ29udGFpbmVycy5hcHBDb250YWluZXI7XHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlTWFwW3Byb3BdID0gc2VydmljZU1hcFtwcm9wXSB8fCAoIWRpQ29udGFpbmVyID8ge30gOiBkaUNvbnRhaW5lci5yZXNvbHZlKHNlcnZpY2VzW3Byb3BdKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZU1hcFtwcm9wXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhZ2luYXRlPFQgZXh0ZW5kcyBEb2N1bWVudD4obW9kZWw6IE1vZGVsPFQ+LCB3aGVyZTogRmlsdGVyUXVlcnk8VD4sIHBhcmFtczogSVBhZ2luYXRpb25QYXJhbXMpOiBQcm9taXNlPElQYWdpbmF0aW9uQmFzZTxUPj4ge1xyXG4gICAgcmV0dXJuIG1vZGVsLmNvdW50RG9jdW1lbnRzKHdoZXJlKS50aGVuKGNvdW50ID0+IHtcclxuICAgICAgICBsZXQgcXVlcnkgPSBtb2RlbC5maW5kKHdoZXJlKTtcclxuICAgICAgICBpZiAoaXNTdHJpbmcocGFyYW1zLnNvcnQpKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkuc29ydChwYXJhbXMuc29ydCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc0FycmF5KHBhcmFtcy5wb3B1bGF0ZSkpIHtcclxuICAgICAgICAgICAgcGFyYW1zLnBvcHVsYXRlLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICAgICAgcXVlcnkgPSBxdWVyeS5wb3B1bGF0ZShmaWVsZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKHBhcmFtcy5saW1pdCA+IDAgPyBxdWVyeS5za2lwKHBhcmFtcy5wYWdlICogcGFyYW1zLmxpbWl0KS5saW1pdChwYXJhbXMubGltaXQpIDogcXVlcnkpLnRoZW4oaXRlbXMgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRhID0ge3RvdGFsOiBjb3VudH07XHJcbiAgICAgICAgICAgIHJldHVybiB7Y291bnQsIGl0ZW1zLCBtZXRhfTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9va3VwU3RhZ2VzKGZyb206IHN0cmluZywgbG9jYWxGaWVsZDogc3RyaW5nLCBhczogc3RyaW5nID0gbnVsbCwgZm9yZWlnbkZpZWxkOiBzdHJpbmcgPSBcIl9pZFwiLCBzaG91bGRVbndpbmQ6IGJvb2xlYW4gPSB0cnVlKTogYW55W10ge1xyXG4gICAgYXMgPSBhcyB8fCBsb2NhbEZpZWxkLnJlcGxhY2UoXCJJZFwiLCBcIlwiKTtcclxuICAgIGNvbnN0IHBpcGVsaW5lczogYW55W10gPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAkbG9va3VwOiB7XHJcbiAgICAgICAgICAgICAgICBmcm9tLFxyXG4gICAgICAgICAgICAgICAgbG9jYWxGaWVsZCxcclxuICAgICAgICAgICAgICAgIGZvcmVpZ25GaWVsZCxcclxuICAgICAgICAgICAgICAgIGFzXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICBdO1xyXG4gICAgaWYgKHNob3VsZFVud2luZCkge1xyXG4gICAgICAgIHBpcGVsaW5lcy5wdXNoKHtcclxuICAgICAgICAgICAgJHVud2luZDoge1xyXG4gICAgICAgICAgICAgICAgcGF0aDogYCQke2FzfWAsXHJcbiAgICAgICAgICAgICAgICBwcmVzZXJ2ZU51bGxBbmRFbXB0eUFycmF5czogdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHJldHVybiBwaXBlbGluZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsZXRzTG9va3VwU3RhZ2UoZnJvbTogc3RyaW5nLCBwaXBlbGluZTogYW55W10sIGFzOiBzdHJpbmcgPSBudWxsLCBsZXRGaWVsZHM6IGFueSA9IG51bGwpIHtcclxuICAgIGFzID0gYXMgfHwgZnJvbTtcclxuICAgIGxldEZpZWxkcyA9IGxldEZpZWxkcyB8fCB7aWQ6IFwiJF9pZFwifTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgJGxvb2t1cDoge1xyXG4gICAgICAgICAgICBmcm9tLFxyXG4gICAgICAgICAgICBsZXQ6IGxldEZpZWxkcyxcclxuICAgICAgICAgICAgcGlwZWxpbmUsXHJcbiAgICAgICAgICAgIGFzXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGh5ZHJhdGVQb3B1bGF0ZWQ8VCBleHRlbmRzIERvY3VtZW50Pihtb2RlbFR5cGU6IE1vZGVsPFQ+LCBqc29uOiBhbnkpOiBUIHtcclxuICAgIGxldCBvYmplY3QgPSBtb2RlbFR5cGUuaHlkcmF0ZShqc29uKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IFtwYXRoLCBvYmpdIG9mIE9iamVjdC5lbnRyaWVzKG1vZGVsVHlwZS5zY2hlbWEub2JqKSkge1xyXG4gICAgICAgIGxldCB7cmVmLCB0eXBlfSA9IG9iaiBhcyBhbnk7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodHlwZSkgJiYgdHlwZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJlZiA9IHR5cGVbMF0ucmVmO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXJlZikgY29udGludWU7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRNb25nb1ZhbHVlKHBhdGgsIGpzb24pO1xyXG4gICAgICAgIGNvbnN0IGh5ZHJhdGVWYWwgPSB2YWwgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsID09IG51bGwgfHwgdmFsIGluc3RhbmNlb2YgVHlwZXMuT2JqZWN0SWQpIHJldHVybiB2YWw7XHJcbiAgICAgICAgICAgIHJldHVybiBoeWRyYXRlUG9wdWxhdGVkKG1vZGVsKHJlZiksIHZhbCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgc2V0TW9uZ29WYWx1ZShwYXRoLCB2YWx1ZS5tYXAoaHlkcmF0ZVZhbCksIG9iamVjdCk7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRNb25nb1ZhbHVlKHBhdGgsIGh5ZHJhdGVWYWwodmFsdWUpLCBvYmplY3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvYmplY3Q7XHJcblxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVBZ2dyZWdhdGlvbnM8VCBleHRlbmRzIERvY3VtZW50Pihtb2RlbDogTW9kZWw8VD4sIGFnZ3JlZ2F0aW9uczogYW55W10sIHBhcmFtczogSVBhZ2luYXRpb25QYXJhbXMsIG1ldGFQcm9qZWN0aW9uOiBhbnkgPSB7fSk6IFByb21pc2U8SVBhZ2luYXRpb25CYXNlPFQ+PiB7XHJcbiAgICBjb25zdCBzb3J0RmllbGQgPSAhaXNTdHJpbmcocGFyYW1zLnNvcnQpIHx8ICFwYXJhbXMuc29ydCA/IG51bGwgOiAocGFyYW1zLnNvcnQuc3RhcnRzV2l0aChcIi1cIikgPyBwYXJhbXMuc29ydC5zdWJzdHIoMSkgOiBwYXJhbXMuc29ydCk7XHJcbiAgICBjb25zdCBzb3J0QWdncmVnYXRpb24gPSAhc29ydEZpZWxkID8gW10gOiBbe1xyXG4gICAgICAgICRzb3J0OiB7W3NvcnRGaWVsZF06IHNvcnRGaWVsZCA9PSBwYXJhbXMuc29ydCA/IDEgOiAtMX1cclxuICAgIH1dO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwuYWdncmVnYXRlKFtcclxuICAgICAgICAuLi5hZ2dyZWdhdGlvbnMsXHJcbiAgICAgICAgLi4uc29ydEFnZ3JlZ2F0aW9uLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgJGdyb3VwOiB7XHJcbiAgICAgICAgICAgICAgICBfaWQ6IFwicmVzdWx0c1wiLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiB7JHB1c2g6IFwiJCRDVVJSRU5UXCJ9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgJHByb2plY3Q6IHtcclxuICAgICAgICAgICAgICAgIF9pZDogMCxcclxuICAgICAgICAgICAgICAgIGl0ZW1zOiBwYXJhbXMubGltaXQgPiAwID8geyRzbGljZTogW1wiJHJlc3VsdFwiLCBwYXJhbXMucGFnZSAqIHBhcmFtcy5saW1pdCwgcGFyYW1zLmxpbWl0XX0gOiBcIiRyZXN1bHRcIixcclxuICAgICAgICAgICAgICAgIGNvdW50OiB7JHNpemU6IFwiJHJlc3VsdFwifSxcclxuICAgICAgICAgICAgICAgIG1ldGE6IHtcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbDogeyRzaXplOiBcIiRyZXN1bHRcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgLi4ubWV0YVByb2plY3Rpb25cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIF0pO1xyXG4gICAgY29uc3QgcGFnaW5hdGlvbiA9IHJlc3VsdFswXSBhcyBJUGFnaW5hdGlvbkJhc2U8VD47XHJcbiAgICBpZiAoIXBhZ2luYXRpb24pIHtcclxuICAgICAgICByZXR1cm4ge2l0ZW1zOiBbXSwgY291bnQ6IDAsIG1ldGE6IHt0b3RhbDogMH19O1xyXG4gICAgfVxyXG4gICAgcGFnaW5hdGlvbi5pdGVtcyA9IHBhZ2luYXRpb24uaXRlbXMubWFwKGkgPT4gaHlkcmF0ZVBvcHVsYXRlZChtb2RlbCwgaSkpO1xyXG4gICAgcmV0dXJuIHBhZ2luYXRpb247XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBidWZmZXJUb1N0cmVhbShidWZmZXI6IEJ1ZmZlcik6IFJlYWRhYmxlIHtcclxuICAgIGNvbnN0IHJlYWRTdHJlYW0gPSBuZXcgUGFzc1Rocm91Z2goKTtcclxuICAgIHJlYWRTdHJlYW0uZW5kKGJ1ZmZlcik7XHJcbiAgICByZXR1cm4gcmVhZFN0cmVhbVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RyZWFtVG9CdWZmZXIoc3RyZWFtOiBSZWFkYWJsZSk6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8QnVmZmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29uY2F0ID0gW107XHJcbiAgICAgICAgc3RyZWFtLm9uKFwiZGF0YVwiLCBkYXRhID0+IHtcclxuICAgICAgICAgICAgY29uY2F0LnB1c2goZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc3RyZWFtLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcclxuICAgICAgICBzdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4gcmVzb2x2ZShCdWZmZXIuY29uY2F0KGNvbmNhdCkpKTtcclxuICAgIH0pXHJcbn1cclxuXHJcbmNsYXNzIFJlYWRhYmxlU3RyZWFtQ2xvbmUgZXh0ZW5kcyBSZWFkYWJsZSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZGFibGVTdHJlYW06IFJlYWRhYmxlLCBvcHRzPzogUmVhZGFibGVPcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIob3B0cyk7XHJcbiAgICAgICAgcmVhZGFibGVTdHJlYW0/Lm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucHVzaChjaHVuayk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmVhZGFibGVTdHJlYW0/Lm9uKFwiZW5kXCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wdXNoKG51bGwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJlYWRhYmxlU3RyZWFtPy5vbihcImVycm9yXCIsIGVyciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIGVycik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3JlYWQoc2l6ZTogbnVtYmVyKSB7XHJcblxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29weVN0cmVhbShzdHJlYW06IFJlYWRhYmxlLCBvcHRzPzogUmVhZGFibGVPcHRpb25zKTogUmVhZGFibGUge1xyXG4gICAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbUNsb25lKHN0cmVhbSwgb3B0cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBta2RpclJlY3Vyc2l2ZShwYXRoOiBzdHJpbmcsIG1vZGU6IG51bWJlciA9IG51bGwpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIG1rZGlyKHBhdGgsIHttb2RlOiBtb2RlIHx8IDBvNzc3LCByZWN1cnNpdmU6IHRydWV9LCBlcnIgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUZpbGUocGF0aDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB1bmxpbmsocGF0aCwgZXJyID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWFkRmlsZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlcywgcmVqKSA9PiB7XHJcbiAgICAgICAgZnNSZWFkRmlsZShwYXRoLCAoZXJyLCBkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHJlaihlcnIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlcyhkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEFuZERlbGV0ZUZpbGUocGF0aDogc3RyaW5nLCB0aW1lb3V0OiBudW1iZXIgPSA1MDAwKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZWFkRmlsZShwYXRoKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHVubGluayhwYXRoLCAoKSA9PiB7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCB0aW1lb3V0KTtcclxuICAgIHJldHVybiBkYXRhO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVGaWxlKHBhdGg6IHN0cmluZywgZGF0YTogQnVmZmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgIGF3YWl0IG1rZGlyUmVjdXJzaXZlKGRpcm5hbWUocGF0aCkpO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlcywgcmVqKSA9PiB7XHJcbiAgICAgICAgZnNXcml0ZUZpbGUocGF0aCwgZGF0YSwgZXJyID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgcmVqKGVycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzKGRhdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZVRvUHJvbWlzZSh2YWx1ZTogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UgPyB2YWx1ZSA6IFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlVGltZW91dCh0aW1lb3V0OiBudW1iZXIgPSAxMDAwLCBlcnJvcjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoYFRpbWVvdXQgZXhjZWVkZWQ6ICR7dGltZW91dH1tc2ApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc29sdmUoYFRpbWVvdXQ6ICR7dGltZW91dH1tc2ApO1xyXG4gICAgICAgIH0sIHRpbWVvdXQpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25zdHJ1Y3Rvck5hbWUodHlwZTogVHlwZTxhbnk+KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0eXBlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY3Rpb25QYXJhbXMoZnVuYzogRnVuY3Rpb24pOiBzdHJpbmdbXSB7XHJcbiAgICAvLyBSZW1vdmUgY29tbWVudHMgb2YgdGhlIGZvcm0gLyogLi4uICovXHJcbiAgICAvLyBSZW1vdmluZyBjb21tZW50cyBvZiB0aGUgZm9ybSAvL1xyXG4gICAgLy8gUmVtb3ZlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uIHsgLi4uIH1cclxuICAgIC8vIHJlbW92aW5nIFwiPT5cIiBpZiBmdW5jIGlzIGFycm93IGZ1bmN0aW9uXHJcbiAgICBjb25zdCBzdHIgPSBmdW5jLnRvU3RyaW5nKClcclxuICAgICAgICAucmVwbGFjZSgvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy9nLCBcIlwiKVxyXG4gICAgICAgIC5yZXBsYWNlKC9cXC9cXC8oLikqL2csIFwiXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoL3tbXFxzXFxTXSp9LywgXCJcIilcclxuICAgICAgICAucmVwbGFjZSgvPT4vZywgXCJcIilcclxuICAgICAgICAudHJpbSgpO1xyXG5cclxuICAgIC8vIFN0YXJ0IHBhcmFtZXRlciBuYW1lcyBhZnRlciBmaXJzdCBcIihcIlxyXG4gICAgY29uc3Qgc3RhcnQgPSBzdHIuaW5kZXhPZihcIihcIikgKyAxO1xyXG5cclxuICAgIC8vIEVuZCBwYXJhbWV0ZXIgbmFtZXMgaXMganVzdCBiZWZvcmUgbGFzdCBcIilcIlxyXG4gICAgY29uc3QgZW5kID0gc3RyLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCByZXN1bHQgPSBzdHIuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpLnNwbGl0KFwiLCBcIik7XHJcbiAgICBjb25zdCBwYXJhbXMgPSBbXTtcclxuXHJcbiAgICByZXN1bHQuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuXHJcbiAgICAgICAgLy8gUmVtb3ZpbmcgYW55IGRlZmF1bHQgdmFsdWVcclxuICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5yZXBsYWNlKC89W1xcc1xcU10qL2csIFwiXCIpLnRyaW0oKTtcclxuXHJcbiAgICAgICAgaWYgKGVsZW1lbnQubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgcGFyYW1zLnB1c2goZWxlbWVudCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcGFyYW1zO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJveHlGdW5jdGlvbihuYW1lOiBzdHJpbmcpOiBGdW5jdGlvbiB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5mcm9tKGFyZ3VtZW50cyk7XHJcbiAgICAgICAgYXJncy51bnNoaWZ0KHRoaXMpO1xyXG4gICAgICAgIHJldHVybiAodGhpcy5oZWxwZXJbbmFtZV0gYXMgRnVuY3Rpb24pLmFwcGx5KHRoaXMuaGVscGVyLCBhcmdzKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb3h5RnVuY3Rpb25zKHNjaGVtYTogU2NoZW1hLCBoZWxwZXI6IFR5cGU8YW55PiwgcGFyYW1OYW1lOiBzdHJpbmcgPSBudWxsKTogdm9pZCB7XHJcbiAgICBwYXJhbU5hbWUgPSBwYXJhbU5hbWUgfHwgbGNGaXJzdChnZXRDb25zdHJ1Y3Rvck5hbWUoaGVscGVyKSkucmVwbGFjZSgvaGVscGVyJC9naSwgXCJcIik7XHJcbiAgICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGhlbHBlci5wcm90b3R5cGUpO1xyXG4gICAgT2JqZWN0LmtleXMoZGVzY3JpcHRvcnMpLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IGRlc2NyaXB0b3JzW25hbWVdLnZhbHVlO1xyXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGZ1bmMpICYmIG5hbWUgIT09IFwiY29uc3RydWN0b3JcIikge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbU5hbWVzID0gZ2V0RnVuY3Rpb25QYXJhbXMoZnVuYyk7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbU5hbWVzWzBdID09IHBhcmFtTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgc2NoZW1hLm1ldGhvZHNbbmFtZV0gPSBwcm94eUZ1bmN0aW9uKG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpbmplY3RTZXJ2aWNlcyhzY2hlbWEsIHtcclxuICAgICAgICBcImhlbHBlclwiOiBoZWxwZXJcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUmVzb2x2ZUVudGl0eTxUIGV4dGVuZHMgRG9jdW1lbnQ+KG1vZGVsOiBNb2RlbDxUPiwgZXh0cmFDaGVjaz86IChxdWVyeTogRG9jdW1lbnRRdWVyeTxULCBhbnk+LCBhY3Rpb246IEFjdGlvbikgPT4gVCB8IFByb21pc2U8VD4pOiBQYXJhbWV0ZXJEZWNvcmF0b3Ige1xyXG4gICAgY29uc3QgbW9kZWxOYW1lID0gbW9kZWwubW9kZWxOYW1lO1xyXG4gICAgY29uc3QgcGFyYW1OYW1lID0gbW9kZWxOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICByZXR1cm4gY3JlYXRlUGFyYW1EZWNvcmF0b3Ioe1xyXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICB2YWx1ZTogYXN5bmMgYWN0aW9uID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVxID0gYWN0aW9uLnJlcXVlc3QgYXMgSVJlcXVlc3Q7XHJcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gcmVxLmhlYWRlcihgeC0ke3BhcmFtTmFtZX0tdG9rZW5gKTtcclxuICAgICAgICAgICAgY29uc3QgaWQgPSByZXEucGFyYW1zW2Ake3BhcmFtTmFtZX1JZGBdIGFzIHN0cmluZztcclxuICAgICAgICAgICAgaWYgKCFpZCAmJiAhdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXJyb3IoYCR7bW9kZWxOYW1lfSBpZCBvciB0b2tlbiBzaG91bGQgYmUgZGVmaW5lZCFgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBxdWVyeSA9ICF0b2tlblxyXG4gICAgICAgICAgICAgICAgPyBtb2RlbC5maW5kQnlJZChpZClcclxuICAgICAgICAgICAgICAgIDogbW9kZWwuZmluZE9uZSh7dG9rZW59IGFzIGFueSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IGF3YWl0IHF1ZXJ5O1xyXG4gICAgICAgICAgICBpZiAoIWRvYykge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcig0MDQsICF0b2tlblxyXG4gICAgICAgICAgICAgICAgICAgID8gYCR7bW9kZWxOYW1lfSBjb3VsZCBub3QgYmUgZm91bmQgd2l0aCBpZDogJHtpZH1gXHJcbiAgICAgICAgICAgICAgICAgICAgOiBgJHttb2RlbE5hbWV9IGNvdWxkIG5vdCBiZSBmb3VuZCB3aXRoIHRva2VuOiAke3Rva2VufWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGV4dHJhQ2hlY2spKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5yZXF1ZXN0W3BhcmFtTmFtZV0gPSBhd2FpdCB2YWx1ZVRvUHJvbWlzZShleHRyYUNoZWNrKHF1ZXJ5LCBhY3Rpb24pKSB8fCBkb2M7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5yZXF1ZXN0W3BhcmFtTmFtZV07XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFcnJvcihgJHttb2RlbE5hbWV9IGNoZWNrIGVycm9yOiAke2UubWVzc2FnZSB8fCBlfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFjdGlvbi5yZXF1ZXN0W3BhcmFtTmFtZV0gPSBkb2M7XHJcbiAgICAgICAgICAgIHJldHVybiBkb2M7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlTmFtZShwYXRoOiBzdHJpbmcsIHdpdGhFeHRlbnNpb246IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBuYW1lID0gYmFzZW5hbWUocGF0aCB8fCBcIlwiKTtcclxuICAgIHJldHVybiB3aXRoRXh0ZW5zaW9uID8gbmFtZSA6IG5hbWUuc3BsaXQoXCIuXCIpLnNsaWNlKDAsIC0xKS5qb2luKFwiLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVuc2lvbihwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbmFtZSA9IGJhc2VuYW1lKHBhdGggfHwgXCJcIik7XHJcbiAgICByZXR1cm4gbmFtZS5zcGxpdChcIi5cIikucG9wKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpZFRvU3RyaW5nKHZhbHVlOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChpZFRvU3RyaW5nKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdElkID8gdmFsdWUudG9IZXhTdHJpbmcoKSA6IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUcmFuc2Zvcm1lcih0cmFuc2Zvcm0/OiAoZG9jOiBEb2N1bWVudCwgcmV0OiBhbnksIG9wdGlvbnM/OiBhbnkpID0+IGFueSkge1xyXG4gICAgcmV0dXJuIChkb2M6IERvY3VtZW50LCByZXQ6IGFueSwgb3B0aW9ucz86IGFueSkgPT4ge1xyXG4gICAgICAgIHJldC5pZCA9IGlkVG9TdHJpbmcocmV0LmlkKSB8fCByZXQuaWQ7XHJcbiAgICAgICAgaWYgKGRvYy5faWQpIHtcclxuICAgICAgICAgICAgcmV0Ll9pZCA9IGlkVG9TdHJpbmcoZG9jLl9pZCk7XHJcbiAgICAgICAgICAgIHJldC5pZCA9IHJldC5pZCB8fCByZXQuX2lkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZWxldGUgcmV0Ll9fdjtcclxuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbih0cmFuc2Zvcm0pID8gdHJhbnNmb3JtKGRvYywgcmV0LCBvcHRpb25zKSB8fCByZXQgOiByZXQ7XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYnJvYWRjYXN0KHNvY2tldFNlcnZlcjogU2VydmVyLCBjYjogKGNsaWVudDogSUNsaWVudFNvY2tldCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgQXJyYXkuZnJvbShPYmplY3QudmFsdWVzKHNvY2tldFNlcnZlci5zb2NrZXRzLnNvY2tldHMpKS5mb3JFYWNoKGNiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhbmQobWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLnJvdW5kKHJhbmRvbShtaW4sIG1heCkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gbWluICsgTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlTdWJzY3JpcHRpb24oLi4uc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10pOiBTdWJzY3JpcHRpb24ge1xyXG4gICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oKCkgPT4ge1xyXG4gICAgICAgIHN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHtcclxuICAgICAgICAgICAgcy51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZhYmxlRnJvbUZ1bmN0aW9uKGNhbGxiYWNrRnVuYzogKCkgPT4gYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGxldCBzdWJqZWN0OiBhbnk7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8YW55Pigoc3Vic2NyaWJlcikgPT4ge1xyXG4gICAgICAgIGlmICghc3ViamVjdCkge1xyXG4gICAgICAgICAgICBzdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHN1YmplY3QgPSBmcm9tKGNhbGxiYWNrRnVuYygpKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FuUmVwb3J0RXJyb3Ioc3ViamVjdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdWJqZWN0LmVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlcnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdWJqZWN0LnN1YnNjcmliZShzdWJzY3JpYmVyKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcGFkTGVmdCh2YWx1ZTogYW55LCBjb3VudDogbnVtYmVyID0gMywgcGFkV2l0aDogc3RyaW5nID0gXCIwXCIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke3ZhbHVlfWAucGFkU3RhcnQoY291bnQsIHBhZFdpdGgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcGFkUmlnaHQodmFsdWU6IGFueSwgY291bnQ6IG51bWJlciA9IDMsIHBhZFdpdGg6IHN0cmluZyA9IFwiMFwiKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHt2YWx1ZX1gLnBhZEVuZChjb3VudCwgcGFkV2l0aCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGcm9tQnVja2V0KGJ1Y2tldDogR3JpZEZTQnVja2V0LCBmaWxlSWQ6IE9iamVjdElkKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KCgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgYnVja2V0LmRlbGV0ZShmaWxlSWQsIGVycm9yID0+IHtcclxuICAgICAgICAgICAgbGV0IGVyciA9IGVycm9yIGFzIGFueTtcclxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBlcnIgPSBlcnJvci5tZXNzYWdlIHx8IGVycm9yIHx8IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzU3RyaW5nKGVycikgfHwgIWVyci5zdGFydHNXaXRoKFwiRmlsZU5vdEZvdW5kXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc29sdmUoZmlsZUlkLnRvSGV4U3RyaW5nKCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSkpO1xyXG59XHJcblxyXG5jb25zdCBkZWZhdWx0UHJlZGljYXRlOiBGaWx0ZXJQcmVkaWNhdGUgPSAoKSA9PiB0cnVlO1xyXG5cclxuZnVuY3Rpb24gY29weVJlY3Vyc2l2ZSh0YXJnZXQ6IGFueSwgc291cmNlOiBhbnksIHByZWRpY2F0ZT86IEZpbHRlclByZWRpY2F0ZSk6IGFueSB7XHJcbiAgICBwcmVkaWNhdGUgPSBwcmVkaWNhdGUgfHwgZGVmYXVsdFByZWRpY2F0ZTtcclxuICAgIGlmIChpc1ByaW1pdGl2ZShzb3VyY2UpIHx8IGlzRGF0ZShzb3VyY2UpIHx8IGlzRnVuY3Rpb24oc291cmNlKSkgcmV0dXJuIHNvdXJjZTtcclxuICAgIGlmIChpc0FycmF5KHNvdXJjZSkpIHtcclxuICAgICAgICB0YXJnZXQgPSBpc0FycmF5KHRhcmdldCkgPyBBcnJheS5mcm9tKHRhcmdldCkgOiBbXTtcclxuICAgICAgICBzb3VyY2UuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFwcmVkaWNhdGUoaXRlbSwgaW5kZXgsIHRhcmdldCwgc291cmNlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0Lmxlbmd0aCA+IGluZGV4KVxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0W2luZGV4XSA9IGNvcHlSZWN1cnNpdmUodGFyZ2V0W2luZGV4XSwgaXRlbSwgcHJlZGljYXRlKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnB1c2goY29weVJlY3Vyc2l2ZShudWxsLCBpdGVtLCBwcmVkaWNhdGUpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2hvdWxkQ29weSA9IGlzRnVuY3Rpb24oc291cmNlLl9fc2hvdWxkQ29weSkgPyBzb3VyY2UuX19zaG91bGRDb3B5IDogKCkgPT4gdHJ1ZTtcclxuICAgIGlmIChpc0NvbnN0cnVjdG9yKHNvdXJjZS5jb25zdHJ1Y3RvcikpIHtcclxuICAgICAgICBpZiAoc291cmNlLl9fc2hvdWxkQ29weSA9PT0gZmFsc2UpIHJldHVybiBzb3VyY2U7XHJcbiAgICAgICAgaWYgKCF0YXJnZXQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRhcmdldCA9IG5ldyBzb3VyY2UuY29uc3RydWN0b3IoKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvdG8gPSBzb3VyY2UuY29uc3RydWN0b3IucHJvdG90eXBlIHx8IHNvdXJjZS5wcm90b3R5cGU7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBPYmplY3QuY3JlYXRlKHByb3RvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGFyZ2V0ID0gT2JqZWN0LmFzc2lnbih7fSwgdGFyZ2V0IHx8IHt9KTtcclxuICAgIH1cclxuICAgIC8vIENvcHkgbWFwIGVudHJpZXNcclxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBNYXApIHtcclxuICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgTWFwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBzb3VyY2UuZW50cmllcygpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXByZWRpY2F0ZSh2YWx1ZSwga2V5LCB0YXJnZXQsIHNvdXJjZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldChrZXksICFzaG91bGRDb3B5KGtleSwgdmFsdWUpID8gdmFsdWUgOiBjb3B5UmVjdXJzaXZlKHRhcmdldC5nZXQoa2V5KSwgdmFsdWUsIHByZWRpY2F0ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ29weSBvYmplY3QgbWVtYmVyc1xyXG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xyXG4gICAgdGFyZ2V0ID0ga2V5cy5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKCFwcmVkaWNhdGUoc291cmNlW2tleV0sIGtleSwgcmVzdWx0LCBzb3VyY2UpKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIHJlc3VsdFtrZXldID0gIXNob3VsZENvcHkoa2V5LCBzb3VyY2Vba2V5XSkgPyBzb3VyY2Vba2V5XSA6IGNvcHlSZWN1cnNpdmUocmVzdWx0W2tleV0sIHNvdXJjZVtrZXldLCBwcmVkaWNhdGUpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9LCB0YXJnZXQpO1xyXG5cclxuICAgIC8vIENvcHkgb2JqZWN0IHByb3BlcnRpZXNcclxuICAgIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKTtcclxuICAgIGtleXMgPSBPYmplY3Qua2V5cyhkZXNjcmlwdG9ycykuZmlsdGVyKGsgPT4ga2V5cy5pbmRleE9mKGspIDwgMCk7XHJcbiAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3JzW2tleV0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyPFQ+KG9iajogVCwgcHJlZGljYXRlOiBGaWx0ZXJQcmVkaWNhdGUpOiBQYXJ0aWFsPFQ+IHtcclxuICAgIHJldHVybiBjb3B5UmVjdXJzaXZlKG51bGwsIG9iaiwgcHJlZGljYXRlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvcHk8VD4ob2JqOiBUKTogVCB7XHJcbiAgICByZXR1cm4gY29weVJlY3Vyc2l2ZShudWxsLCBvYmopO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduPFQ+KHRhcmdldDogVCwgc291cmNlOiBhbnksIHByZWRpY2F0ZT86IEZpbHRlclByZWRpY2F0ZSk6IFQge1xyXG4gICAgcmV0dXJuIGNvcHlSZWN1cnNpdmUodGFyZ2V0LCBzb3VyY2UsIHByZWRpY2F0ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZDUoZGF0YTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChpc09iamVjdChkYXRhKSkge1xyXG4gICAgICAgIGRhdGEgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcclxuICAgIH1cclxuICAgIGlmICghaXNTdHJpbmcoZGF0YSkpIHtcclxuICAgICAgICB0aHJvdyBgQ2FuJ3QgbWQ1IG90aGVyIHRoYXQgcmF3IG9iamVjdCBvciBzdHJpbmdgO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNyZWF0ZUhhc2goXCJtZDVcIikudXBkYXRlKGRhdGEpLmRpZ2VzdChcImhleFwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkNvbW1hbmQoc2NyaXB0UGF0aDogc3RyaW5nLCBleHBlY3RlZENvZGU6IG51bWJlciA9IDApOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBjb25zdCBjcCA9IGV4ZWNDaGlsZFByb2Nlc3Moc2NyaXB0UGF0aCwgKGVycm9yLCBzdGRvdXQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yICYmIGV4cGVjdGVkQ29kZSAhPT0gZXJyb3IuY29kZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBsaW5lcyA9IChzdGRvdXQgfHwgXCJcIikuc3BsaXQoXCJcXG5cIik7XHJcbiAgICAgICAgICAgIGxldCBsaW5lID0gbnVsbDtcclxuICAgICAgICAgICAgd2hpbGUgKCFsaW5lICYmIGxpbmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lcy5wb3AoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNvbHZlKGxpbmUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNwLnN0ZG91dC5vbihcImRhdGFcIiwgZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS50b1N0cmluZygpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjcC5zdGRlcnIub24oXCJkYXRhXCIsIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZGF0YS50b1N0cmluZygpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBDb25zb2xlQ29sb3Ige1xyXG4gICAgUmVzZXQgPSBcIlxceDFiWzBtXCIsXHJcbiAgICBCcmlnaHQgPSBcIlxceDFiWzFtXCIsXHJcbiAgICBEaW0gPSBcIlxceDFiWzJtXCIsXHJcbiAgICBVbmRlcnNjb3JlID0gXCJcXHgxYls0bVwiLFxyXG4gICAgQmxpbmsgPSBcIlxceDFiWzVtXCIsXHJcbiAgICBSZXZlcnNlID0gXCJcXHgxYls3bVwiLFxyXG4gICAgSGlkZGVuID0gXCJcXHgxYls4bVwiLFxyXG5cclxuICAgIEZnQmxhY2sgPSBcIlxceDFiWzMwbVwiLFxyXG4gICAgRmdSZWQgPSBcIlxceDFiWzMxbVwiLFxyXG4gICAgRmdHcmVlbiA9IFwiXFx4MWJbMzJtXCIsXHJcbiAgICBGZ1llbGxvdyA9IFwiXFx4MWJbMzNtXCIsXHJcbiAgICBGZ0JsdWUgPSBcIlxceDFiWzM0bVwiLFxyXG4gICAgRmdNYWdlbnRhID0gXCJcXHgxYlszNW1cIixcclxuICAgIEZnQ3lhbiA9IFwiXFx4MWJbMzZtXCIsXHJcbiAgICBGZ1doaXRlID0gXCJcXHgxYlszN21cIixcclxuICAgIEZnRGVmYXVsdCA9IFwiXFx4MWJbMzhtXCIsXHJcblxyXG4gICAgQmdCbGFjayA9IFwiXFx4MWJbNDBtXCIsXHJcbiAgICBCZ1JlZCA9IFwiXFx4MWJbNDFtXCIsXHJcbiAgICBCZ0dyZWVuID0gXCJcXHgxYls0Mm1cIixcclxuICAgIEJnWWVsbG93ID0gXCJcXHgxYls0M21cIixcclxuICAgIEJnQmx1ZSA9IFwiXFx4MWJbNDRtXCIsXHJcbiAgICBCZ01hZ2VudGEgPSBcIlxceDFiWzQ1bVwiLFxyXG4gICAgQmdDeWFuID0gXCJcXHgxYls0Nm1cIixcclxuICAgIEJnV2hpdGUgPSBcIlxceDFiWzQ3bVwiLFxyXG4gICAgQmdEZWZhdWx0ID0gXCJcXHgxYls0OG1cIlxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElKc29uQ29sb3JzIHtcclxuICAgIGtleUNvbG9yPzogQ29uc29sZUNvbG9yO1xyXG4gICAgbnVtYmVyQ29sb3I/OiBDb25zb2xlQ29sb3I7XHJcbiAgICBzdHJpbmdDb2xvcj86IENvbnNvbGVDb2xvcjtcclxuICAgIHRydWVDb2xvcj86IENvbnNvbGVDb2xvcjtcclxuICAgIGZhbHNlQ29sb3I/OiBDb25zb2xlQ29sb3I7XHJcbiAgICBudWxsQ29sb3I/OiBDb25zb2xlQ29sb3I7XHJcbn1cclxuXHJcbmNvbnN0IGRlZmF1bHRDb2xvcnM6IElKc29uQ29sb3JzID0ge1xyXG4gICAga2V5Q29sb3I6IENvbnNvbGVDb2xvci5GZ1doaXRlLFxyXG4gICAgbnVtYmVyQ29sb3I6IENvbnNvbGVDb2xvci5GZ0JsdWUsXHJcbiAgICBzdHJpbmdDb2xvcjogQ29uc29sZUNvbG9yLkZnWWVsbG93LFxyXG4gICAgdHJ1ZUNvbG9yOiBDb25zb2xlQ29sb3IuRmdHcmVlbixcclxuICAgIGZhbHNlQ29sb3I6IENvbnNvbGVDb2xvci5GZ1JlZCxcclxuICAgIG51bGxDb2xvcjogQ29uc29sZUNvbG9yLkJnTWFnZW50YVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29sb3JpemUoaW5wdXQ6IGFueSwgY29sb3I6IENvbnNvbGVDb2xvcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7Y29sb3J9JHtpbnB1dH0ke0NvbnNvbGVDb2xvci5SZXNldH1gO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24ganNvbkhpZ2hsaWdodChpbnB1dDogc3RyaW5nIHwgb2JqZWN0LCBjb2xvck9wdGlvbnM/OiBJSnNvbkNvbG9ycyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjb2xvcnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q29sb3JzLCBjb2xvck9wdGlvbnMpXHJcbiAgICBjb25zdCBqc29uID0gKGlzU3RyaW5nKGlucHV0KSA/IGlucHV0IDogSlNPTi5zdHJpbmdpZnkoaW5wdXQsIG51bGwsIDIpKS5yZXBsYWNlKC8mL2csICcmJykucmVwbGFjZSgvPC9nLCAnPCcpLnJlcGxhY2UoLz4vZywgJz4nKVxyXG4gICAgcmV0dXJuIGpzb24ucmVwbGFjZSgvKFwiKFxcXFx1W2EtekEtWjAtOV17NH18XFxcXFtedV18W15cXFxcXCJdKSpcIihcXHMqOik/fFxcYih0cnVlfGZhbHNlfG51bGwpXFxifC0/XFxkKyg/OlxcLlxcZCopPyg/OltlRV1bK10/XFxkKyk/KS9nLCAobWF0Y2gpID0+IHtcclxuICAgICAgICBsZXQgY29sb3IgPSBjb2xvcnMubnVtYmVyQ29sb3JcclxuICAgICAgICBpZiAoL15cIi8udGVzdChtYXRjaCkpIHtcclxuICAgICAgICAgICAgaWYgKC86JC8udGVzdChtYXRjaCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JzLmtleUNvbG9yXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9ycy5zdHJpbmdDb2xvcjtcclxuICAgICAgICAgICAgICAgIG1hdGNoID0gJ1wiJyArIG1hdGNoLnN1YnN0cigxLCBtYXRjaC5sZW5ndGggLSAyKSArICdcIic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb2xvciA9IC90cnVlLy50ZXN0KG1hdGNoKVxyXG4gICAgICAgICAgICAgICAgPyBjb2xvcnMudHJ1ZUNvbG9yXHJcbiAgICAgICAgICAgICAgICA6IC9mYWxzZS8udGVzdChtYXRjaClcclxuICAgICAgICAgICAgICAgICAgICA/IGNvbG9ycy5mYWxzZUNvbG9yXHJcbiAgICAgICAgICAgICAgICAgICAgOiAvbnVsbC8udGVzdChtYXRjaClcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjb2xvcnMubnVsbENvbG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY29sb3JcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke2NvbG9yfSR7bWF0Y2h9JHtDb25zb2xlQ29sb3IuUmVzZXR9YFxyXG4gICAgfSlcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VTcGVjaWFsQ2hhcnMoc3RyOiBzdHJpbmcsIHRvOiBzdHJpbmcgPSBcIi1cIik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7c3RyfWAucmVwbGFjZSgvWyZcXC9cXFxcIywgKygpJH4lLkAnXCI6Kj88Pnt9XS9nLCB0byk7XHJcbn1cclxuIl19
|
|
824
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRWxDLE9BQU8sRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBRWpFLE9BQU8sRUFBQyxLQUFLLEVBQUUsUUFBUSxJQUFJLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxJQUFJLFdBQVcsRUFBQyxNQUFNLElBQUksQ0FBQztBQUNuRixPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQThDLEtBQUssRUFBVSxLQUFLLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDM0YsT0FBTyxFQUFDLFFBQVEsSUFBSSxhQUFhLEVBQUUsUUFBUSxJQUFJLGFBQWEsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ3hGLE9BQU8sRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFrQixNQUFNLFFBQVEsQ0FBQztBQUM5RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzlCLE9BQU8sTUFBZ0IsTUFBTSxPQUFPLENBQUM7QUFDckMsT0FBTyxFQUFTLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQVc3RixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUM7QUFNckIsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFrQjtJQUN2QyxZQUFZLEVBQUUsSUFBSTtDQUNyQixDQUFDO0FBSUYsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtB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QUUsQ0FBQztRQUNyRixNQUFNLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRixNQUFNLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRixNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRSxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRSxNQUFNLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDO1FBRTNFLElBQUksTUFBTSxHQUFHLEdBQUcsWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFVLENBQUM7UUFDOUUsSUFBSTtZQUNBLGdCQUFnQjtZQUNoQixNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENB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U0FBUztnQkFDbEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUNqQixDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVU7b0JBQ25CLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzt3QkFDaEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTO3dCQUNsQixDQUFDLENBQUMsS0FBSyxDQUFBO1NBQ3RCO1FBQ0QsT0FBTyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ2xELENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxHQUFXLEVBQUUsS0FBYSxHQUFHO0lBQzdELE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsOEJBQThCLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDaEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZXhlYyBhcyBleGVjQ2hpbGRQcm9jZXNzfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xyXG5pbXBvcnQge2NyZWF0ZUhhc2h9IGZyb20gXCJjcnlwdG9cIjtcclxuaW1wb3J0IHtJbmplY3Rpb25Ub2tlbiwgRGVwZW5kZW5jeUNvbnRhaW5lcn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7ZnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge2NhblJlcG9ydEVycm9yfSBmcm9tIFwicnhqcy9pbnRlcm5hbC91dGlsL2NhblJlcG9ydEVycm9yXCI7XHJcbmltcG9ydCB7U2VydmVyfSBmcm9tIFwic29ja2V0LmlvXCI7XHJcbmltcG9ydCB7bWtkaXIsIHJlYWRGaWxlIGFzIGZzUmVhZEZpbGUsIHVubGluaywgd3JpdGVGaWxlIGFzIGZzV3JpdGVGaWxlfSBmcm9tIFwiZnNcIjtcclxuaW1wb3J0IHtiYXNlbmFtZSwgZGlybmFtZX0gZnJvbSBcInBhdGhcIjtcclxuaW1wb3J0IHtHcmlkRlNCdWNrZXR9IGZyb20gXCJtb25nb2RiXCI7XHJcbmltcG9ydCB7RG9jdW1lbnQsIERvY3VtZW50UXVlcnksIEZpbHRlclF1ZXJ5LCBNb2RlbCwgbW9kZWwsIFNjaGVtYSwgVHlwZXN9IGZyb20gXCJtb25nb29zZVwiO1xyXG5pbXBvcnQge2dldFZhbHVlIGFzIGdldE1vbmdvVmFsdWUsIHNldFZhbHVlIGFzIHNldE1vbmdvVmFsdWV9IGZyb20gXCJtb25nb29zZS9saWIvdXRpbHNcIjtcclxuaW1wb3J0IHtQYXNzVGhyb3VnaCwgUmVhZGFibGUsIFJlYWRhYmxlT3B0aW9uc30gZnJvbSBcInN0cmVhbVwiO1xyXG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5pbXBvcnQgc2hhcnBfLCB7UmVnaW9ufSBmcm9tIFwic2hhcnBcIjtcclxuaW1wb3J0IHtBY3Rpb24sIEJhZFJlcXVlc3RFcnJvciwgY3JlYXRlUGFyYW1EZWNvcmF0b3IsIEh0dHBFcnJvcn0gZnJvbSBcInJvdXRpbmctY29udHJvbGxlcnNcIjtcclxuaW1wb3J0IHtcclxuICAgIElBc3NldENyb3BJbmZvLCBJQXNzZXRJbWFnZVBhcmFtcyxcclxuICAgIElBc3NldE1ldGEsXHJcbiAgICBJQ2xpZW50U29ja2V0LFxyXG4gICAgSVBhZ2luYXRpb25CYXNlLFxyXG4gICAgSVBhZ2luYXRpb25QYXJhbXMsXHJcbiAgICBJUmVxdWVzdCxcclxuICAgIFR5cGVcclxufSBmcm9tIFwiLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbmNvbnN0IHNoYXJwID0gc2hhcnBfO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRElDb250YWluZXJzIHtcclxuICAgIGFwcENvbnRhaW5lcjogRGVwZW5kZW5jeUNvbnRhaW5lclxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZGlDb250YWluZXJzOiBJRElDb250YWluZXJzID0ge1xyXG4gICAgYXBwQ29udGFpbmVyOiBudWxsXHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBGaWx0ZXJQcmVkaWNhdGUgPSAodmFsdWU6IGFueSwga2V5PzogYW55LCB0YXJnZXQ/OiBhbnksIHNvdXJjZT86IGFueSkgPT4gYm9vbGVhbjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT0gXCJ1bmRlZmluZWRcIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIWlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGUob2JqOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFwiXFxcXHMoW2EtekEtWl0rKVwiKTtcclxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKS5tYXRjaChyZWdleClbMV0udG9Mb3dlckNhc2UoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBnZXRUeXBlKHZhbHVlKSA9PSBcIm9iamVjdFwiO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheSh2YWx1ZTogYW55KTogdmFsdWUgaXMgQXJyYXk8YW55PiB7XHJcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWU6IGFueSk6IHZhbHVlIGlzIGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGUodmFsdWU6IGFueSk6IHZhbHVlIGlzIERhdGUge1xyXG4gICAgcmV0dXJuICEhdmFsdWUgJiYgdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSAmJiAhaXNOYU4odmFsdWUpICYmIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiB2YWx1ZS5nZXREYXRlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcclxuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8ICh0eXBlICE9PSBcIm9iamVjdFwiICYmIHR5cGUgIT09IFwiZnVuY3Rpb25cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZTogYW55KTogdmFsdWUgaXMgc3RyaW5nIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBGdW5jdGlvbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIgJiYgdmFsdWUucHJvdG90eXBlICYmIHZhbHVlLnByb3RvdHlwZS5jb25zdHJ1Y3RvcikgPT09IHZhbHVlICYmIHZhbHVlLm5hbWUgIT09IFwiT2JqZWN0XCI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1R5cGUodmFsdWU6IGFueSk6IHZhbHVlIGlzIFR5cGU8YW55PiB7XHJcbiAgICByZXR1cm4gaXNDb25zdHJ1Y3Rvcih2YWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVyZmFjZShvYmo6IGFueSwgaW50ZXJGYWNlT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8IGlzQXJyYXkob2JqKSB8fCAhaXNPYmplY3QoaW50ZXJGYWNlT2JqZWN0KSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGludGVyRmFjZU9iamVjdCk7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XHJcbiAgICAgICAgbGV0IHR5cGUgPSBpbnRlckZhY2VPYmplY3Rba2V5XSB8fCBcIlwiO1xyXG4gICAgICAgIGlmICh0eXBlLnN0YXJ0c1dpdGgoXCIqXCIpKSB7XHJcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLnN1YnN0cigxKTtcclxuICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIGdldFR5cGUob2JqW2tleV0pICE9PSB0eXBlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICghb2JqLmhhc093blByb3BlcnR5KGtleSkgfHwgZ2V0VHlwZShvYmpba2V5XSkgIT09IHR5cGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdWNGaXJzdCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiBcIlwiO1xyXG4gICAgcmV0dXJuIHZhbHVlWzBdLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zdWJzdHIoMSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsY0ZpcnN0KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiXCI7XHJcbiAgICByZXR1cm4gdmFsdWVbMF0udG9Mb3dlckNhc2UoKSArIHZhbHVlLnN1YnN0cigxKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0SWQoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBpZCA9PT0gXCJzdHJpbmdcIiAmJiBpZC5sZW5ndGggPT0gMjQgJiYgIWlzTmFOKE51bWJlcihcIjB4XCIgKyBpZCkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmlyc3RJdGVtPFQ+KHZhbHVlOiBUW10pOiBUIHtcclxuICAgIHJldHVybiB2YWx1ZVswXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxhc3RJdGVtPFQ+KHZhbHVlOiBUW10pOiBUIHtcclxuICAgIHJldHVybiB2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlZ3JvdXA8VD4odmFsdWU6IFRbXSwgY29tcGFyYXRvcjogKGE6IFQsIGI6IFQpID0+IGJvb2xlYW4pOiBBcnJheTxUW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogQXJyYXk8VFtdPiA9IFtdO1xyXG4gICAgaWYgKCFpc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5sZW5ndGggPT0gMCkgcmV0dXJuIHJlc3VsdDtcclxuICAgIHZhbHVlID0gQXJyYXkuZnJvbSh2YWx1ZSk7XHJcbiAgICByZXN1bHQucHVzaChbdmFsdWUuc2hpZnQoKV0pO1xyXG4gICAgdmFsdWUuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBjb25zdCBncm91cCA9IHJlc3VsdC5maW5kKGcgPT4gZy5zb21lKGEgPT4gY29tcGFyYXRvcihhLCBpdGVtKSkpO1xyXG4gICAgICAgIGlmIChncm91cCkge1xyXG4gICAgICAgICAgICBncm91cC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC5wdXNoKFtpdGVtXSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1bmlxdWVJdGVtczxUPih2YWx1ZTogVFtdKTogVFtdIHtcclxuICAgIHJldHVybiB2YWx1ZS5maWx0ZXIoKHYsIGl4KSA9PiB2YWx1ZS5pbmRleE9mKHYpID09PSBpeCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZShvYmo6IGFueSwga2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IGFueSwgdHJlZUZhbGxiYWNrOiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xyXG4gICAga2V5ID0ga2V5IHx8IFwiXCI7XHJcbiAgICBjb25zdCBrZXlzID0ga2V5LnNwbGl0KFwiLlwiKTtcclxuICAgIGxldCBjdXJLZXkgPSBcIlwiO1xyXG4gICAgZG8ge1xyXG4gICAgICAgIGN1cktleSArPSBrZXlzLnNoaWZ0KCk7XHJcbiAgICAgICAgaWYgKGlzRGVmaW5lZChvYmopICYmIGlzRGVmaW5lZChvYmpbY3VyS2V5XSkgJiYgKHR5cGVvZiBvYmpbY3VyS2V5XSA9PT0gXCJvYmplY3RcIiB8fCAha2V5cy5sZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIG9iaiA9IG9ialtjdXJLZXldO1xyXG4gICAgICAgICAgICBjdXJLZXkgPSBcIlwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIWtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHR5cGVvZiBkZWZhdWx0VmFsdWUgPT0gXCJ1bmRlZmluZWRcIiA/IGtleS5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7Y3VyS2V5fSRgKSwgYHske2N1cktleX19YCkgOiBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgICAgIG9iaiA9IHRyZWVGYWxsYmFjayA/IG9iaiB8fCBkZWZhdWx0VmFsdWUgOiBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY3VyS2V5ICs9IFwiLlwiO1xyXG4gICAgICAgIH1cclxuICAgIH0gd2hpbGUgKGtleXMubGVuZ3RoKTtcclxuICAgIHJldHVybiBvYmo7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBncm91cEJ5PFQ+KGl0ZW1zOiBUW10sIGNiOiAoaXRlbTogVCkgPT4gc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gaXRlbXMucmVkdWNlKChyZXMsIGl0ZW0pID0+IHtcclxuICAgICAgICBjb25zdCBncm91cCA9IGNiKGl0ZW0pO1xyXG4gICAgICAgIHJlc1tncm91cF0gPSByZXNbZ3JvdXBdIHx8IFtdO1xyXG4gICAgICAgIHJlc1tncm91cF0ucHVzaChpdGVtKTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfSwge30pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFZhbHVlKHZhbHVlOiBhbnksIHR5cGU6IHN0cmluZyk6IGFueSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxyXG4gICAgICAgICAgICB2YWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHZhbHVlO1xyXG4gICAgICAgICAgICByZXR1cm4gKHZhbHVlID09IFwibm9cIiB8fCB2YWx1ZSA9PSBcImZhbHNlXCIgfHwgdmFsdWUgPT0gXCIwXCIpID8gZmFsc2UgOiAhIXZhbHVlO1xyXG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgICAgICAgY29uc3QgdmFsID0gcGFyc2VGbG9hdCh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBpc05hTih2YWwpID8gMCA6IHZhbDtcclxuICAgICAgICBjYXNlIFwiYXJyYXlcIjpcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3ZhbHVlfWAuc3BsaXQoXCIsIFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0U2VydmljZXMoc2NoZW1hOiBTY2hlbWE8YW55Piwgc2VydmljZXM6IHsgW3Byb3A6IHN0cmluZ106IEluamVjdGlvblRva2VuPGFueT4gfSkge1xyXG4gICAgY29uc3Qgc2VydmljZU1hcDogeyBbcHJvcDogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICAgIE9iamVjdC5rZXlzKHNlcnZpY2VzKS5mb3JFYWNoKHByb3AgPT4ge1xyXG4gICAgICAgIHNjaGVtYVxyXG4gICAgICAgICAgICAudmlydHVhbChwcm9wKVxyXG4gICAgICAgICAgICAuZ2V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpQ29udGFpbmVyID0gZGlDb250YWluZXJzLmFwcENvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgIHNlcnZpY2VNYXBbcHJvcF0gPSBzZXJ2aWNlTWFwW3Byb3BdIHx8ICghZGlDb250YWluZXIgPyB7fSA6IGRpQ29udGFpbmVyLnJlc29sdmUoc2VydmljZXNbcHJvcF0pKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlTWFwW3Byb3BdO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcGFnaW5hdGU8VCBleHRlbmRzIERvY3VtZW50Pihtb2RlbDogTW9kZWw8VD4sIHdoZXJlOiBGaWx0ZXJRdWVyeTxUPiwgcGFyYW1zOiBJUGFnaW5hdGlvblBhcmFtcyk6IFByb21pc2U8SVBhZ2luYXRpb25CYXNlPFQ+PiB7XHJcbiAgICByZXR1cm4gbW9kZWwuY291bnREb2N1bWVudHMod2hlcmUpLnRoZW4oY291bnQgPT4ge1xyXG4gICAgICAgIGxldCBxdWVyeSA9IG1vZGVsLmZpbmQod2hlcmUpO1xyXG4gICAgICAgIGlmIChpc1N0cmluZyhwYXJhbXMuc29ydCkpIHtcclxuICAgICAgICAgICAgcXVlcnkgPSBxdWVyeS5zb3J0KHBhcmFtcy5zb3J0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzQXJyYXkocGFyYW1zLnBvcHVsYXRlKSkge1xyXG4gICAgICAgICAgICBwYXJhbXMucG9wdWxhdGUuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeSA9IHF1ZXJ5LnBvcHVsYXRlKGZpZWxkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAocGFyYW1zLmxpbWl0ID4gMCA/IHF1ZXJ5LnNraXAocGFyYW1zLnBhZ2UgKiBwYXJhbXMubGltaXQpLmxpbWl0KHBhcmFtcy5saW1pdCkgOiBxdWVyeSkudGhlbihpdGVtcyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGEgPSB7dG90YWw6IGNvdW50fTtcclxuICAgICAgICAgICAgcmV0dXJuIHtjb3VudCwgaXRlbXMsIG1ldGF9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb29rdXBTdGFnZXMoZnJvbTogc3RyaW5nLCBsb2NhbEZpZWxkOiBzdHJpbmcsIGFzOiBzdHJpbmcgPSBudWxsLCBmb3JlaWduRmllbGQ6IHN0cmluZyA9IFwiX2lkXCIsIHNob3VsZFVud2luZDogYm9vbGVhbiA9IHRydWUpOiBhbnlbXSB7XHJcbiAgICBhcyA9IGFzIHx8IGxvY2FsRmllbGQucmVwbGFjZShcIklkXCIsIFwiXCIpO1xyXG4gICAgY29uc3QgcGlwZWxpbmVzOiBhbnlbXSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgICRsb29rdXA6IHtcclxuICAgICAgICAgICAgICAgIGZyb20sXHJcbiAgICAgICAgICAgICAgICBsb2NhbEZpZWxkLFxyXG4gICAgICAgICAgICAgICAgZm9yZWlnbkZpZWxkLFxyXG4gICAgICAgICAgICAgICAgYXNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIF07XHJcbiAgICBpZiAoc2hvdWxkVW53aW5kKSB7XHJcbiAgICAgICAgcGlwZWxpbmVzLnB1c2goe1xyXG4gICAgICAgICAgICAkdW53aW5kOiB7XHJcbiAgICAgICAgICAgICAgICBwYXRoOiBgJCR7YXN9YCxcclxuICAgICAgICAgICAgICAgIHByZXNlcnZlTnVsbEFuZEVtcHR5QXJyYXlzOiB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBpcGVsaW5lcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxldHNMb29rdXBTdGFnZShmcm9tOiBzdHJpbmcsIHBpcGVsaW5lOiBhbnlbXSwgYXM6IHN0cmluZyA9IG51bGwsIGxldEZpZWxkczogYW55ID0gbnVsbCkge1xyXG4gICAgYXMgPSBhcyB8fCBmcm9tO1xyXG4gICAgbGV0RmllbGRzID0gbGV0RmllbGRzIHx8IHtpZDogXCIkX2lkXCJ9O1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAkbG9va3VwOiB7XHJcbiAgICAgICAgICAgIGZyb20sXHJcbiAgICAgICAgICAgIGxldDogbGV0RmllbGRzLFxyXG4gICAgICAgICAgICBwaXBlbGluZSxcclxuICAgICAgICAgICAgYXNcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaHlkcmF0ZVBvcHVsYXRlZDxUIGV4dGVuZHMgRG9jdW1lbnQ+KG1vZGVsVHlwZTogTW9kZWw8VD4sIGpzb246IGFueSk6IFQge1xyXG4gICAgbGV0IG9iamVjdCA9IG1vZGVsVHlwZS5oeWRyYXRlKGpzb24pO1xyXG5cclxuICAgIGZvciAoY29uc3QgW3BhdGgsIG9ial0gb2YgT2JqZWN0LmVudHJpZXMobW9kZWxUeXBlLnNjaGVtYS5vYmopKSB7XHJcbiAgICAgICAgbGV0IHtyZWYsIHR5cGV9ID0gb2JqIGFzIGFueTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSAmJiB0eXBlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmVmID0gdHlwZVswXS5yZWY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcmVmKSBjb250aW51ZTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGdldE1vbmdvVmFsdWUocGF0aCwganNvbik7XHJcbiAgICAgICAgY29uc3QgaHlkcmF0ZVZhbCA9IHZhbCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWwgPT0gbnVsbCB8fCB2YWwgaW5zdGFuY2VvZiBUeXBlcy5PYmplY3RJZCkgcmV0dXJuIHZhbDtcclxuICAgICAgICAgICAgcmV0dXJuIGh5ZHJhdGVQb3B1bGF0ZWQobW9kZWwocmVmKSwgdmFsKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICBzZXRNb25nb1ZhbHVlKHBhdGgsIHZhbHVlLm1hcChoeWRyYXRlVmFsKSwgb2JqZWN0KTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldE1vbmdvVmFsdWUocGF0aCwgaHlkcmF0ZVZhbCh2YWx1ZSksIG9iamVjdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9iamVjdDtcclxuXHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYWdpbmF0ZUFnZ3JlZ2F0aW9uczxUIGV4dGVuZHMgRG9jdW1lbnQ+KG1vZGVsOiBNb2RlbDxUPiwgYWdncmVnYXRpb25zOiBhbnlbXSwgcGFyYW1zOiBJUGFnaW5hdGlvblBhcmFtcywgbWV0YVByb2plY3Rpb246IGFueSA9IHt9KTogUHJvbWlzZTxJUGFnaW5hdGlvbkJhc2U8VD4+IHtcclxuICAgIGNvbnN0IHNvcnRGaWVsZCA9ICFpc1N0cmluZyhwYXJhbXMuc29ydCkgfHwgIXBhcmFtcy5zb3J0ID8gbnVsbCA6IChwYXJhbXMuc29ydC5zdGFydHNXaXRoKFwiLVwiKSA/IHBhcmFtcy5zb3J0LnN1YnN0cigxKSA6IHBhcmFtcy5zb3J0KTtcclxuICAgIGNvbnN0IHNvcnRBZ2dyZWdhdGlvbiA9ICFzb3J0RmllbGQgPyBbXSA6IFt7XHJcbiAgICAgICAgJHNvcnQ6IHtbc29ydEZpZWxkXTogc29ydEZpZWxkID09IHBhcmFtcy5zb3J0ID8gMSA6IC0xfVxyXG4gICAgfV07XHJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RlbC5hZ2dyZWdhdGUoW1xyXG4gICAgICAgIC4uLmFnZ3JlZ2F0aW9ucyxcclxuICAgICAgICAuLi5zb3J0QWdncmVnYXRpb24sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAkZ3JvdXA6IHtcclxuICAgICAgICAgICAgICAgIF9pZDogXCJyZXN1bHRzXCIsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHskcHVzaDogXCIkJENVUlJFTlRcIn1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAkcHJvamVjdDoge1xyXG4gICAgICAgICAgICAgICAgX2lkOiAwLFxyXG4gICAgICAgICAgICAgICAgaXRlbXM6IHBhcmFtcy5saW1pdCA+IDAgPyB7JHNsaWNlOiBbXCIkcmVzdWx0XCIsIHBhcmFtcy5wYWdlICogcGFyYW1zLmxpbWl0LCBwYXJhbXMubGltaXRdfSA6IFwiJHJlc3VsdFwiLFxyXG4gICAgICAgICAgICAgICAgY291bnQ6IHskc2l6ZTogXCIkcmVzdWx0XCJ9LFxyXG4gICAgICAgICAgICAgICAgbWV0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsOiB7JHNpemU6IFwiJHJlc3VsdFwifSxcclxuICAgICAgICAgICAgICAgICAgICAuLi5tZXRhUHJvamVjdGlvblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBwYWdpbmF0aW9uID0gcmVzdWx0WzBdIGFzIElQYWdpbmF0aW9uQmFzZTxUPjtcclxuICAgIGlmICghcGFnaW5hdGlvbikge1xyXG4gICAgICAgIHJldHVybiB7aXRlbXM6IFtdLCBjb3VudDogMCwgbWV0YToge3RvdGFsOiAwfX07XHJcbiAgICB9XHJcbiAgICBwYWdpbmF0aW9uLml0ZW1zID0gcGFnaW5hdGlvbi5pdGVtcy5tYXAoaSA9PiBoeWRyYXRlUG9wdWxhdGVkKG1vZGVsLCBpKSk7XHJcbiAgICByZXR1cm4gcGFnaW5hdGlvbjtcclxufVxyXG5cclxuY29uc3QgY3JvcEludGVyZmFjZSA9IHtcclxuICAgIHg6IFwibnVtYmVyXCIsXHJcbiAgICB5OiBcIm51bWJlclwiLFxyXG4gICAgdzogXCJudW1iZXJcIixcclxuICAgIGg6IFwibnVtYmVyXCJcclxufTtcclxuXHJcbmZ1bmN0aW9uIHRvQ3JvcFJlZ2lvbihjcm9wSW5mbzogc3RyaW5nIHwgSUFzc2V0Q3JvcEluZm8pOiBSZWdpb24ge1xyXG4gICAgbGV0IGNyb3AgPSBjcm9wSW5mbyBhcyBJQXNzZXRDcm9wSW5mbztcclxuICAgIGlmIChpc1N0cmluZyhjcm9wSW5mbykpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjcm9wID0gSlNPTi5wYXJzZShjcm9wSW5mbyBhcyBzdHJpbmcpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFpc0ludGVyZmFjZShjcm9wLCBjcm9wSW50ZXJmYWNlKSkgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHdpZHRoOiBNYXRoLnJvdW5kKGNyb3AudyksXHJcbiAgICAgICAgaGVpZ2h0OiBNYXRoLnJvdW5kKGNyb3AuaCksXHJcbiAgICAgICAgdG9wOiBNYXRoLnJvdW5kKGNyb3AueSksXHJcbiAgICAgICAgbGVmdDogTWF0aC5yb3VuZChjcm9wLngpXHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9JbWFnZTxUID0gQnVmZmVyIHwgUmVhZGFibGU+KHNyYzogVCwgcGFyYW1zPzogSUFzc2V0SW1hZ2VQYXJhbXMsIG1ldGE/OiBJQXNzZXRNZXRhKTogUHJvbWlzZTxUPiB7XHJcblxyXG4gICAgLy8gRGVmYXVsdCBwYXJhbXMgYW5kIG1ldGFcclxuICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcclxuICAgIG1ldGEgPSBtZXRhIHx8IHt9O1xyXG5cclxuICAgIC8vIEdldCBkZWZhdWx0IGNyb3AgaW5mb1xyXG4gICAgY29uc3QgY3JvcCA9IHRvQ3JvcFJlZ2lvbihtZXRhLmNyb3ApO1xyXG5cclxuICAgIC8vIFJldHVybiB0aGUgc3JjIGlmIHRoZXJlIGFyZSBubyBwYXJhbXMgYW5kIG5vIGRlZmF1bHQgY3JvcCBleGlzdHNcclxuICAgIGlmIChtZXRhLmV4dGVuc2lvbiA9PT0gXCJzdmdcIiB8fCAoT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGggPT0gMCAmJiAhY3JvcCkpIHtcclxuICAgICAgICByZXR1cm4gc3JjO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBhcnNlIHBhcmFtc1xyXG4gICAgcGFyYW1zLnJvdGF0aW9uID0gaXNOYU4ocGFyYW1zLnJvdGF0aW9uKSA/IDAgOiBNYXRoLnJvdW5kKHBhcmFtcy5yb3RhdGlvbiAvIDkwKSAqIDkwO1xyXG4gICAgcGFyYW1zLmNhbnZhc1NjYWxlWCA9IGlzTmFOKHBhcmFtcy5jYW52YXNTY2FsZVgpID8gMSA6IE51bWJlcihwYXJhbXMuY2FudmFzU2NhbGVYKTtcclxuICAgIHBhcmFtcy5jYW52YXNTY2FsZVkgPSBpc05hTihwYXJhbXMuY2FudmFzU2NhbGVZKSA/IDEgOiBOdW1iZXIocGFyYW1zLmNhbnZhc1NjYWxlWSk7XHJcbiAgICBwYXJhbXMuc2NhbGVYID0gaXNOYU4ocGFyYW1zLnNjYWxlWCkgPyAxIDogTnVtYmVyKHBhcmFtcy5zY2FsZVgpO1xyXG4gICAgcGFyYW1zLnNjYWxlWSA9IGlzTmFOKHBhcmFtcy5zY2FsZVkpID8gMSA6IE51bWJlcihwYXJhbXMuc2NhbGVZKTtcclxuICAgIHBhcmFtcy5jcm9wID0gaXNCb29sZWFuKHBhcmFtcy5jcm9wKSA/IHBhcmFtcy5jcm9wIDogcGFyYW1zLmNyb3AgPT0gXCJ0cnVlXCI7XHJcblxyXG4gICAgbGV0IGJ1ZmZlciA9IHNyYyBpbnN0YW5jZW9mIFJlYWRhYmxlID8gYXdhaXQgc3RyZWFtVG9CdWZmZXIoc3JjKSA6IHNyYyBhcyBhbnk7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIC8vIEdldCBjcm9wIGluZm9cclxuICAgICAgICBjb25zdCBjcm9wQmVmb3JlID0gdG9Dcm9wUmVnaW9uKHBhcmFtcy5jcm9wQmVmb3JlIHx8IChwYXJhbXMuY3JvcCA/IG1ldGEuY3JvcEJlZm9yZSA6IG51bGwpKTtcclxuICAgICAgICBjb25zdCBjcm9wQWZ0ZXIgPSB0b0Nyb3BSZWdpb24ocGFyYW1zLmNyb3BBZnRlciB8fCAocGFyYW1zLmNyb3AgPyBtZXRhLmNyb3BBZnRlciA6IG51bGwpKTtcclxuICAgICAgICAvLyBHZXQgbWV0YWRhdGFcclxuICAgICAgICBsZXQgaW1nID0gc2hhcnAoYnVmZmVyKTtcclxuICAgICAgICBsZXQge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgaW1nLm1ldGFkYXRhKCk7XHJcbiAgICAgICAgLy8gQ3JvcCBiZWZvcmUgcmVzaXplXHJcbiAgICAgICAgaWYgKGNyb3BCZWZvcmUpIHtcclxuICAgICAgICAgICAgd2lkdGggPSBjcm9wQmVmb3JlLndpZHRoO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBjcm9wQmVmb3JlLmhlaWdodDtcclxuICAgICAgICAgICAgaW1nID0gaW1nLmV4dHJhY3QoY3JvcEJlZm9yZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjcm9wKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gY3JvcC53aWR0aDtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGltZyA9IGltZy5leHRyYWN0KGNyb3ApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBSZXNpemUgY2FudmFzXHJcbiAgICAgICAgY29uc3QgY2FudmFzU2NhbGVYID0gbWV0YT8uY2FudmFzU2NhbGVYIHx8IDE7XHJcbiAgICAgICAgY29uc3QgY2FudmFzU2NhbGVZID0gbWV0YT8uY2FudmFzU2NhbGVZIHx8IDE7XHJcbiAgICAgICAgaWYgKHBhcmFtcy5jYW52YXNTY2FsZVggIT09IGNhbnZhc1NjYWxlWCB8fCBwYXJhbXMuY2FudmFzU2NhbGVZICE9PSBjYW52YXNTY2FsZVkpIHtcclxuICAgICAgICAgICAgd2lkdGggPSBNYXRoLnJvdW5kKHdpZHRoICogcGFyYW1zLmNhbnZhc1NjYWxlWCk7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IE1hdGgucm91bmQoaGVpZ2h0ICogcGFyYW1zLmNhbnZhc1NjYWxlWSk7XHJcbiAgICAgICAgICAgIGltZyA9IGltZy5yZXNpemUoe3dpZHRoLCBoZWlnaHQsIGJhY2tncm91bmQ6IFwiIzAwMDAwMDAwXCIsIGZpdDogXCJjb250YWluXCJ9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gUmVzaXplIGltYWdlXHJcbiAgICAgICAgaWYgKHBhcmFtcy5zY2FsZVggIT09IDEgfHwgcGFyYW1zLnNjYWxlWSAhPT0gMSkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IE1hdGgucm91bmQod2lkdGggKiBwYXJhbXMuc2NhbGVYKTtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5yb3VuZChoZWlnaHQgKiBwYXJhbXMuc2NhbGVZKTtcclxuICAgICAgICAgICAgaW1nID0gaW1nLnJlc2l6ZSh7d2lkdGgsIGhlaWdodCwgYmFja2dyb3VuZDogXCIjMDAwMDAwMDBcIiwgZml0OiBcImZpbGxcIn0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBDcm9wIGFmdGVyIHJlc2l6ZVxyXG4gICAgICAgIGlmIChjcm9wQWZ0ZXIpIHtcclxuICAgICAgICAgICAgaW1nID0gaW1nLmV4dHJhY3QoY3JvcEFmdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gUm90YXRlXHJcbiAgICAgICAgaWYgKHBhcmFtcy5yb3RhdGlvbiAhPT0gMCkge1xyXG4gICAgICAgICAgICBidWZmZXIgPSBhd2FpdCBpbWcudG9CdWZmZXIoKTtcclxuICAgICAgICAgICAgaW1nID0gc2hhcnAoYnVmZmVyKS5yb3RhdGUocGFyYW1zLnJvdGF0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnVmZmVyID0gYXdhaXQgaW1nLnRvQnVmZmVyKCk7XHJcbiAgICAgICAgc3JjID0gc3JjIGluc3RhbmNlb2YgUmVhZGFibGUgPyBidWZmZXJUb1N0cmVhbShidWZmZXIpIDogYnVmZmVyO1xyXG4gICAgICAgIHJldHVybiBzcmM7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJJbWFnZSBjb252ZXJzaW9uIGVycm9yXCIsIGUpO1xyXG4gICAgICAgIHNyYyA9IHNyYyBpbnN0YW5jZW9mIFJlYWRhYmxlID8gYnVmZmVyVG9TdHJlYW0oYnVmZmVyKSA6IGJ1ZmZlcjtcclxuICAgICAgICByZXR1cm4gc3JjO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYnVmZmVyVG9TdHJlYW0oYnVmZmVyOiBCdWZmZXIpOiBSZWFkYWJsZSB7XHJcbiAgICBjb25zdCByZWFkU3RyZWFtID0gbmV3IFBhc3NUaHJvdWdoKCk7XHJcbiAgICByZWFkU3RyZWFtLmVuZChidWZmZXIpO1xyXG4gICAgcmV0dXJuIHJlYWRTdHJlYW1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbVRvQnVmZmVyKHN0cmVhbTogUmVhZGFibGUpOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbmNhdCA9IFtdO1xyXG4gICAgICAgIHN0cmVhbS5vbihcImRhdGFcIiwgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIGNvbmNhdC5wdXNoKGRhdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHN0cmVhbS5vbihcImVycm9yXCIsIHJlamVjdCk7XHJcbiAgICAgICAgc3RyZWFtLm9uKFwiZW5kXCIsICgpID0+IHJlc29sdmUoQnVmZmVyLmNvbmNhdChjb25jYXQpKSk7XHJcbiAgICB9KVxyXG59XHJcblxyXG5jbGFzcyBSZWFkYWJsZVN0cmVhbUNsb25lIGV4dGVuZHMgUmVhZGFibGUge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRhYmxlU3RyZWFtOiBSZWFkYWJsZSwgb3B0cz86IFJlYWRhYmxlT3B0aW9ucykge1xyXG4gICAgICAgIHN1cGVyKG9wdHMpO1xyXG4gICAgICAgIHJlYWRhYmxlU3RyZWFtPy5vbihcImRhdGFcIiwgY2h1bmsgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnB1c2goY2h1bmspO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJlYWRhYmxlU3RyZWFtPy5vbihcImVuZFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucHVzaChudWxsKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZWFkYWJsZVN0cmVhbT8ub24oXCJlcnJvclwiLCBlcnIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBlcnIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9yZWFkKHNpemU6IG51bWJlcikge1xyXG5cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlTdHJlYW0oc3RyZWFtOiBSZWFkYWJsZSwgb3B0cz86IFJlYWRhYmxlT3B0aW9ucyk6IFJlYWRhYmxlIHtcclxuICAgIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW1DbG9uZShzdHJlYW0sIG9wdHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWtkaXJSZWN1cnNpdmUocGF0aDogc3RyaW5nLCBtb2RlOiBudW1iZXIgPSBudWxsKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBta2RpcihwYXRoLCB7bW9kZTogbW9kZSB8fCAwbzc3NywgcmVjdXJzaXZlOiB0cnVlfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGaWxlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8QnVmZmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgdW5saW5rKHBhdGgsIGVyciA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVhZEZpbGUocGF0aDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXMsIHJlaikgPT4ge1xyXG4gICAgICAgIGZzUmVhZEZpbGUocGF0aCwgKGVyciwgZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICByZWooZXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXMoZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRBbmREZWxldGVGaWxlKHBhdGg6IHN0cmluZywgdGltZW91dDogbnVtYmVyID0gNTAwMCk6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVhZEZpbGUocGF0aCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB1bmxpbmsocGF0aCwgKCkgPT4ge1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgdGltZW91dCk7XHJcbiAgICByZXR1cm4gZGF0YTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlRmlsZShwYXRoOiBzdHJpbmcsIGRhdGE6IEJ1ZmZlcik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgICBhd2FpdCBta2RpclJlY3Vyc2l2ZShkaXJuYW1lKHBhdGgpKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXMsIHJlaikgPT4ge1xyXG4gICAgICAgIGZzV3JpdGVGaWxlKHBhdGgsIGRhdGEsIGVyciA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHJlaihlcnIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlcyhkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVUb1Byb21pc2UodmFsdWU6IGFueSk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlID8gdmFsdWUgOiBQcm9taXNlLnJlc29sdmUodmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZVRpbWVvdXQodGltZW91dDogbnVtYmVyID0gMTAwMCwgZXJyb3I6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGBUaW1lb3V0IGV4Y2VlZGVkOiAke3RpbWVvdXR9bXNgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNvbHZlKGBUaW1lb3V0OiAke3RpbWVvdXR9bXNgKTtcclxuICAgICAgICB9LCB0aW1lb3V0KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uc3RydWN0b3JOYW1lKHR5cGU6IFR5cGU8YW55Pik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdHlwZS5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZ1bmN0aW9uUGFyYW1zKGZ1bmM6IEZ1bmN0aW9uKTogc3RyaW5nW10ge1xyXG4gICAgLy8gUmVtb3ZlIGNvbW1lbnRzIG9mIHRoZSBmb3JtIC8qIC4uLiAqL1xyXG4gICAgLy8gUmVtb3ZpbmcgY29tbWVudHMgb2YgdGhlIGZvcm0gLy9cclxuICAgIC8vIFJlbW92ZSBib2R5IG9mIHRoZSBmdW5jdGlvbiB7IC4uLiB9XHJcbiAgICAvLyByZW1vdmluZyBcIj0+XCIgaWYgZnVuYyBpcyBhcnJvdyBmdW5jdGlvblxyXG4gICAgY29uc3Qgc3RyID0gZnVuYy50b1N0cmluZygpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xcL1xcKltcXHNcXFNdKj9cXCpcXC8vZywgXCJcIilcclxuICAgICAgICAucmVwbGFjZSgvXFwvXFwvKC4pKi9nLCBcIlwiKVxyXG4gICAgICAgIC5yZXBsYWNlKC97W1xcc1xcU10qfS8sIFwiXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoLz0+L2csIFwiXCIpXHJcbiAgICAgICAgLnRyaW0oKTtcclxuXHJcbiAgICAvLyBTdGFydCBwYXJhbWV0ZXIgbmFtZXMgYWZ0ZXIgZmlyc3QgXCIoXCJcclxuICAgIGNvbnN0IHN0YXJ0ID0gc3RyLmluZGV4T2YoXCIoXCIpICsgMTtcclxuXHJcbiAgICAvLyBFbmQgcGFyYW1ldGVyIG5hbWVzIGlzIGp1c3QgYmVmb3JlIGxhc3QgXCIpXCJcclxuICAgIGNvbnN0IGVuZCA9IHN0ci5sZW5ndGggLSAxO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gc3RyLnN1YnN0cmluZyhzdGFydCwgZW5kKS5zcGxpdChcIiwgXCIpO1xyXG4gICAgY29uc3QgcGFyYW1zID0gW107XHJcblxyXG4gICAgcmVzdWx0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcblxyXG4gICAgICAgIC8vIFJlbW92aW5nIGFueSBkZWZhdWx0IHZhbHVlXHJcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucmVwbGFjZSgvPVtcXHNcXFNdKi9nLCBcIlwiKS50cmltKCk7XHJcblxyXG4gICAgICAgIGlmIChlbGVtZW50Lmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHBhcmFtcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb3h5RnVuY3Rpb24obmFtZTogc3RyaW5nKTogRnVuY3Rpb24ge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBhcmdzID0gQXJyYXkuZnJvbShhcmd1bWVudHMpO1xyXG4gICAgICAgIGFyZ3MudW5zaGlmdCh0aGlzKTtcclxuICAgICAgICByZXR1cm4gKHRoaXMuaGVscGVyW25hbWVdIGFzIEZ1bmN0aW9uKS5hcHBseSh0aGlzLmhlbHBlciwgYXJncyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm94eUZ1bmN0aW9ucyhzY2hlbWE6IFNjaGVtYSwgaGVscGVyOiBUeXBlPGFueT4sIHBhcmFtTmFtZTogc3RyaW5nID0gbnVsbCk6IHZvaWQge1xyXG4gICAgcGFyYW1OYW1lID0gcGFyYW1OYW1lIHx8IGxjRmlyc3QoZ2V0Q29uc3RydWN0b3JOYW1lKGhlbHBlcikpLnJlcGxhY2UoL2hlbHBlciQvZ2ksIFwiXCIpO1xyXG4gICAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhoZWxwZXIucHJvdG90eXBlKTtcclxuICAgIE9iamVjdC5rZXlzKGRlc2NyaXB0b3JzKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSBkZXNjcmlwdG9yc1tuYW1lXS52YWx1ZTtcclxuICAgICAgICBpZiAoaXNGdW5jdGlvbihmdW5jKSAmJiBuYW1lICE9PSBcImNvbnN0cnVjdG9yXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFyYW1OYW1lcyA9IGdldEZ1bmN0aW9uUGFyYW1zKGZ1bmMpO1xyXG4gICAgICAgICAgICBpZiAocGFyYW1OYW1lc1swXSA9PSBwYXJhbU5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHNjaGVtYS5tZXRob2RzW25hbWVdID0gcHJveHlGdW5jdGlvbihuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaW5qZWN0U2VydmljZXMoc2NoZW1hLCB7XHJcbiAgICAgICAgXCJoZWxwZXJcIjogaGVscGVyXHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFJlc29sdmVFbnRpdHk8VCBleHRlbmRzIERvY3VtZW50Pihtb2RlbDogTW9kZWw8VD4sIGV4dHJhQ2hlY2s/OiAocXVlcnk6IERvY3VtZW50UXVlcnk8VCwgYW55PiwgYWN0aW9uOiBBY3Rpb24pID0+IFQgfCBQcm9taXNlPFQ+KTogUGFyYW1ldGVyRGVjb3JhdG9yIHtcclxuICAgIGNvbnN0IG1vZGVsTmFtZSA9IG1vZGVsLm1vZGVsTmFtZTtcclxuICAgIGNvbnN0IHBhcmFtTmFtZSA9IG1vZGVsTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIGNyZWF0ZVBhcmFtRGVjb3JhdG9yKHtcclxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgICAgdmFsdWU6IGFzeW5jIGFjdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IGFjdGlvbi5yZXF1ZXN0IGFzIElSZXF1ZXN0O1xyXG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IHJlcS5oZWFkZXIoYHgtJHtwYXJhbU5hbWV9LXRva2VuYCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkID0gcmVxLnBhcmFtc1tgJHtwYXJhbU5hbWV9SWRgXSBhcyBzdHJpbmc7XHJcbiAgICAgICAgICAgIGlmICghaWQgJiYgIXRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEVycm9yKGAke21vZGVsTmFtZX0gaWQgb3IgdG9rZW4gc2hvdWxkIGJlIGRlZmluZWQhYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcXVlcnkgPSAhdG9rZW5cclxuICAgICAgICAgICAgICAgID8gbW9kZWwuZmluZEJ5SWQoaWQpXHJcbiAgICAgICAgICAgICAgICA6IG1vZGVsLmZpbmRPbmUoe3Rva2VufSBhcyBhbnkpO1xyXG4gICAgICAgICAgICBjb25zdCBkb2MgPSBhd2FpdCBxdWVyeTtcclxuICAgICAgICAgICAgaWYgKCFkb2MpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoNDA0LCAhdG9rZW5cclxuICAgICAgICAgICAgICAgICAgICA/IGAke21vZGVsTmFtZX0gY291bGQgbm90IGJlIGZvdW5kIHdpdGggaWQ6ICR7aWR9YFxyXG4gICAgICAgICAgICAgICAgICAgIDogYCR7bW9kZWxOYW1lfSBjb3VsZCBub3QgYmUgZm91bmQgd2l0aCB0b2tlbjogJHt0b2tlbn1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihleHRyYUNoZWNrKSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24ucmVxdWVzdFtwYXJhbU5hbWVdID0gYXdhaXQgdmFsdWVUb1Byb21pc2UoZXh0cmFDaGVjayhxdWVyeSwgYWN0aW9uKSkgfHwgZG9jO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb24ucmVxdWVzdFtwYXJhbU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXJyb3IoYCR7bW9kZWxOYW1lfSBjaGVjayBlcnJvcjogJHtlLm1lc3NhZ2UgfHwgZX1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhY3Rpb24ucmVxdWVzdFtwYXJhbU5hbWVdID0gZG9jO1xyXG4gICAgICAgICAgICByZXR1cm4gZG9jO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZU5hbWUocGF0aDogc3RyaW5nLCB3aXRoRXh0ZW5zaW9uOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbmFtZSA9IGJhc2VuYW1lKHBhdGggfHwgXCJcIik7XHJcbiAgICByZXR1cm4gd2l0aEV4dGVuc2lvbiA/IG5hbWUgOiBuYW1lLnNwbGl0KFwiLlwiKS5zbGljZSgwLCAtMSkuam9pbihcIi5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb24ocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShwYXRoIHx8IFwiXCIpO1xyXG4gICAgcmV0dXJuIG5hbWUuc3BsaXQoXCIuXCIpLnBvcCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaWRUb1N0cmluZyh2YWx1ZTogYW55KTogYW55IHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoaWRUb1N0cmluZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBPYmplY3RJZCA/IHZhbHVlLnRvSGV4U3RyaW5nKCkgOiBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHJhbnNmb3JtZXIodHJhbnNmb3JtPzogKGRvYzogRG9jdW1lbnQsIHJldDogYW55LCBvcHRpb25zPzogYW55KSA9PiBhbnkpIHtcclxuICAgIHJldHVybiAoZG9jOiBEb2N1bWVudCwgcmV0OiBhbnksIG9wdGlvbnM/OiBhbnkpID0+IHtcclxuICAgICAgICByZXQuaWQgPSBpZFRvU3RyaW5nKHJldC5pZCkgfHwgcmV0LmlkO1xyXG4gICAgICAgIGlmIChkb2MuX2lkKSB7XHJcbiAgICAgICAgICAgIHJldC5faWQgPSBpZFRvU3RyaW5nKGRvYy5faWQpO1xyXG4gICAgICAgICAgICByZXQuaWQgPSByZXQuaWQgfHwgcmV0Ll9pZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVsZXRlIHJldC5fX3Y7XHJcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24odHJhbnNmb3JtKSA/IHRyYW5zZm9ybShkb2MsIHJldCwgb3B0aW9ucykgfHwgcmV0IDogcmV0O1xyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJyb2FkY2FzdChzb2NrZXRTZXJ2ZXI6IFNlcnZlciwgY2I6IChjbGllbnQ6IElDbGllbnRTb2NrZXQpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIEFycmF5LmZyb20oT2JqZWN0LnZhbHVlcyhzb2NrZXRTZXJ2ZXIuc29ja2V0cy5zb2NrZXRzKSkuZm9yRWFjaChjYik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYW5kKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5yb3VuZChyYW5kb20obWluLCBtYXgpKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbShtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIG1pbiArIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpU3Vic2NyaXB0aW9uKC4uLnN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdKTogU3Vic2NyaXB0aW9uIHtcclxuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IHtcclxuICAgICAgICBzdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiB7XHJcbiAgICAgICAgICAgIHMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2YWJsZUZyb21GdW5jdGlvbihjYWxsYmFja0Z1bmM6ICgpID0+IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgc3ViamVjdDogYW55O1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPGFueT4oKHN1YnNjcmliZXIpID0+IHtcclxuICAgICAgICBpZiAoIXN1YmplY3QpIHtcclxuICAgICAgICAgICAgc3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzdWJqZWN0ID0gZnJvbShjYWxsYmFja0Z1bmMoKSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhblJlcG9ydEVycm9yKHN1YmplY3QpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZXJyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3ViamVjdC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhZExlZnQodmFsdWU6IGFueSwgY291bnQ6IG51bWJlciA9IDMsIHBhZFdpdGg6IHN0cmluZyA9IFwiMFwiKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHt2YWx1ZX1gLnBhZFN0YXJ0KGNvdW50LCBwYWRXaXRoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhZFJpZ2h0KHZhbHVlOiBhbnksIGNvdW50OiBudW1iZXIgPSAzLCBwYWRXaXRoOiBzdHJpbmcgPSBcIjBcIik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7dmFsdWV9YC5wYWRFbmQoY291bnQsIHBhZFdpdGgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlRnJvbUJ1Y2tldChidWNrZXQ6IEdyaWRGU0J1Y2tldCwgZmlsZUlkOiBPYmplY3RJZCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGJ1Y2tldC5kZWxldGUoZmlsZUlkLCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIGxldCBlcnIgPSBlcnJvciBhcyBhbnk7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgZXJyID0gZXJyb3IubWVzc2FnZSB8fCBlcnJvciB8fCBcIlwiO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpc1N0cmluZyhlcnIpIHx8ICFlcnIuc3RhcnRzV2l0aChcIkZpbGVOb3RGb3VuZFwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNvbHZlKGZpbGVJZC50b0hleFN0cmluZygpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pKTtcclxufVxyXG5cclxuY29uc3QgZGVmYXVsdFByZWRpY2F0ZTogRmlsdGVyUHJlZGljYXRlID0gKCkgPT4gdHJ1ZTtcclxuXHJcbmZ1bmN0aW9uIGNvcHlSZWN1cnNpdmUodGFyZ2V0OiBhbnksIHNvdXJjZTogYW55LCBwcmVkaWNhdGU/OiBGaWx0ZXJQcmVkaWNhdGUpOiBhbnkge1xyXG4gICAgcHJlZGljYXRlID0gcHJlZGljYXRlIHx8IGRlZmF1bHRQcmVkaWNhdGU7XHJcbiAgICBpZiAoaXNQcmltaXRpdmUoc291cmNlKSB8fCBpc0RhdGUoc291cmNlKSB8fCBpc0Z1bmN0aW9uKHNvdXJjZSkpIHJldHVybiBzb3VyY2U7XHJcbiAgICBpZiAoaXNBcnJheShzb3VyY2UpKSB7XHJcbiAgICAgICAgdGFyZ2V0ID0gaXNBcnJheSh0YXJnZXQpID8gQXJyYXkuZnJvbSh0YXJnZXQpIDogW107XHJcbiAgICAgICAgc291cmNlLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcHJlZGljYXRlKGl0ZW0sIGluZGV4LCB0YXJnZXQsIHNvdXJjZSkpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHRhcmdldC5sZW5ndGggPiBpbmRleClcclxuICAgICAgICAgICAgICAgIHRhcmdldFtpbmRleF0gPSBjb3B5UmVjdXJzaXZlKHRhcmdldFtpbmRleF0sIGl0ZW0sIHByZWRpY2F0ZSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRhcmdldC5wdXNoKGNvcHlSZWN1cnNpdmUobnVsbCwgaXRlbSwgcHJlZGljYXRlKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH1cclxuICAgIGNvbnN0IHNob3VsZENvcHkgPSBpc0Z1bmN0aW9uKHNvdXJjZS5fX3Nob3VsZENvcHkpID8gc291cmNlLl9fc2hvdWxkQ29weSA6ICgpID0+IHRydWU7XHJcbiAgICBpZiAoaXNDb25zdHJ1Y3Rvcihzb3VyY2UuY29uc3RydWN0b3IpKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZS5fX3Nob3VsZENvcHkgPT09IGZhbHNlKSByZXR1cm4gc291cmNlO1xyXG4gICAgICAgIGlmICghdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXcgc291cmNlLmNvbnN0cnVjdG9yKCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3RvID0gc291cmNlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSB8fCBzb3VyY2UucHJvdG90eXBlO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gT2JqZWN0LmNyZWF0ZShwcm90byk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRhcmdldCA9IE9iamVjdC5hc3NpZ24oe30sIHRhcmdldCB8fCB7fSk7XHJcbiAgICB9XHJcbiAgICAvLyBDb3B5IG1hcCBlbnRyaWVzXHJcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgTWFwKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIE1hcCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2Ygc291cmNlLmVudHJpZXMoKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFwcmVkaWNhdGUodmFsdWUsIGtleSwgdGFyZ2V0LCBzb3VyY2UpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zZXQoa2V5LCAhc2hvdWxkQ29weShrZXksIHZhbHVlKSA/IHZhbHVlIDogY29weVJlY3Vyc2l2ZSh0YXJnZXQuZ2V0KGtleSksIHZhbHVlLCBwcmVkaWNhdGUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvcHkgb2JqZWN0IG1lbWJlcnNcclxuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcclxuICAgIHRhcmdldCA9IGtleXMucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xyXG4gICAgICAgIGlmICghcHJlZGljYXRlKHNvdXJjZVtrZXldLCBrZXksIHJlc3VsdCwgc291cmNlKSkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICByZXN1bHRba2V5XSA9ICFzaG91bGRDb3B5KGtleSwgc291cmNlW2tleV0pID8gc291cmNlW2tleV0gOiBjb3B5UmVjdXJzaXZlKHJlc3VsdFtrZXldLCBzb3VyY2Vba2V5XSwgcHJlZGljYXRlKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSwgdGFyZ2V0KTtcclxuXHJcbiAgICAvLyBDb3B5IG9iamVjdCBwcm9wZXJ0aWVzXHJcbiAgICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSk7XHJcbiAgICBrZXlzID0gT2JqZWN0LmtleXMoZGVzY3JpcHRvcnMpLmZpbHRlcihrID0+IGtleXMuaW5kZXhPZihrKSA8IDApO1xyXG4gICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yc1trZXldKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcjxUPihvYmo6IFQsIHByZWRpY2F0ZTogRmlsdGVyUHJlZGljYXRlKTogUGFydGlhbDxUPiB7XHJcbiAgICByZXR1cm4gY29weVJlY3Vyc2l2ZShudWxsLCBvYmosIHByZWRpY2F0ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3B5PFQ+KG9iajogVCk6IFQge1xyXG4gICAgcmV0dXJuIGNvcHlSZWN1cnNpdmUobnVsbCwgb2JqKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbjxUPih0YXJnZXQ6IFQsIHNvdXJjZTogYW55LCBwcmVkaWNhdGU/OiBGaWx0ZXJQcmVkaWNhdGUpOiBUIHtcclxuICAgIHJldHVybiBjb3B5UmVjdXJzaXZlKHRhcmdldCwgc291cmNlLCBwcmVkaWNhdGUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWQ1KGRhdGE6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoaXNPYmplY3QoZGF0YSkpIHtcclxuICAgICAgICBkYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzU3RyaW5nKGRhdGEpKSB7XHJcbiAgICAgICAgdGhyb3cgYENhbid0IG1kNSBvdGhlciB0aGF0IHJhdyBvYmplY3Qgb3Igc3RyaW5nYDtcclxuICAgIH1cclxuICAgIHJldHVybiBjcmVhdGVIYXNoKFwibWQ1XCIpLnVwZGF0ZShkYXRhKS5kaWdlc3QoXCJoZXhcIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBydW5Db21tYW5kKHNjcmlwdFBhdGg6IHN0cmluZywgZXhwZWN0ZWRDb2RlOiBudW1iZXIgPSAwKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY3AgPSBleGVjQ2hpbGRQcm9jZXNzKHNjcmlwdFBhdGgsIChlcnJvciwgc3Rkb3V0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvciAmJiBleHBlY3RlZENvZGUgIT09IGVycm9yLmNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbGluZXMgPSAoc3Rkb3V0IHx8IFwiXCIpLnNwbGl0KFwiXFxuXCIpO1xyXG4gICAgICAgICAgICBsZXQgbGluZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHdoaWxlICghbGluZSAmJiBsaW5lcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBsaW5lID0gbGluZXMucG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZShsaW5lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjcC5zdGRvdXQub24oXCJkYXRhXCIsIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY3Auc3RkZXJyLm9uKFwiZGF0YVwiLCBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGRhdGEudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGVudW0gQ29uc29sZUNvbG9yIHtcclxuICAgIFJlc2V0ID0gXCJcXHgxYlswbVwiLFxyXG4gICAgQnJpZ2h0ID0gXCJcXHgxYlsxbVwiLFxyXG4gICAgRGltID0gXCJcXHgxYlsybVwiLFxyXG4gICAgVW5kZXJzY29yZSA9IFwiXFx4MWJbNG1cIixcclxuICAgIEJsaW5rID0gXCJcXHgxYls1bVwiLFxyXG4gICAgUmV2ZXJzZSA9IFwiXFx4MWJbN21cIixcclxuICAgIEhpZGRlbiA9IFwiXFx4MWJbOG1cIixcclxuXHJcbiAgICBGZ0JsYWNrID0gXCJcXHgxYlszMG1cIixcclxuICAgIEZnUmVkID0gXCJcXHgxYlszMW1cIixcclxuICAgIEZnR3JlZW4gPSBcIlxceDFiWzMybVwiLFxyXG4gICAgRmdZZWxsb3cgPSBcIlxceDFiWzMzbVwiLFxyXG4gICAgRmdCbHVlID0gXCJcXHgxYlszNG1cIixcclxuICAgIEZnTWFnZW50YSA9IFwiXFx4MWJbMzVtXCIsXHJcbiAgICBGZ0N5YW4gPSBcIlxceDFiWzM2bVwiLFxyXG4gICAgRmdXaGl0ZSA9IFwiXFx4MWJbMzdtXCIsXHJcbiAgICBGZ0RlZmF1bHQgPSBcIlxceDFiWzM4bVwiLFxyXG5cclxuICAgIEJnQmxhY2sgPSBcIlxceDFiWzQwbVwiLFxyXG4gICAgQmdSZWQgPSBcIlxceDFiWzQxbVwiLFxyXG4gICAgQmdHcmVlbiA9IFwiXFx4MWJbNDJtXCIsXHJcbiAgICBCZ1llbGxvdyA9IFwiXFx4MWJbNDNtXCIsXHJcbiAgICBCZ0JsdWUgPSBcIlxceDFiWzQ0bVwiLFxyXG4gICAgQmdNYWdlbnRhID0gXCJcXHgxYls0NW1cIixcclxuICAgIEJnQ3lhbiA9IFwiXFx4MWJbNDZtXCIsXHJcbiAgICBCZ1doaXRlID0gXCJcXHgxYls0N21cIixcclxuICAgIEJnRGVmYXVsdCA9IFwiXFx4MWJbNDhtXCJcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJSnNvbkNvbG9ycyB7XHJcbiAgICBrZXlDb2xvcj86IENvbnNvbGVDb2xvcjtcclxuICAgIG51bWJlckNvbG9yPzogQ29uc29sZUNvbG9yO1xyXG4gICAgc3RyaW5nQ29sb3I/OiBDb25zb2xlQ29sb3I7XHJcbiAgICB0cnVlQ29sb3I/OiBDb25zb2xlQ29sb3I7XHJcbiAgICBmYWxzZUNvbG9yPzogQ29uc29sZUNvbG9yO1xyXG4gICAgbnVsbENvbG9yPzogQ29uc29sZUNvbG9yO1xyXG59XHJcblxyXG5jb25zdCBkZWZhdWx0Q29sb3JzOiBJSnNvbkNvbG9ycyA9IHtcclxuICAgIGtleUNvbG9yOiBDb25zb2xlQ29sb3IuRmdXaGl0ZSxcclxuICAgIG51bWJlckNvbG9yOiBDb25zb2xlQ29sb3IuRmdCbHVlLFxyXG4gICAgc3RyaW5nQ29sb3I6IENvbnNvbGVDb2xvci5GZ1llbGxvdyxcclxuICAgIHRydWVDb2xvcjogQ29uc29sZUNvbG9yLkZnR3JlZW4sXHJcbiAgICBmYWxzZUNvbG9yOiBDb25zb2xlQ29sb3IuRmdSZWQsXHJcbiAgICBudWxsQ29sb3I6IENvbnNvbGVDb2xvci5CZ01hZ2VudGFcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yaXplKGlucHV0OiBhbnksIGNvbG9yOiBDb25zb2xlQ29sb3IpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke2NvbG9yfSR7aW5wdXR9JHtDb25zb2xlQ29sb3IuUmVzZXR9YDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGpzb25IaWdobGlnaHQoaW5wdXQ6IHN0cmluZyB8IG9iamVjdCwgY29sb3JPcHRpb25zPzogSUpzb25Db2xvcnMpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY29sb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdENvbG9ycywgY29sb3JPcHRpb25zKVxyXG4gICAgY29uc3QganNvbiA9IChpc1N0cmluZyhpbnB1dCkgPyBpbnB1dCA6IEpTT04uc3RyaW5naWZ5KGlucHV0LCBudWxsLCAyKSkucmVwbGFjZSgvJi9nLCAnJicpLnJlcGxhY2UoLzwvZywgJzwnKS5yZXBsYWNlKC8+L2csICc+JylcclxuICAgIHJldHVybiBqc29uLnJlcGxhY2UoLyhcIihcXFxcdVthLXpBLVowLTldezR9fFxcXFxbXnVdfFteXFxcXFwiXSkqXCIoXFxzKjopP3xcXGIodHJ1ZXxmYWxzZXxudWxsKVxcYnwtP1xcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWytdP1xcZCspPykvZywgKG1hdGNoKSA9PiB7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gY29sb3JzLm51bWJlckNvbG9yXHJcbiAgICAgICAgaWYgKC9eXCIvLnRlc3QobWF0Y2gpKSB7XHJcbiAgICAgICAgICAgIGlmICgvOiQvLnRlc3QobWF0Y2gpKSB7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9ycy5rZXlDb2xvclxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvcnMuc3RyaW5nQ29sb3I7XHJcbiAgICAgICAgICAgICAgICBtYXRjaCA9ICdcIicgKyBtYXRjaC5zdWJzdHIoMSwgbWF0Y2gubGVuZ3RoIC0gMikgKyAnXCInO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29sb3IgPSAvdHJ1ZS8udGVzdChtYXRjaClcclxuICAgICAgICAgICAgICAgID8gY29sb3JzLnRydWVDb2xvclxyXG4gICAgICAgICAgICAgICAgOiAvZmFsc2UvLnRlc3QobWF0Y2gpXHJcbiAgICAgICAgICAgICAgICAgICAgPyBjb2xvcnMuZmFsc2VDb2xvclxyXG4gICAgICAgICAgICAgICAgICAgIDogL251bGwvLnRlc3QobWF0Y2gpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29sb3JzLm51bGxDb2xvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGNvbG9yXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHtjb2xvcn0ke21hdGNofSR7Q29uc29sZUNvbG9yLlJlc2V0fWBcclxuICAgIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlU3BlY2lhbENoYXJzKHN0cjogc3RyaW5nLCB0bzogc3RyaW5nID0gXCItXCIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke3N0cn1gLnJlcGxhY2UoL1smXFwvXFxcXCMsICsoKSR+JS5AJ1wiOio/PD57fV0vZywgdG8pO1xyXG59XHJcbiJdfQ==
|