@rivet-health/design-system 40.35.0 → 40.35.2
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/esm2020/lib/table/table/state-helpers/search-helpers.mjs +45 -1
- package/esm2020/lib/table/table/state.mjs +9 -66
- package/esm2020/lib/table/table/table/table.component.mjs +3 -3
- package/fesm2015/rivet-health-design-system.mjs +58 -61
- package/fesm2015/rivet-health-design-system.mjs.map +1 -1
- package/fesm2020/rivet-health-design-system.mjs +54 -67
- package/fesm2020/rivet-health-design-system.mjs.map +1 -1
- package/lib/table/table/state-helpers/search-helpers.d.ts +12 -0
- package/package.json +1 -1
|
@@ -464,43 +464,15 @@ export var RivTable;
|
|
|
464
464
|
*/
|
|
465
465
|
RivTable.NestedPaginateByOptions = ['bottomRows', 'topRows'];
|
|
466
466
|
function createInMemoryManager(fetchDataset, columns, pluralEntityName, options) {
|
|
467
|
+
columns = TableSearchHelpers.markColumnsOutsideFuseKeysUnsearchable(columns, options?.fuseOptions);
|
|
467
468
|
let data;
|
|
468
469
|
let fuse;
|
|
469
470
|
const source = async (query, mostRecentAction) => {
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
if (mostRecentAction.type === 'load') {
|
|
473
|
-
//Prevent searching on columns that are in fuse options but not supported by search.
|
|
474
|
-
const nonSearchableColumnsKeys = options?.fuseOptions?.keys
|
|
475
|
-
? Array.from(columns.entries())
|
|
476
|
-
.filter(([key, column]) => {
|
|
477
|
-
return column.searchable == false;
|
|
478
|
-
})
|
|
479
|
-
.map(([key, column]) => {
|
|
480
|
-
return column.orderKey?.toString() || key.toString();
|
|
481
|
-
})
|
|
482
|
-
: undefined;
|
|
483
|
-
const fuseOptions = options?.fuseOptions && nonSearchableColumnsKeys
|
|
484
|
-
? {
|
|
485
|
-
...options?.fuseOptions,
|
|
486
|
-
keys: options?.fuseOptions?.keys?.filter(k => !nonSearchableColumnsKeys.includes(k.toString())),
|
|
487
|
-
}
|
|
488
|
-
: options?.fuseOptions;
|
|
489
|
-
data = await fetchDataset();
|
|
490
|
-
fuse = new Fuse(data, fuseOptions);
|
|
491
|
-
}
|
|
492
|
-
if (mostRecentAction.type === 'searchColumnsChange' ||
|
|
471
|
+
if (mostRecentAction.type === 'load' ||
|
|
472
|
+
mostRecentAction.type === 'searchColumnsChange' ||
|
|
493
473
|
mostRecentAction.type === 'toggleAllSearchColumns') {
|
|
494
474
|
data = await fetchDataset();
|
|
495
|
-
fuse = new Fuse(data,
|
|
496
|
-
...options?.fuseOptions,
|
|
497
|
-
keys: Array.from(query.searchColumns.entries())
|
|
498
|
-
.filter(([_, value]) => !!value)
|
|
499
|
-
.map(([key, _]) => {
|
|
500
|
-
const columnKey = columns.get(key);
|
|
501
|
-
return columnKey?.orderKey || key;
|
|
502
|
-
}),
|
|
503
|
-
});
|
|
475
|
+
fuse = new Fuse(data, TableSearchHelpers.fuseOptionsForSearchColumns(options?.fuseOptions, columns, query));
|
|
504
476
|
}
|
|
505
477
|
const orderColumn = query.order
|
|
506
478
|
? columns.get(query.order.column)?.orderKey
|
|
@@ -556,47 +528,18 @@ export var RivTable;
|
|
|
556
528
|
}
|
|
557
529
|
RivTable.createInMemoryManager = createInMemoryManager;
|
|
558
530
|
function createInMemoryManagerNested(fetchDataset, columns, pluralEntityName, options) {
|
|
531
|
+
columns = TableSearchHelpers.markColumnsOutsideFuseKeysUnsearchable(columns, options?.fuseOptions);
|
|
559
532
|
let data;
|
|
560
533
|
let rowsFromData;
|
|
561
534
|
// The fuse will search the individual rows
|
|
562
535
|
let fuse;
|
|
563
536
|
const source = async (query, mostRecentAction) => {
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
if (mostRecentAction.type === 'load') {
|
|
567
|
-
//Prevent searching on columns that are in fuse options but not supported by search.
|
|
568
|
-
const nonSearchableColumnsKeys = options?.fuseOptions?.keys
|
|
569
|
-
? Array.from(columns.entries())
|
|
570
|
-
.filter(([key, column]) => {
|
|
571
|
-
return column.searchable == false;
|
|
572
|
-
})
|
|
573
|
-
.map(([key, column]) => {
|
|
574
|
-
return column.orderKey?.toString() || key.toString();
|
|
575
|
-
})
|
|
576
|
-
: undefined;
|
|
577
|
-
const fuseOptions = options?.fuseOptions && nonSearchableColumnsKeys
|
|
578
|
-
? {
|
|
579
|
-
...options?.fuseOptions,
|
|
580
|
-
keys: options?.fuseOptions?.keys?.filter(k => !nonSearchableColumnsKeys.includes(k.toString())),
|
|
581
|
-
}
|
|
582
|
-
: options?.fuseOptions;
|
|
583
|
-
data = await fetchDataset();
|
|
584
|
-
rowsFromData = TableResultHelpers.getAllRowsFromNestedHeaders(data);
|
|
585
|
-
fuse = new Fuse(rowsFromData, fuseOptions);
|
|
586
|
-
}
|
|
587
|
-
if (mostRecentAction.type === 'searchColumnsChange' ||
|
|
537
|
+
if (mostRecentAction.type === 'load' ||
|
|
538
|
+
mostRecentAction.type === 'searchColumnsChange' ||
|
|
588
539
|
mostRecentAction.type === 'toggleAllSearchColumns') {
|
|
589
540
|
data = await fetchDataset();
|
|
590
541
|
rowsFromData = TableResultHelpers.getAllRowsFromNestedHeaders(data);
|
|
591
|
-
fuse = new Fuse(rowsFromData,
|
|
592
|
-
...options?.fuseOptions,
|
|
593
|
-
keys: Array.from(query.searchColumns.entries())
|
|
594
|
-
.filter(([_, value]) => !!value)
|
|
595
|
-
.map(([key, _]) => {
|
|
596
|
-
const columnKey = columns.get(key);
|
|
597
|
-
return columnKey?.orderKey || key;
|
|
598
|
-
}),
|
|
599
|
-
});
|
|
542
|
+
fuse = new Fuse(rowsFromData, TableSearchHelpers.fuseOptionsForSearchColumns(options?.fuseOptions, columns, query));
|
|
600
543
|
}
|
|
601
544
|
const orderColumn = query.order
|
|
602
545
|
? columns.get(query.order.column)?.orderKey
|
|
@@ -1076,4 +1019,4 @@ async function* reduce(state, action, columns, source, columnNameMap, defaultCol
|
|
|
1076
1019
|
break;
|
|
1077
1020
|
}
|
|
1078
1021
|
}
|
|
1079
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLElBQXNCLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQy9DLE9BQU8sRUFFTCxXQUFXLEVBQ1gsTUFBTSxFQUNOLElBQUksRUFDSixHQUFHLEVBQ0gsU0FBUyxFQUVULGFBQWEsRUFDYixJQUFJLEVBQ0osS0FBSyxFQUNMLE9BQU8sR0FDUixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUUxRSxNQUFNLEtBQVcsUUFBUSxDQXVvRHhCO0FBdm9ERCxXQUFpQixRQUFRO0lBMkNWLGtCQUFTLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENB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QUFNLENBQ1AsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLHdCQUF3QjtZQUMzQixLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FDdEIsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLEVBQ2hELE1BQU0sRUFDTixNQUFNLENBQ1AsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLG1CQUFtQjtZQUN0QixNQUFNO2dCQUNKLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDL0QsTUFBTSxFQUFFLElBQUk7YUFDYixDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUssc0JBQXNCO1lBQ3pCLE1BQU07Z0JBQ0osS0FBSyxFQUFFLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNsRSxNQUFNLEVBQUUsSUFBSTthQUNiLENBQUM7WUFDRixNQUFNO1FBQ1IsS0FBSyxvQkFBb0I7WUFDdkIsTUFBTTtnQkFDSixLQUFLLEVBQUUsb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDO2dCQUNyRCxNQUFNLEVBQUUsSUFBSTthQUNiLENBQUM7WUFDRixNQUFNO0tBQ1Q7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYXJhbXMsIFF1ZXJ5UGFyYW1zSGFuZGxpbmcgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IEZ1c2UsIHsgSUZ1c2VPcHRpb25zIH0gZnJvbSAnZnVzZS5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0c0RlZXAsIGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgQ29ubmVjdGFibGUsXG4gIGNvbm5lY3RhYmxlLFxuICBmaWx0ZXIsXG4gIGZyb20sXG4gIG1hcCxcbiAgbWVyZ2VTY2FuLFxuICBPYnNlcnZhYmxlLFxuICBSZXBsYXlTdWJqZWN0LFxuICBzY2FuLFxuICBzaGFyZSxcbiAgU3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEZWVwUGFydGlhbCB9IGZyb20gJ3V0aWxpdHktdHlwZXMnO1xuaW1wb3J0IHsgdG9TZW50ZW5jZUNhc2UgfSBmcm9tICcuLi8uLi9mb3JtYXQvcGlwZXMvc2VudGVuY2UtY2FzZS5waXBlJztcbmltcG9ydCB7IFRhYmxlQ29sbGFwc2VIZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL2NvbGxhcHNlLWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW5IZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL2NvbHVtbi1oZWxwZXJzJztcbmltcG9ydCB7IFRhYmxlRGlzcGxheUhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvZGlzcGxheS1oZWxwZXJzJztcbmltcG9ydCB7IFRhYmxlTmVzdGluZ0hlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvbmVzdGluZy1oZWxwZXJzJztcbmltcG9ydCB7IFRhYmxlT3JkZXJIZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL29yZGVyLWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVQYWdpbmF0aW9uSGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9wYWdpbmF0aW9uLWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVSZXN1bHRIZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL3Jlc3VsdC1oZWxwZXJzJztcbmltcG9ydCB7IFRhYmxlU2VhcmNoSGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9zZWFyY2gtaGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZVNlbGVjdGlvbkhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvc2VsZWN0aW9uLWhlbHBlcnMnO1xuXG5leHBvcnQgbmFtZXNwYWNlIFJpdlRhYmxlIHtcbiAgZXhwb3J0IHR5cGUgUm93ID0geyBpZDogc3RyaW5nIHwgbnVtYmVyIH07XG4gIGV4cG9ydCB0eXBlIENvbHVtbiA9IHN0cmluZztcbiAgZXhwb3J0IHR5cGUgRmlsdGVycyA9IGFueTtcbiAgZXhwb3J0IHR5cGUgR3JvdXAgPSB7IGtleTogc3RyaW5nIHwgbnVtYmVyIH07XG5cbiAgLyoqXG4gICAqIFJpdlRhYmxlJ3Mgc3RhdGUgYW5kIHVzZXIgYWN0aW9ucyBhcmUgZGl2aWRlZCBpbnRvIHRoZSBmb2xsb3dpbmcgY2h1bmtzOlxuICAgKlxuICAgKiAtIFF1ZXJ5IChmb3IgdGhpbmdzIGxpa2UgZmlsdGVycywgcGFnaW5hdGlvbiwgc2VhcmNoLCBldGMuKVxuICAgKiAtIExvYWRpbmcgKGZvciB3aGV0aGVyIG9yIG5vdCB0aGUgdGFibGUgaXMgbG9hZGluZyByb3cgZGF0YSlcbiAgICogLSBSZXN1bHQgKGZvciB0aGUgcm93IGRhdGEgaXRzZWxmKVxuICAgKiAtIERpc3BsYXkgKGZvciB0aGluZ3MgbGlrZSBjb2x1bW4gY29uZmlndXJhdGlvbilcbiAgICogLSBTZWxlY3Rpb24gKGZvciB0cmFja2luZyB0aGUgdXNlcidzIHJvdyBzZWxlY3Rpb25zKVxuICAgKiAtIENvbGxhcHNlU3RhdGUgKGZvciB0cmFja2luZyB0aGUgcm93cy9oZWFkZXJzIHRoYXQgYXJlIGNvbGxhcHNlZClcbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBkYXRhIGZsb3cgaXMgdW5pZGlyZWN0aW9uYWw6IHRoZSBVSSBpc3N1ZXMgYWN0aW9ucywgd2hpY2hcbiAgICogYWZmZWN0IHRoZSBzdGF0ZSwgYW5kIHRoZSBzdGF0ZSBnZXRzIHBhc3NlZCBiYWNrIHRvIHRoZSBVSSBmb3IgZGlzcGxheS5cbiAgICpcbiAgICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAqIOKUgiAgVUkgIOKXhOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgKiDilJTilIDilIDilKzilIDilIDilIDilJggICAgICAgIOKUglxuICAgKiAgICDilIIgICAgICAgICAgICDilIJcbiAgICog4pSM4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAg4pSCXG4gICAqIOKUgiAgQWN0aW9ucyAg4pSCICAg4pSCXG4gICAqIOKUlOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgIOKUglxuICAgKiAgICDilIIgICAgICAgICAgICDilIJcbiAgICog4pSM4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSQXG4gICAqIOKUgiAgU3RhdGUgcmVkdWNlciAg4pSCXG4gICAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAgKlxuICAgKiBGcm9tIHRoZSBjb3JlIHN0YXRlLCBjYWxjdWxhdGVkIHN0YXRlIGlzIGRlcml2ZWQgYW5kIGFkZGVkIHRvIHRoZSBjb3JlXG4gICAqIHN0YXRlIChlLmcuLCBmcm9tIHRoZSByYXcgc2VsZWN0aW9uIHN0YXRlIHdlIGNhbiBkZXRlcm1pbmUgd2hldGhlciBvciBub3RcbiAgICogYWxsIHRoZSByb3dzIG9uIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHBhZ2UgYXJlIHNlbGVjdGVkLCBldGMuKS5cbiAgICovXG5cbiAgLy8vLy8vLy8vLy9cbiAgLy8gUXVlcnkgLy9cbiAgLy8vLy8vLy8vLy9cblxuICAvLyBRdWVyeSBzdGF0ZSAvL1xuXG4gIGV4cG9ydCB0eXBlIE9yZGVyRGlyZWN0aW9uID0gJ2FzYycgfCAnZGVzYyc7XG4gIGV4cG9ydCBjb25zdCBwYWdlU2l6ZXMgPSBbMjUsIDUwLCAxMDAsIDI1MF0gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFF1ZXJ5PEMgZXh0ZW5kcyBDb2x1bW4sIEYgZXh0ZW5kcyBGaWx0ZXJzPiA9IHtcbiAgICBvcmRlcjoge1xuICAgICAgZGlyZWN0aW9uOiBPcmRlckRpcmVjdGlvbjtcbiAgICAgIGNvbHVtbjogQztcbiAgICB9IHwgbnVsbDtcbiAgICBzZWFyY2g6IHN0cmluZztcbiAgICBzZWFyY2hDb2x1bW5zOiBNYXA8QywgYm9vbGVhbj47XG4gICAgZmlsdGVyczogRiB8IG51bGw7XG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgcGFnZTogbnVtYmVyO1xuICAgICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICB9O1xuICAgIGdyb3VwaW5nOiB7XG4gICAgICB2aWV3TW9yZUtleTogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGdyb3Vwc1BlclBhZ2U6IG51bWJlcjtcbiAgICAgIGNvdW50UGVyR3JvdXA6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFF1ZXJ5IGFjdGlvbnMgLy9cblxuICBleHBvcnQgdHlwZSBRdWVyeUFjdGlvbjxDIGV4dGVuZHMgQ29sdW1uLCBGIGV4dGVuZHMgRmlsdGVycz4gPVxuICAgIHwgeyB0eXBlOiAnbG9hZCcgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnb3JkZXJDaGFuZ2UnO1xuICAgICAgICBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnb3JkZXInXTtcbiAgICAgICAgc291cmNlPzogJ2hlYWRlck1lbnUnO1xuICAgICAgfVxuICAgIHwgeyB0eXBlOiAnb3JkZXJDb2x1bW5Ub2dnbGUnOyBjb2x1bW46IEMgfVxuICAgIHwgeyB0eXBlOiAnc2VhcmNoQ2hhbmdlJzsgcGF5bG9hZDogUXVlcnk8QywgRj5bJ3NlYXJjaCddIH1cbiAgICB8IHsgdHlwZTogJ3NlYXJjaENvbHVtbnNDaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnc2VhcmNoQ29sdW1ucyddIH1cbiAgICB8IHsgdHlwZTogJ2ZpbHRlcnNDaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnZmlsdGVycyddIH1cbiAgICB8IHsgdHlwZTogJ2ZpbHRlckFkZCc7IGNvbHVtbktleTogc3RyaW5nIH1cbiAgICB8IHsgdHlwZTogJ3BhZ2luYXRpb25DaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsncGFnaW5hdGlvbiddIH1cbiAgICB8IHsgdHlwZTogJ2dyb3VwaW5nQ2hhbmdlJzsgcGF5bG9hZDogUXVlcnk8QywgRj5bJ2dyb3VwaW5nJ10gfVxuICAgIHwgeyB0eXBlOiAnbmV4dFBhZ2VOYXZpZ2F0ZScgfVxuICAgIHwgeyB0eXBlOiAncHJldmlvdXNQYWdlTmF2aWdhdGUnIH1cbiAgICB8IHsgdHlwZTogJ3BhZ2VDaGFuZ2UnOyBwYWdlOiBudW1iZXIgfVxuICAgIHwgeyB0eXBlOiAncGFnZVNpemVDaGFuZ2UnOyBzaXplOiBudW1iZXIgfVxuICAgIHwgeyB0eXBlOiAnZ3JvdXBzUGVyUGFnZUNoYW5nZSc7IGdyb3Vwc1BlclBhZ2U6IG51bWJlciB9XG4gICAgfCB7IHR5cGU6ICdjb3VudFBlckdyb3VwQ2hhbmdlJzsgY291bnRQZXJHcm91cDogbnVtYmVyIH1cbiAgICB8IHsgdHlwZTogJ3ZpZXdNb3JlS2V5Q2hhbmdlJzsgdmlld01vcmVLZXk6IHN0cmluZyB9XG4gICAgfCB7IHR5cGU6ICd0b2dnbGVBbGxTZWFyY2hDb2x1bW5zJyB9O1xuXG4gIC8vLy8vLy8vLy9cbiAgLy8gTG9hZCAvL1xuICAvLy8vLy8vLy8vXG5cbiAgZXhwb3J0IHR5cGUgTG9hZCA9IHtcbiAgICBsb2FkaW5nOiBib29sZWFuO1xuICAgIGVycm9yOiB1bmtub3duIHwgbnVsbDtcbiAgfTtcblxuICAvLy8vLy8vLy8vLy9cbiAgLy8gUmVzdWx0IC8vXG4gIC8vLy8vLy8vLy8vL1xuXG4gIGV4cG9ydCB0eXBlIFJlc3VsdDxSIGV4dGVuZHMgUm93PiA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnVsbCByb3cgZGF0YSBmb3IgdGhlIGN1cnJlbnQgcGFnZSwgYWZ0ZXIgZmlsdGVycywgc2VhcmNoIHF1ZXJ5LCBhbmRcbiAgICAgKiByb3cgb3JkZXJpbmcgYXJlIGFwcGxpZWQuXG4gICAgICovXG4gICAgY3VycmVudFBhZ2VEYXRhOiBSW107XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiByb3dzIChyZWdhcmRsZXNzIG9mIHBhZ2luYXRpb24pIHRoYXQgbWF0Y2ggdGhlXG4gICAgICogZmlsdGVycyBhbmQgc2VhcmNoIHF1ZXJ5LlxuICAgICAqL1xuICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFN1Ykdyb3VwUmVzdWx0PFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cD4gPSBSZXN1bHQ8Uj4gJiB7XG4gICAgLyoqXG4gICAgICogQW55IG90aGVyIHJlbGV2YW50IGdyb3VwIGRhdGEsIHVzZWQgZm9yIHRoZSBzdWJoZWFkZXJcbiAgICAgKi9cbiAgICBncm91cERhdGE6IEc7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgR3JvdXBSZXN1bHQ8UiBleHRlbmRzIFJvdywgRyBleHRlbmRzIEdyb3VwPiA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnVsbCByb3cgZGF0YSBmb3IgdGhlIGN1cnJlbnQgcGFnZSwgYWZ0ZXIgZmlsdGVycywgc2VhcmNoIHF1ZXJ5LCBhbmRcbiAgICAgKiByb3cgb3JkZXJpbmcgYXJlIGFwcGxpZWQsIHNwbGl0IGludG8gZ3JvdXBzXG4gICAgICovXG4gICAgZ3JvdXBSZXN1bHRzOiBTdWJHcm91cFJlc3VsdDxSLCBHPltdO1xuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgZ3JvdXBzIChyZWdhcmRsZXNzIG9mIHBhZ2luYXRpb24pIHRoYXQgbWF0Y2ggdGhlXG4gICAgICogZmlsdGVycyBhbmQgc2VhcmNoIHF1ZXJ5LlxuICAgICAqL1xuICAgIHRvdGFsR3JvdXBDb3VudDogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cyAocmVnYXJkbGVzcyBvZiBwYWdpbmF0aW9uKSB0aGF0IG1hdGNoIHRoZVxuICAgICAqIGZpbHRlcnMgYW5kIHNlYXJjaCBxdWVyeS5cbiAgICAgKi9cbiAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IG51bWJlcjtcbiAgfTtcblxuICAvKlxuICAgIE5lc3RlZFJlc3VsdFxuICAgICAgTmVzdGVkSGVhZGVyUm93XG4gICAgICAgIE5lc3RlZFJvdyAtIHdpdGggc3Vicm93c1xuICAgICAgICAgIE5lc3RlZFJvdyAtIHdpdGggbm8gc3Vicm93c1xuICAqL1xuICBleHBvcnQgdHlwZSBOZXN0ZWRIZWFkZXJSb3c8UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgLy8gVGhlIHJvd3MgdGhhdCBzaG91bGQgYmUgaGlkZGVuIHdoZW4gdGhlIHRvZ2dsZSBvbiB0aGlzIGhlYWRlciBpcyB0b2dnbGVkLlxuICAgIHN1YlJvd3M6IE5lc3RlZFJvdzxSPltdO1xuXG4gICAgLy8gVGhlIHRleHQgdG8gc2hvdyBuZXh0IHRvIHRoZSB0b2dnbGVhYmxlIGNoZXZyb24sIG9yIG51bGwgaWYgd2UgZG9uJ3Qgc2hvdyB0aGUgaGVhZGVyXG4gICAgaGVhZGVyVGV4dDogc3RyaW5nIHwgbnVsbDtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgTmVzdGVkUm93PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIC8vIFRoZSByb3dzIHRoYXQgc2hvdWxkIGJlIGhpZGRlbiB3aGVuIHRoZSB0b2dnbGUgb24gdGhpcyByb3cgaXMgdG9nZ2xlZC5cbiAgICBzdWJSb3dzPzogTmVzdGVkUm93PFI+W107XG5cbiAgICAvLyBUaGUgcmVsZXZhbnQgZGF0YSB1c2VkIHRvIGRpc3BsYXkgdGhpcyByb3cuXG4gICAgZGF0YTogUjtcbiAgfTtcbiAgLypcbiAgICBOZXN0ZWQgaGVhZGVyIHJvd3MgYXJlIHRvZ2dsZWFibGUgaGVhZGVycyBmb3IgZ3JvdXBzIG9mIHJvd3MuXG4gICovXG4gIGV4cG9ydCB0eXBlIE5lc3RlZFJlc3VsdDxSIGV4dGVuZHMgUm93PiA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnVsbCByb3cgZGF0YSBmb3IgdGhlIGN1cnJlbnQgcGFnZSwgYWZ0ZXIgZmlsdGVycywgc2VhcmNoIHF1ZXJ5LCBhbmRcbiAgICAgKiByb3cgb3JkZXJpbmcgYXJlIGFwcGxpZWQsIG5lc3RlZCBpbnRvIFwiaGVhZGVycyB3aXRoIHN1YnJvd3NcIi5cbiAgICAgKi9cbiAgICBjdXJyZW50UGFnZU5lc3RlZEhlYWRlcnM6IE5lc3RlZEhlYWRlclJvdzxSPltdO1xuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cyAocmVnYXJkbGVzcyBvZiBwYWdpbmF0aW9uKSB0aGF0IG1hdGNoIHRoZVxuICAgICAqIGZpbHRlcnMgYW5kIHNlYXJjaCBxdWVyeS5cbiAgICAgKlxuICAgICAqIE9ubHkgY291bnRzIHJvd3MgYXQgdGhlIGJvdHRvbSBsZXZlbCBvZiBuZXN0aW5nLlxuICAgICAqL1xuICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyO1xuXG4gICAgLypcbiAgICAgIFRoaXMgdHlwZSBhbHNvIHN1cHBvcnRzIG5lc3RlZCByb3dzIHdpdGhvdXQgaGVhZGVyIHJvd3MsIHNvIHRoaXMgcHJvcGVydHlcbiAgICAgIGhlbHBzIHVzIHRlbGwgd2hldGhlciB0byBzaG93IHRoZSBoZWFkZXJzLlxuICAgICovXG4gICAgaGFzSGVhZGVyczogYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBTb3VyY2U8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0gKFxuICAgIHF1ZXJ5OiBRdWVyeTxDLCBGPixcbiAgICBtb3N0UmVjZW50QWN0aW9uOiBBY3Rpb248UiwgQywgRiwgRz4sXG4gICkgPT4gUHJvbWlzZTxSZXN1bHQ8Uj4gfCBHcm91cFJlc3VsdDxSLCBHPiB8IE5lc3RlZFJlc3VsdDxSPj47XG5cbiAgLy8vLy8vLy8vLy8vL1xuICAvLyBEaXNwbGF5IC8vXG4gIC8vLy8vLy8vLy8vLy9cblxuICAvLyBEaXNwbGF5IHN0YXRlIC8vXG5cbiAgZXhwb3J0IHR5cGUgQ29sdW1uU2V0dGluZ3M8QyBleHRlbmRzIENvbHVtbj4gPSB7XG4gICAga2V5OiBDO1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgcHJlZmVycmVkV2lkdGg6IG51bWJlciB8ICdhdXRvJztcbiAgICBwaW5uZWQ6IGJvb2xlYW47XG4gIH07XG4gIGV4cG9ydCB0eXBlIERpc3BsYXk8QyBleHRlbmRzIENvbHVtbj4gPSB7XG4gICAgY29sdW1uU2V0dGluZ3M6IENvbHVtblNldHRpbmdzPEM+W107XG4gICAgY2VsbFJvd1NwYW46IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW46IEMpID0+IG51bWJlcjtcbiAgfTtcblxuICAvLyBEaXNwbGF5IGFjdGlvbnMgLy9cblxuICBleHBvcnQgdHlwZSBEaXNwbGF5QWN0aW9uPEMgZXh0ZW5kcyBDb2x1bW4+ID1cbiAgICB8IHsgdHlwZTogJ2NvbHVtblNldHRpbmdzQ2hhbmdlJzsgcGF5bG9hZDogRGlzcGxheTxDPlsnY29sdW1uU2V0dGluZ3MnXSB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5QaW5DaGFuZ2UnO1xuICAgICAgICBjb2x1bW46IEM7XG4gICAgICAgIHBpbm5lZDogYm9vbGVhbjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbnNGcmVlemVVcFRvQ2hhbmdlJztcbiAgICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICAgICAgZnJlZXplOiBib29sZWFuO1xuICAgICAgICBzb3VyY2U/OiAnaGVhZGVyTWVudScgfCAnb3B0aW9uc01lbnUnIHwgJ2ZyZWV6ZURpdmlkZXInO1xuICAgICAgICBjb2x1bW4/OiBDO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uT3JkZXJDaGFuZ2UnO1xuICAgICAgICBwcmV2aW91c0luZGV4OiBudW1iZXI7XG4gICAgICAgIG5ld0luZGV4OiBudW1iZXI7XG4gICAgICAgIHNvdXJjZT86ICd0YWJsZURyYWcnIHwgJ21lbnVEcmFnJztcbiAgICAgICAgY29sdW1uPzogQztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbk1vdmVUb0NoYW5nZSc7XG4gICAgICAgIGNvbHVtbjogQztcbiAgICAgICAgcG9zaXRpb246ICdzdGFydCcgfCAnZW5kJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbkVuYWJsZWRDaGFuZ2UnO1xuICAgICAgICBjb2x1bW46IEM7XG4gICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgICAgIHNvdXJjZT86ICdoZWFkZXJNZW51JyB8ICdvcHRpb25zTWVudScgfCAnZHJhZ0Ryb3AnIHwgJ2V5ZUljb24nO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnZW5hYmxlQWxsQ29sdW1uc0NoYW5nZSc7XG4gICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5XaWR0aENoYW5nZSc7XG4gICAgICAgIGNvbHVtbjogQztcbiAgICAgICAgcHJlZmVycmVkV2lkdGg6IG51bWJlciB8ICdhdXRvJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3Jlc2V0VG9EZWZhdWx0Q29sdW1ucyc7XG4gICAgICB9O1xuXG4gIC8vLy8vLy8vLy8vLy8vL1xuICAvLyBTZWxlY3Rpb24gLy9cbiAgLy8vLy8vLy8vLy8vLy8vXG5cbiAgLy8gU2VsZWN0aW9uIHN0YXRlIC8vXG5cbiAgZXhwb3J0IHR5cGUgU2VsZWN0aW9uPFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBSWydpZCddIHwgbnVsbDtcbiAgfSAmIChcbiAgICB8IHtcbiAgICAgICAgbW9kZTogJ2luY2x1ZGUnO1xuICAgICAgICBpbmNsdWRlZDogU2V0PFJbJ2lkJ10+O1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICBtb2RlOiAnZXhjbHVkZSc7XG4gICAgICAgIGV4Y2x1ZGVkOiBTZXQ8UlsnaWQnXT47XG4gICAgICB9XG4gICk7XG5cbiAgLy8gU2VsZWN0aW9uIGFjdGlvbnMgLy9cblxuICBleHBvcnQgdHlwZSBTZWxlY3Rpb25BY3Rpb248UiBleHRlbmRzIFJvdywgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0+ID1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3NlbGVjdGlvbkNoYW5nZSc7XG4gICAgICAgIHBheWxvYWQ6IFNlbGVjdGlvbjxSPjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2dyb3VwU2VsZWN0aW9uQ2hhbmdlJztcbiAgICAgICAgcGF5bG9hZDogUm93R3JvdXA8UiwgRz47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdyb3dTZWxlY3RlZENoYW5nZSc7XG4gICAgICAgIGlkOiBSWydpZCddO1xuICAgICAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICAgICAgY29udGlndW91czogYm9vbGVhbjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3BhZ2VTZWxlY3RlZENoYW5nZSc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdhbGxTZWxlY3RlZENoYW5nZSc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdzZWxlY3Rpb25DbGVhcic7XG4gICAgICB9O1xuXG4gIGV4cG9ydCB0eXBlIENvbGxhcHNlU3RhdGU8UiBleHRlbmRzIFJvdz4gPVxuICAgIHwge1xuICAgICAgICBkZWZhdWx0VG86ICdjb2xsYXBzZWQnO1xuICAgICAgICBleHBhbmRlZFJvd3M6IFNldDxSWydpZCddPjtcbiAgICAgICAgZXhwYW5kZWRIZWFkZXJzOiBTZXQ8c3RyaW5nPjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgZGVmYXVsdFRvOiAnZXhwYW5kZWQnO1xuICAgICAgICBjb2xsYXBzZWRSb3dzOiBTZXQ8UlsnaWQnXT47XG4gICAgICAgIGNvbGxhcHNlZEhlYWRlcnM6IFNldDxzdHJpbmc+O1xuICAgICAgfTtcblxuICBleHBvcnQgdHlwZSBDb2xsYXBzZUFjdGlvbjxSIGV4dGVuZHMgUm93PiA9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICd0b2dnbGVSb3dDb2xsYXBzZSc7XG4gICAgICAgIGlkOiBSWydpZCddO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAndG9nZ2xlSGVhZGVyQ29sbGFwc2UnO1xuICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAndG9nZ2xlQWxsQ29sbGFwc2VkJztcbiAgICAgIH07XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gUHV0dGluZyBpdCBhbGwgdG9nZXRoZXIgLy9cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAvLyBDb21iaW5lZCBzdGF0ZSAvL1xuXG4gIGV4cG9ydCB0eXBlIENvcmVTdGF0ZTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSB7XG4gICAgcXVlcnk6IFF1ZXJ5PEMsIEY+O1xuICAgIGxvYWQ6IExvYWQ7XG4gICAgcmVzdWx0OiBSZXN1bHQ8Uj4gfCBHcm91cFJlc3VsdDxSLCBHPiB8IE5lc3RlZFJlc3VsdDxSPjtcbiAgICBkaXNwbGF5OiBEaXNwbGF5PEM+O1xuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uPFI+O1xuICAgIGNvbGxhcHNlU3RhdGU6IENvbGxhcHNlU3RhdGU8Uj47XG4gIH07XG5cbiAgLy8gQ29tYmluZWQgYWN0aW9ucyAvL1xuXG4gIGV4cG9ydCB0eXBlIEFjdGlvbjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPVxuICAgIHwgUXVlcnlBY3Rpb248QywgRj5cbiAgICB8IERpc3BsYXlBY3Rpb248Qz5cbiAgICB8IFNlbGVjdGlvbkFjdGlvbjxSLCBHPlxuICAgIHwgQ29sbGFwc2VBY3Rpb248Uj47XG5cbiAgZXhwb3J0IHR5cGUgRWZmZWN0ID0gJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcyc7XG5cbiAgLy8gRnVsbCBzdGF0ZSAoY29yZSBzdGF0ZSBwbHVzIHB1cmUgZGVyaXZhdGlvbnMpIC8vXG4gIGV4cG9ydCBjb25zdCBDb2x1bW5zTWF4U2hvd246IG51bWJlciA9IDUwO1xuICBleHBvcnQgY29uc3QgQ29sdW1uRGF0YVR5cGVzID0gW1xuICAgICdhZHZhbmNlZCcsXG4gICAgJ2N1cnJlbmN5JyxcbiAgICAnZGF0ZScsXG4gICAgJ2ljb24nLFxuICAgICdsb25nVGV4dCcsXG4gICAgJ251bWJlcicsXG4gICAgJ3Nob3J0VGV4dCcsXG4gIF0gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIENvbHVtbkRhdGFUeXBlID0gKHR5cGVvZiBDb2x1bW5EYXRhVHlwZXMpW251bWJlcl07XG4gIGV4cG9ydCB0eXBlIENvbHVtbkFsaWdubWVudCA9ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JztcbiAgZXhwb3J0IHR5cGUgQ29sdW1uTWV0YWRhdGEgPSB7XG4gICAgb3JkZXJhYmxlOiBib29sZWFuO1xuICAgIGZpbHRlcmFibGU/OiBib29sZWFuO1xuICAgIHNlYXJjaGFibGU/OiBib29sZWFuO1xuICAgIG1pbldpZHRoOiBudW1iZXI7XG4gICAgZGF0YVR5cGU6IENvbHVtbkRhdGFUeXBlO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGRlZmF1bHRQaW5uZWQ/OiBib29sZWFuO1xuICAgIGNsaWNrUHJldmVudERlZmF1bHQ/OiBib29sZWFuO1xuICAgIGNsaWNrU3RvcFByb3BhZ2F0aW9uPzogYm9vbGVhbjtcbiAgICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgfTtcbiAgZXhwb3J0IHR5cGUgRXh0ZXJuYWxSb3dMaW5rID0ge1xuICAgIHR5cGU6ICdleHRlcm5hbCc7XG4gICAgaHJlZjogc3RyaW5nO1xuICB9O1xuICBleHBvcnQgdHlwZSBJbnRlcm5hbFJvd0xpbmsgPSB7XG4gICAgdHlwZTogJ2ludGVybmFsJztcbiAgICByb3V0ZXJMaW5rOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICBxdWVyeVBhcmFtcz86IFBhcmFtcztcbiAgICBxdWVyeVBhcmFtc0hhbmRsaW5nPzogUXVlcnlQYXJhbXNIYW5kbGluZztcbiAgICBhY3RpdmU/OiBib29sZWFuO1xuICB9O1xuICBleHBvcnQgdHlwZSBSb3dMaW5rID0gRXh0ZXJuYWxSb3dMaW5rIHwgSW50ZXJuYWxSb3dMaW5rO1xuICBleHBvcnQgdHlwZSBGdWxsUm93PFIgZXh0ZW5kcyBSb3c+ID0gUiAmIHtcbiAgICByb3dMaW5rOiBSb3dMaW5rIHwgbnVsbDtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICBpc0NvbGxhcHNlZDogYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBSb3dHcm91cDxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXA+ID0ge1xuICAgIHJvd3M6IEZ1bGxSb3c8Uj5bXTtcbiAgICBzZWxlY3RlZDogTXVsdGlTZWxlY3Rpb25TdGF0ZTtcbiAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IG51bWJlcjtcbiAgICBncm91cERhdGE6IEc7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRnVsbE5lc3RlZFJvdzxSIGV4dGVuZHMgUm93PiA9IHtcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgIHN1YlJvd3M/OiBGdWxsTmVzdGVkUm93PFI+W107XG4gICAgZGF0YTogUjtcbiAgICByb3dMaW5rOiBSb3dMaW5rIHwgbnVsbDtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICBpc0NvbGxhcHNlZDogYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsTmVzdGVkSGVhZGVyUm93PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIGlkOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgc3ViUm93czogRnVsbE5lc3RlZFJvdzxSPltdO1xuICAgIGhlYWRlclRleHQ6IHN0cmluZyB8IG51bGw7XG4gICAgaXNDb2xsYXBzZWQ6IGJvb2xlYW47XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRnVsbENvbHVtbjxDIGV4dGVuZHMgQ29sdW1uPiA9IENvbHVtblNldHRpbmdzPEM+ICZcbiAgICBDb2x1bW5NZXRhZGF0YSAmIHtcbiAgICAgIHdpZHRoOiBudW1iZXI7XG4gICAgICBsZWZ0OiBudW1iZXIgfCBudWxsO1xuICAgICAgYWxpZ25tZW50OiBDb2x1bW5BbGlnbm1lbnQ7XG4gICAgfTtcbiAgZXhwb3J0IHR5cGUgTXVsdGlTZWxlY3Rpb25TdGF0ZSA9IGJvb2xlYW4gfCAnaW5kZXRlcm1pbmF0ZSc7XG4gIGV4cG9ydCB0eXBlIFNlbGVjdGlvbkNvbmZpZ3VyYXRpb24gPSBib29sZWFuIHwgJ2luZGl2aWR1YWwnO1xuXG4gIGV4cG9ydCB0eXBlIFJvd1NwYW5HZXR0ZXI8QyBleHRlbmRzIENvbHVtbj4gPSAoXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBjb2x1bW46IEMsXG4gICkgPT4gbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICBleHBvcnQgdHlwZSBWYWxpZFJvd1NwYW5HZXR0ZXI8QyBleHRlbmRzIENvbHVtbj4gPSAoXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBjb2x1bW46IEMsXG4gICkgPT4gbnVtYmVyO1xuXG4gIGV4cG9ydCB0eXBlIENzdkNlbGxGb3JtYXR0ZXI8UiBleHRlbmRzIFJvdywgQyBleHRlbmRzIENvbHVtbj4gPSAoXG4gICAgcm93OiBSLFxuICAgIGNvbHVtbjogRnVsbENvbHVtbjxDPixcbiAgKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG4gIGV4cG9ydCB0eXBlIENzdkdyb3VwQ2VsbEZvcm1hdHRlcjxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXA+ID0gKFxuICAgIHJvdzogUixcbiAgICBncm91cDogRyxcbiAgKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG4gIGV4cG9ydCB0eXBlIENzdlJvdyA9IHN0cmluZ1tdO1xuICBleHBvcnQgdHlwZSBDc3YgPSBDc3ZSb3dbXTtcbiAgZXhwb3J0IHR5cGUgQ3N2TW9kZSA9ICdmdWxsJyB8ICdzZWxlY3Rpb24nO1xuICBleHBvcnQgdHlwZSBDc3ZPdXRwdXQgPVxuICAgIHwgeyBsb2FkaW5nOiB0cnVlOyBkYXRhOiBudWxsIH1cbiAgICB8IHsgbG9hZGluZzogZmFsc2U7IGRhdGE6IENzdiB9O1xuXG4gIGV4cG9ydCB0eXBlIENvbHVtbk5hbWVNYXA8QyBleHRlbmRzIENvbHVtbj4gPSBNYXA8QywgQyB8IHN0cmluZz47XG5cbiAgZXhwb3J0IHR5cGUgU2VhcmNoYWJsZUNvbHVtbk1hcDxDIGV4dGVuZHMgQ29sdW1uPiA9IE1hcDxDLCBib29sZWFuPjtcblxuICBleHBvcnQgdHlwZSBGdWxsU3RhdGU8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0gQ29yZVN0YXRlPFIsIEMsIEYsIEc+ICYge1xuICAgIHF1ZXJ5OiB7XG4gICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgIHByZXZpb3VzOiBudW1iZXIgfCBudWxsO1xuICAgICAgICBwYWdlczogbnVtYmVyW107XG4gICAgICAgIG5leHQ6IG51bWJlciB8IG51bGw7XG4gICAgICAgIHBhZ2VDb3VudDogbnVtYmVyO1xuICAgICAgICBzaG93Q29udHJvbHM6IGJvb2xlYW47XG4gICAgICAgIHBhZ2VSb3dTdGFydDogbnVtYmVyO1xuICAgICAgICBwYWdlUm93RW5kOiBudW1iZXI7XG4gICAgICB9O1xuICAgICAgbm9TZWFyY2hDb2x1bW5zU2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgfTtcbiAgICByZXN1bHQ6XG4gICAgICB8IHtcbiAgICAgICAgICByb3dzOiBGdWxsUm93PFI+W107XG4gICAgICAgICAgcm93c0FzR3JvdXA6IFJvd0dyb3VwPFIsIEc+O1xuICAgICAgICAgIGlzR3JvdXBlZDogZmFsc2U7XG4gICAgICAgICAgcmVzdWx0VHlwZTogJ25vcm1hbC1yb3dzJztcbiAgICAgICAgICBjc3ZEYXRhOiAobW9kZT86IENzdk1vZGUpID0+IEFzeW5jR2VuZXJhdG9yPENzdk91dHB1dD47XG4gICAgICAgICAgY3N2RmlsZW5hbWU6IHN0cmluZztcbiAgICAgICAgfVxuICAgICAgfCB7XG4gICAgICAgICAgcm93czogRnVsbFJvdzxSPltdO1xuICAgICAgICAgIHJvd0dyb3VwczogUm93R3JvdXA8UiwgRz5bXTtcbiAgICAgICAgICBpc0dyb3VwZWQ6IHRydWU7XG4gICAgICAgICAgcmVzdWx0VHlwZTogJ3RhYmxlLWdyb3VwaW5nJztcbiAgICAgICAgICBjc3ZEYXRhOiAobW9kZT86IENzdk1vZGUpID0+IEFzeW5jR2VuZXJhdG9yPENzdk91dHB1dD47XG4gICAgICAgICAgY3N2RmlsZW5hbWU6IHN0cmluZztcbiAgICAgICAgfVxuICAgICAgfCB7XG4gICAgICAgICAgcm93czogRnVsbFJvdzxSPltdO1xuICAgICAgICAgIG5lc3RlZEhlYWRlclJvd3M6IEZ1bGxOZXN0ZWRIZWFkZXJSb3c8Uj5bXTtcbiAgICAgICAgICBpc0dyb3VwZWQ6IGZhbHNlO1xuICAgICAgICAgIHJlc3VsdFR5cGU6ICduZXN0ZWQtcm93cyc7XG4gICAgICAgICAgY3N2RGF0YTogKG1vZGU/OiBDc3ZNb2RlKSA9PiBBc3luY0dlbmVyYXRvcjxDc3ZPdXRwdXQ+O1xuICAgICAgICAgIGNzdkZpbGVuYW1lOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgZGlzcGxheToge1xuICAgICAgY29sdW1uczogRnVsbENvbHVtbjxDPltdO1xuICAgICAgYWxsQ29sdW1uczogQ29sdW1uU2V0dGluZ3M8Qz5bXTtcbiAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IFNlYXJjaGFibGVDb2x1bW5NYXA8Qz47XG4gICAgICBjb2x1bW5OYW1lTWFwOiBDb2x1bW5OYW1lTWFwPEM+O1xuICAgICAgemVyb1N0YXRlTWVzc2FnZTogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGNvbHVtbnNBcmVGcmVlemFibGU6IGJvb2xlYW47XG4gICAgICBjb2x1bW5zQXJlSGlkZWFibGU6IGJvb2xlYW47XG4gICAgICBjb2x1bW5zQXJlUmVvcmRlcmFibGU6IGJvb2xlYW47XG4gICAgICByb3dzQXJlR3JheWVkOiBib29sZWFuO1xuICAgICAgY3VzdG9tU3VtbWFyeVJvdzogYm9vbGVhbjtcbiAgICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgICBlbmFibGVkQ291bnQ6IG51bWJlcjtcbiAgICAgIGhpZGVQYWdlU2l6ZVNlbGVjdG9yOiBib29sZWFuO1xuICAgICAgbmVlZHNSaWdodEJvcmRlcjogKHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbjogQykgPT4gYm9vbGVhbjtcbiAgICB9O1xuICAgIHNlbGVjdGlvbjoge1xuICAgICAgYWxsb3dTZWxlY3Rpb246IFNlbGVjdGlvbkNvbmZpZ3VyYXRpb247XG4gICAgICBpc0FsbFNlbGVjdGVkOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgICAgaXNDdXJyZW50UGFnZVNlbGVjdGVkOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgICAgc2VsZWN0ZWRDb3VudDogbnVtYmVyO1xuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBtYW5hZ2VyIGlzIHdoYXQgc2V0cyB1cCB0aGUgaW5pdGlhbCBzdGF0ZSBhbmQgdHJhbnNsYXRlcyB1c2VyIGFjdGlvbnNcbiAgICogKGxpa2UgcGFnaW5hdGlvbiBvciBmaWx0ZXIgY2hhbmdlcywgZXRjLikgaW50byBuZXcgcm93IGRhdGEgYnkgY2FsbGluZyB0aGVcbiAgICogcmVkdWNlciBmdW5jdGlvbi4gSXQgYWxzbyBhdWdtZW50cyB0aGUgY29yZSBzdGF0ZSB3aXRoIGFkZGl0aW9uYWwgZGVyaXZlZFxuICAgKiBzdGF0ZS5cbiAgICovXG5cbiAgZXhwb3J0IHR5cGUgTWFuYWdlcjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSB7XG4gICAgYWN0aW9uczogU3ViamVjdDxBY3Rpb248UiwgQywgRiwgRz4+O1xuICAgIHN0YXRlOiBDb25uZWN0YWJsZTxGdWxsU3RhdGU8UiwgQywgRiwgRz4+O1xuICAgIGVmZmVjdHM6IENvbm5lY3RhYmxlPEVmZmVjdD47XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgTWFuYWdlck9wdGlvbnM8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0ge1xuICAgIGluaXRpYWxTdGF0ZT86IERlZXBQYXJ0aWFsPENvcmVTdGF0ZTxSLCBDLCBGLCBHPj47XG4gICAgcm93TGluaz86IChyb3c6IFIsIGdyb3VwPzogRykgPT4gUm93TGluaztcbiAgICBjc3ZDZWxsRm9ybWF0dGVyPzogQ3N2Q2VsbEZvcm1hdHRlcjxSLCBDPjtcbiAgICBjc3ZHcm91cENlbGxGb3JtYXR0ZXI/OiBDc3ZHcm91cENlbGxGb3JtYXR0ZXI8UiwgRz47XG4gICAgY3N2RmlsZUJhc2VuYW1lPzogc3RyaW5nO1xuICAgIGFsbG93U2VsZWN0aW9uPzogU2VsZWN0aW9uQ29uZmlndXJhdGlvbjtcbiAgICBjb2x1bW5zQXJlRnJlZXphYmxlPzogYm9vbGVhbjtcbiAgICBjb2x1bW5zQXJlSGlkZWFibGU/OiBib29sZWFuO1xuICAgIGNvbHVtbnNBcmVSZW9yZGVyYWJsZT86IGJvb2xlYW47XG4gICAgZGVmYXVsdENvbHVtblN0YXRlPzogQ29sdW1uU2V0dGluZ3M8Qz5bXTtcbiAgICByb3dzQXJlR3JheWVkPzogYm9vbGVhbjtcbiAgICBjdXN0b21TdW1tYXJ5Um93PzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGVuIHRydWUsIHRoZSBcIlJlc3VsdHMgcGVyIHBhZ2VcIiBsYWJlbCBhbmQgcGFnZS1zaXplIGRyb3Bkb3duIGFyZVxuICAgICAqIGhpZGRlbi4gUGFnZSBuYXZpZ2F0aW9uIGFycm93cyBhbmQgcGFnZSBudW1iZXJzIHJlbWFpbiB2aXNpYmxlLlxuICAgICAqL1xuICAgIGhpZGVQYWdlU2l6ZVNlbGVjdG9yPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBQYXJlbnQtY29udHJvbGxlZCByb3cgc3Bhbm5pbmcuXG4gICAgICogUmV0dXJuIDAgdG8gc3VwcHJlc3MgdGhlIGNlbGwsID49MSBmb3IgYSByZWFsIHJvd3NwYW4uXG4gICAgICogSWYgb21pdHRlZCBvciBpbnZhbGlkLCBkZWZhdWx0cyB0byAxLlxuICAgICAqL1xuICAgIGdldFJvd1NwYW5Gb3JDZWxsPzogUm93U3BhbkdldHRlcjxDPjtcbiAgfTtcblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlTWFuYWdlcjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4oXG4gICAgc291cmNlOiBTb3VyY2U8UiwgQywgRiwgRz4sXG4gICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPixcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+LFxuICApOiBNYW5hZ2VyPFIsIEMsIEYsIEc+IHtcbiAgICAvLyBTZXQgdXAgdGhlIGluaXRpYWwgdGFibGUgc3RhdGUuXG5cbiAgICBjb25zdCBzZWFyY2hhYmxlQ29sdW1uTWFwOiBTZWFyY2hhYmxlQ29sdW1uTWFwPEM+ID0gbmV3IE1hcDxDLCBib29sZWFuPihcbiAgICAgIEFycmF5LmZyb20oY29sdW1ucy5lbnRyaWVzKCkpLm1hcCgoW2tleSwgbWV0YWRhdGFdKSA9PiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgbWV0YWRhdGEuc2VhcmNoYWJsZSA/PyB0cnVlLFxuICAgICAgXSksXG4gICAgKTtcbiAgICBjb25zdCBkZWZhdWx0U3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPiA9IHtcbiAgICAgIHF1ZXJ5OiB7XG4gICAgICAgIG9yZGVyOiBudWxsLFxuICAgICAgICBzZWFyY2g6ICcnLFxuICAgICAgICBzZWFyY2hDb2x1bW5zOiBuZXcgTWFwKFxuICAgICAgICAgIEFycmF5LmZyb20oY29sdW1ucy5rZXlzKCkpXG4gICAgICAgICAgICAuZmlsdGVyKGtleSA9PiBzZWFyY2hhYmxlQ29sdW1uTWFwLmdldChrZXkpKVxuICAgICAgICAgICAgLm1hcChrZXkgPT4gW2tleSwgdHJ1ZV0pLFxuICAgICAgICApLFxuICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICBwYWdlU2l6ZTogMjUsXG4gICAgICAgIH0sXG4gICAgICAgIGdyb3VwaW5nOiB7XG4gICAgICAgICAgdmlld01vcmVLZXk6IG51bGwsXG4gICAgICAgICAgZ3JvdXBzUGVyUGFnZTogNSxcbiAgICAgICAgICBjb3VudFBlckdyb3VwOiAxMCxcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyczogbnVsbCxcbiAgICAgIH0sXG4gICAgICBsb2FkOiB7IGxvYWRpbmc6IGZhbHNlLCBlcnJvcjogbnVsbCB9LFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIGN1cnJlbnRQYWdlRGF0YTogW10sXG4gICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogMCxcbiAgICAgIH0sXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIGNvbHVtblNldHRpbmdzOiBbXSxcbiAgICAgICAgY2VsbFJvd1NwYW46IChfaTogbnVtYmVyLCBfY29sdW1uOiBDKSA9PiAxLFxuICAgICAgfSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogbnVsbCxcbiAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgfSxcbiAgICAgIGNvbGxhcHNlU3RhdGU6IHtcbiAgICAgICAgZGVmYXVsdFRvOiAnZXhwYW5kZWQnLFxuICAgICAgICBjb2xsYXBzZWRSb3dzOiBuZXcgU2V0KCksXG4gICAgICAgIGNvbGxhcHNlZEhlYWRlcnM6IG5ldyBTZXQoKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBkZWZhdWx0ZWRJbml0aWFsU3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPiA9IGRlZmF1bHRzRGVlcChcbiAgICAgIHt9LFxuICAgICAgb3B0aW9ucz8uaW5pdGlhbFN0YXRlLFxuICAgICAgZGVmYXVsdFN0YXRlLFxuICAgICk7XG5cbiAgICBjb25zdCBjb2x1bW5OYW1lTWFwOiBDb2x1bW5OYW1lTWFwPEM+ID0gbmV3IE1hcDxDLCBDIHwgc3RyaW5nPihcbiAgICAgIEFycmF5LmZyb20oY29sdW1ucy5lbnRyaWVzKCkpLm1hcCgoW2tleSwgbWV0YWRhdGFdKSA9PiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgdG9TZW50ZW5jZUNhc2UobWV0YWRhdGEuZGlzcGxheU5hbWUgPz8ga2V5KSxcbiAgICAgIF0pLFxuICAgICk7XG5cbiAgICBjb25zdCBkZWZhdWx0Q29sdW1uU3RhdGUgPVxuICAgICAgb3B0aW9ucz8uZGVmYXVsdENvbHVtblN0YXRlID8/XG4gICAgICBkZWZhdWx0ZWRJbml0aWFsU3RhdGUuZGlzcGxheS5jb2x1bW5TZXR0aW5ncztcblxuICAgIC8vIFdpcmUgdXAgcmVkdWNlZCBzdGF0ZSBmcm9tIGFjdGlvbnMgYW5kIGluaXRpYWwgc3RhdGUuXG4gICAgY29uc3QgYWN0aW9uczogU3ViamVjdDxBY3Rpb248UiwgQywgRiwgRz4+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb25zdCBjb3JlU3RhdGU6IE9ic2VydmFibGU8e1xuICAgICAgc3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgICAgIGVmZmVjdDogRWZmZWN0IHwgbnVsbDtcbiAgICB9PiA9IGFjdGlvbnMucGlwZShcbiAgICAgIG1lcmdlU2NhbjxcbiAgICAgICAgQWN0aW9uPFIsIEMsIEYsIEc+LFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdCB8IG51bGw7XG4gICAgICAgIH1cbiAgICAgID4oXG4gICAgICAgICh7IHN0YXRlIH0sIGFjdGlvbikgPT5cbiAgICAgICAgICBmcm9tKFxuICAgICAgICAgICAgcmVkdWNlKFxuICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAgIGRlZmF1bHRDb2x1bW5TdGF0ZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgeyBzdGF0ZTogZGVmYXVsdGVkSW5pdGlhbFN0YXRlLCBlZmZlY3Q6IG51bGwgfSxcbiAgICAgICAgMSxcbiAgICAgICksXG4gICAgICBzaGFyZSh7XG4gICAgICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksXG4gICAgICAgIHJlc2V0T25FcnJvcjogZmFsc2UsXG4gICAgICAgIHJlc2V0T25Db21wbGV0ZTogZmFsc2UsXG4gICAgICAgIHJlc2V0T25SZWZDb3VudFplcm86IGZhbHNlLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IGNzdkV4cG9ydEFsbG93ZWQgPSAhKFxuICAgICAgb3B0aW9ucz8uZ2V0Um93U3BhbkZvckNlbGwgfHwgb3B0aW9ucz8uY3VzdG9tU3VtbWFyeVJvd1xuICAgICk7XG5cbiAgICAvLyBBdWdtZW50IHN0YXRlIHdpdGggZGVyaXZlZCBzdGF0ZSwgYW5kIHN1YnNjcmliZS5cbiAgICBjb25zdCBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPFIsIEMsIEYsIEc+PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlLnBpcGUoXG4gICAgICAgIG1hcCgoeyBzdGF0ZTogcyB9KTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+ID0+IHtcbiAgICAgICAgICBjb25zdCByZXNvbHZlZENvbHVtbnMgPSBUYWJsZUNvbHVtbkhlbHBlcnMucmVzb2x2ZUNvbHVtbnMoXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAhIW9wdGlvbnM/LmFsbG93U2VsZWN0aW9uLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzR3JvdXBSZXN1bHQocy5yZXN1bHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVyaXZlRnVsbFN0YXRlRnJvbUdyb3VwUmVzdWx0KHtcbiAgICAgICAgICAgICAgcyxcbiAgICAgICAgICAgICAgc3RhdGVSZXN1bHQ6IHMucmVzdWx0LFxuICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgIHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAgIHJlc29sdmVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzTmVzdGVkUmVzdWx0KHMucmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGRlcml2ZUZ1bGxTdGF0ZUZyb21OZXN0ZWRSZXN1bHQoe1xuICAgICAgICAgICAgICBzLFxuICAgICAgICAgICAgICBzdGF0ZVJlc3VsdDogcy5yZXN1bHQsXG4gICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgICAgICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgICAgICAgICBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkZXJpdmVGdWxsU3RhdGVGcm9tUmVndWxhclJlc3VsdCh7XG4gICAgICAgICAgICAgIHMsXG4gICAgICAgICAgICAgIHN0YXRlUmVzdWx0OiBzLnJlc3VsdCxcbiAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICAgICAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICAgICAgICAgIGNzdkV4cG9ydEFsbG93ZWQsXG4gICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzY2FuKChzdGFibGUsIG5ld1N0YXRlKSA9PiBzdGFibGVTdGF0ZShzdGFibGUsIG5ld1N0YXRlKSksXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpLFxuICAgICAgICByZXNldE9uRGlzY29ubmVjdDogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG4gICAgc3RhdGUuY29ubmVjdCgpO1xuXG4gICAgY29uc3QgZWZmZWN0czogQ29ubmVjdGFibGU8RWZmZWN0PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlLnBpcGUoXG4gICAgICAgIGZpbHRlcigoeyBlZmZlY3QgfSkgPT4gZWZmZWN0ICE9PSBudWxsKSxcbiAgICAgICAgbWFwKCh7IGVmZmVjdCB9KSA9PiBlZmZlY3QgYXMgRWZmZWN0KSxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksXG4gICAgICAgIHJlc2V0T25EaXNjb25uZWN0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBlZmZlY3RzLmNvbm5lY3QoKTtcblxuICAgIC8vIExvYWQgaW5pdGlhbCB0YWJsZSByb3cgZGF0YS5cbiAgICBhY3Rpb25zLm5leHQoeyB0eXBlOiAnbG9hZCcgfSk7XG5cbiAgICByZXR1cm4geyBhY3Rpb25zLCBzdGF0ZSwgZWZmZWN0cyB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlRnVsbFN0YXRlRnJvbUdyb3VwUmVzdWx0PFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPihwcm9wczoge1xuICAgIHM6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgICBzdGF0ZVJlc3VsdDogR3JvdXBSZXN1bHQ8UiwgRz47XG4gICAgc291cmNlOiBTb3VyY2U8UiwgQywgRiwgRz47XG4gICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPjtcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPjtcbiAgICByZXNvbHZlZENvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBTZWFyY2hhYmxlQ29sdW1uTWFwPEM+O1xuICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+O1xuICB9KTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCB7XG4gICAgICBzLFxuICAgICAgc3RhdGVSZXN1bHQsXG4gICAgICBzb3VyY2UsXG4gICAgICBjb2x1bW5zLFxuICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSA9IHByb3BzO1xuICAgIGlmIChvcHRpb25zPy5nZXRSb3dTcGFuRm9yQ2VsbCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0hlYWRzIHVwISBDdXN0b20gcm93IHNwYW5zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBncm91cGVkIHRhYmxlcy4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LmN1c3RvbVN1bW1hcnlSb3cpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdIZWFkcyB1cCEgQ3VzdG9tIHN1bW1hcnkgcm93cyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgZ3JvdXBlZCB0YWJsZXMuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm93R3JvdXBzOiBSb3dHcm91cDxSLCBHPltdID0gc3RhdGVSZXN1bHQuZ3JvdXBSZXN1bHRzLm1hcChncm91cCA9PiAoe1xuICAgICAgcm93czogZ3JvdXAuY3VycmVudFBhZ2VEYXRhLm1hcChyb3cgPT4gKHtcbiAgICAgICAgLi4ucm93LFxuICAgICAgICByb3dMaW5rOiBvcHRpb25zPy5yb3dMaW5rXG4gICAgICAgICAgPyBvcHRpb25zLnJvd0xpbmsocm93LCBncm91cC5ncm91cERhdGEpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICBzZWxlY3RlZDogVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgcm93LmlkKSxcbiAgICAgICAgaXNDb2xsYXBzZWQ6IGZhbHNlLFxuICAgICAgfSkpLFxuICAgICAgc2VsZWN0ZWQ6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5pc0dyb3VwU2VsZWN0ZWQocywgZ3JvdXApLFxuICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBncm91cC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICBncm91cERhdGE6IGdyb3VwLmdyb3VwRGF0YSxcbiAgICB9KSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiogY3N2RGF0YShtb2RlOiBDc3ZNb2RlID0gJ2Z1bGwnKTogQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PiB7XG4gICAgICBjb25zdCBjZWxsRm9ybWF0dGVyID0gb3B0aW9ucz8uY3N2Q2VsbEZvcm1hdHRlcjtcbiAgICAgIGNvbnN0IGdyb3VwQ2VsbEZvcm1hdHRlciA9IG9wdGlvbnM/LmNzdkdyb3VwQ2VsbEZvcm1hdHRlcjtcbiAgICAgIGlmICghY2VsbEZvcm1hdHRlcilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLmNzdkNlbGxGb3JtYXR0ZXIgaXMgcmVxdWlyZWQgZm9yIENTViBleHBvcnQnKTtcbiAgICAgIHlpZWxkIHsgbG9hZGluZzogdHJ1ZSwgZGF0YTogbnVsbCB9O1xuICAgICAgY29uc3QgZGF0YVNldCA9IGF3YWl0IHNvdXJjZShcbiAgICAgICAge1xuICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBzdGF0ZVJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgeyB0eXBlOiAnbG9hZCcgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmICghVGFibGVSZXN1bHRIZWxwZXJzLmlzR3JvdXBSZXN1bHQoZGF0YVNldCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXR1cm5lZCBub24tZ3JvdXBlZCBDU1YgZGF0YSBmb3IgZ3JvdXBlZCB0YWJsZScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmdWxsQ29sdW1ucyA9IFRhYmxlQ29sdW1uSGVscGVycy5yZXNvbHZlQ29sdW1ucyhcbiAgICAgICAgcyxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgISFvcHRpb25zLmFsbG93U2VsZWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRhdGE6IENzdiA9IFtdO1xuICAgICAgZGF0YS5wdXNoKGZ1bGxDb2x1bW5zLm1hcCgoeyBrZXkgfSkgPT4gY29sdW1uTmFtZU1hcC5nZXQoa2V5KSA/PyBrZXkpKTtcblxuICAgICAgaWYgKGdyb3VwQ2VsbEZvcm1hdHRlcikge1xuICAgICAgICBkYXRhWzBdLnB1c2goJycpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJvd0l0ZW0gb2YgZGF0YVNldC5ncm91cFJlc3VsdHMuZmxhdE1hcChncm91cHMgPT5cbiAgICAgICAgZ3JvdXBzLmN1cnJlbnRQYWdlRGF0YS5tYXAocm93ID0+ICh7XG4gICAgICAgICAgcm93LFxuICAgICAgICAgIGdyb3VwOiBncm91cHMuZ3JvdXBEYXRhLFxuICAgICAgICB9KSksXG4gICAgICApKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IHJvd0l0ZW0ucm93O1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbW9kZSA9PT0gJ3NlbGVjdGlvbicgJiZcbiAgICAgICAgICAhVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgcmVjb3JkLmlkKVxuICAgICAgICApXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IHJvdzogQ3N2Um93ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGZ1bGxDb2x1bW5zKSB7XG4gICAgICAgICAgcm93LnB1c2goYXdhaXQgY2VsbEZvcm1hdHRlcihyZWNvcmQsIGNvbHVtbikpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChncm91cENlbGxGb3JtYXR0ZXIgJiYgcm93SXRlbS5ncm91cCkge1xuICAgICAgICAgIHJvdy5wdXNoKGF3YWl0IGdyb3VwQ2VsbEZvcm1hdHRlcihyZWNvcmQsIHJvd0l0ZW0uZ3JvdXApKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLnB1c2gocm93KTtcbiAgICAgIH1cbiAgICAgIHlpZWxkIHsgbG9hZGluZzogZmFsc2UsIGRhdGEgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucyxcbiAgICAgIHF1ZXJ5OiBkZXJpdmVkRnVsbFN0YXRlUXVlcnkocyksXG4gICAgICBkaXNwbGF5OiBkZXJpdmVkRnVsbFN0YXRlRGlzcGxheSh7XG4gICAgICAgIGNvcmVTdGF0ZTogcyxcbiAgICAgICAgY29sdW1uczogY29sdW1ucyxcbiAgICAgICAgcGx1cmFsRW50aXR5TmFtZTogcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgY29sdW1uTmFtZU1hcDogY29sdW1uTmFtZU1hcCxcbiAgICAgICAgcmVzb2x2ZWRDb2x1bW5zOiByZXNvbHZlZENvbHVtbnMsXG4gICAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGNzdkV4cG9ydEFsbG93ZWQsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICB9KSxcbiAgICAgIHNlbGVjdGlvbjogZGVyaXZlZEZ1bGxTdGF0ZVNlbGVjdGlvbihzLCBvcHRpb25zKSxcbiAgICAgIHJlc3VsdDoge1xuICAgICAgICAuLi5zdGF0ZVJlc3VsdCxcbiAgICAgICAgaXNHcm91cGVkOiB0cnVlLFxuICAgICAgICByZXN1bHRUeXBlOiAndGFibGUtZ3JvdXBpbmcnLFxuICAgICAgICByb3dHcm91cHMsXG4gICAgICAgIHJvd3M6IHJvd0dyb3Vwcy5mbGF0TWFwKGdyb3VwID0+IGdyb3VwLnJvd3MpLFxuICAgICAgICBjc3ZEYXRhLFxuICAgICAgICBjc3ZGaWxlbmFtZTogVGFibGVSZXN1bHRIZWxwZXJzLmdldENzdkZpbGVuYW1lKFxuICAgICAgICAgIHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlcml2ZUZ1bGxTdGF0ZUZyb21OZXN0ZWRSZXN1bHQ8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KHByb3BzOiB7XG4gICAgczogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgIHN0YXRlUmVzdWx0OiBOZXN0ZWRSZXN1bHQ8Uj47XG4gICAgc291cmNlOiBTb3VyY2U8UiwgQywgRiwgRz47XG4gICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPjtcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPjtcbiAgICByZXNvbHZlZENvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBTZWFyY2hhYmxlQ29sdW1uTWFwPEM+O1xuICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+O1xuICB9KTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCB7XG4gICAgICBzLFxuICAgICAgc3RhdGVSZXN1bHQsXG4gICAgICBzb3VyY2UsXG4gICAgICBjb2x1bW5zLFxuICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgaWYgKG9wdGlvbnM/LmdldFJvd1NwYW5Gb3JDZWxsKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnSGVhZHMgdXAhIEN1c3RvbSByb3cgc3BhbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHRhYmxlcyB3aXRoIG5lc3RlZCBkYXRhLicsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uY3VzdG9tU3VtbWFyeVJvdykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0hlYWRzIHVwISBDdXN0b20gc3VtbWFyeSByb3dzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciB0YWJsZXMgd2l0aCBuZXN0ZWQgZGF0YS4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsTmVzdGVkSGVhZGVyUm93czogRnVsbE5lc3RlZEhlYWRlclJvdzxSPltdID0gW107XG4gICAgZm9yIChjb25zdCBuZXN0ZWRSb3cgb2Ygc3RhdGVSZXN1bHQuY3VycmVudFBhZ2VOZXN0ZWRIZWFkZXJzKSB7XG4gICAgICBjb25zdCBuZXdGdWxsUm93OiBGdWxsTmVzdGVkSGVhZGVyUm93PFI+ID1cbiAgICAgICAgVGFibGVOZXN0aW5nSGVscGVycy5jb252ZXJ0VG9GdWxsTmVzdGVkSGVhZGVyUm93KFxuICAgICAgICAgIG5lc3RlZFJvdyxcbiAgICAgICAgICBzLFxuICAgICAgICAgIG9wdGlvbnM/LnJvd0xpbmssXG4gICAgICAgICk7XG4gICAgICBmdWxsTmVzdGVkSGVhZGVyUm93cy5wdXNoKG5ld0Z1bGxSb3cpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uKiBjc3ZEYXRhKG1vZGUgPSAnZnVsbCcpOiBBc3luY0dlbmVyYXRvcjxDc3ZPdXRwdXQ+IHtcbiAgICAgIGlmICghY3N2RXhwb3J0QWxsb3dlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0NTViBleHBvcnQgaXMgbm90IHN1cHBvcnRlZCB3aGVuIHJvdyBzcGFubmluZyBvciBhIGN1c3RvbSBzdW1tYXJ5IHJvdyBpcyBlbmFibGVkLicsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNlbGxGb3JtYXR0ZXIgPSBvcHRpb25zPy5jc3ZDZWxsRm9ybWF0dGVyO1xuICAgICAgaWYgKCFjZWxsRm9ybWF0dGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5jc3ZDZWxsRm9ybWF0dGVyIGlzIHJlcXVpcmVkIGZvciBDU1YgZXhwb3J0Jyk7XG4gICAgICB9XG4gICAgICB5aWVsZCB7IGxvYWRpbmc6IHRydWUsIGRhdGE6IG51bGwgfTtcbiAgICAgIGNvbnN0IGRhdGFTZXQgPSBhd2FpdCBzb3VyY2UoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zLnF1ZXJ5LFxuICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICBwYWdlU2l6ZTogc3RhdGVSZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHsgdHlwZTogJ2xvYWQnIH0sXG4gICAgICApO1xuXG4gICAgICBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzUmVndWxhclJlc3VsdChkYXRhU2V0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1JldHVybmVkIG5vbi1uZXN0ZWQgQ1NWIGRhdGEgZm9yIGEgbmVzdGVkIHdpdGggaGVhZGVyIHJlc3VsdCB0YWJsZScsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzR3JvdXBSZXN1bHQoZGF0YVNldCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdSZXR1cm5lZCBncm91cGVkIENTViBkYXRhIGZvciBhIG5lc3RlZCB3aXRoIGhlYWRlciByZXN1bHQgdGFibGUnLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmdWxsQ29sdW1ucyA9IFRhYmxlQ29sdW1uSGVscGVycy5yZXNvbHZlQ29sdW1ucyhcbiAgICAgICAgcyxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgISFvcHRpb25zLmFsbG93U2VsZWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRhdGE6IENzdiA9IFtdO1xuICAgICAgZGF0YS5wdXNoKGZ1bGxDb2x1bW5zLm1hcCgoeyBrZXkgfSkgPT4gY29sdW1uTmFtZU1hcC5nZXQoa2V5KSA/PyBrZXkpKTtcblxuICAgICAgY29uc3QgYWxsUm93czogUltdID0gVGFibGVSZXN1bHRIZWxwZXJzLmdldEFsbFJvd3NGcm9tUmVzdWx0KGRhdGFTZXQpO1xuXG4gICAgICBmb3IgKGNvbnN0IGN1cnJlbnRSb3cgb2YgYWxsUm93cykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbW9kZSA9PT0gJ3NlbGVjdGlvbicgJiZcbiAgICAgICAgICAhVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgY3VycmVudFJvdy5pZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm93OiBDc3ZSb3cgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgZnVsbENvbHVtbnMpIHtcbiAgICAgICAgICByb3cucHVzaChhd2FpdCBjZWxsRm9ybWF0dGVyKGN1cnJlbnRSb3csIGNvbHVtbikpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEucHVzaChyb3cpO1xuICAgICAgfVxuICAgICAgeWllbGQgeyBsb2FkaW5nOiBmYWxzZSwgZGF0YSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zLFxuICAgICAgcXVlcnk6IGRlcml2ZWRGdWxsU3RhdGVRdWVyeShzKSxcbiAgICAgIGRpc3BsYXk6IGRlcml2ZWRGdWxsU3RhdGVEaXNwbGF5KHtcbiAgICAgICAgY29yZVN0YXRlOiBzLFxuICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICBwbHVyYWxFbnRpdHlOYW1lOiBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgICBjb2x1bW5OYW1lTWFwOiBjb2x1bW5OYW1lTWFwLFxuICAgICAgICByZXNvbHZlZENvbHVtbnM6IHJlc29sdmVkQ29sdW1ucyxcbiAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgY3N2RXhwb3J0QWxsb3dlZDogY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIH0pLFxuICAgICAgc2VsZWN0aW9uOiBkZXJpdmVkRnVsbFN0YXRlU2VsZWN0aW9uKHMsIG9wdGlvbnMpLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIC4uLnN0YXRlUmVzdWx0LFxuICAgICAgICByb3dzOiBbXSxcbiAgICAgICAgaXNHcm91cGVkOiBmYWxzZSxcbiAgICAgICAgcmVzdWx0VHlwZTogJ25lc3RlZC1yb3dzJyxcbiAgICAgICAgbmVzdGVkSGVhZGVyUm93czogZnVsbE5lc3RlZEhlYWRlclJvd3MsXG4gICAgICAgIGNzdkRhdGEsXG4gICAgICAgIGNzdkZpbGVuYW1lOiBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0Q3N2RmlsZW5hbWUoXG4gICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlRnVsbFN0YXRlRnJvbVJlZ3VsYXJSZXN1bHQ8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KHByb3BzOiB7XG4gICAgczogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgIHN0YXRlUmVzdWx0OiBSZXN1bHQ8Uj47XG4gICAgc291cmNlOiBTb3VyY2U8UiwgQywgRiwgRz47XG4gICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPjtcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPjtcbiAgICByZXNvbHZlZENvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBTZWFyY2hhYmxlQ29sdW1uTWFwPEM+O1xuICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+O1xuICB9KTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCB7XG4gICAgICBzLFxuICAgICAgc3RhdGVSZXN1bHQsXG4gICAgICBzb3VyY2UsXG4gICAgICBjb2x1bW5zLFxuICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHJvd3MgPSBzdGF0ZVJlc3VsdC5jdXJyZW50UGFnZURhdGEubWFwKHJvdyA9PiAoe1xuICAgICAgLi4ucm93LFxuICAgICAgcm93TGluazogb3B0aW9ucz8ucm93TGluayA/IG9wdGlvbnMucm93TGluayhyb3cpIDogbnVsbCxcbiAgICAgIHNlbGVjdGVkOiBUYWJsZVNlbGVjdGlvbkhlbHBlcnMuaXNSb3dTZWxlY3RlZChzLCByb3cuaWQpLFxuICAgICAgaXNDb2xsYXBzZWQ6IGZhbHNlLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGNlbGxSb3dTcGFuQ2FjaGUgPSBUYWJsZURpc3BsYXlIZWxwZXJzLm1lbW9pemVkQ2VsbFJvd1NwYW4oXG4gICAgICBzLFxuICAgICAgcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICAgIGNvbnN0IGNlbGxSb3dTcGFuOiBWYWxpZFJvd1NwYW5HZXR0ZXI8Qz4gPSAocm93SW5kZXgsIGNvbHVtbikgPT5cbiAgICAgIGNlbGxSb3dTcGFuQ2FjaGU/LmdldChjb2x1bW4pPy5bcm93SW5kZXhdID8/IDE7XG4gICAgY29uc3QgaGFzQW55Um93U3BhbnMgPSBjZWxsUm93U3BhbkNhY2hlXG4gICAgICA/IFsuLi5jZWxsUm93U3BhbkNhY2hlLnZhbHVlcygpXS5zb21lKHNwYW5zID0+XG4gICAgICAgICAgc3BhbnMuc29tZShzcGFuID0+IHNwYW4gPiAxKSxcbiAgICAgICAgKVxuICAgICAgOiBmYWxzZTtcblxuICAgIGNvbnN0IHJlc29sdmVkQ29sdW1uS2V5cyA9IHJlc29sdmVkQ29sdW1ucy5tYXAoKHsga2V5IH0pID0+IGtleSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiogY3N2RGF0YShtb2RlID0gJ2Z1bGwnKTogQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PiB7XG4gICAgICBpZiAoIWNzdkV4cG9ydEFsbG93ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdDU1YgZXhwb3J0IGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiByb3cgc3Bhbm5pbmcgb3IgYSBjdXN0b20gc3VtbWFyeSByb3cgaXMgZW5hYmxlZC4nLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjZWxsRm9ybWF0dGVyID0gb3B0aW9ucz8uY3N2Q2VsbEZvcm1hdHRlcjtcbiAgICAgIGlmICghY2VsbEZvcm1hdHRlcilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLmNzdkNlbGxGb3JtYXR0ZXIgaXMgcmVxdWlyZWQgZm9yIENTViBleHBvcnQnKTtcbiAgICAgIHlpZWxkIHsgbG9hZGluZzogdHJ1ZSwgZGF0YTogbnVsbCB9O1xuICAgICAgY29uc3QgZGF0YVNldCA9IGF3YWl0IHNvdXJjZShcbiAgICAgICAge1xuICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBzdGF0ZVJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgeyB0eXBlOiAnbG9hZCcgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChUYWJsZVJlc3VsdEhlbHBlcnMuaXNHcm91cFJlc3VsdChkYXRhU2V0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JldHVybmVkIGdyb3VwZWQgQ1NWIGRhdGEgZm9yIG5vbi1ncm91cGVkIHRhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzTmVzdGVkUmVzdWx0KGRhdGFTZXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmV0dXJuZWQgbmVzdGVkIENTViBkYXRhIGZvciBub24tbmVzdGVkIHRhYmxlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGxDb2x1bW5zID0gVGFibGVDb2x1bW5IZWxwZXJzLnJlc29sdmVDb2x1bW5zKFxuICAgICAgICBzLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAhIW9wdGlvbnMuYWxsb3dTZWxlY3Rpb24sXG4gICAgICApO1xuICAgICAgY29uc3QgZGF0YTogQ3N2ID0gW107XG4gICAgICBkYXRhLnB1c2goZnVsbENvbHVtbnMubWFwKCh7IGtleSB9KSA9PiBjb2x1bW5OYW1lTWFwLmdldChrZXkpID8/IGtleSkpO1xuXG4gICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBkYXRhU2V0LmN1cnJlbnRQYWdlRGF0YSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbW9kZSA9PT0gJ3NlbGVjdGlvbicgJiZcbiAgICAgICAgICAhVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgcmVjb3JkLmlkKVxuICAgICAgICApXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IHJvdzogQ3N2Um93ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGZ1bGxDb2x1bW5zKSB7XG4gICAgICAgICAgcm93LnB1c2goYXdhaXQgY2VsbEZvcm1hdHRlcihyZWNvcmQsIGNvbHVtbikpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEucHVzaChyb3cpO1xuICAgICAgfVxuICAgICAgeWllbGQgeyBsb2FkaW5nOiBmYWxzZSwgZGF0YSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zLFxuICAgICAgcXVlcnk6IGRlcml2ZWRGdWxsU3RhdGVRdWVyeShzLCB7XG4gICAgICAgIG9yZGVyOiBoYXNBbnlSb3dTcGFucyA/IG51bGwgOiBzLnF1ZXJ5Lm9yZGVyLFxuICAgICAgfSksXG4gICAgICBkaXNwbGF5OiBkZXJpdmVkRnVsbFN0YXRlRGlzcGxheShcbiAgICAgICAge1xuICAgICAgICAgIGNvcmVTdGF0ZTogcyxcbiAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICAgIHBsdXJhbEVudGl0eU5hbWU6IHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcDogY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICByZXNvbHZlZENvbHVtbnM6IHJlc29sdmVkQ29sdW1ucyxcbiAgICAgICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGNzdkV4cG9ydEFsbG93ZWQsXG4gICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNvbHVtbnM6IHJlc29sdmVkQ29sdW1ucy5tYXAoY29sdW1uID0+XG4gICAgICAgICAgICBoYXNBbnlSb3dTcGFucyA/IHsgLi4uY29sdW1uLCBvcmRlcmFibGU6IGZhbHNlIH0gOiBjb2x1bW4sXG4gICAgICAgICAgKSxcbiAgICAgICAgICBjZWxsUm93U3BhbjogY2VsbFJvd1NwYW4sXG4gICAgICAgICAgbmVlZHNSaWdodEJvcmRlcjogKHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbjogQyk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgY29uc3QgaSA9IHJlc29sdmVkQ29sdW1uS2V5cy5maW5kSW5kZXgoa2V5ID0+IGtleSA9PT0gY29sdW1uKTtcbiAgICAgICAgICAgIGlmIChpIDwgMCB8fCBpID09PSByZXNvbHZlZENvbHVtbktleXMubGVuZ3RoIC0gMSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCByaWdodENvbEtleSA9IHJlc29sdmVkQ29sdW1uS2V5c1tpICsgMV07XG4gICAgICAgICAgICBjb25zdCBzcGFuT25SaWdodCA9IGNlbGxSb3dTcGFuKHJvd0luZGV4LCByaWdodENvbEtleSk7XG4gICAgICAgICAgICByZXR1cm4gc3Bhbk9uUmlnaHQgPiAxIHx8IHNwYW5PblJpZ2h0ID09PSAwO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICApLFxuICAgICAgc2VsZWN0aW9uOiBkZXJpdmVkRnVsbFN0YXRlU2VsZWN0aW9uKHMsIG9wdGlvbnMpLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIC4uLnN0YXRlUmVzdWx0LFxuICAgICAgICBpc0dyb3VwZWQ6IGZhbHNlLFxuICAgICAgICByZXN1bHRUeXBlOiAnbm9ybWFsLXJvd3MnLFxuICAgICAgICByb3dzLFxuICAgICAgICByb3dzQXNHcm91cDoge1xuICAgICAgICAgIHJvd3MsXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogcm93cy5sZW5ndGgsXG4gICAgICAgICAgZ3JvdXBEYXRhOiB7IGtleTogJycgfSBhcyBHLFxuICAgICAgICB9LFxuICAgICAgICBjc3ZGaWxlbmFtZTogVGFibGVSZXN1bHRIZWxwZXJzLmdldENzdkZpbGVuYW1lKFxuICAgICAgICAgIHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgKSxcbiAgICAgICAgY3N2RGF0YSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlcml2ZWRGdWxsU3RhdGVRdWVyeTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4oXG4gICAgY29yZVN0YXRlOiBDb3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgcGFydGlhbFF1ZXJ5OiBQYXJ0aWFsPEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPlsncXVlcnknXT4gPSB7fSxcbiAgKTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+WydxdWVyeSddIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29yZVN0YXRlLnF1ZXJ5LFxuICAgICAgcGFnaW5hdGlvbjogZGVyaXZlZEZ1bGxTdGF0ZVBhZ2luYXRpb24oY29yZVN0YXRlKSxcbiAgICAgIG5vU2VhcmNoQ29sdW1uc1NlbGVjdGVkOiBUYWJsZVNlYXJjaEhlbHBlcnMuZ2V0U2VhcmNoQ29sdW1uc1NlbGVjdGVkU3RhdGUoXG4gICAgICAgIGNvcmVTdGF0ZSxcbiAgICAgICAgJ25vbmUnLFxuICAgICAgKSxcbiAgICAgIC4uLnBhcnRpYWxRdWVyeSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlZEZ1bGxTdGF0ZVBhZ2luYXRpb248XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KFxuICAgIGNvcmVTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICApOiBGdWxsU3RhdGU8UiwgQywgRiwgRz5bJ3F1ZXJ5J11bJ3BhZ2luYXRpb24nXSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvcmVTdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgcHJldmlvdXM6IFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0UHJldmlvdXNQYWdlKGNvcmVTdGF0ZSksXG4gICAgICBwYWdlczogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQYWdlcyhjb3JlU3RhdGUpLFxuICAgICAgbmV4dDogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXROZXh0UGFnZShjb3JlU3RhdGUpLFxuICAgICAgcGFnZUNvdW50OiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFBhZ2VDb3VudChjb3JlU3RhdGUpLFxuICAgICAgc2hvd0NvbnRyb2xzOiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFNob3dQYWdpbmF0aW9uQ29udHJvbHMoY29yZVN0YXRlKSxcbiAgICAgIHBhZ2VSb3dTdGFydDogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQYWdlUm93U3RhcnQoY29yZVN0YXRlKSxcbiAgICAgIHBhZ2VSb3dFbmQ6IFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0UGFnZVJvd0VuZChjb3JlU3RhdGUpLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBkZXJpdmVkRnVsbFN0YXRlRGlzcGxheTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4oXG4gICAgcHJvcHM6IHtcbiAgICAgIGNvcmVTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPjtcbiAgICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZztcbiAgICAgIGNvbHVtbk5hbWVNYXA6IENvbHVtbk5hbWVNYXA8Qz47XG4gICAgICByZXNvbHZlZENvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IFNlYXJjaGFibGVDb2x1bW5NYXA8Qz47XG4gICAgICBjc3ZFeHBvcnRBbGxvd2VkOiBib29sZWFuO1xuICAgICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+O1xuICAgIH0sXG4gICAgcGFydGlhbERpc3BsYXk6IFBhcnRpYWw8RnVsbFN0YXRlPFIsIEMsIEYsIEc+WydkaXNwbGF5J10+ID0ge30sXG4gICk6IEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPlsnZGlzcGxheSddIHtcbiAgICBjb25zdCB7XG4gICAgICBjb3JlU3RhdGUsXG4gICAgICBjb2x1bW5zLFxuICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvcmVTdGF0ZS5kaXNwbGF5LFxuICAgICAgY29sdW1uczogcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgYWxsQ29sdW1uczogVGFibGVDb2x1bW5IZWxwZXJzLmdldEFsbENvbHVtbnMoXG4gICAgICAgIGNvcmVTdGF0ZSxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICksXG4gICAgICBjb2x1bW5OYW1lTWFwOiBjb2x1bW5OYW1lTWFwLFxuICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IFRhYmxlRGlzcGxheUhlbHBlcnMuZ2V0WmVyb1N0YXRlTWVzc2FnZShcbiAgICAgICAgY29yZVN0YXRlLFxuICAgICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgKSxcbiAgICAgIGNvbHVtbnNBcmVGcmVlemFibGU6ICEhb3B0aW9ucz8uY29sdW1uc0FyZUZyZWV6YWJsZSxcbiAgICAgIGNvbHVtbnNBcmVIaWRlYWJsZTogISFvcHRpb25zPy5jb2x1bW5zQXJlSGlkZWFibGUsXG4gICAgICBjb2x1bW5zQXJlUmVvcmRlcmFibGU6IG9wdGlvbnM/LmNvbHVtbnNBcmVSZW9yZGVyYWJsZSA/PyB0cnVlLFxuICAgICAgcm93c0FyZUdyYXllZDogISFvcHRpb25zPy5yb3dzQXJlR3JheWVkLFxuICAgICAgY3VzdG9tU3VtbWFyeVJvdzogISFvcHRpb25zPy5jdXN0b21TdW1tYXJ5Um93LFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZDogY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIGVuYWJsZWRDb3VudDogcmVzb2x2ZWRDb2x1bW5zLmxlbmd0aCxcbiAgICAgIGhpZGVQYWdlU2l6ZVNlbGVjdG9yOiAhIW9wdGlvbnM/LmhpZGVQYWdlU2l6ZVNlbGVjdG9yLFxuICAgICAgY2VsbFJvd1NwYW46IChfaTogbnVtYmVyLCBfY29sdW1uOiBDKSA9PiAxLFxuICAgICAgbmVlZHNSaWdodEJvcmRlcjogKCkgPT4gZmFsc2UsXG4gICAgICAuLi5wYXJ0aWFsRGlzcGxheSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlZEZ1bGxTdGF0ZVNlbGVjdGlvbjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4oXG4gICAgY29yZVN0YXRlOiBDb3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+LFxuICApOiBGdWxsU3RhdGU8UiwgQywgRiwgRz5bJ3NlbGVjdGlvbiddIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29yZVN0YXRlLnNlbGVjdGlvbixcbiAgICAgIGFsbG93U2VsZWN0aW9uOiBvcHRpb25zPy5hbGxvd1NlbGVjdGlvbiA/PyBmYWxzZSxcbiAgICAgIGlzQWxsU2VsZWN0ZWQ6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5pc0FsbFNlbGVjdGVkKGNvcmVTdGF0ZSksXG4gICAgICBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQ6XG4gICAgICAgIFRhYmxlU2VsZWN0aW9uSGVscGVycy5pc0N1cnJlbnRQYWdlU2VsZWN0ZWQoY29yZVN0YXRlKSxcbiAgICAgIHNlbGVjdGVkQ291bnQ6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5zZWxlY3RlZENvdW50KGNvcmVTdGF0ZSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb21lIHRhYmxlcyB1c2UgcmVtb3RlIGJhY2tlbmRzIHRvIGZldGNoIGRhdGEgYXN5bmNocm9ub3VzbHksIGJ1dCBtb3N0IHRhYmxlcyB1c2UgYW5cbiAgICogaW4tbWVtb3J5IHNvdXJjZSwgd2hpY2ggaXMgdXNlZnVsIGZvciBzbWFsbCBkYXRhc2V0cywgd2hlbiBSaXZUYWJsZSBmZWF0dXJlcyBsaWtlXG4gICAqIG9yZGVyaW5nIGFuZCBwYWdpbmF0aW9uIGFyZSBkZXNpcmVkLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeUNvbHVtbk1ldGFkYXRhPFIgZXh0ZW5kcyBSb3c+ID0gT21pdDxcbiAgICBDb2x1bW5NZXRhZGF0YSxcbiAgICAnb3JkZXJhYmxlJ1xuICA+ICYgeyBvcmRlcktleT86IGtleW9mIFIgfTtcblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+ICYge1xuICAgIGZ1c2VPcHRpb25zPzogSUZ1c2VPcHRpb25zPFI+O1xuICAgIGZpbHRlcj86IChmaWx0ZXJzOiBGIHwgbnVsbCwgcm93OiBSKSA9PiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZW4gYHF1ZXJ5Lm9yZGVyYCBpcyBudWxsIGFuZCB0aGVyZSBpcyBubyBhY3RpdmUgc2VhcmNoLCByb3dzIGFyZSBvcmRlcmVkXG4gICAgICogYnkgdGhpcyBjb2x1bW4uIElmIG9taXR0ZWQsIHRoZSBmaXJzdCBjb2x1bW4gd2l0aCBhbiBgb3JkZXJLZXlgIGlzIHVzZWRcbiAgICAgKiAoYXNjZW5kaW5nKS5cbiAgICAgKi9cbiAgICBkZWZhdWx0U29ydD86IHsgY29sdW1uOiBDOyBkaXJlY3Rpb246IE9yZGVyRGlyZWN0aW9uIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIFdoYXQgYSBuZXN0ZWQgdGFibGUncyBwYWdlIHNpemUgYW5kIHRvdGFsIGNvdW50IGNvdW50OiBldmVyeSBib3R0b20tbGV2ZWxcbiAgICogcm93LCB3aGljaCBjYW4gc3BsaXQgYSByb3cncyBzdWJyb3dzIGFjcm9zcyBwYWdlcywgb3IgZWFjaCB0b3AtbGV2ZWwgcm93XG4gICAqIHRvZ2V0aGVyIHdpdGggYWxsIG9mIGl0cyBzdWJyb3dzLlxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IE5lc3RlZFBhZ2luYXRlQnlPcHRpb25zID0gWydib3R0b21Sb3dzJywgJ3RvcFJvd3MnXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgTmVzdGVkUGFnaW5hdGVCeSA9ICh0eXBlb2YgTmVzdGVkUGFnaW5hdGVCeU9wdGlvbnMpW251bWJlcl07XG5cbiAgZXhwb3J0IHR5cGUgSW5NZW1vcnlOZXN0ZWRNYW5hZ2VyT3B0aW9uczxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gID4gPSBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPFIsIEMsIEY+ICYge1xuICAgIC8qKiBEZWZhdWx0cyB0byAnYm90dG9tUm93cycuICovXG4gICAgcGFnaW5hdGVCeT86IE5lc3RlZFBhZ2luYXRlQnk7XG4gIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluTWVtb3J5TWFuYWdlcjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gID4oXG4gICAgZmV0Y2hEYXRhc2V0OiAoKSA9PiBQcm9taXNlPFJbXT4gfCBSW10sXG4gICAgY29sdW1uczogTWFwPEMsIEluTWVtb3J5Q29sdW1uTWV0YWRhdGE8Uj4+LFxuICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogSW5NZW1vcnlNYW5hZ2VyT3B0aW9uczxSLCBDLCBGPixcbiAgKTogTWFuYWdlcjxSLCBDLCBGPiB7XG4gICAgbGV0IGRhdGE6IFJbXTtcbiAgICBsZXQgZnVzZTogRnVzZTxSPjtcblxuICAgIGNvbnN0IHNvdXJjZTogU291cmNlPFIsIEMsIEY+ID0gYXN5bmMgKHF1ZXJ5LCBtb3N0UmVjZW50QWN0aW9uKSA9PiB7XG4gICAgICAvL0ZvciBpbk1lbW9yeU1hbmFnZXJzIHRoYXQgZG8gbm90IHV0aWxpemUgc2VhcmNoQ29sdW1ucyxcbiAgICAgIC8vd2UgZG8gbm90IHdhbnQgdG8gb3ZlcndyaXRlIHRoZWlyIGZ1c2VPcHRpb25zXG4gICAgICBpZiAobW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAnbG9hZCcpIHtcbiAgICAgICAgLy9QcmV2ZW50IHNlYXJjaGluZyBvbiBjb2x1bW5zIHRoYXQgYXJlIGluIGZ1c2Ugb3B0aW9ucyBidXQgbm90IHN1cHBvcnRlZCBieSBzZWFyY2guXG4gICAgICAgIGNvbnN0IG5vblNlYXJjaGFibGVDb2x1bW5zS2V5cyA9IG9wdGlvbnM/LmZ1c2VPcHRpb25zPy5rZXlzXG4gICAgICAgICAgPyBBcnJheS5mcm9tKGNvbHVtbnMuZW50cmllcygpKVxuICAgICAgICAgICAgICAuZmlsdGVyKChba2V5LCBjb2x1bW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5zZWFyY2hhYmxlID09IGZhbHNlO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAubWFwKChba2V5LCBjb2x1bW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5vcmRlcktleT8udG9TdHJpbmcoKSB8fCBrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZnVzZU9wdGlvbnMgPVxuICAgICAgICAgIG9wdGlvbnM/LmZ1c2VPcHRpb25zICYmIG5vblNlYXJjaGFibGVDb2x1bW5zS2V5c1xuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAga2V5czogb3B0aW9ucz8uZnVzZU9wdGlvbnM/LmtleXM/LmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIGsgPT4gIW5vblNlYXJjaGFibGVDb2x1bW5zS2V5cy5pbmNsdWRlcyhrLnRvU3RyaW5nKCkpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogb3B0aW9ucz8uZnVzZU9wdGlvbnM7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBmZXRjaERhdGFzZXQoKTtcbiAgICAgICAgZnVzZSA9IG5ldyBGdXNlKGRhdGEsIGZ1c2VPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAnc2VhcmNoQ29sdW1uc0NoYW5nZScgfHxcbiAgICAgICAgbW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAndG9nZ2xlQWxsU2VhcmNoQ29sdW1ucydcbiAgICAgICkge1xuICAgICAgICBkYXRhID0gYXdhaXQgZmV0Y2hEYXRhc2V0KCk7XG4gICAgICAgIGZ1c2UgPSBuZXcgRnVzZShkYXRhLCB7XG4gICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAga2V5czogQXJyYXkuZnJvbShxdWVyeS5zZWFyY2hDb2x1bW5zLmVudHJpZXMoKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+ICEhdmFsdWUpXG4gICAgICAgICAgICAubWFwKChba2V5LCBfXSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb2x1bW5LZXkgPSBjb2x1bW5zLmdldChrZXkpO1xuICAgICAgICAgICAgICByZXR1cm4gKGNvbHVtbktleT8ub3JkZXJLZXkgYXMgQykgfHwga2V5O1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3JkZXJDb2x1bW46IGtleW9mIFIgfCB1bmRlZmluZWQgPSBxdWVyeS5vcmRlclxuICAgICAgICA/IGNvbHVtbnMuZ2V0KHF1ZXJ5Lm9yZGVyLmNvbHVtbik/Lm9yZGVyS2V5XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaGFzRXhwbGljaXRTb3J0ID0gcXVlcnkub3JkZXIgIT0gbnVsbCAmJiBvcmRlckNvbHVtbiAhPT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZGVmYXVsdFNvcnRTcGVjID0gKCgpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnM/LmRlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gY29sdW1ucy5nZXQob3B0aW9ucy5kZWZhdWx0U29ydC5jb2x1bW4pPy5vcmRlcktleTtcbiAgICAgICAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGtleSwgZGlyZWN0aW9uOiBvcHRpb25zLmRlZmF1bHRTb3J0LmRpcmVjdGlvbiB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdE9yZGVyYWJsZSA9IFsuLi5jb2x1bW5zLmVudHJpZXMoKV0uZmluZChcbiAgICAgICAgICAoWywgbWV0YV0pID0+IG1ldGEub3JkZXJLZXkgIT0gbnVsbCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qga2V5ID0gZmlyc3RPcmRlcmFibGU/LlsxXS5vcmRlcktleTtcbiAgICAgICAgcmV0dXJuIGtleSAhPT0gdW5kZWZpbmVkID8geyBrZXksIGRpcmVjdGlvbjogJ2FzYycgYXMgY29uc3QgfSA6IG51bGw7XG4gICAgICB9KSgpO1xuXG4gICAgICBsZXQgb3JkZXJlZDogUltdO1xuICAgICAgaWYgKHF1ZXJ5LnNlYXJjaCkge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gZnVzZS5zZWFyY2gocXVlcnkuc2VhcmNoKS5tYXAocmVzdWx0ID0+IHJlc3VsdC5pdGVtKTtcbiAgICAgICAgb3JkZXJlZCA9XG4gICAgICAgICAgaGFzRXhwbGljaXRTb3J0ICYmIHF1ZXJ5Lm9yZGVyXG4gICAgICAgICAgICA/IFRhYmxlT3JkZXJIZWxwZXJzLm9yZGVyRW1wdHlMYXN0KFxuICAgICAgICAgICAgICAgIG1hdGNoZXMsXG4gICAgICAgICAgICAgICAgb3JkZXJDb2x1bW4sXG4gICAgICAgICAgICAgICAgcXVlcnkub3JkZXIuZGlyZWN0aW9uLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG1hdGNoZXM7XG4gICAgICB9IGVsc2UgaWYgKGhhc0V4cGxpY2l0U29ydCAmJiBxdWVyeS5vcmRlcikge1xuICAgICAgICBvcmRlcmVkID0gVGFibGVPcmRlckhlbHBlcnMub3JkZXJFbXB0eUxhc3QoXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBvcmRlckNvbHVtbixcbiAgICAgICAgICBxdWVyeS5vcmRlci5kaXJlY3Rpb24sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHF1ZXJ5Lm9yZGVyID09IG51bGwgJiYgZGVmYXVsdFNvcnRTcGVjKSB7XG4gICAgICAgIG9yZGVyZWQgPSBUYWJsZU9yZGVySGVscGVycy5vcmRlckVtcHR5TGFzdChcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGRlZmF1bHRTb3J0U3BlYy5rZXksXG4gICAgICAgICAgZGVmYXVsdFNvcnRTcGVjLmRpcmVjdGlvbixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9yZGVyZWQgPSBkYXRhO1xuICAgICAgfVxuICAgICAgY29uc3QgZmlsdGVyID0gb3B0aW9ucz8uZmlsdGVyO1xuICAgICAgY29uc3QgZmlsdGVyZWQgPSBmaWx0ZXJcbiAgICAgICAgPyBvcmRlcmVkLmZpbHRlcihyb3cgPT4gZmlsdGVyKHF1ZXJ5LmZpbHRlcnMsIHJvdykpXG4gICAgICAgIDogb3JkZXJlZDtcbiAgICAgIGNvbnN0IHN0YXJ0SWR4ID0gcXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZSAqIHF1ZXJ5LnBhZ2luYXRpb24ucGFnZTtcbiAgICAgIGNvbnN0IGVuZElkeCA9IHN0YXJ0SWR4ICsgcXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZTtcbiAgICAgIGNvbnN0IHBhZ2luYXRlZCA9IGZpbHRlcmVkLnNsaWNlKHN0YXJ0SWR4LCBlbmRJZHgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudFBhZ2VEYXRhOiBwYWdpbmF0ZWQsXG4gICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogZmlsdGVyZWQubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgY29sdW1uTWV0YWRhdGE6IE1hcDxDLCBDb2x1bW5NZXRhZGF0YT4gPVxuICAgICAgVGFibGVDb2x1bW5IZWxwZXJzLmNyZWF0ZUNvbHVtbk1ldGFkYXRhTWFwKGNvbHVtbnMpO1xuXG4gICAgLypcbiAgICAgIFdoZW4gYSBkZWZhdWx0U29ydCBpcyBzcGVjaWZpZWQsIHNlZWQgdGhlIGluaXRpYWwgcXVlcnkub3JkZXIgc28gdGhlXG4gICAgICB0YWJsZSBoZWFkZXIgc2hvd3MgdGhlIHNvcnQgaW5kaWNhdG9yIGZyb20gdGhlIHN0YXJ0LlxuICAgICovXG4gICAgb3B0aW9ucyA9IFRhYmxlT3JkZXJIZWxwZXJzLnNlZWREZWZhdWx0U29ydE9wdGlvbihvcHRpb25zKTtcblxuICAgIHJldHVybiBjcmVhdGVNYW5hZ2VyKHNvdXJjZSwgY29sdW1uTWV0YWRhdGEsIHBsdXJhbEVudGl0eU5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluTWVtb3J5TWFuYWdlck5lc3RlZDxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gID4oXG4gICAgZmV0Y2hEYXRhc2V0OiAoKSA9PiBQcm9taXNlPE5lc3RlZEhlYWRlclJvdzxSPltdPiB8IE5lc3RlZEhlYWRlclJvdzxSPltdLFxuICAgIGNvbHVtbnM6IE1hcDxDLCBJbk1lbW9yeUNvbHVtbk1ldGFkYXRhPFI+PixcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IEluTWVtb3J5TmVzdGVkTWFuYWdlck9wdGlvbnM8UiwgQywgRj4sXG4gICk6IE1hbmFnZXI8UiwgQywgRj4ge1xuICAgIGxldCBkYXRhOiBOZXN0ZWRIZWFkZXJSb3c8Uj5bXTtcbiAgICBsZXQgcm93c0Zyb21EYXRhOiBSW107XG4gICAgLy8gVGhlIGZ1c2Ugd2lsbCBzZWFyY2ggdGhlIGluZGl2aWR1YWwgcm93c1xuICAgIGxldCBmdXNlOiBGdXNlPFI+O1xuXG4gICAgY29uc3Qgc291cmNlOiBTb3VyY2U8UiwgQywgRj4gPSBhc3luYyAocXVlcnksIG1vc3RSZWNlbnRBY3Rpb24pID0+IHtcbiAgICAgIC8vRm9yIGluTWVtb3J5TWFuYWdlcnMgdGhhdCBkbyBub3QgdXRpbGl6ZSBzZWFyY2hDb2x1bW5zLFxuICAgICAgLy93ZSBkbyBub3Qgd2FudCB0byBvdmVyd3JpdGUgdGhlaXIgZnVzZU9wdGlvbnNcbiAgICAgIGlmIChtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdsb2FkJykge1xuICAgICAgICAvL1ByZXZlbnQgc2VhcmNoaW5nIG9uIGNvbHVtbnMgdGhhdCBhcmUgaW4gZnVzZSBvcHRpb25zIGJ1dCBub3Qgc3VwcG9ydGVkIGJ5IHNlYXJjaC5cbiAgICAgICAgY29uc3Qgbm9uU2VhcmNoYWJsZUNvbHVtbnNLZXlzID0gb3B0aW9ucz8uZnVzZU9wdGlvbnM/LmtleXNcbiAgICAgICAgICA/IEFycmF5LmZyb20oY29sdW1ucy5lbnRyaWVzKCkpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKFtrZXksIGNvbHVtbl0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLnNlYXJjaGFibGUgPT0gZmFsc2U7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5tYXAoKFtrZXksIGNvbHVtbl0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLm9yZGVyS2V5Py50b1N0cmluZygpIHx8IGtleS50b1N0cmluZygpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBmdXNlT3B0aW9ucyA9XG4gICAgICAgICAgb3B0aW9ucz8uZnVzZU9wdGlvbnMgJiYgbm9uU2VhcmNoYWJsZUNvbHVtbnNLZXlzXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zPy5mdXNlT3B0aW9ucyxcbiAgICAgICAgICAgICAgICBrZXlzOiBvcHRpb25zPy5mdXNlT3B0aW9ucz8ua2V5cz8uZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgayA9PiAhbm9uU2VhcmNoYWJsZUNvbHVtbnNLZXlzLmluY2x1ZGVzKGsudG9TdHJpbmcoKSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBvcHRpb25zPy5mdXNlT3B0aW9ucztcbiAgICAgICAgZGF0YSA9IGF3YWl0IGZldGNoRGF0YXNldCgpO1xuICAgICAgICByb3dzRnJvbURhdGEgPSBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0QWxsUm93c0Zyb21OZXN0ZWRIZWFkZXJzKGRhdGEpO1xuICAgICAgICBmdXNlID0gbmV3IEZ1c2Uocm93c0Zyb21EYXRhLCBmdXNlT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ3NlYXJjaENvbHVtbnNDaGFuZ2UnIHx8XG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ3RvZ2dsZUFsbFNlYXJjaENvbHVtbnMnXG4gICAgICApIHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IGZldGNoRGF0YXNldCgpO1xuICAgICAgICByb3dzRnJvbURhdGEgPSBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0QWxsUm93c0Zyb21OZXN0ZWRIZWFkZXJzKGRhdGEpO1xuICAgICAgICBmdXNlID0gbmV3IEZ1c2Uocm93c0Zyb21EYXRhLCB7XG4gICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAga2V5czogQXJyYXkuZnJvbShxdWVyeS5zZWFyY2hDb2x1bW5zLmVudHJpZXMoKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+ICEhdmFsdWUpXG4gICAgICAgICAgICAubWFwKChba2V5LCBfXSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb2x1bW5LZXkgPSBjb2x1bW5zLmdldChrZXkpO1xuICAgICAgICAgICAgICByZXR1cm4gKGNvbHVtbktleT8ub3JkZXJLZXkgYXMgQykgfHwga2V5O1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3JkZXJDb2x1bW46IGtleW9mIFIgfCB1bmRlZmluZWQgPSBxdWVyeS5vcmRlclxuICAgICAgICA/IGNvbHVtbnMuZ2V0KHF1ZXJ5Lm9yZGVyLmNvbHVtbik/Lm9yZGVyS2V5XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaGFzRXhwbGljaXRTb3J0ID0gcXVlcnkub3JkZXIgIT0gbnVsbCAmJiBvcmRlckNvbHVtbiAhPT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZGVmYXVsdFNvcnRTcGVjID0gKCgpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnM/LmRlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gY29sdW1ucy5nZXQob3B0aW9ucy5kZWZhdWx0U29ydC5jb2x1bW4pPy5vcmRlcktleTtcbiAgICAgICAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGtleSwgZGlyZWN0aW9uOiBvcHRpb25zLmRlZmF1bHRTb3J0LmRpcmVjdGlvbiB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdE9yZGVyYWJsZSA9IFsuLi5jb2x1bW5zLmVudHJpZXMoKV0uZmluZChcbiAgICAgICAgICAoWywgbWV0YV0pID0+IG1ldGEub3JkZXJLZXkgIT0gbnVsbCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qga2V5ID0gZmlyc3RPcmRlcmFibGU/LlsxXS5vcmRlcktleTtcbiAgICAgICAgcmV0dXJuIGtleSAhPT0gdW5kZWZpbmVkID8geyBrZXksIGRpcmVjdGlvbjogJ2FzYycgYXMgY29uc3QgfSA6IG51bGw7XG4gICAgICB9KSgpO1xuXG4gICAgICAvLyBTZWFyY2gsIHRoZW4gZmlsdGVyLCB0aGVuIHNvcnRcbiAgICAgIGxldCBkaWRSZXN0cmljdERpc3BsYXllZFJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgICAgbGV0IHJvd3NNYXRjaGluZ1NlYXJjaDogUltdID0gcm93c0Zyb21EYXRhO1xuICAgICAgaWYgKHF1ZXJ5LnNlYXJjaCkge1xuICAgICAgICByb3dzTWF0Y2hpbmdTZWFyY2ggPSBmdXNlXG4gICAgICAgICAgLnNlYXJjaChxdWVyeS5zZWFyY2gpXG4gICAgICAgICAgLm1hcChyZXN1bHQgPT4gcmVzdWx0Lml0ZW0pO1xuXG4gICAgICAgIGRpZFJlc3RyaWN0RGlzcGxheWVkUm93cyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGxldCByb3dzTWF0Y2hpbmdGaWx0ZXJzOiBSW10gPSByb3dzTWF0Y2hpbmdTZWFyY2g7XG4gICAgICBjb25zdCBmaWx0ZXJUb0FwcGx5ID0gb3B0aW9ucz8uZmlsdGVyO1xuICAgICAgaWYgKGZpbHRlclRvQXBwbHkpIHtcbiAgICAgICAgcm93c01hdGNoaW5nRmlsdGVycyA9IHJvd3NNYXRjaGluZ1NlYXJjaC5maWx0ZXIocm93ID0+XG4gICAgICAgICAgZmlsdGVyVG9BcHBseShxdWVyeS5maWx0ZXJzLCByb3cpLFxuICAgICAgICApO1xuXG4gICAgICAgIGRpZFJlc3RyaWN0RGlzcGxheWVkUm93cyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5lc3RlZFJvd3NUb0Rpc3BsYXk6IE5lc3RlZEhlYWRlclJvdzxSPltdID0gZGlkUmVzdHJpY3REaXNwbGF5ZWRSb3dzXG4gICAgICAgID8gVGFibGVOZXN0aW5nSGVscGVycy5maW5kTmVzdGVkUm93c1dpdGhIZWFkZXJzVG9LZWVwKFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHJvd3NNYXRjaGluZ0ZpbHRlcnMsXG4gICAgICAgICAgKVxuICAgICAgICA6IGRhdGE7XG4gICAgICBjb25zdCBtYXRjaGluZ1Jvd0NvdW50OiBudW1iZXIgPSBUYWJsZU5lc3RpbmdIZWxwZXJzLmNvdW50TmVzdGVkUm93cyhcbiAgICAgICAgbmVzdGVkUm93c1RvRGlzcGxheSxcbiAgICAgICAgb3B0aW9ucz8ucGFnaW5hdGVCeSA/PyAnYm90dG9tUm93cycsXG4gICAgICApO1xuXG4gICAgICBsZXQgc29ydGVkTmVzdGVkUm93czogTmVzdGVkSGVhZGVyUm93PFI+W107XG4gICAgICBpZiAoaGFzRXhwbGljaXRTb3J0ICYmIHF1ZXJ5Lm9yZGVyKSB7XG4gICAgICAgIC8vIEV4cGxpY2l0IHNvcnQgb3ZlcnJpZGUgaGFzIHByaW9yaXR5IG92ZXIgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgIHNvcnRlZE5lc3RlZFJvd3MgPSBUYWJsZU9yZGVySGVscGVycy5zb3J0TG93TGV2ZWxOZXN0ZWRSb3dzV2l0aEhlYWRlcnMoXG4gICAgICAgICAgbmVzdGVkUm93c1RvRGlzcGxheSxcbiAgICAgICAgICBvcmRlckNvbHVtbixcbiAgICAgICAgICBxdWVyeS5vcmRlci5kaXJlY3Rpb24sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHF1ZXJ5LnNlYXJjaCkge1xuICAgICAgICAvLyBTb3J0IG9uIHRoZSBGdXNlIHJlbGV2YW5jZSBvcmRlclxuICAgICAgICBjb25zdCBpZFRvU2VhcmNoSW5kZXhNYXA6IE1hcDxzdHJpbmcgfCBudW1iZXIsIG51bWJlcj4gPVxuICAgICAgICAgIFRhYmxlT3JkZXJIZWxwZXJzLmNyZWF0ZUlkVG9TZWFyY2hJbmRleE1hcChyb3dzTWF0Y2hpbmdTZWFyY2gpO1xuICAgICAgICBzb3J0ZWROZXN0ZWRSb3dzID1cbiAgICAgICAgICBUYWJsZU9yZGVySGVscGVycy5zb3J0TmVzdGVkUm93c1dpdGhIZWFkZXJzQmFzZWRPblNlYXJjaE1hdGNoZXMoXG4gICAgICAgICAgICBuZXN0ZWRSb3dzVG9EaXNwbGF5LFxuICAgICAgICAgICAgaWRUb1NlYXJjaEluZGV4TWFwLFxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHF1ZXJ5Lm9yZGVyID09IG51bGwgJiYgZGVmYXVsdFNvcnRTcGVjKSB7XG4gICAgICAgIC8vIFVzZSB0aGUgZGVmYXVsdCBzb3J0LCBpZiB3ZSBoYXZlIG9uZVxuICAgICAgICBzb3J0ZWROZXN0ZWRSb3dzID0gVGFibGVPcmRlckhlbHBlcnMuc29ydExvd0xldmVsTmVzdGVkUm93c1dpdGhIZWFkZXJzKFxuICAgICAgICAgIG5lc3RlZFJvd3NUb0Rpc3BsYXksXG4gICAgICAgICAgZGVmYXVsdFNvcnRTcGVjLmtleSxcbiAgICAgICAgICBkZWZhdWx0U29ydFNwZWMuZGlyZWN0aW9uLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRG9uJ3Qgc29ydCBpZiB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uIHRvIHVzZSB0byBzb3J0XG4gICAgICAgIHNvcnRlZE5lc3RlZFJvd3MgPSBuZXN0ZWRSb3dzVG9EaXNwbGF5O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWdpbmF0ZWRIZWFkZXJSb3dzOiBOZXN0ZWRIZWFkZXJSb3c8Uj5bXSA9XG4gICAgICAgIFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMucGFnaW5hdGVOZXN0ZWRIZWFkZXJSb3dzKFxuICAgICAgICAgIHNvcnRlZE5lc3RlZFJvd3MsXG4gICAgICAgICAgcXVlcnkucGFnaW5hdGlvbi5wYWdlLFxuICAgICAgICAgIHF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemUsXG4gICAgICAgICAgb3B0aW9ucz8ucGFnaW5hdGVCeSA/PyAnYm90dG9tUm93cycsXG4gICAgICAgICk7XG4gICAgICBjb25zdCBoYXNIZWFkZXJzOiBib29sZWFuID0gcGFnaW5hdGVkSGVhZGVyUm93cy5zb21lKFxuICAgICAgICBoZWFkZXIgPT4gaGVhZGVyLmhlYWRlclRleHQgIT0gbnVsbCxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnRQYWdlTmVzdGVkSGVhZGVyczogcGFnaW5hdGVkSGVhZGVyUm93cyxcbiAgICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBtYXRjaGluZ1Jvd0NvdW50LFxuICAgICAgICBoYXNIZWFkZXJzOiBoYXNIZWFkZXJzLFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgY29sdW1uTWV0YWRhdGE6IE1hcDxDLCBDb2x1bW5NZXRhZGF0YT4gPVxuICAgICAgVGFibGVDb2x1bW5IZWxwZXJzLmNyZWF0ZUNvbHVtbk1ldGFkYXRhTWFwKGNvbHVtbnMpO1xuXG4gICAgLypcbiAgICAgIFdoZW4gYSBkZWZhdWx0U29ydCBpcyBzcGVjaWZpZWQsIHNlZWQgdGhlIGluaXRpYWwgcXVlcnkub3JkZXIgc28gdGhlXG4gICAgICB0YWJsZSBoZWFkZXIgc2hvd3MgdGhlIHNvcnQgaW5kaWNhdG9yIGZyb20gdGhlIHN0YXJ0LlxuICAgICovXG4gICAgb3B0aW9ucyA9IFRhYmxlT3JkZXJIZWxwZXJzLnNlZWREZWZhdWx0U29ydE9wdGlvbihvcHRpb25zKTtcblxuICAgIHJldHVybiBjcmVhdGVNYW5hZ2VyKHNvdXJjZSwgY29sdW1uTWV0YWRhdGEsIHBsdXJhbEVudGl0eU5hbWUsIG9wdGlvbnMpO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBrZWVwcyB0aGUgc3RhdGUgb2JqZWN0IHJlZmVyZW5jZXMgYXMgc3RhYmxlIGFzIHBvc3NpYmxlLCB3aGljaFxuICogaGVscHMgQW5ndWxhciByZWR1Y2UgdW5uZWNlc3NhcnkgcmUtcmVuZGVycy4gRm9yIG5vdywgc2ltcGxlIGlzRXF1YWwoKVxuICogY2hlY2tzIGF0IHRoZSBzdGF0ZSdzIHRvcC1sZXZlbCBrZXlzIGFyZSBzdWZmaWNpZW50IHRvIGRyYW1hdGljYWxseSBzcGVlZCB1cFxuICogcmVuZGVyaW5nLCBidXQgaWYgb3RoZXIgcGVyZm9ybWFuY2UgaXNzdWVzIGFyaXNlLCB3ZSBjb3VsZCBpbXBsZW1lbnQgbW9yZVxuICogZ3JhbnVsYXIgY2hlY2tzL3N1cmdpY2FsIHVwZGF0ZXMgYXMgbmVlZGVkICh0aGUgc3RhdGUucmVzdWx0IGJlaW5nIHRoZSBtb3N0XG4gKiBsaWtlbHkgY2FuZGlkYXRlLCBzaW5jZSBtYW55IHR5cGVzIG9mIHN0YXRlIHVwZGF0ZXMgYWZmZWN0IHBhcnRzIG9mIHRoZVxuICogcmVzdWx0IHJvd3MpLlxuICovXG5mdW5jdGlvbiBzdGFibGVTdGF0ZTxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHRhcmdldDogUml2VGFibGUuRnVsbFN0YXRlPFIsIEMsIEYsIEc+LFxuICBzb3VyY2U6IFJpdlRhYmxlLkZ1bGxTdGF0ZTxSLCBDLCBGLCBHPixcbik6IFJpdlRhYmxlLkZ1bGxTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGlmICghaXNFcXVhbCh0YXJnZXQucXVlcnksIHNvdXJjZS5xdWVyeSkpIHtcbiAgICB0YXJnZXQucXVlcnkgPSBzb3VyY2UucXVlcnk7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5sb2FkLCBzb3VyY2UubG9hZCkpIHtcbiAgICB0YXJnZXQubG9hZCA9IHNvdXJjZS5sb2FkO1xuICB9XG5cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5yZXN1bHQuY3N2RGF0YSwgc291cmNlLnJlc3VsdC5jc3ZEYXRhKSkge1xuICAgIHRhcmdldC5yZXN1bHQuY3N2RGF0YSA9IHNvdXJjZS5yZXN1bHQuY3N2RGF0YTtcbiAgfVxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LnJlc3VsdC5jc3ZGaWxlbmFtZSwgc291cmNlLnJlc3VsdC5jc3ZGaWxlbmFtZSkpIHtcbiAgICB0YXJnZXQucmVzdWx0LmNzdkZpbGVuYW1lID0gc291cmNlLnJlc3VsdC5jc3ZGaWxlbmFtZTtcbiAgfVxuICBpZiAoXG4gICAgIWlzRXF1YWwoXG4gICAgICB0YXJnZXQucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCxcbiAgICAgIHNvdXJjZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICAgIClcbiAgKSB7XG4gICAgdGFyZ2V0LnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgPSBzb3VyY2UucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudDtcbiAgfVxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LnJlc3VsdCwgc291cmNlLnJlc3VsdCkpIHtcbiAgICB0YXJnZXQucmVzdWx0ID0gc291cmNlLnJlc3VsdDtcbiAgfVxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LmRpc3BsYXksIHNvdXJjZS5kaXNwbGF5KSkge1xuICAgIHRhcmdldC5kaXNwbGF5ID0gc291cmNlLmRpc3BsYXk7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5zZWxlY3Rpb24sIHNvdXJjZS5zZWxlY3Rpb24pKSB7XG4gICAgdGFyZ2V0LnNlbGVjdGlvbiA9IHNvdXJjZS5zZWxlY3Rpb247XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5jb2xsYXBzZVN0YXRlLCBzb3VyY2UuY29sbGFwc2VTdGF0ZSkpIHtcbiAgICB0YXJnZXQuY29sbGFwc2VTdGF0ZSA9IHNvdXJjZS5jb2xsYXBzZVN0YXRlO1xuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uKiByZWZyZXNoUmVzdWx0V2l0aDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIHNvdXJjZTogUml2VGFibGUuU291cmNlPFIsIEMsIEYsIEc+LFxuICBtb3N0UmVjZW50QWN0aW9uOiBSaXZUYWJsZS5BY3Rpb248UiwgQywgRiwgRz4sXG4pOiBBc3luY0dlbmVyYXRvcjx7XG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz47XG4gIGVmZmVjdDogUml2VGFibGUuRWZmZWN0IHwgbnVsbDtcbn0+IHtcbiAgeWllbGQge1xuICAgIHN0YXRlOiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxvYWQ6IHtcbiAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9LFxuICAgIH0sXG4gICAgZWZmZWN0OiBudWxsLFxuICB9O1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNvdXJjZShzdGF0ZS5xdWVyeSwgbW9zdFJlY2VudEFjdGlvbik7XG4gICAgaWYgKFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuaXNQYWdlT3V0T2ZCb3VuZHMoc3RhdGUsIHJlc3VsdCkpIHtcbiAgICAgIHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSA9IDA7XG4gICAgfVxuICAgIHlpZWxkIHtcbiAgICAgIHN0YXRlOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBsb2FkOiB7XG4gICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHJlc3VsdCxcbiAgICAgIH0sXG4gICAgICBlZmZlY3Q6IG51bGwsXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIHlpZWxkIHtcbiAgICAgIHN0YXRlOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBsb2FkOiB7XG4gICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZWZmZWN0OiBudWxsLFxuICAgIH07XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24qIHJlZHVjZTxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIGFjdGlvbjogUml2VGFibGUuQWN0aW9uPFIsIEMsIEYsIEc+LFxuICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICBzb3VyY2U6IFJpdlRhYmxlLlNvdXJjZTxSLCBDLCBGLCBHPixcbiAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgZGVmYXVsdENvbHVtblN0YXRlOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPltdLFxuKTogQXN5bmNHZW5lcmF0b3I8e1xuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICBlZmZlY3Q6IFJpdlRhYmxlLkVmZmVjdCB8IG51bGw7XG59PiB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlICdsb2FkJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChzdGF0ZSwgc291cmNlLCBhY3Rpb24pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnb3JkZXJDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgb3JkZXI6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogbnVsbCxcbiAgICAgICAgICAgIG1vZGU6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnb3JkZXJDb2x1bW5Ub2dnbGUnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICBUYWJsZU9yZGVySGVscGVycy50b2dnbGVDb2x1bW5PcmRlcihzdGF0ZSwgYWN0aW9uLmNvbHVtbiksXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlYXJjaENoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBzZWFyY2g6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29sbGFwc2VTdGF0ZToge1xuICAgICAgICAgICAgZGVmYXVsdFRvOiAnZXhwYW5kZWQnLFxuICAgICAgICAgICAgY29sbGFwc2VkSGVhZGVyczogbmV3IFNldCgpLFxuICAgICAgICAgICAgY29sbGFwc2VkUm93czogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlYXJjaENvbHVtbnNDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgc2VhcmNoQ29sdW1uczogbmV3IE1hcChbXG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnNlYXJjaENvbHVtbnMsXG4gICAgICAgICAgICAgIC4uLmFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogbnVsbCxcbiAgICAgICAgICAgIG1vZGU6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb2xsYXBzZVN0YXRlOiB7XG4gICAgICAgICAgICBkZWZhdWx0VG86ICdleHBhbmRlZCcsXG4gICAgICAgICAgICBjb2xsYXBzZWRIZWFkZXJzOiBuZXcgU2V0KCksXG4gICAgICAgICAgICBjb2xsYXBzZWRSb3dzOiBuZXcgU2V0KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFnaW5hdGlvbkNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdncm91cGluZ0NoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBncm91cGluZzogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncHJldmlvdXNQYWdlTmF2aWdhdGUnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFByZXZpb3VzUGFnZShzdGF0ZSkgPz8gMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbmV4dFBhZ2VOYXZpZ2F0ZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2U6XG4gICAgICAgICAgICAgICAgVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXROZXh0UGFnZShzdGF0ZSkgPz9cbiAgICAgICAgICAgICAgICBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFBhZ2VDb3VudChzdGF0ZSkgLSAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwYWdlQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogYWN0aW9uLnBhZ2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2VTaXplQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZVNpemU6IGFjdGlvbi5zaXplLFxuICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmaWx0ZXJzQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIGZpbHRlcnM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29sbGFwc2VTdGF0ZToge1xuICAgICAgICAgICAgZGVmYXVsdFRvOiAnZXhwYW5kZWQnLFxuICAgICAgICAgICAgY29sbGFwc2VkSGVhZGVyczogbmV3IFNldCgpLFxuICAgICAgICAgICAgY29sbGFwc2VkUm93czogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ZpbHRlckFkZCc6XG4gICAgICAvLyBQYXJlbnQgY29tcG9uZW50IGlzIHJlc3BvbnNpYmxlIGZvciBzdWJzY3JpYmluZyBhbmQgYWRkaW5nIHRoZSBmaWx0ZXJcbiAgICAgIHlpZWxkIHsgc3RhdGU6IHsgLi4uc3RhdGUgfSwgZWZmZWN0OiBudWxsIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5TZXR0aW5nc0NoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgICAgICAgIGNvbHVtblNldHRpbmdzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICAvLyBkbyBub3Qgb3V0cHV0IGNoYW5nZXMgd2hlbiB0cmlnZ2VyZWQgZnJvbSB0aGUgb3V0c2lkZSB3b3JsZFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uUGluQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlQ29sdW1uSGVscGVycy5jaGFuZ2VDb2x1bW5QaW4oXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLnBpbm5lZCxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5zRnJlZXplVXBUb0NoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMuY2hhbmdlQ29sdW1uc0ZyZWV6ZVN0YXRlKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24uaW5kZXgsXG4gICAgICAgICAgYWN0aW9uLmZyZWV6ZSxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5PcmRlckNoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMuY2hhbmdlQ29sdW1uT3JkZXIoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5wcmV2aW91c0luZGV4LFxuICAgICAgICAgIGFjdGlvbi5uZXdJbmRleCxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5Nb3ZlVG9DaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLm1vdmVDb2x1bW5UbyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLmNvbHVtbixcbiAgICAgICAgICBhY3Rpb24ucG9zaXRpb24sXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uRW5hYmxlZENoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMuY2hhbmdlQ29sdW1uRW5hYmxlZChcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLmNvbHVtbixcbiAgICAgICAgICBhY3Rpb24uZW5hYmxlZCxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmFibGVBbGxDb2x1bW5zQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlQ29sdW1uSGVscGVycy5lbmFibGVBbGxDb2x1bW5zKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24uZW5hYmxlZCxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5XaWR0aENoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMuY2hhbmdlQ29sdW1uV2lkdGgoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLnByZWZlcnJlZFdpZHRoLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Jlc2V0VG9EZWZhdWx0Q29sdW1ucyc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMucmVzZXRUb0RlZmF1bHRDb2x1bW5zKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBkZWZhdWx0Q29sdW1uU3RhdGUsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc2VsZWN0aW9uQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBzZWxlY3Rpb246IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICB9LFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncm93U2VsZWN0ZWRDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVTZWxlY3Rpb25IZWxwZXJzLnNldFJvd1NlbGVjdGVkKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGFjdGlvbi5pZCxcbiAgICAgICAgICBhY3Rpb24uc2VsZWN0ZWQsXG4gICAgICAgICAgYWN0aW9uLmNvbnRpZ3VvdXMsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwYWdlU2VsZWN0ZWRDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVTZWxlY3Rpb25IZWxwZXJzLnRvZ2dsZVBhZ2VTZWxlY3RlZChzdGF0ZSksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdhbGxTZWxlY3RlZENoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZVNlbGVjdGlvbkhlbHBlcnMudG9nZ2xlQWxsU2VsZWN0ZWQoc3RhdGUpLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc2VsZWN0aW9uQ2xlYXInOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVTZWxlY3Rpb25IZWxwZXJzLmNsZWFyU2VsZWN0aW9uKHN0YXRlKSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2dyb3VwU2VsZWN0aW9uQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlU2VsZWN0aW9uSGVscGVycy50b2dnbGVHcm91cFNlbGVjdGVkKHN0YXRlLCBhY3Rpb24ucGF5bG9hZCksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdncm91cHNQZXJQYWdlQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIGdyb3VwaW5nOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5Lmdyb3VwaW5nLFxuICAgICAgICAgICAgICBncm91cHNQZXJQYWdlOiBhY3Rpb24uZ3JvdXBzUGVyUGFnZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY291bnRQZXJHcm91cENoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBncm91cGluZzoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5ncm91cGluZyxcbiAgICAgICAgICAgICAgY291bnRQZXJHcm91cDogYWN0aW9uLmNvdW50UGVyR3JvdXAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ZpZXdNb3JlS2V5Q2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIGdyb3VwaW5nOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5Lmdyb3VwaW5nLFxuICAgICAgICAgICAgICB2aWV3TW9yZUtleTogYWN0aW9uLnZpZXdNb3JlS2V5LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0b2dnbGVBbGxTZWFyY2hDb2x1bW5zJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAgVGFibGVTZWFyY2hIZWxwZXJzLnRvZ2dsZUFsbFNlYXJjaENvbHVtbnMoc3RhdGUpLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0b2dnbGVSb3dDb2xsYXBzZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbGxhcHNlSGVscGVycy50b2dnbGVSb3dDb2xsYXBzZShzdGF0ZSwgYWN0aW9uLmlkKSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RvZ2dsZUhlYWRlckNvbGxhcHNlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlQ29sbGFwc2VIZWxwZXJzLnRvZ2dsZUhlYWRlckNvbGxhcHNlKHN0YXRlLCBhY3Rpb24uaWQpLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9nZ2xlQWxsQ29sbGFwc2VkJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlQ29sbGFwc2VIZWxwZXJzLnRvZ2dsZUFsbENvbGxhcHNlZChzdGF0ZSksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgfVxufVxuIl19
|
|
1022
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLElBQXNCLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQy9DLE9BQU8sRUFFTCxXQUFXLEVBQ1gsTUFBTSxFQUNOLElBQUksRUFDSixHQUFHLEVBQ0gsU0FBUyxFQUVULGFBQWEsRUFDYixJQUFJLEVBQ0osS0FBSyxFQUNMLE9BQU8sR0FDUixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUUxRSxNQUFNLEtBQVcsUUFBUSxDQTRsRHhCO0FBNWxERCxXQUFpQixRQUFRO0lBMkNWLGtCQUFTLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENB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SixLQUFLLEVBQUUsb0JBQW9CLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ2xFLE1BQU0sRUFBRSxJQUFJO2FBQ2IsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLG9CQUFvQjtZQUN2QixNQUFNO2dCQUNKLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7Z0JBQ3JELE1BQU0sRUFBRSxJQUFJO2FBQ2IsQ0FBQztZQUNGLE1BQU07S0FDVDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhcmFtcywgUXVlcnlQYXJhbXNIYW5kbGluZyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgRnVzZSwgeyBJRnVzZU9wdGlvbnMgfSBmcm9tICdmdXNlLmpzJztcbmltcG9ydCB7IGRlZmF1bHRzRGVlcCwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBDb25uZWN0YWJsZSxcbiAgY29ubmVjdGFibGUsXG4gIGZpbHRlcixcbiAgZnJvbSxcbiAgbWFwLFxuICBtZXJnZVNjYW4sXG4gIE9ic2VydmFibGUsXG4gIFJlcGxheVN1YmplY3QsXG4gIHNjYW4sXG4gIHNoYXJlLFxuICBTdWJqZWN0LFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERlZXBQYXJ0aWFsIH0gZnJvbSAndXRpbGl0eS10eXBlcyc7XG5pbXBvcnQgeyB0b1NlbnRlbmNlQ2FzZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9zZW50ZW5jZS1jYXNlLnBpcGUnO1xuaW1wb3J0IHsgVGFibGVDb2xsYXBzZUhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvY29sbGFwc2UtaGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbkhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvY29sdW1uLWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVEaXNwbGF5SGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9kaXNwbGF5LWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVOZXN0aW5nSGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9uZXN0aW5nLWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVPcmRlckhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvb3JkZXItaGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZVBhZ2luYXRpb25IZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL3BhZ2luYXRpb24taGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZVJlc3VsdEhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvcmVzdWx0LWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVTZWFyY2hIZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL3NlYXJjaC1oZWxwZXJzJztcbmltcG9ydCB7IFRhYmxlU2VsZWN0aW9uSGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9zZWxlY3Rpb24taGVscGVycyc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgUml2VGFibGUge1xuICBleHBvcnQgdHlwZSBSb3cgPSB7IGlkOiBzdHJpbmcgfCBudW1iZXIgfTtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uID0gc3RyaW5nO1xuICBleHBvcnQgdHlwZSBGaWx0ZXJzID0gYW55O1xuICBleHBvcnQgdHlwZSBHcm91cCA9IHsga2V5OiBzdHJpbmcgfCBudW1iZXIgfTtcblxuICAvKipcbiAgICogUml2VGFibGUncyBzdGF0ZSBhbmQgdXNlciBhY3Rpb25zIGFyZSBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBjaHVua3M6XG4gICAqXG4gICAqIC0gUXVlcnkgKGZvciB0aGluZ3MgbGlrZSBmaWx0ZXJzLCBwYWdpbmF0aW9uLCBzZWFyY2gsIGV0Yy4pXG4gICAqIC0gTG9hZGluZyAoZm9yIHdoZXRoZXIgb3Igbm90IHRoZSB0YWJsZSBpcyBsb2FkaW5nIHJvdyBkYXRhKVxuICAgKiAtIFJlc3VsdCAoZm9yIHRoZSByb3cgZGF0YSBpdHNlbGYpXG4gICAqIC0gRGlzcGxheSAoZm9yIHRoaW5ncyBsaWtlIGNvbHVtbiBjb25maWd1cmF0aW9uKVxuICAgKiAtIFNlbGVjdGlvbiAoZm9yIHRyYWNraW5nIHRoZSB1c2VyJ3Mgcm93IHNlbGVjdGlvbnMpXG4gICAqIC0gQ29sbGFwc2VTdGF0ZSAoZm9yIHRyYWNraW5nIHRoZSByb3dzL2hlYWRlcnMgdGhhdCBhcmUgY29sbGFwc2VkKVxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhlIGRhdGEgZmxvdyBpcyB1bmlkaXJlY3Rpb25hbDogdGhlIFVJIGlzc3VlcyBhY3Rpb25zLCB3aGljaFxuICAgKiBhZmZlY3QgdGhlIHN0YXRlLCBhbmQgdGhlIHN0YXRlIGdldHMgcGFzc2VkIGJhY2sgdG8gdGhlIFVJIGZvciBkaXNwbGF5LlxuICAgKlxuICAgKiDilIzilIDilIDilIDilIDilIDilIDilJBcbiAgICog4pSCICBVSSAg4peE4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAqIOKUlOKUgOKUgOKUrOKUgOKUgOKUgOKUmCAgICAgICAg4pSCXG4gICAqICAgIOKUgiAgICAgICAgICAgIOKUglxuICAgKiDilIzilIDilIDilrzilIDilIDilIDilIDilIDilIDilIDilIDilJAgICDilIJcbiAgICog4pSCICBBY3Rpb25zICDilIIgICDilIJcbiAgICog4pSU4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAg4pSCXG4gICAqICAgIOKUgiAgICAgICAgICAgIOKUglxuICAgKiDilIzilIDilIDilrzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilJBcbiAgICog4pSCICBTdGF0ZSByZWR1Y2VyICDilIJcbiAgICog4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gICAqXG4gICAqIEZyb20gdGhlIGNvcmUgc3RhdGUsIGNhbGN1bGF0ZWQgc3RhdGUgaXMgZGVyaXZlZCBhbmQgYWRkZWQgdG8gdGhlIGNvcmVcbiAgICogc3RhdGUgKGUuZy4sIGZyb20gdGhlIHJhdyBzZWxlY3Rpb24gc3RhdGUgd2UgY2FuIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdFxuICAgKiBhbGwgdGhlIHJvd3Mgb24gdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgcGFnZSBhcmUgc2VsZWN0ZWQsIGV0Yy4pLlxuICAgKi9cblxuICAvLy8vLy8vLy8vL1xuICAvLyBRdWVyeSAvL1xuICAvLy8vLy8vLy8vL1xuXG4gIC8vIFF1ZXJ5IHN0YXRlIC8vXG5cbiAgZXhwb3J0IHR5cGUgT3JkZXJEaXJlY3Rpb24gPSAnYXNjJyB8ICdkZXNjJztcbiAgZXhwb3J0IGNvbnN0IHBhZ2VTaXplcyA9IFsyNSwgNTAsIDEwMCwgMjUwXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgUXVlcnk8QyBleHRlbmRzIENvbHVtbiwgRiBleHRlbmRzIEZpbHRlcnM+ID0ge1xuICAgIG9yZGVyOiB7XG4gICAgICBkaXJlY3Rpb246IE9yZGVyRGlyZWN0aW9uO1xuICAgICAgY29sdW1uOiBDO1xuICAgIH0gfCBudWxsO1xuICAgIHNlYXJjaDogc3RyaW5nO1xuICAgIHNlYXJjaENvbHVtbnM6IE1hcDxDLCBib29sZWFuPjtcbiAgICBmaWx0ZXJzOiBGIHwgbnVsbDtcbiAgICBwYWdpbmF0aW9uOiB7XG4gICAgICBwYWdlOiBudW1iZXI7XG4gICAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIH07XG4gICAgZ3JvdXBpbmc6IHtcbiAgICAgIHZpZXdNb3JlS2V5OiBzdHJpbmcgfCBudWxsO1xuICAgICAgZ3JvdXBzUGVyUGFnZTogbnVtYmVyO1xuICAgICAgY291bnRQZXJHcm91cDogbnVtYmVyO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUXVlcnkgYWN0aW9ucyAvL1xuXG4gIGV4cG9ydCB0eXBlIFF1ZXJ5QWN0aW9uPEMgZXh0ZW5kcyBDb2x1bW4sIEYgZXh0ZW5kcyBGaWx0ZXJzPiA9XG4gICAgfCB7IHR5cGU6ICdsb2FkJyB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdvcmRlckNoYW5nZSc7XG4gICAgICAgIHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydvcmRlciddO1xuICAgICAgICBzb3VyY2U/OiAnaGVhZGVyTWVudSc7XG4gICAgICB9XG4gICAgfCB7IHR5cGU6ICdvcmRlckNvbHVtblRvZ2dsZSc7IGNvbHVtbjogQyB9XG4gICAgfCB7IHR5cGU6ICdzZWFyY2hDaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnc2VhcmNoJ10gfVxuICAgIHwgeyB0eXBlOiAnc2VhcmNoQ29sdW1uc0NoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydzZWFyY2hDb2x1bW5zJ10gfVxuICAgIHwgeyB0eXBlOiAnZmlsdGVyc0NoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydmaWx0ZXJzJ10gfVxuICAgIHwgeyB0eXBlOiAnZmlsdGVyQWRkJzsgY29sdW1uS2V5OiBzdHJpbmcgfVxuICAgIHwgeyB0eXBlOiAncGFnaW5hdGlvbkNoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydwYWdpbmF0aW9uJ10gfVxuICAgIHwgeyB0eXBlOiAnZ3JvdXBpbmdDaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnZ3JvdXBpbmcnXSB9XG4gICAgfCB7IHR5cGU6ICduZXh0UGFnZU5hdmlnYXRlJyB9XG4gICAgfCB7IHR5cGU6ICdwcmV2aW91c1BhZ2VOYXZpZ2F0ZScgfVxuICAgIHwgeyB0eXBlOiAncGFnZUNoYW5nZSc7IHBhZ2U6IG51bWJlciB9XG4gICAgfCB7IHR5cGU6ICdwYWdlU2l6ZUNoYW5nZSc7IHNpemU6IG51bWJlciB9XG4gICAgfCB7IHR5cGU6ICdncm91cHNQZXJQYWdlQ2hhbmdlJzsgZ3JvdXBzUGVyUGFnZTogbnVtYmVyIH1cbiAgICB8IHsgdHlwZTogJ2NvdW50UGVyR3JvdXBDaGFuZ2UnOyBjb3VudFBlckdyb3VwOiBudW1iZXIgfVxuICAgIHwgeyB0eXBlOiAndmlld01vcmVLZXlDaGFuZ2UnOyB2aWV3TW9yZUtleTogc3RyaW5nIH1cbiAgICB8IHsgdHlwZTogJ3RvZ2dsZUFsbFNlYXJjaENvbHVtbnMnIH07XG5cbiAgLy8vLy8vLy8vL1xuICAvLyBMb2FkIC8vXG4gIC8vLy8vLy8vLy9cblxuICBleHBvcnQgdHlwZSBMb2FkID0ge1xuICAgIGxvYWRpbmc6IGJvb2xlYW47XG4gICAgZXJyb3I6IHVua25vd24gfCBudWxsO1xuICB9O1xuXG4gIC8vLy8vLy8vLy8vL1xuICAvLyBSZXN1bHQgLy9cbiAgLy8vLy8vLy8vLy8vXG5cbiAgZXhwb3J0IHR5cGUgUmVzdWx0PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBmdWxsIHJvdyBkYXRhIGZvciB0aGUgY3VycmVudCBwYWdlLCBhZnRlciBmaWx0ZXJzLCBzZWFyY2ggcXVlcnksIGFuZFxuICAgICAqIHJvdyBvcmRlcmluZyBhcmUgYXBwbGllZC5cbiAgICAgKi9cbiAgICBjdXJyZW50UGFnZURhdGE6IFJbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgKHJlZ2FyZGxlc3Mgb2YgcGFnaW5hdGlvbikgdGhhdCBtYXRjaCB0aGVcbiAgICAgKiBmaWx0ZXJzIGFuZCBzZWFyY2ggcXVlcnkuXG4gICAgICovXG4gICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBudW1iZXI7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgU3ViR3JvdXBSZXN1bHQ8UiBleHRlbmRzIFJvdywgRyBleHRlbmRzIEdyb3VwPiA9IFJlc3VsdDxSPiAmIHtcbiAgICAvKipcbiAgICAgKiBBbnkgb3RoZXIgcmVsZXZhbnQgZ3JvdXAgZGF0YSwgdXNlZCBmb3IgdGhlIHN1YmhlYWRlclxuICAgICAqL1xuICAgIGdyb3VwRGF0YTogRztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBHcm91cFJlc3VsdDxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXA+ID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBmdWxsIHJvdyBkYXRhIGZvciB0aGUgY3VycmVudCBwYWdlLCBhZnRlciBmaWx0ZXJzLCBzZWFyY2ggcXVlcnksIGFuZFxuICAgICAqIHJvdyBvcmRlcmluZyBhcmUgYXBwbGllZCwgc3BsaXQgaW50byBncm91cHNcbiAgICAgKi9cbiAgICBncm91cFJlc3VsdHM6IFN1Ykdyb3VwUmVzdWx0PFIsIEc+W107XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBncm91cHMgKHJlZ2FyZGxlc3Mgb2YgcGFnaW5hdGlvbikgdGhhdCBtYXRjaCB0aGVcbiAgICAgKiBmaWx0ZXJzIGFuZCBzZWFyY2ggcXVlcnkuXG4gICAgICovXG4gICAgdG90YWxHcm91cENvdW50OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiByb3dzIChyZWdhcmRsZXNzIG9mIHBhZ2luYXRpb24pIHRoYXQgbWF0Y2ggdGhlXG4gICAgICogZmlsdGVycyBhbmQgc2VhcmNoIHF1ZXJ5LlxuICAgICAqL1xuICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyO1xuICB9O1xuXG4gIC8qXG4gICAgTmVzdGVkUmVzdWx0XG4gICAgICBOZXN0ZWRIZWFkZXJSb3dcbiAgICAgICAgTmVzdGVkUm93IC0gd2l0aCBzdWJyb3dzXG4gICAgICAgICAgTmVzdGVkUm93IC0gd2l0aCBubyBzdWJyb3dzXG4gICovXG4gIGV4cG9ydCB0eXBlIE5lc3RlZEhlYWRlclJvdzxSIGV4dGVuZHMgUm93PiA9IHtcbiAgICAvLyBUaGUgcm93cyB0aGF0IHNob3VsZCBiZSBoaWRkZW4gd2hlbiB0aGUgdG9nZ2xlIG9uIHRoaXMgaGVhZGVyIGlzIHRvZ2dsZWQuXG4gICAgc3ViUm93czogTmVzdGVkUm93PFI+W107XG5cbiAgICAvLyBUaGUgdGV4dCB0byBzaG93IG5leHQgdG8gdGhlIHRvZ2dsZWFibGUgY2hldnJvbiwgb3IgbnVsbCBpZiB3ZSBkb24ndCBzaG93IHRoZSBoZWFkZXJcbiAgICBoZWFkZXJUZXh0OiBzdHJpbmcgfCBudWxsO1xuICB9O1xuICBleHBvcnQgdHlwZSBOZXN0ZWRSb3c8UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgLy8gVGhlIHJvd3MgdGhhdCBzaG91bGQgYmUgaGlkZGVuIHdoZW4gdGhlIHRvZ2dsZSBvbiB0aGlzIHJvdyBpcyB0b2dnbGVkLlxuICAgIHN1YlJvd3M/OiBOZXN0ZWRSb3c8Uj5bXTtcblxuICAgIC8vIFRoZSByZWxldmFudCBkYXRhIHVzZWQgdG8gZGlzcGxheSB0aGlzIHJvdy5cbiAgICBkYXRhOiBSO1xuICB9O1xuICAvKlxuICAgIE5lc3RlZCBoZWFkZXIgcm93cyBhcmUgdG9nZ2xlYWJsZSBoZWFkZXJzIGZvciBncm91cHMgb2Ygcm93cy5cbiAgKi9cbiAgZXhwb3J0IHR5cGUgTmVzdGVkUmVzdWx0PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBmdWxsIHJvdyBkYXRhIGZvciB0aGUgY3VycmVudCBwYWdlLCBhZnRlciBmaWx0ZXJzLCBzZWFyY2ggcXVlcnksIGFuZFxuICAgICAqIHJvdyBvcmRlcmluZyBhcmUgYXBwbGllZCwgbmVzdGVkIGludG8gXCJoZWFkZXJzIHdpdGggc3Vicm93c1wiLlxuICAgICAqL1xuICAgIGN1cnJlbnRQYWdlTmVzdGVkSGVhZGVyczogTmVzdGVkSGVhZGVyUm93PFI+W107XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiByb3dzIChyZWdhcmRsZXNzIG9mIHBhZ2luYXRpb24pIHRoYXQgbWF0Y2ggdGhlXG4gICAgICogZmlsdGVycyBhbmQgc2VhcmNoIHF1ZXJ5LlxuICAgICAqXG4gICAgICogT25seSBjb3VudHMgcm93cyBhdCB0aGUgYm90dG9tIGxldmVsIG9mIG5lc3RpbmcuXG4gICAgICovXG4gICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBudW1iZXI7XG5cbiAgICAvKlxuICAgICAgVGhpcyB0eXBlIGFsc28gc3VwcG9ydHMgbmVzdGVkIHJvd3Mgd2l0aG91dCBoZWFkZXIgcm93cywgc28gdGhpcyBwcm9wZXJ0eVxuICAgICAgaGVscHMgdXMgdGVsbCB3aGV0aGVyIHRvIHNob3cgdGhlIGhlYWRlcnMuXG4gICAgKi9cbiAgICBoYXNIZWFkZXJzOiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFNvdXJjZTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSAoXG4gICAgcXVlcnk6IFF1ZXJ5PEMsIEY+LFxuICAgIG1vc3RSZWNlbnRBY3Rpb246IEFjdGlvbjxSLCBDLCBGLCBHPixcbiAgKSA9PiBQcm9taXNlPFJlc3VsdDxSPiB8IEdyb3VwUmVzdWx0PFIsIEc+IHwgTmVzdGVkUmVzdWx0PFI+PjtcblxuICAvLy8vLy8vLy8vLy8vXG4gIC8vIERpc3BsYXkgLy9cbiAgLy8vLy8vLy8vLy8vL1xuXG4gIC8vIERpc3BsYXkgc3RhdGUgLy9cblxuICBleHBvcnQgdHlwZSBDb2x1bW5TZXR0aW5nczxDIGV4dGVuZHMgQ29sdW1uPiA9IHtcbiAgICBrZXk6IEM7XG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICBwcmVmZXJyZWRXaWR0aDogbnVtYmVyIHwgJ2F1dG8nO1xuICAgIHBpbm5lZDogYm9vbGVhbjtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgRGlzcGxheTxDIGV4dGVuZHMgQ29sdW1uPiA9IHtcbiAgICBjb2x1bW5TZXR0aW5nczogQ29sdW1uU2V0dGluZ3M8Qz5bXTtcbiAgICBjZWxsUm93U3BhbjogKHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbjogQykgPT4gbnVtYmVyO1xuICB9O1xuXG4gIC8vIERpc3BsYXkgYWN0aW9ucyAvL1xuXG4gIGV4cG9ydCB0eXBlIERpc3BsYXlBY3Rpb248QyBleHRlbmRzIENvbHVtbj4gPVxuICAgIHwgeyB0eXBlOiAnY29sdW1uU2V0dGluZ3NDaGFuZ2UnOyBwYXlsb2FkOiBEaXNwbGF5PEM+Wydjb2x1bW5TZXR0aW5ncyddIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtblBpbkNoYW5nZSc7XG4gICAgICAgIGNvbHVtbjogQztcbiAgICAgICAgcGlubmVkOiBib29sZWFuO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uc0ZyZWV6ZVVwVG9DaGFuZ2UnO1xuICAgICAgICBpbmRleDogbnVtYmVyO1xuICAgICAgICBmcmVlemU6IGJvb2xlYW47XG4gICAgICAgIHNvdXJjZT86ICdoZWFkZXJNZW51JyB8ICdvcHRpb25zTWVudScgfCAnZnJlZXplRGl2aWRlcic7XG4gICAgICAgIGNvbHVtbj86IEM7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5PcmRlckNoYW5nZSc7XG4gICAgICAgIHByZXZpb3VzSW5kZXg6IG51bWJlcjtcbiAgICAgICAgbmV3SW5kZXg6IG51bWJlcjtcbiAgICAgICAgc291cmNlPzogJ3RhYmxlRHJhZycgfCAnbWVudURyYWcnO1xuICAgICAgICBjb2x1bW4/OiBDO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uTW92ZVRvQ2hhbmdlJztcbiAgICAgICAgY29sdW1uOiBDO1xuICAgICAgICBwb3NpdGlvbjogJ3N0YXJ0JyB8ICdlbmQnO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uRW5hYmxlZENoYW5nZSc7XG4gICAgICAgIGNvbHVtbjogQztcbiAgICAgICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICAgICAgc291cmNlPzogJ2hlYWRlck1lbnUnIHwgJ29wdGlvbnNNZW51JyB8ICdkcmFnRHJvcCcgfCAnZXllSWNvbic7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdlbmFibGVBbGxDb2x1bW5zQ2hhbmdlJztcbiAgICAgICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbldpZHRoQ2hhbmdlJztcbiAgICAgICAgY29sdW1uOiBDO1xuICAgICAgICBwcmVmZXJyZWRXaWR0aDogbnVtYmVyIHwgJ2F1dG8nO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAncmVzZXRUb0RlZmF1bHRDb2x1bW5zJztcbiAgICAgIH07XG5cbiAgLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFNlbGVjdGlvbiAvL1xuICAvLy8vLy8vLy8vLy8vLy9cblxuICAvLyBTZWxlY3Rpb24gc3RhdGUgLy9cblxuICBleHBvcnQgdHlwZSBTZWxlY3Rpb248UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IFJbJ2lkJ10gfCBudWxsO1xuICB9ICYgKFxuICAgIHwge1xuICAgICAgICBtb2RlOiAnaW5jbHVkZSc7XG4gICAgICAgIGluY2x1ZGVkOiBTZXQ8UlsnaWQnXT47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIG1vZGU6ICdleGNsdWRlJztcbiAgICAgICAgZXhjbHVkZWQ6IFNldDxSWydpZCddPjtcbiAgICAgIH1cbiAgKTtcblxuICAvLyBTZWxlY3Rpb24gYWN0aW9ucyAvL1xuXG4gIGV4cG9ydCB0eXBlIFNlbGVjdGlvbkFjdGlvbjxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfT4gPVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnc2VsZWN0aW9uQ2hhbmdlJztcbiAgICAgICAgcGF5bG9hZDogU2VsZWN0aW9uPFI+O1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnZ3JvdXBTZWxlY3Rpb25DaGFuZ2UnO1xuICAgICAgICBwYXlsb2FkOiBSb3dHcm91cDxSLCBHPjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3Jvd1NlbGVjdGVkQ2hhbmdlJztcbiAgICAgICAgaWQ6IFJbJ2lkJ107XG4gICAgICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICAgICAgICBjb250aWd1b3VzOiBib29sZWFuO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAncGFnZVNlbGVjdGVkQ2hhbmdlJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2FsbFNlbGVjdGVkQ2hhbmdlJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3NlbGVjdGlvbkNsZWFyJztcbiAgICAgIH07XG5cbiAgZXhwb3J0IHR5cGUgQ29sbGFwc2VTdGF0ZTxSIGV4dGVuZHMgUm93PiA9XG4gICAgfCB7XG4gICAgICAgIGRlZmF1bHRUbzogJ2NvbGxhcHNlZCc7XG4gICAgICAgIGV4cGFuZGVkUm93czogU2V0PFJbJ2lkJ10+O1xuICAgICAgICBleHBhbmRlZEhlYWRlcnM6IFNldDxzdHJpbmc+O1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICBkZWZhdWx0VG86ICdleHBhbmRlZCc7XG4gICAgICAgIGNvbGxhcHNlZFJvd3M6IFNldDxSWydpZCddPjtcbiAgICAgICAgY29sbGFwc2VkSGVhZGVyczogU2V0PHN0cmluZz47XG4gICAgICB9O1xuXG4gIGV4cG9ydCB0eXBlIENvbGxhcHNlQWN0aW9uPFIgZXh0ZW5kcyBSb3c+ID1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3RvZ2dsZVJvd0NvbGxhcHNlJztcbiAgICAgICAgaWQ6IFJbJ2lkJ107XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICd0b2dnbGVIZWFkZXJDb2xsYXBzZSc7XG4gICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICd0b2dnbGVBbGxDb2xsYXBzZWQnO1xuICAgICAgfTtcblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBQdXR0aW5nIGl0IGFsbCB0b2dldGhlciAvL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIC8vIENvbWJpbmVkIHN0YXRlIC8vXG5cbiAgZXhwb3J0IHR5cGUgQ29yZVN0YXRlPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IHtcbiAgICBxdWVyeTogUXVlcnk8QywgRj47XG4gICAgbG9hZDogTG9hZDtcbiAgICByZXN1bHQ6IFJlc3VsdDxSPiB8IEdyb3VwUmVzdWx0PFIsIEc+IHwgTmVzdGVkUmVzdWx0PFI+O1xuICAgIGRpc3BsYXk6IERpc3BsYXk8Qz47XG4gICAgc2VsZWN0aW9uOiBTZWxlY3Rpb248Uj47XG4gICAgY29sbGFwc2VTdGF0ZTogQ29sbGFwc2VTdGF0ZTxSPjtcbiAgfTtcblxuICAvLyBDb21iaW5lZCBhY3Rpb25zIC8vXG5cbiAgZXhwb3J0IHR5cGUgQWN0aW9uPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9XG4gICAgfCBRdWVyeUFjdGlvbjxDLCBGPlxuICAgIHwgRGlzcGxheUFjdGlvbjxDPlxuICAgIHwgU2VsZWN0aW9uQWN0aW9uPFIsIEc+XG4gICAgfCBDb2xsYXBzZUFjdGlvbjxSPjtcblxuICBleHBvcnQgdHlwZSBFZmZlY3QgPSAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJztcblxuICAvLyBGdWxsIHN0YXRlIChjb3JlIHN0YXRlIHBsdXMgcHVyZSBkZXJpdmF0aW9ucykgLy9cbiAgZXhwb3J0IGNvbnN0IENvbHVtbnNNYXhTaG93bjogbnVtYmVyID0gNTA7XG4gIGV4cG9ydCBjb25zdCBDb2x1bW5EYXRhVHlwZXMgPSBbXG4gICAgJ2FkdmFuY2VkJyxcbiAgICAnY3VycmVuY3knLFxuICAgICdkYXRlJyxcbiAgICAnaWNvbicsXG4gICAgJ2xvbmdUZXh0JyxcbiAgICAnbnVtYmVyJyxcbiAgICAnc2hvcnRUZXh0JyxcbiAgXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uRGF0YVR5cGUgPSAodHlwZW9mIENvbHVtbkRhdGFUeXBlcylbbnVtYmVyXTtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uQWxpZ25tZW50ID0gJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xuICBleHBvcnQgdHlwZSBDb2x1bW5NZXRhZGF0YSA9IHtcbiAgICBvcmRlcmFibGU6IGJvb2xlYW47XG4gICAgZmlsdGVyYWJsZT86IGJvb2xlYW47XG4gICAgc2VhcmNoYWJsZT86IGJvb2xlYW47XG4gICAgbWluV2lkdGg6IG51bWJlcjtcbiAgICBkYXRhVHlwZTogQ29sdW1uRGF0YVR5cGU7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgZGVmYXVsdFBpbm5lZD86IGJvb2xlYW47XG4gICAgY2xpY2tQcmV2ZW50RGVmYXVsdD86IGJvb2xlYW47XG4gICAgY2xpY2tTdG9wUHJvcGFnYXRpb24/OiBib29sZWFuO1xuICAgIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICB9O1xuICBleHBvcnQgdHlwZSBFeHRlcm5hbFJvd0xpbmsgPSB7XG4gICAgdHlwZTogJ2V4dGVybmFsJztcbiAgICBocmVmOiBzdHJpbmc7XG4gIH07XG4gIGV4cG9ydCB0eXBlIEludGVybmFsUm93TGluayA9IHtcbiAgICB0eXBlOiAnaW50ZXJuYWwnO1xuICAgIHJvdXRlckxpbms6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1zO1xuICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc/OiBRdWVyeVBhcmFtc0hhbmRsaW5nO1xuICAgIGFjdGl2ZT86IGJvb2xlYW47XG4gIH07XG4gIGV4cG9ydCB0eXBlIFJvd0xpbmsgPSBFeHRlcm5hbFJvd0xpbmsgfCBJbnRlcm5hbFJvd0xpbms7XG4gIGV4cG9ydCB0eXBlIEZ1bGxSb3c8UiBleHRlbmRzIFJvdz4gPSBSICYge1xuICAgIHJvd0xpbms6IFJvd0xpbmsgfCBudWxsO1xuICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICAgIGlzQ29sbGFwc2VkOiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFJvd0dyb3VwPFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cD4gPSB7XG4gICAgcm93czogRnVsbFJvdzxSPltdO1xuICAgIHNlbGVjdGVkOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyO1xuICAgIGdyb3VwRGF0YTogRztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsTmVzdGVkUm93PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIGlkOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgc3ViUm93cz86IEZ1bGxOZXN0ZWRSb3c8Uj5bXTtcbiAgICBkYXRhOiBSO1xuICAgIHJvd0xpbms6IFJvd0xpbmsgfCBudWxsO1xuICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICAgIGlzQ29sbGFwc2VkOiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEZ1bGxOZXN0ZWRIZWFkZXJSb3c8UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcjtcbiAgICBzdWJSb3dzOiBGdWxsTmVzdGVkUm93PFI+W107XG4gICAgaGVhZGVyVGV4dDogc3RyaW5nIHwgbnVsbDtcbiAgICBpc0NvbGxhcHNlZDogYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsQ29sdW1uPEMgZXh0ZW5kcyBDb2x1bW4+ID0gQ29sdW1uU2V0dGluZ3M8Qz4gJlxuICAgIENvbHVtbk1ldGFkYXRhICYge1xuICAgICAgd2lkdGg6IG51bWJlcjtcbiAgICAgIGxlZnQ6IG51bWJlciB8IG51bGw7XG4gICAgICBhbGlnbm1lbnQ6IENvbHVtbkFsaWdubWVudDtcbiAgICB9O1xuICBleHBvcnQgdHlwZSBNdWx0aVNlbGVjdGlvblN0YXRlID0gYm9vbGVhbiB8ICdpbmRldGVybWluYXRlJztcbiAgZXhwb3J0IHR5cGUgU2VsZWN0aW9uQ29uZmlndXJhdGlvbiA9IGJvb2xlYW4gfCAnaW5kaXZpZHVhbCc7XG5cbiAgZXhwb3J0IHR5cGUgUm93U3BhbkdldHRlcjxDIGV4dGVuZHMgQ29sdW1uPiA9IChcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbHVtbjogQyxcbiAgKSA9PiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4gIGV4cG9ydCB0eXBlIFZhbGlkUm93U3BhbkdldHRlcjxDIGV4dGVuZHMgQ29sdW1uPiA9IChcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbHVtbjogQyxcbiAgKSA9PiBudW1iZXI7XG5cbiAgZXhwb3J0IHR5cGUgQ3N2Q2VsbEZvcm1hdHRlcjxSIGV4dGVuZHMgUm93LCBDIGV4dGVuZHMgQ29sdW1uPiA9IChcbiAgICByb3c6IFIsXG4gICAgY29sdW1uOiBGdWxsQ29sdW1uPEM+LFxuICApID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcbiAgZXhwb3J0IHR5cGUgQ3N2R3JvdXBDZWxsRm9ybWF0dGVyPFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cD4gPSAoXG4gICAgcm93OiBSLFxuICAgIGdyb3VwOiBHLFxuICApID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcbiAgZXhwb3J0IHR5cGUgQ3N2Um93ID0gc3RyaW5nW107XG4gIGV4cG9ydCB0eXBlIENzdiA9IENzdlJvd1tdO1xuICBleHBvcnQgdHlwZSBDc3ZNb2RlID0gJ2Z1bGwnIHwgJ3NlbGVjdGlvbic7XG4gIGV4cG9ydCB0eXBlIENzdk91dHB1dCA9XG4gICAgfCB7IGxvYWRpbmc6IHRydWU7IGRhdGE6IG51bGwgfVxuICAgIHwgeyBsb2FkaW5nOiBmYWxzZTsgZGF0YTogQ3N2IH07XG5cbiAgZXhwb3J0IHR5cGUgQ29sdW1uTmFtZU1hcDxDIGV4dGVuZHMgQ29sdW1uPiA9IE1hcDxDLCBDIHwgc3RyaW5nPjtcblxuICBleHBvcnQgdHlwZSBTZWFyY2hhYmxlQ29sdW1uTWFwPEMgZXh0ZW5kcyBDb2x1bW4+ID0gTWFwPEMsIGJvb2xlYW4+O1xuXG4gIGV4cG9ydCB0eXBlIEZ1bGxTdGF0ZTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSBDb3JlU3RhdGU8UiwgQywgRiwgRz4gJiB7XG4gICAgcXVlcnk6IHtcbiAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgcHJldmlvdXM6IG51bWJlciB8IG51bGw7XG4gICAgICAgIHBhZ2VzOiBudW1iZXJbXTtcbiAgICAgICAgbmV4dDogbnVtYmVyIHwgbnVsbDtcbiAgICAgICAgcGFnZUNvdW50OiBudW1iZXI7XG4gICAgICAgIHNob3dDb250cm9sczogYm9vbGVhbjtcbiAgICAgICAgcGFnZVJvd1N0YXJ0OiBudW1iZXI7XG4gICAgICAgIHBhZ2VSb3dFbmQ6IG51bWJlcjtcbiAgICAgIH07XG4gICAgICBub1NlYXJjaENvbHVtbnNTZWxlY3RlZDogYm9vbGVhbjtcbiAgICB9O1xuICAgIHJlc3VsdDpcbiAgICAgIHwge1xuICAgICAgICAgIHJvd3M6IEZ1bGxSb3c8Uj5bXTtcbiAgICAgICAgICByb3dzQXNHcm91cDogUm93R3JvdXA8UiwgRz47XG4gICAgICAgICAgaXNHcm91cGVkOiBmYWxzZTtcbiAgICAgICAgICByZXN1bHRUeXBlOiAnbm9ybWFsLXJvd3MnO1xuICAgICAgICAgIGNzdkRhdGE6IChtb2RlPzogQ3N2TW9kZSkgPT4gQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PjtcbiAgICAgICAgICBjc3ZGaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICByb3dzOiBGdWxsUm93PFI+W107XG4gICAgICAgICAgcm93R3JvdXBzOiBSb3dHcm91cDxSLCBHPltdO1xuICAgICAgICAgIGlzR3JvdXBlZDogdHJ1ZTtcbiAgICAgICAgICByZXN1bHRUeXBlOiAndGFibGUtZ3JvdXBpbmcnO1xuICAgICAgICAgIGNzdkRhdGE6IChtb2RlPzogQ3N2TW9kZSkgPT4gQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PjtcbiAgICAgICAgICBjc3ZGaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICByb3dzOiBGdWxsUm93PFI+W107XG4gICAgICAgICAgbmVzdGVkSGVhZGVyUm93czogRnVsbE5lc3RlZEhlYWRlclJvdzxSPltdO1xuICAgICAgICAgIGlzR3JvdXBlZDogZmFsc2U7XG4gICAgICAgICAgcmVzdWx0VHlwZTogJ25lc3RlZC1yb3dzJztcbiAgICAgICAgICBjc3ZEYXRhOiAobW9kZT86IENzdk1vZGUpID0+IEFzeW5jR2VuZXJhdG9yPENzdk91dHB1dD47XG4gICAgICAgICAgY3N2RmlsZW5hbWU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICBkaXNwbGF5OiB7XG4gICAgICBjb2x1bW5zOiBGdWxsQ29sdW1uPEM+W107XG4gICAgICBhbGxDb2x1bW5zOiBDb2x1bW5TZXR0aW5nczxDPltdO1xuICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogU2VhcmNoYWJsZUNvbHVtbk1hcDxDPjtcbiAgICAgIGNvbHVtbk5hbWVNYXA6IENvbHVtbk5hbWVNYXA8Qz47XG4gICAgICB6ZXJvU3RhdGVNZXNzYWdlOiBzdHJpbmcgfCBudWxsO1xuICAgICAgY29sdW1uc0FyZUZyZWV6YWJsZTogYm9vbGVhbjtcbiAgICAgIGNvbHVtbnNBcmVIaWRlYWJsZTogYm9vbGVhbjtcbiAgICAgIGNvbHVtbnNBcmVSZW9yZGVyYWJsZTogYm9vbGVhbjtcbiAgICAgIHJvd3NBcmVHcmF5ZWQ6IGJvb2xlYW47XG4gICAgICBjdXN0b21TdW1tYXJ5Um93OiBib29sZWFuO1xuICAgICAgY3N2RXhwb3J0QWxsb3dlZDogYm9vbGVhbjtcbiAgICAgIGVuYWJsZWRDb3VudDogbnVtYmVyO1xuICAgICAgaGlkZVBhZ2VTaXplU2VsZWN0b3I6IGJvb2xlYW47XG4gICAgICBuZWVkc1JpZ2h0Qm9yZGVyOiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uOiBDKSA9PiBib29sZWFuO1xuICAgIH07XG4gICAgc2VsZWN0aW9uOiB7XG4gICAgICBhbGxvd1NlbGVjdGlvbjogU2VsZWN0aW9uQ29uZmlndXJhdGlvbjtcbiAgICAgIGlzQWxsU2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgICBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgICBzZWxlY3RlZENvdW50OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogVGhlIG1hbmFnZXIgaXMgd2hhdCBzZXRzIHVwIHRoZSBpbml0aWFsIHN0YXRlIGFuZCB0cmFuc2xhdGVzIHVzZXIgYWN0aW9uc1xuICAgKiAobGlrZSBwYWdpbmF0aW9uIG9yIGZpbHRlciBjaGFuZ2VzLCBldGMuKSBpbnRvIG5ldyByb3cgZGF0YSBieSBjYWxsaW5nIHRoZVxuICAgKiByZWR1Y2VyIGZ1bmN0aW9uLiBJdCBhbHNvIGF1Z21lbnRzIHRoZSBjb3JlIHN0YXRlIHdpdGggYWRkaXRpb25hbCBkZXJpdmVkXG4gICAqIHN0YXRlLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IHtcbiAgICBhY3Rpb25zOiBTdWJqZWN0PEFjdGlvbjxSLCBDLCBGLCBHPj47XG4gICAgc3RhdGU6IENvbm5lY3RhYmxlPEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPj47XG4gICAgZWZmZWN0czogQ29ubmVjdGFibGU8RWZmZWN0PjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyT3B0aW9uczxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSB7XG4gICAgaW5pdGlhbFN0YXRlPzogRGVlcFBhcnRpYWw8Q29yZVN0YXRlPFIsIEMsIEYsIEc+PjtcbiAgICByb3dMaW5rPzogKHJvdzogUiwgZ3JvdXA/OiBHKSA9PiBSb3dMaW5rO1xuICAgIGNzdkNlbGxGb3JtYXR0ZXI/OiBDc3ZDZWxsRm9ybWF0dGVyPFIsIEM+O1xuICAgIGNzdkdyb3VwQ2VsbEZvcm1hdHRlcj86IENzdkdyb3VwQ2VsbEZvcm1hdHRlcjxSLCBHPjtcbiAgICBjc3ZGaWxlQmFzZW5hbWU/OiBzdHJpbmc7XG4gICAgYWxsb3dTZWxlY3Rpb24/OiBTZWxlY3Rpb25Db25maWd1cmF0aW9uO1xuICAgIGNvbHVtbnNBcmVGcmVlemFibGU/OiBib29sZWFuO1xuICAgIGNvbHVtbnNBcmVIaWRlYWJsZT86IGJvb2xlYW47XG4gICAgY29sdW1uc0FyZVJlb3JkZXJhYmxlPzogYm9vbGVhbjtcbiAgICBkZWZhdWx0Q29sdW1uU3RhdGU/OiBDb2x1bW5TZXR0aW5nczxDPltdO1xuICAgIHJvd3NBcmVHcmF5ZWQ/OiBib29sZWFuO1xuICAgIGN1c3RvbVN1bW1hcnlSb3c/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZW4gdHJ1ZSwgdGhlIFwiUmVzdWx0cyBwZXIgcGFnZVwiIGxhYmVsIGFuZCBwYWdlLXNpemUgZHJvcGRvd24gYXJlXG4gICAgICogaGlkZGVuLiBQYWdlIG5hdmlnYXRpb24gYXJyb3dzIGFuZCBwYWdlIG51bWJlcnMgcmVtYWluIHZpc2libGUuXG4gICAgICovXG4gICAgaGlkZVBhZ2VTaXplU2VsZWN0b3I/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFBhcmVudC1jb250cm9sbGVkIHJvdyBzcGFubmluZy5cbiAgICAgKiBSZXR1cm4gMCB0byBzdXBwcmVzcyB0aGUgY2VsbCwgPj0xIGZvciBhIHJlYWwgcm93c3Bhbi5cbiAgICAgKiBJZiBvbWl0dGVkIG9yIGludmFsaWQsIGRlZmF1bHRzIHRvIDEuXG4gICAgICovXG4gICAgZ2V0Um93U3BhbkZvckNlbGw/OiBSb3dTcGFuR2V0dGVyPEM+O1xuICB9O1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNYW5hZ2VyPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPihcbiAgICBzb3VyY2U6IFNvdXJjZTxSLCBDLCBGLCBHPixcbiAgICBjb2x1bW5zOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+LFxuICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz4sXG4gICk6IE1hbmFnZXI8UiwgQywgRiwgRz4ge1xuICAgIC8vIFNldCB1cCB0aGUgaW5pdGlhbCB0YWJsZSBzdGF0ZS5cblxuICAgIGNvbnN0IHNlYXJjaGFibGVDb2x1bW5NYXA6IFNlYXJjaGFibGVDb2x1bW5NYXA8Qz4gPSBuZXcgTWFwPEMsIGJvb2xlYW4+KFxuICAgICAgQXJyYXkuZnJvbShjb2x1bW5zLmVudHJpZXMoKSkubWFwKChba2V5LCBtZXRhZGF0YV0pID0+IFtcbiAgICAgICAga2V5LFxuICAgICAgICBtZXRhZGF0YS5zZWFyY2hhYmxlID8/IHRydWUsXG4gICAgICBdKSxcbiAgICApO1xuICAgIGNvbnN0IGRlZmF1bHRTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+ID0ge1xuICAgICAgcXVlcnk6IHtcbiAgICAgICAgb3JkZXI6IG51bGwsXG4gICAgICAgIHNlYXJjaDogJycsXG4gICAgICAgIHNlYXJjaENvbHVtbnM6IG5ldyBNYXAoXG4gICAgICAgICAgQXJyYXkuZnJvbShjb2x1bW5zLmtleXMoKSlcbiAgICAgICAgICAgIC5maWx0ZXIoa2V5ID0+IHNlYXJjaGFibGVDb2x1bW5NYXAuZ2V0KGtleSkpXG4gICAgICAgICAgICAubWFwKGtleSA9PiBba2V5LCB0cnVlXSksXG4gICAgICAgICksXG4gICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgIHBhZ2VTaXplOiAyNSxcbiAgICAgICAgfSxcbiAgICAgICAgZ3JvdXBpbmc6IHtcbiAgICAgICAgICB2aWV3TW9yZUtleTogbnVsbCxcbiAgICAgICAgICBncm91cHNQZXJQYWdlOiA1LFxuICAgICAgICAgIGNvdW50UGVyR3JvdXA6IDEwLFxuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJzOiBudWxsLFxuICAgICAgfSxcbiAgICAgIGxvYWQ6IHsgbG9hZGluZzogZmFsc2UsIGVycm9yOiBudWxsIH0sXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgY3VycmVudFBhZ2VEYXRhOiBbXSxcbiAgICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiAwLFxuICAgICAgfSxcbiAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgY29sdW1uU2V0dGluZ3M6IFtdLFxuICAgICAgICBjZWxsUm93U3BhbjogKF9pOiBudW1iZXIsIF9jb2x1bW46IEMpID0+IDEsXG4gICAgICB9LFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICB9LFxuICAgICAgY29sbGFwc2VTdGF0ZToge1xuICAgICAgICBkZWZhdWx0VG86ICdleHBhbmRlZCcsXG4gICAgICAgIGNvbGxhcHNlZFJvd3M6IG5ldyBTZXQoKSxcbiAgICAgICAgY29sbGFwc2VkSGVhZGVyczogbmV3IFNldCgpLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGRlZmF1bHRlZEluaXRpYWxTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+ID0gZGVmYXVsdHNEZWVwKFxuICAgICAge30sXG4gICAgICBvcHRpb25zPy5pbml0aWFsU3RhdGUsXG4gICAgICBkZWZhdWx0U3RhdGUsXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbHVtbk5hbWVNYXA6IENvbHVtbk5hbWVNYXA8Qz4gPSBuZXcgTWFwPEMsIEMgfCBzdHJpbmc+KFxuICAgICAgQXJyYXkuZnJvbShjb2x1bW5zLmVudHJpZXMoKSkubWFwKChba2V5LCBtZXRhZGF0YV0pID0+IFtcbiAgICAgICAga2V5LFxuICAgICAgICB0b1NlbnRlbmNlQ2FzZShtZXRhZGF0YS5kaXNwbGF5TmFtZSA/PyBrZXkpLFxuICAgICAgXSksXG4gICAgKTtcblxuICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5TdGF0ZSA9XG4gICAgICBvcHRpb25zPy5kZWZhdWx0Q29sdW1uU3RhdGUgPz9cbiAgICAgIGRlZmF1bHRlZEluaXRpYWxTdGF0ZS5kaXNwbGF5LmNvbHVtblNldHRpbmdzO1xuXG4gICAgLy8gV2lyZSB1cCByZWR1Y2VkIHN0YXRlIGZyb20gYWN0aW9ucyBhbmQgaW5pdGlhbCBzdGF0ZS5cbiAgICBjb25zdCBhY3Rpb25zOiBTdWJqZWN0PEFjdGlvbjxSLCBDLCBGLCBHPj4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnN0IGNvcmVTdGF0ZTogT2JzZXJ2YWJsZTx7XG4gICAgICBzdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgICAgZWZmZWN0OiBFZmZlY3QgfCBudWxsO1xuICAgIH0+ID0gYWN0aW9ucy5waXBlKFxuICAgICAgbWVyZ2VTY2FuPFxuICAgICAgICBBY3Rpb248UiwgQywgRiwgRz4sXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgICAgICAgIGVmZmVjdDogRWZmZWN0IHwgbnVsbDtcbiAgICAgICAgfVxuICAgICAgPihcbiAgICAgICAgKHsgc3RhdGUgfSwgYWN0aW9uKSA9PlxuICAgICAgICAgIGZyb20oXG4gICAgICAgICAgICByZWR1Y2UoXG4gICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgZGVmYXVsdENvbHVtblN0YXRlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICB7IHN0YXRlOiBkZWZhdWx0ZWRJbml0aWFsU3RhdGUsIGVmZmVjdDogbnVsbCB9LFxuICAgICAgICAxLFxuICAgICAgKSxcbiAgICAgIHNoYXJlKHtcbiAgICAgICAgY29ubmVjdG9yOiAoKSA9PiBuZXcgUmVwbGF5U3ViamVjdCgxKSxcbiAgICAgICAgcmVzZXRPbkVycm9yOiBmYWxzZSxcbiAgICAgICAgcmVzZXRPbkNvbXBsZXRlOiBmYWxzZSxcbiAgICAgICAgcmVzZXRPblJlZkNvdW50WmVybzogZmFsc2UsXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgY29uc3QgY3N2RXhwb3J0QWxsb3dlZCA9ICEoXG4gICAgICBvcHRpb25zPy5nZXRSb3dTcGFuRm9yQ2VsbCB8fCBvcHRpb25zPy5jdXN0b21TdW1tYXJ5Um93XG4gICAgKTtcblxuICAgIC8vIEF1Z21lbnQgc3RhdGUgd2l0aCBkZXJpdmVkIHN0YXRlLCBhbmQgc3Vic2NyaWJlLlxuICAgIGNvbnN0IHN0YXRlOiBDb25uZWN0YWJsZTxGdWxsU3RhdGU8UiwgQywgRiwgRz4+ID0gY29ubmVjdGFibGUoXG4gICAgICBjb3JlU3RhdGUucGlwZShcbiAgICAgICAgbWFwKCh7IHN0YXRlOiBzIH0pOiBGdWxsU3RhdGU8UiwgQywgRiwgRz4gPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkQ29sdW1ucyA9IFRhYmxlQ29sdW1uSGVscGVycy5yZXNvbHZlQ29sdW1ucyhcbiAgICAgICAgICAgIHMsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICEhb3B0aW9ucz8uYWxsb3dTZWxlY3Rpb24sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChUYWJsZVJlc3VsdEhlbHBlcnMuaXNHcm91cFJlc3VsdChzLnJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBkZXJpdmVGdWxsU3RhdGVGcm9tR3JvdXBSZXN1bHQoe1xuICAgICAgICAgICAgICBzLFxuICAgICAgICAgICAgICBzdGF0ZVJlc3VsdDogcy5yZXN1bHQsXG4gICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgICAgICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgICAgICAgICBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChUYWJsZVJlc3VsdEhlbHBlcnMuaXNOZXN0ZWRSZXN1bHQocy5yZXN1bHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVyaXZlRnVsbFN0YXRlRnJvbU5lc3RlZFJlc3VsdCh7XG4gICAgICAgICAgICAgIHMsXG4gICAgICAgICAgICAgIHN0YXRlUmVzdWx0OiBzLnJlc3VsdCxcbiAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICAgICAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICAgICAgICAgIGNzdkV4cG9ydEFsbG93ZWQsXG4gICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGRlcml2ZUZ1bGxTdGF0ZUZyb21SZWd1bGFyUmVzdWx0KHtcbiAgICAgICAgICAgICAgcyxcbiAgICAgICAgICAgICAgc3RhdGVSZXN1bHQ6IHMucmVzdWx0LFxuICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgIHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAgIHJlc29sdmVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHNjYW4oKHN0YWJsZSwgbmV3U3RhdGUpID0+IHN0YWJsZVN0YXRlKHN0YWJsZSwgbmV3U3RhdGUpKSxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksXG4gICAgICAgIHJlc2V0T25EaXNjb25uZWN0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBzdGF0ZS5jb25uZWN0KCk7XG5cbiAgICBjb25zdCBlZmZlY3RzOiBDb25uZWN0YWJsZTxFZmZlY3Q+ID0gY29ubmVjdGFibGUoXG4gICAgICBjb3JlU3RhdGUucGlwZShcbiAgICAgICAgZmlsdGVyKCh7IGVmZmVjdCB9KSA9PiBlZmZlY3QgIT09IG51bGwpLFxuICAgICAgICBtYXAoKHsgZWZmZWN0IH0pID0+IGVmZmVjdCBhcyBFZmZlY3QpLFxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgY29ubmVjdG9yOiAoKSA9PiBuZXcgUmVwbGF5U3ViamVjdCgxKSxcbiAgICAgICAgcmVzZXRPbkRpc2Nvbm5lY3Q6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuICAgIGVmZmVjdHMuY29ubmVjdCgpO1xuXG4gICAgLy8gTG9hZCBpbml0aWFsIHRhYmxlIHJvdyBkYXRhLlxuICAgIGFjdGlvbnMubmV4dCh7IHR5cGU6ICdsb2FkJyB9KTtcblxuICAgIHJldHVybiB7IGFjdGlvbnMsIHN0YXRlLCBlZmZlY3RzIH07XG4gIH1cblxuICBmdW5jdGlvbiBkZXJpdmVGdWxsU3RhdGVGcm9tR3JvdXBSZXN1bHQ8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KHByb3BzOiB7XG4gICAgczogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgIHN0YXRlUmVzdWx0OiBHcm91cFJlc3VsdDxSLCBHPjtcbiAgICBzb3VyY2U6IFNvdXJjZTxSLCBDLCBGLCBHPjtcbiAgICBjb2x1bW5zOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+O1xuICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZztcbiAgICBjb2x1bW5OYW1lTWFwOiBDb2x1bW5OYW1lTWFwPEM+O1xuICAgIHJlc29sdmVkQ29sdW1uczogRnVsbENvbHVtbjxDPltdO1xuICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IFNlYXJjaGFibGVDb2x1bW5NYXA8Qz47XG4gICAgY3N2RXhwb3J0QWxsb3dlZDogYm9vbGVhbjtcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz47XG4gIH0pOiBGdWxsU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHMsXG4gICAgICBzdGF0ZVJlc3VsdCxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgIHJlc29sdmVkQ29sdW1ucyxcbiAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgb3B0aW9ucyxcbiAgICB9ID0gcHJvcHM7XG4gICAgaWYgKG9wdGlvbnM/LmdldFJvd1NwYW5Gb3JDZWxsKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnSGVhZHMgdXAhIEN1c3RvbSByb3cgc3BhbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGdyb3VwZWQgdGFibGVzLicsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uY3VzdG9tU3VtbWFyeVJvdykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0hlYWRzIHVwISBDdXN0b20gc3VtbWFyeSByb3dzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBncm91cGVkIHRhYmxlcy4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByb3dHcm91cHM6IFJvd0dyb3VwPFIsIEc+W10gPSBzdGF0ZVJlc3VsdC5ncm91cFJlc3VsdHMubWFwKGdyb3VwID0+ICh7XG4gICAgICByb3dzOiBncm91cC5jdXJyZW50UGFnZURhdGEubWFwKHJvdyA9PiAoe1xuICAgICAgICAuLi5yb3csXG4gICAgICAgIHJvd0xpbms6IG9wdGlvbnM/LnJvd0xpbmtcbiAgICAgICAgICA/IG9wdGlvbnMucm93TGluayhyb3csIGdyb3VwLmdyb3VwRGF0YSlcbiAgICAgICAgICA6IG51bGwsXG4gICAgICAgIHNlbGVjdGVkOiBUYWJsZVNlbGVjdGlvbkhlbHBlcnMuaXNSb3dTZWxlY3RlZChzLCByb3cuaWQpLFxuICAgICAgICBpc0NvbGxhcHNlZDogZmFsc2UsXG4gICAgICB9KSksXG4gICAgICBzZWxlY3RlZDogVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzR3JvdXBTZWxlY3RlZChzLCBncm91cCksXG4gICAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IGdyb3VwLnRvdGFsTWF0Y2hpbmdSb3dDb3VudCxcbiAgICAgIGdyb3VwRGF0YTogZ3JvdXAuZ3JvdXBEYXRhLFxuICAgIH0pKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uKiBjc3ZEYXRhKG1vZGU6IENzdk1vZGUgPSAnZnVsbCcpOiBBc3luY0dlbmVyYXRvcjxDc3ZPdXRwdXQ+IHtcbiAgICAgIGNvbnN0IGNlbGxGb3JtYXR0ZXIgPSBvcHRpb25zPy5jc3ZDZWxsRm9ybWF0dGVyO1xuICAgICAgY29uc3QgZ3JvdXBDZWxsRm9ybWF0dGVyID0gb3B0aW9ucz8uY3N2R3JvdXBDZWxsRm9ybWF0dGVyO1xuICAgICAgaWYgKCFjZWxsRm9ybWF0dGVyKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMuY3N2Q2VsbEZvcm1hdHRlciBpcyByZXF1aXJlZCBmb3IgQ1NWIGV4cG9ydCcpO1xuICAgICAgeWllbGQgeyBsb2FkaW5nOiB0cnVlLCBkYXRhOiBudWxsIH07XG4gICAgICBjb25zdCBkYXRhU2V0ID0gYXdhaXQgc291cmNlKFxuICAgICAgICB7XG4gICAgICAgICAgLi4ucy5xdWVyeSxcbiAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgcGFnZVNpemU6IHN0YXRlUmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7IHR5cGU6ICdsb2FkJyB9LFxuICAgICAgKTtcblxuICAgICAgaWYgKCFUYWJsZVJlc3VsdEhlbHBlcnMuaXNHcm91cFJlc3VsdChkYXRhU2V0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JldHVybmVkIG5vbi1ncm91cGVkIENTViBkYXRhIGZvciBncm91cGVkIHRhYmxlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGxDb2x1bW5zID0gVGFibGVDb2x1bW5IZWxwZXJzLnJlc29sdmVDb2x1bW5zKFxuICAgICAgICBzLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAhIW9wdGlvbnMuYWxsb3dTZWxlY3Rpb24sXG4gICAgICApO1xuICAgICAgY29uc3QgZGF0YTogQ3N2ID0gW107XG4gICAgICBkYXRhLnB1c2goZnVsbENvbHVtbnMubWFwKCh7IGtleSB9KSA9PiBjb2x1bW5OYW1lTWFwLmdldChrZXkpID8/IGtleSkpO1xuXG4gICAgICBpZiAoZ3JvdXBDZWxsRm9ybWF0dGVyKSB7XG4gICAgICAgIGRhdGFbMF0ucHVzaCgnJyk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qgcm93SXRlbSBvZiBkYXRhU2V0Lmdyb3VwUmVzdWx0cy5mbGF0TWFwKGdyb3VwcyA9PlxuICAgICAgICBncm91cHMuY3VycmVudFBhZ2VEYXRhLm1hcChyb3cgPT4gKHtcbiAgICAgICAgICByb3csXG4gICAgICAgICAgZ3JvdXA6IGdyb3Vwcy5ncm91cERhdGEsXG4gICAgICAgIH0pKSxcbiAgICAgICkpIHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gcm93SXRlbS5yb3c7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBtb2RlID09PSAnc2VsZWN0aW9uJyAmJlxuICAgICAgICAgICFUYWJsZVNlbGVjdGlvbkhlbHBlcnMuaXNSb3dTZWxlY3RlZChzLCByZWNvcmQuaWQpXG4gICAgICAgIClcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY29uc3Qgcm93OiBDc3ZSb3cgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgZnVsbENvbHVtbnMpIHtcbiAgICAgICAgICByb3cucHVzaChhd2FpdCBjZWxsRm9ybWF0dGVyKHJlY29yZCwgY29sdW1uKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdyb3VwQ2VsbEZvcm1hdHRlciAmJiByb3dJdGVtLmdyb3VwKSB7XG4gICAgICAgICAgcm93LnB1c2goYXdhaXQgZ3JvdXBDZWxsRm9ybWF0dGVyKHJlY29yZCwgcm93SXRlbS5ncm91cCkpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEucHVzaChyb3cpO1xuICAgICAgfVxuICAgICAgeWllbGQgeyBsb2FkaW5nOiBmYWxzZSwgZGF0YSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zLFxuICAgICAgcXVlcnk6IGRlcml2ZWRGdWxsU3RhdGVRdWVyeShzKSxcbiAgICAgIGRpc3BsYXk6IGRlcml2ZWRGdWxsU3RhdGVEaXNwbGF5KHtcbiAgICAgICAgY29yZVN0YXRlOiBzLFxuICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICBwbHVyYWxFbnRpdHlOYW1lOiBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgICBjb2x1bW5OYW1lTWFwOiBjb2x1bW5OYW1lTWFwLFxuICAgICAgICByZXNvbHZlZENvbHVtbnM6IHJlc29sdmVkQ29sdW1ucyxcbiAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgY3N2RXhwb3J0QWxsb3dlZDogY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIH0pLFxuICAgICAgc2VsZWN0aW9uOiBkZXJpdmVkRnVsbFN0YXRlU2VsZWN0aW9uKHMsIG9wdGlvbnMpLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIC4uLnN0YXRlUmVzdWx0LFxuICAgICAgICBpc0dyb3VwZWQ6IHRydWUsXG4gICAgICAgIHJlc3VsdFR5cGU6ICd0YWJsZS1ncm91cGluZycsXG4gICAgICAgIHJvd0dyb3VwcyxcbiAgICAgICAgcm93czogcm93R3JvdXBzLmZsYXRNYXAoZ3JvdXAgPT4gZ3JvdXAucm93cyksXG4gICAgICAgIGNzdkRhdGEsXG4gICAgICAgIGNzdkZpbGVuYW1lOiBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0Q3N2RmlsZW5hbWUoXG4gICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlRnVsbFN0YXRlRnJvbU5lc3RlZFJlc3VsdDxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4ocHJvcHM6IHtcbiAgICBzOiBDb3JlU3RhdGU8UiwgQywgRiwgRz47XG4gICAgc3RhdGVSZXN1bHQ6IE5lc3RlZFJlc3VsdDxSPjtcbiAgICBzb3VyY2U6IFNvdXJjZTxSLCBDLCBGLCBHPjtcbiAgICBjb2x1bW5zOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+O1xuICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZztcbiAgICBjb2x1bW5OYW1lTWFwOiBDb2x1bW5OYW1lTWFwPEM+O1xuICAgIHJlc29sdmVkQ29sdW1uczogRnVsbENvbHVtbjxDPltdO1xuICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IFNlYXJjaGFibGVDb2x1bW5NYXA8Qz47XG4gICAgY3N2RXhwb3J0QWxsb3dlZDogYm9vbGVhbjtcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz47XG4gIH0pOiBGdWxsU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHMsXG4gICAgICBzdGF0ZVJlc3VsdCxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgIHJlc29sdmVkQ29sdW1ucyxcbiAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgb3B0aW9ucyxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBpZiAob3B0aW9ucz8uZ2V0Um93U3BhbkZvckNlbGwpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdIZWFkcyB1cCEgQ3VzdG9tIHJvdyBzcGFucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgdGFibGVzIHdpdGggbmVzdGVkIGRhdGEuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5jdXN0b21TdW1tYXJ5Um93KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnSGVhZHMgdXAhIEN1c3RvbSBzdW1tYXJ5IHJvd3MgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHRhYmxlcyB3aXRoIG5lc3RlZCBkYXRhLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxOZXN0ZWRIZWFkZXJSb3dzOiBGdWxsTmVzdGVkSGVhZGVyUm93PFI+W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IG5lc3RlZFJvdyBvZiBzdGF0ZVJlc3VsdC5jdXJyZW50UGFnZU5lc3RlZEhlYWRlcnMpIHtcbiAgICAgIGNvbnN0IG5ld0Z1bGxSb3c6IEZ1bGxOZXN0ZWRIZWFkZXJSb3c8Uj4gPVxuICAgICAgICBUYWJsZU5lc3RpbmdIZWxwZXJzLmNvbnZlcnRUb0Z1bGxOZXN0ZWRIZWFkZXJSb3coXG4gICAgICAgICAgbmVzdGVkUm93LFxuICAgICAgICAgIHMsXG4gICAgICAgICAgb3B0aW9ucz8ucm93TGluayxcbiAgICAgICAgKTtcbiAgICAgIGZ1bGxOZXN0ZWRIZWFkZXJSb3dzLnB1c2gobmV3RnVsbFJvdyk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24qIGNzdkRhdGEobW9kZSA9ICdmdWxsJyk6IEFzeW5jR2VuZXJhdG9yPENzdk91dHB1dD4ge1xuICAgICAgaWYgKCFjc3ZFeHBvcnRBbGxvd2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQ1NWIGV4cG9ydCBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gcm93IHNwYW5uaW5nIG9yIGEgY3VzdG9tIHN1bW1hcnkgcm93IGlzIGVuYWJsZWQuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2VsbEZvcm1hdHRlciA9IG9wdGlvbnM/LmNzdkNlbGxGb3JtYXR0ZXI7XG4gICAgICBpZiAoIWNlbGxGb3JtYXR0ZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLmNzdkNlbGxGb3JtYXR0ZXIgaXMgcmVxdWlyZWQgZm9yIENTViBleHBvcnQnKTtcbiAgICAgIH1cbiAgICAgIHlpZWxkIHsgbG9hZGluZzogdHJ1ZSwgZGF0YTogbnVsbCB9O1xuICAgICAgY29uc3QgZGF0YVNldCA9IGF3YWl0IHNvdXJjZShcbiAgICAgICAge1xuICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBzdGF0ZVJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgeyB0eXBlOiAnbG9hZCcgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChUYWJsZVJlc3VsdEhlbHBlcnMuaXNSZWd1bGFyUmVzdWx0KGRhdGFTZXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnUmV0dXJuZWQgbm9uLW5lc3RlZCBDU1YgZGF0YSBmb3IgYSBuZXN0ZWQgd2l0aCBoZWFkZXIgcmVzdWx0IHRhYmxlJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChUYWJsZVJlc3VsdEhlbHBlcnMuaXNHcm91cFJlc3VsdChkYXRhU2V0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1JldHVybmVkIGdyb3VwZWQgQ1NWIGRhdGEgZm9yIGEgbmVzdGVkIHdpdGggaGVhZGVyIHJlc3VsdCB0YWJsZScsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGxDb2x1bW5zID0gVGFibGVDb2x1bW5IZWxwZXJzLnJlc29sdmVDb2x1bW5zKFxuICAgICAgICBzLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAhIW9wdGlvbnMuYWxsb3dTZWxlY3Rpb24sXG4gICAgICApO1xuICAgICAgY29uc3QgZGF0YTogQ3N2ID0gW107XG4gICAgICBkYXRhLnB1c2goZnVsbENvbHVtbnMubWFwKCh7IGtleSB9KSA9PiBjb2x1bW5OYW1lTWFwLmdldChrZXkpID8/IGtleSkpO1xuXG4gICAgICBjb25zdCBhbGxSb3dzOiBSW10gPSBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0QWxsUm93c0Zyb21SZXN1bHQoZGF0YVNldCk7XG5cbiAgICAgIGZvciAoY29uc3QgY3VycmVudFJvdyBvZiBhbGxSb3dzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBtb2RlID09PSAnc2VsZWN0aW9uJyAmJlxuICAgICAgICAgICFUYWJsZVNlbGVjdGlvbkhlbHBlcnMuaXNSb3dTZWxlY3RlZChzLCBjdXJyZW50Um93LmlkKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3c6IENzdlJvdyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBmdWxsQ29sdW1ucykge1xuICAgICAgICAgIHJvdy5wdXNoKGF3YWl0IGNlbGxGb3JtYXR0ZXIoY3VycmVudFJvdywgY29sdW1uKSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5wdXNoKHJvdyk7XG4gICAgICB9XG4gICAgICB5aWVsZCB7IGxvYWRpbmc6IGZhbHNlLCBkYXRhIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnMsXG4gICAgICBxdWVyeTogZGVyaXZlZEZ1bGxTdGF0ZVF1ZXJ5KHMpLFxuICAgICAgZGlzcGxheTogZGVyaXZlZEZ1bGxTdGF0ZURpc3BsYXkoe1xuICAgICAgICBjb3JlU3RhdGU6IHMsXG4gICAgICAgIGNvbHVtbnM6IGNvbHVtbnMsXG4gICAgICAgIHBsdXJhbEVudGl0eU5hbWU6IHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgIGNvbHVtbk5hbWVNYXA6IGNvbHVtbk5hbWVNYXAsXG4gICAgICAgIHJlc29sdmVkQ29sdW1uczogcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgICBjc3ZFeHBvcnRBbGxvd2VkOiBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgfSksXG4gICAgICBzZWxlY3Rpb246IGRlcml2ZWRGdWxsU3RhdGVTZWxlY3Rpb24ocywgb3B0aW9ucyksXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgLi4uc3RhdGVSZXN1bHQsXG4gICAgICAgIHJvd3M6IFtdLFxuICAgICAgICBpc0dyb3VwZWQ6IGZhbHNlLFxuICAgICAgICByZXN1bHRUeXBlOiAnbmVzdGVkLXJvd3MnLFxuICAgICAgICBuZXN0ZWRIZWFkZXJSb3dzOiBmdWxsTmVzdGVkSGVhZGVyUm93cyxcbiAgICAgICAgY3N2RGF0YSxcbiAgICAgICAgY3N2RmlsZW5hbWU6IFRhYmxlUmVzdWx0SGVscGVycy5nZXRDc3ZGaWxlbmFtZShcbiAgICAgICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBkZXJpdmVGdWxsU3RhdGVGcm9tUmVndWxhclJlc3VsdDxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4ocHJvcHM6IHtcbiAgICBzOiBDb3JlU3RhdGU8UiwgQywgRiwgRz47XG4gICAgc3RhdGVSZXN1bHQ6IFJlc3VsdDxSPjtcbiAgICBzb3VyY2U6IFNvdXJjZTxSLCBDLCBGLCBHPjtcbiAgICBjb2x1bW5zOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+O1xuICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZztcbiAgICBjb2x1bW5OYW1lTWFwOiBDb2x1bW5OYW1lTWFwPEM+O1xuICAgIHJlc29sdmVkQ29sdW1uczogRnVsbENvbHVtbjxDPltdO1xuICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IFNlYXJjaGFibGVDb2x1bW5NYXA8Qz47XG4gICAgY3N2RXhwb3J0QWxsb3dlZDogYm9vbGVhbjtcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz47XG4gIH0pOiBGdWxsU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHMsXG4gICAgICBzdGF0ZVJlc3VsdCxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgIHJlc29sdmVkQ29sdW1ucyxcbiAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgb3B0aW9ucyxcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3Qgcm93cyA9IHN0YXRlUmVzdWx0LmN1cnJlbnRQYWdlRGF0YS5tYXAocm93ID0+ICh7XG4gICAgICAuLi5yb3csXG4gICAgICByb3dMaW5rOiBvcHRpb25zPy5yb3dMaW5rID8gb3B0aW9ucy5yb3dMaW5rKHJvdykgOiBudWxsLFxuICAgICAgc2VsZWN0ZWQ6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5pc1Jvd1NlbGVjdGVkKHMsIHJvdy5pZCksXG4gICAgICBpc0NvbGxhcHNlZDogZmFsc2UsXG4gICAgfSkpO1xuXG4gICAgY29uc3QgY2VsbFJvd1NwYW5DYWNoZSA9IFRhYmxlRGlzcGxheUhlbHBlcnMubWVtb2l6ZWRDZWxsUm93U3BhbihcbiAgICAgIHMsXG4gICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICBvcHRpb25zLFxuICAgICk7XG4gICAgY29uc3QgY2VsbFJvd1NwYW46IFZhbGlkUm93U3BhbkdldHRlcjxDPiA9IChyb3dJbmRleCwgY29sdW1uKSA9PlxuICAgICAgY2VsbFJvd1NwYW5DYWNoZT8uZ2V0KGNvbHVtbik/Lltyb3dJbmRleF0gPz8gMTtcbiAgICBjb25zdCBoYXNBbnlSb3dTcGFucyA9IGNlbGxSb3dTcGFuQ2FjaGVcbiAgICAgID8gWy4uLmNlbGxSb3dTcGFuQ2FjaGUudmFsdWVzKCldLnNvbWUoc3BhbnMgPT5cbiAgICAgICAgICBzcGFucy5zb21lKHNwYW4gPT4gc3BhbiA+IDEpLFxuICAgICAgICApXG4gICAgICA6IGZhbHNlO1xuXG4gICAgY29uc3QgcmVzb2x2ZWRDb2x1bW5LZXlzID0gcmVzb2x2ZWRDb2x1bW5zLm1hcCgoeyBrZXkgfSkgPT4ga2V5KTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uKiBjc3ZEYXRhKG1vZGUgPSAnZnVsbCcpOiBBc3luY0dlbmVyYXRvcjxDc3ZPdXRwdXQ+IHtcbiAgICAgIGlmICghY3N2RXhwb3J0QWxsb3dlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0NTViBleHBvcnQgaXMgbm90IHN1cHBvcnRlZCB3aGVuIHJvdyBzcGFubmluZyBvciBhIGN1c3RvbSBzdW1tYXJ5IHJvdyBpcyBlbmFibGVkLicsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNlbGxGb3JtYXR0ZXIgPSBvcHRpb25zPy5jc3ZDZWxsRm9ybWF0dGVyO1xuICAgICAgaWYgKCFjZWxsRm9ybWF0dGVyKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMuY3N2Q2VsbEZvcm1hdHRlciBpcyByZXF1aXJlZCBmb3IgQ1NWIGV4cG9ydCcpO1xuICAgICAgeWllbGQgeyBsb2FkaW5nOiB0cnVlLCBkYXRhOiBudWxsIH07XG4gICAgICBjb25zdCBkYXRhU2V0ID0gYXdhaXQgc291cmNlKFxuICAgICAgICB7XG4gICAgICAgICAgLi4ucy5xdWVyeSxcbiAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgcGFnZVNpemU6IHN0YXRlUmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7IHR5cGU6ICdsb2FkJyB9LFxuICAgICAgKTtcblxuICAgICAgaWYgKFRhYmxlUmVzdWx0SGVscGVycy5pc0dyb3VwUmVzdWx0KGRhdGFTZXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmV0dXJuZWQgZ3JvdXBlZCBDU1YgZGF0YSBmb3Igbm9uLWdyb3VwZWQgdGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmIChUYWJsZVJlc3VsdEhlbHBlcnMuaXNOZXN0ZWRSZXN1bHQoZGF0YVNldCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXR1cm5lZCBuZXN0ZWQgQ1NWIGRhdGEgZm9yIG5vbi1uZXN0ZWQgdGFibGUnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZnVsbENvbHVtbnMgPSBUYWJsZUNvbHVtbkhlbHBlcnMucmVzb2x2ZUNvbHVtbnMoXG4gICAgICAgIHMsXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICEhb3B0aW9ucy5hbGxvd1NlbGVjdGlvbixcbiAgICAgICk7XG4gICAgICBjb25zdCBkYXRhOiBDc3YgPSBbXTtcbiAgICAgIGRhdGEucHVzaChmdWxsQ29sdW1ucy5tYXAoKHsga2V5IH0pID0+IGNvbHVtbk5hbWVNYXAuZ2V0KGtleSkgPz8ga2V5KSk7XG5cbiAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIGRhdGFTZXQuY3VycmVudFBhZ2VEYXRhKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBtb2RlID09PSAnc2VsZWN0aW9uJyAmJlxuICAgICAgICAgICFUYWJsZVNlbGVjdGlvbkhlbHBlcnMuaXNSb3dTZWxlY3RlZChzLCByZWNvcmQuaWQpXG4gICAgICAgIClcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY29uc3Qgcm93OiBDc3ZSb3cgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgZnVsbENvbHVtbnMpIHtcbiAgICAgICAgICByb3cucHVzaChhd2FpdCBjZWxsRm9ybWF0dGVyKHJlY29yZCwgY29sdW1uKSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5wdXNoKHJvdyk7XG4gICAgICB9XG4gICAgICB5aWVsZCB7IGxvYWRpbmc6IGZhbHNlLCBkYXRhIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnMsXG4gICAgICBxdWVyeTogZGVyaXZlZEZ1bGxTdGF0ZVF1ZXJ5KHMsIHtcbiAgICAgICAgb3JkZXI6IGhhc0FueVJvd1NwYW5zID8gbnVsbCA6IHMucXVlcnkub3JkZXIsXG4gICAgICB9KSxcbiAgICAgIGRpc3BsYXk6IGRlcml2ZWRGdWxsU3RhdGVEaXNwbGF5KFxuICAgICAgICB7XG4gICAgICAgICAgY29yZVN0YXRlOiBzLFxuICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnMsXG4gICAgICAgICAgcGx1cmFsRW50aXR5TmFtZTogcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwOiBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIHJlc29sdmVkQ29sdW1uczogcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICAgICAgY3N2RXhwb3J0QWxsb3dlZDogY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY29sdW1uczogcmVzb2x2ZWRDb2x1bW5zLm1hcChjb2x1bW4gPT5cbiAgICAgICAgICAgIGhhc0FueVJvd1NwYW5zID8geyAuLi5jb2x1bW4sIG9yZGVyYWJsZTogZmFsc2UgfSA6IGNvbHVtbixcbiAgICAgICAgICApLFxuICAgICAgICAgIGNlbGxSb3dTcGFuOiBjZWxsUm93U3BhbixcbiAgICAgICAgICBuZWVkc1JpZ2h0Qm9yZGVyOiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uOiBDKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBpID0gcmVzb2x2ZWRDb2x1bW5LZXlzLmZpbmRJbmRleChrZXkgPT4ga2V5ID09PSBjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGkgPCAwIHx8IGkgPT09IHJlc29sdmVkQ29sdW1uS2V5cy5sZW5ndGggLSAxKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0Q29sS2V5ID0gcmVzb2x2ZWRDb2x1bW5LZXlzW2kgKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IHNwYW5PblJpZ2h0ID0gY2VsbFJvd1NwYW4ocm93SW5kZXgsIHJpZ2h0Q29sS2V5KTtcbiAgICAgICAgICAgIHJldHVybiBzcGFuT25SaWdodCA+IDEgfHwgc3Bhbk9uUmlnaHQgPT09IDA7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgICBzZWxlY3Rpb246IGRlcml2ZWRGdWxsU3RhdGVTZWxlY3Rpb24ocywgb3B0aW9ucyksXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgLi4uc3RhdGVSZXN1bHQsXG4gICAgICAgIGlzR3JvdXBlZDogZmFsc2UsXG4gICAgICAgIHJlc3VsdFR5cGU6ICdub3JtYWwtcm93cycsXG4gICAgICAgIHJvd3MsXG4gICAgICAgIHJvd3NBc0dyb3VwOiB7XG4gICAgICAgICAgcm93cyxcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiByb3dzLmxlbmd0aCxcbiAgICAgICAgICBncm91cERhdGE6IHsga2V5OiAnJyB9IGFzIEcsXG4gICAgICAgIH0sXG4gICAgICAgIGNzdkZpbGVuYW1lOiBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0Q3N2RmlsZW5hbWUoXG4gICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApLFxuICAgICAgICBjc3ZEYXRhLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlZEZ1bGxTdGF0ZVF1ZXJ5PFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPihcbiAgICBjb3JlU3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBwYXJ0aWFsUXVlcnk6IFBhcnRpYWw8RnVsbFN0YXRlPFIsIEMsIEYsIEc+WydxdWVyeSddPiA9IHt9LFxuICApOiBGdWxsU3RhdGU8UiwgQywgRiwgRz5bJ3F1ZXJ5J10ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5jb3JlU3RhdGUucXVlcnksXG4gICAgICBwYWdpbmF0aW9uOiBkZXJpdmVkRnVsbFN0YXRlUGFnaW5hdGlvbihjb3JlU3RhdGUpLFxuICAgICAgbm9TZWFyY2hDb2x1bW5zU2VsZWN0ZWQ6IFRhYmxlU2VhcmNoSGVscGVycy5nZXRTZWFyY2hDb2x1bW5zU2VsZWN0ZWRTdGF0ZShcbiAgICAgICAgY29yZVN0YXRlLFxuICAgICAgICAnbm9uZScsXG4gICAgICApLFxuICAgICAgLi4ucGFydGlhbFF1ZXJ5LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBkZXJpdmVkRnVsbFN0YXRlUGFnaW5hdGlvbjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4oXG4gICAgY29yZVN0YXRlOiBDb3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICk6IEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPlsncXVlcnknXVsncGFnaW5hdGlvbiddIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29yZVN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICBwcmV2aW91czogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQcmV2aW91c1BhZ2UoY29yZVN0YXRlKSxcbiAgICAgIHBhZ2VzOiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFBhZ2VzKGNvcmVTdGF0ZSksXG4gICAgICBuZXh0OiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldE5leHRQYWdlKGNvcmVTdGF0ZSksXG4gICAgICBwYWdlQ291bnQ6IFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0UGFnZUNvdW50KGNvcmVTdGF0ZSksXG4gICAgICBzaG93Q29udHJvbHM6IFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0U2hvd1BhZ2luYXRpb25Db250cm9scyhjb3JlU3RhdGUpLFxuICAgICAgcGFnZVJvd1N0YXJ0OiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFBhZ2VSb3dTdGFydChjb3JlU3RhdGUpLFxuICAgICAgcGFnZVJvd0VuZDogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQYWdlUm93RW5kKGNvcmVTdGF0ZSksXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlcml2ZWRGdWxsU3RhdGVEaXNwbGF5PFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPihcbiAgICBwcm9wczoge1xuICAgICAgY29yZVN0YXRlOiBDb3JlU3RhdGU8UiwgQywgRiwgRz47XG4gICAgICBjb2x1bW5zOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+O1xuICAgICAgcGx1cmFsRW50aXR5TmFtZTogc3RyaW5nO1xuICAgICAgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPjtcbiAgICAgIHJlc29sdmVkQ29sdW1uczogRnVsbENvbHVtbjxDPltdO1xuICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogU2VhcmNoYWJsZUNvbHVtbk1hcDxDPjtcbiAgICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz47XG4gICAgfSxcbiAgICBwYXJ0aWFsRGlzcGxheTogUGFydGlhbDxGdWxsU3RhdGU8UiwgQywgRiwgRz5bJ2Rpc3BsYXknXT4gPSB7fSxcbiAgKTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+WydkaXNwbGF5J10ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvcmVTdGF0ZSxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgIHJlc29sdmVkQ29sdW1ucyxcbiAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgb3B0aW9ucyxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29yZVN0YXRlLmRpc3BsYXksXG4gICAgICBjb2x1bW5zOiByZXNvbHZlZENvbHVtbnMsXG4gICAgICBhbGxDb2x1bW5zOiBUYWJsZUNvbHVtbkhlbHBlcnMuZ2V0QWxsQ29sdW1ucyhcbiAgICAgICAgY29yZVN0YXRlLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgKSxcbiAgICAgIGNvbHVtbk5hbWVNYXA6IGNvbHVtbk5hbWVNYXAsXG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgemVyb1N0YXRlTWVzc2FnZTogVGFibGVEaXNwbGF5SGVscGVycy5nZXRaZXJvU3RhdGVNZXNzYWdlKFxuICAgICAgICBjb3JlU3RhdGUsXG4gICAgICAgIHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICApLFxuICAgICAgY29sdW1uc0FyZUZyZWV6YWJsZTogISFvcHRpb25zPy5jb2x1bW5zQXJlRnJlZXphYmxlLFxuICAgICAgY29sdW1uc0FyZUhpZGVhYmxlOiAhIW9wdGlvbnM/LmNvbHVtbnNBcmVIaWRlYWJsZSxcbiAgICAgIGNvbHVtbnNBcmVSZW9yZGVyYWJsZTogb3B0aW9ucz8uY29sdW1uc0FyZVJlb3JkZXJhYmxlID8/IHRydWUsXG4gICAgICByb3dzQXJlR3JheWVkOiAhIW9wdGlvbnM/LnJvd3NBcmVHcmF5ZWQsXG4gICAgICBjdXN0b21TdW1tYXJ5Um93OiAhIW9wdGlvbnM/LmN1c3RvbVN1bW1hcnlSb3csXG4gICAgICBjc3ZFeHBvcnRBbGxvd2VkOiBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgZW5hYmxlZENvdW50OiByZXNvbHZlZENvbHVtbnMubGVuZ3RoLFxuICAgICAgaGlkZVBhZ2VTaXplU2VsZWN0b3I6ICEhb3B0aW9ucz8uaGlkZVBhZ2VTaXplU2VsZWN0b3IsXG4gICAgICBjZWxsUm93U3BhbjogKF9pOiBudW1iZXIsIF9jb2x1bW46IEMpID0+IDEsXG4gICAgICBuZWVkc1JpZ2h0Qm9yZGVyOiAoKSA9PiBmYWxzZSxcbiAgICAgIC4uLnBhcnRpYWxEaXNwbGF5LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBkZXJpdmVkRnVsbFN0YXRlU2VsZWN0aW9uPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPihcbiAgICBjb3JlU3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz4sXG4gICk6IEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPlsnc2VsZWN0aW9uJ10ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5jb3JlU3RhdGUuc2VsZWN0aW9uLFxuICAgICAgYWxsb3dTZWxlY3Rpb246IG9wdGlvbnM/LmFsbG93U2VsZWN0aW9uID8/IGZhbHNlLFxuICAgICAgaXNBbGxTZWxlY3RlZDogVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzQWxsU2VsZWN0ZWQoY29yZVN0YXRlKSxcbiAgICAgIGlzQ3VycmVudFBhZ2VTZWxlY3RlZDpcbiAgICAgICAgVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzQ3VycmVudFBhZ2VTZWxlY3RlZChjb3JlU3RhdGUpLFxuICAgICAgc2VsZWN0ZWRDb3VudDogVGFibGVTZWxlY3Rpb25IZWxwZXJzLnNlbGVjdGVkQ291bnQoY29yZVN0YXRlKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNvbWUgdGFibGVzIHVzZSByZW1vdGUgYmFja2VuZHMgdG8gZmV0Y2ggZGF0YSBhc3luY2hyb25vdXNseSwgYnV0IG1vc3QgdGFibGVzIHVzZSBhblxuICAgKiBpbi1tZW1vcnkgc291cmNlLCB3aGljaCBpcyB1c2VmdWwgZm9yIHNtYWxsIGRhdGFzZXRzLCB3aGVuIFJpdlRhYmxlIGZlYXR1cmVzIGxpa2VcbiAgICogb3JkZXJpbmcgYW5kIHBhZ2luYXRpb24gYXJlIGRlc2lyZWQuXG4gICAqL1xuXG4gIGV4cG9ydCB0eXBlIEluTWVtb3J5Q29sdW1uTWV0YWRhdGE8UiBleHRlbmRzIFJvdz4gPSBPbWl0PFxuICAgIENvbHVtbk1ldGFkYXRhLFxuICAgICdvcmRlcmFibGUnXG4gID4gJiB7IG9yZGVyS2V5Pzoga2V5b2YgUiB9O1xuXG4gIGV4cG9ydCB0eXBlIEluTWVtb3J5TWFuYWdlck9wdGlvbnM8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0gTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz4gJiB7XG4gICAgZnVzZU9wdGlvbnM/OiBJRnVzZU9wdGlvbnM8Uj47XG4gICAgZmlsdGVyPzogKGZpbHRlcnM6IEYgfCBudWxsLCByb3c6IFIpID0+IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogV2hlbiBgcXVlcnkub3JkZXJgIGlzIG51bGwgYW5kIHRoZXJlIGlzIG5vIGFjdGl2ZSBzZWFyY2gsIHJvd3MgYXJlIG9yZGVyZWRcbiAgICAgKiBieSB0aGlzIGNvbHVtbi4gSWYgb21pdHRlZCwgdGhlIGZpcnN0IGNvbHVtbiB3aXRoIGFuIGBvcmRlcktleWAgaXMgdXNlZFxuICAgICAqIChhc2NlbmRpbmcpLlxuICAgICAqL1xuICAgIGRlZmF1bHRTb3J0PzogeyBjb2x1bW46IEM7IGRpcmVjdGlvbjogT3JkZXJEaXJlY3Rpb24gfTtcbiAgfTtcblxuICAvKipcbiAgICogV2hhdCBhIG5lc3RlZCB0YWJsZSdzIHBhZ2Ugc2l6ZSBhbmQgdG90YWwgY291bnQgY291bnQ6IGV2ZXJ5IGJvdHRvbS1sZXZlbFxuICAgKiByb3csIHdoaWNoIGNhbiBzcGxpdCBhIHJvdydzIHN1YnJvd3MgYWNyb3NzIHBhZ2VzLCBvciBlYWNoIHRvcC1sZXZlbCByb3dcbiAgICogdG9nZXRoZXIgd2l0aCBhbGwgb2YgaXRzIHN1YnJvd3MuXG4gICAqL1xuICBleHBvcnQgY29uc3QgTmVzdGVkUGFnaW5hdGVCeU9wdGlvbnMgPSBbJ2JvdHRvbVJvd3MnLCAndG9wUm93cyddIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBOZXN0ZWRQYWdpbmF0ZUJ5ID0gKHR5cGVvZiBOZXN0ZWRQYWdpbmF0ZUJ5T3B0aW9ucylbbnVtYmVyXTtcblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeU5lc3RlZE1hbmFnZXJPcHRpb25zPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgPiA9IEluTWVtb3J5TWFuYWdlck9wdGlvbnM8UiwgQywgRj4gJiB7XG4gICAgLyoqIERlZmF1bHRzIHRvICdib3R0b21Sb3dzJy4gKi9cbiAgICBwYWdpbmF0ZUJ5PzogTmVzdGVkUGFnaW5hdGVCeTtcbiAgfTtcblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5NZW1vcnlNYW5hZ2VyPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgPihcbiAgICBmZXRjaERhdGFzZXQ6ICgpID0+IFByb21pc2U8UltdPiB8IFJbXSxcbiAgICBjb2x1bW5zOiBNYXA8QywgSW5NZW1vcnlDb2x1bW5NZXRhZGF0YTxSPj4sXG4gICAgcGx1cmFsRW50aXR5TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPFIsIEMsIEY+LFxuICApOiBNYW5hZ2VyPFIsIEMsIEY+IHtcbiAgICBjb2x1bW5zID0gVGFibGVTZWFyY2hIZWxwZXJzLm1hcmtDb2x1bW5zT3V0c2lkZUZ1c2VLZXlzVW5zZWFyY2hhYmxlKFxuICAgICAgY29sdW1ucyxcbiAgICAgIG9wdGlvbnM/LmZ1c2VPcHRpb25zLFxuICAgICk7XG4gICAgbGV0IGRhdGE6IFJbXTtcbiAgICBsZXQgZnVzZTogRnVzZTxSPjtcblxuICAgIGNvbnN0IHNvdXJjZTogU291cmNlPFIsIEMsIEY+ID0gYXN5bmMgKHF1ZXJ5LCBtb3N0UmVjZW50QWN0aW9uKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ2xvYWQnIHx8XG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ3NlYXJjaENvbHVtbnNDaGFuZ2UnIHx8XG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ3RvZ2dsZUFsbFNlYXJjaENvbHVtbnMnXG4gICAgICApIHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IGZldGNoRGF0YXNldCgpO1xuICAgICAgICBmdXNlID0gbmV3IEZ1c2UoXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBUYWJsZVNlYXJjaEhlbHBlcnMuZnVzZU9wdGlvbnNGb3JTZWFyY2hDb2x1bW5zKFxuICAgICAgICAgICAgb3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9yZGVyQ29sdW1uOiBrZXlvZiBSIHwgdW5kZWZpbmVkID0gcXVlcnkub3JkZXJcbiAgICAgICAgPyBjb2x1bW5zLmdldChxdWVyeS5vcmRlci5jb2x1bW4pPy5vcmRlcktleVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGhhc0V4cGxpY2l0U29ydCA9IHF1ZXJ5Lm9yZGVyICE9IG51bGwgJiYgb3JkZXJDb2x1bW4gIT09IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGRlZmF1bHRTb3J0U3BlYyA9ICgoKSA9PiB7XG4gICAgICAgIGlmIChvcHRpb25zPy5kZWZhdWx0U29ydCkge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGNvbHVtbnMuZ2V0KG9wdGlvbnMuZGVmYXVsdFNvcnQuY29sdW1uKT8ub3JkZXJLZXk7XG4gICAgICAgICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4geyBrZXksIGRpcmVjdGlvbjogb3B0aW9ucy5kZWZhdWx0U29ydC5kaXJlY3Rpb24gfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlyc3RPcmRlcmFibGUgPSBbLi4uY29sdW1ucy5lbnRyaWVzKCldLmZpbmQoXG4gICAgICAgICAgKFssIG1ldGFdKSA9PiBtZXRhLm9yZGVyS2V5ICE9IG51bGwsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGtleSA9IGZpcnN0T3JkZXJhYmxlPy5bMV0ub3JkZXJLZXk7XG4gICAgICAgIHJldHVybiBrZXkgIT09IHVuZGVmaW5lZCA/IHsga2V5LCBkaXJlY3Rpb246ICdhc2MnIGFzIGNvbnN0IH0gOiBudWxsO1xuICAgICAgfSkoKTtcblxuICAgICAgbGV0IG9yZGVyZWQ6IFJbXTtcbiAgICAgIGlmIChxdWVyeS5zZWFyY2gpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGZ1c2Uuc2VhcmNoKHF1ZXJ5LnNlYXJjaCkubWFwKHJlc3VsdCA9PiByZXN1bHQuaXRlbSk7XG4gICAgICAgIG9yZGVyZWQgPVxuICAgICAgICAgIGhhc0V4cGxpY2l0U29ydCAmJiBxdWVyeS5vcmRlclxuICAgICAgICAgICAgPyBUYWJsZU9yZGVySGVscGVycy5vcmRlckVtcHR5TGFzdChcbiAgICAgICAgICAgICAgICBtYXRjaGVzLFxuICAgICAgICAgICAgICAgIG9yZGVyQ29sdW1uLFxuICAgICAgICAgICAgICAgIHF1ZXJ5Lm9yZGVyLmRpcmVjdGlvbixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBtYXRjaGVzO1xuICAgICAgfSBlbHNlIGlmIChoYXNFeHBsaWNpdFNvcnQgJiYgcXVlcnkub3JkZXIpIHtcbiAgICAgICAgb3JkZXJlZCA9IFRhYmxlT3JkZXJIZWxwZXJzLm9yZGVyRW1wdHlMYXN0KFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgb3JkZXJDb2x1bW4sXG4gICAgICAgICAgcXVlcnkub3JkZXIuZGlyZWN0aW9uLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChxdWVyeS5vcmRlciA9PSBudWxsICYmIGRlZmF1bHRTb3J0U3BlYykge1xuICAgICAgICBvcmRlcmVkID0gVGFibGVPcmRlckhlbHBlcnMub3JkZXJFbXB0eUxhc3QoXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBkZWZhdWx0U29ydFNwZWMua2V5LFxuICAgICAgICAgIGRlZmF1bHRTb3J0U3BlYy5kaXJlY3Rpb24sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcmRlcmVkID0gZGF0YTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpbHRlciA9IG9wdGlvbnM/LmZpbHRlcjtcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gZmlsdGVyXG4gICAgICAgID8gb3JkZXJlZC5maWx0ZXIocm93ID0+IGZpbHRlcihxdWVyeS5maWx0ZXJzLCByb3cpKVxuICAgICAgICA6IG9yZGVyZWQ7XG4gICAgICBjb25zdCBzdGFydElkeCA9IHF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemUgKiBxdWVyeS5wYWdpbmF0aW9uLnBhZ2U7XG4gICAgICBjb25zdCBlbmRJZHggPSBzdGFydElkeCArIHF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemU7XG4gICAgICBjb25zdCBwYWdpbmF0ZWQgPSBmaWx0ZXJlZC5zbGljZShzdGFydElkeCwgZW5kSWR4KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnRQYWdlRGF0YTogcGFnaW5hdGVkLFxuICAgICAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IGZpbHRlcmVkLmxlbmd0aCxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbHVtbk1ldGFkYXRhOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+ID1cbiAgICAgIFRhYmxlQ29sdW1uSGVscGVycy5jcmVhdGVDb2x1bW5NZXRhZGF0YU1hcChjb2x1bW5zKTtcblxuICAgIC8qXG4gICAgICBXaGVuIGEgZGVmYXVsdFNvcnQgaXMgc3BlY2lmaWVkLCBzZWVkIHRoZSBpbml0aWFsIHF1ZXJ5Lm9yZGVyIHNvIHRoZVxuICAgICAgdGFibGUgaGVhZGVyIHNob3dzIHRoZSBzb3J0IGluZGljYXRvciBmcm9tIHRoZSBzdGFydC5cbiAgICAqL1xuICAgIG9wdGlvbnMgPSBUYWJsZU9yZGVySGVscGVycy5zZWVkRGVmYXVsdFNvcnRPcHRpb24ob3B0aW9ucyk7XG5cbiAgICByZXR1cm4gY3JlYXRlTWFuYWdlcihzb3VyY2UsIGNvbHVtbk1ldGFkYXRhLCBwbHVyYWxFbnRpdHlOYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbk1lbW9yeU1hbmFnZXJOZXN0ZWQ8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICA+KFxuICAgIGZldGNoRGF0YXNldDogKCkgPT4gUHJvbWlzZTxOZXN0ZWRIZWFkZXJSb3c8Uj5bXT4gfCBOZXN0ZWRIZWFkZXJSb3c8Uj5bXSxcbiAgICBjb2x1bW5zOiBNYXA8QywgSW5NZW1vcnlDb2x1bW5NZXRhZGF0YTxSPj4sXG4gICAgcGx1cmFsRW50aXR5TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBJbk1lbW9yeU5lc3RlZE1hbmFnZXJPcHRpb25zPFIsIEMsIEY+LFxuICApOiBNYW5hZ2VyPFIsIEMsIEY+IHtcbiAgICBjb2x1bW5zID0gVGFibGVTZWFyY2hIZWxwZXJzLm1hcmtDb2x1bW5zT3V0c2lkZUZ1c2VLZXlzVW5zZWFyY2hhYmxlKFxuICAgICAgY29sdW1ucyxcbiAgICAgIG9wdGlvbnM/LmZ1c2VPcHRpb25zLFxuICAgICk7XG4gICAgbGV0IGRhdGE6IE5lc3RlZEhlYWRlclJvdzxSPltdO1xuICAgIGxldCByb3dzRnJvbURhdGE6IFJbXTtcbiAgICAvLyBUaGUgZnVzZSB3aWxsIHNlYXJjaCB0aGUgaW5kaXZpZHVhbCByb3dzXG4gICAgbGV0IGZ1c2U6IEZ1c2U8Uj47XG5cbiAgICBjb25zdCBzb3VyY2U6IFNvdXJjZTxSLCBDLCBGPiA9IGFzeW5jIChxdWVyeSwgbW9zdFJlY2VudEFjdGlvbikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdsb2FkJyB8fFxuICAgICAgICBtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdzZWFyY2hDb2x1bW5zQ2hhbmdlJyB8fFxuICAgICAgICBtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICd0b2dnbGVBbGxTZWFyY2hDb2x1bW5zJ1xuICAgICAgKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBmZXRjaERhdGFzZXQoKTtcbiAgICAgICAgcm93c0Zyb21EYXRhID0gVGFibGVSZXN1bHRIZWxwZXJzLmdldEFsbFJvd3NGcm9tTmVzdGVkSGVhZGVycyhkYXRhKTtcbiAgICAgICAgZnVzZSA9IG5ldyBGdXNlKFxuICAgICAgICAgIHJvd3NGcm9tRGF0YSxcbiAgICAgICAgICBUYWJsZVNlYXJjaEhlbHBlcnMuZnVzZU9wdGlvbnNGb3JTZWFyY2hDb2x1bW5zKFxuICAgICAgICAgICAgb3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9yZGVyQ29sdW1uOiBrZXlvZiBSIHwgdW5kZWZpbmVkID0gcXVlcnkub3JkZXJcbiAgICAgICAgPyBjb2x1bW5zLmdldChxdWVyeS5vcmRlci5jb2x1bW4pPy5vcmRlcktleVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGhhc0V4cGxpY2l0U29ydCA9IHF1ZXJ5Lm9yZGVyICE9IG51bGwgJiYgb3JkZXJDb2x1bW4gIT09IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGRlZmF1bHRTb3J0U3BlYyA9ICgoKSA9PiB7XG4gICAgICAgIGlmIChvcHRpb25zPy5kZWZhdWx0U29ydCkge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGNvbHVtbnMuZ2V0KG9wdGlvbnMuZGVmYXVsdFNvcnQuY29sdW1uKT8ub3JkZXJLZXk7XG4gICAgICAgICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4geyBrZXksIGRpcmVjdGlvbjogb3B0aW9ucy5kZWZhdWx0U29ydC5kaXJlY3Rpb24gfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlyc3RPcmRlcmFibGUgPSBbLi4uY29sdW1ucy5lbnRyaWVzKCldLmZpbmQoXG4gICAgICAgICAgKFssIG1ldGFdKSA9PiBtZXRhLm9yZGVyS2V5ICE9IG51bGwsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGtleSA9IGZpcnN0T3JkZXJhYmxlPy5bMV0ub3JkZXJLZXk7XG4gICAgICAgIHJldHVybiBrZXkgIT09IHVuZGVmaW5lZCA/IHsga2V5LCBkaXJlY3Rpb246ICdhc2MnIGFzIGNvbnN0IH0gOiBudWxsO1xuICAgICAgfSkoKTtcblxuICAgICAgLy8gU2VhcmNoLCB0aGVuIGZpbHRlciwgdGhlbiBzb3J0XG4gICAgICBsZXQgZGlkUmVzdHJpY3REaXNwbGF5ZWRSb3dzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAgIGxldCByb3dzTWF0Y2hpbmdTZWFyY2g6IFJbXSA9IHJvd3NGcm9tRGF0YTtcbiAgICAgIGlmIChxdWVyeS5zZWFyY2gpIHtcbiAgICAgICAgcm93c01hdGNoaW5nU2VhcmNoID0gZnVzZVxuICAgICAgICAgIC5zZWFyY2gocXVlcnkuc2VhcmNoKVxuICAgICAgICAgIC5tYXAocmVzdWx0ID0+IHJlc3VsdC5pdGVtKTtcblxuICAgICAgICBkaWRSZXN0cmljdERpc3BsYXllZFJvd3MgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgcm93c01hdGNoaW5nRmlsdGVyczogUltdID0gcm93c01hdGNoaW5nU2VhcmNoO1xuICAgICAgY29uc3QgZmlsdGVyVG9BcHBseSA9IG9wdGlvbnM/LmZpbHRlcjtcbiAgICAgIGlmIChmaWx0ZXJUb0FwcGx5KSB7XG4gICAgICAgIHJvd3NNYXRjaGluZ0ZpbHRlcnMgPSByb3dzTWF0Y2hpbmdTZWFyY2guZmlsdGVyKHJvdyA9PlxuICAgICAgICAgIGZpbHRlclRvQXBwbHkocXVlcnkuZmlsdGVycywgcm93KSxcbiAgICAgICAgKTtcblxuICAgICAgICBkaWRSZXN0cmljdERpc3BsYXllZFJvd3MgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXN0ZWRSb3dzVG9EaXNwbGF5OiBOZXN0ZWRIZWFkZXJSb3c8Uj5bXSA9IGRpZFJlc3RyaWN0RGlzcGxheWVkUm93c1xuICAgICAgICA/IFRhYmxlTmVzdGluZ0hlbHBlcnMuZmluZE5lc3RlZFJvd3NXaXRoSGVhZGVyc1RvS2VlcChcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICByb3dzTWF0Y2hpbmdGaWx0ZXJzLFxuICAgICAgICAgIClcbiAgICAgICAgOiBkYXRhO1xuICAgICAgY29uc3QgbWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyID0gVGFibGVOZXN0aW5nSGVscGVycy5jb3VudE5lc3RlZFJvd3MoXG4gICAgICAgIG5lc3RlZFJvd3NUb0Rpc3BsYXksXG4gICAgICAgIG9wdGlvbnM/LnBhZ2luYXRlQnkgPz8gJ2JvdHRvbVJvd3MnLFxuICAgICAgKTtcblxuICAgICAgbGV0IHNvcnRlZE5lc3RlZFJvd3M6IE5lc3RlZEhlYWRlclJvdzxSPltdO1xuICAgICAgaWYgKGhhc0V4cGxpY2l0U29ydCAmJiBxdWVyeS5vcmRlcikge1xuICAgICAgICAvLyBFeHBsaWNpdCBzb3J0IG92ZXJyaWRlIGhhcyBwcmlvcml0eSBvdmVyIGV2ZXJ5dGhpbmcgZWxzZVxuICAgICAgICBzb3J0ZWROZXN0ZWRSb3dzID0gVGFibGVPcmRlckhlbHBlcnMuc29ydExvd0xldmVsTmVzdGVkUm93c1dpdGhIZWFkZXJzKFxuICAgICAgICAgIG5lc3RlZFJvd3NUb0Rpc3BsYXksXG4gICAgICAgICAgb3JkZXJDb2x1bW4sXG4gICAgICAgICAgcXVlcnkub3JkZXIuZGlyZWN0aW9uLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChxdWVyeS5zZWFyY2gpIHtcbiAgICAgICAgLy8gU29ydCBvbiB0aGUgRnVzZSByZWxldmFuY2Ugb3JkZXJcbiAgICAgICAgY29uc3QgaWRUb1NlYXJjaEluZGV4TWFwOiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBudW1iZXI+ID1cbiAgICAgICAgICBUYWJsZU9yZGVySGVscGVycy5jcmVhdGVJZFRvU2VhcmNoSW5kZXhNYXAocm93c01hdGNoaW5nU2VhcmNoKTtcbiAgICAgICAgc29ydGVkTmVzdGVkUm93cyA9XG4gICAgICAgICAgVGFibGVPcmRlckhlbHBlcnMuc29ydE5lc3RlZFJvd3NXaXRoSGVhZGVyc0Jhc2VkT25TZWFyY2hNYXRjaGVzKFxuICAgICAgICAgICAgbmVzdGVkUm93c1RvRGlzcGxheSxcbiAgICAgICAgICAgIGlkVG9TZWFyY2hJbmRleE1hcCxcbiAgICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChxdWVyeS5vcmRlciA9PSBudWxsICYmIGRlZmF1bHRTb3J0U3BlYykge1xuICAgICAgICAvLyBVc2UgdGhlIGRlZmF1bHQgc29ydCwgaWYgd2UgaGF2ZSBvbmVcbiAgICAgICAgc29ydGVkTmVzdGVkUm93cyA9IFRhYmxlT3JkZXJIZWxwZXJzLnNvcnRMb3dMZXZlbE5lc3RlZFJvd3NXaXRoSGVhZGVycyhcbiAgICAgICAgICBuZXN0ZWRSb3dzVG9EaXNwbGF5LFxuICAgICAgICAgIGRlZmF1bHRTb3J0U3BlYy5rZXksXG4gICAgICAgICAgZGVmYXVsdFNvcnRTcGVjLmRpcmVjdGlvbixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERvbid0IHNvcnQgaWYgd2UgaGF2ZSBubyBpbmZvcm1hdGlvbiB0byB1c2UgdG8gc29ydFxuICAgICAgICBzb3J0ZWROZXN0ZWRSb3dzID0gbmVzdGVkUm93c1RvRGlzcGxheTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFnaW5hdGVkSGVhZGVyUm93czogTmVzdGVkSGVhZGVyUm93PFI+W10gPVxuICAgICAgICBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLnBhZ2luYXRlTmVzdGVkSGVhZGVyUm93cyhcbiAgICAgICAgICBzb3J0ZWROZXN0ZWRSb3dzLFxuICAgICAgICAgIHF1ZXJ5LnBhZ2luYXRpb24ucGFnZSxcbiAgICAgICAgICBxdWVyeS5wYWdpbmF0aW9uLnBhZ2VTaXplLFxuICAgICAgICAgIG9wdGlvbnM/LnBhZ2luYXRlQnkgPz8gJ2JvdHRvbVJvd3MnLFxuICAgICAgICApO1xuICAgICAgY29uc3QgaGFzSGVhZGVyczogYm9vbGVhbiA9IHBhZ2luYXRlZEhlYWRlclJvd3Muc29tZShcbiAgICAgICAgaGVhZGVyID0+IGhlYWRlci5oZWFkZXJUZXh0ICE9IG51bGwsXG4gICAgICApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50UGFnZU5lc3RlZEhlYWRlcnM6IHBhZ2luYXRlZEhlYWRlclJvd3MsXG4gICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbWF0Y2hpbmdSb3dDb3VudCxcbiAgICAgICAgaGFzSGVhZGVyczogaGFzSGVhZGVycyxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbHVtbk1ldGFkYXRhOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+ID1cbiAgICAgIFRhYmxlQ29sdW1uSGVscGVycy5jcmVhdGVDb2x1bW5NZXRhZGF0YU1hcChjb2x1bW5zKTtcblxuICAgIC8qXG4gICAgICBXaGVuIGEgZGVmYXVsdFNvcnQgaXMgc3BlY2lmaWVkLCBzZWVkIHRoZSBpbml0aWFsIHF1ZXJ5Lm9yZGVyIHNvIHRoZVxuICAgICAgdGFibGUgaGVhZGVyIHNob3dzIHRoZSBzb3J0IGluZGljYXRvciBmcm9tIHRoZSBzdGFydC5cbiAgICAqL1xuICAgIG9wdGlvbnMgPSBUYWJsZU9yZGVySGVscGVycy5zZWVkRGVmYXVsdFNvcnRPcHRpb24ob3B0aW9ucyk7XG5cbiAgICByZXR1cm4gY3JlYXRlTWFuYWdlcihzb3VyY2UsIGNvbHVtbk1ldGFkYXRhLCBwbHVyYWxFbnRpdHlOYW1lLCBvcHRpb25zKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24ga2VlcHMgdGhlIHN0YXRlIG9iamVjdCByZWZlcmVuY2VzIGFzIHN0YWJsZSBhcyBwb3NzaWJsZSwgd2hpY2hcbiAqIGhlbHBzIEFuZ3VsYXIgcmVkdWNlIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnMuIEZvciBub3csIHNpbXBsZSBpc0VxdWFsKClcbiAqIGNoZWNrcyBhdCB0aGUgc3RhdGUncyB0b3AtbGV2ZWwga2V5cyBhcmUgc3VmZmljaWVudCB0byBkcmFtYXRpY2FsbHkgc3BlZWQgdXBcbiAqIHJlbmRlcmluZywgYnV0IGlmIG90aGVyIHBlcmZvcm1hbmNlIGlzc3VlcyBhcmlzZSwgd2UgY291bGQgaW1wbGVtZW50IG1vcmVcbiAqIGdyYW51bGFyIGNoZWNrcy9zdXJnaWNhbCB1cGRhdGVzIGFzIG5lZWRlZCAodGhlIHN0YXRlLnJlc3VsdCBiZWluZyB0aGUgbW9zdFxuICogbGlrZWx5IGNhbmRpZGF0ZSwgc2luY2UgbWFueSB0eXBlcyBvZiBzdGF0ZSB1cGRhdGVzIGFmZmVjdCBwYXJ0cyBvZiB0aGVcbiAqIHJlc3VsdCByb3dzKS5cbiAqL1xuZnVuY3Rpb24gc3RhYmxlU3RhdGU8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICB0YXJnZXQ6IFJpdlRhYmxlLkZ1bGxTdGF0ZTxSLCBDLCBGLCBHPixcbiAgc291cmNlOiBSaXZUYWJsZS5GdWxsU3RhdGU8UiwgQywgRiwgRz4sXG4pOiBSaXZUYWJsZS5GdWxsU3RhdGU8UiwgQywgRiwgRz4ge1xuICBpZiAoIWlzRXF1YWwodGFyZ2V0LnF1ZXJ5LCBzb3VyY2UucXVlcnkpKSB7XG4gICAgdGFyZ2V0LnF1ZXJ5ID0gc291cmNlLnF1ZXJ5O1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQubG9hZCwgc291cmNlLmxvYWQpKSB7XG4gICAgdGFyZ2V0LmxvYWQgPSBzb3VyY2UubG9hZDtcbiAgfVxuXG4gIGlmICghaXNFcXVhbCh0YXJnZXQucmVzdWx0LmNzdkRhdGEsIHNvdXJjZS5yZXN1bHQuY3N2RGF0YSkpIHtcbiAgICB0YXJnZXQucmVzdWx0LmNzdkRhdGEgPSBzb3VyY2UucmVzdWx0LmNzdkRhdGE7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5yZXN1bHQuY3N2RmlsZW5hbWUsIHNvdXJjZS5yZXN1bHQuY3N2RmlsZW5hbWUpKSB7XG4gICAgdGFyZ2V0LnJlc3VsdC5jc3ZGaWxlbmFtZSA9IHNvdXJjZS5yZXN1bHQuY3N2RmlsZW5hbWU7XG4gIH1cbiAgaWYgKFxuICAgICFpc0VxdWFsKFxuICAgICAgdGFyZ2V0LnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICBzb3VyY2UucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCxcbiAgICApXG4gICkge1xuICAgIHRhcmdldC5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50ID0gc291cmNlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQ7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5yZXN1bHQsIHNvdXJjZS5yZXN1bHQpKSB7XG4gICAgdGFyZ2V0LnJlc3VsdCA9IHNvdXJjZS5yZXN1bHQ7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5kaXNwbGF5LCBzb3VyY2UuZGlzcGxheSkpIHtcbiAgICB0YXJnZXQuZGlzcGxheSA9IHNvdXJjZS5kaXNwbGF5O1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQuc2VsZWN0aW9uLCBzb3VyY2Uuc2VsZWN0aW9uKSkge1xuICAgIHRhcmdldC5zZWxlY3Rpb24gPSBzb3VyY2Uuc2VsZWN0aW9uO1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQuY29sbGFwc2VTdGF0ZSwgc291cmNlLmNvbGxhcHNlU3RhdGUpKSB7XG4gICAgdGFyZ2V0LmNvbGxhcHNlU3RhdGUgPSBzb3VyY2UuY29sbGFwc2VTdGF0ZTtcbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5hc3luYyBmdW5jdGlvbiogcmVmcmVzaFJlc3VsdFdpdGg8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBzb3VyY2U6IFJpdlRhYmxlLlNvdXJjZTxSLCBDLCBGLCBHPixcbiAgbW9zdFJlY2VudEFjdGlvbjogUml2VGFibGUuQWN0aW9uPFIsIEMsIEYsIEc+LFxuKTogQXN5bmNHZW5lcmF0b3I8e1xuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICBlZmZlY3Q6IFJpdlRhYmxlLkVmZmVjdCB8IG51bGw7XG59PiB7XG4gIHlpZWxkIHtcbiAgICBzdGF0ZToge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsb2FkOiB7XG4gICAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGVmZmVjdDogbnVsbCxcbiAgfTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzb3VyY2Uoc3RhdGUucXVlcnksIG1vc3RSZWNlbnRBY3Rpb24pO1xuICAgIGlmIChUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmlzUGFnZU91dE9mQm91bmRzKHN0YXRlLCByZXN1bHQpKSB7XG4gICAgICBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgPSAwO1xuICAgIH1cbiAgICB5aWVsZCB7XG4gICAgICBzdGF0ZToge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbG9hZDoge1xuICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICByZXN1bHQsXG4gICAgICB9LFxuICAgICAgZWZmZWN0OiBudWxsLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB5aWVsZCB7XG4gICAgICBzdGF0ZToge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbG9hZDoge1xuICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGVmZmVjdDogbnVsbCxcbiAgICB9O1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uKiByZWR1Y2U8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBhY3Rpb246IFJpdlRhYmxlLkFjdGlvbjxSLCBDLCBGLCBHPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgc291cmNlOiBSaXZUYWJsZS5Tb3VyY2U8UiwgQywgRiwgRz4sXG4gIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gIGRlZmF1bHRDb2x1bW5TdGF0ZTogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSxcbik6IEFzeW5jR2VuZXJhdG9yPHtcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgZWZmZWN0OiBSaXZUYWJsZS5FZmZlY3QgfCBudWxsO1xufT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbG9hZCc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoc3RhdGUsIHNvdXJjZSwgYWN0aW9uKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ29yZGVyQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIG9yZGVyOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ29yZGVyQ29sdW1uVG9nZ2xlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAgVGFibGVPcmRlckhlbHBlcnMudG9nZ2xlQ29sdW1uT3JkZXIoc3RhdGUsIGFjdGlvbi5jb2x1bW4pLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWFyY2hDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgc2VhcmNoOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbGxhcHNlU3RhdGU6IHtcbiAgICAgICAgICAgIGRlZmF1bHRUbzogJ2V4cGFuZGVkJyxcbiAgICAgICAgICAgIGNvbGxhcHNlZEhlYWRlcnM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIGNvbGxhcHNlZFJvd3M6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWFyY2hDb2x1bW5zQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHNlYXJjaENvbHVtbnM6IG5ldyBNYXAoW1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5zZWFyY2hDb2x1bW5zLFxuICAgICAgICAgICAgICAuLi5hY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29sbGFwc2VTdGF0ZToge1xuICAgICAgICAgICAgZGVmYXVsdFRvOiAnZXhwYW5kZWQnLFxuICAgICAgICAgICAgY29sbGFwc2VkSGVhZGVyczogbmV3IFNldCgpLFxuICAgICAgICAgICAgY29sbGFwc2VkUm93czogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2luYXRpb25DaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ3JvdXBpbmdDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZ3JvdXBpbmc6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ByZXZpb3VzUGFnZU5hdmlnYXRlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQcmV2aW91c1BhZ2Uoc3RhdGUpID8/IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ25leHRQYWdlTmF2aWdhdGUnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOlxuICAgICAgICAgICAgICAgIFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0TmV4dFBhZ2Uoc3RhdGUpID8/XG4gICAgICAgICAgICAgICAgVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQYWdlQ291bnQoc3RhdGUpIC0gMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFnZUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2U6IGFjdGlvbi5wYWdlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwYWdlU2l6ZUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2VTaXplOiBhY3Rpb24uc2l6ZSxcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZmlsdGVyc0NoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBmaWx0ZXJzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbGxhcHNlU3RhdGU6IHtcbiAgICAgICAgICAgIGRlZmF1bHRUbzogJ2V4cGFuZGVkJyxcbiAgICAgICAgICAgIGNvbGxhcHNlZEhlYWRlcnM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIGNvbGxhcHNlZFJvd3M6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmaWx0ZXJBZGQnOlxuICAgICAgLy8gUGFyZW50IGNvbXBvbmVudCBpcyByZXNwb25zaWJsZSBmb3Igc3Vic2NyaWJpbmcgYW5kIGFkZGluZyB0aGUgZmlsdGVyXG4gICAgICB5aWVsZCB7IHN0YXRlOiB7IC4uLnN0YXRlIH0sIGVmZmVjdDogbnVsbCB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uU2V0dGluZ3NDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZToge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgICAgICBjb2x1bW5TZXR0aW5nczogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gZG8gbm90IG91dHB1dCBjaGFuZ2VzIHdoZW4gdHJpZ2dlcmVkIGZyb20gdGhlIG91dHNpZGUgd29ybGRcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtblBpbkNoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMuY2hhbmdlQ29sdW1uUGluKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24uY29sdW1uLFxuICAgICAgICAgIGFjdGlvbi5waW5uZWQsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uc0ZyZWV6ZVVwVG9DaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtbnNGcmVlemVTdGF0ZShcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLmluZGV4LFxuICAgICAgICAgIGFjdGlvbi5mcmVlemUsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uT3JkZXJDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtbk9yZGVyKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24ucHJldmlvdXNJbmRleCxcbiAgICAgICAgICBhY3Rpb24ubmV3SW5kZXgsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uTW92ZVRvQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlQ29sdW1uSGVscGVycy5tb3ZlQ29sdW1uVG8oXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLnBvc2l0aW9uLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtbkVuYWJsZWRDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtbkVuYWJsZWQoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLmVuYWJsZWQsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZW5hYmxlQWxsQ29sdW1uc0NoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMuZW5hYmxlQWxsQ29sdW1ucyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLmVuYWJsZWQsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uV2lkdGhDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtbldpZHRoKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24uY29sdW1uLFxuICAgICAgICAgIGFjdGlvbi5wcmVmZXJyZWRXaWR0aCxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyZXNldFRvRGVmYXVsdENvbHVtbnMnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLnJlc2V0VG9EZWZhdWx0Q29sdW1ucyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgZGVmYXVsdENvbHVtblN0YXRlLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlbGVjdGlvbkNoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgc2VsZWN0aW9uOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgfSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Jvd1NlbGVjdGVkQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5zZXRSb3dTZWxlY3RlZChcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBhY3Rpb24uaWQsXG4gICAgICAgICAgYWN0aW9uLnNlbGVjdGVkLFxuICAgICAgICAgIGFjdGlvbi5jb250aWd1b3VzLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFnZVNlbGVjdGVkQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlU2VsZWN0aW9uSGVscGVycy50b2dnbGVQYWdlU2VsZWN0ZWQoc3RhdGUpLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYWxsU2VsZWN0ZWRDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVTZWxlY3Rpb25IZWxwZXJzLnRvZ2dsZUFsbFNlbGVjdGVkKHN0YXRlKSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlbGVjdGlvbkNsZWFyJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5jbGVhclNlbGVjdGlvbihzdGF0ZSksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdncm91cFNlbGVjdGlvbkNoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZVNlbGVjdGlvbkhlbHBlcnMudG9nZ2xlR3JvdXBTZWxlY3RlZChzdGF0ZSwgYWN0aW9uLnBheWxvYWQpLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ3JvdXBzUGVyUGFnZUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBncm91cGluZzoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5ncm91cGluZyxcbiAgICAgICAgICAgICAgZ3JvdXBzUGVyUGFnZTogYWN0aW9uLmdyb3Vwc1BlclBhZ2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvdW50UGVyR3JvdXBDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZ3JvdXBpbmc6IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkuZ3JvdXBpbmcsXG4gICAgICAgICAgICAgIGNvdW50UGVyR3JvdXA6IGFjdGlvbi5jb3VudFBlckdyb3VwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWV3TW9yZUtleUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBncm91cGluZzoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5ncm91cGluZyxcbiAgICAgICAgICAgICAgdmlld01vcmVLZXk6IGFjdGlvbi52aWV3TW9yZUtleSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9nZ2xlQWxsU2VhcmNoQ29sdW1ucyc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIFRhYmxlU2VhcmNoSGVscGVycy50b2dnbGVBbGxTZWFyY2hDb2x1bW5zKHN0YXRlKSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9nZ2xlUm93Q29sbGFwc2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2xsYXBzZUhlbHBlcnMudG9nZ2xlUm93Q29sbGFwc2Uoc3RhdGUsIGFjdGlvbi5pZCksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0b2dnbGVIZWFkZXJDb2xsYXBzZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbGxhcHNlSGVscGVycy50b2dnbGVIZWFkZXJDb2xsYXBzZShzdGF0ZSwgYWN0aW9uLmlkKSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RvZ2dsZUFsbENvbGxhcHNlZCc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbGxhcHNlSGVscGVycy50b2dnbGVBbGxDb2xsYXBzZWQoc3RhdGUpLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gIH1cbn1cbiJdfQ==
|