@angular-generic-table/core 5.0.0-rc.18 → 5.0.0-rc.19
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/core.component.mjs +4 -4
- package/fesm2015/angular-generic-table-core.mjs +2 -2
- package/fesm2015/angular-generic-table-core.mjs.map +1 -1
- package/fesm2020/angular-generic-table-core.mjs +3 -3
- package/fesm2020/angular-generic-table-core.mjs.map +1 -1
- package/lib/core.component.d.ts +5 -2
- package/package.json +1 -1
|
@@ -161,9 +161,9 @@ export class CoreComponent {
|
|
|
161
161
|
this.table$,
|
|
162
162
|
]).pipe(map(([page, table]) => {
|
|
163
163
|
// determine last page
|
|
164
|
-
const lastPage = Math.ceil(table.info.
|
|
165
|
-
(table.info.
|
|
166
|
-
(table.config?.pagination?.length || table.info.
|
|
164
|
+
const lastPage = Math.ceil(table.info.numberOfRecords /
|
|
165
|
+
(table.info.pageSize ??
|
|
166
|
+
(table.config?.pagination?.length || table.info.numberOfRecords))) - 1;
|
|
167
167
|
// determine min/max position
|
|
168
168
|
return +page < 0 ? 0 : +page > lastPage ? lastPage : +page;
|
|
169
169
|
}), distinctUntilChanged(), tap((index) => this.pageChange.emit({ index })), shareReplay(1));
|
|
@@ -557,4 +557,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImpor
|
|
|
557
557
|
}], pageChange: [{
|
|
558
558
|
type: Output
|
|
559
559
|
}] } });
|
|
560
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixTQUFTLEVBQ1QsWUFBWSxFQUVaLEVBQUUsRUFDRixhQUFhLEVBQ2IsT0FBTyxHQUNSLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osT0FBTyxFQUNQLE9BQU8sRUFDUCxJQUFJLEVBQ0osZ0JBQWdCLEVBQ2hCLFNBQVMsR0FDVixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFFTCxvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLEdBQUcsRUFDSCxLQUFLLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLEVBQ0gsY0FBYyxHQUNmLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLGtCQUFrQixHQUNuQixNQUFNLHVCQUF1QixDQUFDO0FBVy9CLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBeUI5RCxNQUFNLE9BQU8sYUFBYTtJQXJCMUI7UUFzQkUsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBY3JCLG9CQUFlLEdBQUc7WUFDeEIsV0FBVztZQUNYLFNBQVM7WUFDVCxXQUFXO1lBQ1gsWUFBWTtZQUNaLE1BQU07WUFDTixLQUFLO1NBQ04sQ0FBQztRQWNNLGdCQUFXLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUF5QzdCLG1CQUFjLEdBQUc7WUFDdkIsV0FBVyxFQUFFLGFBQWE7WUFDMUIsU0FBUyxFQUFFLFdBQVc7U0FDdkIsQ0FBQztRQWlCRjs7O1dBR0c7UUFDTSxjQUFTLEdBQVEsRUFBRSxDQUFDO1FBUTdCOzs7V0FHRztRQUNNLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBOEM3QixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFDL0MsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBQ2pELG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQXlCLENBQUM7UUFVOUQsZ0JBQVcsR0FBRyxJQUFJLGFBQWEsQ0FBbUIsQ0FBQyxDQUFDLENBQUM7UUFDbkQsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBQ2pELGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO1FBQ3ZELGlGQUFpRjtRQUN2RSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQXFCLENBQUM7UUFDN0QsZUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO2dCQUNuQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3REO2lCQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7Z0JBQy9DLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7YUFDaEM7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7YUFDNUI7UUFDSCxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDbkQsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUMxQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUVGLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQXdDN0IsY0FBUyxHQUNmLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsZ0JBQVcsR0FDakIsSUFBSSxlQUFlLENBQWMsRUFBRSxDQUFDLENBQUM7UUFDL0IsZUFBVSxHQUNoQixJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixjQUFTLEdBQThCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUN6RCxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQ2IsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUN6RCxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUN2QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUVNLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQW1CO1lBQzNELFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsWUFBWSxFQUFFLElBQUk7WUFDbEIsUUFBUSxFQUFFLElBQUk7WUFDZCxlQUFlLEVBQUUsSUFBSTtZQUNyQiwyQkFBMkI7WUFDM0IsMkJBQTJCO1lBQzNCLG1CQUFtQjtTQUNwQixDQUFDLENBQUM7UUFFSCx5Q0FBeUM7UUFDakMsa0JBQWEsR0FFakIsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsaUJBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDcEMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUN6RCxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUN2QixHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUM3QyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUVNLFdBQU0sR0FDWixJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixVQUFLLEdBQWdDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNuRCxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ3pELFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUN4QyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtZQUN2QixrREFBa0Q7WUFDbEQsSUFDRSxDQUFDLE1BQU0sQ0FBQyxPQUFPO2dCQUNiLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25FLENBQUMsTUFBTSxDQUFDLElBQUk7b0JBQ1YsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUNoRTtnQkFDQSxvQ0FBb0M7Z0JBQ3BDLE1BQU0sT0FBTyxHQUFlLEVBQUUsQ0FBQztnQkFDL0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3BDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDcEIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO3lCQUNoRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyw0Q0FBNEM7eUJBQ3BGLE1BQU0sQ0FDTCxDQUFDLGFBQWEsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDaEMsR0FBRyxhQUFhO3dCQUNoQixDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQ3JCLEdBQUcsRUFDSCxLQUFLLENBQUMsS0FBTSxDQUFDLElBQUksRUFDakIsS0FBSyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQzFCO3FCQUNGLENBQUMsRUFDRixFQUFFLENBQ0gsQ0FBQztvQkFDSixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO2lCQUNyQztnQkFDRCxJQUFJLEdBQUcsT0FBTyxDQUFDO2FBQ2hCO1lBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDM0QsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDcEMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO2lCQUN4QztnQkFDRCxJQUFJLEdBQUcsVUFBVSxDQUFDO2FBQ25CO1lBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNoQixhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FDMUQsRUFDRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRTtZQUNoQyxvRkFBb0Y7WUFDcEYsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCO2dCQUN0RCxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVO29CQUN2QyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO29CQUNuRCxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUk7Z0JBQ2QsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVTtvQkFDekMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FDckQsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQzNCO29CQUNILENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRUYsa0JBQWEsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDakUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFDaEQsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFRixXQUFNLEdBQTBCLGFBQWEsQ0FBQztZQUM1QyxJQUFJLENBQUMsS0FBSztZQUNWLElBQUksQ0FBQyxZQUFZO1lBQ2pCLElBQUksQ0FBQyxZQUFZO1NBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUU7WUFDbkMsSUFDRSxVQUFVLENBQUMsV0FBVyxLQUFLLElBQUk7Z0JBQy9CLFVBQVUsQ0FBQyxlQUFlLEtBQUssSUFBSTtnQkFDbkMsVUFBVSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQzVCO2dCQUNBLE9BQU87b0JBQ0wsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDO29CQUNkLE1BQU07b0JBQ04sSUFBSSxFQUFhO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixlQUFlLEVBQUUsVUFBVSxDQUFDLGVBQWU7d0JBQzNDLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTt3QkFDN0IsU0FBUyxFQUNQLFVBQVUsQ0FBQyxTQUFTOzRCQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztxQkFDOUQ7aUJBQ0YsQ0FBQzthQUNIO1lBQ0QsK0JBQStCO1lBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDeEQsNEJBQTRCO2dCQUM1QixPQUFPO29CQUNMLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQztvQkFDZCxNQUFNO29CQUNOLElBQUksRUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUU7aUJBQ2xFLENBQUM7YUFDSDtZQUNELG9CQUFvQjtZQUNwQixPQUFPO2dCQUNMLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDckQsTUFBTTtnQkFDTixJQUFJLEVBQWE7b0JBQ2YsZUFBZSxFQUFFLE1BQU0sQ0FBQyxNQUFNO29CQUM5QixRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztvQkFDMUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQ2xCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUNqRDtpQkFDRjthQUNGLENBQUM7UUFDSixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUMvQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQWlCTSxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUF3QixTQUFTLENBQUMsQ0FBQztRQUVwRSw2QkFBd0IsR0FDOUIsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsNEJBQXVCLEdBQUcsYUFBYSxDQUFDO1lBQ3RDLElBQUksQ0FBQyx3QkFBd0I7WUFDN0IsSUFBSSxDQUFDLE1BQU07U0FDWixDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBTSxFQUFFLEVBQUU7WUFDekIsc0JBQXNCO1lBQ3RCLE1BQU0sUUFBUSxHQUNaLElBQUksQ0FBQyxJQUFJLENBQ1AsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPO2dCQUNoQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWTtvQkFDdEIsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUM5RCxHQUFHLENBQUMsQ0FBQztZQUNSLDZCQUE2QjtZQUM3QixPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDN0QsQ0FBQyxDQUFDLEVBQ0Ysb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFDL0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFRixhQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQy9CLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ25CLE1BQU0sQ0FBQyxPQUFPO1lBQ1osQ0FBQyxDQUFDLEVBQUUsQ0FDQSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQ3ZELENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksQ0FDakMsQ0FBQyxNQUFNLENBQ1Q7WUFDSCxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQ3BELEVBQ0QsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFRixtQkFBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNyQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNiLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztZQUNoQixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO2dCQUNwRSxJQUNFLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDO3FCQUMzRCxNQUFNLElBQUksQ0FBQyxFQUNkO29CQUNBLE9BQU8sSUFBSSxDQUFDLENBQUM7aUJBQ2Q7WUFDSCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDUCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQXlFRixnQkFBVyxHQUFHLENBQ1osQ0FBZ0MsRUFDaEMsQ0FBZ0MsRUFDeEIsRUFBRTtZQUNWLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQztRQWdCTSxvQ0FBK0IsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ2hELHlCQUFvQixHQUFHLFNBQVMsQ0FDdEMsUUFBUSxFQUNSLFNBQVMsQ0FDVixDQUFDLElBQUksQ0FDSixNQUFNLENBQ0osQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNSLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3pFLENBQ0YsQ0FBQztLQThJSDtJQXJyQkMsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQWEsY0FBYyxDQUFDLEtBQWtDO1FBQzVELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFVRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFhLFVBQVUsQ0FBQyxLQUFlO1FBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFHRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELElBQWEsT0FBTyxDQUFDLFNBQXdDO1FBQzNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFDRCxJQUNJLGVBQWUsQ0FBQyxTQUFpQjtRQUNuQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVELElBQWEsVUFBVSxDQUFDLEtBQThCO1FBQ3BELElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsSUFDRSxLQUFLLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDO2dCQUNsRSxLQUFLLENBQUMsV0FBVyxLQUFLLElBQUksRUFDMUI7Z0JBQ0EsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQzthQUM5QztTQUNGO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQWEsYUFBYSxDQUFDLE9BQTRDO1FBQ3JFLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUMvRCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFPRDs7NktBRXlLO0lBQ3pLLElBQWEsZUFBZSxDQUMxQixFQUFxRDtRQUVyRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQXNCRDs7O09BR0c7SUFDSCxJQUFhLFlBQVksQ0FBQyxFQUE2QjtRQUNyRCxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFTyxhQUFhLENBQ25CLEtBQWEsRUFDYixHQUFhO1FBRWIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxJQUNJLE1BQU0sQ0FBQyxNQUFpRDtRQUMxRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFDSSxNQUFNLENBQUMsTUFBdUQ7UUFDaEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUlELElBQ0ksSUFBSSxDQUFDLElBQTBEO1FBQ2pFLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRUQsSUFBYSxTQUFTLENBQUMsVUFBdUM7UUFDNUQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN6RSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNuQztJQUNILENBQUM7SUFNRCxTQUFTLENBQUMsR0FBYSxFQUFFLEtBQWEsRUFBRSxLQUFpQjtRQUN2RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQWEsRUFBRSxLQUFhLEVBQUUsS0FBb0I7UUFDM0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQTBCRCxXQUFXLENBQ1QsR0FBMkIsRUFDM0IsS0FBa0M7UUFFbEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDM0IsSUFBSSxDQUFDLE1BQU07aUJBQ1IsSUFBSSxDQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsRUFDYixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDOUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQzdCO2lCQUNBLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDM0Q7YUFBTSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtZQUNsQyw4QkFBOEI7U0FDL0I7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUNTLFlBQVksQ0FDcEIsR0FBb0IsRUFDcEIsS0FBb0IsRUFDcEIsS0FBa0M7UUFFbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ3hCLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFDaEIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUN6RCxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUN2QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUNKLENBQUM7SUEySkQ7dUNBQ21DO0lBQ25DLElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQ3pDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUN4QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUNKLENBQUM7SUFFRDsyQkFDdUI7SUFDdkIsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUF1REQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLEdBQW1CLEVBQUUsTUFBbUI7UUFDaEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxFQUFFLFFBQVEsS0FBSyxJQUFJLENBQUM7UUFDM0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFDNUMsSUFBSSxTQUFTLEdBQVksS0FBSyxDQUFDO1FBQy9CLElBQUksUUFBUSxHQUFnQixFQUFFLENBQUM7UUFDL0IsMkNBQTJDO1FBQzNDLElBQUksUUFBUSxFQUFFO1lBQ1osb0NBQW9DO1lBQ3BDLE1BQU0sb0JBQW9CLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FDakQsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUM3QixDQUFDO1lBQ0YsSUFBSSxvQkFBb0IsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDL0IsK0RBQStEO2dCQUMvRCxRQUFRLEdBQUcsQ0FBQyxHQUFHLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUNyRDtpQkFBTTtnQkFDTCxpREFBaUQ7Z0JBQ2pELFNBQVMsR0FBRyxZQUFZLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ3JELE1BQU0sWUFBWSxHQUFHLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUMxRCxRQUFRLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO2dCQUM3QixRQUFRLENBQUMsb0JBQW9CLENBQUMsR0FBRztvQkFDL0IsR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUM7b0JBQ2pDLEtBQUssRUFBRSxZQUFZO2lCQUNwQixDQUFDO2FBQ0g7U0FDRjthQUFNO1lBQ0wseUNBQXlDO1lBQ3pDLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzNCLG9DQUFvQztnQkFDcEMsTUFBTSxvQkFBb0IsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUNqRCxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQzdCLENBQUM7Z0JBQ0YsaURBQWlEO2dCQUNqRCxJQUFJLG9CQUFvQixLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUMvQixRQUFRLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztpQkFDcEM7cUJBQU07b0JBQ0wsU0FBUyxHQUFHLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDckQsTUFBTSxZQUFZLEdBQUcsU0FBUyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBQzFELFFBQVEsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO2lCQUMzQzthQUNGO2lCQUFNO2dCQUNMLDhEQUE4RDtnQkFDOUQsUUFBUSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7YUFDeEM7U0FDRjtRQUNELG9CQUFvQjtRQUNwQixNQUFNLFNBQVMsR0FBZ0I7WUFDN0IsR0FBRztZQUNILEtBQUssRUFBRSxTQUFTO1lBQ2hCLGdCQUFnQixFQUFFLFFBQVE7WUFDMUIsVUFBVSxFQUFFLFFBQVE7U0FDckIsQ0FBQztRQUVGLHlDQUF5QztRQUN6QyxJQUFJLE1BQU0sRUFBRTtZQUNWLHFCQUFxQjtZQUNyQixTQUFTLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztTQUMxQjtRQUNELGtCQUFrQjtRQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVoQyx1RUFBdUU7UUFDdkUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFO1lBQy9CLHVCQUF1QjtZQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztTQUMzQjtJQUNILENBQUM7SUFTRCxXQUFXLENBQ1QsTUFBVyxFQUNYLEtBQWEsRUFDYixlQUF1QyxJQUFJO1FBRTNDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUNsQixDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDckMsYUFBYSxDQUFDLFlBQVksQ0FBQztZQUMzQixDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDbkQsTUFBTSxDQUNQLENBQUM7SUFDSixDQUFDO0lBYVMsc0JBQXNCO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLCtCQUErQixFQUFFO1lBQ3ZELE9BQU87U0FDUjtRQUVELElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLG9CQUFvQjthQUN0QixJQUFJLENBQ0gsY0FBYyxDQUNaLElBQUksQ0FBQyxLQUFLLEVBQ1YsSUFBSSxDQUFDLHVCQUF1QixFQUM1QixJQUFJLENBQUMsVUFBVSxDQUNoQixFQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsRUFDL0MsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FDN0I7YUFDQSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUU7WUFDbkQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pELElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxFQUFFO2dCQUMvQyxNQUFNLFFBQVEsR0FDWixJQUFJLENBQUMsY0FBYyxHQUFHLFdBQVcsR0FBRyxDQUFDLFNBQVMsRUFBRSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDakQsT0FBTzthQUNSO1lBRUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pFLElBQUksZUFBZSxFQUFFO2dCQUNuQixJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7YUFDbEU7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDRCw2QkFBNkIsQ0FBQyxRQUEwQjtRQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSwrQkFBK0IsRUFBRTtZQUN2RCxPQUFPO1NBQ1I7UUFDRCwyQ0FBMkM7UUFDM0MsSUFBSSxRQUFRLEtBQUssUUFBUSxDQUFDLGFBQWEsRUFBRTtZQUN2QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUU7Z0JBQ3pDLG1CQUFtQjtnQkFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN4QjtZQUNELElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakQ7SUFDSCxDQUFDO0lBRU8sc0JBQXNCLENBQzVCLEtBQW9CLEVBQ3BCLElBQVcsRUFDWCxXQUFtQixFQUNuQixTQUFjO1FBRWQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUM7UUFDbkUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNuQyxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFFdEIsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLE1BQU0sRUFBRTtZQUN4QixJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzQixPQUFPO1NBQ1I7UUFFRCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxFQUFFO1lBQ3ZCLE1BQU0saUJBQWlCLEdBQUcsYUFBYTtnQkFDckMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEdBQUcsQ0FBQztnQkFDbEUsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUNqQixJQUFJLFNBQVMsRUFBRSxTQUFTLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7YUFDaEQ7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNDLE9BQU87U0FDUjtRQUVELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXLEVBQUU7WUFDN0IsYUFBYSxHQUFHLENBQUMsQ0FBQztTQUNuQjthQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUU7WUFDbEMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3BCO1FBRUQsSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQ3JCLFFBQVEsR0FBRyxDQUFDLENBQUM7U0FDZDthQUFNLElBQ0wsUUFBUSxHQUFHLGFBQWEsSUFBSSxDQUFDO1lBQzdCLFFBQVEsR0FBRyxhQUFhLElBQUksWUFBWSxFQUN4QztZQUNBLFFBQVEsR0FBRyxRQUFRLEdBQUcsYUFBYSxDQUFDO1NBQ3JDO1FBRUQsSUFBSSxhQUFhLElBQUksU0FBUyxFQUFFLFFBQVEsRUFBRTtZQUN4QyxNQUFNLGFBQWEsR0FBRyxXQUFXLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7WUFDNUQsTUFBTSxpQkFBaUIsR0FDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDbkUsTUFBTSxRQUFRLEdBQUcsYUFBYTtnQkFDNUIsQ0FBQyxDQUFDLFNBQVMsRUFBRSxRQUFRLEdBQUcsQ0FBQztnQkFDekIsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO1lBRXRCLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXLElBQUksV0FBVyxHQUFHLENBQUMsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDbEMsT0FBTzthQUNSO2lCQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxZQUFZLElBQUksYUFBYSxFQUFFO2dCQUN0RCxJQUNFLFdBQVcsR0FBRyxDQUFDLEtBQUssU0FBUyxDQUFDLFNBQVMsR0FBRyxDQUFDO29CQUMzQyxRQUFRLEdBQUcsaUJBQWlCLEVBQzVCO29CQUNBLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQzVDO2dCQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2xDLE9BQU87YUFDUjtZQUVELElBQ0UsV0FBVyxHQUFHLENBQUM7Z0JBQ2YsYUFBYSxHQUFHLENBQUM7Z0JBQ2pCLFFBQVEsR0FBRyxhQUFhLElBQUksWUFBWTtnQkFDeEMsQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxHQUFHLGFBQWEsR0FBRyxDQUFDLEVBQzlDO2dCQUNBLDBDQUEwQztnQkFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDakQsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QyxPQUFPO2FBQ1I7WUFFRCxNQUFNLFNBQVMsR0FBRyxRQUFRLEdBQUcsU0FBUyxFQUFFLFFBQVEsQ0FBQztZQUVqRCxJQUFJLFFBQVEsR0FBRyxRQUFRLElBQUksV0FBVyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFO2dCQUNoRSxJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7YUFDeEM7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JFLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDOzswR0F0ckJVLGFBQWE7OEZBQWIsYUFBYSxncEJDM0YxQiw0eGNBc1pBLHVDRDFVSSxlQUFlLCtDQUNmLFlBQVksNENBQ1osYUFBYSw2Q0FDYixZQUFZLDRDQUNaLGdCQUFnQixnREFDaEIsU0FBUyw4Q0FDVCxnQkFBZ0IsK0lBQ2hCLFNBQVMseUNBQ1QsV0FBVywrQ0FDWCxhQUFhLGtEQUNiLE9BQU8sb0ZBQ1AsSUFBSSw2RkFDSixPQUFPOzJGQUdFLGFBQWE7a0JBckJ6QixTQUFTOytCQUNFLHVCQUF1QixtQkFFaEIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsZUFBZTt3QkFDZixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixTQUFTO3dCQUNULFdBQVc7d0JBQ1gsYUFBYTt3QkFDYixPQUFPO3dCQUNQLElBQUk7d0JBQ0osT0FBTztxQkFDUjs4QkFhWSxjQUFjO3NCQUExQixLQUFLO2dCQXFCTyxVQUFVO3NCQUF0QixLQUFLO2dCQVNPLE9BQU87c0JBQW5CLEtBQUs7Z0JBSUYsZUFBZTtzQkFEbEIsS0FBSztnQkFTTyxVQUFVO3NCQUF0QixLQUFLO2dCQWdCTyxhQUFhO3NCQUF6QixLQUFLO2dCQWdCTyxlQUFlO3NCQUEzQixLQUFLO2dCQWdCRyxTQUFTO3NCQUFqQixLQUFLO2dCQU1HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBTUcsYUFBYTtzQkFBckIsS0FBSztnQkFNTyxZQUFZO3NCQUF4QixLQUFLO2dCQWVGLE1BQU07c0JBRFQsS0FBSztnQkFNRixNQUFNO3NCQURULEtBQUs7Z0JBUUYsSUFBSTtzQkFEUCxLQUFLO2dCQU9PLFNBQVM7c0JBQXJCLEtBQUs7Z0JBT0ksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBV0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUVHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgVHJhY2tCeUZ1bmN0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZnJvbUV2ZW50LFxuICBpc09ic2VydmFibGUsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBSZXBsYXlTdWJqZWN0LFxuICBTdWJqZWN0LFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRhYmxlQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvdGFibGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBBc3luY1BpcGUsXG4gIEtleVZhbHVlLFxuICBLZXlWYWx1ZVBpcGUsXG4gIE5nQ2xhc3MsXG4gIE5nRm9yT2YsXG4gIE5nSWYsXG4gIE5nVGVtcGxhdGVPdXRsZXQsXG4gIFNsaWNlUGlwZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBwbHVjayxcbiAgc2hhcmVSZXBsYXksXG4gIHN0YXJ0V2l0aCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbiAgd2l0aExhdGVzdEZyb20sXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi9tb2RlbHMvdGFibGUtY29sdW1uLmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBjYWxjdWxhdGUsXG4gIGNodW5rLFxuICBzZWFyY2gsXG4gIHNvcnRPbk11bHRpcGxlS2V5cyxcbn0gZnJvbSAnLi91dGlsaXRpZXMvdXRpbGl0aWVzJztcbmltcG9ydCB7IFRhYmxlUm93IH0gZnJvbSAnLi9tb2RlbHMvdGFibGUtcm93LmludGVyZmFjZSc7XG5pbXBvcnQgeyBHdE9yZGVyLCBHdFNvcnRPcmRlciB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLXNvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRhYmxlTWV0YSB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLW1ldGEuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEd0UGFnZUNoYW5nZUV2ZW50LFxuICBHdFJvd1NlbGVjdEV2ZW50LFxuICBHdFJvd0NsaWNrRXZlbnQsXG4gIEd0Um93QWN0aXZlRXZlbnQsXG4gIEd0U29ydEV2ZW50LFxufSBmcm9tICcuL21vZGVscy90YWJsZS1ldmVudHMuaW50ZXJmYWNlJztcbmltcG9ydCB7IENhcGl0YWxDYXNlUGlwZSB9IGZyb20gJy4vcGlwZXMvY2FwaXRhbC1jYXNlLnBpcGUnO1xuaW1wb3J0IHsgU29ydENsYXNzUGlwZSB9IGZyb20gJy4vcGlwZXMvc29ydC1jbGFzcy5waXBlJztcbmltcG9ydCB7IERhc2hDYXNlUGlwZSB9IGZyb20gJy4vcGlwZXMvZGFzaC1jYXNlLnBpcGUnO1xuaW1wb3J0IHsgRHluYW1pY1BpcGUgfSBmcm9tICcuL3BpcGVzL2R5bmFtaWMucGlwZSc7XG5pbXBvcnQgeyBIaWdobGlnaHRQaXBlIH0gZnJvbSAnLi9waXBlcy9oaWdobGlnaHQucGlwZSc7XG5pbXBvcnQgeyBSb3dTZWxlY3Rpb25QaXBlIH0gZnJvbSAnLi9waXBlcy9yb3ctc2VsZWN0aW9uLnBpcGUnO1xuaW1wb3J0IHsgR3RQYWdpbmF0aW9uSW5mbyB9IGZyb20gJy4vbW9kZWxzL2d0LXBhZ2luYXRpb24nO1xuaW1wb3J0IHsgVGFibGVJbmZvIH0gZnJvbSAnLi9tb2RlbHMvdGFibGUtaW5mby5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhbmd1bGFyLWdlbmVyaWMtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ2FwaXRhbENhc2VQaXBlLFxuICAgIEtleVZhbHVlUGlwZSxcbiAgICBTb3J0Q2xhc3NQaXBlLFxuICAgIERhc2hDYXNlUGlwZSxcbiAgICBSb3dTZWxlY3Rpb25QaXBlLFxuICAgIEFzeW5jUGlwZSxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIFNsaWNlUGlwZSxcbiAgICBEeW5hbWljUGlwZSxcbiAgICBIaWdobGlnaHRQaXBlLFxuICAgIE5nQ2xhc3MsXG4gICAgTmdJZixcbiAgICBOZ0Zvck9mLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3JlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3QoKTtcbiAgZ2V0IG5hdmlnYXRpb25LZXlzKCk6IHR5cGVvZiB0aGlzLl9uYXZpZ2F0aW9uS2V5cyB7XG4gICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25LZXlzO1xuICB9XG5cbiAgLyoqIG5hdmlnYXRpb25LZXlzXG4gICAqIEBkZXNjcmlwdGlvbiBBbiBhcnJheSBvZiBrZXlib2FyZCBrZXlzIHRoYXQgd2lsbCB0cmlnZ2VyIG5hdmlnYXRpb24gYW5kIGFjdGl2ZSByb3csIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGFycm93IGtleXMsIGhvbWUgYW5kIGVuZCAob21pdCBrZXkgbmFtZSBmcm9tIGFycmF5IHRvIGRpc2FibGUgaXQpXG4gICAqIEB0eXBlIHtzdHJpbmdbXX1cbiAgICogQGRlZmF1bHQgWydBcnJvd0Rvd24nLCAnQXJyb3dVcCcsICdBcnJvd0xlZnQnLCAnQXJyb3dSaWdodCcsICdIb21lJywgJ0VuZCddXG4gICAqL1xuICBASW5wdXQoKSBzZXQgbmF2aWdhdGlvbktleXModmFsdWU6IHR5cGVvZiB0aGlzLl9uYXZpZ2F0aW9uS2V5cykge1xuICAgIHRoaXMuX25hdmlnYXRpb25LZXlzID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9uYXZpZ2F0aW9uS2V5cyA9IFtcbiAgICAnQXJyb3dEb3duJyxcbiAgICAnQXJyb3dVcCcsXG4gICAgJ0Fycm93TGVmdCcsXG4gICAgJ0Fycm93UmlnaHQnLFxuICAgICdIb21lJyxcbiAgICAnRW5kJyxcbiAgXTtcbiAgZ2V0IHNlbGVjdEtleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RLZXlzO1xuICB9XG5cbiAgLyoqIHNlbGVjdEtleXNcbiAgICogQGRlc2NyaXB0aW9uIEFuIGFycmF5IG9mIGtleWJvYXJkIGtleXMgdGhhdCB3aWxsIHRyaWdnZXIgcm93IHNlbGVjdGlvbiAob21pdCBrZXkgbmFtZSBmcm9tIGFycmF5IHRvIGRpc2FibGUgaXQpXG4gICAqIEB0eXBlIHtzdHJpbmdbXX1cbiAgICogQGRlZmF1bHQgWydFbnRlcicsICcgJ11cbiAgICovXG4gIEBJbnB1dCgpIHNldCBzZWxlY3RLZXlzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuX3NlbGVjdEtleXMgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdEtleXMgPSBbJ0VudGVyJywgJyAnXTtcbiAgZ2V0IHNvcnRPcmRlciQoKTogT2JzZXJ2YWJsZTxHdFNvcnRPcmRlcj4ge1xuICAgIHJldHVybiB0aGlzLl9zb3J0T3JkZXIkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGxvYWRpbmcoaXNMb2FkaW5nOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbikge1xuICAgIHRoaXMuX2xvYWRpbmckLm5leHQoaXNMb2FkaW5nKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgcGFnaW5hdGlvbkluZGV4KHBhZ2VJbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5fY3VycmVudFBhZ2luYXRpb25JbmRleCQubmV4dChwYWdlSW5kZXgpO1xuICB9XG5cbiAgZ2V0IHBhZ2luYXRpb25JbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50UGFnaW5hdGlvbkluZGV4JC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHBhZ2luZ0luZm8odmFsdWU6IEd0UGFnaW5hdGlvbkluZm8gfCBudWxsKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9wYWdpbmdJbmZvJC5uZXh0KHZhbHVlKTtcbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUucGFnZUN1cnJlbnQgIT09IHRoaXMuX2N1cnJlbnRQYWdpbmF0aW9uSW5kZXgkLmdldFZhbHVlKCkgKyAxICYmXG4gICAgICAgIHZhbHVlLnBhZ2VDdXJyZW50ICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uSW5kZXggPSB2YWx1ZS5wYWdlQ3VycmVudCAtIDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIGN1c3RvbUNsYXNzZXNcbiAgICogQGRlc2NyaXB0aW9uIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGN1c3RvbSBjbGFzc2VzIGZvciB2YXJpb3VzIGVsZW1lbnRzIGluIHRoZSB0YWJsZS5cbiAgICogQHR5cGUge29iamVjdH0gLSB7IHNlbGVjdGVkUm93OiBzdHJpbmcsIGFjdGl2ZVJvdzogc3RyaW5nIH0gLSBkZWZhdWx0IGNsYXNzZXMgYXJlICdndC1zZWxlY3RlZCcgYW5kICdndC1hY3RpdmUnXG4gICAqL1xuICBASW5wdXQoKSBzZXQgY3VzdG9tQ2xhc3NlcyhjbGFzc2VzOiBQYXJ0aWFsPHR5cGVvZiB0aGlzLl9jdXN0b21DbGFzc2VzPikge1xuICAgIHRoaXMuX2N1c3RvbUNsYXNzZXMgPSB7IC4uLnRoaXMuX2N1c3RvbUNsYXNzZXMsIC4uLmNsYXNzZXMgfTtcbiAgfVxuXG4gIGdldCBjdXN0b21DbGFzc2VzKCk6IHR5cGVvZiB0aGlzLl9jdXN0b21DbGFzc2VzIHtcbiAgICByZXR1cm4gdGhpcy5fY3VzdG9tQ2xhc3NlcztcbiAgfVxuXG4gIHByaXZhdGUgX2N1c3RvbUNsYXNzZXMgPSB7XG4gICAgc2VsZWN0ZWRSb3c6ICdndC1zZWxlY3RlZCcsXG4gICAgYWN0aXZlUm93OiAnZ3QtYWN0aXZlJyxcbiAgfTtcblxuICAvKiogaXNSb3dTZWxlY3RlZEZuXG4gICAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgcm93IGlzIHNlbGVjdGVkIG9yIG5vdC5cbiAgICogQHR5cGUge2ZufSBBIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgYSByb3cgb2JqZWN0IGFuZCBvcHRpb25hbCBzdGF0ZSBmb3IgY3VycmVudCBzZWxlY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgaWYgcm93IHNob3VsZCBiZSBtYXJrZWQgYXMgc2VsZWN0ZWQgb3Igbm90LiAqL1xuICBASW5wdXQoKSBzZXQgaXNSb3dTZWxlY3RlZEZuKFxuICAgIGZuOiAocm93OiBUYWJsZVJvdyB8IGFueSwgc2VsZWN0aW9uPzogYW55KSA9PiBib29sZWFuXG4gICkge1xuICAgIHRoaXMuX2lzUm93U2VsZWN0ZWRGbiA9IGZuO1xuICB9XG5cbiAgZ2V0IGlzUm93U2VsZWN0ZWRGbigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9pc1Jvd1NlbGVjdGVkRm47XG4gIH1cblxuICBwcml2YXRlIF9pc1Jvd1NlbGVjdGVkRm46IGFueTtcblxuICAvKiogc2VsZWN0aW9uXG4gICAqIEBkZXNjcmlwdGlvbiBBbiBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHJvdyhzKSBpbiB0aGUgdGFibGUuIEl0J3MgcGFzc2VkIHRvIHRoZSBzZWxlY3Rpb24gZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIHJvd3Mgc2hvdWxkIGJlIHNlbGVjdGVkLlxuICAgKiBAdHlwZSB7YW55fVxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0aW9uOiBhbnkgPSB7fTtcblxuICAvKiogcm93SWRLZXlcbiAgICogQGRlc2NyaXB0aW9uIHJvdyBrZXkgdG8gdXNlIGFzIHVuaXF1ZSBpZCBmb3IgdGFibGUgcm93LiBJZiBwYXNzZWQsIHRhYmxlIHdvbid0IGdlbmVyYXRlIHVuaXF1ZSBpZHMgZm9yIGVhY2ggcm93IGJ1dCBpbnN0ZWFkIHVzZSBrZXkgdG8gcmV0cmlldmUgdW5pcXVlIGlkIGZyb20gcm93LlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgQElucHV0KCkgcm93SWRLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKiogZ2VuZXJhdGVSb3dJZFxuICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciBvciBub3QgdG8gZ2VuZXJhdGUgYSB1bmlxdWUgaWQgZm9yIGVhY2ggcm93IGluIHRoZSB0YWJsZS4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIEBJbnB1dCgpIGdlbmVyYXRlUm93SWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKiB0cmFja1Jvd0J5Rm5cbiAgICogQGRlc2NyaXB0aW9uIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGVhY2ggcm93IGluIHRoZSB0YWJsZSB0byBvcHRpbWl6ZSByZW5kZXJpbmcgd2hlbiBkYXRhIGlzIGFkZGVkIG9yIHJlbW92ZWQuXG4gICAqIEB0eXBlIGZuIC0gVHJhY2tCeUZ1bmN0aW9uIHRvIHJldHJpZXZlIHVuaXF1ZSBpZCBiYXNlZCBvbiBpbmRleCBhbmQvb3Igcm93LiBEZWZhdWx0cyB0byB1c2luZyBgcm93W3RoaXMucm93SWRLZXldYC5cbiAgICovXG4gIEBJbnB1dCgpIHNldCB0cmFja1Jvd0J5Rm4oZm46IFRyYWNrQnlGdW5jdGlvbjxUYWJsZVJvdz4pIHtcbiAgICB0aGlzLl90cmFja1Jvd0J5Rm4gPSBmbjtcbiAgfVxuICBnZXQgdHJhY2tSb3dCeUZuKCk6IFRyYWNrQnlGdW5jdGlvbjxUYWJsZVJvdz4ge1xuICAgIHJldHVybiB0aGlzLl90cmFja1Jvd0J5Rm47XG4gIH1cblxuICBwcml2YXRlIF90cmFja1Jvd0J5Rm4oXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICByb3c6IFRhYmxlUm93XG4gICk6IFRyYWNrQnlGdW5jdGlvbjxUYWJsZVJvdz4ge1xuICAgIHJldHVybiB0aGlzLnJvd0lkS2V5ID8gcm93W3RoaXMucm93SWRLZXldIDogcm93Py5faWQ7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgc2VhcmNoKHN0cmluZzogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB8IHN0cmluZyB8IG51bGwpIHtcbiAgICB0aGlzLl9zZWFyY2hCeSQubmV4dChzdHJpbmcpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGNvbmZpZyhjb25maWc6IE9ic2VydmFibGU8VGFibGVDb25maWc8YW55Pj4gfCBUYWJsZUNvbmZpZzxhbnk+KSB7XG4gICAgdGhpcy5fdGFibGVDb25maWckLm5leHQoY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZzxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhKGRhdGE6IE9ic2VydmFibGU8QXJyYXk8VGFibGVSb3c+PiB8IEFycmF5PFRhYmxlUm93PiB8IG51bGwpIHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5fZGF0YSQubmV4dChkYXRhKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKSBzZXQgc29ydE9yZGVyKHNvcnRDb25maWc6IEd0U29ydE9yZGVyPFRhYmxlUm93PiB8IGFueSkge1xuICAgIGlmIChKU09OLnN0cmluZ2lmeShzb3J0Q29uZmlnKSAhPT0gSlNPTi5zdHJpbmdpZnkodGhpcy5fc29ydE9yZGVyJC52YWx1ZSkpIHtcbiAgICAgIHRoaXMuc29ydE9yZGVyQ2hhbmdlLmVtaXQoc29ydENvbmZpZyk7XG4gICAgICB0aGlzLl9zb3J0T3JkZXIkLm5leHQoc29ydENvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgQE91dHB1dCgpIHJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHdFJvd0NsaWNrRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSByb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPEd0Um93U2VsZWN0RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBzb3J0T3JkZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEd0U29ydE9yZGVyPFRhYmxlUm93Pj4oKTtcblxuICBfcm93Q2xpY2socm93OiBUYWJsZVJvdywgaW5kZXg6IG51bWJlciwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnJvd0NsaWNrLmVtaXQoeyByb3csIGluZGV4LCBldmVudCB9KTtcbiAgfVxuXG4gIF9yb3dBY3RpdmUocm93OiBUYWJsZVJvdywgaW5kZXg6IG51bWJlciwgZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnJvd1NlbGVjdC5lbWl0KHsgcm93LCBpbmRleCwgZXZlbnQgfSk7XG4gIH1cblxuICBwcml2YXRlIF9yb3dBY3RpdmUkID0gbmV3IFJlcGxheVN1YmplY3Q8R3RSb3dBY3RpdmVFdmVudD4oMSk7XG4gIEBPdXRwdXQoKSByb3dBY3RpdmUgPSBuZXcgRXZlbnRFbWl0dGVyPEd0Um93QWN0aXZlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjb2x1bW5Tb3J0ID0gbmV3IEV2ZW50RW1pdHRlcjxHdFNvcnRFdmVudD4oKTtcbiAgLyoqIHBhZ2UgY2hhbmdlIGV2ZW50IC0gZW1pdHRlZCB3aGVuIGN1cnJlbnQgcGFnZS9pbmRleCBjaGFuZ2VzIGZvciBwYWdpbmF0aW9uICovXG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHdFBhZ2VDaGFuZ2VFdmVudD4oKTtcbiAgcm93QWN0aXZlJCA9IHRoaXMuX3Jvd0FjdGl2ZSQuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgcSkgPT4ge1xuICAgICAgaWYgKHRoaXMucm93SWRLZXkgJiYgcC5yb3cgJiYgcS5yb3cpIHtcbiAgICAgICAgcmV0dXJuIHAucm93W3RoaXMucm93SWRLZXldID09PSBxLnJvd1t0aGlzLnJvd0lkS2V5XTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5nZW5lcmF0ZVJvd0lkICYmIHAucm93ICYmIHEucm93KSB7XG4gICAgICAgIHJldHVybiBwLnJvdy5faWQgPT09IHEucm93Ll9pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwLmluZGV4ID09PSBxLmluZGV4O1xuICAgICAgfVxuICAgIH0pLFxuICAgIHRhcCgoZXZlbnQpID0+ICh0aGlzLmFjdGl2ZVJvd0luZGV4ID0gZXZlbnQuaW5kZXgpKSxcbiAgICB0YXAoKGV2ZW50KSA9PiB0aGlzLnJvd0FjdGl2ZS5lbWl0KGV2ZW50KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBhY3RpdmVSb3dJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGFjdGl2YXRlUm93KGlkOiBzdHJpbmcsIGV2ZW50PzogTW91c2VFdmVudCB8IEtleWJvYXJkRXZlbnQpOiB2b2lkO1xuICBhY3RpdmF0ZVJvdyhpbmRleDogbnVtYmVyLCBldmVudD86IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZDtcbiAgYWN0aXZhdGVSb3cobm9uZTogbnVsbCwgZXZlbnQ/OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudCk6IHZvaWQ7XG4gIGFjdGl2YXRlUm93KFxuICAgIGFyZzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCxcbiAgICBldmVudD86IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50XG4gICk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgICAgdGhpcy50YWJsZSRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgcGx1Y2soJ2RhdGEnKSxcbiAgICAgICAgICBtYXAoKGRhdGEpID0+IGRhdGFbdGhpcy5wYWdpbmF0aW9uSW5kZXhdW2FyZ10pLFxuICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJvdykgPT4gdGhpcy5fYWN0aXZhdGVSb3cocm93LCBhcmcsIGV2ZW50KSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVE9ETzogaW1wbGVtZW50IGhvdmVyIGJ5IGlkXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2FjdGl2YXRlUm93KG51bGwsIG51bGwpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgX2FjdGl2YXRlUm93KFxuICAgIHJvdzogVGFibGVSb3cgfCBudWxsLFxuICAgIGluZGV4OiBudW1iZXIgfCBudWxsLFxuICAgIGV2ZW50PzogTW91c2VFdmVudCB8IEtleWJvYXJkRXZlbnRcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fcm93QWN0aXZlJC5uZXh0KHsgcm93LCBpbmRleCwgZXZlbnQgfSk7XG4gIH1cblxuICBnZXQgbG9hZGluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmckLnBpcGUoXG4gICAgICBzdGFydFdpdGgoZmFsc2UpLFxuICAgICAgbWFwKCh2YWx1ZSkgPT4gKGlzT2JzZXJ2YWJsZSh2YWx1ZSkgPyB2YWx1ZSA6IG9mKHZhbHVlKSkpLFxuICAgICAgc3dpdGNoTWFwKChvYnMpID0+IG9icyksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkaW5nJDogUmVwbGF5U3ViamVjdDxPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbj4gPVxuICAgIG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xuICBwcml2YXRlIF9zb3J0T3JkZXIkOiBCZWhhdmlvclN1YmplY3Q8R3RTb3J0T3JkZXI+ID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PEd0U29ydE9yZGVyPihbXSk7XG4gIHByaXZhdGUgX3NlYXJjaEJ5JDogUmVwbGF5U3ViamVjdDxPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHwgc3RyaW5nIHwgbnVsbD4gPVxuICAgIG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xuICBzZWFyY2hCeSQ6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4gPSB0aGlzLl9zZWFyY2hCeSQucGlwZShcbiAgICBzdGFydFdpdGgoJycpLFxuICAgIG1hcCgodmFsdWUpID0+IChpc09ic2VydmFibGUodmFsdWUpID8gdmFsdWUgOiBvZih2YWx1ZSkpKSxcbiAgICBzd2l0Y2hNYXAoKG9icykgPT4gb2JzKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHByaXZhdGUgX3BhZ2luZ0luZm8kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHdFBhZ2luYXRpb25JbmZvPih7XG4gICAgcGFnZUN1cnJlbnQ6IG51bGwsXG4gICAgcGFnZU5leHQ6IG51bGwsXG4gICAgcGFnZVByZXZpb3VzOiBudWxsLFxuICAgIHBhZ2VTaXplOiBudWxsLFxuICAgIG51bWJlck9mUmVjb3JkczogbnVsbCxcbiAgICAvL3JlY29yZHNBZnRlckZpbHRlcjogbnVsbCxcbiAgICAvL3JlY29yZHNBZnRlclNlYXJjaDogbnVsbCxcbiAgICAvL3JlY29yZHNBbGw6IG51bGwsXG4gIH0pO1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gIHByaXZhdGUgX3RhYmxlQ29uZmlnJDogQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRhYmxlQ29uZmlnPGFueT4gfCBPYnNlcnZhYmxlPFRhYmxlQ29uZmlnPGFueT4+XG4gID4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHt9KTtcbiAgdGFibGVDb25maWckID0gdGhpcy5fdGFibGVDb25maWckLnBpcGUoXG4gICAgbWFwKCh2YWx1ZSkgPT4gKGlzT2JzZXJ2YWJsZSh2YWx1ZSkgPyB2YWx1ZSA6IG9mKHZhbHVlKSkpLFxuICAgIHN3aXRjaE1hcCgob2JzKSA9PiBvYnMpLFxuICAgIHRhcCgoY29uZmlnKSA9PiAodGhpcy5fdGFibGVDb25maWcgPSBjb25maWcpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHByaXZhdGUgX2RhdGEkOiBSZXBsYXlTdWJqZWN0PEFycmF5PFRhYmxlUm93PiB8IE9ic2VydmFibGU8QXJyYXk8VGFibGVSb3c+Pj4gPVxuICAgIG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xuICBkYXRhJDogT2JzZXJ2YWJsZTxBcnJheTxUYWJsZVJvdz4+ID0gdGhpcy5fZGF0YSQucGlwZShcbiAgICBtYXAoKHZhbHVlKSA9PiAoaXNPYnNlcnZhYmxlKHZhbHVlKSA/IHZhbHVlIDogb2YodmFsdWUpKSksXG4gICAgc3dpdGNoTWFwKChvYnMpID0+IGNvbWJpbmVMYXRlc3QoW29ic10pKSxcbiAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnRhYmxlQ29uZmlnJCksXG4gICAgbWFwKChbW2RhdGFdLCBjb25maWddKSA9PiB7XG4gICAgICAvLyBpZiBjb2x1bW5zIG9yIHJvd3MgY29udGFpbnMgY29uZmlnIGZvciBtYXBUby4uLlxuICAgICAgaWYgKFxuICAgICAgICAoY29uZmlnLmNvbHVtbnMgJiZcbiAgICAgICAgICAhIU9iamVjdC52YWx1ZXMoY29uZmlnLmNvbHVtbnMpLmZpbmQoKGNvbHVtbikgPT4gISFjb2x1bW4ubWFwVG8pKSB8fFxuICAgICAgICAoY29uZmlnLnJvd3MgJiZcbiAgICAgICAgICAhIU9iamVjdC52YWx1ZXMoY29uZmlnLnJvd3MpLmZpbmQoKGNvbHVtbikgPT4gISFjb2x1bW4ubWFwVG8pKVxuICAgICAgKSB7XG4gICAgICAgIC8vIC4uLm1hcCBkYXRhIHRvIG5ldyBrZXlzIG9uIHJvdy4uLlxuICAgICAgICBjb25zdCBuZXdEYXRhOiBUYWJsZVJvd1tdID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHJvdyA9IGRhdGFbaV07XG4gICAgICAgICAgY29uc3QgbmV3S2V5cyA9IE9iamVjdC5lbnRyaWVzKGNvbmZpZy5jb2x1bW5zIHx8IGNvbmZpZy5yb3dzIHx8IFtdKVxuICAgICAgICAgICAgLmZpbHRlcigoW2tleSwgdmFsdWVdKSA9PiAhIXZhbHVlLm1hcFRvKSAvLyBhZGQga2V5cyBmb3IgY29sdW1ucyB3aXRoIG1hcFRvIGNvbmZpZy4uLlxuICAgICAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgICAgKHByZXZpb3VzVmFsdWUsIFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgICAgICAgICAuLi5wcmV2aW91c1ZhbHVlLFxuICAgICAgICAgICAgICAgIFtrZXldOiB0aGlzLm5lc3RlZFZhbHVlKFxuICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgdmFsdWUubWFwVG8hLnBhdGgsXG4gICAgICAgICAgICAgICAgICB2YWx1ZS5tYXBUbz8ubWlzc2luZ1ZhbHVlXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIG5ld0RhdGFbaV0gPSB7IC4uLnJvdywgLi4ubmV3S2V5cyB9O1xuICAgICAgICB9XG4gICAgICAgIGRhdGEgPSBuZXdEYXRhO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZ2VuZXJhdGVSb3dJZCAmJiAhdGhpcy5yb3dJZEtleSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZGF0YVdpdGhJZCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBkYXRhV2l0aElkW2ldID0geyAuLi5kYXRhW2ldLCBfaWQ6IGkgfTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhID0gZGF0YVdpdGhJZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGRhdGEsIGNvbmZpZyB9O1xuICAgIH0pLFxuICAgIHN3aXRjaE1hcCgob2JzKSA9PlxuICAgICAgY29tYmluZUxhdGVzdChbb2Yob2JzKSwgdGhpcy5zb3J0T3JkZXIkLCB0aGlzLnNlYXJjaEJ5JF0pXG4gICAgKSxcbiAgICBtYXAoKFt0YWJsZSwgc29ydEJ5LCBzZWFyY2hCeV0pID0+IHtcbiAgICAgIC8vIGNyZWF0ZSBhIG5ldyBhcnJheSByZWZlcmVuY2UgYW5kIHNvcnQgbmV3IGFycmF5IChwcmV2ZW50IG11dGF0aW5nIGV4aXN0aW5nIHN0YXRlKVxuICAgICAgdGFibGUuZGF0YSA9IFsuLi50YWJsZS5kYXRhXTtcbiAgICAgIHJldHVybiAhc29ydEJ5Py5sZW5ndGggfHwgdGFibGUuY29uZmlnPy5kaXNhYmxlVGFibGVTb3J0XG4gICAgICAgID8gc2VhcmNoQnkgJiYgIXRoaXMudGFibGVJbmZvPy5sYXp5TG9hZGVkXG4gICAgICAgICAgPyBzZWFyY2goc2VhcmNoQnksIGZhbHNlLCB0YWJsZS5kYXRhLCB0YWJsZS5jb25maWcpXG4gICAgICAgICAgOiB0YWJsZS5kYXRhXG4gICAgICAgIDogc2VhcmNoQnkgJiYgIXRoaXMudGFibGVJbmZvPy5sYXp5TG9hZGVkXG4gICAgICAgID8gc2VhcmNoKHNlYXJjaEJ5LCBmYWxzZSwgdGFibGUuZGF0YSwgdGFibGUuY29uZmlnKT8uc29ydChcbiAgICAgICAgICAgIHNvcnRPbk11bHRpcGxlS2V5cyhzb3J0QnkpXG4gICAgICAgICAgKVxuICAgICAgICA6IHRhYmxlLmRhdGE/LnNvcnQoc29ydE9uTXVsdGlwbGVLZXlzKHNvcnRCeSkpO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgY2FsY3VsYXRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZGF0YSQsIHRoaXMudGFibGVDb25maWckXSkucGlwZShcbiAgICBtYXAoKFtkYXRhLCBjb25maWddKSA9PiBjYWxjdWxhdGUoZGF0YSwgY29uZmlnKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICB0YWJsZSQ6IE9ic2VydmFibGU8VGFibGVNZXRhPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZGF0YSQsXG4gICAgdGhpcy50YWJsZUNvbmZpZyQsXG4gICAgdGhpcy5fcGFnaW5nSW5mbyQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbc29ydGVkLCBjb25maWcsIHBhZ2luZ0luZm9dKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHBhZ2luZ0luZm8ucGFnZUN1cnJlbnQgIT09IG51bGwgJiZcbiAgICAgICAgcGFnaW5nSW5mby5udW1iZXJPZlJlY29yZHMgIT09IG51bGwgJiZcbiAgICAgICAgcGFnaW5nSW5mby5wYWdlU2l6ZSAhPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogW3NvcnRlZF0sXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGluZm86IDxUYWJsZUluZm8+e1xuICAgICAgICAgICAgbGF6eUxvYWRlZDogdHJ1ZSxcbiAgICAgICAgICAgIG51bWJlck9mUmVjb3JkczogcGFnaW5nSW5mby5udW1iZXJPZlJlY29yZHMsXG4gICAgICAgICAgICBwYWdlU2l6ZTogcGFnaW5nSW5mby5wYWdlU2l6ZSxcbiAgICAgICAgICAgIHBhZ2VUb3RhbDpcbiAgICAgICAgICAgICAgcGFnaW5nSW5mby5wYWdlVG90YWwgPz9cbiAgICAgICAgICAgICAgTWF0aC5jZWlsKHBhZ2luZ0luZm8ubnVtYmVyT2ZSZWNvcmRzIC8gcGFnaW5nSW5mby5wYWdlU2l6ZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHBhZ2luYXRpb24gaXMgZGlzYWJsZWQuLi5cbiAgICAgIGlmICghY29uZmlnLnBhZ2luYXRpb24gfHwgY29uZmlnLnBhZ2luYXRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIC4uLnJldHVybiB1bmFsdGVyZWQgYXJyYXlcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiBbc29ydGVkXSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgaW5mbzogPFRhYmxlSW5mbz57IG51bWJlck9mUmVjb3Jkczogc29ydGVkLmxlbmd0aCwgcGFnZVRvdGFsOiAxIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gcmVjb3JkIHNldFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogY2h1bmsoc29ydGVkLCArKGNvbmZpZy5wYWdpbmF0aW9uLmxlbmd0aCB8fCAwKSksXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgaW5mbzogPFRhYmxlSW5mbz57XG4gICAgICAgICAgbnVtYmVyT2ZSZWNvcmRzOiBzb3J0ZWQubGVuZ3RoLFxuICAgICAgICAgIHBhZ2VTaXplOiArKGNvbmZpZy5wYWdpbmF0aW9uLmxlbmd0aCB8fCAwKSxcbiAgICAgICAgICBwYWdlVG90YWw6IE1hdGguY2VpbChcbiAgICAgICAgICAgIHNvcnRlZC5sZW5ndGggLyArKGNvbmZpZy5wYWdpbmF0aW9uLmxlbmd0aCB8fCAwKVxuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0pLFxuICAgIHRhcCgobWV0YSkgPT4gdGhpcy5fdGFibGVJbmZvJC5uZXh0KG1ldGEuaW5mbykpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgLyoqIHRhYmxlSW5mbyQgLSByZXR1cm5zIG9ic2VydmFibGUgZm9yIHRhYmxlIGluZm9cbiAgICogQHJldHVybiBPYnNlcnZhYmxlPFRhYmxlSW5mbz4gKi9cbiAgZ2V0IHRhYmxlSW5mbyQoKTogT2JzZXJ2YWJsZTxUYWJsZUluZm8gfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVJbmZvJC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgZmlsdGVyKChpbmZvKSA9PiAhIWluZm8pLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG5cbiAgLyoqIHRhYmxlSW5mbyAtIHJldHVybnMgdGhlIGN1cnJlbnQgdGFibGUgaW5mb1xuICAgKiBAcmV0dXJuIFRhYmxlSW5mbyAqL1xuICBnZXQgdGFibGVJbmZvKCk6IFRhYmxlSW5mbyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlSW5mbyQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RhYmxlSW5mbyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlSW5mbyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIF9jdXJyZW50UGFnaW5hdGlvbkluZGV4JDogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4gPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3QoMCk7XG4gIGN1cnJlbnRQYWdpbmF0aW9uSW5kZXgkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5fY3VycmVudFBhZ2luYXRpb25JbmRleCQsXG4gICAgdGhpcy50YWJsZSQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbcGFnZSwgdGFibGVdOiBhbnkpID0+IHtcbiAgICAgIC8vIGRldGVybWluZSBsYXN0IHBhZ2VcbiAgICAgIGNvbnN0IGxhc3RQYWdlID1cbiAgICAgICAgTWF0aC5jZWlsKFxuICAgICAgICAgIHRhYmxlLmluZm8ucmVjb3JkcyAvXG4gICAgICAgICAgICAodGFibGUuaW5mby5yZWNvcmRMZW5ndGggPz9cbiAgICAgICAgICAgICAgKHRhYmxlLmNvbmZpZz8ucGFnaW5hdGlvbj8ubGVuZ3RoIHx8IHRhYmxlLmluZm8ucmVjb3JkcykpXG4gICAgICAgICkgLSAxO1xuICAgICAgLy8gZGV0ZXJtaW5lIG1pbi9tYXggcG9zaXRpb25cbiAgICAgIHJldHVybiArcGFnZSA8IDAgPyAwIDogK3BhZ2UgPiBsYXN0UGFnZSA/IGxhc3RQYWdlIDogK3BhZ2U7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICB0YXAoKGluZGV4KSA9PiB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7IGluZGV4IH0pKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIGNvbHNwYW4kID0gdGhpcy50YWJsZUNvbmZpZyQucGlwZShcbiAgICBzd2l0Y2hNYXAoKGNvbmZpZykgPT5cbiAgICAgIGNvbmZpZy5jb2x1bW5zXG4gICAgICAgID8gb2YoXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKGNvbmZpZy5jb2x1bW5zIHx8IGNvbmZpZy5yb3dzIHx8IHt9KS5maWx0ZXIoXG4gICAgICAgICAgICAgICh2YWx1ZSkgPT4gdmFsdWUuaGlkZGVuICE9PSB0cnVlXG4gICAgICAgICAgICApLmxlbmd0aFxuICAgICAgICAgIClcbiAgICAgICAgOiB0aGlzLmRhdGEkLnBpcGUobWFwKChkYXRhKSA9PiBkYXRhLmxlbmd0aCArIDEpKVxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBmb290ZXJDb2xzcGFuJCA9IHRoaXMudGFibGVDb25maWckLnBpcGUoXG4gICAgbWFwKChjb25maWcpID0+IHtcbiAgICAgIGxldCBjb2xzcGFuID0gMDtcbiAgICAgIE9iamVjdC52YWx1ZXMoY29uZmlnPy5mb290ZXI/LmNvbHVtbnMgfHwge30pLmZvckVhY2goKGNhbGN1bGF0aW9ucykgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhjYWxjdWxhdGlvbnMpLmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSBmYWxzZSlcbiAgICAgICAgICAgIC5sZW5ndGggPj0gMFxuICAgICAgICApIHtcbiAgICAgICAgICBjb2xzcGFuICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH0sIHt9KTtcbiAgICAgIHJldHVybiBjb2xzcGFuO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgLyoqIHNvcnRCeUtleSAtIFNvcnQgYnkga2V5IGluIHRhYmxlIHJvd1xuICAgKiBAcGFyYW0ga2V5IC0ga2V5IHRvIHNvcnQgYnlcbiAgICogQHBhcmFtIHsgTW91c2VFdmVudCB9IFskZXZlbnRdIC0gTW91c2UgZXZlbnQgdHJpZ2dlcmluZyBzb3J0LCBpZiBzaGlmdCBrZXkgaXMgcHJlc3NlZCBzb3J0IGtleSB3aWxsIGJlIGFkZGVkIHRvIGFscmVhZHkgcHJlc2VudCBzb3J0IGtleXNcbiAgICovXG4gIHNvcnRCeUtleShrZXk6IGtleW9mIFRhYmxlUm93LCAkZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc2hpZnRLZXkgPSAkZXZlbnQ/LnNoaWZ0S2V5ID09PSB0cnVlO1xuICAgIGNvbnN0IGN1cnJlbnRPcmRlciA9IHRoaXMuX3NvcnRPcmRlciQudmFsdWU7XG4gICAgbGV0IHNvcnRPcmRlcjogR3RPcmRlciA9ICdhc2MnO1xuICAgIGxldCBuZXdPcmRlcjogR3RTb3J0T3JkZXIgPSBbXTtcbiAgICAvLyBpZiBzaGlmdCBrZXkgaXMgcHJlc3NlZCB3aGlsZSBzb3J0aW5nLi4uXG4gICAgaWYgKHNoaWZ0S2V5KSB7XG4gICAgICAvLyAuLi5jaGVjayBpZiBrZXkgaXMgYWxyZWFkeSBzb3J0ZWRcbiAgICAgIGNvbnN0IGV4aXN0aW5nU29ydFBvc2l0aW9uID0gY3VycmVudE9yZGVyLmZpbmRJbmRleChcbiAgICAgICAgKHZhbHVlKSA9PiB2YWx1ZS5rZXkgPT09IGtleVxuICAgICAgKTtcbiAgICAgIGlmIChleGlzdGluZ1NvcnRQb3NpdGlvbiA9PT0gLTEpIHtcbiAgICAgICAgLy8gLi4uaWYga2V5IGlzIG5vdCBzb3J0ZWQsIGFkZCBpdCB0byB0aGUgZW5kIG9mIHRoZSBzb3J0IG9yZGVyXG4gICAgICAgIG5ld09yZGVyID0gWy4uLmN1cnJlbnRPcmRlciwgeyBrZXksIG9yZGVyOiAnYXNjJyB9XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIC4uLmlmIGtleSBpcyBhbHJlYWR5IHNvcnRlZCwgdG9nZ2xlIHNvcnQgb3JkZXJcbiAgICAgICAgc29ydE9yZGVyID0gY3VycmVudE9yZGVyW2V4aXN0aW5nU29ydFBvc2l0aW9uXS5vcmRlcjtcbiAgICAgICAgY29uc3QgbmV3U29ydE9yZGVyID0gc29ydE9yZGVyID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnO1xuICAgICAgICBuZXdPcmRlciA9IFsuLi5jdXJyZW50T3JkZXJdO1xuICAgICAgICBuZXdPcmRlcltleGlzdGluZ1NvcnRQb3NpdGlvbl0gPSB7XG4gICAgICAgICAgLi4ubmV3T3JkZXJbZXhpc3RpbmdTb3J0UG9zaXRpb25dLFxuICAgICAgICAgIG9yZGVyOiBuZXdTb3J0T3JkZXIsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIC4uLmVsc2UgaWYgc2hpZnQga2V5IGlzIG5vdCBwcmVzc2VkLi4uXG4gICAgICBpZiAoY3VycmVudE9yZGVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gLi4uY2hlY2sgaWYga2V5IGlzIGFscmVhZHkgc29ydGVkXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nU29ydFBvc2l0aW9uID0gY3VycmVudE9yZGVyLmZpbmRJbmRleChcbiAgICAgICAgICAodmFsdWUpID0+IHZhbHVlLmtleSA9PT0ga2V5XG4gICAgICAgICk7XG4gICAgICAgIC8vIC4uLmlmIGtleSBpcyBhbHJlYWR5IHNvcnRlZCwgdG9nZ2xlIHNvcnQgb3JkZXJcbiAgICAgICAgaWYgKGV4aXN0aW5nU29ydFBvc2l0aW9uID09PSAtMSkge1xuICAgICAgICAgIG5ld09yZGVyID0gW3sga2V5LCBvcmRlcjogJ2FzYycgfV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc29ydE9yZGVyID0gY3VycmVudE9yZGVyW2V4aXN0aW5nU29ydFBvc2l0aW9uXS5vcmRlcjtcbiAgICAgICAgICBjb25zdCBuZXdTb3J0T3JkZXIgPSBzb3J0T3JkZXIgPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYyc7XG4gICAgICAgICAgbmV3T3JkZXIgPSBbeyBrZXksIG9yZGVyOiBuZXdTb3J0T3JkZXIgfV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIC4uLmlmIGtleSBpcyBub3Qgc29ydGVkIHNldCBzb3J0IG9yZGVyIGZvciBrZXkgdG8gYXNjZW5kaW5nXG4gICAgICAgIG5ld09yZGVyID0gW3sga2V5LCBvcmRlcjogc29ydE9yZGVyIH1dO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBjcmVhdGUgc29ydCBldmVudFxuICAgIGNvbnN0IHNvcnRFdmVudDogR3RTb3J0RXZlbnQgPSB7XG4gICAgICBrZXksXG4gICAgICBvcmRlcjogc29ydE9yZGVyLFxuICAgICAgY3VycmVudFNvcnRPcmRlcjogbmV3T3JkZXIsXG4gICAgICBhZGRTb3J0S2V5OiBzaGlmdEtleSxcbiAgICB9O1xuXG4gICAgLy8gaWYgZXZlbnQgaXMgcGFzc2VkIHRvIHNvcnQgZnVuY3Rpb24uLi5cbiAgICBpZiAoJGV2ZW50KSB7XG4gICAgICAvLyAuLi5lbWl0IGl0IGFzIHdlbGxcbiAgICAgIHNvcnRFdmVudC5ldmVudCA9ICRldmVudDtcbiAgICB9XG4gICAgLy8gZW1pdCBzb3J0IGV2ZW50XG4gICAgdGhpcy5jb2x1bW5Tb3J0LmVtaXQoc29ydEV2ZW50KTtcblxuICAgIC8vIGlmIHRhYmxlIGlzIG5vdCBsYXp5IGxvYWRlZCAoc29ydGluZyBpcyB0aGVuIGhhbmRsZWQgc2VydmVyLXNpZGUpLi4uXG4gICAgaWYgKCF0aGlzLnRhYmxlSW5mbz8ubGF6eUxvYWRlZCkge1xuICAgICAgLy8gLi4udXBkYXRlIHNvcnQgb3JkZXJcbiAgICAgIHRoaXMuc29ydE9yZGVyID0gbmV3T3JkZXI7XG4gICAgfVxuICB9XG5cbiAgY29sdW1uT3JkZXIgPSAoXG4gICAgYTogS2V5VmFsdWU8c3RyaW5nLCBUYWJsZUNvbHVtbj4sXG4gICAgYjogS2V5VmFsdWU8c3RyaW5nLCBUYWJsZUNvbHVtbj5cbiAgKTogbnVtYmVyID0+IHtcbiAgICByZXR1cm4gKGEudmFsdWUub3JkZXIgfHwgMCkgLSAoYi52YWx1ZS5vcmRlciB8fCAwKTtcbiAgfTtcblxuICBuZXN0ZWRWYWx1ZShcbiAgICBvYmplY3Q6IGFueSxcbiAgICBtYXBUbzogc3RyaW5nLFxuICAgIG1pc3NpbmdWYWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCA9IG51bGxcbiAgKTogdW5rbm93biB7XG4gICAgY29uc3QgbGV2ZWxzID0gbWFwVG8uc3BsaXQoJy4nKTtcbiAgICByZXR1cm4gbGV2ZWxzLnJlZHVjZShcbiAgICAgIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50VmFsdWUsIGluZGV4KSA9PlxuICAgICAgICBwcmV2aW91c1ZhbHVlW2N1cnJlbnRWYWx1ZV0gfHxcbiAgICAgICAgKGluZGV4ID09PSBsZXZlbHMubGVuZ3RoIC0gMSA/IG1pc3NpbmdWYWx1ZSA6IHt9KSxcbiAgICAgIG9iamVjdFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF91bnN1YnNjcmliZUZyb21LZXlib2FyZEV2ZW50cyQgPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIF9rZXlib2FyZEFycm93RXZlbnQkID0gZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KFxuICAgIGRvY3VtZW50LFxuICAgICdrZXlkb3duJ1xuICApLnBpcGUoXG4gICAgZmlsdGVyKFxuICAgICAgKGV2ZW50KSA9PlxuICAgICAgICBbLi4udGhpcy5fbmF2aWdhdGlvbktleXMsIC4uLnRoaXMuX3NlbGVjdEtleXNdLmluZGV4T2YoZXZlbnQua2V5KSA+IC0xXG4gICAgKVxuICApO1xuXG4gIHByb3RlY3RlZCBsaXN0ZW5Ub0tleWJvYXJkRXZlbnRzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGFibGVDb25maWc/LmFjdGl2YXRlUm93T25LZXlib2FyZE5hdmlnYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl91bnN1YnNjcmliZUZyb21LZXlib2FyZEV2ZW50cyQubmV4dCh0cnVlKTtcbiAgICB0aGlzLl9rZXlib2FyZEFycm93RXZlbnQkXG4gICAgICAucGlwZShcbiAgICAgICAgd2l0aExhdGVzdEZyb20oXG4gICAgICAgICAgdGhpcy5kYXRhJCxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdpbmF0aW9uSW5kZXgkLFxuICAgICAgICAgIHRoaXMudGFibGVJbmZvJFxuICAgICAgICApLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVGcm9tS2V5Ym9hcmRFdmVudHMkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoW2V2ZW50LCByb3dzLCBjdXJyZW50UGFnZSwgdGFibGVJbmZvXSkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RFdmVudCA9IHRoaXMuX3NlbGVjdEtleXMuaW5jbHVkZXMoZXZlbnQua2V5KTtcbiAgICAgICAgaWYgKHNlbGVjdEV2ZW50ICYmIHRoaXMuYWN0aXZlUm93SW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCByb3dJbmRleCA9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVJvd0luZGV4ICsgY3VycmVudFBhZ2UgKiAodGFibGVJbmZvPy5wYWdlU2l6ZSA/PyAwKTtcbiAgICAgICAgICB0aGlzLl9yb3dBY3RpdmUocm93c1tyb3dJbmRleF0sIHJvd0luZGV4LCBldmVudCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmF2aWdhdGlvbkV2ZW50ID0gdGhpcy5fbmF2aWdhdGlvbktleXMuaW5jbHVkZXMoZXZlbnQua2V5KTtcbiAgICAgICAgaWYgKG5hdmlnYXRpb25FdmVudCkge1xuICAgICAgICAgIHRoaXMuX2hhbmRsZU5hdmlnYXRpb25FdmVudChldmVudCwgcm93cywgY3VycmVudFBhZ2UsIHRhYmxlSW5mbyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG4gIHVuc3Vic2NyaWJlRnJvbUtleWJvYXJkRXZlbnRzKHRhYmxlUmVmOiBIVE1MVGFibGVFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90YWJsZUNvbmZpZz8uYWN0aXZhdGVSb3dPbktleWJvYXJkTmF2aWdhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBvbmx5IHVuc3Vic2NyaWJlIGlmIHRhYmxlIGlzIG5vdCBmb2N1c2VkXG4gICAgaWYgKHRhYmxlUmVmICE9PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5fdGFibGVDb25maWc/LmFjdGl2YXRlUm93T25Ib3Zlcikge1xuICAgICAgICAvLyB1bnNldCBhY3RpdmUgcm93XG4gICAgICAgIHRoaXMuYWN0aXZhdGVSb3cobnVsbCk7XG4gICAgICB9XG4gICAgICB0aGlzLl91bnN1YnNjcmliZUZyb21LZXlib2FyZEV2ZW50cyQubmV4dCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVOYXZpZ2F0aW9uRXZlbnQoXG4gICAgZXZlbnQ6IEtleWJvYXJkRXZlbnQsXG4gICAgcm93czogYW55W10sXG4gICAgY3VycmVudFBhZ2U6IG51bWJlcixcbiAgICB0YWJsZUluZm86IGFueVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBoYXNQYWdpbmF0aW9uID0gKHRhYmxlSW5mbz8ucGFnZVRvdGFsIHx8IDApID4gMSAmJiB0YWJsZUluZm87XG4gICAgY29uc3QgbGFzdFJvd0luZGV4ID0gcm93cy5sZW5ndGggLSAxO1xuICAgIGxldCBuZXdJbmRleCA9IHRoaXMuYWN0aXZlUm93SW5kZXg7XG4gICAgbGV0IGluZGV4TW9kaWZpZXIgPSAwO1xuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0hvbWUnKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb25JbmRleCA9IDA7XG4gICAgICB0aGlzLmFjdGl2YXRlUm93KDAsIGV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW5kJykge1xuICAgICAgY29uc3QgaW5kZXhPZkxhc3RSZWNvcmQgPSBoYXNQYWdpbmF0aW9uXG4gICAgICAgID8gcm93cy5sZW5ndGggLSAodGFibGVJbmZvLnBhZ2VUb3RhbCAtIDEpICogdGFibGVJbmZvLnBhZ2VTaXplIC0gMVxuICAgICAgICA6IGxhc3RSb3dJbmRleDtcbiAgICAgIGlmICh0YWJsZUluZm8/LnBhZ2VUb3RhbCkge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb25JbmRleCA9IHRhYmxlSW5mby5wYWdlVG90YWwgLSAxO1xuICAgICAgfVxuICAgICAgdGhpcy5hY3RpdmF0ZVJvdyhpbmRleE9mTGFzdFJlY29yZCwgZXZlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICBpbmRleE1vZGlmaWVyID0gMTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICBpbmRleE1vZGlmaWVyID0gLTE7XG4gICAgfVxuXG4gICAgaWYgKG5ld0luZGV4ID09PSBudWxsKSB7XG4gICAgICBuZXdJbmRleCA9IDA7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIG5ld0luZGV4ICsgaW5kZXhNb2RpZmllciA+PSAwICYmXG4gICAgICBuZXdJbmRleCArIGluZGV4TW9kaWZpZXIgPD0gbGFzdFJvd0luZGV4XG4gICAgKSB7XG4gICAgICBuZXdJbmRleCA9IG5ld0luZGV4ICsgaW5kZXhNb2RpZmllcjtcbiAgICB9XG5cbiAgICBpZiAoaGFzUGFnaW5hdGlvbiAmJiB0YWJsZUluZm8/LnBhZ2VTaXplKSB7XG4gICAgICBjb25zdCBpc05vdExhc3RQYWdlID0gY3VycmVudFBhZ2UgKyAxIDwgdGFibGVJbmZvLnBhZ2VUb3RhbDtcbiAgICAgIGNvbnN0IHJlY29yZHNPbkxhc3RQYWdlID1cbiAgICAgICAgcm93cy5sZW5ndGggLSAodGFibGVJbmZvLnBhZ2VUb3RhbCAtIDEpICogdGFibGVJbmZvLnBhZ2VTaXplIC0gMTtcbiAgICAgIGNvbnN0IG1heEluZGV4ID0gaXNOb3RMYXN0UGFnZVxuICAgICAgICA/IHRhYmxlSW5mbz8ucGFnZVNpemUgLSAxXG4gICAgICAgIDogcmVjb3Jkc09uTGFzdFBhZ2U7XG5cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnICYmIGN1cnJlbnRQYWdlID4gMCkge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb25JbmRleCA9IGN1cnJlbnRQYWdlIC0gMTtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVJvdyhuZXdJbmRleCwgZXZlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnICYmIGlzTm90TGFzdFBhZ2UpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGN1cnJlbnRQYWdlICsgMSA9PT0gdGFibGVJbmZvLnBhZ2VUb3RhbCAtIDEgJiZcbiAgICAgICAgICBuZXdJbmRleCA+IHJlY29yZHNPbkxhc3RQYWdlXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuYWN0aXZhdGVSb3cocmVjb3Jkc09uTGFzdFBhZ2UsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhZ2luYXRpb25JbmRleCA9IGN1cnJlbnRQYWdlICsgMTtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVJvdyhuZXdJbmRleCwgZXZlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY3VycmVudFBhZ2UgPiAwICYmXG4gICAgICAgIGluZGV4TW9kaWZpZXIgPCAwICYmXG4gICAgICAgIG5ld0luZGV4ICsgaW5kZXhNb2RpZmllciA8PSBsYXN0Um93SW5kZXggJiZcbiAgICAgICAgKHRoaXMuYWN0aXZlUm93SW5kZXggfHwgMCkgKyBpbmRleE1vZGlmaWVyIDwgMFxuICAgICAgKSB7XG4gICAgICAgIC8vIHNldCBsYXN0IHJvdyBvZiBwcmV2aW91cyBwYWdlIGFzIGFjdGl2ZVxuICAgICAgICB0aGlzLmFjdGl2YXRlUm93KHRhYmxlSW5mbz8ucGFnZVNpemUgLSAxLCBldmVudCk7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbkluZGV4ID0gY3VycmVudFBhZ2UgLSAxO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhZ2VJbmRleCA9IG5ld0luZGV4ICUgdGFibGVJbmZvPy5wYWdlU2l6ZTtcblxuICAgICAgaWYgKG5ld0luZGV4ID4gbWF4SW5kZXggJiYgY3VycmVudFBhZ2UgKyAxIDwgdGFibGVJbmZvLnBhZ2VUb3RhbCkge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb25JbmRleCA9IGN1cnJlbnRQYWdlICsgMTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWN0aXZhdGVSb3cocGFnZUluZGV4ID4gbWF4SW5kZXggPyBtYXhJbmRleCA6IHBhZ2VJbmRleCwgZXZlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZhdGVSb3cobmV3SW5kZXgsIGV2ZW50KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPHRhYmxlXG4gIFtuZ0NsYXNzXT1cIih0YWJsZUNvbmZpZyQgfCBhc3luYyk/LmNsYXNzIHx8ICd0YWJsZSdcIlxuICBbY2xhc3MudGFibGUtbW9iaWxlXT1cIih0YWJsZUNvbmZpZyQgfCBhc3luYyk/Lm1vYmlsZUxheW91dFwiXG4gIFtjbGFzcy50YWJsZS1ob3Jpem9udGFsXT1cIih0YWJsZUNvbmZpZyQgfCBhc3luYyk/LnJvd3NcIlxuICBbY2xhc3MudGFibGUtbG9hZGluZ109XCJsb2FkaW5nJCB8IGFzeW5jXCJcbiAgW2NsYXNzLmd0LXN0aWNreS1yb3ctaGVhZGVyXT1cIlxuICAgICh0YWJsZUNvbmZpZyQgfCBhc3luYyk/LnN0aWNreUhlYWRlcnM/LnJvdyAmJiAodGFibGVDb25maWckIHwgYXN5bmMpPy5yb3dzXG4gIFwiXG4gIFtjbGFzcy5ndC1zdGlja3ktY29sdW1uLWhlYWRlcl09XCJcbiAgICAodGFibGVDb25maWckIHwgYXN5bmMpPy5zdGlja3lIZWFkZXJzPy5jb2x1bW5cbiAgXCJcbiAgW2F0dHIuYXJpYS1idXN5XT1cIihsb2FkaW5nJCB8IGFzeW5jKSA9PT0gdHJ1ZSA/IHRydWUgOiBudWxsXCJcbiAgW3RhYmluZGV4XT1cIih0YWJsZUNvbmZpZyQgfCBhc3luYyk/LmFjdGl2YXRlUm93T25LZXlib2FyZE5hdmlnYXRpb24gPyAwIDogLTFcIlxuICAjdGFibGVSZWZcbiAgKGZvY3VzKT1cImxpc3RlblRvS2V5Ym9hcmRFdmVudHMoKVwiXG4gIChmb2N1c291dCk9XCJ1bnN1YnNjcmliZUZyb21LZXlib2FyZEV2ZW50cyh0YWJsZVJlZilcIlxuICAobW91c2VlbnRlcik9XCJsaXN0ZW5Ub0tleWJvYXJkRXZlbnRzKClcIlxuICAobW91c2VsZWF2ZSk9XCJ1bnN1YnNjcmliZUZyb21LZXlib2FyZEV2ZW50cyh0YWJsZVJlZilcIlxuPlxuICA8dGhlYWQ+XG4gICAgPHRyXG4gICAgICAqbmdJZj1cIntcbiAgICAgICAgY29uZmlnOiAodGFibGVDb25maWckIHwgYXN5bmMpISxcbiAgICAgICAgaXNMb2FkaW5nOiBsb2FkaW5nJCB8IGFzeW5jXG4gICAgICB9IGFzIHRhYmxlXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdGFibGUuY29uZmlnPy5jb2x1bW5zIHwga2V5dmFsdWU6IGNvbHVtbk9yZGVyXCJcbiAgICAgID5cbiAgICAgICAgPHRoXG4gICAgICAgICAgKm5nSWY9XCIhY29sdW1uLnZhbHVlPy5oaWRkZW5cIlxuICAgICAgICAgIG5nQ2xhc3M9XCJ7eyAoY29sdW1uLmtleSB8IGRhc2hDYXNlKSArICctY29sdW1uJyB9fSB7e1xuICAgICAgICAgICAgY29sdW1uLnZhbHVlLmNsYXNzXG4gICAgICAgICAgfX1cIlxuICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJ0YWJsZS5pc0xvYWRpbmdcIlxuICAgICAgICAgIFthdHRyLmFyaWEtc29ydF09XCJzb3J0T3JkZXIkIHwgYXN5bmMgfCBzb3J0Q2xhc3M6IGNvbHVtbi5rZXk6J2FyaWEnXCJcbiAgICAgICAgICBbY2xhc3MuZ3Qtc29ydGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4udmFsdWU/LnNvcnRhYmxlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtc29ydC1vcmRlcl09XCJcbiAgICAgICAgICAgICAgc29ydE9yZGVyJCB8IGFzeW5jIHwgc29ydENsYXNzOiBjb2x1bW4ua2V5OidvcmRlcidcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImd0LXNvcnRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICB0YWJsZS5pc0xvYWRpbmcgfHxcbiAgICAgICAgICAgICAgICAhY29sdW1uLnZhbHVlLnNvcnRhYmxlIHx8XG4gICAgICAgICAgICAgICAgc29ydEJ5S2V5KGNvbHVtbi5rZXksICRldmVudClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4udmFsdWU/LmhlYWRlciAhPT0gZmFsc2VcIj57e1xuICAgICAgICAgICAgICBjb2x1bW4udmFsdWUuaGVhZGVyIHx8IGNvbHVtbi5rZXkgfCBjYXBpdGFsQ2FzZVxuICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiIWNvbHVtbi52YWx1ZT8uc29ydGFibGUgJiYgY29sdW1uLnZhbHVlPy5oZWFkZXIgIT09IGZhbHNlXCJcbiAgICAgICAgICAgID57eyBjb2x1bW4udmFsdWUuaGVhZGVyIHx8IGNvbHVtbi5rZXkgfCBjYXBpdGFsQ2FzZSB9fTwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgPC90aD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICgodGFibGU/LmNvbmZpZz8ucm93cyB8IGtleXZhbHVlOiBjb2x1bW5PcmRlcikgfHwgW10pWzBdIGFzIGhlYWRlclJvd1xuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8dGhcbiAgICAgICAgICBjbGFzcz1cInJvdy1oZWFkZXJcIlxuICAgICAgICAgIFthdHRyLmFyaWEtc29ydF09XCJcbiAgICAgICAgICAgIHNvcnRPcmRlciQgfCBhc3luYyB8IHNvcnRDbGFzczogaGVhZGVyUm93LmtleTonYXJpYSdcbiAgICAgICAgICBcIlxuICAgICAgICAgIG5nQ2xhc3M9XCJ7eyBoZWFkZXJSb3cudmFsdWUuc29ydGFibGUgPyAnc29ydCAnIDogJycgfX0ge3tcbiAgICAgICAgICAgIHNvcnRPcmRlciQgfCBhc3luYyB8IHNvcnRDbGFzczogaGVhZGVyUm93LmtleVxuICAgICAgICAgIH19IHt7IChoZWFkZXJSb3cua2V5IHwgZGFzaENhc2UpICsgJy1jb2x1bW4nIH19XCJcbiAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICB0YWJsZS5pc0xvYWRpbmcgfHxcbiAgICAgICAgICAgICAgIWhlYWRlclJvdy52YWx1ZS5zb3J0YWJsZSB8fFxuICAgICAgICAgICAgICBzb3J0QnlLZXkoaGVhZGVyUm93LmtleSwgJGV2ZW50KVxuICAgICAgICAgIFwiXG4gICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlclJvdz8udmFsdWU/LmhlYWRlciAhPT0gZmFsc2VcIj57e1xuICAgICAgICAgICAgaGVhZGVyUm93Py52YWx1ZT8uaGVhZGVyIHx8IGhlYWRlclJvdy5rZXkgfCBjYXBpdGFsQ2FzZVxuICAgICAgICAgIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aFxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgKCh0YWJsZSQgfCBhc3luYyk/LmRhdGEgfHwgW10pWzBdXCJcbiAgICAgICAgICBuZ0NsYXNzPVwie3sgaGVhZGVyUm93LnZhbHVlLmNsYXNzIH19XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIlxuICAgICAgICAgICAgICAodGFibGUuY29uZmlnLnJvd3MgfHwge30pW2hlYWRlclJvdy5rZXldLnRlbXBsYXRlUmVmXG4gICAgICAgICAgICAgICAgPyB0ZW1wbGF0ZVJlZlxuICAgICAgICAgICAgICAgIDogKHRhYmxlLmNvbmZpZy5yb3dzIHx8IHt9KVtoZWFkZXJSb3cua2V5XS50cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICA/IHRyYW5zZm9ybURhdGFcbiAgICAgICAgICAgICAgICA6IHJhd0RhdGFcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICByb3c6IGNvbHVtbixcbiAgICAgICAgICAgICAgY29sdW1uOiBoZWFkZXJSb3csXG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogKHRhYmxlLmNvbmZpZy5yb3dzIHx8IHt9KVtoZWFkZXJSb3cua2V5XS50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgIHRlbXBsYXRlUmVmOiAodGFibGUuY29uZmlnLnJvd3MgfHwge30pW2hlYWRlclJvdy5rZXldLnRlbXBsYXRlUmVmLFxuICAgICAgICAgICAgICBpbmRleDogMFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RoPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC90cj5cbiAgPC90aGVhZD5cbiAgPHRib2R5ICpuZ0lmPVwibG9hZGluZyQgfCBhc3luYzsgZWxzZSB0YWJsZUNvbnRlbnRcIj5cbiAgICA8dHI+XG4gICAgICA8dGQgY2xhc3M9XCJwLTBcIiBbY29sU3Bhbl09XCJjb2xzcGFuJCB8IGFzeW5jXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIi50YWJsZS1sb2FkaW5nXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3Rib2R5PlxuICA8dGZvb3QgKm5nSWY9XCIodGFibGUkIHwgYXN5bmMpISBhcyB0YWJsZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJsZS5kYXRhLmxlbmd0aCA+IDAgJiYgIShsb2FkaW5nJCB8IGFzeW5jKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihjYWxjdWxhdGlvbnMkIHwgYXN5bmMpISBhcyBjYWxjdWxhdGlvbnNcIj5cbiAgICAgICAgPHRyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNhbGN1bGF0aW9uIG9mIGNhbGN1bGF0aW9ucy5jYWxjdWxhdGlvbnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJ7XG4gICAgICAgICAgICAgIHNob3dIZWFkZXI6IChjb2xzcGFuJCB8IGFzeW5jKSAhPT0gKGZvb3RlckNvbHNwYW4kIHwgYXN5bmMpXG4gICAgICAgICAgICB9IGFzIGZvb3RlclJvd1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICpuZ0lmPVwiZm9vdGVyUm93LnNob3dIZWFkZXJcIlxuICAgICAgICAgICAgICBbY29sU3Bhbl09XCJcbiAgICAgICAgICAgICAgICAoKGNvbHNwYW4kIHwgYXN5bmMpIHx8IDApIC0gKChmb290ZXJDb2xzcGFuJCB8IGFzeW5jKSB8fCAwKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBzY29wZT1cInJvd1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInRhYmxlLmNvbmZpZz8uZm9vdGVyPy5oZWFkZXJzPy5bY2FsY3VsYXRpb25dIGFzIHNob3dIZWFkZXJcIlxuICAgICAgICAgICAgICAgID57e3Nob3dIZWFkZXIgPT09IHRydWUgPyAoY2FsY3VsYXRpb24gfCBjYXBpdGFsQ2FzZSk6IHRhYmxlLmNvbmZpZy5mb290ZXI/LmhlYWRlcnM/LltjYWxjdWxhdGlvbl19fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgIGxldCBjb2x1bW4gb2YgdGFibGUuY29uZmlnPy5jb2x1bW5zIHwga2V5dmFsdWU6IGNvbHVtbk9yZGVyXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAhY29sdW1uLnZhbHVlPy5oaWRkZW4gJiYgY2FsY3VsYXRpb25zLmNhbGN1bGF0ZWRbY29sdW1uLmtleV1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIG5nQ2xhc3M9XCJ7eyAoY29sdW1uLmtleSB8IGRhc2hDYXNlKSArICctY29sdW1uJyB9fSB7e1xuICAgICAgICAgICAgICAgICAgY29sdW1uLnZhbHVlLmNsYXNzXG4gICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtaGVhZGVyXT1cIlxuICAgICAgICAgICAgICAgICAgIWZvb3RlclJvdy5zaG93SGVhZGVyICYmIHRhYmxlLmNvbmZpZy5mb290ZXI/LmhlYWRlcnM/LltjYWxjdWxhdGlvbl1cbiAgICAgICAgICAgICAgICAgICAgPyB0YWJsZS5jb25maWcuZm9vdGVyPy5oZWFkZXJzPy5bY2FsY3VsYXRpb25dID09PSB0cnVlID8gKGNhbGN1bGF0aW9uIHwgY2FwaXRhbENhc2UpIDogdGFibGUuY29uZmlnLmZvb3Rlcj8uaGVhZGVycz8uW2NhbGN1bGF0aW9uXVxuICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICB0YWJsZS5jb25maWcubW9iaWxlTGF5b3V0ICYmIGNvbHVtbi52YWx1ZS5tb2JpbGVIZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4udmFsdWUubW9iaWxlSGVhZGVyICE9PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4udmFsdWUubW9iaWxlSGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgOiAoY29sdW1uLnZhbHVlLmhlYWRlciB8fCBjb2x1bW4ua2V5IHwgY2FwaXRhbENhc2UpXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmd0LW5vLWNvbnRlbnRdPVwiXG4gICAgICAgICAgICAgICAgICAhY2FsY3VsYXRpb25zLmNhbGN1bGF0ZWRbY29sdW1uLmtleV1bY2FsY3VsYXRpb25dXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIlxuICAgICAgICAgICAgICAgICAgICAodGFibGUuY29uZmlnLmNvbHVtbnMgfHwge30pW2NvbHVtbi5rZXldLnRlbXBsYXRlUmVmXG4gICAgICAgICAgICAgICAgICAgICAgPyB0ZW1wbGF0ZVJlZlxuICAgICAgICAgICAgICAgICAgICAgIDogKHRhYmxlLmNvbmZpZy5jb2x1bW5zIHx8IHt9KVtjb2x1bW4ua2V5XS50cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICAgICAgICA/IHRyYW5zZm9ybUZvb3RlclxuICAgICAgICAgICAgICAgICAgICAgIDogcmF3Rm9vdGVyXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNhbGN1bGF0aW9ucy5jYWxjdWxhdGVkW2NvbHVtbi5rZXldW2NhbGN1bGF0aW9uXSxcbiAgICAgICAgICAgICAgICAgICAgcm93OiBjYWxjdWxhdGlvbnMuY2FsY3VsYXRlZFtjb2x1bW4ua2V5XSxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBjYWxjdWxhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVSZWY6ICh0YWJsZS5jb25maWcuY29sdW1ucyB8fCB7fSlbY29sdW1uLmtleV1cbiAgICAgICAgICAgICAgICAgICAgICAudGVtcGxhdGVSZWYsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogKHRhYmxlLmNvbmZpZy5jb2x1bW5zIHx8IHt9KVtjb2x1bW4ua2V5XVxuICAgICAgICAgICAgICAgICAgICAgIC50cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdGZvb3Q+XG48L3RhYmxlPlxuPG5nLXRlbXBsYXRlICN0YWJsZUNvbnRlbnQ+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIodGFibGUkIHwgYXN5bmMpISBhcyB0YWJsZVwiPlxuICAgIDx0Ym9keSAqbmdJZj1cIih0YWJsZSEuZGF0YSFbMF0gfHwgdGFibGUhLmRhdGEhKS5sZW5ndGggPiAwOyBlbHNlIG5vRGF0YVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlLmNvbmZpZy5jb2x1bW5zXCI+XG4gICAgICAgIDx0clxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IHJvdyBvZiB0YWJsZSEuZGF0YSFbXG4gICAgICAgICAgICAgIHRhYmxlLmluZm8ubGF6eUxvYWRlZCA/IDAgOiAoY3VycmVudFBhZ2luYXRpb25JbmRleCQgfCBhc3luYykgfHwgMFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrUm93QnlGbjtcbiAgICAgICAgICAgIGxldCBpID0gaW5kZXhcbiAgICAgICAgICBcIlxuICAgICAgICAgIFthdHRyLmlkXT1cIid0YWJsZVJvd18nICsgaVwiXG4gICAgICAgICAgKGNsaWNrKT1cInRhYmxlPy5jb25maWc/LnJvd0NsaWNrICYmIF9yb3dDbGljayhyb3csIGksICRldmVudClcIlxuICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxuICAgICAgICAgICAgdGFibGU/LmNvbmZpZz8uYWN0aXZhdGVSb3dPbkhvdmVyICYmIF9hY3RpdmF0ZVJvdyhyb3csIGksICRldmVudClcbiAgICAgICAgICBcIlxuICAgICAgICAgIChtb3VzZWxlYXZlKT1cIlxuICAgICAgICAgICAgdGFibGU/LmNvbmZpZz8uYWN0aXZhdGVSb3dPbkhvdmVyICYmXG4gICAgICAgICAgICAgIF9hY3RpdmF0ZVJvdyhudWxsLCBudWxsLCAkZXZlbnQpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJbXG4gICAgICAgICAgICAhIWlzUm93U2VsZWN0ZWRGblxuICAgICAgICAgICAgICA/IChyb3dcbiAgICAgICAgICAgICAgICB8IHJvd1NlbGVjdGlvblxuICAgICAgICAgICAgICAgICAgOiBzZWxlY3Rpb25cbiAgICAgICAgICAgICAgICAgIDogaXNSb3dTZWxlY3RlZEZuXG4gICAgICAgICAgICAgICAgICA6IGN1c3RvbUNsYXNzZXMuc2VsZWN0ZWRSb3cpXG4gICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAocm93QWN0aXZlJCB8IGFzeW5jKT8uaW5kZXggPT09IGkgPyBjdXN0b21DbGFzc2VzLmFjdGl2ZVJvdyA6ICcnXG4gICAgICAgICAgXVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHRhYmxlLmNvbmZpZz8uY29sdW1ucyB8IGtleXZhbHVlOiBjb2x1bW5PcmRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWNvbHVtbi52YWx1ZT8uaGlkZGVuXCJcbiAgICAgICAgICAgICAgbmdDbGFzcz1cInt7IChjb2x1bW4ua2V5IHwgZGFzaENhc2UpICsgJy1jb2x1bW4nIH19IHt7XG4gICAgICAgICAgICAgICAgY29sdW1uLnZhbHVlLmNsYXNzXG4gICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgICB0YWJsZS5jb25maWcubW9iaWxlTGF5b3V0ICYmIGNvbHVtbi52YWx1ZS5tb2JpbGVIZWFkZXJcbiAgICAgICAgICAgICAgICAgID8gY29sdW1uLnZhbHVlLm1vYmlsZUhlYWRlciAhPT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi52YWx1ZS5tb2JpbGVIZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgOiAoY29sdW1uLnZhbHVlLmhlYWRlciB8fCBjb2x1bW4ua2V5IHwgY2FwaXRhbENhc2UpXG4gICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIlxuICAgICAgICAgICAgICAgICAgKHNlYXJjaEJ5JCB8IGFzeW5jKSAmJlxuICAgICAgICAgICAgICAgICAgISh0YWJsZS5jb25maWcuY29sdW1ucyB8fCB7fSlbY29sdW1uLmtleV0udGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICAgICAgPyBoaWdobGlnaHRlZFxuICAgICAgICAgICAgICAgICAgICA6ICh0YWJsZS5jb25maWcuY29sdW1ucyB8fCB7fSlbY29sdW1uLmtleV0udGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICAgICAgPyB0ZW1wbGF0ZVJlZlxuICAgICAgICAgICAgICAgICAgICA6ICh0YWJsZS5jb25maWcuY29sdW1ucyB8fCB7fSlbY29sdW1uLmtleV0udHJhbnNmb3JtXG4gICAgICAgICAgICAgICAgICAgID8gdHJhbnNmb3JtRGF0YVxuICAgICAgICAgICAgICAgICAgICA6IHJhd0RhdGFcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgc2VhcmNoOiAoc2VhcmNoQnkkIHwgYXN5bmMpLFxuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAodGFibGUuY29uZmlnLmNvbHVtbnMgfHwge30pW2NvbHVtbi5rZXldLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlUmVmOiAodGFibGUuY29uZmlnLmNvbHVtbnMgfHwge30pW2NvbHVtbi5rZXldXG4gICAgICAgICAgICAgICAgICAgIC50ZW1wbGF0ZVJlZixcbiAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgZGF0YTogdGFibGUuZGF0YVtcbiAgICAgICAgICAgICAgICAgICAgdGFibGUuaW5mby5sYXp5TG9hZGVkXG4gICAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgICAgOiAoY3VycmVudFBhZ2luYXRpb25JbmRleCQgfCBhc3luYykgfHwgMFxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFibGUuY29uZmlnLnJvd3NcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IHJvdyBvZiB0YWJsZT8uY29uZmlnPy5yb3dzIHwga2V5dmFsdWU6IGNvbHVtbk9yZGVyIHwgc2xpY2U6IDE7XG4gICAgICAgICAgICBsZXQgaSA9IGluZGV4XG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgKm5nSWY9XCIhcm93LnZhbHVlPy5oaWRkZW5cIlxuICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ3RhYmxlUm93XycgKyBpXCJcbiAgICAgICAgICAgIG5nQ2xhc3M9XCJ7eyAocm93LmtleSB8IGRhc2hDYXNlKSArICctcm93JyB9fVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidGFibGU/LmNvbmZpZz8ucm93Q2xpY2sgJiYgX3Jvd0NsaWNrKHJvdywgaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAobW91c2VlbnRlcik9XCJcbiAgICAgICAgICAgICAgdGFibGU/LmNvbmZpZz8uYWN0aXZhdGVSb3dPbkhvdmVyICYmIF9hY3RpdmF0ZVJvdyhyb3csIGksICRldmVudClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJcbiAgICAgICAgICAgICAgdGFibGU/LmNvbmZpZz8uYWN0aXZhdGVSb3dPbkhvdmVyICYmXG4gICAgICAgICAgICAgICAgX2FjdGl2YXRlUm93KG51bGwsIG51bGwsICRldmVudClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJbXG4gICAgICAgICAgICAgICEhaXNSb3dTZWxlY3RlZEZuXG4gICAgICAgICAgICAgICAgPyAocm93XG4gICAgICAgICAgICAgICAgICB8IHJvd1NlbGVjdGlvblxuICAgICAgICAgICAgICAgICAgICA6IHNlbGVjdGlvblxuICAgICAgICAgICAgICAgICAgICA6IGlzUm93U2VsZWN0ZWRGblxuICAgICAgICAgICAgICAgICAgICA6IGN1c3RvbUNsYXNzZXMuc2VsZWN0ZWRSb3cpXG4gICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgKHJvd0FjdGl2ZSQgfCBhc3luYyk/LmluZGV4ID09PSBpID8gY3VzdG9tQ2xhc3Nlcy5hY3RpdmVSb3cgOiAnJ1xuICAgICAgICAgICAgXVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwicm93LWhlYWRlclwiIHNjb3BlPVwicm93XCI+XG4gICAgICAgICAgICAgIHt7IHJvdy52YWx1ZS5oZWFkZXIgfHwgcm93LmtleSB8IGNhcGl0YWxDYXNlIH19XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgKHRhYmxlPy5kYXRhIHx8IFtdKVswXTsgbGV0IHkgPSBpbmRleFwiXG4gICAgICAgICAgICAgIG5nQ2xhc3M9XCJ7eyByb3cudmFsdWUuY2xhc3MgfX1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiXG4gICAgICAgICAgICAgICAgICAodGFibGUuY29uZmlnLnJvd3MgfHwge30pW3Jvdy5rZXldLnRlbXBsYXRlUmVmXG4gICAgICAgICAgICAgICAgICAgID8gdGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICAgICAgOiAodGFibGUuY29uZmlnLnJvd3MgfHwge30pW3Jvdy5rZXldLnRyYW5zZm9ybVxuICAgICAgICAgICAgICAgICAgICA/IHRyYW5zZm9ybURhdGFcbiAgICAgICAgICAgICAgICAgICAgOiByYXdEYXRhXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgcm93OiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICBjb2x1bW46IHJvdyxcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogKHRhYmxlLmNvbmZpZy5yb3dzIHx8IHt9KVtyb3cua2V5XS50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVJlZjogKHRhYmxlLmNvbmZpZy5yb3dzIHx8IHt9KVtyb3cua2V5XS50ZW1wbGF0ZVJlZixcbiAgICAgICAgICAgICAgICAgIGluZGV4OiB0YWJsZS5jb25maWcucm93cyA/IHkgOiBpLFxuICAgICAgICAgICAgICAgICAgZGF0YTogdGFibGUuZGF0YVtcbiAgICAgICAgICAgICAgICAgICAgdGFibGUuaW5mby5sYXp5TG9hZGVkXG4gICAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgICAgOiAoY3VycmVudFBhZ2luYXRpb25JbmRleCQgfCBhc3luYykgfHwgMFxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdGJvZHk+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbm9EYXRhPlxuICA8dGJvZHk+XG4gICAgPHRyPlxuICAgICAgPHRkIGNsYXNzPVwicC0wXCIgW2NvbFNwYW5dPVwiY29sc3BhbiQgfCBhc3luY1wiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIudGFibGUtbm8tZGF0YVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC90Ym9keT5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGVcbiAgI2hpZ2hsaWdodGVkXG4gIGxldC1yb3c9XCJyb3dcIlxuICBsZXQtY29sdW1uPVwiY29sdW1uXCJcbiAgbGV0LXNlYXJjaD1cInNlYXJjaFwiXG4gIGxldC10cmFuc2Zvcm09XCJ0cmFuc2Zvcm1cIlxuPlxuICA8ZGl2XG4gICAgKm5nSWY9XCIhdHJhbnNmb3JtXCJcbiAgICBbaW5uZXJIVE1MXT1cInJvd1tjb2x1bW4ua2V5XSB8IGhpZ2hsaWdodDogc2VhcmNoXCJcbiAgPjwvZGl2PlxuICA8ZGl2XG4gICAgKm5nSWY9XCJ0cmFuc2Zvcm1cIlxuICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICByb3dbY29sdW1uLmtleV1cbiAgICAgICAgfCBkeW5hbWljUGlwZTogdHJhbnNmb3JtLnBpcGU6dHJhbnNmb3JtPy5hcmdzXG4gICAgICAgIHwgaGlnaGxpZ2h0OiBzZWFyY2hcbiAgICBcIlxuICA+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNyYXdEYXRhIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIHt7IHJvd1tjb2x1bW4ua2V5XSB9fVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZVxuICAjdHJhbnNmb3JtRGF0YVxuICBsZXQtcm93PVwicm93XCJcbiAgbGV0LWNvbHVtbj1cImNvbHVtblwiXG4gIGxldC10cmFuc2Zvcm09XCJ0cmFuc2Zvcm1cIlxuICBsZXQtZGF0YT1cImRhdGFcIlxuPlxuICB7eyByb3dbY29sdW1uLmtleV0gfCBkeW5hbWljUGlwZTogdHJhbnNmb3JtLnBpcGU6dHJhbnNmb3JtPy5hcmdzIH19XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICN0cmFuc2Zvcm1Gb290ZXIgbGV0LXZhbHVlPVwidmFsdWVcIiBsZXQtdHJhbnNmb3JtPVwidHJhbnNmb3JtXCI+XG4gIHt7XG4gICAgKHZhbHVlIHwgZHluYW1pY1BpcGU6IHRyYW5zZm9ybS5waXBlOnRyYW5zZm9ybT8uYXJncykgfHxcbiAgICAgICh0YWJsZUNvbmZpZyQgfCBhc3luYyk/LmZvb3Rlcj8uZW1wdHlDb250ZW50XG4gIH19XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNyYXdGb290ZXIgbGV0LXZhbHVlPVwidmFsdWVcIj5cbiAge3sgdmFsdWUgfHwgKHRhYmxlQ29uZmlnJCB8IGFzeW5jKT8uZm9vdGVyPy5lbXB0eUNvbnRlbnQgfX1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGVcbiAgI3RlbXBsYXRlUmVmXG4gIGxldC1yb3c9XCJyb3dcIlxuICBsZXQtY29sdW1uPVwiY29sdW1uXCJcbiAgbGV0LWluZGV4PVwiaW5kZXhcIlxuICBsZXQtdGVtcGxhdGVSZWY9XCJ0ZW1wbGF0ZVJlZlwiXG4gIGxldC1kYXRhPVwiZGF0YVwiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVJlZlwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgIHJvdzogcm93LFxuICAgICAgY29sOiBjb2x1bW4sXG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBkYXRhOiBkYXRhXG4gICAgfVwiXG4gID48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
560
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixTQUFTLEVBQ1QsWUFBWSxFQUVaLEVBQUUsRUFDRixhQUFhLEVBQ2IsT0FBTyxHQUNSLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osT0FBTyxFQUNQLE9BQU8sRUFDUCxJQUFJLEVBQ0osZ0JBQWdCLEVBQ2hCLFNBQVMsR0FDVixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFFTCxvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLEdBQUcsRUFDSCxLQUFLLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLEVBQ0gsY0FBYyxHQUNmLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLGtCQUFrQixHQUNuQixNQUFNLHVCQUF1QixDQUFDO0FBVS9CLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUs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SztnQkFnQk8sYUFBYTtzQkFBekIsS0FBSztnQkFnQk8sZUFBZTtzQkFBM0IsS0FBSztnQkFnQkcsU0FBUztzQkFBakIsS0FBSztnQkFNRyxRQUFRO3NCQUFoQixLQUFLO2dCQU1HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBTU8sWUFBWTtzQkFBeEIsS0FBSztnQkFlRixNQUFNO3NCQURULEtBQUs7Z0JBTUYsTUFBTTtzQkFEVCxLQUFLO2dCQVFGLElBQUk7c0JBRFAsS0FBSztnQkFPTyxTQUFTO3NCQUFyQixLQUFLO2dCQU9JLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQVdHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFFRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFRyYWNrQnlGdW5jdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZyb21FdmVudCxcbiAgaXNPYnNlcnZhYmxlLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgUmVwbGF5U3ViamVjdCxcbiAgU3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQXN5bmNQaXBlLFxuICBLZXlWYWx1ZSxcbiAgS2V5VmFsdWVQaXBlLFxuICBOZ0NsYXNzLFxuICBOZ0Zvck9mLFxuICBOZ0lmLFxuICBOZ1RlbXBsYXRlT3V0bGV0LFxuICBTbGljZVBpcGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgcGx1Y2ssXG4gIHNoYXJlUmVwbGF5LFxuICBzdGFydFdpdGgsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFrZVVudGlsLFxuICB0YXAsXG4gIHdpdGhMYXRlc3RGcm9tLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLWNvbHVtbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgY2FsY3VsYXRlLFxuICBjaHVuayxcbiAgc2VhcmNoLFxuICBzb3J0T25NdWx0aXBsZUtleXMsXG59IGZyb20gJy4vdXRpbGl0aWVzL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBUYWJsZVJvdyB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLXJvdy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR3RPcmRlciwgR3RTb3J0T3JkZXIgfSBmcm9tICcuL21vZGVscy90YWJsZS1zb3J0LmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBHdFBhZ2VDaGFuZ2VFdmVudCxcbiAgR3RSb3dTZWxlY3RFdmVudCxcbiAgR3RSb3dDbGlja0V2ZW50LFxuICBHdFJvd0FjdGl2ZUV2ZW50LFxuICBHdFNvcnRFdmVudCxcbn0gZnJvbSAnLi9tb2RlbHMvdGFibGUtZXZlbnRzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDYXBpdGFsQ2FzZVBpcGUgfSBmcm9tICcuL3BpcGVzL2NhcGl0YWwtY2FzZS5waXBlJztcbmltcG9ydCB7IFNvcnRDbGFzc1BpcGUgfSBmcm9tICcuL3BpcGVzL3NvcnQtY2xhc3MucGlwZSc7XG5pbXBvcnQgeyBEYXNoQ2FzZVBpcGUgfSBmcm9tICcuL3BpcGVzL2Rhc2gtY2FzZS5waXBlJztcbmltcG9ydCB7IER5bmFtaWNQaXBlIH0gZnJvbSAnLi9waXBlcy9keW5hbWljLnBpcGUnO1xuaW1wb3J0IHsgSGlnaGxpZ2h0UGlwZSB9IGZyb20gJy4vcGlwZXMvaGlnaGxpZ2h0LnBpcGUnO1xuaW1wb3J0IHsgUm93U2VsZWN0aW9uUGlwZSB9IGZyb20gJy4vcGlwZXMvcm93LXNlbGVjdGlvbi5waXBlJztcbmltcG9ydCB7IEd0UGFnaW5hdGlvbkluZm8gfSBmcm9tICcuL21vZGVscy9ndC1wYWdpbmF0aW9uJztcbmltcG9ydCB7IFRhYmxlSW5mbyB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLWluZm8uaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYW5ndWxhci1nZW5lcmljLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENhcGl0YWxDYXNlUGlwZSxcbiAgICBLZXlWYWx1ZVBpcGUsXG4gICAgU29ydENsYXNzUGlwZSxcbiAgICBEYXNoQ2FzZVBpcGUsXG4gICAgUm93U2VsZWN0aW9uUGlwZSxcbiAgICBBc3luY1BpcGUsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBTbGljZVBpcGUsXG4gICAgRHluYW1pY1BpcGUsXG4gICAgSGlnaGxpZ2h0UGlwZSxcbiAgICBOZ0NsYXNzLFxuICAgIE5nSWYsXG4gICAgTmdGb3JPZixcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29yZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0KCk7XG4gIGdldCBuYXZpZ2F0aW9uS2V5cygpOiB0eXBlb2YgdGhpcy5fbmF2aWdhdGlvbktleXMge1xuICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uS2V5cztcbiAgfVxuXG4gIC8qKiBuYXZpZ2F0aW9uS2V5c1xuICAgKiBAZGVzY3JpcHRpb24gQW4gYXJyYXkgb2Yga2V5Ym9hcmQga2V5cyB0aGF0IHdpbGwgdHJpZ2dlciBuYXZpZ2F0aW9uIGFuZCBhY3RpdmUgcm93LCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBhcnJvdyBrZXlzLCBob21lIGFuZCBlbmQgKG9taXQga2V5IG5hbWUgZnJvbSBhcnJheSB0byBkaXNhYmxlIGl0KVxuICAgKiBAdHlwZSB7c3RyaW5nW119XG4gICAqIEBkZWZhdWx0IFsnQXJyb3dEb3duJywgJ0Fycm93VXAnLCAnQXJyb3dMZWZ0JywgJ0Fycm93UmlnaHQnLCAnSG9tZScsICdFbmQnXVxuICAgKi9cbiAgQElucHV0KCkgc2V0IG5hdmlnYXRpb25LZXlzKHZhbHVlOiB0eXBlb2YgdGhpcy5fbmF2aWdhdGlvbktleXMpIHtcbiAgICB0aGlzLl9uYXZpZ2F0aW9uS2V5cyA9IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfbmF2aWdhdGlvbktleXMgPSBbXG4gICAgJ0Fycm93RG93bicsXG4gICAgJ0Fycm93VXAnLFxuICAgICdBcnJvd0xlZnQnLFxuICAgICdBcnJvd1JpZ2h0JyxcbiAgICAnSG9tZScsXG4gICAgJ0VuZCcsXG4gIF07XG4gIGdldCBzZWxlY3RLZXlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0S2V5cztcbiAgfVxuXG4gIC8qKiBzZWxlY3RLZXlzXG4gICAqIEBkZXNjcmlwdGlvbiBBbiBhcnJheSBvZiBrZXlib2FyZCBrZXlzIHRoYXQgd2lsbCB0cmlnZ2VyIHJvdyBzZWxlY3Rpb24gKG9taXQga2V5IG5hbWUgZnJvbSBhcnJheSB0byBkaXNhYmxlIGl0KVxuICAgKiBAdHlwZSB7c3RyaW5nW119XG4gICAqIEBkZWZhdWx0IFsnRW50ZXInLCAnICddXG4gICAqL1xuICBASW5wdXQoKSBzZXQgc2VsZWN0S2V5cyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9zZWxlY3RLZXlzID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RLZXlzID0gWydFbnRlcicsICcgJ107XG4gIGdldCBzb3J0T3JkZXIkKCk6IE9ic2VydmFibGU8R3RTb3J0T3JkZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fc29ydE9yZGVyJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBsb2FkaW5nKGlzTG9hZGluZzogT2JzZXJ2YWJsZTxib29sZWFuPiB8IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9sb2FkaW5nJC5uZXh0KGlzTG9hZGluZyk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHBhZ2luYXRpb25JbmRleChwYWdlSW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuX2N1cnJlbnRQYWdpbmF0aW9uSW5kZXgkLm5leHQocGFnZUluZGV4KTtcbiAgfVxuXG4gIGdldCBwYWdpbmF0aW9uSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFBhZ2luYXRpb25JbmRleCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBwYWdpbmdJbmZvKHZhbHVlOiBHdFBhZ2luYXRpb25JbmZvIHwgbnVsbCkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fcGFnaW5nSW5mbyQubmV4dCh2YWx1ZSk7XG4gICAgICBpZiAoXG4gICAgICAgIHZhbHVlLnBhZ2VDdXJyZW50ICE9PSB0aGlzLl9jdXJyZW50UGFnaW5hdGlvbkluZGV4JC5nZXRWYWx1ZSgpICsgMSAmJlxuICAgICAgICB2YWx1ZS5wYWdlQ3VycmVudCAhPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbkluZGV4ID0gdmFsdWUucGFnZUN1cnJlbnQgLSAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBjdXN0b21DbGFzc2VzXG4gICAqIEBkZXNjcmlwdGlvbiBBbiBvYmplY3QgdGhhdCBjb250YWlucyBjdXN0b20gY2xhc3NlcyBmb3IgdmFyaW91cyBlbGVtZW50cyBpbiB0aGUgdGFibGUuXG4gICAqIEB0eXBlIHtvYmplY3R9IC0geyBzZWxlY3RlZFJvdzogc3RyaW5nLCBhY3RpdmVSb3c6IHN0cmluZyB9IC0gZGVmYXVsdCBjbGFzc2VzIGFyZSAnZ3Qtc2VsZWN0ZWQnIGFuZCAnZ3QtYWN0aXZlJ1xuICAgKi9cbiAgQElucHV0KCkgc2V0IGN1c3RvbUNsYXNzZXMoY2xhc3NlczogUGFydGlhbDx0eXBlb2YgdGhpcy5fY3VzdG9tQ2xhc3Nlcz4pIHtcbiAgICB0aGlzLl9jdXN0b21DbGFzc2VzID0geyAuLi50aGlzLl9jdXN0b21DbGFzc2VzLCAuLi5jbGFzc2VzIH07XG4gIH1cblxuICBnZXQgY3VzdG9tQ2xhc3NlcygpOiB0eXBlb2YgdGhpcy5fY3VzdG9tQ2xhc3NlcyB7XG4gICAgcmV0dXJuIHRoaXMuX2N1c3RvbUNsYXNzZXM7XG4gIH1cblxuICBwcml2YXRlIF9jdXN0b21DbGFzc2VzID0ge1xuICAgIHNlbGVjdGVkUm93OiAnZ3Qtc2VsZWN0ZWQnLFxuICAgIGFjdGl2ZVJvdzogJ2d0LWFjdGl2ZScsXG4gIH07XG5cbiAgLyoqIGlzUm93U2VsZWN0ZWRGblxuICAgKiBAZGVzY3JpcHRpb24gRnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIHJvdyBpcyBzZWxlY3RlZCBvciBub3QuXG4gICAqIEB0eXBlIHtmbn0gQSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGEgcm93IG9iamVjdCBhbmQgb3B0aW9uYWwgc3RhdGUgZm9yIGN1cnJlbnQgc2VsZWN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHJvdyBzaG91bGQgYmUgbWFya2VkIGFzIHNlbGVjdGVkIG9yIG5vdC4gKi9cbiAgQElucHV0KCkgc2V0IGlzUm93U2VsZWN0ZWRGbihcbiAgICBmbjogKHJvdzogVGFibGVSb3cgfCBhbnksIHNlbGVjdGlvbj86IGFueSkgPT4gYm9vbGVhblxuICApIHtcbiAgICB0aGlzLl9pc1Jvd1NlbGVjdGVkRm4gPSBmbjtcbiAgfVxuXG4gIGdldCBpc1Jvd1NlbGVjdGVkRm4oKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5faXNSb3dTZWxlY3RlZEZuO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNSb3dTZWxlY3RlZEZuOiBhbnk7XG5cbiAgLyoqIHNlbGVjdGlvblxuICAgKiBAZGVzY3JpcHRpb24gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCByb3cocykgaW4gdGhlIHRhYmxlLiBJdCdzIHBhc3NlZCB0byB0aGUgc2VsZWN0aW9uIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGljaCByb3dzIHNob3VsZCBiZSBzZWxlY3RlZC5cbiAgICogQHR5cGUge2FueX1cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGlvbjogYW55ID0ge307XG5cbiAgLyoqIHJvd0lkS2V5XG4gICAqIEBkZXNjcmlwdGlvbiByb3cga2V5IHRvIHVzZSBhcyB1bmlxdWUgaWQgZm9yIHRhYmxlIHJvdy4gSWYgcGFzc2VkLCB0YWJsZSB3b24ndCBnZW5lcmF0ZSB1bmlxdWUgaWRzIGZvciBlYWNoIHJvdyBidXQgaW5zdGVhZCB1c2Uga2V5IHRvIHJldHJpZXZlIHVuaXF1ZSBpZCBmcm9tIHJvdy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIEBJbnB1dCgpIHJvd0lkS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIGdlbmVyYXRlUm93SWRcbiAgICogQGRlc2NyaXB0aW9uIFdoZXRoZXIgb3Igbm90IHRvIGdlbmVyYXRlIGEgdW5pcXVlIGlkIGZvciBlYWNoIHJvdyBpbiB0aGUgdGFibGUuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBASW5wdXQoKSBnZW5lcmF0ZVJvd0lkOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKiogdHJhY2tSb3dCeUZuXG4gICAqIEBkZXNjcmlwdGlvbiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBlYWNoIHJvdyBpbiB0aGUgdGFibGUgdG8gb3B0aW1pemUgcmVuZGVyaW5nIHdoZW4gZGF0YSBpcyBhZGRlZCBvciByZW1vdmVkLlxuICAgKiBAdHlwZSBmbiAtIFRyYWNrQnlGdW5jdGlvbiB0byByZXRyaWV2ZSB1bmlxdWUgaWQgYmFzZWQgb24gaW5kZXggYW5kL29yIHJvdy4gRGVmYXVsdHMgdG8gdXNpbmcgYHJvd1t0aGlzLnJvd0lkS2V5XWAuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgdHJhY2tSb3dCeUZuKGZuOiBUcmFja0J5RnVuY3Rpb248VGFibGVSb3c+KSB7XG4gICAgdGhpcy5fdHJhY2tSb3dCeUZuID0gZm47XG4gIH1cbiAgZ2V0IHRyYWNrUm93QnlGbigpOiBUcmFja0J5RnVuY3Rpb248VGFibGVSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5fdHJhY2tSb3dCeUZuO1xuICB9XG5cbiAgcHJpdmF0ZSBfdHJhY2tSb3dCeUZuKFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgcm93OiBUYWJsZVJvd1xuICApOiBUcmFja0J5RnVuY3Rpb248VGFibGVSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5yb3dJZEtleSA/IHJvd1t0aGlzLnJvd0lkS2V5XSA6IHJvdz8uX2lkO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHNlYXJjaChzdHJpbmc6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4gfCBzdHJpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5fc2VhcmNoQnkkLm5leHQoc3RyaW5nKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBjb25maWcoY29uZmlnOiBPYnNlcnZhYmxlPFRhYmxlQ29uZmlnPGFueT4+IHwgVGFibGVDb25maWc8YW55Pikge1xuICAgIHRoaXMuX3RhYmxlQ29uZmlnJC5uZXh0KGNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIF90YWJsZUNvbmZpZzogVGFibGVDb25maWc8YW55PiB8IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKVxuICBzZXQgZGF0YShkYXRhOiBPYnNlcnZhYmxlPEFycmF5PFRhYmxlUm93Pj4gfCBBcnJheTxUYWJsZVJvdz4gfCBudWxsKSB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMuX2RhdGEkLm5leHQoZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCkgc2V0IHNvcnRPcmRlcihzb3J0Q29uZmlnOiBHdFNvcnRPcmRlcjxUYWJsZVJvdz4gfCBhbnkpIHtcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkoc29ydENvbmZpZykgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuX3NvcnRPcmRlciQudmFsdWUpKSB7XG4gICAgICB0aGlzLnNvcnRPcmRlckNoYW5nZS5lbWl0KHNvcnRDb25maWcpO1xuICAgICAgdGhpcy5fc29ydE9yZGVyJC5uZXh0KHNvcnRDb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKSByb3dDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8R3RSb3dDbGlja0V2ZW50PigpO1xuICBAT3V0cHV0KCkgcm93U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxHdFJvd1NlbGVjdEV2ZW50PigpO1xuICBAT3V0cHV0KCkgc29ydE9yZGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHdFNvcnRPcmRlcjxUYWJsZVJvdz4+KCk7XG5cbiAgX3Jvd0NsaWNrKHJvdzogVGFibGVSb3csIGluZGV4OiBudW1iZXIsIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5yb3dDbGljay5lbWl0KHsgcm93LCBpbmRleCwgZXZlbnQgfSk7XG4gIH1cblxuICBfcm93QWN0aXZlKHJvdzogVGFibGVSb3csIGluZGV4OiBudW1iZXIsIGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5yb3dTZWxlY3QuZW1pdCh7IHJvdywgaW5kZXgsIGV2ZW50IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcm93QWN0aXZlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PEd0Um93QWN0aXZlRXZlbnQ+KDEpO1xuICBAT3V0cHV0KCkgcm93QWN0aXZlID0gbmV3IEV2ZW50RW1pdHRlcjxHdFJvd0FjdGl2ZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgY29sdW1uU29ydCA9IG5ldyBFdmVudEVtaXR0ZXI8R3RTb3J0RXZlbnQ+KCk7XG4gIC8qKiBwYWdlIGNoYW5nZSBldmVudCAtIGVtaXR0ZWQgd2hlbiBjdXJyZW50IHBhZ2UvaW5kZXggY2hhbmdlcyBmb3IgcGFnaW5hdGlvbiAqL1xuICBAT3V0cHV0KCkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R3RQYWdlQ2hhbmdlRXZlbnQ+KCk7XG4gIHJvd0FjdGl2ZSQgPSB0aGlzLl9yb3dBY3RpdmUkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIHEpID0+IHtcbiAgICAgIGlmICh0aGlzLnJvd0lkS2V5ICYmIHAucm93ICYmIHEucm93KSB7XG4gICAgICAgIHJldHVybiBwLnJvd1t0aGlzLnJvd0lkS2V5XSA9PT0gcS5yb3dbdGhpcy5yb3dJZEtleV07XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZ2VuZXJhdGVSb3dJZCAmJiBwLnJvdyAmJiBxLnJvdykge1xuICAgICAgICByZXR1cm4gcC5yb3cuX2lkID09PSBxLnJvdy5faWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcC5pbmRleCA9PT0gcS5pbmRleDtcbiAgICAgIH1cbiAgICB9KSxcbiAgICB0YXAoKGV2ZW50KSA9PiAodGhpcy5hY3RpdmVSb3dJbmRleCA9IGV2ZW50LmluZGV4KSksXG4gICAgdGFwKChldmVudCkgPT4gdGhpcy5yb3dBY3RpdmUuZW1pdChldmVudCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgYWN0aXZlUm93SW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBhY3RpdmF0ZVJvdyhpZDogc3RyaW5nLCBldmVudD86IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZDtcbiAgYWN0aXZhdGVSb3coaW5kZXg6IG51bWJlciwgZXZlbnQ/OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudCk6IHZvaWQ7XG4gIGFjdGl2YXRlUm93KG5vbmU6IG51bGwsIGV2ZW50PzogTW91c2VFdmVudCB8IEtleWJvYXJkRXZlbnQpOiB2b2lkO1xuICBhY3RpdmF0ZVJvdyhcbiAgICBhcmc6IHN0cmluZyB8IG51bWJlciB8IG51bGwsXG4gICAgZXZlbnQ/OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudFxuICApOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMudGFibGUkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHBsdWNrKCdkYXRhJyksXG4gICAgICAgICAgbWFwKChkYXRhKSA9PiBkYXRhW3RoaXMucGFnaW5hdGlvbkluZGV4XVthcmddKSxcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyb3cpID0+IHRoaXMuX2FjdGl2YXRlUm93KHJvdywgYXJnLCBldmVudCkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFRPRE86IGltcGxlbWVudCBob3ZlciBieSBpZFxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9hY3RpdmF0ZVJvdyhudWxsLCBudWxsKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIF9hY3RpdmF0ZVJvdyhcbiAgICByb3c6IFRhYmxlUm93IHwgbnVsbCxcbiAgICBpbmRleDogbnVtYmVyIHwgbnVsbCxcbiAgICBldmVudD86IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50XG4gICk6IHZvaWQge1xuICAgIHRoaXMuX3Jvd0FjdGl2ZSQubmV4dCh7IHJvdywgaW5kZXgsIGV2ZW50IH0pO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9sb2FkaW5nJC5waXBlKFxuICAgICAgc3RhcnRXaXRoKGZhbHNlKSxcbiAgICAgIG1hcCgodmFsdWUpID0+IChpc09ic2VydmFibGUodmFsdWUpID8gdmFsdWUgOiBvZih2YWx1ZSkpKSxcbiAgICAgIHN3aXRjaE1hcCgob2JzKSA9PiBvYnMpLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZGluZyQ6IFJlcGxheVN1YmplY3Q8T2JzZXJ2YWJsZTxib29sZWFuPiB8IGJvb2xlYW4+ID1cbiAgICBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgcHJpdmF0ZSBfc29ydE9yZGVyJDogQmVoYXZpb3JTdWJqZWN0PEd0U29ydE9yZGVyPiA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxHdFNvcnRPcmRlcj4oW10pO1xuICBwcml2YXRlIF9zZWFyY2hCeSQ6IFJlcGxheVN1YmplY3Q8T2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB8IHN0cmluZyB8IG51bGw+ID1cbiAgICBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgc2VhcmNoQnkkOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+ID0gdGhpcy5fc2VhcmNoQnkkLnBpcGUoXG4gICAgc3RhcnRXaXRoKCcnKSxcbiAgICBtYXAoKHZhbHVlKSA9PiAoaXNPYnNlcnZhYmxlKHZhbHVlKSA/IHZhbHVlIDogb2YodmFsdWUpKSksXG4gICAgc3dpdGNoTWFwKChvYnMpID0+IG9icyksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBwcml2YXRlIF9wYWdpbmdJbmZvJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8R3RQYWdpbmF0aW9uSW5mbz4oe1xuICAgIHBhZ2VDdXJyZW50OiBudWxsLFxuICAgIHBhZ2VOZXh0OiBudWxsLFxuICAgIHBhZ2VQcmV2aW91czogbnVsbCxcbiAgICBwYWdlU2l6ZTogbnVsbCxcbiAgICBudW1iZXJPZlJlY29yZHM6IG51bGwsXG4gICAgLy9yZWNvcmRzQWZ0ZXJGaWx0ZXI6IG51bGwsXG4gICAgLy9yZWNvcmRzQWZ0ZXJTZWFyY2g6IG51bGwsXG4gICAgLy9yZWNvcmRzQWxsOiBudWxsLFxuICB9KTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICBwcml2YXRlIF90YWJsZUNvbmZpZyQ6IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUYWJsZUNvbmZpZzxhbnk+IHwgT2JzZXJ2YWJsZTxUYWJsZUNvbmZpZzxhbnk+PlxuICA+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh7fSk7XG4gIHRhYmxlQ29uZmlnJCA9IHRoaXMuX3RhYmxlQ29uZmlnJC5waXBlKFxuICAgIG1hcCgodmFsdWUpID0+IChpc09ic2VydmFibGUodmFsdWUpID8gdmFsdWUgOiBvZih2YWx1ZSkpKSxcbiAgICBzd2l0Y2hNYXAoKG9icykgPT4gb2JzKSxcbiAgICB0YXAoKGNvbmZpZykgPT4gKHRoaXMuX3RhYmxlQ29uZmlnID0gY29uZmlnKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBwcml2YXRlIF9kYXRhJDogUmVwbGF5U3ViamVjdDxBcnJheTxUYWJsZVJvdz4gfCBPYnNlcnZhYmxlPEFycmF5PFRhYmxlUm93Pj4+ID1cbiAgICBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgZGF0YSQ6IE9ic2VydmFibGU8QXJyYXk8VGFibGVSb3c+PiA9IHRoaXMuX2RhdGEkLnBpcGUoXG4gICAgbWFwKCh2YWx1ZSkgPT4gKGlzT2JzZXJ2YWJsZSh2YWx1ZSkgPyB2YWx1ZSA6IG9mKHZhbHVlKSkpLFxuICAgIHN3aXRjaE1hcCgob2JzKSA9PiBjb21iaW5lTGF0ZXN0KFtvYnNdKSksXG4gICAgd2l0aExhdGVzdEZyb20odGhpcy50YWJsZUNvbmZpZyQpLFxuICAgIG1hcCgoW1tkYXRhXSwgY29uZmlnXSkgPT4ge1xuICAgICAgLy8gaWYgY29sdW1ucyBvciByb3dzIGNvbnRhaW5zIGNvbmZpZyBmb3IgbWFwVG8uLi5cbiAgICAgIGlmIChcbiAgICAgICAgKGNvbmZpZy5jb2x1bW5zICYmXG4gICAgICAgICAgISFPYmplY3QudmFsdWVzKGNvbmZpZy5jb2x1bW5zKS5maW5kKChjb2x1bW4pID0+ICEhY29sdW1uLm1hcFRvKSkgfHxcbiAgICAgICAgKGNvbmZpZy5yb3dzICYmXG4gICAgICAgICAgISFPYmplY3QudmFsdWVzKGNvbmZpZy5yb3dzKS5maW5kKChjb2x1bW4pID0+ICEhY29sdW1uLm1hcFRvKSlcbiAgICAgICkge1xuICAgICAgICAvLyAuLi5tYXAgZGF0YSB0byBuZXcga2V5cyBvbiByb3cuLi5cbiAgICAgICAgY29uc3QgbmV3RGF0YTogVGFibGVSb3dbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCByb3cgPSBkYXRhW2ldO1xuICAgICAgICAgIGNvbnN0IG5ld0tleXMgPSBPYmplY3QuZW50cmllcyhjb25maWcuY29sdW1ucyB8fCBjb25maWcucm93cyB8fCBbXSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4gISF2YWx1ZS5tYXBUbykgLy8gYWRkIGtleXMgZm9yIGNvbHVtbnMgd2l0aCBtYXBUbyBjb25maWcuLi5cbiAgICAgICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgICAgIChwcmV2aW91c1ZhbHVlLCBba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICAgICAgICAgICAgLi4ucHJldmlvdXNWYWx1ZSxcbiAgICAgICAgICAgICAgICBba2V5XTogdGhpcy5uZXN0ZWRWYWx1ZShcbiAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgIHZhbHVlLm1hcFRvIS5wYXRoLFxuICAgICAgICAgICAgICAgICAgdmFsdWUubWFwVG8/Lm1pc3NpbmdWYWx1ZVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBuZXdEYXRhW2ldID0geyAuLi5yb3csIC4uLm5ld0tleXMgfTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhID0gbmV3RGF0YTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmdlbmVyYXRlUm93SWQgJiYgIXRoaXMucm93SWRLZXkgJiYgZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGRhdGFXaXRoSWQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZGF0YVdpdGhJZFtpXSA9IHsgLi4uZGF0YVtpXSwgX2lkOiBpIH07XG4gICAgICAgIH1cbiAgICAgICAgZGF0YSA9IGRhdGFXaXRoSWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBkYXRhLCBjb25maWcgfTtcbiAgICB9KSxcbiAgICBzd2l0Y2hNYXAoKG9icykgPT5cbiAgICAgIGNvbWJpbmVMYXRlc3QoW29mKG9icyksIHRoaXMuc29ydE9yZGVyJCwgdGhpcy5zZWFyY2hCeSRdKVxuICAgICksXG4gICAgbWFwKChbdGFibGUsIHNvcnRCeSwgc2VhcmNoQnldKSA9PiB7XG4gICAgICAvLyBjcmVhdGUgYSBuZXcgYXJyYXkgcmVmZXJlbmNlIGFuZCBzb3J0IG5ldyBhcnJheSAocHJldmVudCBtdXRhdGluZyBleGlzdGluZyBzdGF0ZSlcbiAgICAgIHRhYmxlLmRhdGEgPSBbLi4udGFibGUuZGF0YV07XG4gICAgICByZXR1cm4gIXNvcnRCeT8ubGVuZ3RoIHx8IHRhYmxlLmNvbmZpZz8uZGlzYWJsZVRhYmxlU29ydFxuICAgICAgICA/IHNlYXJjaEJ5ICYmICF0aGlzLnRhYmxlSW5mbz8ubGF6eUxvYWRlZFxuICAgICAgICAgID8gc2VhcmNoKHNlYXJjaEJ5LCBmYWxzZSwgdGFibGUuZGF0YSwgdGFibGUuY29uZmlnKVxuICAgICAgICAgIDogdGFibGUuZGF0YVxuICAgICAgICA6IHNlYXJjaEJ5ICYmICF0aGlzLnRhYmxlSW5mbz8ubGF6eUxvYWRlZFxuICAgICAgICA/IHNlYXJjaChzZWFyY2hCeSwgZmFsc2UsIHRhYmxlLmRhdGEsIHRhYmxlLmNvbmZpZyk/LnNvcnQoXG4gICAgICAgICAgICBzb3J0T25NdWx0aXBsZUtleXMoc29ydEJ5KVxuICAgICAgICAgIClcbiAgICAgICAgOiB0YWJsZS5kYXRhPy5zb3J0KHNvcnRPbk11bHRpcGxlS2V5cyhzb3J0QnkpKTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIGNhbGN1bGF0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmRhdGEkLCB0aGlzLnRhYmxlQ29uZmlnJF0pLnBpcGUoXG4gICAgbWFwKChbZGF0YSwgY29uZmlnXSkgPT4gY2FsY3VsYXRlKGRhdGEsIGNvbmZpZykpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgdGFibGUkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kYXRhJCxcbiAgICB0aGlzLnRhYmxlQ29uZmlnJCxcbiAgICB0aGlzLl9wYWdpbmdJbmZvJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtzb3J0ZWQsIGNvbmZpZywgcGFnaW5nSW5mb10pID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgcGFnaW5nSW5mby5wYWdlQ3VycmVudCAhPT0gbnVsbCAmJlxuICAgICAgICBwYWdpbmdJbmZvLm51bWJlck9mUmVjb3JkcyAhPT0gbnVsbCAmJlxuICAgICAgICBwYWdpbmdJbmZvLnBhZ2VTaXplICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiBbc29ydGVkXSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgaW5mbzogPFRhYmxlSW5mbz57XG4gICAgICAgICAgICBsYXp5TG9hZGVkOiB0cnVlLFxuICAgICAgICAgICAgbnVtYmVyT2ZSZWNvcmRzOiBwYWdpbmdJbmZvLm51bWJlck9mUmVjb3JkcyxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBwYWdpbmdJbmZvLnBhZ2VTaXplLFxuICAgICAgICAgICAgcGFnZVRvdGFsOlxuICAgICAgICAgICAgICBwYWdpbmdJbmZvLnBhZ2VUb3RhbCA/P1xuICAgICAgICAgICAgICBNYXRoLmNlaWwocGFnaW5nSW5mby5udW1iZXJPZlJlY29yZHMgLyBwYWdpbmdJbmZvLnBhZ2VTaXplKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgLy8gaWYgcGFnaW5hdGlvbiBpcyBkaXNhYmxlZC4uLlxuICAgICAgaWYgKCFjb25maWcucGFnaW5hdGlvbiB8fCBjb25maWcucGFnaW5hdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gLi4ucmV0dXJuIHVuYWx0ZXJlZCBhcnJheVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IFtzb3J0ZWRdLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBpbmZvOiA8VGFibGVJbmZvPnsgbnVtYmVyT2ZSZWNvcmRzOiBzb3J0ZWQubGVuZ3RoLCBwYWdlVG90YWw6IDEgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiByZWNvcmQgc2V0XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBjaHVuayhzb3J0ZWQsICsoY29uZmlnLnBhZ2luYXRpb24ubGVuZ3RoIHx8IDApKSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBpbmZvOiA8VGFibGVJbmZvPntcbiAgICAgICAgICBudW1iZXJPZlJlY29yZHM6IHNvcnRlZC5sZW5ndGgsXG4gICAgICAgICAgcGFnZVNpemU6ICsoY29uZmlnLnBhZ2luYXRpb24ubGVuZ3RoIHx8IDApLFxuICAgICAgICAgIHBhZ2VUb3RhbDogTWF0aC5jZWlsKFxuICAgICAgICAgICAgc29ydGVkLmxlbmd0aCAvICsoY29uZmlnLnBhZ2luYXRpb24ubGVuZ3RoIHx8IDApXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSksXG4gICAgdGFwKChtZXRhKSA9PiB0aGlzLl90YWJsZUluZm8kLm5leHQobWV0YS5pbmZvKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICAvKiogdGFibGVJbmZvJCAtIHJldHVybnMgb2JzZXJ2YWJsZSBmb3IgdGFibGUgaW5mb1xuICAgKiBAcmV0dXJuIE9ic2VydmFibGU8VGFibGVJbmZvPiAqL1xuICBnZXQgdGFibGVJbmZvJCgpOiBPYnNlcnZhYmxlPFRhYmxlSW5mbyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLl90YWJsZUluZm8kLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICBmaWx0ZXIoKGluZm8pID0+ICEhaW5mbyksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cblxuICAvKiogdGFibGVJbmZvIC0gcmV0dXJucyB0aGUgY3VycmVudCB0YWJsZSBpbmZvXG4gICAqIEByZXR1cm4gVGFibGVJbmZvICovXG4gIGdldCB0YWJsZUluZm8oKTogVGFibGVJbmZvIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVJbmZvJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdGFibGVJbmZvJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVJbmZvIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgX2N1cnJlbnRQYWdpbmF0aW9uSW5kZXgkID0gbmV3IEJlaGF2aW9yU3ViamVjdCgwKTtcbiAgY3VycmVudFBhZ2luYXRpb25JbmRleCQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLl9jdXJyZW50UGFnaW5hdGlvbkluZGV4JCxcbiAgICB0aGlzLnRhYmxlJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtwYWdlLCB0YWJsZV0pID0+IHtcbiAgICAgIC8vIGRldGVybWluZSBsYXN0IHBhZ2VcbiAgICAgIGNvbnN0IGxhc3RQYWdlID1cbiAgICAgICAgTWF0aC5jZWlsKFxuICAgICAgICAgIHRhYmxlLmluZm8ubnVtYmVyT2ZSZWNvcmRzIC9cbiAgICAgICAgICAgICh0YWJsZS5pbmZvLnBhZ2VTaXplID8/XG4gICAgICAgICAgICAgICh0YWJsZS5jb25maWc/LnBhZ2luYXRpb24/Lmxlbmd0aCB8fCB0YWJsZS5pbmZvLm51bWJlck9mUmVjb3JkcykpXG4gICAgICAgICkgLSAxO1xuICAgICAgLy8gZGV0ZXJtaW5lIG1pbi9tYXggcG9zaXRpb25cbiAgICAgIHJldHVybiArcGFnZSA8IDAgPyAwIDogK3BhZ2UgPiBsYXN0UGFnZSA/IGxhc3RQYWdlIDogK3BhZ2U7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICB0YXAoKGluZGV4KSA9PiB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7IGluZGV4IH0pKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIGNvbHNwYW4kID0gdGhpcy50YWJsZUNvbmZpZyQucGlwZShcbiAgICBzd2l0Y2hNYXAoKGNvbmZpZykgPT5cbiAgICAgIGNvbmZpZy5jb2x1bW5zXG4gICAgICAgID8gb2YoXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKGNvbmZpZy5jb2x1bW5zIHx8IGNvbmZpZy5yb3dzIHx8IHt9KS5maWx0ZXIoXG4gICAgICAgICAgICAgICh2YWx1ZSkgPT4gdmFsdWUuaGlkZGVuICE9PSB0cnVlXG4gICAgICAgICAgICApLmxlbmd0aFxuICAgICAgICAgIClcbiAgICAgICAgOiB0aGlzLmRhdGEkLnBpcGUobWFwKChkYXRhKSA9PiBkYXRhLmxlbmd0aCArIDEpKVxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBmb290ZXJDb2xzcGFuJCA9IHRoaXMudGFibGVDb25maWckLnBpcGUoXG4gICAgbWFwKChjb25maWcpID0+IHtcbiAgICAgIGxldCBjb2xzcGFuID0gMDtcbiAgICAgIE9iamVjdC52YWx1ZXMoY29uZmlnPy5mb290ZXI/LmNvbHVtbnMgfHwge30pLmZvckVhY2goKGNhbGN1bGF0aW9ucykgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhjYWxjdWxhdGlvbnMpLmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSBmYWxzZSlcbiAgICAgICAgICAgIC5sZW5ndGggPj0gMFxuICAgICAgICApIHtcbiAgICAgICAgICBjb2xzcGFuICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH0sIHt9KTtcbiAgICAgIHJldHVybiBjb2xzcGFuO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgLyoqIHNvcnRCeUtleSAtIFNvcnQgYnkga2V5IGluIHRhYmxlIHJvd1xuICAgKiBAcGFyYW0ga2V5IC0ga2V5IHRvIHNvcnQgYnlcbiAgICogQHBhcmFtIHsgTW91c2VFdmVudCB9IFskZXZlbnRdIC0gTW91c2UgZXZlbnQgdHJpZ2dlcmluZyBzb3J0LCBpZiBzaGlmdCBrZXkgaXMgcHJlc3NlZCBzb3J0IGtleSB3aWxsIGJlIGFkZGVkIHRvIGFscmVhZHkgcHJlc2VudCBzb3J0IGtleXNcbiAgICovXG4gIHNvcnRCeUtleShrZXk6IGtleW9mIFRhYmxlUm93LCAkZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc2hpZnRLZXkgPSAkZXZlbnQ/LnNoaWZ0S2V5ID09PSB0cnVlO1xuICAgIGNvbnN0IGN1cnJlbnRPcmRlciA9IHRoaXMuX3NvcnRPcmRlciQudmFsdWU7XG4gICAgbGV0IHNvcnRPcmRlcjogR3RPcmRlciA9ICdhc2MnO1xuICAgIGxldCBuZXdPcmRlcjogR3RTb3J0T3JkZXIgPSBbXTtcbiAgICAvLyBpZiBzaGlmdCBrZXkgaXMgcHJlc3NlZCB3aGlsZSBzb3J0aW5nLi4uXG4gICAgaWYgKHNoaWZ0S2V5KSB7XG4gICAgICAvLyAuLi5jaGVjayBpZiBrZXkgaXMgYWxyZWFkeSBzb3J0ZWRcbiAgICAgIGNvbnN0IGV4aXN0aW5nU29ydFBvc2l0aW9uID0gY3VycmVudE9yZGVyLmZpbmRJbmRleChcbiAgICAgICAgKHZhbHVlKSA9PiB2YWx1ZS5rZXkgPT09IGtleVxuICAgICAgKTtcbiAgICAgIGlmIChleGlzdGluZ1NvcnRQb3NpdGlvbiA9PT0gLTEpIHtcbiAgICAgICAgLy8gLi4uaWYga2V5IGlzIG5vdCBzb3J0ZWQsIGFkZCBpdCB0byB0aGUgZW5kIG9mIHRoZSBzb3J0IG9yZGVyXG4gICAgICAgIG5ld09yZGVyID0gWy4uLmN1cnJlbnRPcmRlciwgeyBrZXksIG9yZGVyOiAnYXNjJyB9XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIC4uLmlmIGtleSBpcyBhbHJlYWR5IHNvcnRlZCwgdG9nZ2xlIHNvcnQgb3JkZXJcbiAgICAgICAgc29ydE9yZGVyID0gY3VycmVudE9yZGVyW2V4aXN0aW5nU29ydFBvc2l0aW9uXS5vcmRlcjtcbiAgICAgICAgY29uc3QgbmV3U29ydE9yZGVyID0gc29ydE9yZGVyID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnO1xuICAgICAgICBuZXdPcmRlciA9IFsuLi5jdXJyZW50T3JkZXJdO1xuICAgICAgICBuZXdPcmRlcltleGlzdGluZ1NvcnRQb3NpdGlvbl0gPSB7XG4gICAgICAgICAgLi4ubmV3T3JkZXJbZXhpc3RpbmdTb3J0UG9zaXRpb25dLFxuICAgICAgICAgIG9yZGVyOiBuZXdTb3J0T3JkZXIsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIC4uLmVsc2UgaWYgc2hpZnQga2V5IGlzIG5vdCBwcmVzc2VkLi4uXG4gICAgICBpZiAoY3VycmVudE9yZGVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gLi4uY2hlY2sgaWYga2V5IGlzIGFscmVhZHkgc29ydGVkXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nU29ydFBvc2l0aW9uID0gY3VycmVudE9yZGVyLmZpbmRJbmRleChcbiAgICAgICAgICAodmFsdWUpID0+IHZhbHVlLmtleSA9PT0ga2V5XG4gICAgICAgICk7XG4gICAgICAgIC8vIC4uLmlmIGtleSBpcyBhbHJlYWR5IHNvcnRlZCwgdG9nZ2xlIHNvcnQgb3JkZXJcbiAgICAgICAgaWYgKGV4aXN0aW5nU29ydFBvc2l0aW9uID09PSAtMSkge1xuICAgICAgICAgIG5ld09yZGVyID0gW3sga2V5LCBvcmRlcjogJ2FzYycgfV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc29ydE9yZGVyID0gY3VycmVudE9yZGVyW2V4aXN0aW5nU29ydFBvc2l0aW9uXS5vcmRlcjtcbiAgICAgICAgICBjb25zdCBuZXdTb3J0T3JkZXIgPSBzb3J0T3JkZXIgPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYyc7XG4gICAgICAgICAgbmV3T3JkZXIgPSBbeyBrZXksIG9yZGVyOiBuZXdTb3J0T3JkZXIgfV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIC4uLmlmIGtleSBpcyBub3Qgc29ydGVkIHNldCBzb3J0IG9yZGVyIGZvciBrZXkgdG8gYXNjZW5kaW5nXG4gICAgICAgIG5ld09yZGVyID0gW3sga2V5LCBvcmRlcjogc29ydE9yZGVyIH1dO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBjcmVhdGUgc29ydCBldmVudFxuICAgIGNvbnN0IHNvcnRFdmVudDogR3RTb3J0RXZlbnQgPSB7XG4gICAgICBrZXksXG4gICAgICBvcmRlcjogc29ydE9yZGVyLFxuICAgICAgY3VycmVudFNvcnRPcmRlcjogbmV3T3JkZXIsXG4gICAgICBhZGRTb3J0S2V5OiBzaGlmdEtleSxcbiAgICB9O1xuXG4gICAgLy8gaWYgZXZlbnQgaXMgcGFzc2VkIHRvIHNvcnQgZnVuY3Rpb24uLi5cbiAgICBpZiAoJGV2ZW50KSB7XG4gICAgICAvLyAuLi5lbWl0IGl0IGFzIHdlbGxcbiAgICAgIHNvcnRFdmVudC5ldmVudCA9ICRldmVudDtcbiAgICB9XG4gICAgLy8gZW1pdCBzb3J0IGV2ZW50XG4gICAgdGhpcy5jb2x1bW5Tb3J0LmVtaXQoc29ydEV2ZW50KTtcblxuICAgIC8vIGlmIHRhYmxlIGlzIG5vdCBsYXp5IGxvYWRlZCAoc29ydGluZyBpcyB0aGVuIGhhbmRsZWQgc2VydmVyLXNpZGUpLi4uXG4gICAgaWYgKCF0aGlzLnRhYmxlSW5mbz8ubGF6eUxvYWRlZCkge1xuICAgICAgLy8gLi4udXBkYXRlIHNvcnQgb3JkZXJcbiAgICAgIHRoaXMuc29ydE9yZGVyID0gbmV3T3JkZXI7XG4gICAgfVxuICB9XG5cbiAgY29sdW1uT3JkZXIgPSAoXG4gICAgYTogS2V5VmFsdWU8c3RyaW5nLCBUYWJsZUNvbHVtbj4sXG4gICAgYjogS2V5VmFsdWU8c3RyaW5nLCBUYWJsZUNvbHVtbj5cbiAgKTogbnVtYmVyID0+IHtcbiAgICByZXR1cm4gKGEudmFsdWUub3JkZXIgfHwgMCkgLSAoYi52YWx1ZS5vcmRlciB8fCAwKTtcbiAgfTtcblxuICBuZXN0ZWRWYWx1ZShcbiAgICBvYmplY3Q6IGFueSxcbiAgICBtYXBUbzogc3RyaW5nLFxuICAgIG1pc3NpbmdWYWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCA9IG51bGxcbiAgKTogdW5rbm93biB7XG4gICAgY29uc3QgbGV2ZWxzID0gbWFwVG8uc3BsaXQoJy4nKTtcbiAgICByZXR1cm4gbGV2ZWxzLnJlZHVjZShcbiAgICAgIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50VmFsdWUsIGluZGV4KSA9PlxuICAgICAgICBwcmV2aW91c1ZhbHVlW2N1cnJlbnRWYWx1ZV0gfHxcbiAgICAgICAgKGluZGV4ID09PSBsZXZlbHMubGVuZ3RoIC0gMSA/IG1pc3NpbmdWYWx1ZSA6IHt9KSxcbiAgICAgIG9iamVjdFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF91bnN1YnNjcmliZUZyb21LZXlib2FyZEV2ZW50cyQgPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIF9rZXlib2FyZEFycm93RXZlbnQkID0gZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KFxuICAgIGRvY3VtZW50LFxuICAgICdrZXlkb3duJ1xuICApLnBpcGUoXG4gICAgZmlsdGVyKFxuICAgICAgKGV2ZW50KSA9PlxuICAgICAgICBbLi4udGhpcy5fbmF2aWdhdGlvbktleXMsIC4uLnRoaXMuX3NlbGVjdEtleXNdLmluZGV4T2YoZXZlbnQua2V5KSA+IC0xXG4gICAgKVxuICApO1xuXG4gIHByb3RlY3RlZCBsaXN0ZW5Ub0tleWJvYXJkRXZlbnRzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGFibGVDb25maWc/LmFjdGl2YXRlUm93T25LZXlib2FyZE5hdmlnYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl91bnN1YnNjcmliZUZyb21LZXlib2FyZEV2ZW50cyQubmV4dCh0cnVlKTtcbiAgICB0aGlzLl9rZXlib2FyZEFycm93RXZlbnQkXG4gICAgICAucGlwZShcbiAgICAgICAgd2l0aExhdGVzdEZyb20oXG4gICAgICAgICAgdGhpcy5kYXRhJCxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdpbmF0aW9uSW5kZXgkLFxuICAgICAgICAgIHRoaXMudGFibGVJbmZvJFxuICAgICAgICApLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVGcm9tS2V5Ym9hcmRFdmVudHMkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoW2V2ZW50LCByb3dzLCBjdXJyZW50UGFnZSwgdGFibGVJbmZvXSkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RFdmVudCA9IHRoaXMuX3NlbGVjdEtleXMuaW5jbHVkZXMoZXZlbnQua2V5KTtcbiAgICAgICAgaWYgKHNlbGVjdEV2ZW50ICYmIHRoaXMuYWN0aXZlUm93SW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCByb3dJbmRleCA9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVJvd0luZGV4ICsgY3VycmVudFBhZ2UgKiAodGFibGVJbmZvPy5wYWdlU2l6ZSA/PyAwKTtcbiAgICAgICAgICB0aGlzLl9yb3dBY3RpdmUocm93c1tyb3dJbmRleF0sIHJvd0luZGV4LCBldmVudCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmF2aWdhdGlvbkV2ZW50ID0gdGhpcy5fbmF2aWdhdGlvbktleXMuaW5jbHVkZXMoZXZlbnQua2V5KTtcbiAgICAgICAgaWYgKG5hdmlnYXRpb25FdmVudCkge1xuICAgICAgICAgIHRoaXMuX2hhbmRsZU5hdmlnYXRpb25FdmVudChldmVudCwgcm93cywgY3VycmVudFBhZ2UsIHRhYmxlSW5mbyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG4gIHVuc3Vic2NyaWJlRnJvbUtleWJvYXJkRXZlbnRzKHRhYmxlUmVmOiBIVE1MVGFibGVFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90YWJsZUNvbmZpZz8uYWN0aXZhdGVSb3dPbktleWJvYXJkTmF2aWdhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBvbmx5IHVuc3Vic2NyaWJlIGlmIHRhYmxlIGlzIG5vdCBmb2N1c2VkXG4gICAgaWYgKHRhYmxlUmVmICE9PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5fdGFibGVDb25maWc/LmFjdGl2YXRlUm93T25Ib3Zlcikge1xuICAgICAgICAvLyB1bnNldCBhY3RpdmUgcm93XG4gICAgICAgIHRoaXMuYWN0aXZhdGVSb3cobnVsbCk7XG4gICAgICB9XG4gICAgICB0aGlzLl91bnN1YnNjcmliZUZyb21LZXlib2FyZEV2ZW50cyQubmV4dCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVOYXZpZ2F0aW9uRXZlbnQoXG4gICAgZXZlbnQ6IEtleWJvYXJkRXZlbnQsXG4gICAgcm93czogYW55W10sXG4gICAgY3VycmVudFBhZ2U6IG51bWJlcixcbiAgICB0YWJsZUluZm86IGFueVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBoYXNQYWdpbmF0aW9uID0gKHRhYmxlSW5mbz8ucGFnZVRvdGFsIHx8IDApID4gMSAmJiB0YWJsZUluZm87XG4gICAgY29uc3QgbGFzdFJvd0luZGV4ID0gcm93cy5sZW5ndGggLSAxO1xuICAgIGxldCBuZXdJbmRleCA9IHRoaXMuYWN0aXZlUm93SW5kZXg7XG4gICAgbGV0IGluZGV4TW9kaWZpZXIgPSAwO1xuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0hvbWUnKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb25JbmRleCA9IDA7XG4gICAgICB0aGlzLmFjdGl2YXRlUm93KDAsIGV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW5kJykge1xuICAgICAgY29uc3QgaW5kZXhPZkxhc3RSZWNvcmQgPSBoYXNQYWdpbmF0aW9uXG4gICAgICAgID8gcm93cy5sZW5ndGggLSAodGFibGVJbmZvLnBhZ2VUb3RhbCAtIDEpICogdGFibGVJbmZvLnBhZ2VTaXplIC0gMVxuICAgICAgICA6IGxhc3RSb3dJbmRleDtcbiAgICAgIGlmICh0YWJsZUluZm8/LnBhZ2VUb3RhbCkge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb25JbmRleCA9IHRhYmxlSW5mby5wYWdlVG90YWwgLSAxO1xuICAgICAgfVxuICAgICAgdGhpcy5hY3RpdmF0ZVJvdyhpbmRleE9mTGFzdFJlY29yZCwgZXZlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICBpbmRleE1vZGlmaWVyID0gMTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICBpbmRleE1vZGlmaWVyID0gLTE7XG4gICAgfVxuXG4gICAgaWYgKG5ld0luZGV4ID09PSBudWxsKSB7XG4gICAgICBuZXdJbmRleCA9IDA7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIG5ld0luZGV4ICsgaW5kZXhNb2RpZmllciA+PSAwICYmXG4gICAgICBuZXdJbmRleCArIGluZGV4TW9kaWZpZXIgPD0gbGFzdFJvd0luZGV4XG4gICAgKSB7XG4gICAgICBuZXdJbmRleCA9IG5ld0luZGV4ICsgaW5kZXhNb2RpZmllcjtcbiAgICB9XG5cbiAgICBpZiAoaGFzUGFnaW5hdGlvbiAmJiB0YWJsZUluZm8/LnBhZ2VTaXplKSB7XG4gICAgICBjb25zdCBpc05vdExhc3RQYWdlID0gY3VycmVudFBhZ2UgKyAxIDwgdGFibGVJbmZvLnBhZ2VUb3RhbDtcbiAgICAgIGNvbnN0IHJlY29yZHNPbkxhc3RQYWdlID1cbiAgICAgICAgcm93cy5sZW5ndGggLSAodGFibGVJbmZvLnBhZ2VUb3RhbCAtIDEpICogdGFibGVJbmZvLnBhZ2VTaXplIC0gMTtcbiAgICAgIGNvbnN0IG1heEluZGV4ID0gaXNOb3RMYXN0UGFnZVxuICAgICAgICA/IHRhYmxlSW5mbz8ucGFnZVNpemUgLSAxXG4gICAgICAgIDogcmVjb3Jkc09uTGFzdFBhZ2U7XG5cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnICYmIGN1cnJlbnRQYWdlID4gMCkge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb25JbmRleCA9IGN1cnJlbnRQYWdlIC0gMTtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVJvdyhuZXdJbmRleCwgZXZlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnICYmIGlzTm90TGFzdFBhZ2UpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGN1cnJlbnRQYWdlICsgMSA9PT0gdGFibGVJbmZvLnBhZ2VUb3RhbCAtIDEgJiZcbiAgICAgICAgICBuZXdJbmRleCA+IHJlY29yZHNPbkxhc3RQYWdlXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuYWN0aXZhdGVSb3cocmVjb3Jkc09uTGFzdFBhZ2UsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhZ2luYXRpb25JbmRleCA9IGN1cnJlbnRQYWdlICsgMTtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVJvdyhuZXdJbmRleCwgZXZlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY3VycmVudFBhZ2UgPiAwICYmXG4gICAgICAgIGluZGV4TW9kaWZpZXIgPCAwICYmXG4gICAgICAgIG5ld0luZGV4ICsgaW5kZXhNb2RpZmllciA8PSBsYXN0Um93SW5kZXggJiZcbiAgICAgICAgKHRoaXMuYWN0aXZlUm93SW5kZXggfHwgMCkgKyBpbmRleE1vZGlmaWVyIDwgMFxuICAgICAgKSB7XG4gICAgICAgIC8vIHNldCBsYXN0IHJvdyBvZiBwcmV2aW91cyBwYWdlIGFzIGFjdGl2ZVxuICAgICAgICB0aGlzLmFjdGl2YXRlUm93KHRhYmxlSW5mbz8ucGFnZVNpemUgLSAxLCBldmVudCk7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbkluZGV4ID0gY3VycmVudFBhZ2UgLSAxO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhZ2VJbmRleCA9IG5ld0luZGV4ICUgdGFibGVJbmZvPy5wYWdlU2l6ZTtcblxuICAgICAgaWYgKG5ld0luZGV4ID4gbWF4SW5kZXggJiYgY3VycmVudFBhZ2UgKyAxIDwgdGFibGVJbmZvLnBhZ2VUb3RhbCkge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb25JbmRleCA9IGN1cnJlbnRQYWdlICsgMTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWN0aXZhdGVSb3cocGFnZUluZGV4ID4gbWF4SW5kZXggPyBtYXhJbmRleCA6IHBhZ2VJbmRleCwgZXZlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZhdGVSb3cobmV3SW5kZXgsIGV2ZW50KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPHRhYmxlXG4gIFtuZ0NsYXNzXT1cIih0YWJsZUNvbmZpZyQgfCBhc3luYyk/LmNsYXNzIHx8ICd0YWJsZSdcIlxuICBbY2xhc3MudGFibGUtbW9iaWxlXT1cIih0YWJsZUNvbmZpZyQgfCBhc3luYyk/Lm1vYmlsZUxheW91dFwiXG4gIFtjbGFzcy50YWJsZS1ob3Jpem9udGFsXT1cIih0YWJsZUNvbmZpZyQgfCBhc3luYyk/LnJvd3NcIlxuICBbY2xhc3MudGFibGUtbG9hZGluZ109XCJsb2FkaW5nJCB8IGFzeW5jXCJcbiAgW2NsYXNzLmd0LXN0aWNreS1yb3ctaGVhZGVyXT1cIlxuICAgICh0YWJsZUNvbmZpZyQgfCBhc3luYyk/LnN0aWNreUhlYWRlcnM/LnJvdyAmJiAodGFibGVDb25maWckIHwgYXN5bmMpPy5yb3dzXG4gIFwiXG4gIFtjbGFzcy5ndC1zdGlja3ktY29sdW1uLWhlYWRlcl09XCJcbiAgICAodGFibGVDb25maWckIHwgYXN5bmMpPy5zdGlja3lIZWFkZXJzPy5jb2x1bW5cbiAgXCJcbiAgW2F0dHIuYXJpYS1idXN5XT1cIihsb2FkaW5nJCB8IGFzeW5jKSA9PT0gdHJ1ZSA/IHRydWUgOiBudWxsXCJcbiAgW3RhYmluZGV4XT1cIih0YWJsZUNvbmZpZyQgfCBhc3luYyk/LmFjdGl2YXRlUm93T25LZXlib2FyZE5hdmlnYXRpb24gPyAwIDogLTFcIlxuICAjdGFibGVSZWZcbiAgKGZvY3VzKT1cImxpc3RlblRvS2V5Ym9hcmRFdmVudHMoKVwiXG4gIChmb2N1c291dCk9XCJ1bnN1YnNjcmliZUZyb21LZXlib2FyZEV2ZW50cyh0YWJsZVJlZilcIlxuICAobW91c2VlbnRlcik9XCJsaXN0ZW5Ub0tleWJvYXJkRXZlbnRzKClcIlxuICAobW91c2VsZWF2ZSk9XCJ1bnN1YnNjcmliZUZyb21LZXlib2FyZEV2ZW50cyh0YWJsZVJlZilcIlxuPlxuICA8dGhlYWQ+XG4gICAgPHRyXG4gICAgICAqbmdJZj1cIntcbiAgICAgICAgY29uZmlnOiAodGFibGVDb25maWckIHwgYXN5bmMpISxcbiAgICAgICAgaXNMb2FkaW5nOiBsb2FkaW5nJCB8IGFzeW5jXG4gICAgICB9IGFzIHRhYmxlXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdGFibGUuY29uZmlnPy5jb2x1bW5zIHwga2V5dmFsdWU6IGNvbHVtbk9yZGVyXCJcbiAgICAgID5cbiAgICAgICAgPHRoXG4gICAgICAgICAgKm5nSWY9XCIhY29sdW1uLnZhbHVlPy5oaWRkZW5cIlxuICAgICAgICAgIG5nQ2xhc3M9XCJ7eyAoY29sdW1uLmtleSB8IGRhc2hDYXNlKSArICctY29sdW1uJyB9fSB7e1xuICAgICAgICAgICAgY29sdW1uLnZhbHVlLmNsYXNzXG4gICAgICAgICAgfX1cIlxuICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJ0YWJsZS5pc0xvYWRpbmdcIlxuICAgICAgICAgIFthdHRyLmFyaWEtc29ydF09XCJzb3J0T3JkZXIkIHwgYXN5bmMgfCBzb3J0Q2xhc3M6IGNvbHVtbi5rZXk6J2FyaWEnXCJcbiAgICAgICAgICBbY2xhc3MuZ3Qtc29ydGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4udmFsdWU/LnNvcnRhYmxlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtc29ydC1vcmRlcl09XCJcbiAgICAgICAgICAgICAgc29ydE9yZGVyJCB8IGFzeW5jIHwgc29ydENsYXNzOiBjb2x1bW4ua2V5OidvcmRlcidcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImd0LXNvcnRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICB0YWJsZS5pc0xvYWRpbmcgfHxcbiAgICAgICAgICAgICAgICAhY29sdW1uLnZhbHVlLnNvcnRhYmxlIHx8XG4gICAgICAgICAgICAgICAgc29ydEJ5S2V5KGNvbHVtbi5rZXksICRldmVudClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4udmFsdWU/LmhlYWRlciAhPT0gZmFsc2VcIj57e1xuICAgICAgICAgICAgICBjb2x1bW4udmFsdWUuaGVhZGVyIHx8IGNvbHVtbi5rZXkgfCBjYXBpdGFsQ2FzZVxuICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiIWNvbHVtbi52YWx1ZT8uc29ydGFibGUgJiYgY29sdW1uLnZhbHVlPy5oZWFkZXIgIT09IGZhbHNlXCJcbiAgICAgICAgICAgID57eyBjb2x1bW4udmFsdWUuaGVhZGVyIHx8IGNvbHVtbi5rZXkgfCBjYXBpdGFsQ2FzZSB9fTwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgPC90aD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICgodGFibGU/LmNvbmZpZz8ucm93cyB8IGtleXZhbHVlOiBjb2x1bW5PcmRlcikgfHwgW10pWzBdIGFzIGhlYWRlclJvd1xuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8dGhcbiAgICAgICAgICBjbGFzcz1cInJvdy1oZWFkZXJcIlxuICAgICAgICAgIFthdHRyLmFyaWEtc29ydF09XCJcbiAgICAgICAgICAgIHNvcnRPcmRlciQgfCBhc3luYyB8IHNvcnRDbGFzczogaGVhZGVyUm93LmtleTonYXJpYSdcbiAgICAgICAgICBcIlxuICAgICAgICAgIG5nQ2xhc3M9XCJ7eyBoZWFkZXJSb3cudmFsdWUuc29ydGFibGUgPyAnc29ydCAnIDogJycgfX0ge3tcbiAgICAgICAgICAgIHNvcnRPcmRlciQgfCBhc3luYyB8IHNvcnRDbGFzczogaGVhZGVyUm93LmtleVxuICAgICAgICAgIH19IHt7IChoZWFkZXJSb3cua2V5IHwgZGFzaENhc2UpICsgJy1jb2x1bW4nIH19XCJcbiAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICB0YWJsZS5pc0xvYWRpbmcgfHxcbiAgICAgICAgICAgICAgIWhlYWRlclJvdy52YWx1ZS5zb3J0YWJsZSB8fFxuICAgICAgICAgICAgICBzb3J0QnlLZXkoaGVhZGVyUm93LmtleSwgJGV2ZW50KVxuICAgICAgICAgIFwiXG4gICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlclJvdz8udmFsdWU/LmhlYWRlciAhPT0gZmFsc2VcIj57e1xuICAgICAgICAgICAgaGVhZGVyUm93Py52YWx1ZT8uaGVhZGVyIHx8IGhlYWRlclJvdy5rZXkgfCBjYXBpdGFsQ2FzZVxuICAgICAgICAgIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aFxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgKCh0YWJsZSQgfCBhc3luYyk/LmRhdGEgfHwgW10pWzBdXCJcbiAgICAgICAgICBuZ0NsYXNzPVwie3sgaGVhZGVyUm93LnZhbHVlLmNsYXNzIH19XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIlxuICAgICAgICAgICAgICAodGFibGUuY29uZmlnLnJvd3MgfHwge30pW2hlYWRlclJvdy5rZXldLnRlbXBsYXRlUmVmXG4gICAgICAgICAgICAgICAgPyB0ZW1wbGF0ZVJlZlxuICAgICAgICAgICAgICAgIDogKHRhYmxlLmNvbmZpZy5yb3dzIHx8IHt9KVtoZWFkZXJSb3cua2V5XS50cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICA/IHRyYW5zZm9ybURhdGFcbiAgICAgICAgICAgICAgICA6IHJhd0RhdGFcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICByb3c6IGNvbHVtbixcbiAgICAgICAgICAgICAgY29sdW1uOiBoZWFkZXJSb3csXG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogKHRhYmxlLmNvbmZpZy5yb3dzIHx8IHt9KVtoZWFkZXJSb3cua2V5XS50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgIHRlbXBsYXRlUmVmOiAodGFibGUuY29uZmlnLnJvd3MgfHwge30pW2hlYWRlclJvdy5rZXldLnRlbXBsYXRlUmVmLFxuICAgICAgICAgICAgICBpbmRleDogMFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RoPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC90cj5cbiAgPC90aGVhZD5cbiAgPHRib2R5ICpuZ0lmPVwibG9hZGluZyQgfCBhc3luYzsgZWxzZSB0YWJsZUNvbnRlbnRcIj5cbiAgICA8dHI+XG4gICAgICA8dGQgY2xhc3M9XCJwLTBcIiBbY29sU3Bhbl09XCJjb2xzcGFuJCB8IGFzeW5jXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIi50YWJsZS1sb2FkaW5nXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3Rib2R5PlxuICA8dGZvb3QgKm5nSWY9XCIodGFibGUkIHwgYXN5bmMpISBhcyB0YWJsZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJsZS5kYXRhLmxlbmd0aCA+IDAgJiYgIShsb2FkaW5nJCB8IGFzeW5jKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihjYWxjdWxhdGlvbnMkIHwgYXN5bmMpISBhcyBjYWxjdWxhdGlvbnNcIj5cbiAgICAgICAgPHRyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNhbGN1bGF0aW9uIG9mIGNhbGN1bGF0aW9ucy5jYWxjdWxhdGlvbnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJ7XG4gICAgICAgICAgICAgIHNob3dIZWFkZXI6IChjb2xzcGFuJCB8IGFzeW5jKSAhPT0gKGZvb3RlckNvbHNwYW4kIHwgYXN5bmMpXG4gICAgICAgICAgICB9IGFzIGZvb3RlclJvd1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICpuZ0lmPVwiZm9vdGVyUm93LnNob3dIZWFkZXJcIlxuICAgICAgICAgICAgICBbY29sU3Bhbl09XCJcbiAgICAgICAgICAgICAgICAoKGNvbHNwYW4kIHwgYXN5bmMpIHx8IDApIC0gKChmb290ZXJDb2xzcGFuJCB8IGFzeW5jKSB8fCAwKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBzY29wZT1cInJvd1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInRhYmxlLmNvbmZpZz8uZm9vdGVyPy5oZWFkZXJzPy5bY2FsY3VsYXRpb25dIGFzIHNob3dIZWFkZXJcIlxuICAgICAgICAgICAgICAgID57e3Nob3dIZWFkZXIgPT09IHRydWUgPyAoY2FsY3VsYXRpb24gfCBjYXBpdGFsQ2FzZSk6IHRhYmxlLmNvbmZpZy5mb290ZXI/LmhlYWRlcnM/LltjYWxjdWxhdGlvbl19fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgIGxldCBjb2x1bW4gb2YgdGFibGUuY29uZmlnPy5jb2x1bW5zIHwga2V5dmFsdWU6IGNvbHVtbk9yZGVyXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAhY29sdW1uLnZhbHVlPy5oaWRkZW4gJiYgY2FsY3VsYXRpb25zLmNhbGN1bGF0ZWRbY29sdW1uLmtleV1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIG5nQ2xhc3M9XCJ7eyAoY29sdW1uLmtleSB8IGRhc2hDYXNlKSArICctY29sdW1uJyB9fSB7e1xuICAgICAgICAgICAgICAgICAgY29sdW1uLnZhbHVlLmNsYXNzXG4gICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtaGVhZGVyXT1cIlxuICAgICAgICAgICAgICAgICAgIWZvb3RlclJvdy5zaG93SGVhZGVyICYmIHRhYmxlLmNvbmZpZy5mb290ZXI/LmhlYWRlcnM/LltjYWxjdWxhdGlvbl1cbiAgICAgICAgICAgICAgICAgICAgPyB0YWJsZS5jb25maWcuZm9vdGVyPy5oZWFkZXJzPy5bY2FsY3VsYXRpb25dID09PSB0cnVlID8gKGNhbGN1bGF0aW9uIHwgY2FwaXRhbENhc2UpIDogdGFibGUuY29uZmlnLmZvb3Rlcj8uaGVhZGVycz8uW2NhbGN1bGF0aW9uXVxuICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICB0YWJsZS5jb25maWcubW9iaWxlTGF5b3V0ICYmIGNvbHVtbi52YWx1ZS5tb2JpbGVIZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4udmFsdWUubW9iaWxlSGVhZGVyICE9PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4udmFsdWUubW9iaWxlSGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgOiAoY29sdW1uLnZhbHVlLmhlYWRlciB8fCBjb2x1bW4ua2V5IHwgY2FwaXRhbENhc2UpXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmd0LW5vLWNvbnRlbnRdPVwiXG4gICAgICAgICAgICAgICAgICAhY2FsY3VsYXRpb25zLmNhbGN1bGF0ZWRbY29sdW1uLmtleV1bY2FsY3VsYXRpb25dXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIlxuICAgICAgICAgICAgICAgICAgICAodGFibGUuY29uZmlnLmNvbHVtbnMgfHwge30pW2NvbHVtbi5rZXldLnRlbXBsYXRlUmVmXG4gICAgICAgICAgICAgICAgICAgICAgPyB0ZW1wbGF0ZVJlZlxuICAgICAgICAgICAgICAgICAgICAgIDogKHRhYmxlLmNvbmZpZy5jb2x1bW5zIHx8IHt9KVtjb2x1bW4ua2V5XS50cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICAgICAgICA/IHRyYW5zZm9ybUZvb3RlclxuICAgICAgICAgICAgICAgICAgICAgIDogcmF3Rm9vdGVyXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNhbGN1bGF0aW9ucy5jYWxjdWxhdGVkW2NvbHVtbi5rZXldW2NhbGN1bGF0aW9uXSxcbiAgICAgICAgICAgICAgICAgICAgcm93OiBjYWxjdWxhdGlvbnMuY2FsY3VsYXRlZFtjb2x1bW4ua2V5XSxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBjYWxjdWxhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVSZWY6ICh0YWJsZS5jb25maWcuY29sdW1ucyB8fCB7fSlbY29sdW1uLmtleV1cbiAgICAgICAgICAgICAgICAgICAgICAudGVtcGxhdGVSZWYsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogKHRhYmxlLmNvbmZpZy5jb2x1bW5zIHx8IHt9KVtjb2x1bW4ua2V5XVxuICAgICAgICAgICAgICAgICAgICAgIC50cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdGZvb3Q+XG48L3RhYmxlPlxuPG5nLXRlbXBsYXRlICN0YWJsZUNvbnRlbnQ+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIodGFibGUkIHwgYXN5bmMpISBhcyB0YWJsZVwiPlxuICAgIDx0Ym9keSAqbmdJZj1cIih0YWJsZSEuZGF0YSFbMF0gfHwgdGFibGUhLmRhdGEhKS5sZW5ndGggPiAwOyBlbHNlIG5vRGF0YVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlLmNvbmZpZy5jb2x1bW5zXCI+XG4gICAgICAgIDx0clxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IHJvdyBvZiB0YWJsZSEuZGF0YSFbXG4gICAgICAgICAgICAgIHRhYmxlLmluZm8ubGF6eUxvYWRlZCA/IDAgOiAoY3VycmVudFBhZ2luYXRpb25JbmRleCQgfCBhc3luYykgfHwgMFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrUm93QnlGbjtcbiAgICAgICAgICAgIGxldCBpID0gaW5kZXhcbiAgICAgICAgICBcIlxuICAgICAgICAgIFthdHRyLmlkXT1cIid0YWJsZVJvd18nICsgaVwiXG4gICAgICAgICAgKGNsaWNrKT1cInRhYmxlPy5jb25maWc/LnJvd0NsaWNrICYmIF9yb3dDbGljayhyb3csIGksICRldmVudClcIlxuICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxuICAgICAgICAgICAgdGFibGU/LmNvbmZpZz8uYWN0aXZhdGVSb3dPbkhvdmVyICYmIF9hY3RpdmF0ZVJvdyhyb3csIGksICRldmVudClcbiAgICAgICAgICBcIlxuICAgICAgICAgIChtb3VzZWxlYXZlKT1cIlxuICAgICAgICAgICAgdGFibGU/LmNvbmZpZz8uYWN0aXZhdGVSb3dPbkhvdmVyICYmXG4gICAgICAgICAgICAgIF9hY3RpdmF0ZVJvdyhudWxsLCBudWxsLCAkZXZlbnQpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJbXG4gICAgICAgICAgICAhIWlzUm93U2VsZWN0ZWRGblxuICAgICAgICAgICAgICA/IChyb3dcbiAgICAgICAgICAgICAgICB8IHJvd1NlbGVjdGlvblxuICAgICAgICAgICAgICAgICAgOiBzZWxlY3Rpb25cbiAgICAgICAgICAgICAgICAgIDogaXNSb3dTZWxlY3RlZEZuXG4gICAgICAgICAgICAgICAgICA6IGN1c3RvbUNsYXNzZXMuc2VsZWN0ZWRSb3cpXG4gICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAocm93QWN0aXZlJCB8IGFzeW5jKT8uaW5kZXggPT09IGkgPyBjdXN0b21DbGFzc2VzLmFjdGl2ZVJvdyA6ICcnXG4gICAgICAgICAgXVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHRhYmxlLmNvbmZpZz8uY29sdW1ucyB8IGtleXZhbHVlOiBjb2x1bW5PcmRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWNvbHVtbi52YWx1ZT8uaGlkZGVuXCJcbiAgICAgICAgICAgICAgbmdDbGFzcz1cInt7IChjb2x1bW4ua2V5IHwgZGFzaENhc2UpICsgJy1jb2x1bW4nIH19IHt7XG4gICAgICAgICAgICAgICAgY29sdW1uLnZhbHVlLmNsYXNzXG4gICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgICB0YWJsZS5jb25maWcubW9iaWxlTGF5b3V0ICYmIGNvbHVtbi52YWx1ZS5tb2JpbGVIZWFkZXJcbiAgICAgICAgICAgICAgICAgID8gY29sdW1uLnZhbHVlLm1vYmlsZUhlYWRlciAhPT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi52YWx1ZS5tb2JpbGVIZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgOiAoY29sdW1uLnZhbHVlLmhlYWRlciB8fCBjb2x1bW4ua2V5IHwgY2FwaXRhbENhc2UpXG4gICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIlxuICAgICAgICAgICAgICAgICAgKHNlYXJjaEJ5JCB8IGFzeW5jKSAmJlxuICAgICAgICAgICAgICAgICAgISh0YWJsZS5jb25maWcuY29sdW1ucyB8fCB7fSlbY29sdW1uLmtleV0udGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICAgICAgPyBoaWdobGlnaHRlZFxuICAgICAgICAgICAgICAgICAgICA6ICh0YWJsZS5jb25maWcuY29sdW1ucyB8fCB7fSlbY29sdW1uLmtleV0udGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICAgICAgPyB0ZW1wbGF0ZVJlZlxuICAgICAgICAgICAgICAgICAgICA6ICh0YWJsZS5jb25maWcuY29sdW1ucyB8fCB7fSlbY29sdW1uLmtleV0udHJhbnNmb3JtXG4gICAgICAgICAgICAgICAgICAgID8gdHJhbnNmb3JtRGF0YVxuICAgICAgICAgICAgICAgICAgICA6IHJhd0RhdGFcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgc2VhcmNoOiAoc2VhcmNoQnkkIHwgYXN5bmMpLFxuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAodGFibGUuY29uZmlnLmNvbHVtbnMgfHwge30pW2NvbHVtbi5rZXldLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlUmVmOiAodGFibGUuY29uZmlnLmNvbHVtbnMgfHwge30pW2NvbHVtbi5rZXldXG4gICAgICAgICAgICAgICAgICAgIC50ZW1wbGF0ZVJlZixcbiAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgZGF0YTogdGFibGUuZGF0YVtcbiAgICAgICAgICAgICAgICAgICAgdGFibGUuaW5mby5sYXp5TG9hZGVkXG4gICAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgICAgOiAoY3VycmVudFBhZ2luYXRpb25JbmRleCQgfCBhc3luYykgfHwgMFxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFibGUuY29uZmlnLnJvd3NcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IHJvdyBvZiB0YWJsZT8uY29uZmlnPy5yb3dzIHwga2V5dmFsdWU6IGNvbHVtbk9yZGVyIHwgc2xpY2U6IDE7XG4gICAgICAgICAgICBsZXQgaSA9IGluZGV4XG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgKm5nSWY9XCIhcm93LnZhbHVlPy5oaWRkZW5cIlxuICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ3RhYmxlUm93XycgKyBpXCJcbiAgICAgICAgICAgIG5nQ2xhc3M9XCJ7eyAocm93LmtleSB8IGRhc2hDYXNlKSArICctcm93JyB9fVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidGFibGU/LmNvbmZpZz8ucm93Q2xpY2sgJiYgX3Jvd0NsaWNrKHJvdywgaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAobW91c2VlbnRlcik9XCJcbiAgICAgICAgICAgICAgdGFibGU/LmNvbmZpZz8uYWN0aXZhdGVSb3dPbkhvdmVyICYmIF9hY3RpdmF0ZVJvdyhyb3csIGksICRldmVudClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJcbiAgICAgICAgICAgICAgdGFibGU/LmNvbmZpZz8uYWN0aXZhdGVSb3dPbkhvdmVyICYmXG4gICAgICAgICAgICAgICAgX2FjdGl2YXRlUm93KG51bGwsIG51bGwsICRldmVudClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJbXG4gICAgICAgICAgICAgICEhaXNSb3dTZWxlY3RlZEZuXG4gICAgICAgICAgICAgICAgPyAocm93XG4gICAgICAgICAgICAgICAgICB8IHJvd1NlbGVjdGlvblxuICAgICAgICAgICAgICAgICAgICA6IHNlbGVjdGlvblxuICAgICAgICAgICAgICAgICAgICA6IGlzUm93U2VsZWN0ZWRGblxuICAgICAgICAgICAgICAgICAgICA6IGN1c3RvbUNsYXNzZXMuc2VsZWN0ZWRSb3cpXG4gICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgKHJvd0FjdGl2ZSQgfCBhc3luYyk/LmluZGV4ID09PSBpID8gY3VzdG9tQ2xhc3Nlcy5hY3RpdmVSb3cgOiAnJ1xuICAgICAgICAgICAgXVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwicm93LWhlYWRlclwiIHNjb3BlPVwicm93XCI+XG4gICAgICAgICAgICAgIHt7IHJvdy52YWx1ZS5oZWFkZXIgfHwgcm93LmtleSB8IGNhcGl0YWxDYXNlIH19XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgKHRhYmxlPy5kYXRhIHx8IFtdKVswXTsgbGV0IHkgPSBpbmRleFwiXG4gICAgICAgICAgICAgIG5nQ2xhc3M9XCJ7eyByb3cudmFsdWUuY2xhc3MgfX1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiXG4gICAgICAgICAgICAgICAgICAodGFibGUuY29uZmlnLnJvd3MgfHwge30pW3Jvdy5rZXldLnRlbXBsYXRlUmVmXG4gICAgICAgICAgICAgICAgICAgID8gdGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICAgICAgOiAodGFibGUuY29uZmlnLnJvd3MgfHwge30pW3Jvdy5rZXldLnRyYW5zZm9ybVxuICAgICAgICAgICAgICAgICAgICA/IHRyYW5zZm9ybURhdGFcbiAgICAgICAgICAgICAgICAgICAgOiByYXdEYXRhXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgcm93OiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICBjb2x1bW46IHJvdyxcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogKHRhYmxlLmNvbmZpZy5yb3dzIHx8IHt9KVtyb3cua2V5XS50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVJlZjogKHRhYmxlLmNvbmZpZy5yb3dzIHx8IHt9KVtyb3cua2V5XS50ZW1wbGF0ZVJlZixcbiAgICAgICAgICAgICAgICAgIGluZGV4OiB0YWJsZS5jb25maWcucm93cyA/IHkgOiBpLFxuICAgICAgICAgICAgICAgICAgZGF0YTogdGFibGUuZGF0YVtcbiAgICAgICAgICAgICAgICAgICAgdGFibGUuaW5mby5sYXp5TG9hZGVkXG4gICAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgICAgOiAoY3VycmVudFBhZ2luYXRpb25JbmRleCQgfCBhc3luYykgfHwgMFxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdGJvZHk+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbm9EYXRhPlxuICA8dGJvZHk+XG4gICAgPHRyPlxuICAgICAgPHRkIGNsYXNzPVwicC0wXCIgW2NvbFNwYW5dPVwiY29sc3BhbiQgfCBhc3luY1wiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIudGFibGUtbm8tZGF0YVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC90Ym9keT5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGVcbiAgI2hpZ2hsaWdodGVkXG4gIGxldC1yb3c9XCJyb3dcIlxuICBsZXQtY29sdW1uPVwiY29sdW1uXCJcbiAgbGV0LXNlYXJjaD1cInNlYXJjaFwiXG4gIGxldC10cmFuc2Zvcm09XCJ0cmFuc2Zvcm1cIlxuPlxuICA8ZGl2XG4gICAgKm5nSWY9XCIhdHJhbnNmb3JtXCJcbiAgICBbaW5uZXJIVE1MXT1cInJvd1tjb2x1bW4ua2V5XSB8IGhpZ2hsaWdodDogc2VhcmNoXCJcbiAgPjwvZGl2PlxuICA8ZGl2XG4gICAgKm5nSWY9XCJ0cmFuc2Zvcm1cIlxuICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICByb3dbY29sdW1uLmtleV1cbiAgICAgICAgfCBkeW5hbWljUGlwZTogdHJhbnNmb3JtLnBpcGU6dHJhbnNmb3JtPy5hcmdzXG4gICAgICAgIHwgaGlnaGxpZ2h0OiBzZWFyY2hcbiAgICBcIlxuICA+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNyYXdEYXRhIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIHt7IHJvd1tjb2x1bW4ua2V5XSB9fVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZVxuICAjdHJhbnNmb3JtRGF0YVxuICBsZXQtcm93PVwicm93XCJcbiAgbGV0LWNvbHVtbj1cImNvbHVtblwiXG4gIGxldC10cmFuc2Zvcm09XCJ0cmFuc2Zvcm1cIlxuICBsZXQtZGF0YT1cImRhdGFcIlxuPlxuICB7eyByb3dbY29sdW1uLmtleV0gfCBkeW5hbWljUGlwZTogdHJhbnNmb3JtLnBpcGU6dHJhbnNmb3JtPy5hcmdzIH19XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICN0cmFuc2Zvcm1Gb290ZXIgbGV0LXZhbHVlPVwidmFsdWVcIiBsZXQtdHJhbnNmb3JtPVwidHJhbnNmb3JtXCI+XG4gIHt7XG4gICAgKHZhbHVlIHwgZHluYW1pY1BpcGU6IHRyYW5zZm9ybS5waXBlOnRyYW5zZm9ybT8uYXJncykgfHxcbiAgICAgICh0YWJsZUNvbmZpZyQgfCBhc3luYyk/LmZvb3Rlcj8uZW1wdHlDb250ZW50XG4gIH19XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNyYXdGb290ZXIgbGV0LXZhbHVlPVwidmFsdWVcIj5cbiAge3sgdmFsdWUgfHwgKHRhYmxlQ29uZmlnJCB8IGFzeW5jKT8uZm9vdGVyPy5lbXB0eUNvbnRlbnQgfX1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGVcbiAgI3RlbXBsYXRlUmVmXG4gIGxldC1yb3c9XCJyb3dcIlxuICBsZXQtY29sdW1uPVwiY29sdW1uXCJcbiAgbGV0LWluZGV4PVwiaW5kZXhcIlxuICBsZXQtdGVtcGxhdGVSZWY9XCJ0ZW1wbGF0ZVJlZlwiXG4gIGxldC1kYXRhPVwiZGF0YVwiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVJlZlwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgIHJvdzogcm93LFxuICAgICAgY29sOiBjb2x1bW4sXG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBkYXRhOiBkYXRhXG4gICAgfVwiXG4gID48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -513,8 +513,8 @@ class CoreComponent {
|
|
|
513
513
|
]).pipe(map(([page, table]) => {
|
|
514
514
|
var _a, _b, _c;
|
|
515
515
|
// determine last page
|
|
516
|
-
const lastPage = Math.ceil(table.info.
|
|
517
|
-
((_a = table.info.
|
|
516
|
+
const lastPage = Math.ceil(table.info.numberOfRecords /
|
|
517
|
+
((_a = table.info.pageSize) !== null && _a !== void 0 ? _a : (((_c = (_b = table.config) === null || _b === void 0 ? void 0 : _b.pagination) === null || _c === void 0 ? void 0 : _c.length) || table.info.numberOfRecords))) - 1;
|
|
518
518
|
// determine min/max position
|
|
519
519
|
return +page < 0 ? 0 : +page > lastPage ? lastPage : +page;
|
|
520
520
|
}), distinctUntilChanged(), tap((index) => this.pageChange.emit({ index })), shareReplay(1));
|