@wemake4u/form-player-se 1.0.39 → 1.0.40

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 (63) hide show
  1. package/esm2022/lib/builtIn/builtIn.mjs +24 -0
  2. package/esm2022/lib/builtIn/console.json +253 -0
  3. package/esm2022/lib/builtIn/dialog.json +109 -0
  4. package/esm2022/lib/builtIn/feel.json +26 -0
  5. package/esm2022/lib/builtIn/form.json +172 -0
  6. package/esm2022/lib/builtIn/formGroup.json +218 -0
  7. package/esm2022/lib/builtIn/formatter.json +112 -0
  8. package/esm2022/lib/builtIn/function.json +53 -0
  9. package/esm2022/lib/builtIn/register.json +14 -0
  10. package/esm2022/lib/components/setFilter/setFilter.component.mjs +18 -3
  11. package/esm2022/lib/directives/accordionpanel.directive.mjs +10 -5
  12. package/esm2022/lib/directives/collapse.directive.mjs +22 -12
  13. package/esm2022/lib/directives/collapsepatch.directive.mjs +2 -1
  14. package/esm2022/lib/directives/datetime.directive.mjs +18 -21
  15. package/esm2022/lib/directives/dropdown.directive.mjs +31 -16
  16. package/esm2022/lib/directives/grid.directive.mjs +10 -8
  17. package/esm2022/lib/directives/readonly.directive.mjs +10 -9
  18. package/esm2022/lib/directives/register.directive.mjs +8 -10
  19. package/esm2022/lib/directives/required.directive.mjs +57 -0
  20. package/esm2022/lib/directives/tabcontrol.directive.mjs +10 -9
  21. package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +20 -4
  22. package/esm2022/lib/dynamic-form/dynamic-form.component.mjs +43 -21
  23. package/esm2022/lib/dynamic-host/dynamic-host.component.mjs +32 -10
  24. package/esm2022/lib/services/event.service.mjs +17 -6
  25. package/esm2022/lib/services/grid.service.mjs +4 -1
  26. package/esm2022/lib/services/listener.service.mjs +23 -0
  27. package/esm2022/lib/services/programmability.service.mjs +54 -38
  28. package/esm2022/lib/services/status.service.mjs +10 -5
  29. package/esm2022/lib/services/subscribe.service.mjs +54 -0
  30. package/esm2022/lib/services/validation.service.mjs +11 -2
  31. package/esm2022/lib/utils/deepEqual.mjs +46 -0
  32. package/esm2022/lib/utils/observable.mjs +7 -0
  33. package/esm2022/lib/utils/proxy.mjs +28 -1
  34. package/esm2022/lib/utils/resolveRefs.mjs +67 -0
  35. package/esm2022/public-api.mjs +5 -1
  36. package/fesm2022/wemake4u-form-player-se.mjs +1573 -175
  37. package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
  38. package/lib/builtIn/builtIn.d.ts +32 -0
  39. package/lib/components/setFilter/setFilter.component.d.ts +1 -0
  40. package/lib/directives/accordionpanel.directive.d.ts +4 -2
  41. package/lib/directives/collapse.directive.d.ts +5 -3
  42. package/lib/directives/datetime.directive.d.ts +7 -8
  43. package/lib/directives/dropdown.directive.d.ts +6 -3
  44. package/lib/directives/grid.directive.d.ts +4 -3
  45. package/lib/directives/readonly.directive.d.ts +3 -4
  46. package/lib/directives/register.directive.d.ts +3 -3
  47. package/lib/directives/required.directive.d.ts +17 -0
  48. package/lib/directives/tabcontrol.directive.d.ts +5 -6
  49. package/lib/dynamic-fields/dynamic-fields.component.d.ts +1 -0
  50. package/lib/dynamic-form/dynamic-form.component.d.ts +4 -1
  51. package/lib/dynamic-host/dynamic-host.component.d.ts +6 -2
  52. package/lib/services/event.service.d.ts +8 -2
  53. package/lib/services/listener.service.d.ts +11 -0
  54. package/lib/services/programmability.service.d.ts +8 -9
  55. package/lib/services/status.service.d.ts +5 -1
  56. package/lib/services/subscribe.service.d.ts +14 -0
  57. package/lib/services/validation.service.d.ts +5 -2
  58. package/lib/utils/deepEqual.d.ts +1 -0
  59. package/lib/utils/observable.d.ts +2 -0
  60. package/lib/utils/proxy.d.ts +2 -0
  61. package/lib/utils/resolveRefs.d.ts +12 -0
  62. package/package.json +1 -1
  63. package/public-api.d.ts +4 -0
@@ -1,18 +1,21 @@
1
- import { Component, Input, ViewChild, ViewContainerRef } from '@angular/core';
1
+ import { Component, Input, ViewChild, ViewContainerRef, EventEmitter } from '@angular/core';
2
2
  import { isObservable, distinctUntilChanged, map } from 'rxjs';
3
3
  import { take } from 'rxjs/operators';
