igniteui-angular 15.0.16 → 15.0.17
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/grids/grid-base.directive.mjs +4 -3
- package/esm2020/lib/grids/tree-grid/tree-grid.pipes.mjs +4 -1
- package/esm2020/lib/services/excel/excel-files.mjs +2 -2
- package/esm2020/lib/services/excel/worksheet-data-dictionary.mjs +4 -17
- package/esm2020/lib/services/exporter-common/base-export-service.mjs +2 -2
- package/esm2020/lib/services/exporter-common/export-utilities.mjs +14 -1
- package/fesm2015/igniteui-angular.mjs +24 -20
- package/fesm2015/igniteui-angular.mjs.map +1 -1
- package/fesm2020/igniteui-angular.mjs +24 -20
- package/fesm2020/igniteui-angular.mjs.map +1 -1
- package/lib/services/excel/worksheet-data-dictionary.d.ts +1 -2
- package/lib/services/exporter-common/export-utilities.d.ts +1 -0
- package/package.json +1 -1
|
@@ -18,6 +18,9 @@ export class IgxTreeGridHierarchizingPipe {
|
|
|
18
18
|
const treeGridRecordsMap = new Map();
|
|
19
19
|
const flatData = [];
|
|
20
20
|
if (!collection || !collection.length) {
|
|
21
|
+
this.grid.flatData = collection;
|
|
22
|
+
this.grid.records = treeGridRecordsMap;
|
|
23
|
+
this.grid.rootRecords = collection;
|
|
21
24
|
return collection;
|
|
22
25
|
}
|
|
23
26
|
if (childDataKey) {
|
|
@@ -315,4 +318,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImpor
|
|
|
315
318
|
type: Inject,
|
|
316
319
|
args: [IGX_GRID_BASE]
|
|
317
320
|
}] }]; } });
|
|
318
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ncmlkLnBpcGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL3RyZWUtZ3JpZC90cmVlLWdyaWQucGlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFM0QsT0FBTyxFQUFZLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQUtuRDs7R0FFRztBQUVILE1BQU0sT0FBTyw0QkFBNEI7SUFFckMsWUFBMkMsSUFBYztRQUFkLFNBQUksR0FBSixJQUFJLENBQVU7SUFBSSxDQUFDO0lBRXZELFNBQVMsQ0FBQyxVQUFpQixFQUFFLFVBQWtCLEVBQUUsVUFBa0IsRUFBRSxZQUFvQixFQUFFLENBQVM7UUFDdkcsSUFBSSxtQkFBbUIsR0FBc0IsRUFBRSxDQUFDO1FBQ2hELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFDM0QsTUFBTSxRQUFRLEdBQVUsRUFBRSxDQUFDO1FBRTNCLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ25DLE9BQU8sVUFBVSxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxZQUFZLEVBQUU7WUFDZCxtQkFBbUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMs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WSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDM0M7YUFBTTtZQUNILElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDeEQ7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOztrSEFuQlEscUJBQXFCLGtCQUVWLGFBQWE7Z0hBRnhCLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQURqQyxJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFOzswQkFHZixNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lQXJyYXksIGNsb25lSGllcmFyY2hpY2FsQXJyYXkgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IERhdGFVdGlsIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQgeyBJVHJlZUdyaWRSZWNvcmQgfSBmcm9tICcuL3RyZWUtZ3JpZC5pbnRlcmZhY2VzJztcbmltcG9ydCB7IEdyaWRUeXBlLCBJR1hfR1JJRF9CQVNFIH0gZnJvbSAnLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyaWRQYWdpbmdNb2RlIH0gZnJvbSAnLi4vY29tbW9uL2VudW1zJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgSWd4QWRkUm93IH0gZnJvbSAnLi4vY29tbW9uL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBJU29ydGluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBJR3JpZFNvcnRpbmdTdHJhdGVneSB9IGZyb20gJy4uL2NvbW1vbi9zdHJhdGVneSc7XG5pbXBvcnQgeyBJR3JvdXBpbmdFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwaW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBQaXBlKHsgbmFtZTogJ3RyZWVHcmlkSGllcmFyY2hpemluZycgfSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlR3JpZEhpZXJhcmNoaXppbmdQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KElHWF9HUklEX0JBU0UpIHByaXZhdGUgZ3JpZDogR3JpZFR5cGUpIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShjb2xsZWN0aW9uOiBhbnlbXSwgcHJpbWFyeUtleTogc3RyaW5nLCBmb3JlaWduS2V5OiBzdHJpbmcsIGNoaWxkRGF0YUtleTogc3RyaW5nLCBfOiBudW1iZXIpOiBJVHJlZUdyaWRSZWNvcmRbXSB7XG4gICAgICAgIGxldCBoaWVyYXJjaGljYWxSZWNvcmRzOiBJVHJlZUdyaWRSZWNvcmRbXSA9IFtdO1xuICAgICAgICBjb25zdCB0cmVlR3JpZFJlY29yZHNNYXAgPSBuZXcgTWFwPGFueSwgSVRyZWVHcmlkUmVjb3JkPigpO1xuICAgICAgICBjb25zdCBmbGF0RGF0YTogYW55W10gPSBbXTtcblxuICAgICAgICBpZiAoIWNvbGxlY3Rpb24gfHwgIWNvbGxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZERhdGFLZXkpIHtcbiAgICAgICAgICAgIGhpZXJhcmNoaWNhbFJlY29yZHMgPSB0aGlzLmhpZXJhcmNoaXplUmVjdXJzaXZlKGNvbGxlY3Rpb24sIHByaW1hcnlLZXksIGNoaWxkRGF0YUtleSwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGZsYXREYXRhLCAwLCB0cmVlR3JpZFJlY29yZHNNYXApO1xuICAgICAgICB9IGVsc2UgaWYgKHByaW1hcnlLZXkpIHtcbiAgICAgICAgICAgIGhpZXJhcmNoaWNhbFJlY29yZHMgPSB0aGlzLmhpZXJhcmNoaXplRmxhdERhdGEoY29sbGVjdGlvbiwgcHJpbWFyeUtleSwgZm9yZWlnbktleSwgdHJlZUdyaWRSZWNvcmRzTWFwLCBmbGF0RGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWQuZmxhdERhdGEgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQgP1xuICAgICAgICAgICAgZmxhdERhdGEuZmlsdGVyKHJlYyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKHRoaXMuZ2V0Um93SUQocHJpbWFyeUtleSwgcmVjKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFzdGF0ZSB8fCBzdGF0ZS50eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuQUREO1xuICAgICAgICAgICAgfSkgOiBmbGF0RGF0YTtcbiAgICAgICAgdGhpcy5ncmlkLnJlY29yZHMgPSB0cmVlR3JpZFJlY29yZHNNYXA7XG4gICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3JkcyA9IGhpZXJhcmNoaWNhbFJlY29yZHM7XG4gICAgICAgIHJldHVybiBoaWVyYXJjaGljYWxSZWNvcmRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Um93SUQocHJpbWFyeUtleTogYW55LCByb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHByaW1hcnlLZXkgPyByb3dEYXRhW3ByaW1hcnlLZXldIDogcm93RGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZXJhcmNoaXplRmxhdERhdGEoY29sbGVjdGlvbjogYW55W10sIHByaW1hcnlLZXk6IHN0cmluZywgZm9yZWlnbktleTogc3RyaW5nLFxuICAgICAgICBtYXA6IE1hcDxhbnksIElUcmVlR3JpZFJlY29yZD4sIGZsYXREYXRhOiBhbnlbXSk6XG4gICAgICAgIElUcmVlR3JpZFJlY29yZFtdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBJVHJlZUdyaWRSZWNvcmRbXSA9IFtdO1xuICAgICAgICBjb25zdCBtaXNzaW5nUGFyZW50UmVjb3JkczogSVRyZWVHcmlkUmVjb3JkW10gPSBbXTtcbiAgICAgICAgY29sbGVjdGlvbi5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWNvcmQ6IElUcmVlR3JpZFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBrZXk6IHRoaXMuZ2V0Um93SUQocHJpbWFyeUtleSwgcm93KSxcbiAgICAgICAgICAgICAgICBkYXRhOiByb3csXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gbWFwLmdldChyb3dbZm9yZWlnbktleV0pO1xuICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgIHJlY29yZC5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2gocmVjb3JkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWlzc2luZ1BhcmVudFJlY29yZHMucHVzaChyZWNvcmQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtYXAuc2V0KHJvd1twcmltYXJ5S2V5XSwgcmVjb3JkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbWlzc2luZ1BhcmVudFJlY29yZHMuZm9yRWFjaChyZWNvcmQgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gbWFwLmdldChyZWNvcmQuZGF0YVtmb3JlaWduS2V5XSk7XG4gICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgcmVjb3JkLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChyZWNvcmQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChyZWNvcmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNldEluZGVudGF0aW9uTGV2ZWxzKHJlc3VsdCwgMCwgZmxhdERhdGEpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJbmRlbnRhdGlvbkxldmVscyhjb2xsZWN0aW9uOiBJVHJlZUdyaWRSZWNvcmRbXSwgaW5kZW50YXRpb25MZXZlbDogbnVtYmVyLCBmbGF0RGF0YTogYW55W10pIHtcbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgY29sbGVjdGlvbikge1xuICAgICAgICAgICAgcmVjb3JkLmxldmVsID0gaW5kZW50YXRpb25MZXZlbDtcbiAgICAgICAgICAgIHJlY29yZC5leHBhbmRlZCA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHJlY29yZCk7XG4gICAgICAgICAgICBmbGF0RGF0YS5wdXNoKHJlY29yZC5kYXRhKTtcblxuICAgICAgICAgICAgaWYgKHJlY29yZC5jaGlsZHJlbiAmJiByZWNvcmQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5kZW50YXRpb25MZXZlbHMocmVjb3JkLmNoaWxkcmVuLCBpbmRlbnRhdGlvbkxldmVsICsgMSwgZmxhdERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWVyYXJjaGl6ZVJlY3Vyc2l2ZShjb2xsZWN0aW9uOiBhbnlbXSwgcHJpbWFyeUtleTogc3RyaW5nLCBjaGlsZERhdGFLZXk6IHN0cmluZyxcbiAgICAgICAgcGFyZW50OiBJVHJlZUdyaWRSZWNvcmQsIGZsYXREYXRhOiBhbnlbXSwgaW5kZW50YXRpb25MZXZlbDogbnVtYmVyLCBtYXA6IE1hcDxhbnksIElUcmVlR3JpZFJlY29yZD4pOiBJVHJlZUdyaWRSZWNvcmRbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogSVRyZWVHcmlkUmVjb3JkW10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY29sbGVjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkOiBJVHJlZUdyaWRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAga2V5OiB0aGlzLmdldFJvd0lEKHByaW1hcnlLZXksIGl0ZW0pLFxuICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICAgICAgcGFyZW50LFxuICAgICAgICAgICAgICAgIGxldmVsOiBpbmRlbnRhdGlvbkxldmVsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVjb3JkLmV4cGFuZGVkID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUocmVjb3JkKTtcbiAgICAgICAgICAgIGZsYXREYXRhLnB1c2goaXRlbSk7XG4gICAgICAgICAgICBtYXAuc2V0KHJlY29yZC5rZXksIHJlY29yZCk7XG4gICAgICAgICAgICByZWNvcmQuY2hpbGRyZW4gPSBpdGVtW2NoaWxkRGF0YUtleV0gP1xuICAgICAgICAgICAgICAgIHRoaXMuaGllcmFyY2hpemVSZWN1cnNpdmUoaXRlbVtjaGlsZERhdGFLZXldLCBwcmltYXJ5S2V5LCBjaGlsZERhdGFLZXksIHJlY29yZCwgZmxhdERhdGEsIGluZGVudGF0aW9uTGV2ZWwgKyAxLCBtYXApIDpcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXN1bHQucHVzaChyZWNvcmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5AUGlwZSh7IG5hbWU6ICd0cmVlR3JpZEZsYXR0ZW5pbmcnIH0pXG5leHBvcnQgY2xhc3MgSWd4VHJlZUdyaWRGbGF0dGVuaW5nUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChJR1hfR1JJRF9CQVNFKSBwcml2YXRlIGdyaWQ6IEdyaWRUeXBlKSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oY29sbGVjdGlvbjogSVRyZWVHcmlkUmVjb3JkW10sXG4gICAgICAgIGV4cGFuZGVkTGV2ZWxzOiBudW1iZXIsIGV4cGFuZGVkU3RhdGVzOiBNYXA8YW55LCBib29sZWFuPiwgXzogbnVtYmVyKTogYW55W10ge1xuXG4gICAgICAgIGNvbnN0IGRhdGE6IElUcmVlR3JpZFJlY29yZFtdID0gW107XG5cbiAgICAgICAgdGhpcy5ncmlkLnByb2Nlc3NlZFJvb3RSZWNvcmRzID0gY29sbGVjdGlvbjtcbiAgICAgICAgdGhpcy5ncmlkLnByb2Nlc3NlZFJlY29yZHMgPSBuZXcgTWFwPGFueSwgSVRyZWVHcmlkUmVjb3JkPigpO1xuXG4gICAgICAgIHRoaXMuZ2V0RmxhdERhdGFSZWN1cnNpdmUoY29sbGVjdGlvbiwgZGF0YSwgZXhwYW5kZWRMZXZlbHMsIGV4cGFuZGVkU3RhdGVzLCB0cnVlKTtcblxuICAgICAgICB0aGlzLmdyaWQucHJvY2Vzc2VkRXhwYW5kZWRGbGF0RGF0YSA9IGRhdGEubWFwKHIgPT4gci5kYXRhKTtcblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZsYXREYXRhUmVjdXJzaXZlKGNvbGxlY3Rpb246IElUcmVlR3JpZFJlY29yZFtdLCBkYXRhOiBJVHJlZUdyaWRSZWNvcmRbXSxcbiAgICAgICAgZXhwYW5kZWRMZXZlbHM6IG51bWJlciwgZXhwYW5kZWRTdGF0ZXM6IE1hcDxhbnksIGJvb2xlYW4+LCBwYXJlbnRFeHBhbmRlZDogYm9vbGVhbikge1xuICAgICAgICBpZiAoIWNvbGxlY3Rpb24gfHwgIWNvbGxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGhpZXJhcmNoaWNhbFJlY29yZCBvZiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAocGFyZW50RXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICBkYXRhLnB1c2goaGllcmFyY2hpY2FsUmVjb3JkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaGllcmFyY2hpY2FsUmVjb3JkLmV4cGFuZGVkID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUoaGllcmFyY2hpY2FsUmVjb3JkKTtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVOb25Qcm9jZXNzZWRSZWNvcmRFeHBhbnNpb24odGhpcy5ncmlkLCBoaWVyYXJjaGljYWxSZWNvcmQpO1xuXG4gICAgICAgICAgICB0aGlzLmdyaWQucHJvY2Vzc2VkUmVjb3Jkcy5zZXQoaGllcmFyY2hpY2FsUmVjb3JkLmtleSwgaGllcmFyY2hpY2FsUmVjb3JkKTtcblxuICAgICAgICAgICAgdGhpcy5nZXRGbGF0RGF0YVJlY3Vyc2l2ZShoaWVyYXJjaGljYWxSZWNvcmQuY2hpbGRyZW4sIGRhdGEsIGV4cGFuZGVkTGV2ZWxzLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkU3RhdGVzLCBwYXJlbnRFeHBhbmRlZCAmJiBoaWVyYXJjaGljYWxSZWNvcmQuZXhwYW5kZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVOb25Qcm9jZXNzZWRSZWNvcmRFeHBhbnNpb24oZ3JpZDogR3JpZFR5cGUsIHJlY29yZDogSVRyZWVHcmlkUmVjb3JkKSB7XG4gICAgICAgIGNvbnN0IHJlYyA9IGdyaWQucmVjb3Jkcy5nZXQocmVjb3JkLmtleSk7XG4gICAgICAgIHJlYy5leHBhbmRlZCA9IHJlY29yZC5leHBhbmRlZDtcbiAgICB9XG59XG5cbi8qKiBAaGlkZGVuICovXG5AUGlwZSh7IG5hbWU6ICd0cmVlR3JpZFNvcnRpbmcnIH0pXG5leHBvcnQgY2xhc3MgSWd4VHJlZUdyaWRTb3J0aW5nUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChJR1hfR1JJRF9CQVNFKSBwcml2YXRlIGdyaWQ6IEdyaWRUeXBlKSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oXG4gICAgICAgIGhpZXJhcmNoaWNhbERhdGE6IElUcmVlR3JpZFJlY29yZFtdLFxuICAgICAgICBzb3J0RXhwcmVzc2lvbnM6IElTb3J0aW5nRXhwcmVzc2lvbltdLFxuICAgICAgICBncm91cEV4cHJlc3Npb25zOiBJR3JvdXBpbmdFeHByZXNzaW9uW10sXG4gICAgICAgIHNvcnRpbmc6IElHcmlkU29ydGluZ1N0cmF0ZWd5LFxuICAgICAgICBfOiBudW1iZXIsXG4gICAgICAgIHBpbm5lZD86IGJvb2xlYW4pOiBJVHJlZUdyaWRSZWNvcmRbXSB7XG5cbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBncm91cEV4cHJlc3Npb25zID8gZ3JvdXBFeHByZXNzaW9ucy5jb25jYXQoc29ydEV4cHJlc3Npb25zKSA6IHNvcnRFeHByZXNzaW9ucztcbiAgICAgICAgbGV0IHJlc3VsdDogSVRyZWVHcmlkUmVjb3JkW107XG4gICAgICAgIGlmICghZXhwcmVzc2lvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBoaWVyYXJjaGljYWxEYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gRGF0YVV0aWwudHJlZUdyaWRTb3J0KGhpZXJhcmNoaWNhbERhdGEsIGV4cHJlc3Npb25zLCBzb3J0aW5nLCBudWxsLCB0aGlzLmdyaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyZWRTb3J0ZWREYXRhID0gW107XG4gICAgICAgIHRoaXMuZmxhdHRlblRyZWVHcmlkUmVjb3JkcyhyZXN1bHQsIGZpbHRlcmVkU29ydGVkRGF0YSk7XG4gICAgICAgIHRoaXMuZ3JpZC5zZXRGaWx0ZXJlZFNvcnRlZERhdGEoZmlsdGVyZWRTb3J0ZWREYXRhLCBwaW5uZWQpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmbGF0dGVuVHJlZUdyaWRSZWNvcmRzKHJlY29yZHM6IElUcmVlR3JpZFJlY29yZFtdLCBmbGF0RGF0YTogYW55W10pIHtcbiAgICAgICAgaWYgKHJlY29yZHMgJiYgcmVjb3Jkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgICAgICAgICAgICBmbGF0RGF0YS5wdXNoKHJlY29yZC5kYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXR0ZW5UcmVlR3JpZFJlY29yZHMocmVjb3JkLmNoaWxkcmVuLCBmbGF0RGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKiBAaGlkZGVuICovXG5AUGlwZSh7IG5hbWU6ICd0cmVlR3JpZFBhZ2luZycgfSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlR3JpZFBhZ2luZ1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSUdYX0dSSURfQkFTRSkgcHJpdmF0ZSBncmlkOiBHcmlkVHlwZSkgeyB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKGNvbGxlY3Rpb246IElUcmVlR3JpZFJlY29yZFtdLCBwYWdlID0gMCwgcGVyUGFnZSA9IDE1LCBfOiBudW1iZXIpOiBJVHJlZUdyaWRSZWNvcmRbXSB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLnBhZ2luYXRvciB8fCB0aGlzLmdyaWQucGFnaW5nTW9kZSAhPT0gR3JpZFBhZ2luZ01vZGUuTG9jYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5ncmlkLl90b3RhbFJlY29yZHMgPj0gMCA/IHRoaXMuZ3JpZC5fdG90YWxSZWNvcmRzIDogY29sbGVjdGlvbi5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHRvdGFsUGFnZXMgPSBNYXRoLmNlaWwobGVuIC8gcGVyUGFnZSk7XG5cbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgICAgICBpbmRleDogKHRvdGFsUGFnZXMgPiAwICYmIHBhZ2UgPj0gdG90YWxQYWdlcykgPyB0b3RhbFBhZ2VzIC0gMSA6IHBhZ2UsXG4gICAgICAgICAgICByZWNvcmRzUGVyUGFnZTogcGVyUGFnZVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdDogSVRyZWVHcmlkUmVjb3JkW10gPSBEYXRhVXRpbC5wYWdlKGNsb25lQXJyYXkoY29sbGVjdGlvbiksIHN0YXRlLCBsZW4pO1xuICAgICAgICB0aGlzLmdyaWQucGFnaW5nU3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdGhpcy5ncmlkLnBhZ2luYXRvci5wYWdlID0gc3RhdGUuaW5kZXg7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vKiogQGhpZGRlbiAqL1xuQFBpcGUoeyBuYW1lOiAndHJlZUdyaWRUcmFuc2FjdGlvbicgfSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlR3JpZFRyYW5zYWN0aW9uUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KElHWF9HUklEX0JBU0UpIHByaXZhdGUgZ3JpZDogR3JpZFR5cGUpIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShjb2xsZWN0aW9uOiBhbnlbXSwgXzogbnVtYmVyKTogYW55W10ge1xuXG4gICAgICAgIGlmICh0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGFnZ3JlZ2F0ZWRDaGFuZ2VzID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkQ2hhbmdlcyh0cnVlKTtcbiAgICAgICAgICAgIGlmIChhZ2dyZWdhdGVkQ2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJpbWFyeUtleSA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5O1xuICAgICAgICAgICAgICAgIGlmICghcHJpbWFyeUtleSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZERhdGFLZXkgPSB0aGlzLmdyaWQuY2hpbGREYXRhS2V5O1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkRGF0YUtleSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWVyYXJjaGljYWxEYXRhQ2xvbmUgPSBjbG9uZUhpZXJhcmNoaWNhbEFycmF5KGNvbGxlY3Rpb24sIGNoaWxkRGF0YUtleSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBEYXRhVXRpbC5tZXJnZUhpZXJhcmNoaWNhbFRyYW5zYWN0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbERhdGFDbG9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRDaGFuZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGREYXRhS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnByaW1hcnlLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZGF0YUNsb25lU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmbGF0RGF0YUNsb25lID0gY2xvbmVBcnJheShjb2xsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERhdGFVdGlsLm1lcmdlVHJhbnNhY3Rpb25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmxhdERhdGFDbG9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRDaGFuZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnByaW1hcnlLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZGF0YUNsb25lU3RyYXRlZ3kpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICB9XG59XG5cbi8qKlxuICogVGhpcyBwaXBlIG1hcHMgdGhlIG9yaWdpbmFsIHJlY29yZCB0byBJVHJlZUdyaWRSZWNvcmQgZm9ybWF0IHVzZWQgaW4gVHJlZUdyaWQuXG4gKi9cbkBQaXBlKHsgbmFtZTogJ3RyZWVHcmlkTm9ybWFsaXplUmVjb3JkJyB9KVxuZXhwb3J0IGNsYXNzIElneFRyZWVHcmlkTm9ybWFsaXplUmVjb3Jkc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSUdYX0dSSURfQkFTRSkgcHJpdmF0ZSBncmlkOiBHcmlkVHlwZSkgeyB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKF86IGFueVtdLCBfXzogbnVtYmVyKTogYW55W10ge1xuICAgICAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5ncmlkLnByaW1hcnlLZXk7XG4gICAgICAgIC8vIHVzaW5nIGZsYXR0ZW5lZCBkYXRhIGJlY2F1c2Ugb3JpZ2luIGRhdGEgbWF5IGJlIGhpZXJhcmNoaWNhbC5cbiAgICAgICAgY29uc3QgZmxhdERhdGEgPSB0aGlzLmdyaWQuZmxhdERhdGE7XG4gICAgICAgIGNvbnN0IHJlcyA9IGZsYXREYXRhLm1hcChyZWMgPT5cbiAgICAgICAgKHtcbiAgICAgICAgICAgIHJvd0lEOiB0aGlzLmdyaWQucHJpbWFyeUtleSA/IHJlY1twcmltYXJ5S2V5XSA6IHJlYyxcbiAgICAgICAgICAgIGRhdGE6IHJlYyxcbiAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG5cbkBQaXBlKHsgbmFtZTogJ3RyZWVHcmlkQWRkUm93JyB9KVxuZXhwb3J0IGNsYXNzIElneFRyZWVHcmlkQWRkUm93UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChJR1hfR1JJRF9CQVNFKSBwcml2YXRlIGdyaWQ6IEdyaWRUeXBlKSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oY29sbGVjdGlvbjogYW55LCBpc1Bpbm5lZCA9IGZhbHNlLCBfcGlwZVRyaWdnZXI6IG51bWJlcikge1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5yb3dFZGl0YWJsZSB8fCAhdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvdyB8fCB0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93LmdldENsYXNzTmFtZSgpICE9PSBJZ3hBZGRSb3cubmFtZSB8fFxuICAgICAgICAgICAgIXRoaXMuZ3JpZC5ncmlkQVBJLmNydWRTZXJ2aWNlLmFkZFJvd1BhcmVudCB8fCBpc1Bpbm5lZCAhPT0gdGhpcy5ncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2UuYWRkUm93UGFyZW50LmlzUGlubmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb3B5ID0gY29sbGVjdGlvbi5zbGljZSgwKTtcbiAgICAgICAgY29uc3QgcmVjID0gKHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3cgYXMgSWd4QWRkUm93KS5yZWNvcmRSZWY7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuYWRkUm93UGFyZW50LmlzUGlubmVkKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRSb3dJbmRleCA9IGNvcHkuZmluZEluZGV4KHJlY29yZCA9PiByZWNvcmQucm93SUQgPT09IHRoaXMuZ3JpZC5jcnVkU2VydmljZS5hZGRSb3dQYXJlbnQucm93SUQpO1xuICAgICAgICAgICAgY29weS5zcGxpY2UocGFyZW50Um93SW5kZXggKyAxLCAwLCByZWMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29weS5zcGxpY2UodGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvdy5pbmRleCwgMCwgcmVjKTsgICAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQucmVjb3Jkcy5zZXQocmVjLmtleSwgcmVjKTtcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxufVxuIl19
|
|
321
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ncmlkLnBpcGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL3RyZWUtZ3JpZC90cmVlLWdyaWQucGlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFM0QsT0FBTyxFQUFZLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQUtuRDs7R0FFRztBQUVILE1BQU0sT0FBTyw0QkFBNEI7SUFFckMsWUFBMkMsSUFBYztRQUFkLFNBQUksR0FBSixJQUFJLENBQVU7SUFBSSxDQUFDO0lBRXZELFNBQVMsQ0FBQyxVQUFpQixFQUFFLFVBQWtCLEVBQUUsVUFBa0IsRUFBRSxZQUFvQixFQUFFLENBQVM7UUFDdkcsSUFBSSxtQkFBbUIsR0FBc0IsRUFBRSxDQUFDO1FBQ2hELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFDM0QsTUFBTSxRQUFRLEdBQVUsRUFBRSxDQUFDO1FBRTNCLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztZQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxrQkFB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LENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRTtZQUM3QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0csSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUMzQzthQUFNO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUN4RDtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7O2tIQW5CUSxxQkFBcUIsa0JBRVYsYUFBYTtnSEFGeEIscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBRGpDLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7OzBCQUdmLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVBcnJheSwgY2xvbmVIaWVyYXJjaGljYWxBcnJheSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4vdHJlZS1ncmlkLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgR3JpZFR5cGUsIElHWF9HUklEX0JBU0UgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR3JpZFBhZ2luZ01vZGUgfSBmcm9tICcuLi9jb21tb24vZW51bXMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hBZGRSb3cgfSBmcm9tICcuLi9jb21tb24vY3J1ZC5zZXJ2aWNlJztcbmltcG9ydCB7IElTb3J0aW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IElHcmlkU29ydGluZ1N0cmF0ZWd5IH0gZnJvbSAnLi4vY29tbW9uL3N0cmF0ZWd5JztcbmltcG9ydCB7IElHcm91cGluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQFBpcGUoeyBuYW1lOiAndHJlZUdyaWRIaWVyYXJjaGl6aW5nJyB9KVxuZXhwb3J0IGNsYXNzIElneFRyZWVHcmlkSGllcmFyY2hpemluZ1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSUdYX0dSSURfQkFTRSkgcHJpdmF0ZSBncmlkOiBHcmlkVHlwZSkgeyB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKGNvbGxlY3Rpb246IGFueVtdLCBwcmltYXJ5S2V5OiBzdHJpbmcsIGZvcmVpZ25LZXk6IHN0cmluZywgY2hpbGREYXRhS2V5OiBzdHJpbmcsIF86IG51bWJlcik6IElUcmVlR3JpZFJlY29yZFtdIHtcbiAgICAgICAgbGV0IGhpZXJhcmNoaWNhbFJlY29yZHM6IElUcmVlR3JpZFJlY29yZFtdID0gW107XG4gICAgICAgIGNvbnN0IHRyZWVHcmlkUmVjb3Jkc01hcCA9IG5ldyBNYXA8YW55LCBJVHJlZUdyaWRSZWNvcmQ+KCk7XG4gICAgICAgIGNvbnN0IGZsYXREYXRhOiBhbnlbXSA9IFtdO1xuXG4gICAgICAgIGlmICghY29sbGVjdGlvbiB8fCAhY29sbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5mbGF0RGF0YSA9IGNvbGxlY3Rpb247XG4gICAgICAgICAgICB0aGlzLmdyaWQucmVjb3JkcyA9IHRyZWVHcmlkUmVjb3Jkc01hcDtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3JkcyA9IGNvbGxlY3Rpb247XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZERhdGFLZXkpIHtcbiAgICAgICAgICAgIGhpZXJhcmNoaWNhbFJlY29yZHMgPSB0aGlzLmhpZXJhcmNoaXplUmVjdXJzaXZlKGNvbGxlY3Rpb24sIHByaW1hcnlLZXksIGNoaWxkRGF0YUtleSwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGZsYXREYXRhLCAwLCB0cmVlR3JpZFJlY29yZHNNYXApO1xuICAgICAgICB9IGVsc2UgaWYgKHByaW1hcnlLZXkpIHtcbiAgICAgICAgICAgIGhpZXJhcmNoaWNhbFJlY29yZHMgPSB0aGlzLmhpZXJhcmNoaXplRmxhdERhdGEoY29sbGVjdGlvbiwgcHJpbWFyeUtleSwgZm9yZWlnbktleSwgdHJlZUdyaWRSZWNvcmRzTWFwLCBmbGF0RGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWQuZmxhdERhdGEgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQgP1xuICAgICAgICAgICAgZmxhdERhdGEuZmlsdGVyKHJlYyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKHRoaXMuZ2V0Um93SUQocHJpbWFyeUtleSwgcmVjKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFzdGF0ZSB8fCBzdGF0ZS50eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuQUREO1xuICAgICAgICAgICAgfSkgOiBmbGF0RGF0YTtcbiAgICAgICAgdGhpcy5ncmlkLnJlY29yZHMgPSB0cmVlR3JpZFJlY29yZHNNYXA7XG4gICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3JkcyA9IGhpZXJhcmNoaWNhbFJlY29yZHM7XG4gICAgICAgIHJldHVybiBoaWVyYXJjaGljYWxSZWNvcmRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Um93SUQocHJpbWFyeUtleTogYW55LCByb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHByaW1hcnlLZXkgPyByb3dEYXRhW3ByaW1hcnlLZXldIDogcm93RGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZXJhcmNoaXplRmxhdERhdGEoY29sbGVjdGlvbjogYW55W10sIHByaW1hcnlLZXk6IHN0cmluZywgZm9yZWlnbktleTogc3RyaW5nLFxuICAgICAgICBtYXA6IE1hcDxhbnksIElUcmVlR3JpZFJlY29yZD4sIGZsYXREYXRhOiBhbnlbXSk6XG4gICAgICAgIElUcmVlR3JpZFJlY29yZFtdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBJVHJlZUdyaWRSZWNvcmRbXSA9IFtdO1xuICAgICAgICBjb25zdCBtaXNzaW5nUGFyZW50UmVjb3JkczogSVRyZWVHcmlkUmVjb3JkW10gPSBbXTtcbiAgICAgICAgY29sbGVjdGlvbi5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWNvcmQ6IElUcmVlR3JpZFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBrZXk6IHRoaXMuZ2V0Um93SUQocHJpbWFyeUtleSwgcm93KSxcbiAgICAgICAgICAgICAgICBkYXRhOiByb3csXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gbWFwLmdldChyb3dbZm9yZWlnbktleV0pO1xuICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgIHJlY29yZC5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2gocmVjb3JkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWlzc2luZ1BhcmVudFJlY29yZHMucHVzaChyZWNvcmQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtYXAuc2V0KHJvd1twcmltYXJ5S2V5XSwgcmVjb3JkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbWlzc2luZ1BhcmVudFJlY29yZHMuZm9yRWFjaChyZWNvcmQgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gbWFwLmdldChyZWNvcmQuZGF0YVtmb3JlaWduS2V5XSk7XG4gICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgcmVjb3JkLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChyZWNvcmQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChyZWNvcmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNldEluZGVudGF0aW9uTGV2ZWxzKHJlc3VsdCwgMCwgZmxhdERhdGEpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJbmRlbnRhdGlvbkxldmVscyhjb2xsZWN0aW9uOiBJVHJlZUdyaWRSZWNvcmRbXSwgaW5kZW50YXRpb25MZXZlbDogbnVtYmVyLCBmbGF0RGF0YTogYW55W10pIHtcbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgY29sbGVjdGlvbikge1xuICAgICAgICAgICAgcmVjb3JkLmxldmVsID0gaW5kZW50YXRpb25MZXZlbDtcbiAgICAgICAgICAgIHJlY29yZC5leHBhbmRlZCA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHJlY29yZCk7XG4gICAgICAgICAgICBmbGF0RGF0YS5wdXNoKHJlY29yZC5kYXRhKTtcblxuICAgICAgICAgICAgaWYgKHJlY29yZC5jaGlsZHJlbiAmJiByZWNvcmQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5kZW50YXRpb25MZXZlbHMocmVjb3JkLmNoaWxkcmVuLCBpbmRlbnRhdGlvbkxldmVsICsgMSwgZmxhdERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWVyYXJjaGl6ZVJlY3Vyc2l2ZShjb2xsZWN0aW9uOiBhbnlbXSwgcHJpbWFyeUtleTogc3RyaW5nLCBjaGlsZERhdGFLZXk6IHN0cmluZyxcbiAgICAgICAgcGFyZW50OiBJVHJlZUdyaWRSZWNvcmQsIGZsYXREYXRhOiBhbnlbXSwgaW5kZW50YXRpb25MZXZlbDogbnVtYmVyLCBtYXA6IE1hcDxhbnksIElUcmVlR3JpZFJlY29yZD4pOiBJVHJlZUdyaWRSZWNvcmRbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogSVRyZWVHcmlkUmVjb3JkW10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY29sbGVjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkOiBJVHJlZUdyaWRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAga2V5OiB0aGlzLmdldFJvd0lEKHByaW1hcnlLZXksIGl0ZW0pLFxuICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICAgICAgcGFyZW50LFxuICAgICAgICAgICAgICAgIGxldmVsOiBpbmRlbnRhdGlvbkxldmVsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVjb3JkLmV4cGFuZGVkID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUocmVjb3JkKTtcbiAgICAgICAgICAgIGZsYXREYXRhLnB1c2goaXRlbSk7XG4gICAgICAgICAgICBtYXAuc2V0KHJlY29yZC5rZXksIHJlY29yZCk7XG4gICAgICAgICAgICByZWNvcmQuY2hpbGRyZW4gPSBpdGVtW2NoaWxkRGF0YUtleV0gP1xuICAgICAgICAgICAgICAgIHRoaXMuaGllcmFyY2hpemVSZWN1cnNpdmUoaXRlbVtjaGlsZERhdGFLZXldLCBwcmltYXJ5S2V5LCBjaGlsZERhdGFLZXksIHJlY29yZCwgZmxhdERhdGEsIGluZGVudGF0aW9uTGV2ZWwgKyAxLCBtYXApIDpcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXN1bHQucHVzaChyZWNvcmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5AUGlwZSh7IG5hbWU6ICd0cmVlR3JpZEZsYXR0ZW5pbmcnIH0pXG5leHBvcnQgY2xhc3MgSWd4VHJlZUdyaWRGbGF0dGVuaW5nUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChJR1hfR1JJRF9CQVNFKSBwcml2YXRlIGdyaWQ6IEdyaWRUeXBlKSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oY29sbGVjdGlvbjogSVRyZWVHcmlkUmVjb3JkW10sXG4gICAgICAgIGV4cGFuZGVkTGV2ZWxzOiBudW1iZXIsIGV4cGFuZGVkU3RhdGVzOiBNYXA8YW55LCBib29sZWFuPiwgXzogbnVtYmVyKTogYW55W10ge1xuXG4gICAgICAgIGNvbnN0IGRhdGE6IElUcmVlR3JpZFJlY29yZFtdID0gW107XG5cbiAgICAgICAgdGhpcy5ncmlkLnByb2Nlc3NlZFJvb3RSZWNvcmRzID0gY29sbGVjdGlvbjtcbiAgICAgICAgdGhpcy5ncmlkLnByb2Nlc3NlZFJlY29yZHMgPSBuZXcgTWFwPGFueSwgSVRyZWVHcmlkUmVjb3JkPigpO1xuXG4gICAgICAgIHRoaXMuZ2V0RmxhdERhdGFSZWN1cnNpdmUoY29sbGVjdGlvbiwgZGF0YSwgZXhwYW5kZWRMZXZlbHMsIGV4cGFuZGVkU3RhdGVzLCB0cnVlKTtcblxuICAgICAgICB0aGlzLmdyaWQucHJvY2Vzc2VkRXhwYW5kZWRGbGF0RGF0YSA9IGRhdGEubWFwKHIgPT4gci5kYXRhKTtcblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZsYXREYXRhUmVjdXJzaXZlKGNvbGxlY3Rpb246IElUcmVlR3JpZFJlY29yZFtdLCBkYXRhOiBJVHJlZUdyaWRSZWNvcmRbXSxcbiAgICAgICAgZXhwYW5kZWRMZXZlbHM6IG51bWJlciwgZXhwYW5kZWRTdGF0ZXM6IE1hcDxhbnksIGJvb2xlYW4+LCBwYXJlbnRFeHBhbmRlZDogYm9vbGVhbikge1xuICAgICAgICBpZiAoIWNvbGxlY3Rpb24gfHwgIWNvbGxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGhpZXJhcmNoaWNhbFJlY29yZCBvZiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAocGFyZW50RXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICBkYXRhLnB1c2goaGllcmFyY2hpY2FsUmVjb3JkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaGllcmFyY2hpY2FsUmVjb3JkLmV4cGFuZGVkID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUoaGllcmFyY2hpY2FsUmVjb3JkKTtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVOb25Qcm9jZXNzZWRSZWNvcmRFeHBhbnNpb24odGhpcy5ncmlkLCBoaWVyYXJjaGljYWxSZWNvcmQpO1xuXG4gICAgICAgICAgICB0aGlzLmdyaWQucHJvY2Vzc2VkUmVjb3Jkcy5zZXQoaGllcmFyY2hpY2FsUmVjb3JkLmtleSwgaGllcmFyY2hpY2FsUmVjb3JkKTtcblxuICAgICAgICAgICAgdGhpcy5nZXRGbGF0RGF0YVJlY3Vyc2l2ZShoaWVyYXJjaGljYWxSZWNvcmQuY2hpbGRyZW4sIGRhdGEsIGV4cGFuZGVkTGV2ZWxzLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkU3RhdGVzLCBwYXJlbnRFeHBhbmRlZCAmJiBoaWVyYXJjaGljYWxSZWNvcmQuZXhwYW5kZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVOb25Qcm9jZXNzZWRSZWNvcmRFeHBhbnNpb24oZ3JpZDogR3JpZFR5cGUsIHJlY29yZDogSVRyZWVHcmlkUmVjb3JkKSB7XG4gICAgICAgIGNvbnN0IHJlYyA9IGdyaWQucmVjb3Jkcy5nZXQocmVjb3JkLmtleSk7XG4gICAgICAgIHJlYy5leHBhbmRlZCA9IHJlY29yZC5leHBhbmRlZDtcbiAgICB9XG59XG5cbi8qKiBAaGlkZGVuICovXG5AUGlwZSh7IG5hbWU6ICd0cmVlR3JpZFNvcnRpbmcnIH0pXG5leHBvcnQgY2xhc3MgSWd4VHJlZUdyaWRTb3J0aW5nUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChJR1hfR1JJRF9CQVNFKSBwcml2YXRlIGdyaWQ6IEdyaWRUeXBlKSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oXG4gICAgICAgIGhpZXJhcmNoaWNhbERhdGE6IElUcmVlR3JpZFJlY29yZFtdLFxuICAgICAgICBzb3J0RXhwcmVzc2lvbnM6IElTb3J0aW5nRXhwcmVzc2lvbltdLFxuICAgICAgICBncm91cEV4cHJlc3Npb25zOiBJR3JvdXBpbmdFeHByZXNzaW9uW10sXG4gICAgICAgIHNvcnRpbmc6IElHcmlkU29ydGluZ1N0cmF0ZWd5LFxuICAgICAgICBfOiBudW1iZXIsXG4gICAgICAgIHBpbm5lZD86IGJvb2xlYW4pOiBJVHJlZUdyaWRSZWNvcmRbXSB7XG5cbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBncm91cEV4cHJlc3Npb25zID8gZ3JvdXBFeHByZXNzaW9ucy5jb25jYXQoc29ydEV4cHJlc3Npb25zKSA6IHNvcnRFeHByZXNzaW9ucztcbiAgICAgICAgbGV0IHJlc3VsdDogSVRyZWVHcmlkUmVjb3JkW107XG4gICAgICAgIGlmICghZXhwcmVzc2lvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBoaWVyYXJjaGljYWxEYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gRGF0YVV0aWwudHJlZUdyaWRTb3J0KGhpZXJhcmNoaWNhbERhdGEsIGV4cHJlc3Npb25zLCBzb3J0aW5nLCBudWxsLCB0aGlzLmdyaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyZWRTb3J0ZWREYXRhID0gW107XG4gICAgICAgIHRoaXMuZmxhdHRlblRyZWVHcmlkUmVjb3JkcyhyZXN1bHQsIGZpbHRlcmVkU29ydGVkRGF0YSk7XG4gICAgICAgIHRoaXMuZ3JpZC5zZXRGaWx0ZXJlZFNvcnRlZERhdGEoZmlsdGVyZWRTb3J0ZWREYXRhLCBwaW5uZWQpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmbGF0dGVuVHJlZUdyaWRSZWNvcmRzKHJlY29yZHM6IElUcmVlR3JpZFJlY29yZFtdLCBmbGF0RGF0YTogYW55W10pIHtcbiAgICAgICAgaWYgKHJlY29yZHMgJiYgcmVjb3Jkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgICAgICAgICAgICBmbGF0RGF0YS5wdXNoKHJlY29yZC5kYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXR0ZW5UcmVlR3JpZFJlY29yZHMocmVjb3JkLmNoaWxkcmVuLCBmbGF0RGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKiBAaGlkZGVuICovXG5AUGlwZSh7IG5hbWU6ICd0cmVlR3JpZFBhZ2luZycgfSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlR3JpZFBhZ2luZ1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSUdYX0dSSURfQkFTRSkgcHJpdmF0ZSBncmlkOiBHcmlkVHlwZSkgeyB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKGNvbGxlY3Rpb246IElUcmVlR3JpZFJlY29yZFtdLCBwYWdlID0gMCwgcGVyUGFnZSA9IDE1LCBfOiBudW1iZXIpOiBJVHJlZUdyaWRSZWNvcmRbXSB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLnBhZ2luYXRvciB8fCB0aGlzLmdyaWQucGFnaW5nTW9kZSAhPT0gR3JpZFBhZ2luZ01vZGUuTG9jYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5ncmlkLl90b3RhbFJlY29yZHMgPj0gMCA/IHRoaXMuZ3JpZC5fdG90YWxSZWNvcmRzIDogY29sbGVjdGlvbi5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHRvdGFsUGFnZXMgPSBNYXRoLmNlaWwobGVuIC8gcGVyUGFnZSk7XG5cbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgICAgICBpbmRleDogKHRvdGFsUGFnZXMgPiAwICYmIHBhZ2UgPj0gdG90YWxQYWdlcykgPyB0b3RhbFBhZ2VzIC0gMSA6IHBhZ2UsXG4gICAgICAgICAgICByZWNvcmRzUGVyUGFnZTogcGVyUGFnZVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdDogSVRyZWVHcmlkUmVjb3JkW10gPSBEYXRhVXRpbC5wYWdlKGNsb25lQXJyYXkoY29sbGVjdGlvbiksIHN0YXRlLCBsZW4pO1xuICAgICAgICB0aGlzLmdyaWQucGFnaW5nU3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdGhpcy5ncmlkLnBhZ2luYXRvci5wYWdlID0gc3RhdGUuaW5kZXg7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vKiogQGhpZGRlbiAqL1xuQFBpcGUoeyBuYW1lOiAndHJlZUdyaWRUcmFuc2FjdGlvbicgfSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlR3JpZFRyYW5zYWN0aW9uUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KElHWF9HUklEX0JBU0UpIHByaXZhdGUgZ3JpZDogR3JpZFR5cGUpIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShjb2xsZWN0aW9uOiBhbnlbXSwgXzogbnVtYmVyKTogYW55W10ge1xuXG4gICAgICAgIGlmICh0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGFnZ3JlZ2F0ZWRDaGFuZ2VzID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkQ2hhbmdlcyh0cnVlKTtcbiAgICAgICAgICAgIGlmIChhZ2dyZWdhdGVkQ2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJpbWFyeUtleSA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5O1xuICAgICAgICAgICAgICAgIGlmICghcHJpbWFyeUtleSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZERhdGFLZXkgPSB0aGlzLmdyaWQuY2hpbGREYXRhS2V5O1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkRGF0YUtleSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWVyYXJjaGljYWxEYXRhQ2xvbmUgPSBjbG9uZUhpZXJhcmNoaWNhbEFycmF5KGNvbGxlY3Rpb24sIGNoaWxkRGF0YUtleSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBEYXRhVXRpbC5tZXJnZUhpZXJhcmNoaWNhbFRyYW5zYWN0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbERhdGFDbG9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRDaGFuZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGREYXRhS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnByaW1hcnlLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZGF0YUNsb25lU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmbGF0RGF0YUNsb25lID0gY2xvbmVBcnJheShjb2xsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERhdGFVdGlsLm1lcmdlVHJhbnNhY3Rpb25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmxhdERhdGFDbG9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRDaGFuZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnByaW1hcnlLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZGF0YUNsb25lU3RyYXRlZ3kpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICB9XG59XG5cbi8qKlxuICogVGhpcyBwaXBlIG1hcHMgdGhlIG9yaWdpbmFsIHJlY29yZCB0byBJVHJlZUdyaWRSZWNvcmQgZm9ybWF0IHVzZWQgaW4gVHJlZUdyaWQuXG4gKi9cbkBQaXBlKHsgbmFtZTogJ3RyZWVHcmlkTm9ybWFsaXplUmVjb3JkJyB9KVxuZXhwb3J0IGNsYXNzIElneFRyZWVHcmlkTm9ybWFsaXplUmVjb3Jkc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSUdYX0dSSURfQkFTRSkgcHJpdmF0ZSBncmlkOiBHcmlkVHlwZSkgeyB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKF86IGFueVtdLCBfXzogbnVtYmVyKTogYW55W10ge1xuICAgICAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5ncmlkLnByaW1hcnlLZXk7XG4gICAgICAgIC8vIHVzaW5nIGZsYXR0ZW5lZCBkYXRhIGJlY2F1c2Ugb3JpZ2luIGRhdGEgbWF5IGJlIGhpZXJhcmNoaWNhbC5cbiAgICAgICAgY29uc3QgZmxhdERhdGEgPSB0aGlzLmdyaWQuZmxhdERhdGE7XG4gICAgICAgIGNvbnN0IHJlcyA9IGZsYXREYXRhLm1hcChyZWMgPT5cbiAgICAgICAgKHtcbiAgICAgICAgICAgIHJvd0lEOiB0aGlzLmdyaWQucHJpbWFyeUtleSA/IHJlY1twcmltYXJ5S2V5XSA6IHJlYyxcbiAgICAgICAgICAgIGRhdGE6IHJlYyxcbiAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG5cbkBQaXBlKHsgbmFtZTogJ3RyZWVHcmlkQWRkUm93JyB9KVxuZXhwb3J0IGNsYXNzIElneFRyZWVHcmlkQWRkUm93UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChJR1hfR1JJRF9CQVNFKSBwcml2YXRlIGdyaWQ6IEdyaWRUeXBlKSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oY29sbGVjdGlvbjogYW55LCBpc1Bpbm5lZCA9IGZhbHNlLCBfcGlwZVRyaWdnZXI6IG51bWJlcikge1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5yb3dFZGl0YWJsZSB8fCAhdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvdyB8fCB0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93LmdldENsYXNzTmFtZSgpICE9PSBJZ3hBZGRSb3cubmFtZSB8fFxuICAgICAgICAgICAgIXRoaXMuZ3JpZC5ncmlkQVBJLmNydWRTZXJ2aWNlLmFkZFJvd1BhcmVudCB8fCBpc1Bpbm5lZCAhPT0gdGhpcy5ncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2UuYWRkUm93UGFyZW50LmlzUGlubmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb3B5ID0gY29sbGVjdGlvbi5zbGljZSgwKTtcbiAgICAgICAgY29uc3QgcmVjID0gKHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3cgYXMgSWd4QWRkUm93KS5yZWNvcmRSZWY7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuYWRkUm93UGFyZW50LmlzUGlubmVkKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRSb3dJbmRleCA9IGNvcHkuZmluZEluZGV4KHJlY29yZCA9PiByZWNvcmQucm93SUQgPT09IHRoaXMuZ3JpZC5jcnVkU2VydmljZS5hZGRSb3dQYXJlbnQucm93SUQpO1xuICAgICAgICAgICAgY29weS5zcGxpY2UocGFyZW50Um93SW5kZXggKyAxLCAwLCByZWMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29weS5zcGxpY2UodGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvdy5pbmRleCwgMCwgcmVjKTsgICAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQucmVjb3Jkcy5zZXQocmVjLmtleSwgcmVjKTtcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxufVxuIl19
|
|
@@ -484,7 +484,7 @@ export class WorksheetFile {
|
|
|
484
484
|
const rowCoordinate = isVertical
|
|
485
485
|
? startValue + owner.maxLevel + 2
|
|
486
486
|
: this.rowIndex;
|
|
487
|
-
const columnValue = dictionary.saveValue(currentCol.header, true);
|
|
487
|
+
const columnValue = dictionary.saveValue(currentCol.header, true, false);
|
|
488
488
|
columnCoordinate = (currentCol.field === GRID_LEVEL_COL
|
|
489
489
|
? ExcelStrings.getExcelColumn(worksheetData.columnCount + 1)
|
|
490
490
|
: ExcelStrings.getExcelColumn(column)) + rowCoordinate;
|
|
@@ -618,4 +618,4 @@ export class WorksheetRelsFile {
|
|
|
618
618
|
folder['sheet1.xml.rels'] = strToU8(ExcelStrings.getWorksheetRels());
|
|
619
619
|
}
|
|
620
620
|
}
|
|
621
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvZXhjZWwvZXhjZWwtZmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQTJDLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUUvSzs7R0FFRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ2QsWUFBWSxDQUFDLE1BQWM7UUFDOUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxPQUFPO0lBQ1QsWUFBWSxDQUFDLE1BQWMsRUFBRSxhQUE0QjtRQUM1RCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQzFGLENBQUM7Q0FDSjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFDVixZQUFZLENBQUMsTUFBYztRQUM5QixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7Q0FDSjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQUNsQixZQUFZLENBQUMsTUFBYyxFQUFF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R0FBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsWUFBWSxJQUFJLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO1NBQzlFO1FBRUQsWUFBWSxJQUFJLGlCQUFpQixDQUFDO1FBRWxDLElBQUksYUFBYSxDQUFDLElBQUksRUFBRTtZQUNwQixNQUFNLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDN0MsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDcEYsTUFBTSxHQUFHLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUN0QyxVQUFVLEdBQUcsc0JBQXNCLFVBQVUsZ0NBQWdDLEdBQUcsVUFBVSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsQ0FBQztTQUMxSDtRQUVELE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDN0gsQ0FBQztDQUNKO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWlCO0lBQ25CLFlBQVksQ0FBQyxNQUFjO1FBQzlCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElFeGNlbEZpbGUgfSBmcm9tICcuL2V4Y2VsLWludGVyZmFjZXMnO1xuaW1wb3J0IHsgRXhjZWxTdHJpbmdzIH0gZnJvbSAnLi9leGNlbC1zdHJpbmdzJztcbmltcG9ydCB7IFdvcmtzaGVldERhdGEgfSBmcm9tICcuL3dvcmtzaGVldC1kYXRhJztcblxuaW1wb3J0IHsgc3RyVG9VOCB9IGZyb20gJ2ZmbGF0ZSc7XG5pbXBvcnQgeyB5aWVsZGluZ0xvb3AgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEhlYWRlclR5cGUsIEV4cG9ydFJlY29yZFR5cGUsIElFeHBvcnRSZWNvcmQsIElDb2x1bW5MaXN0LCBJQ29sdW1uSW5mbywgR1JJRF9ST09UX1NVTU1BUlksIEdSSURfUEFSRU5ULCBHUklEX0xFVkVMX0NPTCB9IGZyb20gJy4uL2V4cG9ydGVyLWNvbW1vbi9iYXNlLWV4cG9ydC1zZXJ2aWNlJztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBSb290UmVsc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0KSB7XG4gICAgICAgIGZvbGRlclsnLnJlbHMnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFJlbHMoKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwcEZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0LCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIGZvbGRlclsnYXBwLnhtbCddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0QXBwKHdvcmtzaGVldERhdGEub3B0aW9ucy53b3Jrc2hlZXROYW1lKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIENvcmVGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCkge1xuICAgICAgICBmb2xkZXJbJ2NvcmUueG1sJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRDb3JlKCkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3JrYm9va1JlbHNGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCwgd29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSkge1xuICAgICAgICBjb25zdCBoYXNTaGFyZWRTdHJpbmdzID0gIXdvcmtzaGVldERhdGEuaXNFbXB0eSB8fCB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuYWx3YXlzRXhwb3J0SGVhZGVycztcbiAgICAgICAgZm9sZGVyWyd3b3JrYm9vay54bWwucmVscyddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0V29ya2Jvb2tSZWxzKGhhc1NoYXJlZFN0cmluZ3MpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgVGhlbWVGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCkge1xuICAgICAgICBmb2xkZXJbJ3RoZW1lMS54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFRoZW1lKCkpO1xuICAgIH1cbn1cblxuaW50ZXJmYWNlIERpbWVuc2lvbnMge1xuICAgIHN0YXJ0Q29vcmRpbmF0ZTogc3RyaW5nXG4gICAgZW5kQ29vcmRpbmF0ZTogc3RyaW5nXG59XG5cbmludGVyZmFjZSBDdXJyZW5jeUluZm8ge1xuICAgIHN0eWxlWGY6IG51bWJlclxuICAgIHN5bWJvbDogc3RyaW5nXG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgV29ya3NoZWV0RmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHByaXZhdGUgc3RhdGljIE1JTl9XSURUSCA9IDguNDM7XG4gICAgcHJpdmF0ZSBtYXhPdXRsaW5lTGV2ZWwgPSAwO1xuICAgIHByaXZhdGUgc2hlZXREYXRhID0gJyc7XG4gICAgcHJpdmF0ZSBkaW1lbnNpb24gPSAnJztcbiAgICBwcml2YXRlIGZyZWV6ZVBhbmUgPSAnJztcbiAgICBwcml2YXRlIHJvd0hlaWdodCA9ICcnO1xuXG4gICAgcHJpdmF0ZSBtZXJnZUNlbGxTdHIgPSAnJztcbiAgICBwcml2YXRlIG1lcmdlQ2VsbHNDb3VudGVyID0gMDtcbiAgICBwcml2YXRlIHJvd0luZGV4ID0gMDtcbiAgICBwcml2YXRlIHBpdm90R3JpZFJvd0hlYWRlcnNNYXAgPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPigpO1xuXG4gICAgcHJpdmF0ZSBkaW1lbnNpb25NYXA6IE1hcDxzdHJpbmcsIERpbWVuc2lvbnM+ID0gbmV3IE1hcDxzdHJpbmcsIERpbWVuc2lvbnM+KCk7XG4gICAgcHJpdmF0ZSBoaWVyYXJjaGljYWxEaW1lbnNpb25NYXA6IE1hcDxhbnksICBNYXA8c3RyaW5nLCBEaW1lbnNpb25zPj4gPSBuZXcgTWFwPGFueSwgIE1hcDxzdHJpbmcsIERpbWVuc2lvbnM+PigpO1xuICAgIHByaXZhdGUgY3VycmVudFN1bW1hcnlPd25lciA9ICcnO1xuICAgIHByaXZhdGUgY3VycmVudEhpZXJhcmNoaWNhbE93bmVyID0gJyc7XG4gICAgcHJpdmF0ZSBmaXJzdENvbHVtbiA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgcHJpdmF0ZSBmaXJzdERhdGFSb3cgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgIHByaXZhdGUgaXNWYWxpZEdyaWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBsYXN0VmFsaWRSb3c6IHN0cmluZztcblxuICAgIHByaXZhdGUgY3VycmVuY3lTdHlsZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBDdXJyZW5jeUluZm8+KFtcbiAgICAgICAgWydVU0QnLCB7c3R5bGVYZjogNSwgc3ltYm9sOiAnJCd9XSxcbiAgICAgICAgWydHQlAnLCB7c3R5bGVYZjogNiwgc3ltYm9sOiAnwqMnfV0sXG4gICAgICAgIFsnQ05ZJywge3N0eWxlWGY6IDcsIHN5bWJvbDogJ8KlJ31dLFxuICAgICAgICBbJ0VVUicsIHtzdHlsZVhmOiA4LCBzeW1ib2w6ICfigqwnfV0sXG4gICAgICAgIFsnSlBZJywge3N0eWxlWGY6IDksIHN5bWJvbDogJ8KlJ31dLFxuICAgIF0pO1xuXG4gICAgcHVibGljIHdyaXRlRWxlbWVudCgpIHt9XG5cbiAgICBwdWJsaWMgYXN5bmMgd3JpdGVFbGVtZW50QXN5bmMoZm9sZGVyOiBPYmplY3QsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlRGF0YUFzeW5jKHdvcmtzaGVldERhdGEsIChjb2xzLCByb3dzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzVGFibGUgPSAoIXdvcmtzaGVldERhdGEuaXNFbXB0eSB8fCB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuYWx3YXlzRXhwb3J0SGVhZGVycylcbiAgICAgICAgICAgICAgICAgICAgJiYgd29ya3NoZWV0RGF0YS5vcHRpb25zLmV4cG9ydEFzVGFibGU7XG5cbiAgICAgICAgICAgICAgICBmb2xkZXJbJ3NoZWV0MS54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFNoZWV0WE1MKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpbWVuc2lvbiwgdGhpcy5mcmVlemVQYW5lLCBjb2xzLCByb3dzLCBoYXNUYWJsZSwgdGhpcy5tYXhPdXRsaW5lTGV2ZWwsIHdvcmtzaGVldERhdGEuaXNIaWVyYXJjaGljYWwpKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlRGF0YUFzeW5jKHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEsIGRvbmU6IChjb2xzOiBzdHJpbmcsIHNoZWV0RGF0YTogc3RyaW5nKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuc2hlZXREYXRhID0gJyc7XG4gICAgICAgIGxldCBjb2xzID0gJyc7XG4gICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB3b3Jrc2hlZXREYXRhLmRhdGFEaWN0aW9uYXJ5O1xuICAgICAgICB0aGlzLnJvd0luZGV4ID0gMDtcblxuICAgICAgICBpZiAod29ya3NoZWV0RGF0YS5pc0VtcHR5ICYmICghd29ya3NoZWV0RGF0YS5vcHRpb25zLmFsd2F5c0V4cG9ydEhlYWRlcnMgfHwgd29ya3NoZWV0RGF0YS5vd25lci5jb2x1bW5zLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2hlZXREYXRhICs9ICc8c2hlZXREYXRhLz4nO1xuICAgICAgICAgICAgdGhpcy5kaW1lbnNpb24gPSAnQTEnO1xuICAgICAgICAgICAgZG9uZSgnJywgdGhpcy5zaGVldERhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgb3duZXIgPSB3b3Jrc2hlZXREYXRhLm93bmVyO1xuICAgICAgICAgICAgY29uc3QgaXNIaWVyYXJjaGljYWxHcmlkID0gd29ya3NoZWV0RGF0YS5pc0hpZXJhcmNoaWNhbDtcbiAgICAgICAgICAgIGNvbnN0IGhhc011bHRpQ29sdW1uSGVhZGVyID0gd29ya3NoZWV0RGF0YS5oYXNNdWx0aUNvbHVtbkhlYWRlcjtcbiAgICAgICAgICAgIGNvbnN0IGhhc011bHRpUm93SGVhZGVyID0gd29ya3NoZWV0RGF0YS5oYXNNdWx0aVJvd0hlYWRlcjtcblxuICAgICAgICAgICAgY29uc3QgaGFzVXNlclNldEluZGV4ID0gb3duZXIuY29sdW1ucy5zb21lKGNvbCA9PiBjb2wuZXhwb3J0SW5kZXggIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9ICB3b3Jrc2hlZXREYXRhLm9wdGlvbnMucm93SGVpZ2h0O1xuXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRHcmlkID0gd29ya3NoZWV0RGF0YS5pc0hpZXJhcmNoaWNhbCB8fCB3b3Jrc2hlZXREYXRhLmlzVHJlZUdyaWQgfHwgd29ya3NoZWV0RGF0YS5pc0dyb3VwZWRHcmlkO1xuICAgICAgICAgICAgdGhpcy5yb3dIZWlnaHQgPSBoZWlnaHQgPyBgIGh0PVwiJHtoZWlnaHR9XCIgY3VzdG9tSGVpZ2h0PVwiMVwiYCA6ICcnO1xuICAgICAgICAgICAgdGhpcy5zaGVldERhdGEgKz0gYDxzaGVldERhdGE+YDtcblxuICAgICAgICAgICAgbGV0IGhlYWRlcnNGb3JMZXZlbDogSUNvbHVtbkluZm9bXSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDw9IG93bmVyLm1heFJvd0xldmVsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzRm9yTGV2ZWwgPSAgb3duZXIuY29sdW1ucy5maWx0ZXIoYyA9PiBjLmxldmVsID09PSBpICYmIGMucm93U3BhbiA+IDAgJiYgIWMuc2tpcClcblxuICAgICAgICAgICAgICAgIHRoaXMucHJpbnRIZWFkZXJzKHdvcmtzaGVldERhdGEsIGhlYWRlcnNGb3JMZXZlbCwgaSwgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJvd0luZGV4Kys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucm93SW5kZXggPSAwO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBvd25lci5tYXhMZXZlbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dJbmRleCsrO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpdm90R3JpZENvbHVtbnMgPSB0aGlzLnBpdm90R3JpZFJvd0hlYWRlcnNNYXAuZ2V0KHRoaXMucm93SW5kZXgpID8/IFwiXCI7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGVldERhdGEgKz0gYDxyb3cgcj1cIiR7dGhpcy5yb3dJbmRleH1cIiR7dGhpcy5yb3dIZWlnaHR9PiR7cGl2b3RHcmlkQ29sdW1uc31gO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYWxsb3dlZENvbHVtbnMgPSBvd25lci5jb2x1bW5zLmZpbHRlcihjID0+IGMuaGVhZGVyVHlwZSAhPT0gSGVhZGVyVHlwZS5Sb3dIZWFkZXIgJiYgYy5oZWFkZXJUeXBlICE9PSBIZWFkZXJUeXBlLk11bHRpUm93SGVhZGVyKTtcblxuICAgICAgICAgICAgICAgIGhlYWRlcnNGb3JMZXZlbCA9IGhhc011bHRpQ29sdW1uSGVhZGVyID9cbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZENvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiAoYy5sZXZlbCA8IGkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmhlYWRlclR5cGUgIT09IEhlYWRlclR5cGUuTXVsdGlDb2x1bW5IZWFkZXIgfHwgYy5sZXZlbCA9PT0gaSkgJiYgYy5jb2x1bW5TcGFuID4gMCAmJiAhYy5za2lwKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRJbmRleCAtIGIuc3RhcnRJbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4IC0gYi5waW5uZWRJbmRleCkgOlxuICAgICAgICAgICAgICAgICAgICBoYXNVc2VyU2V0SW5kZXggP1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZENvbHVtbnMuZmlsdGVyKGMgPT4gIWMuc2tpcCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZENvbHVtbnMuZmlsdGVyKGMgPT4gIWMuc2tpcClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4IC0gYi5waW5uZWRJbmRleCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnByaW50SGVhZGVycyh3b3Jrc2hlZXREYXRhLCBoZWFkZXJzRm9yTGV2ZWwsIGksIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuc2hlZXREYXRhICs9IGA8L3Jvdz5gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtdWx0aUNvbHVtbkhlYWRlckxldmVsID0gd29ya3NoZWV0RGF0YS5vcHRpb25zLmlnbm9yZU11bHRpQ29sdW1uSGVhZGVycyA/IDAgOiBvd25lci5tYXhMZXZlbDtcbiAgICAgICAgICAgIGNvbnN0IGZyZWV6ZUhlYWRlcnMgPSB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuZnJlZXplSGVhZGVycyA/IDIgKyBtdWx0aUNvbHVtbkhlYWRlckxldmVsIDogMTtcblxuICAgICAgICAgICAgaWYgKCFpc0hpZXJhcmNoaWNhbEdyaWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2wgPSB3b3Jrc2hlZXREYXRhLmhhc1N1bW1hcmllcyA/IHdvcmtzaGVldERhdGEuY29sdW1uQ291bnQgKyAxIDogd29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudCAtIDFcbiAgICAgICAgICAgICAgICB0aGlzLmRpbWVuc2lvbiA9ICdBMTonICsgRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKGNvbCkgKyAod29ya3NoZWV0RGF0YS5yb3dDb3VudCk7XG5cbiAgICAgICAgICAgICAgICBjb2xzICs9ICc8Y29scz4nO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFoYXNNdWx0aUNvbHVtbkhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHdvcmtzaGVldERhdGEuY29sdW1uQ291bnQ7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBkaWN0aW9uYXJ5LmNvbHVtbldpZHRoc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgd2lkdGggcHJvdmlkZWQgaW4gdGhlIG9wdGlvbnMgaWYgaXQgZXhpc3RzXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgd2lkdGhJblR3aXBzID0gd29ya3NoZWV0RGF0YS5vcHRpb25zLmNvbHVtbldpZHRoICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NoZWV0RGF0YS5vcHRpb25zLmNvbHVtbldpZHRoIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KCgod2lkdGggLyA5NikgKiAxNC40KSwgV29ya3NoZWV0RmlsZS5NSU5fV0lEVEgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEod2lkdGhJblR3aXBzID4gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aEluVHdpcHMgPSBXb3Jrc2hlZXRGaWxlLk1JTl9XSURUSDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29scyArPSBgPGNvbCBtaW49XCIkeyhqICsgMSl9XCIgbWF4PVwiJHsoaiArIDEpfVwiIHdpZHRoPVwiJHt3aWR0aEluVHdpcHN9XCIgY3VzdG9tV2lkdGg9XCIxXCIvPmA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2xzICs9IGA8Y29sIG1pbj1cIjFcIiBtYXg9XCIke3dvcmtzaGVldERhdGEuY29sdW1uQ291bnR9XCIgd2lkdGg9XCIxNVwiIGN1c3RvbVdpZHRoPVwiMVwiLz5gO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uID0gd29ya3NoZWV0RGF0YS5pbmRleE9mTGFzdFBpbm5lZENvbHVtbjtcbiAgICAgICAgICAgICAgICBjb25zdCBmcm96ZW5Db2x1bW5Db3VudCA9IGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uICsgMTtcbiAgICAgICAgICAgICAgICBsZXQgZmlyc3RDZWxsID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKGZyb3plbkNvbHVtbkNvdW50KSArIGZyZWV6ZUhlYWRlcnM7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uICE9PSB1bmRlZmluZWQgJiYgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4gIT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgICF3b3Jrc2hlZXREYXRhLm9wdGlvbnMuaWdub3JlUGlubmluZyAmJlxuICAgICAgICAgICAgICAgICAgICAhd29ya3NoZWV0RGF0YS5vcHRpb25zLmlnbm9yZUNvbHVtbnNPcmRlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZyZWV6ZVBhbmUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgYDxwYW5lIHhTcGxpdD1cIiR7ZnJvemVuQ29sdW1uQ291bnR9XCIgeVNwbGl0PVwiJHtmcmVlemVIZWFkZXJzIC0gMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRvcExlZnRDZWxsPVwiJHtmaXJzdENlbGx9XCIgYWN0aXZlUGFuZT1cInRvcFJpZ2h0XCIgc3RhdGU9XCJmcm96ZW5cIi8+YDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdvcmtzaGVldERhdGEub3B0aW9ucy5mcmVlemVIZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0Q2VsbCA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbigwKSArIGZyZWV6ZUhlYWRlcnM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnJlZXplUGFuZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBgPHBhbmUgeFNwbGl0PVwiMFwiIHlTcGxpdD1cIiR7ZnJlZXplSGVhZGVycyAtIDF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0b3BMZWZ0Q2VsbD1cIiR7Zmlyc3RDZWxsfVwiIGFjdGl2ZVBhbmU9XCJ0b3BSaWdodFwiIHN0YXRlPVwiZnJvemVuXCIvPmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IHdvcmtzaGVldERhdGEub3B0aW9ucy5jb2x1bW5XaWR0aCA/IHdvcmtzaGVldERhdGEub3B0aW9ucy5jb2x1bW5XaWR0aCA6IDIwO1xuICAgICAgICAgICAgICAgIGNvbHMgKz0gYDxjb2xzPjxjb2wgbWluPVwiMVwiIG1heD1cIiR7d29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudH1cIiB3aWR0aD1cIiR7Y29sdW1uV2lkdGh9XCIgY3VzdG9tV2lkdGg9XCIxXCIvPmA7XG5cbiAgICAgICAgICAgICAgICBpZiAod29ya3NoZWV0RGF0YS5vcHRpb25zLmZyZWV6ZUhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RDZWxsID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKDApICsgZnJlZXplSGVhZGVycztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mcmVlemVQYW5lID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGA8cGFuZSB4U3BsaXQ9XCIwXCIgeVNwbGl0PVwiJHtmcmVlemVIZWFkZXJzIC0gMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRvcExlZnRDZWxsPVwiJHtmaXJzdENlbGx9XCIgYWN0aXZlUGFuZT1cInRvcFJpZ2h0XCIgc3RhdGU9XCJmcm96ZW5cIi8+YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh3b3Jrc2hlZXREYXRhLmhhc1N1bW1hcmllcykge1xuICAgICAgICAgICAgICAgIGNvbHMgKz0gYDxjb2wgbWluPVwiJHt3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50ICsgMn1cIiBtYXg9XCIke3dvcmtzaGVldERhdGEuY29sdW1uQ291bnQgKyAyfVwiIGhpZGRlbj1cIjFcIi8+YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29scyArPSAnPC9jb2xzPic7XG5cbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RhdGFSZWNvcmRzQXN5bmMod29ya3NoZWV0RGF0YSwgKHJvd3MpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNoZWV0RGF0YSArPSByb3dzO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hlZXREYXRhICs9ICc8L3NoZWV0RGF0YT4nO1xuXG4gICAgICAgICAgICAgICAgaWYgKChoYXNNdWx0aUNvbHVtbkhlYWRlciB8fCBoYXNNdWx0aVJvd0hlYWRlcikgJiYgdGhpcy5tZXJnZUNlbGxzQ291bnRlciA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGVldERhdGEgKz0gYDxtZXJnZUNlbGxzIGNvdW50PVwiJHt0aGlzLm1lcmdlQ2VsbHNDb3VudGVyfVwiPiR7dGhpcy5tZXJnZUNlbGxTdHJ9PC9tZXJnZUNlbGxzPmA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZShjb2xzLCB0aGlzLnNoZWV0RGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0RhdGFSZWNvcmRzQXN5bmMod29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSwgZG9uZTogKHJvd3M6IHN0cmluZykgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCByb3dEYXRhQXJyID0gW107XG4gICAgICAgIGNvbnN0IGhlaWdodCA9ICB3b3Jrc2hlZXREYXRhLm9wdGlvbnMucm93SGVpZ2h0O1xuICAgICAgICB0aGlzLnJvd0hlaWdodCA9IGhlaWdodCA/ICcgaHQ9XCInICsgaGVpZ2h0ICsgJ1wiIGN1c3RvbUhlaWdodD1cIjFcIicgOiAnJztcblxuICAgICAgICBjb25zdCBpc0hpZXJhcmNoaWNhbEdyaWQgPSB3b3Jrc2hlZXREYXRhLmlzSGllcmFyY2hpY2FsO1xuICAgICAgICBjb25zdCBoYXNVc2VyU2V0SW5kZXggPSB3b3Jrc2hlZXREYXRhLm93bmVyLmNvbHVtbnMuc29tZShjID0+IGMuZXhwb3J0SW5kZXggIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgbGV0IHJlY29yZEhlYWRlcnMgPSBbXTtcblxuICAgICAgICB5aWVsZGluZ0xvb3Aod29ya3NoZWV0RGF0YS5yb3dDb3VudCAtIHdvcmtzaGVldERhdGEubXVsdGlDb2x1bW5IZWFkZXJSb3dzIC0gMSwgMTAwMCxcbiAgICAgICAgICAgIChpKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF3b3Jrc2hlZXREYXRhLmlzRW1wdHkpe1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzSGllcmFyY2hpY2FsR3JpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1VzZXJTZXRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZEhlYWRlcnMgPSB3b3Jrc2hlZXREYXRhLnJvb3RLZXlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRIZWFkZXJzID0gd29ya3NoZWV0RGF0YS5vd25lci5jb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmhlYWRlclR5cGUgIT09IEhlYWRlclR5cGUuTXVsdGlDb2x1bW5IZWFkZXIgJiYgYy5oZWFkZXJUeXBlICE9PSBIZWFkZXJUeXBlLk11bHRpUm93SGVhZGVyICYmIGMuaGVhZGVyVHlwZSAhPT0gSGVhZGVyVHlwZS5Sb3dIZWFkZXIgJiYgIWMuc2tpcClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRJbmRleC1iLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4LWIucGlubmVkSW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoYyA9PiBjLmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IHdvcmtzaGVldERhdGEuZGF0YVtpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkhlYWRlclJlY29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZE93bmVyID0gd29ya3NoZWV0RGF0YS5vd25lcnMuZ2V0KHJlY29yZC5vd25lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzTXVsdGlDb2x1bW5IZWFkZXJzID0gcmVjb3JkT3duZXIuY29sdW1ucy5zb21lKGMgPT4gIWMuc2tpcCAmJiBjLmhlYWRlclR5cGUgPT09IEhlYWRlclR5cGUuTXVsdGlDb2x1bW5IZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc011bHRpQ29sdW1uSGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhHcmlkUHJpbnRNdWx0aUNvbEhlYWRlcnMod29ya3NoZWV0RGF0YSwgcm93RGF0YUFyciwgcmVjb3JkLCByZWNvcmRPd25lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRIZWFkZXJzID0gT2JqZWN0LmtleXMod29ya3NoZWV0RGF0YS5kYXRhW2ldLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcm93RGF0YUFyci5wdXNoKHRoaXMucHJvY2Vzc1Jvdyh3b3Jrc2hlZXREYXRhLCBpLCByZWNvcmRIZWFkZXJzLCBpc0hpZXJhcmNoaWNhbEdyaWQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUocm93RGF0YUFyci5qb2luKCcnKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaEdyaWRQcmludE11bHRpQ29sSGVhZGVycyh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCByb3dEYXRhQXJyOiBhbnlbXSwgcmVjb3JkOiBJRXhwb3J0UmVjb3JkLFxuICAgICAgICBvd25lcjogSUNvbHVtbkxpc3QpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBvd25lci5tYXhMZXZlbDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCByZWNvcmRMZXZlbCA9IHJlY29yZC5sZXZlbDtcbiAgICAgICAgICAgIGNvbnN0IG91dGxpbmVMZXZlbCA9IHJlY29yZExldmVsID4gMCA/IGAgb3V0bGluZUxldmVsPVwiJHtyZWNvcmRMZXZlbH1cImAgOiAnJztcbiAgICAgICAgICAgIHRoaXMubWF4T3V0bGluZUxldmVsID0gdGhpcy5tYXhPdXRsaW5lTGV2ZWwgPCByZWNvcmRMZXZlbCA/IHJlY29yZExldmVsIDogdGhpcy5tYXhPdXRsaW5lTGV2ZWw7XG4gICAgICAgICAgICBjb25zdCBzSGlkZGVuID0gcmVjb3JkLmhpZGRlbiA/IGAgaGlkZGVuPVwiMVwiYCA6ICcnO1xuXG4gICAgICAgICAgICB0aGlzLnJvd0luZGV4Kys7XG4gICAgICAgICAgICBsZXQgcm93ID0gYDxyb3cgcj1cIiR7dGhpcy5yb3dJbmRleH1cIiR7dGhpcy5yb3dIZWlnaHR9JHtvdXRsaW5lTGV2ZWx9JHtzSGlkZGVufT5gO1xuXG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzRm9yTGV2ZWwgPSBvd25lci5jb2x1bW5zXG4gICAgICAgICAgICAgICAgLmZpbHRlcihjID0+IChjLmxldmVsIDwgaiAmJlxuICAgICAgICAgICAgICAgICAgICBjLmhlYWRlclR5cGUgIT09IEhlYWRlclR5cGUuTXVsdGlDb2x1bW5IZWFkZXIgfHwgYy5sZXZlbCA9PT0gaikgJiYgYy5jb2x1bW5TcGFuID4gMCAmJiAhYy5za2lwKVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXggLSBiLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucGlubmVkSW5kZXggLSBiLnBpbm5lZEluZGV4KTtcblxuICAgICAgICAgICAgbGV0IHN0YXJ0VmFsdWUgPSAwICsgcmVjb3JkLmxldmVsO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnRDb2wgb2YgaGVhZGVyc0ZvckxldmVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2wubGV2ZWwgPT09IGopIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbHVtbkNvb3JkaW5hdGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvb3JkaW5hdGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHN0YXJ0VmFsdWUpICsgdGhpcy5yb3dJbmRleDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZSA9IHdvcmtzaGVldERhdGEuZGF0YURpY3Rpb25hcnkuc2F2ZVZhbHVlKGN1cnJlbnRDb2wuaGVhZGVyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcm93ICs9IGA8YyByPVwiJHtjb2x1bW5Db29yZGluYXRlfVwiIHM9XCIzXCIgdD1cInNcIj48dj4ke2NvbHVtblZhbHVlfTwvdj48L2M+YDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaiAhPT0gb3duZXIubWF4TGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsc0NvdW50ZXIrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsU3RyICs9IGAgPG1lcmdlQ2VsbCByZWY9XCIke2NvbHVtbkNvb3JkaW5hdGV9OmA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29sLmhlYWRlclR5cGUgPT09IEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uQ29vcmRpbmF0ZSA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihzdGFydFZhbHVlKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLnJvd0luZGV4ICsgb3duZXIubWF4TGV2ZWwgLSBjdXJyZW50Q29sLmxldmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDE7IGsgPCBjdXJyZW50Q29sLmNvbHVtblNwYW47IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db29yZGluYXRlID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHN0YXJ0VmFsdWUgKyBrKSArIHRoaXMucm93SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyArPSBgPGMgcj1cIiR7Y29sdW1uQ29vcmRpbmF0ZX1cIiBzPVwiM1wiIC8+YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsU3RyICs9IGAke2NvbHVtbkNvb3JkaW5hdGV9XCIgLz5gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3RhcnRWYWx1ZSArPSBjdXJyZW50Q29sLmNvbHVtblNwYW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3cgKz0gYDwvcm93PmA7XG4gICAgICAgICAgICByb3dEYXRhQXJyLnB1c2gocm93KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1Jvdyh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCBpOiBudW1iZXIsIGhlYWRlcnNGb3JMZXZlbDogYW55W10sIGlzSGllcmFyY2hpY2FsR3JpZDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCByZWNvcmQgPSB3b3Jrc2hlZXREYXRhLmRhdGFbaV07XG5cbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IG5ldyBBcnJheSh3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50ICsgMik7XG5cbiAgICAgICAgY29uc3Qgcm93TGV2ZWwgPSByZWNvcmQubGV2ZWw7XG4gICAgICAgIGNvbnN0IG91dGxpbmVMZXZlbCA9IHJvd0xldmVsID4gMCA/IGAgb3V0bGluZUxldmVsPVwiJHtyb3dMZXZlbH1cImAgOiAnJztcbiAgICAgICAgdGhpcy5tYXhPdXRsaW5lTGV2ZWwgPSB0aGlzLm1heE91dGxpbmVMZXZlbCA8IHJvd0xldmVsID8gcm93TGV2ZWwgOiB0aGlzLm1heE91dGxpbmVMZXZlbDtcblxuICAgICAgICBjb25zdCBzSGlkZGVuID0gcmVjb3JkLmhpZGRlbiA/IGAgaGlkZGVuPVwiMVwiYCA6ICcnO1xuXG4gICAgICAgIHRoaXMucm93SW5kZXgrKztcbiAgICAgICAgY29uc3QgcGl2b3RHcmlkQ29sdW1ucyA9IHRoaXMucGl2b3RHcmlkUm93SGVhZGVyc01hcC5nZXQodGhpcy5yb3dJbmRleCkgPz8gXCJcIjtcblxuICAgICAgICByb3dEYXRhWzBdID0gYDxyb3cgcj1cIiR7dGhpcy5yb3dJbmRleH1cIiR7dGhpcy5yb3dIZWlnaHR9JHtvdXRsaW5lTGV2ZWx9JHtzSGlkZGVufT4ke3Bpdm90R3JpZENvbHVtbnN9YDtcbiAgICAgICAgY29uc3Qga2V5cyA9IHdvcmtzaGVldERhdGEuaXNTcGVjaWFsRGF0YSA/IFtyZWNvcmQuZGF0YV0gOiBoZWFkZXJzRm9yTGV2ZWw7XG4gICAgICAgIGNvbnN0IGlzRGF0YVJlY29yZCA9IHJlY29yZC50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkhpZXJhcmNoaWNhbEdyaWRSZWNvcmRcbiAgICAgICAgICAgIHx8IHJlY29yZC50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkRhdGFSZWNvcmRcbiAgICAgICAgICAgIHx8IHJlY29yZC50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkdyb3VwZWRSZWNvcmRcbiAgICAgICAgICAgIHx8IHJlY29yZC50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLlRyZWVHcmlkUmVjb3JkO1xuXG4gICAgICAgIGNvbnN0IGlzVmFsaWRSZWNvcmRUeXBlID0gaXNEYXRhUmVjb3JkIHx8IHJlY29yZC50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLlN1bW1hcnlSZWNvcmQ7XG5cbiAgICAgICAgaWYgKGlzVmFsaWRSZWNvcmRUeXBlICYmIHdvcmtzaGVldERhdGEuaGFzU3VtbWFyaWVzKSB7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVTdW1tYXJ5RGltZW5zaW9ucyhyZWNvcmQsIGlzRGF0YVJlY29yZCwgd29ya3NoZWV0RGF0YS5pc0dyb3VwZWRHcmlkKVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBrZXlzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBjb2wgPSBqICsgKGlzSGllcmFyY2hpY2FsR3JpZCA/IHJvd0xldmVsIDogd29ya3NoZWV0RGF0YS5pc1Bpdm90R3JpZCA/IHdvcmtzaGVldERhdGEub3duZXIubWF4Um93TGV2ZWwgOiAwKTtcblxuICAgICAgICAgICAgY29uc3QgY2VsbERhdGEgPSB0aGlzLmdldENlbGxEYXRhKHdvcmtzaGVldERhdGEsIGksIGNvbCwga2V5c1tqXSk7XG5cbiAgICAgICAgICAgIHJvd0RhdGFbaiArIDFdID0gY2VsbERhdGE7XG4gICAgICAgIH1cblxuICAgICAgICByb3dEYXRhW2tleXMubGVuZ3RoICsgMV0gPSAnPC9yb3c+JztcblxuICAgICAgICByZXR1cm4gcm93RGF0YS5qb2luKCcnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENlbGxEYXRhKHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEsIHJvdzogbnVtYmVyLCBjb2x1bW46IG51bWJlciwga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBkaWN0aW9uYXJ5ID0gd29ya3NoZWV0RGF0YS5kYXRhRGljdGlvbmFyeTtcbiAgICAgICAgbGV0IGNvbHVtbk5hbWUgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oY29sdW1uKSArICh0aGlzLnJvd0luZGV4KTtcbiAgICAgICAgY29uc3QgZnVsbFJvdyA9IHdvcmtzaGVldERhdGEuZGF0YVtyb3ddO1xuICAgICAgICBjb25zdCBpc0hlYWRlclJlY29yZCA9IGZ1bGxSb3cudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5IZWFkZXJSZWNvcmQ7XG4gICAgICAgIGNvbnN0IGlzU3VtbWFyeVJlY29yZCA9IGZ1bGxSb3cudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5TdW1tYXJ5UmVjb3JkO1xuICAgICAgICBjb25zdCBpc1ZhbGlkUmVjb3JkVHlwZSA9IGZ1bGxSb3cudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5Hcm91cGVkUmVjb3JkXG4gICAgICAgICAgICB8fCBmdWxsUm93LnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuRGF0YVJlY29yZFxuICAgICAgICAgICAgfHwgZnVsbFJvdy50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkhpZXJhcmNoaWNhbEdyaWRSZWNvcmRcbiAgICAgICAgICAgIHx8IGZ1bGxSb3cudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5UcmVlR3JpZFJlY29yZDtcblxuICAgICAgICB0aGlzLmZpcnN0RGF0YVJvdyA9IHRoaXMuZmlyc3REYXRhUm93ID4gdGhpcy5yb3dJbmRleCA/IHRoaXMucm93SW5kZXggOiB0aGlzLmZpcnN0RGF0YVJvdztcblxuICAgICAgICBsZXQgY2VsbFZhbHVlID0gd29ya3NoZWV0RGF0YS5pc1NwZWNpYWxEYXRhID9cbiAgICAgICAgICAgIGZ1bGxSb3cuZGF0YSA6XG4gICAgICAgICAgICBmdWxsUm93LmRhdGFba2V5XTtcblxuICAgICAgICBpZiAoY2VsbFZhbHVlID09PSBHUklEX0xFVkVMX0NPTCB8fCBrZXkgPT09IEdSSURfTEVWRUxfQ09MKSB7XG4gICAgICAgICAgICBjb2x1bW5OYW1lID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHdvcmtzaGVldERhdGEuY29sdW1uQ291bnQgKyAxKSArICh0aGlzLnJvd0luZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3b3Jrc2hlZXREYXRhLmhhc1N1bW1hcmllcyAmJiAoaXNWYWxpZFJlY29yZFR5cGUgfHwgKHdvcmtzaGVldERhdGEuaXNHcm91cGVkR3JpZCAmJiBpc1N1bW1hcnlSZWNvcmQpKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdW1tYXJ5Q29vcmRpbmF0ZXMoY29sdW1uTmFtZSwga2V5LCBmdWxsUm93LmhpZXJhcmNoaWNhbE93bmVyLCB3b3Jrc2hlZXREYXRhLmlzR3JvdXBlZEdyaWQgJiYgaXNTdW1tYXJ5UmVjb3JkKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZ1bGxSb3cuc3VtbWFyeUtleSAmJiBmdWxsUm93LnN1bW1hcnlLZXkgPT09IEdSSURfUk9PVF9TVU1NQVJZICYmIGtleSAhPT0gR1JJRF9MRVZFTF9DT0wgJiYgIXRoaXMuaXNWYWxpZEdyaWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Um9vdFN1bW1hcnlTdGFydENvb3JkaW5hdGUoY29sdW1uLCBrZXkpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5maXJzdENvbHVtbiA+IGNvbHVtbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Um9vdFN1bW1hcnlTdGFydENvb3JkaW5hdGUod29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudCArIDEsIEdSSURfTEVWRUxfQ09MKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0Q29sdW1uID0gY29sdW1uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0Q29sQXJyID0gQXJyYXkuZnJvbSh3b3Jrc2hlZXREYXRhLm93bmVycy52YWx1ZXMoKSkubWFwKGFyciA9PiBhcnIuY29sdW1ucykuZmluZChwcm9kdWN0ID0+IHByb2R1Y3Quc29tZShpdGVtID0+IGl0ZW0uZmllbGQgPT09IGtleSkpO1xuICAgICAgICBjb25zdCB0YXJnZXRDb2wgPSB0YXJnZXRDb2xBcnIgPyB0YXJnZXRDb2xBcnIuZmluZChjb2wgPT4gY29sLmZpZWxkID09PSBrZXkpIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBpc0NvbHVtbkN1cnJlbmN5VHlwZSA9IHRhcmdldENvbCA/IHRhcmdldENvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5JyA6IGZhbHNlO1xuXG4gICAgICAgIGlmICgoY2VsbFZhbHVlID09PSB1bmRlZmluZWQgfHwgY2VsbFZhbHVlID09PSBudWxsKSAmJiAhd29ya3NoZWV0RGF0YS5oYXNTdW1tYXJpZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBgPGMgcj1cIiR7Y29sdW1uTmFtZX1cIiBzPVwiMVwiLz5gO1xuICAgICAgICB9IGVsc2UgaWYgKCh3b3Jrc2hlZXREYXRhLmhhc1N1bW1hcmllcyAmJiAoaXNWYWxpZFJlY29yZFR5cGUgfHwgaXNIZWFkZXJSZWNvcmQpKSB8fCAhd29ya3NoZWV0RGF0YS5oYXNTdW1tYXJpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNhdmVkVmFsdWUgPSBkaWN0aW9uYXJ5LnNhdmVWYWx1ZShjZWxsVmFsdWUsIGlzSGVhZGVyUmVjb3JkKTtcbiAgICAgICAgICAgIGNvbnN0IGlzU2F2ZWRBc1N0cmluZyA9IHNhdmVkVmFsdWUgIT09IC0xO1xuXG4gICAgICAgICAgICBjb25zdCBpc1NhdmVkQXNEYXRlID0gIWlzU2F2ZWRBc1N0cmluZyAmJiBjZWxsVmFsdWUgaW5zdGFuY2VvZiBEYXRlO1xuXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBpc1NhdmVkQXNTdHJpbmcgPyBzYXZlZFZhbHVlIDogY2VsbFZhbHVlO1xuXG4gICAgICAgICAgICBpZiAoaXNTYXZlZEFzRGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVab25lT2Zmc2V0ID0gdmFsdWUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzb1N0cmluZyA9IChuZXcgRGF0ZSh2YWx1ZSAtIHRpbWVab25lT2Zmc2V0KSkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGlzb1N0cmluZy5zdWJzdHJpbmcoMCwgaXNvU3RyaW5nLmluZGV4T2YoJy4nKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBpc1NhdmVkQXNTdHJpbmcgPyBgIHQ9XCJzXCJgIDogaXNTYXZlZEFzRGF0ZSA/IGAgdD1cImRcImAgOiAnJztcblxuICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gaXNIZWFkZXJSZWNvcmQgPyBgIHM9XCIzXCJgIDogaXNTYXZlZEFzU3RyaW5nID8gJycgOiBpc1NhdmVkQXNEYXRlID8gYCBzPVwiMlwiYCA6IGlzQ29sdW1uQ3VycmVuY3lUeXBlID8gYCBzPVwiJHt0aGlzLmN1cnJlbmN5U3R5bGVNYXAuZ2V0KHRhcmdldENvbC5jdXJyZW5jeUNvZGUpPy5zdHlsZVhmIHx8IDB9XCJgIDogYCBzPVwiMVwiYDtcblxuICAgICAgICAgICAgcmV0dXJuIGA8YyByPVwiJHtjb2x1bW5OYW1lfVwiJHt0eXBlfSR7Zm9ybWF0fT48dj4ke3ZhbHVlfTwvdj48L2M+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBzdW1tYXJ5RnVuYyA9IGBcIiR7Y2VsbFZhbHVlID8/IFwiXCJ9XCJgO1xuXG4gICAgICAgICAgICBpZiAoaXNTdW1tYXJ5UmVjb3JkICYmIGNlbGxWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpbWVuc2lvbk1hcEtleSA9IHRoaXMuaXNWYWxpZEdyaWQgPyBmdWxsUm93LmhpZXJhcmNoaWNhbE93bmVyID8/IEdSSURfUEFSRU5UIDogbnVsbDtcbiAgICAgICAgICAgICAgICBjb25zdCBsZXZlbCA9IHdvcmtzaGVldERhdGEuaXNHcm91cGVkR3JpZCA/IHdvcmtzaGVldERhdGEubWF4TGV2ZWwgOiBmdWxsUm93LmxldmVsO1xuXG4gICAgICAgICAgICAgICAgc3VtbWFyeUZ1bmMgPSB0aGlzLmdldFN1bW1hcnlGdW5jdGlvbihjZWxsVmFsdWUubGFiZWwsIGtleSwgZGltZW5zaW9uTWFwS2V5LCBsZXZlbCwgdGFyZ2V0Q29sKTtcblxuICAgICAgICAgICAgICAgIGlmICghc3VtbWFyeUZ1bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbFN0ciA9IGAke2NlbGxWYWx1ZS5sYWJlbH06ICR7Y2VsbFZhbHVlLnZhbHVlfWA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNhdmVkVmFsdWUgPSBkaWN0aW9uYXJ5LnNhdmVWYWx1ZShjZWxsU3RyLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGMgcj1cIiR7Y29sdW1uTmFtZX1cIiB0PVwic1wiIHM9XCIxXCI+PHY+JHtzYXZlZFZhbHVlfTwvdj48L2M+YDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYDxjIHI9XCIke2NvbHVtbk5hbWV9XCIgdD1cInN0clwiPjxmIHQ9XCJhcnJheVwiIHJlZj1cIiR7Y29sdW1uTmFtZX1cIj4ke3N1bW1hcnlGdW5jfTwvZj48L2M+YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGA8YyByPVwiJHtjb2x1bW5OYW1lfVwiIHQ9XCJzXCIgcz1cIjFcIj48Zj4ke3N1bW1hcnlGdW5jfTwvZj48L2M+YDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzb2x2ZVN1bW1hcnlEaW1lbnNpb25zKHJlY29yZDogSUV4cG9ydFJlY29yZCwgaXNEYXRhUmVjb3JkOiBib29sZWFuLCBpc0dyb3VwZWRHcmlkOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWRHcmlkICYmXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRIaWVyYXJjaGljYWxPd25lciAhPT0gJycgJiZcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEhpZXJhcmNoaWNhbE93bmVyICE9PSByZWNvcmQub3duZXIgJiZcbiAgICAgICAgICAgICF0aGlzLmhpZXJhcmNoaWNhbERpbWVuc2lvbk1hcC5nZXQodGhpcy5jdXJyZW50SGllcmFyY2hpY2FsT3duZXIpKSB7XG4gICAgICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbERpbWVuc2lvbk1hcC5zZXQodGhpcy5jdXJyZW50SGllcmFyY2hpY2FsT3duZXIsIG5ldyBNYXAodGhpcy5kaW1lbnNpb25NYXApKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRGF0YVJlY29yZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFN1bW1hcnlPd25lciAhPT0gcmVjb3JkLnN1bW1hcnlLZXkgfHwgdGhpcy5jdXJyZW50SGllcmFyY2hpY2FsT3duZXIgIT09IHJlY29yZC5oaWVyYXJjaGljYWxPd25lcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGltZW5zaW9uTWFwLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN1bW1hcnlPd25lciA9IHJlY29yZC5zdW1tYXJ5S2V5O1xuXG4gICAgICAgICAgICAvLyBGb3IgZ3JvdXBlZCBncmlkIHdlIG5lZWQgdG8gcmVzZXQgdGhlIHBhcmVudCBtYXBcbiAgICAgICAgICAgIC8vIHNvIHdlIGNhbiBjaGFuZ2UgdGhlIHN0YXJ0Q29vcmRpbmF0ZSBmb3IgZWFjaCByZWNvcmRcbiAgICAgICAgICAgIGlmIChpc0dyb3VwZWRHcmlkICYmIHRoaXMuY3VycmVudEhpZXJhcmNoaWNhbE93bmVyICE9PSAnJyAmJiByZWNvcmQuaGllcmFyY2hpY2FsT3duZXIgPT09IEdSSURfUEFSRU5UKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljYWxEaW1lbnNpb25NYXAuZGVsZXRlKEdSSURfUEFSRU5UKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRIaWVyYXJjaGljYWxPd25lciA9IHJlY29yZC5oaWVyYXJjaGljYWxPd25lcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U3VtbWFyeUNvb3JkaW5hdGVzKGNvbHVtbk5hbWU6IHN0cmluZywga2V5OiBzdHJpbmcsIGhpZXJhcmNoaWNhbE93bmVyOiBzdHJpbmcsIHVzZUxhc3RWYWxpZEVuZENvb3JkaW5hdGU6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGltZW5zaW9uTWFwID0gdGhpcy5oaWVyYXJjaGljYWxEaW1lbnNpb25NYXAuZ2V0KGhpZXJhcmNoaWNhbE93bmVyKSA/PyB0aGlzLmRpbWVuc2lvbk1hcDtcblxuICAgICAgICBpZiAoIXRhcmdldERpbWVuc2lvbk1hcC5nZXQoa2V5KSkge1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbERpbWVuc2lvbnM6IERpbWVuc2lvbnMgPSB7XG4gICAgICAgICAgICAgICAgc3RhcnRDb29yZGluYXRlOiBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgICAgIGVuZENvb3JkaW5hdGU6IGNvbHVtbk5hbWVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRhcmdldERpbWVuc2lvbk1hcC5zZXQoa2V5LCBpbml0aWFsRGltZW5zaW9ucylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh1c2VMYXN0VmFsaWRFbmRDb29yZGluYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRFbmRDb29yZGluYXRlcyh0YXJnZXREaW1lbnNpb25NYXAsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXREaW1lbnNpb25NYXAuZ2V0KGtleSkuZW5kQ29vcmRpbmF0ZSA9IGNvbHVtbk5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0VmFsaWRSb3cgPSB0YXJnZXREaW1lbnNpb25NYXAuZ2V0KGtleSkuZW5kQ29vcmRpbmF0ZS5tYXRjaCgvW2Etel0rfFteYS16XSsvZ2kpWzFdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkR3JpZCAmJiAhdXNlTGFzdFZhbGlkRW5kQ29vcmRpbmF0ZSAmJiBoaWVyYXJjaGljYWxPd25lciAhPT0gR1JJRF9QQVJFTlQpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudE1hcCA9IHRoaXMuaGllcmFyY2hpY2FsRGltZW5zaW9uTWFwLmdldChHUklEX1BBUkVOVCk7XG4gICAgICAgICAgICB0aGlzLnNldEVuZENvb3JkaW5hdGVzKHBhcmVudE1hcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEVuZENvb3JkaW5hdGVzKG1hcDogTWFwPHN0cmluZywgRGltZW5zaW9ucz4sIHVzZUxhc3RWYWxpZEVuZENvb3JkaW5hdGU6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBmb3IgKGNvbnN0IGEgb2YgbWFwLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xOYW1lID0gYS5lbmRDb29yZGluYXRlLm1hdGNoKC9bYS16XSt8W15hLXpdKy9naSlbMF07XG4gICAgICAgICAgICBhLmVuZENvb3JkaW5hdGUgPSBgJHtjb2xOYW1lfSR7dXNlTGFzdFZhbGlkRW5kQ29vcmRpbmF0ZSA/IHRoaXMubGFzdFZhbGlkUm93IDogdGhpcy5yb3dJbmRleH1gO1xuICAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3VtbWFyeUZ1bmN0aW9uKHR5cGU6IHN0cmluZywga2V5OiBzdHJpbmcsIGRpbWVuc2lvbk1hcEtleTogYW55LCByZWNvcmRMZXZlbDogbnVtYmVyLCBjb2w6IElDb2x1bW5JbmZvKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZGltZW5zaW9uTWFwID0gZGltZW5zaW9uTWFwS2V5ID8gdGhpcy5oaWVyYXJjaGljYWxEaW1lbnNpb25NYXAuZ2V0KGRpbWVuc2lvbk1hcEtleSkgOiB0aGlzLmRpbWVuc2lvbk1hcDtcbiAgICAgICAgY29uc3QgZGltZW5zaW9ucyA9IGRpbWVuc2lvbk1hcC5nZXQoa2V5KTtcbiAgICAgICAgY29uc3QgbGV2ZWxEaW1lbnNpb25zID0gZGltZW5zaW9uTWFwLmdldChHUklEX0xFVkVMX0NPTCk7XG5cbiAgICAgICAgbGV0IGZ1bmMgPSAnJztcbiAgICAgICAgbGV0IGZ1bmNUeXBlID0gJyc7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgY29uc3QgY3VycmVuY3lJbmZvID0gdGhpcy5jdXJyZW5jeVN0eWxlTWFwLmdldChjb2wuY3VycmVuY3lDb2RlKTtcblxuICAgICAgICBzd2l0Y2godHlwZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiY291bnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFwiQ291bnQ6IFwiJmFtcDtfeGxmbi5DT1VOVElGKCR7bGV2ZWxEaW1lbnNpb25zLnN0YXJ0Q29vcmRpbmF0ZX06JHtsZXZlbERpbWVuc2lvbnMuZW5kQ29vcmRpbmF0ZX0sICR7cmVjb3JkTGV2ZWx9KWBcbiAgICAgICAgICAgIGNhc2UgXCJtaW5cIjpcbiAgICAgICAgICAgICAgICBmdW5jID0gYF94bGZuLk1JTihfeGxmbi5JRigke2xldmVsRGltZW5zaW9ucy5zdGFydENvb3JkaW5hdGV9OiR7bGV2ZWxEaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9PSR7cmVjb3JkTGV2ZWx9LCAke2RpbWVuc2lvbnMuc3RhcnRDb29yZGluYXRlfToke2RpbWVuc2lvbnMuZW5kQ29vcmRpbmF0ZX0pKWBcbiAgICAgICAgICAgICAgICBmdW5jVHlwZSA9IGBcIk1pbjogXCImYW1wO2A7XG5cbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jVHlwZSArIChjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScgJiYgY3VycmVuY3lJbmZvXG4gICAgICAgICAgICAgICAgICAgID8gYF94bGZuLlRFWFQoJHtmdW5jfSwgXCIke2N1cnJlbmN5SW5mby5zeW1ib2x9IywjIzAuMDBcIilgXG4gICAgICAgICAgICAgICAgICAgIDogYCR7ZnVuY31gKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgIGNhc2UgXCJtYXhcIjpcbiAgICAgICAgICAgICAgICBmdW5jID0gYF94bGZuLk1BWChfeGxmbi5JRigke2xldmVsRGltZW5zaW9ucy5zdGFydENvb3JkaW5hdGV9OiR7bGV2ZWxEaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9PSR7cmVjb3JkTGV2ZWx9LCAke2RpbWVuc2lvbnMuc3RhcnRDb29yZGluYXRlfToke2RpbWVuc2lvbnMuZW5kQ29vcmRpbmF0ZX0pKWBcbiAgICAgICAgICAgICAgICBmdW5jVHlwZSA9IGBcIk1heDogXCImYW1wO2A7XG5cbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jVHlwZSArIChjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScgJiYgY3VycmVuY3lJbmZvXG4gICAgICAgICAgICAgICAgICAgID8gYF94bGZuLlRFWFQoJHtmdW5jfSwgXCIke2N1cnJlbmN5SW5mby5zeW1ib2x9IywjIzAuMDBcIilgXG4gICAgICAgICAgICAgICAgICAgIDogYCR7ZnVuY31gKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgIGNhc2UgXCJzdW1cIjpcbiAgICAgICAgICAgICAgICBmdW5jID0gIGBfeGxmbi5TVU1JRigke2xldmVsRGltZW5zaW9ucy5zdGFydENvb3JkaW5hdGV9OiR7bGV2ZWxEaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9LCAke3JlY29yZExldmVsfSwgJHtkaW1lbnNpb25zLnN0YXJ0Q29vcmRpbmF0ZX06JHtkaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9KWBcbiAgICAgICAgICAgICAgICBmdW5jVHlwZSA9IGBcIlN1bTogXCImYW1wO2A7XG5cbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jVHlwZSArIChjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScgJiYgY3VycmVuY3lJbmZvXG4gICAgICAgICAgICAgICAgICAgID8gYF94bGZuLlRFWFQoJHtmdW5jfSwgXCIke2N1cnJlbmN5SW5mby5zeW1ib2x9IywjIzAuMDBcIilgXG4gICAgICAgICAgICAgICAgICAgIDogYCR7ZnVuY31gKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgIGNhc2UgXCJhdmdcIjpcbiAgICAgICAgICAgICAgICBmdW5jID0gYF94bGZuLkFWRVJBR0VJRigke2xldmVsRGltZW5zaW9ucy5zdGFydENvb3JkaW5hdGV9OiR7bGV2ZWxEaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9LCAke3JlY29yZExldmVsfSwgJHtkaW1lbnNpb25zLnN0YXJ0Q29vcmRpbmF0ZX06JHtkaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9KWBcbiAgICAgICAgICAgICAgICBmdW5jVHlwZSA9IGBcIkF2ZzogXCImYW1wO2A7XG5cbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jVHlwZSArIChjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScgJiYgY3VycmVuY3lJbmZvXG4gICAgICAgICAgICAgICAgICAgID8gYF94bGZuLlRFWFQoJHtmdW5jfSwgXCIke2N1cnJlbmN5SW5mby5zeW1ib2x9IywjIzAuMDBcIilgXG4gICAgICAgICAgICAgICAgICAgIDogYCR7ZnVuY31gKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgIGNhc2UgXCJlYXJsaWVzdFwiOlxuICAgICAgICAgICAgICAgIC8vIFRPRE86IGdldCBkYXRlIGZvcm1hdCBmcm9tIGxvY2FsZVxuICAgICAgICAgICAgICAgIHJldHVybiBgXCJFYXJsaWVzdDogXCImYW1wO194bGZuLlRFWFQoX3hsZm4uTUlOKF94bGZuLklGKCR7bGV2ZWxEaW1lbnNpb25zLnN0YXJ0Q29vcmRpbmF0ZX06JHtsZXZlbERpbWVuc2lvbnMuZW5kQ29vcmRpbmF0ZX09JHtyZWNvcmRMZXZlbH0sICR7ZGltZW5zaW9ucy5zdGFydENvb3JkaW5hdGV9OiR7ZGltZW5zaW9ucy5lbmRDb29yZGluYXRlfSkpLCBcIm0vZC95eXl5XCIpYFxuICAgICAgICAgICAgY2FzZSBcImxhdGVzdFwiOlxuICAgICAgICAgICAgICAgIC8vIFRPRE86IGdldCBkYXRlIGZvcm1hdCBmcm9tIGxvY2FsZVxuICAgICAgICAgICAgICAgIHJldHVybiBgXCJMYXRlc3Q6IFwiJmFtcDtfeGxmbi5URVhUKF94bGZuLk1BWChfeGxmbi5JRigke2xldmVsRGltZW5zaW9ucy5zdGFydENvb3JkaW5hdGV9OiR7bGV2ZWxEaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9PSR7cmVjb3JkTGV2ZWx9LCAke2RpbWVuc2lvbnMuc3RhcnRDb29yZGluYXRlfToke2RpbWVuc2lvbnMuZW5kQ29vcmRpbmF0ZX0pKSwgXCJtL2QveXl5eVwiKWBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Um9vdFN1bW1hcnlTdGFydENvb3JkaW5hdGUoY29sdW1uOiBudW1iZXIsIGtleTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0RGF0YVJlY29yZENvbE5hbWUgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oY29sdW1uKSArICh0aGlzLmZpcnN0RGF0YVJvdyk7XG5cbiAgICAgICAgaWYgKHRoaXMuZGltZW5zaW9uTWFwLmdldChrZXkpLnN0YXJ0Q29vcmRpbmF0ZSAhPT0gZmlyc3REYXRhUmVjb3JkQ29sTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5kaW1lbnNpb25NYXAuZ2V0KGtleSkuc3RhcnRDb29yZGluYXRlID0gZmlyc3REYXRhUmVjb3JkQ29sTmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJpbnRIZWFkZXJzKHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEsIGhlYWRlcnNGb3JMZXZlbDogSUNvbHVtbkluZm9bXSwgaTogbnVtYmVyLCBpc1ZlcnRpY2FsOiBib29sZWFuKSB7XG4gICAgICAgIGxldCBzdGFydFZhbHVlID0gMDtcbiAgICAgICAgbGV0IHN0ciA9ICcnO1xuXG4gICAgICAgIGNvbnN0IGlzSGllcmFyY2hpY2FsR3JpZCA9IHdvcmtzaGVldERhdGEuaXNIaWVyYXJjaGljYWw7XG4gICAgICAgIGxldCByb3dTdHlsZSA9IGlzSGllcmFyY2hpY2FsR3JpZCA/ICcgcz1cIjNcIicgOiAnJztcbiAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHdvcmtzaGVldERhdGEuZGF0YURpY3Rpb25hcnk7XG4gICAgICAgIGNvbnN0IG93bmVyID0gd29ya3NoZWV0RGF0YS5vd25lcjtcbiAgICAgICAgY29uc3QgbWF4TGV2ZWwgPSBpc1ZlcnRpY2FsXG4gICAgICAgICAgICA/IG93bmVyLm1heFJvd0xldmVsXG4gICAgICAgICAgICA6IG93bmVyLm1heExldmVsO1xuXG4gICAgICAgIGZvciAoY29uc3QgY3VycmVudENvbCBvZiBoZWFkZXJzRm9yTGV2ZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYW5MZW5ndGggPSBpc1ZlcnRpY2FsID8gY3VycmVudENvbC5yb3dTcGFuIDogY3VycmVudENvbC5jb2x1bW5TcGFuO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudENvbC5sZXZlbCA9PT0gaSkge1xuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5Db29yZGluYXRlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGlzVmVydGljYWxcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnJvd0luZGV4XG4gICAgICAgICAgICAgICAgICAgIDogc3RhcnRWYWx1ZSArIChvd25lci5tYXhSb3dMZXZlbCA/PyAwKVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgcm93Q29vcmRpbmF0ZSA9IGlzVmVydGljYWxcbiAgICAgICAgICAgICAgICAgICAgPyBzdGFydFZhbHVlICsgb3duZXIubWF4TGV2ZWwgKyAyXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5yb3dJbmRleFxuXG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uVmFsdWUgPSBkaWN0aW9uYXJ5LnNhdmVWYWx1ZShjdXJyZW50Q29sLmhlYWRlciwgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICBjb2x1bW5Db29yZGluYXRlID0gKGN1cnJlbnRDb2wuZmllbGQgPT09IEdSSURfTEVWRUxfQ09MXG4gICAgICAgICAgICAgICAgICAgID8gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHdvcmtzaGVldERhdGEuY29sdW1uQ291bnQgKyAxKVxuICAgICAgICAgICAgICAgICAgICA6IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihjb2x1bW4pKSArIHJvd0Nvb3JkaW5hdGU7XG5cbiAgICAgICAgICAgICAgICByb3dTdHlsZSA9IGlzVmVydGljYWwgJiYgY3VycmVudENvbC5yb3dTcGFuID4gMSA/ICcgcz1cIjRcIicgOiByb3dTdHlsZTtcbiAgICAgICAgICAgICAgICBzdHIgPSBgPGMgcj1cIiR7Y29sdW1uQ29vcmRpbmF0ZX1cIiR7cm93U3R5bGV9IHQ9XCJzXCI+PHY+JHtjb2x1bW5WYWx1ZX08L3Y+PC9jPmA7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5waXZvdEdyaWRSb3dIZWFkZXJzTWFwLmhhcyhyb3dDb29yZGluYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waXZvdEdyaWRSb3dIZWFkZXJzTWFwLnNldChyb3dDb29yZGluYXRlLCB0aGlzLnBpdm90R3JpZFJvd0hlYWRlcnNNYXAuZ2V0KHJvd0Nvb3JkaW5hdGUpICsgc3RyKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waXZvdEdyaWRSb3dIZWFkZXJzTWFwLnNldChyb3dDb29yZGluYXRlLCBzdHIpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoZWV0RGF0YSArPSBzdHI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGkgIT09IG1heExldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsc0NvdW50ZXIrKztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZUNlbGxTdHIgKz0gYCA8bWVyZ2VDZWxsIHJlZj1cIiR7Y29sdW1uQ29vcmRpbmF0ZX06YDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbC5oZWFkZXJUeXBlID09PSBIZWFkZXJUeXBlLkNvbHVtbkhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sID0gaXNWZXJ0aWNhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbWF4TGV2ZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0YXJ0VmFsdWUgKyAob3duZXIubWF4Um93TGV2ZWwgPz8gMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IGlzVmVydGljYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJvd0Nvb3JkaW5hdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG93bmVyLm1heExldmVsICsgMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uQ29vcmRpbmF0ZSA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihjb2wpICsgcm93O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDE7IGsgPCBzcGFuTGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2wgPSBpc1ZlcnRpY2FsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY29sdW1uICsgaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IGlzVmVydGljYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyByb3dDb29yZGluYXRlICsga1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMucm93SW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db29yZGluYXRlID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKGNvbCkgKyByb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gYDxjIHI9XCIke2NvbHVtbkNvb3JkaW5hdGV9XCIke3Jvd1N0eWxlfSAvPmA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1ZlcnRpY2FsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5waXZvdEdyaWRSb3dIZWFkZXJzTWFwLnNldChyb3csIHN0cilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnNoZWV0RGF0YSArPSBzdHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsU3RyICs9IGAke2NvbHVtbkNvb3JkaW5hdGV9XCIgLz5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RhcnRWYWx1ZSArPSBzcGFuTGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0eWxlRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QpIHtcbiAgICAgICAgZm9sZGVyWydzdHlsZXMueG1sJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRTdHlsZXMoKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtib29rRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgZm9sZGVyWyd3b3JrYm9vay54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFdvcmtib29rKHdvcmtzaGVldERhdGEub3B0aW9ucy53b3Jrc2hlZXROYW1lKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRlbnRUeXBlc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0LCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIGNvbnN0IGhhc1NoYXJlZFN0cmluZ3MgPSAhd29ya3NoZWV0RGF0YS5pc0VtcHR5IHx8IHdvcmtzaGVldERhdGEub3B0aW9ucy5hbHdheXNFeHBvcnRIZWFkZXJzO1xuICAgICAgICBmb2xkZXJbJ1tDb250ZW50X1R5cGVzXS54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldENvbnRlbnRUeXBlc1hNTChoYXNTaGFyZWRTdHJpbmdzLCB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuZXhwb3J0QXNUYWJsZSkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBTaGFyZWRTdHJpbmdzRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgY29uc3QgZGljdCA9IHdvcmtzaGVldERhdGEuZGF0YURpY3Rpb25hcnk7XG4gICAgICAgIGNvbnN0IHNvcnRlZFZhbHVlcyA9IGRpY3QuZ2V0S2V5cygpO1xuICAgICAgICBjb25zdCBzaGFyZWRTdHJpbmdzID0gbmV3IEFycmF5PHN0cmluZz4oc29ydGVkVmFsdWVzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzb3J0ZWRWYWx1ZXMpIHtcbiAgICAgICAgICAgIHNoYXJlZFN0cmluZ3NbZGljdC5nZXRTYW5pdGl6ZWRWYWx1ZSh2YWx1ZSldID0gJzxzaT48dD4nICsgdmFsdWUgKyAnPC90Pjwvc2k+JztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvbGRlclsnc2hhcmVkU3RyaW5ncy54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFNoYXJlZFN0cmluZ1hNTChcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Quc3RyaW5nc0NvdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgc29ydGVkVmFsdWVzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFN0cmluZ3Muam9pbignJykpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFRhYmxlc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0LCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbkNvdW50ID0gd29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudDtcbiAgICAgICAgY29uc3QgbGFzdENvbHVtbiA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihjb2x1bW5Db3VudCAtIDEpICsgd29ya3NoZWV0RGF0YS5yb3dDb3VudDtcbiAgICAgICAgY29uc3QgYXV0b0ZpbHRlckRpbWVuc2lvbiA9ICdBMTonICsgbGFzdENvbHVtbjtcbiAgICAgICAgY29uc3QgdGFibGVEaW1lbnNpb24gPSB3b3Jrc2hlZXREYXRhLmlzRW1wdHlcbiAgICAgICAgICAgID8gJ0ExOicgKyBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oY29sdW1uQ291bnQgLSAxKSArICh3b3Jrc2hlZXREYXRhLnJvd0NvdW50ICsgMSlcbiAgICAgICAgICAgIDogYXV0b0ZpbHRlckRpbWVuc2lvbjtcbiAgICAgICAgY29uc3QgaGFzVXNlclNldEluZGV4ID0gd29ya3NoZWV0RGF0YS5vd25lci5jb2x1bW5zLnNvbWUoYyA9PiBjLmV4cG9ydEluZGV4ICE9PSB1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBoYXNVc2VyU2V0SW5kZXhcbiAgICAgICAgICAgID8gd29ya3NoZWV0RGF0YS5yb290S2V5c1xuICAgICAgICAgICAgOiB3b3Jrc2hlZXREYXRhLm93bmVyLmNvbHVtbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGMgPT4gIWMuc2tpcClcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4KVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4IC0gYi5waW5uZWRJbmRleClcbiAgICAgICAgICAgICAgICAubWFwKGMgPT4gYy5oZWFkZXIpO1xuXG4gICAgICAgIGxldCBzb3J0U3RyaW5nID0gJyc7XG5cbiAgICAgICAgbGV0IHRhYmxlQ29sdW1ucyA9ICc8dGFibGVDb2x1bW5zIGNvdW50PVwiJyArIGNvbHVtbkNvdW50ICsgJ1wiPic7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAgdmFsdWVzW2ldO1xuICAgICAgICAgICAgdGFibGVDb2x1bW5zICs9ICc8dGFibGVDb2x1bW4gaWQ9XCInICsgKGkgKyAxKSArICdcIiBuYW1lPVwiJyArIHZhbHVlICsgJ1wiLz4nO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGVDb2x1bW5zICs9ICc8L3RhYmxlQ29sdW1ucz4nO1xuXG4gICAgICAgIGlmICh3b3Jrc2hlZXREYXRhLnNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRpbmdFeHByZXNzaW9uID0gd29ya3NoZWV0RGF0YS5zb3J0O1xuICAgICAgICAgICAgY29uc3Qgc2MgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4odmFsdWVzLmluZGV4T2Yoc29ydGluZ0V4cHJlc3Npb24uZmllbGROYW1lKSk7XG4gICAgICAgICAgICBjb25zdCBkaXIgPSBzb3J0aW5nRXhwcmVzc2lvbi5kaXIgLSAxO1xuICAgICAgICAgICAgc29ydFN0cmluZyA9IGA8c29ydFN0YXRlIHJlZj1cIkEyOiR7bGFzdENvbHVtbn1cIj48c29ydENvbmRpdGlvbiBkZXNjZW5kaW5nPVwiJHtkaXJ9XCIgcmVmPVwiJHtzY30xOiR7c2N9MTVcIi8+PC9zb3J0U3RhdGU+YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvbGRlclsndGFibGUxLnhtbCddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0VGFibGVzWE1MKGF1dG9GaWx0ZXJEaW1lbnNpb24sIHRhYmxlRGltZW5zaW9uLCB0YWJsZUNvbHVtbnMsIHNvcnRTdHJpbmcpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgV29ya3NoZWV0UmVsc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0KSB7XG4gICAgICAgIGZvbGRlclsnc2hlZXQxLnhtbC5yZWxzJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRXb3Jrc2hlZXRSZWxzKCkpO1xuICAgIH1cbn1cbiJdfQ==
|
|
621
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvZXhjZWwvZXhjZWwtZmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQTJDLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUUvSzs7R0FFRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ2QsWUFBWSxDQUFDLE1BQWM7UUFDOUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxPQUFPO0lBQ1QsWUFBWSxDQUFDLE1BQWMsRUFBRSxhQUE0QjtRQUM1RCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQzFGLENBQUM7Q0FDSjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFDVixZQUFZLENBQUMsTUFBYztRQUM5QixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7Q0FDSjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQUNsQixZQUFZLENBQUMsTUFBYyxFQUFF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TUFBTSxLQUFLLEdBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLFlBQVksSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztTQUM5RTtRQUVELFlBQVksSUFBSSxpQkFBaUIsQ0FBQztRQUVsQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUU7WUFDcEIsTUFBTSxpQkFBaUIsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQzdDLE1BQU0sRUFBRSxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3BGLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDdEMsVUFBVSxHQUFHLHNCQUFzQixVQUFVLGdDQUFnQyxHQUFHLFVBQVUsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLENBQUM7U0FDMUg7UUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzdILENBQUM7Q0FDSjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUNuQixZQUFZLENBQUMsTUFBYztRQUM5QixNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRXhjZWxGaWxlIH0gZnJvbSAnLi9leGNlbC1pbnRlcmZhY2VzJztcbmltcG9ydCB7IEV4Y2VsU3RyaW5ncyB9IGZyb20gJy4vZXhjZWwtc3RyaW5ncyc7XG5pbXBvcnQgeyBXb3Jrc2hlZXREYXRhIH0gZnJvbSAnLi93b3Jrc2hlZXQtZGF0YSc7XG5cbmltcG9ydCB7IHN0clRvVTggfSBmcm9tICdmZmxhdGUnO1xuaW1wb3J0IHsgeWllbGRpbmdMb29wIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBIZWFkZXJUeXBlLCBFeHBvcnRSZWNvcmRUeXBlLCBJRXhwb3J0UmVjb3JkLCBJQ29sdW1uTGlzdCwgSUNvbHVtbkluZm8sIEdSSURfUk9PVF9TVU1NQVJZLCBHUklEX1BBUkVOVCwgR1JJRF9MRVZFTF9DT0wgfSBmcm9tICcuLi9leHBvcnRlci1jb21tb24vYmFzZS1leHBvcnQtc2VydmljZSc7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgUm9vdFJlbHNGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCkge1xuICAgICAgICBmb2xkZXJbJy5yZWxzJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRSZWxzKCkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHBGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCwgd29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSkge1xuICAgICAgICBmb2xkZXJbJ2FwcC54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldEFwcCh3b3Jrc2hlZXREYXRhLm9wdGlvbnMud29ya3NoZWV0TmFtZSkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb3JlRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QpIHtcbiAgICAgICAgZm9sZGVyWydjb3JlLnhtbCddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0Q29yZSgpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgV29ya2Jvb2tSZWxzRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgY29uc3QgaGFzU2hhcmVkU3RyaW5ncyA9ICF3b3Jrc2hlZXREYXRhLmlzRW1wdHkgfHwgd29ya3NoZWV0RGF0YS5vcHRpb25zLmFsd2F5c0V4cG9ydEhlYWRlcnM7XG4gICAgICAgIGZvbGRlclsnd29ya2Jvb2sueG1sLnJlbHMnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFdvcmtib29rUmVscyhoYXNTaGFyZWRTdHJpbmdzKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFRoZW1lRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QpIHtcbiAgICAgICAgZm9sZGVyWyd0aGVtZTEueG1sJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRUaGVtZSgpKTtcbiAgICB9XG59XG5cbmludGVyZmFjZSBEaW1lbnNpb25zIHtcbiAgICBzdGFydENvb3JkaW5hdGU6IHN0cmluZ1xuICAgIGVuZENvb3JkaW5hdGU6IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgQ3VycmVuY3lJbmZvIHtcbiAgICBzdHlsZVhmOiBudW1iZXJcbiAgICBzeW1ib2w6IHN0cmluZ1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtzaGVldEZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwcml2YXRlIHN0YXRpYyBNSU5fV0lEVEggPSA4LjQzO1xuICAgIHByaXZhdGUgbWF4T3V0bGluZUxldmVsID0gMDtcbiAgICBwcml2YXRlIHNoZWV0RGF0YSA9ICcnO1xuICAgIHByaXZhdGUgZGltZW5zaW9uID0gJyc7XG4gICAgcHJpdmF0ZSBmcmVlemVQYW5lID0gJyc7XG4gICAgcHJpdmF0ZSByb3dIZWlnaHQgPSAnJztcblxuICAgIHByaXZhdGUgbWVyZ2VDZWxsU3RyID0gJyc7XG4gICAgcHJpdmF0ZSBtZXJnZUNlbGxzQ291bnRlciA9IDA7XG4gICAgcHJpdmF0ZSByb3dJbmRleCA9IDA7XG4gICAgcHJpdmF0ZSBwaXZvdEdyaWRSb3dIZWFkZXJzTWFwID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oKTtcblxuICAgIHByaXZhdGUgZGltZW5zaW9uTWFwOiBNYXA8c3RyaW5nLCBEaW1lbnNpb25zPiA9IG5ldyBNYXA8c3RyaW5nLCBEaW1lbnNpb25zPigpO1xuICAgIHByaXZhdGUgaGllcmFyY2hpY2FsRGltZW5zaW9uTWFwOiBNYXA8YW55LCAgTWFwPHN0cmluZywgRGltZW5zaW9ucz4+ID0gbmV3IE1hcDxhbnksICBNYXA8c3RyaW5nLCBEaW1lbnNpb25zPj4oKTtcbiAgICBwcml2YXRlIGN1cnJlbnRTdW1tYXJ5T3duZXIgPSAnJztcbiAgICBwcml2YXRlIGN1cnJlbnRIaWVyYXJjaGljYWxPd25lciA9ICcnO1xuICAgIHByaXZhdGUgZmlyc3RDb2x1bW4gPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgIHByaXZhdGUgZmlyc3REYXRhUm93ID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICBwcml2YXRlIGlzVmFsaWRHcmlkOiBib29sZWFuO1xuICAgIHByaXZhdGUgbGFzdFZhbGlkUm93OiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIGN1cnJlbmN5U3R5bGVNYXAgPSBuZXcgTWFwPHN0cmluZywgQ3VycmVuY3lJbmZvPihbXG4gICAgICAgIFsnVVNEJywge3N0eWxlWGY6IDUsIHN5bWJvbDogJyQnfV0sXG4gICAgICAgIFsnR0JQJywge3N0eWxlWGY6IDYsIHN5bWJvbDogJ8KjJ31dLFxuICAgICAgICBbJ0NOWScsIHtzdHlsZVhmOiA3LCBzeW1ib2w6ICfCpSd9XSxcbiAgICAgICAgWydFVVInLCB7c3R5bGVYZjogOCwgc3ltYm9sOiAn4oKsJ31dLFxuICAgICAgICBbJ0pQWScsIHtzdHlsZVhmOiA5LCBzeW1ib2w6ICfCpSd9XSxcbiAgICBdKTtcblxuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoKSB7fVxuXG4gICAgcHVibGljIGFzeW5jIHdyaXRlRWxlbWVudEFzeW5jKGZvbGRlcjogT2JqZWN0LCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZURhdGFBc3luYyh3b3Jrc2hlZXREYXRhLCAoY29scywgcm93cykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc1RhYmxlID0gKCF3b3Jrc2hlZXREYXRhLmlzRW1wdHkgfHwgd29ya3NoZWV0RGF0YS5vcHRpb25zLmFsd2F5c0V4cG9ydEhlYWRlcnMpXG4gICAgICAgICAgICAgICAgICAgICYmIHdvcmtzaGVldERhdGEub3B0aW9ucy5leHBvcnRBc1RhYmxlO1xuXG4gICAgICAgICAgICAgICAgZm9sZGVyWydzaGVldDEueG1sJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRTaGVldFhNTChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaW1lbnNpb24sIHRoaXMuZnJlZXplUGFuZSwgY29scywgcm93cywgaGFzVGFibGUsIHRoaXMubWF4T3V0bGluZUxldmVsLCB3b3Jrc2hlZXREYXRhLmlzSGllcmFyY2hpY2FsKSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZURhdGFBc3luYyh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCBkb25lOiAoY29sczogc3RyaW5nLCBzaGVldERhdGE6IHN0cmluZykgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLnNoZWV0RGF0YSA9ICcnO1xuICAgICAgICBsZXQgY29scyA9ICcnO1xuICAgICAgICBjb25zdCBkaWN0aW9uYXJ5ID0gd29ya3NoZWV0RGF0YS5kYXRhRGljdGlvbmFyeTtcbiAgICAgICAgdGhpcy5yb3dJbmRleCA9IDA7XG5cbiAgICAgICAgaWYgKHdvcmtzaGVldERhdGEuaXNFbXB0eSAmJiAoIXdvcmtzaGVldERhdGEub3B0aW9ucy5hbHdheXNFeHBvcnRIZWFkZXJzIHx8IHdvcmtzaGVldERhdGEub3duZXIuY29sdW1ucy5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICB0aGlzLnNoZWV0RGF0YSArPSAnPHNoZWV0RGF0YS8+JztcbiAgICAgICAgICAgIHRoaXMuZGltZW5zaW9uID0gJ0ExJztcbiAgICAgICAgICAgIGRvbmUoJycsIHRoaXMuc2hlZXREYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG93bmVyID0gd29ya3NoZWV0RGF0YS5vd25lcjtcbiAgICAgICAgICAgIGNvbnN0IGlzSGllcmFyY2hpY2FsR3JpZCA9IHdvcmtzaGVldERhdGEuaXNIaWVyYXJjaGljYWw7XG4gICAgICAgICAgICBjb25zdCBoYXNNdWx0aUNvbHVtbkhlYWRlciA9IHdvcmtzaGVldERhdGEuaGFzTXVsdGlDb2x1bW5IZWFkZXI7XG4gICAgICAgICAgICBjb25zdCBoYXNNdWx0aVJvd0hlYWRlciA9IHdvcmtzaGVldERhdGEuaGFzTXVsdGlSb3dIZWFkZXI7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhc1VzZXJTZXRJbmRleCA9IG93bmVyLmNvbHVtbnMuc29tZShjb2wgPT4gY29sLmV4cG9ydEluZGV4ICE9PSB1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSAgd29ya3NoZWV0RGF0YS5vcHRpb25zLnJvd0hlaWdodDtcblxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkR3JpZCA9IHdvcmtzaGVldERhdGEuaXNIaWVyYXJjaGljYWwgfHwgd29ya3NoZWV0RGF0YS5pc1RyZWVHcmlkIHx8IHdvcmtzaGVldERhdGEuaXNHcm91cGVkR3JpZDtcbiAgICAgICAgICAgIHRoaXMucm93SGVpZ2h0ID0gaGVpZ2h0ID8gYCBodD1cIiR7aGVpZ2h0fVwiIGN1c3RvbUhlaWdodD1cIjFcImAgOiAnJztcbiAgICAgICAgICAgIHRoaXMuc2hlZXREYXRhICs9IGA8c2hlZXREYXRhPmA7XG5cbiAgICAgICAgICAgIGxldCBoZWFkZXJzRm9yTGV2ZWw6IElDb2x1bW5JbmZvW10gPSBbXTtcblxuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8PSBvd25lci5tYXhSb3dMZXZlbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyc0ZvckxldmVsID0gIG93bmVyLmNvbHVtbnMuZmlsdGVyKGMgPT4gYy5sZXZlbCA9PT0gaSAmJiBjLnJvd1NwYW4gPiAwICYmICFjLnNraXApXG5cbiAgICAgICAgICAgICAgICB0aGlzLnByaW50SGVhZGVycyh3b3Jrc2hlZXREYXRhLCBoZWFkZXJzRm9yTGV2ZWwsIGksIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dJbmRleCsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJvd0luZGV4ID0gMDtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gb3duZXIubWF4TGV2ZWw7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMucm93SW5kZXgrKztcbiAgICAgICAgICAgICAgICBjb25zdCBwaXZvdEdyaWRDb2x1bW5zID0gdGhpcy5waXZvdEdyaWRSb3dIZWFkZXJzTWFwLmdldCh0aGlzLnJvd0luZGV4KSA/PyBcIlwiO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hlZXREYXRhICs9IGA8cm93IHI9XCIke3RoaXMucm93SW5kZXh9XCIke3RoaXMucm93SGVpZ2h0fT4ke3Bpdm90R3JpZENvbHVtbnN9YDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGFsbG93ZWRDb2x1bW5zID0gb3duZXIuY29sdW1ucy5maWx0ZXIoYyA9PiBjLmhlYWRlclR5cGUgIT09IEhlYWRlclR5cGUuUm93SGVhZGVyICYmIGMuaGVhZGVyVHlwZSAhPT0gSGVhZGVyVHlwZS5NdWx0aVJvd0hlYWRlcik7XG5cbiAgICAgICAgICAgICAgICBoZWFkZXJzRm9yTGV2ZWwgPSBoYXNNdWx0aUNvbHVtbkhlYWRlciA/XG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRDb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGMgPT4gKGMubGV2ZWwgPCBpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5oZWFkZXJUeXBlICE9PSBIZWFkZXJUeXBlLk11bHRpQ29sdW1uSGVhZGVyIHx8IGMubGV2ZWwgPT09IGkpICYmIGMuY29sdW1uU3BhbiA+IDAgJiYgIWMuc2tpcClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXggLSBiLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5waW5uZWRJbmRleCAtIGIucGlubmVkSW5kZXgpIDpcbiAgICAgICAgICAgICAgICAgICAgaGFzVXNlclNldEluZGV4ID9cbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWRDb2x1bW5zLmZpbHRlcihjID0+ICFjLnNraXApIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWRDb2x1bW5zLmZpbHRlcihjID0+ICFjLnNraXApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRJbmRleCAtIGIuc3RhcnRJbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5waW5uZWRJbmRleCAtIGIucGlubmVkSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5wcmludEhlYWRlcnMod29ya3NoZWV0RGF0YSwgaGVhZGVyc0ZvckxldmVsLCBpLCBmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNoZWV0RGF0YSArPSBgPC9yb3c+YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbXVsdGlDb2x1bW5IZWFkZXJMZXZlbCA9IHdvcmtzaGVldERhdGEub3B0aW9ucy5pZ25vcmVNdWx0aUNvbHVtbkhlYWRlcnMgPyAwIDogb3duZXIubWF4TGV2ZWw7XG4gICAgICAgICAgICBjb25zdCBmcmVlemVIZWFkZXJzID0gd29ya3NoZWV0RGF0YS5vcHRpb25zLmZyZWV6ZUhlYWRlcnMgPyAyICsgbXVsdGlDb2x1bW5IZWFkZXJMZXZlbCA6IDE7XG5cbiAgICAgICAgICAgIGlmICghaXNIaWVyYXJjaGljYWxHcmlkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sID0gd29ya3NoZWV0RGF0YS5oYXNTdW1tYXJpZXMgPyB3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50ICsgMSA6IHdvcmtzaGVldERhdGEuY29sdW1uQ291bnQgLSAxXG4gICAgICAgICAgICAgICAgdGhpcy5kaW1lbnNpb24gPSAnQTE6JyArIEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihjb2wpICsgKHdvcmtzaGVldERhdGEucm93Q291bnQpO1xuXG4gICAgICAgICAgICAgICAgY29scyArPSAnPGNvbHM+JztcblxuICAgICAgICAgICAgICAgIGlmICghaGFzTXVsdGlDb2x1bW5IZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gZGljdGlvbmFyeS5jb2x1bW5XaWR0aHNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIHdpZHRoIHByb3ZpZGVkIGluIHRoZSBvcHRpb25zIGlmIGl0IGV4aXN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHdpZHRoSW5Ud2lwcyA9IHdvcmtzaGVldERhdGEub3B0aW9ucy5jb2x1bW5XaWR0aCAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzaGVldERhdGEub3B0aW9ucy5jb2x1bW5XaWR0aCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCgoKHdpZHRoIC8gOTYpICogMTQuNCksIFdvcmtzaGVldEZpbGUuTUlOX1dJRFRIKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHdpZHRoSW5Ud2lwcyA+IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhJblR3aXBzID0gV29ya3NoZWV0RmlsZS5NSU5fV0lEVEg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHMgKz0gYDxjb2wgbWluPVwiJHsoaiArIDEpfVwiIG1heD1cIiR7KGogKyAxKX1cIiB3aWR0aD1cIiR7d2lkdGhJblR3aXBzfVwiIGN1c3RvbVdpZHRoPVwiMVwiLz5gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29scyArPSBgPGNvbCBtaW49XCIxXCIgbWF4PVwiJHt3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50fVwiIHdpZHRoPVwiMTVcIiBjdXN0b21XaWR0aD1cIjFcIi8+YDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleE9mTGFzdFBpbm5lZENvbHVtbiA9IHdvcmtzaGVldERhdGEuaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW47XG4gICAgICAgICAgICAgICAgY29uc3QgZnJvemVuQ29sdW1uQ291bnQgPSBpbmRleE9mTGFzdFBpbm5lZENvbHVtbiArIDE7XG4gICAgICAgICAgICAgICAgbGV0IGZpcnN0Q2VsbCA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihmcm96ZW5Db2x1bW5Db3VudCkgKyBmcmVlemVIZWFkZXJzO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleE9mTGFzdFBpbm5lZENvbHVtbiAhPT0gdW5kZWZpbmVkICYmIGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uICE9PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAhd29ya3NoZWV0RGF0YS5vcHRpb25zLmlnbm9yZVBpbm5pbmcgJiZcbiAgICAgICAgICAgICAgICAgICAgIXdvcmtzaGVldERhdGEub3B0aW9ucy5pZ25vcmVDb2x1bW5zT3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mcmVlemVQYW5lID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGA8cGFuZSB4U3BsaXQ9XCIke2Zyb3plbkNvbHVtbkNvdW50fVwiIHlTcGxpdD1cIiR7ZnJlZXplSGVhZGVycyAtIDF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0b3BMZWZ0Q2VsbD1cIiR7Zmlyc3RDZWxsfVwiIGFjdGl2ZVBhbmU9XCJ0b3BSaWdodFwiIHN0YXRlPVwiZnJvemVuXCIvPmA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3b3Jrc2hlZXREYXRhLm9wdGlvbnMuZnJlZXplSGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICBmaXJzdENlbGwgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oMCkgKyBmcmVlemVIZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZyZWV6ZVBhbmUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgYDxwYW5lIHhTcGxpdD1cIjBcIiB5U3BsaXQ9XCIke2ZyZWV6ZUhlYWRlcnMgLSAxfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdG9wTGVmdENlbGw9XCIke2ZpcnN0Q2VsbH1cIiBhY3RpdmVQYW5lPVwidG9wUmlnaHRcIiBzdGF0ZT1cImZyb3plblwiLz5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uV2lkdGggPSB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuY29sdW1uV2lkdGggPyB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuY29sdW1uV2lkdGggOiAyMDtcbiAgICAgICAgICAgICAgICBjb2xzICs9IGA8Y29scz48Y29sIG1pbj1cIjFcIiBtYXg9XCIke3dvcmtzaGVldERhdGEuY29sdW1uQ291bnR9XCIgd2lkdGg9XCIke2NvbHVtbldpZHRofVwiIGN1c3RvbVdpZHRoPVwiMVwiLz5gO1xuXG4gICAgICAgICAgICAgICAgaWYgKHdvcmtzaGVldERhdGEub3B0aW9ucy5mcmVlemVIZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Q2VsbCA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbigwKSArIGZyZWV6ZUhlYWRlcnM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnJlZXplUGFuZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBgPHBhbmUgeFNwbGl0PVwiMFwiIHlTcGxpdD1cIiR7ZnJlZXplSGVhZGVycyAtIDF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0b3BMZWZ0Q2VsbD1cIiR7Zmlyc3RDZWxsfVwiIGFjdGl2ZVBhbmU9XCJ0b3BSaWdodFwiIHN0YXRlPVwiZnJvemVuXCIvPmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAod29ya3NoZWV0RGF0YS5oYXNTdW1tYXJpZXMpIHtcbiAgICAgICAgICAgICAgICBjb2xzICs9IGA8Y29sIG1pbj1cIiR7d29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudCArIDJ9XCIgbWF4PVwiJHt3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50ICsgMn1cIiBoaWRkZW49XCIxXCIvPmA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbHMgKz0gJzwvY29scz4nO1xuXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NEYXRhUmVjb3Jkc0FzeW5jKHdvcmtzaGVldERhdGEsIChyb3dzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGVldERhdGEgKz0gcm93cztcbiAgICAgICAgICAgICAgICB0aGlzLnNoZWV0RGF0YSArPSAnPC9zaGVldERhdGE+JztcblxuICAgICAgICAgICAgICAgIGlmICgoaGFzTXVsdGlDb2x1bW5IZWFkZXIgfHwgaGFzTXVsdGlSb3dIZWFkZXIpICYmIHRoaXMubWVyZ2VDZWxsc0NvdW50ZXIgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hlZXREYXRhICs9IGA8bWVyZ2VDZWxscyBjb3VudD1cIiR7dGhpcy5tZXJnZUNlbGxzQ291bnRlcn1cIj4ke3RoaXMubWVyZ2VDZWxsU3RyfTwvbWVyZ2VDZWxscz5gO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoY29scywgdGhpcy5zaGVldERhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NEYXRhUmVjb3Jkc0FzeW5jKHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEsIGRvbmU6IChyb3dzOiBzdHJpbmcpID0+IHZvaWQpIHtcbiAgICAgICAgY29uc3Qgcm93RGF0YUFyciA9IFtdO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSAgd29ya3NoZWV0RGF0YS5vcHRpb25zLnJvd0hlaWdodDtcbiAgICAgICAgdGhpcy5yb3dIZWlnaHQgPSBoZWlnaHQgPyAnIGh0PVwiJyArIGhlaWdodCArICdcIiBjdXN0b21IZWlnaHQ9XCIxXCInIDogJyc7XG5cbiAgICAgICAgY29uc3QgaXNIaWVyYXJjaGljYWxHcmlkID0gd29ya3NoZWV0RGF0YS5pc0hpZXJhcmNoaWNhbDtcbiAgICAgICAgY29uc3QgaGFzVXNlclNldEluZGV4ID0gd29ya3NoZWV0RGF0YS5vd25lci5jb2x1bW5zLnNvbWUoYyA9PiBjLmV4cG9ydEluZGV4ICE9PSB1bmRlZmluZWQpO1xuXG4gICAgICAgIGxldCByZWNvcmRIZWFkZXJzID0gW107XG5cbiAgICAgICAgeWllbGRpbmdMb29wKHdvcmtzaGVldERhdGEucm93Q291bnQgLSB3b3Jrc2hlZXREYXRhLm11bHRpQ29sdW1uSGVhZGVyUm93cyAtIDEsIDEwMDAsXG4gICAgICAgICAgICAoaSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghd29ya3NoZWV0RGF0YS5pc0VtcHR5KXtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0hpZXJhcmNoaWNhbEdyaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNVc2VyU2V0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRIZWFkZXJzID0gd29ya3NoZWV0RGF0YS5yb290S2V5cztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkSGVhZGVycyA9IHdvcmtzaGVldERhdGEub3duZXIuY29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGMgPT4gYy5oZWFkZXJUeXBlICE9PSBIZWFkZXJUeXBlLk11bHRpQ29sdW1uSGVhZGVyICYmIGMuaGVhZGVyVHlwZSAhPT0gSGVhZGVyVHlwZS5NdWx0aVJvd0hlYWRlciAmJiBjLmhlYWRlclR5cGUgIT09IEhlYWRlclR5cGUuUm93SGVhZGVyICYmICFjLnNraXApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXgtYi5zdGFydEluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5waW5uZWRJbmRleC1iLnBpbm5lZEluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGMgPT4gYy5maWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNvcmQgPSB3b3Jrc2hlZXREYXRhLmRhdGFbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5IZWFkZXJSZWNvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNvcmRPd25lciA9IHdvcmtzaGVldERhdGEub3duZXJzLmdldChyZWNvcmQub3duZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc011bHRpQ29sdW1uSGVhZGVycyA9IHJlY29yZE93bmVyLmNvbHVtbnMuc29tZShjID0+ICFjLnNraXAgJiYgYy5oZWFkZXJUeXBlID09PSBIZWFkZXJUeXBlLk11bHRpQ29sdW1uSGVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNNdWx0aUNvbHVtbkhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oR3JpZFByaW50TXVsdGlDb2xIZWFkZXJzKHdvcmtzaGVldERhdGEsIHJvd0RhdGFBcnIsIHJlY29yZCwgcmVjb3JkT3duZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkSGVhZGVycyA9IE9iamVjdC5rZXlzKHdvcmtzaGVldERhdGEuZGF0YVtpXS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJvd0RhdGFBcnIucHVzaCh0aGlzLnByb2Nlc3NSb3cod29ya3NoZWV0RGF0YSwgaSwgcmVjb3JkSGVhZGVycywgaXNIaWVyYXJjaGljYWxHcmlkKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKHJvd0RhdGFBcnIuam9pbignJykpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhHcmlkUHJpbnRNdWx0aUNvbEhlYWRlcnMod29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSwgcm93RGF0YUFycjogYW55W10sIHJlY29yZDogSUV4cG9ydFJlY29yZCxcbiAgICAgICAgb3duZXI6IElDb2x1bW5MaXN0KSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgb3duZXIubWF4TGV2ZWw7IGorKykge1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkTGV2ZWwgPSByZWNvcmQubGV2ZWw7XG4gICAgICAgICAgICBjb25zdCBvdXRsaW5lTGV2ZWwgPSByZWNvcmRMZXZlbCA+IDAgPyBgIG91dGxpbmVMZXZlbD1cIiR7cmVjb3JkTGV2ZWx9XCJgIDogJyc7XG4gICAgICAgICAgICB0aGlzLm1heE91dGxpbmVMZXZlbCA9IHRoaXMubWF4T3V0bGluZUxldmVsIDwgcmVjb3JkTGV2ZWwgPyByZWNvcmRMZXZlbCA6IHRoaXMubWF4T3V0bGluZUxldmVsO1xuICAgICAgICAgICAgY29uc3Qgc0hpZGRlbiA9IHJlY29yZC5oaWRkZW4gPyBgIGhpZGRlbj1cIjFcImAgOiAnJztcblxuICAgICAgICAgICAgdGhpcy5yb3dJbmRleCsrO1xuICAgICAgICAgICAgbGV0IHJvdyA9IGA8cm93IHI9XCIke3RoaXMucm93SW5kZXh9XCIke3RoaXMucm93SGVpZ2h0fSR7b3V0bGluZUxldmVsfSR7c0hpZGRlbn0+YDtcblxuICAgICAgICAgICAgY29uc3QgaGVhZGVyc0ZvckxldmVsID0gb3duZXIuY29sdW1uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiAoYy5sZXZlbCA8IGogJiZcbiAgICAgICAgICAgICAgICAgICAgYy5oZWFkZXJUeXBlICE9PSBIZWFkZXJUeXBlLk11bHRpQ29sdW1uSGVhZGVyIHx8IGMubGV2ZWwgPT09IGopICYmIGMuY29sdW1uU3BhbiA+IDAgJiYgIWMuc2tpcClcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4KVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4IC0gYi5waW5uZWRJbmRleCk7XG5cbiAgICAgICAgICAgIGxldCBzdGFydFZhbHVlID0gMCArIHJlY29yZC5sZXZlbDtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjdXJyZW50Q29sIG9mIGhlYWRlcnNGb3JMZXZlbCkge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29sLmxldmVsID09PSBqKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb2x1bW5Db29yZGluYXRlO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db29yZGluYXRlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihzdGFydFZhbHVlKSArIHRoaXMucm93SW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uVmFsdWUgPSB3b3Jrc2hlZXREYXRhLmRhdGFEaWN0aW9uYXJ5LnNhdmVWYWx1ZShjdXJyZW50Q29sLmhlYWRlciwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJvdyArPSBgPGMgcj1cIiR7Y29sdW1uQ29vcmRpbmF0ZX1cIiBzPVwiM1wiIHQ9XCJzXCI+PHY+JHtjb2x1bW5WYWx1ZX08L3Y+PC9jPmA7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGogIT09IG93bmVyLm1heExldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlQ2VsbHNDb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlQ2VsbFN0ciArPSBgIDxtZXJnZUNlbGwgcmVmPVwiJHtjb2x1bW5Db29yZGluYXRlfTpgO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbC5oZWFkZXJUeXBlID09PSBIZWFkZXJUeXBlLkNvbHVtbkhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvb3JkaW5hdGUgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oc3RhcnRWYWx1ZSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5yb3dJbmRleCArIG93bmVyLm1heExldmVsIC0gY3VycmVudENvbC5sZXZlbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSAxOyBrIDwgY3VycmVudENvbC5jb2x1bW5TcGFuOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uQ29vcmRpbmF0ZSA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihzdGFydFZhbHVlICsgaykgKyB0aGlzLnJvd0luZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cgKz0gYDxjIHI9XCIke2NvbHVtbkNvb3JkaW5hdGV9XCIgcz1cIjNcIiAvPmA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlQ2VsbFN0ciArPSBgJHtjb2x1bW5Db29yZGluYXRlfVwiIC8+YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0YXJ0VmFsdWUgKz0gY3VycmVudENvbC5jb2x1bW5TcGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm93ICs9IGA8L3Jvdz5gO1xuICAgICAgICAgICAgcm93RGF0YUFyci5wdXNoKHJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NSb3cod29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSwgaTogbnVtYmVyLCBoZWFkZXJzRm9yTGV2ZWw6IGFueVtdLCBpc0hpZXJhcmNoaWNhbEdyaWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gd29ya3NoZWV0RGF0YS5kYXRhW2ldO1xuXG4gICAgICAgIGNvbnN0IHJvd0RhdGEgPSBuZXcgQXJyYXkod29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudCArIDIpO1xuXG4gICAgICAgIGNvbnN0IHJvd0xldmVsID0gcmVjb3JkLmxldmVsO1xuICAgICAgICBjb25zdCBvdXRsaW5lTGV2ZWwgPSByb3dMZXZlbCA+IDAgPyBgIG91dGxpbmVMZXZlbD1cIiR7cm93TGV2ZWx9XCJgIDogJyc7XG4gICAgICAgIHRoaXMubWF4T3V0bGluZUxldmVsID0gdGhpcy5tYXhPdXRsaW5lTGV2ZWwgPCByb3dMZXZlbCA/IHJvd0xldmVsIDogdGhpcy5tYXhPdXRsaW5lTGV2ZWw7XG5cbiAgICAgICAgY29uc3Qgc0hpZGRlbiA9IHJlY29yZC5oaWRkZW4gPyBgIGhpZGRlbj1cIjFcImAgOiAnJztcblxuICAgICAgICB0aGlzLnJvd0luZGV4Kys7XG4gICAgICAgIGNvbnN0IHBpdm90R3JpZENvbHVtbnMgPSB0aGlzLnBpdm90R3JpZFJvd0hlYWRlcnNNYXAuZ2V0KHRoaXMucm93SW5kZXgpID8/IFwiXCI7XG5cbiAgICAgICAgcm93RGF0YVswXSA9IGA8cm93IHI9XCIke3RoaXMucm93SW5kZXh9XCIke3RoaXMucm93SGVpZ2h0fSR7b3V0bGluZUxldmVsfSR7c0hpZGRlbn0+JHtwaXZvdEdyaWRDb2x1bW5zfWA7XG4gICAgICAgIGNvbnN0IGtleXMgPSB3b3Jrc2hlZXREYXRhLmlzU3BlY2lhbERhdGEgPyBbcmVjb3JkLmRhdGFdIDogaGVhZGVyc0ZvckxldmVsO1xuICAgICAgICBjb25zdCBpc0RhdGFSZWNvcmQgPSByZWNvcmQudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5IaWVyYXJjaGljYWxHcmlkUmVjb3JkXG4gICAgICAgICAgICB8fCByZWNvcmQudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5EYXRhUmVjb3JkXG4gICAgICAgICAgICB8fCByZWNvcmQudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5Hcm91cGVkUmVjb3JkXG4gICAgICAgICAgICB8fCByZWNvcmQudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5UcmVlR3JpZFJlY29yZDtcblxuICAgICAgICBjb25zdCBpc1ZhbGlkUmVjb3JkVHlwZSA9IGlzRGF0YVJlY29yZCB8fCByZWNvcmQudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5TdW1tYXJ5UmVjb3JkO1xuXG4gICAgICAgIGlmIChpc1ZhbGlkUmVjb3JkVHlwZSAmJiB3b3Jrc2hlZXREYXRhLmhhc1N1bW1hcmllcykge1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlU3VtbWFyeURpbWVuc2lvbnMocmVjb3JkLCBpc0RhdGFSZWNvcmQsIHdvcmtzaGVldERhdGEuaXNHcm91cGVkR3JpZClcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwga2V5cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY29uc3QgY29sID0gaiArIChpc0hpZXJhcmNoaWNhbEdyaWQgPyByb3dMZXZlbCA6IHdvcmtzaGVldERhdGEuaXNQaXZvdEdyaWQgPyB3b3Jrc2hlZXREYXRhLm93bmVyLm1heFJvd0xldmVsIDogMCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNlbGxEYXRhID0gdGhpcy5nZXRDZWxsRGF0YSh3b3Jrc2hlZXREYXRhLCBpLCBjb2wsIGtleXNbal0pO1xuXG4gICAgICAgICAgICByb3dEYXRhW2ogKyAxXSA9IGNlbGxEYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgcm93RGF0YVtrZXlzLmxlbmd0aCArIDFdID0gJzwvcm93Pic7XG5cbiAgICAgICAgcmV0dXJuIHJvd0RhdGEuam9pbignJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDZWxsRGF0YSh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCByb3c6IG51bWJlciwgY29sdW1uOiBudW1iZXIsIGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHdvcmtzaGVldERhdGEuZGF0YURpY3Rpb25hcnk7XG4gICAgICAgIGxldCBjb2x1bW5OYW1lID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKGNvbHVtbikgKyAodGhpcy5yb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IGZ1bGxSb3cgPSB3b3Jrc2hlZXREYXRhLmRhdGFbcm93XTtcbiAgICAgICAgY29uc3QgaXNIZWFkZXJSZWNvcmQgPSBmdWxsUm93LnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuSGVhZGVyUmVjb3JkO1xuICAgICAgICBjb25zdCBpc1N1bW1hcnlSZWNvcmQgPSBmdWxsUm93LnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuU3VtbWFyeVJlY29yZDtcbiAgICAgICAgY29uc3QgaXNWYWxpZFJlY29yZFR5cGUgPSBmdWxsUm93LnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuR3JvdXBlZFJlY29yZFxuICAgICAgICAgICAgfHwgZnVsbFJvdy50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkRhdGFSZWNvcmRcbiAgICAgICAgICAgIHx8IGZ1bGxSb3cudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5IaWVyYXJjaGljYWxHcmlkUmVjb3JkXG4gICAgICAgICAgICB8fCBmdWxsUm93LnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuVHJlZUdyaWRSZWNvcmQ7XG5cbiAgICAgICAgdGhpcy5maXJzdERhdGFSb3cgPSB0aGlzLmZpcnN0RGF0YVJvdyA+IHRoaXMucm93SW5kZXggPyB0aGlzLnJvd0luZGV4IDogdGhpcy5maXJzdERhdGFSb3c7XG5cbiAgICAgICAgbGV0IGNlbGxWYWx1ZSA9IHdvcmtzaGVldERhdGEuaXNTcGVjaWFsRGF0YSA/XG4gICAgICAgICAgICBmdWxsUm93LmRhdGEgOlxuICAgICAgICAgICAgZnVsbFJvdy5kYXRhW2tleV07XG5cbiAgICAgICAgaWYgKGNlbGxWYWx1ZSA9PT0gR1JJRF9MRVZFTF9DT0wgfHwga2V5ID09PSBHUklEX0xFVkVMX0NPTCkge1xuICAgICAgICAgICAgY29sdW1uTmFtZSA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbih3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50ICsgMSkgKyAodGhpcy5yb3dJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAod29ya3NoZWV0RGF0YS5oYXNTdW1tYXJpZXMgJiYgKGlzVmFsaWRSZWNvcmRUeXBlIHx8ICh3b3Jrc2hlZXREYXRhLmlzR3JvdXBlZEdyaWQgJiYgaXNTdW1tYXJ5UmVjb3JkKSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3VtbWFyeUNvb3JkaW5hdGVzKGNvbHVtbk5hbWUsIGtleSwgZnVsbFJvdy5oaWVyYXJjaGljYWxPd25lciwgd29ya3NoZWV0RGF0YS5pc0dyb3VwZWRHcmlkICYmIGlzU3VtbWFyeVJlY29yZClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmdWxsUm93LnN1bW1hcnlLZXkgJiYgZnVsbFJvdy5zdW1tYXJ5S2V5ID09PSBHUklEX1JPT1RfU1VNTUFSWSAmJiBrZXkgIT09IEdSSURfTEVWRUxfQ09MICYmICF0aGlzLmlzVmFsaWRHcmlkKSB7XG4gICAgICAgICAgICB0aGlzLnNldFJvb3RTdW1tYXJ5U3RhcnRDb29yZGluYXRlKGNvbHVtbiwga2V5KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZmlyc3RDb2x1bW4gPiBjb2x1bW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJvb3RTdW1tYXJ5U3RhcnRDb29yZGluYXRlKHdvcmtzaGVldERhdGEuY29sdW1uQ291bnQgKyAxLCBHUklEX0xFVkVMX0NPTCk7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdENvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldENvbEFyciA9IEFycmF5LmZyb20od29ya3NoZWV0RGF0YS5vd25lcnMudmFsdWVzKCkpLm1hcChhcnIgPT4gYXJyLmNvbHVtbnMpLmZpbmQocHJvZHVjdCA9PiBwcm9kdWN0LnNvbWUoaXRlbSA9PiBpdGVtLmZpZWxkID09PSBrZXkpKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0Q29sID0gdGFyZ2V0Q29sQXJyID8gdGFyZ2V0Q29sQXJyLmZpbmQoY29sID0+IGNvbC5maWVsZCA9PT0ga2V5KSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgaXNDb2x1bW5DdXJyZW5jeVR5cGUgPSB0YXJnZXRDb2wgPyB0YXJnZXRDb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScgOiBmYWxzZTtcblxuICAgICAgICBpZiAoKGNlbGxWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGNlbGxWYWx1ZSA9PT0gbnVsbCkgJiYgIXdvcmtzaGVldERhdGEuaGFzU3VtbWFyaWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gYDxjIHI9XCIke2NvbHVtbk5hbWV9XCIgcz1cIjFcIi8+YDtcbiAgICAgICAgfSBlbHNlIGlmICgod29ya3NoZWV0RGF0YS5oYXNTdW1tYXJpZXMgJiYgKGlzVmFsaWRSZWNvcmRUeXBlIHx8IGlzSGVhZGVyUmVjb3JkKSkgfHwgIXdvcmtzaGVldERhdGEuaGFzU3VtbWFyaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBzYXZlZFZhbHVlID0gZGljdGlvbmFyeS5zYXZlVmFsdWUoY2VsbFZhbHVlLCBpc0hlYWRlclJlY29yZCk7XG4gICAgICAgICAgICBjb25zdCBpc1NhdmVkQXNTdHJpbmcgPSBzYXZlZFZhbHVlICE9PSAtMTtcblxuICAgICAgICAgICAgY29uc3QgaXNTYXZlZEFzRGF0ZSA9ICFpc1NhdmVkQXNTdHJpbmcgJiYgY2VsbFZhbHVlIGluc3RhbmNlb2YgRGF0ZTtcblxuICAgICAgICAgICAgbGV0IHZhbHVlID0gaXNTYXZlZEFzU3RyaW5nID8gc2F2ZWRWYWx1ZSA6IGNlbGxWYWx1ZTtcblxuICAgICAgICAgICAgaWYgKGlzU2F2ZWRBc0RhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lWm9uZU9mZnNldCA9IHZhbHVlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMDtcbiAgICAgICAgICAgICAgICBjb25zdCBpc29TdHJpbmcgPSAobmV3IERhdGUodmFsdWUgLSB0aW1lWm9uZU9mZnNldCkpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBpc29TdHJpbmcuc3Vic3RyaW5nKDAsIGlzb1N0cmluZy5pbmRleE9mKCcuJykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0eXBlID0gaXNTYXZlZEFzU3RyaW5nID8gYCB0PVwic1wiYCA6IGlzU2F2ZWRBc0RhdGUgPyBgIHQ9XCJkXCJgIDogJyc7XG5cbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGlzSGVhZGVyUmVjb3JkID8gYCBzPVwiM1wiYCA6IGlzU2F2ZWRBc1N0cmluZyA/ICcnIDogaXNTYXZlZEFzRGF0ZSA/IGAgcz1cIjJcImAgOiBpc0NvbHVtbkN1cnJlbmN5VHlwZSA/IGAgcz1cIiR7dGhpcy5jdXJyZW5jeVN0eWxlTWFwLmdldCh0YXJnZXRDb2wuY3VycmVuY3lDb2RlKT8uc3R5bGVYZiB8fCAwfVwiYCA6IGAgcz1cIjFcImA7XG5cbiAgICAgICAgICAgIHJldHVybiBgPGMgcj1cIiR7Y29sdW1uTmFtZX1cIiR7dHlwZX0ke2Zvcm1hdH0+PHY+JHt2YWx1ZX08L3Y+PC9jPmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgc3VtbWFyeUZ1bmMgPSBgXCIke2NlbGxWYWx1ZSA/PyBcIlwifVwiYDtcblxuICAgICAgICAgICAgaWYgKGlzU3VtbWFyeVJlY29yZCAmJiBjZWxsVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaW1lbnNpb25NYXBLZXkgPSB0aGlzLmlzVmFsaWRHcmlkID8gZnVsbFJvdy5oaWVyYXJjaGljYWxPd25lciA/PyBHUklEX1BBUkVOVCA6IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ZWwgPSB3b3Jrc2hlZXREYXRhLmlzR3JvdXBlZEdyaWQgPyB3b3Jrc2hlZXREYXRhLm1heExldmVsIDogZnVsbFJvdy5sZXZlbDtcblxuICAgICAgICAgICAgICAgIHN1bW1hcnlGdW5jID0gdGhpcy5nZXRTdW1tYXJ5RnVuY3Rpb24oY2VsbFZhbHVlLmxhYmVsLCBrZXksIGRpbWVuc2lvbk1hcEtleSwgbGV2ZWwsIHRhcmdldENvbCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXN1bW1hcnlGdW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxTdHIgPSBgJHtjZWxsVmFsdWUubGFiZWx9OiAke2NlbGxWYWx1ZS52YWx1ZX1gO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzYXZlZFZhbHVlID0gZGljdGlvbmFyeS5zYXZlVmFsdWUoY2VsbFN0ciwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDxjIHI9XCIke2NvbHVtbk5hbWV9XCIgdD1cInNcIiBzPVwiMVwiPjx2PiR7c2F2ZWRWYWx1ZX08L3Y+PC9jPmA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGA8YyByPVwiJHtjb2x1bW5OYW1lfVwiIHQ9XCJzdHJcIj48ZiB0PVwiYXJyYXlcIiByZWY9XCIke2NvbHVtbk5hbWV9XCI+JHtzdW1tYXJ5RnVuY308L2Y+PC9jPmA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBgPGMgcj1cIiR7Y29sdW1uTmFtZX1cIiB0PVwic1wiIHM9XCIxXCI+PGY+JHtzdW1tYXJ5RnVuY308L2Y+PC9jPmA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc29sdmVTdW1tYXJ5RGltZW5zaW9ucyhyZWNvcmQ6IElFeHBvcnRSZWNvcmQsIGlzRGF0YVJlY29yZDogYm9vbGVhbiwgaXNHcm91cGVkR3JpZDogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkR3JpZCAmJlxuICAgICAgICAgICAgdGhpcy5jdXJyZW50SGllcmFyY2hpY2FsT3duZXIgIT09ICcnICYmXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRIaWVyYXJjaGljYWxPd25lciAhPT0gcmVjb3JkLm93bmVyICYmXG4gICAgICAgICAgICAhdGhpcy5oaWVyYXJjaGljYWxEaW1lbnNpb25NYXAuZ2V0KHRoaXMuY3VycmVudEhpZXJhcmNoaWNhbE93bmVyKSkge1xuICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljYWxEaW1lbnNpb25NYXAuc2V0KHRoaXMuY3VycmVudEhpZXJhcmNoaWNhbE93bmVyLCBuZXcgTWFwKHRoaXMuZGltZW5zaW9uTWFwKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0RhdGFSZWNvcmQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdW1tYXJ5T3duZXIgIT09IHJlY29yZC5zdW1tYXJ5S2V5IHx8IHRoaXMuY3VycmVudEhpZXJhcmNoaWNhbE93bmVyICE9PSByZWNvcmQuaGllcmFyY2hpY2FsT3duZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpbWVuc2lvbk1hcC5jbGVhcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdW1tYXJ5T3duZXIgPSByZWNvcmQuc3VtbWFyeUtleTtcblxuICAgICAgICAgICAgLy8gRm9yIGdyb3VwZWQgZ3JpZCB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBwYXJlbnQgbWFwXG4gICAgICAgICAgICAvLyBzbyB3ZSBjYW4gY2hhbmdlIHRoZSBzdGFydENvb3JkaW5hdGUgZm9yIGVhY2ggcmVjb3JkXG4gICAgICAgICAgICBpZiAoaXNHcm91cGVkR3JpZCAmJiB0aGlzLmN1cnJlbnRIaWVyYXJjaGljYWxPd25lciAhPT0gJycgJiYgcmVjb3JkLmhpZXJhcmNoaWNhbE93bmVyID09PSBHUklEX1BBUkVOVCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGllcmFyY2hpY2FsRGltZW5zaW9uTWFwLmRlbGV0ZShHUklEX1BBUkVOVClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jdXJyZW50SGllcmFyY2hpY2FsT3duZXIgPSByZWNvcmQuaGllcmFyY2hpY2FsT3duZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFN1bW1hcnlDb29yZGluYXRlcyhjb2x1bW5OYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nLCBoaWVyYXJjaGljYWxPd25lcjogc3RyaW5nLCB1c2VMYXN0VmFsaWRFbmRDb29yZGluYXRlOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldERpbWVuc2lvbk1hcCA9IHRoaXMuaGllcmFyY2hpY2FsRGltZW5zaW9uTWFwLmdldChoaWVyYXJjaGljYWxPd25lcikgPz8gdGhpcy5kaW1lbnNpb25NYXA7XG5cbiAgICAgICAgaWYgKCF0YXJnZXREaW1lbnNpb25NYXAuZ2V0KGtleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxEaW1lbnNpb25zOiBEaW1lbnNpb25zID0ge1xuICAgICAgICAgICAgICAgIHN0YXJ0Q29vcmRpbmF0ZTogY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgICBlbmRDb29yZGluYXRlOiBjb2x1bW5OYW1lXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0YXJnZXREaW1lbnNpb25NYXAuc2V0KGtleSwgaW5pdGlhbERpbWVuc2lvbnMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodXNlTGFzdFZhbGlkRW5kQ29vcmRpbmF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RW5kQ29vcmRpbmF0ZXModGFyZ2V0RGltZW5zaW9uTWFwLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0RGltZW5zaW9uTWFwLmdldChrZXkpLmVuZENvb3JkaW5hdGUgPSBjb2x1bW5OYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdFZhbGlkUm93ID0gdGFyZ2V0RGltZW5zaW9uTWFwLmdldChrZXkpLmVuZENvb3JkaW5hdGUubWF0Y2goL1thLXpdK3xbXmEtel0rL2dpKVsxXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNWYWxpZEdyaWQgJiYgIXVzZUxhc3RWYWxpZEVuZENvb3JkaW5hdGUgJiYgaGllcmFyY2hpY2FsT3duZXIgIT09IEdSSURfUEFSRU5UKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRNYXAgPSB0aGlzLmhpZXJhcmNoaWNhbERpbWVuc2lvbk1hcC5nZXQoR1JJRF9QQVJFTlQpO1xuICAgICAgICAgICAgdGhpcy5zZXRFbmRDb29yZGluYXRlcyhwYXJlbnRNYXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRFbmRDb29yZGluYXRlcyhtYXA6IE1hcDxzdHJpbmcsIERpbWVuc2lvbnM+LCB1c2VMYXN0VmFsaWRFbmRDb29yZGluYXRlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgZm9yIChjb25zdCBhIG9mIG1hcC52YWx1ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgY29sTmFtZSA9IGEuZW5kQ29vcmRpbmF0ZS5tYXRjaCgvW2Etel0rfFteYS16XSsvZ2kpWzBdO1xuICAgICAgICAgICAgYS5lbmRDb29yZGluYXRlID0gYCR7Y29sTmFtZX0ke3VzZUxhc3RWYWxpZEVuZENvb3JkaW5hdGUgPyB0aGlzLmxhc3RWYWxpZFJvdyA6IHRoaXMucm93SW5kZXh9YDtcbiAgICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN1bW1hcnlGdW5jdGlvbih0eXBlOiBzdHJpbmcsIGtleTogc3RyaW5nLCBkaW1lbnNpb25NYXBLZXk6IGFueSwgcmVjb3JkTGV2ZWw6IG51bWJlciwgY29sOiBJQ29sdW1uSW5mbyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbk1hcCA9IGRpbWVuc2lvbk1hcEtleSA/IHRoaXMuaGllcmFyY2hpY2FsRGltZW5zaW9uTWFwLmdldChkaW1lbnNpb25NYXBLZXkpIDogdGhpcy5kaW1lbnNpb25NYXA7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBkaW1lbnNpb25NYXAuZ2V0KGtleSk7XG4gICAgICAgIGNvbnN0IGxldmVsRGltZW5zaW9ucyA9IGRpbWVuc2lvbk1hcC5nZXQoR1JJRF9MRVZFTF9DT0wpO1xuXG4gICAgICAgIGxldCBmdW5jID0gJyc7XG4gICAgICAgIGxldCBmdW5jVHlwZSA9ICcnO1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGNvbnN0IGN1cnJlbmN5SW5mbyA9IHRoaXMuY3VycmVuY3lTdHlsZU1hcC5nZXQoY29sLmN1cnJlbmN5Q29kZSk7XG5cbiAgICAgICAgc3dpdGNoKHR5cGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImNvdW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcIkNvdW50OiBcIiZhbXA7X3hsZm4uQ09VTlRJRigke2xldmVsRGltZW5zaW9ucy5zdGFydENvb3JkaW5hdGV9OiR7bGV2ZWxEaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9LCAke3JlY29yZExldmVsfSlgXG4gICAgICAgICAgICBjYXNlIFwibWluXCI6XG4gICAgICAgICAgICAgICAgZnVuYyA9IGBfeGxmbi5NSU4oX3hsZm4uSUYoJHtsZXZlbERpbWVuc2lvbnMuc3RhcnRDb29yZGluYXRlfToke2xldmVsRGltZW5zaW9ucy5lbmRDb29yZGluYXRlfT0ke3JlY29yZExldmVsfSwgJHtkaW1lbnNpb25zLnN0YXJ0Q29vcmRpbmF0ZX06JHtkaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9KSlgXG4gICAgICAgICAgICAgICAgZnVuY1R5cGUgPSBgXCJNaW46IFwiJmFtcDtgO1xuXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuY1R5cGUgKyAoY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knICYmIGN1cnJlbmN5SW5mb1xuICAgICAgICAgICAgICAgICAgICA/IGBfeGxmbi5URVhUKCR7ZnVuY30sIFwiJHtjdXJyZW5jeUluZm8uc3ltYm9sfSMsIyMwLjAwXCIpYFxuICAgICAgICAgICAgICAgICAgICA6IGAke2Z1bmN9YCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgICAgICAgICAgZnVuYyA9IGBfeGxmbi5NQVgoX3hsZm4uSUYoJHtsZXZlbERpbWVuc2lvbnMuc3RhcnRDb29yZGluYXRlfToke2xldmVsRGltZW5zaW9ucy5lbmRDb29yZGluYXRlfT0ke3JlY29yZExldmVsfSwgJHtkaW1lbnNpb25zLnN0YXJ0Q29vcmRpbmF0ZX06JHtkaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9KSlgXG4gICAgICAgICAgICAgICAgZnVuY1R5cGUgPSBgXCJNYXg6IFwiJmFtcDtgO1xuXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuY1R5cGUgKyAoY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knICYmIGN1cnJlbmN5SW5mb1xuICAgICAgICAgICAgICAgICAgICA/IGBfeGxmbi5URVhUKCR7ZnVuY30sIFwiJHtjdXJyZW5jeUluZm8uc3ltYm9sfSMsIyMwLjAwXCIpYFxuICAgICAgICAgICAgICAgICAgICA6IGAke2Z1bmN9YCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICBjYXNlIFwic3VtXCI6XG4gICAgICAgICAgICAgICAgZnVuYyA9ICBgX3hsZm4uU1VNSUYoJHtsZXZlbERpbWVuc2lvbnMuc3RhcnRDb29yZGluYXRlfToke2xldmVsRGltZW5zaW9ucy5lbmRDb29yZGluYXRlfSwgJHtyZWNvcmRMZXZlbH0sICR7ZGltZW5zaW9ucy5zdGFydENvb3JkaW5hdGV9OiR7ZGltZW5zaW9ucy5lbmRDb29yZGluYXRlfSlgXG4gICAgICAgICAgICAgICAgZnVuY1R5cGUgPSBgXCJTdW06IFwiJmFtcDtgO1xuXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuY1R5cGUgKyAoY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knICYmIGN1cnJlbmN5SW5mb1xuICAgICAgICAgICAgICAgICAgICA/IGBfeGxmbi5URVhUKCR7ZnVuY30sIFwiJHtjdXJyZW5jeUluZm8uc3ltYm9sfSMsIyMwLjAwXCIpYFxuICAgICAgICAgICAgICAgICAgICA6IGAke2Z1bmN9YCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICBjYXNlIFwiYXZnXCI6XG4gICAgICAgICAgICAgICAgZnVuYyA9IGBfeGxmbi5BVkVSQUdFSUYoJHtsZXZlbERpbWVuc2lvbnMuc3RhcnRDb29yZGluYXRlfToke2xldmVsRGltZW5zaW9ucy5lbmRDb29yZGluYXRlfSwgJHtyZWNvcmRMZXZlbH0sICR7ZGltZW5zaW9ucy5zdGFydENvb3JkaW5hdGV9OiR7ZGltZW5zaW9ucy5lbmRDb29yZGluYXRlfSlgXG4gICAgICAgICAgICAgICAgZnVuY1R5cGUgPSBgXCJBdmc6IFwiJmFtcDtgO1xuXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuY1R5cGUgKyAoY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knICYmIGN1cnJlbmN5SW5mb1xuICAgICAgICAgICAgICAgICAgICA/IGBfeGxmbi5URVhUKCR7ZnVuY30sIFwiJHtjdXJyZW5jeUluZm8uc3ltYm9sfSMsIyMwLjAwXCIpYFxuICAgICAgICAgICAgICAgICAgICA6IGAke2Z1bmN9YCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICBjYXNlIFwiZWFybGllc3RcIjpcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBnZXQgZGF0ZSBmb3JtYXQgZnJvbSBsb2NhbGVcbiAgICAgICAgICAgICAgICByZXR1cm4gYFwiRWFybGllc3Q6IFwiJmFtcDtfeGxmbi5URVhUKF94bGZuLk1JTihfeGxmbi5JRigke2xldmVsRGltZW5zaW9ucy5zdGFydENvb3JkaW5hdGV9OiR7bGV2ZWxEaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9PSR7cmVjb3JkTGV2ZWx9LCAke2RpbWVuc2lvbnMuc3RhcnRDb29yZGluYXRlfToke2RpbWVuc2lvbnMuZW5kQ29vcmRpbmF0ZX0pKSwgXCJtL2QveXl5eVwiKWBcbiAgICAgICAgICAgIGNhc2UgXCJsYXRlc3RcIjpcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBnZXQgZGF0ZSBmb3JtYXQgZnJvbSBsb2NhbGVcbiAgICAgICAgICAgICAgICByZXR1cm4gYFwiTGF0ZXN0OiBcIiZhbXA7X3hsZm4uVEVYVChfeGxmbi5NQVgoX3hsZm4uSUYoJHtsZXZlbERpbWVuc2lvbnMuc3RhcnRDb29yZGluYXRlfToke2xldmVsRGltZW5zaW9ucy5lbmRDb29yZGluYXRlfT0ke3JlY29yZExldmVsfSwgJHtkaW1lbnNpb25zLnN0YXJ0Q29vcmRpbmF0ZX06JHtkaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9KSksIFwibS9kL3l5eXlcIilgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFJvb3RTdW1tYXJ5U3RhcnRDb29yZGluYXRlKGNvbHVtbjogbnVtYmVyLCBrZXk6IHN0cmluZykge1xuICAgICAgICBjb25zdCBmaXJzdERhdGFSZWNvcmRDb2xOYW1lID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKGNvbHVtbikgKyAodGhpcy5maXJzdERhdGFSb3cpO1xuXG4gICAgICAgIGlmICh0aGlzLmRpbWVuc2lvbk1hcC5nZXQoa2V5KS5zdGFydENvb3JkaW5hdGUgIT09IGZpcnN0RGF0YVJlY29yZENvbE5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuZGltZW5zaW9uTWFwLmdldChrZXkpLnN0YXJ0Q29vcmRpbmF0ZSA9IGZpcnN0RGF0YVJlY29yZENvbE5hbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByaW50SGVhZGVycyh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCBoZWFkZXJzRm9yTGV2ZWw6IElDb2x1bW5JbmZvW10sIGk6IG51bWJlciwgaXNWZXJ0aWNhbDogYm9vbGVhbikge1xuICAgICAgICBsZXQgc3RhcnRWYWx1ZSA9IDA7XG4gICAgICAgIGxldCBzdHIgPSAnJztcblxuICAgICAgICBjb25zdCBpc0hpZXJhcmNoaWNhbEdyaWQgPSB3b3Jrc2hlZXREYXRhLmlzSGllcmFyY2hpY2FsO1xuICAgICAgICBsZXQgcm93U3R5bGUgPSBpc0hpZXJhcmNoaWNhbEdyaWQgPyAnIHM9XCIzXCInIDogJyc7XG4gICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB3b3Jrc2hlZXREYXRhLmRhdGFEaWN0aW9uYXJ5O1xuICAgICAgICBjb25zdCBvd25lciA9IHdvcmtzaGVldERhdGEub3duZXI7XG4gICAgICAgIGNvbnN0IG1heExldmVsID0gaXNWZXJ0aWNhbFxuICAgICAgICAgICAgPyBvd25lci5tYXhSb3dMZXZlbFxuICAgICAgICAgICAgOiBvd25lci5tYXhMZXZlbDtcblxuICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnRDb2wgb2YgaGVhZGVyc0ZvckxldmVsKSB7XG4gICAgICAgICAgICBjb25zdCBzcGFuTGVuZ3RoID0gaXNWZXJ0aWNhbCA/IGN1cnJlbnRDb2wucm93U3BhbiA6IGN1cnJlbnRDb2wuY29sdW1uU3BhbjtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2wubGV2ZWwgPT09IGkpIHtcbiAgICAgICAgICAgICAgICBsZXQgY29sdW1uQ29vcmRpbmF0ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBpc1ZlcnRpY2FsXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5yb3dJbmRleFxuICAgICAgICAgICAgICAgICAgICA6IHN0YXJ0VmFsdWUgKyAob3duZXIubWF4Um93TGV2ZWwgPz8gMClcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0Nvb3JkaW5hdGUgPSBpc1ZlcnRpY2FsXG4gICAgICAgICAgICAgICAgICAgID8gc3RhcnRWYWx1ZSArIG93bmVyLm1heExldmVsICsgMlxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMucm93SW5kZXhcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtblZhbHVlID0gZGljdGlvbmFyeS5zYXZlVmFsdWUoY3VycmVudENvbC5oZWFkZXIsIHRydWUsIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgIGNvbHVtbkNvb3JkaW5hdGUgPSAoY3VycmVudENvbC5maWVsZCA9PT0gR1JJRF9MRVZFTF9DT0xcbiAgICAgICAgICAgICAgICAgICAgPyBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4od29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudCArIDEpXG4gICAgICAgICAgICAgICAgICAgIDogRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKGNvbHVtbikpICsgcm93Q29vcmRpbmF0ZTtcblxuICAgICAgICAgICAgICAgIHJvd1N0eWxlID0gaXNWZXJ0aWNhbCAmJiBjdXJyZW50Q29sLnJvd1NwYW4gPiAxID8gJyBzPVwiNFwiJyA6IHJvd1N0eWxlO1xuICAgICAgICAgICAgICAgIHN0ciA9IGA8YyByPVwiJHtjb2x1bW5Db29yZGluYXRlfVwiJHtyb3dTdHlsZX0gdD1cInNcIj48dj4ke2NvbHVtblZhbHVlfTwvdj48L2M+YDtcblxuICAgICAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBpdm90R3JpZFJvd0hlYWRlcnNNYXAuaGFzKHJvd0Nvb3JkaW5hdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpdm90R3JpZFJvd0hlYWRlcnNNYXAuc2V0KHJvd0Nvb3JkaW5hdGUsIHRoaXMucGl2b3RHcmlkUm93SGVhZGVyc01hcC5nZXQocm93Q29vcmRpbmF0ZSkgKyBzdHIpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpdm90R3JpZFJvd0hlYWRlcnNNYXAuc2V0KHJvd0Nvb3JkaW5hdGUsIHN0cilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hlZXREYXRhICs9IHN0cjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaSAhPT0gbWF4TGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZUNlbGxzQ291bnRlcisrO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlQ2VsbFN0ciArPSBgIDxtZXJnZUNlbGwgcmVmPVwiJHtjb2x1bW5Db29yZGluYXRlfTpgO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29sLmhlYWRlclR5cGUgPT09IEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2wgPSBpc1ZlcnRpY2FsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtYXhMZXZlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhcnRWYWx1ZSArIChvd25lci5tYXhSb3dMZXZlbCA/PyAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gaXNWZXJ0aWNhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcm93Q29vcmRpbmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogb3duZXIubWF4TGV2ZWwgKyAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db29yZGluYXRlID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKGNvbCkgKyByb3c7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMTsgayA8IHNwYW5MZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IGlzVmVydGljYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4gKyBrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gaXNWZXJ0aWNhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJvd0Nvb3JkaW5hdGUgKyBrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5yb3dJbmRleDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvb3JkaW5hdGUgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oY29sKSArIHJvdztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBgPGMgcj1cIiR7Y29sdW1uQ29vcmRpbmF0ZX1cIiR7cm93U3R5bGV9IC8+YDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmVydGljYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnBpdm90R3JpZFJvd0hlYWRlcnNNYXAuc2V0KHJvdywgc3RyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuc2hlZXREYXRhICs9IHN0clxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZUNlbGxTdHIgKz0gYCR7Y29sdW1uQ29vcmRpbmF0ZX1cIiAvPmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdGFydFZhbHVlICs9IHNwYW5MZW5ndGg7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgU3R5bGVGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCkge1xuICAgICAgICBmb2xkZXJbJ3N0eWxlcy54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFN0eWxlcygpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgV29ya2Jvb2tGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCwgd29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSkge1xuICAgICAgICBmb2xkZXJbJ3dvcmtib29rLnhtbCddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0V29ya2Jvb2sod29ya3NoZWV0RGF0YS5vcHRpb25zLndvcmtzaGVldE5hbWUpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgQ29udGVudFR5cGVzRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgY29uc3QgaGFzU2hhcmVkU3RyaW5ncyA9ICF3b3Jrc2hlZXREYXRhLmlzRW1wdHkgfHwgd29ya3NoZWV0RGF0YS5vcHRpb25zLmFsd2F5c0V4cG9ydEhlYWRlcnM7XG4gICAgICAgIGZvbGRlclsnW0NvbnRlbnRfVHlwZXNdLnhtbCddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0Q29udGVudFR5cGVzWE1MKGhhc1NoYXJlZFN0cmluZ3MsIHdvcmtzaGVldERhdGEub3B0aW9ucy5leHBvcnRBc1RhYmxlKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFNoYXJlZFN0cmluZ3NGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCwgd29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSkge1xuICAgICAgICBjb25zdCBkaWN0ID0gd29ya3NoZWV0RGF0YS5kYXRhRGljdGlvbmFyeTtcbiAgICAgICAgY29uc3Qgc29ydGVkVmFsdWVzID0gZGljdC5nZXRLZXlzKCk7XG4gICAgICAgIGNvbnN0IHNoYXJlZFN0cmluZ3MgPSBuZXcgQXJyYXk8c3RyaW5nPihzb3J0ZWRWYWx1ZXMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNvcnRlZFZhbHVlcykge1xuICAgICAgICAgICAgc2hhcmVkU3RyaW5nc1tkaWN0LmdldFNhbml0aXplZFZhbHVlKHZhbHVlKV0gPSAnPHNpPjx0PicgKyB2YWx1ZSArICc8L3Q+PC9zaT4nO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9sZGVyWydzaGFyZWRTdHJpbmdzLnhtbCddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0U2hhcmVkU3RyaW5nWE1MKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGljdC5zdHJpbmdzQ291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWRWYWx1ZXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkU3RyaW5ncy5qb2luKCcnKSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgVGFibGVzRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgY29uc3QgY29sdW1uQ291bnQgPSB3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50O1xuICAgICAgICBjb25zdCBsYXN0Q29sdW1uID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKGNvbHVtbkNvdW50IC0gMSkgKyB3b3Jrc2hlZXREYXRhLnJvd0NvdW50O1xuICAgICAgICBjb25zdCBhdXRvRmlsdGVyRGltZW5zaW9uID0gJ0ExOicgKyBsYXN0Q29sdW1uO1xuICAgICAgICBjb25zdCB0YWJsZURpbWVuc2lvbiA9IHdvcmtzaGVldERhdGEuaXNFbXB0eVxuICAgICAgICAgICAgPyAnQTE6JyArIEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihjb2x1bW5Db3VudCAtIDEpICsgKHdvcmtzaGVldERhdGEucm93Q291bnQgKyAxKVxuICAgICAgICAgICAgOiBhdXRvRmlsdGVyRGltZW5zaW9uO1xuICAgICAgICBjb25zdCBoYXNVc2VyU2V0SW5kZXggPSB3b3Jrc2hlZXREYXRhLm93bmVyLmNvbHVtbnMuc29tZShjID0+IGMuZXhwb3J0SW5kZXggIT09IHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGhhc1VzZXJTZXRJbmRleFxuICAgICAgICAgICAgPyB3b3Jrc2hlZXREYXRhLnJvb3RLZXlzXG4gICAgICAgICAgICA6IHdvcmtzaGVldERhdGEub3duZXIuY29sdW1uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiAhYy5za2lwKVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXggLSBiLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucGlubmVkSW5kZXggLSBiLnBpbm5lZEluZGV4KVxuICAgICAgICAgICAgICAgIC5tYXAoYyA9PiBjLmhlYWRlcik7XG5cbiAgICAgICAgbGV0IHNvcnRTdHJpbmcgPSAnJztcblxuICAgICAgICBsZXQgdGFibGVDb2x1bW5zID0gJzx0YWJsZUNvbHVtbnMgY291bnQ9XCInICsgY29sdW1uQ291bnQgKyAnXCI+JztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9ICB2YWx1ZXNbaV07XG4gICAgICAgICAgICB0YWJsZUNvbHVtbnMgKz0gJzx0YWJsZUNvbHVtbiBpZD1cIicgKyAoaSArIDEpICsgJ1wiIG5hbWU9XCInICsgdmFsdWUgKyAnXCIvPic7XG4gICAgICAgIH1cblxuICAgICAgICB0YWJsZUNvbHVtbnMgKz0gJzwvdGFibGVDb2x1bW5zPic7XG5cbiAgICAgICAgaWYgKHdvcmtzaGVldERhdGEuc29ydCkge1xuICAgICAgICAgICAgY29uc3Qgc29ydGluZ0V4cHJlc3Npb24gPSB3b3Jrc2hlZXREYXRhLnNvcnQ7XG4gICAgICAgICAgICBjb25zdCBzYyA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbih2YWx1ZXMuaW5kZXhPZihzb3J0aW5nRXhwcmVzc2lvbi5maWVsZE5hbWUpKTtcbiAgICAgICAgICAgIGNvbnN0IGRpciA9IHNvcnRpbmdFeHByZXNzaW9uLmRpciAtIDE7XG4gICAgICAgICAgICBzb3J0U3RyaW5nID0gYDxzb3J0U3RhdGUgcmVmPVwiQTI6JHtsYXN0Q29sdW1ufVwiPjxzb3J0Q29uZGl0aW9uIGRlc2NlbmRpbmc9XCIke2Rpcn1cIiByZWY9XCIke3NjfTE6JHtzY30xNVwiLz48L3NvcnRTdGF0ZT5gO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9sZGVyWyd0YWJsZTEueG1sJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRUYWJsZXNYTUwoYXV0b0ZpbHRlckRpbWVuc2lvbiwgdGFibGVEaW1lbnNpb24sIHRhYmxlQ29sdW1ucywgc29ydFN0cmluZykpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3Jrc2hlZXRSZWxzRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QpIHtcbiAgICAgICAgZm9sZGVyWydzaGVldDEueG1sLnJlbHMnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFdvcmtzaGVldFJlbHMoKSk7XG4gICAgfVxufVxuIl19
|