@eqproject/eqp-dynamic-module 1.1.8 → 2.0.0
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/README.md +123 -15
- package/esm2020/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.mjs +144 -87
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +48 -37
- package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +44 -4
- package/esm2020/lib/components/private/dynamic-module-field/dynamic-module-field.component.mjs +9 -3
- package/esm2020/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.mjs +9 -3
- package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +12 -8
- package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +33 -14
- package/esm2020/lib/components/private/form-records/repair-form-fields/repair-form-fields.component.mjs +8 -7
- package/esm2020/lib/models/DynamicMoDuleViewModeEnum.mjs +7 -0
- package/esm2020/lib/models/dynamicModuleCompileConfig.mjs +9 -0
- package/esm2020/lib/models/dynamicModuleConfig.mjs +13 -0
- package/esm2020/lib/models/dynamicModuleConfiguratorConfig.mjs +9 -0
- package/esm2020/lib/models/dynamicModuleConfiguratorSpecificConfig.mjs +10 -0
- package/esm2020/lib/models/dynamicModuleGeneralConfig.mjs +29 -0
- package/esm2020/lib/models/dynamicModuleListConfig.mjs +17 -0
- package/esm2020/lib/models/dynamicModuleRepairConfig.mjs +9 -0
- package/esm2020/lib/models/endPointConfiguration.model.mjs +1 -1
- package/esm2020/lib/models/form.model.mjs +1 -1
- package/esm2020/lib/models/listFormRecordActionsDefault.mjs +9 -0
- package/esm2020/lib/models/record.model.mjs +1 -1
- package/esm2020/lib/services/utilityHelper.services.mjs +11 -1
- package/esm2020/lib/services/voice-recognition.service.mjs +32 -26
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +423 -184
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +409 -174
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.d.ts +18 -19
- package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +19 -13
- package/lib/components/private/add-form-field/add-form-field.component.d.ts +8 -0
- package/lib/components/private/dynamic-module-field/dynamic-module-field.component.d.ts +2 -0
- package/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.d.ts +2 -0
- package/lib/components/private/form-records/add-form-record/add-form-record.component.d.ts +6 -3
- package/lib/components/private/form-records/list-form-record/list-form-record.component.d.ts +6 -3
- package/lib/components/private/form-records/repair-form-fields/repair-form-fields.component.d.ts +3 -2
- package/lib/models/DynamicMoDuleViewModeEnum.d.ts +5 -0
- package/lib/models/dynamicModuleCompileConfig.d.ts +19 -0
- package/lib/models/dynamicModuleConfig.d.ts +11 -0
- package/lib/models/dynamicModuleConfiguratorConfig.d.ts +7 -0
- package/lib/models/dynamicModuleConfiguratorSpecificConfig.d.ts +11 -0
- package/lib/models/dynamicModuleGeneralConfig.d.ts +31 -0
- package/lib/models/dynamicModuleListConfig.d.ts +17 -0
- package/lib/models/dynamicModuleRepairConfig.d.ts +3 -0
- package/lib/models/endPointConfiguration.model.d.ts +2 -0
- package/lib/models/form.model.d.ts +1 -0
- package/lib/models/listFormRecordActionsDefault.d.ts +7 -0
- package/lib/models/record.model.d.ts +2 -0
- package/package.json +1 -1
|
@@ -260,6 +260,11 @@ export class UtilityHelperService {
|
|
|
260
260
|
Token: userToken,
|
|
261
261
|
RequestMethod: RequestMethodEnum.GET,
|
|
262
262
|
},
|
|
263
|
+
GetAllByEntAndUserIDEndPoint: {
|
|
264
|
+
Url: baseServerUrl + "/api/v1/GetAllByUserID",
|
|
265
|
+
Token: userToken,
|
|
266
|
+
RequestMethod: RequestMethodEnum.GET,
|
|
267
|
+
},
|
|
263
268
|
GetByIDEndPoint: {
|
|
264
269
|
Url: baseServerUrl + "/api/v1/getByID",
|
|
265
270
|
Token: userToken,
|
|
@@ -287,6 +292,11 @@ export class UtilityHelperService {
|
|
|
287
292
|
Token: userToken,
|
|
288
293
|
RequestMethod: RequestMethodEnum.GET,
|
|
289
294
|
},
|
|
295
|
+
GetByIDAndVersionEndPoint: {
|
|
296
|
+
Url: baseServerUrl + "/api/conf/GetByIDAndVersion",
|
|
297
|
+
Token: userToken,
|
|
298
|
+
RequestMethod: RequestMethodEnum.GET,
|
|
299
|
+
},
|
|
290
300
|
SaveEndPoint: {
|
|
291
301
|
Url: baseServerUrl + "/api/conf/form",
|
|
292
302
|
Token: userToken,
|
|
@@ -417,4 +427,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
|
|
|
417
427
|
providedIn: 'root'
|
|
418
428
|
}]
|
|
419
429
|
}], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }, { type: i2.HttpClient }, { type: i3.SpinnerService }]; } });
|
|
420
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eUhlbHBlci5zZXJ2aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQXVDLGtCQUFrQixFQUFpQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwSSxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxxQkFBcUIsRUFBb0MsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFLbEosT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRy9GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7QUFNcEYsTUFBTSxPQUFPLG9CQUFvQjtJQUk3QixZQUNZLFdBQStCLEVBQy9CLElBQWdCLEVBQ2hCLGNBQThCO1FBRjlCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtJQUUxQyxDQUFDO0lBRU0sTUFBTSxDQUFDLG9CQUFvQixDQUFDLE9BQWUsRUFBRSxHQUFXLEVBQUUsR0FBUTtRQUNyRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFZO1FBQ2pDLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQ3ZCLENBQUM7SUFDTSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRO1FBQzdCLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUMzQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQyxPQUFPLENBQUMsQ0FBQTtRQUNaLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTSxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQWdCO1FBQ3ZDLFFBQVEsS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUNyQixLQUFLLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xDLE1BQU0sQ0FBQyxHQUFjLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3pELE9BQU8sQ0FBQyxDQUFDO2dCQUNULE1BQU07YUFDVDtZQUNELE9BQU8sQ0FBQyxDQUFDO2dCQUNMLE1BQU07YUFDVDtTQUNKO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxNQUF3QixFQUFFLFlBQW9CO1FBRS9FLElBQUksbUJBQW1CLEdBQTRDLEVBQUUsQ0FBQztRQUV0RSxrRUFBa0U7UUFDbEUsTUFBTSxzQkFBc0IsR0FBa0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTVGLDRIQUE0SDtRQUM1SCx3SUFBd0k7UUFDeEksSUFDSSxDQUFDLFlBQVk7WUFDYixDQUNJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7bUJBQ3hCLElBQUksTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUM1RyxFQUNIO1lBQ0UsbUJBQW1CLEdBQUc7Z0JBQ2xCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFO2dCQUNuRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRTthQUN0RSxDQUFDO1NBQ0w7UUFDRCxrSEFBa0g7UUFDbEgsc0hBQXNIO1FBQ3RILHlHQUF5RzthQUNwRyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakMsTUFBTSxhQUFhLEdBQWtCLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVHLElBQUksYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO2dCQUNuRCxtQkFBbUIsR0FBRyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDNUc7aUJBQU0sSUFBSSxhQUFhLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7Z0JBQzFELG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQy9IO2lCQUFNLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLGFBQWEsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBRTtnQkFDNUksbUJBQW1CLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3BJO2lCQUFNO2dCQUNILG1CQUFtQixHQUFHLEVBQUUsQ0FBQzthQUM1QjtTQUNKO1FBQ0Qsd0dBQXdHO1FBQ3hHLHNHQUFzRztRQUN0Ryx3SEFBd0g7UUFDeEgsK0RBQStEO2FBQzFEO1lBQ0QsTUFBTSxnQkFBZ0IsR0FBNEMsRUFBRSxDQUFDO1lBRXJFLDJEQUEyRDtZQUMzRCxNQUFNLGVBQWUsR0FBa0IsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvRCwyREFBMkQ7WUFDM0QsTUFBTSxlQUFlLEdBQVcsZUFBZSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFFNUUsNEZBQTRGO1lBQzVGLHlGQUF5RjtZQUN6RixJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUU7Z0JBQ3JELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hELE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUU1RCxJQUFJLGlCQUFpQixHQUFrQixFQUFFLENBQUM7Z0JBRTFDLElBQUksWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7b0JBQzFCLGlCQUFpQixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUN0QztxQkFBTSxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRTtvQkFDbkYsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDakU7cUJBQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFO29CQUN2SSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDdEU7cUJBQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7b0JBQ25GLGlCQUFpQixHQUFHLHNCQUFzQixDQUFDO2lCQUM5QztnQkFFRCx5R0FBeUc7Z0JBQ3pHLHFDQUFxQztnQkFDckMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUM3QixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUU7d0JBQ2hDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtxQkFDbEg7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7YUFDTjtZQUVELG1CQUFtQixHQUFHLGdCQUFnQixDQUFDO1NBQzFDO1FBRUQsT0FBTyxtQkFBbUIsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsaUJBQWlCLENBQUMsS0FBZ0I7UUFDOUIsSUFBSSxLQUFLLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDbkQsT0FBTyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXZGLFFBQVEsS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUNyQixLQUFLLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDaEMsT0FBTyw2QkFBNkIsQ0FBQztZQUN6QyxLQUFLLGFBQWEsQ0FBQyxlQUFlLENBQUM7Z0JBQy9CLE9BQU8sK0JBQStCLENBQUM7WUFDM0MsS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDO2dCQUMxQixPQUFPLHVEQUF1RCxDQUFDO1lBQ25FLEtBQUssYUFBYSxDQUFDLGNBQWMsQ0FBQztnQkFDOUIsT0FBTyw2QkFBNkIsQ0FBQztZQUN6QyxLQUFLLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDaEMsT0FBTyw2QkFBNkIsQ0FBQztZQUN6QyxLQUFLLGFBQWEsQ0FBQyxVQUFVLENBQUM7Z0JBQzFCLElBQ0ssS0FBeUIsQ0FBQyxhQUFhO29CQUN4QyxDQUFFLEtBQXlCLENBQUMsY0FBYyxJQUFLLEtBQXlCLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFDckc7b0JBQ0UsT0FBTywrQkFBK0IsQ0FBQztpQkFDMUM7cUJBQU07b0JBQ0gsT0FBTyw2QkFBNkIsQ0FBQztpQkFDeEM7WUFDTCxLQUFLLGFBQWEsQ0FBQyxVQUFVLENBQUM7Z0JBQzFCLElBQ0ssS0FBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhO29CQUNwRCxDQUFFLEtBQW9CLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxJQUFLLEtBQW9CLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFDN0g7b0JBQ0UsT0FBTywrQkFBK0IsQ0FBQztpQkFDMUM7cUJBQU07b0JBQ0gsT0FBTyw2QkFBNkIsQ0FBQztpQkFDeEM7WUFDTCxLQUFLLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDakMsT0FBTyw2QkFBNkIsQ0FBQztZQUN6QyxLQUFLLGFBQWEsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hCLE9BQU8sNkJBQTZCLENBQUM7WUFDekMsS0FBSyxhQUFhLENBQUMsbUJBQW1CLENBQUM7Z0JBQ25DLE9BQU8sK0JBQStCLENBQUM7U0FDOUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLG1CQUFtQixDQUFDLFVBQTRCLEVBQ25ELE1BQWMsRUFDZCxRQUFRLEdBQUcsS0FBSyxFQUNoQix5QkFBeUIsR0FBRyxJQUFJO1FBQ2hDLE1BQU0sUUFBUSxHQUFxQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU5RCxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDNUUsSUFBSSx5QkFBeUIsRUFBRTtnQkFDM0IsS0FBSyxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUM7YUFDbEM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksUUFBUSxFQUFFO1lBQ1YsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3RCO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxzQkFBc0IsQ0FBQyxLQUFnQixFQUFFLE1BQWM7UUFDM0QsTUFBTSxVQUFVLEdBQXVCLEVBQUUsQ0FBQztRQUUxQyxJQUFJLEtBQUssQ0FBQyxRQUFRO1lBQ2QsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFekMsUUFBUSxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQ3JCLEtBQUssYUFBYSxDQUFDLGdCQUFnQixDQUFDO2dCQUNoQyxJQUFLLEtBQW1CLENBQUMsU0FBUyxFQUFFO29CQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBRSxLQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7aUJBQUU7Z0JBQzlHLElBQUssS0FBbUIsQ0FBQyxTQUFTLEVBQUU7b0JBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFFLEtBQW1CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztpQkFBRTtnQkFDOUcsUUFBUyxLQUFtQixDQUFDLFFBQVEsRUFBRTtvQkFDbkMsS0FBSyxZQUFZLENBQUMsR0FBRzt3QkFDakIsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0JBQzlDLE1BQU07b0JBQ1YsS0FBSyxZQUFZLENBQUMsS0FBSzt3QkFDbkIsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2xDLE1BQU07b0JBQ1YsS0FBSyxZQUFZLENBQUMsUUFBUTt3QkFDdEIsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0JBQzlDLE1BQU07aUJBQ2I7Z0JBQ0QsTUFBTTtZQUNWLEtBQUssYUFBYSxDQUFDLGVBQWUsQ0FBQztnQkFDL0IsSUFBSyxLQUF1QixDQUFDLFNBQVMsRUFBRTtvQkFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUUsS0FBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2lCQUFFO2dCQUN0SCxJQUFLLEtBQXVCLENBQUMsU0FBUyxFQUFFO29CQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBRSxLQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7aUJBQUU7Z0JBQ3RILE1BQU07WUFDVixLQUFLLGFBQWEsQ0FBQyxRQUFRLENBQUM7WUFDNUIsS0FBSyxhQUFhLENBQUMsUUFBUTtnQkFDdkIsSUFBSSxLQUFLLENBQUMsUUFBUTtvQkFDZCxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEQsTUFBTTtZQUNWLEtBQUssYUFBYSxDQUFDLGlCQUFpQixDQUFDO2dCQUNqQyxJQUFLLEtBQXdCLENBQUMsY0FBYztvQkFDeEMsSUFBSSxLQUFLLENBQUMsUUFBUTt3QkFDZCxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEQsTUFBTTtTQUNiO1FBRUQsT0FBTyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHlCQUF5QixDQUFDLGFBQXFCLEVBQUUsU0FBaUI7UUFDckUsSUFBSSxxQkFBcUIsR0FBMEIsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQy9FLHFCQUFxQixHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUNwRCxxQkFBcUIsQ0FBQyxPQUFPLEdBQUc7WUFDNUIsbUJBQW1CLEVBQUU7Z0JBQ2pCLEdBQUcsRUFBRSxhQUFhLEdBQUcsZ0JBQWdCO2dCQUNyQyxLQUFLLEVBQUUsU0FBUztnQkFDaEIsYUFBYSxFQUFFLGlCQUFpQixDQUFDLEdBQUc7YUFDdkM7WUFDRCxlQUFlLEVBQUU7Z0JBQ2IsR0FBRyxFQUFFLGFBQWEsR0FBRyxpQkFBaUI7Z0JBQ3RDLEtBQUssRUFBRSxTQUFTO2dCQUNoQixhQUFhLEVBQUUsaUJBQWlCLENBQUMsR0FBRzthQUN2QztZQUNELFlBQVksRUFBRTtnQkFDVixHQUFHLEVBQUUsYUFBYSxHQUFHLGNBQWM7Z0JBQ25DLEtBQUssRUFBRSxTQUFTO2dCQUNoQixhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN4QztZQUNELGlCQUFpQixFQUFFO2dCQUNmLEdBQUcsRUFBRSxhQUFhLEdBQUcsbUJBQW1CO2dCQUN4QyxLQUFLLEVBQUUsU0FBUztnQkFDaEIsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7YUFDeEM7WUFDRCxjQUFjLEVBQUU7Z0JBQ1osR0FBRyxFQUFFLGFBQWEsR0FBRyxnQkFBZ0I7Z0JBQ3JDLEtBQUssRUFBRSxTQUFTO2dCQUNoQixhQUFhLEVBQUUsaUJBQWlCLENBQUMsTUFBTTthQUMxQztTQUNKLENBQUE7UUFDRCxxQkFBcUIsQ0FBQyxLQUFLLEdBQUc7WUFDMUIsZUFBZSxFQUFFO2dCQUNiLEdBQUcsRUFBRSxhQUFhLEdBQUcsZ0JBQWdCO2dCQUNyQyxLQUFLLEVBQUUsU0FBUztnQkFDaEIsYUFBYSxFQUFFLGlCQUFpQixDQUFDLEdBQUc7YUFDdkM7WUFDRCxZQUFZLEVBQUU7Z0JBQ1YsR0FBRyxFQUFFLGFBQWEsR0FBRyxnQkFBZ0I7Z0JBQ3JDLEtBQUssRUFBRSxTQUFTO2dCQUNoQixhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN4QztTQUNKLENBQUE7UUFDRCxPQUFPLHFCQUFxQixDQUFDO0lBQ2pDLENBQUM7SUFDRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxHQUFHLEtBQUs7UUFDdEQsSUFBSSxVQUFVLElBQUksU0FBUyxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUU7WUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO1NBQUM7UUFDdEYsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxPQUFPLENBQUM7UUFDWixNQUFNLFdBQVcsR0FBRztZQUNoQixHQUFHLEVBQUUsR0FBRztZQUNSLEdBQUcsRUFBRSxHQUFHO1lBQ1IsR0FBRyxFQUFFLEdBQUc7U0FDWCxDQUFDO1FBRUYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHNDQUFzQztZQUUvRCxJQUFJLE9BQU8sS0FBSyxHQUFHLElBQUksT0FBTyxLQUFLLEdBQUcsSUFBSSxPQUFPLEtBQUssR0FBRyxFQUFFO2dCQUN2RCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBRXZCO2lCQUFNLElBQUksT0FBTyxLQUFLLEdBQUcsSUFBSSxPQUFPLEtBQUssR0FBRyxJQUFJLE9BQU8sS0FBSyxHQUFHLEVBQUU7Z0JBQzlELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFFaEMsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLEtBQUssT0FBTyxFQUFFLEVBQUUsc0ZBQXNGO29CQUU5SCxPQUFPLEtBQUssQ0FBQyxDQUFDLGlFQUFpRTtpQkFDbEY7YUFDSjtTQUNKO1FBRUQsT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLHNDQUFzQztJQUNyRSxDQUFDO0lBR0Q7Ozs7Ozs7Ozs7O09BV0c7SUFDSSxlQUFlLENBQ2xCLFlBQTBCLEVBQzFCLHNCQUFpRCxJQUFJLEVBQ3JELFdBQXVELElBQUksRUFDM0QsZ0JBQXdDLElBQUk7UUFFNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXhDLElBQUksR0FBRyxHQUFHLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLElBQUksV0FBVyxHQUFXLElBQUksQ0FBQztRQUMvQixNQUFNLFVBQVUsR0FBRztZQUNmLGdCQUFnQixFQUFFLEVBQUU7U0FDdkIsQ0FBQztRQUVGLDJHQUEyRztRQUMzRyxtREFBbUQ7UUFDbkQsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFO1lBQ3JCLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM1QixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUU7b0JBQ2pCLEtBQUssYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7d0JBQy9CLE1BQU0sV0FBVyxHQUFXLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUM7d0JBQzdELFdBQVcsR0FBRyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQzt3QkFDM0UsTUFBTTtxQkFDVDtvQkFDRCxLQUFLLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3dCQUM1QixHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDO3dCQUMxRCxNQUFNO3FCQUNUO29CQUNELEtBQUssYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0JBQzNCLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQzt3QkFDeEQsTUFBTTtxQkFDVDtpQkFDSjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCx1R0FBdUc7UUFDdkcsNkdBQTZHO1FBQzdHLElBQUksbUJBQW1CLEVBQUU7WUFDckIsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM1QixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUU7b0JBQ2pCLEtBQUssYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7d0JBQy9CLE1BQU0sV0FBVyxHQUFXLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUM7d0JBQzdELFdBQVcsR0FBRyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQzt3QkFDM0UsTUFBTTtxQkFDVDtvQkFDRCxLQUFLLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3dCQUM1QixHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDO3dCQUMxRCxNQUFNO3FCQUNUO29CQUNELEtBQUssYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0JBQzNCLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQzt3QkFDdkMsTUFBTTtxQkFDVDtpQkFDSjtZQUNMLENBQUMsQ0FBQyxDQUFBO1NBQ0w7UUFFRCxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUU7WUFDckIsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQztTQUMxRjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO1lBQy9DLE9BQU8sRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDMUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJO1NBQ3BILENBQUM7YUFDRyxTQUFTLENBQ04sQ0FBQyxHQUFrQyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzNDLElBQUksUUFBUSxFQUFFO2dCQUNWLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNqQjtRQUNMLENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ04sSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzNDLElBQUksYUFBYSxFQUFFO2dCQUNmLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN4QjtZQUNELDZCQUE2QixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUNKLENBQUM7SUFDVixDQUFDOztBQXBiYSw0QkFBTyxHQUFZLElBQUksT0FBTyxFQUFHLENBQUE7aUhBRnRDLG9CQUFvQjtxSEFBcEIsb0JBQW9CLGNBRmpCLE1BQU07MkZBRVQsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgQ29sU3BhblNpemVzRW51bSwgRmllbGRUeXBlRW51bSB9IGZyb20gXCIuLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbnRleHQubW9kZWxcIjtcclxuaW1wb3J0IHsgRW5kUG9pbnRDb25maWd1cmF0aW9uLCBFbmRQb2ludERhdGEsIEVuZFBvaW50RGF0YVBhcmFtcywgUGFyYW1UeXBlRW51bSwgUmVxdWVzdE1ldGhvZEVudW0gfSBmcm9tIFwiLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBBdHRhY2htZW50RmllbGQgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpZWxkcy9hdHRhY2htZW50RmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgSW1hZ2VGaWVsZCB9IGZyb20gXCIuLi9tb2RlbHMvZmllbGRzL2ltYWdlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgTGlzdFZhbHVlRmllbGQgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBUZXh0YXJlYUZpZWxkIH0gZnJvbSBcIi4uL21vZGVscy9maWVsZHMvdGV4dGFyZWFGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBUZXh0TWFza0VudW0sIFRleHRGaWVsZCwgVXJsUmVnZXgsIFRlbFJlZ2V4IH0gZnJvbSBcIi4uL21vZGVscy9maWVsZHMvdGV4dEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEZvcm0gfSBmcm9tIFwiLi4vbW9kZWxzL2Zvcm0ubW9kZWxcIjtcclxuaW1wb3J0IHsgUmVjb3JkIH0gZnJvbSBcIi4uL21vZGVscy9yZWNvcmQubW9kZWxcIjtcclxuaW1wb3J0IHsgQXJyYXlWYWxpZGF0b3JzIH0gZnJvbSBcIi4vY3VzdG9tLWZvcm0tdmFsaWRhdG9ycy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4vZXFwLWR5bmFtaWMtbW9kdWxlLWRpYWxvZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNwaW5uZXJTZXJ2aWNlIH0gZnJvbSBcIi4vc3Bpbm5lci5zZXJ2aWNlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFV0aWxpdHlIZWxwZXJTZXJ2aWNlIHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGNvbnRleHQ6IENvbnRleHQgPSBuZXcgQ29udGV4dCgpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgcHJpdmF0ZSBzcGlubmVyU2VydmljZTogU3Bpbm5lclNlcnZpY2VcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgRXZhbHVhdGVGaWVsZEZvcm11bGEoZm9ybXVsYTogc3RyaW5nLCByZWM6IFJlY29yZCwgY3R4OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IGV2YWx1YXRlZFZhbHVlID0gZXZhbChmb3JtdWxhKTtcclxuICAgICAgICByZXR1cm4gKGV2YWx1YXRlZFZhbHVlID8gZXZhbHVhdGVkVmFsdWUgOiBudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFNldENvbnRleHQoY3R4OiBDb250ZXh0KSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY3R4O1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBpc051bWVyaWMobikge1xyXG4gICAgICAgIHJldHVybiAhaXNOYU4obik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBpbml0U3R5bGVzKHN0eWxlY3NzKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0eWxlY3NzLnNwbGl0KFwiO1wiKS5yZWR1Y2UoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qga2V5cGFyID0gYi5zcGxpdChcIjpcIilcclxuICAgICAgICAgICAgaWYgKGtleXBhci5sZW5ndGggPiAxKVxyXG4gICAgICAgICAgICAgICAgYVtrZXlwYXJbMF0udHJpbSgpXSA9IGtleXBhclsxXS50cmltKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBhXHJcbiAgICAgICAgfSwge30pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgR2V0RmllbGRUeXBlKGZpZWxkOiBCYXNlRmllbGQpIHtcclxuICAgICAgICBzd2l0Y2ggKGZpZWxkLkZpZWxkVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBkaSB0ZXN0b1wiXToge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdDogVGV4dEZpZWxkID0gT2JqZWN0LmFzc2lnbihuZXcgVGV4dEZpZWxkLCBmaWVsZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIHBlciBpbXBvc3RhcmUgaSB2YWxvcmkgZGEgc3VnZ2VyaXJlIG5lbGwnYXV0b2NvbXBsZXRlIHBlciBpIGNhbXBpIGluIGN1aSBsJ3V0ZW50ZSBkZXZlIHNjcml2ZXJlIGNvbWFuZGkgamF2YXNjcmlwdC5cclxuICAgICAqIEluIGJhc2UgYWxsJ3VsdGltbyBjYXJhdHRlcmUgZGlnaXRhdG8gdmllbmUgaW1wb3N0YXRvIHVuIGVsZW5jbyBkaSBvZ2dldHRpIG8gcHJvcHJpZXTDoCBjaGUgbCd1dGVudGUgaGEgYSBkaXNwb3NpemlvbmUgaW4gcXVlbCBtb21lbnRvLlxyXG4gICAgICogQHBhcmFtIGZpZWxkcyBBcnJheSBkaSBCYXNlRmllbGQgYWdnaXVudGkgYWxsYSBGb3JtXHJcbiAgICAgKiBAcGFyYW0gdHlwZWRGb3JtdWxhIFN0cmluZ2EgZGlnaXRhdGEgZGFsbCd1dGVudGVcclxuICAgICAqIEBzdW1tYXJ5IElsIG1ldG9kbyBpbXBvc3RhIGkgc3VnZ2VyaW1lbnRpIGJhc2FuZG9zaSBzdSAzIGNhc2k6XHJcbiAgICAgKiAgMSkgbCd1dGVudGUgbm9uIGhhIGRpZ2l0YXRvIG51bGxhIG8gbGEgc3RyaW5nYSBkaWdpdGF0YSBkYWxsJ3V0ZW50ZSBmaW5pc2NlIGNvbiB1bm8gc3BhemlvIHZ1b3RvXHJcbiAgICAgKiAgMikgbGEgc3RyaW5nYSBkaWdpdGF0YSBkYWxsJ3V0ZW50ZSBmaW5pc2NlIGNvbiB1biBcIi5cIlxyXG4gICAgICogIDMpIGxhIHN0cmluZ2EgZGlnaXRhdGEgZGFsbCd1dGVudGUgbm9uIGNvaW5jaWRlIGNvbiBuZXNzdW4gYWx0cm8gY2FzbyBzb3ByYSAoZmluaXNjZSBjb24gdW4gY2FyYXR0ZXJlIHF1YWx1bnF1ZSlcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBHZXRBdXRvY29tcGxldGVPcHRpb25zKGZpZWxkczogQXJyYXk8QmFzZUZpZWxkPiwgdHlwZWRGb3JtdWxhOiBzdHJpbmcpOiBBcnJheTx7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfT4ge1xyXG5cclxuICAgICAgICBsZXQgYXV0b2NvbXBsZXRlT3B0aW9uczogQXJyYXk8eyBsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH0+ID0gW107XHJcblxyXG4gICAgICAgIC8vIFJlY3VwZXJvIGkgbm9taSBkaSB0dXR0aSBpIGNhbXBpIGNyZWF0aSBmaW5vIGFkIG9yYSBuZWxsYSBmb3JtLlxyXG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZVJlY1Byb3BlcnRpZXM6IEFycmF5PHN0cmluZz4gPSBmaWVsZHMubWFwKGYgPT4gZi5MYWJlbC5zcGxpdCgnICcpLmpvaW4oJ18nKSk7XHJcblxyXG4gICAgICAgIC8vIE5lbCBjYXNpIGluIGN1aSBsJ3V0ZW50ZSBub24gaGEgaW5zZXJpdG8gbnVsbGEgb3BwdXJlIGxhIHN0cmluZ2EgZmluaXNjZSBjb24gdW5vIHNwYXppbyB2dW90byBvIHVuIHNpbWJvbG8gZGl2ZXJzbyBkYSBcIi5cIlxyXG4gICAgICAgIC8vICh1biBjYXJhdHRlcmUgbm9uIGFsZmFudW1lcmljbykgaW1wb3N0byBjb21lIHN1Z2dlcmltZW50aSBzb2xvIFwicmVjXCIgZSBcImN0eFwiLCBvdnZlcm8gZ2xpIHVuaWNpIGR1ZSBvZ2dldHRpIGEgY3VpIGwndXRlbnRlIGhhIGFjY2Vzc28uXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhdHlwZWRGb3JtdWxhIHx8XHJcbiAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICF0eXBlZEZvcm11bGEuZW5kc1dpdGgoXCIuXCIpXHJcbiAgICAgICAgICAgICAgICAmJiBuZXcgUmVnRXhwKFwiW14wLTlhLXpBLVpfXVwiKS50ZXN0KHR5cGVkRm9ybXVsYS5zdWJzdHJpbmcodHlwZWRGb3JtdWxhLmxlbmd0aCAtIDEsIHR5cGVkRm9ybXVsYS5sZW5ndGgpKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXHJcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiBcInJlY1wiLCB2YWx1ZTogKHR5cGVkRm9ybXVsYSA/IHR5cGVkRm9ybXVsYSA6ICcnKSArIFwicmVjXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgbGFiZWw6IFwiY3R4XCIsIHZhbHVlOiAodHlwZWRGb3JtdWxhID8gdHlwZWRGb3JtdWxhIDogJycpICsgXCJjdHhcIiB9XHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFNlIGxhIHN0cmluZ2EgZmluaXNjZSBjb24gdW4gXCIuXCIgdnVvbCBkaXJlIGNoZSBsJ3V0ZW50ZSBzdGEgY2VyY2FuZG8gZGkgYWNjZWRlcmUgYWQgdW5hIHByb3ByaWV0w6AgZGkgdW4gb2dnZXR0b1xyXG4gICAgICAgIC8vIGEgc3VhIGRpc3Bvc2l6aW9uZS4gUmVjdXBlcm8gaWwgbm9tZSBkZWxsJ3VsdGltbyBvZ2dldHRvIGRpZ2l0YXRvIGRhbGwndXRlbnRlIGUgc2UgbCdvZ2dldHRvIHNjZWx0byDDqCBcInJlY1wiIG8gXCJjdHhcIlxyXG4gICAgICAgIC8vIGFsbG9yYSBzdWdnZXJpc2NvIGxlIHByb3ByaWV0w6AgY2hlIGVzaXN0b25vIGFsbCdpbnRlcm5vIGRpIHF1ZXN0aSBvZ2dldHRpIGFsdHJpbWVudGkgbm9uIG1vc3RybyBudWxsYS5cclxuICAgICAgICBlbHNlIGlmICh0eXBlZEZvcm11bGEuZW5kc1dpdGgoXCIuXCIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm11bGFQaWVjZXM6IEFycmF5PHN0cmluZz4gPSB0eXBlZEZvcm11bGEuc3BsaXQoXCIgXCIpW3R5cGVkRm9ybXVsYS5zcGxpdChcIiBcIikubGVuZ3RoIC0gMV0uc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgaWYgKGZvcm11bGFQaWVjZXNbZm9ybXVsYVBpZWNlcy5sZW5ndGggLSAyXSA9PT0gXCJyZWNcIikge1xyXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlT3B0aW9ucyA9IGF2YWlsYWJsZVJlY1Byb3BlcnRpZXMubWFwKGYgPT4geyByZXR1cm4geyBsYWJlbDogZiwgdmFsdWU6IHR5cGVkRm9ybXVsYSArIGYgfTsgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybXVsYVBpZWNlc1tmb3JtdWxhUGllY2VzLmxlbmd0aCAtIDJdID09PSBcImN0eFwiKSB7XHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGVPcHRpb25zID0gT2JqZWN0LmtleXMoVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dCkubWFwKGYgPT4geyByZXR1cm4geyBsYWJlbDogZiwgdmFsdWU6IHR5cGVkRm9ybXVsYSArIGYgfTsgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybXVsYVBpZWNlcy5sZW5ndGggPiAyICYmIGZvcm11bGFQaWVjZXNbZm9ybXVsYVBpZWNlcy5sZW5ndGggLSAzXSA9PT0gXCJjdHhcIiAmJiBmb3JtdWxhUGllY2VzW2Zvcm11bGFQaWVjZXMubGVuZ3RoIC0gMl0gPT09IFwiVXNlclwiKSB7XHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGVPcHRpb25zID0gT2JqZWN0LmtleXMoVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dC5Vc2VyKS5tYXAoZiA9PiB7IHJldHVybiB7IGxhYmVsOiBmLCB2YWx1ZTogdHlwZWRGb3JtdWxhICsgZiB9OyB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJbiB0dXR0aSBnbGkgYWx0cmkgY2FzaSwgb3Z2ZXJvIHF1YW5kbyBsYSBzdHJpbmdhIGRpZ2l0YXRhIGZpbmlzY2UgY29uIHVuIGNhcmF0dGVyZSBkaXZlcnNvIGRhIHF1ZWxsaVxyXG4gICAgICAgIC8vIGNvbnRyb2xsYXRpIGZpbm9yYSwgdnVvbCBkaXJlIGNoZSBsJ3V0ZW50ZSBzdGEgZGlnaXRhbnRvIGlsIG5vbWUgZGkgdW4gb2dnZXR0bywgdW5hIHByb3ByaWV0w6AgbyB1bmFcclxuICAgICAgICAvLyBmdW56aW9uZSBqYXZhc2NyaXB0LiBDb250cm9sbG8gbGEgcGFyb2xhIGNoZSBsJ3V0ZW50ZSBzdGEgZGlnaXRhbmRvIGUgc2UgZmEgcGFydGUgZGkgdW5vIGRlZ2xpIG9nZ2V0dGkgYSBkaXNwb3NpemlvbmVcclxuICAgICAgICAvLyBvIHVuYSBwcm9wcmlldMOgIGRpIGVzc2kgYWxsb3JhIHN1Z2dlcmlzY28gaSBwb3NzaWJpbGkgbWF0Y2guXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZU9wdGlvbnM6IEFycmF5PHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9PiA9IFtdO1xyXG5cclxuICAgICAgICAgICAgLy8gUHJlbmRvIHR1dHRpIGkgYmxvY2NoaSBkaSBjYXJhdHRlcmkgZGlnaXRhdGkgZGFsbCd1dGVudGVcclxuICAgICAgICAgICAgY29uc3QgYWxsRm9ybXVsYVdvcmRzOiBBcnJheTxzdHJpbmc+ID0gdHlwZWRGb3JtdWxhLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgLy8gUHJlbmRvIGwndWx0aW1vIGJsb2NjbyBkaSBjYXJhdHRlcmkgZGlnaXRhdG8gZGFsbCd1dGVudGVcclxuICAgICAgICAgICAgY29uc3QgbGFzdFR5cGVkU3RyaW5nOiBzdHJpbmcgPSBhbGxGb3JtdWxhV29yZHNbYWxsRm9ybXVsYVdvcmRzLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICAgICAgLy8gU2UgbGEgbCd1bHRpbWEgc3RyaW5nYSBkaWdpdGF0YSBub24gY29udGllbmUgY2FyYXR0ZXJpIHNwZWNpYWxpIGFsbG9yYSBzcGxpdHRvIGxhIHN0cmluZ2FcclxuICAgICAgICAgICAgLy8gc3VpIFwiLlwiIGUgaW1wb3N0byBpIHN1Z2dlcmltZW50aSBpbiBiYXNlIGFsIHBhdGggZGVsbGEgcHJvcnBpZXTDoCBjaGUgc2kgc3RhIGRpZ2l0YW5kby5cclxuICAgICAgICAgICAgaWYgKCFuZXcgUmVnRXhwKFwiW14wLTlhLXpBLVpfLl1cIikudGVzdChsYXN0VHlwZWRTdHJpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVBhdGggPSBsYXN0VHlwZWRTdHJpbmcuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdFR5cGVkV29yayA9IHByb3BlcnR5UGF0aFtwcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHByb3BlcnRpZXNUb0NoZWNrOiBBcnJheTxzdHJpbmc+ID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5UGF0aC5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNUb0NoZWNrID0gW1wicmVjXCIsIFwiY3R4XCJdO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eVBhdGgubGVuZ3RoID4gMSAmJiBwcm9wZXJ0eVBhdGhbcHJvcGVydHlQYXRoLmxlbmd0aCAtIDJdID09PSBcImN0eFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1RvQ2hlY2sgPSBPYmplY3Qua2V5cyhVdGlsaXR5SGVscGVyU2VydmljZS5jb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlQYXRoLmxlbmd0aCA+IDIgJiYgcHJvcGVydHlQYXRoW3Byb3BlcnR5UGF0aC5sZW5ndGggLSAzXSA9PT0gXCJjdHhcIiAmJiBwcm9wZXJ0eVBhdGhbcHJvcGVydHlQYXRoLmxlbmd0aCAtIDJdID09PSBcIlVzZXJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNUb0NoZWNrID0gT2JqZWN0LmtleXMoVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dC5Vc2VyKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlQYXRoLmxlbmd0aCA+IDEgJiYgcHJvcGVydHlQYXRoW3Byb3BlcnR5UGF0aC5sZW5ndGggLSAyXSA9PT0gXCJyZWNcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNUb0NoZWNrID0gYXZhaWxhYmxlUmVjUHJvcGVydGllcztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBFc2VndW8gaWwgY29udHJvbGxvIHN1bGxlIHByb3ByaWV0w6AgcmVjdXBlcmF0ZSwgYWdnaXVuZ28gYWkgc3VnZ2VyaW1lbnRpIHR1dHRpIGkgbm9taSBjaGUgaW5pemlhbm8gY29uXHJcbiAgICAgICAgICAgICAgICAvLyBxdWVsbG8gY2hlIHN0YSBkaWdpdGFuZG8gbCd1dGVudGUuXHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVG9DaGVjay5mb3JFYWNoKHByb3AgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wLnN0YXJ0c1dpdGgobGFzdFR5cGVkV29yaykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlT3B0aW9ucy5wdXNoKHsgbGFiZWw6IHByb3AsIHZhbHVlOiB0eXBlZEZvcm11bGEgKyBwcm9wLnN1YnN0cmluZyhsYXN0VHlwZWRXb3JrLmxlbmd0aCwgcHJvcC5sZW5ndGgpIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBhdmFpbGFibGVPcHRpb25zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGF1dG9jb21wbGV0ZU9wdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gaW52b2NhdG8gZGFsbCdodG1sIHBlciBpbXBvc3RhcmUgbGUgY2xhc3NpIGNzcyBwZXIgdmlzdWFsaXp6YXJlIGlsIGNhbXBvIGFsbCdpbnRlcm5vIGRlbGxhIGZvcm0uXHJcbiAgICAgKiBTZSBwZXIgaWwgZmllbGQgc29ubyBzdGF0ZSBzcGVjaWZpY2F0ZSBkZWxsZSBjbGFzc2kgYWxsb3JhIHZlbmdvbm8gYXBwbGNhdGUgcXVlbGxlLCBhbHRyaW1lbnRpIHZlbmdvbm8gdXNhdGVcclxuICAgICAqIGRlbGxlIGNsYXNzaSBkaSBkZWZhdWx0LlxyXG4gICAgICogQHBhcmFtIGZpZWxkIEJhc2VGaWVsZCBkYSB2aXN1YWxpenphcmUuXHJcbiAgICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1bmEgc3RyaW5nYSBjb250ZW5lbnRlIGxlIGNsYXNzaSBjc3MgZGEgYXBwbGljYXJlLlxyXG4gICAgICovXHJcbiAgICBnZXRGaWVsZFN5bGVDbGFzcyhmaWVsZDogQmFzZUZpZWxkKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoZmllbGQuQ29sU3BhblNpemVzICYmIGZpZWxkLkNvbFNwYW5TaXplcy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICByZXR1cm4gZmllbGQuQ29sU3BhblNpemVzLm1hcChzaXplID0+IENvbFNwYW5TaXplc0VudW1bc2l6ZV0udG9TdHJpbmcoKSkuam9pbihcIiBcIik7XHJcblxyXG4gICAgICAgIHN3aXRjaCAoZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIGRpIHRlc3RvXCJdOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00XCI7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFyZWEgZGkgdGVzdG9cIl06XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMlwiO1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJCb29sZWFub1wiXTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkRhdGEgZS9vIG9yYVwiXTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNFwiO1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBudW1lcmljb1wiXTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNFwiO1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJBbGxlZ2F0b1wiXTpcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAoZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5Jc011bHRpQXR0YWNoIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKChmaWVsZCBhcyBBdHRhY2htZW50RmllbGQpLk1ldGFkYXRhRmllbGRzICYmIChmaWVsZCBhcyBBdHRhY2htZW50RmllbGQpLk1ldGFkYXRhRmllbGRzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMlwiO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTRcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiSW1tYWdpbmVcIl06XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgKGZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uSXNNdWx0aUF0dGFjaCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICgoZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5NZXRhZGF0YUZpZWxkcyAmJiAoZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5NZXRhZGF0YUZpZWxkcy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC0xMiBjb2wtbGctMTJcIjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00XCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNFwiO1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJMb29rdXBcIl06XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTRcIjtcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydGb3JtIGRpIGRldHRhZ2xpbyddOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC0xMiBjb2wtbGctMTJcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBpbCBGb3JtR3JvdXAgY2hlIHJhcHByZXNlbnRhIHVuYSBGb3JtIGEgcGFydGlyZSBkYWkgc3VvaSBCYXNlRmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZm9ybUZpZWxkcyBMaXN0YSBkZWkgQmFzZUZpZWxkIGNoZSBjb21wb25nb25vIGxhIGZvcm0uXHJcbiAgICAgKiBAcGFyYW0gcmVjb3JkIE9nZ2V0dG8gZGkgdGlwbyBSZWNvcmQgY2hlIGNvbnRpZW5lIGkgdmFsb3JpIGRlaSBjYW1waS5cclxuICAgICAqIEBwYXJhbSBvbmx5VmlldyBTZSBUUlVFIGRpc2FiaWxpdGEgbGEgZm9ybSBwZXIgcmVuZGVybGEgaW4gc29sYSBsZXR0dXJhLlxyXG4gICAgICogQHBhcmFtIGluY2x1ZGVDdXJyZW50Rm9ybUluRmllbGQgU2UgVFJVRSBwb3BvbGEgbGEgcHJvcHJpZXTDoCBGb3JtRm9ybUdyb3VwIGFsbCdpbnRlcm5vIGRpIG9nbmkgQmFzZUZpZWxkIGNvbiBpbCBGb3JtR3JvdXAgY29ycmVudGUuXHJcbiAgICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1biBGb3JtR3JvdXAgcmFwcHJlc2VudGF0ZSBsYSBGb3JtIGEgY3VpIGFwcGFydGVuZ29ubyBpIEJhc2VGaWVsZCByaWNldnV0aSBpbiBpbnB1dC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIENyZWF0ZUZvcm1Gb3JtR3JvdXAoZm9ybUZpZWxkczogQXJyYXk8QmFzZUZpZWxkPixcclxuICAgICAgICByZWNvcmQ6IFJlY29yZCxcclxuICAgICAgICBvbmx5VmlldyA9IGZhbHNlLFxyXG4gICAgICAgIGluY2x1ZGVDdXJyZW50Rm9ybUluRmllbGQgPSB0cnVlKTogVW50eXBlZEZvcm1Hcm91cCB7XHJcbiAgICAgICAgY29uc3QgZm9ybUZvcm06IFVudHlwZWRGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFtdKTtcclxuXHJcbiAgICAgICAgZm9ybUZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgZm9ybUZvcm0uYWRkQ29udHJvbChmaWVsZC5OYW1lLCB0aGlzLmNyZWF0ZUZpZWxkRm9ybUNvbnRyb2woZmllbGQsIHJlY29yZCkpO1xyXG4gICAgICAgICAgICBpZiAoaW5jbHVkZUN1cnJlbnRGb3JtSW5GaWVsZCkge1xyXG4gICAgICAgICAgICAgICAgZmllbGQuRm9ybUZvcm1Hcm91cCA9IGZvcm1Gb3JtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKG9ubHlWaWV3KSB7XHJcbiAgICAgICAgICAgIGZvcm1Gb3JtLmRpc2FibGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmb3JtRm9ybTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bnppb25lIHBlciBjcmVhcmUgZSBhZ2dpdW5nZXJlIGFsIEZvcm1Hcm91cCByYXBwcmVzZW50YW50ZSBsYSBmb3JtIHVuIG51b3ZvIEZvcm1Db250cm9sIGEgcGFydGlyZSBkYSB1biBGaWVsZC5cclxuICAgICAqIEluIG51b3ZvIEZvcm1Db250cm9sIGF2csOgIGlsIG5vbWUgZGVsIGNhbXBvIHBhc3NhdG8gZSB2ZXJyYW5ubyBpbXBvc3RhdGkgaSBWYWxpZGF0b3JzIGluIGJhc2UgYWwgdGlwbyBkZWwgY2FtcG8gc3Rlc3NvLlxyXG4gICAgICogQHBhcmFtIGZpZWxkIEJhc2VGaWVsZCBwZXIgY3VpIGNyZWFyZSBpbCBGb3JtQ29udHJvbCBkYSBpbnNlcmlyZSBuZWwgRm9ybUdyb3VwIGRlbGEgZm9ybS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjcmVhdGVGaWVsZEZvcm1Db250cm9sKGZpZWxkOiBCYXNlRmllbGQsIHJlY29yZDogUmVjb3JkKTogQWJzdHJhY3RDb250cm9sIHtcclxuICAgICAgICBjb25zdCB2YWxpZGF0b3JzOiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKGZpZWxkLlJlcXVpcmVkKVxyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblxyXG4gICAgICAgIHN3aXRjaCAoZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIGRpIHRlc3RvXCJdOlxyXG4gICAgICAgICAgICAgICAgaWYgKChmaWVsZCBhcyBUZXh0RmllbGQpLk1heExlbmdodCkgeyB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXhMZW5ndGgoKGZpZWxkIGFzIFRleHRGaWVsZCkuTWF4TGVuZ2h0KSk7IH1cclxuICAgICAgICAgICAgICAgIGlmICgoZmllbGQgYXMgVGV4dEZpZWxkKS5NaW5MZW5naHQpIHsgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKChmaWVsZCBhcyBUZXh0RmllbGQpLk1pbkxlbmdodCkpOyB9XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKChmaWVsZCBhcyBUZXh0RmllbGQpLlRleHRNYXNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0TWFza0VudW0uVXJsOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKFVybFJlZ2V4KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dE1hc2tFbnVtLkVtYWlsOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5lbWFpbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dE1hc2tFbnVtLlRlbGVmb25vOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKFRlbFJlZ2V4KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFyZWEgZGkgdGVzdG9cIl06XHJcbiAgICAgICAgICAgICAgICBpZiAoKGZpZWxkIGFzIFRleHRhcmVhRmllbGQpLk1heExlbmdodCkgeyB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXhMZW5ndGgoKGZpZWxkIGFzIFRleHRhcmVhRmllbGQpLk1heExlbmdodCkpOyB9XHJcbiAgICAgICAgICAgICAgICBpZiAoKGZpZWxkIGFzIFRleHRhcmVhRmllbGQpLk1pbkxlbmdodCkgeyB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgoKGZpZWxkIGFzIFRleHRhcmVhRmllbGQpLk1pbkxlbmdodCkpOyB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkFsbGVnYXRvOlxyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW0uSW1tYWdpbmU6XHJcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuUmVxdWlyZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKEFycmF5VmFsaWRhdG9ycy5taW5MZW5naHQoMSkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVsnRWxlbmNvIGdlbmVyaWNvJ106XHJcbiAgICAgICAgICAgICAgICBpZiAoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Jc011bHRpQ2hvaWNoZSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuUmVxdWlyZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChBcnJheVZhbGlkYXRvcnMubWluTGVuZ2h0KDEpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wocmVjb3JkW2ZpZWxkLk5hbWVdLCB2YWxpZGF0b3JzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBwZXIgY29uZmlndXJhcmUgZ2xpIGVuZHBvaW50IGRhIHVzYXJlIGRpIGRlZmF1bHQgYSBwYXJ0aXJlIGRhbGwndXJsIGJhc2UgZGVsIHNlcnZlclxyXG4gICAgICogYSBjdWkgc2kgZGV2ZSBjb25uZXR0ZXJlIGUgYWwgdG9rZW4gZGEgcGFzc2FyZSBwZXIgYXV0ZW50aWNhcnNpLlxyXG4gICAgICogQHBhcmFtIGJhc2VTZXJ2ZXJVcmwgU3RyaW5nYSBkZWxsJ3VybCBiYXNlIGRlbCBzZXJ2ZXIgKGVzOiBcImh0dHA6Ly9sb2NhbGhvc3Q6NTAwMFwiKS5cclxuICAgICAqIEBwYXJhbSB1c2VyVG9rZW4gVG9rZW4gZGVsbCd1dGVudGUgbG9nZ2F0byBkYSB1c2FyZSBwZXIgYXV0ZW50aWNhcnNpIHNlIG5lY2Vzc2FyaW8uXHJcbiAgICAgKiBAcmV0dXJucyBSZXNpdHVpc2NlIGxhIGNvbmZpZ3VyYXppb25lIGNvbXBsZXRhIGRlZ2xpIGVuZFBvaW50IGRhIHVzYXJlIGRpIGRlZmF1bHQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBDb25maWd1cmVEZWZhdWx0RW5kUG9pbnRzKGJhc2VTZXJ2ZXJVcmw6IHN0cmluZywgdXNlclRva2VuOiBzdHJpbmcpOiBFbmRQb2ludENvbmZpZ3VyYXRpb24ge1xyXG4gICAgICAgIGxldCBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbiA9IG5ldyBFbmRQb2ludENvbmZpZ3VyYXRpb24oKTtcclxuICAgICAgICBlbmRQb2ludENvbmZpZ3VyYXRpb24gPSBuZXcgRW5kUG9pbnRDb25maWd1cmF0aW9uKCk7XHJcbiAgICAgICAgZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMgPSB7XHJcbiAgICAgICAgICAgIEdldEJ5Rm9ybUlERW5kUG9pbnQ6IHtcclxuICAgICAgICAgICAgICAgIFVybDogYmFzZVNlcnZlclVybCArIFwiL2FwaS92MS9nZXRhbGxcIixcclxuICAgICAgICAgICAgICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAgICAgICAgICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5HRVQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIEdldEJ5SURFbmRQb2ludDoge1xyXG4gICAgICAgICAgICAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL3YxL2dldEJ5SURcIixcclxuICAgICAgICAgICAgICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAgICAgICAgICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5HRVQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFNhdmVFbmRQb2ludDoge1xyXG4gICAgICAgICAgICAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL3YxL3NhdmVcIixcclxuICAgICAgICAgICAgICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAgICAgICAgICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5QT1NULFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBEdXBsaWNhdGVFbmRQb2ludDoge1xyXG4gICAgICAgICAgICAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL3YxL2R1cGxpY2F0ZVwiLFxyXG4gICAgICAgICAgICAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgICAgICAgICAgICAgIFJlcXVlc3RNZXRob2Q6IFJlcXVlc3RNZXRob2RFbnVtLlBPU1QsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIERlbGV0ZUVuZFBvaW50OiB7XHJcbiAgICAgICAgICAgICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvZGVsZXRlXCIsXHJcbiAgICAgICAgICAgICAgICBUb2tlbjogdXNlclRva2VuLFxyXG4gICAgICAgICAgICAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uREVMRVRFLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3JtcyA9IHtcclxuICAgICAgICAgICAgR2V0QnlJREVuZFBvaW50OiB7XHJcbiAgICAgICAgICAgICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvY29uZi9mb3JtXCIsXHJcbiAgICAgICAgICAgICAgICBUb2tlbjogdXNlclRva2VuLFxyXG4gICAgICAgICAgICAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uR0VULFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBTYXZlRW5kUG9pbnQ6IHtcclxuICAgICAgICAgICAgICAgIFVybDogYmFzZVNlcnZlclVybCArIFwiL2FwaS9jb25mL2Zvcm1cIixcclxuICAgICAgICAgICAgICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAgICAgICAgICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5QT1NULFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlbmRQb2ludENvbmZpZ3VyYXRpb247XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGV4cHJlc3Npb24gcHJlbmRlIHVuYSBzdHJpbmdhIGluIGlucHV0IGUgdmVyaWZpY2EgY2hlIG9nbmkgcGFyZW50ZXNpIGFwZXJ0YSB2ZW5nYSBhbmNoZSBjaGl1c2EgXHJcbiAgICAgKiBAcmV0dXJucyB0cnVlIHNlIGxlIHBhcmVudGVzaSBzb25vIHBhcmkgZSBvZ25pIHBhcmVudGVzaSBjaGl1ZGUgc2Ugc3Rlc3NhLCBmYWxzZSBzZSBtYW5jYW5vIHBhcmVudGVzaSBvIG5vbiB2ZW5nb25vIGNoaXVzZSBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBzdHJpbmdTYW5pdGl6ZXIoZXhwcmVzc2lvbiwgcmVxdWlyZWQgPSBmYWxzZSkge1xyXG4gICAgICAgIGlmIChleHByZXNzaW9uID09IHVuZGVmaW5lZCB8fCBleHByZXNzaW9uID09IG51bGwpIHsgcmV0dXJuIChyZXF1aXJlZCkgPyBmYWxzZSA6IHRydWV9XHJcbiAgICAgICAgbGV0IHN0YWNrID0gW107XHJcbiAgICAgICAgbGV0IGN1cnJlbnQ7XHJcbiAgICAgICAgY29uc3QgbWF0Y2hMb29rdXAgPSB7XHJcbiAgICAgICAgICAgIFwiKFwiOiBcIilcIixcclxuICAgICAgICAgICAgXCJbXCI6IFwiXVwiLFxyXG4gICAgICAgICAgICBcIntcIjogXCJ9XCIsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnQgPSBleHByZXNzaW9uW2ldOyAvL2Vhc2llciB0aGFuIHdyaXRpbmcgaXQgb3ZlciBhbmQgb3ZlclxyXG5cclxuICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT09ICcoJyB8fCBjdXJyZW50ID09PSAnWycgfHwgY3VycmVudCA9PT0gXCJ7XCIpIHtcclxuICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goY3VycmVudCk7XHJcblxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgPT09ICcpJyB8fCBjdXJyZW50ID09PSAnXScgfHwgY3VycmVudCA9PT0gXCJ9XCIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RCcmFja2V0ID0gc3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoTG9va3VwW2xhc3RCcmFja2V0XSAhPT0gY3VycmVudCkgeyAvL2lmIHRoZSBzdGFjayBpcyBlbXB0eSwgLnBvcCgpIHJldHVybnMgdW5kZWZpbmVkLCBzbyB0aGlzIGV4cHJlc3Npb24gaXMgc3RpbGwgY29ycmVjdFxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vdGVybWluYXRlIGltbWVkaWF0ZWx5IC0gbm8gbmVlZCB0byBjb250aW51ZSBzY2FubmluZyB0aGUgc3RyaW5nXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdGFjay5sZW5ndGggPT09IDA7IC8vYW55IGVsZW1lbnRzIG1lYW4gYnJhY2tldHMgbGVmdCBvcGVuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoZSBkYXRhIGxhIGNvbmZpZ3VyYXppb25lIGRpIHVuIGVuZHBvaW50IGNvc3RydWlzY2UgbCd1cmwgZGEgY2hpYW1hcmUsIGdsaSBldmVudHVhbGkgcGFyYW1ldHJpXHJcbiAgICAgKiBkYSBwYXNzYXJlIChuZWwgYm9keSBvIG5lbGxhIHJvdHRhKSBlZCBlZmZldHR1YSBsYSBjaGlhbWF0YS4gQWwgdGVybWluZSBkZWxsYSBjaGlhbWF0YSBlc2VndWUgbGUgZXZlbnR1YWxpXHJcbiAgICAgKiBmdW56aW9uaSBkaSBjYWxsYmFjayAoc2lhIGluIGNhc28gZGkgc3VjY2Vzc28gY2hlIGluIGNhc28gZGkgZXJyb3JlKSBwYXNzYXRlIGluIGlucHV0LlxyXG4gICAgICogQHBhcmFtIGVuZFBvaW50RGF0YSBDb2ZpZ3VyYXppb25lIGRlbGwnZW5kcG9pbnQgZGEgY2hpYW1hcmUuXHJcbiAgICAgKiBAcGFyYW0gZHluYW1pY01vZHVsZVBhcmFtcyBBcnJheSBkZWkgcGFyYW1ldHJpIGFnZ2l1bnRpIGRhbCBtb2R1bG8gZGluYW1pY28gYSBxdWVsbGkgZ2nDoCBjb25maWd1cmF0aVxyXG4gICAgICogKGFkIGVzZW1waW8gaWwgcmVjb3JkIG8gbGEgZm9ybSBkYSBzYWx2YXJlIG9wcHVyZSBsJ0lEIHBlciByZWN1cGVyYXJlIHVuYSBwYXJ0aWNvbGFyZSBlbnRpdMOgKS5cclxuICAgICAqIEBwYXJhbSBjYWxsYmFjayBNZXRvZG8gZGEgZXNlZ3VpcmUgaW4gY2FzbyBkaSBzdWNjZXNzbyBkb3BvIGxhIGNoaWFtYXRhIGh0dHAuXHJcbiAgICAgKiBOT1RBOiBpbiBpbnB1dCB2aWVuZSBwYXNzYXRhIGxhIHJpc3Bvc3RhIGRlbGxhIGNoaWFtYXRhIHN0ZXNzYS5cclxuICAgICAqIEBwYXJhbSBlcnJvckNhbGxCYWNrIE1ldG9kbyBkYSBlc2VndWlyZSBpbiBjYXNvIGRpIGVycm9yZSBkb3BvIGxhIGNoaWFtYXRhIGh0dHAuXHJcbiAgICAgKiBOT1RBOiBpbiBpbnB1dCB2aWVuZSBwYXNzYXRvIGwnZXJyb3JlIGdlbmVyYXRvIGRlbGxhIGNoaWFtYXRhIHN0ZXNzYS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIFJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICBlbmRQb2ludERhdGE6IEVuZFBvaW50RGF0YSxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID0gbnVsbCxcclxuICAgICAgICBjYWxsYmFjazogKGU6IEZvcm0gfCBSZWNvcmQgfCBBcnJheTxSZWNvcmQ+KSA9PiB2b2lkID0gbnVsbCxcclxuICAgICAgICBlcnJvckNhbGxCYWNrOiAoZXJyOiB1bmtub3duKSA9PiB2b2lkID0gbnVsbFxyXG4gICAgKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5hZGRSZXF1ZXN0Q291bnRlcigpO1xyXG5cclxuICAgICAgICBsZXQgdXJsID0gYCR7ZW5kUG9pbnREYXRhLlVybH1gO1xyXG4gICAgICAgIGxldCBxdWVyeVBhcmFtczogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICBjb25zdCBib2R5UGFyYW1zID0ge1xyXG4gICAgICAgICAgICBBZGRpdGlvbmFsUGFyYW1zOiB7fVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIFNlIG5lbGxhIGNvbmZpZ3VyYXppb25lIHNvbm8gc3RhdGkgZGVmaW5pdGkgcGFyYW1ldHJpIGRhIGFnZ2l1bmdlcmUgYWxsYSBjaGlhbWF0YSBxdWVzdGkgdmVuZ29ubyBjaWNsYXRpXHJcbiAgICAgICAgLy8gZSBhZ2dpdW50aSBuZWwgcHVudG8gaW4gY3VpIGRldm9ubyBlc3NlcmUgdXNhdGkuXHJcbiAgICAgICAgaWYgKGVuZFBvaW50RGF0YS5QYXJhbXMpIHtcclxuICAgICAgICAgICAgZW5kUG9pbnREYXRhLlBhcmFtcy5mb3JFYWNoKHAgPT4ge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChwLlBhcmFtVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVsnUXVlcnkgcGFyYW0nXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdQYXJhbTogc3RyaW5nID0gcC5QYXJhbU5hbWUgKyBcIj1cIiArIHAuUGFyYW1WYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSAocXVlcnlQYXJhbXMgPT0gbnVsbCA/IFwiXCIgOiBxdWVyeVBhcmFtcyArIFwiJlwiKSArIHN0cmluZ1BhcmFtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtWydJbiByb3V0ZSddOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHVybCArICh1cmwuZW5kc1dpdGgoXCIvXCIpID8gXCJcIiA6IFwiL1wiKSArIHAuUGFyYW1WYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVsnSW4gQm9keSddOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlQYXJhbXMuQWRkaXRpb25hbFBhcmFtc1twLlBhcmFtTmFtZV0gPSBwLlBhcmFtVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZSBzb25vIHN0YXRpIHBhc3NhdGkgcGFyYW1ldHJpIGRhIGFnZ2l1bmdlcmUgYWxsYSBjaGlhbWF0YSBkZWZpbml0aSBhbGwnaW50ZXJubyBkZWwgbW9kdWxvIGRpbmFtaWNvXHJcbiAgICAgICAgLy8gdmVuZ29ubyBjaWNsYXRpIGUgYWdnaXVudGkgbmVsIHB1bnRvIGluIGN1aSBkZXZvbm8gZXNzZXJlIHVzYXRpIGRvcG8gcXVlbGxpIGRlZmluaXRpIG5lbGxhIGNvbmZpZ3VyYXppb25lLlxyXG4gICAgICAgIGlmIChkeW5hbWljTW9kdWxlUGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMuZm9yRWFjaChwID0+IHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAocC5QYXJhbVR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bJ1F1ZXJ5IHBhcmFtJ106IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nUGFyYW06IHN0cmluZyA9IHAuUGFyYW1OYW1lICsgXCI9XCIgKyBwLlBhcmFtVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0gKHF1ZXJ5UGFyYW1zID09IG51bGwgPyBcIlwiIDogcXVlcnlQYXJhbXMgKyBcIiZcIikgKyBzdHJpbmdQYXJhbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVsnSW4gcm91dGUnXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyAodXJsLmVuZHNXaXRoKFwiL1wiKSA/IFwiXCIgOiBcIi9cIikgKyBwLlBhcmFtVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5UGFyYW1zW3AuUGFyYW1OYW1lXSA9IHAuUGFyYW1WYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdXJsID0gKHVybC5lbmRzV2l0aChcIi9cIikgPyB1cmwuc3Vic3RyaW5nKDAsIHVybC5sZW5ndGggLSAxKSA6IHVybCkgKyBcIj9cIiArIHF1ZXJ5UGFyYW1zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5odHRwLnJlcXVlc3QoZW5kUG9pbnREYXRhLlJlcXVlc3RNZXRob2QsIHVybCwge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBlbmRQb2ludERhdGEuVG9rZW4gPyB7IEF1dGhvcml6YXRpb246IGVuZFBvaW50RGF0YS5Ub2tlbiB9IDogbnVsbCxcclxuICAgICAgICAgICAgYm9keTogIVtSZXF1ZXN0TWV0aG9kRW51bS5ERUxFVEUsIFJlcXVlc3RNZXRob2RFbnVtLkdFVF0uaW5jbHVkZXMoZW5kUG9pbnREYXRhLlJlcXVlc3RNZXRob2QpID8gYm9keVBhcmFtcyA6IG51bGxcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHJlczogRm9ybSB8IFJlY29yZCB8IEFycmF5PFJlY29yZD4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnJlbW92ZVJlcXVlc3RDb3VudGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UucmVtb3ZlUmVxdWVzdENvdW50ZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JDYWxsQmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxCYWNrKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuRXJyb3IoZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
|
|
430
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eUhlbHBlci5zZXJ2aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQXVDLGtCQUFrQixFQUFpQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwSSxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxxQkFBcUIsRUFBb0MsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFLbEosT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRy9GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7QUFNcEYsTUFBTSxPQUFPLG9CQUFvQjtJQUk3QixZQUNZLFdBQStCLEVBQy9CLElBQWdCLEVBQ2hCLGNBQThCO1FBRjlCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtJQUUxQyxDQUFDO0lBRU0sTUFBTSxDQUFDLG9CQUFvQixDQUFDLE9BQWUsRUFBRSxHQUFXLEVBQUUsR0FBUTtRQUNyRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFD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RUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUMzQyxJQUFJLFFBQVEsRUFBRTtnQkFDVixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDakI7UUFDTCxDQUFDLEVBQ0QsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNOLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUMzQyxJQUFJLGFBQWEsRUFBRTtnQkFDZixhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDeEI7WUFDRCw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25ELE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FDSixDQUFDO0lBQ1YsQ0FBQzs7QUE5YmEsNEJBQU8sR0FBWSxJQUFJLE9BQU8sRUFBRyxDQUFBO2lIQUZ0QyxvQkFBb0I7cUhBQXBCLG9CQUFvQixjQUZqQixNQUFNOzJGQUVULG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBCYXNlRmllbGQsIENvbFNwYW5TaXplc0VudW0sIEZpZWxkVHlwZUVudW0gfSBmcm9tIFwiLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4uL21vZGVscy9jb250ZXh0Lm1vZGVsXCI7XHJcbmltcG9ydCB7IEVuZFBvaW50Q29uZmlndXJhdGlvbiwgRW5kUG9pbnREYXRhLCBFbmRQb2ludERhdGFQYXJhbXMsIFBhcmFtVHlwZUVudW0sIFJlcXVlc3RNZXRob2RFbnVtIH0gZnJvbSBcIi4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgQXR0YWNobWVudEZpZWxkIH0gZnJvbSBcIi4uL21vZGVscy9maWVsZHMvYXR0YWNobWVudEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEltYWdlRmllbGQgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUZpZWxkIH0gZnJvbSBcIi4uL21vZGVscy9maWVsZHMvbGlzdFZhbHVlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgVGV4dGFyZWFGaWVsZCB9IGZyb20gXCIuLi9tb2RlbHMvZmllbGRzL3RleHRhcmVhRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgVGV4dE1hc2tFbnVtLCBUZXh0RmllbGQsIFVybFJlZ2V4LCBUZWxSZWdleCB9IGZyb20gXCIuLi9tb2RlbHMvZmllbGRzL3RleHRGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBGb3JtIH0gZnJvbSBcIi4uL21vZGVscy9mb3JtLm1vZGVsXCI7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gXCIuLi9tb2RlbHMvcmVjb3JkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEFycmF5VmFsaWRhdG9ycyB9IGZyb20gXCIuL2N1c3RvbS1mb3JtLXZhbGlkYXRvcnMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZSB9IGZyb20gXCIuL2VxcC1keW5hbWljLW1vZHVsZS1kaWFsb2cuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTcGlubmVyU2VydmljZSB9IGZyb20gXCIuL3NwaW5uZXIuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVdGlsaXR5SGVscGVyU2VydmljZSB7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBjb250ZXh0OiBDb250ZXh0ID0gbmV3IENvbnRleHQoKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgICAgIHByaXZhdGUgc3Bpbm5lclNlcnZpY2U6IFNwaW5uZXJTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIEV2YWx1YXRlRmllbGRGb3JtdWxhKGZvcm11bGE6IHN0cmluZywgcmVjOiBSZWNvcmQsIGN0eDogYW55KTogYW55IHtcclxuICAgICAgICBjb25zdCBldmFsdWF0ZWRWYWx1ZSA9IGV2YWwoZm9ybXVsYSk7XHJcbiAgICAgICAgcmV0dXJuIChldmFsdWF0ZWRWYWx1ZSA/IGV2YWx1YXRlZFZhbHVlIDogbnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBTZXRDb250ZXh0KGN0eDogQ29udGV4dCkge1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGN0eDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgaXNOdW1lcmljKG4pIHtcclxuICAgICAgICByZXR1cm4gIWlzTmFOKG4pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgaW5pdFN0eWxlcyhzdHlsZWNzcykge1xyXG4gICAgICAgIHJldHVybiBzdHlsZWNzcy5zcGxpdChcIjtcIikucmVkdWNlKChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleXBhciA9IGIuc3BsaXQoXCI6XCIpXHJcbiAgICAgICAgICAgIGlmIChrZXlwYXIubGVuZ3RoID4gMSlcclxuICAgICAgICAgICAgICAgIGFba2V5cGFyWzBdLnRyaW0oKV0gPSBrZXlwYXJbMV0udHJpbSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gYVxyXG4gICAgICAgIH0sIHt9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIEdldEZpZWxkVHlwZShmaWVsZDogQmFzZUZpZWxkKSB7XHJcbiAgICAgICAgc3dpdGNoIChmaWVsZC5GaWVsZFR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gZGkgdGVzdG9cIl06IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHQ6IFRleHRGaWVsZCA9IE9iamVjdC5hc3NpZ24obmV3IFRleHRGaWVsZCwgZmllbGQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBwZXIgaW1wb3N0YXJlIGkgdmFsb3JpIGRhIHN1Z2dlcmlyZSBuZWxsJ2F1dG9jb21wbGV0ZSBwZXIgaSBjYW1waSBpbiBjdWkgbCd1dGVudGUgZGV2ZSBzY3JpdmVyZSBjb21hbmRpIGphdmFzY3JpcHQuXHJcbiAgICAgKiBJbiBiYXNlIGFsbCd1bHRpbW8gY2FyYXR0ZXJlIGRpZ2l0YXRvIHZpZW5lIGltcG9zdGF0byB1biBlbGVuY28gZGkgb2dnZXR0aSBvIHByb3ByaWV0w6AgY2hlIGwndXRlbnRlIGhhIGEgZGlzcG9zaXppb25lIGluIHF1ZWwgbW9tZW50by5cclxuICAgICAqIEBwYXJhbSBmaWVsZHMgQXJyYXkgZGkgQmFzZUZpZWxkIGFnZ2l1bnRpIGFsbGEgRm9ybVxyXG4gICAgICogQHBhcmFtIHR5cGVkRm9ybXVsYSBTdHJpbmdhIGRpZ2l0YXRhIGRhbGwndXRlbnRlXHJcbiAgICAgKiBAc3VtbWFyeSBJbCBtZXRvZG8gaW1wb3N0YSBpIHN1Z2dlcmltZW50aSBiYXNhbmRvc2kgc3UgMyBjYXNpOlxyXG4gICAgICogIDEpIGwndXRlbnRlIG5vbiBoYSBkaWdpdGF0byBudWxsYSBvIGxhIHN0cmluZ2EgZGlnaXRhdGEgZGFsbCd1dGVudGUgZmluaXNjZSBjb24gdW5vIHNwYXppbyB2dW90b1xyXG4gICAgICogIDIpIGxhIHN0cmluZ2EgZGlnaXRhdGEgZGFsbCd1dGVudGUgZmluaXNjZSBjb24gdW4gXCIuXCJcclxuICAgICAqICAzKSBsYSBzdHJpbmdhIGRpZ2l0YXRhIGRhbGwndXRlbnRlIG5vbiBjb2luY2lkZSBjb24gbmVzc3VuIGFsdHJvIGNhc28gc29wcmEgKGZpbmlzY2UgY29uIHVuIGNhcmF0dGVyZSBxdWFsdW5xdWUpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgR2V0QXV0b2NvbXBsZXRlT3B0aW9ucyhmaWVsZHM6IEFycmF5PEJhc2VGaWVsZD4sIHR5cGVkRm9ybXVsYTogc3RyaW5nKTogQXJyYXk8eyBsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH0+IHtcclxuXHJcbiAgICAgICAgbGV0IGF1dG9jb21wbGV0ZU9wdGlvbnM6IEFycmF5PHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9PiA9IFtdO1xyXG5cclxuICAgICAgICAvLyBSZWN1cGVybyBpIG5vbWkgZGkgdHV0dGkgaSBjYW1waSBjcmVhdGkgZmlubyBhZCBvcmEgbmVsbGEgZm9ybS5cclxuICAgICAgICBjb25zdCBhdmFpbGFibGVSZWNQcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+ID0gZmllbGRzLm1hcChmID0+IGYuTGFiZWwuc3BsaXQoJyAnKS5qb2luKCdfJykpO1xyXG5cclxuICAgICAgICAvLyBOZWwgY2FzaSBpbiBjdWkgbCd1dGVudGUgbm9uIGhhIGluc2VyaXRvIG51bGxhIG9wcHVyZSBsYSBzdHJpbmdhIGZpbmlzY2UgY29uIHVubyBzcGF6aW8gdnVvdG8gbyB1biBzaW1ib2xvIGRpdmVyc28gZGEgXCIuXCJcclxuICAgICAgICAvLyAodW4gY2FyYXR0ZXJlIG5vbiBhbGZhbnVtZXJpY28pIGltcG9zdG8gY29tZSBzdWdnZXJpbWVudGkgc29sbyBcInJlY1wiIGUgXCJjdHhcIiwgb3Z2ZXJvIGdsaSB1bmljaSBkdWUgb2dnZXR0aSBhIGN1aSBsJ3V0ZW50ZSBoYSBhY2Nlc3NvLlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgIXR5cGVkRm9ybXVsYSB8fFxyXG4gICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAhdHlwZWRGb3JtdWxhLmVuZHNXaXRoKFwiLlwiKVxyXG4gICAgICAgICAgICAgICAgJiYgbmV3IFJlZ0V4cChcIlteMC05YS16QS1aX11cIikudGVzdCh0eXBlZEZvcm11bGEuc3Vic3RyaW5nKHR5cGVkRm9ybXVsYS5sZW5ndGggLSAxLCB0eXBlZEZvcm11bGEubGVuZ3RoKSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBhdXRvY29tcGxldGVPcHRpb25zID0gW1xyXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogXCJyZWNcIiwgdmFsdWU6ICh0eXBlZEZvcm11bGEgPyB0eXBlZEZvcm11bGEgOiAnJykgKyBcInJlY1wiIH0sXHJcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiBcImN0eFwiLCB2YWx1ZTogKHR5cGVkRm9ybXVsYSA/IHR5cGVkRm9ybXVsYSA6ICcnKSArIFwiY3R4XCIgfVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBTZSBsYSBzdHJpbmdhIGZpbmlzY2UgY29uIHVuIFwiLlwiIHZ1b2wgZGlyZSBjaGUgbCd1dGVudGUgc3RhIGNlcmNhbmRvIGRpIGFjY2VkZXJlIGFkIHVuYSBwcm9wcmlldMOgIGRpIHVuIG9nZ2V0dG9cclxuICAgICAgICAvLyBhIHN1YSBkaXNwb3NpemlvbmUuIFJlY3VwZXJvIGlsIG5vbWUgZGVsbCd1bHRpbW8gb2dnZXR0byBkaWdpdGF0byBkYWxsJ3V0ZW50ZSBlIHNlIGwnb2dnZXR0byBzY2VsdG8gw6ggXCJyZWNcIiBvIFwiY3R4XCJcclxuICAgICAgICAvLyBhbGxvcmEgc3VnZ2VyaXNjbyBsZSBwcm9wcmlldMOgIGNoZSBlc2lzdG9ubyBhbGwnaW50ZXJubyBkaSBxdWVzdGkgb2dnZXR0aSBhbHRyaW1lbnRpIG5vbiBtb3N0cm8gbnVsbGEuXHJcbiAgICAgICAgZWxzZSBpZiAodHlwZWRGb3JtdWxhLmVuZHNXaXRoKFwiLlwiKSkge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtdWxhUGllY2VzOiBBcnJheTxzdHJpbmc+ID0gdHlwZWRGb3JtdWxhLnNwbGl0KFwiIFwiKVt0eXBlZEZvcm11bGEuc3BsaXQoXCIgXCIpLmxlbmd0aCAtIDFdLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgICAgIGlmIChmb3JtdWxhUGllY2VzW2Zvcm11bGFQaWVjZXMubGVuZ3RoIC0gMl0gPT09IFwicmVjXCIpIHtcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBhdmFpbGFibGVSZWNQcm9wZXJ0aWVzLm1hcChmID0+IHsgcmV0dXJuIHsgbGFiZWw6IGYsIHZhbHVlOiB0eXBlZEZvcm11bGEgKyBmIH07IH0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm11bGFQaWVjZXNbZm9ybXVsYVBpZWNlcy5sZW5ndGggLSAyXSA9PT0gXCJjdHhcIikge1xyXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlT3B0aW9ucyA9IE9iamVjdC5rZXlzKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmNvbnRleHQpLm1hcChmID0+IHsgcmV0dXJuIHsgbGFiZWw6IGYsIHZhbHVlOiB0eXBlZEZvcm11bGEgKyBmIH07IH0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm11bGFQaWVjZXMubGVuZ3RoID4gMiAmJiBmb3JtdWxhUGllY2VzW2Zvcm11bGFQaWVjZXMubGVuZ3RoIC0gM10gPT09IFwiY3R4XCIgJiYgZm9ybXVsYVBpZWNlc1tmb3JtdWxhUGllY2VzLmxlbmd0aCAtIDJdID09PSBcIlVzZXJcIikge1xyXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlT3B0aW9ucyA9IE9iamVjdC5rZXlzKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmNvbnRleHQuVXNlcikubWFwKGYgPT4geyByZXR1cm4geyBsYWJlbDogZiwgdmFsdWU6IHR5cGVkRm9ybXVsYSArIGYgfTsgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGVPcHRpb25zID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSW4gdHV0dGkgZ2xpIGFsdHJpIGNhc2ksIG92dmVybyBxdWFuZG8gbGEgc3RyaW5nYSBkaWdpdGF0YSBmaW5pc2NlIGNvbiB1biBjYXJhdHRlcmUgZGl2ZXJzbyBkYSBxdWVsbGlcclxuICAgICAgICAvLyBjb250cm9sbGF0aSBmaW5vcmEsIHZ1b2wgZGlyZSBjaGUgbCd1dGVudGUgc3RhIGRpZ2l0YW50byBpbCBub21lIGRpIHVuIG9nZ2V0dG8sIHVuYSBwcm9wcmlldMOgIG8gdW5hXHJcbiAgICAgICAgLy8gZnVuemlvbmUgamF2YXNjcmlwdC4gQ29udHJvbGxvIGxhIHBhcm9sYSBjaGUgbCd1dGVudGUgc3RhIGRpZ2l0YW5kbyBlIHNlIGZhIHBhcnRlIGRpIHVubyBkZWdsaSBvZ2dldHRpIGEgZGlzcG9zaXppb25lXHJcbiAgICAgICAgLy8gbyB1bmEgcHJvcHJpZXTDoCBkaSBlc3NpIGFsbG9yYSBzdWdnZXJpc2NvIGkgcG9zc2liaWxpIG1hdGNoLlxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBhdmFpbGFibGVPcHRpb25zOiBBcnJheTx7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfT4gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIC8vIFByZW5kbyB0dXR0aSBpIGJsb2NjaGkgZGkgY2FyYXR0ZXJpIGRpZ2l0YXRpIGRhbGwndXRlbnRlXHJcbiAgICAgICAgICAgIGNvbnN0IGFsbEZvcm11bGFXb3JkczogQXJyYXk8c3RyaW5nPiA9IHR5cGVkRm9ybXVsYS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgIC8vIFByZW5kbyBsJ3VsdGltbyBibG9jY28gZGkgY2FyYXR0ZXJpIGRpZ2l0YXRvIGRhbGwndXRlbnRlXHJcbiAgICAgICAgICAgIGNvbnN0IGxhc3RUeXBlZFN0cmluZzogc3RyaW5nID0gYWxsRm9ybXVsYVdvcmRzW2FsbEZvcm11bGFXb3Jkcy5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIGxhIGwndWx0aW1hIHN0cmluZ2EgZGlnaXRhdGEgbm9uIGNvbnRpZW5lIGNhcmF0dGVyaSBzcGVjaWFsaSBhbGxvcmEgc3BsaXR0byBsYSBzdHJpbmdhXHJcbiAgICAgICAgICAgIC8vIHN1aSBcIi5cIiBlIGltcG9zdG8gaSBzdWdnZXJpbWVudGkgaW4gYmFzZSBhbCBwYXRoIGRlbGxhIHByb3JwaWV0w6AgY2hlIHNpIHN0YSBkaWdpdGFuZG8uXHJcbiAgICAgICAgICAgIGlmICghbmV3IFJlZ0V4cChcIlteMC05YS16QS1aXy5dXCIpLnRlc3QobGFzdFR5cGVkU3RyaW5nKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlQYXRoID0gbGFzdFR5cGVkU3RyaW5nLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RUeXBlZFdvcmsgPSBwcm9wZXJ0eVBhdGhbcHJvcGVydHlQYXRoLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0aWVzVG9DaGVjazogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eVBhdGgubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVG9DaGVjayA9IFtcInJlY1wiLCBcImN0eFwiXTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlQYXRoLmxlbmd0aCA+IDEgJiYgcHJvcGVydHlQYXRoW3Byb3BlcnR5UGF0aC5sZW5ndGggLSAyXSA9PT0gXCJjdHhcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNUb0NoZWNrID0gT2JqZWN0LmtleXMoVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5UGF0aC5sZW5ndGggPiAyICYmIHByb3BlcnR5UGF0aFtwcm9wZXJ0eVBhdGgubGVuZ3RoIC0gM10gPT09IFwiY3R4XCIgJiYgcHJvcGVydHlQYXRoW3Byb3BlcnR5UGF0aC5sZW5ndGggLSAyXSA9PT0gXCJVc2VyXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVG9DaGVjayA9IE9iamVjdC5rZXlzKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmNvbnRleHQuVXNlcik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5UGF0aC5sZW5ndGggPiAxICYmIHByb3BlcnR5UGF0aFtwcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMl0gPT09IFwicmVjXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVG9DaGVjayA9IGF2YWlsYWJsZVJlY1Byb3BlcnRpZXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gRXNlZ3VvIGlsIGNvbnRyb2xsbyBzdWxsZSBwcm9wcmlldMOgIHJlY3VwZXJhdGUsIGFnZ2l1bmdvIGFpIHN1Z2dlcmltZW50aSB0dXR0aSBpIG5vbWkgY2hlIGluaXppYW5vIGNvblxyXG4gICAgICAgICAgICAgICAgLy8gcXVlbGxvIGNoZSBzdGEgZGlnaXRhbmRvIGwndXRlbnRlLlxyXG4gICAgICAgICAgICAgICAgcHJvcGVydGllc1RvQ2hlY2suZm9yRWFjaChwcm9wID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcC5zdGFydHNXaXRoKGxhc3RUeXBlZFdvcmspKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZU9wdGlvbnMucHVzaCh7IGxhYmVsOiBwcm9wLCB2YWx1ZTogdHlwZWRGb3JtdWxhICsgcHJvcC5zdWJzdHJpbmcobGFzdFR5cGVkV29yay5sZW5ndGgsIHByb3AubGVuZ3RoKSB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBhdXRvY29tcGxldGVPcHRpb25zID0gYXZhaWxhYmxlT3B0aW9ucztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhdXRvY29tcGxldGVPcHRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGludm9jYXRvIGRhbGwnaHRtbCBwZXIgaW1wb3N0YXJlIGxlIGNsYXNzaSBjc3MgcGVyIHZpc3VhbGl6emFyZSBpbCBjYW1wbyBhbGwnaW50ZXJubyBkZWxsYSBmb3JtLlxyXG4gICAgICogU2UgcGVyIGlsIGZpZWxkIHNvbm8gc3RhdGUgc3BlY2lmaWNhdGUgZGVsbGUgY2xhc3NpIGFsbG9yYSB2ZW5nb25vIGFwcGxjYXRlIHF1ZWxsZSwgYWx0cmltZW50aSB2ZW5nb25vIHVzYXRlXHJcbiAgICAgKiBkZWxsZSBjbGFzc2kgZGkgZGVmYXVsdC5cclxuICAgICAqIEBwYXJhbSBmaWVsZCBCYXNlRmllbGQgZGEgdmlzdWFsaXp6YXJlLlxyXG4gICAgICogQHJldHVybnMgUmVzdGl0dWlzY2UgdW5hIHN0cmluZ2EgY29udGVuZW50ZSBsZSBjbGFzc2kgY3NzIGRhIGFwcGxpY2FyZS5cclxuICAgICAqL1xyXG4gICAgZ2V0RmllbGRTeWxlQ2xhc3MoZmllbGQ6IEJhc2VGaWVsZCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKGZpZWxkLkNvbFNwYW5TaXplcyAmJiBmaWVsZC5Db2xTcGFuU2l6ZXMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgcmV0dXJuIGZpZWxkLkNvbFNwYW5TaXplcy5tYXAoc2l6ZSA9PiBDb2xTcGFuU2l6ZXNFbnVtW3NpemVdLnRvU3RyaW5nKCkpLmpvaW4oXCIgXCIpO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKGZpZWxkLkZpZWxkVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBkaSB0ZXN0b1wiXTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNFwiO1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJBcmVhIGRpIHRlc3RvXCJdOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC0xMiBjb2wtbGctMTJcIjtcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQm9vbGVhbm9cIl06XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTQgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiO1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJEYXRhIGUvbyBvcmFcIl06XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTRcIjtcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gbnVtZXJpY29cIl06XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTRcIjtcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQWxsZWdhdG9cIl06XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgKGZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuSXNNdWx0aUF0dGFjaCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICgoZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5NZXRhZGF0YUZpZWxkcyAmJiAoZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5NZXRhZGF0YUZpZWxkcy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC0xMiBjb2wtbGctMTJcIjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00XCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkltbWFnaW5lXCJdOlxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIChmaWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLklzTXVsdGlBdHRhY2ggfHxcclxuICAgICAgICAgICAgICAgICAgICAoKGZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uTWV0YWRhdGFGaWVsZHMgJiYgKGZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uTWV0YWRhdGFGaWVsZHMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtMTIgY29sLWxnLTEyXCI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNFwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTRcIjtcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiTG9va3VwXCJdOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00XCI7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVsnRm9ybSBkaSBkZXR0YWdsaW8nXTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtMTIgY29sLWxnLTEyXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIHBlciBjcmVhcmUgaWwgRm9ybUdyb3VwIGNoZSByYXBwcmVzZW50YSB1bmEgRm9ybSBhIHBhcnRpcmUgZGFpIHN1b2kgQmFzZUZpZWxkLlxyXG4gICAgICogQHBhcmFtIGZvcm1GaWVsZHMgTGlzdGEgZGVpIEJhc2VGaWVsZCBjaGUgY29tcG9uZ29ubyBsYSBmb3JtLlxyXG4gICAgICogQHBhcmFtIHJlY29yZCBPZ2dldHRvIGRpIHRpcG8gUmVjb3JkIGNoZSBjb250aWVuZSBpIHZhbG9yaSBkZWkgY2FtcGkuXHJcbiAgICAgKiBAcGFyYW0gb25seVZpZXcgU2UgVFJVRSBkaXNhYmlsaXRhIGxhIGZvcm0gcGVyIHJlbmRlcmxhIGluIHNvbGEgbGV0dHVyYS5cclxuICAgICAqIEBwYXJhbSBpbmNsdWRlQ3VycmVudEZvcm1JbkZpZWxkIFNlIFRSVUUgcG9wb2xhIGxhIHByb3ByaWV0w6AgRm9ybUZvcm1Hcm91cCBhbGwnaW50ZXJubyBkaSBvZ25pIEJhc2VGaWVsZCBjb24gaWwgRm9ybUdyb3VwIGNvcnJlbnRlLlxyXG4gICAgICogQHJldHVybnMgUmVzdGl0dWlzY2UgdW4gRm9ybUdyb3VwIHJhcHByZXNlbnRhdGUgbGEgRm9ybSBhIGN1aSBhcHBhcnRlbmdvbm8gaSBCYXNlRmllbGQgcmljZXZ1dGkgaW4gaW5wdXQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBDcmVhdGVGb3JtRm9ybUdyb3VwKGZvcm1GaWVsZHM6IEFycmF5PEJhc2VGaWVsZD4sXHJcbiAgICAgICAgcmVjb3JkOiBSZWNvcmQsXHJcbiAgICAgICAgb25seVZpZXcgPSBmYWxzZSxcclxuICAgICAgICBpbmNsdWRlQ3VycmVudEZvcm1JbkZpZWxkID0gdHJ1ZSk6IFVudHlwZWRGb3JtR3JvdXAge1xyXG4gICAgICAgIGNvbnN0IGZvcm1Gb3JtOiBVbnR5cGVkRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChbXSk7XHJcblxyXG4gICAgICAgIGZvcm1GaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgIGZvcm1Gb3JtLmFkZENvbnRyb2woZmllbGQuTmFtZSwgdGhpcy5jcmVhdGVGaWVsZEZvcm1Db250cm9sKGZpZWxkLCByZWNvcmQpKTtcclxuICAgICAgICAgICAgaWYgKGluY2x1ZGVDdXJyZW50Rm9ybUluRmllbGQpIHtcclxuICAgICAgICAgICAgICAgIGZpZWxkLkZvcm1Gb3JtR3JvdXAgPSBmb3JtRm9ybTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChvbmx5Vmlldykge1xyXG4gICAgICAgICAgICBmb3JtRm9ybS5kaXNhYmxlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZm9ybUZvcm07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGdW56aW9uZSBwZXIgY3JlYXJlIGUgYWdnaXVuZ2VyZSBhbCBGb3JtR3JvdXAgcmFwcHJlc2VudGFudGUgbGEgZm9ybSB1biBudW92byBGb3JtQ29udHJvbCBhIHBhcnRpcmUgZGEgdW4gRmllbGQuXHJcbiAgICAgKiBJbiBudW92byBGb3JtQ29udHJvbCBhdnLDoCBpbCBub21lIGRlbCBjYW1wbyBwYXNzYXRvIGUgdmVycmFubm8gaW1wb3N0YXRpIGkgVmFsaWRhdG9ycyBpbiBiYXNlIGFsIHRpcG8gZGVsIGNhbXBvIHN0ZXNzby5cclxuICAgICAqIEBwYXJhbSBmaWVsZCBCYXNlRmllbGQgcGVyIGN1aSBjcmVhcmUgaWwgRm9ybUNvbnRyb2wgZGEgaW5zZXJpcmUgbmVsIEZvcm1Hcm91cCBkZWxhIGZvcm0uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY3JlYXRlRmllbGRGb3JtQ29udHJvbChmaWVsZDogQmFzZUZpZWxkLCByZWNvcmQ6IFJlY29yZCk6IEFic3RyYWN0Q29udHJvbCB7XHJcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yczogQXJyYXk8VmFsaWRhdG9yRm4+ID0gW107XHJcblxyXG4gICAgICAgIGlmIChmaWVsZC5SZXF1aXJlZClcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKGZpZWxkLkZpZWxkVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBkaSB0ZXN0b1wiXTpcclxuICAgICAgICAgICAgICAgIGlmICgoZmllbGQgYXMgVGV4dEZpZWxkKS5NYXhMZW5naHQpIHsgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKChmaWVsZCBhcyBUZXh0RmllbGQpLk1heExlbmdodCkpOyB9XHJcbiAgICAgICAgICAgICAgICBpZiAoKGZpZWxkIGFzIFRleHRGaWVsZCkuTWluTGVuZ2h0KSB7IHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aCgoZmllbGQgYXMgVGV4dEZpZWxkKS5NaW5MZW5naHQpKTsgfVxyXG4gICAgICAgICAgICAgICAgc3dpdGNoICgoZmllbGQgYXMgVGV4dEZpZWxkKS5UZXh0TWFzaykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dE1hc2tFbnVtLlVybDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihVcmxSZWdleCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHRNYXNrRW51bS5FbWFpbDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMuZW1haWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHRNYXNrRW51bS5UZWxlZm9ubzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihUZWxSZWdleCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJBcmVhIGRpIHRlc3RvXCJdOlxyXG4gICAgICAgICAgICAgICAgaWYgKChmaWVsZCBhcyBUZXh0YXJlYUZpZWxkKS5NYXhMZW5naHQpIHsgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKChmaWVsZCBhcyBUZXh0YXJlYUZpZWxkKS5NYXhMZW5naHQpKTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKChmaWVsZCBhcyBUZXh0YXJlYUZpZWxkKS5NaW5MZW5naHQpIHsgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKChmaWVsZCBhcyBUZXh0YXJlYUZpZWxkKS5NaW5MZW5naHQpKTsgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bS5BbGxlZ2F0bzpcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkltbWFnaW5lOlxyXG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLlJlcXVpcmVkKVxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChBcnJheVZhbGlkYXRvcnMubWluTGVuZ2h0KDEpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bJ0VsZW5jbyBnZW5lcmljbyddOlxyXG4gICAgICAgICAgICAgICAgaWYgKChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuSXNNdWx0aUNob2ljaGUpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLlJlcXVpcmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goQXJyYXlWYWxpZGF0b3JzLm1pbkxlbmdodCgxKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgVW50eXBlZEZvcm1Db250cm9sKHJlY29yZFtmaWVsZC5OYW1lXSwgdmFsaWRhdG9ycyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gcGVyIGNvbmZpZ3VyYXJlIGdsaSBlbmRwb2ludCBkYSB1c2FyZSBkaSBkZWZhdWx0IGEgcGFydGlyZSBkYWxsJ3VybCBiYXNlIGRlbCBzZXJ2ZXJcclxuICAgICAqIGEgY3VpIHNpIGRldmUgY29ubmV0dGVyZSBlIGFsIHRva2VuIGRhIHBhc3NhcmUgcGVyIGF1dGVudGljYXJzaS5cclxuICAgICAqIEBwYXJhbSBiYXNlU2VydmVyVXJsIFN0cmluZ2EgZGVsbCd1cmwgYmFzZSBkZWwgc2VydmVyIChlczogXCJodHRwOi8vbG9jYWxob3N0OjUwMDBcIikuXHJcbiAgICAgKiBAcGFyYW0gdXNlclRva2VuIFRva2VuIGRlbGwndXRlbnRlIGxvZ2dhdG8gZGEgdXNhcmUgcGVyIGF1dGVudGljYXJzaSBzZSBuZWNlc3NhcmlvLlxyXG4gICAgICogQHJldHVybnMgUmVzaXR1aXNjZSBsYSBjb25maWd1cmF6aW9uZSBjb21wbGV0YSBkZWdsaSBlbmRQb2ludCBkYSB1c2FyZSBkaSBkZWZhdWx0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgQ29uZmlndXJlRGVmYXVsdEVuZFBvaW50cyhiYXNlU2VydmVyVXJsOiBzdHJpbmcsIHVzZXJUb2tlbjogc3RyaW5nKTogRW5kUG9pbnRDb25maWd1cmF0aW9uIHtcclxuICAgICAgICBsZXQgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb24gPSBuZXcgRW5kUG9pbnRDb25maWd1cmF0aW9uKCk7XHJcbiAgICAgICAgZW5kUG9pbnRDb25maWd1cmF0aW9uID0gbmV3IEVuZFBvaW50Q29uZmlndXJhdGlvbigpO1xyXG4gICAgICAgIGVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzID0ge1xyXG4gICAgICAgICAgICBHZXRCeUZvcm1JREVuZFBvaW50OiB7XHJcbiAgICAgICAgICAgICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvZ2V0YWxsXCIsXHJcbiAgICAgICAgICAgICAgICBUb2tlbjogdXNlclRva2VuLFxyXG4gICAgICAgICAgICAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uR0VULFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBHZXRBbGxCeUVudEFuZFVzZXJJREVuZFBvaW50OiB7XHJcbiAgICAgICAgICAgICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvR2V0QWxsQnlVc2VySURcIixcclxuICAgICAgICAgICAgICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAgICAgICAgICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5HRVQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIEdldEJ5SURFbmRQb2ludDoge1xyXG4gICAgICAgICAgICAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL3YxL2dldEJ5SURcIixcclxuICAgICAgICAgICAgICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAgICAgICAgICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5HRVQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFNhdmVFbmRQb2ludDoge1xyXG4gICAgICAgICAgICAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL3YxL3NhdmVcIixcclxuICAgICAgICAgICAgICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAgICAgICAgICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5QT1NULFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBEdXBsaWNhdGVFbmRQb2ludDoge1xyXG4gICAgICAgICAgICAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL3YxL2R1cGxpY2F0ZVwiLFxyXG4gICAgICAgICAgICAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgICAgICAgICAgICAgIFJlcXVlc3RNZXRob2Q6IFJlcXVlc3RNZXRob2RFbnVtLlBPU1QsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIERlbGV0ZUVuZFBvaW50OiB7XHJcbiAgICAgICAgICAgICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvZGVsZXRlXCIsXHJcbiAgICAgICAgICAgICAgICBUb2tlbjogdXNlclRva2VuLFxyXG4gICAgICAgICAgICAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uREVMRVRFLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3JtcyA9IHtcclxuICAgICAgICAgICAgR2V0QnlJREVuZFBvaW50OiB7XHJcbiAgICAgICAgICAgICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvY29uZi9mb3JtXCIsXHJcbiAgICAgICAgICAgICAgICBUb2tlbjogdXNlclRva2VuLFxyXG4gICAgICAgICAgICAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uR0VULFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBHZXRCeUlEQW5kVmVyc2lvbkVuZFBvaW50OiB7XHJcbiAgICAgICAgICAgICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvY29uZi9HZXRCeUlEQW5kVmVyc2lvblwiLFxyXG4gICAgICAgICAgICAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgICAgICAgICAgICAgIFJlcXVlc3RNZXRob2Q6IFJlcXVlc3RNZXRob2RFbnVtLkdFVCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgU2F2ZUVuZFBvaW50OiB7XHJcbiAgICAgICAgICAgICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvY29uZi9mb3JtXCIsXHJcbiAgICAgICAgICAgICAgICBUb2tlbjogdXNlclRva2VuLFxyXG4gICAgICAgICAgICAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uUE9TVCxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBleHByZXNzaW9uIHByZW5kZSB1bmEgc3RyaW5nYSBpbiBpbnB1dCBlIHZlcmlmaWNhIGNoZSBvZ25pIHBhcmVudGVzaSBhcGVydGEgdmVuZ2EgYW5jaGUgY2hpdXNhIFxyXG4gICAgICogQHJldHVybnMgdHJ1ZSBzZSBsZSBwYXJlbnRlc2kgc29ubyBwYXJpIGUgb2duaSBwYXJlbnRlc2kgY2hpdWRlIHNlIHN0ZXNzYSwgZmFsc2Ugc2UgbWFuY2FubyBwYXJlbnRlc2kgbyBub24gdmVuZ29ubyBjaGl1c2UgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgc3RyaW5nU2FuaXRpemVyKGV4cHJlc3Npb24sIHJlcXVpcmVkID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAoZXhwcmVzc2lvbiA9PSB1bmRlZmluZWQgfHwgZXhwcmVzc2lvbiA9PSBudWxsKSB7IHJldHVybiAocmVxdWlyZWQpID8gZmFsc2UgOiB0cnVlfVxyXG4gICAgICAgIGxldCBzdGFjayA9IFtdO1xyXG4gICAgICAgIGxldCBjdXJyZW50O1xyXG4gICAgICAgIGNvbnN0IG1hdGNoTG9va3VwID0ge1xyXG4gICAgICAgICAgICBcIihcIjogXCIpXCIsXHJcbiAgICAgICAgICAgIFwiW1wiOiBcIl1cIixcclxuICAgICAgICAgICAgXCJ7XCI6IFwifVwiLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwcmVzc2lvbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjdXJyZW50ID0gZXhwcmVzc2lvbltpXTsgLy9lYXNpZXIgdGhhbiB3cml0aW5nIGl0IG92ZXIgYW5kIG92ZXJcclxuXHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50ID09PSAnKCcgfHwgY3VycmVudCA9PT0gJ1snIHx8IGN1cnJlbnQgPT09IFwie1wiKSB7XHJcbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGN1cnJlbnQpO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50ID09PSAnKScgfHwgY3VycmVudCA9PT0gJ10nIHx8IGN1cnJlbnQgPT09IFwifVwiKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0QnJhY2tldCA9IHN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChtYXRjaExvb2t1cFtsYXN0QnJhY2tldF0gIT09IGN1cnJlbnQpIHsgLy9pZiB0aGUgc3RhY2sgaXMgZW1wdHksIC5wb3AoKSByZXR1cm5zIHVuZGVmaW5lZCwgc28gdGhpcyBleHByZXNzaW9uIGlzIHN0aWxsIGNvcnJlY3RcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvL3Rlcm1pbmF0ZSBpbW1lZGlhdGVseSAtIG5vIG5lZWQgdG8gY29udGludWUgc2Nhbm5pbmcgdGhlIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3RhY2subGVuZ3RoID09PSAwOyAvL2FueSBlbGVtZW50cyBtZWFuIGJyYWNrZXRzIGxlZnQgb3BlblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBjaGUgZGF0YSBsYSBjb25maWd1cmF6aW9uZSBkaSB1biBlbmRwb2ludCBjb3N0cnVpc2NlIGwndXJsIGRhIGNoaWFtYXJlLCBnbGkgZXZlbnR1YWxpIHBhcmFtZXRyaVxyXG4gICAgICogZGEgcGFzc2FyZSAobmVsIGJvZHkgbyBuZWxsYSByb3R0YSkgZWQgZWZmZXR0dWEgbGEgY2hpYW1hdGEuIEFsIHRlcm1pbmUgZGVsbGEgY2hpYW1hdGEgZXNlZ3VlIGxlIGV2ZW50dWFsaVxyXG4gICAgICogZnVuemlvbmkgZGkgY2FsbGJhY2sgKHNpYSBpbiBjYXNvIGRpIHN1Y2Nlc3NvIGNoZSBpbiBjYXNvIGRpIGVycm9yZSkgcGFzc2F0ZSBpbiBpbnB1dC5cclxuICAgICAqIEBwYXJhbSBlbmRQb2ludERhdGEgQ29maWd1cmF6aW9uZSBkZWxsJ2VuZHBvaW50IGRhIGNoaWFtYXJlLlxyXG4gICAgICogQHBhcmFtIGR5bmFtaWNNb2R1bGVQYXJhbXMgQXJyYXkgZGVpIHBhcmFtZXRyaSBhZ2dpdW50aSBkYWwgbW9kdWxvIGRpbmFtaWNvIGEgcXVlbGxpIGdpw6AgY29uZmlndXJhdGlcclxuICAgICAqIChhZCBlc2VtcGlvIGlsIHJlY29yZCBvIGxhIGZvcm0gZGEgc2FsdmFyZSBvcHB1cmUgbCdJRCBwZXIgcmVjdXBlcmFyZSB1bmEgcGFydGljb2xhcmUgZW50aXTDoCkuXHJcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgTWV0b2RvIGRhIGVzZWd1aXJlIGluIGNhc28gZGkgc3VjY2Vzc28gZG9wbyBsYSBjaGlhbWF0YSBodHRwLlxyXG4gICAgICogTk9UQTogaW4gaW5wdXQgdmllbmUgcGFzc2F0YSBsYSByaXNwb3N0YSBkZWxsYSBjaGlhbWF0YSBzdGVzc2EuXHJcbiAgICAgKiBAcGFyYW0gZXJyb3JDYWxsQmFjayBNZXRvZG8gZGEgZXNlZ3VpcmUgaW4gY2FzbyBkaSBlcnJvcmUgZG9wbyBsYSBjaGlhbWF0YSBodHRwLlxyXG4gICAgICogTk9UQTogaW4gaW5wdXQgdmllbmUgcGFzc2F0byBsJ2Vycm9yZSBnZW5lcmF0byBkZWxsYSBjaGlhbWF0YSBzdGVzc2EuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBSdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgZW5kUG9pbnREYXRhOiBFbmRQb2ludERhdGEsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9IG51bGwsXHJcbiAgICAgICAgY2FsbGJhY2s6IChlOiBGb3JtIHwgUmVjb3JkIHwgQXJyYXk8UmVjb3JkPikgPT4gdm9pZCA9IG51bGwsXHJcbiAgICAgICAgZXJyb3JDYWxsQmFjazogKGVycjogdW5rbm93bikgPT4gdm9pZCA9IG51bGxcclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuYWRkUmVxdWVzdENvdW50ZXIoKTtcclxuXHJcbiAgICAgICAgbGV0IHVybCA9IGAke2VuZFBvaW50RGF0YS5Vcmx9YDtcclxuICAgICAgICBsZXQgcXVlcnlQYXJhbXM6IHN0cmluZyA9IG51bGw7XHJcbiAgICAgICAgY29uc3QgYm9keVBhcmFtcyA9IHtcclxuICAgICAgICAgICAgQWRkaXRpb25hbFBhcmFtczoge31cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBTZSBuZWxsYSBjb25maWd1cmF6aW9uZSBzb25vIHN0YXRpIGRlZmluaXRpIHBhcmFtZXRyaSBkYSBhZ2dpdW5nZXJlIGFsbGEgY2hpYW1hdGEgcXVlc3RpIHZlbmdvbm8gY2ljbGF0aVxyXG4gICAgICAgIC8vIGUgYWdnaXVudGkgbmVsIHB1bnRvIGluIGN1aSBkZXZvbm8gZXNzZXJlIHVzYXRpLlxyXG4gICAgICAgIGlmIChlbmRQb2ludERhdGEuUGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGVuZFBvaW50RGF0YS5QYXJhbXMuZm9yRWFjaChwID0+IHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAocC5QYXJhbVR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bJ1F1ZXJ5IHBhcmFtJ106IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nUGFyYW06IHN0cmluZyA9IHAuUGFyYW1OYW1lICsgXCI9XCIgKyBwLlBhcmFtVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0gKHF1ZXJ5UGFyYW1zID09IG51bGwgPyBcIlwiIDogcXVlcnlQYXJhbXMgKyBcIiZcIikgKyBzdHJpbmdQYXJhbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVsnSW4gcm91dGUnXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyAodXJsLmVuZHNXaXRoKFwiL1wiKSA/IFwiXCIgOiBcIi9cIikgKyBwLlBhcmFtVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5UGFyYW1zLkFkZGl0aW9uYWxQYXJhbXNbcC5QYXJhbU5hbWVdID0gcC5QYXJhbVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2Ugc29ubyBzdGF0aSBwYXNzYXRpIHBhcmFtZXRyaSBkYSBhZ2dpdW5nZXJlIGFsbGEgY2hpYW1hdGEgZGVmaW5pdGkgYWxsJ2ludGVybm8gZGVsIG1vZHVsbyBkaW5hbWljb1xyXG4gICAgICAgIC8vIHZlbmdvbm8gY2ljbGF0aSBlIGFnZ2l1bnRpIG5lbCBwdW50byBpbiBjdWkgZGV2b25vIGVzc2VyZSB1c2F0aSBkb3BvIHF1ZWxsaSBkZWZpbml0aSBuZWxsYSBjb25maWd1cmF6aW9uZS5cclxuICAgICAgICBpZiAoZHluYW1pY01vZHVsZVBhcmFtcykge1xyXG4gICAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLmZvckVhY2gocCA9PiB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAuUGFyYW1UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtWydRdWVyeSBwYXJhbSddOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZ1BhcmFtOiBzdHJpbmcgPSBwLlBhcmFtTmFtZSArIFwiPVwiICsgcC5QYXJhbVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyA9IChxdWVyeVBhcmFtcyA9PSBudWxsID8gXCJcIiA6IHF1ZXJ5UGFyYW1zICsgXCImXCIpICsgc3RyaW5nUGFyYW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bJ0luIHJvdXRlJ106IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsICsgKHVybC5lbmRzV2l0aChcIi9cIikgPyBcIlwiIDogXCIvXCIpICsgcC5QYXJhbVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J106IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keVBhcmFtc1twLlBhcmFtTmFtZV0gPSBwLlBhcmFtVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChxdWVyeVBhcmFtcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHVybCA9ICh1cmwuZW5kc1dpdGgoXCIvXCIpID8gdXJsLnN1YnN0cmluZygwLCB1cmwubGVuZ3RoIC0gMSkgOiB1cmwpICsgXCI/XCIgKyBxdWVyeVBhcmFtcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaHR0cC5yZXF1ZXN0KGVuZFBvaW50RGF0YS5SZXF1ZXN0TWV0aG9kLCB1cmwsIHtcclxuICAgICAgICAgICAgaGVhZGVyczogZW5kUG9pbnREYXRhLlRva2VuID8geyBBdXRob3JpemF0aW9uOiBlbmRQb2ludERhdGEuVG9rZW4gfSA6IG51bGwsXHJcbiAgICAgICAgICAgIGJvZHk6ICFbUmVxdWVzdE1ldGhvZEVudW0uREVMRVRFLCBSZXF1ZXN0TWV0aG9kRW51bS5HRVRdLmluY2x1ZGVzKGVuZFBvaW50RGF0YS5SZXF1ZXN0TWV0aG9kKSA/IGJvZHlQYXJhbXMgOiBudWxsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIChyZXM6IEZvcm0gfCBSZWNvcmQgfCBBcnJheTxSZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5yZW1vdmVSZXF1ZXN0Q291bnRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnJlbW92ZVJlcXVlc3RDb3VudGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yQ2FsbEJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsQmFjayhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkVycm9yKGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -2,7 +2,6 @@ import { Injectable } from '@angular/core';
|
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
export class VoiceRecognitionService {
|
|
4
4
|
constructor() {
|
|
5
|
-
this.recognition = new webkitSpeechRecognition();
|
|
6
5
|
this.isStoppedSpeechRecog = false;
|
|
7
6
|
this.text = '';
|
|
8
7
|
this.transcript_arr = [];
|
|
@@ -11,30 +10,37 @@ export class VoiceRecognitionService {
|
|
|
11
10
|
this.isStoppedAutomatically = true; //<< this Flag to check if the service stopped automaticically.
|
|
12
11
|
}
|
|
13
12
|
init() {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
this.
|
|
34
|
-
this.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
13
|
+
try {
|
|
14
|
+
this.recognition = new webkitSpeechRecognition();
|
|
15
|
+
this.recognition.continuous = true;
|
|
16
|
+
this.recognition.interimResults = true;
|
|
17
|
+
this.recognition.lang = 'it-IT';
|
|
18
|
+
this.recognition.addEventListener('result', (e) => {
|
|
19
|
+
const transcript = Array.from(e.results)
|
|
20
|
+
.map((result) => result[0])
|
|
21
|
+
.map((result) => result.transcript)
|
|
22
|
+
.join('');
|
|
23
|
+
this.transcript_arr.push(transcript);
|
|
24
|
+
this.tempWords = transcript;
|
|
25
|
+
const confidence = Array.from(e.results)
|
|
26
|
+
.map((result) => result[0])
|
|
27
|
+
.map((result) => result.confidence)
|
|
28
|
+
.join('');
|
|
29
|
+
this.confidence_arr.push(confidence);
|
|
30
|
+
});
|
|
31
|
+
this.recognition.addEventListener('end', (condition) => {
|
|
32
|
+
this.wordConcat();
|
|
33
|
+
if (this.isStoppedAutomatically) {
|
|
34
|
+
this.recognition.stop();
|
|
35
|
+
this.recognition.start();
|
|
36
|
+
this.isStoppedAutomatically = true;
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
//console.log(error);
|
|
42
|
+
//this.domElement.style.display = "none";
|
|
43
|
+
}
|
|
38
44
|
}
|
|
39
45
|
start() {
|
|
40
46
|
if (!this.isStarted) {
|
|
@@ -66,4 +72,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
|
|
|
66
72
|
providedIn: 'root',
|
|
67
73
|
}]
|
|
68
74
|
}], ctorParameters: function () { return []; } });
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9pY2UtcmVjb2duaXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL3NlcnZpY2VzL3ZvaWNlLXJlY29nbml0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNM0MsTUFBTSxPQUFPLHVCQUF1QjtJQVNsQztRQVBBLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUN0QixTQUFJLEdBQUcsRUFBRSxDQUFDO1FBRWpCLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLGNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxvREFBb0Q7UUFDdkUsMkJBQXNCLEdBQUcsSUFBSSxDQUFDLENBQUMsK0RBQStEO0lBQzlFLENBQUM7SUFFakIsSUFBSTtRQUVGLElBQUk7WUFDSixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksdUJBQXVCLEVBQUUsQ0FBQztZQUVqRCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztZQUVoQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQU0sRUFBRSxFQUFFO2dCQUNyRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7cUJBQ3JDLEdBQUcsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUMvQixHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7cUJBQ2xDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDWixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUM7Z0JBRTVCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztxQkFDckMsR0FBRyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQy9CLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztxQkFDbEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNaLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFjLEVBQUUsRUFBRTtnQkFDMUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNsQixJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtvQkFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztpQkFDcEM7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUVKO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFFZCxxQkFBcUI7WUFFckIseUNBQXlDO1NBQzFDO0lBQ0QsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsSUFBSTtRQUNGLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1NBQzFCO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFDbkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQzs7b0hBekVVLHVCQUF1Qjt3SEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07MkZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuZGVjbGFyZSB2YXIgd2Via2l0U3BlZWNoUmVjb2duaXRpb246IGFueTtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWb2ljZVJlY29nbml0aW9uU2VydmljZSB7XHJcbiAgcmVjb2duaXRpb247XHJcbiAgaXNTdG9wcGVkU3BlZWNoUmVjb2cgPSBmYWxzZTtcclxuICBwdWJsaWMgdGV4dCA9ICcnO1xyXG4gIHRlbXBXb3JkczogYW55O1xyXG4gIHRyYW5zY3JpcHRfYXJyID0gW107XHJcbiAgY29uZmlkZW5jZV9hcnIgPSBbXTtcclxuICBpc1N0YXJ0ZWQgPSBmYWxzZTsgLy88PCB0aGlzIEZsYWcgdG8gY2hlY2sgaWYgdGhlIHVzZXIgc3RvcCB0aGUgc2VydmljZVxyXG4gIGlzU3RvcHBlZEF1dG9tYXRpY2FsbHkgPSB0cnVlOyAvLzw8IHRoaXMgRmxhZyB0byBjaGVjayBpZiB0aGUgc2VydmljZSBzdG9wcGVkIGF1dG9tYXRpY2ljYWxseS5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBpbml0KCkge1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICB0aGlzLnJlY29nbml0aW9uID0gbmV3IHdlYmtpdFNwZWVjaFJlY29nbml0aW9uKCk7XHJcblxyXG4gICAgdGhpcy5yZWNvZ25pdGlvbi5jb250aW51b3VzID0gdHJ1ZTtcclxuICAgIHRoaXMucmVjb2duaXRpb24uaW50ZXJpbVJlc3VsdHMgPSB0cnVlO1xyXG4gICAgdGhpcy5yZWNvZ25pdGlvbi5sYW5nID0gJ2l0LUlUJztcclxuXHJcbiAgICB0aGlzLnJlY29nbml0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc3VsdCcsIChlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgdHJhbnNjcmlwdCA9IEFycmF5LmZyb20oZS5yZXN1bHRzKVxyXG4gICAgICAgIC5tYXAoKHJlc3VsdDogYW55KSA9PiByZXN1bHRbMF0pXHJcbiAgICAgICAgLm1hcCgocmVzdWx0KSA9PiByZXN1bHQudHJhbnNjcmlwdClcclxuICAgICAgICAuam9pbignJyk7XHJcbiAgICAgIHRoaXMudHJhbnNjcmlwdF9hcnIucHVzaCh0cmFuc2NyaXB0KTtcclxuICAgICAgdGhpcy50ZW1wV29yZHMgPSB0cmFuc2NyaXB0O1xyXG5cclxuICAgICAgY29uc3QgY29uZmlkZW5jZSA9IEFycmF5LmZyb20oZS5yZXN1bHRzKVxyXG4gICAgICAgIC5tYXAoKHJlc3VsdDogYW55KSA9PiByZXN1bHRbMF0pXHJcbiAgICAgICAgLm1hcCgocmVzdWx0KSA9PiByZXN1bHQuY29uZmlkZW5jZSlcclxuICAgICAgICAuam9pbignJyk7XHJcbiAgICAgIHRoaXMuY29uZmlkZW5jZV9hcnIucHVzaChjb25maWRlbmNlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVjb2duaXRpb24uYWRkRXZlbnRMaXN0ZW5lcignZW5kJywgKGNvbmRpdGlvbjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMud29yZENvbmNhdCgpO1xyXG4gICAgICBpZiAodGhpcy5pc1N0b3BwZWRBdXRvbWF0aWNhbGx5KSB7XHJcbiAgICAgICAgdGhpcy5yZWNvZ25pdGlvbi5zdG9wKCk7XHJcbiAgICAgICAgdGhpcy5yZWNvZ25pdGlvbi5zdGFydCgpO1xyXG4gICAgICAgIHRoaXMuaXNTdG9wcGVkQXV0b21hdGljYWxseSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgXHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgXHJcbiAgICAvL2NvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgIFxyXG4gICAgLy90aGlzLmRvbUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gIH1cclxuICB9XHJcblxyXG4gIHN0YXJ0KCkge1xyXG4gICAgaWYgKCF0aGlzLmlzU3RhcnRlZCkge1xyXG4gICAgICB0aGlzLnJlY29nbml0aW9uLnN0YXJ0KCk7XHJcbiAgICAgIHRoaXMuaXNTdGFydGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuICBzdG9wKCkge1xyXG4gICAgaWYgKHRoaXMuaXNTdGFydGVkKSB7XHJcbiAgICAgIHRoaXMuaXNTdG9wcGVkQXV0b21hdGljYWxseSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLndvcmRDb25jYXQoKTtcclxuICAgICAgdGhpcy5yZWNvZ25pdGlvbi5zdG9wKCk7XHJcbiAgICAgIHRoaXMuaXNTdGFydGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudHJhbnNjcmlwdF9hcnIgPSBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHdvcmRDb25jYXQoKSB7XHJcbiAgICB0aGlzLnRleHQgPSB0aGlzLnRleHQgKyAnICcgKyB0aGlzLnRlbXBXb3JkcyArICcuJztcclxuICAgIHRoaXMudGVtcFdvcmRzID0gJyc7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|