@wemake4u/form-player-se 1.0.27 → 1.0.29

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.
Files changed (79) hide show
  1. package/esm2022/lib/components/actionsCellRenderer/actionsCellRenderer.component.mjs +3 -3
  2. package/esm2022/lib/components/deleteRowRenderer/deleteRowRenderer.component.mjs +3 -3
  3. package/esm2022/lib/components/hostCellRenderer/hostCellRenderer.component.mjs +3 -3
  4. package/esm2022/lib/components/objectURLRenderer/objectURLRenderer.component.mjs +3 -3
  5. package/esm2022/lib/components/setFilter/setFilter.component.mjs +3 -3
  6. package/esm2022/lib/controls/displayfield.mjs +4 -0
  7. package/esm2022/lib/controls/factory.mjs +4 -1
  8. package/esm2022/lib/dialog/dialog.component.mjs +3 -3
  9. package/esm2022/lib/directives/accordion.directive.mjs +3 -3
  10. package/esm2022/lib/directives/accordionpanel.directive.mjs +3 -3
  11. package/esm2022/lib/directives/adorner.directive.mjs +3 -3
  12. package/esm2022/lib/directives/change.directive.mjs +3 -3
  13. package/esm2022/lib/directives/collapse.directive.mjs +3 -3
  14. package/esm2022/lib/directives/date.directive.mjs +3 -3
  15. package/esm2022/lib/directives/dialog.directive.mjs +3 -3
  16. package/esm2022/lib/directives/display.directive.mjs +3 -3
  17. package/esm2022/lib/directives/dropdown.directive.mjs +17 -8
  18. package/esm2022/lib/directives/formIndex.directive.mjs +3 -3
  19. package/esm2022/lib/directives/framesecurity.directive.mjs +3 -3
  20. package/esm2022/lib/directives/grid.directive.mjs +49 -13
  21. package/esm2022/lib/directives/number.directive.mjs +23 -11
  22. package/esm2022/lib/directives/readonly.directive.mjs +3 -3
  23. package/esm2022/lib/directives/refresh.directive.mjs +3 -3
  24. package/esm2022/lib/directives/register.directive.mjs +3 -3
  25. package/esm2022/lib/directives/repeat.directive.mjs +5 -4
  26. package/esm2022/lib/directives/tab.directive.mjs +3 -3
  27. package/esm2022/lib/directives/tabcontrol.directive.mjs +3 -3
  28. package/esm2022/lib/directives/text.directive.mjs +3 -3
  29. package/esm2022/lib/directives/updateblur.directive.mjs +3 -3
  30. package/esm2022/lib/directives/validationpatch.directive.mjs +34 -0
  31. package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +36 -16
  32. package/esm2022/lib/dynamic-form/dynamic-form.component.mjs +77 -62
  33. package/esm2022/lib/dynamic-host/dynamic-host.component.mjs +3 -3
  34. package/esm2022/lib/interact/confirmation.mjs +3 -3
  35. package/esm2022/lib/interact/notification.mjs +3 -3
  36. package/esm2022/lib/interact/prompt.mjs +3 -3
  37. package/esm2022/lib/services/chart.service.mjs +3 -3
  38. package/esm2022/lib/services/data.service.mjs +3 -3
  39. package/esm2022/lib/services/dialog.service.mjs +3 -3
  40. package/esm2022/lib/services/disable.service.mjs +74 -0
  41. package/esm2022/lib/services/event.service.mjs +3 -3
  42. package/esm2022/lib/services/feel.service.mjs +3 -3
  43. package/esm2022/lib/services/form.service.mjs +9 -9
  44. package/esm2022/lib/services/formatter.service.mjs +3 -3
  45. package/esm2022/lib/services/function.service.mjs +3 -3
  46. package/esm2022/lib/services/global.service.mjs +3 -3
  47. package/esm2022/lib/services/grid.service.mjs +3 -3
  48. package/esm2022/lib/services/markdown.service.mjs +3 -3
  49. package/esm2022/lib/services/metadata.service.mjs +3 -3
  50. package/esm2022/lib/services/mime.service.mjs +3 -3
  51. package/esm2022/lib/services/programmability.service.mjs +27 -144
  52. package/esm2022/lib/services/register.service.mjs +3 -3
  53. package/esm2022/lib/services/sanitize.service.mjs +3 -3
  54. package/esm2022/lib/services/scope.service.mjs +3 -3
  55. package/esm2022/lib/services/status.service.mjs +49 -0
  56. package/esm2022/lib/services/toast.service.mjs +3 -3
  57. package/esm2022/lib/services/validation.service.mjs +179 -0
  58. package/esm2022/lib/services/weak.service.mjs +3 -3
  59. package/esm2022/lib/shared/template-wrapper/template-wrapper.component.mjs +3 -3
  60. package/esm2022/lib/utils/CallbackRegistry.mjs +16 -0
  61. package/esm2022/lib/utils/syncronize.mjs +34 -0
  62. package/esm2022/public-api.mjs +2 -1
  63. package/fesm2022/wemake4u-form-player-se.mjs +749 -411
  64. package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
  65. package/lib/controls/displayfield.d.ts +3 -0
  66. package/lib/directives/dropdown.directive.d.ts +4 -1
  67. package/lib/directives/grid.directive.d.ts +2 -0
  68. package/lib/directives/validationpatch.directive.d.ts +7 -0
  69. package/lib/dynamic-fields/dynamic-fields.component.d.ts +5 -1
  70. package/lib/dynamic-form/dynamic-form.component.d.ts +10 -5
  71. package/lib/services/disable.service.d.ts +21 -0
  72. package/lib/services/form.service.d.ts +1 -1
  73. package/lib/services/programmability.service.d.ts +6 -14
  74. package/lib/services/status.service.d.ts +19 -0
  75. package/lib/services/validation.service.d.ts +36 -0
  76. package/lib/utils/CallbackRegistry.d.ts +6 -0
  77. package/lib/utils/syncronize.d.ts +1 -0
  78. package/package.json +1 -1
  79. package/public-api.d.ts +1 -0
@@ -101,10 +101,10 @@ export class DynamicHostComponent {
101
101
  validProperties(value) {
102
102
  return typeof value === 'object' && value !== null && !Array.isArray(value);
103
103
  }
104
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicHostComponent, deps: [{ token: i0.Injector }, { token: i1.GlobalService }], target: i0.ɵɵFactoryTarget.Component });
105
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DynamicHostComponent, isStandalone: true, selector: "app-dynamic-host", inputs: { component: ["register", "component"], properties: "properties", formGroup: "formGroup" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container #container></ng-container>\r\n", styles: [""] });
104
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DynamicHostComponent, deps: [{ token: i0.Injector }, { token: i1.GlobalService }], target: i0.ɵɵFactoryTarget.Component });
105
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DynamicHostComponent, isStandalone: true, selector: "app-dynamic-host", inputs: { component: ["register", "component"], properties: "properties", formGroup: "formGroup" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container #container></ng-container>\r\n", styles: [""] });
106
106
  }
107
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicHostComponent, decorators: [{
107
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DynamicHostComponent, decorators: [{
108
108
  type: Component,
109
109
  args: [{ selector: 'app-dynamic-host', standalone: true, template: "<ng-container #container></ng-container>\r\n" }]
110
110
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.GlobalService }], propDecorators: { component: [{
@@ -25,10 +25,10 @@ export class DefaultConfirmationController {
25
25
  this.dialogService.confirm(message ?? "", options);
26
26
  });
27
27
  }
28
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DefaultConfirmationController, deps: [{ token: i1.DialogService }], target: i0.ɵɵFactoryTarget.Injectable });
29
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DefaultConfirmationController, providedIn: 'root' });
28
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DefaultConfirmationController, deps: [{ token: i1.DialogService }], target: i0.ɵɵFactoryTarget.Injectable });
29
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DefaultConfirmationController, providedIn: 'root' });
30
30
  }
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DefaultConfirmationController, decorators: [{
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DefaultConfirmationController, decorators: [{
32
32
  type: Injectable,
33
33
  args: [{
34
34
  providedIn: 'root'
@@ -24,10 +24,10 @@ export class DefaultNotificationController {
24
24
  default: break;
25
25
  }
26
26
  }
27
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DefaultNotificationController, deps: [{ token: i1.ToastService }], target: i0.ɵɵFactoryTarget.Injectable });
28
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DefaultNotificationController, providedIn: 'root' });
27
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DefaultNotificationController, deps: [{ token: i1.ToastService }], target: i0.ɵɵFactoryTarget.Injectable });
28
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DefaultNotificationController, providedIn: 'root' });
29
29
  }
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DefaultNotificationController, decorators: [{
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DefaultNotificationController, decorators: [{
31
31
  type: Injectable,
32
32
  args: [{
33
33
  providedIn: 'root'
@@ -22,10 +22,10 @@ export class DefaultPromptController {
22
22
  this.dialogService.prompt(message ?? "Prompt", defaultValue, options);
23
23
  });
24
24
  }
25
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DefaultPromptController, deps: [{ token: i1.DialogService }], target: i0.ɵɵFactoryTarget.Injectable });
26
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DefaultPromptController, providedIn: 'root' });
25
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DefaultPromptController, deps: [{ token: i1.DialogService }], target: i0.ɵɵFactoryTarget.Injectable });
26
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DefaultPromptController, providedIn: 'root' });
27
27
  }
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DefaultPromptController, decorators: [{
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DefaultPromptController, decorators: [{
29
29
  type: Injectable,
30
30
  args: [{
31
31
  providedIn: 'root'
@@ -301,10 +301,10 @@ export class ChartService {
301
301
  isInterpolation(value) {
302
302
  return value === 'linear' || value === 'smooth' || value === 'step';
303
303
  }
304
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChartService, deps: [{ token: i1.ProgrammabilityService }, { token: i2.LanguageService }], target: i0.ɵɵFactoryTarget.Injectable });
305
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChartService });
304
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChartService, deps: [{ token: i1.ProgrammabilityService }, { token: i2.LanguageService }], target: i0.ɵɵFactoryTarget.Injectable });
305
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChartService });
306
306
  }
307
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChartService, decorators: [{
307
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChartService, decorators: [{
308
308
  type: Injectable
309
309
  }], ctorParameters: () => [{ type: i1.ProgrammabilityService }, { type: i2.LanguageService }] });
