@porscheinformatik/material-addons 17.2.0 → 17.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/data-table/configuration/data-table-global-configuration.mjs +8 -3
- package/esm2022/lib/data-table/data-table.component.mjs +2 -2
- package/esm2022/lib/data-table/util/data-table-sort-util.mjs +32 -9
- package/fesm2022/porscheinformatik-material-addons.mjs +39 -11
- package/fesm2022/porscheinformatik-material-addons.mjs.map +1 -1
- package/lib/data-table/configuration/data-table-global-configuration.d.ts +15 -2
- package/lib/data-table/configuration/data-table-global-configuration.d.ts.map +1 -1
- package/lib/data-table/util/data-table-sort-util.d.ts +4 -2
- package/lib/data-table/util/data-table-sort-util.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -4,8 +4,13 @@ export const MAD_DATA_TABLE_GLOBAL_CONFIGURATION = new InjectionToken('mad-data-
|
|
|
4
4
|
export const MAD_DATA_TABL_GLOBAL_CONFIGURATION_PROVIDER = {
|
|
5
5
|
provide: MAD_DATA_TABLE_GLOBAL_CONFIGURATION,
|
|
6
6
|
deps: [[new Optional(), new SkipSelf(), new Inject(MAD_DATA_TABLE_GLOBAL_CONFIGURATION)]],
|
|
7
|
-
useFactory: (dataTableConfig) => dataTableConfig ?? {
|
|
8
|
-
dateTimeFormat: 'dd.MM.yyyy',
|
|
7
|
+
useFactory: (dataTableConfig) => !!dataTableConfig ?? {
|
|
8
|
+
dateTimeFormat: !!dataTableConfig?.dateTimeFormat ?? 'dd.MM.yyyy',
|
|
9
|
+
numberFormat: !!dataTableConfig?.numberFormat ?? {
|
|
10
|
+
decimalSeparator: ',',
|
|
11
|
+
groupingSeparator: '.',
|
|
12
|
+
units: ['€', '$'],
|
|
13
|
+
},
|
|
9
14
|
},
|
|
10
15
|
};
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS1nbG9iYWwtY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21hdGVyaWFsLWFkZG9ucy9zcmMvbGliL2RhdGEtdGFibGUvY29uZmlndXJhdGlvbi9kYXRhLXRhYmxlLWdsb2JhbC1jb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFjM0UsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUcsSUFBSSxjQUFjLENBQStCLHFDQUFxQyxDQUFDLENBQUM7QUFFM0ksMkdBQTJHO0FBQzNHLE1BQU0sQ0FBQyxNQUFNLDJDQUEyQyxHQUFHO0lBQ3pELE9BQU8sRUFBRSxtQ0FBbUM7SUFDNUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLFFBQVEsRUFBRSxFQUFFLElBQUksUUFBUSxFQUFFLEVBQUUsSUFBSSxNQUFNLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLFVBQVUsRUFBRSxDQUFDLGVBQThDLEVBQUUsRUFBRSxDQUM3RCxDQUFDLENBQUMsZUFBZSxJQUFJO1FBQ25CLGNBQWMsRUFBRSxDQUFDLENBQUMsZUFBZSxFQUFFLGNBQWMsSUFBSSxZQUFZO1FBQ2pFLFlBQVksRUFBRSxDQUFDLENBQUMsZUFBZSxFQUFFLFlBQVksSUFBSTtZQUMvQyxnQkFBZ0IsRUFBRSxHQUFHO1lBQ3JCLGlCQUFpQixFQUFFLEdBQUc7WUFDdEIsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztTQUNsQjtLQUNGO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsLCBTa2lwU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE51bWJlckZvcm1hdCB7XG4gIGRlY2ltYWxTZXBhcmF0b3I6IHN0cmluZztcbiAgZ3JvdXBpbmdTZXBhcmF0b3I6IHN0cmluZztcbiAgdW5pdHM6IHN0cmluZ1tdOyAvLyBlLmcuIHNpZ25zIGxpa2Ug4oKsLCAkXG59XG5cbi8vIHRoaXMgY291bGQgYWxzbyBiZSBleHRlbmRlZCB3aXRoIGUuZy4gbGFiZWxzIG9yIG90aGVyIGdlbmVyYWwgY29uZmlndXJhdGlvbiBzdHVmZlxuZXhwb3J0IGludGVyZmFjZSBEYXRhVGFibGVHbG9iYWxDb25maWd1cmF0aW9uIHtcbiAgZGF0ZVRpbWVGb3JtYXQ/OiBzdHJpbmc7XG4gIG51bWJlckZvcm1hdD86IE51bWJlckZvcm1hdDtcbn1cblxuZXhwb3J0IGNvbnN0IE1BRF9EQVRBX1RBQkxFX0dMT0JBTF9DT05GSUdVUkFUSU9OID0gbmV3IEluamVjdGlvblRva2VuPERhdGFUYWJsZUdsb2JhbENvbmZpZ3VyYXRpb24+KCdtYWQtZGF0YS10YWJsZS1nbG9iYWwtY29uZmlndXJhdGlvbicpO1xuXG4vLyBJZiB0aGVyZSBpcyBhIGN1c3RvbSBEQVRBX1RBQkxFX0NPTkZJR19QUk9WSURFUiBhdmFpbGFibGUsIHVzZSB0aGF0LiBPdGhlcndpc2UsIHByb3ZpZGUgdGhlIGRlZmF1bHQgb25lLlxuZXhwb3J0IGNvbnN0IE1BRF9EQVRBX1RBQkxfR0xPQkFMX0NPTkZJR1VSQVRJT05fUFJPVklERVIgPSB7XG4gIHByb3ZpZGU6IE1BRF9EQVRBX1RBQkxFX0dMT0JBTF9DT05GSUdVUkFUSU9OLFxuICBkZXBzOiBbW25ldyBPcHRpb25hbCgpLCBuZXcgU2tpcFNlbGYoKSwgbmV3IEluamVjdChNQURfREFUQV9UQUJMRV9HTE9CQUxfQ09ORklHVVJBVElPTildXSxcbiAgdXNlRmFjdG9yeTogKGRhdGFUYWJsZUNvbmZpZz86IERhdGFUYWJsZUdsb2JhbENvbmZpZ3VyYXRpb24pID0+XG4gICAgISFkYXRhVGFibGVDb25maWcgPz8ge1xuICAgICAgZGF0ZVRpbWVGb3JtYXQ6ICEhZGF0YVRhYmxlQ29uZmlnPy5kYXRlVGltZUZvcm1hdCA/PyAnZGQuTU0ueXl5eScsXG4gICAgICBudW1iZXJGb3JtYXQ6ICEhZGF0YVRhYmxlQ29uZmlnPy5udW1iZXJGb3JtYXQgPz8ge1xuICAgICAgICBkZWNpbWFsU2VwYXJhdG9yOiAnLCcsXG4gICAgICAgIGdyb3VwaW5nU2VwYXJhdG9yOiAnLicsXG4gICAgICAgIHVuaXRzOiBbJ+KCrCcsICckJ10sXG4gICAgICB9LFxuICAgIH0sXG59O1xuIl19
|
|
@@ -403,7 +403,7 @@ export class DataTableComponent {
|
|
|
403
403
|
applySortData() {
|
|
404
404
|
this.dataSource.sortData = this._useAsync
|
|
405
405
|
? DataTableSortUtil.sortNothing()
|
|
406
|
-
: DataTableSortUtil.sortData(this.dataTableGlobalConfig.dateTimeFormat);
|
|
406
|
+
: DataTableSortUtil.sortData(this.dataTableGlobalConfig.dateTimeFormat, this.dataTableGlobalConfig.numberFormat);
|
|
407
407
|
}
|
|
408
408
|
/** FILTER HANDLING */
|
|
409
409
|
get filterMode() {
|
|
@@ -722,4 +722,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImpor
|
|
|
722
722
|
type: ContentChild,
|
|
723
723
|
args: [DataTableTemplateExpandableCellDefinition]
|
|
724
724
|
}] } });
|
|
725
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC1hZGRvbnMvc3JjL2xpYi9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0ZXJpYWwtYWRkb25zL3NyYy9saWIvZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFJTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBUSxNQUFNLHdCQUF3QixDQUFDO0FBR3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQVUvRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saURBQWlELENBQUM7QUFJbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FB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LGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsdUJBQXVCO3NCQUEvQixLQUFLO2dCQUVPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBU08sYUFBYTtzQkFBekIsS0FBSztnQkFLTyxVQUFVO3NCQUF0QixLQUFLO2dCQUtPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBS08saUJBQWlCO3NCQUE3QixLQUFLO2dCQUlPLGVBQWU7c0JBQTNCLEtBQUs7Z0JBT08saUJBQWlCO3NCQUE3QixLQUFLO2dCQWFPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBUU8sa0JBQWtCO3NCQUE5QixLQUFLO2dCQUtPLGdCQUFnQjtzQkFBNUIsS0FBSztnQkFRTyx5QkFBeUI7c0JBQXJDLEtBQUs7Z0JBT08saUJBQWlCO3NCQUE3QixLQUFLO2dCQWNPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBT0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUVHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csMkJBQTJCO3NCQUFwQyxNQUFNO2dCQUNHLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFFa0IsU0FBUztzQkFBakMsU0FBUzt1QkFBQyxZQUFZO2dCQUNILElBQUk7c0JBQXZCLFNBQVM7dUJBQUMsT0FBTztnQkFDVSxNQUFNO3NCQUFqQyxTQUFTO3VCQUFDLGVBQWU7Z0JBQzBCLFVBQVU7c0JBQTdELGVBQWU7dUJBQUMsaUNBQWlDO2dCQUVsRCxhQUFhO3NCQURaLFlBQVk7dUJBQUMseUNBQXlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSwgTWF0VGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IsIE1hdFBhZ2luYXRvck1vZHVsZSwgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFNvcnQsIE1hdFNvcnRNb2R1bGUsIFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IERhdGFUYWJsZUNvbHVtbiB9IGZyb20gJy4vY29uZmlndXJhdGlvbi9kYXRhLXRhYmxlLWNvbHVtbic7XG5pbXBvcnQgeyBEYXRhVGFibGVBY3Rpb24gfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24vZGF0YS10YWJsZS1hY3Rpb24nO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IERhdGFUYWJsZUNvbHVtbnNNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vZGF0YS10YWJsZS1jb2x1bW5zLW1vZGFsL2RhdGEtdGFibGUtY29sdW1ucy1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgRGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbixcbiAgRGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbkNoYW5nZSxcbiAgRGF0YVRhYmxlRGlhbG9nRGF0YSxcbn0gZnJvbSAnLi9jb25maWd1cmF0aW9uL2RhdGEtdGFibGUtY29sdW1uLWRlZmluaXRpb24nO1xuaW1wb3J0IHsgRGF0YVRhYmxlUm93IH0gZnJvbSAnLi9jb25maWd1cmF0aW9uL2RhdGEtdGFibGUtcm93JztcbmltcG9ydCB7IERhdGFUYWJsZUhlYWRlclR5cGUgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24vZGF0YS10YWJsZS1oZWFkZXItdHlwZSc7XG5pbXBvcnQgeyBEYXRhVGFibGVGaWx0ZXJNb2RlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uL2RhdGEtdGFibGUtZmlsdGVyLW1vZGUnO1xuaW1wb3J0IHsgRGF0YVRhYmxlRmlsdGVyT2JqZWN0IH0gZnJvbSAnLi9kYXRhLXRhYmxlLWZpbHRlci9kYXRhLXRhYmxlLWZpbHRlci1vYmplY3QnO1xuaW1wb3J0IHsgRGF0YVRhYmxlRmlsdGVyIH0gZnJvbSAnLi9kYXRhLXRhYmxlLWZpbHRlci9kYXRhLXRhYmxlLWZpbHRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGF0YVRhYmxlU2VsZWN0aW9uRW1pdFR5cGUgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24vZGF0YS10YWJsZS1zZWxlY3Rpb24tZW1pdC10eXBlJztcbmltcG9ydCB7IERhdGFUYWJsZVNlbGVjdGlvbkVtaXRNb2RlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uL2RhdGEtdGFibGUtc2VsZWN0aW9uLWVtaXQtbW9kZSc7XG5pbXBvcnQgeyBEYXRhVGFibGVTZWxlY3Rpb25Nb2RlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uL2RhdGEtdGFibGUtc2VsZWN0aW9uLW1vZGUnO1xuaW1wb3J0IHsgRGF0YVRhYmxlU29ydFV0aWwgfSBmcm9tICcuL3V0aWwvZGF0YS10YWJsZS1zb3J0LXV0aWwnO1xuaW1wb3J0IHsgRGF0YVRhYmxlQWN0aW9uVXRpbCB9IGZyb20gJy4vdXRpbC9kYXRhLXRhYmxlLWFjdGlvbi11dGlsJztcbmltcG9ydCB7IERhdGFUYWJsZURhdGFVdGlsIH0gZnJvbSAnLi91dGlsL2RhdGEtdGFibGUtZGF0YS11dGlsJztcbmltcG9ydCB7IERhdGFUYWJsZUZpbHRlclV0aWwgfSBmcm9tICcuL3V0aWwvZGF0YS10YWJsZS1maWx0ZXItdXRpbCc7XG5pbXBvcnQge1xuICBEQVRBX1RBQkxFX1BFUlNJU1RFTkNFX1NFUlZJQ0VfUFJPVklERVIsXG4gIERhdGFUYWJsZVBlcnNpc3RlbmNlU2VydmljZSxcbiAgTUFEX0RBVEFfVEFCTEVfUEVSU0lTVEVOQ0VfU0VSVklDRSxcbn0gZnJvbSAnLi9kYXRhLXRhYmxlLXBlcnNpc3RlbmNlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgTUFEX0RBVEFfVEFCTEVfR0xPQkFMX0NPTkZJR1VSQVRJT04sXG4gIERhdGFUYWJsZUdsb2JhbENvbmZpZ3VyYXRpb24sXG4gIE1BRF9EQVRBX1RBQkxfR0xPQkFMX0NPTkZJR1VSQVRJT05fUFJPVklERVIsXG59IGZyb20gJy4vY29uZmlndXJhdGlvbi9kYXRhLXRhYmxlLWdsb2JhbC1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QmFkZ2VNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9iYWRnZSc7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1hdFJhZGlvTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcmFkaW8nO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLm1vZHVsZSc7XG5pbXBvcnQgeyBEYXRhVGFibGVGaWx0ZXJIZWFkZXIgfSBmcm9tICcuL2RhdGEtdGFibGUtZmlsdGVyL2RhdGEtdGFibGUtZmlsdGVyLWhlYWRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGF0YVRhYmxlVGVtcGxhdGVDb2x1bW5EZWZpbml0aW9uIH0gZnJvbSAnLi9kYXRhLXRhYmxlLXRlbXBsYXRlL2RhdGEtdGFibGUtdGVtcGxhdGUtY29sdW1uLWRlZmluaXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdGFUYWJsZVRlbXBsYXRlQ2VsbERlZmluaXRpb24gfSBmcm9tICcuL2RhdGEtdGFibGUtdGVtcGxhdGUvZGF0YS10YWJsZS10ZW1wbGF0ZS1jZWxsLWRlZmluaXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdGFUYWJsZVRlbXBsYXRlRXhwYW5kYWJsZUNlbGxEZWZpbml0aW9uIH0gZnJvbSAnLi9kYXRhLXRhYmxlLXRlbXBsYXRlL2RhdGEtdGFibGUtdGVtcGxhdGUtZXhwYW5kYWJsZS1jZWxsLWRlZmluaXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdGFUYWJsZVRlbXBsYXRlRXhwYW5kYWJsZUNvbHVtbkRlZmluaXRpb24gfSBmcm9tICcuL2RhdGEtdGFibGUtdGVtcGxhdGUvZGF0YS10YWJsZS10ZW1wbGF0ZS1leHBhbmRhYmxlLWNvbHVtbi1kZWZpbml0aW9uLmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hZC1kYXRhLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdkZXRhaWxFeHBhbmQnLCBbXG4gICAgICBzdGF0ZSgnY29sbGFwc2VkLHZvaWQnLCBzdHlsZSh7IGhlaWdodDogJzBweCcsIG1pbkhlaWdodDogJzAnIH0pKSxcbiAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicgfSkpLFxuICAgICAgdHJhbnNpdGlvbignZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpKSxcbiAgICBdKSxcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0TWVudU1vZHVsZSxcbiAgICBNYXRQYWdpbmF0b3JNb2R1bGUsXG4gICAgTWF0U29ydE1vZHVsZSxcbiAgICBNYXRUYWJsZU1vZHVsZSxcbiAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICBNYXRSYWRpb01vZHVsZSxcbiAgICBNYXRCYWRnZU1vZHVsZSxcbiAgICBEcmFnRHJvcE1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBEYXRhVGFibGVGaWx0ZXJIZWFkZXIsXG4gICAgRGF0YVRhYmxlRmlsdGVyLFxuICAgIERhdGFUYWJsZVRlbXBsYXRlQ29sdW1uRGVmaW5pdGlvbixcbiAgICBEYXRhVGFibGVUZW1wbGF0ZUNlbGxEZWZpbml0aW9uLFxuICAgIERhdGFUYWJsZVRlbXBsYXRlRXhwYW5kYWJsZUNvbHVtbkRlZmluaXRpb24sXG4gICAgRGF0YVRhYmxlVGVtcGxhdGVFeHBhbmRhYmxlQ2VsbERlZmluaXRpb24sXG4gIF0sXG4gIHByb3ZpZGVyczogW0RBVEFfVEFCTEVfUEVSU0lTVEVOQ0VfU0VSVklDRV9QUk9WSURFUiwgTUFEX0RBVEFfVEFCTF9HTE9CQUxfQ09ORklHVVJBVElPTl9QUk9WSURFUl0sXG59KVxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG5cbiAgLy8gVHJhbnNsYXRpb25zXG4gIEBJbnB1dCgpIGZpbHRlckxhYmVsID0gJ2NvbW1vbi5maWx0ZXInO1xuICBASW5wdXQoKSBmaWx0ZXJQbGFjZWhvbGRlciA9ICcnO1xuICBASW5wdXQoKSBmaWx0ZXJDb2x1bW5zTGFiZWwgPSAnRmlsdGVyJztcbiAgQElucHV0KCkgZmlsdGVyQ29sdW1uc1BsYWNlSG9sZGVyID0gJ0ZpbHRlciBhdmFpbGFibGUgY29sdW1ucyc7XG4gIEBJbnB1dCgpIHNob3dFbXB0eVRhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIG5vRGF0YVRleHQgPSAnTm8gbWF0Y2hpbmcgZGF0YSBmb3VuZCc7XG4gIEBJbnB1dCgpIGNvbHVtblNldHRpbmdzTW9kYWxUaXRsZUxhYmVsID0gJ0NvbHVtbiBzZXR0aW5ncyc7XG4gIEBJbnB1dCgpIHNlbGVjdGVkTGFiZWwgPSAnU2VsZWN0ZWQgY29sdW1ucyc7XG4gIEBJbnB1dCgpIGF2YWlsYWJsZUxhYmVsID0gJ0F2YWlsYWJsZSBjb2x1bW5zJztcbiAgQElucHV0KCkgc2F2ZUxhYmVsID0gJ1NhdmUnO1xuICBASW5wdXQoKSBkZWxldGVMYWJlbCA9ICdEZWxldGUnO1xuICBASW5wdXQoKSBjYW5jZWxMYWJlbCA9ICdDYW5jZWwnO1xuICBASW5wdXQoKSBpbmZvVGV4dExhYmVsID0gJ0RyYWcgYW5kIGRyb3AgYSBjb2x1bW4gdG8gc2VsZWN0IG9yIHJlb3JkZXIgaXQuJztcbiAgQElucHV0KCkgdGFibGVDbGFzczogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHRyYW5zbGF0ZUxhYmVscyA9IHRydWU7XG5cbiAgQElucHV0KCkgc2V0IHVzZUFzeW5jKHVzZUFzeW5jOiBib29sZWFuKSB7XG4gICAgdGhpcy5fdXNlQXN5bmMgPSB1c2VBc3luYztcbiAgICB0aGlzLmFwcGx5U29ydERhdGEoKTtcbiAgfVxuICBASW5wdXQoKSBzdGF0ZWZ1bCA9IGZhbHNlO1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgdGFibGVEYXRhOiBhbnk7XG4gIEBJbnB1dCgpIGlkR2VuZXJhdG9yOiBhbnk7XG4gIEBJbnB1dCgpIHBhcmVudElkR2VuZXJhdG9yOiBhbnk7XG5cbiAgQElucHV0KCkgZGVmYXVsdFNvcnQ6IFNvcnQ7XG4gIEBJbnB1dCgpIGV4dGVybmFsRmlsdGVyOiBhbnk7XG4gIEBJbnB1dCgpIHBhZ2luYXRpb25FbmFibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBhZ2U6IFBhZ2VFdmVudCA9IHsgcGFnZUluZGV4OiAwLCBwYWdlU2l6ZTogNTAsIGxlbmd0aDogMCB9O1xuICBASW5wdXQoKSBwYWdlU2l6ZU9wdGlvbnMgPSBbNSwgMTAsIDE1XTtcblxuICBASW5wdXQoKSBhY3Rpb25zOiBEYXRhVGFibGVBY3Rpb25bXSA9IFtdO1xuICBASW5wdXQoKSBzZWxlY3Rpb25FbWl0VHlwZTogRGF0YVRhYmxlU2VsZWN0aW9uRW1pdFR5cGUgPSAnSUQnO1xuICBASW5wdXQoKSBzaG93RGVsZXRlRmlsdGVyQWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgZGlzYWJsZVJvd0NsaWNrOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZGVsZXRlRGVmaW5pdGlvbkFsbG93ZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKSBzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbjogc3RyaW5nW10gfCBhbnlbXSkge1xuICAgIHRoaXMuX3NlbGVjdGlvbiA9IHNlbGVjdGlvbjtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbk1vZGVsKHNlbGVjdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogUGxlYXNlIHVzZSBcImZpbHRlck1vZGVcIiBpbnN0ZWFkXG4gICAqL1xuICBASW5wdXQoKSBzZXQgZmlsdGVyRW5hYmxlZChpc0ZpbHRlckVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9maWx0ZXJNb2RlID0gaXNGaWx0ZXJFbmFibGVkID8gJ1RBQkxFX0JBU0VEJyA6ICdOT05FJztcbiAgICB0aGlzLmFwcGx5RmlsdGVyUHJlZGljYXRlKCk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZmlsdGVyTW9kZShmaWx0ZXJNb2RlOiBEYXRhVGFibGVGaWx0ZXJNb2RlKSB7XG4gICAgdGhpcy5fZmlsdGVyTW9kZSA9IGZpbHRlck1vZGU7XG4gICAgdGhpcy5hcHBseUZpbHRlclByZWRpY2F0ZSgpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZpbHRlclZhbHVlKGZpbHRlclZhbHVlOiBzdHJpbmcgfCBEYXRhVGFibGVGaWx0ZXJPYmplY3QgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9maWx0ZXJWYWx1ZSA9IGZpbHRlclZhbHVlO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXJWYWx1ZSh0aGlzLl9maWx0ZXJWYWx1ZSk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZXh0ZXJuYWxQYWdpbmF0b3IocGFnaW5hdG9yOiBhbnkpIHtcbiAgICB0aGlzLmV4dFBhZ2luYXRvciA9IHBhZ2luYXRvcjtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBkZWZhdWx0UGFnZVNpemUoZGVmYXVsdFNpemU6IG51bWJlcikge1xuICAgIHRoaXMucGFnZSA9IHtcbiAgICAgIC4uLnRoaXMucGFnZSxcbiAgICAgIHBhZ2VTaXplOiBkZWZhdWx0U2l6ZSxcbiAgICB9O1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHNlbGVjdGlvbkVtaXRNb2RlKHNlbGVjdGlvbkVtaXRNb2RlOiBEYXRhVGFibGVTZWxlY3Rpb25FbWl0TW9kZSkge1xuICAgIHRoaXMuX3NlbGVjdGlvbkVtaXRNb2RlID0gc2VsZWN0aW9uRW1pdE1vZGU7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogVGhpcyBmdW5jdGlvbiBtaXhlcyB1cCAyIHJlc3BvbnNpYmlsaXRpZXM6XG4gICAqICAtIGRldGVybWluaW5nIGlmIGFjdGlvbnMgc2hvdWxkIGJlIGRpc3BsYXllZCAvIGhhbmRsZWRcbiAgICogIC0gZGV0ZXJtaW5pbmcgd2hldGhlciBhY3Rpb25zIGFyZSByb3cgYmFzZWQgKHNpbmdsZSkgb3IgdGFibGUgYmFzZWQgKGJhdGNoKVxuICAgKiBQbGVhc2UgdXNlIGEgY29tYmluYXRpb24gb2YgXCJzZWxlY3Rpb25FbWl0TW9kZVwiIGFuZCBcInNlbGVjdGlvbk1vZGVcIiBpbnN0ZWFkOlxuICAgKiAgLSBzZWxlY3Rpb25FbWl0TW9kZSBkZXRlcm1pbmVzIGhvdyBzZWxlY3RlZCBpdGVtcyBhcmUgaGFuZGxlZCAoYXMgcGFydCBvZiBhY3Rpb25zLCBhcyBzZWxlY3Rpb25zIG9yIG5vdCBhdCBhbGwpXG4gICAqICAtIHNlbGVjdGlvbk1vZGUgZGV0ZXJtaW5lcyBpZiBzZWxlY3RlZCBpdGVtcyBhcmUgdHJlYXRlZCBzZXBhcmF0ZWx5IChzaW5nbGUpIG9yIHRvZ2V0aGVyIChiYXRjaClcbiAgICovXG4gIEBJbnB1dCgpIHNldCBmb3JjZU1vZGUoc2VsZWN0aW9uTW9kZTogc3RyaW5nKSB7XG4gICAgaWYgKHNlbGVjdGlvbk1vZGUgPT09ICdTSU5HTEUnIHx8IHNlbGVjdGlvbk1vZGUgPT09ICdCQVRDSCcpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbkVtaXRNb2RlID0gJ09OX0FDVElPTic7XG4gICAgICB0aGlzLl9mb3JjZVNlbGVjdGlvbk1vZGUgPSA8RGF0YVRhYmxlU2VsZWN0aW9uTW9kZT5zZWxlY3Rpb25Nb2RlO1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZm9yY2VTZWxlY3Rpb25Nb2RlKHNlbGVjdGlvbk1vZGU6IERhdGFUYWJsZVNlbGVjdGlvbk1vZGUpIHtcbiAgICB0aGlzLl9mb3JjZVNlbGVjdGlvbk1vZGUgPSBzZWxlY3Rpb25Nb2RlO1xuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZGlzcGxheWVkQ29sdW1ucyhjb2xzOiBEYXRhVGFibGVDb2x1bW5bXSkge1xuICAgIGlmICghdGhpcy5kaXNwbGF5ZWRDb2x1bW5EZWZpbml0aW9uKSB7XG4gICAgICB0aGlzLmNvbHVtbnMgPSBjb2xzID8gWy4uLmNvbHNdIDogW107XG4gICAgICB0aGlzLmNvbHVtbklkcyA9IHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmlkKTtcbiAgICAgIHRoaXMuY29sdW1uSWRzLnVuc2hpZnQodGhpcy5BQ1RJT05fQ09MVU1OX05BTUUpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBkaXNwbGF5ZWRDb2x1bW5EZWZpbml0aW9uKGRlZjogRGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbikge1xuICAgIHRoaXMuY29sdW1ucyA9IGRlZi5kaXNwbGF5ZWRDb2x1bW5zO1xuICAgIHRoaXMuY29sdW1uSWRzID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uaWQpO1xuICAgIHRoaXMuY29sdW1uSWRzLnVuc2hpZnQodGhpcy5BQ1RJT05fQ09MVU1OX05BTUUpO1xuICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1uRGVmaW5pdGlvbiA9IGRlZjtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBjb2x1bW5EZWZpbml0aW9ucyhkZWZpbml0aW9uczogRGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbltdKSB7XG4gICAgdGhpcy5lZGl0YWJsZUNvbHVtbkRlZmluaXRpb25zID0gW107XG4gICAgdGhpcy52aWV3YWJsZUNvbHVtbkRlZmluaXRpb25zID0gW107XG4gICAgdGhpcy5fYWxsQ29sdW1uRGVmaW5pdGlvbnMgPSBbLi4uZGVmaW5pdGlvbnNdO1xuICAgIGZvciAoY29uc3QgZGVmaW5pdGlvbiBvZiBkZWZpbml0aW9ucykge1xuICAgICAgaWYgKGRlZmluaXRpb24uZWRpdGFibGUpIHtcbiAgICAgICAgdGhpcy5lZGl0YWJsZUNvbHVtbkRlZmluaXRpb25zLnB1c2goZGVmaW5pdGlvbik7XG4gICAgICB9XG4gICAgICBpZiAoZGVmaW5pdGlvbi5kaXNwbGF5ZWRDb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMudmlld2FibGVDb2x1bW5EZWZpbml0aW9ucy5wdXNoKGRlZmluaXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBhbGxDb2x1bW5zKGFsbENvbHVtbnM6IERhdGFUYWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5fYWxsQXZhaWxhYmxlQ29sdW1ucyA9IGFsbENvbHVtbnM7XG4gICAgaWYgKGFsbENvbHVtbnMgJiYgdGhpcy5fc2hvd0NvbHVtbk1vZGFsKSB7XG4gICAgICB0aGlzLm9wZW5Db2x1bW5Nb2RhbCgpO1xuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKSBhY3Rpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVRhYmxlQWN0aW9uPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIEBPdXRwdXQoKSBzb3J0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnQ+KCk7XG4gIEBPdXRwdXQoKSBmaWx0ZXJFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgRGF0YVRhYmxlRmlsdGVyT2JqZWN0IHwgdW5kZWZpbmVkPigpO1xuICBAT3V0cHV0KCkgcGFnZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpIGFsbENvbHVtbnNFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGNvbHVtbkRlZmluaXRpb25DaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbkNoYW5nZT4oKTtcbiAgQE91dHB1dCgpIHZpZXdEZWZpbml0aW9uQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFUYWJsZUNvbHVtbkRlZmluaXRpb24+KCk7XG5cbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuICBAVmlld0NoaWxkKE1hdFNvcnQpIHNvcnQ6IE1hdFNvcnQ7XG4gIEBWaWV3Q2hpbGQoRGF0YVRhYmxlRmlsdGVyKSBmaWx0ZXI6IERhdGFUYWJsZUZpbHRlcjtcbiAgQENvbnRlbnRDaGlsZHJlbihEYXRhVGFibGVUZW1wbGF0ZUNvbHVtbkRlZmluaXRpb24pIGNvbHVtbkRlZnM6IFF1ZXJ5TGlzdDxEYXRhVGFibGVUZW1wbGF0ZUNvbHVtbkRlZmluaXRpb24+O1xuICBAQ29udGVudENoaWxkKERhdGFUYWJsZVRlbXBsYXRlRXhwYW5kYWJsZUNlbGxEZWZpbml0aW9uKVxuICBleHBhbmRhYmxlRGVmOiBEYXRhVGFibGVUZW1wbGF0ZUV4cGFuZGFibGVDZWxsRGVmaW5pdGlvbiB8IHVuZGVmaW5lZDtcblxuICBkYXRhU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8YW55W10+O1xuICBhbGxTZWxlY3RlZCA9IGZhbHNlO1xuXG4gIGV4dFBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuXG4gIHJlYWRvbmx5IEFDVElPTl9DT0xVTU5fTkFNRSA9ICdfX2FjdGlvbl9fJztcbiAgdGFibGVBY3Rpb25zOiBEYXRhVGFibGVBY3Rpb25bXVtdID0gW107XG4gIHJvd0FjdGlvbnM6IERhdGFUYWJsZUFjdGlvbltdID0gW107XG5cbiAgY29sdW1uczogRGF0YVRhYmxlQ29sdW1uW10gPSBbXTtcbiAgY29sdW1uSWRzOiBzdHJpbmdbXTtcblxuICBleHBhbmRlZEVsZW1lbnQ6IERhdGFUYWJsZUNvbHVtbiB8IG51bGw7XG5cbiAgZWRpdGFibGVDb2x1bW5EZWZpbml0aW9uczogRGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbltdO1xuICB2aWV3YWJsZUNvbHVtbkRlZmluaXRpb25zOiBEYXRhVGFibGVDb2x1bW5EZWZpbml0aW9uW107XG5cbiAgcHJpdmF0ZSBfdXNlQXN5bmM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIF9yb3dNYXAgPSBuZXcgTWFwPHN0cmluZywgRGF0YVRhYmxlUm93PigpO1xuICBwcml2YXRlIF9zZWxlY3Rpb25Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxzdHJpbmc+KHRydWUpO1xuICBwcml2YXRlIF9zZWxlY3Rpb246IHN0cmluZ1tdIHwgYW55W107XG5cbiAgcHJpdmF0ZSBfZm9yY2VTZWxlY3Rpb25Nb2RlOiBEYXRhVGFibGVTZWxlY3Rpb25Nb2RlO1xuICBwcml2YXRlIF9zZWxlY3Rpb25FbWl0TW9kZTogRGF0YVRhYmxlU2VsZWN0aW9uRW1pdE1vZGUgPSAnTk9ORSc7XG4gIHByaXZhdGUgX2ZpbHRlck1vZGU6IERhdGFUYWJsZUZpbHRlck1vZGUgPSAnTk9ORSc7XG4gIHByaXZhdGUgX2ZpbHRlclZhbHVlOiBzdHJpbmcgfCBEYXRhVGFibGVGaWx0ZXJPYmplY3QgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBfYWxsQ29sdW1uRGVmaW5pdGlvbnM6IERhdGFUYWJsZUNvbHVtbkRlZmluaXRpb25bXSA9IFtdO1xuICBwcml2YXRlIF9hbGxBdmFpbGFibGVDb2x1bW5zOiBEYXRhVGFibGVDb2x1bW5bXTtcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRDb2x1bW5EZWZpbml0aW9uOiBEYXRhVGFibGVDb2x1bW5EZWZpbml0aW9uO1xuICBwcml2YXRlIF9zaG93Q29sdW1uTW9kYWwgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIG1hdERpYWxvZzogTWF0RGlhbG9nLFxuICAgIEBJbmplY3QoTUFEX0RBVEFfVEFCTEVfUEVSU0lTVEVOQ0VfU0VSVklDRSkgcHJpdmF0ZSBwZXJzaXN0ZW5jZVNlcnZpY2U6IERhdGFUYWJsZVBlcnNpc3RlbmNlU2VydmljZSxcbiAgICBASW5qZWN0KE1BRF9EQVRBX1RBQkxFX0dMT0JBTF9DT05GSUdVUkFUSU9OKSBwcml2YXRlIGRhdGFUYWJsZUdsb2JhbENvbmZpZzogRGF0YVRhYmxlR2xvYmFsQ29uZmlndXJhdGlvbixcbiAgKSB7XG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl91c2VBc3luYykge1xuICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XG4gICAgfVxuICAgIHRoaXMuYXBwbHlTb3J0RGF0YSgpO1xuICAgIHRoaXMuaW5pdFN0YXRlKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKCd0YWJsZURhdGEnIGluIGNoYW5nZXMpIHtcbiAgICAgIHRoaXMudXBkYXRlRGF0YVRhYmxlRGF0YSgpO1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb25Nb2RlbCh0aGlzLmdldFNlbGVjdGlvbignSUQnKS5sZW5ndGggPyB0aGlzLmdldFNlbGVjdGlvbignSUQnKSA6IHRoaXMuX3NlbGVjdGlvbik7XG4gICAgICBpZiAodGhpcy5zaG93QWxsKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUGFnaW5hdG9yKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgnaWRHZW5lcmF0b3InIGluIGNoYW5nZXMgfHwgJ2Rpc3BsYXllZENvbHVtbnMnIGluIGNoYW5nZXMpIHtcbiAgICAgIHRoaXMudXBkYXRlRGF0YVRhYmxlRGF0YSgpO1xuICAgIH1cblxuICAgIC8vIHBlcmZvcm1hbmNlIHJlYXNvbnMgKHNhbWUgYmVoYXZpb3VyIGNvdWxkIGJlIGFjaGl2ZWQgaW4gZ2V0dGVycylcbiAgICBpZiAoJ2ZvcmNlTW9kZScgaW4gY2hhbmdlcyB8fCAnZm9yY2VTZWxlY3Rpb25Nb2RlJyBpbiBjaGFuZ2VzIHx8ICdhY3Rpb25zJyBpbiBjaGFuZ2VzKSB7XG4gICAgICBjb25zdCBhY3Rpb25zID0gRGF0YVRhYmxlQWN0aW9uVXRpbC5nZXREaXNwbGF5QWN0aW9ucyh0aGlzLmFjdGlvbnMsIHRoaXMuc2VsZWN0aW9uTW9kZSk7XG4gICAgICB0aGlzLnJvd0FjdGlvbnMgPSBhY3Rpb25zLnJvd0FjdGlvbnM7XG4gICAgICB0aGlzLnRhYmxlQWN0aW9ucyA9IGFjdGlvbnMuZ3JvdXBlZFRhYmxlQWN0aW9ucztcbiAgICB9XG4gIH1cblxuICAvKiogVEFCTEUgRElTUExBWSBIQU5ETElORyAqL1xuXG4gIHB1YmxpYyBnZXREYXRhVGFibGVIZWFkZXJUeXBlKGNvbHVtbjogRGF0YVRhYmxlQ29sdW1uKTogRGF0YVRhYmxlSGVhZGVyVHlwZSB7XG4gICAgaWYgKGNvbHVtbi5pc1NvcnRhYmxlICYmICFjb2x1bW4uaXNGaWx0ZXJhYmxlKSB7XG4gICAgICByZXR1cm4gJ1NPUlQnO1xuICAgIH1cbiAgICBpZiAoIWNvbHVtbi5pc1NvcnRhYmxlICYmIGNvbHVtbi5pc0ZpbHRlcmFibGUpIHtcbiAgICAgIHJldHVybiAnRklMVEVSJztcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5pc1NvcnRhYmxlICYmIGNvbHVtbi5pc0ZpbHRlcmFibGUpIHtcbiAgICAgIHJldHVybiAnU09SVF9BTkRfRklMVEVSJztcbiAgICB9XG4gICAgcmV0dXJuICdQTEFJTic7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VzdG9tQ2VsbFRlbXBsYXRlKGNvbHVtbklkOiBzdHJpbmcpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB7XG4gICAgY29uc3QgY29sdW1uRGVmID0gdGhpcy5jb2x1bW5EZWZzLmZpbmQoKGl0KSA9PiBpdC5tYWRDb2x1bW5EZWYgPT09IGNvbHVtbklkKTtcbiAgICByZXR1cm4gY29sdW1uRGVmICYmIGNvbHVtbkRlZi5jZWxsRGVmID8gY29sdW1uRGVmLmNlbGxEZWYuZ2V0Q2VsbFRlbXBsYXRlKCkgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldEN1c3RvbUV4cGFuZGFibGVUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kYWJsZURlZj8uZ2V0Q2VsbFRlbXBsYXRlKCkgfHwgbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZXhwYW5kYWJsZUNvbHVtbkRlZigpIHtcbiAgICByZXR1cm4gdGhpcy5leHBhbmRhYmxlRGVmPy5jb2x1bW5EZWYubWFkRXhwYW5kYWJsZUNvbHVtbkRlZiB8fCAnJztcbiAgfVxuXG4gIHB1YmxpYyBvbkV4cGFuZChldmVudDogTW91c2VFdmVudCwgZWxlbWVudDogRGF0YVRhYmxlQ29sdW1uKSB7XG4gICAgdGhpcy5leHBhbmRlZEVsZW1lbnQgPSB0aGlzLmV4cGFuZGVkRWxlbWVudCA9PT0gZWxlbWVudCA/IG51bGwgOiBlbGVtZW50O1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLyoqIEFDVElPTiBCVVRUT04gRElTUExBWSBIQU5ETElORyAqL1xuXG4gIHB1YmxpYyBoYXNWaXNpYmxlUm93QWN0aW9ucyhkaXNwbGF5ZWREYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMucm93QWN0aW9ucy5ldmVyeSgoYWN0aW9uKSA9PiB0aGlzLmlzSGlkZGVuRm9yRGF0YShhY3Rpb24sIFt0aGlzLl9yb3dNYXAuZ2V0KGRpc3BsYXllZERhdGEucm93SWQpPy5hY3R1YWxEYXRhXSkpO1xuICB9XG5cbiAgcHVibGljIGlzSGlkZGVuKGFjdGlvbjogRGF0YVRhYmxlQWN0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNIaWRkZW5Gb3JEYXRhKGFjdGlvbiwgdGhpcy5nZXRTZWxlY3Rpb24oJ0RBVEEnKSk7XG4gIH1cblxuICBwcml2YXRlIGlzSGlkZGVuRm9yRGF0YShhY3Rpb246IERhdGFUYWJsZUFjdGlvbiwgZGF0YTogYW55W10pIHtcbiAgICByZXR1cm4gISFhY3Rpb24uaXNIaWRkZW4gJiYgYWN0aW9uLmlzSGlkZGVuKGRhdGEpO1xuICB9XG5cbiAgcHVibGljIGlzRGlzYWJsZWQoYWN0aW9uOiBEYXRhVGFibGVBY3Rpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0Rpc2FibGVkRm9yQWN0aW9uVHlwZShhY3Rpb24udHlwZSkgfHwgKCEhYWN0aW9uLmlzRGlzYWJsZWQgJiYgYWN0aW9uLmlzRGlzYWJsZWQodGhpcy5nZXRTZWxlY3Rpb24oJ0RBVEEnKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0Rpc2FibGVkRm9yQWN0aW9uVHlwZShhY3Rpb25UeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKGFjdGlvblR5cGUpIHtcbiAgICAgIGNhc2UgJ1NJTkdMRSc6XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQ291bnQgIT09IDE7XG4gICAgICBjYXNlICdCQVRDSCc6XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQ291bnQgPCAxO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3RlZENvdW50KGFjdGlvblR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY291bnQgPSB0aGlzLnNlbGVjdGVkQ291bnQ7XG4gICAgaWYgKGFjdGlvblR5cGUgIT09ICdCQVRDSCcgfHwgY291bnQgPCAyKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBgICgke2NvdW50fSlgO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgc2VsZWN0ZWRDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbD8uc2VsZWN0ZWQgPyB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5sZW5ndGggOiAwO1xuICB9XG5cbiAgLyoqIFRBQkxFIERBVEEgQ0hBTkdFIEhBTkRMSU5HICovXG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRhVGFibGVEYXRhKCk6IHZvaWQge1xuICAgIC8vIGRvIG5vdCBtYWtlIHRoaXMgZnVuY3Rpb24gaW1tdXRhYmxlIC0gd2UgZGVzcGFyYXRlbHkgbmVlZCB0aGUgcmVmZXJlbmNlIG9mIHJvd01hcCB0byBzdGF5IHRoZSBzYW1lXG4gICAgRGF0YVRhYmxlRGF0YVV0aWwudXBkYXRlUm93TWFwKHRoaXMuX3Jvd01hcCwgdGhpcy50YWJsZURhdGEsIHRoaXMuY29sdW1ucywgdGhpcy5pZEdlbmVyYXRvciwgdGhpcy5wYXJlbnRJZEdlbmVyYXRvcik7XG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBBcnJheS5mcm9tKHRoaXMuX3Jvd01hcC52YWx1ZXMoKSkubWFwKChpdCkgPT4gaXQuZGlzcGxheWVkRGF0YSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGlvbk1vZGVsKHNlbGVjdGlvbjogc3RyaW5nW10gfCBhbnlbXSkge1xuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgc2VsZWN0aW9uPy5mb3JFYWNoKChpdCkgPT4ge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX3Jvd01hcC5nZXQoaXQpIHx8IFsuLi50aGlzLl9yb3dNYXAudmFsdWVzKCldLmZpbmQoKHJvdykgPT4gcm93LmFjdHVhbERhdGEgPT09IGl0KTtcbiAgICAgIGlmICghIWl0ZW0pIHtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkV2ZW50KGl0ZW0uaWQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZW1pdFNlbGVjdGlvbigpO1xuICB9XG5cbiAgLyoqIEFDVElPTiAmIFNFTEVDVElPTiBIQU5ETElORyAqL1xuXG4gIHB1YmxpYyBnZXQgc2VsZWN0aW9uRW1pdE1vZGUoKTogRGF0YVRhYmxlU2VsZWN0aW9uRW1pdE1vZGUge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25FbWl0TW9kZSA9PT0gJ05PTkUnICYmICEhdGhpcy5hY3Rpb25zLmxlbmd0aCA/ICdPTl9BQ1RJT04nIDogdGhpcy5fc2VsZWN0aW9uRW1pdE1vZGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlbGVjdGlvbk1vZGUoKTogRGF0YVRhYmxlU2VsZWN0aW9uTW9kZSB7XG4gICAgcmV0dXJuICEhdGhpcy5fZm9yY2VTZWxlY3Rpb25Nb2RlID8gdGhpcy5fZm9yY2VTZWxlY3Rpb25Nb2RlIDogdGhpcy5hY3Rpb25zLmZpbmQoKGl0KSA9PiBpdC50eXBlID09PSAnQkFUQ0gnKSA/ICdCQVRDSCcgOiAnU0lOR0xFJztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmlsdGVyZWRQYWdlRGF0YSgpOiBhbnlbXSB7XG4gICAgLy8gb25seSB1c2UgZmlsdGVyZWQgZGF0YVxuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2U/Ll9wYWdlRGF0YSh0aGlzLmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hvd0FjdGlvbkNvbHVtbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISh0aGlzLnNlbGVjdGlvbkVtaXRNb2RlID09PSAnTk9ORScgfHwgdGhpcy5oaWRlQWN0aW9uQ29sdW1uKSB8fCAhIXRoaXMuZXhwYW5kYWJsZURlZjtcbiAgfVxuXG4gIHB1YmxpYyBzaG93Q2hlY2tib3goZGlzcGxheWVkRGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFkaXNwbGF5ZWREYXRhLnBhcmVudElkICYmIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ0JBVENIJyAmJiAhdGhpcy5oaWRlQWN0aW9uQ29sdW1uO1xuICB9XG5cbiAgcHVibGljIHNob3dSb3dBY3Rpb25JY29uKGRpc3BsYXllZERhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhZGlzcGxheWVkRGF0YS5wYXJlbnRJZCAmJiB0aGlzLnNlbGVjdGlvbkVtaXRNb2RlID09PSAnT05fQUNUSU9OJyAmJiB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdTSU5HTEUnICYmICF0aGlzLmhpZGVBY3Rpb25Db2x1bW47XG4gIH1cblxuICBwdWJsaWMgc2hvd1JhZGlvQnV0dG9uKGRpc3BsYXllZERhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhZGlzcGxheWVkRGF0YS5wYXJlbnRJZCAmJiB0aGlzLnNlbGVjdGlvbkVtaXRNb2RlID09PSAnT05fU0VMRUNUSU9OJyAmJiB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdTSU5HTEUnO1xuICB9XG5cbiAgcHVibGljIHNob3dFeHBhbmRhYmxlQnV0dG9uKGRpc3BsYXllZERhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhZGlzcGxheWVkRGF0YS5wYXJlbnRJZCAmJiAhIXRoaXMuZXhwYW5kYWJsZURlZjtcbiAgfVxuXG4gIHB1YmxpYyBpc1NlbGVjdGVkKHJvd0lkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChyb3dJZCk7XG4gIH1cblxuICBwdWJsaWMgb25Ub2dnbGVTZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgLy8gY2xlYXIgYWxsIHNlbGVjdGlvbiBmaXJzdFxuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgLy8gdG9nZ2xlIGFsbCBjaGVja2JveFxuICAgIHRoaXMuYWxsU2VsZWN0ZWQgPSAhdGhpcy5hbGxTZWxlY3RlZDtcbiAgICBpZiAodGhpcy5hbGxTZWxlY3RlZCkge1xuICAgICAgLy8gc2VsZWN0IGFsbCByb3dzIG9mIHRoZSBjdXJyZW50IHBhZ2VcbiAgICAgIHRoaXMuZmlsdGVyZWRQYWdlRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgaWYgKCFyb3cucGFyZW50SWQpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3Qocm93LnJvd0lkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuZW1pdFNlbGVjdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG9uQWN0aW9uRXZlbnQoYWN0aW9uOiBEYXRhVGFibGVBY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBlbWl0QWN0aW9uID0geyAuLi5hY3Rpb24gfTtcbiAgICBpZiAoISFlbWl0QWN0aW9uICYmIHRoaXMuc2VsZWN0aW9uRW1pdE1vZGUgIT09ICdOT05FJykge1xuICAgICAgZW1pdEFjdGlvbi5zZWxlY3RlZCA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRoaXMuc2VsZWN0aW9uRW1pdFR5cGUpO1xuICAgICAgdGhpcy5hY3Rpb25FdmVudC5lbWl0KGVtaXRBY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdGlvbkV2ZW50KGlkOiBhbnkpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0aW9uTW9kZSkge1xuICAgICAgY2FzZSAnQkFUQ0gnOlxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC50b2dnbGUoaWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1NJTkdMRSc6XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnRvZ2dsZShpZCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblJvd0V2ZW50KGV2ZW50OiBNb3VzZUV2ZW50LCByb3c6IGFueSwgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uRW1pdE1vZGUgPT09ICdOT05FJyB8fCByb3c/LnBhcmVudElkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vblNlbGVjdGlvbkV2ZW50KHJvdy5yb3dJZCk7XG4gICAgdGhpcy5wcm9jZXNzU2VsZWN0aW9uKGV2ZW50LCBhY3Rpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEFjdGlvbigpOiBEYXRhVGFibGVBY3Rpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbkVtaXRNb2RlICE9PSAnTk9ORScgPyB0aGlzLnJvd0FjdGlvbnNbMF0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldCBoaWRlQWN0aW9uQ29sdW1uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbkVtaXRNb2RlID09PSAnT05fQUNUSU9OJyAmJiB0aGlzLmFjdGlvbnMuZXZlcnkoKGl0KSA9PiBpdC50eXBlID09PSAnTk9ORScpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU2VsZWN0aW9uKGV2ZW50OiBNb3VzZUV2ZW50LCBhY3Rpb24/OiBEYXRhVGFibGVBY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnNlbGVjdGlvbkVtaXRNb2RlID09PSAnT05fQUNUSU9OJyAmJlxuICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnU0lOR0xFJyAmJlxuICAgICAgISFhY3Rpb24gJiZcbiAgICAgICFEYXRhVGFibGVDb21wb25lbnQuaXNDbGlja09uUm93TWVudUljb24oZXZlbnQpXG4gICAgKSB7XG4gICAgICB0aGlzLm9uQWN0aW9uRXZlbnQoYWN0aW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFNlbGVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25FbWl0TW9kZSA9PT0gJ09OX1NFTEVDVElPTicpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uRXZlbnQuZW1pdCh0aGlzLmdldFNlbGVjdGlvbih0aGlzLnNlbGVjdGlvbkVtaXRUeXBlKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3Rpb24oc2VsZWN0aW9uRW1pdFR5cGU6IERhdGFUYWJsZVNlbGVjdGlvbkVtaXRUeXBlKTogYW55W10ge1xuICAgIGNvbnN0IHNlbGVjdGlvbjogYW55W10gPSBbXTtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5mb3JFYWNoKChpdCkgPT5cbiAgICAgIC8vIGlmIElELWdlbmVyYXRvciBpcyBwcm92aWRlZCwgcmV0dXJuIHRoZSBJRCwgZWxzZSByZXR1cm4gdGhlIEFDVFVBTCBkYXRhXG4gICAgICBzZWxlY3Rpb24ucHVzaCh0aGlzLmlkR2VuZXJhdG9yICYmIHNlbGVjdGlvbkVtaXRUeXBlID09PSAnSUQnID8gaXQgOiB0aGlzLl9yb3dNYXAuZ2V0KGl0KT8uYWN0dWFsRGF0YSksXG4gICAgKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc0NsaWNrT25Sb3dNZW51SWNvbihldmVudDogTW91c2VFdmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoZXZlbnQ/LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/LmNsYXNzTGlzdC5jb250YWlucygnbWF0LWljb24nKTtcbiAgfVxuXG4gIC8qKiBTT1JUIEhBTkRMSU5HICovXG5cbiAgb25Tb3J0aW5nRXZlbnQoc29ydDogU29ydCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl91c2VBc3luYykge1xuICAgICAgdGhpcy5zb3J0RXZlbnQuZW1pdChzb3J0KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZWZ1bCkge1xuICAgICAgdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2Uuc2F2ZVNvcnQodGhpcy5pZCwgc29ydCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNvcnREYXRhKCkge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0RGF0YSA9IHRoaXMuX3VzZUFzeW5jXG4gICAgICA/IERhdGFUYWJsZVNvcnRVdGlsLnNvcnROb3RoaW5nKClcbiAgICAgIDogRGF0YVRhYmxlU29ydFV0aWwuc29ydERhdGEodGhpcy5kYXRhVGFibGVHbG9iYWxDb25maWcuZGF0ZVRpbWVGb3JtYXQpO1xuICB9XG5cbiAgLyoqIEZJTFRFUiBIQU5ETElORyAqL1xuXG4gIHB1YmxpYyBnZXQgZmlsdGVyTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlQXN5bmMgJiYgdGhpcy5fZmlsdGVyTW9kZSA9PT0gJ1RBQkxFX0JBU0VEJyA/ICdOT05FJyA6IHRoaXMuX2ZpbHRlck1vZGU7XG4gIH1cblxuICBwdWJsaWMgb25UYWJsZUJhc2VkRmlsdGVyRXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5vbkZpbHRlcmluZ0V2ZW50KChldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudCkudmFsdWUpO1xuICB9XG5cbiAgcHVibGljIG9uQ29sdW1uQmFzZWRGaWx0ZXJFdmVudChmaWx0ZXI6IERhdGFUYWJsZUZpbHRlck9iamVjdCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMub25GaWx0ZXJpbmdFdmVudChmaWx0ZXIpO1xuICB9XG5cbiAgcHVibGljIG9uRGVsZXRlRmlsdGVyKCk6IHZvaWQge1xuICAgIHRoaXMub25GaWx0ZXJpbmdFdmVudCh1bmRlZmluZWQpO1xuICAgIHRoaXMuZmlsdGVyLnVwZGF0ZUZpbHRlcmFibGVzKHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcml2YXRlIG9uRmlsdGVyaW5nRXZlbnQoZmlsdGVyOiBzdHJpbmcgfCBEYXRhVGFibGVGaWx0ZXJPYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdXNlQXN5bmMpIHtcbiAgICAgIHRoaXMuZmlsdGVyRXZlbnQuZW1pdChmaWx0ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpO1xuICAgICAgdGhpcy5hcHBseUZpbHRlclZhbHVlKGZpbHRlcik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGVmdWwpIHtcbiAgICAgIHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLnNhdmVGaWx0ZXIodGhpcy5pZCwgZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RmlsdGVyUHJlZGljYXRlKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPVxuICAgICAgdGhpcy5maWx0ZXJNb2RlID09PSAnQ09MVU1OX0JBU0VEJ1xuICAgICAgICA/IERhdGFUYWJsZUZpbHRlclV0aWwuY29sdW1uQmFzZWRGaWx0ZXJQcmVkaWNhdGUodGhpcy5fcm93TWFwKVxuICAgICAgICA6IERhdGFUYWJsZUZpbHRlclV0aWwudGFibGVCYXNlZEZpbHRlclByZWRpY2F0ZSgpO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXJWYWx1ZSh0aGlzLl9maWx0ZXJWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RmlsdGVyVmFsdWUodmFsdWU6IHN0cmluZyB8IERhdGFUYWJsZUZpbHRlck9iamVjdCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIHRoaXMuX2ZpbHRlclZhbHVlID09PSAnc3RyaW5nJztcbiAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gISF2YWx1ZSA/IChpc1N0cmluZyA/IHZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpKSA6ICcnO1xuICB9XG5cbiAgLyoqIFBBR0lOQVRJT04gSEFORExJTkcgKi9cblxuICBvblBhZ2VFdmVudChldmVudDogUGFnZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3VzZUFzeW5jKSB7XG4gICAgICB0aGlzLnBhZ2VFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZWZ1bCkge1xuICAgICAgdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2Uuc2F2ZVBhZ2VTaXplKHRoaXMuaWQsIGV2ZW50LnBhZ2VTaXplKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcGFnZUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0FsbCA/IDAgOiB0aGlzLnBhZ2UucGFnZUluZGV4O1xuICB9XG5cbiAgZ2V0IHBhZ2VTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0FsbCA/IHRoaXMuZGF0YUxlbmd0aCA6IHRoaXMucGFnZS5wYWdlU2l6ZTtcbiAgfVxuXG4gIGdldCBwYWdlTGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0FsbCA/IHRoaXMuZGF0YUxlbmd0aCA6IHRoaXMucGFnZS5sZW5ndGg7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBhZ2luYXRvcigpIHtcbiAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZTtcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2UuZW1pdCh0aGlzLnBhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRhdGFMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLmRhdGE/Lmxlbmd0aCB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgc2hvd0FsbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuX3VzZUFzeW5jICYmICF0aGlzLnBhZ2luYXRpb25FbmFibGVkO1xuICB9XG5cbiAgLyoqIElOSVQgU1RBVEUgKi9cblxuICBwcml2YXRlIGluaXRTdGF0ZSgpOiB2b2lkIHtcbiAgICAvLyBvbmx5IHNldCBkZWZhdWx0IHNvcnQgaWYgdGhlcmUgaXMgbm8gb3RoZXIgc29ydCBwZXJzaXN0ZWRcbiAgICBpZiAoISF0aGlzLmRlZmF1bHRTb3J0ICYmICF0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5sb2FkU29ydCh0aGlzLmlkKT8uZGlyZWN0aW9uKSB7XG4gICAgICB0aGlzLnNldFNvcnQodGhpcy5kZWZhdWx0U29ydCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGVmdWwpIHtcbiAgICAgIHRoaXMuaW5pdFBhZ2luYXRvclN0YXRlKCk7XG4gICAgICB0aGlzLmluaXRTb3J0U3RhdGUoKTtcbiAgICAgIHRoaXMuaW5pdEZpbHRlclN0YXRlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRTb3J0U3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3Qgc29ydCA9IHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLmxvYWRTb3J0KHRoaXMuaWQpO1xuICAgIGlmICghIXNvcnQpIHtcbiAgICAgIHRoaXMuc2V0U29ydChzb3J0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFNvcnQoc29ydDogU29ydCk6IHZvaWQge1xuICAgIHRoaXMuc29ydC5hY3RpdmUgPSBzb3J0LmFjdGl2ZTtcbiAgICB0aGlzLnNvcnQuZGlyZWN0aW9uID0gc29ydC5kaXJlY3Rpb247XG4gICAgdGhpcy5zb3J0LnNvcnRDaGFuZ2UuZW1pdChzb3J0KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZpbHRlclN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLmxvYWRGaWx0ZXIodGhpcy5pZCk7XG4gICAgdGhpcy5maWx0ZXIudXBkYXRlRmlsdGVyYWJsZXMoZmlsdGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFBhZ2luYXRvclN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMucGFnZSA9IHtcbiAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5sb2FkUGFnZVNpemUodGhpcy5pZCkgfHwgdGhpcy5wYWdlU2l6ZSxcbiAgICAgIGxlbmd0aDogMCxcbiAgICB9O1xuXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0b3IoKTtcbiAgfVxuXG4gIC8qKiBDT0xVTU4gSEFORExJTkcgKi9cblxuICBwdWJsaWMgb25WaWV3RGVmaW5pdGlvbihkZWZpbml0aW9uOiBEYXRhVGFibGVDb2x1bW5EZWZpbml0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5EZWZpbml0aW9uID0gZGVmaW5pdGlvbjtcbiAgICB0aGlzLnZpZXdEZWZpbml0aW9uQ2hhbmdlRXZlbnQuZW1pdChkZWZpbml0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNvbHVtblNldHRpbmdzKGRlZmluaXRpb24/OiBEYXRhVGFibGVDb2x1bW5EZWZpbml0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fc2hvd0NvbHVtbk1vZGFsID0gdHJ1ZTtcbiAgICB0aGlzLl9zZWxlY3RlZENvbHVtbkRlZmluaXRpb24gPSBkZWZpbml0aW9uID8gZGVmaW5pdGlvbiA6IHRoaXMuX2FsbENvbHVtbkRlZmluaXRpb25zWzBdO1xuICAgIGlmICh0aGlzLl9hbGxBdmFpbGFibGVDb2x1bW5zKSB7XG4gICAgICB0aGlzLm9wZW5Db2x1bW5Nb2RhbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBubyBjb21wbGV0ZSBkZWZpbml0aW9ucyBoYXZlIGJlZW4gbG9hZGVkIHlldCBzZW5kIGFuIGV2ZW50IHNvIHRoZSBhcHAgY2FuIGxvYWQgaXRcbiAgICAgIHRoaXMuYWxsQ29sdW1uc0V2ZW50LmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNDdXJyZW50RGVmaW5pdGlvbihkZWZpbml0aW9uOiBEYXRhVGFibGVDb2x1bW5EZWZpbml0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkQ29sdW1uRGVmaW5pdGlvbiAmJiB0aGlzLl9zZWxlY3RlZENvbHVtbkRlZmluaXRpb24uaWQgPT09IGRlZmluaXRpb24uaWQ7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Db2x1bW5Nb2RhbCgpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dEYXRhOiBEYXRhVGFibGVEaWFsb2dEYXRhID0ge1xuICAgICAgYWxsQ29sdW1uczogdGhpcy5fYWxsQXZhaWxhYmxlQ29sdW1ucyxcbiAgICAgIGRlZmluaXRpb246IHRoaXMuX3NlbGVjdGVkQ29sdW1uRGVmaW5pdGlvbixcbiAgICAgIGRlbGV0ZURlZmluaXRpb25BbGxvd2VkOiB0aGlzLmRlbGV0ZURlZmluaXRpb25BbGxvd2VkLFxuICAgICAgZmlsdGVyQ29sdW1uc0xhYmVsOiB0aGlzLmZpbHRlckNvbHVtbnNMYWJlbCxcbiAgICAgIGZpbHRlckNvbHVtbnNQbGFjZUhvbGRlcjogdGhpcy5maWx0ZXJDb2x1bW5zUGxhY2VIb2xkZXIsXG4gICAgICBub0RhdGFUZXh0OiB0aGlzLm5vRGF0YVRleHQsXG4gICAgICB0aXRsZUxhYmVsOiB0aGlzLmNvbHVtblNldHRpbmdzTW9kYWxUaXRsZUxhYmVsLFxuICAgICAgc2VsZWN0ZWRMYWJlbDogdGhpcy5zZWxlY3RlZExhYmVsLFxuICAgICAgYXZhaWxhYmxlTGFiZWw6IHRoaXMuYXZhaWxhYmxlTGFiZWwsXG4gICAgICBzYXZlTGFiZWw6IHRoaXMuc2F2ZUxhYmVsLFxuICAgICAgZGVsZXRlTGFiZWw6IHRoaXMuZGVsZXRlTGFiZWwsXG4gICAgICBjYW5jZWxMYWJlbDogdGhpcy5jYW5jZWxMYWJlbCxcbiAgICAgIGluZm9UZXh0TGFiZWw6IHRoaXMuaW5mb1RleHRMYWJlbCxcbiAgICB9O1xuICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMubWF0RGlhbG9nLm9wZW4oRGF0YVRhYmxlQ29sdW1uc01vZGFsQ29tcG9uZW50LCB7IGRhdGE6IGRpYWxvZ0RhdGEgfSk7XG4gICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIC8vIG5vIGV2ZW50IG9uIENBTkNFTFxuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLmNvbHVtbkRlZmluaXRpb25DaGFuZ2VFdmVudC5lbWl0KHJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtYWQtZGF0YXRhYmxlLWFjdGlvbi1iYXJcIj5cbiAgPCEtLSBUYWJsZSBhY3Rpb25zOiBkaXNwbGF5ZWQgYmVmb3JlIHRoZSB0YWJsZSAtLT5cbiAgPGRpdiAqbmdJZj1cInRhYmxlQWN0aW9ucz8ubGVuZ3RoIHx8IChmaWx0ZXJNb2RlID09PSAnQ09MVU1OX0JBU0VEJyAmJiBzaG93RGVsZXRlRmlsdGVyQWN0aW9uKVwiPlxuICAgIDxtYWQtYnV0dG9uLWdyb3VwICpuZ0Zvcj1cImxldCBhY3Rpb25Hcm91cCBvZiB0YWJsZUFjdGlvbnNcIiBjbGFzcz1cInRhYmxlLWFjdGlvbi1ncm91cFwiPlxuICAgICAgPG1hZC1vdXRsaW5lLWJ1dHRvblxuICAgICAgICBbaGlkZGVuXT1cImlzSGlkZGVuKHRhYmxlQWN0aW9uKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKHRhYmxlQWN0aW9uKVwiXG4gICAgICAgICpuZ0Zvcj1cImxldCB0YWJsZUFjdGlvbiBvZiBhY3Rpb25Hcm91cFwiXG4gICAgICAgIChjbGljayk9XCJvbkFjdGlvbkV2ZW50KHRhYmxlQWN0aW9uKVwiXG4gICAgICA+XG4gICAgICAgIHt7IHRyYW5zbGF0ZUxhYmVscyA/ICh0YWJsZUFjdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZSkgOiB0YWJsZUFjdGlvbi5sYWJlbCB9fVxuICAgICAgICB7eyBnZXRTZWxlY3RlZENvdW50KHRhYmxlQWN0aW9uLnR5cGUpIH19XG4gICAgICA8L21hZC1vdXRsaW5lLWJ1dHRvbj5cbiAgICA8L21hZC1idXR0b24tZ3JvdXA+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyTW9kZSA9PT0gJ0NPTFVNTl9CQVNFRCcgJiYgc2hvd0RlbGV0ZUZpbHRlckFjdGlvblwiPlxuICAgIDxtYXQtaWNvbiBmb250U2V0PVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIiBjbGFzcz1cImRlbGV0ZS1maWx0ZXItYWN0aW9uXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9uRGVsZXRlRmlsdGVyKClcIlxuICAgICAgPmZpbHRlcl9hbHRfb2ZmPC9tYXQtaWNvblxuICAgID5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cImZpbHRlck1vZGUgPT09ICdUQUJMRV9CQVNFRCdcIj5cbiAgICA8bWF0LWxhYmVsPnt7IHRyYW5zbGF0ZUxhYmVscyA/IChmaWx0ZXJMYWJlbCB8IHRyYW5zbGF0ZSkgOiBmaWx0ZXJMYWJlbCB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5dXApPVwib25UYWJsZUJhc2VkRmlsdGVyRXZlbnQoJGV2ZW50KVwiIHBsYWNlaG9sZGVyPVwie3sgZmlsdGVyUGxhY2Vob2xkZXIgfX1cIiAvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9kaXY+XG5cbjwhLS0gUm93IGFjdGlvbiBtZW51IC0tPlxuPG1hdC1tZW51ICNyb3dBY3Rpb25NZW51PVwibWF0TWVudVwiPlxuICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQgbGV0LWVsZW1lbnQ9XCJlbGVtZW50XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93QWN0aW9uIG9mIHJvd0FjdGlvbnNcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCIhaXNIaWRkZW4ocm93QWN0aW9uKVwiXG4gICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgY2xhc3M9XCJyb3ctYWN0aW9uXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uUm93RXZlbnQoJGV2ZW50LCBlbGVtZW50LCByb3dBY3Rpb24pXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQocm93QWN0aW9uKVwiXG4gICAgICA+XG4gICAgICAgIHt7IHRyYW5zbGF0ZUxhYmVscyA/IChyb3dBY3Rpb24ubGFiZWwgfCB0cmFuc2xhdGUpIDogcm93QWN0aW9uLmxhYmVsIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbWF0LW1lbnU+XG5cbjwhLS0gZWRpdGFibGUgZGVmaW5pdGlvbiBtZW51IC0tPlxuPG1hdC1tZW51ICNlZGl0YWJsZURlZmluaXRpb25NZW51PVwibWF0TWVudVwiPlxuICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQ+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nRm9yPVwibGV0IGRlZmluaXRpb24gb2YgZWRpdGFibGVDb2x1bW5EZWZpbml0aW9uc1wiXG4gICAgICBtYXQtbWVudS1pdGVtXG4gICAgICBjbGFzcz1cInJvdy1hY3Rpb25cIlxuICAgICAgKGNsaWNrKT1cIm9uQ29sdW1uU2V0dGluZ3MoZGVmaW5pdGlvbilcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnYWN0aXZlLWNvbHVtbi1kZWZpbml0aW9uJzogaXNDdXJyZW50RGVmaW5pdGlvbihkZWZpbml0aW9uKSB9XCJcbiAgICA+XG4gICAgICB7eyB0cmFuc2xhdGVMYWJlbHMgPyAoZGVmaW5pdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBkZWZpbml0aW9uLmxhYmVsIH19XG4gICAgPC9idXR0b24+XG4gIDwvbmctdGVtcGxhdGU+XG48L21hdC1tZW51PlxuXG48IS0tIHZpZXdhYmxlIGRlZmluaXRpb24gbWVudSAtLT5cbjxtYXQtbWVudSAjdmlld2FibGVEZWZpbml0aW9uTWVudT1cIm1hdE1lbnVcIj5cbiAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50PlxuICAgIDxidXR0b25cbiAgICAgICpuZ0Zvcj1cImxldCBkZWZpbml0aW9uIG9mIHZpZXdhYmxlQ29sdW1uRGVmaW5pdGlvbnNcIlxuICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgY2xhc3M9XCJyb3ctYWN0aW9uXCJcbiAgICAgIChjbGljayk9XCJvblZpZXdEZWZpbml0aW9uKGRlZmluaXRpb24pXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZS1jb2x1bW4tZGVmaW5pdGlvbic6IGlzQ3VycmVudERlZmluaXRpb24oZGVmaW5pdGlvbikgfVwiXG4gICAgPlxuICAgICAge3sgdHJhbnNsYXRlTGFiZWxzID8gKGRlZmluaXRpb24ubGFiZWwgfCB0cmFuc2xhdGUpIDogZGVmaW5pdGlvbi5sYWJlbCB9fVxuICAgIDwvYnV0dG9uPlxuICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtbWVudT5cblxuPCEtLSBUYWJsZSAtLT5cbjxkaXZcbiAgKm5nSWY9XCJmaWx0ZXJNb2RlID09PSAnQ09MVU1OX0JBU0VEJyB8fCBzaG93RW1wdHlUYWJsZSB8fCAhIWZpbHRlcmVkUGFnZURhdGE/Lmxlbmd0aDsgZWxzZSBub0RhdGFcIlxuICBjbGFzcz1cImRhdGF0YWJsZVwiXG4gIFtjbGFzc109XCJ0YWJsZUNsYXNzXCJcbj5cbiAgPGRpdiBjbGFzcz1cIm1hZC1kYXRhdGFibGUtc3Bpbm5lci13cmFwcGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPG1hdC1zcGlubmVyIFtkaWFtZXRlcl09XCI1MFwiIFtzdHJva2VXaWR0aF09XCIzXCI+PC9tYXQtc3Bpbm5lcj5cbiAgPC9kaXY+XG4gIDx0YWJsZVxuICAgIFtpZF09XCJpZFwiXG4gICAgbWF0LXRhYmxlXG4gICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgbWF0U29ydFxuICAgIChtYXRTb3J0Q2hhbmdlKT1cIm9uU29ydGluZ0V2ZW50KCRldmVudClcIlxuICAgIG1hZEZpbHRlclxuICAgIChtYWRGaWx0ZXJDaGFuZ2UpPVwib25Db2x1bW5CYXNlZEZpbHRlckV2ZW50KCRldmVudClcIlxuICAgIFttdWx0aVRlbXBsYXRlRGF0YVJvd3NdPVwiISFleHBhbmRhYmxlRGVmXCJcbiAgPlxuICAgIDwhLS0gUm93IGFjdGlvbnMgY29sdW1uLS0+XG4gICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cIkFDVElPTl9DT0xVTU5fTkFNRVwiPlxuICAgICAgPHRoIHNjb3BlPVwiY29sXCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtuZ0NsYXNzXT1cInNob3dBY3Rpb25Db2x1bW4gPyAncm93LWFjdGlvbi1jZWxsJyA6ICduby1hY3Rpb24tY2VsbCdcIj5cbiAgICAgICAgPCEtLSBCQVRDSDogbWFzdGVyIGNoZWNrYm94IC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0aW9uRW1pdE1vZGUgIT09ICdOT05FJyAmJiBzZWxlY3Rpb25Nb2RlID09PSAnQkFUQ0gnXCIgY2xhc3M9XCJtYWQtZGF0YXRhYmxlLWNoZWNrYm94LWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCJvblRvZ2dsZVNlbGVjdEFsbCgpXCIgW2NoZWNrZWRdPVwiYWxsU2VsZWN0ZWRcIj4gPC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIFNJTkdMRSAvIE5PTkU6IG5vdGhpbmcgaW4gaGVhZGVyIHJvdyAtLT5cbiAgICAgIDwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiIFtuZ0NsYXNzXT1cInNob3dBY3Rpb25Db2x1bW4gPyAncm93LWFjdGlvbi1jZWxsJyA6ICduby1hY3Rpb24tY2VsbCdcIj5cbiAgICAgICAgPCEtLSBCQVRDSDogcm93IGNoZWNrYm94IC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0NoZWNrYm94KGVsZW1lbnQpXCIgY2xhc3M9XCJtYWQtZGF0YXRhYmxlLWNoZWNrYm94LWNvbnRhaW5lclwiIChjbGljayk9XCJvblJvd0V2ZW50KCRldmVudCwgZWxlbWVudClcIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwibm8tcG9pbnRlci1ldmVudHNcIiBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKGVsZW1lbnQucm93SWQpXCI+IDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSBTSU5HTEU6IHJvdyBhY3Rpb24gbWVudSBpY29uIC0tPlxuICAgICAgICA8bWFkLWljb24tYnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJzaG93Um93QWN0aW9uSWNvbihlbGVtZW50KSAmJiBoYXNWaXNpYmxlUm93QWN0aW9ucyhlbGVtZW50KVwiXG4gICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRGF0YV09XCJ7IGVsZW1lbnQ6IGVsZW1lbnQgfVwiXG4gICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cInJvd0FjdGlvbk1lbnVcIlxuICAgICAgICAgIChjbGljayk9XCJvblNlbGVjdGlvbkV2ZW50KGVsZW1lbnQucm93SWQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICA8L21hZC1pY29uLWJ1dHRvbj5cbiAgICAgICAgPCEtLSBTSU5HTEU6IHJvdyByYWRpbyBidXR0b24gLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93UmFkaW9CdXR0b24oZWxlbWVudClcIiBjbGFzcz1cIm1hZC1kYXRhdGFibGUtY2hlY2tib3gtY29udGFpbmVyXCIgKGNsaWNrKT1cIm9uUm93RXZlbnQoJGV2ZW50LCBlbGVtZW50KVwiPlxuICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNsYXNzPVwibm8tcG9pbnRlci1ldmVudHNcIiBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKGVsZW1lbnQucm93SWQpXCI+IDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gRVhQQU5EQUJMRTogcm93IGlzIGV4cGFuZGFibGUvY29sbGFwc2FibGUgLS0+XG4gICAgICAgIDxtYWQtaWNvbi1idXR0b24gKm5nSWY9XCJzaG93RXhwYW5kYWJsZUJ1dHRvbihlbGVtZW50KVwiIChjbGljayk9XCJvbkV4cGFuZCgkZXZlbnQsIGVsZW1lbnQpXCI+XG4gICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiZXhwYW5kZWRFbGVtZW50ICE9PSBlbGVtZW50XCI+a2V5Ym9hcmRfYXJyb3dfZG93bjwvbWF0LWljb24+XG4gICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiZXhwYW5kZWRFbGVtZW50ID09PSBlbGVtZW50XCI+a2V5Ym9hcmRfYXJyb3dfdXA8L21hdC1pY29uPlxuICAgICAgICA8L21hZC1pY29uLWJ1dHRvbj5cbiAgICAgICAgPCEtLSBOT05FOiBub3RoaW5nIC0tPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIENlbGwgZGVmaW5pdGlvbnMgYW5kIHJvd3Mgd2l0aCBpbmplY3RlZCBjZWxscyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uLmlkXCI+XG4gICAgICA8IS0tIGhlYWRlciBjZWxsIHRvIGJlIGluamVjdGVkIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZ2V0RGF0YVRhYmxlSGVhZGVyVHlwZShjb2x1bW4pXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTT1JUJ1wiPlxuICAgICAgICAgIDx0aFxuICAgICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgW2NsYXNzLnRleHQtcmlnaHRdPVwiY29sdW1uLmlzUmlnaHRBbGlnbmVkXCJcbiAgICAgICAgICAgIG1hdC1zb3J0LWhlYWRlcj1cInt7IGNvbHVtbi5vcmRlckJ5TmFtZSA/IGNvbHVtbi5vcmRlckJ5TmFtZSA6IGNvbHVtbi5kYXRhUHJvcGVydHlOYW1lIH19XCJcbiAgICAgICAgICAgIFthcnJvd1Bvc2l0aW9uXT1cImNvbHVtbi5pc1JpZ2h0QWxpZ25lZCA/ICdiZWZvcmUnIDogJ2FmdGVyJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdHJhbnNsYXRlTGFiZWxzID8gKGNvbHVtbi5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBjb2x1bW4ubGFiZWwgfX1cbiAgICAgICAgICA8L3RoPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0ZJTFRFUidcIj5cbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgIHNjb3BlPVwiY29sXCJcbiAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgIFtjbGFzcy50ZXh0LXJpZ2h0XT1cImNvbHVtbi5pc1JpZ2h0QWxpZ25lZFwiXG4gICAgICAgICAgICBtYWQtZmlsdGVyLWhlYWRlcj1cInt7IGNvbHVtbi5kYXRhUHJvcGVydHlOYW1lIH19XCJcbiAgICAgICAgICAgIFttYWRGaWx0ZXJDb2x1bW5SaWdodEFsaWduZWRdPVwiY29sdW1uLmlzUmlnaHRBbGlnbmVkXCJcbiAgICAgICAgICAgIFttYWRGaWx0ZXJPcHRpb25zXT1cImNvbHVtbi5maWx0ZXJQYXJhbXM/LmZpbHRlck9wdGlvbnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHRyYW5zbGF0ZUxhYmVscyA/IChjb2x1bW4ubGFiZWwgfCB0cmFuc2xhdGUpIDogY29sdW1uLmxhYmVsIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTT1JUX0FORF9GSUxURVInXCI+XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcbiAgICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgICAgICBbY2xhc3MudGV4dC1yaWdodF09XCJjb2x1bW4uaXNSaWdodEFsaWduZWRcIlxuICAgICAgICAgICAgbWF0LXNvcnQtaGVhZGVyPVwie3sgY29sdW1uLm9yZGVyQnlOYW1lID8gY29sdW1uLm9yZGVyQnlOYW1lIDogY29sdW1uLmRhdGFQcm9wZXJ0eU5hbWUgfX1cIlxuICAgICAgICAgICAgW2Fycm93UG9zaXRpb25dPVwiY29sdW1uLmlzUmlnaHRBbGlnbmVkID8gJ2JlZm9yZScgOiAnYWZ0ZXInXCJcbiAgICAgICAgICAgIG1hZC1maWx0ZXItaGVhZGVyPVwie3sgY29sdW1uLmRhdGFQcm9wZXJ0eU5hbWUgfX1cIlxuICAgICAgICAgICAgW21hZEZpbHRlckNvbHVtblJpZ2h0QWxpZ25lZF09XCJjb2x1bW4uaXNSaWdodEFsaWduZWRcIlxuICAgICAgICAgICAgW21hZEZpbHRlck9wdGlvbnNdPVwiY29sdW1uLmZpbHRlclBhcmFtcz8uZmlsdGVyT3B0aW9uc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdHJhbnNsYXRlTGFiZWxzID8gKGNvbHVtbi5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBjb2x1bW4ubGFiZWwgfX1cbiAgICAgICAgICA8L3RoPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbY2xhc3MudGV4dC1yaWdodF09XCJjb2x1bW4uaXNSaWdodEFsaWduZWRcIj5cbiAgICAgICAgICAgIHt7IHRyYW5zbGF0ZUxhYmVscyA/IChjb2x1bW4ubGFiZWwgfCB0cmFuc2xhdGUpIDogY29sdW1uLmxhYmVsIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBkYXRhIGNlbGwgdG8gYmUgaW5qZWN0ZWQgLS0+XG4gICAgICA8dGRcbiAgICAgICAgbWF0LWNlbGxcbiAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiXG4gICAgICAgIFtjbGFzcy50ZXh0LXJpZ2h0XT1cImNvbHVtbi5pc1JpZ2h0QWxpZ25lZFwiXG4gICAgICAgIFtjbGFzcy5tYWQtZHQtY2hpbGQtY2VsbF09XCJlbGVtZW50LnBhcmVudElkXCJcbiAgICAgICAgW25nU3dpdGNoXT1cImNvbHVtbi50cmFuc2Zvcm1lclwiXG4gICAgICAgIChjbGljayk9XCIhZGlzYWJsZVJvd0NsaWNrICYmIG9uUm93RXZlbnQoJGV2ZW50LCBlbGVtZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgZ2V0Q3VzdG9tQ2VsbFRlbXBsYXRlKGNvbHVtbi5pZCkgfHwgZGVmYXVsdENlbGxUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgY29sdW1uOiBjb2x1bW4sIGVsZW1lbnQ6IGVsZW1lbnQsICRpbXBsaWNpdDogZWxlbWVudCB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gRXhwYW5kZWQgQ29udGVudCBDb2x1bW4gLSBUaGUgcm93IGlzIG1hZGUgdXAgb2YgdGhpcyBvbmUgY29sdW1uIHRoYXQgc3BhbnMgYWNyb3NzIGFsbCBjb2x1bW5zIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIWV4cGFuZGFibGVEZWZcIiBbbWF0Q29sdW1uRGVmXT1cImV4cGFuZGFibGVDb2x1bW5EZWZcIj5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCIgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zLmxlbmd0aCArIDFcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1hZC1kYXRhLXRhYmxlLWV4cGFuZGFibGUtYXJlYVwiIFtAZGV0YWlsRXhwYW5kXT1cImVsZW1lbnQgPT09IGV4cGFuZGVkRWxlbWVudCA/ICdleHBhbmRlZCcgOiAnY29sbGFwc2VkJ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgIGdldEN1c3RvbUV4cGFuZGFibGVUZW1wbGF0ZSgpIHx8IGRlZmF1bHRDZWxsVGVtcGxhdGU7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgY29sdW1uOiBlbGVtZW50LCBlbGVtZW50OiBlbGVtZW50LCAkaW1wbGljaXQ6IGVsZW1lbnQgfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gaGVhZGVyIHJvdyB3aGVyZSBjZWxscyB3aWxsIGJlIGluamVjdGVkIC0tPlxuICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiY29sdW1uSWRzXCI+PC90cj5cbiAgICA8IS0tIGRhdGEgcm93IHdoZXJlIGNlbGxzIHdpbGwgYmUgaW5qZWN0ZWQgLS0+XG4gICAgPHRyXG4gICAgICBtYXQtcm93XG4gICAgICBbY2xhc3MuY2xpY2thYmxlLXRhYmxlLXJvd109XCIhcm93LnBhcmVudElkICYmIHNlbGVjdGlvbkVtaXRNb2RlICE9PSAnTk9ORSdcIlxuICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGNvbHVtbklkc1wiXG4gICAgICAoY2xpY2spPVwib25FeHBhbmQoJGV2ZW50LCByb3cpXCJcbiAgICA+PC90cj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFleHBhbmRhYmxlRGVmXCI+XG4gICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IGVsZW1lbnQ7IGNvbHVtbnM6IFtleHBhbmRhYmxlQ29sdW1uRGVmXVwiIGNsYXNzPVwibWFkLWRhdGEtdGFibGUtZXhwYW5kYWJsZS1yb3dcIj48L3RyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDx0ciBjbGFzcz1cIm1hdC1yb3dcIiAqbWF0Tm9EYXRhUm93PlxuICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGwgbm9EYXRhVGV4dCBjb2x1bW5CYXNlZEZpbHRlclwiIFthdHRyLmNvbHNwYW5dPVwiY29sdW1uSWRzLmxlbmd0aFwiPlxuICAgICAgICB7eyB0cmFuc2xhdGVMYWJlbHMgPyAobm9EYXRhVGV4dCB8IHRyYW5zbGF0ZSkgOiBub0RhdGFUZXh0IH19XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvdGFibGU+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJtYWQtZGF0YS10YWJsZS1ib3R0b20tYXJlYVwiPlxuICA8ZGl2IGNsYXNzPVwibWFkLWRhdGEtdGFibGUtYm90dG9tLWluZm8tYXJlYVwiPlxuICAgIDwhLS0gY29sdW1uIHNldHRpbmdzOiAxIGRlZmluaXRpb24gLS0+XG4gICAgPG1hZC1pY29uLWJ1dHRvbiAqbmdJZj1cImVkaXRhYmxlQ29sdW1uRGVmaW5pdGlvbnM/Lmxlbmd0aCA9PT0gMVwiIChjbGljayk9XCJvbkNvbHVtblNldHRpbmdzKClcIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+dmlld19jb2x1bW48L21hdC1pY29uPlxuICAgIDwvbWFkLWljb24tYnV0dG9uPlxuICAgIDwhLS0gY29sdW1uIHNldHRpbmdzOiBtdWx0aXBsZSBkZWZpbml0aW9ucyAtLT5cbiAgICA8bWFkLWljb24tYnV0dG9uICpuZ0lmPVwiKGVkaXRhYmxlQ29sdW1uRGVmaW5pdGlvbnM/Lmxlbmd0aCB8fCAwKSA+IDBcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZWRpdGFibGVEZWZpbml0aW9uTWVudVwiPlxuICAgICAgPG1hdC1pY29uPnZpZXdfY29sdW1uPC9tYXQtaWNvbj5cbiAgICA8L21hZC1pY29uLWJ1dHRvbj5cbiAgICA8IS0tIGNvbHVtbiB2aWV3OiBtdWx0aXBsZSBkZWZpbml0aW9ucyAtLT5cbiAgICA8bWFkLWljb24tYnV0dG9uICpuZ0lmPVwiKHZpZXdhYmxlQ29sdW1uRGVmaW5pdGlvbnM/Lmxlbmd0aCB8fCAwKSA+IDBcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwidmlld2FibGVEZWZpbml0aW9uTWVudVwiPlxuICAgICAgPG1hdC1pY29uPnByZXZpZXc8L21hdC1pY29uPlxuICAgIDwvbWFkLWljb24tYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIFBhZ2luYXRpb24gLS0+XG4gIDxtYXQtcGFnaW5hdG9yXG4gICAgW3N0eWxlLmRpc3BsYXldPVwicGFnaW5hdGlvbkVuYWJsZWQgPyAnYmxvY2snIDogJ25vbmUnXCJcbiAgICBbbGVuZ3RoXT1cInBhZ2VMZW5ndGhcIlxuICAgIFtwYWdlSW5kZXhdPVwicGFnZUluZGV4XCJcbiAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcbiAgICAocGFnZSk9XCJvblBhZ2VFdmVudCgkZXZlbnQpXCJcbiAgICBzaG93Rmlyc3RMYXN0QnV0dG9uc1xuICA+XG4gIDwvbWF0LXBhZ2luYXRvcj5cbjwvZGl2PlxuXG48IS0tIE5vIGRhdGEgYWxlcnQgLS0+XG48bmctdGVtcGxhdGUgI25vRGF0YT5cbiAgPGRpdiBjbGFzcz1cIm5vRGF0YVRleHRcIj5cbiAgICA8ZGl2IGNsYXNzPVwibWFkLWRhdGF0YWJsZS1zcGlubmVyLXdyYXBwZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICAgIDxtYXQtc3Bpbm5lciBbZGlhbWV0ZXJdPVwiNTBcIiBbc3Ryb2tlV2lkdGhdPVwiM1wiPjwvbWF0LXNwaW5uZXI+XG4gICAgPC9kaXY+XG4gICAge3sgdHJhbnNsYXRlTGFiZWxzID8gKG5vRGF0YVRleHQgfCB0cmFuc2xhdGUpIDogbm9EYXRhVGV4dCB9fVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gZGVmYXVsdCBjZWxsIHRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2VsbFRlbXBsYXRlIGxldC1lbGVtZW50PVwiZWxlbWVudFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPHNwYW4+XG4gICAge3sgZWxlbWVudFtjb2x1bW4uZGF0YVByb3BlcnR5TmFtZV0gfX1cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBjdXN0b20gY2VsbCB0ZW1wbGF0ZXMgaW5qZWN0ZWQgZnJvbSBwYXJlbnQgLS0+XG48bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4iXX0=
|
|
725
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC1hZGRvbnMvc3JjL2xpYi9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0ZXJpYWwtYWRkb25zL3NyYy9saWIvZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFJTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBUSxNQUFNLHdCQUF3QixDQUFDO0FBR3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQVUvRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saURBQWlELENBQUM7QUFJbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FB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SztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBRU8sU0FBUztzQkFBckIsS0FBSztnQkFTTyxhQUFhO3NCQUF6QixLQUFLO2dCQUtPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBS08sV0FBVztzQkFBdkIsS0FBSztnQkFLTyxpQkFBaUI7c0JBQTdCLEtBQUs7Z0JBSU8sZUFBZTtzQkFBM0IsS0FBSztnQkFPTyxpQkFBaUI7c0JBQTdCLEtBQUs7Z0JBYU8sU0FBUztzQkFBckIsS0FBSztnQkFRTyxrQkFBa0I7c0JBQTlCLEtBQUs7Z0JBS08sZ0JBQWdCO3NCQUE1QixLQUFLO2dCQVFPLHlCQUF5QjtzQkFBckMsS0FBSztnQkFPTyxpQkFBaUI7c0JBQTdCLEtBQUs7Z0JBY08sVUFBVTtzQkFBdEIsS0FBSztnQkFPSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBRUcsU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBRUcsZUFBZTtzQkFBeEIsTUFBTTtnQkFDRywyQkFBMkI7c0JBQXBDLE1BQU07Z0JBQ0cseUJBQXlCO3NCQUFsQyxNQUFNO2dCQUVrQixTQUFTO3NCQUFqQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0gsSUFBSTtzQkFBdkIsU0FBUzt1QkFBQyxPQUFPO2dCQUNVLE1BQU07c0JBQWpDLFNBQVM7dUJBQUMsZUFBZTtnQkFDMEIsVUFBVTtzQkFBN0QsZUFBZTt1QkFBQyxpQ0FBaUM7Z0JBRWxELGFBQWE7c0JBRFosWUFBWTt1QkFBQyx5Q0FBeUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlLCBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciwgTWF0UGFnaW5hdG9yTW9kdWxlLCBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0U29ydCwgTWF0U29ydE1vZHVsZSwgU29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgRGF0YVRhYmxlQ29sdW1uIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uL2RhdGEtdGFibGUtY29sdW1uJztcbmltcG9ydCB7IERhdGFUYWJsZUFjdGlvbiB9IGZyb20gJy4vY29uZmlndXJhdGlvbi9kYXRhLXRhYmxlLWFjdGlvbic7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgRGF0YVRhYmxlQ29sdW1uc01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhLXRhYmxlLWNvbHVtbnMtbW9kYWwvZGF0YS10YWJsZS1jb2x1bW5zLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBEYXRhVGFibGVDb2x1bW5EZWZpbml0aW9uLFxuICBEYXRhVGFibGVDb2x1bW5EZWZpbml0aW9uQ2hhbmdlLFxuICBEYXRhVGFibGVEaWFsb2dEYXRhLFxufSBmcm9tICcuL2NvbmZpZ3VyYXRpb24vZGF0YS10YWJsZS1jb2x1bW4tZGVmaW5pdGlvbic7XG5pbXBvcnQgeyBEYXRhVGFibGVSb3cgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24vZGF0YS10YWJsZS1yb3cnO1xuaW1wb3J0IHsgRGF0YVRhYmxlSGVhZGVyVHlwZSB9IGZyb20gJy4vY29uZmlndXJhdGlvbi9kYXRhLXRhYmxlLWhlYWRlci10eXBlJztcbmltcG9ydCB7IERhdGFUYWJsZUZpbHRlck1vZGUgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24vZGF0YS10YWJsZS1maWx0ZXItbW9kZSc7XG5pbXBvcnQgeyBEYXRhVGFibGVGaWx0ZXJPYmplY3QgfSBmcm9tICcuL2RhdGEtdGFibGUtZmlsdGVyL2RhdGEtdGFibGUtZmlsdGVyLW9iamVjdCc7XG5pbXBvcnQgeyBEYXRhVGFibGVGaWx0ZXIgfSBmcm9tICcuL2RhdGEtdGFibGUtZmlsdGVyL2RhdGEtdGFibGUtZmlsdGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRhVGFibGVTZWxlY3Rpb25FbWl0VHlwZSB9IGZyb20gJy4vY29uZmlndXJhdGlvbi9kYXRhLXRhYmxlLXNlbGVjdGlvbi1lbWl0LXR5cGUnO1xuaW1wb3J0IHsgRGF0YVRhYmxlU2VsZWN0aW9uRW1pdE1vZGUgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24vZGF0YS10YWJsZS1zZWxlY3Rpb24tZW1pdC1tb2RlJztcbmltcG9ydCB7IERhdGFUYWJsZVNlbGVjdGlvbk1vZGUgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24vZGF0YS10YWJsZS1zZWxlY3Rpb24tbW9kZSc7XG5pbXBvcnQgeyBEYXRhVGFibGVTb3J0VXRpbCB9IGZyb20gJy4vdXRpbC9kYXRhLXRhYmxlLXNvcnQtdXRpbCc7XG5pbXBvcnQgeyBEYXRhVGFibGVBY3Rpb25VdGlsIH0gZnJvbSAnLi91dGlsL2RhdGEtdGFibGUtYWN0aW9uLXV0aWwnO1xuaW1wb3J0IHsgRGF0YVRhYmxlRGF0YVV0aWwgfSBmcm9tICcuL3V0aWwvZGF0YS10YWJsZS1kYXRhLXV0aWwnO1xuaW1wb3J0IHsgRGF0YVRhYmxlRmlsdGVyVXRpbCB9IGZyb20gJy4vdXRpbC9kYXRhLXRhYmxlLWZpbHRlci11dGlsJztcbmltcG9ydCB7XG4gIERBVEFfVEFCTEVfUEVSU0lTVEVOQ0VfU0VSVklDRV9QUk9WSURFUixcbiAgRGF0YVRhYmxlUGVyc2lzdGVuY2VTZXJ2aWNlLFxuICBNQURfREFUQV9UQUJMRV9QRVJTSVNURU5DRV9TRVJWSUNFLFxufSBmcm9tICcuL2RhdGEtdGFibGUtcGVyc2lzdGVuY2Uuc2VydmljZSc7XG5pbXBvcnQge1xuICBNQURfREFUQV9UQUJMRV9HTE9CQUxfQ09ORklHVVJBVElPTixcbiAgRGF0YVRhYmxlR2xvYmFsQ29uZmlndXJhdGlvbixcbiAgTUFEX0RBVEFfVEFCTF9HTE9CQUxfQ09ORklHVVJBVElPTl9QUk9WSURFUixcbn0gZnJvbSAnLi9jb25maWd1cmF0aW9uL2RhdGEtdGFibGUtZ2xvYmFsLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQgeyBEcmFnRHJvcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRCYWRnZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JhZGdlJztcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTWF0UmFkaW9Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9yYWRpbyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJy4uL2J1dHRvbi9idXR0b24ubW9kdWxlJztcbmltcG9ydCB7IERhdGFUYWJsZUZpbHRlckhlYWRlciB9IGZyb20gJy4vZGF0YS10YWJsZS1maWx0ZXIvZGF0YS10YWJsZS1maWx0ZXItaGVhZGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRhVGFibGVUZW1wbGF0ZUNvbHVtbkRlZmluaXRpb24gfSBmcm9tICcuL2RhdGEtdGFibGUtdGVtcGxhdGUvZGF0YS10YWJsZS10ZW1wbGF0ZS1jb2x1bW4tZGVmaW5pdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGF0YVRhYmxlVGVtcGxhdGVDZWxsRGVmaW5pdGlvbiB9IGZyb20gJy4vZGF0YS10YWJsZS10ZW1wbGF0ZS9kYXRhLXRhYmxlLXRlbXBsYXRlLWNlbGwtZGVmaW5pdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGF0YVRhYmxlVGVtcGxhdGVFeHBhbmRhYmxlQ2VsbERlZmluaXRpb24gfSBmcm9tICcuL2RhdGEtdGFibGUtdGVtcGxhdGUvZGF0YS10YWJsZS10ZW1wbGF0ZS1leHBhbmRhYmxlLWNlbGwtZGVmaW5pdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGF0YVRhYmxlVGVtcGxhdGVFeHBhbmRhYmxlQ29sdW1uRGVmaW5pdGlvbiB9IGZyb20gJy4vZGF0YS10YWJsZS10ZW1wbGF0ZS9kYXRhLXRhYmxlLXRlbXBsYXRlLWV4cGFuZGFibGUtY29sdW1uLWRlZmluaXRpb24uZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWFkLWRhdGEtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGEtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ2RldGFpbEV4cGFuZCcsIFtcbiAgICAgIHN0YXRlKCdjb2xsYXBzZWQsdm9pZCcsIHN0eWxlKHsgaGVpZ2h0OiAnMHB4JywgbWluSGVpZ2h0OiAnMCcgfSkpLFxuICAgICAgc3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoeyBoZWlnaHQ6ICcqJyB9KSksXG4gICAgICB0cmFuc2l0aW9uKCdleHBhbmRlZCA8PT4gY29sbGFwc2VkJywgYW5pbWF0ZSgnMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJykpLFxuICAgIF0pLFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBNYXRNZW51TW9kdWxlLFxuICAgIE1hdFBhZ2luYXRvck1vZHVsZSxcbiAgICBNYXRTb3J0TW9kdWxlLFxuICAgIE1hdFRhYmxlTW9kdWxlLFxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICAgIE1hdFJhZGlvTW9kdWxlLFxuICAgIE1hdEJhZGdlTW9kdWxlLFxuICAgIERyYWdEcm9wTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIERhdGFUYWJsZUZpbHRlckhlYWRlcixcbiAgICBEYXRhVGFibGVGaWx0ZXIsXG4gICAgRGF0YVRhYmxlVGVtcGxhdGVDb2x1bW5EZWZpbml0aW9uLFxuICAgIERhdGFUYWJsZVRlbXBsYXRlQ2VsbERlZmluaXRpb24sXG4gICAgRGF0YVRhYmxlVGVtcGxhdGVFeHBhbmRhYmxlQ29sdW1uRGVmaW5pdGlvbixcbiAgICBEYXRhVGFibGVUZW1wbGF0ZUV4cGFuZGFibGVDZWxsRGVmaW5pdGlvbixcbiAgXSxcbiAgcHJvdmlkZXJzOiBbREFUQV9UQUJMRV9QRVJTSVNURU5DRV9TRVJWSUNFX1BST1ZJREVSLCBNQURfREFUQV9UQUJMX0dMT0JBTF9DT05GSUdVUkFUSU9OX1BST1ZJREVSXSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcblxuICAvLyBUcmFuc2xhdGlvbnNcbiAgQElucHV0KCkgZmlsdGVyTGFiZWwgPSAnY29tbW9uLmZpbHRlcic7XG4gIEBJbnB1dCgpIGZpbHRlclBsYWNlaG9sZGVyID0gJyc7XG4gIEBJbnB1dCgpIGZpbHRlckNvbHVtbnNMYWJlbCA9ICdGaWx0ZXInO1xuICBASW5wdXQoKSBmaWx0ZXJDb2x1bW5zUGxhY2VIb2xkZXIgPSAnRmlsdGVyIGF2YWlsYWJsZSBjb2x1bW5zJztcbiAgQElucHV0KCkgc2hvd0VtcHR5VGFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgbm9EYXRhVGV4dCA9ICdObyBtYXRjaGluZyBkYXRhIGZvdW5kJztcbiAgQElucHV0KCkgY29sdW1uU2V0dGluZ3NNb2RhbFRpdGxlTGFiZWwgPSAnQ29sdW1uIHNldHRpbmdzJztcbiAgQElucHV0KCkgc2VsZWN0ZWRMYWJlbCA9ICdTZWxlY3RlZCBjb2x1bW5zJztcbiAgQElucHV0KCkgYXZhaWxhYmxlTGFiZWwgPSAnQXZhaWxhYmxlIGNvbHVtbnMnO1xuICBASW5wdXQoKSBzYXZlTGFiZWwgPSAnU2F2ZSc7XG4gIEBJbnB1dCgpIGRlbGV0ZUxhYmVsID0gJ0RlbGV0ZSc7XG4gIEBJbnB1dCgpIGNhbmNlbExhYmVsID0gJ0NhbmNlbCc7XG4gIEBJbnB1dCgpIGluZm9UZXh0TGFiZWwgPSAnRHJhZyBhbmQgZHJvcCBhIGNvbHVtbiB0byBzZWxlY3Qgb3IgcmVvcmRlciBpdC4nO1xuICBASW5wdXQoKSB0YWJsZUNsYXNzOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgdHJhbnNsYXRlTGFiZWxzID0gdHJ1ZTtcblxuICBASW5wdXQoKSBzZXQgdXNlQXN5bmModXNlQXN5bmM6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl91c2VBc3luYyA9IHVzZUFzeW5jO1xuICAgIHRoaXMuYXBwbHlTb3J0RGF0YSgpO1xuICB9XG4gIEBJbnB1dCgpIHN0YXRlZnVsID0gZmFsc2U7XG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSB0YWJsZURhdGE6IGFueTtcbiAgQElucHV0KCkgaWRHZW5lcmF0b3I6IGFueTtcbiAgQElucHV0KCkgcGFyZW50SWRHZW5lcmF0b3I6IGFueTtcblxuICBASW5wdXQoKSBkZWZhdWx0U29ydDogU29ydDtcbiAgQElucHV0KCkgZXh0ZXJuYWxGaWx0ZXI6IGFueTtcbiAgQElucHV0KCkgcGFnaW5hdGlvbkVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcGFnZTogUGFnZUV2ZW50ID0geyBwYWdlSW5kZXg6IDAsIHBhZ2VTaXplOiA1MCwgbGVuZ3RoOiAwIH07XG4gIEBJbnB1dCgpIHBhZ2VTaXplT3B0aW9ucyA9IFs1LCAxMCwgMTVdO1xuXG4gIEBJbnB1dCgpIGFjdGlvbnM6IERhdGFUYWJsZUFjdGlvbltdID0gW107XG4gIEBJbnB1dCgpIHNlbGVjdGlvbkVtaXRUeXBlOiBEYXRhVGFibGVTZWxlY3Rpb25FbWl0VHlwZSA9ICdJRCc7XG4gIEBJbnB1dCgpIHNob3dEZWxldGVGaWx0ZXJBY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBkaXNhYmxlUm93Q2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBkZWxldGVEZWZpbml0aW9uQWxsb3dlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uOiBzdHJpbmdbXSB8IGFueVtdKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uID0gc2VsZWN0aW9uO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uTW9kZWwoc2VsZWN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiBQbGVhc2UgdXNlIFwiZmlsdGVyTW9kZVwiIGluc3RlYWRcbiAgICovXG4gIEBJbnB1dCgpIHNldCBmaWx0ZXJFbmFibGVkKGlzRmlsdGVyRW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuX2ZpbHRlck1vZGUgPSBpc0ZpbHRlckVuYWJsZWQgPyAnVEFCTEVfQkFTRUQnIDogJ05PTkUnO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXJQcmVkaWNhdGUoKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBmaWx0ZXJNb2RlKGZpbHRlck1vZGU6IERhdGFUYWJsZUZpbHRlck1vZGUpIHtcbiAgICB0aGlzLl9maWx0ZXJNb2RlID0gZmlsdGVyTW9kZTtcbiAgICB0aGlzLmFwcGx5RmlsdGVyUHJlZGljYXRlKCk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZmlsdGVyVmFsdWUoZmlsdGVyVmFsdWU6IHN0cmluZyB8IERhdGFUYWJsZUZpbHRlck9iamVjdCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2ZpbHRlclZhbHVlID0gZmlsdGVyVmFsdWU7XG4gICAgdGhpcy5hcHBseUZpbHRlclZhbHVlKHRoaXMuX2ZpbHRlclZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBleHRlcm5hbFBhZ2luYXRvcihwYWdpbmF0b3I6IGFueSkge1xuICAgIHRoaXMuZXh0UGFnaW5hdG9yID0gcGFnaW5hdG9yO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGRlZmF1bHRQYWdlU2l6ZShkZWZhdWx0U2l6ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5wYWdlID0ge1xuICAgICAgLi4udGhpcy5wYWdlLFxuICAgICAgcGFnZVNpemU6IGRlZmF1bHRTaXplLFxuICAgIH07XG4gIH1cblxuICBASW5wdXQoKSBzZXQgc2VsZWN0aW9uRW1pdE1vZGUoc2VsZWN0aW9uRW1pdE1vZGU6IERhdGFUYWJsZVNlbGVjdGlvbkVtaXRNb2RlKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uRW1pdE1vZGUgPSBzZWxlY3Rpb25FbWl0TW9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiBUaGlzIGZ1bmN0aW9uIG1peGVzIHVwIDIgcmVzcG9uc2liaWxpdGllczpcbiAgICogIC0gZGV0ZXJtaW5pbmcgaWYgYWN0aW9ucyBzaG91bGQgYmUgZGlzcGxheWVkIC8gaGFuZGxlZFxuICAgKiAgLSBkZXRlcm1pbmluZyB3aGV0aGVyIGFjdGlvbnMgYXJlIHJvdyBiYXNlZCAoc2luZ2xlKSBvciB0YWJsZSBiYXNlZCAoYmF0Y2gpXG4gICAqIFBsZWFzZSB1c2UgYSBjb21iaW5hdGlvbiBvZiBcInNlbGVjdGlvbkVtaXRNb2RlXCIgYW5kIFwic2VsZWN0aW9uTW9kZVwiIGluc3RlYWQ6XG4gICAqICAtIHNlbGVjdGlvbkVtaXRNb2RlIGRldGVybWluZXMgaG93IHNlbGVjdGVkIGl0ZW1zIGFyZSBoYW5kbGVkIChhcyBwYXJ0IG9mIGFjdGlvbnMsIGFzIHNlbGVjdGlvbnMgb3Igbm90IGF0IGFsbClcbiAgICogIC0gc2VsZWN0aW9uTW9kZSBkZXRlcm1pbmVzIGlmIHNlbGVjdGVkIGl0ZW1zIGFyZSB0cmVhdGVkIHNlcGFyYXRlbHkgKHNpbmdsZSkgb3IgdG9nZXRoZXIgKGJhdGNoKVxuICAgKi9cbiAgQElucHV0KCkgc2V0IGZvcmNlTW9kZShzZWxlY3Rpb25Nb2RlOiBzdHJpbmcpIHtcbiAgICBpZiAoc2VsZWN0aW9uTW9kZSA9PT0gJ1NJTkdMRScgfHwgc2VsZWN0aW9uTW9kZSA9PT0gJ0JBVENIJykge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uRW1pdE1vZGUgPSAnT05fQUNUSU9OJztcbiAgICAgIHRoaXMuX2ZvcmNlU2VsZWN0aW9uTW9kZSA9IDxEYXRhVGFibGVTZWxlY3Rpb25Nb2RlPnNlbGVjdGlvbk1vZGU7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBmb3JjZVNlbGVjdGlvbk1vZGUoc2VsZWN0aW9uTW9kZTogRGF0YVRhYmxlU2VsZWN0aW9uTW9kZSkge1xuICAgIHRoaXMuX2ZvcmNlU2VsZWN0aW9uTW9kZSA9IHNlbGVjdGlvbk1vZGU7XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBkaXNwbGF5ZWRDb2x1bW5zKGNvbHM6IERhdGFUYWJsZUNvbHVtbltdKSB7XG4gICAgaWYgKCF0aGlzLmRpc3BsYXllZENvbHVtbkRlZmluaXRpb24pIHtcbiAgICAgIHRoaXMuY29sdW1ucyA9IGNvbHMgPyBbLi4uY29sc10gOiBbXTtcbiAgICAgIHRoaXMuY29sdW1uSWRzID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uaWQpO1xuICAgICAgdGhpcy5jb2x1bW5JZHMudW5zaGlmdCh0aGlzLkFDVElPTl9DT0xVTU5fTkFNRSk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCkgc2V0IGRpc3BsYXllZENvbHVtbkRlZmluaXRpb24oZGVmOiBEYXRhVGFibGVDb2x1bW5EZWZpbml0aW9uKSB7XG4gICAgdGhpcy5jb2x1bW5zID0gZGVmLmRpc3BsYXllZENvbHVtbnM7XG4gICAgdGhpcy5jb2x1bW5JZHMgPSB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5pZCk7XG4gICAgdGhpcy5jb2x1bW5JZHMudW5zaGlmdCh0aGlzLkFDVElPTl9DT0xVTU5fTkFNRSk7XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5EZWZpbml0aW9uID0gZGVmO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGNvbHVtbkRlZmluaXRpb25zKGRlZmluaXRpb25zOiBEYXRhVGFibGVDb2x1bW5EZWZpbml0aW9uW10pIHtcbiAgICB0aGlzLmVkaXRhYmxlQ29sdW1uRGVmaW5pdGlvbnMgPSBbXTtcbiAgICB0aGlzLnZpZXdhYmxlQ29sdW1uRGVmaW5pdGlvbnMgPSBbXTtcbiAgICB0aGlzLl9hbGxDb2x1bW5EZWZpbml0aW9ucyA9IFsuLi5kZWZpbml0aW9uc107XG4gICAgZm9yIChjb25zdCBkZWZpbml0aW9uIG9mIGRlZmluaXRpb25zKSB7XG4gICAgICBpZiAoZGVmaW5pdGlvbi5lZGl0YWJsZSkge1xuICAgICAgICB0aGlzLmVkaXRhYmxlQ29sdW1uRGVmaW5pdGlvbnMucHVzaChkZWZpbml0aW9uKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWZpbml0aW9uLmRpc3BsYXllZENvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy52aWV3YWJsZUNvbHVtbkRlZmluaXRpb25zLnB1c2goZGVmaW5pdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCkgc2V0IGFsbENvbHVtbnMoYWxsQ29sdW1uczogRGF0YVRhYmxlQ29sdW1uW10pIHtcbiAgICB0aGlzLl9hbGxBdmFpbGFibGVDb2x1bW5zID0gYWxsQ29sdW1ucztcbiAgICBpZiAoYWxsQ29sdW1ucyAmJiB0aGlzLl9zaG93Q29sdW1uTW9kYWwpIHtcbiAgICAgIHRoaXMub3BlbkNvbHVtbk1vZGFsKCk7XG4gICAgfVxuICB9XG5cbiAgQE91dHB1dCgpIGFjdGlvbkV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhVGFibGVBY3Rpb24+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgQE91dHB1dCgpIHNvcnRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8U29ydD4oKTtcbiAgQE91dHB1dCgpIGZpbHRlckV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBEYXRhVGFibGVGaWx0ZXJPYmplY3QgfCB1bmRlZmluZWQ+KCk7XG4gIEBPdXRwdXQoKSBwYWdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2VFdmVudD4oKTtcblxuICBAT3V0cHV0KCkgYWxsQ29sdW1uc0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgY29sdW1uRGVmaW5pdGlvbkNoYW5nZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhVGFibGVDb2x1bW5EZWZpbml0aW9uQ2hhbmdlPigpO1xuICBAT3V0cHV0KCkgdmlld0RlZmluaXRpb25DaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbj4oKTtcblxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydDogTWF0U29ydDtcbiAgQFZpZXdDaGlsZChEYXRhVGFibGVGaWx0ZXIpIGZpbHRlcjogRGF0YVRhYmxlRmlsdGVyO1xuICBAQ29udGVudENoaWxkcmVuKERhdGFUYWJsZVRlbXBsYXRlQ29sdW1uRGVmaW5pdGlvbikgY29sdW1uRGVmczogUXVlcnlMaXN0PERhdGFUYWJsZVRlbXBsYXRlQ29sdW1uRGVmaW5pdGlvbj47XG4gIEBDb250ZW50Q2hpbGQoRGF0YVRhYmxlVGVtcGxhdGVFeHBhbmRhYmxlQ2VsbERlZmluaXRpb24pXG4gIGV4cGFuZGFibGVEZWY6IERhdGFUYWJsZVRlbXBsYXRlRXhwYW5kYWJsZUNlbGxEZWZpbml0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnlbXT47XG4gIGFsbFNlbGVjdGVkID0gZmFsc2U7XG5cbiAgZXh0UGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG5cbiAgcmVhZG9ubHkgQUNUSU9OX0NPTFVNTl9OQU1FID0gJ19fYWN0aW9uX18nO1xuICB0YWJsZUFjdGlvbnM6IERhdGFUYWJsZUFjdGlvbltdW10gPSBbXTtcbiAgcm93QWN0aW9uczogRGF0YVRhYmxlQWN0aW9uW10gPSBbXTtcblxuICBjb2x1bW5zOiBEYXRhVGFibGVDb2x1bW5bXSA9IFtdO1xuICBjb2x1bW5JZHM6IHN0cmluZ1tdO1xuXG4gIGV4cGFuZGVkRWxlbWVudDogRGF0YVRhYmxlQ29sdW1uIHwgbnVsbDtcblxuICBlZGl0YWJsZUNvbHVtbkRlZmluaXRpb25zOiBEYXRhVGFibGVDb2x1bW5EZWZpbml0aW9uW107XG4gIHZpZXdhYmxlQ29sdW1uRGVmaW5pdGlvbnM6IERhdGFUYWJsZUNvbHVtbkRlZmluaXRpb25bXTtcblxuICBwcml2YXRlIF91c2VBc3luYzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3Jvd01hcCA9IG5ldyBNYXA8c3RyaW5nLCBEYXRhVGFibGVSb3c+KCk7XG4gIHByaXZhdGUgX3NlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsPHN0cmluZz4odHJ1ZSk7XG4gIHByaXZhdGUgX3NlbGVjdGlvbjogc3RyaW5nW10gfCBhbnlbXTtcblxuICBwcml2YXRlIF9mb3JjZVNlbGVjdGlvbk1vZGU6IERhdGFUYWJsZVNlbGVjdGlvbk1vZGU7XG4gIHByaXZhdGUgX3NlbGVjdGlvbkVtaXRNb2RlOiBEYXRhVGFibGVTZWxlY3Rpb25FbWl0TW9kZSA9ICdOT05FJztcbiAgcHJpdmF0ZSBfZmlsdGVyTW9kZTogRGF0YVRhYmxlRmlsdGVyTW9kZSA9ICdOT05FJztcbiAgcHJpdmF0ZSBfZmlsdGVyVmFsdWU6IHN0cmluZyB8IERhdGFUYWJsZUZpbHRlck9iamVjdCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIF9hbGxDb2x1bW5EZWZpbml0aW9uczogRGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbltdID0gW107XG4gIHByaXZhdGUgX2FsbEF2YWlsYWJsZUNvbHVtbnM6IERhdGFUYWJsZUNvbHVtbltdO1xuICBwcml2YXRlIF9zZWxlY3RlZENvbHVtbkRlZmluaXRpb246IERhdGFUYWJsZUNvbHVtbkRlZmluaXRpb247XG4gIHByaXZhdGUgX3Nob3dDb2x1bW5Nb2RhbCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgbWF0RGlhbG9nOiBNYXREaWFsb2csXG4gICAgQEluamVjdChNQURfREFUQV9UQUJMRV9QRVJTSVNURU5DRV9TRVJWSUNFKSBwcml2YXRlIHBlcnNpc3RlbmNlU2VydmljZTogRGF0YVRhYmxlUGVyc2lzdGVuY2VTZXJ2aWNlLFxuICAgIEBJbmplY3QoTUFEX0RBVEFfVEFCTEVfR0xPQkFMX0NPTkZJR1VSQVRJT04pIHByaXZhdGUgZGF0YVRhYmxlR2xvYmFsQ29uZmlnOiBEYXRhVGFibGVHbG9iYWxDb25maWd1cmF0aW9uLFxuICApIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPGFueT4oKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3VzZUFzeW5jKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgICB9XG4gICAgdGhpcy5hcHBseVNvcnREYXRhKCk7XG4gICAgdGhpcy5pbml0U3RhdGUoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoJ3RhYmxlRGF0YScgaW4gY2hhbmdlcykge1xuICAgICAgdGhpcy51cGRhdGVEYXRhVGFibGVEYXRhKCk7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbk1vZGVsKHRoaXMuZ2V0U2VsZWN0aW9uKCdJRCcpLmxlbmd0aCA/IHRoaXMuZ2V0U2VsZWN0aW9uKCdJRCcpIDogdGhpcy5fc2VsZWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLnNob3dBbGwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQYWdpbmF0b3IoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCdpZEdlbmVyYXRvcicgaW4gY2hhbmdlcyB8fCAnZGlzcGxheWVkQ29sdW1ucycgaW4gY2hhbmdlcykge1xuICAgICAgdGhpcy51cGRhdGVEYXRhVGFibGVEYXRhKCk7XG4gICAgfVxuXG4gICAgLy8gcGVyZm9ybWFuY2UgcmVhc29ucyAoc2FtZSBiZWhhdmlvdXIgY291bGQgYmUgYWNoaXZlZCBpbiBnZXR0ZXJzKVxuICAgIGlmICgnZm9yY2VNb2RlJyBpbiBjaGFuZ2VzIHx8ICdmb3JjZVNlbGVjdGlvbk1vZGUnIGluIGNoYW5nZXMgfHwgJ2FjdGlvbnMnIGluIGNoYW5nZXMpIHtcbiAgICAgIGNvbnN0IGFjdGlvbnMgPSBEYXRhVGFibGVBY3Rpb25VdGlsLmdldERpc3BsYXlBY3Rpb25zKHRoaXMuYWN0aW9ucywgdGhpcy5zZWxlY3Rpb25Nb2RlKTtcbiAgICAgIHRoaXMucm93QWN0aW9ucyA9IGFjdGlvbnMucm93QWN0aW9ucztcbiAgICAgIHRoaXMudGFibGVBY3Rpb25zID0gYWN0aW9ucy5ncm91cGVkVGFibGVBY3Rpb25zO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUQUJMRSBESVNQTEFZIEhBTkRMSU5HICovXG5cbiAgcHVibGljIGdldERhdGFUYWJsZUhlYWRlclR5cGUoY29sdW1uOiBEYXRhVGFibGVDb2x1bW4pOiBEYXRhVGFibGVIZWFkZXJUeXBlIHtcbiAgICBpZiAoY29sdW1uLmlzU29ydGFibGUgJiYgIWNvbHVtbi5pc0ZpbHRlcmFibGUpIHtcbiAgICAgIHJldHVybiAnU09SVCc7XG4gICAgfVxuICAgIGlmICghY29sdW1uLmlzU29ydGFibGUgJiYgY29sdW1uLmlzRmlsdGVyYWJsZSkge1xuICAgICAgcmV0dXJuICdGSUxURVInO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmlzU29ydGFibGUgJiYgY29sdW1uLmlzRmlsdGVyYWJsZSkge1xuICAgICAgcmV0dXJuICdTT1JUX0FORF9GSUxURVInO1xuICAgIH1cbiAgICByZXR1cm4gJ1BMQUlOJztcbiAgfVxuXG4gIHB1YmxpYyBnZXRDdXN0b21DZWxsVGVtcGxhdGUoY29sdW1uSWQ6IHN0cmluZyk6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsIHtcbiAgICBjb25zdCBjb2x1bW5EZWYgPSB0aGlzLmNvbHVtbkRlZnMuZmluZCgoaXQpID0+IGl0Lm1hZENvbHVtbkRlZiA9PT0gY29sdW1uSWQpO1xuICAgIHJldHVybiBjb2x1bW5EZWYgJiYgY29sdW1uRGVmLmNlbGxEZWYgPyBjb2x1bW5EZWYuY2VsbERlZi5nZXRDZWxsVGVtcGxhdGUoKSA6IG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VzdG9tRXhwYW5kYWJsZVRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5leHBhbmRhYmxlRGVmPy5nZXRDZWxsVGVtcGxhdGUoKSB8fCBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldCBleHBhbmRhYmxlQ29sdW1uRGVmKCkge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGFibGVEZWY/LmNvbHVtbkRlZi5tYWRFeHBhbmRhYmxlQ29sdW1uRGVmIHx8ICcnO1xuICB9XG5cbiAgcHVibGljIG9uRXhwYW5kKGV2ZW50OiBNb3VzZUV2ZW50LCBlbGVtZW50OiBEYXRhVGFibGVDb2x1bW4pIHtcbiAgICB0aGlzLmV4cGFuZGVkRWxlbWVudCA9IHRoaXMuZXhwYW5kZWRFbGVtZW50ID09PSBlbGVtZW50ID8gbnVsbCA6IGVsZW1lbnQ7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICAvKiogQUNUSU9OIEJVVFRPTiBESVNQTEFZIEhBTkRMSU5HICovXG5cbiAgcHVibGljIGhhc1Zpc2libGVSb3dBY3Rpb25zKGRpc3BsYXllZERhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5yb3dBY3Rpb25zLmV2ZXJ5KChhY3Rpb24pID0+IHRoaXMuaXNIaWRkZW5Gb3JEYXRhKGFjdGlvbiwgW3RoaXMuX3Jvd01hcC5nZXQoZGlzcGxheWVkRGF0YS5yb3dJZCk/LmFjdHVhbERhdGFdKSk7XG4gIH1cblxuICBwdWJsaWMgaXNIaWRkZW4oYWN0aW9uOiBEYXRhVGFibGVBY3Rpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0hpZGRlbkZvckRhdGEoYWN0aW9uLCB0aGlzLmdldFNlbGVjdGlvbignREFUQScpKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNIaWRkZW5Gb3JEYXRhKGFjdGlvbjogRGF0YVRhYmxlQWN0aW9uLCBkYXRhOiBhbnlbXSkge1xuICAgIHJldHVybiAhIWFjdGlvbi5pc0hpZGRlbiAmJiBhY3Rpb24uaXNIaWRkZW4oZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgaXNEaXNhYmxlZChhY3Rpb246IERhdGFUYWJsZUFjdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGlzYWJsZWRGb3JBY3Rpb25UeXBlKGFjdGlvbi50eXBlKSB8fCAoISFhY3Rpb24uaXNEaXNhYmxlZCAmJiBhY3Rpb24uaXNEaXNhYmxlZCh0aGlzLmdldFNlbGVjdGlvbignREFUQScpKSk7XG4gIH1cblxuICBwcml2YXRlIGlzRGlzYWJsZWRGb3JBY3Rpb25UeXBlKGFjdGlvblR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAoYWN0aW9uVHlwZSkge1xuICAgICAgY2FzZSAnU0lOR0xFJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDb3VudCAhPT0gMTtcbiAgICAgIGNhc2UgJ0JBVENIJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDb3VudCA8IDE7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkQ291bnQoYWN0aW9uVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuc2VsZWN0ZWRDb3VudDtcbiAgICBpZiAoYWN0aW9uVHlwZSAhPT0gJ0JBVENIJyB8fCBjb3VudCA8IDIpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIGAgKCR7Y291bnR9KWA7XG4gIH1cblxuICBwcml2YXRlIGdldCBzZWxlY3RlZENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsPy5zZWxlY3RlZCA/IHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmxlbmd0aCA6IDA7XG4gIH1cblxuICAvKiogVEFCTEUgREFUQSBDSEFOR0UgSEFORExJTkcgKi9cblxuICBwcml2YXRlIHVwZGF0ZURhdGFUYWJsZURhdGEoKTogdm9pZCB7XG4gICAgLy8gZG8gbm90IG1ha2UgdGhpcyBmdW5jdGlvbiBpbW11dGFibGUgLSB3ZSBkZXNwYXJhdGVseSBuZWVkIHRoZSByZWZlcmVuY2Ugb2Ygcm93TWFwIHRvIHN0YXkgdGhlIHNhbWVcbiAgICBEYXRhVGFibGVEYXRhVXRpbC51cGRhdGVSb3dNYXAodGhpcy5fcm93TWFwLCB0aGlzLnRhYmxlRGF0YSwgdGhpcy5jb2x1bW5zLCB0aGlzLmlkR2VuZXJhdG9yLCB0aGlzLnBhcmVudElkR2VuZXJhdG9yKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IEFycmF5LmZyb20odGhpcy5fcm93TWFwLnZhbHVlcygpKS5tYXAoKGl0KSA9PiBpdC5kaXNwbGF5ZWREYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0aW9uTW9kZWwoc2VsZWN0aW9uOiBzdHJpbmdbXSB8IGFueVtdKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcbiAgICBzZWxlY3Rpb24/LmZvckVhY2goKGl0KSA9PiB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fcm93TWFwLmdldChpdCkgfHwgWy4uLnRoaXMuX3Jvd01hcC52YWx1ZXMoKV0uZmluZCgocm93KSA9PiByb3cuYWN0dWFsRGF0YSA9PT0gaXQpO1xuICAgICAgaWYgKCEhaXRlbSkge1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uRXZlbnQoaXRlbS5pZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKCk7XG4gIH1cblxuICAvKiogQUNUSU9OICYgU0VMRUNUSU9OIEhBTkRMSU5HICovXG5cbiAgcHVibGljIGdldCBzZWxlY3Rpb25FbWl0TW9kZSgpOiBEYXRhVGFibGVTZWxlY3Rpb25FbWl0TW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbkVtaXRNb2RlID09PSAnTk9ORScgJiYgISF0aGlzLmFjdGlvbnMubGVuZ3RoID8gJ09OX0FDVElPTicgOiB0aGlzLl9zZWxlY3Rpb25FbWl0TW9kZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0aW9uTW9kZSgpOiBEYXRhVGFibGVTZWxlY3Rpb25Nb2RlIHtcbiAgICByZXR1cm4gISF0aGlzLl9mb3JjZVNlbGVjdGlvbk1vZGUgPyB0aGlzLl9mb3JjZVNlbGVjdGlvbk1vZGUgOiB0aGlzLmFjdGlvbnMuZmluZCgoaXQpID0+IGl0LnR5cGUgPT09ICdCQVRDSCcpID8gJ0JBVENIJyA6ICdTSU5HTEUnO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWx0ZXJlZFBhZ2VEYXRhKCk6IGFueVtdIHtcbiAgICAvLyBvbmx5IHVzZSBmaWx0ZXJlZCBkYXRhXG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZT8uX3BhZ2VEYXRhKHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJlZERhdGEpO1xuICB9XG5cbiAgcHVibGljIGdldCBzaG93QWN0aW9uQ29sdW1uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKHRoaXMuc2VsZWN0aW9uRW1pdE1vZGUgPT09ICdOT05FJyB8fCB0aGlzLmhpZGVBY3Rpb25Db2x1bW4pIHx8ICEhdGhpcy5leHBhbmRhYmxlRGVmO1xuICB9XG5cbiAgcHVibGljIHNob3dDaGVja2JveChkaXNwbGF5ZWREYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIWRpc3BsYXllZERhdGEucGFyZW50SWQgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnQkFUQ0gnICYmICF0aGlzLmhpZGVBY3Rpb25Db2x1bW47XG4gIH1cblxuICBwdWJsaWMgc2hvd1Jvd0FjdGlvbkljb24oZGlzcGxheWVkRGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFkaXNwbGF5ZWREYXRhLnBhcmVudElkICYmIHRoaXMuc2VsZWN0aW9uRW1pdE1vZGUgPT09ICdPTl9BQ1RJT04nICYmIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ1NJTkdMRScgJiYgIXRoaXMuaGlkZUFjdGlvbkNvbHVtbjtcbiAgfVxuXG4gIHB1YmxpYyBzaG93UmFkaW9CdXR0b24oZGlzcGxheWVkRGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFkaXNwbGF5ZWREYXRhLnBhcmVudElkICYmIHRoaXMuc2VsZWN0aW9uRW1pdE1vZGUgPT09ICdPTl9TRUxFQ1RJT04nICYmIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ1NJTkdMRSc7XG4gIH1cblxuICBwdWJsaWMgc2hvd0V4cGFuZGFibGVCdXR0b24oZGlzcGxheWVkRGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFkaXNwbGF5ZWREYXRhLnBhcmVudElkICYmICEhdGhpcy5leHBhbmRhYmxlRGVmO1xuICB9XG5cbiAgcHVibGljIGlzU2VsZWN0ZWQocm93SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKHJvd0lkKTtcbiAgfVxuXG4gIHB1YmxpYyBvblRvZ2dsZVNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICAvLyBjbGVhciBhbGwgc2VsZWN0aW9uIGZpcnN0XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcbiAgICAvLyB0b2dnbGUgYWxsIGNoZWNrYm94XG4gICAgdGhpcy5hbGxTZWxlY3RlZCA9ICF0aGlzLmFsbFNlbGVjdGVkO1xuICAgIGlmICh0aGlzLmFsbFNlbGVjdGVkKSB7XG4gICAgICAvLyBzZWxlY3QgYWxsIHJvd3Mgb2YgdGhlIGN1cnJlbnQgcGFnZVxuICAgICAgdGhpcy5maWx0ZXJlZFBhZ2VEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICBpZiAoIXJvdy5wYXJlbnRJZCkge1xuICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChyb3cucm93SWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgb25BY3Rpb25FdmVudChhY3Rpb246IERhdGFUYWJsZUFjdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGVtaXRBY3Rpb24gPSB7IC4uLmFjdGlvbiB9O1xuICAgIGlmICghIWVtaXRBY3Rpb24gJiYgdGhpcy5zZWxlY3Rpb25FbWl0TW9kZSAhPT0gJ05PTkUnKSB7XG4gICAgICBlbWl0QWN0aW9uLnNlbGVjdGVkID0gdGhpcy5nZXRTZWxlY3Rpb24odGhpcy5zZWxlY3Rpb25FbWl0VHlwZSk7XG4gICAgICB0aGlzLmFjdGlvbkV2ZW50LmVtaXQoZW1pdEFjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uU2VsZWN0aW9uRXZlbnQoaWQ6IGFueSk6IHZvaWQge1xuICAgIHN3aXRjaCAodGhpcy5zZWxlY3Rpb25Nb2RlKSB7XG4gICAgICBjYXNlICdCQVRDSCc6XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnRvZ2dsZShpZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnU0lOR0xFJzpcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwudG9nZ2xlKGlkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uUm93RXZlbnQoZXZlbnQ6IE1vdXNlRXZlbnQsIHJvdzogYW55LCBhY3Rpb24gPSB0aGlzLmRlZmF1bHRBY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25FbWl0TW9kZSA9PT0gJ05PTkUnIHx8IHJvdz8ucGFyZW50SWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9uU2VsZWN0aW9uRXZlbnQocm93LnJvd0lkKTtcbiAgICB0aGlzLnByb2Nlc3NTZWxlY3Rpb24oZXZlbnQsIGFjdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0QWN0aW9uKCk6IERhdGFUYWJsZUFjdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uRW1pdE1vZGUgIT09ICdOT05FJyA/IHRoaXMucm93QWN0aW9uc1swXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGhpZGVBY3Rpb25Db2x1bW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uRW1pdE1vZGUgPT09ICdPTl9BQ1RJT04nICYmIHRoaXMuYWN0aW9ucy5ldmVyeSgoaXQpID0+IGl0LnR5cGUgPT09ICdOT05FJyk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NTZWxlY3Rpb24oZXZlbnQ6IE1vdXNlRXZlbnQsIGFjdGlvbj86IERhdGFUYWJsZUFjdGlvbik6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc2VsZWN0aW9uRW1pdE1vZGUgPT09ICdPTl9BQ1RJT04nICYmXG4gICAgICB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdTSU5HTEUnICYmXG4gICAgICAhIWFjdGlvbiAmJlxuICAgICAgIURhdGFUYWJsZUNvbXBvbmVudC5pc0NsaWNrT25Sb3dNZW51SWNvbihldmVudClcbiAgICApIHtcbiAgICAgIHRoaXMub25BY3Rpb25FdmVudChhY3Rpb24pO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdFNlbGVjdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbkVtaXRNb2RlID09PSAnT05fU0VMRUNUSU9OJykge1xuICAgICAgdGhpcy5zZWxlY3Rpb25FdmVudC5lbWl0KHRoaXMuZ2V0U2VsZWN0aW9uKHRoaXMuc2VsZWN0aW9uRW1pdFR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGlvbihzZWxlY3Rpb25FbWl0VHlwZTogRGF0YVRhYmxlU2VsZWN0aW9uRW1pdFR5cGUpOiBhbnlbXSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uOiBhbnlbXSA9IFtdO1xuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmZvckVhY2goKGl0KSA9PlxuICAgICAgLy8gaWYgSUQtZ2VuZXJhdG9yIGlzIHByb3ZpZGVkLCByZXR1cm4gdGhlIElELCBlbHNlIHJldHVybiB0aGUgQUNUVUFMIGRhdGFcbiAgICAgIHNlbGVjdGlvbi5wdXNoKHRoaXMuaWRHZW5lcmF0b3IgJiYgc2VsZWN0aW9uRW1pdFR5cGUgPT09ICdJRCcgPyBpdCA6IHRoaXMuX3Jvd01hcC5nZXQoaXQpPy5hY3R1YWxEYXRhKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzQ2xpY2tPblJvd01lbnVJY29uKGV2ZW50OiBNb3VzZUV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChldmVudD8udGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uY2xhc3NMaXN0LmNvbnRhaW5zKCdtYXQtaWNvbicpO1xuICB9XG5cbiAgLyoqIFNPUlQgSEFORExJTkcgKi9cblxuICBvblNvcnRpbmdFdmVudChzb3J0OiBTb3J0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3VzZUFzeW5jKSB7XG4gICAgICB0aGlzLnNvcnRFdmVudC5lbWl0KHNvcnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlZnVsKSB7XG4gICAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5zYXZlU29ydCh0aGlzLmlkLCBzb3J0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U29ydERhdGEoKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLnNvcnREYXRhID0gdGhpcy5fdXNlQXN5bmNcbiAgICAgID8gRGF0YVRhYmxlU29ydFV0aWwuc29ydE5vdGhpbmcoKVxuICAgICAgOiBEYXRhVGFibGVTb3J0VXRpbC5zb3J0RGF0YSh0aGlzLmRhdGFUYWJsZUdsb2JhbENvbmZpZy5kYXRlVGltZUZvcm1hdCwgdGhpcy5kYXRhVGFibGVHbG9iYWxDb25maWcubnVtYmVyRm9ybWF0KTtcbiAgfVxuXG4gIC8qKiBGSUxURVIgSEFORExJTkcgKi9cblxuICBwdWJsaWMgZ2V0IGZpbHRlck1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZUFzeW5jICYmIHRoaXMuX2ZpbHRlck1vZGUgPT09ICdUQUJMRV9CQVNFRCcgPyAnTk9ORScgOiB0aGlzLl9maWx0ZXJNb2RlO1xuICB9XG5cbiAgcHVibGljIG9uVGFibGVCYXNlZEZpbHRlckV2ZW50KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMub25GaWx0ZXJpbmdFdmVudCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQpLnZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNvbHVtbkJhc2VkRmlsdGVyRXZlbnQoZmlsdGVyOiBEYXRhVGFibGVGaWx0ZXJPYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uRmlsdGVyaW5nRXZlbnQoZmlsdGVyKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkRlbGV0ZUZpbHRlcigpOiB2b2lkIHtcbiAgICB0aGlzLm9uRmlsdGVyaW5nRXZlbnQodW5kZWZpbmVkKTtcbiAgICB0aGlzLmZpbHRlci51cGRhdGVGaWx0ZXJhYmxlcyh1bmRlZmluZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkZpbHRlcmluZ0V2ZW50KGZpbHRlcjogc3RyaW5nIHwgRGF0YVRhYmxlRmlsdGVyT2JqZWN0IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3VzZUFzeW5jKSB7XG4gICAgICB0aGlzLmZpbHRlckV2ZW50LmVtaXQoZmlsdGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbGxTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJWYWx1ZShmaWx0ZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlZnVsKSB7XG4gICAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5zYXZlRmlsdGVyKHRoaXMuaWQsIGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUZpbHRlclByZWRpY2F0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlID1cbiAgICAgIHRoaXMuZmlsdGVyTW9kZSA9PT0gJ0NPTFVNTl9CQVNFRCdcbiAgICAgICAgPyBEYXRhVGFibGVGaWx0ZXJVdGlsLmNvbHVtbkJhc2VkRmlsdGVyUHJlZGljYXRlKHRoaXMuX3Jvd01hcClcbiAgICAgICAgOiBEYXRhVGFibGVGaWx0ZXJVdGlsLnRhYmxlQmFzZWRGaWx0ZXJQcmVkaWNhdGUoKTtcbiAgICB0aGlzLmFwcGx5RmlsdGVyVmFsdWUodGhpcy5fZmlsdGVyVmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUZpbHRlclZhbHVlKHZhbHVlOiBzdHJpbmcgfCBEYXRhVGFibGVGaWx0ZXJPYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBpc1N0cmluZyA9IHR5cGVvZiB0aGlzLl9maWx0ZXJWYWx1ZSA9PT0gJ3N0cmluZyc7XG4gICAgdGhpcy5kYXRhU291cmNlLmZpbHRlciA9ICEhdmFsdWUgPyAoaXNTdHJpbmcgPyB2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkgOiAnJztcbiAgfVxuXG4gIC8qKiBQQUdJTkFUSU9OIEhBTkRMSU5HICovXG5cbiAgb25QYWdlRXZlbnQoZXZlbnQ6IFBhZ2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl91c2VBc3luYykge1xuICAgICAgdGhpcy5wYWdlRXZlbnQuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGVmdWwpIHtcbiAgICAgIHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLnNhdmVQYWdlU2l6ZSh0aGlzLmlkLCBldmVudC5wYWdlU2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHBhZ2VJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNob3dBbGwgPyAwIDogdGhpcy5wYWdlLnBhZ2VJbmRleDtcbiAgfVxuXG4gIGdldCBwYWdlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNob3dBbGwgPyB0aGlzLmRhdGFMZW5ndGggOiB0aGlzLnBhZ2UucGFnZVNpemU7XG4gIH1cblxuICBnZXQgcGFnZUxlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNob3dBbGwgPyB0aGlzLmRhdGFMZW5ndGggOiB0aGlzLnBhZ2UubGVuZ3RoO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQYWdpbmF0b3IoKSB7XG4gICAgaWYgKHRoaXMucGFnaW5hdG9yKSB7XG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlLmVtaXQodGhpcy5wYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldCBkYXRhTGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5kYXRhPy5sZW5ndGggfHwgMDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHNob3dBbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLl91c2VBc3luYyAmJiAhdGhpcy5wYWdpbmF0aW9uRW5hYmxlZDtcbiAgfVxuXG4gIC8qKiBJTklUIFNUQVRFICovXG5cbiAgcHJpdmF0ZSBpbml0U3RhdGUoKTogdm9pZCB7XG4gICAgLy8gb25seSBzZXQgZGVmYXVsdCBzb3J0IGlmIHRoZXJlIGlzIG5vIG90aGVyIHNvcnQgcGVyc2lzdGVkXG4gICAgaWYgKCEhdGhpcy5kZWZhdWx0U29ydCAmJiAhdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UubG9hZFNvcnQodGhpcy5pZCk/LmRpcmVjdGlvbikge1xuICAgICAgdGhpcy5zZXRTb3J0KHRoaXMuZGVmYXVsdFNvcnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlZnVsKSB7XG4gICAgICB0aGlzLmluaXRQYWdpbmF0b3JTdGF0ZSgpO1xuICAgICAgdGhpcy5pbml0U29ydFN0YXRlKCk7XG4gICAgICB0aGlzLmluaXRGaWx0ZXJTdGF0ZSgpO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0U29ydFN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHNvcnQgPSB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5sb2FkU29ydCh0aGlzLmlkKTtcbiAgICBpZiAoISFzb3J0KSB7XG4gICAgICB0aGlzLnNldFNvcnQoc29ydCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRTb3J0KHNvcnQ6IFNvcnQpOiB2b2lkIHtcbiAgICB0aGlzLnNvcnQuYWN0aXZlID0gc29ydC5hY3RpdmU7XG4gICAgdGhpcy5zb3J0LmRpcmVjdGlvbiA9IHNvcnQuZGlyZWN0aW9uO1xuICAgIHRoaXMuc29ydC5zb3J0Q2hhbmdlLmVtaXQoc29ydCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRGaWx0ZXJTdGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5sb2FkRmlsdGVyKHRoaXMuaWQpO1xuICAgIHRoaXMuZmlsdGVyLnVwZGF0ZUZpbHRlcmFibGVzKGZpbHRlcik7XG4gIH1cblxuICBwcml2YXRlIGluaXRQYWdpbmF0b3JTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2UgPSB7XG4gICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UubG9hZFBhZ2VTaXplKHRoaXMuaWQpIHx8IHRoaXMucGFnZVNpemUsXG4gICAgICBsZW5ndGg6IDAsXG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlUGFnaW5hdG9yKCk7XG4gIH1cblxuICAvKiogQ09MVU1OIEhBTkRMSU5HICovXG5cbiAgcHVibGljIG9uVmlld0RlZmluaXRpb24oZGVmaW5pdGlvbjogRGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1uRGVmaW5pdGlvbiA9IGRlZmluaXRpb247XG4gICAgdGhpcy52aWV3RGVmaW5pdGlvbkNoYW5nZUV2ZW50LmVtaXQoZGVmaW5pdGlvbik7XG4gIH1cblxuICBwdWJsaWMgb25Db2x1bW5TZXR0aW5ncyhkZWZpbml0aW9uPzogRGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3Nob3dDb2x1bW5Nb2RhbCA9IHRydWU7XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5EZWZpbml0aW9uID0gZGVmaW5pdGlvbiA/IGRlZmluaXRpb24gOiB0aGlzLl9hbGxDb2x1bW5EZWZpbml0aW9uc1swXTtcbiAgICBpZiAodGhpcy5fYWxsQXZhaWxhYmxlQ29sdW1ucykge1xuICAgICAgdGhpcy5vcGVuQ29sdW1uTW9kYWwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgbm8gY29tcGxldGUgZGVmaW5pdGlvbnMgaGF2ZSBiZWVuIGxvYWRlZCB5ZXQgc2VuZCBhbiBldmVudCBzbyB0aGUgYXBwIGNhbiBsb2FkIGl0XG4gICAgICB0aGlzLmFsbENvbHVtbnNFdmVudC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzQ3VycmVudERlZmluaXRpb24oZGVmaW5pdGlvbjogRGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZENvbHVtbkRlZmluaXRpb24gJiYgdGhpcy5fc2VsZWN0ZWRDb2x1bW5EZWZpbml0aW9uLmlkID09PSBkZWZpbml0aW9uLmlkO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuQ29sdW1uTW9kYWwoKTogdm9pZCB7XG4gICAgY29uc3QgZGlhbG9nRGF0YTogRGF0YVRhYmxlRGlhbG9nRGF0YSA9IHtcbiAgICAgIGFsbENvbHVtbnM6IHRoaXMuX2FsbEF2YWlsYWJsZUNvbHVtbnMsXG4gICAgICBkZWZpbml0aW9uOiB0aGlzLl9zZWxlY3RlZENvbHVtbkRlZmluaXRpb24sXG4gICAgICBkZWxldGVEZWZpbml0aW9uQWxsb3dlZDogdGhpcy5kZWxldGVEZWZpbml0aW9uQWxsb3dlZCxcbiAgICAgIGZpbHRlckNvbHVtbnNMYWJlbDogdGhpcy5maWx0ZXJDb2x1bW5zTGFiZWwsXG4gICAgICBmaWx0ZXJDb2x1bW5zUGxhY2VIb2xkZXI6IHRoaXMuZmlsdGVyQ29sdW1uc1BsYWNlSG9sZGVyLFxuICAgICAgbm9EYXRhVGV4dDogdGhpcy5ub0RhdGFUZXh0LFxuICAgICAgdGl0bGVMYWJlbDogdGhpcy5jb2x1bW5TZXR0aW5nc01vZGFsVGl0bGVMYWJlbCxcbiAgICAgIHNlbGVjdGVkTGFiZWw6IHRoaXMuc2VsZWN0ZWRMYWJlbCxcbiAgICAgIGF2YWlsYWJsZUxhYmVsOiB0aGlzLmF2YWlsYWJsZUxhYmVsLFxuICAgICAgc2F2ZUxhYmVsOiB0aGlzLnNhdmVMYWJlbCxcbiAgICAgIGRlbGV0ZUxhYmVsOiB0aGlzLmRlbGV0ZUxhYmVsLFxuICAgICAgY2FuY2VsTGFiZWw6IHRoaXMuY2FuY2VsTGFiZWwsXG4gICAgICBpbmZvVGV4dExhYmVsOiB0aGlzLmluZm9UZXh0TGFiZWwsXG4gICAgfTtcbiAgICBjb25zdCBkaWFsb2cgPSB0aGlzLm1hdERpYWxvZy5vcGVuKERhdGFUYWJsZUNvbHVtbnNNb2RhbENvbXBvbmVudCwgeyBkYXRhOiBkaWFsb2dEYXRhIH0pO1xuICAgIGRpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAvLyBubyBldmVudCBvbiBDQU5DRUxcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5EZWZpbml0aW9uQ2hhbmdlRXZlbnQuZW1pdChyZXN1bHQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWFkLWRhdGF0YWJsZS1hY3Rpb24tYmFyXCI+XG4gIDwhLS0gVGFibGUgYWN0aW9uczogZGlzcGxheWVkIGJlZm9yZSB0aGUgdGFibGUgLS0+XG4gIDxkaXYgKm5nSWY9XCJ0YWJsZUFjdGlvbnM/Lmxlbmd0aCB8fCAoZmlsdGVyTW9kZSA9PT0gJ0NPTFVNTl9CQVNFRCcgJiYgc2hvd0RlbGV0ZUZpbHRlckFjdGlvbilcIj5cbiAgICA8bWFkLWJ1dHRvbi1ncm91cCAqbmdGb3I9XCJsZXQgYWN0aW9uR3JvdXAgb2YgdGFibGVBY3Rpb25zXCIgY2xhc3M9XCJ0YWJsZS1hY3Rpb24tZ3JvdXBcIj5cbiAgICAgIDxtYWQtb3V0bGluZS1idXR0b25cbiAgICAgICAgW2hpZGRlbl09XCJpc0hpZGRlbih0YWJsZUFjdGlvbilcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCh0YWJsZUFjdGlvbilcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgdGFibGVBY3Rpb24gb2YgYWN0aW9uR3JvdXBcIlxuICAgICAgICAoY2xpY2spPVwib25BY3Rpb25FdmVudCh0YWJsZUFjdGlvbilcIlxuICAgICAgPlxuICAgICAgICB7eyB0cmFuc2xhdGVMYWJlbHMgPyAodGFibGVBY3Rpb24ubGFiZWwgfCB0cmFuc2xhdGUpIDogdGFibGVBY3Rpb24ubGFiZWwgfX1cbiAgICAgICAge3sgZ2V0U2VsZWN0ZWRDb3VudCh0YWJsZUFjdGlvbi50eXBlKSB9fVxuICAgICAgPC9tYWQtb3V0bGluZS1idXR0b24+XG4gICAgPC9tYWQtYnV0dG9uLWdyb3VwPlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlck1vZGUgPT09ICdDT0xVTU5fQkFTRUQnICYmIHNob3dEZWxldGVGaWx0ZXJBY3Rpb25cIj5cbiAgICA8bWF0LWljb24gZm9udFNldD1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCIgY2xhc3M9XCJkZWxldGUtZmlsdGVyLWFjdGlvblwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJvbkRlbGV0ZUZpbHRlcigpXCJcbiAgICAgID5maWx0ZXJfYWx0X29mZjwvbWF0LWljb25cbiAgICA+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJmaWx0ZXJNb2RlID09PSAnVEFCTEVfQkFTRUQnXCI+XG4gICAgPG1hdC1sYWJlbD57eyB0cmFuc2xhdGVMYWJlbHMgPyAoZmlsdGVyTGFiZWwgfCB0cmFuc2xhdGUpIDogZmlsdGVyTGFiZWwgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXVwKT1cIm9uVGFibGVCYXNlZEZpbHRlckV2ZW50KCRldmVudClcIiBwbGFjZWhvbGRlcj1cInt7IGZpbHRlclBsYWNlaG9sZGVyIH19XCIgLz5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuXG48IS0tIFJvdyBhY3Rpb24gbWVudSAtLT5cbjxtYXQtbWVudSAjcm93QWN0aW9uTWVudT1cIm1hdE1lbnVcIj5cbiAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50IGxldC1lbGVtZW50PVwiZWxlbWVudFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvd0FjdGlvbiBvZiByb3dBY3Rpb25zXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwiIWlzSGlkZGVuKHJvd0FjdGlvbilcIlxuICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgIGNsYXNzPVwicm93LWFjdGlvblwiXG4gICAgICAgIChjbGljayk9XCJvblJvd0V2ZW50KCRldmVudCwgZWxlbWVudCwgcm93QWN0aW9uKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKHJvd0FjdGlvbilcIlxuICAgICAgPlxuICAgICAgICB7eyB0cmFuc2xhdGVMYWJlbHMgPyAocm93QWN0aW9uLmxhYmVsIHwgdHJhbnNsYXRlKSA6IHJvd0FjdGlvbi5sYWJlbCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG48L21hdC1tZW51PlxuXG48IS0tIGVkaXRhYmxlIGRlZmluaXRpb24gbWVudSAtLT5cbjxtYXQtbWVudSAjZWRpdGFibGVEZWZpbml0aW9uTWVudT1cIm1hdE1lbnVcIj5cbiAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50PlxuICAgIDxidXR0b25cbiAgICAgICpuZ0Zvcj1cImxldCBkZWZpbml0aW9uIG9mIGVkaXRhYmxlQ29sdW1uRGVmaW5pdGlvbnNcIlxuICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgY2xhc3M9XCJyb3ctYWN0aW9uXCJcbiAgICAgIChjbGljayk9XCJvbkNvbHVtblNldHRpbmdzKGRlZmluaXRpb24pXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZS1jb2x1bW4tZGVmaW5pdGlvbic6IGlzQ3VycmVudERlZmluaXRpb24oZGVmaW5pdGlvbikgfVwiXG4gICAgPlxuICAgICAge3sgdHJhbnNsYXRlTGFiZWxzID8gKGRlZmluaXRpb24ubGFiZWwgfCB0cmFuc2xhdGUpIDogZGVmaW5pdGlvbi5sYWJlbCB9fVxuICAgIDwvYnV0dG9uPlxuICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtbWVudT5cblxuPCEtLSB2aWV3YWJsZSBkZWZpbml0aW9uIG1lbnUgLS0+XG48bWF0LW1lbnUgI3ZpZXdhYmxlRGVmaW5pdGlvbk1lbnU9XCJtYXRNZW51XCI+XG4gIDxuZy10ZW1wbGF0ZSBtYXRNZW51Q29udGVudD5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdGb3I9XCJsZXQgZGVmaW5pdGlvbiBvZiB2aWV3YWJsZUNvbHVtbkRlZmluaXRpb25zXCJcbiAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgIGNsYXNzPVwicm93LWFjdGlvblwiXG4gICAgICAoY2xpY2spPVwib25WaWV3RGVmaW5pdGlvbihkZWZpbml0aW9uKVwiXG4gICAgICBbbmdDbGFzc109XCJ7ICdhY3RpdmUtY29sdW1uLWRlZmluaXRpb24nOiBpc0N1cnJlbnREZWZpbml0aW9uKGRlZmluaXRpb24pIH1cIlxuICAgID5cbiAgICAgIHt7IHRyYW5zbGF0ZUxhYmVscyA/IChkZWZpbml0aW9uLmxhYmVsIHwgdHJhbnNsYXRlKSA6IGRlZmluaXRpb24ubGFiZWwgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbWF0LW1lbnU+XG5cbjwhLS0gVGFibGUgLS0+XG48ZGl2XG4gICpuZ0lmPVwiZmlsdGVyTW9kZSA9PT0gJ0NPTFVNTl9CQVNFRCcgfHwgc2hvd0VtcHR5VGFibGUgfHwgISFmaWx0ZXJlZFBhZ2VEYXRhPy5sZW5ndGg7IGVsc2Ugbm9EYXRhXCJcbiAgY2xhc3M9XCJkYXRhdGFibGVcIlxuICBbY2xhc3NdPVwidGFibGVDbGFzc1wiXG4+XG4gIDxkaXYgY2xhc3M9XCJtYWQtZGF0YXRhYmxlLXNwaW5uZXItd3JhcHBlclwiICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgIDxtYXQtc3Bpbm5lciBbZGlhbWV0ZXJdPVwiNTBcIiBbc3Ryb2tlV2lkdGhdPVwiM1wiPjwvbWF0LXNwaW5uZXI+XG4gIDwvZGl2PlxuICA8dGFibGVcbiAgICBbaWRdPVwiaWRcIlxuICAgIG1hdC10YWJsZVxuICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxuICAgIG1hdFNvcnRcbiAgICAobWF0U29ydENoYW5nZSk9XCJvblNvcnRpbmdFdmVudCgkZXZlbnQpXCJcbiAgICBtYWRGaWx0ZXJcbiAgICAobWFkRmlsdGVyQ2hhbmdlKT1cIm9uQ29sdW1uQmFzZWRGaWx0ZXJFdmVudCgkZXZlbnQpXCJcbiAgICBbbXVsdGlUZW1wbGF0ZURhdGFSb3dzXT1cIiEhZXhwYW5kYWJsZURlZlwiXG4gID5cbiAgICA8IS0tIFJvdyBhY3Rpb25zIGNvbHVtbi0tPlxuICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJBQ1RJT05fQ09MVU1OX05BTUVcIj5cbiAgICAgIDx0aCBzY29wZT1cImNvbFwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbbmdDbGFzc109XCJzaG93QWN0aW9uQ29sdW1uID8gJ3Jvdy1hY3Rpb24tY2VsbCcgOiAnbm8tYWN0aW9uLWNlbGwnXCI+XG4gICAgICAgIDwhLS0gQkFUQ0g6IG1hc3RlciBjaGVja2JveCAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGlvbkVtaXRNb2RlICE9PSAnTk9ORScgJiYgc2VsZWN0aW9uTW9kZSA9PT0gJ0JBVENIJ1wiIGNsYXNzPVwibWFkLWRhdGF0YWJsZS1jaGVja2JveC1jb250YWluZXJcIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwib25Ub2dnbGVTZWxlY3RBbGwoKVwiIFtjaGVja2VkXT1cImFsbFNlbGVjdGVkXCI+IDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSBTSU5HTEUgLyBOT05FOiBub3RoaW5nIGluIGhlYWRlciByb3cgLS0+XG4gICAgICA8L3RoPlxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIiBbbmdDbGFzc109XCJzaG93QWN0aW9uQ29sdW1uID8gJ3Jvdy1hY3Rpb24tY2VsbCcgOiAnbm8tYWN0aW9uLWNlbGwnXCI+XG4gICAgICAgIDwhLS0gQkFUQ0g6IHJvdyBjaGVja2JveCAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dDaGVja2JveChlbGVtZW50KVwiIGNsYXNzPVwibWFkLWRhdGF0YWJsZS1jaGVja2JveC1jb250YWluZXJcIiAoY2xpY2spPVwib25Sb3dFdmVudCgkZXZlbnQsIGVsZW1lbnQpXCI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveCBjbGFzcz1cIm5vLXBvaW50ZXItZXZlbnRzXCIgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZChlbGVtZW50LnJvd0lkKVwiPiA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gU0lOR0xFOiByb3cgYWN0aW9uIG1lbnUgaWNvbiAtLT5cbiAgICAgICAgPG1hZC1pY29uLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd1Jvd0FjdGlvbkljb24oZWxlbWVudCkgJiYgaGFzVmlzaWJsZVJvd0FjdGlvbnMoZWxlbWVudClcIlxuICAgICAgICAgIFttYXRNZW51VHJpZ2dlckRhdGFdPVwieyBlbGVtZW50OiBlbGVtZW50IH1cIlxuICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJyb3dBY3Rpb25NZW51XCJcbiAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3Rpb25FdmVudChlbGVtZW50LnJvd0lkKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgPC9tYWQtaWNvbi1idXR0b24+XG4gICAgICAgIDwhLS0gU0lOR0xFOiByb3cgcmFkaW8gYnV0dG9uIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1JhZGlvQnV0dG9uKGVsZW1lbnQpXCIgY2xhc3M9XCJtYWQtZGF0YXRhYmxlLWNoZWNrYm94LWNvbnRhaW5lclwiIChjbGljayk9XCJvblJvd0V2ZW50KCRldmVudCwgZWxlbWVudClcIj5cbiAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cIm5vLXBvaW50ZXItZXZlbnRzXCIgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZChlbGVtZW50LnJvd0lkKVwiPiA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIEVYUEFOREFCTEU6IHJvdyBpcyBleHBhbmRhYmxlL2NvbGxhcHNhYmxlIC0tPlxuICAgICAgICA8bWFkLWljb24tYnV0dG9uICpuZ0lmPVwic2hvd0V4cGFuZGFibGVCdXR0b24oZWxlbWVudClcIiAoY2xpY2spPVwib25FeHBhbmQoJGV2ZW50LCBlbGVtZW50KVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImV4cGFuZGVkRWxlbWVudCAhPT0gZWxlbWVudFwiPmtleWJvYXJkX2Fycm93X2Rvd248L21hdC1pY29uPlxuICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImV4cGFuZGVkRWxlbWVudCA9PT0gZWxlbWVudFwiPmtleWJvYXJkX2Fycm93X3VwPC9tYXQtaWNvbj5cbiAgICAgICAgPC9tYWQtaWNvbi1idXR0b24+XG4gICAgICAgIDwhLS0gTk9ORTogbm90aGluZyAtLT5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSBDZWxsIGRlZmluaXRpb25zIGFuZCByb3dzIHdpdGggaW5qZWN0ZWQgY2VsbHMgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5pZFwiPlxuICAgICAgPCEtLSBoZWFkZXIgY2VsbCB0byBiZSBpbmplY3RlZCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImdldERhdGFUYWJsZUhlYWRlclR5cGUoY29sdW1uKVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU09SVCdcIj5cbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgIHNjb3BlPVwiY29sXCJcbiAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgIFtjbGFzcy50ZXh0LXJpZ2h0XT1cImNvbHVtbi5pc1JpZ2h0QWxpZ25lZFwiXG4gICAgICAgICAgICBtYXQtc29ydC1oZWFkZXI9XCJ7eyBjb2x1bW4ub3JkZXJCeU5hbWUgPyBjb2x1bW4ub3JkZXJCeU5hbWUgOiBjb2x1bW4uZGF0YVByb3BlcnR5TmFtZSB9fVwiXG4gICAgICAgICAgICBbYXJyb3dQb3NpdGlvbl09XCJjb2x1bW4uaXNSaWdodEFsaWduZWQgPyAnYmVmb3JlJyA6ICdhZnRlcidcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHRyYW5zbGF0ZUxhYmVscyA/IChjb2x1bW4ubGFiZWwgfCB0cmFuc2xhdGUpIDogY29sdW1uLmxhYmVsIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidGSUxURVInXCI+XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcbiAgICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgICAgICBbY2xhc3MudGV4dC1yaWdodF09XCJjb2x1bW4uaXNSaWdodEFsaWduZWRcIlxuICAgICAgICAgICAgbWFkLWZpbHRlci1oZWFkZXI9XCJ7eyBjb2x1bW4uZGF0YVByb3BlcnR5TmFtZSB9fVwiXG4gICAgICAgICAgICBbbWFkRmlsdGVyQ29sdW1uUmlnaHRBbGlnbmVkXT1cImNvbHVtbi5pc1JpZ2h0QWxpZ25lZFwiXG4gICAgICAgICAgICBbbWFkRmlsdGVyT3B0aW9uc109XCJjb2x1bW4uZmlsdGVyUGFyYW1zPy5maWx0ZXJPcHRpb25zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB0cmFuc2xhdGVMYWJlbHMgPyAoY29sdW1uLmxhYmVsIHwgdHJhbnNsYXRlKSA6IGNvbHVtbi5sYWJlbCB9fVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU09SVF9BTkRfRklMVEVSJ1wiPlxuICAgICAgICAgIDx0aFxuICAgICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgW2NsYXNzLnRleHQtcmlnaHRdPVwiY29sdW1uLmlzUmlnaHRBbGlnbmVkXCJcbiAgICAgICAgICAgIG1hdC1zb3J0LWhlYWRlcj1cInt7IGNvbHVtbi5vcmRlckJ5TmFtZSA/IGNvbHVtbi5vcmRlckJ5TmFtZSA6IGNvbHVtbi5kYXRhUHJvcGVydHlOYW1lIH19XCJcbiAgICAgICAgICAgIFthcnJvd1Bvc2l0aW9uXT1cImNvbHVtbi5pc1JpZ2h0QWxpZ25lZCA/ICdiZWZvcmUnIDogJ2FmdGVyJ1wiXG4gICAgICAgICAgICBtYWQtZmlsdGVyLWhlYWRlcj1cInt7IGNvbHVtbi5kYXRhUHJvcGVydHlOYW1lIH19XCJcbiAgICAgICAgICAgIFttYWRGaWx0ZXJDb2x1bW5SaWdodEFsaWduZWRdPVwiY29sdW1uLmlzUmlnaHRBbGlnbmVkXCJcbiAgICAgICAgICAgIFttYWRGaWx0ZXJPcHRpb25zXT1cImNvbHVtbi5maWx0ZXJQYXJhbXM/LmZpbHRlck9wdGlvbnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHRyYW5zbGF0ZUxhYmVscyA/IChjb2x1bW4ubGFiZWwgfCB0cmFuc2xhdGUpIDogY29sdW1uLmxhYmVsIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW2NsYXNzLnRleHQtcmlnaHRdPVwiY29sdW1uLmlzUmlnaHRBbGlnbmVkXCI+XG4gICAgICAgICAgICB7eyB0cmFuc2xhdGVMYWJlbHMgPyAoY29sdW1uLmxhYmVsIHwgdHJhbnNsYXRlKSA6IGNvbHVtbi5sYWJlbCB9fVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gZGF0YSBjZWxsIHRvIGJlIGluamVjdGVkIC0tPlxuICAgICAgPHRkXG4gICAgICAgIG1hdC1jZWxsXG4gICAgICAgICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIlxuICAgICAgICBbY2xhc3MudGV4dC1yaWdodF09XCJjb2x1bW4uaXNSaWdodEFsaWduZWRcIlxuICAgICAgICBbY2xhc3MubWFkLWR0LWNoaWxkLWNlbGxdPVwiZWxlbWVudC5wYXJlbnRJZFwiXG4gICAgICAgIFtuZ1N3aXRjaF09XCJjb2x1bW4udHJhbnNmb3JtZXJcIlxuICAgICAgICAoY2xpY2spPVwiIWRpc2FibGVSb3dDbGljayAmJiBvblJvd0V2ZW50KCRldmVudCwgZWxlbWVudClcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGdldEN1c3RvbUNlbGxUZW1wbGF0ZShjb2x1bW4uaWQpIHx8IGRlZmF1bHRDZWxsVGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiB7IGNvbHVtbjogY29sdW1uLCBlbGVtZW50OiBlbGVtZW50LCAkaW1wbGljaXQ6IGVsZW1lbnQgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIEV4cGFuZGVkIENvbnRlbnQgQ29sdW1uIC0gVGhlIHJvdyBpcyBtYWRlIHVwIG9mIHRoaXMgb25lIGNvbHVtbiB0aGF0IHNwYW5zIGFjcm9zcyBhbGwgY29sdW1ucyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFleHBhbmRhYmxlRGVmXCIgW21hdENvbHVtbkRlZl09XCJleHBhbmRhYmxlQ29sdW1uRGVmXCI+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5sZW5ndGggKyAxXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYWQtZGF0YS10YWJsZS1leHBhbmRhYmxlLWFyZWFcIiBbQGRldGFpbEV4cGFuZF09XCJlbGVtZW50ID09PSBleHBhbmRlZEVsZW1lbnQgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCdcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICBnZXRDdXN0b21FeHBhbmRhYmxlVGVtcGxhdGUoKSB8fCBkZWZhdWx0Q2VsbFRlbXBsYXRlO1xuICAgICAgICAgICAgICBjb250ZXh0OiB7IGNvbHVtbjogZWxlbWVudCwgZWxlbWVudDogZWxlbWVudCwgJGltcGxpY2l0OiBlbGVtZW50IH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIGhlYWRlciByb3cgd2hlcmUgY2VsbHMgd2lsbCBiZSBpbmplY3RlZCAtLT5cbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImNvbHVtbklkc1wiPjwvdHI+XG4gICAgPCEtLSBkYXRhIHJvdyB3aGVyZSBjZWxscyB3aWxsIGJlIGluamVjdGVkIC0tPlxuICAgIDx0clxuICAgICAgbWF0LXJvd1xuICAgICAgW2NsYXNzLmNsaWNrYWJsZS10YWJsZS1yb3ddPVwiIXJvdy5wYXJlbnRJZCAmJiBzZWxlY3Rpb25FbWl0TW9kZSAhPT0gJ05PTkUnXCJcbiAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBjb2x1bW5JZHNcIlxuICAgICAgKGNsaWNrKT1cIm9uRXhwYW5kKCRldmVudCwgcm93KVwiXG4gICAgPjwvdHI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhZXhwYW5kYWJsZURlZlwiPlxuICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCBlbGVtZW50OyBjb2x1bW5zOiBbZXhwYW5kYWJsZUNvbHVtbkRlZl1cIiBjbGFzcz1cIm1hZC1kYXRhLXRhYmxlLWV4cGFuZGFibGUtcm93XCI+PC90cj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8dHIgY2xhc3M9XCJtYXQtcm93XCIgKm1hdE5vRGF0YVJvdz5cbiAgICAgIDx0ZCBjbGFzcz1cIm1hdC1jZWxsIG5vRGF0YVRleHQgY29sdW1uQmFzZWRGaWx0ZXJcIiBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbklkcy5sZW5ndGhcIj5cbiAgICAgICAge3sgdHJhbnNsYXRlTGFiZWxzID8gKG5vRGF0YVRleHQgfCB0cmFuc2xhdGUpIDogbm9EYXRhVGV4dCB9fVxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3RhYmxlPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwibWFkLWRhdGEtdGFibGUtYm90dG9tLWFyZWFcIj5cbiAgPGRpdiBjbGFzcz1cIm1hZC1kYXRhLXRhYmxlLWJvdHRvbS1pbmZvLWFyZWFcIj5cbiAgICA8IS0tIGNvbHVtbiBzZXR0aW5nczogMSBkZWZpbml0aW9uIC0tPlxuICAgIDxtYWQtaWNvbi1idXR0b24gKm5nSWY9XCJlZGl0YWJsZUNvbHVtbkRlZmluaXRpb25zPy5sZW5ndGggPT09IDFcIiAoY2xpY2spPVwib25Db2x1bW5TZXR0aW5ncygpXCI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnZpZXdfY29sdW1uPC9tYXQtaWNvbj5cbiAgICA8L21hZC1pY29uLWJ1dHRvbj5cbiAgICA8IS0tIGNvbHVtbiBzZXR0aW5nczogbXVsdGlwbGUgZGVmaW5pdGlvbnMgLS0+XG4gICAgPG1hZC1pY29uLWJ1dHRvbiAqbmdJZj1cIihlZGl0YWJsZUNvbHVtbkRlZmluaXRpb25zPy5sZW5ndGggfHwgMCkgPiAwXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImVkaXRhYmxlRGVmaW5pdGlvbk1lbnVcIj5cbiAgICAgIDxtYXQtaWNvbj52aWV3X2NvbHVtbjwvbWF0LWljb24+XG4gICAgPC9tYWQtaWNvbi1idXR0b24+XG4gICAgPCEtLSBjb2x1bW4gdmlldzogbXVsdGlwbGUgZGVmaW5pdGlvbnMgLS0+XG4gICAgPG1hZC1pY29uLWJ1dHRvbiAqbmdJZj1cIih2aWV3YWJsZUNvbHVtbkRlZmluaXRpb25zPy5sZW5ndGggfHwgMCkgPiAwXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cInZpZXdhYmxlRGVmaW5pdGlvbk1lbnVcIj5cbiAgICAgIDxtYXQtaWNvbj5wcmV2aWV3PC9tYXQtaWNvbj5cbiAgICA8L21hZC1pY29uLWJ1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBQYWdpbmF0aW9uIC0tPlxuICA8bWF0LXBhZ2luYXRvclxuICAgIFtzdHlsZS5kaXNwbGF5XT1cInBhZ2luYXRpb25FbmFibGVkID8gJ2Jsb2NrJyA6ICdub25lJ1wiXG4gICAgW2xlbmd0aF09XCJwYWdlTGVuZ3RoXCJcbiAgICBbcGFnZUluZGV4XT1cInBhZ2VJbmRleFwiXG4gICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXG4gICAgKHBhZ2UpPVwib25QYWdlRXZlbnQoJGV2ZW50KVwiXG4gICAgc2hvd0ZpcnN0TGFzdEJ1dHRvbnNcbiAgPlxuICA8L21hdC1wYWdpbmF0b3I+XG48L2Rpdj5cblxuPCEtLSBObyBkYXRhIGFsZXJ0IC0tPlxuPG5nLXRlbXBsYXRlICNub0RhdGE+XG4gIDxkaXYgY2xhc3M9XCJub0RhdGFUZXh0XCI+XG4gICAgPGRpdiBjbGFzcz1cIm1hZC1kYXRhdGFibGUtc3Bpbm5lci13cmFwcGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgICA8bWF0LXNwaW5uZXIgW2RpYW1ldGVyXT1cIjUwXCIgW3N0cm9rZVdpZHRoXT1cIjNcIj48L21hdC1zcGlubmVyPlxuICAgIDwvZGl2PlxuICAgIHt7IHRyYW5zbGF0ZUxhYmVscyA/IChub0RhdGFUZXh0IHwgdHJhbnNsYXRlKSA6IG5vRGF0YVRleHQgfX1cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIGRlZmF1bHQgY2VsbCB0ZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdENlbGxUZW1wbGF0ZSBsZXQtZWxlbWVudD1cImVsZW1lbnRcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxzcGFuPlxuICAgIHt7IGVsZW1lbnRbY29sdW1uLmRhdGFQcm9wZXJ0eU5hbWVdIH19XG4gIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gY3VzdG9tIGNlbGwgdGVtcGxhdGVzIGluamVjdGVkIGZyb20gcGFyZW50IC0tPlxuPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIl19
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { DateTime } from 'luxon';
|
|
2
2
|
export class DataTableSortUtil {
|
|
3
|
-
static sortData(
|
|
4
|
-
return (tableData, matSort) => [...tableData].sort((a, b) => DataTableSortUtil.compare(a, b, matSort,
|
|
3
|
+
static sortData(dateTimeFormat, numberFormat) {
|
|
4
|
+
return (tableData, matSort) => [...tableData].sort((a, b) => DataTableSortUtil.compare(a, b, matSort, dateTimeFormat, numberFormat));
|
|
5
5
|
}
|
|
6
6
|
static sortNothing() {
|
|
7
7
|
return (tableData, _) => tableData;
|
|
8
8
|
}
|
|
9
|
-
static compare(a, b, sort,
|
|
9
|
+
static compare(a, b, sort, dateTimeFormat, numberFormat) {
|
|
10
10
|
const x = a[sort.active];
|
|
11
11
|
const y = b[sort.active];
|
|
12
12
|
const ascending = sort.direction === 'asc';
|
|
@@ -18,11 +18,23 @@ export class DataTableSortUtil {
|
|
|
18
18
|
return DataTableSortUtil.compareNumber(x, y, ascending);
|
|
19
19
|
case 'string': {
|
|
20
20
|
const stringY = String(y);
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
// a string could be a date
|
|
22
|
+
if (!!dateTimeFormat) {
|
|
23
|
+
const dateX = DateTime.fromFormat(x, dateTimeFormat);
|
|
24
|
+
const dateY = DateTime.fromFormat(stringY, dateTimeFormat);
|
|
25
|
+
if (dateX.isValid && dateY.isValid) {
|
|
26
|
+
return DataTableSortUtil.compareDate(dateX, dateY, ascending);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// .. but also a formatted number
|
|
30
|
+
if (!!numberFormat) {
|
|
31
|
+
const numberX = DataTableSortUtil.parseNumber(x, numberFormat);
|
|
32
|
+
const numberY = DataTableSortUtil.parseNumber(y, numberFormat);
|
|
33
|
+
if (typeof numberX === 'number' && typeof numberY === 'number') {
|
|
34
|
+
return DataTableSortUtil.compareNumber(numberX, numberY, ascending);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return DataTableSortUtil.compareString(x, stringY, ascending);
|
|
26
38
|
}
|
|
27
39
|
case 'boolean':
|
|
28
40
|
return DataTableSortUtil.compareBoolean(x, y, ascending);
|
|
@@ -53,5 +65,16 @@ export class DataTableSortUtil {
|
|
|
53
65
|
return x ? 1 : -1;
|
|
54
66
|
}
|
|
55
67
|
}
|
|
68
|
+
static parseNumber(value, numberFormat) {
|
|
69
|
+
const sanitized = value
|
|
70
|
+
.replace(numberFormat.groupingSeparator ?? '', '')
|
|
71
|
+
.replace(numberFormat.decimalSeparator ?? '', '.')
|
|
72
|
+
.replace(new RegExp((numberFormat.units ?? []).join('|')), '');
|
|
73
|
+
const numberValue = Number(sanitized);
|
|
74
|
+
if (typeof numberValue === 'number' && !isNaN(numberValue)) {
|
|
75
|
+
return numberValue;
|
|
76
|
+
}
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
56
79
|
}
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS1zb3J0LXV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC1hZGRvbnMvc3JjL2xpYi9kYXRhLXRhYmxlL3V0aWwvZGF0YS10YWJsZS1zb3J0LXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUdqQyxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLE1BQU0sQ0FBQyxRQUFRLENBQUMsY0FBdUIsRUFBRSxZQUEyQjtRQUNsRSxPQUFPLENBQUMsU0FBZ0IsRUFBRSxPQUFnQixFQUFFLEVBQUUsQ0FDNUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUMxRyxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVc7UUFDaEIsT0FBTyxDQUFDLFNBQWdCLEVBQUUsQ0FBVSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDckQsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBc0IsRUFBRSxDQUFzQixFQUFFLElBQVUsRUFBRSxjQUF1QixFQUFFLFlBQTJCO1FBQzdILE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQztRQUUzQyxRQUFRLE9BQU8sQ0FBQyxFQUFFO1lBQ2hCLEtBQUssUUFBUTtnQkFDWCxJQUFJLE9BQU8sQ0FBQyxLQUFL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Q0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBYSxFQUFFLFlBQTJCO1FBQzNELE1BQU0sU0FBUyxHQUFHLEtBQUs7YUFDcEIsT0FBTyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO2FBQ2pELE9BQU8sQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQzthQUNqRCxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV0QyxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUMxRCxPQUFPLFdBQVcsQ0FBQztTQUNwQjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWF0U29ydCwgU29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgeyBOdW1iZXJGb3JtYXQgfSBmcm9tICcuLi9jb25maWd1cmF0aW9uL2RhdGEtdGFibGUtZ2xvYmFsLWNvbmZpZ3VyYXRpb24nO1xuXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlU29ydFV0aWwge1xuICBzdGF0aWMgc29ydERhdGEoZGF0ZVRpbWVGb3JtYXQ/OiBzdHJpbmcsIG51bWJlckZvcm1hdD86IE51bWJlckZvcm1hdCk6ICh0YWJsZURhdGE6IGFueVtdLCBtYXRTb3J0OiBNYXRTb3J0KSA9PiBhbnlbXSB7XG4gICAgcmV0dXJuICh0YWJsZURhdGE6IGFueVtdLCBtYXRTb3J0OiBNYXRTb3J0KSA9PlxuICAgICAgWy4uLnRhYmxlRGF0YV0uc29ydCgoYSwgYikgPT4gRGF0YVRhYmxlU29ydFV0aWwuY29tcGFyZShhLCBiLCBtYXRTb3J0LCBkYXRlVGltZUZvcm1hdCwgbnVtYmVyRm9ybWF0KSk7XG4gIH1cblxuICBzdGF0aWMgc29ydE5vdGhpbmcoKTogKHRhYmxlRGF0YTogYW55W10sIG1hdFNvcnQ6IE1hdFNvcnQpID0+IGFueVtdIHtcbiAgICByZXR1cm4gKHRhYmxlRGF0YTogYW55W10sIF86IE1hdFNvcnQpID0+IHRhYmxlRGF0YTtcbiAgfVxuXG4gIHN0YXRpYyBjb21wYXJlKGE6IFJlY29yZDxzdHJpbmcsIGFueT4sIGI6IFJlY29yZDxzdHJpbmcsIGFueT4sIHNvcnQ6IFNvcnQsIGRhdGVUaW1lRm9ybWF0Pzogc3RyaW5nLCBudW1iZXJGb3JtYXQ/OiBOdW1iZXJGb3JtYXQpOiBudW1iZXIge1xuICAgIGNvbnN0IHggPSBhW3NvcnQuYWN0aXZlXTtcbiAgICBjb25zdCB5ID0gYltzb3J0LmFjdGl2ZV07XG4gICAgY29uc3QgYXNjZW5kaW5nID0gc29ydC5kaXJlY3Rpb24gPT09ICdhc2MnO1xuXG4gICAgc3dpdGNoICh0eXBlb2YgeCkge1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgaWYgKHR5cGVvZiB5ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHJldHVybiBEYXRhVGFibGVTb3J0VXRpbC5jb21wYXJlU3RyaW5nKFN0cmluZyh4KSwgeSwgYXNjZW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRGF0YVRhYmxlU29ydFV0aWwuY29tcGFyZU51bWJlcih4LCB5LCBhc2NlbmRpbmcpO1xuICAgICAgY2FzZSAnc3RyaW5nJzoge1xuICAgICAgICBjb25zdCBzdHJpbmdZID0gU3RyaW5nKHkpO1xuXG4gICAgICAgIC8vIGEgc3RyaW5nIGNvdWxkIGJlIGEgZGF0ZVxuICAgICAgICBpZiAoISFkYXRlVGltZUZvcm1hdCkge1xuICAgICAgICAgIGNvbnN0IGRhdGVYID0gRGF0ZVRpbWUuZnJvbUZvcm1hdCh4LCBkYXRlVGltZUZvcm1hdCk7XG4gICAgICAgICAgY29uc3QgZGF0ZVkgPSBEYXRlVGltZS5mcm9tRm9ybWF0KHN0cmluZ1ksIGRhdGVUaW1lRm9ybWF0KTtcblxuICAgICAgICAgIGlmIChkYXRlWC5pc1ZhbGlkICYmIGRhdGVZLmlzVmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRhVGFibGVTb3J0VXRpbC5jb21wYXJlRGF0ZShkYXRlWCwgZGF0ZVksIGFzY2VuZGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gLi4gYnV0IGFsc28gYSBmb3JtYXR0ZWQgbnVtYmVyXG4gICAgICAgIGlmICghIW51bWJlckZvcm1hdCkge1xuICAgICAgICAgIGNvbnN0IG51bWJlclggPSBEYXRhVGFibGVTb3J0VXRpbC5wYXJzZU51bWJlcih4LCBudW1iZXJGb3JtYXQpO1xuICAgICAgICAgIGNvbnN0IG51bWJlclkgPSBEYXRhVGFibGVTb3J0VXRpbC5wYXJzZU51bWJlcih5LCBudW1iZXJGb3JtYXQpO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBudW1iZXJYID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgbnVtYmVyWSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRhVGFibGVTb3J0VXRpbC5jb21wYXJlTnVtYmVyKG51bWJlclgsIG51bWJlclksIGFzY2VuZGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIERhdGFUYWJsZVNvcnRVdGlsLmNvbXBhcmVTdHJpbmcoeCwgc3RyaW5nWSwgYXNjZW5kaW5nKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICByZXR1cm4gRGF0YVRhYmxlU29ydFV0aWwuY29tcGFyZUJvb2xlYW4oeCwgeSwgYXNjZW5kaW5nKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIGNhbm5vdCBjb21wYXJlIC0+IHJldHVybiBlcXVhbFxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29tcGFyZU51bWJlcih4OiBudW1iZXIsIHk6IG51bWJlciwgYXNjZW5kaW5nOiBib29sZWFuKTogbnVtYmVyIHtcbiAgICByZXR1cm4gYXNjZW5kaW5nID8geCAtIHkgOiB5IC0geDtcbiAgfVxuXG4gIHN0YXRpYyBjb21wYXJlRGF0ZSh4OiBEYXRlVGltZSwgeTogRGF0ZVRpbWUsIGFzY2VuZGluZzogYm9vbGVhbik6IG51bWJlciB7XG4gICAgcmV0dXJuIERhdGFUYWJsZVNvcnRVdGlsLmNvbXBhcmVOdW1iZXIoK3gsICt5LCBhc2NlbmRpbmcpO1xuICB9XG5cbiAgc3RhdGljIGNvbXBhcmVTdHJpbmcoeDogc3RyaW5nLCB5OiBzdHJpbmcsIGFzY2VuZGluZzogYm9vbGVhbik6IG51bWJlciB7XG4gICAgcmV0dXJuIGFzY2VuZGluZyA/IHgubG9jYWxlQ29tcGFyZSh5KSA6IHkubG9jYWxlQ29tcGFyZSh4KTtcbiAgfVxuXG4gIHN0YXRpYyBjb21wYXJlQm9vbGVhbih4OiBib29sZWFuLCB5OiBib29sZWFuLCBhc2NlbmRpbmc6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgaWYgKGFzY2VuZGluZykge1xuICAgICAgLy8gdHJ1ZSBmaXJzdFxuICAgICAgcmV0dXJuIHggPyAtMSA6IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZhbHNlIGZpcnN0XG4gICAgICByZXR1cm4geCA/IDEgOiAtMTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgcGFyc2VOdW1iZXIodmFsdWU6IHN0cmluZywgbnVtYmVyRm9ybWF0PzogTnVtYmVyRm9ybWF0KTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgICBjb25zdCBzYW5pdGl6ZWQgPSB2YWx1ZVxuICAgICAgLnJlcGxhY2UobnVtYmVyRm9ybWF0Lmdyb3VwaW5nU2VwYXJhdG9yID8/ICcnLCAnJylcbiAgICAgIC5yZXBsYWNlKG51bWJlckZvcm1hdC5kZWNpbWFsU2VwYXJhdG9yID8/ICcnLCAnLicpXG4gICAgICAucmVwbGFjZShuZXcgUmVnRXhwKChudW1iZXJGb3JtYXQudW5pdHMgPz8gW10pLmpvaW4oJ3wnKSksICcnKTtcblxuICAgIGNvbnN0IG51bWJlclZhbHVlID0gTnVtYmVyKHNhbml0aXplZCk7XG5cbiAgICBpZiAodHlwZW9mIG51bWJlclZhbHVlID09PSAnbnVtYmVyJyAmJiAhaXNOYU4obnVtYmVyVmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVtYmVyVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG4iXX0=
|
|
@@ -1907,13 +1907,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImpor
|
|
|
1907
1907
|
}] } });
|
|
1908
1908
|
|
|
1909
1909
|
class DataTableSortUtil {
|
|
1910
|
-
static sortData(
|
|
1911
|
-
return (tableData, matSort) => [...tableData].sort((a, b) => DataTableSortUtil.compare(a, b, matSort,
|
|
1910
|
+
static sortData(dateTimeFormat, numberFormat) {
|
|
1911
|
+
return (tableData, matSort) => [...tableData].sort((a, b) => DataTableSortUtil.compare(a, b, matSort, dateTimeFormat, numberFormat));
|
|
1912
1912
|
}
|
|
1913
1913
|
static sortNothing() {
|
|
1914
1914
|
return (tableData, _) => tableData;
|
|
1915
1915
|
}
|
|
1916
|
-
static compare(a, b, sort,
|
|
1916
|
+
static compare(a, b, sort, dateTimeFormat, numberFormat) {
|
|
1917
1917
|
const x = a[sort.active];
|
|
1918
1918
|
const y = b[sort.active];
|
|
1919
1919
|
const ascending = sort.direction === 'asc';
|
|
@@ -1925,11 +1925,23 @@ class DataTableSortUtil {
|
|
|
1925
1925
|
return DataTableSortUtil.compareNumber(x, y, ascending);
|
|
1926
1926
|
case 'string': {
|
|
1927
1927
|
const stringY = String(y);
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1928
|
+
// a string could be a date
|
|
1929
|
+
if (!!dateTimeFormat) {
|
|
1930
|
+
const dateX = DateTime.fromFormat(x, dateTimeFormat);
|
|
1931
|
+
const dateY = DateTime.fromFormat(stringY, dateTimeFormat);
|
|
1932
|
+
if (dateX.isValid && dateY.isValid) {
|
|
1933
|
+
return DataTableSortUtil.compareDate(dateX, dateY, ascending);
|
|
1934
|
+
}
|
|
1935
|
+
}
|
|
1936
|
+
// .. but also a formatted number
|
|
1937
|
+
if (!!numberFormat) {
|
|
1938
|
+
const numberX = DataTableSortUtil.parseNumber(x, numberFormat);
|
|
1939
|
+
const numberY = DataTableSortUtil.parseNumber(y, numberFormat);
|
|
1940
|
+
if (typeof numberX === 'number' && typeof numberY === 'number') {
|
|
1941
|
+
return DataTableSortUtil.compareNumber(numberX, numberY, ascending);
|
|
1942
|
+
}
|
|
1943
|
+
}
|
|
1944
|
+
return DataTableSortUtil.compareString(x, stringY, ascending);
|
|
1933
1945
|
}
|
|
1934
1946
|
case 'boolean':
|
|
1935
1947
|
return DataTableSortUtil.compareBoolean(x, y, ascending);
|
|
@@ -1960,6 +1972,17 @@ class DataTableSortUtil {
|
|
|
1960
1972
|
return x ? 1 : -1;
|
|
1961
1973
|
}
|
|
1962
1974
|
}
|
|
1975
|
+
static parseNumber(value, numberFormat) {
|
|
1976
|
+
const sanitized = value
|
|
1977
|
+
.replace(numberFormat.groupingSeparator ?? '', '')
|
|
1978
|
+
.replace(numberFormat.decimalSeparator ?? '', '.')
|
|
1979
|
+
.replace(new RegExp((numberFormat.units ?? []).join('|')), '');
|
|
1980
|
+
const numberValue = Number(sanitized);
|
|
1981
|
+
if (typeof numberValue === 'number' && !isNaN(numberValue)) {
|
|
1982
|
+
return numberValue;
|
|
1983
|
+
}
|
|
1984
|
+
return value;
|
|
1985
|
+
}
|
|
1963
1986
|
}
|
|
1964
1987
|
|
|
1965
1988
|
class DataTableActionUtil {
|
|
@@ -2138,8 +2161,13 @@ const MAD_DATA_TABLE_GLOBAL_CONFIGURATION = new InjectionToken('mad-data-table-g
|
|
|
2138
2161
|
const MAD_DATA_TABL_GLOBAL_CONFIGURATION_PROVIDER = {
|
|
2139
2162
|
provide: MAD_DATA_TABLE_GLOBAL_CONFIGURATION,
|
|
2140
2163
|
deps: [[new Optional(), new SkipSelf(), new Inject(MAD_DATA_TABLE_GLOBAL_CONFIGURATION)]],
|
|
2141
|
-
useFactory: (dataTableConfig) => dataTableConfig ?? {
|
|
2142
|
-
dateTimeFormat: 'dd.MM.yyyy',
|
|
2164
|
+
useFactory: (dataTableConfig) => !!dataTableConfig ?? {
|
|
2165
|
+
dateTimeFormat: !!dataTableConfig?.dateTimeFormat ?? 'dd.MM.yyyy',
|
|
2166
|
+
numberFormat: !!dataTableConfig?.numberFormat ?? {
|
|
2167
|
+
decimalSeparator: ',',
|
|
2168
|
+
groupingSeparator: '.',
|
|
2169
|
+
units: ['€', '$'],
|
|
2170
|
+
},
|
|
2143
2171
|
},
|
|
2144
2172
|
};
|
|
2145
2173
|
|
|
@@ -2769,7 +2797,7 @@ class DataTableComponent {
|
|
|
2769
2797
|
applySortData() {
|
|
2770
2798
|
this.dataSource.sortData = this._useAsync
|
|
2771
2799
|
? DataTableSortUtil.sortNothing()
|
|
2772
|
-
: DataTableSortUtil.sortData(this.dataTableGlobalConfig.dateTimeFormat);
|
|
2800
|
+
: DataTableSortUtil.sortData(this.dataTableGlobalConfig.dateTimeFormat, this.dataTableGlobalConfig.numberFormat);
|
|
2773
2801
|
}
|
|
2774
2802
|
/** FILTER HANDLING */
|
|
2775
2803
|
get filterMode() {
|