@wemake4u/form-player-se 1.0.44 → 1.0.46

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 (53) hide show
  1. package/esm2022/lib/builtIn/builtIn.mjs +6 -2
  2. package/esm2022/lib/builtIn/cache.json +30 -0
  3. package/esm2022/lib/builtIn/form.json +25 -0
  4. package/esm2022/lib/builtIn/function.json +28 -0
  5. package/esm2022/lib/builtIn/nav.json +37 -0
  6. package/esm2022/lib/controls/control.mjs +8 -3
  7. package/esm2022/lib/controls/factory.mjs +33 -33
  8. package/esm2022/lib/dialog/dialog.component.mjs +5 -4
  9. package/esm2022/lib/directives/collapse.directive.mjs +22 -2
  10. package/esm2022/lib/directives/dropdown.directive.mjs +38 -8
  11. package/esm2022/lib/directives/grid.directive.mjs +10 -2
  12. package/esm2022/lib/directives/required.directive.mjs +2 -2
  13. package/esm2022/lib/directives/tabcontrol.directive.mjs +17 -5
  14. package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +23 -9
  15. package/esm2022/lib/dynamic-form/dynamic-form.component.mjs +27 -7
  16. package/esm2022/lib/services/builder.service.mjs +9 -1
  17. package/esm2022/lib/services/compute.service.mjs +2 -2
  18. package/esm2022/lib/services/dialog.service.mjs +1 -1
  19. package/esm2022/lib/services/disable.service.mjs +2 -2
  20. package/esm2022/lib/services/feel.service.mjs +25 -7
  21. package/esm2022/lib/services/form.service.mjs +17 -1
  22. package/esm2022/lib/services/function.service.mjs +13 -2
  23. package/esm2022/lib/services/programmability.service.mjs +28 -14
  24. package/esm2022/lib/services/validation.service.mjs +89 -54
  25. package/esm2022/lib/services/weak.service.mjs +4 -3
  26. package/esm2022/lib/utils/cacheControl.mjs +24 -0
  27. package/esm2022/lib/utils/deepEqual.mjs +27 -19
  28. package/esm2022/lib/utils/groupByRow.mjs +2 -1
  29. package/esm2022/lib/utils/observable.mjs +7 -3
  30. package/esm2022/public-api.mjs +33 -1
  31. package/fesm2022/wemake4u-form-player-se.mjs +545 -169
  32. package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
  33. package/lib/controls/factory.d.ts +1 -1
  34. package/lib/directives/collapse.directive.d.ts +6 -1
  35. package/lib/directives/dropdown.directive.d.ts +5 -2
  36. package/lib/directives/tabcontrol.directive.d.ts +3 -1
  37. package/lib/dynamic-fields/dynamic-fields.component.d.ts +5 -3
  38. package/lib/dynamic-form/dynamic-form.component.d.ts +3 -0
  39. package/lib/services/dialog.service.d.ts +10 -3
  40. package/lib/services/feel.service.d.ts +7 -2
  41. package/lib/services/form.service.d.ts +3 -0
  42. package/lib/services/function.service.d.ts +2 -0
  43. package/lib/services/programmability.service.d.ts +3 -3
  44. package/lib/services/validation.service.d.ts +5 -2
  45. package/lib/services/weak.service.d.ts +1 -1
  46. package/lib/utils/cacheControl.d.ts +9 -0
  47. package/lib/utils/deepEqual.d.ts +3 -1
  48. package/lib/utils/groupByRow.d.ts +1 -0
  49. package/lib/utils/observable.d.ts +1 -1
  50. package/package.json +3 -3
  51. package/public-api.d.ts +32 -0
  52. package/esm2022/lib/utils/patch.mjs +0 -17
  53. package/lib/utils/patch.d.ts +0 -1
@@ -172,6 +172,7 @@ export class FormBuilderService {
172
172
  case "group":
173
173
  case "tab":
174
174
  case "accordion":
175
+ case "templatehost":
175
176
  return true;
176
177
  default:
177
178
  return false;
@@ -300,6 +301,13 @@ export class FormBuilderService {
300
301
  disabled: panel.disabled
301
302
  }));
302
303
  }
304
+ else if (component.type === 'templatehost') {
305
+ return [{
306
+ path: component.path,
307
+ rows: this.metadata.getFormByName(component.template)?.rows ?? [],
308
+ disabled: component.disabled
309
+ }];
310
+ }
303
311
  else {
304
312
  return [];
305
313
  }
@@ -346,4 +354,4 @@ export function hasFactory(array) {
346
354
  && typeof current.resize === 'function'
347
355
  && typeof current.createNewArray === 'function';
348
356
  }