310
310
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL3NlcnZpY2VzL2NoYXJ0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkzQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBYXZELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQUc5QyxNQUFNLE9BQU8sWUFBWTtJQUdiO0lBQ0U7SUFGWixZQUNVLGVBQXVDLEVBQ3JDLGVBQWdDO1FBRGxDLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtRQUNyQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFDNUMsQ0FBQztJQUVELFVBQVUsQ0FBQyxTQUFjLEVBQUUsU0FBb0I7UUFDN0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNsRSxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQzdCLEdBQUcsQ0FBQyxDQUFDLFNBQWMsRUFBRSxFQUFFO1lBQ3JCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3BELE1BQU0sT0FBTyxHQUFtQjtnQkFDOUIsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ3RCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7YUFDNUIsQ0FBQztZ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SUFDOUQsQ0FBQztJQUVPLFFBQVEsQ0FBQyxLQUFVO1FBQ3pCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQVU7UUFDNUIsT0FBTyxLQUFLLEtBQUssWUFBWSxJQUFJLEtBQUssS0FBSyxVQUFVLENBQUM7SUFDeEQsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUFVO1FBQ2hDLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxNQUFNLENBQUM7SUFDdEUsQ0FBQzt3R0E5WFUsWUFBWTs0R0FBWixZQUFZOzs0RkFBWixZQUFZO2tCQUR4QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFByb2dyYW1tYWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcm9ncmFtbWFiaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBvYnNlcnZhYmxlQWxsIH0gZnJvbSAnLi4vdXRpbHMvb2JzZXJ2YWJsZUFsbCc7XHJcbmltcG9ydCB7XHJcbiAgQWdDaGFydE9wdGlvbnMsIEFnQ2hhcnRUaGVtZSwgQWdCYXNlU2VyaWVzT3B0aW9ucyxcclxuICBBZ0JhclNlcmllc09wdGlvbnMsIEFnQmFyU2VyaWVzT3B0aW9uc05hbWVzLCBcclxuICBBZ0xpbmVTZXJpZXNPcHRpb25zLCBBZ0xpbmVTZXJpZXNPcHRpb25zTmFtZXMsXHJcbiAgQWdBcmVhU2VyaWVzT3B0aW9ucywgQWdBcmVhU2VyaWVzT3B0aW9uc05hbWVzLFxyXG4gIEFnU2NhdHRlclNlcmllc09wdGlvbnMsIEFnU2NhdHRlclNlcmllc09wdGlvbnNOYW1lcyxcclxuICBBZ0J1YmJsZVNlcmllc09wdGlvbnMsIEFnQnViYmxlU2VyaWVzT3B0aW9uc05hbWVzLFxyXG4gIEFnUGllU2VyaWVzT3B0aW9ucywgQWdQaWVTZXJpZXNPcHRpb25zTmFtZXMsXHJcbiAgQWdEb251dFNlcmllc09wdGlvbnMsIEFnRG9udXRTZXJpZXNPcHRpb25zTmFtZXNcclxufSBmcm9tICdhZy1jaGFydHMtY29tbXVuaXR5JztcclxuXHJcbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSB9IGZyb20gJ0B3ZW1ha2U0dS9pbnRlcmFjdCc7XHJcbmltcG9ydCB7IGxvY2FsaXplIH0gZnJvbSAnLi4vbG9jYWxlL2xvY2FsaXplJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIENoYXJ0U2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwcm9ncmFtbWFiaWxpdHk6IFByb2dyYW1tYWJpbGl0eVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgZ2V0T3B0aW9ucyhjb21wb25lbnQ6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBPYnNlcnZhYmxlPEFnQ2hhcnRPcHRpb25zPiB7XHJcbiAgICBjb25zdCBleHByZXNzaW9uID0gdGhpcy5nZXREYXRhRXhwcmVzc2lvbihjb21wb25lbnQpO1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlKGZvcm1Hcm91cCwgZXhwcmVzc2lvbik7XHJcbiAgICByZXR1cm4gb2JzZXJ2YWJsZUFsbChkYXRhKS5waXBlKFxyXG4gICAgICBtYXAoKGNoYXJ0RGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc2VyaWVzID0gdGhpcy5nZXRTZXJpZXMoY29tcG9uZW50LCBmb3JtR3JvdXApO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnM6IEFnQ2hhcnRPcHRpb25zID0ge1xyXG4gICAgICAgICAgdGhlbWU6IHRoaXMuZ2V0VGhlbWUoKSxcclxuICAgICAgICAgIHNlcmllczogc2VyaWVzLFxyXG4gICAgICAgICAgLi4udGhpcy5nZXRQcm9wcyhjb21wb25lbnQpXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmJpbmREYXRhKG9wdGlvbnMsIGNoYXJ0RGF0YSk7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XHJcbiAgICAgIH0pXHJcbiAgICApOyAgIFxyXG4gIH1cclxuXHJcbiAgZ2V0RGF0YUV4cHJlc3Npb24oY29tcG9uZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGdldEV4cHJlc3Npb24gPSAoZXhwcmVzc2lvbjogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLnByb2dyYW1tYWJpbGl0eS5pc0V4cHJlc3Npb24oZXhwcmVzc2lvbilcclxuICAgICAgICA/IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmdldEV4cHJlc3Npb24oZXhwcmVzc2lvbilcclxuICAgICAgICA6IFwibnVsbFwiXHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRhRXhwciA9IGdldEV4cHJlc3Npb24oY29tcG9uZW50LmRhdGEpO1xyXG4gICAgY29uc3Qgc2VyaWVzRXhwcnMgPSAoY29tcG9uZW50LnNlcmllcyA/PyBbXSlcclxuICAgICAgLm1hcCgoc2VyaWU6IGFueSkgPT4gZ2V0RXhwcmVzc2lvbihzZXJpZS5kYXRhKSlcclxuICAgICAgLm1hcCgoZXhwcjogc3RyaW5nKSA9PiBgKCR7ZXhwcn0pYClcclxuICAgICAgLmpvaW4oXCIsIFwiKTtcclxuXHJcbiAgICByZXR1cm4gYD17IGRhdGE6ICgke2RhdGFFeHByfSksIHNlcmllczogWyR7c2VyaWVzRXhwcnN9XSB9YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYmluZERhdGEob3B0aW9uczogQWdDaGFydE9wdGlvbnMsIGNoYXJ0RGF0YTogYW55KSB7XHJcbiAgICBpZiAoY2hhcnREYXRhLmRhdGEpIHtcclxuICAgICAgb3B0aW9ucy5kYXRhID0gY2hhcnREYXRhLmRhdGE7XHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLnNlcmllcykpIHtcclxuICAgICAgb3B0aW9ucy5zZXJpZXMuZm9yRWFjaCgoc2VyaWU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGlmIChjaGFydERhdGEuc2VyaWVzW2luZGV4XSkge1xyXG4gICAgICAgICAgc2VyaWUuZGF0YSA9IGNoYXJ0RGF0YS5zZXJpZXNbaW5kZXhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBsYW5ndWFnZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLmdldExhbmd1YWdlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvY2FsZShjb21wb25lbnQ6IGFueSwga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGxvY2FsaXplKHRoaXMubGFuZ3VhZ2UsIGNvbXBvbmVudCwga2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VGhlbWUoKTogQWdDaGFydFRoZW1lIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGJhc2VUaGVtZTogXCJhZy1kZWZhdWx0XCIsXHJcbiAgICAgIHBhcmFtczoge1xyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiaW5oZXJpdFwiLFxyXG4gICAgICAgIHRleHRDb2xvcjogXCIjMDAxMjFBXCIsXHJcbiAgICAgICAgY2hyb21lRm9udEZhbWlseTogXCJpbmhlcml0XCIsXHJcbiAgICAgICAgY2hyb21lVGV4dENvbG9yOiBcIiMwMDEyMUFcIlxyXG4gICAgICB9LFxyXG4gICAgICBvdmVycmlkZXM6IHtcclxuICAgICAgICBjb21tb246IHtcclxuICAgICAgICAgIGJhY2tncm91bmQ6IHtcclxuICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2VyaWVzKGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IGFueVtdIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbXBvbmVudC5zZXJpZXMpKSB7XHJcbiAgICAgIGNvbnN0IHNlcmllcyA9IGNvbXBvbmVudC5zZXJpZXMubWFwKChzZXJpZTogYW55KSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChzZXJpZS50eXBlKSB7XHJcbiAgICAgICAgICBjYXNlIFwiYmFyXCI6XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEJhclNlcmllc09wdGlvbnMoc2VyaWUsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgICBjYXNlIFwibGluZVwiOlxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMaW5lU2VyaWVzT3B0aW9ucyhzZXJpZSwgZm9ybUdyb3VwKTtcclxuICAgICAgICAgIGNhc2UgXCJhcmVhXCI6XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEFyZWFTZXJpZXNPcHRpb25zKHNlcmllLCBmb3JtR3JvdXApO1xyXG4gICAgICAgICAgY2FzZSBcInNjYXR0ZXJcIjpcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NhdHRlclNlcmllc09wdGlvbnMoc2VyaWUsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgICBjYXNlIFwiYnViYmxlXCI6XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEJ1YmJsZVNlcmllc09wdGlvbnMoc2VyaWUsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgICBjYXNlIFwicGllXCI6XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBpZVNlcmllc09wdGlvbnMoc2VyaWUsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgICBjYXNlIFwiZG9udXRcIjpcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RG9udXRTZXJpZXNPcHRpb25zKHNlcmllLCBmb3JtR3JvdXApO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBzZXJpZXM7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZXJpZXNPcHRpb25zTmFtZXMoc2VyaWU6IGFueSlcclxuICAgIDogQWdCYXJTZXJpZXNPcHRpb25zTmFtZXMgfCBBZ0xpbmVTZXJpZXNPcHRpb25zTmFtZXMgIHtcclxuICAgIGNvbnN0IG9wdGlvbnM6IEFnQmFyU2VyaWVzT3B0aW9uc05hbWVzIHwgQWdMaW5lU2VyaWVzT3B0aW9uc05hbWVzID0ge307XHJcblxyXG4gICAgaWYgKHRoaXMuaXNTdHJpbmcoc2VyaWUueE5hbWUpKVxyXG4gICAgICBvcHRpb25zLnhOYW1lID0gdGhpcy5sb2NhbGUoc2VyaWUsIFwieE5hbWVcIik7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNTdHJpbmcoc2VyaWUueU5hbWUpKVxyXG4gICAgICBvcHRpb25zLnlOYW1lID0gdGhpcy5sb2NhbGUoc2VyaWUsIFwieU5hbWVcIik7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNTdHJpbmcoc2VyaWUubGVnZW5kSXRlbU5hbWUpKVxyXG4gICAgICBvcHRpb25zLmxlZ2VuZEl0ZW1OYW1lID0gdGhpcy5sb2NhbGUoc2VyaWUsIFwibGVnZW5kSXRlbU5hbWVcIik7XHJcblxyXG4gICAgcmV0dXJuIG9wdGlvbnM7XHJcbiAgfVxyXG4gIFxyXG4gIHByaXZhdGUgZ2V0QmFzZVNlcmllc09wdGlvbnMoc2VyaWU6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBBZ0Jhc2VTZXJpZXNPcHRpb25zPGFueT5cclxuICB7XHJcbiAgICBjb25zdCBvcHRpb25zOiBBZ0Jhc2VTZXJpZXNPcHRpb25zPGFueT4gPSB7IH07XHJcblxyXG4gICAgaWYgKHRoaXMuaXNCb29sZWFuKHNlcmllLnZpc2libGUpKVxyXG4gICAgICBvcHRpb25zLnZpc2libGUgPSBzZXJpZS52aXNpYmxlO1xyXG5cclxuICAgIHJldHVybiBvcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCYXJTZXJpZXNPcHRpb25zKHNlcmllOiBhbnksIGZvcm1Hcm91cDogRm9ybUdyb3VwKTogQWdCYXJTZXJpZXNPcHRpb25zIHtcclxuICAgIGNvbnN0IG9wdGlvbnM6IEFnQmFyU2VyaWVzT3B0aW9ucyA9IHtcclxuICAgICAgdHlwZTogXCJiYXJcIixcclxuICAgICAgeEtleTogc2VyaWUueEtleSxcclxuICAgICAgeUtleTogc2VyaWUueUtleSxcclxuICAgICAgLi4udGhpcy5nZXRCYXNlU2VyaWVzT3B0aW9ucyhzZXJpZSwgZm9ybUdyb3VwKSxcclxuICAgICAgLi4udGhpcy5nZXRTZXJpZXNPcHRpb25zTmFtZXMoc2VyaWUpXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLmlzRGlyZWN0aW9uKHNlcmllLmRpcmVjdGlvbikpXHJcbiAgICAgIG9wdGlvbnMuZGlyZWN0aW9uID0gc2VyaWUuZGlyZWN0aW9uO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQm9vbGVhbihzZXJpZS5zdGFja2VkKSlcclxuICAgICAgb3B0aW9ucy5zdGFja2VkID0gc2VyaWUuc3RhY2tlZDtcclxuXHJcbiAgICBpZiAodGhpcy5pc051bWJlcihzZXJpZS5ub3JtYWxpemVkVG8pKVxyXG4gICAgICBvcHRpb25zLm5vcm1hbGl6ZWRUbyA9IHNlcmllLm5vcm1hbGl6ZWRUbztcclxuXHJcbiAgICBpZiAodGhpcy5pc1N0cmluZyhzZXJpZS5zdGFja0dyb3VwKSlcclxuICAgICAgb3B0aW9ucy5zdGFja0dyb3VwID0gc2VyaWUuc3RhY2tHcm91cDtcclxuXHJcbiAgICByZXR1cm4gb3B0aW9ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TGluZVNlcmllc09wdGlvbnMoc2VyaWU6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBBZ0xpbmVTZXJpZXNPcHRpb25zIHtcclxuICAgIGNvbnN0IG9wdGlvbnM6IEFnTGluZVNlcmllc09wdGlvbnMgPSB7XHJcbiAgICAgIHR5cGU6IFwibGluZVwiLFxyXG4gICAgICB4S2V5OiBzZXJpZS54S2V5LFxyXG4gICAgICB5S2V5OiBzZXJpZS55S2V5LFxyXG4gICAgICAuLi50aGlzLmdldEJhc2VTZXJpZXNPcHRpb25zKHNlcmllLCBmb3JtR3JvdXApLFxyXG4gICAgICAuLi50aGlzLmdldFNlcmllc09wdGlvbnNOYW1lcyhzZXJpZSlcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMuaXNJbnRlcnBvbGF0aW9uKHNlcmllLmludGVycG9sYXRpb24pKSB7IFxyXG4gICAgICBvcHRpb25zLmludGVycG9sYXRpb24gPSB7XHJcbiAgICAgICAgdHlwZTogc2VyaWUuaW50ZXJwb2xhdGlvblxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBcmVhU2VyaWVzT3B0aW9ucyhzZXJpZTogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IEFnQXJlYVNlcmllc09wdGlvbnMge1xyXG4gICAgY29uc3Qgb3B0aW9uczogQWdBcmVhU2VyaWVzT3B0aW9ucyA9IHtcclxuICAgICAgdHlwZTogXCJhcmVhXCIsXHJcbiAgICAgIHhLZXk6IHNlcmllLnhLZXksXHJcbiAgICAgIHlLZXk6IHNlcmllLnlLZXksXHJcbiAgICAgIC4uLnRoaXMuZ2V0QmFzZVNlcmllc09wdGlvbnMoc2VyaWUsIGZvcm1Hcm91cCksXHJcbiAgICAgIC4uLnRoaXMuZ2V0QXJlYVNlcmllc09wdGlvbnNOYW1lcyhzZXJpZSlcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMuaXNCb29sZWFuKHNlcmllLnN0YWNrZWQpKVxyXG4gICAgICBvcHRpb25zLnN0YWNrZWQgPSBzZXJpZS5zdGFja2VkO1xyXG5cclxuICAgIGlmICh0aGlzLmlzTnVtYmVyKHNlcmllLm5vcm1hbGl6ZWRUbykpXHJcbiAgICAgIG9wdGlvbnMubm9ybWFsaXplZFRvID0gc2VyaWUubm9ybWFsaXplZFRvO1xyXG5cclxuICAgIHJldHVybiBvcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBcmVhU2VyaWVzT3B0aW9uc05hbWVzKHNlcmllOiBhbnkpXHJcbiAgICA6IEFnQXJlYVNlcmllc09wdGlvbnNOYW1lcyB7XHJcbiAgICBjb25zdCBvcHRpb25zOiBBZ0FyZWFTZXJpZXNPcHRpb25zTmFtZXMgPSB7fTtcclxuXHJcbiAgICBpZiAoc2VyaWUueE5hbWUpXHJcbiAgICAgIG9wdGlvbnMueE5hbWUgPSB0aGlzLmxvY2FsZShzZXJpZSwgXCJ4TmFtZVwiKTtcclxuXHJcbiAgICBpZiAoc2VyaWUueU5hbWUpXHJcbiAgICAgIG9wdGlvbnMueU5hbWUgPSB0aGlzLmxvY2FsZShzZXJpZSwgXCJ5TmFtZVwiKTtcclxuXHJcbiAgICByZXR1cm4gb3B0aW9ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2NhdHRlclNlcmllc09wdGlvbnMoc2VyaWU6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBBZ1NjYXR0ZXJTZXJpZXNPcHRpb25zIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHR5cGU6IFwic2NhdHRlclwiLFxyXG4gICAgICB4S2V5OiBzZXJpZS54S2V5LFxyXG4gICAgICB5S2V5OiBzZXJpZS55S2V5LFxyXG4gICAgICBsYWJlbEtleTogc2VyaWUubGFiZWxLZXksXHJcbiAgICAgIC4uLnRoaXMuZ2V0QmFzZVNlcmllc09wdGlvbnMoc2VyaWUsIGZvcm1Hcm91cCksXHJcbiAgICAgIC4uLnRoaXMuZ2V0U2NhdHRlclNlcmllc09wdGlvbnNOYW1lcyhzZXJpZSlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFNjYXR0ZXJTZXJpZXNPcHRpb25zTmFtZXMoc2VyaWU6IGFueSlcclxuICAgIDogQWdTY2F0dGVyU2VyaWVzT3B0aW9uc05hbWVzIHtcclxuICAgIGNvbnN0IG9wdGlvbnM6IEFnU2NhdHRlclNlcmllc09wdGlvbnNOYW1lcyA9IHt9O1xyXG5cclxuICAgIGlmIChzZXJpZS54TmFtZSlcclxuICAgICAgb3B0aW9ucy54TmFtZSA9IHRoaXMubG9jYWxlKHNlcmllLCBcInhOYW1lXCIpO1xyXG5cclxuICAgIGlmIChzZXJpZS55TmFtZSlcclxuICAgICAgb3B0aW9ucy55TmFtZSA9IHRoaXMubG9jYWxlKHNlcmllLCBcInlOYW1lXCIpO1xyXG5cclxuICAgIGlmIChzZXJpZS5sYWJlbE5hbWUpXHJcbiAgICAgIG9wdGlvbnMubGFiZWxOYW1lID0gdGhpcy5sb2NhbGUoc2VyaWUsIFwibGFiZWxOYW1lXCIpO1xyXG5cclxuICAgIHJldHVybiBvcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCdWJibGVTZXJpZXNPcHRpb25zKHNlcmllOiBhbnksIGZvcm1Hcm91cDogRm9ybUdyb3VwKTogQWdCdWJibGVTZXJpZXNPcHRpb25zIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHR5cGU6IFwiYnViYmxlXCIsXHJcbiAgICAgIHhLZXk6IHNlcmllLnhLZXksXHJcbiAgICAgIHlLZXk6IHNlcmllLnlLZXksXHJcbiAgICAgIHNpemVLZXk6IHNlcmllLnNpemVLZXksXHJcbiAgICAgIGxhYmVsS2V5OiBzZXJpZS5sYWJlbEtleSxcclxuICAgICAgLi4udGhpcy5nZXRCYXNlU2VyaWVzT3B0aW9ucyhzZXJpZSwgZm9ybUdyb3VwKSxcclxuICAgICAgLi4udGhpcy5nZXRCdWJibGVTZXJpZXNPcHRpb25zTmFtZXMoc2VyaWUpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCdWJibGVTZXJpZXNPcHRpb25zTmFtZXMoc2VyaWU6IGFueSlcclxuICAgIDogQWdCdWJibGVTZXJpZXNPcHRpb25zTmFtZXMge1xyXG4gICAgY29uc3Qgb3B0aW9uczogQWdCdWJibGVTZXJpZXNPcHRpb25zTmFtZXMgPSB7fTtcclxuXHJcbiAgICBpZiAoc2VyaWUueE5hbWUpXHJcbiAgICAgIG9wdGlvbnMueE5hbWUgPSB0aGlzLmxvY2FsZShzZXJpZSwgXCJ4TmFtZVwiKTtcclxuXHJcbiAgICBpZiAoc2VyaWUueU5hbWUpXHJcbiAgICAgIG9wdGlvbnMueU5hbWUgPSB0aGlzLmxvY2FsZShzZXJpZSwgXCJ5TmFtZVwiKTtcclxuXHJcbiAgICBpZiAoc2VyaWUuc2l6ZU5hbWUpXHJcbiAgICAgIG9wdGlvbnMuc2l6ZU5hbWUgPSB0aGlzLmxvY2FsZShzZXJpZSwgXCJzaXplTmFtZVwiKTtcclxuXHJcbiAgICBpZiAoc2VyaWUubGFiZWxOYW1lKVxyXG4gICAgICBvcHRpb25zLmxhYmVsTmFtZSA9IHRoaXMubG9jYWxlKHNlcmllLCBcImxhYmVsTmFtZVwiKTtcclxuXHJcbiAgICByZXR1cm4gb3B0aW9ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UGllU2VyaWVzT3B0aW9ucyhzZXJpZTogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IEFnUGllU2VyaWVzT3B0aW9ucyB7XHJcbiAgICBjb25zdCBvcHRpb25zOiBBZ1BpZVNlcmllc09wdGlvbnMgPSB7XHJcbiAgICAgIHR5cGU6IFwicGllXCIsXHJcbiAgICAgIGFuZ2xlS2V5OiBzZXJpZS5hbmdsZUtleSxcclxuICAgICAgLi4udGhpcy5nZXRCYXNlU2VyaWVzT3B0aW9ucyhzZXJpZSwgZm9ybUdyb3VwKSxcclxuICAgICAgLi4udGhpcy5nZXRQaWVTZXJpZXNPcHRpb25zTmFtZXMoc2VyaWUpXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLmlzU3RyaW5nKHNlcmllLnJhZGl1c0tleSkpXHJcbiAgICAgIG9wdGlvbnMucmFkaXVzS2V5ID0gc2VyaWUucmFkaXVzS2V5O1xyXG5cclxuICAgIGlmICh0aGlzLmlzU3RyaW5nKHNlcmllLmNhbGxvdXRMYWJlbEtleSkpXHJcbiAgICAgIG9wdGlvbnMuY2FsbG91dExhYmVsS2V5ID0gc2VyaWUuY2FsbG91dExhYmVsS2V5O1xyXG5cclxuICAgIGlmICh0aGlzLmlzU3RyaW5nKHNlcmllLnNlY3RvckxhYmVsS2V5KSlcclxuICAgICAgb3B0aW9ucy5zZWN0b3JMYWJlbEtleSA9IHNlcmllLnNlY3RvckxhYmVsS2V5O1xyXG5cclxuICAgIGlmICh0aGlzLmlzU3RyaW5nKHNlcmllLmxlZ2VuZEl0ZW1LZXkpKVxyXG4gICAgICBvcHRpb25zLmxlZ2VuZEl0ZW1LZXkgPSBzZXJpZS5sZWdlbmRJdGVtS2V5O1xyXG5cclxuICAgIHJldHVybiBvcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQaWVTZXJpZXNPcHRpb25zTmFtZXMoc2VyaWU6IGFueSlcclxuICAgIDogQWdQaWVTZXJpZXNPcHRpb25zTmFtZXMge1xyXG4gICAgY29uc3Qgb3B0aW9uczogQWdQaWVTZXJpZXNPcHRpb25zTmFtZXMgPSB7fTtcclxuXHJcbiAgICBpZiAoc2VyaWUuYW5nbGVOYW1lKVxyXG4gICAgICBvcHRpb25zLmFuZ2xlTmFtZSA9IHRoaXMubG9jYWxlKHNlcmllLCBcImFuZ2xlTmFtZVwiKTtcclxuXHJcbiAgICBpZiAoc2VyaWUucmFkaXVzTmFtZSlcclxuICAgICAgb3B0aW9ucy5yYWRpdXNOYW1lID0gdGhpcy5sb2NhbGUoc2VyaWUsIFwicmFkaXVzTmFtZVwiKTtcclxuXHJcbiAgICBpZiAoc2VyaWUuY2FsbG91dExhYmVsTmFtZSlcclxuICAgICAgb3B0aW9ucy5jYWxsb3V0TGFiZWxOYW1lID0gdGhpcy5sb2NhbGUoc2VyaWUsIFwiY2FsbG91dExhYmVsTmFtZVwiKTtcclxuXHJcbiAgICBpZiAoc2VyaWUuc2VjdG9yTGFiZWxOYW1lKVxyXG4gICAgICBvcHRpb25zLnNlY3RvckxhYmVsTmFtZSA9IHRoaXMubG9jYWxlKHNlcmllLCBcInNlY3RvckxhYmVsTmFtZVwiKTtcclxuXHJcbiAgICByZXR1cm4gb3B0aW9ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RG9udXRTZXJpZXNPcHRpb25zKHNlcmllOiBhbnksIGZvcm1Hcm91cDogRm9ybUdyb3VwKTogQWdEb251dFNlcmllc09wdGlvbnMge1xyXG4gICAgY29uc3Qgb3B0aW9uczogQWdEb251dFNlcmllc09wdGlvbnMgPSB7XHJcbiAgICAgIHR5cGU6IFwiZG9udXRcIixcclxuICAgICAgYW5nbGVLZXk6IHNlcmllLmFuZ2xlS2V5LFxyXG4gICAgICAuLi50aGlzLmdldEJhc2VTZXJpZXNPcHRpb25zKHNlcmllLCBmb3JtR3JvdXApLFxyXG4gICAgICAuLi50aGlzLmdldERvbnV0U2VyaWVzT3B0aW9uc05hbWVzKHNlcmllKVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1N0cmluZyhzZXJpZS5yYWRpdXNLZXkpKVxyXG4gICAgICBvcHRpb25zLnJhZGl1c0tleSA9IHNlcmllLnJhZGl1c0tleTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1N0cmluZyhzZXJpZS5jYWxsb3V0TGFiZWxLZXkpKVxyXG4gICAgICBvcHRpb25zLmNhbGxvdXRMYWJlbEtleSA9IHNlcmllLmNhbGxvdXRMYWJlbEtleTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1N0cmluZyhzZXJpZS5zZWN0b3JMYWJlbEtleSkpXHJcbiAgICAgIG9wdGlvbnMuc2VjdG9yTGFiZWxLZXkgPSBzZXJpZS5zZWN0b3JMYWJlbEtleTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1N0cmluZyhzZXJpZS5sZWdlbmRJdGVtS2V5KSlcclxuICAgICAgb3B0aW9ucy5sZWdlbmRJdGVtS2V5ID0gc2VyaWUubGVnZW5kSXRlbUtleTtcclxuXHJcbiAgICByZXR1cm4gb3B0aW9ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RG9udXRTZXJpZXNPcHRpb25zTmFtZXMoc2VyaWU6IGFueSlcclxuICAgIDogQWdEb251dFNlcmllc09wdGlvbnNOYW1lcyB7XHJcbiAgICBjb25zdCBvcHRpb25zOiBBZ0RvbnV0U2VyaWVzT3B0aW9uc05hbWVzID0ge307XHJcblxyXG4gICAgaWYgKHNlcmllLmFuZ2xlTmFtZSlcclxuICAgICAgb3B0aW9ucy5hbmdsZU5hbWUgPSB0aGlzLmxvY2FsZShzZXJpZSwgXCJhbmdsZU5hbWVcIik7XHJcblxyXG4gICAgaWYgKHNlcmllLnJhZGl1c05hbWUpXHJcbiAgICAgIG9wdGlvbnMucmFkaXVzTmFtZSA9IHRoaXMubG9jYWxlKHNlcmllLCBcInJhZGl1c05hbWVcIik7XHJcblxyXG4gICAgaWYgKHNlcmllLmNhbGxvdXRMYWJlbE5hbWUpXHJcbiAgICAgIG9wdGlvbnMuY2FsbG91dExhYmVsTmFtZSA9IHRoaXMubG9jYWxlKHNlcmllLCBcImNhbGxvdXRMYWJlbE5hbWVcIik7XHJcblxyXG4gICAgaWYgKHNlcmllLnNlY3RvckxhYmVsTmFtZSlcclxuICAgICAgb3B0aW9ucy5zZWN0b3JMYWJlbE5hbWUgPSB0aGlzLmxvY2FsZShzZXJpZSwgXCJzZWN0b3JMYWJlbE5hbWVcIik7XHJcblxyXG4gICAgcmV0dXJuIG9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFByb3BzKGNvbXBvbmVudDogYW55KTogYW55IHtcclxuICAgIGNvbnN0IHByb3BzOiBhbnkgPSB7fTtcclxuXHJcbiAgICBpZiAoY29tcG9uZW50ICYmIGNvbXBvbmVudC50aXRsZSkge1xyXG4gICAgICBwcm9wcy50aXRsZSA9IHsgdGV4dDogY29tcG9uZW50LnRpdGxlIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbXBvbmVudCAmJiBjb21wb25lbnQuc3VidGl0bGUpIHtcclxuICAgICAgcHJvcHMuc3VidGl0bGUgPSB7IHRleHQ6IGNvbXBvbmVudC5zdWJ0aXRsZSB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNCb29sZWFuKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc051bWJlcih2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRGlyZWN0aW9uKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB2YWx1ZSA9PT0gJ2hvcml6b250YWwnIHx8IHZhbHVlID09PSAndmVydGljYWwnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0ludGVycG9sYXRpb24odmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHZhbHVlID09PSAnbGluZWFyJyB8fCB2YWx1ZSA9PT0gJ3Ntb290aCcgfHwgdmFsdWUgPT09ICdzdGVwJztcclxuICB9XHJcbn1cclxuIl19
@@ -17,10 +17,10 @@ export class DataService {
17
17
  createOData(url) {
18
18
  return new ODataSource(url, this.http);
19
19
  }
20
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
21
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataService, providedIn: 'root' });
20
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DataService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
21
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DataService, providedIn: 'root' });
22
22
  }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataService, decorators: [{
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DataService, decorators: [{
24
24
  type: Injectable,
25
25
  args: [{
26
26
  providedIn: 'root'
@@ -146,10 +146,10 @@ export class DialogService {
146
146
  ]
147
147
  };
148
148
  }
149
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DialogService, deps: [{ token: i1.SirioDialogService }], target: i0.ɵɵFactoryTarget.Injectable });
150
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DialogService, providedIn: 'root' });
149
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DialogService, deps: [{ token: i1.SirioDialogService }], target: i0.ɵɵFactoryTarget.Injectable });
150
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DialogService, providedIn: 'root' });
151
151
  }