4
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "../services/global.service";
6
7
  export class DynamicHostComponent {
7
8
  injector;
8
9
  globalService;
10
+ destroyRef;
9
11
  component;
10
12
  properties = null;
11
13
  formGroup;
12
14
  container;
13
- constructor(injector, globalService) {
15
+ constructor(injector, globalService, destroyRef) {
14
16
  this.injector = injector;
15
17
  this.globalService = globalService;
18
+ this.destroyRef = destroyRef;
16
19
  }
17
20
  ngOnDestroy() {
18
21
  if (this.statusSub) {
@@ -42,6 +45,7 @@ export class DynamicHostComponent {
42
45
  //#region Private Members
43
46
  componentRef = null;
44
47
  statusSub = null;
48
+ subscriptions = new Map();
45
49
  isBindable() {
46
50
  if (!this.componentRef)
47
51
  return false;
@@ -92,13 +96,24 @@ export class DynamicHostComponent {
92
96
  }
93
97
  }
94
98
  assignValue(key, value) {
95
- if (isObservable(value)) {
96
- value.pipe(take(1)).subscribe(v => {
97
- this.componentRef?.setInput?.(key, v);
98
- });
99
+ if (this.isFunction(value) && this.isEmitter(this.componentRef, key)) {
100
+ const emitter = this.componentRef.instance[key];
101
+ const previous = this.subscriptions.get(key);
102
+ previous?.unsubscribe();
103
+ const sub = emitter
104
+ .pipe(takeUntilDestroyed(this.destroyRef))
105
+ .subscribe(value);
106
+ this.subscriptions.set(key, sub);
99
107
  }
100
108
  else {
101
- this.componentRef?.setInput?.(key, value);
109
+ if (isObservable(value)) {
110
+ value.pipe(take(1)).subscribe(v => {
111
+ this.componentRef?.setInput?.(key, v);
112
+ });
113
+ }
114
+ else {
115
+ this.componentRef?.setInput?.(key, value);
116
+ }
102
117
  }
103
118
  }
104
119
  isControlValueAccessor(obj) {
@@ -113,13 +128,20 @@ export class DynamicHostComponent {
113
128
  validProperties(value) {
114
129
  return typeof value === 'object' && value !== null && !Array.isArray(value);
115
130
  }
116
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DynamicHostComponent, deps: [{ token: i0.Injector }, { token: i1.GlobalService }], target: i0.ɵɵFactoryTarget.Component });
131
+ isEmitter(componentRef, key) {
132
+ return !!componentRef &&
133
+ componentRef.instance?.[key] instanceof EventEmitter;
134
+ }
135
+ isFunction(value) {
136
+ return typeof value === 'function';
137
+ }
138
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DynamicHostComponent, deps: [{ token: i0.Injector }, { token: i1.GlobalService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
117
139
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DynamicHostComponent, isStandalone: true, selector: "app-dynamic-host", inputs: { component: ["register", "component"], properties: "properties", formGroup: "formGroup" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container #container></ng-container>\r\n", styles: [""] });
118
140
  }
119
141
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DynamicHostComponent, decorators: [{
120
142
  type: Component,
121
143
  args: [{ selector: 'app-dynamic-host', standalone: true, template: "<ng-container #container></ng-container>\r\n" }]
122
- }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.GlobalService }], propDecorators: { component: [{
144
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.GlobalService }, { type: i0.DestroyRef }], propDecorators: { component: [{
123
145
  type: Input,
124
146
  args: ["register"]
125
147
  }], properties: [{
@@ -130,4 +152,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
130
152
  type: ViewChild,
131
153
  args: ['container', { read: ViewContainerRef, static: true }]
132
154
  }] } });
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1ob3N0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL2R5bmFtaWMtaG9zdC9keW5hbWljLWhvc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1ob3N0L2R5bmFtaWMtaG9zdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLEtBQUssRUFBaUIsU0FBUyxFQUFFLGdCQUFnQixFQUc3RCxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsWUFBWSxFQUFnQixvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0UsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFVdEMsTUFBTSxPQUFPLG9CQUFvQjtJQU1YO0lBQ1Y7SUFOUyxTQUFTLENBQU87SUFDMUIsVUFBVSxHQUErQixJQUFJLENBQUM7SUFDOUMsU0FBUyxDQUFhO0lBQ21DLFNBQVMsQ0FBb0I7SUFFL0YsWUFBb0IsUUFBa0IsRUFDNUIsYUFBNEI7UUFEbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUN0QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsTUFBTSxhQUFhLEdB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QyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5RSxDQUFDO3dHQXJJVSxvQkFBb0I7NEZBQXBCLG9CQUFvQixtUUFJQyxnQkFBZ0IsZ0VDdEJsRCw4Q0FDQTs7NEZEaUJhLG9CQUFvQjtrQkFQaEMsU0FBUzsrQkFDRSxrQkFBa0IsY0FJaEIsSUFBSTt5R0FHRyxTQUFTO3NCQUEzQixLQUFLO3VCQUFDLFVBQVU7Z0JBQ1IsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUM0RCxTQUFTO3NCQUExRSxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsIElucHV0LCBBZnRlclZpZXdJbml0LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIEluamVjdG9yXHJcbiAgLCBUeXBlLCBDb21wb25lbnRSZWYsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3lcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1keW5hbWljLWhvc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLWhvc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vZHluYW1pYy1ob3N0LmNvbXBvbmVudC5jc3MnXSxcclxuICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljSG9zdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBASW5wdXQoXCJyZWdpc3RlclwiKSBjb21wb25lbnQhOiBhbnk7XHJcbiAgQElucHV0KCkgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcclxuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogdHJ1ZSB9KSBjb250YWluZXIhOiBWaWV3Q29udGFpbmVyUmVmO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByaXZhdGUgZ2xvYmFsU2VydmljZTogR2xvYmFsU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdGF0dXNTdWIpIHtcclxuICAgICAgdGhpcy5zdGF0dXNTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9ICAgIFxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1tcInByb3BlcnRpZXNcIl0pIHtcclxuICAgICAgdGhpcy5zZXRQcm9wZXJ0aWVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb21wb25lbnRUeXBlID0gdGhpcy5yZXNvbHZlQ29tcG9uZW50VHlwZSh0aGlzLmNvbXBvbmVudC5jb21wb25lbnQpO1xyXG4gICAgaWYgKGNvbXBvbmVudFR5cGUpIHtcclxuICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLmNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50VHlwZSwge1xyXG4gICAgICAgIGluamVjdG9yOiB0aGlzLmluamVjdG9yLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzQmluZGFibGUoKSkge1xyXG4gICAgICAgIHRoaXMuc2V0QmluZGluZygpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLnNldFByb3BlcnRpZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbXBvbmVudFJlZigpOiBDb21wb25lbnRSZWY8YW55PiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50UmVmO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIFByaXZhdGUgTWVtYmVyc1xyXG5cclxuICBwcml2YXRlIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0dXNTdWI6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIGlzQmluZGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50UmVmKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnQuaXNJbnB1dFxyXG4gICAgICAmJiB0aGlzLmNvbXBvbmVudC5rZXlcclxuICAgICAgJiYgdGhpcy5pc0NvbnRyb2xWYWx1ZUFjY2Vzc29yKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0QmluZGluZygpIHtcclxuICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmNvbXBvbmVudC5rZXk7XHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0NvbnRyb2xWYWx1ZUFjY2Vzc29yKGluc3RhbmNlKSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBmb3JtQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmdldChrZXkpO1xyXG5cclxuICAgIGlmICghZm9ybUNvbnRyb2wpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGluc3RhbmNlLndyaXRlVmFsdWUoZm9ybUNvbnRyb2wudmFsdWUpO1xyXG5cclxuICAgIGluc3RhbmNlLnJlZ2lzdGVyT25DaGFuZ2UoKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaW5zdGFuY2UucmVnaXN0ZXJPblRvdWNoZWQoKCkgPT4ge1xyXG4gICAgICBmb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzZXREaXNhYmxlZFN0YXRlID0gaW5zdGFuY2Uuc2V0RGlzYWJsZWRTdGF0ZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIHNldERpc2FibGVkU3RhdGUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY29uc3QgaW52b2tlID0gc2V0RGlzYWJsZWRTdGF0ZS5iaW5kKGluc3RhbmNlKTtcclxuICAgICAgdGhpcy5zdGF0dXNTdWIgPSBmb3JtQ29udHJvbC5zdGF0dXNDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBtYXAoKCkgPT4gZm9ybUNvbnRyb2wuZGlzYWJsZWQpLFxyXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKGlzRGlzYWJsZWQgPT4ge1xyXG4gICAgICAgICAgaW52b2tlKGlzRGlzYWJsZWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICBpbnZva2UoZm9ybUNvbnRyb2wuZGlzYWJsZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRQcm9wZXJ0aWVzKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudFJlZikgcmV0dXJuO1xyXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMucHJvcGVydGllcyA/PyB7fTtcclxuICAgIGlmICh0aGlzLnZhbGlkUHJvcGVydGllcyhwcm9wZXJ0aWVzKSkge1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gcHJvcGVydGllc1trZXldO1xyXG4gICAgICAgIGlmIChrZXkgaW4gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UpIHtcclxuICAgICAgICAgIHRoaXMuYXNzaWduVmFsdWUoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzc2lnblZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KVxyXG4gIHtcclxuICAgIGlmIChpc09ic2VydmFibGUodmFsdWUpKSB7XHJcbiAgICAgIHZhbHVlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmPy5zZXRJbnB1dD8uKGtleSwgdik7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb21wb25lbnRSZWY/LnNldElucHV0Py4oa2V5LCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzQ29udHJvbFZhbHVlQWNjZXNzb3Iob2JqOiBhbnkpOiBvYmogaXMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgb2JqICYmXHJcbiAgICAgIHR5cGVvZiBvYmoud3JpdGVWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICB0eXBlb2Ygb2JqLnJlZ2lzdGVyT25DaGFuZ2UgPT09ICdmdW5jdGlvbicgJiZcclxuICAgICAgdHlwZW9mIG9iai5yZWdpc3Rlck9uVG91Y2hlZCA9PT0gJ2Z1bmN0aW9uJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzb2x2ZUNvbXBvbmVudFR5cGUodHlwZTogc3RyaW5nKTogVHlwZTxhbnk+IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5nbG9iYWxTZXJ2aWNlLmdldENvbXBvbmVudCh0eXBlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRQcm9wZXJ0aWVzKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgYW55PiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG4iLCI8bmctY29udGFpbmVyICNjb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbiJdfQ==
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1ob3N0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL2R5bmFtaWMtaG9zdC9keW5hbWljLWhvc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1ob3N0L2R5bmFtaWMtaG9zdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLEtBQUssRUFBaUIsU0FBUyxFQUFFLGdCQUFnQixFQUc1RCxZQUFZLEVBRWIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFlBQVksRUFBZ0Isb0JBQW9CLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBVWhFLE1BQU0sT0FBTyxvQkFBb0I7SUFNWDtJQUNWO0lBQ0E7SUFQUyxTQUFTLENBQU87SUFDMUIsVUFBVSxHQUErQixJQUFJLENBQUM7SUFDOUMsU0FBUyxDQUFhO0lBQ21DLFNBQVMsQ0FBb0I7SUFFL0YsWUFBb0IsUUFBa0IsRUFDNUIsYUFBNEIsRUFDNUIsVUFBc0I7UUFGWixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQzVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGVBQVUsR0FBVixVQUFVLENBQVk7SUFDaEMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFlB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LENBQUM7d0dBL0pVLG9CQUFvQjs0RkFBcEIsb0JBQW9CLG1RQUlDLGdCQUFnQixnRUN6QmxELDhDQUNBOzs0RkRvQmEsb0JBQW9CO2tCQVBoQyxTQUFTOytCQUNFLGtCQUFrQixjQUloQixJQUFJO2tJQUdHLFNBQVM7c0JBQTNCLEtBQUs7dUJBQUMsVUFBVTtnQkFDUixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQzRELFNBQVM7c0JBQTFFLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCwgSW5wdXQsIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgSW5qZWN0b3JcclxuICAsIFR5cGUsIENvbXBvbmVudFJlZiwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgRGVzdHJveVJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBpc09ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZHluYW1pYy1ob3N0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy1ob3N0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuL2R5bmFtaWMtaG9zdC5jb21wb25lbnQuY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHluYW1pY0hvc3RDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KFwicmVnaXN0ZXJcIikgY29tcG9uZW50ITogYW55O1xyXG4gIEBJbnB1dCgpIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsID0gbnVsbDtcclxuICBASW5wdXQoKSBmb3JtR3JvdXAhOiBGb3JtR3JvdXA7XHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSkgY29udGFpbmVyITogVmlld0NvbnRhaW5lclJlZjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIGdsb2JhbFNlcnZpY2U6IEdsb2JhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWYpIHtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc3RhdHVzU3ViKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfSAgICBcclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbXCJwcm9wZXJ0aWVzXCJdKSB7XHJcbiAgICAgIHRoaXMuc2V0UHJvcGVydGllcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29tcG9uZW50VHlwZSA9IHRoaXMucmVzb2x2ZUNvbXBvbmVudFR5cGUodGhpcy5jb21wb25lbnQuY29tcG9uZW50KTtcclxuICAgIGlmIChjb21wb25lbnRUeXBlKSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5jb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudFR5cGUsIHtcclxuICAgICAgICBpbmplY3RvcjogdGhpcy5pbmplY3RvcixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0JpbmRhYmxlKCkpIHtcclxuICAgICAgICB0aGlzLnNldEJpbmRpbmcoKTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgdGhpcy5zZXRQcm9wZXJ0aWVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb21wb25lbnRSZWYoKTogQ29tcG9uZW50UmVmPGFueT4gfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFJlZjtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBQcml2YXRlIE1lbWJlcnNcclxuXHJcbiAgcHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgc3RhdHVzU3ViOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zID0gbmV3IE1hcDxzdHJpbmcsIFN1YnNjcmlwdGlvbj4oKTtcclxuXHJcbiAgcHJpdmF0ZSBpc0JpbmRhYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudFJlZikgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50LmlzSW5wdXRcclxuICAgICAgJiYgdGhpcy5jb21wb25lbnQua2V5XHJcbiAgICAgICYmIHRoaXMuaXNDb250cm9sVmFsdWVBY2Nlc3Nvcih0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEJpbmRpbmcoKSB7XHJcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50UmVmKSByZXR1cm47XHJcblxyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5jb21wb25lbnQua2V5O1xyXG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNDb250cm9sVmFsdWVBY2Nlc3NvcihpbnN0YW5jZSkpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5nZXQoa2V5KTtcclxuXHJcbiAgICBpZiAoIWZvcm1Db250cm9sKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpbnN0YW5jZS53cml0ZVZhbHVlKGZvcm1Db250cm9sLnZhbHVlKTtcclxuXHJcbiAgICBpbnN0YW5jZS5yZWdpc3Rlck9uQ2hhbmdlKCh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgIGZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGluc3RhbmNlLnJlZ2lzdGVyT25Ub3VjaGVkKCgpID0+IHtcclxuICAgICAgZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc2V0RGlzYWJsZWRTdGF0ZSA9IGluc3RhbmNlLnNldERpc2FibGVkU3RhdGU7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBzZXREaXNhYmxlZFN0YXRlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGludm9rZSA9IHNldERpc2FibGVkU3RhdGUuYmluZChpbnN0YW5jZSk7XHJcbiAgICAgIHRoaXMuc3RhdHVzU3ViID0gZm9ybUNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgbWFwKCgpID0+IGZvcm1Db250cm9sLmRpc2FibGVkKSxcclxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZShpc0Rpc2FibGVkID0+IHtcclxuICAgICAgICAgIGludm9rZShpc0Rpc2FibGVkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgaW52b2tlKGZvcm1Db250cm9sLmRpc2FibGVkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UHJvcGVydGllcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHJldHVybjtcclxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLnByb3BlcnRpZXMgPz8ge307XHJcbiAgICBpZiAodGhpcy52YWxpZFByb3BlcnRpZXMocHJvcGVydGllcykpIHtcclxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocHJvcGVydGllcykpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHByb3BlcnRpZXNba2V5XTtcclxuICAgICAgICBpZiAoa2V5IGluIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlKSB7XHJcbiAgICAgICAgICB0aGlzLmFzc2lnblZhbHVlKGtleSwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3NpZ25WYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSlcclxuICB7XHJcbiAgICBpZiAodGhpcy5pc0Z1bmN0aW9uKHZhbHVlKSAmJiB0aGlzLmlzRW1pdHRlcih0aGlzLmNvbXBvbmVudFJlZiwga2V5KSkge1xyXG4gICAgICBjb25zdCBlbWl0dGVyID0gKHRoaXMuY29tcG9uZW50UmVmIS5pbnN0YW5jZSBhcyBhbnkpW2tleV07XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5zdWJzY3JpcHRpb25zLmdldChrZXkpO1xyXG4gICAgICBwcmV2aW91cz8udW5zdWJzY3JpYmUoKTtcclxuICAgICAgY29uc3Qgc3ViID0gZW1pdHRlclxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUodmFsdWUpO1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuc2V0KGtleSwgc3ViKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoaXNPYnNlcnZhYmxlKHZhbHVlKSkge1xyXG4gICAgICAgIHZhbHVlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb21wb25lbnRSZWY/LnNldElucHV0Py4oa2V5LCB2KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZj8uc2V0SW5wdXQ/LihrZXksIHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfSAgICBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNDb250cm9sVmFsdWVBY2Nlc3NvcihvYmo6IGFueSk6IG9iaiBpcyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBvYmogJiZcclxuICAgICAgdHlwZW9mIG9iai53cml0ZVZhbHVlID09PSAnZnVuY3Rpb24nICYmXHJcbiAgICAgIHR5cGVvZiBvYmoucmVnaXN0ZXJPbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICB0eXBlb2Ygb2JqLnJlZ2lzdGVyT25Ub3VjaGVkID09PSAnZnVuY3Rpb24nXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNvbHZlQ29tcG9uZW50VHlwZSh0eXBlOiBzdHJpbmcpOiBUeXBlPGFueT4gfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmdsb2JhbFNlcnZpY2UuZ2V0Q29tcG9uZW50KHR5cGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZFByb3BlcnRpZXModmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNFbWl0dGVyKFxyXG4gICAgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PiB8IG51bGwgfCB1bmRlZmluZWQsXHJcbiAgICBrZXk6IHN0cmluZ1xyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhY29tcG9uZW50UmVmICYmXHJcbiAgICAgIChjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgYW55KT8uW2tleV0gaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRnVuY3Rpb24odmFsdWU6IGFueSk6IHZhbHVlIGlzIEZ1bmN0aW9uIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG4iLCI8bmctY29udGFpbmVyICNjb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbiJdfQ==
@@ -1,12 +1,23 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  import * as i1 from "../services/programmability.service";
4
+ import * as i2 from "../services/subscribe.service";
4
5
  export class EventService {
5
6
  programmability;
6
- constructor(programmability) {
7
+ subscribeService;
8
+ destroyRef;
9
+ constructor(programmability, subscribeService, destroyRef) {
7
10
  this.programmability = programmability;
11
+ this.subscribeService = subscribeService;
12
+ this.destroyRef = destroyRef;
13
+ }
14
+ _suppress = false;
15
+ set suppress(value) {
16
+ this._suppress = value;
17
+ }
18
+ get suppress() {
19
+ return this._suppress;
8
20
  }
9
- suppress = false;
10
21
  createCollection() {
11
22
  return new Map();
12
23
  }
@@ -27,7 +38,7 @@ export class EventService {
27
38
  processHandler(handler, formGroup, control, observable$, initial) {
28
39
  if (!this.programmability.isExpression(handler))
29
40
  return;
30
- this.programmability.subscribeChanges(observable$, control, initial, (oldValue, newValue) => {
41
+ this.subscribeService.subscribeChanges(observable$, control, initial, this.destroyRef, (oldValue, newValue) => {
31
42
  if (this.suppress)
32
43
  return;
33
44
  this.programmability.evaluate(formGroup, handler, {
@@ -42,10 +53,10 @@ export class EventService {
42
53
  });
43
54
  });
44
55
  }
45
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EventService, deps: [{ token: i1.ProgrammabilityService }], target: i0.ɵɵFactoryTarget.Injectable });
56
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EventService, deps: [{ token: i1.ProgrammabilityService }, { token: i2.SubscribeService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Injectable });
46
57
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EventService });
47
58
  }
48
59
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EventService, decorators: [{
49
60
  type: Injectable
50
- }], ctorParameters: () => [{ type: i1.ProgrammabilityService }] });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL3NlcnZpY2VzL2V2ZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBTTNDLE1BQU0sT0FBTyxZQUFZO0lBR2I7SUFEVixZQUNVLGVBQXVDO1FBQXZDLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtJQUNqRCxDQUFDO0lBRUQsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUUxQixnQkFBZ0I7UUFDZCxPQUFPLElBQUksR0FBRyxFQUFpQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxlQUFlLENBQUMsVUFBMkIsRUFBRSxPQUF3QixFQUFFLFNBQW9CLEVBQUUsU0FBYztRQUN6RyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxlQUFlLENBQUMsVUFBMkI7UUFDekMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2xELE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLFNBQVMsQ0FBQztZQUNoRCxNQUFNLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxTQUFTLENBQUM7WUFDbkQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUNoQyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7Z0JBQUUsT0FBTztZQUNsRCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzRyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxjQUFjLENBQUksT0FBZSxFQUNyQyxTQUFvQixFQUNwQixPQUF3QixFQUN4QixXQUEwQixFQUMxQixPQUFVO1FBRVosSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztZQUM3QyxPQUFPO1FBRVQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFDL0QsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDdkIsSUFBSSxJQUFJLENBQUMsUUFBUTtnQkFBRSxPQUFPO1lBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUU7Z0JBQ2hELFNBQVMsRUFBRSxLQUFLO2dCQUNoQixhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDcEIsT0FBTyxFQUFFO3dCQUNQLE9BQU8sRUFBRSxPQUFPO3dCQUNoQixRQUFRLEVBQUUsUUFBUTt3QkFDbEIsUUFBUSxFQUFFLFFBQVE7cUJBQ25CO2lCQUNGLENBQUM7YUFDSCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7d0dBbkRVLFlBQVk7NEdBQVosWUFBWTs7NEZBQVosWUFBWTtrQkFEeEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUHJvZ3JhbW1hYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEV2ZW50U2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwcm9ncmFtbWFiaWxpdHk6IFByb2dyYW1tYWJpbGl0eVNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIHN1cHByZXNzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNyZWF0ZUNvbGxlY3Rpb24oKTogRXZlbnRDb2xsZWN0aW9uIHtcclxuICAgIHJldHVybiBuZXcgTWFwPEFic3RyYWN0Q29udHJvbCwgRXZlbnRDb250ZXh0PigpO1xyXG4gIH1cclxuXHJcbiAgYWRkVG9Db2xsZWN0aW9uKGNvbGxlY3Rpb246IEV2ZW50Q29sbGVjdGlvbiwgY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCwgY29tcG9uZW50OiBhbnkpIHtcclxuICAgIGNvbGxlY3Rpb24uc2V0KGNvbnRyb2wsIHsgY29tcG9uZW50LCBmb3JtR3JvdXAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXR1cENvbGxlY3Rpb24oY29sbGVjdGlvbjogRXZlbnRDb2xsZWN0aW9uKSB7XHJcbiAgICBjb2xsZWN0aW9uLmZvckVhY2goKGNvbXBvbmVudFZhbGlkYXRpb24sIGNvbnRyb2wpID0+IHtcclxuICAgICAgY29uc3QgY29tcG9uZW50ID0gY29tcG9uZW50VmFsaWRhdGlvbi5jb21wb25lbnQ7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRHcm91cCA9IGNvbXBvbmVudFZhbGlkYXRpb24uZm9ybUdyb3VwO1xyXG4gICAgICBjb25zdCBldmVudHMgPSBjb21wb25lbnQuZXZlbnRzO1xyXG4gICAgICBpZiAoIWV2ZW50cyB8fCB0eXBlb2YgZXZlbnRzICE9PSAnb2JqZWN0JykgcmV0dXJuO1xyXG4gICAgICB0aGlzLnByb2Nlc3NIYW5kbGVyKGV2ZW50cy5vbkNoYW5nZSwgY3VycmVudEdyb3VwLCBjb250cm9sLCBjb250cm9sLnZhbHVlQ2hhbmdlcywgY29udHJvbC52YWx1ZSk7XHJcbiAgICAgIHRoaXMucHJvY2Vzc0hhbmRsZXIoZXZlbnRzLm9uU3RhdHVzQ2hhbmdlLCBjdXJyZW50R3JvdXAsIGNvbnRyb2wsIGNvbnRyb2wuc3RhdHVzQ2hhbmdlcywgY29udHJvbC5zdGF0dXMpOyAgICAgIFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb2Nlc3NIYW5kbGVyPFQ+KGhhbmRsZXI6IHN0cmluZ1xyXG4gICAgLCBmb3JtR3JvdXA6IEZvcm1Hcm91cFxyXG4gICAgLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2xcclxuICAgICwgb2JzZXJ2YWJsZSQ6IE9ic2VydmFibGU8VD5cclxuICAgICwgaW5pdGlhbDogVClcclxuICB7XHJcbiAgICBpZiAoIXRoaXMucHJvZ3JhbW1hYmlsaXR5LmlzRXhwcmVzc2lvbihoYW5kbGVyKSlcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMucHJvZ3JhbW1hYmlsaXR5LnN1YnNjcmliZUNoYW5nZXMob2JzZXJ2YWJsZSQsIGNvbnRyb2wsIGluaXRpYWxcclxuICAgICAgLCAob2xkVmFsdWUsIG5ld1ZhbHVlKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VwcHJlc3MpIHJldHVybjtcclxuICAgICAgICB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZShmb3JtR3JvdXAsIGhhbmRsZXIsIHtcclxuICAgICAgICAgIGNhY2hlYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBleHRlbmRDb250ZXh0OiAoKSA9PiAoe1xyXG4gICAgICAgICAgICBcImV2ZW50XCI6IHtcclxuICAgICAgICAgICAgICBjb250cm9sOiBjb250cm9sLFxyXG4gICAgICAgICAgICAgIG9sZFZhbHVlOiBvbGRWYWx1ZSxcclxuICAgICAgICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDb250ZXh0IHtcclxuICBjb21wb25lbnQ6IGFueTtcclxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRXZlbnRDb2xsZWN0aW9uID0gTWFwPEFic3RyYWN0Q29udHJvbCwgRXZlbnRDb250ZXh0PjtcclxuIl19
61
+ }], ctorParameters: () => [{ type: i1.ProgrammabilityService }, { type: i2.SubscribeService }, { type: i0.DestroyRef }] });
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL3NlcnZpY2VzL2V2ZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQU92RCxNQUFNLE9BQU8sWUFBWTtJQUdiO0lBQ0U7SUFDQTtJQUhaLFlBQ1UsZUFBdUMsRUFDckMsZ0JBQWtDLEVBQ2xDLFVBQXNCO1FBRnhCLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtRQUNyQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGVBQVUsR0FBVixVQUFVLENBQVk7SUFDbEMsQ0FBQztJQUVPLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFFbkMsSUFBSSxRQUFRLENBQUMsS0FBYztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksR0FBRyxFQUFpQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxlQUFlLENBQUMsVUFBMkIsRUFBRSxPQUF3QixFQUFFLFNBQW9CLEVBQUUsU0FBYztRQUN6RyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxlQUFlLENBQUMsVUFBMkI7UUFDekMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2xELE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLFNBQVMsQ0FBQztZQUNoRCxNQUFNLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxTQUFTLENBQUM7WUFDbkQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUNoQyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7Z0JBQUUsT0FBTztZQUNsRCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzRyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxjQUFjLENBQUksT0FBZSxFQUNyQyxTQUFvQixFQUNwQixPQUF3QixFQUN4QixXQUEwQixFQUMxQixPQUFVO1FBRVosSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztZQUM3QyxPQUFPO1FBRVQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQ2pGLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTztZQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFO2dCQUNoRCxTQUFTLEVBQUUsS0FBSztnQkFDaEIsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQ3BCLE9BQU8sRUFBRTt3QkFDUCxPQUFPLEVBQUUsT0FBTzt3QkFDaEIsUUFBUSxFQUFFLFFBQVE7d0JBQ2xCLFFBQVEsRUFBRSxRQUFRO3FCQUNuQjtpQkFDRixDQUFDO2FBQ0gsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO3dHQTdEVSxZQUFZOzRHQUFaLFlBQVk7OzRGQUFaLFlBQVk7a0JBRHhCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95UmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFByb2dyYW1tYWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcm9ncmFtbWFiaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YnNjcmliZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdWJzY3JpYmUuc2VydmljZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBFdmVudFNlcnZpY2Uge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcHJvZ3JhbW1hYmlsaXR5OiBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgc3Vic2NyaWJlU2VydmljZTogU3Vic2NyaWJlU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWYpIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N1cHByZXNzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNldCBzdXBwcmVzcyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc3VwcHJlc3MgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBzdXBwcmVzcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zdXBwcmVzcztcclxuICB9XHJcblxyXG4gIGNyZWF0ZUNvbGxlY3Rpb24oKTogRXZlbnRDb2xsZWN0aW9uIHtcclxuICAgIHJldHVybiBuZXcgTWFwPEFic3RyYWN0Q29udHJvbCwgRXZlbnRDb250ZXh0PigpO1xyXG4gIH1cclxuXHJcbiAgYWRkVG9Db2xsZWN0aW9uKGNvbGxlY3Rpb246IEV2ZW50Q29sbGVjdGlvbiwgY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCwgY29tcG9uZW50OiBhbnkpIHtcclxuICAgIGNvbGxlY3Rpb24uc2V0KGNvbnRyb2wsIHsgY29tcG9uZW50LCBmb3JtR3JvdXAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXR1cENvbGxlY3Rpb24oY29sbGVjdGlvbjogRXZlbnRDb2xsZWN0aW9uKSB7XHJcbiAgICBjb2xsZWN0aW9uLmZvckVhY2goKGNvbXBvbmVudFZhbGlkYXRpb24sIGNvbnRyb2wpID0+IHtcclxuICAgICAgY29uc3QgY29tcG9uZW50ID0gY29tcG9uZW50VmFsaWRhdGlvbi5jb21wb25lbnQ7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRHcm91cCA9IGNvbXBvbmVudFZhbGlkYXRpb24uZm9ybUdyb3VwO1xyXG4gICAgICBjb25zdCBldmVudHMgPSBjb21wb25lbnQuZXZlbnRzO1xyXG4gICAgICBpZiAoIWV2ZW50cyB8fCB0eXBlb2YgZXZlbnRzICE9PSAnb2JqZWN0JykgcmV0dXJuO1xyXG4gICAgICB0aGlzLnByb2Nlc3NIYW5kbGVyKGV2ZW50cy5vbkNoYW5nZSwgY3VycmVudEdyb3VwLCBjb250cm9sLCBjb250cm9sLnZhbHVlQ2hhbmdlcywgY29udHJvbC52YWx1ZSk7XHJcbiAgICAgIHRoaXMucHJvY2Vzc0hhbmRsZXIoZXZlbnRzLm9uU3RhdHVzQ2hhbmdlLCBjdXJyZW50R3JvdXAsIGNvbnRyb2wsIGNvbnRyb2wuc3RhdHVzQ2hhbmdlcywgY29udHJvbC5zdGF0dXMpOyAgICAgIFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb2Nlc3NIYW5kbGVyPFQ+KGhhbmRsZXI6IHN0cmluZ1xyXG4gICAgLCBmb3JtR3JvdXA6IEZvcm1Hcm91cFxyXG4gICAgLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2xcclxuICAgICwgb2JzZXJ2YWJsZSQ6IE9ic2VydmFibGU8VD5cclxuICAgICwgaW5pdGlhbDogVClcclxuICB7XHJcbiAgICBpZiAoIXRoaXMucHJvZ3JhbW1hYmlsaXR5LmlzRXhwcmVzc2lvbihoYW5kbGVyKSlcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaWJlU2VydmljZS5zdWJzY3JpYmVDaGFuZ2VzKG9ic2VydmFibGUkLCBjb250cm9sLCBpbml0aWFsLCB0aGlzLmRlc3Ryb3lSZWZcclxuICAgICAgLCAob2xkVmFsdWUsIG5ld1ZhbHVlKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VwcHJlc3MpIHJldHVybjtcclxuICAgICAgICB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZShmb3JtR3JvdXAsIGhhbmRsZXIsIHtcclxuICAgICAgICAgIGNhY2hlYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBleHRlbmRDb250ZXh0OiAoKSA9PiAoe1xyXG4gICAgICAgICAgICBcImV2ZW50XCI6IHtcclxuICAgICAgICAgICAgICBjb250cm9sOiBjb250cm9sLFxyXG4gICAgICAgICAgICAgIG9sZFZhbHVlOiBvbGRWYWx1ZSxcclxuICAgICAgICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDb250ZXh0IHtcclxuICBjb21wb25lbnQ6IGFueTtcclxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRXZlbnRDb2xsZWN0aW9uID0gTWFwPEFic3RyYWN0Q29udHJvbCwgRXZlbnRDb250ZXh0PjtcclxuIl19
@@ -60,6 +60,7 @@ export class GridService {
60
60
  const pageSize = this.getPageSize(component);
61
61
  const texts = this.getTexts();
62
62
  const theme = this.getTheme();
63
+ const autoHeight = (component.autoHeight === true);
63
64
  const options = {
64
65
  defaultColDef: {
65
66
  floatingFilter: (component.floatingFilter === true),
@@ -79,6 +80,7 @@ export class GridService {
79
80
  enableCellTextSelection: true,
80
81
  theme: theme,
81
82
  getRowId: rowId,
83
+ domLayout: autoHeight ? "autoHeight" : undefined,
82
84
  onGridSizeChanged: (params) => {
83
85
  this.resizeGrid(component, params.api);
84
86
  },
@@ -273,6 +275,7 @@ export class GridService {
273
275
  }
274
276
  setCellDataType(column, colDef) {
275
277
  if (column.dataType === "component"
278
+ || column.dataType === "formatted"
276
279
  || column.dataType === "auto")
277
280
  return;
278
281
  if (typeof column.dataType === "string"
@@ -811,4 +814,4 @@ export class GridService {
811
814
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GridService, decorators: [{
812
815
  type: Injectable
813
816
  }], ctorParameters: () => [{ type: i1.FormatterService }, { type: i2.LanguageService }, { type: i3.ProgrammabilityService }, { type: i4.MarkdownService }, { type: i5.WeakService }] });
814
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvZ3JpZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUNHLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLHNCQUFzQixFQUN4RSxZQUFZLEVBQUUsZUFBZSxFQUFvQixZQUFZLEVBQUUsY0FBYyxFQUM3RSxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQ2xFLFdBQVcsRUFBRSxhQUFhLEVBQ2xDLDJCQUEyQixFQUFFLG1CQUFtQixFQUNQLG9CQUFvQixFQUFFLGVBQWUsRUFFaEQsc0JBQXNCLEVBQ3ZELE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDekcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDekcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDL0csT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDakYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFLdEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGlCQUFp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LENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUNoRSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3ZCLHlCQUF5QixDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDdEQsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQVk7UUFDL0IsTUFBTSxJQUFJLEdBQWtCLEVBQUUsQ0FBQztRQUMvQixJQUFJLGFBQWEsR0FBUSxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ3RDLE9BQU8sYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN6QixhQUFhLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO3dHQTU0QlUsV0FBVzs0R0FBWCxXQUFXOzs0RkFBWCxXQUFXO2tCQUR2QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIE1vZHVsZSwgUGFnaW5hdGlvbk1vZHVsZSwgQ2xpZW50U2lkZVJvd01vZGVsTW9kdWxlLCBJbmZpbml0ZVJvd01vZGVsTW9kdWxlXHJcbiAgLCBMb2NhbGVNb2R1bGUsIENlbGxTdHlsZU1vZHVsZSwgVmFsaWRhdGlvbk1vZHVsZSwgUm93QXBpTW9kdWxlLCBSb3dTdHlsZU1vZHVsZSBcclxuICAsIFJvd1NlbGVjdGlvbk1vZHVsZSwgUm93U2VsZWN0aW9uT3B0aW9ucyBcclxuICAsIFRleHRGaWx0ZXJNb2R1bGUsIE51bWJlckZpbHRlck1vZHVsZSwgRGF0ZUZpbHRlck1vZHVsZSwgQ3VzdG9tRmlsdGVyTW9kdWxlXHJcbiAgLCBDb2xEZWYsIHRoZW1lUXVhcnR6LCBpY29uU2V0QWxwaW5lLCBHcmlkT3B0aW9ucywgRGF0YVR5cGVEZWZpbml0aW9uXHJcbiAgLCBDbGllbnRTaWRlUm93TW9kZWxBcGlNb2R1bGUsIFJvd0F1dG9IZWlnaHRNb2R1bGVcclxuICAsIEdyaWRTaXplQ2hhbmdlZEV2ZW50LCBNb2RlbFVwZGF0ZWRFdmVudCwgQ29sdW1uQXV0b1NpemVNb2R1bGUsIENvbHVtbkFwaU1vZHVsZSwgR3JpZEFwaVxyXG4gICwgU3VwcHJlc3NLZXlib2FyZEV2ZW50UGFyYW1zXHJcbiAgLCBHZXRSb3dJZEZ1bmMsIEdldFJvd0lkUGFyYW1zLCBIaWdobGlnaHRDaGFuZ2VzTW9kdWxlXHJcbn0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9iamVjdFVSTFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9vYmplY3RVUkxSZW5kZXJlci9vYmplY3RVUkxSZW5kZXJlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEZWxldGVSb3dSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZGVsZXRlUm93UmVuZGVyZXIvZGVsZXRlUm93UmVuZGVyZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQWN0aW9uc0NlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWN0aW9uc0NlbGxSZW5kZXJlci9hY3Rpb25zQ2VsbFJlbmRlcmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNldEZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2V0RmlsdGVyL3NldEZpbHRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBIb3N0Q2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9ob3N0Q2VsbFJlbmRlcmVyL2hvc3RDZWxsUmVuZGVyZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9ybWF0dGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Zvcm1hdHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFya2Rvd25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWFya2Rvd24uc2VydmljZSc7XHJcbmltcG9ydCB7IFByb2dyYW1tYWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcm9ncmFtbWFiaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IFdlYWtTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvd2Vhay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZ2V0Rm9jdXNhYmxlcyB9IGZyb20gJy4uL3V0aWxzL2ZvY3VzYWJsZSc7XHJcbmltcG9ydCB7IGlzUmVjb3JkLCBpc0xhYmVsZWRSZWNvcmQsIGlzTnVtZXJpY0tleSB9IGZyb20gJy4uL2NvbW1vbi9yZWNvcmQnO1xyXG5pbXBvcnQgeyBnZXRMYWJlbFN5bWJvbCB9IGZyb20gJy4uL2NvbW1vbi9zeW1ib2xzJztcclxuaW1wb3J0IHtcclxuICBBR19HUklEX0xPQ0FMRV9JVCxcclxuICBBR19HUklEX0xPQ0FMRV9FTixcclxuICBBR19HUklEX0xPQ0FMRV9ERSxcclxuICBBR19HUklEX0xPQ0FMRV9GUixcclxuICBBR19HUklEX0xPQ0FMRV9FUyxcclxuICBBR19HUklEX0xPQ0FMRV9QVCAgXHJcbn0gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2xvY2FsZSc7XHJcblxyXG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICdAd2VtYWtlNHUvaW50ZXJhY3QnO1xyXG5pbXBvcnQgeyBUZXh0cyB9IGZyb20gJy4uL2xvY2FsZS9sb2NhbGUnO1xyXG5pbXBvcnQgeyBsb2NhbGl6ZSB9IGZyb20gJy4uL2xvY2FsZS9sb2NhbGl6ZSc7XHJcblxyXG50eXBlIE1hcFR5cGUgPSBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBzdHJpbmc+IHwgbnVsbDtcclxuXHJcbnR5cGUgR3JvdXBOb2RlID0ge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0eXBlOiBcImdyb3VwXCI7XHJcbiAgY29sdW1uczogKEdyb3VwTm9kZSB8IGFueSlbXTtcclxufTtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEdyaWRTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtYXR0ZXI6IEZvcm1hdHRlclNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZVxyXG4gICAgLCBwcml2YXRlIHByb2dyYW1tYWJpbGl0eTogUHJvZ3JhbW1hYmlsaXR5U2VydmljZVxyXG4gICAgLCBwcml2YXRlIG1hcmtkb3duU2VydmljZTogTWFya2Rvd25TZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgd2VhazogV2Vha1NlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIGdldE1vZHVsZXMoKTogTW9kdWxlW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgQ2xpZW50U2lkZVJvd01vZGVsTW9kdWxlXHJcbiAgICAgICwgSW5maW5pdGVSb3dNb2RlbE1vZHVsZVxyXG4gICAgICAsIFBhZ2luYXRpb25Nb2R1bGVcclxuICAgICAgLCBMb2NhbGVNb2R1bGVcclxuICAgICAgLCBDZWxsU3R5bGVNb2R1bGVcclxuICAgICAgLCBDbGllbnRTaWRlUm93TW9kZWxBcGlNb2R1bGVcclxuICAgICAgLCBUZXh0RmlsdGVyTW9kdWxlXHJcbiAgICAgICwgTnVtYmVyRmlsdGVyTW9kdWxlXHJcbiAgICAgICwgRGF0ZUZpbHRlck1vZHVsZVxyXG4gICAgICAsIEN1c3RvbUZpbHRlck1vZHVsZVxyXG4gICAgICAsIENvbHVtbkF1dG9TaXplTW9kdWxlXHJcbiAgICAgICwgQ29sdW1uQXBpTW9kdWxlXHJcbiAgICAgICwgUm93U2VsZWN0aW9uTW9kdWxlXHJcbiAgICAgICwgUm93QXBpTW9kdWxlXHJcbiAgICAgICwgUm93QXV0b0hlaWdodE1vZHVsZVxyXG4gICAgICAsIFJvd1N0eWxlTW9kdWxlIFxyXG4gICAgICAsIEhpZ2hsaWdodENoYW5nZXNNb2R1bGVcclxuICAgICAgLy8sIFZhbGlkYXRpb25Nb2R1bGVcclxuICAgIF07XHJcbiAgfTtcclxuXHJcbiAgZ2V0T3B0aW9ucyhjb21wb25lbnQ6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBHcmlkT3B0aW9ucyB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFJvd1NlbGVjdGlvbihjb21wb25lbnQsIGZvcm1Hcm91cCk7XHJcbiAgICBjb25zdCByb3dJZCA9IHRoaXMuZ2V0Um93SWQoY29tcG9uZW50KTtcclxuICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLmdldFBhZ2luYWJsZShjb21wb25lbnQpO1xyXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLmdldFBhZ2VTaXplKGNvbXBvbmVudCk7XHJcbiAgICBjb25zdCB0ZXh0cyA9IHRoaXMuZ2V0VGV4dHMoKTtcclxuICAgIGNvbnN0IHRoZW1lID0gdGhpcy5nZXRUaGVtZSgpO1xyXG4gICAgY29uc3Qgb3B0aW9ucyA6IEdyaWRPcHRpb25zID0ge1xyXG4gICAgICBkZWZhdWx0Q29sRGVmOiB7XHJcbiAgICAgICAgZmxvYXRpbmdGaWx0ZXI6IChjb21wb25lbnQuZmxvYXRpbmdGaWx0ZXIgPT09IHRydWUpLFxyXG4gICAgICAgIGhlYWRlckNsYXNzOiAoY29tcG9uZW50LmZsb2F0aW5nRmlsdGVyID09PSB0cnVlKVxyXG4gICAgICAgICAgPyAnc2hvdy1maWx0ZXInIDogJ2hpZGUtZmlsdGVyJ1xyXG4gICAgICB9LFxyXG4gICAgICBzZWxlY3Rpb25Db2x1bW5EZWY6IHtcclxuICAgICAgICBwaW5uZWQ6ICdsZWZ0J1xyXG4gICAgICB9LFxyXG4gICAgICBkYXRhVHlwZURlZmluaXRpb25zOiB0aGlzLmdldERhdGFUeXBlRGVmaW5pdGlvbnMoKSxcclxuICAgICAgcm93U2VsZWN0aW9uOiBzZWxlY3Rpb24sXHJcbiAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb24sXHJcbiAgICAgIHBhZ2luYXRpb25QYWdlU2l6ZTogcGFnZVNpemUsXHJcbiAgICAgIGNhY2hlQmxvY2tTaXplOiBwYWdlU2l6ZSxcclxuICAgICAgcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3I6IFs1LCAxMCwgMjAsIDUwXSxcclxuICAgICAgbG9jYWxlVGV4dDogdGV4dHMsXHJcbiAgICAgIGVuYWJsZUNlbGxUZXh0U2VsZWN0aW9uOiB0cnVlLFxyXG4gICAgICB0aGVtZTogdGhlbWUsXHJcbiAgICAgIGdldFJvd0lkOiByb3dJZCwgICAgICBcclxuICAgICAgb25HcmlkU2l6ZUNoYW5nZWQ6IChwYXJhbXM6IEdyaWRTaXplQ2hhbmdlZEV2ZW50KSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVHcmlkKGNvbXBvbmVudCwgcGFyYW1zLmFwaSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uTW9kZWxVcGRhdGVkOiAocGFyYW1zOiBNb2RlbFVwZGF0ZWRFdmVudCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVzaXplR3JpZChjb21wb25lbnQsIHBhcmFtcy5hcGkpO1xyXG4gICAgICAgIHRoaXMub25Sb3dTZWxlY3RpbmcoY29tcG9uZW50LCBmb3JtR3JvdXAsIHBhcmFtcyk7ICAgICAgICBcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRoaXMuc2V0Um93U3R5bGUoY29tcG9uZW50LCBvcHRpb25zLCBmb3JtR3JvdXApO1xyXG4gICAgcmV0dXJuIG9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICBnZXRDb2x1bW5EZWZzKGNvbXBvbmVudDogYW55LCBjb2x1bW5zOiBhbnksIGZvcm1Hcm91cDogRm9ybUdyb3VwKTogQ29sRGVmW10ge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29sdW1ucykpIHtcclxuICAgICAgY29uc3QgZ3JvdXBlZENvbHVtbnMgPSB0aGlzLmdyb3VwQ29sdW1ucyhjb2x1bW5zKTtcclxuICAgICAgY29uc3QgY29sdW1uRGVmcyA9IHRoaXMuZ3JvdXBzVG9Db2x1bW5EZWZzKGdyb3VwZWRDb2x1bW5zXHJcbiAgICAgICAgLCAoY3MpID0+IHRoaXMuY3JlYXRlQ29sdW1uRGVmcyhjb21wb25lbnQsIGNzLCBmb3JtR3JvdXApKTtcclxuXHJcbiAgICAgIHRoaXMuYWRkQWN0aW9uQ29sdW1uRGVmKGNvbXBvbmVudCwgY29sdW1uRGVmcywgZm9ybUdyb3VwKTtcclxuICAgICAgdGhpcy5hZGRSb3dOdW1iZXJzQ29sdW1uRGVmKGNvbXBvbmVudCwgY29sdW1uRGVmcyk7XHJcblxyXG4gICAgICByZXR1cm4gY29sdW1uRGVmcztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGlvbkNoYW5nZWQoY29tcG9uZW50OiBhbnksIGZvcm1Hcm91cDogRm9ybUdyb3VwLCBldmVudDogYW55KSB7XHJcbiAgICBpZiAoY29tcG9uZW50LnNlbGVjdGlvbkNoYW5nZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlKGZvcm1Hcm91cCwgY29tcG9uZW50LnNlbGVjdGlvbkNoYW5nZWQsIHtcclxuICAgICAgICBjYWNoZWFibGU6IGZhbHNlLFxyXG4gICAgICAgIGV4dGVuZENvbnRleHQ6ICgpID0+ICh7XHJcbiAgICAgICAgICBcImV2ZW50XCI6IHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRSb3dzOiBldmVudC5hcGkuZ2V0U2VsZWN0ZWRSb3dzKClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENhY2hlS2V5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYGdldEdyaWRPcHRpb25zXyR7dGhpcy5sYW5ndWFnZX1gO1xyXG4gIH1cclxuXHJcbiAgaW52YWxpZGF0ZU9wdGlvbnMoY29tcG9uZW50OiBhbnkpIHtcclxuICAgIHRoaXMud2Vhay5pbnZhbGlkYXRlKGNvbXBvbmVudCwgdGhpcy5nZXRDYWNoZUtleSgpKTtcclxuICB9XHJcblxyXG4gIG9uUm93RGF0YUNoYW5nZWQoY29tcG9uZW50OiBhbnksIGFwaTogR3JpZEFwaSwgcm93RGF0YTogYW55KSB7ICAgIFxyXG4gICAgaWYgKHRoaXMuaGFzUm93TnVtYmVycyhjb21wb25lbnQpICYmIHRoaXMuaGFzUm93SWQoY29tcG9uZW50KSkge1xyXG4gICAgICB0aGlzLnJlZnJlc2hSb3dOdW1iZXJzKGFwaSk7XHJcbiAgICB9ICAgICAgXHJcbiAgfVxyXG5cclxuICBvbkRhdGFTb3VyY2VDaGFuZ2VkKGNvbXBvbmVudDogYW55LCBhcGk6IEdyaWRBcGksIGRhdGFTb3VyY2U6IGFueSkge1xyXG4gICAgLy8gTm90aGluZ1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgbGFuZ3VhZ2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmxhbmd1YWdlU2VydmljZS5nZXRMYW5ndWFnZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2NhbGUoY29tcG9uZW50OiBhbnksIGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBsb2NhbGl6ZSh0aGlzLmxhbmd1YWdlLCBjb21wb25lbnQsIGtleSk7XHJcbiAgfVxyXG5cclxuICByZXNpemVHcmlkKGNvbXBvbmVudDogYW55LCBhcGk6IEdyaWRBcGkpIHtcclxuICAgIGNvbnN0IGNvbHVtbnNUb1Jlc2l6ZTogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5oYXNBY3Rpb25zKGNvbXBvbmVudCkpIHtcclxuICAgICAgY29sdW1uc1RvUmVzaXplLnB1c2goJ2FjdGlvbnMnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5oYXNSb3dOdW1iZXJzKGNvbXBvbmVudCkpIHtcclxuICAgICAgY29sdW1uc1RvUmVzaXplLnB1c2goJ3Jvd051bWJlcnMnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sdW1uc1RvUmVzaXplLmxlbmd0aCA+IDApIHtcclxuICAgICAgYXBpLmF1dG9TaXplQ29sdW1ucyhjb2x1bW5zVG9SZXNpemUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNBY3Rpb25zKGNvbXBvbmVudDogYW55KSB7XHJcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjb21wb25lbnQuYWN0aW9ucykgJiYgY29tcG9uZW50LmFjdGlvbnMubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzUm93TnVtYmVycyhjb21wb25lbnQ6IGFueSkge1xyXG4gICAgcmV0dXJuIChjb21wb25lbnQucm93TnVtYmVycyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUNvbHVtbkRlZnMoY29tcG9uZW50OiBhbnksIGNvbHVtbnM6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBDb2xEZWZbXSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb2x1bW5zKSkge1xyXG4gICAgICBjb25zdCBjb2x1bW5EZWZzID0gY29sdW1ucy5tYXAoKGNvbHVtbjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29sRGVmOiBDb2xEZWYgPSB7XHJcbiAgICAgICAgICBmaWVsZDogY29sdW1uLmtleSxcclxuICAgICAgICAgIGhlYWRlck5hbWU6IHRoaXMubG9jYWxlKGNvbHVtbiwgJ2xhYmVsJylcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0Q2VsbERhdGFUeXBlKGNvbHVtbiwgY29sRGVmKTtcclxuXHJcbiAgICAgICAgY29uc3QgbWFwID0gdGhpcy5nZXRNYXAoY29sdW1uLCBjb2xEZWYsIGZvcm1Hcm91cCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0Q2VsbFJlbmRlcmVyKGNvbHVtbiwgY29sRGVmLCBtYXAsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgdGhpcy5zZXRDb2xTdHlsZXMoY29sdW1uLCBjb2xEZWYsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgdGhpcy5zZXRBdXRvSGVpZ2h0KGNvbHVtbiwgY29sRGVmKTtcclxuICAgICAgICB0aGlzLnNldFJlc2l6YWJsZShjb2x1bW4sIGNvbERlZik7XHJcbiAgICAgICAgdGhpcy5zZXRTb3J0YWJsZShjb2x1bW4sIGNvbERlZik7XHJcbiAgICAgICAgdGhpcy5zZXRGaWx0ZXIoY29sdW1uLCBjb2xEZWYsIG1hcCk7XHJcbiAgICAgICAgdGhpcy5zZXRGaWx0ZXJQYXJhbXMoY29sdW1uLCBjb2xEZWYsIG1hcCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdXBwcmVzc01vdmFibGUoY29sdW1uLCBjb2xEZWYpO1xyXG4gICAgICAgIHRoaXMuc2V0RmxleChjb2x1bW4sIGNvbERlZik7XHJcbiAgICAgICAgdGhpcy5zZXRBbGlnbihjb2x1bW4sIGNvbERlZik7XHJcbiAgICAgICAgdGhpcy5zZXRQaW5uZWQoY29sdW1uLCBjb2xEZWYpO1xyXG4gICAgICAgIHRoaXMuc2V0V2lkdGgoY29sdW1uLCBjb2xEZWYpO1xyXG4gICAgICAgIHRoaXMuc2V0VmFsdWVGb3JtYXR0ZXIoY29sdW1uLCBjb2xEZWYsIG1hcCk7XHJcbiAgICAgICAgdGhpcy5zZXRDZWxsQ2hhbmdlRmxhc2goY29sdW1uLCBjb2xEZWYpO1xyXG5cclxuICAgICAgICByZXR1cm4gY29sRGVmO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBjb2x1bW5EZWZzO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkQWN0aW9uQ29sdW1uRGVmKGNvbXBvbmVudDogYW55LCBjb2x1bW5EZWZzOiBDb2xEZWZbXSwgZm9ybUdyb3VwOiBGb3JtR3JvdXApIHtcclxuICAgIGlmICh0aGlzLmhhc0FjdGlvbnMoY29tcG9uZW50KSkge1xyXG4gICAgICBjb2x1bW5EZWZzLnB1c2goe1xyXG4gICAgICAgIGNvbElkOiAnYWN0aW9ucycsXHJcbiAgICAgICAgaGVhZGVyTmFtZTogdGhpcy5sb2NhbGUoVGV4dHMsICdBY3Rpb25zJyksXHJcbiAgICAgICAgcmVzaXphYmxlOiBmYWxzZSxcclxuICAgICAgICBzb3J0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgZmlsdGVyOiBmYWxzZSxcclxuICAgICAgICBjZWxsRGF0YVR5cGU6IGZhbHNlLFxyXG4gICAgICAgIGhpZGU6IHRoaXMuc3VwcHJlc3NBY3Rpb25zKGNvbXBvbmVudCwgZm9ybUdyb3VwKSxcclxuICAgICAgICBwaW5uZWQ6IFwicmlnaHRcIiwgICAgICAgIFxyXG4gICAgICAgIGNlbGxSZW5kZXJlclBhcmFtczoge1xyXG4gICAgICAgICAgY29tcG9uZW50OiBjb21wb25lbnQsXHJcbiAgICAgICAgICBmb3JtR3JvdXA6IGZvcm1Hcm91cFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2VsbFJlbmRlcmVyOiBBY3Rpb25zQ2VsbFJlbmRlcmVyQ29tcG9uZW50LFxyXG4gICAgICAgIHN1cHByZXNzS2V5Ym9hcmRFdmVudDogdGhpcy5uYXZpZ2F0ZUluc2lkZUNlbGwuYmluZCh0aGlzKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkUm93TnVtYmVyc0NvbHVtbkRlZihjb21wb25lbnQ6IGFueSwgY29sdW1uRGVmczogQ29sRGVmW10pIHsgICAgXHJcbiAgICBpZiAodGhpcy5oYXNSb3dOdW1iZXJzKGNvbXBvbmVudCkpIHtcclxuICAgICAgY29sdW1uRGVmcy51bnNoaWZ0KHtcclxuICAgICAgICBjb2xJZDogJ3Jvd051bWJlcnMnLFxyXG4gICAgICAgIGhlYWRlck5hbWU6IFwiI1wiLFxyXG4gICAgICAgIHBpbm5lZDogXCJsZWZ0XCIsXHJcbiAgICAgICAgaGVhZGVyQ2xhc3M6ICdyb3ctbnVtYmVycy1oZWFkZXInLFxyXG4gICAgICAgIGNlbGxDbGFzczogJ3Jvdy1udW1iZXJzLWNlbGwnLFxyXG4gICAgICAgIHJlc2l6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgc29ydGFibGU6IGZhbHNlLFxyXG4gICAgICAgIHZhbHVlR2V0dGVyOiAobjogYW55KSA9PiBuLm5vZGUucm93SW5kZXggKyAxXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoUm93TnVtYmVycyhhcGk6IEdyaWRBcGkpIHtcclxuICAgIGlmIChhcGkpIHtcclxuICAgICAgY29uc3Qgcm93TnVtYmVycyA9IFtcInJvd051bWJlcnNcIl07XHJcbiAgICAgIGFwaS5zZXRDb2x1bW5zVmlzaWJsZShyb3dOdW1iZXJzLCBmYWxzZSk7XHJcbiAgICAgIGFwaS5zZXRDb2x1bW5zVmlzaWJsZShyb3dOdW1iZXJzLCB0cnVlKTsgIFxyXG4gICAgfSAgICBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ3JvdXBDb2x1bW5zKGNvbHVtbnM6IGFueVtdKTogKEdyb3VwTm9kZSB8IGFueSlbXSB7XHJcbiAgICBjb25zdCByb290SXRlbXNPcmRlcmVkOiAoR3JvdXBOb2RlIHwgYW55KVtdID0gW107XHJcblxyXG4gICAgZnVuY3Rpb24gZmluZE9yQ3JlYXRlR3JvdXAoXHJcbiAgICAgIGdyb3VwczogKEdyb3VwTm9kZSB8IGFueSlbXSxcclxuICAgICAgbmFtZTogc3RyaW5nXHJcbiAgICApOiBHcm91cE5vZGUge1xyXG4gICAgICBsZXQgZ3JvdXAgPSBncm91cHMuZmluZChcclxuICAgICAgICBpdGVtID0+IChpdGVtIGFzIEdyb3VwTm9kZSkudHlwZSA9PT0gXCJncm91cFwiICYmIChpdGVtIGFzIEdyb3VwTm9kZSkubmFtZSA9PT0gbmFtZVxyXG4gICAgICApIGFzIEdyb3VwTm9kZTtcclxuXHJcbiAgICAgIGlmICghZ3JvdXApIHtcclxuICAgICAgICBncm91cCA9IHtcclxuICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICB0eXBlOiBcImdyb3VwXCIsXHJcbiAgICAgICAgICBjb2x1bW5zOiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGdyb3Vwcy5wdXNoKGdyb3VwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGdyb3VwO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuICAgICAgY29uc3QgZ3JvdXBQYXJ0cyA9IChjb2x1bW4uZ3JvdXAgPz8gXCJcIilcclxuICAgICAgICAuc3BsaXQoL1tcXFxcL10vKVxyXG4gICAgICAgIC5tYXAoKHBhcnQ6IHN0cmluZykgPT4gcGFydC50cmltKCkpXHJcbiAgICAgICAgLmZpbHRlcigocGFydDogc3RyaW5nKSA9PiBwYXJ0Lmxlbmd0aCA+IDApO1xyXG5cclxuICAgICAgaWYgKGdyb3VwUGFydHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcm9vdEl0ZW1zT3JkZXJlZC5wdXNoKGNvbHVtbik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRMZXZlbCA9IHJvb3RJdGVtc09yZGVyZWQ7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBncm91cFBhcnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXJ0ID0gZ3JvdXBQYXJ0c1tpXTtcclxuICAgICAgICAgIGNvbnN0IGdyb3VwID0gZmluZE9yQ3JlYXRlR3JvdXAoY3VycmVudExldmVsLCBwYXJ0KTtcclxuICAgICAgICAgIGN1cnJlbnRMZXZlbCA9IGdyb3VwLmNvbHVtbnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cnJlbnRMZXZlbC5wdXNoKGNvbHVtbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcm9vdEl0ZW1zT3JkZXJlZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ3JvdXBzVG9Db2x1bW5EZWZzKGdyb3VwZWQ6IChHcm91cE5vZGUgfCBhbnkpW10sIGdldENvbHVtbnNEZWY6IChjb2x1bW5zOiBhbnlbXSkgPT4gQ29sRGVmW10pOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gZ3JvdXBlZC5tYXAoaXRlbSA9PiB7XHJcbiAgICAgIGlmICgndHlwZScgaW4gaXRlbSAmJiBpdGVtLnR5cGUgPT09ICdncm91cCcpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgaGVhZGVyTmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgY2hpbGRyZW46IHRoaXMuZ3JvdXBzVG9Db2x1bW5EZWZzKGl0ZW0uY29sdW1ucywgZ2V0Q29sdW1uc0RlZilcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBnZXRDb2x1bW5zRGVmKFtpdGVtXSlbMF07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDZWxsRGF0YVR5cGUoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmKSB7XHJcbiAgICBpZiAoY29sdW1uLmRhdGFUeXBlID09PSBcImNvbXBvbmVudFwiXHJcbiAgICAgIHx8IGNvbHVtbi5kYXRhVHlwZSA9PT0gXCJhdXRvXCIpIHJldHVybjtcclxuXHJcbiAgICBpZiAodHlwZW9mIGNvbHVtbi5kYXRhVHlwZSA9PT0gXCJzdHJpbmdcIlxyXG4gICAgICAmJiBjb2x1bW4uZGF0YVR5cGUudHJpbSgpICE9PSBcIlwiKSB7XHJcbiAgICAgIGNvbERlZi5jZWxsRGF0YVR5cGUgPSBjb2x1bW4uZGF0YVR5cGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFJvd1N0eWxlKGNvbXBvbmVudDogYW55LCBncmlkT3B0aW9uczogR3JpZE9wdGlvbnMsIGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XHJcbiAgICB0aGlzLmFwcGx5U3R5bGUoZ3JpZE9wdGlvbnMsIGZvcm1Hcm91cCwgY29tcG9uZW50LnJvd0NsYXNzLCBcImdldFJvd0NsYXNzXCIsIFwicm93Q2xhc3NcIik7XHJcbiAgICB0aGlzLmFwcGx5U3R5bGUoZ3JpZE9wdGlvbnMsIGZvcm1Hcm91cCwgY29tcG9uZW50LnJvd1N0eWxlLCBcImdldFJvd1N0eWxlXCIsIFwicm93U3R5bGVcIik7XHJcbiAgICB0aGlzLmFwcGx5U3R5bGUoZ3JpZE9wdGlvbnMsIGZvcm1Hcm91cCwgY29tcG9uZW50LnJvd0NsYXNzUnVsZXMsIFwicm93Q2xhc3NSdWxlc1wiLCBcInJvd0NsYXNzUnVsZXNcIik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvbFN0eWxlcyhjb2x1bW46IGFueSwgY29sRGVmOiBDb2xEZWYsIGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XHJcbiAgICB0aGlzLmFwcGx5U3R5bGUoY29sRGVmLCBmb3JtR3JvdXAsIGNvbHVtbi5oZWFkZXJDbGFzcywgXCJoZWFkZXJDbGFzc1wiLCBcImhlYWRlckNsYXNzXCIpO1xyXG4gICAgdGhpcy5hcHBseVN0eWxlKGNvbERlZiwgZm9ybUdyb3VwLCBjb2x1bW4uaGVhZGVyU3R5bGUsIFwiaGVhZGVyU3R5bGVcIiwgXCJoZWFkZXJTdHlsZVwiKTtcclxuICAgIHRoaXMuYXBwbHlTdHlsZShjb2xEZWYsIGZvcm1Hcm91cCwgY29sdW1uLmNlbGxDbGFzcywgXCJjZWxsQ2xhc3NcIiwgXCJjZWxsQ2xhc3NcIik7XHJcbiAgICB0aGlzLmFwcGx5U3R5bGUoY29sRGVmLCBmb3JtR3JvdXAsIGNvbHVtbi5jZWxsU3R5bGUsIFwiY2VsbFN0eWxlXCIsIFwiY2VsbFN0eWxlXCIpO1xyXG4gICAgdGhpcy5hcHBseVN0eWxlKGNvbERlZiwgZm9ybUdyb3VwLCBjb2x1bW4uY2VsbENsYXNzUnVsZXMsIFwiY2VsbENsYXNzUnVsZXNcIiwgXCJjZWxsQ2xhc3NSdWxlc1wiKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q2VsbFJlbmRlcmVyKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZiwgbWFwOiBNYXBUeXBlLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCkge1xyXG4gICAgaWYgKGNvbHVtbi5mb3JtYXQgPT09IFwib2JqZWN0VVJMXCIpIHtcclxuICAgICAgY29sRGVmLmNlbGxSZW5kZXJlciA9IE9iamVjdFVSTFJlbmRlcmVyQ29tcG9uZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2x1bW4uZm9ybWF0ID09PSBcImRlbGV0ZVJvd1wiKSB7XHJcbiAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSBEZWxldGVSb3dSZW5kZXJlckNvbXBvbmVudDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJib29sZWFuXCIgJiYgbWFwKSB7XHJcbiAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSAocGFyYW1zOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRNYXAocGFyYW1zLnZhbHVlLCBtYXApOyBcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09IFwiZm9ybWF0dGVkXCIpIHtcclxuICAgICAgY29sRGVmLmNlbGxSZW5kZXJlciA9IChwYXJhbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hcmtkb3duU2VydmljZS50b0h0bWwocGFyYW1zLnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09IFwiY29tcG9uZW50XCIpIHtcclxuICAgICAgY29sRGVmLmNlbGxSZW5kZXJlciA9IEhvc3RDZWxsUmVuZGVyZXJDb21wb25lbnQ7XHJcbiAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXJQYXJhbXMgPSB7XHJcbiAgICAgICAgY29tcG9uZW50VHlwZTogY29sdW1uLmNvbXBvbmVudCxcclxuICAgICAgICBwcm9wZXJ0aWVzOiBjb2x1bW4ucHJvcGVydGllcyxcclxuICAgICAgICBmb3JtR3JvdXA6IGZvcm1Hcm91cFxyXG4gICAgICB9O1xyXG4gICAgICBjb2xEZWYuY2VsbENsYXNzID0gJ2NlbGwtY29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENlbGxDaGFuZ2VGbGFzaChjb2x1bW46IGFueSwgY29sRGVmOiBDb2xEZWYpIHtcclxuICAgIGNvbERlZi5lbmFibGVDZWxsQ2hhbmdlRmxhc2ggPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRBdXRvSGVpZ2h0KGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZikge1xyXG4gICAgaWYgKGNvbHVtbi5hdXRvSGVpZ2h0KSB7XHJcbiAgICAgIGNvbERlZi5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuICAgICAgY29sRGVmLndyYXBUZXh0ID0gdHJ1ZTtcclxuICAgIH0gIFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRSZXNpemFibGUoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmICkge1xyXG4gICAgY29sRGVmLnJlc2l6YWJsZSA9IChjb2x1bW4ucmVzaXplID09PSB0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U29ydGFibGUoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmKSB7XHJcbiAgICBjb2xEZWYuc29ydGFibGUgPSAoY29sdW1uLnNvcnQgPT09IHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRGaWx0ZXIoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmLCBtYXA6IE1hcFR5cGUpIHtcclxuICAgIGlmIChjb2x1bW4uZmlsdGVyID09PSB0cnVlKSB7XHJcbiAgICAgIGNvbERlZi5maWx0ZXIgPSB0cnVlO1xyXG4gICAgICBpZiAobWFwKSB7XHJcbiAgICAgICAgY29sRGVmLmZpbHRlciA9IFNldEZpbHRlckNvbXBvbmVudDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRGaWx0ZXJQYXJhbXMoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmLCBtYXA6IE1hcFR5cGUpIHtcclxuXHJcbiAgICBjb25zdCBmaWx0ZXJQYXJhbXM6IGFueSA9IHt9O1xyXG5cclxuICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICd1dWlkJykge1xyXG4gICAgICB0aGlzLnNldFV1aWRGaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2ludGVnZXInKSB7XHJcbiAgICAgIHRoaXMuc2V0SW50ZWdlckZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgdGhpcy5zZXREYXRlRmlsdGVyUGFyYW1zKGZpbHRlclBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICdib29sZWFuJykge1xyXG4gICAgICB0aGlzLnNldEJvb2xlYW5GaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKG1hcCkge1xyXG4gICAgICBmaWx0ZXJQYXJhbXMubWFwID0gbWFwO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbERlZi5maWx0ZXJQYXJhbXMgPSBmaWx0ZXJQYXJhbXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFV1aWRGaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zOiBhbnkpIHtcclxuICAgIGZpbHRlclBhcmFtcy5maWx0ZXJPcHRpb25zID0gWydlcXVhbHMnLCAnbm90RXF1YWwnXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0SW50ZWdlckZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXM6IGFueSkge1xyXG4gICAgZmlsdGVyUGFyYW1zLmFsbG93ZWRDaGFyUGF0dGVybiA9ICdcXFxcZCc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERhdGVGaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zOiBhbnkpIHtcclxuICAgIGZpbHRlclBhcmFtcy5jb21wYXJhdG9yID0gKGZpbHRlckxvY2FsRGF0ZUF0TWlkbmlnaHQ6IERhdGUsIGNlbGxWYWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmICghY2VsbFZhbHVlKSByZXR1cm4gLTE7XHJcbiAgICAgIGNvbnN0IGNlbGxEYXRlID0gbmV3IERhdGUoY2VsbFZhbHVlKTtcclxuICAgICAgaWYgKGlzTmFOKGNlbGxEYXRlLmdldFRpbWUoKSkpIHJldHVybiAtMTtcclxuXHJcbiAgICAgIGNvbnN0IGNlbGxEYXRlTm9UaW1lID0gbmV3IERhdGUoY2VsbERhdGUuZ2V0RnVsbFllYXIoKSwgY2VsbERhdGUuZ2V0TW9udGgoKSwgY2VsbERhdGUuZ2V0RGF0ZSgpKTtcclxuXHJcbiAgICAgIGlmIChjZWxsRGF0ZU5vVGltZSA8IGZpbHRlckxvY2FsRGF0ZUF0TWlkbmlnaHQpIHJldHVybiAtMTtcclxuICAgICAgaWYgKGNlbGxEYXRlTm9UaW1lID4gZmlsdGVyTG9jYWxEYXRlQXRNaWRuaWdodCkgcmV0dXJuIDE7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRCb29sZWFuRmlsdGVyUGFyYW1zKGZpbHRlclBhcmFtczogYW55KSB7XHJcbiAgICBmaWx0ZXJQYXJhbXMuZmlsdGVyT3B0aW9ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGRpc3BsYXlLZXk6ICdpbmNsdWRlQWxsJyxcclxuICAgICAgICBkaXNwbGF5TmFtZTogVGV4dHMuQ2hvb3NlT25lLFxyXG4gICAgICAgIG51bWJlck9mSW5wdXRzOiAwLFxyXG4gICAgICAgIHByZWRpY2F0ZTogKFtmaWx0ZXJdOiBbYW55XSwgdmFsdWU6IGFueSkgPT4gdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZGlzcGxheUtleTogJ3RydWUnLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBUZXh0cy5UcnVlLFxyXG4gICAgICAgIG51bWJlck9mSW5wdXRzOiAwLFxyXG4gICAgICAgIHByZWRpY2F0ZTogKFtmaWx0ZXJdOiBbYW55XSwgdmFsdWU6IGFueSkgPT4gdmFsdWUgPT09IHRydWVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGRpc3BsYXlLZXk6ICdmYWxzZScsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFRleHRzLkZhbHNlLFxyXG4gICAgICAgIG51bWJlck9mSW5wdXRzOiAwLFxyXG4gICAgICAgIHByZWRpY2F0ZTogKFtmaWx0ZXJdOiBbYW55XSwgdmFsdWU6IGFueSkgPT4gdmFsdWUgPT09IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBkaXNwbGF5S2V5OiAnYmxhbmsnLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBUZXh0cy5CbGFuayxcclxuICAgICAgICBudW1iZXJPZklucHV0czogMCxcclxuICAgICAgICBwcmVkaWNhdGU6IChbZmlsdGVyXTogW2FueV0sIHZhbHVlOiBhbnkpID0+IHZhbHVlID09PSBudWxsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBkaXNwbGF5S2V5OiAnbm90QmxhbmsnLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBUZXh0cy5Ob3RCbGFuayxcclxuICAgICAgICBudW1iZXJPZklucHV0czogMCxcclxuICAgICAgICBwcmVkaWNhdGU6IChbZmlsdGVyXTogW2FueV0sIHZhbHVlOiBhbnkpID0+IHZhbHVlICE9PSBudWxsXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gICAgZmlsdGVyUGFyYW1zLnN1cHByZXNzQW5kT3JDb25kaXRpb24gPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTdXBwcmVzc01vdmFibGUoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmKSB7XHJcbiAgICBpZiAoIShjb2x1bW4ubW92ZSA9PT0gdHJ1ZSkpIHsgXHJcbiAgICAgIGNvbERlZi5zdXBwcmVzc01vdmFibGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRGbGV4KGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZikge1xyXG4gICAgaWYgKGNvbHVtbi5mbGV4ID09PSB0cnVlKSB7IFxyXG4gICAgICBjb2xEZWYuZmxleCA9IDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEFsaWduKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZikge1xyXG4gICAgaWYgKGNvbHVtbi5hbGlnbiA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgY29sRGVmLmNlbGxTdHlsZSA9IHsgdGV4dEFsaWduOiAnbGVmdCcgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbHVtbi5hbGlnbiA9PT0gXCJjZW50ZXJcIikge1xyXG4gICAgICBjb2xEZWYuY2VsbFN0eWxlID0geyB0ZXh0QWxpZ246ICdjZW50ZXInIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb2x1bW4uYWxpZ24gPT09IFwicmlnaHRcIikgeyBcclxuICAgICAgY29sRGVmLmNlbGxTdHlsZSA9IHsgdGV4dEFsaWduOiAncmlnaHQnIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFBpbm5lZChjb2x1bW46IGFueSwgY29sRGVmOiBDb2xEZWYpIHtcclxuICAgIGlmICh0eXBlb2YgY29sdW1uLnBpbm5lZCA9PT0gXCJzdHJpbmdcIikgeyBcclxuICAgICAgY29sRGVmLnBpbm5lZCA9IGNvbHVtbi5waW5uZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFdpZHRoKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZikge1xyXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4ud2lkdGggPT09IFwibnVtYmVyXCIpIHsgXHJcbiAgICAgIGNvbERlZi53aWR0aCA9IGNvbHVtbi53aWR0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGNvbHVtbi5taW5XaWR0aCA9PT0gXCJudW1iZXJcIikgeyBcclxuICAgICAgY29sRGVmLm1pbldpZHRoID0gY29sdW1uLm1pbldpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgY29sdW1uLm1heFdpZHRoID09PSBcIm51bWJlclwiKSB7IFxyXG4gICAgICBjb2xEZWYubWF4V2lkdGggPSBjb2x1bW4ubWF4V2lkdGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFZhbHVlRm9ybWF0dGVyKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZiwgbWFwOiBNYXBUeXBlKSB7XHJcbiAgICBpZiAobWFwKSB7XHJcbiAgICAgIGNvbERlZi52YWx1ZUZvcm1hdHRlciA9IChwYXJhbXMpID0+IHRoaXMuZm9ybWF0TWFwKHBhcmFtcy52YWx1ZSwgbWFwKTsgICAgICBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJvd1NlbGVjdGlvbihjb21wb25lbnQ6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBSb3dTZWxlY3Rpb25PcHRpb25zIHwgdW5kZWZpbmVkICB7XHJcbiAgICBsZXQgb3B0aW9uczogUm93U2VsZWN0aW9uT3B0aW9ucyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICAgIGlmICh0aGlzLnNlbGVjdGFibGUoY29tcG9uZW50LCBmb3JtR3JvdXApKSB7XHJcbiAgICAgIGlmICh0aGlzLm11bHRpU2VsZWN0KGNvbXBvbmVudCwgZm9ybUdyb3VwKSkge1xyXG4gICAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICBtb2RlOiBcIm11bHRpUm93XCIsXHJcbiAgICAgICAgICBzZWxlY3RBbGw6ICdmaWx0ZXJlZCcsXHJcbiAgICAgICAgICBoaWRlRGlzYWJsZWRDaGVja2JveGVzOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBvcHRpb25zID0geyBtb2RlOiBcInNpbmdsZVJvd1wiIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb21wb25lbnQucm93U2VsZWN0YWJsZSkge1xyXG4gICAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAuLi5vcHRpb25zLFxyXG4gICAgICAgICAgaXNSb3dTZWxlY3RhYmxlOiAocm93Tm9kZSkgPT4gdGhpcy5vblJvd1NlbGVjdGFibGUoY29tcG9uZW50LCBmb3JtR3JvdXAsIHJvd05vZGUuZGF0YSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3B0aW9ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzUm93SWQoY29tcG9uZW50OiBhbnkpIHtcclxuICAgIHJldHVybiB0eXBlb2YgY29tcG9uZW50LnJvd0lkID09PSAnc3RyaW5nJyAmJiBjb21wb25lbnQucm93SWQudHJpbSgpICE9PSAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Um93SWQoY29tcG9uZW50OiBhbnkpOiBHZXRSb3dJZEZ1bmM8YW55PiB8IHVuZGVmaW5lZFxyXG4gIHtcclxuICAgIGlmICh0aGlzLmhhc1Jvd0lkKGNvbXBvbmVudCkpIHtcclxuICAgICAgcmV0dXJuIChwYXJhbXM6IEdldFJvd0lkUGFyYW1zPGFueT4pID0+IHBhcmFtcy5kYXRhW2NvbXBvbmVudC5yb3dJZF07ICAgICAgXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlTdHlsZSh0YXJnZXQ6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXAsIHN0eWxlRXhwcmVzc2lvbjogYW55LCBmdW5jTmFtZTogc3RyaW5nLCBzdGF0aWNOYW1lOiBzdHJpbmcpXHJcbiAge1xyXG4gICAgaWYgKHN0eWxlRXhwcmVzc2lvbikge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlKGZvcm1Hcm91cCwgc3R5bGVFeHByZXNzaW9uLCB7IGNhY2hlYWJsZTogZmFsc2UgfSk7XHJcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB0YXJnZXRbZnVuY05hbWVdID0gdmFsdWVcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0YXJnZXRbc3RhdGljTmFtZV0gPSB2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfSBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25Sb3dTZWxlY3RhYmxlKGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCwgZGF0YTogYW55KSA6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFkYXRhKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGUoZm9ybUdyb3VwLCBjb21wb25lbnQucm93U2VsZWN0YWJsZSwge1xyXG4gICAgICBjYWNoZWFibGU6IGZhbHNlLFxyXG4gICAgICBleHRlbmRDb250ZXh0OiAoKSA9PiAoe1xyXG4gICAgICAgIFwiZXZlbnRcIjoge1xyXG4gICAgICAgICAgZGF0YTogZGF0YVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHQgPT09IHRydWU7IFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblJvd1NlbGVjdGVkKGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCwgZGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWRhdGEpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZShmb3JtR3JvdXAsIGNvbXBvbmVudC5yb3dTZWxlY3RlZCwge1xyXG4gICAgICBjYWNoZWFibGU6IGZhbHNlLFxyXG4gICAgICBleHRlbmRDb250ZXh0OiAoKSA9PiAoe1xyXG4gICAgICAgIFwiZXZlbnRcIjoge1xyXG4gICAgICAgICAgZGF0YTogZGF0YVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHQgPT09IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uUm93U2VsZWN0aW5nKGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCwgcGFyYW1zOiBNb2RlbFVwZGF0ZWRFdmVudCkge1xyXG4gICAgaWYgKHBhcmFtcy5uZXdEYXRhICAgICAgXHJcbiAgICAgICYmIGNvbXBvbmVudC5yb3dTZWxlY3RlZFxyXG4gICAgICAmJiB0aGlzLnNlbGVjdGFibGUoY29tcG9uZW50LCBmb3JtR3JvdXApKVxyXG4gICAge1xyXG4gICAgICBwYXJhbXMuYXBpLmZvckVhY2hOb2RlKChub2RlKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMub25Sb3dTZWxlY3RlZChjb21wb25lbnQsIGZvcm1Hcm91cCwgbm9kZS5kYXRhKSkge1xyXG4gICAgICAgICAgbm9kZS5zZXRTZWxlY3RlZCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdXBwcmVzc0FjdGlvbnMoY29tcG9uZW50OiBhbnksIGZvcm1Hcm91cDogRm9ybUdyb3VwKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVCb29sZWFuKGZvcm1Hcm91cCwgY29tcG9uZW50LnN1cHByZXNzQWN0aW9ucywgeyBjYWNoZWFibGU6IGZhbHNlIH0pXHJcbiAgICAgID8/IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3RhYmxlKGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlQm9vbGVhbihmb3JtR3JvdXAsIGNvbXBvbmVudC5zZWxlY3RhYmxlLCB7IGNhY2hlYWJsZTogZmFsc2UgfSlcclxuICAgICAgPz8gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG11bHRpU2VsZWN0KGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlQm9vbGVhbihmb3JtR3JvdXAsIGNvbXBvbmVudC5tdWx0aVNlbGVjdCwgeyBjYWNoZWFibGU6IGZhbHNlIH0pXHJcbiAgICAgID8/IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYWdpbmFibGUoY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodHlwZW9mIGNvbXBvbmVudC5yb3dDb3VudCA9PT0gJ251bWJlcicgJiYgY29tcG9uZW50LnJvd0NvdW50ID4gMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhZ2VTaXplKGNvbXBvbmVudDogYW55KSB7XHJcbiAgICBpZiAodHlwZW9mIGNvbXBvbmVudC5yb3dDb3VudCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIGNvbXBvbmVudC5yb3dDb3VudDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VGV4dHMoKTogYW55IHtcclxuICAgIGlmICh0aGlzLmxhbmd1YWdlID09PSAnaXQnKSB7XHJcbiAgICAgIHJldHVybiBBR19HUklEX0xPQ0FMRV9JVDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMubGFuZ3VhZ2UgPT09ICdlbicpIHtcclxuICAgICAgcmV0dXJuIEFHX0dSSURfTE9DQUxFX0VOO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5sYW5ndWFnZSA9PT0gJ2RlJykge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfREU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmxhbmd1YWdlID09PSAnZnInKSB7XHJcbiAgICAgIHJldHVybiBBR19HUklEX0xPQ0FMRV9GUjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMubGFuZ3VhZ2UgPT09ICdlcycpIHtcclxuICAgICAgcmV0dXJuIEFHX0dSSURfTE9DQUxFX0VTO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5sYW5ndWFnZSA9PT0gJ3B0Jykge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfUFQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmxhbmd1YWdlID09PSAnJykge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfSVQ7IC8vIG5ldXRyYWxcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfRU47IC8vIGZhbGxiYWNrXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFRoZW1lKCkge1xyXG4gICAgcmV0dXJuIHRoZW1lUXVhcnR6XHJcbiAgICAgIC53aXRoUGFydChpY29uU2V0QWxwaW5lKVxyXG4gICAgICAud2l0aFBhcmFtcyh7XHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNGQUZBRkFcIixcclxuICAgICAgICBib3JkZXJDb2xvcjogXCIjRDlFNEY3XCIsXHJcbiAgICAgICAgYnJvd3NlckNvbG9yU2NoZW1lOiBcImxpZ2h0XCIsXHJcbiAgICAgICAgY2VsbFRleHRDb2xvcjogXCIjMDAxMjFBXCIsXHJcbiAgICAgICAgY29sdW1uQm9yZGVyOiB0cnVlLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiaW5oZXJpdFwiLFxyXG4gICAgICAgIGZvbnRTaXplOiAxNixcclxuICAgICAgICBoZWFkZXJCYWNrZ3JvdW5kQ29sb3I6IFwiIzAwMjQ2MFwiLFxyXG4gICAgICAgIGhlYWRlckNvbHVtbkJvcmRlcjogdHJ1ZSxcclxuICAgICAgICBoZWFkZXJDb2x1bW5SZXNpemVIYW5kbGVDb2xvcjogXCIjRjJGNkZDXCIsXHJcbiAgICAgICAgaGVhZGVyQ29sdW1uUmVzaXplSGFuZGxlV2lkdGg6IDIsXHJcbiAgICAgICAgaGVhZGVyRm9udFNpemU6IDE2LFxyXG4gICAgICAgIGhlYWRlckZvbnRXZWlnaHQ6IDYwMCxcclxuICAgICAgICBoZWFkZXJSb3dCb3JkZXI6IHRydWUsXHJcbiAgICAgICAgaGVhZGVyVGV4dENvbG9yOiBcIiNGMkY2RkNcIixcclxuICAgICAgICByb3dCb3JkZXI6IHRydWVcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERhdGFUeXBlRGVmaW5pdGlvbnMoKTogeyBbY2VsbERhdGFUeXBlOiBzdHJpbmddOiBEYXRhVHlwZURlZmluaXRpb248YW55PjsgfSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB1dWlkOiB7XHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAndGV4dCcsXHJcbiAgICAgICAgZXh0ZW5kc0RhdGFUeXBlOiAndGV4dCdcclxuICAgICAgfSxcclxuICAgICAgZGF0ZToge1xyXG4gICAgICAgIGJhc2VEYXRhVHlwZTogJ2RhdGVTdHJpbmcnLFxyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ2RhdGVTdHJpbmcnLFxyXG4gICAgICAgIGRhdGVQYXJzZXI6ICh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogcGFyYW1zID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdHRlci5mb3JtYXREYXRlKHBhcmFtcy52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBkYXRlVGltZToge1xyXG4gICAgICAgIGJhc2VEYXRhVHlwZTogJ2RhdGVTdHJpbmcnLFxyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ2RhdGVTdHJpbmcnLFxyXG4gICAgICAgIGRhdGVQYXJzZXI6ICh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogcGFyYW1zID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdHRlci5mb3JtYXREYXRlVGltZShwYXJhbXMudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgdGltZToge1xyXG4gICAgICAgIGJhc2VEYXRhVHlwZTogJ2RhdGVTdHJpbmcnLFxyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ2RhdGVTdHJpbmcnLFxyXG4gICAgICAgIGRhdGVQYXJzZXI6ICh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogcGFyYW1zID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdHRlci5mb3JtYXRUaW1lKHBhcmFtcy52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBjdXJyZW5jeToge1xyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogcGFyYW1zID0+IHBhcmFtcy52YWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICA6IHRoaXMuZm9ybWF0dGVyLmZvcm1hdEN1cnJlbmN5KHBhcmFtcy52YWx1ZSlcclxuICAgICAgfSxcclxuICAgICAgZGVjaW1hbDoge1xyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogcGFyYW1zID0+IHBhcmFtcy52YWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICA6IHRoaXMuZm9ybWF0dGVyLmZvcm1hdE51bWJlcihwYXJhbXMudmFsdWUpXHJcbiAgICAgIH0sXHJcbiAgICAgIGludGVnZXI6IHtcclxuICAgICAgICBleHRlbmRzRGF0YVR5cGU6ICdudW1iZXInLFxyXG4gICAgICAgIGJhc2VEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgdmFsdWVGb3JtYXR0ZXI6IHBhcmFtcyA9PiBwYXJhbXMudmFsdWUgPT0gbnVsbFxyXG4gICAgICAgICAgPyAnJ1xyXG4gICAgICAgICAgOiB0aGlzLmZvcm1hdHRlci5mb3JtYXROdW1iZXIocGFyYW1zLnZhbHVlLCAwKVxyXG4gICAgICB9LFxyXG4gICAgICBwZXJjZW50YWdlOiB7XHJcbiAgICAgICAgZXh0ZW5kc0RhdGFUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgICBiYXNlRGF0YVR5cGU6ICdudW1iZXInLFxyXG4gICAgICAgIHZhbHVlRm9ybWF0dGVyOiBwYXJhbXMgPT4gcGFyYW1zLnZhbHVlID09IG51bGxcclxuICAgICAgICAgID8gJydcclxuICAgICAgICAgIDogYCR7TWF0aC5yb3VuZChwYXJhbXMudmFsdWUgKiAxMDApfSVgLFxyXG4gICAgICB9LFxyXG4gICAgICBmbGFnczoge1xyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAnbnVtYmVyJ1xyXG4gICAgICB9ICAgICAgXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNYXAoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IE1hcFR5cGUge1xyXG5cclxuICAgIGNvbnN0IGFsbG93ZWQgPSAoY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJib29sZWFuXCJcclxuICAgICAgfHwgY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJ0ZXh0XCJcclxuICAgICAgfHwgY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJudW1iZXJcIlxyXG4gICAgICB8fCBjb2xEZWYuY2VsbERhdGFUeXBlID09PSBcImZsYWdzXCIpO1xyXG5cclxuICAgIGlmIChhbGxvd2VkICYmIGNvbHVtbi5tYXApIHtcclxuICAgICAgY29uc3QgbWFwID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGUoZm9ybUdyb3VwLCBjb2x1bW4ubWFwVmFsdWVzKTtcclxuXHJcbiAgICAgIGNvbnN0IHZhbGlkID0gaXNSZWNvcmQoXHJcbiAgICAgICAgbWFwLFxyXG4gICAgICAgIGtleSA9PiB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyB8fCB0eXBlb2Yga2V5ID09PSAnbnVtYmVyJyxcclxuICAgICAgICB2YWwgPT4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZydcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghdmFsaWQpXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICBpZiAoY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJmbGFnc1wiKSB7XHJcbiAgICAgICAgKG1hcCBhcyBhbnkpW2dldExhYmVsU3ltYm9sXSA9IChrZXk6IGFueSkgPT4gdGhpcy5mb3JtYXRGbGFncyhrZXksIG1hcCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBtYXA7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdE1hcCh2YWx1ZTogYW55LCBtYXA6IE1hcFR5cGUpXHJcbiAge1xyXG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIG1hcD8uWydudWxsJ10gPz8gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWFwKSB7XHJcbiAgICAgIHZhciByZXN1bHQgPSBtYXBbdmFsdWVdO1xyXG5cclxuICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc3QgbGFiZWxlZCA9IGlzTGFiZWxlZFJlY29yZChcclxuICAgICAgICAgIG1hcCxcclxuICAgICAgICAgIGtleSA9PiB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyB8fCB0eXBlb2Yga2V5ID09PSAnbnVtYmVyJyxcclxuICAgICAgICAgIHZhbCA9PiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyxcclxuICAgICAgICAgIGdldExhYmVsU3ltYm9sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKGxhYmVsZWQpIHtcclxuICAgICAgICAgIHJlc3VsdCA9IG1hcFtnZXRMYWJlbFN5bWJvbF0odmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgcmV0dXJuIHJlc3VsdCA/PyB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXRGbGFncyh2YWx1ZTogYW55LCBtYXA6IE1hcFR5cGUpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmXHJcbiAgICAgIGlzUmVjb3JkKG1hcCwgaXNOdW1lcmljS2V5LCB2YWwgPT4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpXHJcbiAgICApIHtcclxuICAgICAgaWYgKHZhbHVlID09IDApIHtcclxuICAgICAgICByZXR1cm4gbWFwWzBdID8/IFwiMFwiO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBhdmFpbGFibGVGbGFncyA9IE9iamVjdC5rZXlzKG1hcClcclxuICAgICAgICAubWFwKE51bWJlcilcclxuICAgICAgICAuZmlsdGVyKGZsYWcgPT4gZmxhZyAhPT0gMCk7XHJcblxyXG4gICAgICBjb25zdCBmbGFncyA9IGF2YWlsYWJsZUZsYWdzLmZpbHRlcihmbGFnID0+ICh2YWx1ZSAmIGZsYWcpID09PSBmbGFnKTtcclxuXHJcbiAgICAgIGNvbnN0IHN1bUZsYWdzID0gZmxhZ3MucmVkdWNlKChzdW0sIGYpID0+IHN1bSB8IGYsIDApO1xyXG5cclxuICAgICAgaWYgKCh2YWx1ZSAmIHN1bUZsYWdzKSAhPT0gdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGZsYWdzXHJcbiAgICAgICAgLm1hcChmbGFnID0+IG1hcFtmbGFnXSlcclxuICAgICAgICAuZmlsdGVyKChsYWJlbCk6IGxhYmVsIGlzIHN0cmluZyA9PiAhIWxhYmVsKVxyXG4gICAgICAgIC5qb2luKCcsICcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5hdmlnYXRlSW5zaWRlQ2VsbCh7IGV2ZW50IH06IFN1cHByZXNzS2V5Ym9hcmRFdmVudFBhcmFtczxhbnk+KSB7XHJcbiAgICBjb25zdCBHUklEX0NFTExfQ0xBU1NOQU1FID0gXCJhZy1jZWxsXCI7XHJcbiAgICBjb25zdCB7IGtleSwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0RXZlbnRQYXRoKGV2ZW50KTtcclxuICAgIGNvbnN0IGlzVGFiRm9yd2FyZCA9IGtleSA9PT0gXCJUYWJcIiAmJiBzaGlmdEtleSA9PT0gZmFsc2U7XHJcbiAgICBjb25zdCBpc1RhYkJhY2t3YXJkID0ga2V5ID09PSBcIlRhYlwiICYmIHNoaWZ0S2V5ID09PSB0cnVlO1xyXG4gICAgbGV0IHN1cHByZXNzRXZlbnQgPSBmYWxzZTtcclxuICAgIC8vIEhhbmRsZSBjZWxsIGNoaWxkcmVuIHRhYmJpbmdcclxuICAgIGlmIChpc1RhYkZvcndhcmQgfHwgaXNUYWJCYWNrd2FyZCkge1xyXG4gICAgICBjb25zdCBlR3JpZENlbGwgPSBwYXRoLmZpbmQoKGVsKSA9PiB7XHJcbiAgICAgICAgaWYgKGVsLmNsYXNzTGlzdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIGVsLmNsYXNzTGlzdC5jb250YWlucyhHUklEX0NFTExfQ0xBU1NOQU1FKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICghZUdyaWRDZWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cHByZXNzRXZlbnQ7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZm9jdXNhYmxlQ2hpbGRyZW5FbGVtZW50cyA9IGdldEZvY3VzYWJsZXMoZUdyaWRDZWxsKTtcclxuICAgICAgY29uc3QgbGFzdENlbGxDaGlsZEVsID1cclxuICAgICAgICBmb2N1c2FibGVDaGlsZHJlbkVsZW1lbnRzW2ZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHMubGVuZ3RoIC0gMV07XHJcbiAgICAgIGNvbnN0IGZpcnN0Q2VsbENoaWxkRWwgPSBmb2N1c2FibGVDaGlsZHJlbkVsZW1lbnRzWzBdO1xyXG4gICAgICAvLyBTdXBwcmVzcyBrZXlib2FyZCBldmVudCBpZiB0YWJiaW5nIGZvcndhcmQgd2l0aGluIHRoZSBjZWxsIGFuZCB0aGUgY3VycmVudCBmb2N1c2VkIGVsZW1lbnQgaXMgbm90IHRoZSBsYXN0IGNoaWxkXHJcbiAgICAgIGlmIChmb2N1c2FibGVDaGlsZHJlbkVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBmb2N1c2FibGVDaGlsZHJlbkVsZW1lbnRzLmluZGV4T2YoXHJcbiAgICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCxcclxuICAgICAgKTtcclxuICAgICAgaWYgKGlzVGFiRm9yd2FyZCkge1xyXG4gICAgICAgIGNvbnN0IGlzTGFzdENoaWxkRm9jdXNlZCA9XHJcbiAgICAgICAgICBsYXN0Q2VsbENoaWxkRWwgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gbGFzdENlbGxDaGlsZEVsO1xyXG4gICAgICAgIGlmICghaXNMYXN0Q2hpbGRGb2N1c2VkKSB7XHJcbiAgICAgICAgICBzdXBwcmVzc0V2ZW50ID0gdHJ1ZTtcclxuICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggIT09IC0xIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGVHcmlkQ2VsbCkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBmb2N1c2FibGVDaGlsZHJlbkVsZW1lbnRzW2N1cnJlbnRJbmRleCArIDFdLmZvY3VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIFN1cHByZXNzIGtleWJvYXJkIGV2ZW50IGlmIHRhYmJpbmcgYmFja3dhcmRzIHdpdGhpbiB0aGUgY2VsbCwgYW5kIHRoZSBjdXJyZW50IGZvY3VzZWQgZWxlbWVudCBpcyBub3QgdGhlIGZpcnN0IGNoaWxkXHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGNlbGxIYXNGb2N1c2VkQ2hpbGRyZW4gPVxyXG4gICAgICAgICAgZUdyaWRDZWxsLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpICYmXHJcbiAgICAgICAgICBlR3JpZENlbGwgIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgLy8gTWFudWFsbHkgc2V0IGZvY3VzIHRvIHRoZSBsYXN0IGNoaWxkIGVsZW1lbnQgaWYgY2VsbCBkb2Vzbid0IGhhdmUgZm9jdXNlZCBjaGlsZHJlblxyXG4gICAgICAgIGlmICghY2VsbEhhc0ZvY3VzZWRDaGlsZHJlbikge1xyXG4gICAgICAgICAgbGFzdENlbGxDaGlsZEVsLmZvY3VzKCk7XHJcbiAgICAgICAgICAvLyBDYW5jZWwga2V5Ym9hcmQgcHJlc3MsIHNvIHRoYXQgaXQgZG9lc24ndCBmb2N1cyBvbiB0aGUgbGFzdCBjaGlsZCBhbmQgdGhlbiBwYXNzIHRocm91Z2ggdGhlIGtleWJvYXJkIHByZXNzIHRvXHJcbiAgICAgICAgICAvLyBtb3ZlIHRvIHRoZSAybmQgbGFzdCBjaGlsZCBlbGVtZW50XHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpc0ZpcnN0Q2hpbGRGb2N1c2VkID1cclxuICAgICAgICAgIGZpcnN0Q2VsbENoaWxkRWwgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZmlyc3RDZWxsQ2hpbGRFbDtcclxuICAgICAgICBpZiAoIWlzRmlyc3RDaGlsZEZvY3VzZWQpIHtcclxuICAgICAgICAgIHN1cHByZXNzRXZlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAhPT0gLTEgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZUdyaWRDZWxsKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHNbY3VycmVudEluZGV4IC0gMV0uZm9jdXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzdXBwcmVzc0V2ZW50O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRFdmVudFBhdGgoZXZlbnQ6IEV2ZW50KTogSFRNTEVsZW1lbnRbXSB7XHJcbiAgICBjb25zdCBwYXRoOiBIVE1MRWxlbWVudFtdID0gW107XHJcbiAgICBsZXQgY3VycmVudFRhcmdldDogYW55ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgd2hpbGUgKGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgcGF0aC5wdXNoKGN1cnJlbnRUYXJnZXQpO1xyXG4gICAgICBjdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldC5wYXJlbnRFbGVtZW50O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhdGg7XHJcbiAgfVxyXG59XHJcbiJdfQ==
817
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvZ3JpZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUNHLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLHNCQUFzQixFQUN4RSxZQUFZLEVBQUUsZUFBZSxFQUFvQixZQUFZLEVBQUUsY0FBYyxFQUM3RSxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQ2xFLFdBQVcsRUFBRSxhQUFhLEVBQ2xDLDJCQUEyQixFQUFFLG1CQUFtQixFQUNQLG9CQUFvQixFQUFFLGVBQWUsRUFFaEQsc0JBQXNCLEVBQ3ZELE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDekcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDekcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDL0csT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDakYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFLdEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGlCQUFp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LEdBQ3ZCLGdCQUFnQixJQUFJLFFBQVEsQ0FBQyxhQUFhLEtBQUssZ0JBQWdCLENBQUM7Z0JBQ2xFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO29CQUN6QixhQUFhLEdBQUcsSUFBSSxDQUFDO29CQUNyQixJQUFJLFlBQVksS0FBSyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUNoRSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3ZCLHlCQUF5QixDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDdEQsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQVk7UUFDL0IsTUFBTSxJQUFJLEdBQWtCLEVBQUUsQ0FBQztRQUMvQixJQUFJLGFBQWEsR0FBUSxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ3RDLE9BQU8sYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN6QixhQUFhLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO3dHQS80QlUsV0FBVzs0R0FBWCxXQUFXOzs0RkFBWCxXQUFXO2tCQUR2QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIE1vZHVsZSwgUGFnaW5hdGlvbk1vZHVsZSwgQ2xpZW50U2lkZVJvd01vZGVsTW9kdWxlLCBJbmZpbml0ZVJvd01vZGVsTW9kdWxlXHJcbiAgLCBMb2NhbGVNb2R1bGUsIENlbGxTdHlsZU1vZHVsZSwgVmFsaWRhdGlvbk1vZHVsZSwgUm93QXBpTW9kdWxlLCBSb3dTdHlsZU1vZHVsZSBcclxuICAsIFJvd1NlbGVjdGlvbk1vZHVsZSwgUm93U2VsZWN0aW9uT3B0aW9ucyBcclxuICAsIFRleHRGaWx0ZXJNb2R1bGUsIE51bWJlckZpbHRlck1vZHVsZSwgRGF0ZUZpbHRlck1vZHVsZSwgQ3VzdG9tRmlsdGVyTW9kdWxlXHJcbiAgLCBDb2xEZWYsIHRoZW1lUXVhcnR6LCBpY29uU2V0QWxwaW5lLCBHcmlkT3B0aW9ucywgRGF0YVR5cGVEZWZpbml0aW9uXHJcbiAgLCBDbGllbnRTaWRlUm93TW9kZWxBcGlNb2R1bGUsIFJvd0F1dG9IZWlnaHRNb2R1bGVcclxuICAsIEdyaWRTaXplQ2hhbmdlZEV2ZW50LCBNb2RlbFVwZGF0ZWRFdmVudCwgQ29sdW1uQXV0b1NpemVNb2R1bGUsIENvbHVtbkFwaU1vZHVsZSwgR3JpZEFwaVxyXG4gICwgU3VwcHJlc3NLZXlib2FyZEV2ZW50UGFyYW1zXHJcbiAgLCBHZXRSb3dJZEZ1bmMsIEdldFJvd0lkUGFyYW1zLCBIaWdobGlnaHRDaGFuZ2VzTW9kdWxlXHJcbn0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9iamVjdFVSTFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9vYmplY3RVUkxSZW5kZXJlci9vYmplY3RVUkxSZW5kZXJlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEZWxldGVSb3dSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZGVsZXRlUm93UmVuZGVyZXIvZGVsZXRlUm93UmVuZGVyZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQWN0aW9uc0NlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWN0aW9uc0NlbGxSZW5kZXJlci9hY3Rpb25zQ2VsbFJlbmRlcmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNldEZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2V0RmlsdGVyL3NldEZpbHRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBIb3N0Q2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9ob3N0Q2VsbFJlbmRlcmVyL2hvc3RDZWxsUmVuZGVyZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9ybWF0dGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Zvcm1hdHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFya2Rvd25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWFya2Rvd24uc2VydmljZSc7XHJcbmltcG9ydCB7IFByb2dyYW1tYWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcm9ncmFtbWFiaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IFdlYWtTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvd2Vhay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZ2V0Rm9jdXNhYmxlcyB9IGZyb20gJy4uL3V0aWxzL2ZvY3VzYWJsZSc7XHJcbmltcG9ydCB7IGlzUmVjb3JkLCBpc0xhYmVsZWRSZWNvcmQsIGlzTnVtZXJpY0tleSB9IGZyb20gJy4uL2NvbW1vbi9yZWNvcmQnO1xyXG5pbXBvcnQgeyBnZXRMYWJlbFN5bWJvbCB9IGZyb20gJy4uL2NvbW1vbi9zeW1ib2xzJztcclxuaW1wb3J0IHtcclxuICBBR19HUklEX0xPQ0FMRV9JVCxcclxuICBBR19HUklEX0xPQ0FMRV9FTixcclxuICBBR19HUklEX0xPQ0FMRV9ERSxcclxuICBBR19HUklEX0xPQ0FMRV9GUixcclxuICBBR19HUklEX0xPQ0FMRV9FUyxcclxuICBBR19HUklEX0xPQ0FMRV9QVCAgXHJcbn0gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2xvY2FsZSc7XHJcblxyXG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICdAd2VtYWtlNHUvaW50ZXJhY3QnO1xyXG5pbXBvcnQgeyBUZXh0cyB9IGZyb20gJy4uL2xvY2FsZS9sb2NhbGUnO1xyXG5pbXBvcnQgeyBsb2NhbGl6ZSB9IGZyb20gJy4uL2xvY2FsZS9sb2NhbGl6ZSc7XHJcblxyXG50eXBlIE1hcFR5cGUgPSBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBzdHJpbmc+IHwgbnVsbDtcclxuXHJcbnR5cGUgR3JvdXBOb2RlID0ge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0eXBlOiBcImdyb3VwXCI7XHJcbiAgY29sdW1uczogKEdyb3VwTm9kZSB8IGFueSlbXTtcclxufTtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEdyaWRTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtYXR0ZXI6IEZvcm1hdHRlclNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZVxyXG4gICAgLCBwcml2YXRlIHByb2dyYW1tYWJpbGl0eTogUHJvZ3JhbW1hYmlsaXR5U2VydmljZVxyXG4gICAgLCBwcml2YXRlIG1hcmtkb3duU2VydmljZTogTWFya2Rvd25TZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgd2VhazogV2Vha1NlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIGdldE1vZHVsZXMoKTogTW9kdWxlW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgQ2xpZW50U2lkZVJvd01vZGVsTW9kdWxlXHJcbiAgICAgICwgSW5maW5pdGVSb3dNb2RlbE1vZHVsZVxyXG4gICAgICAsIFBhZ2luYXRpb25Nb2R1bGVcclxuICAgICAgLCBMb2NhbGVNb2R1bGVcclxuICAgICAgLCBDZWxsU3R5bGVNb2R1bGVcclxuICAgICAgLCBDbGllbnRTaWRlUm93TW9kZWxBcGlNb2R1bGVcclxuICAgICAgLCBUZXh0RmlsdGVyTW9kdWxlXHJcbiAgICAgICwgTnVtYmVyRmlsdGVyTW9kdWxlXHJcbiAgICAgICwgRGF0ZUZpbHRlck1vZHVsZVxyXG4gICAgICAsIEN1c3RvbUZpbHRlck1vZHVsZVxyXG4gICAgICAsIENvbHVtbkF1dG9TaXplTW9kdWxlXHJcbiAgICAgICwgQ29sdW1uQXBpTW9kdWxlXHJcbiAgICAgICwgUm93U2VsZWN0aW9uTW9kdWxlXHJcbiAgICAgICwgUm93QXBpTW9kdWxlXHJcbiAgICAgICwgUm93QXV0b0hlaWdodE1vZHVsZVxyXG4gICAgICAsIFJvd1N0eWxlTW9kdWxlIFxyXG4gICAgICAsIEhpZ2hsaWdodENoYW5nZXNNb2R1bGVcclxuICAgICAgLy8sIFZhbGlkYXRpb25Nb2R1bGVcclxuICAgIF07XHJcbiAgfTtcclxuXHJcbiAgZ2V0T3B0aW9ucyhjb21wb25lbnQ6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBHcmlkT3B0aW9ucyB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFJvd1NlbGVjdGlvbihjb21wb25lbnQsIGZvcm1Hcm91cCk7XHJcbiAgICBjb25zdCByb3dJZCA9IHRoaXMuZ2V0Um93SWQoY29tcG9uZW50KTtcclxuICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLmdldFBhZ2luYWJsZShjb21wb25lbnQpO1xyXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLmdldFBhZ2VTaXplKGNvbXBvbmVudCk7XHJcbiAgICBjb25zdCB0ZXh0cyA9IHRoaXMuZ2V0VGV4dHMoKTtcclxuICAgIGNvbnN0IHRoZW1lID0gdGhpcy5nZXRUaGVtZSgpO1xyXG4gICAgY29uc3QgYXV0b0hlaWdodCA9IChjb21wb25lbnQuYXV0b0hlaWdodCA9PT0gdHJ1ZSk7XHJcbiAgICBjb25zdCBvcHRpb25zIDogR3JpZE9wdGlvbnMgPSB7XHJcbiAgICAgIGRlZmF1bHRDb2xEZWY6IHtcclxuICAgICAgICBmbG9hdGluZ0ZpbHRlcjogKGNvbXBvbmVudC5mbG9hdGluZ0ZpbHRlciA9PT0gdHJ1ZSksXHJcbiAgICAgICAgaGVhZGVyQ2xhc3M6IChjb21wb25lbnQuZmxvYXRpbmdGaWx0ZXIgPT09IHRydWUpXHJcbiAgICAgICAgICA/ICdzaG93LWZpbHRlcicgOiAnaGlkZS1maWx0ZXInXHJcbiAgICAgIH0sXHJcbiAgICAgIHNlbGVjdGlvbkNvbHVtbkRlZjoge1xyXG4gICAgICAgIHBpbm5lZDogJ2xlZnQnXHJcbiAgICAgIH0sXHJcbiAgICAgIGRhdGFUeXBlRGVmaW5pdGlvbnM6IHRoaXMuZ2V0RGF0YVR5cGVEZWZpbml0aW9ucygpLFxyXG4gICAgICByb3dTZWxlY3Rpb246IHNlbGVjdGlvbixcclxuICAgICAgcGFnaW5hdGlvbjogcGFnaW5hdGlvbixcclxuICAgICAgcGFnaW5hdGlvblBhZ2VTaXplOiBwYWdlU2l6ZSxcclxuICAgICAgY2FjaGVCbG9ja1NpemU6IHBhZ2VTaXplLFxyXG4gICAgICBwYWdpbmF0aW9uUGFnZVNpemVTZWxlY3RvcjogWzUsIDEwLCAyMCwgNTBdLFxyXG4gICAgICBsb2NhbGVUZXh0OiB0ZXh0cyxcclxuICAgICAgZW5hYmxlQ2VsbFRleHRTZWxlY3Rpb246IHRydWUsXHJcbiAgICAgIHRoZW1lOiB0aGVtZSxcclxuICAgICAgZ2V0Um93SWQ6IHJvd0lkLFxyXG4gICAgICBkb21MYXlvdXQ6IGF1dG9IZWlnaHQgPyBcImF1dG9IZWlnaHRcIiA6IHVuZGVmaW5lZCxcclxuICAgICAgb25HcmlkU2l6ZUNoYW5nZWQ6IChwYXJhbXM6IEdyaWRTaXplQ2hhbmdlZEV2ZW50KSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVHcmlkKGNvbXBvbmVudCwgcGFyYW1zLmFwaSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uTW9kZWxVcGRhdGVkOiAocGFyYW1zOiBNb2RlbFVwZGF0ZWRFdmVudCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVzaXplR3JpZChjb21wb25lbnQsIHBhcmFtcy5hcGkpO1xyXG4gICAgICAgIHRoaXMub25Sb3dTZWxlY3RpbmcoY29tcG9uZW50LCBmb3JtR3JvdXAsIHBhcmFtcyk7ICAgICAgICBcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRoaXMuc2V0Um93U3R5bGUoY29tcG9uZW50LCBvcHRpb25zLCBmb3JtR3JvdXApO1xyXG4gICAgcmV0dXJuIG9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICBnZXRDb2x1bW5EZWZzKGNvbXBvbmVudDogYW55LCBjb2x1bW5zOiBhbnksIGZvcm1Hcm91cDogRm9ybUdyb3VwKTogQ29sRGVmW10ge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29sdW1ucykpIHtcclxuICAgICAgY29uc3QgZ3JvdXBlZENvbHVtbnMgPSB0aGlzLmdyb3VwQ29sdW1ucyhjb2x1bW5zKTtcclxuICAgICAgY29uc3QgY29sdW1uRGVmcyA9IHRoaXMuZ3JvdXBzVG9Db2x1bW5EZWZzKGdyb3VwZWRDb2x1bW5zXHJcbiAgICAgICAgLCAoY3MpID0+IHRoaXMuY3JlYXRlQ29sdW1uRGVmcyhjb21wb25lbnQsIGNzLCBmb3JtR3JvdXApKTtcclxuXHJcbiAgICAgIHRoaXMuYWRkQWN0aW9uQ29sdW1uRGVmKGNvbXBvbmVudCwgY29sdW1uRGVmcywgZm9ybUdyb3VwKTtcclxuICAgICAgdGhpcy5hZGRSb3dOdW1iZXJzQ29sdW1uRGVmKGNvbXBvbmVudCwgY29sdW1uRGVmcyk7XHJcblxyXG4gICAgICByZXR1cm4gY29sdW1uRGVmcztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGlvbkNoYW5nZWQoY29tcG9uZW50OiBhbnksIGZvcm1Hcm91cDogRm9ybUdyb3VwLCBldmVudDogYW55KSB7XHJcbiAgICBpZiAoY29tcG9uZW50LnNlbGVjdGlvbkNoYW5nZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlKGZvcm1Hcm91cCwgY29tcG9uZW50LnNlbGVjdGlvbkNoYW5nZWQsIHtcclxuICAgICAgICBjYWNoZWFibGU6IGZhbHNlLFxyXG4gICAgICAgIGV4dGVuZENvbnRleHQ6ICgpID0+ICh7XHJcbiAgICAgICAgICBcImV2ZW50XCI6IHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRSb3dzOiBldmVudC5hcGkuZ2V0U2VsZWN0ZWRSb3dzKClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENhY2hlS2V5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYGdldEdyaWRPcHRpb25zXyR7dGhpcy5sYW5ndWFnZX1gO1xyXG4gIH1cclxuXHJcbiAgaW52YWxpZGF0ZU9wdGlvbnMoY29tcG9uZW50OiBhbnkpIHtcclxuICAgIHRoaXMud2Vhay5pbnZhbGlkYXRlKGNvbXBvbmVudCwgdGhpcy5nZXRDYWNoZUtleSgpKTtcclxuICB9XHJcblxyXG4gIG9uUm93RGF0YUNoYW5nZWQoY29tcG9uZW50OiBhbnksIGFwaTogR3JpZEFwaSwgcm93RGF0YTogYW55KSB7ICAgIFxyXG4gICAgaWYgKHRoaXMuaGFzUm93TnVtYmVycyhjb21wb25lbnQpICYmIHRoaXMuaGFzUm93SWQoY29tcG9uZW50KSkge1xyXG4gICAgICB0aGlzLnJlZnJlc2hSb3dOdW1iZXJzKGFwaSk7XHJcbiAgICB9ICAgICAgXHJcbiAgfVxyXG5cclxuICBvbkRhdGFTb3VyY2VDaGFuZ2VkKGNvbXBvbmVudDogYW55LCBhcGk6IEdyaWRBcGksIGRhdGFTb3VyY2U6IGFueSkge1xyXG4gICAgLy8gTm90aGluZ1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgbGFuZ3VhZ2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmxhbmd1YWdlU2VydmljZS5nZXRMYW5ndWFnZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2NhbGUoY29tcG9uZW50OiBhbnksIGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBsb2NhbGl6ZSh0aGlzLmxhbmd1YWdlLCBjb21wb25lbnQsIGtleSk7XHJcbiAgfVxyXG5cclxuICByZXNpemVHcmlkKGNvbXBvbmVudDogYW55LCBhcGk6IEdyaWRBcGkpIHtcclxuICAgIGNvbnN0IGNvbHVtbnNUb1Jlc2l6ZTogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5oYXNBY3Rpb25zKGNvbXBvbmVudCkpIHtcclxuICAgICAgY29sdW1uc1RvUmVzaXplLnB1c2goJ2FjdGlvbnMnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5oYXNSb3dOdW1iZXJzKGNvbXBvbmVudCkpIHtcclxuICAgICAgY29sdW1uc1RvUmVzaXplLnB1c2goJ3Jvd051bWJlcnMnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sdW1uc1RvUmVzaXplLmxlbmd0aCA+IDApIHtcclxuICAgICAgYXBpLmF1dG9TaXplQ29sdW1ucyhjb2x1bW5zVG9SZXNpemUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNBY3Rpb25zKGNvbXBvbmVudDogYW55KSB7XHJcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjb21wb25lbnQuYWN0aW9ucykgJiYgY29tcG9uZW50LmFjdGlvbnMubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzUm93TnVtYmVycyhjb21wb25lbnQ6IGFueSkge1xyXG4gICAgcmV0dXJuIChjb21wb25lbnQucm93TnVtYmVycyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUNvbHVtbkRlZnMoY29tcG9uZW50OiBhbnksIGNvbHVtbnM6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBDb2xEZWZbXSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb2x1bW5zKSkge1xyXG4gICAgICBjb25zdCBjb2x1bW5EZWZzID0gY29sdW1ucy5tYXAoKGNvbHVtbjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29sRGVmOiBDb2xEZWYgPSB7XHJcbiAgICAgICAgICBmaWVsZDogY29sdW1uLmtleSxcclxuICAgICAgICAgIGhlYWRlck5hbWU6IHRoaXMubG9jYWxlKGNvbHVtbiwgJ2xhYmVsJylcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0Q2VsbERhdGFUeXBlKGNvbHVtbiwgY29sRGVmKTtcclxuXHJcbiAgICAgICAgY29uc3QgbWFwID0gdGhpcy5nZXRNYXAoY29sdW1uLCBjb2xEZWYsIGZvcm1Hcm91cCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0Q2VsbFJlbmRlcmVyKGNvbHVtbiwgY29sRGVmLCBtYXAsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgdGhpcy5zZXRDb2xTdHlsZXMoY29sdW1uLCBjb2xEZWYsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgdGhpcy5zZXRBdXRvSGVpZ2h0KGNvbHVtbiwgY29sRGVmKTtcclxuICAgICAgICB0aGlzLnNldFJlc2l6YWJsZShjb2x1bW4sIGNvbERlZik7XHJcbiAgICAgICAgdGhpcy5zZXRTb3J0YWJsZShjb2x1bW4sIGNvbERlZik7XHJcbiAgICAgICAgdGhpcy5zZXRGaWx0ZXIoY29sdW1uLCBjb2xEZWYsIG1hcCk7XHJcbiAgICAgICAgdGhpcy5zZXRGaWx0ZXJQYXJhbXMoY29sdW1uLCBjb2xEZWYsIG1hcCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdXBwcmVzc01vdmFibGUoY29sdW1uLCBjb2xEZWYpO1xyXG4gICAgICAgIHRoaXMuc2V0RmxleChjb2x1bW4sIGNvbERlZik7XHJcbiAgICAgICAgdGhpcy5zZXRBbGlnbihjb2x1bW4sIGNvbERlZik7XHJcbiAgICAgICAgdGhpcy5zZXRQaW5uZWQoY29sdW1uLCBjb2xEZWYpO1xyXG4gICAgICAgIHRoaXMuc2V0V2lkdGgoY29sdW1uLCBjb2xEZWYpO1xyXG4gICAgICAgIHRoaXMuc2V0VmFsdWVGb3JtYXR0ZXIoY29sdW1uLCBjb2xEZWYsIG1hcCk7XHJcbiAgICAgICAgdGhpcy5zZXRDZWxsQ2hhbmdlRmxhc2goY29sdW1uLCBjb2xEZWYpO1xyXG5cclxuICAgICAgICByZXR1cm4gY29sRGVmO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBjb2x1bW5EZWZzO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkQWN0aW9uQ29sdW1uRGVmKGNvbXBvbmVudDogYW55LCBjb2x1bW5EZWZzOiBDb2xEZWZbXSwgZm9ybUdyb3VwOiBGb3JtR3JvdXApIHtcclxuICAgIGlmICh0aGlzLmhhc0FjdGlvbnMoY29tcG9uZW50KSkge1xyXG4gICAgICBjb2x1bW5EZWZzLnB1c2goe1xyXG4gICAgICAgIGNvbElkOiAnYWN0aW9ucycsXHJcbiAgICAgICAgaGVhZGVyTmFtZTogdGhpcy5sb2NhbGUoVGV4dHMsICdBY3Rpb25zJyksXHJcbiAgICAgICAgcmVzaXphYmxlOiBmYWxzZSxcclxuICAgICAgICBzb3J0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgZmlsdGVyOiBmYWxzZSxcclxuICAgICAgICBjZWxsRGF0YVR5cGU6IGZhbHNlLFxyXG4gICAgICAgIGhpZGU6IHRoaXMuc3VwcHJlc3NBY3Rpb25zKGNvbXBvbmVudCwgZm9ybUdyb3VwKSxcclxuICAgICAgICBwaW5uZWQ6IFwicmlnaHRcIiwgICAgICAgIFxyXG4gICAgICAgIGNlbGxSZW5kZXJlclBhcmFtczoge1xyXG4gICAgICAgICAgY29tcG9uZW50OiBjb21wb25lbnQsXHJcbiAgICAgICAgICBmb3JtR3JvdXA6IGZvcm1Hcm91cFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2VsbFJlbmRlcmVyOiBBY3Rpb25zQ2VsbFJlbmRlcmVyQ29tcG9uZW50LFxyXG4gICAgICAgIHN1cHByZXNzS2V5Ym9hcmRFdmVudDogdGhpcy5uYXZpZ2F0ZUluc2lkZUNlbGwuYmluZCh0aGlzKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkUm93TnVtYmVyc0NvbHVtbkRlZihjb21wb25lbnQ6IGFueSwgY29sdW1uRGVmczogQ29sRGVmW10pIHsgICAgXHJcbiAgICBpZiAodGhpcy5oYXNSb3dOdW1iZXJzKGNvbXBvbmVudCkpIHtcclxuICAgICAgY29sdW1uRGVmcy51bnNoaWZ0KHtcclxuICAgICAgICBjb2xJZDogJ3Jvd051bWJlcnMnLFxyXG4gICAgICAgIGhlYWRlck5hbWU6IFwiI1wiLFxyXG4gICAgICAgIHBpbm5lZDogXCJsZWZ0XCIsXHJcbiAgICAgICAgaGVhZGVyQ2xhc3M6ICdyb3ctbnVtYmVycy1oZWFkZXInLFxyXG4gICAgICAgIGNlbGxDbGFzczogJ3Jvdy1udW1iZXJzLWNlbGwnLFxyXG4gICAgICAgIHJlc2l6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgc29ydGFibGU6IGZhbHNlLFxyXG4gICAgICAgIHZhbHVlR2V0dGVyOiAobjogYW55KSA9PiBuLm5vZGUucm93SW5kZXggKyAxXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoUm93TnVtYmVycyhhcGk6IEdyaWRBcGkpIHtcclxuICAgIGlmIChhcGkpIHtcclxuICAgICAgY29uc3Qgcm93TnVtYmVycyA9IFtcInJvd051bWJlcnNcIl07XHJcbiAgICAgIGFwaS5zZXRDb2x1bW5zVmlzaWJsZShyb3dOdW1iZXJzLCBmYWxzZSk7XHJcbiAgICAgIGFwaS5zZXRDb2x1bW5zVmlzaWJsZShyb3dOdW1iZXJzLCB0cnVlKTsgIFxyXG4gICAgfSAgICBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ3JvdXBDb2x1bW5zKGNvbHVtbnM6IGFueVtdKTogKEdyb3VwTm9kZSB8IGFueSlbXSB7XHJcbiAgICBjb25zdCByb290SXRlbXNPcmRlcmVkOiAoR3JvdXBOb2RlIHwgYW55KVtdID0gW107XHJcblxyXG4gICAgZnVuY3Rpb24gZmluZE9yQ3JlYXRlR3JvdXAoXHJcbiAgICAgIGdyb3VwczogKEdyb3VwTm9kZSB8IGFueSlbXSxcclxuICAgICAgbmFtZTogc3RyaW5nXHJcbiAgICApOiBHcm91cE5vZGUge1xyXG4gICAgICBsZXQgZ3JvdXAgPSBncm91cHMuZmluZChcclxuICAgICAgICBpdGVtID0+IChpdGVtIGFzIEdyb3VwTm9kZSkudHlwZSA9PT0gXCJncm91cFwiICYmIChpdGVtIGFzIEdyb3VwTm9kZSkubmFtZSA9PT0gbmFtZVxyXG4gICAgICApIGFzIEdyb3VwTm9kZTtcclxuXHJcbiAgICAgIGlmICghZ3JvdXApIHtcclxuICAgICAgICBncm91cCA9IHtcclxuICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICB0eXBlOiBcImdyb3VwXCIsXHJcbiAgICAgICAgICBjb2x1bW5zOiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGdyb3Vwcy5wdXNoKGdyb3VwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGdyb3VwO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuICAgICAgY29uc3QgZ3JvdXBQYXJ0cyA9IChjb2x1bW4uZ3JvdXAgPz8gXCJcIilcclxuICAgICAgICAuc3BsaXQoL1tcXFxcL10vKVxyXG4gICAgICAgIC5tYXAoKHBhcnQ6IHN0cmluZykgPT4gcGFydC50cmltKCkpXHJcbiAgICAgICAgLmZpbHRlcigocGFydDogc3RyaW5nKSA9PiBwYXJ0Lmxlbmd0aCA+IDApO1xyXG5cclxuICAgICAgaWYgKGdyb3VwUGFydHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcm9vdEl0ZW1zT3JkZXJlZC5wdXNoKGNvbHVtbik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRMZXZlbCA9IHJvb3RJdGVtc09yZGVyZWQ7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBncm91cFBhcnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXJ0ID0gZ3JvdXBQYXJ0c1tpXTtcclxuICAgICAgICAgIGNvbnN0IGdyb3VwID0gZmluZE9yQ3JlYXRlR3JvdXAoY3VycmVudExldmVsLCBwYXJ0KTtcclxuICAgICAgICAgIGN1cnJlbnRMZXZlbCA9IGdyb3VwLmNvbHVtbnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cnJlbnRMZXZlbC5wdXNoKGNvbHVtbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcm9vdEl0ZW1zT3JkZXJlZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ3JvdXBzVG9Db2x1bW5EZWZzKGdyb3VwZWQ6IChHcm91cE5vZGUgfCBhbnkpW10sIGdldENvbHVtbnNEZWY6IChjb2x1bW5zOiBhbnlbXSkgPT4gQ29sRGVmW10pOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gZ3JvdXBlZC5tYXAoaXRlbSA9PiB7XHJcbiAgICAgIGlmICgndHlwZScgaW4gaXRlbSAmJiBpdGVtLnR5cGUgPT09ICdncm91cCcpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgaGVhZGVyTmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgY2hpbGRyZW46IHRoaXMuZ3JvdXBzVG9Db2x1bW5EZWZzKGl0ZW0uY29sdW1ucywgZ2V0Q29sdW1uc0RlZilcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBnZXRDb2x1bW5zRGVmKFtpdGVtXSlbMF07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDZWxsRGF0YVR5cGUoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmKSB7XHJcbiAgICBpZiAoY29sdW1uLmRhdGFUeXBlID09PSBcImNvbXBvbmVudFwiXHJcbiAgICAgIHx8IGNvbHVtbi5kYXRhVHlwZSA9PT0gXCJmb3JtYXR0ZWRcIlxyXG4gICAgICB8fCBjb2x1bW4uZGF0YVR5cGUgPT09IFwiYXV0b1wiKSByZXR1cm47XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4uZGF0YVR5cGUgPT09IFwic3RyaW5nXCJcclxuICAgICAgJiYgY29sdW1uLmRhdGFUeXBlLnRyaW0oKSAhPT0gXCJcIikge1xyXG4gICAgICBjb2xEZWYuY2VsbERhdGFUeXBlID0gY29sdW1uLmRhdGFUeXBlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRSb3dTdHlsZShjb21wb25lbnQ6IGFueSwgZ3JpZE9wdGlvbnM6IEdyaWRPcHRpb25zLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCkge1xyXG4gICAgdGhpcy5hcHBseVN0eWxlKGdyaWRPcHRpb25zLCBmb3JtR3JvdXAsIGNvbXBvbmVudC5yb3dDbGFzcywgXCJnZXRSb3dDbGFzc1wiLCBcInJvd0NsYXNzXCIpO1xyXG4gICAgdGhpcy5hcHBseVN0eWxlKGdyaWRPcHRpb25zLCBmb3JtR3JvdXAsIGNvbXBvbmVudC5yb3dTdHlsZSwgXCJnZXRSb3dTdHlsZVwiLCBcInJvd1N0eWxlXCIpO1xyXG4gICAgdGhpcy5hcHBseVN0eWxlKGdyaWRPcHRpb25zLCBmb3JtR3JvdXAsIGNvbXBvbmVudC5yb3dDbGFzc1J1bGVzLCBcInJvd0NsYXNzUnVsZXNcIiwgXCJyb3dDbGFzc1J1bGVzXCIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDb2xTdHlsZXMoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCkge1xyXG4gICAgdGhpcy5hcHBseVN0eWxlKGNvbERlZiwgZm9ybUdyb3VwLCBjb2x1bW4uaGVhZGVyQ2xhc3MsIFwiaGVhZGVyQ2xhc3NcIiwgXCJoZWFkZXJDbGFzc1wiKTtcclxuICAgIHRoaXMuYXBwbHlTdHlsZShjb2xEZWYsIGZvcm1Hcm91cCwgY29sdW1uLmhlYWRlclN0eWxlLCBcImhlYWRlclN0eWxlXCIsIFwiaGVhZGVyU3R5bGVcIik7XHJcbiAgICB0aGlzLmFwcGx5U3R5bGUoY29sRGVmLCBmb3JtR3JvdXAsIGNvbHVtbi5jZWxsQ2xhc3MsIFwiY2VsbENsYXNzXCIsIFwiY2VsbENsYXNzXCIpO1xyXG4gICAgdGhpcy5hcHBseVN0eWxlKGNvbERlZiwgZm9ybUdyb3VwLCBjb2x1bW4uY2VsbFN0eWxlLCBcImNlbGxTdHlsZVwiLCBcImNlbGxTdHlsZVwiKTtcclxuICAgIHRoaXMuYXBwbHlTdHlsZShjb2xEZWYsIGZvcm1Hcm91cCwgY29sdW1uLmNlbGxDbGFzc1J1bGVzLCBcImNlbGxDbGFzc1J1bGVzXCIsIFwiY2VsbENsYXNzUnVsZXNcIik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENlbGxSZW5kZXJlcihjb2x1bW46IGFueSwgY29sRGVmOiBDb2xEZWYsIG1hcDogTWFwVHlwZSwgZm9ybUdyb3VwOiBGb3JtR3JvdXApIHtcclxuICAgIGlmIChjb2x1bW4uZm9ybWF0ID09PSBcIm9iamVjdFVSTFwiKSB7XHJcbiAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSBPYmplY3RVUkxSZW5kZXJlckNvbXBvbmVudDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sdW1uLmZvcm1hdCA9PT0gXCJkZWxldGVSb3dcIikge1xyXG4gICAgICBjb2xEZWYuY2VsbFJlbmRlcmVyID0gRGVsZXRlUm93UmVuZGVyZXJDb21wb25lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbERlZi5jZWxsRGF0YVR5cGUgPT09IFwiYm9vbGVhblwiICYmIG1hcCkge1xyXG4gICAgICBjb2xEZWYuY2VsbFJlbmRlcmVyID0gKHBhcmFtczogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0TWFwKHBhcmFtcy52YWx1ZSwgbWFwKTsgXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sdW1uLmRhdGFUeXBlID09PSBcImZvcm1hdHRlZFwiKSB7XHJcbiAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSAocGFyYW1zOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYXJrZG93blNlcnZpY2UudG9IdG1sKHBhcmFtcy52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sdW1uLmRhdGFUeXBlID09PSBcImNvbXBvbmVudFwiKSB7XHJcbiAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSBIb3N0Q2VsbFJlbmRlcmVyQ29tcG9uZW50O1xyXG4gICAgICBjb2xEZWYuY2VsbFJlbmRlcmVyUGFyYW1zID0ge1xyXG4gICAgICAgIGNvbXBvbmVudFR5cGU6IGNvbHVtbi5jb21wb25lbnQsXHJcbiAgICAgICAgcHJvcGVydGllczogY29sdW1uLnByb3BlcnRpZXMsXHJcbiAgICAgICAgZm9ybUdyb3VwOiBmb3JtR3JvdXBcclxuICAgICAgfTtcclxuICAgICAgY29sRGVmLmNlbGxDbGFzcyA9ICdjZWxsLWNvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDZWxsQ2hhbmdlRmxhc2goY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmKSB7XHJcbiAgICBjb2xEZWYuZW5hYmxlQ2VsbENoYW5nZUZsYXNoID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0QXV0b0hlaWdodChjb2x1bW46IGFueSwgY29sRGVmOiBDb2xEZWYpIHtcclxuICAgIGlmIChjb2x1bW4uYXV0b0hlaWdodCkge1xyXG4gICAgICBjb2xEZWYuYXV0b0hlaWdodCA9IHRydWU7XHJcbiAgICAgIGNvbERlZi53cmFwVGV4dCA9IHRydWU7XHJcbiAgICB9ICBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UmVzaXphYmxlKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZiApIHtcclxuICAgIGNvbERlZi5yZXNpemFibGUgPSAoY29sdW1uLnJlc2l6ZSA9PT0gdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNvcnRhYmxlKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZikge1xyXG4gICAgY29sRGVmLnNvcnRhYmxlID0gKGNvbHVtbi5zb3J0ID09PSB0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RmlsdGVyKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZiwgbWFwOiBNYXBUeXBlKSB7XHJcbiAgICBpZiAoY29sdW1uLmZpbHRlciA9PT0gdHJ1ZSkge1xyXG4gICAgICBjb2xEZWYuZmlsdGVyID0gdHJ1ZTtcclxuICAgICAgaWYgKG1hcCkge1xyXG4gICAgICAgIGNvbERlZi5maWx0ZXIgPSBTZXRGaWx0ZXJDb21wb25lbnQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RmlsdGVyUGFyYW1zKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZiwgbWFwOiBNYXBUeXBlKSB7XHJcblxyXG4gICAgY29uc3QgZmlsdGVyUGFyYW1zOiBhbnkgPSB7fTtcclxuXHJcbiAgICBpZiAoY29sdW1uLmRhdGFUeXBlID09PSAndXVpZCcpIHtcclxuICAgICAgdGhpcy5zZXRVdWlkRmlsdGVyUGFyYW1zKGZpbHRlclBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICdpbnRlZ2VyJykge1xyXG4gICAgICB0aGlzLnNldEludGVnZXJGaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgIHRoaXMuc2V0RGF0ZUZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgdGhpcy5zZXRCb29sZWFuRmlsdGVyUGFyYW1zKGZpbHRlclBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmIChtYXApIHtcclxuICAgICAgZmlsdGVyUGFyYW1zLm1hcCA9IG1hcDtcclxuICAgIH1cclxuXHJcbiAgICBjb2xEZWYuZmlsdGVyUGFyYW1zID0gZmlsdGVyUGFyYW1zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVdWlkRmlsdGVyUGFyYW1zKGZpbHRlclBhcmFtczogYW55KSB7XHJcbiAgICBmaWx0ZXJQYXJhbXMuZmlsdGVyT3B0aW9ucyA9IFsnZXF1YWxzJywgJ25vdEVxdWFsJ107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEludGVnZXJGaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zOiBhbnkpIHtcclxuICAgIGZpbHRlclBhcmFtcy5hbGxvd2VkQ2hhclBhdHRlcm4gPSAnXFxcXGQnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXREYXRlRmlsdGVyUGFyYW1zKGZpbHRlclBhcmFtczogYW55KSB7XHJcbiAgICBmaWx0ZXJQYXJhbXMuY29tcGFyYXRvciA9IChmaWx0ZXJMb2NhbERhdGVBdE1pZG5pZ2h0OiBEYXRlLCBjZWxsVmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAoIWNlbGxWYWx1ZSkgcmV0dXJuIC0xO1xyXG4gICAgICBjb25zdCBjZWxsRGF0ZSA9IG5ldyBEYXRlKGNlbGxWYWx1ZSk7XHJcbiAgICAgIGlmIChpc05hTihjZWxsRGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICBjb25zdCBjZWxsRGF0ZU5vVGltZSA9IG5ldyBEYXRlKGNlbGxEYXRlLmdldEZ1bGxZZWFyKCksIGNlbGxEYXRlLmdldE1vbnRoKCksIGNlbGxEYXRlLmdldERhdGUoKSk7XHJcblxyXG4gICAgICBpZiAoY2VsbERhdGVOb1RpbWUgPCBmaWx0ZXJMb2NhbERhdGVBdE1pZG5pZ2h0KSByZXR1cm4gLTE7XHJcbiAgICAgIGlmIChjZWxsRGF0ZU5vVGltZSA+IGZpbHRlckxvY2FsRGF0ZUF0TWlkbmlnaHQpIHJldHVybiAxO1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Qm9vbGVhbkZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXM6IGFueSkge1xyXG4gICAgZmlsdGVyUGFyYW1zLmZpbHRlck9wdGlvbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBkaXNwbGF5S2V5OiAnaW5jbHVkZUFsbCcsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFRleHRzLkNob29zZU9uZSxcclxuICAgICAgICBudW1iZXJPZklucHV0czogMCxcclxuICAgICAgICBwcmVkaWNhdGU6IChbZmlsdGVyXTogW2FueV0sIHZhbHVlOiBhbnkpID0+IHRydWVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGRpc3BsYXlLZXk6ICd0cnVlJyxcclxuICAgICAgICBkaXNwbGF5TmFtZTogVGV4dHMuVHJ1ZSxcclxuICAgICAgICBudW1iZXJPZklucHV0czogMCxcclxuICAgICAgICBwcmVkaWNhdGU6IChbZmlsdGVyXTogW2FueV0sIHZhbHVlOiBhbnkpID0+IHZhbHVlID09PSB0cnVlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBkaXNwbGF5S2V5OiAnZmFsc2UnLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBUZXh0cy5GYWxzZSxcclxuICAgICAgICBudW1iZXJPZklucHV0czogMCxcclxuICAgICAgICBwcmVkaWNhdGU6IChbZmlsdGVyXTogW2FueV0sIHZhbHVlOiBhbnkpID0+IHZhbHVlID09PSBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZGlzcGxheUtleTogJ2JsYW5rJyxcclxuICAgICAgICBkaXNwbGF5TmFtZTogVGV4dHMuQmxhbmssXHJcbiAgICAgICAgbnVtYmVyT2ZJbnB1dHM6IDAsXHJcbiAgICAgICAgcHJlZGljYXRlOiAoW2ZpbHRlcl06IFthbnldLCB2YWx1ZTogYW55KSA9PiB2YWx1ZSA9PT0gbnVsbFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZGlzcGxheUtleTogJ25vdEJsYW5rJyxcclxuICAgICAgICBkaXNwbGF5TmFtZTogVGV4dHMuTm90QmxhbmssXHJcbiAgICAgICAgbnVtYmVyT2ZJbnB1dHM6IDAsXHJcbiAgICAgICAgcHJlZGljYXRlOiAoW2ZpbHRlcl06IFthbnldLCB2YWx1ZTogYW55KSA9PiB2YWx1ZSAhPT0gbnVsbFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICAgIGZpbHRlclBhcmFtcy5zdXBwcmVzc0FuZE9yQ29uZGl0aW9uID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U3VwcHJlc3NNb3ZhYmxlKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZikge1xyXG4gICAgaWYgKCEoY29sdW1uLm1vdmUgPT09IHRydWUpKSB7IFxyXG4gICAgICBjb2xEZWYuc3VwcHJlc3NNb3ZhYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RmxleChjb2x1bW46IGFueSwgY29sRGVmOiBDb2xEZWYpIHtcclxuICAgIGlmIChjb2x1bW4uZmxleCA9PT0gdHJ1ZSkgeyBcclxuICAgICAgY29sRGVmLmZsZXggPSAxO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRBbGlnbihjb2x1bW46IGFueSwgY29sRGVmOiBDb2xEZWYpIHtcclxuICAgIGlmIChjb2x1bW4uYWxpZ24gPT09IFwibGVmdFwiKSB7XHJcbiAgICAgIGNvbERlZi5jZWxsU3R5bGUgPSB7IHRleHRBbGlnbjogJ2xlZnQnIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb2x1bW4uYWxpZ24gPT09IFwiY2VudGVyXCIpIHtcclxuICAgICAgY29sRGVmLmNlbGxTdHlsZSA9IHsgdGV4dEFsaWduOiAnY2VudGVyJyB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sdW1uLmFsaWduID09PSBcInJpZ2h0XCIpIHsgXHJcbiAgICAgIGNvbERlZi5jZWxsU3R5bGUgPSB7IHRleHRBbGlnbjogJ3JpZ2h0JyB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRQaW5uZWQoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmKSB7XHJcbiAgICBpZiAodHlwZW9mIGNvbHVtbi5waW5uZWQgPT09IFwic3RyaW5nXCIpIHsgXHJcbiAgICAgIGNvbERlZi5waW5uZWQgPSBjb2x1bW4ucGlubmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRXaWR0aChjb2x1bW46IGFueSwgY29sRGVmOiBDb2xEZWYpIHtcclxuICAgIGlmICh0eXBlb2YgY29sdW1uLndpZHRoID09PSBcIm51bWJlclwiKSB7IFxyXG4gICAgICBjb2xEZWYud2lkdGggPSBjb2x1bW4ud2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4ubWluV2lkdGggPT09IFwibnVtYmVyXCIpIHsgXHJcbiAgICAgIGNvbERlZi5taW5XaWR0aCA9IGNvbHVtbi5taW5XaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGNvbHVtbi5tYXhXaWR0aCA9PT0gXCJudW1iZXJcIikgeyBcclxuICAgICAgY29sRGVmLm1heFdpZHRoID0gY29sdW1uLm1heFdpZHRoO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRWYWx1ZUZvcm1hdHRlcihjb2x1bW46IGFueSwgY29sRGVmOiBDb2xEZWYsIG1hcDogTWFwVHlwZSkge1xyXG4gICAgaWYgKG1hcCkge1xyXG4gICAgICBjb2xEZWYudmFsdWVGb3JtYXR0ZXIgPSAocGFyYW1zKSA9PiB0aGlzLmZvcm1hdE1hcChwYXJhbXMudmFsdWUsIG1hcCk7ICAgICAgXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSb3dTZWxlY3Rpb24oY29tcG9uZW50OiBhbnksIGZvcm1Hcm91cDogRm9ybUdyb3VwKTogUm93U2VsZWN0aW9uT3B0aW9ucyB8IHVuZGVmaW5lZCAge1xyXG4gICAgbGV0IG9wdGlvbnM6IFJvd1NlbGVjdGlvbk9wdGlvbnMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RhYmxlKGNvbXBvbmVudCwgZm9ybUdyb3VwKSkge1xyXG4gICAgICBpZiAodGhpcy5tdWx0aVNlbGVjdChjb21wb25lbnQsIGZvcm1Hcm91cCkpIHtcclxuICAgICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgICAgbW9kZTogXCJtdWx0aVJvd1wiLFxyXG4gICAgICAgICAgc2VsZWN0QWxsOiAnZmlsdGVyZWQnLFxyXG4gICAgICAgICAgaGlkZURpc2FibGVkQ2hlY2tib3hlczogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IHsgbW9kZTogXCJzaW5nbGVSb3dcIiB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY29tcG9uZW50LnJvd1NlbGVjdGFibGUpIHtcclxuICAgICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICAgIGlzUm93U2VsZWN0YWJsZTogKHJvd05vZGUpID0+IHRoaXMub25Sb3dTZWxlY3RhYmxlKGNvbXBvbmVudCwgZm9ybUdyb3VwLCByb3dOb2RlLmRhdGEpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhc1Jvd0lkKGNvbXBvbmVudDogYW55KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIGNvbXBvbmVudC5yb3dJZCA9PT0gJ3N0cmluZycgJiYgY29tcG9uZW50LnJvd0lkLnRyaW0oKSAhPT0gJyc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJvd0lkKGNvbXBvbmVudDogYW55KTogR2V0Um93SWRGdW5jPGFueT4gfCB1bmRlZmluZWRcclxuICB7XHJcbiAgICBpZiAodGhpcy5oYXNSb3dJZChjb21wb25lbnQpKSB7XHJcbiAgICAgIHJldHVybiAocGFyYW1zOiBHZXRSb3dJZFBhcmFtczxhbnk+KSA9PiBwYXJhbXMuZGF0YVtjb21wb25lbnQucm93SWRdOyAgICAgIFxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5U3R5bGUodGFyZ2V0OiBhbnksIGZvcm1Hcm91cDogRm9ybUdyb3VwLCBzdHlsZUV4cHJlc3Npb246IGFueSwgZnVuY05hbWU6IHN0cmluZywgc3RhdGljTmFtZTogc3RyaW5nKVxyXG4gIHtcclxuICAgIGlmIChzdHlsZUV4cHJlc3Npb24pIHtcclxuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZShmb3JtR3JvdXAsIHN0eWxlRXhwcmVzc2lvbiwgeyBjYWNoZWFibGU6IGZhbHNlIH0pO1xyXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgdGFyZ2V0W2Z1bmNOYW1lXSA9IHZhbHVlXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGFyZ2V0W3N0YXRpY05hbWVdID0gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH0gXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uUm93U2VsZWN0YWJsZShjb21wb25lbnQ6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGRhdGE6IGFueSkgOiBib29sZWFuIHtcclxuICAgIGlmICghZGF0YSlcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlKGZvcm1Hcm91cCwgY29tcG9uZW50LnJvd1NlbGVjdGFibGUsIHtcclxuICAgICAgY2FjaGVhYmxlOiBmYWxzZSxcclxuICAgICAgZXh0ZW5kQ29udGV4dDogKCkgPT4gKHtcclxuICAgICAgICBcImV2ZW50XCI6IHtcclxuICAgICAgICAgIGRhdGE6IGRhdGFcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0ID09PSB0cnVlOyBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25Sb3dTZWxlY3RlZChjb21wb25lbnQ6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGRhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFkYXRhKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGUoZm9ybUdyb3VwLCBjb21wb25lbnQucm93U2VsZWN0ZWQsIHtcclxuICAgICAgY2FjaGVhYmxlOiBmYWxzZSxcclxuICAgICAgZXh0ZW5kQ29udGV4dDogKCkgPT4gKHtcclxuICAgICAgICBcImV2ZW50XCI6IHtcclxuICAgICAgICAgIGRhdGE6IGRhdGFcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0ID09PSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblJvd1NlbGVjdGluZyhjb21wb25lbnQ6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXAsIHBhcmFtczogTW9kZWxVcGRhdGVkRXZlbnQpIHtcclxuICAgIGlmIChwYXJhbXMubmV3RGF0YSAgICAgIFxyXG4gICAgICAmJiBjb21wb25lbnQucm93U2VsZWN0ZWRcclxuICAgICAgJiYgdGhpcy5zZWxlY3RhYmxlKGNvbXBvbmVudCwgZm9ybUdyb3VwKSlcclxuICAgIHtcclxuICAgICAgcGFyYW1zLmFwaS5mb3JFYWNoTm9kZSgobm9kZSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLm9uUm93U2VsZWN0ZWQoY29tcG9uZW50LCBmb3JtR3JvdXAsIG5vZGUuZGF0YSkpIHtcclxuICAgICAgICAgIG5vZGUuc2V0U2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3VwcHJlc3NBY3Rpb25zKGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlQm9vbGVhbihmb3JtR3JvdXAsIGNvbXBvbmVudC5zdXBwcmVzc0FjdGlvbnMsIHsgY2FjaGVhYmxlOiBmYWxzZSB9KVxyXG4gICAgICA/PyBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VsZWN0YWJsZShjb21wb25lbnQ6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZUJvb2xlYW4oZm9ybUdyb3VwLCBjb21wb25lbnQuc2VsZWN0YWJsZSwgeyBjYWNoZWFibGU6IGZhbHNlIH0pXHJcbiAgICAgID8/IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtdWx0aVNlbGVjdChjb21wb25lbnQ6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZUJvb2xlYW4oZm9ybUdyb3VwLCBjb21wb25lbnQubXVsdGlTZWxlY3QsIHsgY2FjaGVhYmxlOiBmYWxzZSB9KVxyXG4gICAgICA/PyBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UGFnaW5hYmxlKGNvbXBvbmVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHR5cGVvZiBjb21wb25lbnQucm93Q291bnQgPT09ICdudW1iZXInICYmIGNvbXBvbmVudC5yb3dDb3VudCA+IDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYWdlU2l6ZShjb21wb25lbnQ6IGFueSkge1xyXG4gICAgaWYgKHR5cGVvZiBjb21wb25lbnQucm93Q291bnQgPT09ICdudW1iZXInKSB7XHJcbiAgICAgIHJldHVybiBjb21wb25lbnQucm93Q291bnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFRleHRzKCk6IGFueSB7XHJcbiAgICBpZiAodGhpcy5sYW5ndWFnZSA9PT0gJ2l0Jykge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfSVQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmxhbmd1YWdlID09PSAnZW4nKSB7XHJcbiAgICAgIHJldHVybiBBR19HUklEX0xPQ0FMRV9FTjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMubGFuZ3VhZ2UgPT09ICdkZScpIHtcclxuICAgICAgcmV0dXJuIEFHX0dSSURfTE9DQUxFX0RFO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5sYW5ndWFnZSA9PT0gJ2ZyJykge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfRlI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmxhbmd1YWdlID09PSAnZXMnKSB7XHJcbiAgICAgIHJldHVybiBBR19HUklEX0xPQ0FMRV9FUztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMubGFuZ3VhZ2UgPT09ICdwdCcpIHtcclxuICAgICAgcmV0dXJuIEFHX0dSSURfTE9DQUxFX1BUO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5sYW5ndWFnZSA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuIEFHX0dSSURfTE9DQUxFX0lUOyAvLyBuZXV0cmFsXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIEFHX0dSSURfTE9DQUxFX0VOOyAvLyBmYWxsYmFja1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUaGVtZSgpIHtcclxuICAgIHJldHVybiB0aGVtZVF1YXJ0elxyXG4gICAgICAud2l0aFBhcnQoaWNvblNldEFscGluZSlcclxuICAgICAgLndpdGhQYXJhbXMoe1xyXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjRkFGQUZBXCIsXHJcbiAgICAgICAgYm9yZGVyQ29sb3I6IFwiI0Q5RTRGN1wiLFxyXG4gICAgICAgIGJyb3dzZXJDb2xvclNjaGVtZTogXCJsaWdodFwiLFxyXG4gICAgICAgIGNlbGxUZXh0Q29sb3I6IFwiIzAwMTIxQVwiLFxyXG4gICAgICAgIGNvbHVtbkJvcmRlcjogdHJ1ZSxcclxuICAgICAgICBmb250RmFtaWx5OiBcImluaGVyaXRcIixcclxuICAgICAgICBmb250U2l6ZTogMTYsXHJcbiAgICAgICAgaGVhZGVyQmFja2dyb3VuZENvbG9yOiBcIiMwMDI0NjBcIixcclxuICAgICAgICBoZWFkZXJDb2x1bW5Cb3JkZXI6IHRydWUsXHJcbiAgICAgICAgaGVhZGVyQ29sdW1uUmVzaXplSGFuZGxlQ29sb3I6IFwiI0YyRjZGQ1wiLFxyXG4gICAgICAgIGhlYWRlckNvbHVtblJlc2l6ZUhhbmRsZVdpZHRoOiAyLFxyXG4gICAgICAgIGhlYWRlckZvbnRTaXplOiAxNixcclxuICAgICAgICBoZWFkZXJGb250V2VpZ2h0OiA2MDAsXHJcbiAgICAgICAgaGVhZGVyUm93Qm9yZGVyOiB0cnVlLFxyXG4gICAgICAgIGhlYWRlclRleHRDb2xvcjogXCIjRjJGNkZDXCIsXHJcbiAgICAgICAgcm93Qm9yZGVyOiB0cnVlXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREYXRhVHlwZURlZmluaXRpb25zKCk6IHsgW2NlbGxEYXRhVHlwZTogc3RyaW5nXTogRGF0YVR5cGVEZWZpbml0aW9uPGFueT47IH0ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdXVpZDoge1xyXG4gICAgICAgIGJhc2VEYXRhVHlwZTogJ3RleHQnLFxyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ3RleHQnXHJcbiAgICAgIH0sXHJcbiAgICAgIGRhdGU6IHtcclxuICAgICAgICBiYXNlRGF0YVR5cGU6ICdkYXRlU3RyaW5nJyxcclxuICAgICAgICBleHRlbmRzRGF0YVR5cGU6ICdkYXRlU3RyaW5nJyxcclxuICAgICAgICBkYXRlUGFyc2VyOiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdmFsdWVGb3JtYXR0ZXI6IHBhcmFtcyA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXR0ZXIuZm9ybWF0RGF0ZShwYXJhbXMudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZGF0ZVRpbWU6IHtcclxuICAgICAgICBiYXNlRGF0YVR5cGU6ICdkYXRlU3RyaW5nJyxcclxuICAgICAgICBleHRlbmRzRGF0YVR5cGU6ICdkYXRlU3RyaW5nJyxcclxuICAgICAgICBkYXRlUGFyc2VyOiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdmFsdWVGb3JtYXR0ZXI6IHBhcmFtcyA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXR0ZXIuZm9ybWF0RGF0ZVRpbWUocGFyYW1zLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHRpbWU6IHtcclxuICAgICAgICBiYXNlRGF0YVR5cGU6ICdkYXRlU3RyaW5nJyxcclxuICAgICAgICBleHRlbmRzRGF0YVR5cGU6ICdkYXRlU3RyaW5nJyxcclxuICAgICAgICBkYXRlUGFyc2VyOiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdmFsdWVGb3JtYXR0ZXI6IHBhcmFtcyA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXR0ZXIuZm9ybWF0VGltZShwYXJhbXMudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgY3VycmVuY3k6IHtcclxuICAgICAgICBleHRlbmRzRGF0YVR5cGU6ICdudW1iZXInLFxyXG4gICAgICAgIGJhc2VEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgdmFsdWVGb3JtYXR0ZXI6IHBhcmFtcyA9PiBwYXJhbXMudmFsdWUgPT0gbnVsbFxyXG4gICAgICAgICAgPyAnJ1xyXG4gICAgICAgICAgOiB0aGlzLmZvcm1hdHRlci5mb3JtYXRDdXJyZW5jeShwYXJhbXMudmFsdWUpXHJcbiAgICAgIH0sXHJcbiAgICAgIGRlY2ltYWw6IHtcclxuICAgICAgICBleHRlbmRzRGF0YVR5cGU6ICdudW1iZXInLFxyXG4gICAgICAgIGJhc2VEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgdmFsdWVGb3JtYXR0ZXI6IHBhcmFtcyA9PiBwYXJhbXMudmFsdWUgPT0gbnVsbFxyXG4gICAgICAgICAgPyAnJ1xyXG4gICAgICAgICAgOiB0aGlzLmZvcm1hdHRlci5mb3JtYXROdW1iZXIocGFyYW1zLnZhbHVlKVxyXG4gICAgICB9LFxyXG4gICAgICBpbnRlZ2VyOiB7XHJcbiAgICAgICAgZXh0ZW5kc0RhdGFUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgICBiYXNlRGF0YVR5cGU6ICdudW1iZXInLFxyXG4gICAgICAgIHZhbHVlRm9ybWF0dGVyOiBwYXJhbXMgPT4gcGFyYW1zLnZhbHVlID09IG51bGxcclxuICAgICAgICAgID8gJydcclxuICAgICAgICAgIDogdGhpcy5mb3JtYXR0ZXIuZm9ybWF0TnVtYmVyKHBhcmFtcy52YWx1ZSwgMClcclxuICAgICAgfSxcclxuICAgICAgcGVyY2VudGFnZToge1xyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogcGFyYW1zID0+IHBhcmFtcy52YWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICA6IGAke01hdGgucm91bmQocGFyYW1zLnZhbHVlICogMTAwKX0lYCxcclxuICAgICAgfSxcclxuICAgICAgZmxhZ3M6IHtcclxuICAgICAgICBleHRlbmRzRGF0YVR5cGU6ICdudW1iZXInLFxyXG4gICAgICAgIGJhc2VEYXRhVHlwZTogJ251bWJlcidcclxuICAgICAgfSAgICAgIFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWFwKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZiwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBNYXBUeXBlIHtcclxuXHJcbiAgICBjb25zdCBhbGxvd2VkID0gKGNvbERlZi5jZWxsRGF0YVR5cGUgPT09IFwiYm9vbGVhblwiXHJcbiAgICAgIHx8IGNvbERlZi5jZWxsRGF0YVR5cGUgPT09IFwidGV4dFwiXHJcbiAgICAgIHx8IGNvbERlZi5jZWxsRGF0YVR5cGUgPT09IFwibnVtYmVyXCJcclxuICAgICAgfHwgY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJmbGFnc1wiKTtcclxuXHJcbiAgICBpZiAoYWxsb3dlZCAmJiBjb2x1bW4ubWFwKSB7XHJcbiAgICAgIGNvbnN0IG1hcCA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlKGZvcm1Hcm91cCwgY29sdW1uLm1hcFZhbHVlcyk7XHJcblxyXG4gICAgICBjb25zdCB2YWxpZCA9IGlzUmVjb3JkKFxyXG4gICAgICAgIG1hcCxcclxuICAgICAgICBrZXkgPT4gdHlwZW9mIGtleSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGtleSA9PT0gJ251bWJlcicsXHJcbiAgICAgICAgdmFsID0+IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoIXZhbGlkKVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgaWYgKGNvbERlZi5jZWxsRGF0YVR5cGUgPT09IFwiZmxhZ3NcIikge1xyXG4gICAgICAgIChtYXAgYXMgYW55KVtnZXRMYWJlbFN5bWJvbF0gPSAoa2V5OiBhbnkpID0+IHRoaXMuZm9ybWF0RmxhZ3Moa2V5LCBtYXApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbWFwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXRNYXAodmFsdWU6IGFueSwgbWFwOiBNYXBUeXBlKVxyXG4gIHtcclxuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBtYXA/LlsnbnVsbCddID8/IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1hcCkge1xyXG4gICAgICB2YXIgcmVzdWx0ID0gbWFwW3ZhbHVlXTtcclxuXHJcbiAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnN0IGxhYmVsZWQgPSBpc0xhYmVsZWRSZWNvcmQoXHJcbiAgICAgICAgICBtYXAsXHJcbiAgICAgICAgICBrZXkgPT4gdHlwZW9mIGtleSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGtleSA9PT0gJ251bWJlcicsXHJcbiAgICAgICAgICB2YWwgPT4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycsXHJcbiAgICAgICAgICBnZXRMYWJlbFN5bWJvbFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmIChsYWJlbGVkKSB7XHJcbiAgICAgICAgICByZXN1bHQgPSBtYXBbZ2V0TGFiZWxTeW1ib2xdKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIHJldHVybiByZXN1bHQgPz8gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0RmxhZ3ModmFsdWU6IGFueSwgbWFwOiBNYXBUeXBlKSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJlxyXG4gICAgICBpc1JlY29yZChtYXAsIGlzTnVtZXJpY0tleSwgdmFsID0+IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKVxyXG4gICAgKSB7XHJcbiAgICAgIGlmICh2YWx1ZSA9PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hcFswXSA/PyBcIjBcIjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgYXZhaWxhYmxlRmxhZ3MgPSBPYmplY3Qua2V5cyhtYXApXHJcbiAgICAgICAgLm1hcChOdW1iZXIpXHJcbiAgICAgICAgLmZpbHRlcihmbGFnID0+IGZsYWcgIT09IDApO1xyXG5cclxuICAgICAgY29uc3QgZmxhZ3MgPSBhdmFpbGFibGVGbGFncy5maWx0ZXIoZmxhZyA9PiAodmFsdWUgJiBmbGFnKSA9PT0gZmxhZyk7XHJcblxyXG4gICAgICBjb25zdCBzdW1GbGFncyA9IGZsYWdzLnJlZHVjZSgoc3VtLCBmKSA9PiBzdW0gfCBmLCAwKTtcclxuXHJcbiAgICAgIGlmICgodmFsdWUgJiBzdW1GbGFncykgIT09IHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBmbGFnc1xyXG4gICAgICAgIC5tYXAoZmxhZyA9PiBtYXBbZmxhZ10pXHJcbiAgICAgICAgLmZpbHRlcigobGFiZWwpOiBsYWJlbCBpcyBzdHJpbmcgPT4gISFsYWJlbClcclxuICAgICAgICAuam9pbignLCAnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBuYXZpZ2F0ZUluc2lkZUNlbGwoeyBldmVudCB9OiBTdXBwcmVzc0tleWJvYXJkRXZlbnRQYXJhbXM8YW55Pikge1xyXG4gICAgY29uc3QgR1JJRF9DRUxMX0NMQVNTTkFNRSA9IFwiYWctY2VsbFwiO1xyXG4gICAgY29uc3QgeyBrZXksIHNoaWZ0S2V5IH0gPSBldmVudDtcclxuICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldEV2ZW50UGF0aChldmVudCk7XHJcbiAgICBjb25zdCBpc1RhYkZvcndhcmQgPSBrZXkgPT09IFwiVGFiXCIgJiYgc2hpZnRLZXkgPT09IGZhbHNlO1xyXG4gICAgY29uc3QgaXNUYWJCYWNrd2FyZCA9IGtleSA9PT0gXCJUYWJcIiAmJiBzaGlmdEtleSA9PT0gdHJ1ZTtcclxuICAgIGxldCBzdXBwcmVzc0V2ZW50ID0gZmFsc2U7XHJcbiAgICAvLyBIYW5kbGUgY2VsbCBjaGlsZHJlbiB0YWJiaW5nXHJcbiAgICBpZiAoaXNUYWJGb3J3YXJkIHx8IGlzVGFiQmFja3dhcmQpIHtcclxuICAgICAgY29uc3QgZUdyaWRDZWxsID0gcGF0aC5maW5kKChlbCkgPT4ge1xyXG4gICAgICAgIGlmIChlbC5jbGFzc0xpc3QgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBlbC5jbGFzc0xpc3QuY29udGFpbnMoR1JJRF9DRUxMX0NMQVNTTkFNRSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoIWVHcmlkQ2VsbCkge1xyXG4gICAgICAgIHJldHVybiBzdXBwcmVzc0V2ZW50O1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHMgPSBnZXRGb2N1c2FibGVzKGVHcmlkQ2VsbCk7XHJcbiAgICAgIGNvbnN0IGxhc3RDZWxsQ2hpbGRFbCA9XHJcbiAgICAgICAgZm9jdXNhYmxlQ2hpbGRyZW5FbGVtZW50c1tmb2N1c2FibGVDaGlsZHJlbkVsZW1lbnRzLmxlbmd0aCAtIDFdO1xyXG4gICAgICBjb25zdCBmaXJzdENlbGxDaGlsZEVsID0gZm9jdXNhYmxlQ2hpbGRyZW5FbGVtZW50c1swXTtcclxuICAgICAgLy8gU3VwcHJlc3Mga2V5Ym9hcmQgZXZlbnQgaWYgdGFiYmluZyBmb3J3YXJkIHdpdGhpbiB0aGUgY2VsbCBhbmQgdGhlIGN1cnJlbnQgZm9jdXNlZCBlbGVtZW50IGlzIG5vdCB0aGUgbGFzdCBjaGlsZFxyXG4gICAgICBpZiAoZm9jdXNhYmxlQ2hpbGRyZW5FbGVtZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gZm9jdXNhYmxlQ2hpbGRyZW5FbGVtZW50cy5pbmRleE9mKFxyXG4gICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQsXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChpc1RhYkZvcndhcmQpIHtcclxuICAgICAgICBjb25zdCBpc0xhc3RDaGlsZEZvY3VzZWQgPVxyXG4gICAgICAgICAgbGFzdENlbGxDaGlsZEVsICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGxhc3RDZWxsQ2hpbGRFbDtcclxuICAgICAgICBpZiAoIWlzTGFzdENoaWxkRm9jdXNlZCkge1xyXG4gICAgICAgICAgc3VwcHJlc3NFdmVudCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAoY3VycmVudEluZGV4ICE9PSAtMSB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBlR3JpZENlbGwpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZm9jdXNhYmxlQ2hpbGRyZW5FbGVtZW50c1tjdXJyZW50SW5kZXggKyAxXS5mb2N1cygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBTdXBwcmVzcyBrZXlib2FyZCBldmVudCBpZiB0YWJiaW5nIGJhY2t3YXJkcyB3aXRoaW4gdGhlIGNlbGwsIGFuZCB0aGUgY3VycmVudCBmb2N1c2VkIGVsZW1lbnQgaXMgbm90IHRoZSBmaXJzdCBjaGlsZFxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBjZWxsSGFzRm9jdXNlZENoaWxkcmVuID1cclxuICAgICAgICAgIGVHcmlkQ2VsbC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSAmJlxyXG4gICAgICAgICAgZUdyaWRDZWxsICE9PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xyXG4gICAgICAgIC8vIE1hbnVhbGx5IHNldCBmb2N1cyB0byB0aGUgbGFzdCBjaGlsZCBlbGVtZW50IGlmIGNlbGwgZG9lc24ndCBoYXZlIGZvY3VzZWQgY2hpbGRyZW5cclxuICAgICAgICBpZiAoIWNlbGxIYXNGb2N1c2VkQ2hpbGRyZW4pIHtcclxuICAgICAgICAgIGxhc3RDZWxsQ2hpbGRFbC5mb2N1cygpO1xyXG4gICAgICAgICAgLy8gQ2FuY2VsIGtleWJvYXJkIHByZXNzLCBzbyB0aGF0IGl0IGRvZXNuJ3QgZm9jdXMgb24gdGhlIGxhc3QgY2hpbGQgYW5kIHRoZW4gcGFzcyB0aHJvdWdoIHRoZSBrZXlib2FyZCBwcmVzcyB0b1xyXG4gICAgICAgICAgLy8gbW92ZSB0byB0aGUgMm5kIGxhc3QgY2hpbGQgZWxlbWVudFxyXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaXNGaXJzdENoaWxkRm9jdXNlZCA9XHJcbiAgICAgICAgICBmaXJzdENlbGxDaGlsZEVsICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGZpcnN0Q2VsbENoaWxkRWw7XHJcbiAgICAgICAgaWYgKCFpc0ZpcnN0Q2hpbGRGb2N1c2VkKSB7XHJcbiAgICAgICAgICBzdXBwcmVzc0V2ZW50ID0gdHJ1ZTtcclxuICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggIT09IC0xIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGVHcmlkQ2VsbCkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBmb2N1c2FibGVDaGlsZHJlbkVsZW1lbnRzW2N1cnJlbnRJbmRleCAtIDFdLmZvY3VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3VwcHJlc3NFdmVudDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RXZlbnRQYXRoKGV2ZW50OiBFdmVudCk6IEhUTUxFbGVtZW50W10ge1xyXG4gICAgY29uc3QgcGF0aDogSFRNTEVsZW1lbnRbXSA9IFtdO1xyXG4gICAgbGV0IGN1cnJlbnRUYXJnZXQ6IGFueSA9IGV2ZW50LnRhcmdldDtcclxuICAgIHdoaWxlIChjdXJyZW50VGFyZ2V0KSB7XHJcbiAgICAgIHBhdGgucHVzaChjdXJyZW50VGFyZ2V0KTtcclxuICAgICAgY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXQucGFyZW50RWxlbWVudDtcclxuICAgIH1cclxuICAgIHJldHVybiBwYXRoO1xyXG4gIH1cclxufVxyXG4iXX0=