349
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvYnVpbGRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFtQixTQUFTLEVBQUUsV0FBVyxFQUFzQixTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU94RyxPQUFPLEVBQUUsV0FBVyxFQUFpQixNQUFNLHNCQUFzQixDQUFDOzs7Ozs7OztBQUdsRSxNQUFNLE9BQU8sa0JBQWtCO0lBR25CO0lBQ0U7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQU5aLFlBQ1UsaUJBQW9DLEVBQ2xDLGNBQThCLEVBQzlCLGNBQThCLEVBQzlCLGFBQTRCLEVBQzVCLFlBQTBCLEVBQzFCLFFBQXlCO1FBTDNCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDbEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixhQUFRLEdBQVIsUUFBUSxDQUFpQjtJQUNyQyxDQUFDO0lBRUQsU0FBUyxDQUFDLFNBQW9CLEVBQUUsS0FBaUIsRUFBRSxZQUEyQixTQUFTO1FBQ3JGLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDdkUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDakUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzdELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FB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QUFPLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFFNUIsUUFBUSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkIsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLFVBQVUsQ0FBQztZQUNoQixLQUFLLFdBQVc7Z0JBQ2QsT0FBTyxNQUFNLENBQUM7WUFDaEI7Z0JBQ0UsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztJQUNILENBQUM7d0dBdFhVLGtCQUFrQjs0R0FBbEIsa0JBQWtCOzs0RkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVOztBQTBYWCxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQWdCO0lBQ3pDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDekIsTUFBTSxPQUFPLEdBQUcsS0FBWSxDQUFDO0lBQzdCLE9BQU8sT0FBTyxPQUFPLENBQUMsVUFBVSxLQUFLLFVBQVU7V0FDMUMsT0FBTyxPQUFPLENBQUMsT0FBTyxLQUFLLFVBQVU7V0FDckMsT0FBTyxPQUFPLENBQUMsTUFBTSxLQUFLLFVBQVU7V0FDcEMsT0FBTyxPQUFPLENBQUMsY0FBYyxLQUFLLFVBQVUsQ0FBQTtBQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Db250cm9sT3B0aW9ucywgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uQ29sbGVjdGlvbiwgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuL3ZhbGlkYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IERpc2FibGVDb2xsZWN0aW9uLCBEaXNhYmxlU2VydmljZSB9IGZyb20gJy4vZGlzYWJsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcHV0ZUNvbGxlY3Rpb24sIENvbXB1dGVTZXJ2aWNlIH0gZnJvbSAnLi9jb21wdXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdGF0dXNDb2xsZWN0aW9uLCBTdGF0dXNTZXJ2aWNlIH0gZnJvbSAnLi9zdGF0dXMuc2VydmljZSc7XHJcbmltcG9ydCB7IEV2ZW50Q29sbGVjdGlvbiwgRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi9ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9tZXRhZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwRXgsIEZvcm1Hcm91cE1vZGUgfSBmcm9tICcuLi91dGlscy9Gb3JtR3JvdXBFeCc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBGb3JtQnVpbGRlclNlcnZpY2UgIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGRpc2FibGVTZXJ2aWNlOiBEaXNhYmxlU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGNvbXB1dGVTZXJ2aWNlOiBDb21wdXRlU2VydmljZVxyXG4gICAgLCBwcml2YXRlIHN0YXR1c1NlcnZpY2U6IFN0YXR1c1NlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZVxyXG4gICAgLCBwcml2YXRlIG1ldGFkYXRhOiBNZXRhZGF0YVNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIGJ1aWxkRm9ybShmb3JtR3JvdXA6IEZvcm1Hcm91cCwgZm9ybXM6IEFycmF5PGFueT4sIGdyb3VwTW9kZTogRm9ybUdyb3VwTW9kZSA9IFwiZGVmYXVsdFwiKSB7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9uQ29sbGVjdGlvbiA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY3JlYXRlQ29sbGVjdGlvbigpO1xyXG4gICAgY29uc3QgZGlzYWJsZUNvbGxlY3Rpb24gPSB0aGlzLmRpc2FibGVTZXJ2aWNlLmNyZWF0ZUNvbGxlY3Rpb24oKTtcclxuICAgIGNvbnN0IGV2ZW50Q29sbGVjdGlvbiA9IHRoaXMuZXZlbnRTZXJ2aWNlLmNyZWF0ZUNvbGxlY3Rpb24oKTtcclxuICAgIGNvbnN0IGNvbXB1dGVDb2xsZWN0aW9uID0gdGhpcy5jb21wdXRlU2VydmljZS5jcmVhdGVDb2xsZWN0aW9uKCk7XHJcbiAgICBmb3Jtcy5mb3JFYWNoKChmb3JtOiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgc3RhdHVzQ29sbGVjdGlvbiA9IHRoaXMuc3RhdHVzU2VydmljZS5jcmVhdGVDb2xsZWN0aW9uKCk7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRHcm91cCA9IHRoaXMuYXBwbHlQYXRoKGZvcm1Hcm91cCwgZm9ybS5wYXRoLCBncm91cE1vZGUpO1xyXG4gICAgICBpZiAodGhpcy5oYXNQYXRoKGZvcm0ucGF0aCkpIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVTZXJ2aWNlLmFkZFRvQ29sbGVjdGlvbihkaXNhYmxlQ29sbGVjdGlvbiwgY3VycmVudEdyb3VwLCBmb3JtR3JvdXAsIGZvcm0pO1xyXG4gICAgICB9XHJcbiAgICAgIGZvcm0ucm93cz8uZm9yRWFjaCgocm93OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmFkZENvbnRyb2xzKGN1cnJlbnRHcm91cCwgcm93LmNvbXBvbmVudHMsIGdyb3VwTW9kZVxyXG4gICAgICAgICAgLCBkaXNhYmxlQ29sbGVjdGlvblxyXG4gICAgICAgICAgLCBjb21wdXRlQ29sbGVjdGlvblxyXG4gICAgICAgICAgLCB2YWxpZGF0aW9uQ29sbGVjdGlvblxyXG4gICAgICAgICAgLCBzdGF0dXNDb2xsZWN0aW9uXHJcbiAgICAgICAgICAsIGV2ZW50Q29sbGVjdGlvbik7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnN0YXR1c1NlcnZpY2Uuc2V0dXBDb2xsZWN0aW9uKGZvcm0sIHN0YXR1c0NvbGxlY3Rpb24pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRpc2FibGVTZXJ2aWNlLnNldHVwQ29sbGVjdGlvbihkaXNhYmxlQ29sbGVjdGlvbik7XHJcbiAgICB0aGlzLmNvbXB1dGVTZXJ2aWNlLnNldHVwQ29sbGVjdGlvbihjb21wdXRlQ29sbGVjdGlvbik7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnNldHVwQ29sbGVjdGlvbih2YWxpZGF0aW9uQ29sbGVjdGlvbik7XHJcbiAgICB0aGlzLmV2ZW50U2VydmljZS5zZXR1cENvbGxlY3Rpb24oZXZlbnRDb2xsZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzUGF0aCh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdmFsdWUudHJpbSgpLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5UGF0aChmb3JtR3JvdXA6IEZvcm1Hcm91cCwgcGF0aDogc3RyaW5nLCBncm91cE1vZGU6IEZvcm1Hcm91cE1vZGUpIHtcclxuICAgIGlmICghdGhpcy5oYXNQYXRoKHBhdGgpKSB7XHJcbiAgICAgIHJldHVybiBmb3JtR3JvdXA7XHJcbiAgICB9XHJcbiAgICBsZXQgY3VycmVudEdyb3VwOiBGb3JtR3JvdXAgPSBmb3JtR3JvdXA7XHJcbiAgICB0aGlzLnNwbGl0UGF0aChwYXRoKS5mb3JFYWNoKChzZWdtZW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IGV4aXN0R3JvdXAgPSBjdXJyZW50R3JvdXAuZ2V0KHNlZ21lbnQpO1xyXG4gICAgICBpZiAoZXhpc3RHcm91cCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICAgIGN1cnJlbnRHcm91cCA9IGV4aXN0R3JvdXA7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGV4aXN0R3JvdXApIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjcmVhdGUgZm9ybSBncm91cCBiZWNhdXNlIGFuIGVsZW1lbnQgd2l0aCBwYXRoICR7c2VnbWVudH0gYWxyZWFkeSBleGlzdHNgKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBzZWdtZW50R3JvdXAgPSB0aGlzLmNyZWF0ZUZvcm1Hcm91cChncm91cE1vZGUpO1xyXG4gICAgICAgIGN1cnJlbnRHcm91cC5hZGRDb250cm9sKHNlZ21lbnQsIHNlZ21lbnRHcm91cCk7XHJcbiAgICAgICAgY3VycmVudEdyb3VwID0gc2VnbWVudEdyb3VwO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjdXJyZW50R3JvdXA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNwbGl0UGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAoIXBhdGgpIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhdGhcclxuICAgICAgLnNwbGl0KCcuJylcclxuICAgICAgLm1hcChzZWdtZW50ID0+IHNlZ21lbnQudHJpbSgpKVxyXG4gICAgICAuZmlsdGVyKHNlZ21lbnQgPT4gc2VnbWVudC5sZW5ndGggPiAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUdyb3VwKGdyb3VwTW9kZTogRm9ybUdyb3VwTW9kZSk6IEZvcm1Hcm91cCB7XHJcbiAgICByZXR1cm4gKGdyb3VwTW9kZSA9PT0gXCJkZWZhdWx0XCIpXHJcbiAgICAgID8gbmV3IEZvcm1Hcm91cCh7fSlcclxuICAgICAgOiBuZXcgRm9ybUdyb3VwRXgoe30sIGdyb3VwTW9kZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZENvbnRyb2xzKGZvcm1Hcm91cDogRm9ybUdyb3VwXHJcbiAgICAsIGNvbXBvbmVudHM6IEFycmF5PGFueT5cclxuICAgICwgZ3JvdXBNb2RlOiBGb3JtR3JvdXBNb2RlXHJcbiAgICAsIGRpc2FibGVDb2xsZWN0aW9uOiBEaXNhYmxlQ29sbGVjdGlvblxyXG4gICAgLCBjb21wdXRlQ29sbGVjdGlvbjogQ29tcHV0ZUNvbGxlY3Rpb25cclxuICAgICwgdmFsaWRhdGlvbkNvbGxlY3Rpb246IFZhbGlkYXRpb25Db2xsZWN0aW9uXHJcbiAgICAsIHN0YXR1c0NvbGxlY3Rpb246IFN0YXR1c0NvbGxlY3Rpb25cclxuICAgICwgZXZlbnRDb2xsZWN0aW9uOiBFdmVudENvbGxlY3Rpb24pIHtcclxuICAgIGxldCBmb3JtQ29tcG9uZW50ID0gdGhpcztcclxuXHJcbiAgICBjb21wb25lbnRzPy5mb3JFYWNoKChjb21wb25lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5pc0Zvcm1Db21wb25lbnQoY29tcG9uZW50KSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRHcm91cCA9IHRoaXMuYXBwbHlQYXRoKGZvcm1Hcm91cCwgY29tcG9uZW50LnBhdGgsIGdyb3VwTW9kZSk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRHcm91cC5jb250YWlucyhjb21wb25lbnQua2V5KSkge1xyXG4gICAgICAgICAgdGhpcy5zdGF0dXNTZXJ2aWNlLmFkZFRvQ29sbGVjdGlvbihzdGF0dXNDb2xsZWN0aW9uLCBjdXJyZW50R3JvdXAuZ2V0KGNvbXBvbmVudC5rZXkpIGFzIEFic3RyYWN0Q29udHJvbCwgY29tcG9uZW50KTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBsZXQgZGVmYXVsdFZhbHVlID0gdGhpcy5nZXREZWZhdWx0VmFsdWUoY29tcG9uZW50KTtcclxuICAgICAgICAgIGNvbnN0IG9wdGlvbnM6IEZvcm1Db250cm9sT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgdXBkYXRlT246IHRoaXMuZ2V0VXBkYXRlT24oY29tcG9uZW50KSB8fCBcImNoYW5nZVwiLFxyXG4gICAgICAgICAgICBub25OdWxsYWJsZTogKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCAmJiBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gbmV3IEZvcm1Db250cm9sKGRlZmF1bHRWYWx1ZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgICBjdXJyZW50R3JvdXAuYWRkQ29udHJvbChjb21wb25lbnQua2V5LCBjb250cm9sKTtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKHZhbGlkYXRpb25Db2xsZWN0aW9uLCBjb250cm9sLCBjdXJyZW50R3JvdXAsIGNvbXBvbmVudCk7XHJcbiAgICAgICAgICB0aGlzLnN0YXR1c1NlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKHN0YXR1c0NvbGxlY3Rpb24sIGNvbnRyb2wsIGNvbXBvbmVudCk7XHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVTZXJ2aWNlLmFkZFRvQ29sbGVjdGlvbihkaXNhYmxlQ29sbGVjdGlvbiwgY29udHJvbCwgZm9ybUdyb3VwLCBjb21wb25lbnQpO1xyXG4gICAgICAgICAgdGhpcy5jb21wdXRlU2VydmljZS5hZGRUb0NvbGxlY3Rpb24oY29tcHV0ZUNvbGxlY3Rpb24sIGNvbnRyb2wsIGZvcm1Hcm91cCwgY29tcG9uZW50KTtcclxuICAgICAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLmFkZFRvQ29sbGVjdGlvbihldmVudENvbGxlY3Rpb24sIGNvbnRyb2wsIGN1cnJlbnRHcm91cCwgY29tcG9uZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5pc0NvbnRhaW5lckNvbXBvbmVudChjb21wb25lbnQpKSB7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVycyA9IHRoaXMuZ2V0Q29udGFpbmVycyhjb21wb25lbnQpO1xyXG4gICAgICAgIGNvbnRhaW5lcnM/LmZvckVhY2goKGNvbnRhaW5lcikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY3VycmVudEdyb3VwID0gdGhpcy5hcHBseVBhdGgoZm9ybUdyb3VwLCBjb250YWluZXIucGF0aCwgZ3JvdXBNb2RlKTtcclxuICAgICAgICAgIGlmICh0aGlzLmhhc1BhdGgoY29udGFpbmVyLnBhdGgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKGRpc2FibGVDb2xsZWN0aW9uLCBjdXJyZW50R3JvdXAsIGZvcm1Hcm91cCwgY29udGFpbmVyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnRhaW5lci5yb3dzPy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBmb3JtQ29tcG9uZW50LmFkZENvbnRyb2xzKGN1cnJlbnRHcm91cCwgcm93LmNvbXBvbmVudHMsIGdyb3VwTW9kZVxyXG4gICAgICAgICAgICAgICwgZGlzYWJsZUNvbGxlY3Rpb25cclxuICAgICAgICAgICAgICAsIGNvbXB1dGVDb2xsZWN0aW9uXHJcbiAgICAgICAgICAgICAgLCB2YWxpZGF0aW9uQ29sbGVjdGlvblxyXG4gICAgICAgICAgICAgICwgc3RhdHVzQ29sbGVjdGlvblxyXG4gICAgICAgICAgICAgICwgZXZlbnRDb2xsZWN0aW9uKTtcclxuICAgICAgICAgIH0pOyAgICAgICAgICBcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmlzQXJyYXlDb21wb25lbnQoY29tcG9uZW50KSkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1Db21wb25lbnQgPSB0aGlzLmdldEFycmF5SXRlbShjb21wb25lbnQpO1xyXG4gICAgICAgIGlmIChpdGVtQ29tcG9uZW50LmtleSkge1xyXG4gICAgICAgICAgY29uc3QgY3VycmVudEdyb3VwID0gdGhpcy5hcHBseVBhdGgoZm9ybUdyb3VwLCBpdGVtQ29tcG9uZW50LnBhdGgsIGdyb3VwTW9kZSk7XHJcbiAgICAgICAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmNyZWF0ZUZvcm1BcnJheShjdXJyZW50R3JvdXAsIGl0ZW1Db21wb25lbnQsIGdyb3VwTW9kZSk7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmFkZFRvQ29sbGVjdGlvbih2YWxpZGF0aW9uQ29sbGVjdGlvbiwgZm9ybUFycmF5LCBjdXJyZW50R3JvdXAsIGNvbXBvbmVudCk7XHJcbiAgICAgICAgICB0aGlzLnN0YXR1c1NlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKHN0YXR1c0NvbGxlY3Rpb24sIGZvcm1BcnJheSwgY29tcG9uZW50KTtcclxuICAgICAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLmFkZFRvQ29sbGVjdGlvbihldmVudENvbGxlY3Rpb24sIGZvcm1BcnJheSwgY3VycmVudEdyb3VwLCBjb21wb25lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmlzQ29tcG9uZW50V2l0aElucHV0KGNvbXBvbmVudCkpIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50R3JvdXAgPSB0aGlzLmFwcGx5UGF0aChmb3JtR3JvdXAsIGNvbXBvbmVudC5wYXRoLCBncm91cE1vZGUpO1xyXG4gICAgICAgIGlmIChjdXJyZW50R3JvdXAuY29udGFpbnMoY29tcG9uZW50LmtleSkpIHtcclxuICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBjdXJyZW50R3JvdXAuZ2V0KGNvbXBvbmVudC5rZXkpIGFzIEFic3RyYWN0Q29udHJvbDtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKHZhbGlkYXRpb25Db2xsZWN0aW9uLCBjb250cm9sLCBjdXJyZW50R3JvdXAsIGNvbXBvbmVudCk7XHJcbiAgICAgICAgICB0aGlzLnN0YXR1c1NlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKHN0YXR1c0NvbGxlY3Rpb24sIGNvbnRyb2wsIGNvbXBvbmVudCk7XHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVTZXJ2aWNlLmFkZFRvQ29sbGVjdGlvbihkaXNhYmxlQ29sbGVjdGlvbiwgY29udHJvbCwgY3VycmVudEdyb3VwLCBjb21wb25lbnQpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wobnVsbCk7XHJcbiAgICAgICAgICBjdXJyZW50R3JvdXAuYWRkQ29udHJvbChjb21wb25lbnQua2V5LCBjb250cm9sKTtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKHZhbGlkYXRpb25Db2xsZWN0aW9uLCBjb250cm9sLCBjdXJyZW50R3JvdXAsIGNvbXBvbmVudCk7XHJcbiAgICAgICAgICB0aGlzLnN0YXR1c1NlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKHN0YXR1c0NvbGxlY3Rpb24sIGNvbnRyb2wsIGNvbXBvbmVudCk7XHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVTZXJ2aWNlLmFkZFRvQ29sbGVjdGlvbihkaXNhYmxlQ29sbGVjdGlvbiwgY29udHJvbCwgY3VycmVudEdyb3VwLCBjb21wb25lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRm9ybUNvbXBvbmVudChjb21wb25lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgc3dpdGNoIChjb21wb25lbnQudHlwZSkge1xyXG4gICAgICBjYXNlIFwiY2hlY2tib3hcIjpcclxuICAgICAgY2FzZSBcImNoZWNrbGlzdFwiOlxyXG4gICAgICBjYXNlIFwiZGF0ZXRpbWVcIjpcclxuICAgICAgY2FzZSBcImZpbGVwaWNrZXJcIjpcclxuICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICBjYXNlIFwicmFkaW9cIjpcclxuICAgICAgY2FzZSBcInNlbGVjdFwiOlxyXG4gICAgICBjYXNlIFwidGFnbGlzdFwiOlxyXG4gICAgICBjYXNlIFwidGV4dGFyZWFcIjpcclxuICAgICAgY2FzZSBcInRleHRmaWVsZFwiOlxyXG4gICAgICBjYXNlIFwicmFuZ2VcIjpcclxuICAgICAgY2FzZSBcImV4cHJlc3Npb25cIjpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzQ29udGFpbmVyQ29tcG9uZW50KGNvbXBvbmVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJncm91cFwiOlxyXG4gICAgICBjYXNlIFwidGFiXCI6XHJcbiAgICAgIGNhc2UgXCJhY2NvcmRpb25cIjpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzQ29tcG9uZW50V2l0aElucHV0KGNvbXBvbmVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gY29tcG9uZW50LnR5cGUgPT09IFwiY29tcG9uZW50XCJcclxuICAgICAgJiYgY29tcG9uZW50LmlzSW5wdXQgPT09IHRydWVcclxuICAgICAgJiYgY29tcG9uZW50LmtleTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNBcnJheUNvbXBvbmVudChjb21wb25lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgc3dpdGNoIChjb21wb25lbnQudHlwZSkge1xyXG4gICAgICBjYXNlIFwiZHluYW1pY2xpc3RcIjpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEFycmF5SXRlbShjb21wb25lbnQ6IGFueSk6IHsga2V5OiBhbnk7IHBhdGg6IGFueTsgcm93czogYW55IH0ge1xyXG4gICAgaWYgKGNvbXBvbmVudC50eXBlID09PSAnZHluYW1pY2xpc3QnKSB7XHJcbiAgICAgIHJldHVybiB7IGtleTogY29tcG9uZW50LmtleSwgcGF0aDogY29tcG9uZW50LnBhdGgsIHJvd3M6IGNvbXBvbmVudC5yb3dzIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIHsga2V5OiBudWxsLCBwYXRoOiBudWxsLCByb3dzOiBbXSB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtQXJyYXkoZm9ybUdyb3VwOiBGb3JtR3JvdXBcclxuICAgICwgaXRlbUNvbXBvbmVudDogYW55XHJcbiAgICAsIGdyb3VwTW9kZTogRm9ybUdyb3VwTW9kZSk6IEZvcm1BcnJheVdpdGhGYWN0b3J5IHtcclxuICAgIGNvbnN0IGZvcm1Db21wb25lbnQgPSB0aGlzO1xyXG5cclxuICAgIGNvbnN0IHByZXBhcmVJdGVtID0gZnVuY3Rpb24gKGZvcm1Hcm91cDogRm9ybUdyb3VwKTogdm9pZCB7XHJcbiAgICAgIGNvbnN0IHN0YXR1c0NvbGxlY3Rpb24gPSBmb3JtQ29tcG9uZW50LnN0YXR1c1NlcnZpY2UuY3JlYXRlQ29sbGVjdGlvbigpO1xyXG4gICAgICBjb25zdCB2YWxpZGF0aW9uQ29sbGVjdGlvbiA9IGZvcm1Db21wb25lbnQudmFsaWRhdGlvblNlcnZpY2UuY3JlYXRlQ29sbGVjdGlvbigpO1xyXG4gICAgICBjb25zdCBldmVudENvbGxlY3Rpb24gPSBmb3JtQ29tcG9uZW50LmV2ZW50U2VydmljZS5jcmVhdGVDb2xsZWN0aW9uKCk7XHJcbiAgICAgIGNvbnN0IGRpc2FibGVDb2xsZWN0aW9uID0gZm9ybUNvbXBvbmVudC5kaXNhYmxlU2VydmljZS5jcmVhdGVDb2xsZWN0aW9uKCk7XHJcbiAgICAgIGNvbnN0IGNvbXB1dGVDb2xsZWN0aW9uID0gZm9ybUNvbXBvbmVudC5jb21wdXRlU2VydmljZS5jcmVhdGVDb2xsZWN0aW9uKCk7XHJcbiAgICAgIGl0ZW1Db21wb25lbnQucm93cz8uZm9yRWFjaCgocm93OiBhbnkpID0+IHtcclxuICAgICAgICBmb3JtQ29tcG9uZW50LmFkZENvbnRyb2xzKGZvcm1Hcm91cCwgcm93LmNvbXBvbmVudHMsIGdyb3VwTW9kZVxyXG4gICAgICAgICAgLCBkaXNhYmxlQ29sbGVjdGlvblxyXG4gICAgICAgICAgLCBjb21wdXRlQ29sbGVjdGlvblxyXG4gICAgICAgICAgLCB2YWxpZGF0aW9uQ29sbGVjdGlvblxyXG4gICAgICAgICAgLCBzdGF0dXNDb2xsZWN0aW9uXHJcbiAgICAgICAgICAsIGV2ZW50Q29sbGVjdGlvbik7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBpZ25vcmUgc3RhdHVzQ29sbGVjdGlvblxyXG4gICAgICBmb3JtQ29tcG9uZW50LmRpc2FibGVTZXJ2aWNlLnNldHVwQ29sbGVjdGlvbihkaXNhYmxlQ29sbGVjdGlvbik7XHJcbiAgICAgIGZvcm1Db21wb25lbnQuY29tcHV0ZVNlcnZpY2Uuc2V0dXBDb2xsZWN0aW9uKGNvbXB1dGVDb2xsZWN0aW9uKTtcclxuICAgICAgZm9ybUNvbXBvbmVudC52YWxpZGF0aW9uU2VydmljZS5zZXR1cENvbGxlY3Rpb24odmFsaWRhdGlvbkNvbGxlY3Rpb24pO1xyXG4gICAgICBmb3JtQ29tcG9uZW50LmV2ZW50U2VydmljZS5zZXR1cENvbGxlY3Rpb24oZXZlbnRDb2xsZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjcmVhdGVJdGVtID0gZnVuY3Rpb24gKHRoaXM6IEZvcm1BcnJheSwgYWRkVG9BcnJheTogYm9vbGVhbiA9IGZhbHNlKTogRm9ybUdyb3VwIHtcclxuICAgICAgY29uc3QgbmV3R3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgaWYgKGFkZFRvQXJyYXkpIHRoaXMucHVzaChuZXdHcm91cCk7XHJcbiAgICAgIHByZXBhcmVJdGVtKG5ld0dyb3VwKTtcclxuICAgICAgcmV0dXJuIG5ld0dyb3VwO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBhZGRJdGVtID0gZnVuY3Rpb24gKHRoaXM6IEZvcm1BcnJheSk6IEZvcm1Hcm91cCB7XHJcbiAgICAgIGlmIChoYXNGYWN0b3J5KHRoaXMpKSB7XHJcbiAgICAgICAgY29uc3QgbmV3R3JvdXAgPSB0aGlzLmNyZWF0ZUl0ZW0odHJ1ZSk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0dyb3VwO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICdDYW5ub3QgYWRkIGl0ZW06IHRoZSBGb3JtQXJyYXkgZG9lcyBub3QgaW1wbGVtZW50IEZvcm1BcnJheVdpdGhGYWN0b3J5LidcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG92ZXJyaWRlQXJyYXkgPSAoYXJyYXk6IEZvcm1BcnJheVdpdGhGYWN0b3J5KSA9PiB7XHJcbiAgICAgIGNvbnN0IGNyZWF0ZUl0ZW0gPSBhcnJheS5jcmVhdGVJdGVtLmJpbmQoYXJyYXkpO1xyXG4gICAgICBhcnJheS5jcmVhdGVJdGVtID0gZnVuY3Rpb24gKHRoaXM6IEZvcm1BcnJheSwgYWRkVG9BcnJheTogYm9vbGVhbik6IEZvcm1Hcm91cCB7XHJcbiAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY3JlYXRlSXRlbShhZGRUb0FycmF5KTtcclxuICAgICAgICBwcmVwYXJlSXRlbShmb3JtR3JvdXApO1xyXG4gICAgICAgIHJldHVybiBmb3JtR3JvdXA7XHJcbiAgICAgIH07ICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBleGlzdGluZyA9IGZvcm1Hcm91cC5nZXQoaXRlbUNvbXBvbmVudC5rZXkpO1xyXG5cclxuICAgIGlmIChleGlzdGluZyBpbnN0YW5jZW9mIEZvcm1BcnJheSAmJiBoYXNGYWN0b3J5KGV4aXN0aW5nKSkge1xyXG4gICAgICBvdmVycmlkZUFycmF5KGV4aXN0aW5nKTtcclxuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZvcm1BcnJheSA9IG5ldyBGb3JtQXJyYXk8Rm9ybUdyb3VwPihbXSk7XHJcblxyXG4gICAgZm9ybUdyb3VwLmFkZENvbnRyb2woaXRlbUNvbXBvbmVudC5rZXksIGZvcm1BcnJheSk7XHJcblxyXG4gICAgY29uc3QgcmVzaXplRm9ybUFycmF5ID0gdGhpcy5yZXNpemVGb3JtQXJyYXk7XHJcblxyXG4gICAgY29uc3QgY3JlYXRlTmV3QXJyYXkgPSBmdW5jdGlvbiAoKSA6IEZvcm1BcnJheVdpdGhGYWN0b3J5IHtcclxuICAgICAgY29uc3QgbmV3QXJyYXkgPSBuZXcgRm9ybUFycmF5PEZvcm1Hcm91cD4oW10pO1xyXG4gICAgICByZXR1cm4gcHJlcGFyZUFycmF5KG5ld0FycmF5KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcmVwYXJlQXJyYXkgPSAoYXJyYXk6IEZvcm1BcnJheSk6IEZvcm1BcnJheVdpdGhGYWN0b3J5ID0+IHtcclxuICAgICAgY29uc3QgZHluYW1pY0FycmF5ID0gYXJyYXkgYXMgRm9ybUFycmF5V2l0aEZhY3Rvcnk7XHJcbiAgICAgIGR5bmFtaWNBcnJheS5hZGRJdGVtID0gYWRkSXRlbTtcclxuICAgICAgZHluYW1pY0FycmF5LmNyZWF0ZUl0ZW0gPSBjcmVhdGVJdGVtO1xyXG4gICAgICBkeW5hbWljQXJyYXkucmVzaXplID0gcmVzaXplO1xyXG4gICAgICBkeW5hbWljQXJyYXkuY3JlYXRlTmV3QXJyYXkgPSBjcmVhdGVOZXdBcnJheTtcclxuICAgICAgcmV0dXJuIGR5bmFtaWNBcnJheTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXNpemUgPSBmdW5jdGlvbiAodGhpczogRm9ybUFycmF5LCBzaXplOiBudW1iZXIpIHtcclxuICAgICAgaWYgKGhhc0ZhY3RvcnkodGhpcykpIHtcclxuICAgICAgICBjb25zdCBuZXdBcnJheSA9IHJlc2l6ZUZvcm1BcnJheSh0aGlzLCBzaXplKTtcclxuICAgICAgICBwcmVwYXJlQXJyYXkobmV3QXJyYXkpO1xyXG4gICAgICAgIGZvcm1Hcm91cC5zZXRDb250cm9sKGl0ZW1Db21wb25lbnQua2V5LCBuZXdBcnJheSk7XHJcbiAgICAgIH0gICAgICBcclxuICAgIH07XHJcblxyXG4gICAgLy8gdXNlZCBleHRlcm5hbGx5OiBhZGRJdGVtLCByZXNpemVcclxuXHJcbiAgICByZXR1cm4gcHJlcGFyZUFycmF5KGZvcm1BcnJheSk7ICAgIFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNpemVGb3JtQXJyYXkoZm9ybUFycmF5OiBGb3JtQXJyYXlXaXRoRmFjdG9yeSwgc2l6ZTogbnVtYmVyKTogRm9ybUFycmF5IHtcclxuICAgIGlmIChmb3JtQXJyYXkubGVuZ3RoIDwgc2l6ZSkge1xyXG4gICAgICBjb25zdCBuZXdBcnJheSA9IG5ldyBGb3JtQXJyYXkoZm9ybUFycmF5LmNvbnRyb2xzKTtcclxuICAgICAgd2hpbGUgKGZvcm1BcnJheS5sZW5ndGggPCBzaXplKSB7XHJcbiAgICAgICAgZm9ybUFycmF5LmFkZEl0ZW0oKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbmV3QXJyYXk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmb3JtQXJyYXkubGVuZ3RoID4gc2l6ZSkge1xyXG4gICAgICByZXR1cm4gbmV3IEZvcm1BcnJheShmb3JtQXJyYXkuY29udHJvbHMuc2xpY2UoMCwgc2l6ZSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBmb3JtQXJyYXk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvbnRhaW5lcnMoY29tcG9uZW50OiBhbnkpOiB7IHBhdGg6IGFueTsgcm93czogYW55LCBkaXNhYmxlZDogYW55IH1bXSB7XHJcbiAgICBpZiAoY29tcG9uZW50LnR5cGUgPT09ICdncm91cCcpIHtcclxuICAgICAgcmV0dXJuIFt7XHJcbiAgICAgICAgcGF0aDogY29tcG9uZW50LnBhdGgsXHJcbiAgICAgICAgcm93czogY29tcG9uZW50LnJvd3MsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGNvbXBvbmVudC5kaXNhYmxlZFxyXG4gICAgICB9XTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKChjb21wb25lbnQudHlwZSA9PT0gJ3RhYicgfHwgY29tcG9uZW50LnR5cGUgPT09ICdhY2NvcmRpb24nKVxyXG4gICAgICAmJiBBcnJheS5pc0FycmF5KGNvbXBvbmVudC5wYW5lbHMpKSB7XHJcbiAgICAgIHJldHVybiBjb21wb25lbnQucGFuZWxzLm1hcCgocGFuZWw6IGFueSkgPT4gKHtcclxuICAgICAgICBwYXRoOiBwYW5lbC5wYXRoLFxyXG4gICAgICAgIHJvd3M6IHRoaXMubWV0YWRhdGEuZ2V0Rm9ybUJ5TmFtZShwYW5lbC50ZW1wbGF0ZSk/LnJvd3MgPz8gW10sXHJcbiAgICAgICAgZGlzYWJsZWQ6IHBhbmVsLmRpc2FibGVkXHJcbiAgICAgIH0pKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERlZmF1bHRWYWx1ZShjb21wb25lbnQ6IGFueSk6IGFueSB7XHJcbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxyXG4gICAgICBjYXNlIFwidGV4dGZpZWxkXCI6XHJcbiAgICAgIGNhc2UgXCJyYWRpb1wiOlxyXG4gICAgICBjYXNlIFwic2VsZWN0XCI6XHJcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5kZWZhdWx0VmFsdWUgYXMgc3RyaW5nO1xyXG4gICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5kZWZhdWx0VmFsdWUgYXMgbnVtYmVyO1xyXG4gICAgICBjYXNlIFwiY2hlY2tib3hcIjpcclxuICAgICAgICByZXR1cm4gKGNvbXBvbmVudC5kZWZhdWx0VmFsdWUgPz8gZmFsc2UpIGFzIGJvb2xlYW47XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFVwZGF0ZU9uKGNvbXBvbmVudDogYW55KTogXCJjaGFuZ2VcIiB8IFwiYmx1clwiIHwgbnVsbCB7XHJcbiAgICBpZiAoY29tcG9uZW50LnVwZGF0ZU9uID09PSAnY2hhbmdlJyB8fCBjb21wb25lbnQudXBkYXRlT24gPT09ICdibHVyJylcclxuICAgICAgcmV0dXJuIGNvbXBvbmVudC51cGRhdGVPbjtcclxuXHJcbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgY2FzZSBcInRleHRhcmVhXCI6XHJcbiAgICAgIGNhc2UgXCJ0ZXh0ZmllbGRcIjpcclxuICAgICAgICByZXR1cm4gXCJibHVyXCI7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaGFzRmFjdG9yeShhcnJheTogRm9ybUFycmF5KTogYXJyYXkgaXMgRm9ybUFycmF5V2l0aEZhY3Rvcnkge1xyXG4gIGlmICghYXJyYXkpIHJldHVybiBmYWxzZTtcclxuICBjb25zdCBjdXJyZW50ID0gYXJyYXkgYXMgYW55O1xyXG4gIHJldHVybiB0eXBlb2YgY3VycmVudC5jcmVhdGVJdGVtID09PSAnZnVuY3Rpb24nXHJcbiAgICAmJiB0eXBlb2YgY3VycmVudC5hZGRJdGVtID09PSAnZnVuY3Rpb24nXHJcbiAgICAmJiB0eXBlb2YgY3VycmVudC5yZXNpemUgPT09ICdmdW5jdGlvbidcclxuICAgICYmIHR5cGVvZiBjdXJyZW50LmNyZWF0ZU5ld0FycmF5ID09PSAnZnVuY3Rpb24nXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUFycmF5V2l0aEZhY3RvcnkgZXh0ZW5kcyBGb3JtQXJyYXkge1xyXG4gIGNyZWF0ZUl0ZW0oYWRkVG9BcnJheTogYm9vbGVhbik6IEZvcm1Hcm91cDtcclxuICBhZGRJdGVtKCk6IEZvcm1Hcm91cDtcclxuICByZXNpemUoc2l6ZTogbnVtYmVyKTogdm9pZDtcclxuICBjcmVhdGVOZXdBcnJheSgpOiBGb3JtQXJyYXlXaXRoRmFjdG9yeVxyXG59XHJcbiJdfQ==
357
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvYnVpbGRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFtQixTQUFTLEVBQUUsV0FBVyxFQUFzQixTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU94RyxPQUFPLEVBQUUsV0FBVyxFQUFpQixNQUFNLHNCQUFzQixDQUFDOzs7Ozs7OztBQUdsRSxNQUFNLE9BQU8sa0JBQWtCO0lBR25CO0lBQ0U7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQU5aLFlBQ1UsaUJBQW9DLEVBQ2xDLGNBQThCLEVBQzlCLGNBQThCLEVBQzlCLGFBQTRCLEVBQzVCLFlBQTBCLEVBQzFCLFFBQXlCO1FBTDNCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDbEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixhQUFRLEdBQVIsUUFBUSxDQUFpQjtJQUNyQyxDQUFDO0lBRUQsU0FBUyxDQUFDLFNBQW9CLEVBQUUsS0FBaUIsRUFBRSxZQUEyQixTQUFTO1FBQ3JGLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDdkUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDakUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzdELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FB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QUFDO1lBQzFDLEtBQUssUUFBUTtnQkFDWCxPQUFPLFNBQVMsQ0FBQyxZQUFzQixDQUFDO1lBQzFDLEtBQUssVUFBVTtnQkFDYixPQUFPLENBQUMsU0FBUyxDQUFDLFlBQVksSUFBSSxLQUFLLENBQVksQ0FBQztZQUN0RDtnQkFDRSxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0lBQ0gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxTQUFjO1FBQ2hDLElBQUksU0FBUyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksU0FBUyxDQUFDLFFBQVEsS0FBSyxNQUFNO1lBQ2xFLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUU1QixRQUFRLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN2QixLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssV0FBVztnQkFDZCxPQUFPLE1BQU0sQ0FBQztZQUNoQjtnQkFDRSxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0lBQ0gsQ0FBQzt3R0E5WFUsa0JBQWtCOzRHQUFsQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVU7O0FBa1lYLE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBZ0I7SUFDekMsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN6QixNQUFNLE9BQU8sR0FBRyxLQUFZLENBQUM7SUFDN0IsT0FBTyxPQUFPLE9BQU8sQ0FBQyxVQUFVLEtBQUssVUFBVTtXQUMxQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLEtBQUssVUFBVTtXQUNyQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLEtBQUssVUFBVTtXQUNwQyxPQUFPLE9BQU8sQ0FBQyxjQUFjLEtBQUssVUFBVSxDQUFBO0FBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUNvbnRyb2xPcHRpb25zLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25Db2xsZWN0aW9uLCBWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4vdmFsaWRhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlzYWJsZUNvbGxlY3Rpb24sIERpc2FibGVTZXJ2aWNlIH0gZnJvbSAnLi9kaXNhYmxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wdXRlQ29sbGVjdGlvbiwgQ29tcHV0ZVNlcnZpY2UgfSBmcm9tICcuL2NvbXB1dGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0YXR1c0NvbGxlY3Rpb24sIFN0YXR1c1NlcnZpY2UgfSBmcm9tICcuL3N0YXR1cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXZlbnRDb2xsZWN0aW9uLCBFdmVudFNlcnZpY2UgfSBmcm9tICcuL2V2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL21ldGFkYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXBFeCwgRm9ybUdyb3VwTW9kZSB9IGZyb20gJy4uL3V0aWxzL0Zvcm1Hcm91cEV4JztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEZvcm1CdWlsZGVyU2VydmljZSAge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZGlzYWJsZVNlcnZpY2U6IERpc2FibGVTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgY29tcHV0ZVNlcnZpY2U6IENvbXB1dGVTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgc3RhdHVzU2VydmljZTogU3RhdHVzU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGV2ZW50U2VydmljZTogRXZlbnRTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgbWV0YWRhdGE6IE1ldGFkYXRhU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgYnVpbGRGb3JtKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBmb3JtczogQXJyYXk8YW55PiwgZ3JvdXBNb2RlOiBGb3JtR3JvdXBNb2RlID0gXCJkZWZhdWx0XCIpIHtcclxuICAgIGNvbnN0IHZhbGlkYXRpb25Db2xsZWN0aW9uID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS5jcmVhdGVDb2xsZWN0aW9uKCk7XHJcbiAgICBjb25zdCBkaXNhYmxlQ29sbGVjdGlvbiA9IHRoaXMuZGlzYWJsZVNlcnZpY2UuY3JlYXRlQ29sbGVjdGlvbigpO1xyXG4gICAgY29uc3QgZXZlbnRDb2xsZWN0aW9uID0gdGhpcy5ldmVudFNlcnZpY2UuY3JlYXRlQ29sbGVjdGlvbigpO1xyXG4gICAgY29uc3QgY29tcHV0ZUNvbGxlY3Rpb24gPSB0aGlzLmNvbXB1dGVTZXJ2aWNlLmNyZWF0ZUNvbGxlY3Rpb24oKTtcclxuICAgIGZvcm1zLmZvckVhY2goKGZvcm06IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBzdGF0dXNDb2xsZWN0aW9uID0gdGhpcy5zdGF0dXNTZXJ2aWNlLmNyZWF0ZUNvbGxlY3Rpb24oKTtcclxuICAgICAgY29uc3QgY3VycmVudEdyb3VwID0gdGhpcy5hcHBseVBhdGgoZm9ybUdyb3VwLCBmb3JtLnBhdGgsIGdyb3VwTW9kZSk7XHJcbiAgICAgIGlmICh0aGlzLmhhc1BhdGgoZm9ybS5wYXRoKSkge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZVNlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKGRpc2FibGVDb2xsZWN0aW9uLCBjdXJyZW50R3JvdXAsIGZvcm1Hcm91cCwgZm9ybSk7XHJcbiAgICAgIH1cclxuICAgICAgZm9ybS5yb3dzPy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYWRkQ29udHJvbHMoY3VycmVudEdyb3VwLCByb3cuY29tcG9uZW50cywgZ3JvdXBNb2RlXHJcbiAgICAgICAgICAsIGRpc2FibGVDb2xsZWN0aW9uXHJcbiAgICAgICAgICAsIGNvbXB1dGVDb2xsZWN0aW9uXHJcbiAgICAgICAgICAsIHZhbGlkYXRpb25Db2xsZWN0aW9uXHJcbiAgICAgICAgICAsIHN0YXR1c0NvbGxlY3Rpb25cclxuICAgICAgICAgICwgZXZlbnRDb2xsZWN0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc3RhdHVzU2VydmljZS5zZXR1cENvbGxlY3Rpb24oZm9ybSwgc3RhdHVzQ29sbGVjdGlvbik7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGlzYWJsZVNlcnZpY2Uuc2V0dXBDb2xsZWN0aW9uKGRpc2FibGVDb2xsZWN0aW9uKTtcclxuICAgIHRoaXMuY29tcHV0ZVNlcnZpY2Uuc2V0dXBDb2xsZWN0aW9uKGNvbXB1dGVDb2xsZWN0aW9uKTtcclxuICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uuc2V0dXBDb2xsZWN0aW9uKHZhbGlkYXRpb25Db2xsZWN0aW9uKTtcclxuICAgIHRoaXMuZXZlbnRTZXJ2aWNlLnNldHVwQ29sbGVjdGlvbihldmVudENvbGxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNQYXRoKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlQYXRoKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBwYXRoOiBzdHJpbmcsIGdyb3VwTW9kZTogRm9ybUdyb3VwTW9kZSkge1xyXG4gICAgaWYgKCF0aGlzLmhhc1BhdGgocGF0aCkpIHtcclxuICAgICAgcmV0dXJuIGZvcm1Hcm91cDtcclxuICAgIH1cclxuICAgIGxldCBjdXJyZW50R3JvdXA6IEZvcm1Hcm91cCA9IGZvcm1Hcm91cDtcclxuICAgIHRoaXMuc3BsaXRQYXRoKHBhdGgpLmZvckVhY2goKHNlZ21lbnQpID0+IHtcclxuICAgICAgY29uc3QgZXhpc3RHcm91cCA9IGN1cnJlbnRHcm91cC5nZXQoc2VnbWVudCk7XHJcbiAgICAgIGlmIChleGlzdEdyb3VwIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcbiAgICAgICAgY3VycmVudEdyb3VwID0gZXhpc3RHcm91cDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoZXhpc3RHcm91cCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNyZWF0ZSBmb3JtIGdyb3VwIGJlY2F1c2UgYW4gZWxlbWVudCB3aXRoIHBhdGggJHtzZWdtZW50fSBhbHJlYWR5IGV4aXN0c2ApO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHNlZ21lbnRHcm91cCA9IHRoaXMuY3JlYXRlRm9ybUdyb3VwKGdyb3VwTW9kZSk7XHJcbiAgICAgICAgY3VycmVudEdyb3VwLmFkZENvbnRyb2woc2VnbWVudCwgc2VnbWVudEdyb3VwKTtcclxuICAgICAgICBjdXJyZW50R3JvdXAgPSBzZWdtZW50R3JvdXA7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGN1cnJlbnRHcm91cDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3BsaXRQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcclxuICAgIGlmICghcGF0aCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGF0aFxyXG4gICAgICAuc3BsaXQoJy4nKVxyXG4gICAgICAubWFwKHNlZ21lbnQgPT4gc2VnbWVudC50cmltKCkpXHJcbiAgICAgIC5maWx0ZXIoc2VnbWVudCA9PiBzZWdtZW50Lmxlbmd0aCA+IDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtR3JvdXAoZ3JvdXBNb2RlOiBGb3JtR3JvdXBNb2RlKTogRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiAoZ3JvdXBNb2RlID09PSBcImRlZmF1bHRcIilcclxuICAgICAgPyBuZXcgRm9ybUdyb3VwKHt9KVxyXG4gICAgICA6IG5ldyBGb3JtR3JvdXBFeCh7fSwgZ3JvdXBNb2RlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkQ29udHJvbHMoZm9ybUdyb3VwOiBGb3JtR3JvdXBcclxuICAgICwgY29tcG9uZW50czogQXJyYXk8YW55PlxyXG4gICAgLCBncm91cE1vZGU6IEZvcm1Hcm91cE1vZGVcclxuICAgICwgZGlzYWJsZUNvbGxlY3Rpb246IERpc2FibGVDb2xsZWN0aW9uXHJcbiAgICAsIGNvbXB1dGVDb2xsZWN0aW9uOiBDb21wdXRlQ29sbGVjdGlvblxyXG4gICAgLCB2YWxpZGF0aW9uQ29sbGVjdGlvbjogVmFsaWRhdGlvbkNvbGxlY3Rpb25cclxuICAgICwgc3RhdHVzQ29sbGVjdGlvbjogU3RhdHVzQ29sbGVjdGlvblxyXG4gICAgLCBldmVudENvbGxlY3Rpb246IEV2ZW50Q29sbGVjdGlvbikge1xyXG4gICAgbGV0IGZvcm1Db21wb25lbnQgPSB0aGlzO1xyXG5cclxuICAgIGNvbXBvbmVudHM/LmZvckVhY2goKGNvbXBvbmVudDogYW55KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmlzRm9ybUNvbXBvbmVudChjb21wb25lbnQpKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEdyb3VwID0gdGhpcy5hcHBseVBhdGgoZm9ybUdyb3VwLCBjb21wb25lbnQucGF0aCwgZ3JvdXBNb2RlKTtcclxuICAgICAgICBpZiAoY3VycmVudEdyb3VwLmNvbnRhaW5zKGNvbXBvbmVudC5rZXkpKSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXR1c1NlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKHN0YXR1c0NvbGxlY3Rpb24sIGN1cnJlbnRHcm91cC5nZXQoY29tcG9uZW50LmtleSkgYXMgQWJzdHJhY3RDb250cm9sLCBjb21wb25lbnQpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGxldCBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjb21wb25lbnQpO1xyXG4gICAgICAgICAgY29uc3Qgb3B0aW9uczogRm9ybUNvbnRyb2xPcHRpb25zID0ge1xyXG4gICAgICAgICAgICB1cGRhdGVPbjogdGhpcy5nZXRVcGRhdGVPbihjb21wb25lbnQpIHx8IFwiY2hhbmdlXCIsXHJcbiAgICAgICAgICAgIG5vbk51bGxhYmxlOiAoZGVmYXVsdFZhbHVlICE9PSBudWxsICYmIGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woZGVmYXVsdFZhbHVlLCBvcHRpb25zKTtcclxuICAgICAgICAgIGN1cnJlbnRHcm91cC5hZGRDb250cm9sKGNvbXBvbmVudC5rZXksIGNvbnRyb2wpO1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5hZGRUb0NvbGxlY3Rpb24odmFsaWRhdGlvbkNvbGxlY3Rpb24sIGNvbnRyb2wsIGN1cnJlbnRHcm91cCwgY29tcG9uZW50KTtcclxuICAgICAgICAgIHRoaXMuc3RhdHVzU2VydmljZS5hZGRUb0NvbGxlY3Rpb24oc3RhdHVzQ29sbGVjdGlvbiwgY29udHJvbCwgY29tcG9uZW50KTtcclxuICAgICAgICAgIHRoaXMuZGlzYWJsZVNlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKGRpc2FibGVDb2xsZWN0aW9uLCBjb250cm9sLCBmb3JtR3JvdXAsIGNvbXBvbmVudCk7XHJcbiAgICAgICAgICB0aGlzLmNvbXB1dGVTZXJ2aWNlLmFkZFRvQ29sbGVjdGlvbihjb21wdXRlQ29sbGVjdGlvbiwgY29udHJvbCwgZm9ybUdyb3VwLCBjb21wb25lbnQpO1xyXG4gICAgICAgICAgdGhpcy5ldmVudFNlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKGV2ZW50Q29sbGVjdGlvbiwgY29udHJvbCwgY3VycmVudEdyb3VwLCBjb21wb25lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmlzQ29udGFpbmVyQ29tcG9uZW50KGNvbXBvbmVudCkpIHtcclxuICAgICAgICBjb25zdCBjb250YWluZXJzID0gdGhpcy5nZXRDb250YWluZXJzKGNvbXBvbmVudCk7XHJcbiAgICAgICAgY29udGFpbmVycz8uZm9yRWFjaCgoY29udGFpbmVyKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyZW50R3JvdXAgPSB0aGlzLmFwcGx5UGF0aChmb3JtR3JvdXAsIGNvbnRhaW5lci5wYXRoLCBncm91cE1vZGUpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuaGFzUGF0aChjb250YWluZXIucGF0aCkpIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2VydmljZS5hZGRUb0NvbGxlY3Rpb24oZGlzYWJsZUNvbGxlY3Rpb24sIGN1cnJlbnRHcm91cCwgZm9ybUdyb3VwLCBjb250YWluZXIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29udGFpbmVyLnJvd3M/LmZvckVhY2goKHJvdzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGZvcm1Db21wb25lbnQuYWRkQ29udHJvbHMoY3VycmVudEdyb3VwLCByb3cuY29tcG9uZW50cywgZ3JvdXBNb2RlXHJcbiAgICAgICAgICAgICAgLCBkaXNhYmxlQ29sbGVjdGlvblxyXG4gICAgICAgICAgICAgICwgY29tcHV0ZUNvbGxlY3Rpb25cclxuICAgICAgICAgICAgICAsIHZhbGlkYXRpb25Db2xsZWN0aW9uXHJcbiAgICAgICAgICAgICAgLCBzdGF0dXNDb2xsZWN0aW9uXHJcbiAgICAgICAgICAgICAgLCBldmVudENvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgfSk7ICAgICAgICAgIFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuaXNBcnJheUNvbXBvbmVudChjb21wb25lbnQpKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbUNvbXBvbmVudCA9IHRoaXMuZ2V0QXJyYXlJdGVtKGNvbXBvbmVudCk7XHJcbiAgICAgICAgaWYgKGl0ZW1Db21wb25lbnQua2V5KSB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyZW50R3JvdXAgPSB0aGlzLmFwcGx5UGF0aChmb3JtR3JvdXAsIGl0ZW1Db21wb25lbnQucGF0aCwgZ3JvdXBNb2RlKTtcclxuICAgICAgICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuY3JlYXRlRm9ybUFycmF5KGN1cnJlbnRHcm91cCwgaXRlbUNvbXBvbmVudCwgZ3JvdXBNb2RlKTtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKHZhbGlkYXRpb25Db2xsZWN0aW9uLCBmb3JtQXJyYXksIGN1cnJlbnRHcm91cCwgY29tcG9uZW50KTtcclxuICAgICAgICAgIHRoaXMuc3RhdHVzU2VydmljZS5hZGRUb0NvbGxlY3Rpb24oc3RhdHVzQ29sbGVjdGlvbiwgZm9ybUFycmF5LCBjb21wb25lbnQpO1xyXG4gICAgICAgICAgdGhpcy5ldmVudFNlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKGV2ZW50Q29sbGVjdGlvbiwgZm9ybUFycmF5LCBjdXJyZW50R3JvdXAsIGNvbXBvbmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuaXNDb21wb25lbnRXaXRoSW5wdXQoY29tcG9uZW50KSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRHcm91cCA9IHRoaXMuYXBwbHlQYXRoKGZvcm1Hcm91cCwgY29tcG9uZW50LnBhdGgsIGdyb3VwTW9kZSk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRHcm91cC5jb250YWlucyhjb21wb25lbnQua2V5KSkge1xyXG4gICAgICAgICAgY29uc3QgY29udHJvbCA9IGN1cnJlbnRHcm91cC5nZXQoY29tcG9uZW50LmtleSkgYXMgQWJzdHJhY3RDb250cm9sO1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5hZGRUb0NvbGxlY3Rpb24odmFsaWRhdGlvbkNvbGxlY3Rpb24sIGNvbnRyb2wsIGN1cnJlbnRHcm91cCwgY29tcG9uZW50KTtcclxuICAgICAgICAgIHRoaXMuc3RhdHVzU2VydmljZS5hZGRUb0NvbGxlY3Rpb24oc3RhdHVzQ29sbGVjdGlvbiwgY29udHJvbCwgY29tcG9uZW50KTtcclxuICAgICAgICAgIHRoaXMuZGlzYWJsZVNlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKGRpc2FibGVDb2xsZWN0aW9uLCBjb250cm9sLCBjdXJyZW50R3JvdXAsIGNvbXBvbmVudCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChudWxsKTtcclxuICAgICAgICAgIGN1cnJlbnRHcm91cC5hZGRDb250cm9sKGNvbXBvbmVudC5rZXksIGNvbnRyb2wpO1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5hZGRUb0NvbGxlY3Rpb24odmFsaWRhdGlvbkNvbGxlY3Rpb24sIGNvbnRyb2wsIGN1cnJlbnRHcm91cCwgY29tcG9uZW50KTtcclxuICAgICAgICAgIHRoaXMuc3RhdHVzU2VydmljZS5hZGRUb0NvbGxlY3Rpb24oc3RhdHVzQ29sbGVjdGlvbiwgY29udHJvbCwgY29tcG9uZW50KTtcclxuICAgICAgICAgIHRoaXMuZGlzYWJsZVNlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKGRpc2FibGVDb2xsZWN0aW9uLCBjb250cm9sLCBjdXJyZW50R3JvdXAsIGNvbXBvbmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNGb3JtQ29tcG9uZW50KGNvbXBvbmVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJjaGVja2JveFwiOlxyXG4gICAgICBjYXNlIFwiY2hlY2tsaXN0XCI6XHJcbiAgICAgIGNhc2UgXCJkYXRldGltZVwiOlxyXG4gICAgICBjYXNlIFwiZmlsZXBpY2tlclwiOlxyXG4gICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgICAgIGNhc2UgXCJyYWRpb1wiOlxyXG4gICAgICBjYXNlIFwic2VsZWN0XCI6XHJcbiAgICAgIGNhc2UgXCJ0YWdsaXN0XCI6XHJcbiAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxyXG4gICAgICBjYXNlIFwidGV4dGZpZWxkXCI6XHJcbiAgICAgIGNhc2UgXCJyYW5nZVwiOlxyXG4gICAgICBjYXNlIFwiZXhwcmVzc2lvblwiOlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNDb250YWluZXJDb21wb25lbnQoY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHN3aXRjaCAoY29tcG9uZW50LnR5cGUpIHtcclxuICAgICAgY2FzZSBcImdyb3VwXCI6XHJcbiAgICAgIGNhc2UgXCJ0YWJcIjpcclxuICAgICAgY2FzZSBcImFjY29yZGlvblwiOlxyXG4gICAgICBjYXNlIFwidGVtcGxhdGVob3N0XCI6XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0NvbXBvbmVudFdpdGhJbnB1dChjb21wb25lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGNvbXBvbmVudC50eXBlID09PSBcImNvbXBvbmVudFwiXHJcbiAgICAgICYmIGNvbXBvbmVudC5pc0lucHV0ID09PSB0cnVlXHJcbiAgICAgICYmIGNvbXBvbmVudC5rZXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzQXJyYXlDb21wb25lbnQoY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHN3aXRjaCAoY29tcG9uZW50LnR5cGUpIHtcclxuICAgICAgY2FzZSBcImR5bmFtaWNsaXN0XCI6XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBcnJheUl0ZW0oY29tcG9uZW50OiBhbnkpOiB7IGtleTogYW55OyBwYXRoOiBhbnk7IHJvd3M6IGFueSB9IHtcclxuICAgIGlmIChjb21wb25lbnQudHlwZSA9PT0gJ2R5bmFtaWNsaXN0Jykge1xyXG4gICAgICByZXR1cm4geyBrZXk6IGNvbXBvbmVudC5rZXksIHBhdGg6IGNvbXBvbmVudC5wYXRoLCByb3dzOiBjb21wb25lbnQucm93cyB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IGtleTogbnVsbCwgcGF0aDogbnVsbCwgcm93czogW10gfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUFycmF5KGZvcm1Hcm91cDogRm9ybUdyb3VwXHJcbiAgICAsIGl0ZW1Db21wb25lbnQ6IGFueVxyXG4gICAgLCBncm91cE1vZGU6IEZvcm1Hcm91cE1vZGUpOiBGb3JtQXJyYXlXaXRoRmFjdG9yeSB7XHJcbiAgICBjb25zdCBmb3JtQ29tcG9uZW50ID0gdGhpcztcclxuXHJcbiAgICBjb25zdCBwcmVwYXJlSXRlbSA9IGZ1bmN0aW9uIChmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IHZvaWQge1xyXG4gICAgICBjb25zdCBzdGF0dXNDb2xsZWN0aW9uID0gZm9ybUNvbXBvbmVudC5zdGF0dXNTZXJ2aWNlLmNyZWF0ZUNvbGxlY3Rpb24oKTtcclxuICAgICAgY29uc3QgdmFsaWRhdGlvbkNvbGxlY3Rpb24gPSBmb3JtQ29tcG9uZW50LnZhbGlkYXRpb25TZXJ2aWNlLmNyZWF0ZUNvbGxlY3Rpb24oKTtcclxuICAgICAgY29uc3QgZXZlbnRDb2xsZWN0aW9uID0gZm9ybUNvbXBvbmVudC5ldmVudFNlcnZpY2UuY3JlYXRlQ29sbGVjdGlvbigpO1xyXG4gICAgICBjb25zdCBkaXNhYmxlQ29sbGVjdGlvbiA9IGZvcm1Db21wb25lbnQuZGlzYWJsZVNlcnZpY2UuY3JlYXRlQ29sbGVjdGlvbigpO1xyXG4gICAgICBjb25zdCBjb21wdXRlQ29sbGVjdGlvbiA9IGZvcm1Db21wb25lbnQuY29tcHV0ZVNlcnZpY2UuY3JlYXRlQ29sbGVjdGlvbigpO1xyXG4gICAgICBpdGVtQ29tcG9uZW50LnJvd3M/LmZvckVhY2goKHJvdzogYW55KSA9PiB7XHJcbiAgICAgICAgZm9ybUNvbXBvbmVudC5hZGRDb250cm9scyhmb3JtR3JvdXAsIHJvdy5jb21wb25lbnRzLCBncm91cE1vZGVcclxuICAgICAgICAgICwgZGlzYWJsZUNvbGxlY3Rpb25cclxuICAgICAgICAgICwgY29tcHV0ZUNvbGxlY3Rpb25cclxuICAgICAgICAgICwgdmFsaWRhdGlvbkNvbGxlY3Rpb25cclxuICAgICAgICAgICwgc3RhdHVzQ29sbGVjdGlvblxyXG4gICAgICAgICAgLCBldmVudENvbGxlY3Rpb24pO1xyXG4gICAgICB9KTtcclxuICAgICAgLy8gaWdub3JlIHN0YXR1c0NvbGxlY3Rpb25cclxuICAgICAgZm9ybUNvbXBvbmVudC5kaXNhYmxlU2VydmljZS5zZXR1cENvbGxlY3Rpb24oZGlzYWJsZUNvbGxlY3Rpb24pO1xyXG4gICAgICBmb3JtQ29tcG9uZW50LmNvbXB1dGVTZXJ2aWNlLnNldHVwQ29sbGVjdGlvbihjb21wdXRlQ29sbGVjdGlvbik7XHJcbiAgICAgIGZvcm1Db21wb25lbnQudmFsaWRhdGlvblNlcnZpY2Uuc2V0dXBDb2xsZWN0aW9uKHZhbGlkYXRpb25Db2xsZWN0aW9uKTtcclxuICAgICAgZm9ybUNvbXBvbmVudC5ldmVudFNlcnZpY2Uuc2V0dXBDb2xsZWN0aW9uKGV2ZW50Q29sbGVjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3JlYXRlSXRlbSA9IGZ1bmN0aW9uICh0aGlzOiBGb3JtQXJyYXksIGFkZFRvQXJyYXk6IGJvb2xlYW4gPSBmYWxzZSk6IEZvcm1Hcm91cCB7XHJcbiAgICAgIGNvbnN0IG5ld0dyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICAgIGlmIChhZGRUb0FycmF5KSB0aGlzLnB1c2gobmV3R3JvdXApO1xyXG4gICAgICBwcmVwYXJlSXRlbShuZXdHcm91cCk7XHJcbiAgICAgIHJldHVybiBuZXdHcm91cDtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgYWRkSXRlbSA9IGZ1bmN0aW9uICh0aGlzOiBGb3JtQXJyYXkpOiBGb3JtR3JvdXAge1xyXG4gICAgICBpZiAoaGFzRmFjdG9yeSh0aGlzKSkge1xyXG4gICAgICAgIGNvbnN0IG5ld0dyb3VwID0gdGhpcy5jcmVhdGVJdGVtKHRydWUpO1xyXG4gICAgICAgIHJldHVybiBuZXdHcm91cDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAnQ2Fubm90IGFkZCBpdGVtOiB0aGUgRm9ybUFycmF5IGRvZXMgbm90IGltcGxlbWVudCBGb3JtQXJyYXlXaXRoRmFjdG9yeS4nXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvdmVycmlkZUFycmF5ID0gKGFycmF5OiBGb3JtQXJyYXlXaXRoRmFjdG9yeSkgPT4ge1xyXG4gICAgICBjb25zdCBjcmVhdGVJdGVtID0gYXJyYXkuY3JlYXRlSXRlbS5iaW5kKGFycmF5KTtcclxuICAgICAgYXJyYXkuY3JlYXRlSXRlbSA9IGZ1bmN0aW9uICh0aGlzOiBGb3JtQXJyYXksIGFkZFRvQXJyYXk6IGJvb2xlYW4pOiBGb3JtR3JvdXAge1xyXG4gICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IGNyZWF0ZUl0ZW0oYWRkVG9BcnJheSk7XHJcbiAgICAgICAgcHJlcGFyZUl0ZW0oZm9ybUdyb3VwKTtcclxuICAgICAgICByZXR1cm4gZm9ybUdyb3VwO1xyXG4gICAgICB9OyAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZXhpc3RpbmcgPSBmb3JtR3JvdXAuZ2V0KGl0ZW1Db21wb25lbnQua2V5KTtcclxuXHJcbiAgICBpZiAoZXhpc3RpbmcgaW5zdGFuY2VvZiBGb3JtQXJyYXkgJiYgaGFzRmFjdG9yeShleGlzdGluZykpIHtcclxuICAgICAgb3ZlcnJpZGVBcnJheShleGlzdGluZyk7XHJcbiAgICAgIHJldHVybiBleGlzdGluZztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSBuZXcgRm9ybUFycmF5PEZvcm1Hcm91cD4oW10pO1xyXG5cclxuICAgIGZvcm1Hcm91cC5hZGRDb250cm9sKGl0ZW1Db21wb25lbnQua2V5LCBmb3JtQXJyYXkpO1xyXG5cclxuICAgIGNvbnN0IHJlc2l6ZUZvcm1BcnJheSA9IHRoaXMucmVzaXplRm9ybUFycmF5O1xyXG5cclxuICAgIGNvbnN0IGNyZWF0ZU5ld0FycmF5ID0gZnVuY3Rpb24gKCkgOiBGb3JtQXJyYXlXaXRoRmFjdG9yeSB7XHJcbiAgICAgIGNvbnN0IG5ld0FycmF5ID0gbmV3IEZvcm1BcnJheTxGb3JtR3JvdXA+KFtdKTtcclxuICAgICAgcmV0dXJuIHByZXBhcmVBcnJheShuZXdBcnJheSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcHJlcGFyZUFycmF5ID0gKGFycmF5OiBGb3JtQXJyYXkpOiBGb3JtQXJyYXlXaXRoRmFjdG9yeSA9PiB7XHJcbiAgICAgIGNvbnN0IGR5bmFtaWNBcnJheSA9IGFycmF5IGFzIEZvcm1BcnJheVdpdGhGYWN0b3J5O1xyXG4gICAgICBkeW5hbWljQXJyYXkuYWRkSXRlbSA9IGFkZEl0ZW07XHJcbiAgICAgIGR5bmFtaWNBcnJheS5jcmVhdGVJdGVtID0gY3JlYXRlSXRlbTtcclxuICAgICAgZHluYW1pY0FycmF5LnJlc2l6ZSA9IHJlc2l6ZTtcclxuICAgICAgZHluYW1pY0FycmF5LmNyZWF0ZU5ld0FycmF5ID0gY3JlYXRlTmV3QXJyYXk7XHJcbiAgICAgIHJldHVybiBkeW5hbWljQXJyYXk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzaXplID0gZnVuY3Rpb24gKHRoaXM6IEZvcm1BcnJheSwgc2l6ZTogbnVtYmVyKSB7XHJcbiAgICAgIGlmIChoYXNGYWN0b3J5KHRoaXMpKSB7XHJcbiAgICAgICAgY29uc3QgbmV3QXJyYXkgPSByZXNpemVGb3JtQXJyYXkodGhpcywgc2l6ZSk7XHJcbiAgICAgICAgcHJlcGFyZUFycmF5KG5ld0FycmF5KTtcclxuICAgICAgICBmb3JtR3JvdXAuc2V0Q29udHJvbChpdGVtQ29tcG9uZW50LmtleSwgbmV3QXJyYXkpO1xyXG4gICAgICB9ICAgICAgXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIHVzZWQgZXh0ZXJuYWxseTogYWRkSXRlbSwgcmVzaXplXHJcblxyXG4gICAgcmV0dXJuIHByZXBhcmVBcnJheShmb3JtQXJyYXkpOyAgICBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzaXplRm9ybUFycmF5KGZvcm1BcnJheTogRm9ybUFycmF5V2l0aEZhY3RvcnksIHNpemU6IG51bWJlcik6IEZvcm1BcnJheSB7XHJcbiAgICBpZiAoZm9ybUFycmF5Lmxlbmd0aCA8IHNpemUpIHtcclxuICAgICAgY29uc3QgbmV3QXJyYXkgPSBuZXcgRm9ybUFycmF5KGZvcm1BcnJheS5jb250cm9scyk7XHJcbiAgICAgIHdoaWxlIChmb3JtQXJyYXkubGVuZ3RoIDwgc2l6ZSkge1xyXG4gICAgICAgIGZvcm1BcnJheS5hZGRJdGVtKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG5ld0FycmF5O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZm9ybUFycmF5Lmxlbmd0aCA+IHNpemUpIHtcclxuICAgICAgcmV0dXJuIG5ldyBGb3JtQXJyYXkoZm9ybUFycmF5LmNvbnRyb2xzLnNsaWNlKDAsIHNpemUpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gZm9ybUFycmF5O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb250YWluZXJzKGNvbXBvbmVudDogYW55KTogeyBwYXRoOiBhbnk7IHJvd3M6IGFueSwgZGlzYWJsZWQ6IGFueSB9W10ge1xyXG4gICAgaWYgKGNvbXBvbmVudC50eXBlID09PSAnZ3JvdXAnKSB7XHJcbiAgICAgIHJldHVybiBbe1xyXG4gICAgICAgIHBhdGg6IGNvbXBvbmVudC5wYXRoLFxyXG4gICAgICAgIHJvd3M6IGNvbXBvbmVudC5yb3dzLFxyXG4gICAgICAgIGRpc2FibGVkOiBjb21wb25lbnQuZGlzYWJsZWRcclxuICAgICAgfV07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgoY29tcG9uZW50LnR5cGUgPT09ICd0YWInIHx8IGNvbXBvbmVudC50eXBlID09PSAnYWNjb3JkaW9uJylcclxuICAgICAgJiYgQXJyYXkuaXNBcnJheShjb21wb25lbnQucGFuZWxzKSkge1xyXG4gICAgICByZXR1cm4gY29tcG9uZW50LnBhbmVscy5tYXAoKHBhbmVsOiBhbnkpID0+ICh7XHJcbiAgICAgICAgcGF0aDogcGFuZWwucGF0aCxcclxuICAgICAgICByb3dzOiB0aGlzLm1ldGFkYXRhLmdldEZvcm1CeU5hbWUocGFuZWwudGVtcGxhdGUpPy5yb3dzID8/IFtdLFxyXG4gICAgICAgIGRpc2FibGVkOiBwYW5lbC5kaXNhYmxlZFxyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb21wb25lbnQudHlwZSA9PT0gJ3RlbXBsYXRlaG9zdCcpIHtcclxuICAgICAgcmV0dXJuIFt7XHJcbiAgICAgICAgcGF0aDogY29tcG9uZW50LnBhdGgsXHJcbiAgICAgICAgcm93czogdGhpcy5tZXRhZGF0YS5nZXRGb3JtQnlOYW1lKGNvbXBvbmVudC50ZW1wbGF0ZSk/LnJvd3MgPz8gW10sXHJcbiAgICAgICAgZGlzYWJsZWQ6IGNvbXBvbmVudC5kaXNhYmxlZFxyXG4gICAgICB9XTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERlZmF1bHRWYWx1ZShjb21wb25lbnQ6IGFueSk6IGFueSB7XHJcbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxyXG4gICAgICBjYXNlIFwidGV4dGZpZWxkXCI6XHJcbiAgICAgIGNhc2UgXCJyYWRpb1wiOlxyXG4gICAgICBjYXNlIFwic2VsZWN0XCI6XHJcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5kZWZhdWx0VmFsdWUgYXMgc3RyaW5nO1xyXG4gICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5kZWZhdWx0VmFsdWUgYXMgbnVtYmVyO1xyXG4gICAgICBjYXNlIFwiY2hlY2tib3hcIjpcclxuICAgICAgICByZXR1cm4gKGNvbXBvbmVudC5kZWZhdWx0VmFsdWUgPz8gZmFsc2UpIGFzIGJvb2xlYW47XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFVwZGF0ZU9uKGNvbXBvbmVudDogYW55KTogXCJjaGFuZ2VcIiB8IFwiYmx1clwiIHwgbnVsbCB7XHJcbiAgICBpZiAoY29tcG9uZW50LnVwZGF0ZU9uID09PSAnY2hhbmdlJyB8fCBjb21wb25lbnQudXBkYXRlT24gPT09ICdibHVyJylcclxuICAgICAgcmV0dXJuIGNvbXBvbmVudC51cGRhdGVPbjtcclxuXHJcbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgY2FzZSBcInRleHRhcmVhXCI6XHJcbiAgICAgIGNhc2UgXCJ0ZXh0ZmllbGRcIjpcclxuICAgICAgICByZXR1cm4gXCJibHVyXCI7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaGFzRmFjdG9yeShhcnJheTogRm9ybUFycmF5KTogYXJyYXkgaXMgRm9ybUFycmF5V2l0aEZhY3Rvcnkge1xyXG4gIGlmICghYXJyYXkpIHJldHVybiBmYWxzZTtcclxuICBjb25zdCBjdXJyZW50ID0gYXJyYXkgYXMgYW55O1xyXG4gIHJldHVybiB0eXBlb2YgY3VycmVudC5jcmVhdGVJdGVtID09PSAnZnVuY3Rpb24nXHJcbiAgICAmJiB0eXBlb2YgY3VycmVudC5hZGRJdGVtID09PSAnZnVuY3Rpb24nXHJcbiAgICAmJiB0eXBlb2YgY3VycmVudC5yZXNpemUgPT09ICdmdW5jdGlvbidcclxuICAgICYmIHR5cGVvZiBjdXJyZW50LmNyZWF0ZU5ld0FycmF5ID09PSAnZnVuY3Rpb24nXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUFycmF5V2l0aEZhY3RvcnkgZXh0ZW5kcyBGb3JtQXJyYXkge1xyXG4gIGNyZWF0ZUl0ZW0oYWRkVG9BcnJheTogYm9vbGVhbik6IEZvcm1Hcm91cDtcclxuICBhZGRJdGVtKCk6IEZvcm1Hcm91cDtcclxuICByZXNpemUoc2l6ZTogbnVtYmVyKTogdm9pZDtcclxuICBjcmVhdGVOZXdBcnJheSgpOiBGb3JtQXJyYXlXaXRoRmFjdG9yeVxyXG59XHJcbiJdfQ==
@@ -52,7 +52,7 @@ export class ComputeService {
52
52
  const result = this.programmability.evaluate(formGroup, expression, { cacheable: false });
53
53
  assignValue(result);
54
54
  };