152
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DialogService, decorators: [{
152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DialogService, decorators: [{
153
153
  type: Injectable,
154
154
  args: [{
155
155
  providedIn: 'root'
@@ -0,0 +1,74 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "./programmability.service";
4
+ import * as i2 from "./form.service";
5
+ export class DisableService {
6
+ programmability;
7
+ formService;
8
+ constructor(programmability, formService) {
9
+ this.programmability = programmability;
10
+ this.formService = formService;
11
+ }
12
+ createCollection() {
13
+ return new Map();
14
+ }
15
+ addToCollection(collection, control, parentGroup, disabled) {
16
+ collection.set(control, { parentGroup, disabled });
17
+ }
18
+ setupCollection(collection) {
19
+ collection.forEach((disableContext, control) => {
20
+ this.applyRule(disableContext.parentGroup, control, disableContext.disabled);
21
+ });
22
+ }
23
+ applyRule(formGroup, control, value) {
24
+ // se riabilito un FormGroup vengono riabilitato tutti i child
25
+ // mentre dovrebbero essere rivalutati se hanno una condizione o un valore static.
26
+ const logDisabled = (value) => {
27
+ if (!this.programmability.verbose)
28
+ return;
29
+ console.log(value ? "Disable" : "Enable", control, { path: this.getPath(control), formGroup });
30
+ };
31
+ const disableControl = (value) => {
32
+ if (value === true) {
33
+ if (control.disabled)
34
+ return;
35
+ control.disable();
36
+ logDisabled(value);
37
+ }
38
+ else {
39
+ if (control.enabled)
40
+ return;
41
+ control.enable();
42
+ logDisabled(value);
43
+ }
44
+ };
45
+ if (typeof value === 'boolean') {
46
+ disableControl(value);
47
+ }
48
+ else if (typeof value === 'string') {
49
+ if (this.programmability.isExpression(value)) {
50
+ const expression = this.programmability.getExpression(value);
51
+ const dependencies = this.programmability.getDependencies(expression);
52
+ const applyExpression = () => {
53
+ const result = this.programmability.evaluateBoolean(formGroup, value, { cacheable: false });
54
+ disableControl(result);
55
+ };
56
+ if (dependencies.length > 0) {
57
+ this.programmability.watch(formGroup, dependencies, () => {
58
+ applyExpression();
59
+ });
60
+ }
61
+ applyExpression();
62
+ }
63
+ }
64
+ }
65
+ getPath(control) {
66
+ return this.formService.getPath(control).join(".");
67
+ }
68
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DisableService, deps: [{ token: i1.ProgrammabilityService }, { token: i2.FormService }], target: i0.ɵɵFactoryTarget.Injectable });
69
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DisableService });
70
+ }
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DisableService, decorators: [{
72
+ type: Injectable
73
+ }], ctorParameters: () => [{ type: i1.ProgrammabilityService }, { type: i2.FormService }] });
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzYWJsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvZGlzYWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFNM0MsTUFBTSxPQUFPLGNBQWM7SUFHZjtJQUNFO0lBRlosWUFDVSxlQUF1QyxFQUNyQyxXQUF3QjtRQUQxQixvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7UUFDckMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFDcEMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxHQUFHLEVBQW1DLENBQUM7SUFDcEQsQ0FBQztJQUVELGVBQWUsQ0FBQyxVQUE2QixFQUFFLE9BQXdCLEVBQUUsV0FBc0IsRUFBRSxRQUFhO1FBQzVHLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELGVBQWUsQ0FBQyxVQUE2QjtRQUMzQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9FLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFNBQVMsQ0FBQyxTQUFvQixFQUFFLE9BQXdCLEVBQUUsS0FBOEI7UUFDOUYsOERBQThEO1FBQzlELGtGQUFrRjtRQUNsRixNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNqRyxDQUFDLENBQUM7UUFDRixNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQXFCLEVBQUUsRUFBRTtZQUMvQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxPQUFPLENBQUMsUUFBUTtvQkFBRSxPQUFPO2dCQUM3QixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2xCLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxPQUFPLENBQUMsT0FBTztvQkFBRSxPQUFPO2dCQUM1QixPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2pCLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQyxDQUFBO1FBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMvQixjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsQ0FBQzthQUNJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbkMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3RFLE1BQU0sZUFBZSxHQUFHLEdBQUcsRUFBRTtvQkFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO29CQUM1RixjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3pCLENBQUMsQ0FBQztnQkFDRixJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFO3dCQUN2RCxlQUFlLEVBQUUsQ0FBQztvQkFDcEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxlQUFlLEVBQUUsQ0FBQztZQUNwQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxPQUFPLENBQUMsT0FBd0I7UUFDdEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckQsQ0FBQzt3R0E5RFUsY0FBYzs0R0FBZCxjQUFjOzs0RkFBZCxjQUFjO2tCQUQxQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi9wcm9ncmFtbWFiaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi9mb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIERpc2FibGVTZXJ2aWNlICB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwcm9ncmFtbWFiaWxpdHk6IFByb2dyYW1tYWJpbGl0eVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUNvbGxlY3Rpb24oKTogRGlzYWJsZUNvbGxlY3Rpb24ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8QWJzdHJhY3RDb250cm9sLCBEaXNhYmxlQ29udGV4dD4oKTtcclxuICB9XHJcblxyXG4gIGFkZFRvQ29sbGVjdGlvbihjb2xsZWN0aW9uOiBEaXNhYmxlQ29sbGVjdGlvbiwgY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXJlbnRHcm91cDogRm9ybUdyb3VwLCBkaXNhYmxlZDogYW55KSB7XHJcbiAgICBjb2xsZWN0aW9uLnNldChjb250cm9sLCB7IHBhcmVudEdyb3VwLCBkaXNhYmxlZCB9KTtcclxuICB9XHJcblxyXG4gIHNldHVwQ29sbGVjdGlvbihjb2xsZWN0aW9uOiBEaXNhYmxlQ29sbGVjdGlvbikge1xyXG4gICAgY29sbGVjdGlvbi5mb3JFYWNoKChkaXNhYmxlQ29udGV4dCwgY29udHJvbCkgPT4ge1xyXG4gICAgICB0aGlzLmFwcGx5UnVsZShkaXNhYmxlQ29udGV4dC5wYXJlbnRHcm91cCwgY29udHJvbCwgZGlzYWJsZUNvbnRleHQuZGlzYWJsZWQpOyAgICAgIFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5UnVsZShmb3JtR3JvdXA6IEZvcm1Hcm91cCwgY29udHJvbDogQWJzdHJhY3RDb250cm9sLCB2YWx1ZTogYm9vbGVhbiB8IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcclxuICAgIC8vIHNlIHJpYWJpbGl0byB1biBGb3JtR3JvdXAgdmVuZ29ubyByaWFiaWxpdGF0byB0dXR0aSBpIGNoaWxkXHJcbiAgICAvLyBtZW50cmUgZG92cmViYmVybyBlc3NlcmUgcml2YWx1dGF0aSBzZSBoYW5ubyB1bmEgY29uZGl6aW9uZSBvIHVuIHZhbG9yZSBzdGF0aWMuXHJcbiAgICBjb25zdCBsb2dEaXNhYmxlZCA9ICh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5wcm9ncmFtbWFiaWxpdHkudmVyYm9zZSkgcmV0dXJuO1xyXG4gICAgICBjb25zb2xlLmxvZyh2YWx1ZSA/IFwiRGlzYWJsZVwiIDogXCJFbmFibGVcIiwgY29udHJvbCwgeyBwYXRoOiB0aGlzLmdldFBhdGgoY29udHJvbCksIGZvcm1Hcm91cCB9KTtcclxuICAgIH07XHJcbiAgICBjb25zdCBkaXNhYmxlQ29udHJvbCA9ICh2YWx1ZTogYm9vbGVhbiB8IG51bGwpID0+IHtcclxuICAgICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wuZGlzYWJsZWQpIHJldHVybjtcclxuICAgICAgICBjb250cm9sLmRpc2FibGUoKTtcclxuICAgICAgICBsb2dEaXNhYmxlZCh2YWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wuZW5hYmxlZCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICAgICAgbG9nRGlzYWJsZWQodmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgZGlzYWJsZUNvbnRyb2wodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICBpZiAodGhpcy5wcm9ncmFtbWFiaWxpdHkuaXNFeHByZXNzaW9uKHZhbHVlKSkge1xyXG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5nZXRFeHByZXNzaW9uKHZhbHVlKTtcclxuICAgICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5nZXREZXBlbmRlbmNpZXMoZXhwcmVzc2lvbik7XHJcbiAgICAgICAgY29uc3QgYXBwbHlFeHByZXNzaW9uID0gKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVCb29sZWFuKGZvcm1Hcm91cCwgdmFsdWUsIHsgY2FjaGVhYmxlOiBmYWxzZSB9KTtcclxuICAgICAgICAgIGRpc2FibGVDb250cm9sKHJlc3VsdCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoZGVwZW5kZW5jaWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMucHJvZ3JhbW1hYmlsaXR5LndhdGNoKGZvcm1Hcm91cCwgZGVwZW5kZW5jaWVzLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGFwcGx5RXhwcmVzc2lvbigpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFwcGx5RXhwcmVzc2lvbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhdGgoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1TZXJ2aWNlLmdldFBhdGgoY29udHJvbCkuam9pbihcIi5cIik7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpc2FibGVDb250ZXh0IHtcclxuICBwYXJlbnRHcm91cDogRm9ybUdyb3VwO1xyXG4gIGRpc2FibGVkOiBhbnlcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRGlzYWJsZUNvbGxlY3Rpb24gPSBNYXA8QWJzdHJhY3RDb250cm9sLCBEaXNhYmxlQ29udGV4dD47XHJcbiJdfQ==
@@ -7,10 +7,10 @@ export class EventService {
7
7
  emitCommand(data) {
8
8
  this.commandSubject.next(data);
9
9
  }
10
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EventService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
11
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EventService, providedIn: 'root' });
10
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EventService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
11
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EventService, providedIn: 'root' });
12
12
  }
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EventService, decorators: [{
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EventService, decorators: [{
14
14
  type: Injectable,
15
15
  args: [{
16
16
  providedIn: 'root'
@@ -228,10 +228,10 @@ export class FeelService {
228
228
  .map(part => part.trim())
229
229
  .filter(part => part.length > 0);
230
230
  }
231
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
232
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeelService, providedIn: 'root' });
231
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
232
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeelService, providedIn: 'root' });
233
233
  }
234
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeelService, decorators: [{
234
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeelService, decorators: [{
235
235
  type: Injectable,
236
236
  args: [{
237
237
  providedIn: 'root'
@@ -73,7 +73,7 @@ export class FormService {
73
73
  const result = this.applyPath(control, path, pathOptions);
74
74
  return result?.status;
75
75
  }
76
- errors(controls) {
76
+ countInvalid(controls) {
77
77
  let errors = 0;
78
78
  for (const control of controls) {
79
79
  errors += this.collectErrors(control);
@@ -257,10 +257,7 @@ export class FormService {
257
257
  if (!current) {
258
258
  return error(`Control is null at segment "${getCurrentPath()}"`);
259
259
  }
260
- if (!segment) {
261
- continue;
262
- }
263
- else if (typeof segment === 'number') {
260
+ if (typeof segment === 'number') {
264
261
  if (!(current instanceof FormArray)) {
265
262
  return error(`Expected FormArray at segment [${getCurrentPath()}], got ${current.constructor.name}`);
266
263
  }
@@ -302,6 +299,9 @@ export class FormService {
302
299
  }
303
300
  }
304
301
  }
302
+ else if (!segment) {
303
+ continue;
304
+ }
305
305
  else {
306
306
  return error(`Invalid segment type: ${typeof segment}`);
307
307
  }
@@ -372,13 +372,13 @@ export class FormService {
372
372
  isUnknown(control) {
373
373
  return control && control._unknown === true;
374
374
  }
375
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
376
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormService, providedIn: 'root' });
375
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
376
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormService, providedIn: 'root' });
377
377
  }
378
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormService, decorators: [{
378
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormService, decorators: [{
379
379
  type: Injectable,
380
380
  args: [{
381
381
  providedIn: 'root'
382
382
  }]
383
383
  }] });
384
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvZm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFtQixTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBcUIsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFvQnRHLENBQUM7QUFLRixNQUFNLE9BQU8sV0FBVztJQUV0QixHQUFHLENBQUMsT0FBd0IsRUFBRSxJQUFVLEVBQUUsS0FBVSxFQUFFLFdBQXlCLEVBQUUsWUFBMkI7UUFFMUcsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXRGLElBQUksQ0FBQyxjQUFjO1lBQ2pCLE9BQU8sS0FBSyxDQUFDO1FBRWYsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRWhELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEdBQUcsQ0FBQyxPQUF3QixFQUFFLElBQVUsRUFBRSxXQUF5QjtRQUNqRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDM0QsT0FBTyxNQUFNLEVBQUUsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBd0IsRUFBRSxJQUFVLEVBQUUsV0FBeUI7UUFDeEUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUF3QixF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ZSc7XHJcbmltcG9ydCB7IElFdmFsdWF0b3JQcm92aWRlciB9IGZyb20gJy4vcHJvZ3JhbW1hYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUNvbnRyb2xTdGF0dXMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5leHBvcnQgdHlwZSBQYXRoID0gc3RyaW5nIHwgbnVtYmVyIHwgQXJyYXk8c3RyaW5nIHwgbnVtYmVyPjtcclxuXHJcbnR5cGUgQ29udHJvbFR5cGUgPSAnYXJyYXknIHwgJ2dyb3VwJyB8ICdjb250cm9sJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGF0Y2hPcHRpb25zIHtcclxuICBlbWl0RXZlbnQ/OiBib29sZWFuO1xyXG4gIGVtaXRFcnJvcj86IGJvb2xlYW47XHJcbiAgZW1pdFdhcm4/OiBib29sZWFuO1xyXG4gIHZhbGlkYXRlVHlwZT86IGJvb2xlYW47XHJcbiAgZmFsbGJhY2tWYWx1ZT86IGFueTtcclxuICBzdHJpY3Q6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGF0aE9wdGlvbnMge1xyXG4gIGVtaXRFcnJvcj86IGJvb2xlYW47XHJcbiAgZW1pdFdhcm4/OiBib29sZWFuO1xyXG4gIGNyZWF0ZT86IGJvb2xlYW47XHJcbiAgZXhwZWN0ZWQ/OiBDb250cm9sVHlwZTtcclxufTtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1TZXJ2aWNlIGltcGxlbWVudHMgSUV2YWx1YXRvclByb3ZpZGVyIHtcclxuXHJcbiAgc2V0KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aDogUGF0aCwgdmFsdWU6IGFueSwgcGF0aE9wdGlvbnM/OiBQYXRoT3B0aW9ucywgcGF0Y2hPcHRpb25zPzogUGF0Y2hPcHRpb25zKTogYm9vbGVhbiB7XHJcblxyXG4gICAgY29uc3QgY3VycmVudENvbnRyb2wgPSB0aGlzLmFwcGx5UGF0aChjb250cm9sLCBwYXRoLCBwYXRoT3B0aW9ucyA/PyB7IGNyZWF0ZTogdHJ1ZSB9KTtcclxuXHJcbiAgICBpZiAoIWN1cnJlbnRDb250cm9sKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5wYXRjaChjdXJyZW50Q29udHJvbCwgdmFsdWUsIHBhdGNoT3B0aW9ucyk7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBnZXQoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoOiBQYXRoLCBwYXRoT3B0aW9ucz86IFBhdGhPcHRpb25zKTogYW55IHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0Q29udHJvbChjb250cm9sLCBwYXRoLCBwYXRoT3B0aW9ucyk7XHJcbiAgICByZXR1cm4gcmVzdWx0Py52YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldENvbnRyb2woY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoOiBQYXRoLCBwYXRoT3B0aW9ucz86IFBhdGhPcHRpb25zKTogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmFwcGx5UGF0aChjb250cm9sLCBwYXRoLCBwYXRoT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwcmVwZW5kKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aDogUGF0aCwgdmFsdWU6IGFueSwgcGF0aE9wdGlvbnM/OiBQYXRoT3B0aW9ucywgcGF0Y2hPcHRpb25zPzogUGF0Y2hPcHRpb25zKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmFwcGx5UGF0aChjb250cm9sLCBwYXRoLCBwYXRoT3B0aW9ucyA/PyB7IGV4cGVjdGVkOiBcImFycmF5XCIsIGNyZWF0ZTogdHJ1ZSB9KTtcclxuICAgIGlmIChmb3JtQXJyYXkgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0SW50b0FycmF5KGZvcm1BcnJheSwgMCwgdmFsdWUsIHBhdGNoT3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBhcHBlbmQoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoOiBQYXRoLCB2YWx1ZTogYW55LCBwYXRoT3B0aW9ucz86IFBhdGhPcHRpb25zLCBwYXRjaE9wdGlvbnM/OiBQYXRjaE9wdGlvbnMpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuYXBwbHlQYXRoKGNvbnRyb2wsIHBhdGgsIHBhdGhPcHRpb25zID8/IHsgZXhwZWN0ZWQ6IFwiYXJyYXlcIiwgY3JlYXRlOiB0cnVlIH0pO1xyXG4gICAgaWYgKGZvcm1BcnJheSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbnNlcnRJbnRvQXJyYXkoZm9ybUFycmF5LCBmb3JtQXJyYXkubGVuZ3RoLCB2YWx1ZSwgcGF0Y2hPcHRpb25zKTsgICAgICBcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGluc2VydChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhdGg6IFBhdGgsIGluZGV4OiBudW1iZXIsIHZhbHVlOiBhbnksIHBhdGhPcHRpb25zPzogUGF0aE9wdGlvbnMsIHBhdGNoT3B0aW9ucz86IFBhdGNoT3B0aW9ucyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5hcHBseVBhdGgoY29udHJvbCwgcGF0aCwgcGF0aE9wdGlvbnMgPz8geyBleHBlY3RlZDogXCJhcnJheVwiLCBjcmVhdGU6IHRydWUgfSk7XHJcbiAgICBpZiAoZm9ybUFycmF5IGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmluc2VydEludG9BcnJheShmb3JtQXJyYXksIGluZGV4LCB2YWx1ZSwgcGF0Y2hPcHRpb25zKTsgIFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aDogUGF0aCwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5hcHBseVBhdGgoY29udHJvbCwgcGF0aCk7XHJcbiAgICBpZiAoZm9ybUFycmF5IGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnJlbW92ZUZyb21BcnJheShmb3JtQXJyYXksIGluZGV4KTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIG1vdmVVcChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhdGg6IFBhdGgsIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuYXBwbHlQYXRoKGNvbnRyb2wsIHBhdGgpO1xyXG4gICAgaWYgKGZvcm1BcnJheSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICBpZiAoaW5kZXggPD0gMCB8fCBpbmRleCA+PSBmb3JtQXJyYXkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICBjb25zdCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgPSBmb3JtQXJyYXkuYXQoaW5kZXgpO1xyXG4gICAgICBmb3JtQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgICBmb3JtQXJyYXkuaW5zZXJ0KGluZGV4IC0gMSwgY29udHJvbCk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gICAgXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3ZlRG93bihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhdGg6IFBhdGgsIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuYXBwbHlQYXRoKGNvbnRyb2wsIHBhdGgpO1xyXG4gICAgaWYgKGZvcm1BcnJheSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGZvcm1BcnJheS5sZW5ndGggLSAxKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICBjb25zdCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgPSBmb3JtQXJyYXkuYXQoaW5kZXgpO1xyXG4gICAgICBmb3JtQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgICBmb3JtQXJyYXkuaW5zZXJ0KGluZGV4ICsgMSwgY29udHJvbCk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHN0YXR1cyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhdGg6IFBhdGgsIHBhdGhPcHRpb25zPzogUGF0aE9wdGlvbnMpIDogRm9ybUNvbnRyb2xTdGF0dXMgfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5hcHBseVBhdGgoY29udHJvbCwgcGF0aCwgcGF0aE9wdGlvbnMpO1xyXG4gICAgcmV0dXJuIHJlc3VsdD8uc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgZXJyb3JzKGNvbnRyb2xzOiBJdGVyYWJsZTxBYnN0cmFjdENvbnRyb2w+KSB7XHJcbiAgICBsZXQgZXJyb3JzID0gMDtcclxuICAgIGZvciAoY29uc3QgY29udHJvbCBvZiBjb250cm9scykge1xyXG4gICAgICBlcnJvcnMgKz0gdGhpcy5jb2xsZWN0RXJyb3JzKGNvbnRyb2wpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVycm9ycztcclxuICB9XHJcblxyXG4gIGdldEludmFsaWRDb250cm9scyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IHBhdGg6IHN0cmluZywgY29udHJvbDogQWJzdHJhY3RDb250cm9sIH1bXSB7XHJcbiAgICBjb25zdCBpbnZhbGlkOiB7IHBhdGg6IHN0cmluZywgY29udHJvbDogQWJzdHJhY3RDb250cm9sIH1bXSA9IFtdO1xyXG5cclxuICAgIGlmIChjb250cm9sLmRpc2FibGVkKVxyXG4gICAgICByZXR1cm4gaW52YWxpZDtcclxuXHJcbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCB8fCBjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gT2JqZWN0LnZhbHVlcyhjb250cm9sLmNvbnRyb2xzKTtcclxuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xyXG4gICAgICAgIGludmFsaWQucHVzaCguLi50aGlzLmdldEludmFsaWRDb250cm9scyhjaGlsZCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb250cm9sLmludmFsaWQpIHtcclxuICAgICAgaW52YWxpZC5wdXNoKHsgcGF0aDogdGhpcy5nZXRQYXRoKGNvbnRyb2wpLmpvaW4oXCIuXCIpLCBjb250cm9sIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpbnZhbGlkO1xyXG4gIH1cclxuXHJcbiAgcGF0Y2goXHJcbiAgICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHZhbHVlOiBhbnksIG9wdGlvbnM/OiBQYXRjaE9wdGlvbnMpOiB2b2lkIHtcclxuXHJcbiAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcclxuICAgICAgZW1pdEV2ZW50OiB0cnVlLFxyXG4gICAgICB2YWxpZGF0ZVR5cGU6IGZhbHNlLFxyXG4gICAgICBmYWxsYmFja1ZhbHVlOiBudWxsLFxyXG4gICAgICBzdHJpY3Q6IHRydWVcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgd2FybiA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKG9wdGlvbnM/LmVtaXRXYXJuKVxyXG4gICAgICAgIGNvbnNvbGUud2FybihgW3BhdGNoQ29udHJvbF0gJHttZXNzYWdlfWApXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGVycm9yID0gKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAob3B0aW9ucz8uZW1pdEVycm9yKVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgeyBlbWl0RXZlbnQsIHZhbGlkYXRlVHlwZSwgZmFsbGJhY2tWYWx1ZSwgc3RyaWN0IH1cclxuICAgICAgPSB7IC4uLmRlZmF1bHRPcHRpb25zLCAuLi5vcHRpb25zIH07XHJcblxyXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xyXG4gICAgICBpZiAodmFsaWRhdGVUeXBlICYmIHR5cGVvZiB2YWx1ZSAhPT0gdHlwZW9mIGNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgICB3YXJuKGBWYWx1ZSB0eXBlIG1pc21hdGNoOiBleHBlY3RlZCAke3R5cGVvZiBjb250cm9sLnZhbHVlfSwgYnV0IHJlY2VpdmVkICR7dHlwZW9mIHZhbHVlfWApO1xyXG5cclxuICAgICAgICBpZiAoZmFsbGJhY2tWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgY29udHJvbC5wYXRjaFZhbHVlKGZhbGxiYWNrVmFsdWUsIHsgZW1pdEV2ZW50IH0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlcnJvcignSW52YWxpZCB2YWx1ZSB0eXBlIGFuZCBubyBmYWxsYmFjayB2YWx1ZSBwcm92aWRlZC4nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29udHJvbC5wYXRjaFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudCB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcclxuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5hc09iamVjdCh2YWx1ZSk7XHJcbiAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRWYWx1ZSkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wuY29udHJvbHNba2V5XSkge1xyXG4gICAgICAgICAgdGhpcy5wYXRjaChjb250cm9sLmNvbnRyb2xzW2tleV0sIHZhbHVlW2tleV0sIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghc3RyaWN0KSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdDb250cm9sID0gdGhpcy5jcmVhdGVDb250cm9sRnJvbVZhbHVlKHZhbHVlW2tleV0pO1xyXG4gICAgICAgICAgdGhpcy5zZXRVbmtub3duKG5ld0NvbnRyb2wpO1xyXG4gICAgICAgICAgY29udHJvbC5hZGRDb250cm9sKGtleSwgbmV3Q29udHJvbCk7XHJcbiAgICAgICAgICB0aGlzLnBhdGNoKG5ld0NvbnRyb2wsIHZhbHVlW2tleV0sIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHdhcm4oYEtleSBcIiR7a2V5fVwiIG5vdCBmb3VuZCBpbiB0aGUgRm9ybUdyb3VwLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIE9iamVjdC5rZXlzKGNvbnRyb2wuY29udHJvbHMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIGlmICghKGtleSBpbiBjdXJyZW50VmFsdWUpKSB7XHJcbiAgICAgICAgICBjb25zdCBjaGlsZENvbnRyb2wgPSBjb250cm9sLmdldChrZXkpO1xyXG4gICAgICAgICAgaWYgKGNoaWxkQ29udHJvbCkge1xyXG4gICAgICAgICAgICBjaGlsZENvbnRyb2wucmVzZXQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pOyAgICAgXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuYXNBcnJheSh2YWx1ZSk7XHJcbiAgICAgIHdoaWxlIChjb250cm9sLmxlbmd0aCA8IGN1cnJlbnRWYWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBhbnlDb250cm9sID0gY29udHJvbCBhcyBhbnk7XHJcbiAgICAgICAgY29uc3QgaXRlbVRvQWRkID0gY3VycmVudFZhbHVlW2NvbnRyb2wubGVuZ3RoXTtcclxuICAgICAgICBpZiAodHlwZW9mIChhbnlDb250cm9sKS5hZGRJdGVtID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBhbnlDb250cm9sLmFkZEl0ZW0oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29udHJvbC5wdXNoKHRoaXMuY3JlYXRlQ29udHJvbEZyb21WYWx1ZShpdGVtVG9BZGQpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgd2hpbGUgKGNvbnRyb2wubGVuZ3RoID4gY3VycmVudFZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnRyb2wucmVtb3ZlQXQoY29udHJvbC5sZW5ndGggLSAxKTtcclxuICAgICAgfVxyXG4gICAgICBjdXJyZW50VmFsdWUuZm9yRWFjaCgoaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wYXRjaChjb250cm9sLmF0KGluZGV4KSwgaXRlbSwgb3B0aW9ucyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGVycm9yKCdVbnN1cHBvcnRlZCBBYnN0cmFjdENvbnRyb2wgdHlwZS4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFBhdGgoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogKHN0cmluZyB8IG51bWJlcilbXSB7XHJcbiAgICBjb25zdCBwYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0gW107XHJcbiAgICBsZXQgY3VycmVudDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCA9IGNvbnRyb2w7XHJcblxyXG4gICAgd2hpbGUgKGN1cnJlbnQ/LnBhcmVudCkge1xyXG4gICAgICBjb25zdCBwYXJlbnQ6IGFueSA9IGN1cnJlbnQucGFyZW50O1xyXG5cclxuICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gcGFyZW50LmNvbnRyb2xzLmluZGV4T2YoY3VycmVudCk7XHJcbiAgICAgICAgcGF0aC51bnNoaWZ0KGluZGV4KTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcclxuICAgICAgICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyhwYXJlbnQuY29udHJvbHMpLmZpbmQoayA9PiBwYXJlbnQuZ2V0KGspID09PSBjdXJyZW50KTtcclxuICAgICAgICBpZiAoa2V5KSB7XHJcbiAgICAgICAgICBwYXRoLnVuc2hpZnQoa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGN1cnJlbnQgPSBwYXJlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhdGg7XHJcbiAgfVxyXG5cclxuICBnZXRDb250ZXh0KGZvcm1Hcm91cDogYW55KTogUmVjb3JkPHN0cmluZywgYW55PiB7XHJcbiAgICBpZiAoIShmb3JtR3JvdXAgaW5zdGFuY2VvZiBGb3JtR3JvdXApKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNjb3BlIGlzIG5vdCBhIEZvcm1Hcm91cFwiKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhdGNoT3B0aW9uczogUGF0Y2hPcHRpb25zID0ge1xyXG4gICAgICBzdHJpY3Q6IGZhbHNlXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNldDogKHBhdGg6IFBhdGgsIHZhbHVlOiBhbnksIHBhdGhPcHRpb25zPzogUGF0aE9wdGlvbnMpOiBib29sZWFuID0+XHJcbiAgICAgICAgdGhpcy5zZXQoZm9ybUdyb3VwLCBwYXRoLCB2YWx1ZSwgcGF0aE9wdGlvbnMsIHBhdGNoT3B0aW9ucyksXHJcblxyXG4gICAgICBnZXQ6IChwYXRoOiBQYXRoLCBwYXRoT3B0aW9ucz86IFBhdGhPcHRpb25zKTogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkID0+XHJcbiAgICAgICAgdGhpcy5nZXQoZm9ybUdyb3VwLCBwYXRoLCBwYXRoT3B0aW9ucyksXHJcblxyXG4gICAgICBzdGF0dXM6IChwYXRoOiBQYXRoLCBwYXRoT3B0aW9ucz86IFBhdGhPcHRpb25zKTogRm9ybUNvbnRyb2xTdGF0dXMgfCB1bmRlZmluZWQgPT5cclxuICAgICAgICB0aGlzLnN0YXR1cyhmb3JtR3JvdXAsIHBhdGgsIHBhdGhPcHRpb25zKSxcclxuXHJcbiAgICAgIHByZXBlbmQ6IChwYXRoOiBQYXRoLCB2YWx1ZTogYW55LCBwYXRoT3B0aW9ucz86IFBhdGhPcHRpb25zKTogYm9vbGVhbiA9PlxyXG4gICAgICAgIHRoaXMucHJlcGVuZChmb3JtR3JvdXAsIHBhdGgsIHZhbHVlLCBwYXRoT3B0aW9ucywgcGF0Y2hPcHRpb25zKSxcclxuXHJcbiAgICAgIGFwcGVuZDogKHBhdGg6IFBhdGgsIHZhbHVlOiBhbnksIHBhdGhPcHRpb25zPzogUGF0aE9wdGlvbnMpOiBib29sZWFuID0+XHJcbiAgICAgICAgdGhpcy5hcHBlbmQoZm9ybUdyb3VwLCBwYXRoLCB2YWx1ZSwgcGF0aE9wdGlvbnMsIHBhdGNoT3B0aW9ucyksXHJcblxyXG4gICAgICBpbnNlcnQ6IChwYXRoOiBQYXRoLCBpbmRleDogbnVtYmVyLCB2YWx1ZTogYW55LCBwYXRoT3B0aW9ucz86IFBhdGhPcHRpb25zKTogYm9vbGVhbiA9PlxyXG4gICAgICAgIHRoaXMuaW5zZXJ0KGZvcm1Hcm91cCwgcGF0aCwgaW5kZXgsIHZhbHVlLCBwYXRoT3B0aW9ucywgcGF0Y2hPcHRpb25zKSxcclxuXHJcbiAgICAgIHJlbW92ZTogKHBhdGg6IFBhdGgsIGluZGV4OiBudW1iZXIpOiBib29sZWFuID0+XHJcbiAgICAgICAgdGhpcy5yZW1vdmUoZm9ybUdyb3VwLCBwYXRoLCBpbmRleCksXHJcblxyXG4gICAgICBtb3ZlVXA6IChwYXRoOiBQYXRoLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiA9PlxyXG4gICAgICAgIHRoaXMubW92ZVVwKGZvcm1Hcm91cCwgcGF0aCwgaW5kZXgpLFxyXG5cclxuICAgICAgbW92ZURvd246IChwYXRoOiBQYXRoLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiA9PlxyXG4gICAgICAgIHRoaXMubW92ZURvd24oZm9ybUdyb3VwLCBwYXRoLCBpbmRleClcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5UGF0aChcclxuICAgIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcclxuICAgIHBhdGg6IFBhdGgsXHJcbiAgICBvcHRpb25zPzogUGF0aE9wdGlvbnNcclxuICApOiBBYnN0cmFjdENvbnRyb2wgfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3Qgd2FybiA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKG9wdGlvbnM/LmVtaXRXYXJuKSBjb25zb2xlLndhcm4oYFthcHBseVBhdGhdICR7bWVzc2FnZX1gKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZXJyb3IgPSAobWVzc2FnZTogc3RyaW5nKTogbmV2ZXIgPT4ge1xyXG4gICAgICBpZiAob3B0aW9ucz8uZW1pdEVycm9yKSB0aHJvdyBuZXcgRXJyb3IoYFthcHBseVBhdGhdICR7bWVzc2FnZX1gKTtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBbYXBwbHlQYXRoXSAke21lc3NhZ2V9YCk7IC8vIGZhbGxiYWNrIGRlZmF1bHQgYmVoYXZpb3JcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgY3JlYXRlQ29udHJvbCA9ICh0eXBlOiBDb250cm9sVHlwZSk6IEFic3RyYWN0Q29udHJvbCA9PiB7XHJcbiAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ2FycmF5JzogcmV0dXJuIG5ldyBGb3JtQXJyYXkoW10pO1xyXG4gICAgICAgIGNhc2UgJ2dyb3VwJzogcmV0dXJuIG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgICAgIGNhc2UgJ2NvbnRyb2wnOiBkZWZhdWx0OiByZXR1cm4gbmV3IEZvcm1Db250cm9sKG51bGwpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG5vcm1hbGl6ZVBhdGggPSAocGF0aDogUGF0aCk6IChzdHJpbmcgfCBudW1iZXIpW10gPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhdGguc3BsaXQoJy4nKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRoKSkge1xyXG4gICAgICAgIHJldHVybiBwYXRoLnJlZHVjZTwoc3RyaW5nIHwgbnVtYmVyKVtdPigoYWNjLCBwYXJ0KSA9PiB7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIHBhcnQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGFjYy5wdXNoKC4uLnBhcnQuc3BsaXQoJy4nKSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhY2MucHVzaChwYXJ0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgfSwgW10pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBbcGF0aF07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNlZ21lbnRzID0gbm9ybWFsaXplUGF0aChwYXRoKTtcclxuICAgIGxldCBjdXJyZW50OiBBYnN0cmFjdENvbnRyb2wgfCBudWxsID0gY29udHJvbDtcclxuICAgIGNvbnN0IGNyZWF0ZVBhdGggPSBvcHRpb25zPy5jcmVhdGUgPz8gZmFsc2U7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBzZWdtZW50ID0gc2VnbWVudHNbaV07XHJcbiAgICAgIGNvbnN0IGlzTGVhZiA9IGkgPT09IHNlZ21lbnRzLmxlbmd0aCAtIDE7XHJcbiAgICAgIGNvbnN0IG5leHRUeXBlOiBDb250cm9sVHlwZSA9XHJcbiAgICAgICAgaXNMZWFmID8gKG9wdGlvbnM/LmV4cGVjdGVkID8/ICdjb250cm9sJylcclxuICAgICAgICAgIDogdHlwZW9mIHNlZ21lbnRzW2kgKyAxXSA9PT0gJ251bWJlcicgPyAnYXJyYXknXHJcbiAgICAgICAgICAgIDogJ2dyb3VwJztcclxuXHJcbiAgICAgIGNvbnN0IGdldEN1cnJlbnRQYXRoID0gKCkgPT4gc2VnbWVudHMuc2xpY2UoMCwgaSArIDEpLmpvaW4oJy4nKTtcclxuXHJcbiAgICAgIGlmICghY3VycmVudCkge1xyXG4gICAgICAgIHJldHVybiBlcnJvcihgQ29udHJvbCBpcyBudWxsIGF0IHNlZ21lbnQgXCIke2dldEN1cnJlbnRQYXRoKCl9XCJgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFzZWdtZW50KSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodHlwZW9mIHNlZ21lbnQgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgaWYgKCEoY3VycmVudCBpbnN0YW5jZW9mIEZvcm1BcnJheSkpIHtcclxuICAgICAgICAgIHJldHVybiBlcnJvcihgRXhwZWN0ZWQgRm9ybUFycmF5IGF0IHNlZ21lbnQgWyR7Z2V0Q3VycmVudFBhdGgoKX1dLCBnb3QgJHtjdXJyZW50LmNvbnN0cnVjdG9yLm5hbWV9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpbmRleCA9IHNlZ21lbnQ7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBjdXJyZW50Lmxlbmd0aCkge1xyXG4gICAgICAgICAgd2FybihgSW5kZXggJHtpbmRleH0gaXMgb3V0IG9mIGJvdW5kcyBhdCBwYXRoIFwiJHtnZXRDdXJyZW50UGF0aCgpfVwiIChsZW5ndGggPSAke2N1cnJlbnQubGVuZ3RofSlgKTtcclxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5hdChpbmRleCk7XHJcblxyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWdtZW50ID09PSAnc3RyaW5nJykge1xyXG5cclxuICAgICAgICBpZiAoc2VnbWVudCA9PT0gJ3BhcmVudCcpIHtcclxuICAgICAgICAgIGN1cnJlbnQgPSAoY3VycmVudCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkgJiYgY3VycmVudC5nZXQoc2VnbWVudClcclxuICAgICAgICAgICAgPyBjdXJyZW50LmdldChzZWdtZW50KVxyXG4gICAgICAgICAgICA6IGN1cnJlbnQucGFyZW50O1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2VnbWVudCA9PT0gJ3Jvb3QnKSB7XHJcbiAgICAgICAgICBjdXJyZW50ID0gKGN1cnJlbnQgaW5zdGFuY2VvZiBGb3JtR3JvdXAgJiYgY3VycmVudC5nZXQoc2VnbWVudCkpXHJcbiAgICAgICAgICAgID8gY3VycmVudC5nZXQoc2VnbWVudClcclxuICAgICAgICAgICAgOiBjdXJyZW50LnJvb3Q7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghKGN1cnJlbnQgaW5zdGFuY2VvZiBGb3JtR3JvdXApKSB7XHJcbiAgICAgICAgICByZXR1cm4gZXJyb3IoYEV4cGVjdGVkIEZvcm1Hcm91cCBhdCBzZWdtZW50IFwiJHtnZXRDdXJyZW50UGF0aCgpfVwiLCBnb3QgJHtjdXJyZW50LmNvbnN0cnVjdG9yLm5hbWV9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY3VycmVudC5nZXQoc2VnbWVudCkpIHtcclxuICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmdldChzZWdtZW50KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGNyZWF0ZVBhdGgpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q29udHJvbCA9IGNyZWF0ZUNvbnRyb2wobmV4dFR5cGUpO1xyXG4gICAgICAgICAgICBjdXJyZW50LmFkZENvbnRyb2woc2VnbWVudCwgbmV3Q29udHJvbCk7XHJcbiAgICAgICAgICAgIGN1cnJlbnQgPSBuZXdDb250cm9sO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgd2FybihgQ29udHJvbCB3aXRoIGtleSBcIiR7Z2V0Q3VycmVudFBhdGgoKX1cIiBub3QgZm91bmQgaW4gRm9ybUdyb3VwLmApO1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0gICAgICBcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yKGBJbnZhbGlkIHNlZ21lbnQgdHlwZTogJHt0eXBlb2Ygc2VnbWVudH1gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjdXJyZW50ID8/IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXNPYmplY3QodmFsdWU6IGFueSk6IG9iamVjdCB7XHJcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIGFueT47XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc0FycmF5KHZhbHVlOiBhbnkpOiBBcnJheTxhbnk+IHtcclxuICAgIGlmICh2YWx1ZSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluc2VydEludG9BcnJheShmb3JtQXJyYXk6IEZvcm1BcnJheSwgaW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSwgb3B0aW9ucz86IFBhdGNoT3B0aW9ucyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgaXRlbVRvQWRkID0gdGhpcy5jcmVhdGVBcnJheUl0ZW0oZm9ybUFycmF5KTtcclxuICAgIHRoaXMucGF0Y2goaXRlbVRvQWRkLCB2YWx1ZSwgb3B0aW9ucyk7XHJcbiAgICBmb3JtQXJyYXkuaW5zZXJ0KGluZGV4LCBpdGVtVG9BZGQpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZUZyb21BcnJheShmb3JtQXJyYXk6IEZvcm1BcnJheSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGluZGV4IDw9IDAgfHwgaW5kZXggPj0gZm9ybUFycmF5Lmxlbmd0aCkgZmFsc2U7XHJcbiAgICBmb3JtQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUFycmF5SXRlbShmb3JtQXJyYXk6IEZvcm1BcnJheSk6IEZvcm1Hcm91cFxyXG4gIHtcclxuICAgIGNvbnN0IGFueUNvbnRyb2wgPSBmb3JtQXJyYXkgYXMgYW55O1xyXG4gICAgY29uc3QgZm9ybUdyb3VwID0gKHR5cGVvZiAoYW55Q29udHJvbCkuY3JlYXRlSXRlbSA9PT0gJ2Z1bmN0aW9uJylcclxuICAgICAgPyBhbnlDb250cm9sLmNyZWF0ZUl0ZW0oKVxyXG4gICAgICA6IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgcmV0dXJuIGZvcm1Hcm91cDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ29udHJvbEZyb21WYWx1ZSh2YWx1ZTogYW55KTogQWJzdHJhY3RDb250cm9sIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgIHJldHVybiBuZXcgRm9ybUNvbnRyb2wodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBuZXcgRm9ybUFycmF5KHRoaXMuY3JlYXRlQ29udHJvbEZyb21BcnJheSh2YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVDb250cm9sRnJvbUFycmF5KGFycmF5OiBhbnlbXSk6IEFic3RyYWN0Q29udHJvbFtdIHtcclxuICAgIHJldHVybiBhcnJheS5tYXAoaXRlbSA9PiB0aGlzLmNyZWF0ZUNvbnRyb2xGcm9tVmFsdWUoaXRlbSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb2xsZWN0RXJyb3JzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IG51bWJlciB7XHJcblxyXG4gICAgbGV0IGVycm9ycyA9IDA7XHJcblxyXG4gICAgaWYgKGNvbnRyb2wuZGlzYWJsZWQpXHJcbiAgICAgIHJldHVybiBlcnJvcnM7XHJcblxyXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICBjb25zdCBjaGlsZHJlbiA9IE9iamVjdC52YWx1ZXMoY29udHJvbC5jb250cm9scyk7XHJcbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcclxuICAgICAgICBlcnJvcnMgKz0gdGhpcy5jb2xsZWN0RXJyb3JzKGNoaWxkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29udHJvbC5pbnZhbGlkKSB7XHJcbiAgICAgIGVycm9ycysrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBlcnJvcnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFVua25vd24oY29udHJvbDogYW55KSB7XHJcbiAgICBjb250cm9sLl91bmtub3duID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNVbmtub3duKGNvbnRyb2w6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGNvbnRyb2wgJiYgY29udHJvbC5fdW5rbm93biA9PT0gdHJ1ZTtcclxuICB9XHJcbn1cclxuXHJcbiJdfQ==
384
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvZm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFtQixTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBcUIsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFvQnRHLENBQUM7QUFLRixNQUFNLE9BQU8sV0FBVztJQUV0QixHQUFHLENBQUMsT0FBd0IsRUFBRSxJQUFVLEVBQUUsS0FBVSxFQUFFLFdBQXlCLEVBQUUsWUFBMkI7UUFFMUcsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXRGLElBQUksQ0FBQyxjQUFjO1lBQ2pCLE9BQU8sS0FBSyxDQUFDO1FBRWYsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRWhELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEdBQUcsQ0FBQyxPQUF3QixFQUFFLElBQVUsRUFBRSxXQUF5QjtRQUNqRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDM0QsT0FBTyxNQUFNLEVBQUUsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBd0IsRUFBRSxJQUFVLEVBQUUsV0FBeUI7UUFDeEUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUF3QixFQUFFLElBQVUsRUFBRSxLQUFVLEVBQUUsV0FBeUIsRUFBRSxZQUEyQjtRQUM5RyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNwRyxJQUFJLFNBQVMsWUFBWSxTQUFTLEVBQUUsQ0FBQztZQUNuQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUF3QixFQUFFLElBQVUsRUFBRSxLQUFVLEVBQUUsV0FBeUIsRUFBRSxZQUEyQjtRQUM3RyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNwRyxJQUFJLFNBQVMsWUFBWSxTQUFTLEVBQUUsQ0FBQztZQUNuQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2hGLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBd0IsRUFBRSxJQUFVLEVBQUUsS0FBYSxFQUFFLEtBQVUsRUFBRSxXQUF5QixFQUFFLFlBQTJCO1FBQzVILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLElBQUksU0FBUyxZQUFZLFNBQVMsRUFBRSxDQUFDO1lBQ25DLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQXdCLEVBQUUsSUFBVSxFQUFFLEtBQWE7UUFDeEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsSUFBSSxTQUFTLFlBQVksU0FBUyxFQUFFLENBQUM7WUFDbkMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQXdCLEVBQUUsSUFBVSxFQUFFLEtBQWE7UUFDeEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsSUFBSSxTQUFTLFlBQVksU0FBUyxFQUFFLENBQUM7WUFDbkMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxTQUFTLENBQUMsTUFBTTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUUxRCxNQUFNLE9BQU8sR0FBb0IsU0FBUyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyRCxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFCLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUVyQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxRQUFRLENBQUMsT0FBd0IsRUFBRSxJQUFVLEVBQUUsS0FBYTtRQUMxRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLFNBQVMsWUFBWSxTQUFTLEVBQUUsQ0FBQztZQUNuQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUU3RCxNQUFNLE9BQU8sR0FBb0IsU0FBUyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyRCxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFCLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUVyQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBd0IsRUFBRSxJQUFVLEVBQUUsV0FBeUI7UUFDcEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzFELE9BQU8sTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUN4QixDQUFDO0lBRUQsWUFBWSxDQUFDLFFBQW1DO1FBQzlDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7WUFDL0IsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxPQUF3QjtRQUN6QyxNQUFNLE9BQU8sR0FBaUQsRUFBRSxDQUFDO1FBRWpFLElBQUksT0FBTyxDQUFDLFFBQVE7WUFDbEIsT0FBTyxPQUFPLENBQUM7UUFFakIsSUFBSSxPQUFPLFlBQVksU0FBUyxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUUsQ0FBQztZQUNqRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqRCxLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDbEQsQ0FBQztRQUNILENBQUM7YUFDSSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN6QixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxLQUFLLENBQ0gsT0FBd0IsRUFBRSxLQUFVLEVBQUUsT0FBc0I7UUFFNUQsTUFBTSxjQUFjLEdBQUc7WUFDckIsU0FBUyxFQUFFLElBQUk7WUFDZixZQUFZLEVBQUUsS0FBSztZQUNuQixhQUFhLEVBQUUsSUFBSTtZQUNuQixNQUFNLEVBQUUsSUFBSTtTQUNiLENBQUM7UUFFRixNQUFNLElBQUksR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFO1lBQy9CLElBQUksT0FBTyxFQUFFLFFBQVE7Z0JBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFDN0MsQ0FBQyxDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsQ0FBQyxPQUFlLEVBQUUsRUFBRTtZQUNoQyxJQUFJLE9BQU8sRUFBRSxTQUFTO2dCQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQztRQUVGLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsR0FDcEQsRUFBRSxHQUFHLGNBQWMsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBRXRDLElBQUksT0FBTyxZQUFZLFdBQVcsRUFBRSxDQUFDO1lBQ25DLElBQUksWUFBWSxJQUFJLE9BQU8sS0FBSyxLQUFLLE9BQU8sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMxRCxJQUFJLENBQUMsaUNBQWlDLE9BQU8sT0FBTyxDQUFDLEtBQUssa0JBQWtCLE9BQU8sS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFFNUYsSUFBSSxhQUFhLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQzNCLE9BQU8sQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztvQkFDakQsT0FBTztnQkFDVCxDQUFDO2dCQUNELEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO2dCQUM1RCxPQUFPO1lBQ1QsQ0FBQztZQUNELE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUMzQyxDQUFDO2FBQ0ksSUFBSSxPQUFPLFlBQVksU0FBUyxFQUFFLENBQUM7WUFDdEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUN4QyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDekQsQ0FBQztxQkFDSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2pCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDM0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDNUIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDOUMsQ0FBQztxQkFDSSxDQUFDO29CQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsK0JBQStCLENBQUMsQ0FBQztnQkFDbkQsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDO29CQUMzQixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN0QyxJQUFJLFlBQVksRUFBRSxDQUFDO3dCQUNqQixZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ3ZCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUNJLElBQUksT0FBTyxZQUFZLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsT0FBTyxPQUFPLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDNUMsTUFBTSxVQUFVLEdBQUcsT0FBYyxDQUFDO2dCQUNsQyxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQy9DLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdkIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZELENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxPQUFPLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDNUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEtBQWEsRUFBRSxFQUFFO2dCQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQy9DLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUNJLENBQUM7WUFDSixLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUF3QjtRQUM5QixNQUFNLElBQUksR0FBd0IsRUFBRSxDQUFDO1FBQ3JDLElBQUksT0FBTyxHQUEyQixPQUFPLENBQUM7UUFFOUMsT0FBTyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDdkIsTUFBTSxNQUFNLEdBQVEsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUVuQyxJQUFJLE1BQU0sWUFBWSxTQUFTLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEIsQ0FBQztpQkFBTSxJQUFJLE1BQU0sWUFBWSxTQUFTLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQztnQkFDOUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDUixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNwQixDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDbkIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFVBQVUsQ0FBQyxTQUFjO1FBQ3ZCLElBQUksQ0FBQyxDQUFDLFNBQVMsWUFBWSxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsTUFBTSxZQUFZLEdBQWlCO1lBQ2pDLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQztRQUVGLE9BQU87WUFDTCxHQUFHLEVBQUUsQ0FBQyxJQUFVLEVBQUUsS0FBVSxFQUFFLFdBQXlCLEVBQVcsRUFBRSxDQUNsRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUM7WUFFN0QsR0FBRyxFQUFFLENBQUMsSUFBVSxFQUFFLFdBQXlCLEVBQStCLEVBQUUsQ0FDMUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQztZQUV4QyxNQUFNLEVBQUUsQ0FBQyxJQUFVLEVBQUUsV0FBeUIsRUFBaUMsRUFBRSxDQUMvRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDO1lBRTNDLE9BQU8sRUFBRSxDQUFDLElBQVUsRUFBRSxLQUFVLEVBQUUsV0FBeUIsRUFBVyxFQUFFLENBQ3RFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQztZQUVqRSxNQUFNLEVBQUUsQ0FBQyxJQUFVLEVBQUUsS0FBVSxFQUFFLFdBQXlCLEVBQVcsRUFBRSxDQUNyRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUM7WUFFaEUsTUFBTSxFQUFFLENBQUMsSUFBVSxFQUFFLEtBQWEsRUFBRSxLQUFVLEVBQUUsV0FBeUIsRUFBVyxFQUFFLENBQ3BGLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUM7WUFFdkUsTUFBTSxFQUFFLENBQUMsSUFBVSxFQUFFLEtBQWEsRUFBVyxFQUFFLENBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7WUFFckMsTUFBTSxFQUFFLENBQUMsSUFBVSxFQUFFLEtBQWEsRUFBVyxFQUFFLENBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7WUFFckMsUUFBUSxFQUFFLENBQUMsSUFBVSxFQUFFLEtBQWEsRUFBVyxFQUFFLENBQy9DLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7U0FDeEMsQ0FBQztJQUNKLENBQUM7SUFFTyxTQUFTLENBQ2YsT0FBd0IsRUFDeEIsSUFBVSxFQUNWLE9BQXFCO1FBRXJCLE1BQU0sSUFBSSxHQUFHLENBQUMsT0FBZSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxPQUFPLEVBQUUsUUFBUTtnQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUM7UUFFRixNQUFNLEtBQUssR0FBRyxDQUFDLE9BQWUsRUFBUyxFQUFFO1lBQ3ZDLElBQUksT0FBTyxFQUFFLFNBQVM7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDbEUsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyw0QkFBNEI7UUFDekUsQ0FBQyxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFpQixFQUFtQixFQUFFO1lBQzNELFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxPQUFPLENBQUMsQ0FBQyxPQUFPLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN2QyxLQUFLLE9BQU8sQ0FBQyxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZDLEtBQUssU0FBUyxDQUFDO2dCQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEQsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBVSxFQUF1QixFQUFFO1lBQ3hELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzdCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QixDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBc0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7b0JBQ3BELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQzdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQy9CLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNqQixDQUFDO29CQUNELE9BQU8sR0FBRyxDQUFDO2dCQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNULENBQUM7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUksT0FBTyxHQUEyQixPQUFPLENBQUM7UUFDOUMsTUFBTSxVQUFVLEdBQUcsT0FBTyxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUM7UUFFNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sUUFBUSxHQUNaLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxJQUFJLFNBQVMsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLE9BQU8sUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU87b0JBQzdDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFFaEIsTUFBTSxjQUFjLEdBQUcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVoRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxLQUFLLENBQUMsK0JBQStCLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNuRSxDQUFDO1lBRUQsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLENBQUMsT0FBTyxZQUFZLFNBQVMsQ0FBQyxFQUFFLENBQUM7b0JBQ3BDLE9BQU8sS0FBSyxDQUFDLGtDQUFrQyxjQUFjLEVBQUUsVUFBVSxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3ZHLENBQUM7Z0JBRUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDO2dCQUN0QixJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDekMsSUFBSSxDQUFDLFNBQVMsS0FBSyw4QkFBOEIsY0FBYyxFQUFFLGVBQWUsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7b0JBQ25HLE9BQU8sU0FBUyxDQUFDO2dCQUNuQixDQUFDO2dCQUVELE9BQU8sR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTlCLENBQUM7aUJBQU0sSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFFdkMsSUFBSSxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ3pCLE9BQU8sR0FBRyxDQUFDLE9BQU8sWUFBWSxTQUFTLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQzt3QkFDOUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO3dCQUN0QixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztvQkFDbkIsU0FBUztnQkFDWCxDQUFDO2dCQUVELElBQUksT0FBTyxLQUFLLE1BQU0sRUFBRSxDQUFDO29CQUN2QixPQUFPLEdBQUcsQ0FBQyxPQUFPLFlBQVksU0FBUyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQzlELENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQzt3QkFDdEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ2pCLFNBQVM7Z0JBQ1gsQ0FBQztnQkFFRCxJQUFJLENBQUMsQ0FBQyxPQUFPLFlBQVksU0FBUyxDQUFDLEVBQUUsQ0FBQztvQkFDcEMsT0FBTyxLQUFLLENBQUMsa0NBQWtDLGNBQWMsRUFBRSxVQUFVLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdkcsQ0FBQztnQkFFRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDekIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLFVBQVUsRUFBRSxDQUFDO3dCQUNmLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDM0MsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7d0JBQ3hDLE9BQU8sR0FBRyxVQUFVLENBQUM7b0JBQ3ZCLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixJQUFJLENBQUMscUJBQXFCLGNBQWMsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO3dCQUN2RSxPQUFPLFNBQVMsQ0FBQztvQkFDbkIsQ0FBQztnQkFDSCxDQUFDO1lBRUgsQ0FBQztpQkFDSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2hCLFNBQVM7WUFDYixDQUFDO2lCQUNJLENBQUM7Z0JBQ0osT0FBTyxLQUFLLENBQUMseUJBQXlCLE9BQU8sT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMxRCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sT0FBTyxJQUFJLFNBQVMsQ0FBQztJQUM5QixDQUFDO0lBRU8sUUFBUSxDQUFDLEtBQVU7UUFDekIsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hFLE9BQU8sS0FBNEIsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsT0FBTyxFQUFHLENBQUM7SUFDYixDQUFDO0lBRU8sT0FBTyxDQUFDLEtBQVU7UUFDeEIsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVPLGVBQWUsQ0FBQyxTQUFvQixFQUFFLEtBQWEsRUFBRSxLQUFVLEVBQUUsT0FBc0I7UUFDN0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sZUFBZSxDQUFDLFNBQW9CLEVBQUUsS0FBYTtRQUN6RCxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLFNBQVMsQ0FBQyxNQUFNO1lBQUUsS0FBSyxDQUFDO1FBQ25ELFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sZUFBZSxDQUFDLFNBQW9CO1FBRTFDLE1BQU0sVUFBVSxHQUFHLFNBQWdCLENBQUM7UUFDcEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQztZQUMvRCxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRTtZQUN6QixDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVPLHNCQUFzQixDQUFDLEtBQVU7UUFDdkMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2hELE9BQU8sSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELE9BQU8sSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVPLHNCQUFzQixDQUFDLEtBQVk7UUFDekMsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLGFBQWEsQ0FBQyxPQUF3QjtRQUU1QyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFZixJQUFJLE9BQU8sQ0FBQyxRQUFRO1lBQ2xCLE9BQU8sTUFBTSxDQUFDO1FBRWhCLElBQUksT0FBTyxZQUFZLFNBQVMsSUFBSSxPQUFPLFlBQVksU0FBUyxFQUFFLENBQUM7WUFDakUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakQsS0FBSyxNQUFNLEtBQUssSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUM7YUFDSSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN6QixNQUFNLEVBQUUsQ0FBQztRQUNYLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sVUFBVSxDQUFDLE9BQVk7UUFDN0IsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVPLFNBQVMsQ0FBQyxPQUFZO1FBQzVCLE9BQU8sT0FBTyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDO0lBQzlDLENBQUM7d0dBbmNVLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJRXZhbHVhdG9yUHJvdmlkZXIgfSBmcm9tICcuL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Db250cm9sU3RhdHVzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuZXhwb3J0IHR5cGUgUGF0aCA9IHN0cmluZyB8IG51bWJlciB8IEFycmF5PHN0cmluZyB8IG51bWJlcj47XHJcblxyXG50eXBlIENvbnRyb2xUeXBlID0gJ2FycmF5JyB8ICdncm91cCcgfCAnY29udHJvbCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhdGNoT3B0aW9ucyB7XHJcbiAgZW1pdEV2ZW50PzogYm9vbGVhbjtcclxuICBlbWl0RXJyb3I/OiBib29sZWFuO1xyXG4gIGVtaXRXYXJuPzogYm9vbGVhbjtcclxuICB2YWxpZGF0ZVR5cGU/OiBib29sZWFuO1xyXG4gIGZhbGxiYWNrVmFsdWU/OiBhbnk7XHJcbiAgc3RyaWN0OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhdGhPcHRpb25zIHtcclxuICBlbWl0RXJyb3I/OiBib29sZWFuO1xyXG4gIGVtaXRXYXJuPzogYm9vbGVhbjtcclxuICBjcmVhdGU/OiBib29sZWFuO1xyXG4gIGV4cGVjdGVkPzogQ29udHJvbFR5cGU7XHJcbn07XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtU2VydmljZSBpbXBsZW1lbnRzIElFdmFsdWF0b3JQcm92aWRlciB7XHJcblxyXG4gIHNldChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhdGg6IFBhdGgsIHZhbHVlOiBhbnksIHBhdGhPcHRpb25zPzogUGF0aE9wdGlvbnMsIHBhdGNoT3B0aW9ucz86IFBhdGNoT3B0aW9ucyk6IGJvb2xlYW4ge1xyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRDb250cm9sID0gdGhpcy5hcHBseVBhdGgoY29udHJvbCwgcGF0aCwgcGF0aE9wdGlvbnMgPz8geyBjcmVhdGU6IHRydWUgfSk7XHJcblxyXG4gICAgaWYgKCFjdXJyZW50Q29udHJvbClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIHRoaXMucGF0Y2goY3VycmVudENvbnRyb2wsIHZhbHVlLCBwYXRjaE9wdGlvbnMpO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aDogUGF0aCwgcGF0aE9wdGlvbnM/OiBQYXRoT3B0aW9ucyk6IGFueSB7XHJcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldENvbnRyb2woY29udHJvbCwgcGF0aCwgcGF0aE9wdGlvbnMpO1xyXG4gICAgcmV0dXJuIHJlc3VsdD8udmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXRDb250cm9sKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aDogUGF0aCwgcGF0aE9wdGlvbnM/OiBQYXRoT3B0aW9ucyk6IEFic3RyYWN0Q29udHJvbCB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5hcHBseVBhdGgoY29udHJvbCwgcGF0aCwgcGF0aE9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcHJlcGVuZChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhdGg6IFBhdGgsIHZhbHVlOiBhbnksIHBhdGhPcHRpb25zPzogUGF0aE9wdGlvbnMsIHBhdGNoT3B0aW9ucz86IFBhdGNoT3B0aW9ucyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5hcHBseVBhdGgoY29udHJvbCwgcGF0aCwgcGF0aE9wdGlvbnMgPz8geyBleHBlY3RlZDogXCJhcnJheVwiLCBjcmVhdGU6IHRydWUgfSk7XHJcbiAgICBpZiAoZm9ybUFycmF5IGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmluc2VydEludG9BcnJheShmb3JtQXJyYXksIDAsIHZhbHVlLCBwYXRjaE9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgYXBwZW5kKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aDogUGF0aCwgdmFsdWU6IGFueSwgcGF0aE9wdGlvbnM/OiBQYXRoT3B0aW9ucywgcGF0Y2hPcHRpb25zPzogUGF0Y2hPcHRpb25zKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmFwcGx5UGF0aChjb250cm9sLCBwYXRoLCBwYXRoT3B0aW9ucyA/PyB7IGV4cGVjdGVkOiBcImFycmF5XCIsIGNyZWF0ZTogdHJ1ZSB9KTtcclxuICAgIGlmIChmb3JtQXJyYXkgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0SW50b0FycmF5KGZvcm1BcnJheSwgZm9ybUFycmF5Lmxlbmd0aCwgdmFsdWUsIHBhdGNoT3B0aW9ucyk7ICAgICAgXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpbnNlcnQoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoOiBQYXRoLCBpbmRleDogbnVtYmVyLCB2YWx1ZTogYW55LCBwYXRoT3B0aW9ucz86IFBhdGhPcHRpb25zLCBwYXRjaE9wdGlvbnM/OiBQYXRjaE9wdGlvbnMpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuYXBwbHlQYXRoKGNvbnRyb2wsIHBhdGgsIHBhdGhPcHRpb25zID8/IHsgZXhwZWN0ZWQ6IFwiYXJyYXlcIiwgY3JlYXRlOiB0cnVlIH0pO1xyXG4gICAgaWYgKGZvcm1BcnJheSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbnNlcnRJbnRvQXJyYXkoZm9ybUFycmF5LCBpbmRleCwgdmFsdWUsIHBhdGNoT3B0aW9ucyk7ICBcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHJlbW92ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhdGg6IFBhdGgsIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuYXBwbHlQYXRoKGNvbnRyb2wsIHBhdGgpO1xyXG4gICAgaWYgKGZvcm1BcnJheSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5yZW1vdmVGcm9tQXJyYXkoZm9ybUFycmF5LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3ZlVXAoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoOiBQYXRoLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmFwcGx5UGF0aChjb250cm9sLCBwYXRoKTtcclxuICAgIGlmIChmb3JtQXJyYXkgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgaWYgKGluZGV4IDw9IDAgfHwgaW5kZXggPj0gZm9ybUFycmF5Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgY29uc3QgY29udHJvbDogQWJzdHJhY3RDb250cm9sID0gZm9ybUFycmF5LmF0KGluZGV4KTtcclxuICAgICAgZm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICAgICAgZm9ybUFycmF5Lmluc2VydChpbmRleCAtIDEsIGNvbnRyb2wpO1xyXG5cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9ICAgIFxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW92ZURvd24oY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoOiBQYXRoLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmFwcGx5UGF0aChjb250cm9sLCBwYXRoKTtcclxuICAgIGlmIChmb3JtQXJyYXkgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBmb3JtQXJyYXkubGVuZ3RoIC0gMSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgY29uc3QgY29udHJvbDogQWJzdHJhY3RDb250cm9sID0gZm9ybUFycmF5LmF0KGluZGV4KTtcclxuICAgICAgZm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICAgICAgZm9ybUFycmF5Lmluc2VydChpbmRleCArIDEsIGNvbnRyb2wpO1xyXG5cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzdGF0dXMoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoOiBQYXRoLCBwYXRoT3B0aW9ucz86IFBhdGhPcHRpb25zKSA6IEZvcm1Db250cm9sU3RhdHVzIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuYXBwbHlQYXRoKGNvbnRyb2wsIHBhdGgsIHBhdGhPcHRpb25zKTtcclxuICAgIHJldHVybiByZXN1bHQ/LnN0YXR1cztcclxuICB9XHJcblxyXG4gIGNvdW50SW52YWxpZChjb250cm9sczogSXRlcmFibGU8QWJzdHJhY3RDb250cm9sPikge1xyXG4gICAgbGV0IGVycm9ycyA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgY29udHJvbHMpIHtcclxuICAgICAgZXJyb3JzICs9IHRoaXMuY29sbGVjdEVycm9ycyhjb250cm9sKTtcclxuICAgIH1cclxuICAgIHJldHVybiBlcnJvcnM7XHJcbiAgfVxyXG5cclxuICBnZXRJbnZhbGlkQ29udHJvbHMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBwYXRoOiBzdHJpbmcsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB9W10ge1xyXG4gICAgY29uc3QgaW52YWxpZDogeyBwYXRoOiBzdHJpbmcsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB9W10gPSBbXTtcclxuXHJcbiAgICBpZiAoY29udHJvbC5kaXNhYmxlZClcclxuICAgICAgcmV0dXJuIGludmFsaWQ7XHJcblxyXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICBjb25zdCBjaGlsZHJlbiA9IE9iamVjdC52YWx1ZXMoY29udHJvbC5jb250cm9scyk7XHJcbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcclxuICAgICAgICBpbnZhbGlkLnB1c2goLi4udGhpcy5nZXRJbnZhbGlkQ29udHJvbHMoY2hpbGQpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29udHJvbC5pbnZhbGlkKSB7XHJcbiAgICAgIGludmFsaWQucHVzaCh7IHBhdGg6IHRoaXMuZ2V0UGF0aChjb250cm9sKS5qb2luKFwiLlwiKSwgY29udHJvbCB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaW52YWxpZDtcclxuICB9XHJcblxyXG4gIHBhdGNoKFxyXG4gICAgY29udHJvbDogQWJzdHJhY3RDb250cm9sLCB2YWx1ZTogYW55LCBvcHRpb25zPzogUGF0Y2hPcHRpb25zKTogdm9pZCB7XHJcblxyXG4gICAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XHJcbiAgICAgIGVtaXRFdmVudDogdHJ1ZSxcclxuICAgICAgdmFsaWRhdGVUeXBlOiBmYWxzZSxcclxuICAgICAgZmFsbGJhY2tWYWx1ZTogbnVsbCxcclxuICAgICAgc3RyaWN0OiB0cnVlXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHdhcm4gPSAobWVzc2FnZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmIChvcHRpb25zPy5lbWl0V2FybilcclxuICAgICAgICBjb25zb2xlLndhcm4oYFtwYXRjaENvbnRyb2xdICR7bWVzc2FnZX1gKVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBlcnJvciA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKG9wdGlvbnM/LmVtaXRFcnJvcilcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHsgZW1pdEV2ZW50LCB2YWxpZGF0ZVR5cGUsIGZhbGxiYWNrVmFsdWUsIHN0cmljdCB9XHJcbiAgICAgID0geyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9O1xyXG5cclxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcclxuICAgICAgaWYgKHZhbGlkYXRlVHlwZSAmJiB0eXBlb2YgdmFsdWUgIT09IHR5cGVvZiBjb250cm9sLnZhbHVlKSB7XHJcbiAgICAgICAgd2FybihgVmFsdWUgdHlwZSBtaXNtYXRjaDogZXhwZWN0ZWQgJHt0eXBlb2YgY29udHJvbC52YWx1ZX0sIGJ1dCByZWNlaXZlZCAke3R5cGVvZiB2YWx1ZX1gKTtcclxuXHJcbiAgICAgICAgaWYgKGZhbGxiYWNrVmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgIGNvbnRyb2wucGF0Y2hWYWx1ZShmYWxsYmFja1ZhbHVlLCB7IGVtaXRFdmVudCB9KTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgdmFsdWUgdHlwZSBhbmQgbm8gZmFsbGJhY2sgdmFsdWUgcHJvdmlkZWQuJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnRyb2wucGF0Y2hWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuYXNPYmplY3QodmFsdWUpO1xyXG4gICAgICBPYmplY3Qua2V5cyhjdXJyZW50VmFsdWUpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIGlmIChjb250cm9sLmNvbnRyb2xzW2tleV0pIHtcclxuICAgICAgICAgIHRoaXMucGF0Y2goY29udHJvbC5jb250cm9sc1trZXldLCB2YWx1ZVtrZXldLCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIXN0cmljdCkge1xyXG4gICAgICAgICAgY29uc3QgbmV3Q29udHJvbCA9IHRoaXMuY3JlYXRlQ29udHJvbEZyb21WYWx1ZSh2YWx1ZVtrZXldKTtcclxuICAgICAgICAgIHRoaXMuc2V0VW5rbm93bihuZXdDb250cm9sKTtcclxuICAgICAgICAgIGNvbnRyb2wuYWRkQ29udHJvbChrZXksIG5ld0NvbnRyb2wpO1xyXG4gICAgICAgICAgdGhpcy5wYXRjaChuZXdDb250cm9sLCB2YWx1ZVtrZXldLCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB3YXJuKGBLZXkgXCIke2tleX1cIiBub3QgZm91bmQgaW4gdGhlIEZvcm1Hcm91cC5gKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBPYmplY3Qua2V5cyhjb250cm9sLmNvbnRyb2xzKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICBpZiAoIShrZXkgaW4gY3VycmVudFZhbHVlKSkge1xyXG4gICAgICAgICAgY29uc3QgY2hpbGRDb250cm9sID0gY29udHJvbC5nZXQoa2V5KTtcclxuICAgICAgICAgIGlmIChjaGlsZENvbnRyb2wpIHtcclxuICAgICAgICAgICAgY2hpbGRDb250cm9sLnJlc2V0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTsgICAgIFxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmFzQXJyYXkodmFsdWUpO1xyXG4gICAgICB3aGlsZSAoY29udHJvbC5sZW5ndGggPCBjdXJyZW50VmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgYW55Q29udHJvbCA9IGNvbnRyb2wgYXMgYW55O1xyXG4gICAgICAgIGNvbnN0IGl0ZW1Ub0FkZCA9IGN1cnJlbnRWYWx1ZVtjb250cm9sLmxlbmd0aF07XHJcbiAgICAgICAgaWYgKHR5cGVvZiAoYW55Q29udHJvbCkuYWRkSXRlbSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgYW55Q29udHJvbC5hZGRJdGVtKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnRyb2wucHVzaCh0aGlzLmNyZWF0ZUNvbnRyb2xGcm9tVmFsdWUoaXRlbVRvQWRkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHdoaWxlIChjb250cm9sLmxlbmd0aCA+IGN1cnJlbnRWYWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICBjb250cm9sLnJlbW92ZUF0KGNvbnRyb2wubGVuZ3RoIC0gMSk7XHJcbiAgICAgIH1cclxuICAgICAgY3VycmVudFZhbHVlLmZvckVhY2goKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIHRoaXMucGF0Y2goY29udHJvbC5hdChpbmRleCksIGl0ZW0sIG9wdGlvbnMpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBlcnJvcignVW5zdXBwb3J0ZWQgQWJzdHJhY3RDb250cm9sIHR5cGUuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQYXRoKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IChzdHJpbmcgfCBudW1iZXIpW10ge1xyXG4gICAgY29uc3QgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXSA9IFtdO1xyXG4gICAgbGV0IGN1cnJlbnQ6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgPSBjb250cm9sO1xyXG5cclxuICAgIHdoaWxlIChjdXJyZW50Py5wYXJlbnQpIHtcclxuICAgICAgY29uc3QgcGFyZW50OiBhbnkgPSBjdXJyZW50LnBhcmVudDtcclxuXHJcbiAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5jb250cm9scy5pbmRleE9mKGN1cnJlbnQpO1xyXG4gICAgICAgIHBhdGgudW5zaGlmdChpbmRleCk7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMocGFyZW50LmNvbnRyb2xzKS5maW5kKGsgPT4gcGFyZW50LmdldChrKSA9PT0gY3VycmVudCk7XHJcbiAgICAgICAgaWYgKGtleSkge1xyXG4gICAgICAgICAgcGF0aC51bnNoaWZ0KGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjdXJyZW50ID0gcGFyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXRoO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGV4dChmb3JtR3JvdXA6IGFueSk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG4gICAgaWYgKCEoZm9ybUdyb3VwIGluc3RhbmNlb2YgRm9ybUdyb3VwKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTY29wZSBpcyBub3QgYSBGb3JtR3JvdXBcIik7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYXRjaE9wdGlvbnM6IFBhdGNoT3B0aW9ucyA9IHtcclxuICAgICAgc3RyaWN0OiBmYWxzZVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzZXQ6IChwYXRoOiBQYXRoLCB2YWx1ZTogYW55LCBwYXRoT3B0aW9ucz86IFBhdGhPcHRpb25zKTogYm9vbGVhbiA9PlxyXG4gICAgICAgIHRoaXMuc2V0KGZvcm1Hcm91cCwgcGF0aCwgdmFsdWUsIHBhdGhPcHRpb25zLCBwYXRjaE9wdGlvbnMpLFxyXG5cclxuICAgICAgZ2V0OiAocGF0aDogUGF0aCwgcGF0aE9wdGlvbnM/OiBQYXRoT3B0aW9ucyk6IEFic3RyYWN0Q29udHJvbCB8IHVuZGVmaW5lZCA9PlxyXG4gICAgICAgIHRoaXMuZ2V0KGZvcm1Hcm91cCwgcGF0aCwgcGF0aE9wdGlvbnMpLFxyXG5cclxuICAgICAgc3RhdHVzOiAocGF0aDogUGF0aCwgcGF0aE9wdGlvbnM/OiBQYXRoT3B0aW9ucyk6IEZvcm1Db250cm9sU3RhdHVzIHwgdW5kZWZpbmVkID0+XHJcbiAgICAgICAgdGhpcy5zdGF0dXMoZm9ybUdyb3VwLCBwYXRoLCBwYXRoT3B0aW9ucyksXHJcblxyXG4gICAgICBwcmVwZW5kOiAocGF0aDogUGF0aCwgdmFsdWU6IGFueSwgcGF0aE9wdGlvbnM/OiBQYXRoT3B0aW9ucyk6IGJvb2xlYW4gPT5cclxuICAgICAgICB0aGlzLnByZXBlbmQoZm9ybUdyb3VwLCBwYXRoLCB2YWx1ZSwgcGF0aE9wdGlvbnMsIHBhdGNoT3B0aW9ucyksXHJcblxyXG4gICAgICBhcHBlbmQ6IChwYXRoOiBQYXRoLCB2YWx1ZTogYW55LCBwYXRoT3B0aW9ucz86IFBhdGhPcHRpb25zKTogYm9vbGVhbiA9PlxyXG4gICAgICAgIHRoaXMuYXBwZW5kKGZvcm1Hcm91cCwgcGF0aCwgdmFsdWUsIHBhdGhPcHRpb25zLCBwYXRjaE9wdGlvbnMpLFxyXG5cclxuICAgICAgaW5zZXJ0OiAocGF0aDogUGF0aCwgaW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSwgcGF0aE9wdGlvbnM/OiBQYXRoT3B0aW9ucyk6IGJvb2xlYW4gPT5cclxuICAgICAgICB0aGlzLmluc2VydChmb3JtR3JvdXAsIHBhdGgsIGluZGV4LCB2YWx1ZSwgcGF0aE9wdGlvbnMsIHBhdGNoT3B0aW9ucyksXHJcblxyXG4gICAgICByZW1vdmU6IChwYXRoOiBQYXRoLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiA9PlxyXG4gICAgICAgIHRoaXMucmVtb3ZlKGZvcm1Hcm91cCwgcGF0aCwgaW5kZXgpLFxyXG5cclxuICAgICAgbW92ZVVwOiAocGF0aDogUGF0aCwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4gPT5cclxuICAgICAgICB0aGlzLm1vdmVVcChmb3JtR3JvdXAsIHBhdGgsIGluZGV4KSxcclxuXHJcbiAgICAgIG1vdmVEb3duOiAocGF0aDogUGF0aCwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4gPT5cclxuICAgICAgICB0aGlzLm1vdmVEb3duKGZvcm1Hcm91cCwgcGF0aCwgaW5kZXgpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseVBhdGgoXHJcbiAgICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXHJcbiAgICBwYXRoOiBQYXRoLFxyXG4gICAgb3B0aW9ucz86IFBhdGhPcHRpb25zXHJcbiAgKTogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IHdhcm4gPSAobWVzc2FnZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmIChvcHRpb25zPy5lbWl0V2FybikgY29uc29sZS53YXJuKGBbYXBwbHlQYXRoXSAke21lc3NhZ2V9YCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGVycm9yID0gKG1lc3NhZ2U6IHN0cmluZyk6IG5ldmVyID0+IHtcclxuICAgICAgaWYgKG9wdGlvbnM/LmVtaXRFcnJvcikgdGhyb3cgbmV3IEVycm9yKGBbYXBwbHlQYXRoXSAke21lc3NhZ2V9YCk7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgW2FwcGx5UGF0aF0gJHttZXNzYWdlfWApOyAvLyBmYWxsYmFjayBkZWZhdWx0IGJlaGF2aW9yXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGNyZWF0ZUNvbnRyb2wgPSAodHlwZTogQ29udHJvbFR5cGUpOiBBYnN0cmFjdENvbnRyb2wgPT4ge1xyXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlICdhcnJheSc6IHJldHVybiBuZXcgRm9ybUFycmF5KFtdKTtcclxuICAgICAgICBjYXNlICdncm91cCc6IHJldHVybiBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgICBjYXNlICdjb250cm9sJzogZGVmYXVsdDogcmV0dXJuIG5ldyBGb3JtQ29udHJvbChudWxsKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBub3JtYWxpemVQYXRoID0gKHBhdGg6IFBhdGgpOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0+IHtcclxuICAgICAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHJldHVybiBwYXRoLnNwbGl0KCcuJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gcGF0aC5yZWR1Y2U8KHN0cmluZyB8IG51bWJlcilbXT4oKGFjYywgcGFydCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBhY2MucHVzaCguLi5wYXJ0LnNwbGl0KCcuJykpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYWNjLnB1c2gocGFydCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgIH0sIFtdKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gW3BhdGhdO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzZWdtZW50cyA9IG5vcm1hbGl6ZVBhdGgocGF0aCk7XHJcbiAgICBsZXQgY3VycmVudDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCA9IGNvbnRyb2w7XHJcbiAgICBjb25zdCBjcmVhdGVQYXRoID0gb3B0aW9ucz8uY3JlYXRlID8/IGZhbHNlO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3Qgc2VnbWVudCA9IHNlZ21lbnRzW2ldO1xyXG4gICAgICBjb25zdCBpc0xlYWYgPSBpID09PSBzZWdtZW50cy5sZW5ndGggLSAxO1xyXG4gICAgICBjb25zdCBuZXh0VHlwZTogQ29udHJvbFR5cGUgPVxyXG4gICAgICAgIGlzTGVhZiA/IChvcHRpb25zPy5leHBlY3RlZCA/PyAnY29udHJvbCcpXHJcbiAgICAgICAgICA6IHR5cGVvZiBzZWdtZW50c1tpICsgMV0gPT09ICdudW1iZXInID8gJ2FycmF5J1xyXG4gICAgICAgICAgICA6ICdncm91cCc7XHJcblxyXG4gICAgICBjb25zdCBnZXRDdXJyZW50UGF0aCA9ICgpID0+IHNlZ21lbnRzLnNsaWNlKDAsIGkgKyAxKS5qb2luKCcuJyk7XHJcblxyXG4gICAgICBpZiAoIWN1cnJlbnQpIHtcclxuICAgICAgICByZXR1cm4gZXJyb3IoYENvbnRyb2wgaXMgbnVsbCBhdCBzZWdtZW50IFwiJHtnZXRDdXJyZW50UGF0aCgpfVwiYCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygc2VnbWVudCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICBpZiAoIShjdXJyZW50IGluc3RhbmNlb2YgRm9ybUFycmF5KSkge1xyXG4gICAgICAgICAgcmV0dXJuIGVycm9yKGBFeHBlY3RlZCBGb3JtQXJyYXkgYXQgc2VnbWVudCBbJHtnZXRDdXJyZW50UGF0aCgpfV0sIGdvdCAke2N1cnJlbnQuY29uc3RydWN0b3IubmFtZX1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gc2VnbWVudDtcclxuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGN1cnJlbnQubGVuZ3RoKSB7XHJcbiAgICAgICAgICB3YXJuKGBJbmRleCAke2luZGV4fSBpcyBvdXQgb2YgYm91bmRzIGF0IHBhdGggXCIke2dldEN1cnJlbnRQYXRoKCl9XCIgKGxlbmd0aCA9ICR7Y3VycmVudC5sZW5ndGh9KWApO1xyXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmF0KGluZGV4KTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNlZ21lbnQgPT09ICdzdHJpbmcnKSB7XHJcblxyXG4gICAgICAgIGlmIChzZWdtZW50ID09PSAncGFyZW50Jykge1xyXG4gICAgICAgICAgY3VycmVudCA9IChjdXJyZW50IGluc3RhbmNlb2YgRm9ybUdyb3VwKSAmJiBjdXJyZW50LmdldChzZWdtZW50KVxyXG4gICAgICAgICAgICA/IGN1cnJlbnQuZ2V0KHNlZ21lbnQpXHJcbiAgICAgICAgICAgIDogY3VycmVudC5wYXJlbnQ7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZWdtZW50ID09PSAncm9vdCcpIHtcclxuICAgICAgICAgIGN1cnJlbnQgPSAoY3VycmVudCBpbnN0YW5jZW9mIEZvcm1Hcm91cCAmJiBjdXJyZW50LmdldChzZWdtZW50KSlcclxuICAgICAgICAgICAgPyBjdXJyZW50LmdldChzZWdtZW50KVxyXG4gICAgICAgICAgICA6IGN1cnJlbnQucm9vdDtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCEoY3VycmVudCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkpIHtcclxuICAgICAgICAgIHJldHVybiBlcnJvcihgRXhwZWN0ZWQgRm9ybUdyb3VwIGF0IHNlZ21lbnQgXCIke2dldEN1cnJlbnRQYXRoKCl9XCIsIGdvdCAke2N1cnJlbnQuY29uc3RydWN0b3IubmFtZX1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjdXJyZW50LmdldChzZWdtZW50KSkge1xyXG4gICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuZ2V0KHNlZ21lbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoY3JlYXRlUGF0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDb250cm9sID0gY3JlYXRlQ29udHJvbChuZXh0VHlwZSk7XHJcbiAgICAgICAgICAgIGN1cnJlbnQuYWRkQ29udHJvbChzZWdtZW50LCBuZXdDb250cm9sKTtcclxuICAgICAgICAgICAgY3VycmVudCA9IG5ld0NvbnRyb2w7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB3YXJuKGBDb250cm9sIHdpdGgga2V5IFwiJHtnZXRDdXJyZW50UGF0aCgpfVwiIG5vdCBmb3VuZCBpbiBGb3JtR3JvdXAuYCk7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICghc2VnbWVudCkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yKGBJbnZhbGlkIHNlZ21lbnQgdHlwZTogJHt0eXBlb2Ygc2VnbWVudH1gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjdXJyZW50ID8/IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXNPYmplY3QodmFsdWU6IGFueSk6IG9iamVjdCB7XHJcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIGFueT47XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc0FycmF5KHZhbHVlOiBhbnkpOiBBcnJheTxhbnk+IHtcclxuICAgIGlmICh2YWx1ZSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluc2VydEludG9BcnJheShmb3JtQXJyYXk6IEZvcm1BcnJheSwgaW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSwgb3B0aW9ucz86IFBhdGNoT3B0aW9ucyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgaXRlbVRvQWRkID0gdGhpcy5jcmVhdGVBcnJheUl0ZW0oZm9ybUFycmF5KTtcclxuICAgIHRoaXMucGF0Y2goaXRlbVRvQWRkLCB2YWx1ZSwgb3B0aW9ucyk7XHJcbiAgICBmb3JtQXJyYXkuaW5zZXJ0KGluZGV4LCBpdGVtVG9BZGQpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZUZyb21BcnJheShmb3JtQXJyYXk6IEZvcm1BcnJheSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGluZGV4IDw9IDAgfHwgaW5kZXggPj0gZm9ybUFycmF5Lmxlbmd0aCkgZmFsc2U7XHJcbiAgICBmb3JtQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUFycmF5SXRlbShmb3JtQXJyYXk6IEZvcm1BcnJheSk6IEZvcm1Hcm91cFxyXG4gIHtcclxuICAgIGNvbnN0IGFueUNvbnRyb2wgPSBmb3JtQXJyYXkgYXMgYW55O1xyXG4gICAgY29uc3QgZm9ybUdyb3VwID0gKHR5cGVvZiAoYW55Q29udHJvbCkuY3JlYXRlSXRlbSA9PT0gJ2Z1bmN0aW9uJylcclxuICAgICAgPyBhbnlDb250cm9sLmNyZWF0ZUl0ZW0oKVxyXG4gICAgICA6IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgcmV0dXJuIGZvcm1Hcm91cDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ29udHJvbEZyb21WYWx1ZSh2YWx1ZTogYW55KTogQWJzdHJhY3RDb250cm9sIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgIHJldHVybiBuZXcgRm9ybUNvbnRyb2wodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBuZXcgRm9ybUFycmF5KHRoaXMuY3JlYXRlQ29udHJvbEZyb21BcnJheSh2YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVDb250cm9sRnJvbUFycmF5KGFycmF5OiBhbnlbXSk6IEFic3RyYWN0Q29udHJvbFtdIHtcclxuICAgIHJldHVybiBhcnJheS5tYXAoaXRlbSA9PiB0aGlzLmNyZWF0ZUNvbnRyb2xGcm9tVmFsdWUoaXRlbSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb2xsZWN0RXJyb3JzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IG51bWJlciB7XHJcblxyXG4gICAgbGV0IGVycm9ycyA9IDA7XHJcblxyXG4gICAgaWYgKGNvbnRyb2wuZGlzYWJsZWQpXHJcbiAgICAgIHJldHVybiBlcnJvcnM7XHJcblxyXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICBjb25zdCBjaGlsZHJlbiA9IE9iamVjdC52YWx1ZXMoY29udHJvbC5jb250cm9scyk7XHJcbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcclxuICAgICAgICBlcnJvcnMgKz0gdGhpcy5jb2xsZWN0RXJyb3JzKGNoaWxkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29udHJvbC5pbnZhbGlkKSB7XHJcbiAgICAgIGVycm9ycysrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBlcnJvcnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFVua25vd24oY29udHJvbDogYW55KSB7XHJcbiAgICBjb250cm9sLl91bmtub3duID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNVbmtub3duKGNvbnRyb2w6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGNvbnRyb2wgJiYgY29udHJvbC5fdW5rbm93biA9PT0gdHJ1ZTtcclxuICB9XHJcbn1cclxuXHJcbiJdfQ==
@@ -80,10 +80,10 @@ export class FormatterService {
80
80
  'formatNumber'
81
81
  ]);
82
82
  }
83
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormatterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
84
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormatterService, providedIn: 'root' });
83
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormatterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
84
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormatterService, providedIn: 'root' });
85
85
  }