55
- const dependencies = this.programmability.getDependencies(toFeelable({
55
+ const dependencies = this.programmability.getDependencies(formGroup, toFeelable({
56
56
  expression: expression,
57
57
  deactivate: deactivate
58
58
  })).filter(dep => dep !== key);
@@ -74,4 +74,4 @@ export class ComputeService {
74
74
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ComputeService, decorators: [{
75
75
  type: Injectable
76
76
  }], ctorParameters: () => [{ type: i1.ProgrammabilityService }, { type: i2.FormService }] });
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvY29tcHV0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7O0FBRy9DLE1BQU0sT0FBTyxjQUFjO0lBR2Y7SUFDRTtJQUZaLFlBQ1UsZUFBdUMsRUFDckMsV0FBd0I7UUFEMUIsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3JDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQ3BDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksR0FBRyxFQUFtQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxlQUFlLENBQUMsVUFBNkIsRUFBRSxPQUF3QixFQUNuRSxXQUFzQixFQUFFLFNBQWM7UUFFeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDbkUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxVQUE2QjtRQUMzQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFNBQWM7UUFDdkMsTUFBTSxVQUFVLEdBQUcsU0FBUyxFQUFFLFVBQVUsQ0FBQztRQUN6QyxPQUFP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Yzs7NEZBQWQsY0FBYztrQkFEMUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUHJvZ3JhbW1hYmlsaXR5U2VydmljZSB9IGZyb20gJy4vcHJvZ3JhbW1hYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtU2VydmljZSB9IGZyb20gJy4vZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IHRvRmVlbGFibGUgfSBmcm9tICcuLi91dGlscy9mZWVsYWJsZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBDb21wdXRlU2VydmljZSAge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcHJvZ3JhbW1hYmlsaXR5OiBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVDb2xsZWN0aW9uKCk6IENvbXB1dGVDb2xsZWN0aW9uIHtcclxuICAgIHJldHVybiBuZXcgTWFwPEFic3RyYWN0Q29udHJvbCwgQ29tcHV0ZUNvbnRleHQ+KCk7XHJcbiAgfVxyXG5cclxuICBhZGRUb0NvbGxlY3Rpb24oY29sbGVjdGlvbjogQ29tcHV0ZUNvbGxlY3Rpb24sIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbFxyXG4gICAgLCBwYXJlbnRHcm91cDogRm9ybUdyb3VwLCBjb21wb25lbnQ6IGFueSlcclxuICB7XHJcbiAgICBpZiAoIWNvbGxlY3Rpb24uaGFzKGNvbnRyb2wpICYmIHRoaXMuY2FuQWRkVG9Db2xsZWN0aW9uKGNvbXBvbmVudCkpIHtcclxuICAgICAgY29sbGVjdGlvbi5zZXQoY29udHJvbCwgeyBjb21wb25lbnQsIHBhcmVudEdyb3VwIH0pO1xyXG4gICAgfSAgICAgIFxyXG4gIH1cclxuXHJcbiAgc2V0dXBDb2xsZWN0aW9uKGNvbGxlY3Rpb246IENvbXB1dGVDb2xsZWN0aW9uKSB7XHJcbiAgICBjb2xsZWN0aW9uLmZvckVhY2goKGNvbXB1dGVDb250ZXh0LCBjb250cm9sKSA9PiB7XHJcbiAgICAgIHRoaXMuYXBwbHlFeHByZXNzaW9uKGNvbnRyb2wsIGNvbXB1dGVDb250ZXh0KTsgICAgICBcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYW5BZGRUb0NvbGxlY3Rpb24oY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBjb21wb25lbnQ/LmV4cHJlc3Npb247XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuaXNFeHByZXNzaW9uKGV4cHJlc3Npb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUV4cHJlc3Npb24oY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQge1xyXG4gICAgY29uc3QgZm9ybUdyb3VwID0gY29udGV4dC5wYXJlbnRHcm91cDtcclxuXHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGtleVxyXG4gICAgICAsIGV4cHJlc3Npb25cclxuICAgICAgLCBjb25kaXRpb25hbCB9ID0gY29udGV4dC5jb21wb25lbnQgPz8ge307XHJcblxyXG4gICAgY29uc3QgZGVhY3RpdmF0ZSA9IGNvbmRpdGlvbmFsPy5oaWRlO1xyXG5cclxuICAgIGNvbnN0IGxvZ0NvbXB1dGVkID0gKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLnByb2dyYW1tYWJpbGl0eS52ZXJib3NlKSByZXR1cm47XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQ29tcHV0ZVwiLCBjb250cm9sLCB7IHZhbHVlOiB2YWx1ZSwgcGF0aDogdGhpcy5nZXRQYXRoKGNvbnRyb2wpLCBmb3JtR3JvdXAgfSk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgYXNzaWduVmFsdWUgPSAodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICBsb2dDb21wdXRlZCh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuZm9ybVNlcnZpY2UucGF0Y2goY29udHJvbCwgdmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgZXhwcmVzc2lvbiA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgaWYgKHRoaXMucHJvZ3JhbW1hYmlsaXR5LmlzRXhwcmVzc2lvbihleHByZXNzaW9uKSkge1xyXG4gICAgICAgIGNvbnN0IGFwcGx5RXhwcmVzc2lvbiA9ICgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLnByb2dyYW1tYWJpbGl0eS5pc0V4cHJlc3Npb24oZGVhY3RpdmF0ZSkpIHtcclxuICAgICAgICAgICAgY29uc3QgaXNEZWFjdGl2YXRlID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVCb29sZWFuKGZvcm1Hcm91cCwgZGVhY3RpdmF0ZSwgeyBjYWNoZWFibGU6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICBpZiAoISFpc0RlYWN0aXZhdGUpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlKGZvcm1Hcm91cCwgZXhwcmVzc2lvbiwgeyBjYWNoZWFibGU6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgYXNzaWduVmFsdWUocmVzdWx0KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmdldERlcGVuZGVuY2llcyh0b0ZlZWxhYmxlKHtcclxuICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24sXHJcbiAgICAgICAgICBkZWFjdGl2YXRlOiBkZWFjdGl2YXRlXHJcbiAgICAgICAgfSkpLmZpbHRlcihkZXAgPT4gZGVwICE9PSBrZXkpO1xyXG5cclxuICAgICAgICBpZiAoZGVwZW5kZW5jaWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMucHJvZ3JhbW1hYmlsaXR5LndhdGNoKGZvcm1Hcm91cCwgZGVwZW5kZW5jaWVzLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gYXBwbHlFeHByZXNzaW9uKCkpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gYXBwbHlFeHByZXNzaW9uKCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhdGgoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1TZXJ2aWNlLmdldFBhdGgoY29udHJvbCkuam9pbihcIi5cIik7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVDb250ZXh0IHtcclxuICBwYXJlbnRHcm91cDogRm9ybUdyb3VwO1xyXG4gIGNvbXBvbmVudDogYW55O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBDb21wdXRlQ29sbGVjdGlvbiA9IE1hcDxBYnN0cmFjdENvbnRyb2wsIENvbXB1dGVDb250ZXh0PjtcclxuIl19
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvY29tcHV0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7O0FBRy9DLE1BQU0sT0FBTyxjQUFjO0lBR2Y7SUFDRTtJQUZaLFlBQ1UsZUFBdUMsRUFDckMsV0FBd0I7UUFEMUIsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3JDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQ3BDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksR0FBRyxFQUFtQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxlQUFlLENBQUMsVUFBNkIsRUFBRSxPQUF3QixFQUNuRSxXQUFzQixFQUFFLFNBQWM7UUFFeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDbkUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxVQUE2QjtRQUMzQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFNBQWM7UUFDdkMsTUFBTSxVQUFVLEdBQUcsU0FBUyxFQUFFLFVBQVUsQ0FBQztRQUN6QyxPQUFP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OzRHQUFkLGNBQWM7OzRGQUFkLGNBQWM7a0JBRDFCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFByb2dyYW1tYWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuL2Zvcm0uc2VydmljZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyB0b0ZlZWxhYmxlIH0gZnJvbSAnLi4vdXRpbHMvZmVlbGFibGUnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQ29tcHV0ZVNlcnZpY2UgIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHByb2dyYW1tYWJpbGl0eTogUHJvZ3JhbW1hYmlsaXR5U2VydmljZVxyXG4gICAgLCBwcml2YXRlIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlQ29sbGVjdGlvbigpOiBDb21wdXRlQ29sbGVjdGlvbiB7XHJcbiAgICByZXR1cm4gbmV3IE1hcDxBYnN0cmFjdENvbnRyb2wsIENvbXB1dGVDb250ZXh0PigpO1xyXG4gIH1cclxuXHJcbiAgYWRkVG9Db2xsZWN0aW9uKGNvbGxlY3Rpb246IENvbXB1dGVDb2xsZWN0aW9uLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2xcclxuICAgICwgcGFyZW50R3JvdXA6IEZvcm1Hcm91cCwgY29tcG9uZW50OiBhbnkpXHJcbiAge1xyXG4gICAgaWYgKCFjb2xsZWN0aW9uLmhhcyhjb250cm9sKSAmJiB0aGlzLmNhbkFkZFRvQ29sbGVjdGlvbihjb21wb25lbnQpKSB7XHJcbiAgICAgIGNvbGxlY3Rpb24uc2V0KGNvbnRyb2wsIHsgY29tcG9uZW50LCBwYXJlbnRHcm91cCB9KTtcclxuICAgIH0gICAgICBcclxuICB9XHJcblxyXG4gIHNldHVwQ29sbGVjdGlvbihjb2xsZWN0aW9uOiBDb21wdXRlQ29sbGVjdGlvbikge1xyXG4gICAgY29sbGVjdGlvbi5mb3JFYWNoKChjb21wdXRlQ29udGV4dCwgY29udHJvbCkgPT4ge1xyXG4gICAgICB0aGlzLmFwcGx5RXhwcmVzc2lvbihjb250cm9sLCBjb21wdXRlQ29udGV4dCk7ICAgICAgXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FuQWRkVG9Db2xsZWN0aW9uKGNvbXBvbmVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBleHByZXNzaW9uID0gY29tcG9uZW50Py5leHByZXNzaW9uO1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmlzRXhwcmVzc2lvbihleHByZXNzaW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlFeHByZXNzaW9uKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IGNvbnRleHQucGFyZW50R3JvdXA7XHJcblxyXG4gICAgY29uc3Qge1xyXG4gICAgICBrZXlcclxuICAgICAgLCBleHByZXNzaW9uXHJcbiAgICAgICwgY29uZGl0aW9uYWwgfSA9IGNvbnRleHQuY29tcG9uZW50ID8/IHt9O1xyXG5cclxuICAgIGNvbnN0IGRlYWN0aXZhdGUgPSBjb25kaXRpb25hbD8uaGlkZTtcclxuXHJcbiAgICBjb25zdCBsb2dDb21wdXRlZCA9ICh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5wcm9ncmFtbWFiaWxpdHkudmVyYm9zZSkgcmV0dXJuO1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkNvbXB1dGVcIiwgY29udHJvbCwgeyB2YWx1ZTogdmFsdWUsIHBhdGg6IHRoaXMuZ2V0UGF0aChjb250cm9sKSwgZm9ybUdyb3VwIH0pO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgbG9nQ29tcHV0ZWQodmFsdWUpO1xyXG4gICAgICB0aGlzLmZvcm1TZXJ2aWNlLnBhdGNoKGNvbnRyb2wsIHZhbHVlLCB7IHN0cmljdDogZmFsc2UgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGV4cHJlc3Npb24gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGlmICh0aGlzLnByb2dyYW1tYWJpbGl0eS5pc0V4cHJlc3Npb24oZXhwcmVzc2lvbikpIHtcclxuICAgICAgICBjb25zdCBhcHBseUV4cHJlc3Npb24gPSAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5wcm9ncmFtbWFiaWxpdHkuaXNFeHByZXNzaW9uKGRlYWN0aXZhdGUpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzRGVhY3RpdmF0ZSA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlQm9vbGVhbihmb3JtR3JvdXAsIGRlYWN0aXZhdGUsIHsgY2FjaGVhYmxlOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgaWYgKCEhaXNEZWFjdGl2YXRlKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZShmb3JtR3JvdXAsIGV4cHJlc3Npb24sIHsgY2FjaGVhYmxlOiBmYWxzZSB9KTtcclxuICAgICAgICAgIGFzc2lnblZhbHVlKHJlc3VsdCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5nZXREZXBlbmRlbmNpZXMoZm9ybUdyb3VwLCB0b0ZlZWxhYmxlKHtcclxuICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24sXHJcbiAgICAgICAgICBkZWFjdGl2YXRlOiBkZWFjdGl2YXRlXHJcbiAgICAgICAgfSkpLmZpbHRlcihkZXAgPT4gZGVwICE9PSBrZXkpO1xyXG5cclxuICAgICAgICBpZiAoZGVwZW5kZW5jaWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMucHJvZ3JhbW1hYmlsaXR5LndhdGNoKGZvcm1Hcm91cCwgZGVwZW5kZW5jaWVzLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gYXBwbHlFeHByZXNzaW9uKCkpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gYXBwbHlFeHByZXNzaW9uKCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhdGgoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1TZXJ2aWNlLmdldFBhdGgoY29udHJvbCkuam9pbihcIi5cIik7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVDb250ZXh0IHtcclxuICBwYXJlbnRHcm91cDogRm9ybUdyb3VwO1xyXG4gIGNvbXBvbmVudDogYW55O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBDb21wdXRlQ29sbGVjdGlvbiA9IE1hcDxBYnN0cmFjdENvbnRyb2wsIENvbXB1dGVDb250ZXh0PjtcclxuIl19
@@ -167,4 +167,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
167
167
  providedIn: 'root'
168
168
  }]