86
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormatterService, decorators: [{
86
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormatterService, decorators: [{
87
87
  type: Injectable,
88
88
  args: [{
89
89
  providedIn: 'root'
@@ -42,10 +42,10 @@ export class FunctionService {
42
42
  "invokable"
43
43
  ]);
44
44
  }
45
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FunctionService, deps: [{ token: i1.MetadataService }, { token: i2.DialogService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
46
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FunctionService });
45
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FunctionService, deps: [{ token: i1.MetadataService }, { token: i2.DialogService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
46
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FunctionService });
47
47
  }
48
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FunctionService, decorators: [{
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FunctionService, decorators: [{
49
49
  type: Injectable
50
50
  }], ctorParameters: () => [{ type: i1.MetadataService }, { type: i2.DialogService }, { type: i0.Injector }] });
51
51
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL3NlcnZpY2VzL2Z1bmN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUdyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7QUFJbkQsTUFBTSxPQUFPLGVBQWU7SUFFTjtJQUNSO0lBQ0E7SUFGWixZQUFvQixRQUF5QixFQUNqQyxNQUFxQixFQUNyQixRQUFrQjtRQUZWLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ2pDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUFJLENBQUM7SUFFbkMsU0FBUyxDQUFDLElBQVM7UUFDakIsSUFBSSxPQUFPLElBQUksRUFBRSxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdkMsT0FBTyxDQUFDLEdBQUcsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLENBQUM7YUFDSSxDQUFDO1lBQ0osT0FBTyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRLENBQUMsUUFBeUIsRUFBRSxPQUFzQjtRQUV4RCxJQUFJLFVBQWUsQ0FBQztRQUVwQixJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pELENBQUM7YUFBTSxDQUFDO1lBQ04sVUFBVSxHQUFHLFFBQVEsQ0FBQztRQUN4QixDQUFDO1FBRUQsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sV0FBVyxHQUFzQjtnQkFDckMsR0FBRyxPQUFPO2dCQUNWLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTthQUN4QixDQUFBO1lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRTtZQUN6QixVQUFVO1lBQ1YsV0FBVztTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBeENVLGVBQWU7NEdBQWYsZUFBZTs7NEZBQWYsZUFBZTtrQkFEM0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21ldGFkYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlLCBEaWFsb2dPcHRpb25zLCBGb3JtRGlhbG9nT3B0aW9ucyB9IGZyb20gJy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9Cb3VuZEFycm93cyB9IGZyb20gJy4uL3V0aWxzL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IElFdmFsdWF0b3JQcm92aWRlciB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uU2VydmljZSBpbXBsZW1lbnRzIElFdmFsdWF0b3JQcm92aWRlciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbWV0YWRhdGE6IE1ldGFkYXRhU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGRpYWxvZzogRGlhbG9nU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcikgeyB9XHJcblxyXG4gIGludm9rYWJsZShmdW5jOiBhbnkpOiBGdW5jdGlvbiB7XHJcbiAgICBpZiAodHlwZW9mIGZ1bmM/Lmludm9rZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICByZXR1cm4gKC4uLmFyZ3M6IGFueSkgPT4gZnVuYy5pbnZva2UoYXJncyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuICgpID0+IHsgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5Gb3JtKHRlbXBsYXRlOiBzdHJpbmcgfCBvYmplY3QsIG9wdGlvbnM6IERpYWxvZ09wdGlvbnMpXHJcbiAge1xyXG4gICAgbGV0IGZvcm1TY2hlbWE6IGFueTtcclxuXHJcbiAgICBpZiAodHlwZW9mIHRlbXBsYXRlID09PSAnc3RyaW5nJykge1xyXG4gICAgICBmb3JtU2NoZW1hID0gdGhpcy5tZXRhZGF0YS5nZXRUZW1wbGF0ZUJ5TmFtZSh0ZW1wbGF0ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3JtU2NoZW1hID0gdGVtcGxhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZvcm1TY2hlbWEpIHtcclxuICAgICAgY29uc3QgZm9ybU9wdGlvbnM6IEZvcm1EaWFsb2dPcHRpb25zID0ge1xyXG4gICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgaW5qZWN0b3I6IHRoaXMuaW5qZWN0b3JcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5kaWFsb2cub3BlbkRpYWxvZyhmb3JtU2NoZW1hLCBmb3JtT3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb250ZXh0KCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG4gICAgcmV0dXJuIFRvQm91bmRBcnJvd3ModGhpcywgW1xyXG4gICAgICBcIm9wZW5Gb3JtXCIsXHJcbiAgICAgIFwiaW52b2thYmxlXCJcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -30,10 +30,10 @@ export class GlobalService {
30
30
  //#region Private Members
31
31
  properties = {};
32
32
  components = {};
33
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GlobalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
34
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GlobalService, providedIn: 'root' });
33
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GlobalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
34
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GlobalService, providedIn: 'root' });
35
35
  }
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GlobalService, decorators: [{
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GlobalService, decorators: [{
37
37
  type: Injectable,
38
38
  args: [{
39
39
  providedIn: 'root'