169
169
  }], ctorParameters: () => [{ type: i1.SirioDialogService }] });
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBR3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7OztBQUs5RSxNQUFNLE9BQU8sYUFBYTtJQUdkO0lBRFYsWUFDVSxhQUFpQztRQUFqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBb0I7SUFFekMsQ0FBQztJQUVILFVBQVUsQ0FBQyxVQUFlLEVBQUUsT0FBMkI7UUFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBWSxFQUFFLE9BQXVCO1FBQ3pDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxNQUFNLFdBQVcsR0FBdUI7WUFDdEMsR0FBRyxPQUFPO1lBQ1YsSUFBSSxFQUFFLFNBQVM7WUFDZixPQUFPLEVBQUUsSUFBSTtZQUNiLFFBQVEsRUFBRSxLQUFLO1lBQ2YsT0FBTyxFQUFFLEtBQUs7WUFDZCxhQUFhLEVBQUUsS0FBSztZQUNwQixZQUFZLEVBQUUsS0FBSztZQUNuQixhQUFhLEVBQUUsS0FBSztTQUNyQixDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7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QUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNpcmlvRGlhbG9nU2VydmljZSwgRGlhbG9nVHlwZXMsIERpYWxvZ1NpemVzIH0gZnJvbSAnbmd4LXNpcmlvLWxpYic7XHJcbmltcG9ydCB7IElFdmFsdWF0b3JQcm92aWRlciB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9Cb3VuZEFycm93cyB9IGZyb20gJy4uL3V0aWxzL2JvdW5kJztcclxuaW1wb3J0IHsgRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vZGlhbG9nL2RpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEeW5hbWljRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL2R5bmFtaWMtZm9ybS9keW5hbWljLWZvcm0uY29tcG9uZW50JztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERpYWxvZ1NlcnZpY2UgaW1wbGVtZW50cyBJRXZhbHVhdG9yUHJvdmlkZXIge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogU2lyaW9EaWFsb2dTZXJ2aWNlXHJcbiAgICApXHJcbiAgeyB9XHJcblxyXG4gIG9wZW5EaWFsb2coZm9ybVNjaGVtYTogYW55LCBvcHRpb25zPzogRm9ybURpYWxvZ09wdGlvbnMpIHtcclxuICAgIHRoaXMuc2hvd0RpYWxvZyhmb3JtU2NoZW1hLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGNsb3NlRGlhbG9nKCkge1xyXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsb3NlRGlhbG9nKCk7XHJcbiAgfVxyXG5cclxuICBhbGVydCh0ZXh0OiBzdHJpbmcsIG9wdGlvbnM/OiBEaWFsb2dPcHRpb25zKSB7XHJcbiAgICBjb25zdCBmb3JtU2NoZW1hID0gdGhpcy5jcmVhdGVUZXh0U2NoZW1hKHRleHQpO1xyXG4gICAgY29uc3QgZm9ybU9wdGlvbnMgOiBGb3JtRGlhbG9nT3B0aW9ucyA9IHtcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgdHlwZTogXCJ3YXJuaW5nXCIsXHJcbiAgICAgIGJ1dHRvbnM6ICdPSycsXHJcbiAgICAgIGlzRHJhd2VyOiBmYWxzZSxcclxuICAgICAgc2hvd05hdjogZmFsc2UsXHJcbiAgICAgIHNob3dOYXZCdXR0b246IGZhbHNlLFxyXG4gICAgICBzaG93UHJvZ3Jlc3M6IGZhbHNlLFxyXG4gICAgICBzaG93Rm9ybVRpdGxlOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIHRoaXMuc2hvd0RpYWxvZyhmb3JtU2NoZW1hLCBmb3JtT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBpbmZvKHRleHQ6IHN0cmluZywgb3B0aW9ucz86IERpYWxvZ09wdGlvbnMpIHtcclxuICAgIGNvbnN0IGZvcm1TY2hlbWEgPSB0aGlzLmNyZWF0ZVRleHRTY2hlbWEodGV4dCk7XHJcbiAgICBjb25zdCBmb3JtT3B0aW9uczogRm9ybURpYWxvZ09wdGlvbnMgPSB7XHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgIHR5cGU6IFwiaW5mb1wiLFxyXG4gICAgICBidXR0b25zOiAnT0snLFxyXG4gICAgICBpc0RyYXdlcjogZmFsc2UsXHJcbiAgICAgIHNob3dOYXY6IGZhbHNlLFxyXG4gICAgICBzaG93TmF2QnV0dG9uOiBmYWxzZSxcclxuICAgICAgc2hvd1Byb2dyZXNzOiBmYWxzZSxcclxuICAgICAgc2hvd0Zvcm1UaXRsZTogZmFsc2VcclxuICAgIH07XHJcbiAgICB0aGlzLnNob3dEaWFsb2coZm9ybVNjaGVtYSwgZm9ybU9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybSh0ZXh0OiBzdHJpbmcsIG9wdGlvbnM/OiBEaWFsb2dPcHRpb25zKSB7XHJcbiAgICBjb25zdCBmb3JtU2NoZW1hID0gdGhpcy5jcmVhdGVUZXh0U2NoZW1hKHRleHQpO1xyXG4gICAgY29uc3QgZm9ybU9wdGlvbnM6IEZvcm1EaWFsb2dPcHRpb25zID0ge1xyXG4gICAgICAuLi5vcHRpb25zLFxyXG4gICAgICB0eXBlOiBcImluZm9cIixcclxuICAgICAgYnV0dG9uczogJ1llc05vJyxcclxuICAgICAgaXNEcmF3ZXI6IGZhbHNlLFxyXG4gICAgICBzaG93TmF2OiBmYWxzZSxcclxuICAgICAgc2hvd05hdkJ1dHRvbjogZmFsc2UsXHJcbiAgICAgIHNob3dQcm9ncmVzczogZmFsc2UsXHJcbiAgICAgIHNob3dGb3JtVGl0bGU6IGZhbHNlXHJcbiAgICB9OyAgICBcclxuICAgIHRoaXMuc2hvd0RpYWxvZyhmb3JtU2NoZW1hLCBmb3JtT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBzaG93KHRleHQ6IHN0cmluZywgb3B0aW9ucz86IERpYWxvZ09wdGlvbnMpIHtcclxuICAgIGNvbnN0IGZvcm1TY2hlbWEgPSB0aGlzLmNyZWF0ZVRleHRTY2hlbWEodGV4dCk7XHJcbiAgICBjb25zdCBmb3JtT3B0aW9uczogRm9ybURpYWxvZ09wdGlvbnMgPSB7XHJcbiAgICAgIHR5cGU6IFwiaW5mb1wiLFxyXG4gICAgICBidXR0b25zOiAnT0snLFxyXG4gICAgICAuLi5vcHRpb25zLFxyXG4gICAgICBpc0RyYXdlcjogZmFsc2UsXHJcbiAgICAgIHNob3dOYXY6IGZhbHNlLFxyXG4gICAgICBzaG93TmF2QnV0dG9uOiBmYWxzZSxcclxuICAgICAgc2hvd1Byb2dyZXNzOiBmYWxzZSxcclxuICAgICAgc2hvd0Zvcm1UaXRsZTogZmFsc2VcclxuICAgIH07XHJcbiAgICB0aGlzLnNob3dEaWFsb2coZm9ybVNjaGVtYSwgZm9ybU9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcHJvbXB0KHRleHQ6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogc3RyaW5nLCBvcHRpb25zPzogRGlhbG9nT3B0aW9ucykge1xyXG4gICAgY29uc3QgZm9ybVNjaGVtYSA9IHRoaXMuY3JlYXRlSW5wdXRTY2hlbWEodGV4dCwgZGVmYXVsdFZhbHVlKTtcclxuICAgIGNvbnN0IGZvcm1PcHRpb25zOiBGb3JtRGlhbG9nT3B0aW9ucyA9IHtcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgdHlwZTogXCJpbmZvXCIsXHJcbiAgICAgIGJ1dHRvbnM6ICdPS0NhbmNlbCcsXHJcbiAgICAgIGlzRHJhd2VyOiBmYWxzZSxcclxuICAgICAgc2hvd05hdjogZmFsc2UsXHJcbiAgICAgIHNob3dOYXZCdXR0b246IGZhbHNlLFxyXG4gICAgICBzaG93UHJvZ3Jlc3M6IGZhbHNlLFxyXG4gICAgICBzaG93Rm9ybVRpdGxlOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIHRoaXMuc2hvd0RpYWxvZyhmb3JtU2NoZW1hLCBmb3JtT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBnZXRDb250ZXh0KCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG4gICAgcmV0dXJuIFRvQm91bmRBcnJvd3ModGhpcywgW1xyXG4gICAgICAnb3BlbkRpYWxvZycsXHJcbiAgICAgICdjbG9zZURpYWxvZycsXHJcbiAgICAgICdhbGVydCcsXHJcbiAgICAgICdpbmZvJyxcclxuICAgICAgJ2NvbmZpcm0nLFxyXG4gICAgICAnc2hvdydcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG93RGlhbG9nKGZvcm1TY2hlbWE6IGFueSwgb3B0aW9ucz86IEZvcm1EaWFsb2dPcHRpb25zKSB7XHJcblxyXG4gICAgb3B0aW9ucyA9IHRoaXMuZW5zdXJlQ2xvc2FibGUob3B0aW9ucyk7XHJcblxyXG4gICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgZm9ybVNjaGVtYSxcclxuICAgICAgb3B0aW9ucyxcclxuICAgICAgZHluYW1pY0Zvcm1UeXBlOiBEeW5hbWljRm9ybUNvbXBvbmVudFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2VcclxuICAgICAgLm9wZW5EaWFsb2coRGlhbG9nQ29tcG9uZW50LCBkYXRhKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlVGV4dFNjaGVtYSh0ZXh0OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIFwiZm9ybXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwiY29tcG9uZW50c1wiOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBcInRleHRcIjogdGV4dCxcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJ0ZXh0XCIsXHJcbiAgICAgICAgICAgICAgXCJsYXlvdXRcIjoge1xyXG4gICAgICAgICAgICAgICAgXCJyb3dcIjogXCJSb3dfMTR6OW15b1wiLFxyXG4gICAgICAgICAgICAgICAgXCJjb2x1bW5zXCI6IG51bGxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIFwiaWRcIjogXCJGaWVsZF8xeGlicDJyXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcImRlZmF1bHRcIixcclxuICAgICAgICAgIFwiaWRcIjogXCJGb3JtXzBsb3RtMmhcIixcclxuICAgICAgICAgIFwic2NoZW1hVmVyc2lvblwiOiAxOFxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVJbnB1dFNjaGVtYShsYWJlbDogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIFwiZm9ybXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwiY29tcG9uZW50c1wiOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBcImxhYmVsXCI6IGxhYmVsLFxyXG4gICAgICAgICAgICAgIFwiZGVmYXVsdFZhbHVlXCI6IGRlZmF1bHRWYWx1ZSxcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJ0ZXh0ZmllbGRcIixcclxuICAgICAgICAgICAgICBcImxheW91dFwiOiB7XHJcbiAgICAgICAgICAgICAgICBcInJvd1wiOiBcIlJvd18xd3h6NWdkXCIsXHJcbiAgICAgICAgICAgICAgICBcImNvbHVtbnNcIjogbnVsbFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgXCJpZFwiOiBcIkZpZWxkXzF0YXU1M3hcIixcclxuICAgICAgICAgICAgICBcImtleVwiOiBcImlucHV0XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcImRlZmF1bHRcIixcclxuICAgICAgICAgIFwiaWRcIjogXCJGb3JtXzFvbnR3bnhcIixcclxuICAgICAgICAgIFwic2NoZW1hVmVyc2lvblwiOiAxOFxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW5zdXJlQ2xvc2FibGUob3B0aW9ucz86IEZvcm1EaWFsb2dPcHRpb25zKTogRm9ybURpYWxvZ09wdGlvbnMge1xyXG5cclxuICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgIGNsb3NlQnV0dG9uOlxyXG4gICAgICAgIG9wdGlvbnM/LmJ1dHRvbnMgPT0gbnVsbCA/IHRydWUgOiBvcHRpb25zLmNsb3NlQnV0dG9uXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9wdGlvbnM7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaWFsb2dPcHRpb25zIHtcclxuICB0eXBlPzogRGlhbG9nVHlwZXM7XHJcbiAgc2l6ZT86IERpYWxvZ1NpemVzO1xyXG4gIHRpdGxlPzogc3RyaW5nO1xyXG4gIGlzRHJhd2VyPzogYm9vbGVhbjsgIFxyXG4gIGNsb3NlQnV0dG9uPzogYm9vbGVhbjtcclxuICBidXR0b25zPzogRGlhbG9nQnV0dG9uczsgIFxyXG4gIG9uUmVzdWx0PzogKHJlc3VsdDogRGlhbG9nUmVzdWx0KSA9PiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1EaWFsb2dPcHRpb25zIGV4dGVuZHMgRGlhbG9nT3B0aW9ucyB7XHJcbiAgdmFsdWU/OiBhbnk7XHJcbiAgaW5qZWN0b3I/OiBJbmplY3RvcjtcclxuICBzaG93TmF2PzogYm9vbGVhbjtcclxuICBzaG93TmF2QnV0dG9uPzogYm9vbGVhbjtcclxuICBzaG93UHJvZ3Jlc3M/OiBib29sZWFuO1xyXG4gIHNob3dGb3JtVGl0bGU/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpYWxvZ1Jlc3VsdCB7XHJcbiAgYWN0aW9uOiBEaWFsb2dBY3Rpb247XHJcbiAgdmFsdWU/OiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIERpYWxvZ0FjdGlvbiA9ICdPSydcclxuICB8ICdDYW5jZWwnXHJcbiAgfCAnWWVzJ1xyXG4gIHwgJ05vJ1xyXG4gIHwgJ0NvbmZpcm0nXHJcbiAgfCAnQ2xvc2UnXHJcbiAgfCAnQWJvcnQnXHJcbiAgfCAnUmV0cnknXHJcbiAgfCAnSWdub3JlJ1xyXG4gIHwgJ1RyeSdcclxuICB8ICdDb250aW51ZSc7XHJcblxyXG5leHBvcnQgdHlwZSBEaWFsb2dCdXR0b25zID0gJ09LJ1xyXG4gIHwgJ09LQ2FuY2VsJ1xyXG4gIHwgJ0NvbmZpcm1DYW5jZWwnXHJcbiAgfCAnQWJvcnRSZXRyeUlnbm9yZSdcclxuICB8ICdZZXNOb0NhbmNlbCdcclxuICB8ICdZZXNObydcclxuICB8ICdSZXRyeUNhbmNlbCdcclxuICB8ICdDYW5jZWxUcnlDb250aW51ZSc7XHJcbiJdfQ==
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBR3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7OztBQUs5RSxNQUFNLE9BQU8sYUFBYTtJQUdkO0lBRFYsWUFDVSxhQUFpQztRQUFqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBb0I7SUFFekMsQ0FBQztJQUVILFVBQVUsQ0FBQyxVQUFlLEVBQUUsT0FBMkI7UUFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBWSxFQUFFLE9BQXVCO1FBQ3pDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxNQUFNLFdBQVcsR0FBdUI7WUFDdEMsR0FBRyxPQUFPO1lBQ1YsSUFBSSxFQUFFLFNBQVM7WUFDZixPQUFPLEVBQUUsSUFBSTtZQUNiLFFBQVEsRUFBRSxLQUFLO1lBQ2YsT0FBTyxFQUFFLEtBQUs7WUFDZCxhQUFhLEVBQUUsS0FBSztZQUNwQixZQUFZLEVBQUUsS0FBSztZQUNuQixhQUFhLEVBQUUsS0FBSztTQUNyQixDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7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QUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNpcmlvRGlhbG9nU2VydmljZSwgRGlhbG9nVHlwZXMsIERpYWxvZ1NpemVzLCBCdXR0b25Db2xvcnMgfSBmcm9tICduZ3gtc2lyaW8tbGliJztcclxuaW1wb3J0IHsgSUV2YWx1YXRvclByb3ZpZGVyIH0gZnJvbSAnLi4vc2VydmljZXMvcHJvZ3JhbW1hYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb0JvdW5kQXJyb3dzIH0gZnJvbSAnLi4vdXRpbHMvYm91bmQnO1xyXG5pbXBvcnQgeyBEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IER5bmFtaWNGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5jb21wb25lbnQnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRGlhbG9nU2VydmljZSBpbXBsZW1lbnRzIElFdmFsdWF0b3JQcm92aWRlciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBTaXJpb0RpYWxvZ1NlcnZpY2VcclxuICAgIClcclxuICB7IH1cclxuXHJcbiAgb3BlbkRpYWxvZyhmb3JtU2NoZW1hOiBhbnksIG9wdGlvbnM/OiBGb3JtRGlhbG9nT3B0aW9ucykge1xyXG4gICAgdGhpcy5zaG93RGlhbG9nKGZvcm1TY2hlbWEsIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VEaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xvc2VEaWFsb2coKTtcclxuICB9XHJcblxyXG4gIGFsZXJ0KHRleHQ6IHN0cmluZywgb3B0aW9ucz86IERpYWxvZ09wdGlvbnMpIHtcclxuICAgIGNvbnN0IGZvcm1TY2hlbWEgPSB0aGlzLmNyZWF0ZVRleHRTY2hlbWEodGV4dCk7XHJcbiAgICBjb25zdCBmb3JtT3B0aW9ucyA6IEZvcm1EaWFsb2dPcHRpb25zID0ge1xyXG4gICAgICAuLi5vcHRpb25zLFxyXG4gICAgICB0eXBlOiBcIndhcm5pbmdcIixcclxuICAgICAgYnV0dG9uczogJ09LJyxcclxuICAgICAgaXNEcmF3ZXI6IGZhbHNlLFxyXG4gICAgICBzaG93TmF2OiBmYWxzZSxcclxuICAgICAgc2hvd05hdkJ1dHRvbjogZmFsc2UsXHJcbiAgICAgIHNob3dQcm9ncmVzczogZmFsc2UsXHJcbiAgICAgIHNob3dGb3JtVGl0bGU6IGZhbHNlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zaG93RGlhbG9nKGZvcm1TY2hlbWEsIGZvcm1PcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGluZm8odGV4dDogc3RyaW5nLCBvcHRpb25zPzogRGlhbG9nT3B0aW9ucykge1xyXG4gICAgY29uc3QgZm9ybVNjaGVtYSA9IHRoaXMuY3JlYXRlVGV4dFNjaGVtYSh0ZXh0KTtcclxuICAgIGNvbnN0IGZvcm1PcHRpb25zOiBGb3JtRGlhbG9nT3B0aW9ucyA9IHtcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgdHlwZTogXCJpbmZvXCIsXHJcbiAgICAgIGJ1dHRvbnM6ICdPSycsXHJcbiAgICAgIGlzRHJhd2VyOiBmYWxzZSxcclxuICAgICAgc2hvd05hdjogZmFsc2UsXHJcbiAgICAgIHNob3dOYXZCdXR0b246IGZhbHNlLFxyXG4gICAgICBzaG93UHJvZ3Jlc3M6IGZhbHNlLFxyXG4gICAgICBzaG93Rm9ybVRpdGxlOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIHRoaXMuc2hvd0RpYWxvZyhmb3JtU2NoZW1hLCBmb3JtT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBjb25maXJtKHRleHQ6IHN0cmluZywgb3B0aW9ucz86IERpYWxvZ09wdGlvbnMpIHtcclxuICAgIGNvbnN0IGZvcm1TY2hlbWEgPSB0aGlzLmNyZWF0ZVRleHRTY2hlbWEodGV4dCk7XHJcbiAgICBjb25zdCBmb3JtT3B0aW9uczogRm9ybURpYWxvZ09wdGlvbnMgPSB7XHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgIHR5cGU6IFwiaW5mb1wiLFxyXG4gICAgICBidXR0b25zOiAnWWVzTm8nLFxyXG4gICAgICBpc0RyYXdlcjogZmFsc2UsXHJcbiAgICAgIHNob3dOYXY6IGZhbHNlLFxyXG4gICAgICBzaG93TmF2QnV0dG9uOiBmYWxzZSxcclxuICAgICAgc2hvd1Byb2dyZXNzOiBmYWxzZSxcclxuICAgICAgc2hvd0Zvcm1UaXRsZTogZmFsc2VcclxuICAgIH07ICAgIFxyXG4gICAgdGhpcy5zaG93RGlhbG9nKGZvcm1TY2hlbWEsIGZvcm1PcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHNob3codGV4dDogc3RyaW5nLCBvcHRpb25zPzogRGlhbG9nT3B0aW9ucykge1xyXG4gICAgY29uc3QgZm9ybVNjaGVtYSA9IHRoaXMuY3JlYXRlVGV4dFNjaGVtYSh0ZXh0KTtcclxuICAgIGNvbnN0IGZvcm1PcHRpb25zOiBGb3JtRGlhbG9nT3B0aW9ucyA9IHtcclxuICAgICAgdHlwZTogXCJpbmZvXCIsXHJcbiAgICAgIGJ1dHRvbnM6ICdPSycsXHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgIGlzRHJhd2VyOiBmYWxzZSxcclxuICAgICAgc2hvd05hdjogZmFsc2UsXHJcbiAgICAgIHNob3dOYXZCdXR0b246IGZhbHNlLFxyXG4gICAgICBzaG93UHJvZ3Jlc3M6IGZhbHNlLFxyXG4gICAgICBzaG93Rm9ybVRpdGxlOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIHRoaXMuc2hvd0RpYWxvZyhmb3JtU2NoZW1hLCBmb3JtT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwcm9tcHQodGV4dDogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcsIG9wdGlvbnM/OiBEaWFsb2dPcHRpb25zKSB7XHJcbiAgICBjb25zdCBmb3JtU2NoZW1hID0gdGhpcy5jcmVhdGVJbnB1dFNjaGVtYSh0ZXh0LCBkZWZhdWx0VmFsdWUpO1xyXG4gICAgY29uc3QgZm9ybU9wdGlvbnM6IEZvcm1EaWFsb2dPcHRpb25zID0ge1xyXG4gICAgICAuLi5vcHRpb25zLFxyXG4gICAgICB0eXBlOiBcImluZm9cIixcclxuICAgICAgYnV0dG9uczogJ09LQ2FuY2VsJyxcclxuICAgICAgaXNEcmF3ZXI6IGZhbHNlLFxyXG4gICAgICBzaG93TmF2OiBmYWxzZSxcclxuICAgICAgc2hvd05hdkJ1dHRvbjogZmFsc2UsXHJcbiAgICAgIHNob3dQcm9ncmVzczogZmFsc2UsXHJcbiAgICAgIHNob3dGb3JtVGl0bGU6IGZhbHNlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zaG93RGlhbG9nKGZvcm1TY2hlbWEsIGZvcm1PcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGdldENvbnRleHQoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XHJcbiAgICByZXR1cm4gVG9Cb3VuZEFycm93cyh0aGlzLCBbXHJcbiAgICAgICdvcGVuRGlhbG9nJyxcclxuICAgICAgJ2Nsb3NlRGlhbG9nJyxcclxuICAgICAgJ2FsZXJ0JyxcclxuICAgICAgJ2luZm8nLFxyXG4gICAgICAnY29uZmlybScsXHJcbiAgICAgICdzaG93J1xyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNob3dEaWFsb2coZm9ybVNjaGVtYTogYW55LCBvcHRpb25zPzogRm9ybURpYWxvZ09wdGlvbnMpIHtcclxuXHJcbiAgICBvcHRpb25zID0gdGhpcy5lbnN1cmVDbG9zYWJsZShvcHRpb25zKTtcclxuXHJcbiAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICBmb3JtU2NoZW1hLFxyXG4gICAgICBvcHRpb25zLFxyXG4gICAgICBkeW5hbWljRm9ybVR5cGU6IER5bmFtaWNGb3JtQ29tcG9uZW50XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuZGlhbG9nU2VydmljZVxyXG4gICAgICAub3BlbkRpYWxvZyhEaWFsb2dDb21wb25lbnQsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVUZXh0U2NoZW1hKHRleHQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgXCJmb3Jtc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJjb21wb25lbnRzXCI6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFwidGV4dFwiOiB0ZXh0LFxyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInRleHRcIixcclxuICAgICAgICAgICAgICBcImxheW91dFwiOiB7XHJcbiAgICAgICAgICAgICAgICBcInJvd1wiOiBcIlJvd18xNHo5bXlvXCIsXHJcbiAgICAgICAgICAgICAgICBcImNvbHVtbnNcIjogbnVsbFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgXCJpZFwiOiBcIkZpZWxkXzF4aWJwMnJcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiZGVmYXVsdFwiLFxyXG4gICAgICAgICAgXCJpZFwiOiBcIkZvcm1fMGxvdG0yaFwiLFxyXG4gICAgICAgICAgXCJzY2hlbWFWZXJzaW9uXCI6IDE4XHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUlucHV0U2NoZW1hKGxhYmVsOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgXCJmb3Jtc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJjb21wb25lbnRzXCI6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFwibGFiZWxcIjogbGFiZWwsXHJcbiAgICAgICAgICAgICAgXCJkZWZhdWx0VmFsdWVcIjogZGVmYXVsdFZhbHVlLFxyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInRleHRmaWVsZFwiLFxyXG4gICAgICAgICAgICAgIFwibGF5b3V0XCI6IHtcclxuICAgICAgICAgICAgICAgIFwicm93XCI6IFwiUm93XzF3eHo1Z2RcIixcclxuICAgICAgICAgICAgICAgIFwiY29sdW1uc1wiOiBudWxsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBcImlkXCI6IFwiRmllbGRfMXRhdTUzeFwiLFxyXG4gICAgICAgICAgICAgIFwia2V5XCI6IFwiaW5wdXRcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiZGVmYXVsdFwiLFxyXG4gICAgICAgICAgXCJpZFwiOiBcIkZvcm1fMW9udHdueFwiLFxyXG4gICAgICAgICAgXCJzY2hlbWFWZXJzaW9uXCI6IDE4XHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbnN1cmVDbG9zYWJsZShvcHRpb25zPzogRm9ybURpYWxvZ09wdGlvbnMpOiBGb3JtRGlhbG9nT3B0aW9ucyB7XHJcblxyXG4gICAgb3B0aW9ucyA9IHtcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgY2xvc2VCdXR0b246XHJcbiAgICAgICAgb3B0aW9ucz8uYnV0dG9ucyA9PSBudWxsID8gdHJ1ZSA6IG9wdGlvbnMuY2xvc2VCdXR0b25cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3B0aW9ucztcclxuICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpYWxvZ09wdGlvbnMge1xyXG4gIHR5cGU/OiBEaWFsb2dUeXBlcztcclxuICBzaXplPzogRGlhbG9nU2l6ZXM7XHJcbiAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgaXNEcmF3ZXI/OiBib29sZWFuOyAgXHJcbiAgY2xvc2VCdXR0b24/OiBib29sZWFuO1xyXG4gIGJ1dHRvbnM/OiBEaWFsb2dCdXR0b25zO1xyXG4gIGN1c3RvbUJ1dHRvbnM/OiBDdXN0b21CdXR0b25bXSxcclxuICBrZWVwT3Blbj86IGJvb2xlYW4sXHJcbiAgb25SZXN1bHQ/OiAocmVzdWx0OiBEaWFsb2dSZXN1bHQpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRm9ybURpYWxvZ09wdGlvbnMgZXh0ZW5kcyBEaWFsb2dPcHRpb25zIHtcclxuICB2YWx1ZT86IGFueTtcclxuICBpbmplY3Rvcj86IEluamVjdG9yO1xyXG4gIHNob3dOYXY/OiBib29sZWFuO1xyXG4gIHNob3dOYXZCdXR0b24/OiBib29sZWFuO1xyXG4gIHNob3dQcm9ncmVzcz86IGJvb2xlYW47XHJcbiAgc2hvd0Zvcm1UaXRsZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlhbG9nUmVzdWx0IHtcclxuICBhY3Rpb246IERpYWxvZ0FjdGlvbiB8IHN0cmluZztcclxuICB2YWx1ZT86IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21CdXR0b24ge1xyXG4gIHRleHQ6IHN0cmluZyxcclxuICBjb2xvcjogQnV0dG9uQ29sb3JzLFxyXG4gIGFjdGlvbjogc3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIERpYWxvZ0FjdGlvbiA9ICdPSydcclxuICB8ICdDYW5jZWwnXHJcbiAgfCAnWWVzJ1xyXG4gIHwgJ05vJ1xyXG4gIHwgJ0NvbmZpcm0nXHJcbiAgfCAnQ2xvc2UnXHJcbiAgfCAnQWJvcnQnXHJcbiAgfCAnUmV0cnknXHJcbiAgfCAnSWdub3JlJ1xyXG4gIHwgJ1RyeSdcclxuICB8ICdDb250aW51ZSc7XHJcblxyXG5leHBvcnQgdHlwZSBEaWFsb2dCdXR0b25zID0gJ09LJ1xyXG4gIHwgJ09LQ2FuY2VsJ1xyXG4gIHwgJ0NvbmZpcm1DYW5jZWwnXHJcbiAgfCAnQWJvcnRSZXRyeUlnbm9yZSdcclxuICB8ICdZZXNOb0NhbmNlbCdcclxuICB8ICdZZXNObydcclxuICB8ICdSZXRyeUNhbmNlbCdcclxuICB8ICdDYW5jZWxUcnlDb250aW51ZSdcclxuICB8ICdDdXN0b20nO1xyXG4iXX0=
@@ -51,7 +51,7 @@ export class DisableService {
51
51
  else if (typeof disabled === 'string') {
52
52
  if (this.programmability.isExpression(disabled)) {
53
53
  const expression = this.programmability.getExpression(disabled);
54
- const dependencies = this.programmability.getDependencies(expression)
54
+ const dependencies = this.programmability.getDependencies(formGroup, expression)
55
55
  .filter(dep => dep !== key);
56
56
  const applyExpression = () => {
57
57
  const result = this.programmability.evaluateBoolean(formGroup, disabled, { cacheable: false });
@@ -80,4 +80,4 @@ export class DisableService {
80
80
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DisableService, decorators: [{
81
81
  type: Injectable
82
82
  }], ctorParameters: () => [{ type: i1.ProgrammabilityService }, { type: i2.FormService }] });
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzYWJsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvZGlzYWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFNM0MsTUFBTSxPQUFPLGNBQWM7SUFHZjtJQUNFO0lBRlosWUFDVSxlQUF1QyxFQUNyQyxXQUF3QjtRQUQxQixvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7UUFDckMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFDcEMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxHQUFHLEVBQW1DLENBQUM7SUFDcEQsQ0FBQztJQUVELGVBQWUsQ0FBQyxVQUE2QixFQUFFLE9BQXdCLEVBQUUsV0FBc0IsRUFDM0YsU0FBYztRQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNuRSxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLFVBQTZCO1FBQzNDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN0RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxTQUFTLENBQUMsU0FBb0IsRUFBRSxPQUF3QixFQUFFLE9BQXVCO1FBQ3ZGLDhEQUE4RDtRQUM5RCxrRkFBa0Y7UUFDbEYsTUFBTSxFQUNKLEdBQUcsRUFDRCxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUV6QyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNqRyxDQUFDLENBQUM7UUFDRixNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQXFCLEVBQUUsRUFBRTtZQUMvQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxPQUFPLENBQUMsUUFBUTtvQkFBRSxPQUFPO2dCQUM3QixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2xCLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxPQUFPLENBQUMsT0FBTztvQkFBRSxPQUFPO2dCQUM1QixPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2pCLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQyxDQUFBO1FBQ0QsSUFBSSxPQUFPLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNsQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0IsQ0FBQzthQUNJLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDaEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO3FCQUNsRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQzlCLE1BQU0sZUFBZSxHQUFHLEdBQUcsRUFBRTtvQkFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO29CQUMvRixjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3pCLENBQUMsQ0FBQztnQkFDRixJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFO3dCQUN2RCxlQUFlLEVBQUUsQ0FBQztvQkFDcEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxlQUFlLEVBQUUsQ0FBQztZQUNwQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxTQUFjO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLFNBQVMsRUFBRSxRQUFRLENBQUM7UUFDckMsT0FBTyxPQUFPLFFBQVEsS0FBSyxTQUFTO2VBQy9CLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQztJQUNwQyxDQUFDO0lBRU8sT0FBTyxDQUFDLE9BQXdCO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELENBQUM7d0dBNUVVLGNBQWM7NEdBQWQsY0FBYzs7NEZBQWQsY0FBYztrQkFEMUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUHJvZ3JhbW1hYmlsaXR5U2VydmljZSB9IGZyb20gJy4vcHJvZ3JhbW1hYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtU2VydmljZSB9IGZyb20gJy4vZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBEaXNhYmxlU2VydmljZSAge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcHJvZ3JhbW1hYmlsaXR5OiBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVDb2xsZWN0aW9uKCk6IERpc2FibGVDb2xsZWN0aW9uIHtcclxuICAgIHJldHVybiBuZXcgTWFwPEFic3RyYWN0Q29udHJvbCwgRGlzYWJsZUNvbnRleHQ+KCk7XHJcbiAgfVxyXG5cclxuICBhZGRUb0NvbGxlY3Rpb24oY29sbGVjdGlvbjogRGlzYWJsZUNvbGxlY3Rpb24sIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGFyZW50R3JvdXA6IEZvcm1Hcm91cFxyXG4gICAgLCBjb21wb25lbnQ6IGFueSkge1xyXG4gICAgaWYgKCFjb2xsZWN0aW9uLmhhcyhjb250cm9sKSAmJiB0aGlzLmNhbkFkZFRvQ29sbGVjdGlvbihjb21wb25lbnQpKSB7XHJcbiAgICAgIGNvbGxlY3Rpb24uc2V0KGNvbnRyb2wsIHsgcGFyZW50R3JvdXAsIGNvbXBvbmVudCB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldHVwQ29sbGVjdGlvbihjb2xsZWN0aW9uOiBEaXNhYmxlQ29sbGVjdGlvbikge1xyXG4gICAgY29sbGVjdGlvbi5mb3JFYWNoKChkaXNhYmxlQ29udGV4dCwgY29udHJvbCkgPT4ge1xyXG4gICAgICB0aGlzLmFwcGx5UnVsZShkaXNhYmxlQ29udGV4dC5wYXJlbnRHcm91cCwgY29udHJvbCwgZGlzYWJsZUNvbnRleHQpOyAgICAgIFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5UnVsZShmb3JtR3JvdXA6IEZvcm1Hcm91cCwgY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBjb250ZXh0OiBEaXNhYmxlQ29udGV4dCk6IHZvaWQge1xyXG4gICAgLy8gc2UgcmlhYmlsaXRvIHVuIEZvcm1Hcm91cCB2ZW5nb25vIHJpYWJpbGl0YXRvIHR1dHRpIGkgY2hpbGRcclxuICAgIC8vIG1lbnRyZSBkb3ZyZWJiZXJvIGVzc2VyZSByaXZhbHV0YXRpIHNlIGhhbm5vIHVuYSBjb25kaXppb25lIG8gdW4gdmFsb3JlIHN0YXRpYy5cclxuICAgIGNvbnN0IHtcclxuICAgICAga2V5XHJcbiAgICAgICwgZGlzYWJsZWQgfSA9IGNvbnRleHQuY29tcG9uZW50ID8/IHt9O1xyXG5cclxuICAgIGNvbnN0IGxvZ0Rpc2FibGVkID0gKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLnByb2dyYW1tYWJpbGl0eS52ZXJib3NlKSByZXR1cm47XHJcbiAgICAgIGNvbnNvbGUubG9nKHZhbHVlID8gXCJEaXNhYmxlXCIgOiBcIkVuYWJsZVwiLCBjb250cm9sLCB7IHBhdGg6IHRoaXMuZ2V0UGF0aChjb250cm9sKSwgZm9ybUdyb3VwIH0pO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGRpc2FibGVDb250cm9sID0gKHZhbHVlOiBib29sZWFuIHwgbnVsbCkgPT4ge1xyXG4gICAgICBpZiAodmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgICBpZiAoY29udHJvbC5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgICAgIGxvZ0Rpc2FibGVkKHZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoY29udHJvbC5lbmFibGVkKSByZXR1cm47XHJcbiAgICAgICAgY29udHJvbC5lbmFibGUoKTtcclxuICAgICAgICBsb2dEaXNhYmxlZCh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgZGlzYWJsZWQgPT09ICdib29sZWFuJykge1xyXG4gICAgICBkaXNhYmxlQ29udHJvbChkaXNhYmxlZCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgZGlzYWJsZWQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGlmICh0aGlzLnByb2dyYW1tYWJpbGl0eS5pc0V4cHJlc3Npb24oZGlzYWJsZWQpKSB7XHJcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmdldEV4cHJlc3Npb24oZGlzYWJsZWQpO1xyXG4gICAgICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmdldERlcGVuZGVuY2llcyhleHByZXNzaW9uKVxyXG4gICAgICAgICAgLmZpbHRlcihkZXAgPT4gZGVwICE9PSBrZXkpO1xyXG4gICAgICAgIGNvbnN0IGFwcGx5RXhwcmVzc2lvbiA9ICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlQm9vbGVhbihmb3JtR3JvdXAsIGRpc2FibGVkLCB7IGNhY2hlYWJsZTogZmFsc2UgfSk7XHJcbiAgICAgICAgICBkaXNhYmxlQ29udHJvbChyZXN1bHQpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGRlcGVuZGVuY2llcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnByb2dyYW1tYWJpbGl0eS53YXRjaChmb3JtR3JvdXAsIGRlcGVuZGVuY2llcywgKCkgPT4ge1xyXG4gICAgICAgICAgICBhcHBseUV4cHJlc3Npb24oKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhcHBseUV4cHJlc3Npb24oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYW5BZGRUb0NvbGxlY3Rpb24oY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGRpc2FibGVkID0gY29tcG9uZW50Py5kaXNhYmxlZDtcclxuICAgIHJldHVybiB0eXBlb2YgZGlzYWJsZWQgPT09ICdib29sZWFuJ1xyXG4gICAgICB8fCB0eXBlb2YgZGlzYWJsZWQgPT09ICdzdHJpbmcnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXRoKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtU2VydmljZS5nZXRQYXRoKGNvbnRyb2wpLmpvaW4oXCIuXCIpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaXNhYmxlQ29udGV4dCB7XHJcbiAgcGFyZW50R3JvdXA6IEZvcm1Hcm91cDtcclxuICBjb21wb25lbnQ6IGFueVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBEaXNhYmxlQ29sbGVjdGlvbiA9IE1hcDxBYnN0cmFjdENvbnRyb2wsIERpc2FibGVDb250ZXh0PjtcclxuIl19
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzYWJsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvZGlzYWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFNM0MsTUFBTSxPQUFPLGNBQWM7SUFHZjtJQUNFO0lBRlosWUFDVSxlQUF1QyxFQUNyQyxXQUF3QjtRQUQxQixvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7UUFDckMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFDcEMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxHQUFHLEVBQW1DLENBQUM7SUFDcEQsQ0FBQztJQUVELGVBQWUsQ0FBQyxVQUE2QixFQUFFLE9BQXdCLEVBQUUsV0FBc0IsRUFDM0YsU0FBYztRQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNuRSxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLFVBQTZCO1FBQzNDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN0RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxTQUFTLENBQUMsU0FBb0IsRUFBRSxPQUF3QixFQUFFLE9BQXVCO1FBQ3ZGLDhEQUE4RDtRQUM5RCxrRkFBa0Y7UUFDbEYsTUFBTSxFQUNKLEdBQUcsRUFDRCxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUV6QyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNqRyxDQUFDLENBQUM7UUFDRixNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQXFCLEVBQUUsRUFBRTtZQUMvQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxPQUFPLENBQUMsUUFBUTtvQkFBRSxPQUFPO2dCQUM3QixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2xCLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxPQUFPLENBQUMsT0FBTztvQkFBRSxPQUFPO2dCQUM1QixPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2pCLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQyxDQUFBO1FBQ0QsSUFBSSxPQUFPLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNsQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0IsQ0FBQzthQUNJLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDaEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQztxQkFDN0UsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixNQUFNLGVBQWUsR0FBRyxHQUFHLEVBQUU7b0JBQzNCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDL0YsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN6QixDQUFDLENBQUM7Z0JBQ0YsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRTt3QkFDdkQsZUFBZSxFQUFFLENBQUM7b0JBQ3BCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsZUFBZSxFQUFFLENBQUM7WUFDcEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsU0FBYztRQUN2QyxNQUFNLFFBQVEsR0FBRyxTQUFTLEVBQUUsUUFBUSxDQUFDO1FBQ3JDLE9BQU8sT0FBTyxRQUFRLEtBQUssU0FBUztlQUMvQixPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUM7SUFDcEMsQ0FBQztJQUVPLE9BQU8sQ0FBQyxPQUF3QjtRQUN0QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyRCxDQUFDO3dHQTVFVSxjQUFjOzRHQUFkLGNBQWM7OzRGQUFkLGNBQWM7a0JBRDFCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFByb2dyYW1tYWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuL2Zvcm0uc2VydmljZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgRGlzYWJsZVNlcnZpY2UgIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHByb2dyYW1tYWJpbGl0eTogUHJvZ3JhbW1hYmlsaXR5U2VydmljZVxyXG4gICAgLCBwcml2YXRlIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlQ29sbGVjdGlvbigpOiBEaXNhYmxlQ29sbGVjdGlvbiB7XHJcbiAgICByZXR1cm4gbmV3IE1hcDxBYnN0cmFjdENvbnRyb2wsIERpc2FibGVDb250ZXh0PigpO1xyXG4gIH1cclxuXHJcbiAgYWRkVG9Db2xsZWN0aW9uKGNvbGxlY3Rpb246IERpc2FibGVDb2xsZWN0aW9uLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhcmVudEdyb3VwOiBGb3JtR3JvdXBcclxuICAgICwgY29tcG9uZW50OiBhbnkpIHtcclxuICAgIGlmICghY29sbGVjdGlvbi5oYXMoY29udHJvbCkgJiYgdGhpcy5jYW5BZGRUb0NvbGxlY3Rpb24oY29tcG9uZW50KSkge1xyXG4gICAgICBjb2xsZWN0aW9uLnNldChjb250cm9sLCB7IHBhcmVudEdyb3VwLCBjb21wb25lbnQgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXR1cENvbGxlY3Rpb24oY29sbGVjdGlvbjogRGlzYWJsZUNvbGxlY3Rpb24pIHtcclxuICAgIGNvbGxlY3Rpb24uZm9yRWFjaCgoZGlzYWJsZUNvbnRleHQsIGNvbnRyb2wpID0+IHtcclxuICAgICAgdGhpcy5hcHBseVJ1bGUoZGlzYWJsZUNvbnRleHQucGFyZW50R3JvdXAsIGNvbnRyb2wsIGRpc2FibGVDb250ZXh0KTsgICAgICBcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseVJ1bGUoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgY29udGV4dDogRGlzYWJsZUNvbnRleHQpOiB2b2lkIHtcclxuICAgIC8vIHNlIHJpYWJpbGl0byB1biBGb3JtR3JvdXAgdmVuZ29ubyByaWFiaWxpdGF0byB0dXR0aSBpIGNoaWxkXHJcbiAgICAvLyBtZW50cmUgZG92cmViYmVybyBlc3NlcmUgcml2YWx1dGF0aSBzZSBoYW5ubyB1bmEgY29uZGl6aW9uZSBvIHVuIHZhbG9yZSBzdGF0aWMuXHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGtleVxyXG4gICAgICAsIGRpc2FibGVkIH0gPSBjb250ZXh0LmNvbXBvbmVudCA/PyB7fTtcclxuXHJcbiAgICBjb25zdCBsb2dEaXNhYmxlZCA9ICh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5wcm9ncmFtbWFiaWxpdHkudmVyYm9zZSkgcmV0dXJuO1xyXG4gICAgICBjb25zb2xlLmxvZyh2YWx1ZSA/IFwiRGlzYWJsZVwiIDogXCJFbmFibGVcIiwgY29udHJvbCwgeyBwYXRoOiB0aGlzLmdldFBhdGgoY29udHJvbCksIGZvcm1Hcm91cCB9KTtcclxuICAgIH07XHJcbiAgICBjb25zdCBkaXNhYmxlQ29udHJvbCA9ICh2YWx1ZTogYm9vbGVhbiB8IG51bGwpID0+IHtcclxuICAgICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wuZGlzYWJsZWQpIHJldHVybjtcclxuICAgICAgICBjb250cm9sLmRpc2FibGUoKTtcclxuICAgICAgICBsb2dEaXNhYmxlZCh2YWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wuZW5hYmxlZCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICAgICAgbG9nRGlzYWJsZWQodmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGRpc2FibGVkID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgZGlzYWJsZUNvbnRyb2woZGlzYWJsZWQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGRpc2FibGVkID09PSAnc3RyaW5nJykge1xyXG4gICAgICBpZiAodGhpcy5wcm9ncmFtbWFiaWxpdHkuaXNFeHByZXNzaW9uKGRpc2FibGVkKSkge1xyXG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5nZXRFeHByZXNzaW9uKGRpc2FibGVkKTtcclxuICAgICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5nZXREZXBlbmRlbmNpZXMoZm9ybUdyb3VwLCBleHByZXNzaW9uKVxyXG4gICAgICAgICAgLmZpbHRlcihkZXAgPT4gZGVwICE9PSBrZXkpO1xyXG4gICAgICAgIGNvbnN0IGFwcGx5RXhwcmVzc2lvbiA9ICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlQm9vbGVhbihmb3JtR3JvdXAsIGRpc2FibGVkLCB7IGNhY2hlYWJsZTogZmFsc2UgfSk7XHJcbiAgICAgICAgICBkaXNhYmxlQ29udHJvbChyZXN1bHQpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGRlcGVuZGVuY2llcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnByb2dyYW1tYWJpbGl0eS53YXRjaChmb3JtR3JvdXAsIGRlcGVuZGVuY2llcywgKCkgPT4ge1xyXG4gICAgICAgICAgICBhcHBseUV4cHJlc3Npb24oKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhcHBseUV4cHJlc3Npb24oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYW5BZGRUb0NvbGxlY3Rpb24oY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGRpc2FibGVkID0gY29tcG9uZW50Py5kaXNhYmxlZDtcclxuICAgIHJldHVybiB0eXBlb2YgZGlzYWJsZWQgPT09ICdib29sZWFuJ1xyXG4gICAgICB8fCB0eXBlb2YgZGlzYWJsZWQgPT09ICdzdHJpbmcnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXRoKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtU2VydmljZS5nZXRQYXRoKGNvbnRyb2wpLmpvaW4oXCIuXCIpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaXNhYmxlQ29udGV4dCB7XHJcbiAgcGFyZW50R3JvdXA6IEZvcm1Hcm91cDtcclxuICBjb21wb25lbnQ6IGFueVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBEaXNhYmxlQ29sbGVjdGlvbiA9IE1hcDxBYnN0cmFjdENvbnRyb2wsIERpc2FibGVDb250ZXh0PjtcclxuIl19
@@ -3,6 +3,7 @@ import { buildSimpleTree, parser, evaluate as evaluateTemplate } from 'feelers';
3
3
  import { unaryTest, evaluate, parseExpression } from 'feelin';
4
4
  import { isNullOrEmpty } from '../utils/string';
5
5
  import * as i0 from "@angular/core";
6
+ import * as i1 from "../services/global.service";
6
7
  const PathExpression = "PathExpression";
7
8
  const VariableName = "VariableName";
8
9
  const FunctionInvocation = "FunctionInvocation";
@@ -14,19 +15,31 @@ const NumericLiteral = "NumericLiteral";
14
15
  const List = "List";
15
16
  const StatusDependency = "$status";
16
17
  export class FeelService {
17
- constructor() { }
18
+ globalService;
19
+ constructor(globalService) {
20
+ this.globalService = globalService;
21
+ this._verbose = this.globalService.getProperty("feel-diagnostics", "off") === "on";
22
+ }
23
+ _verbose = false;
24
+ get verbose() {
25
+ return this._verbose;
26
+ }
18
27
  evalTemplate(template, context = {}) {
19
28
  return evaluateTemplate(template, context);
20
29
  }
21
30
  ;
22
31
  evalExpression(expression, context = {}) {
23
- return evaluate(expression, context);
32
+ var evaluationResult = evaluate(expression, context);
33
+ this.logWarnings(expression, evaluationResult.warnings);
34
+ return evaluationResult.value;
24
35
  }
25
36
  ;
26
37
  evalUnaryTest(expression, context = {}, input = null) {
27
38
  try {
28
39
  context['?'] = input;
29
- return unaryTest(expression, context);
40
+ const evaluationResult = unaryTest(expression, context);
41
+ this.logWarnings(expression, evaluationResult.warnings);
42
+ return evaluationResult.value;
30
43
  }
31
44
  finally {
32
45
  delete context['?'];
@@ -89,7 +102,7 @@ export class FeelService {
89
102
  }
90
103
  return [];
91
104
  };
92
- parseExpression(expression, context).iterate({
105
+ parseExpression(expression, context, undefined).iterate({
93
106
  enter: (node) => {
94
107
  const type = node.name;
95
108
  const text = expression.substring(node.from, node.to);
@@ -251,7 +264,12 @@ export class FeelService {
251
264
  .map(part => part.trim())
252
265
  .filter(part => part.length > 0);
253
266
  }
254
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
267
+ logWarnings(expression, warnings) {
268
+ if (!this.verbose || !warnings.length)
269
+ return;
270
+ warnings.forEach(w => console.warn(`[${expression}] ${w.type}: ${w.message} (${w.position?.from}-${w.position?.to})`));
271
+ }
272
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeelService, deps: [{ token: i1.GlobalService }], target: i0.ɵɵFactoryTarget.Injectable });
255
273
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeelService, providedIn: 'root' });
256
274
  }
257
275
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeelService, decorators: [{
@@ -259,5 +277,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
259
277
  args: [{
260
278
  providedIn: 'root'
261
279
  }]
262
- }], ctorParameters: () => [] });
263
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvZmVlbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsUUFBUSxJQUFJLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRWhELE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDO0FBQ3hDLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQztBQUNwQyxNQUFNLGtCQUFrQixHQUFHLG9CQUFvQixDQUFDO0FBQ2hELE1BQU0sb0JBQW9CLEdBQUcsc0JBQXNCLENBQUM7QUFDcEQsTUFBTSxlQUFlLEdBQUcsaUJBQWlCLENBQUM7QUFDMUMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDO0FBQ3RDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQztBQUN0QyxNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQztBQUN4QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUM7QUFDcEIsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7QUFLbkMsTUFBTSxPQUFPLFdBQVc7SUFFdEIsZ0JBQWdCLENBQUM7SUFFakIsWUFBWSxDQUFDLFFBQWdCLEVBQUUsVUFBZSxFQUFFO1FBQzlDLE9BQU8sZ0JBQWdCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFBQSxDQUFDO0lBRUYsY0FBYyxDQUFDLFVBQWtCLEVBQUUsVUFBK0IsRUFBRTtRQUNsRSxPQUFPLFFBQVEs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QUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxhQUFhLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsRUFBRSxDQUFDO3dCQUM1RSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFDMUMsQ0FBQztnQkFDSCxDQUFDO2dCQUNELE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQyxDQUFDO1lBRUYsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ2pCLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxXQUFXLENBQUMsS0FBYSxFQUFFLFlBQW9CLEdBQUc7UUFDeEQsS0FBSyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNsQyxPQUFPLEtBQUs7YUFDVCxLQUFLLENBQUMsU0FBUyxDQUFDO2FBQ2hCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7d0dBNVFVLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBidWlsZFNpbXBsZVRyZWUsIHBhcnNlciwgZXZhbHVhdGUgYXMgZXZhbHVhdGVUZW1wbGF0ZSB9IGZyb20gJ2ZlZWxlcnMnO1xyXG5pbXBvcnQgeyB1bmFyeVRlc3QsIGV2YWx1YXRlLCBwYXJzZUV4cHJlc3Npb24gfSBmcm9tICdmZWVsaW4nO1xyXG5pbXBvcnQgeyBpc051bGxPckVtcHR5IH0gZnJvbSAnLi4vdXRpbHMvc3RyaW5nJztcclxuXHJcbmNvbnN0IFBhdGhFeHByZXNzaW9uID0gXCJQYXRoRXhwcmVzc2lvblwiO1xyXG5jb25zdCBWYXJpYWJsZU5hbWUgPSBcIlZhcmlhYmxlTmFtZVwiO1xyXG5jb25zdCBGdW5jdGlvbkludm9jYXRpb24gPSBcIkZ1bmN0aW9uSW52b2NhdGlvblwiO1xyXG5jb25zdCBQb3NpdGlvbmFsUGFyYW1ldGVycyA9IFwiUG9zaXRpb25hbFBhcmFtZXRlcnNcIjtcclxuY29uc3QgTmFtZWRQYXJhbWV0ZXJzID0gXCJOYW1lZFBhcmFtZXRlcnNcIjtcclxuY29uc3QgUGFyYW1ldGVyTmFtZSA9IFwiUGFyYW1ldGVyTmFtZVwiO1xyXG5jb25zdCBTdHJpbmdMaXRlcmFsID0gXCJTdHJpbmdMaXRlcmFsXCI7XHJcbmNvbnN0IE51bWVyaWNMaXRlcmFsID0gXCJOdW1lcmljTGl0ZXJhbFwiO1xyXG5jb25zdCBMaXN0ID0gXCJMaXN0XCI7XHJcbmNvbnN0IFN0YXR1c0RlcGVuZGVuY3kgPSBcIiRzdGF0dXNcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEZlZWxTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgZXZhbFRlbXBsYXRlKHRlbXBsYXRlOiBzdHJpbmcsIGNvbnRleHQ6IGFueSA9IHt9KTogc3RyaW5nIHtcclxuICAgIHJldHVybiBldmFsdWF0ZVRlbXBsYXRlKHRlbXBsYXRlLCBjb250ZXh0KTtcclxuICB9O1xyXG5cclxuICBldmFsRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcsIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSk6IGFueSB7XHJcbiAgICByZXR1cm4gZXZhbHVhdGUoZXhwcmVzc2lvbiwgY29udGV4dCk7XHJcbiAgfTtcclxuXHJcbiAgZXZhbFVuYXJ5VGVzdChleHByZXNzaW9uOiBzdHJpbmcsIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSwgaW5wdXQ6IGFueSA9IG51bGwpOiBib29sZWFuIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnRleHRbJz8nXSA9IGlucHV0O1xyXG4gICAgICByZXR1cm4gdW5hcnlUZXN0KGV4cHJlc3Npb24sIGNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgIGRlbGV0ZSBjb250ZXh0Wyc/J107XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgaXNWYWxpZEV4cHJlc3Npb24oZXhwcmVzc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoaXNOdWxsT3JFbXB0eShleHByZXNzaW9uKSkgcmV0dXJuIHRydWU7XHJcbiAgICB0cnkge1xyXG4gICAgICBldmFsdWF0ZShleHByZXNzaW9uKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNWYWxpZFVuYXJ5VGVzdChleHByZXNzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmIChpc051bGxPckVtcHR5KGV4cHJlc3Npb24pKSByZXR1cm4gdHJ1ZTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHVuYXJ5VGVzdChleHByZXNzaW9uKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RGVwZW5kZW5jaWVzKGV4cHJlc3Npb246IHN0cmluZywgY29udGV4dDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KTogKHN0cmluZyB8IHN0cmluZ1tdKVtdIHtcclxuICAgIGNvbnN0IGRlcGVuZGVuY2llczogKHN0cmluZyB8IHN0cmluZ1tdKVtdID0gW107XHJcbiAgICBjb25zdCB1bmlxdWVTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuICAgIGNvbnN0IGFkZFNldCA9ICh0ZXh0OiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKHVuaXF1ZVNldC5oYXModGV4dCkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdW5pcXVlU2V0LmFkZCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBub2RlczogTm9kZUl0ZW1bXSA9IFt7IHR5cGU6IFwicm9vdFwiLCB0ZXh0OiBleHByZXNzaW9uLCBjaGlsZHJlbjogW10sIHBhcmVudDogbnVsbCB9XTtcclxuXHJcbiAgICBjb25zdCBwZWVrID0gKCkgPT4ge1xyXG4gICAgICByZXR1cm4gbm9kZXMubGVuZ3RoID4gMCA/IG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdIDogbnVsbDtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaXNBbGxvd2VkUGF0aEV4cHJlc3Npb24gPSAobm9kZTogTm9kZUl0ZW0pOiBib29sZWFuID0+IHtcclxuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gVmFyaWFibGVOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUudHlwZSAhPT0gUGF0aEV4cHJlc3Npb24gfHwgIUFycmF5LmlzQXJyYXkobm9kZS5jaGlsZHJlbikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4uZXZlcnkoaXNBbGxvd2VkUGF0aEV4cHJlc3Npb24pO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBnZXRQYXRoRXhwcmVzc2lvbiA9IChpdGVtOiBOb2RlSXRlbSk6IHN0cmluZ1tdID0+IHtcclxuICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gVmFyaWFibGVOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIFtpdGVtLnRleHRdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09IFBhdGhFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uY2hpbGRyZW4uZmxhdE1hcChnZXRQYXRoRXhwcmVzc2lvbik7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfTtcclxuXHJcbiAgICBwYXJzZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgY29udGV4dCkuaXRlcmF0ZSh7XHJcbiAgICAgIGVudGVyOiAobm9kZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9IG5vZGUubmFtZTtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZXhwcmVzc2lvbi5zdWJzdHJpbmcobm9kZS5mcm9tLCBub2RlLnRvKTtcclxuICAgICAgICBjb25zdCBwYXJlbnQgPSBwZWVrKCk7XHJcbiAgICAgICAgY29uc3QgaXRlbTogTm9kZUl0ZW0gPSB7IHR5cGUsIHRleHQsIGNoaWxkcmVuOiBbXSwgcGFyZW50OiBwYXJlbnQgfTtcclxuICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbm9kZXMucHVzaChpdGVtKTtcclxuICAgICAgfSxcclxuICAgICAgbGVhdmU6IChub2RlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAobm9kZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IG5vZGVzLnBvcCgpO1xyXG4gICAgICAgICAgaWYgKCFpdGVtKSByZXR1cm47XHJcbiAgICAgICAgICBjb25zdCBwYXJlbnQgPSBwZWVrKCk7XHJcblxyXG4gICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gUGF0aEV4cHJlc3Npb24pIHtcclxuICAgICAgICAgICAgY29uc3QgaWdub3JlID0gKHBhcmVudD8udHlwZSA9PT0gRnVuY3Rpb25JbnZvY2F0aW9uXHJcbiAgICAgICAgICAgICAgfHwgcGFyZW50Py50eXBlID09PSBQYXRoRXhwcmVzc2lvblxyXG4gICAgICAgICAgICAgIHx8IGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID09IDBcclxuICAgICAgICAgICAgICB8fCAhaXNBbGxvd2VkUGF0aEV4cHJlc3Npb24oaXRlbSkpO1xyXG4gICAgICAgICAgICBpZiAoIWlnbm9yZSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBhdGhFeHByZXNzaW9uID0gZ2V0UGF0aEV4cHJlc3Npb24oaXRlbSk7XHJcbiAgICAgICAgICAgICAgaWYgKGFkZFNldChwYXRoRXhwcmVzc2lvbi5qb2luKCcuJykpKSB7XHJcbiAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMucHVzaChwYXRoRXhwcmVzc2lvbik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChpdGVtLnR5cGUgPT09IFZhcmlhYmxlTmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBpZ25vcmUgPSAocGFyZW50Py50eXBlID09PSBGdW5jdGlvbkludm9jYXRpb25cclxuICAgICAgICAgICAgICB8fCBwYXJlbnQ/LnR5cGUgPT09IFBhdGhFeHByZXNzaW9uKTtcclxuICAgICAgICAgICAgaWYgKCFpZ25vcmUpIHtcclxuICAgICAgICAgICAgICBjb25zdCBwYXRoRXhwcmVzc2lvbiA9IGl0ZW0udGV4dDtcclxuICAgICAgICAgICAgICBpZiAoYWRkU2V0KHBhdGhFeHByZXNzaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLnB1c2gocGF0aEV4cHJlc3Npb24pO1xyXG4gICAgICAgICAgICAgIH0gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChpdGVtLnR5cGUgPT09IEZ1bmN0aW9uSW52b2NhdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSB0aGlzLmdldEZ1bmN0aW9uTmFtZShpdGVtLCBnZXRQYXRoRXhwcmVzc2lvbik7XHJcbiAgICAgICAgICAgIGlmIChmdW5jdGlvbk5hbWUgPT0gXCJmbi5zdGF0dXNcIikge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHN0YXR1c0RlcHMgPSB0aGlzLmdldFN0YXR1c0RlcGVuZGVuY2llcyhpdGVtKTtcclxuICAgICAgICAgICAgICBpZiAoc3RhdHVzRGVwcyAmJiBhZGRTZXQoc3RhdHVzRGVwcy5qb2luKCcuJykpKSB7XHJcbiAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMucHVzaChzdGF0dXNEZXBzKTtcclxuICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZGVwZW5kZW5jaWVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVtcGxhdGVEZXBlbmRlbmNpZXMoZXhwcmVzc2lvbjogc3RyaW5nLCBjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pOiAoc3RyaW5nIHwgc3RyaW5nW10pW10ge1xyXG4gICAgaWYgKCFleHByZXNzaW9uKSByZXR1cm4gW107XHJcblxyXG4gICAgY29uc3Qgc2ltcGxlVHJlZSA9IGJ1aWxkU2ltcGxlVHJlZShwYXJzZXIucGFyc2UoZXhwcmVzc2lvbiksIGV4cHJlc3Npb24pO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBmdW5jdGlvbiB0cmF2ZXJzZShub2RlQXJyYXk6IGFueVtdKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2RlQXJyYXkpIHtcclxuICAgICAgICBpZiAobm9kZS5uYW1lID09PSAnRmVlbEJsb2NrJyAmJiBub2RlLmNvbnRlbnQpIHtcclxuICAgICAgICAgIHJlc3VsdC5wdXNoKG5vZGUuY29udGVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdHJhdmVyc2Uobm9kZS5jaGlsZHJlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdHJhdmVyc2UoW3NpbXBsZVRyZWVdKTtcclxuXHJcbiAgICBjb25zdCBhcnJheUV4cHJlc3Npb24gPSBgWyAke3Jlc3VsdC5qb2luKCcsICcpfSBdYDtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5nZXREZXBlbmRlbmNpZXMoYXJyYXlFeHByZXNzaW9uLCBjb250ZXh0KTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBQcml2YXRlIE1lbWJlcnNcclxuXHJcbiAgcHJpdmF0ZSBmaW5kQW5jZXN0b3Iobm9kZTogTm9kZUl0ZW0sIHByZWRpY2F0ZTogKGNoaWxkOiBOb2RlSXRlbSkgPT4gYm9vbGVhbik6IE5vZGVJdGVtIHwgbnVsbCB7XHJcbiAgICBsZXQgY3VycmVudCA9IG5vZGUucGFyZW50O1xyXG4gICAgd2hpbGUgKGN1cnJlbnQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHByZWRpY2F0ZShjdXJyZW50KSkge1xyXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgICB9XHJcbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudDtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kRGVzY2VuZGFudChub2RlOiBOb2RlSXRlbSwgcHJlZGljYXRlOiAoY2hpbGQ6IE5vZGVJdGVtKSA9PiBib29sZWFuKTogTm9kZUl0ZW0gfCBudWxsIHtcclxuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbikge1xyXG4gICAgICBpZiAocHJlZGljYXRlKGNoaWxkKSkge1xyXG4gICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZERlc2NlbmRhbnQoY2hpbGQsIHByZWRpY2F0ZSk7XHJcbiAgICAgIGlmIChmb3VuZCAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBmb3VuZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRDaGlsZChub2RlOiBOb2RlSXRlbSwgcHJlZGljYXRlOiAoY2hpbGQ6IE5vZGVJdGVtKSA9PiBib29sZWFuKTogTm9kZUl0ZW0gfCBudWxsIHtcclxuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbikge1xyXG4gICAgICBpZiAocHJlZGljYXRlKGNoaWxkKSkge1xyXG4gICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRDaGlsZHJlbihub2RlOiBOb2RlSXRlbSwgcHJlZGljYXRlOiAoY2hpbGQ6IE5vZGVJdGVtKSA9PiBib29sZWFuKTogTm9kZUl0ZW1bXSB7XHJcbiAgICByZXR1cm4gbm9kZS5jaGlsZHJlbi5maWx0ZXIocHJlZGljYXRlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RnVuY3Rpb25OYW1lKG5vZGU6IE5vZGVJdGVtLCBwYXRoUmVzb2x2ZXI6IChpdGVtOiBOb2RlSXRlbSkgPT4gc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcclxuXHJcbiAgICBjb25zdCBwYXRoRXhwcmVzc2lvbiA9IHRoaXMuZmluZENoaWxkKG5vZGUsIChuKSA9PiBuLnR5cGUgPT09IFBhdGhFeHByZXNzaW9uKTtcclxuICAgIGlmIChwYXRoRXhwcmVzc2lvbikge1xyXG4gICAgICByZXR1cm4gcGF0aFJlc29sdmVyKHBhdGhFeHByZXNzaW9uKS5qb2luKCcuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdmFyaWFibGVOYW1lID0gdGhpcy5maW5kQ2hpbGQobm9kZSwgKG4pID0+IG4udHlwZSA9PT0gVmFyaWFibGVOYW1lKTtcclxuICAgIGlmICh2YXJpYWJsZU5hbWUpIHtcclxuICAgICAgcmV0dXJuIHBhdGhSZXNvbHZlcih2YXJpYWJsZU5hbWUpLmpvaW4oJy4nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U3RhdHVzRGVwZW5kZW5jaWVzKG5vZGU6IE5vZGVJdGVtKTogc3RyaW5nW10gfCBudWxsIHtcclxuICAgIGlmIChub2RlLnR5cGUgIT0gRnVuY3Rpb25JbnZvY2F0aW9uKSByZXR1cm4gW107XHJcblxyXG4gICAgbGV0IHBhdGhQYXJhbWV0ZXI6IE5vZGVJdGVtIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgY29uc3QgbmFtZWRQYXJhbWV0ZXJzID0gdGhpcy5maW5kQ2hpbGQobm9kZSwgKG4pID0+IG4udHlwZSA9PT0gTmFtZWRQYXJhbWV0ZXJzKTtcclxuXHJcbiAgICBpZiAobmFtZWRQYXJhbWV0ZXJzKSB7XHJcbiAgICAgIGNvbnN0IHBhdGhOYW1lID0gdGhpcy5maW5kRGVzY2VuZGFudChuYW1lZFBhcmFtZXRlcnMsIChuKSA9PiBuLnR5cGUgPT0gUGFyYW1ldGVyTmFtZSAmJiBuLnRleHQgPT09IFwicGF0aFwiKTtcclxuICAgICAgY29uc3QgbmFtZWRQYXJhbWV0ZXIgPSBwYXRoTmFtZT8ucGFyZW50O1xyXG4gICAgICBpZiAobmFtZWRQYXJhbWV0ZXIgJiYgbmFtZWRQYXJhbWV0ZXIuY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIHBhdGhQYXJhbWV0ZXIgPSBuYW1lZFBhcmFtZXRlci5jaGlsZHJlblsxXTtcclxuICAgICAgfSAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gdGhpcy5maW5kQ2hpbGQobm9kZSwgKG4pID0+IG4udHlwZSA9PT0gUG9zaXRpb25hbFBhcmFtZXRlcnMpO1xyXG5cclxuICAgIGlmIChwb3NpdGlvbmFsUGFyYW1ldGVycykge1xyXG4gICAgICBwYXRoUGFyYW1ldGVyID0gcG9zaXRpb25hbFBhcmFtZXRlcnMuY2hpbGRyZW5bMF07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhdGhQYXJhbWV0ZXIpIHtcclxuXHJcbiAgICAgIGNvbnN0IGdldFBhdGhFeHByZXNzaW9uID0gKGl0ZW06IE5vZGVJdGVtKTogc3RyaW5nW10gPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09IFN0cmluZ0xpdGVyYWwpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnNwbGl0UXVvdGVkKGl0ZW0udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gTnVtZXJpY0xpdGVyYWwpIHtcclxuICAgICAgICAgIHJldHVybiBbaXRlbS50ZXh0XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXRlbS50eXBlID09PSBMaXN0KSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuZmluZENoaWxkcmVuKGl0ZW0sIChuKSA9PiBuLnR5cGUgIT09IFwiW1wiICYmIG4udHlwZSAhPT0gXCJdXCIpO1xyXG4gICAgICAgICAgaWYgKGl0ZW1zLmV2ZXJ5KG4gPT4gbi50eXBlID09PSBTdHJpbmdMaXRlcmFsIHx8IG4udHlwZSA9PT0gTnVtZXJpY0xpdGVyYWwpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtcy5mbGF0TWFwKGdldFBhdGhFeHByZXNzaW9uKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgcGF0aCA9IGdldFBhdGhFeHByZXNzaW9uKHBhdGhQYXJhbWV0ZXIpO1xyXG4gICAgICBpZiAocGF0aC5sZW5ndGggPiAwKSAgICAgIFxyXG4gICAgICAgIHJldHVybiBbU3RhdHVzRGVwZW5kZW5jeSwgLi4ucGF0aF07XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzcGxpdFF1b3RlZChpbnB1dDogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyA9ICcuJyk6IHN0cmluZ1tdIHtcclxuICAgIGlucHV0ID0gKGlucHV0ID8/IFwiXCIpLnNsaWNlKDEsIC0xKVxyXG4gICAgcmV0dXJuIGlucHV0XHJcbiAgICAgIC5zcGxpdChzZXBhcmF0b3IpXHJcbiAgICAgIC5tYXAocGFydCA9PiBwYXJ0LnRyaW0oKSlcclxuICAgICAgLmZpbHRlcihwYXJ0ID0+IHBhcnQubGVuZ3RoID4gMCk7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG5cclxuaW50ZXJmYWNlIE5vZGVJdGVtIHtcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgdGV4dDogc3RyaW5nO1xyXG4gIGNoaWxkcmVuOiBOb2RlSXRlbVtdO1xyXG4gIHBhcmVudDogTm9kZUl0ZW0gfCBudWxsO1xyXG59XHJcbiJdfQ==
280
+ }], ctorParameters: () => [{ type: i1.GlobalService }] });
281
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvZmVlbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsUUFBUSxJQUFJLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBVyxNQUFNLFFBQVEsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUdoRCxNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQztBQUN4QyxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUM7QUFDcEMsTUFBTSxrQkFBa0IsR0FBRyxvQkFBb0IsQ0FBQztBQUNoRCxNQUFNLG9CQUFvQixHQUFHLHNCQUFzQixDQUFDO0FBQ3BELE1BQU0sZUFBZSxHQUFHLGlCQUFpQixDQUFDO0FBQzFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQztBQUN0QyxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUM7QUFDdEMsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUM7QUFDeEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ3BCLE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO0FBS25DLE1BQU0sT0FBTyxXQUFXO0lBR1o7SUFEVixZQUNVLGFBQTRCO1FBQTVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBRXBDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDO0lBQ3JGLENBQUM7SUFFTyxRQUFRLEdBQUcsS0FBSyxDQUFD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QUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbEMsT0FBTyxLQUFLO2FBQ1QsS0FBSyxDQUFDLFNBQVMsQ0FBQzthQUNoQixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU8sV0FBVyxDQUFDLFVBQWtCLEVBQUUsUUFBbUI7UUFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDOUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQ2hHLENBQUM7SUFDSixDQUFDO3dHQWpTVSxXQUFXOzRHQUFYLFdBQVcsY0FGVixNQUFNOzs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgYnVpbGRTaW1wbGVUcmVlLCBwYXJzZXIsIGV2YWx1YXRlIGFzIGV2YWx1YXRlVGVtcGxhdGUgfSBmcm9tICdmZWVsZXJzJztcclxuaW1wb3J0IHsgdW5hcnlUZXN0LCBldmFsdWF0ZSwgcGFyc2VFeHByZXNzaW9uLCBXYXJuaW5nIH0gZnJvbSAnZmVlbGluJztcclxuaW1wb3J0IHsgaXNOdWxsT3JFbXB0eSB9IGZyb20gJy4uL3V0aWxzL3N0cmluZyc7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcblxyXG5jb25zdCBQYXRoRXhwcmVzc2lvbiA9IFwiUGF0aEV4cHJlc3Npb25cIjtcclxuY29uc3QgVmFyaWFibGVOYW1lID0gXCJWYXJpYWJsZU5hbWVcIjtcclxuY29uc3QgRnVuY3Rpb25JbnZvY2F0aW9uID0gXCJGdW5jdGlvbkludm9jYXRpb25cIjtcclxuY29uc3QgUG9zaXRpb25hbFBhcmFtZXRlcnMgPSBcIlBvc2l0aW9uYWxQYXJhbWV0ZXJzXCI7XHJcbmNvbnN0IE5hbWVkUGFyYW1ldGVycyA9IFwiTmFtZWRQYXJhbWV0ZXJzXCI7XHJcbmNvbnN0IFBhcmFtZXRlck5hbWUgPSBcIlBhcmFtZXRlck5hbWVcIjtcclxuY29uc3QgU3RyaW5nTGl0ZXJhbCA9IFwiU3RyaW5nTGl0ZXJhbFwiO1xyXG5jb25zdCBOdW1lcmljTGl0ZXJhbCA9IFwiTnVtZXJpY0xpdGVyYWxcIjtcclxuY29uc3QgTGlzdCA9IFwiTGlzdFwiO1xyXG5jb25zdCBTdGF0dXNEZXBlbmRlbmN5ID0gXCIkc3RhdHVzXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGZWVsU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBnbG9iYWxTZXJ2aWNlOiBHbG9iYWxTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLl92ZXJib3NlID0gdGhpcy5nbG9iYWxTZXJ2aWNlLmdldFByb3BlcnR5KFwiZmVlbC1kaWFnbm9zdGljc1wiLCBcIm9mZlwiKSA9PT0gXCJvblwiO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdmVyYm9zZSA9IGZhbHNlO1xyXG5cclxuICBnZXQgdmVyYm9zZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl92ZXJib3NlO1xyXG4gIH1cclxuXHJcbiAgZXZhbFRlbXBsYXRlKHRlbXBsYXRlOiBzdHJpbmcsIGNvbnRleHQ6IGFueSA9IHt9KTogc3RyaW5nIHtcclxuICAgIHJldHVybiBldmFsdWF0ZVRlbXBsYXRlKHRlbXBsYXRlLCBjb250ZXh0KTtcclxuICB9O1xyXG5cclxuICBldmFsRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcsIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSk6IGFueSB7XHJcbiAgICB2YXIgZXZhbHVhdGlvblJlc3VsdCA9IGV2YWx1YXRlKGV4cHJlc3Npb24sIGNvbnRleHQpO1xyXG4gICAgdGhpcy5sb2dXYXJuaW5ncyhleHByZXNzaW9uLCBldmFsdWF0aW9uUmVzdWx0Lndhcm5pbmdzKTtcclxuICAgIHJldHVybiBldmFsdWF0aW9uUmVzdWx0LnZhbHVlO1xyXG4gIH07XHJcblxyXG4gIGV2YWxVbmFyeVRlc3QoZXhwcmVzc2lvbjogc3RyaW5nLCBjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sIGlucHV0OiBhbnkgPSBudWxsKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29udGV4dFsnPyddID0gaW5wdXQ7XHJcbiAgICAgIGNvbnN0IGV2YWx1YXRpb25SZXN1bHQgPSB1bmFyeVRlc3QoZXhwcmVzc2lvbiwgY29udGV4dCk7XHJcbiAgICAgIHRoaXMubG9nV2FybmluZ3MoZXhwcmVzc2lvbiwgZXZhbHVhdGlvblJlc3VsdC53YXJuaW5ncyk7XHJcbiAgICAgIHJldHVybiBldmFsdWF0aW9uUmVzdWx0LnZhbHVlO1xyXG4gICAgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgIGRlbGV0ZSBjb250ZXh0Wyc/J107XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgaXNWYWxpZEV4cHJlc3Npb24oZXhwcmVzc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoaXNOdWxsT3JFbXB0eShleHByZXNzaW9uKSkgcmV0dXJuIHRydWU7XHJcbiAgICB0cnkge1xyXG4gICAgICBldmFsdWF0ZShleHByZXNzaW9uKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNWYWxpZFVuYXJ5VGVzdChleHByZXNzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmIChpc051bGxPckVtcHR5KGV4cHJlc3Npb24pKSByZXR1cm4gdHJ1ZTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHVuYXJ5VGVzdChleHByZXNzaW9uKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RGVwZW5kZW5jaWVzKGV4cHJlc3Npb246IHN0cmluZywgY29udGV4dDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KTogKHN0cmluZyB8IHN0cmluZ1tdKVtdIHtcclxuICAgIGNvbnN0IGRlcGVuZGVuY2llczogKHN0cmluZyB8IHN0cmluZ1tdKVtdID0gW107XHJcbiAgICBjb25zdCB1bmlxdWVTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuICAgIGNvbnN0IGFkZFNldCA9ICh0ZXh0OiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKHVuaXF1ZVNldC5oYXModGV4dCkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdW5pcXVlU2V0LmFkZCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBub2RlczogTm9kZUl0ZW1bXSA9IFt7IHR5cGU6IFwicm9vdFwiLCB0ZXh0OiBleHByZXNzaW9uLCBjaGlsZHJlbjogW10sIHBhcmVudDogbnVsbCB9XTtcclxuXHJcbiAgICBjb25zdCBwZWVrID0gKCkgPT4ge1xyXG4gICAgICByZXR1cm4gbm9kZXMubGVuZ3RoID4gMCA/IG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdIDogbnVsbDtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaXNBbGxvd2VkUGF0aEV4cHJlc3Npb24gPSAobm9kZTogTm9kZUl0ZW0pOiBib29sZWFuID0+IHtcclxuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gVmFyaWFibGVOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUudHlwZSAhPT0gUGF0aEV4cHJlc3Npb24gfHwgIUFycmF5LmlzQXJyYXkobm9kZS5jaGlsZHJlbikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4uZXZlcnkoaXNBbGxvd2VkUGF0aEV4cHJlc3Npb24pO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBnZXRQYXRoRXhwcmVzc2lvbiA9IChpdGVtOiBOb2RlSXRlbSk6IHN0cmluZ1tdID0+IHtcclxuICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gVmFyaWFibGVOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIFtpdGVtLnRleHRdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09IFBhdGhFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uY2hpbGRyZW4uZmxhdE1hcChnZXRQYXRoRXhwcmVzc2lvbik7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfTtcclxuXHJcbiAgICBwYXJzZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgY29udGV4dCwgdW5kZWZpbmVkKS5pdGVyYXRlKHtcclxuICAgICAgZW50ZXI6IChub2RlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB0eXBlID0gbm9kZS5uYW1lO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBleHByZXNzaW9uLnN1YnN0cmluZyhub2RlLmZyb20sIG5vZGUudG8pO1xyXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHBlZWsoKTtcclxuICAgICAgICBjb25zdCBpdGVtOiBOb2RlSXRlbSA9IHsgdHlwZSwgdGV4dCwgY2hpbGRyZW46IFtdLCBwYXJlbnQ6IHBhcmVudCB9O1xyXG4gICAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICAgIHBhcmVudC5jaGlsZHJlbi5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBub2Rlcy5wdXNoKGl0ZW0pO1xyXG4gICAgICB9LFxyXG4gICAgICBsZWF2ZTogKG5vZGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChub2Rlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gbm9kZXMucG9wKCk7XHJcbiAgICAgICAgICBpZiAoIWl0ZW0pIHJldHVybjtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHBlZWsoKTtcclxuXHJcbiAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSBQYXRoRXhwcmVzc2lvbikge1xyXG4gICAgICAgICAgICBjb25zdCBpZ25vcmUgPSAocGFyZW50Py50eXBlID09PSBGdW5jdGlvbkludm9jYXRpb25cclxuICAgICAgICAgICAgICB8fCBwYXJlbnQ/LnR5cGUgPT09IFBhdGhFeHByZXNzaW9uXHJcbiAgICAgICAgICAgICAgfHwgaXRlbS5jaGlsZHJlbi5sZW5ndGggPT0gMFxyXG4gICAgICAgICAgICAgIHx8ICFpc0FsbG93ZWRQYXRoRXhwcmVzc2lvbihpdGVtKSk7XHJcbiAgICAgICAgICAgIGlmICghaWdub3JlKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGF0aEV4cHJlc3Npb24gPSBnZXRQYXRoRXhwcmVzc2lvbihpdGVtKTtcclxuICAgICAgICAgICAgICBpZiAoYWRkU2V0KHBhdGhFeHByZXNzaW9uLmpvaW4oJy4nKSkpIHtcclxuICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcy5wdXNoKHBhdGhFeHByZXNzaW9uKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gVmFyaWFibGVOYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZSA9IChwYXJlbnQ/LnR5cGUgPT09IEZ1bmN0aW9uSW52b2NhdGlvblxyXG4gICAgICAgICAgICAgIHx8IHBhcmVudD8udHlwZSA9PT0gUGF0aEV4cHJlc3Npb24pO1xyXG4gICAgICAgICAgICBpZiAoIWlnbm9yZSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBhdGhFeHByZXNzaW9uID0gaXRlbS50ZXh0O1xyXG4gICAgICAgICAgICAgIGlmIChhZGRTZXQocGF0aEV4cHJlc3Npb24pKSB7XHJcbiAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMucHVzaChwYXRoRXhwcmVzc2lvbik7XHJcbiAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gRnVuY3Rpb25JbnZvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHRoaXMuZ2V0RnVuY3Rpb25OYW1lKGl0ZW0sIGdldFBhdGhFeHByZXNzaW9uKTtcclxuICAgICAgICAgICAgaWYgKGZ1bmN0aW9uTmFtZSA9PSBcImZuLnN0YXR1c1wiKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc3RhdHVzRGVwcyA9IHRoaXMuZ2V0U3RhdHVzRGVwZW5kZW5jaWVzKGl0ZW0pO1xyXG4gICAgICAgICAgICAgIGlmIChzdGF0dXNEZXBzICYmIGFkZFNldChzdGF0dXNEZXBzLmpvaW4oJy4nKSkpIHtcclxuICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcy5wdXNoKHN0YXR1c0RlcHMpO1xyXG4gICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBkZXBlbmRlbmNpZXM7XHJcbiAgfVxyXG5cclxuICBnZXRUZW1wbGF0ZURlcGVuZGVuY2llcyhleHByZXNzaW9uOiBzdHJpbmcsIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSk6IChzdHJpbmcgfCBzdHJpbmdbXSlbXSB7XHJcbiAgICBpZiAoIWV4cHJlc3Npb24pIHJldHVybiBbXTtcclxuXHJcbiAgICBjb25zdCBzaW1wbGVUcmVlID0gYnVpbGRTaW1wbGVUcmVlKHBhcnNlci5wYXJzZShleHByZXNzaW9uKSwgZXhwcmVzc2lvbik7XHJcblxyXG4gICAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGZ1bmN0aW9uIHRyYXZlcnNlKG5vZGVBcnJheTogYW55W10pIHtcclxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVBcnJheSkge1xyXG4gICAgICAgIGlmIChub2RlLm5hbWUgPT09ICdGZWVsQmxvY2snICYmIG5vZGUuY29udGVudCkge1xyXG4gICAgICAgICAgcmVzdWx0LnB1c2gobm9kZS5jb250ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0cmF2ZXJzZShub2RlLmNoaWxkcmVuKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0cmF2ZXJzZShbc2ltcGxlVHJlZV0pO1xyXG5cclxuICAgIGNvbnN0IGFycmF5RXhwcmVzc2lvbiA9IGBbICR7cmVzdWx0LmpvaW4oJywgJyl9IF1gO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmdldERlcGVuZGVuY2llcyhhcnJheUV4cHJlc3Npb24sIGNvbnRleHQpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIFByaXZhdGUgTWVtYmVyc1xyXG5cclxuICBwcml2YXRlIGZpbmRBbmNlc3Rvcihub2RlOiBOb2RlSXRlbSwgcHJlZGljYXRlOiAoY2hpbGQ6IE5vZGVJdGVtKSA9PiBib29sZWFuKTogTm9kZUl0ZW0gfCBudWxsIHtcclxuICAgIGxldCBjdXJyZW50ID0gbm9kZS5wYXJlbnQ7XHJcbiAgICB3aGlsZSAoY3VycmVudCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAocHJlZGljYXRlKGN1cnJlbnQpKSB7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICAgIH1cclxuICAgICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmREZXNjZW5kYW50KG5vZGU6IE5vZGVJdGVtLCBwcmVkaWNhdGU6IChjaGlsZDogTm9kZUl0ZW0pID0+IGJvb2xlYW4pOiBOb2RlSXRlbSB8IG51bGwge1xyXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgIGlmIChwcmVkaWNhdGUoY2hpbGQpKSB7XHJcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kRGVzY2VuZGFudChjaGlsZCwgcHJlZGljYXRlKTtcclxuICAgICAgaWYgKGZvdW5kICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIGZvdW5kO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZENoaWxkKG5vZGU6IE5vZGVJdGVtLCBwcmVkaWNhdGU6IChjaGlsZDogTm9kZUl0ZW0pID0+IGJvb2xlYW4pOiBOb2RlSXRlbSB8IG51bGwge1xyXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgIGlmIChwcmVkaWNhdGUoY2hpbGQpKSB7XHJcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZENoaWxkcmVuKG5vZGU6IE5vZGVJdGVtLCBwcmVkaWNhdGU6IChjaGlsZDogTm9kZUl0ZW0pID0+IGJvb2xlYW4pOiBOb2RlSXRlbVtdIHtcclxuICAgIHJldHVybiBub2RlLmNoaWxkcmVuLmZpbHRlcihwcmVkaWNhdGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGdW5jdGlvbk5hbWUobm9kZTogTm9kZUl0ZW0sIHBhdGhSZXNvbHZlcjogKGl0ZW06IE5vZGVJdGVtKSA9PiBzdHJpbmdbXSk6IHN0cmluZyB8IG51bGwge1xyXG5cclxuICAgIGNvbnN0IHBhdGhFeHByZXNzaW9uID0gdGhpcy5maW5kQ2hpbGQobm9kZSwgKG4pID0+IG4udHlwZSA9PT0gUGF0aEV4cHJlc3Npb24pO1xyXG4gICAgaWYgKHBhdGhFeHByZXNzaW9uKSB7XHJcbiAgICAgIHJldHVybiBwYXRoUmVzb2x2ZXIocGF0aEV4cHJlc3Npb24pLmpvaW4oJy4nKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2YXJpYWJsZU5hbWUgPSB0aGlzLmZpbmRDaGlsZChub2RlLCAobikgPT4gbi50eXBlID09PSBWYXJpYWJsZU5hbWUpO1xyXG4gICAgaWYgKHZhcmlhYmxlTmFtZSkge1xyXG4gICAgICByZXR1cm4gcGF0aFJlc29sdmVyKHZhcmlhYmxlTmFtZSkuam9pbignLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTdGF0dXNEZXBlbmRlbmNpZXMobm9kZTogTm9kZUl0ZW0pOiBzdHJpbmdbXSB8IG51bGwge1xyXG4gICAgaWYgKG5vZGUudHlwZSAhPSBGdW5jdGlvbkludm9jYXRpb24pIHJldHVybiBbXTtcclxuXHJcbiAgICBsZXQgcGF0aFBhcmFtZXRlcjogTm9kZUl0ZW0gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBjb25zdCBuYW1lZFBhcmFtZXRlcnMgPSB0aGlzLmZpbmRDaGlsZChub2RlLCAobikgPT4gbi50eXBlID09PSBOYW1lZFBhcmFtZXRlcnMpO1xyXG5cclxuICAgIGlmIChuYW1lZFBhcmFtZXRlcnMpIHtcclxuICAgICAgY29uc3QgcGF0aE5hbWUgPSB0aGlzLmZpbmREZXNjZW5kYW50KG5hbWVkUGFyYW1ldGVycywgKG4pID0+IG4udHlwZSA9PSBQYXJhbWV0ZXJOYW1lICYmIG4udGV4dCA9PT0gXCJwYXRoXCIpO1xyXG4gICAgICBjb25zdCBuYW1lZFBhcmFtZXRlciA9IHBhdGhOYW1lPy5wYXJlbnQ7XHJcbiAgICAgIGlmIChuYW1lZFBhcmFtZXRlciAmJiBuYW1lZFBhcmFtZXRlci5jaGlsZHJlbi5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgcGF0aFBhcmFtZXRlciA9IG5hbWVkUGFyYW1ldGVyLmNoaWxkcmVuWzFdO1xyXG4gICAgICB9ICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcG9zaXRpb25hbFBhcmFtZXRlcnMgPSB0aGlzLmZpbmRDaGlsZChub2RlLCAobikgPT4gbi50eXBlID09PSBQb3NpdGlvbmFsUGFyYW1ldGVycyk7XHJcblxyXG4gICAgaWYgKHBvc2l0aW9uYWxQYXJhbWV0ZXJzKSB7XHJcbiAgICAgIHBhdGhQYXJhbWV0ZXIgPSBwb3NpdGlvbmFsUGFyYW1ldGVycy5jaGlsZHJlblswXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGF0aFBhcmFtZXRlcikge1xyXG5cclxuICAgICAgY29uc3QgZ2V0UGF0aEV4cHJlc3Npb24gPSAoaXRlbTogTm9kZUl0ZW0pOiBzdHJpbmdbXSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gU3RyaW5nTGl0ZXJhbCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3BsaXRRdW90ZWQoaXRlbS50ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXRlbS50eXBlID09PSBOdW1lcmljTGl0ZXJhbCkge1xyXG4gICAgICAgICAgcmV0dXJuIFtpdGVtLnRleHRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpdGVtLnR5cGUgPT09IExpc3QpIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5maW5kQ2hpbGRyZW4oaXRlbSwgKG4pID0+IG4udHlwZSAhPT0gXCJbXCIgJiYgbi50eXBlICE9PSBcIl1cIik7XHJcbiAgICAgICAgICBpZiAoaXRlbXMuZXZlcnkobiA9PiBuLnR5cGUgPT09IFN0cmluZ0xpdGVyYWwgfHwgbi50eXBlID09PSBOdW1lcmljTGl0ZXJhbCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLmZsYXRNYXAoZ2V0UGF0aEV4cHJlc3Npb24pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zdCBwYXRoID0gZ2V0UGF0aEV4cHJlc3Npb24ocGF0aFBhcmFtZXRlcik7XHJcbiAgICAgIGlmIChwYXRoLmxlbmd0aCA+IDApICAgICAgXHJcbiAgICAgICAgcmV0dXJuIFtTdGF0dXNEZXBlbmRlbmN5LCAuLi5wYXRoXTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNwbGl0UXVvdGVkKGlucHV0OiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nID0gJy4nKTogc3RyaW5nW10ge1xyXG4gICAgaW5wdXQgPSAoaW5wdXQgPz8gXCJcIikuc2xpY2UoMSwgLTEpXHJcbiAgICByZXR1cm4gaW5wdXRcclxuICAgICAgLnNwbGl0KHNlcGFyYXRvcilcclxuICAgICAgLm1hcChwYXJ0ID0+IHBhcnQudHJpbSgpKVxyXG4gICAgICAuZmlsdGVyKHBhcnQgPT4gcGFydC5sZW5ndGggPiAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9nV2FybmluZ3MoZXhwcmVzc2lvbjogc3RyaW5nLCB3YXJuaW5nczogV2FybmluZ1tdKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudmVyYm9zZSB8fCAhd2FybmluZ3MubGVuZ3RoKSByZXR1cm47XHJcbiAgICB3YXJuaW5ncy5mb3JFYWNoKHcgPT5cclxuICAgICAgY29uc29sZS53YXJuKGBbJHtleHByZXNzaW9ufV0gJHt3LnR5cGV9OiAke3cubWVzc2FnZX0gKCR7dy5wb3NpdGlvbj8uZnJvbX0tJHt3LnBvc2l0aW9uPy50b30pYClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG5cclxuaW50ZXJmYWNlIE5vZGVJdGVtIHtcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgdGV4dDogc3RyaW5nO1xyXG4gIGNoaWxkcmVuOiBOb2RlSXRlbVtdO1xyXG4gIHBhcmVudDogTm9kZUl0ZW0gfCBudWxsO1xyXG59XHJcbiJdfQ==