@bizdoc/core 1.15.5 → 1.15.6

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 (86) hide show
  1. package/assets/system/icons.json +1 -0
  2. package/esm2020/lib/admin/configuration-designer/designer-element.component.mjs +2 -2
  3. package/esm2020/lib/admin/configuration-designer/designer.base.mjs +44 -3
  4. package/esm2020/lib/admin/configuration-designer/designer.component.mjs +109 -45
  5. package/esm2020/lib/admin/configuration-designer/elements/action.component.mjs +5 -12
  6. package/esm2020/lib/admin/configuration-designer/elements/analysis-view.component.mjs +5 -6
  7. package/esm2020/lib/admin/configuration-designer/elements/analysis-widget.component.mjs +7 -6
  8. package/esm2020/lib/admin/configuration-designer/elements/box-form.component.mjs +5 -1
  9. package/esm2020/lib/admin/configuration-designer/elements/configuration-datasource.component.mjs +61 -0
  10. package/esm2020/lib/admin/configuration-designer/elements/cube.component.mjs +32 -23
  11. package/esm2020/lib/admin/configuration-designer/elements/folder.component.mjs +11 -13
  12. package/esm2020/lib/admin/configuration-designer/elements/form.component.mjs +44 -18
  13. package/esm2020/lib/admin/configuration-designer/elements/guide.component.mjs +9 -9
  14. package/esm2020/lib/admin/configuration-designer/elements/matrix-view.component.mjs +41 -9
  15. package/esm2020/lib/admin/configuration-designer/elements/parallel-view.component.mjs +5 -4
  16. package/esm2020/lib/admin/configuration-designer/elements/pivot-view.component.mjs +5 -4
  17. package/esm2020/lib/admin/configuration-designer/elements/report.component.mjs +9 -13
  18. package/esm2020/lib/admin/configuration-designer/elements/role.component.mjs +15 -14
  19. package/esm2020/lib/admin/configuration-designer/elements/rule.component.mjs +5 -9
  20. package/esm2020/lib/admin/configuration-designer/elements/state.component.mjs +9 -11
  21. package/esm2020/lib/admin/configuration-designer/elements/sum-view.component.mjs +6 -4
  22. package/esm2020/lib/admin/configuration-designer/elements/type.component.mjs +13 -14
  23. package/esm2020/lib/admin/configuration-designer/elements/usage-report.component.mjs +5 -4
  24. package/esm2020/lib/admin/configuration-designer/elements/utility.component.mjs +9 -10
  25. package/esm2020/lib/admin/configuration-designer/elements/view.component.mjs +6 -4
  26. package/esm2020/lib/admin/configuration-designer/elements/widget.component.mjs +5 -12
  27. package/esm2020/lib/admin/configuration-designer/icon-picker.component.mjs +162 -0
  28. package/esm2020/lib/admin/configuration-designer/privileges.component.mjs +24 -16
  29. package/esm2020/lib/admin/core/color-picker.input.mjs +9 -33
  30. package/esm2020/lib/admin/form/designer/designer.component.mjs +140 -18
  31. package/esm2020/lib/admin/form/workflow/workflow.component.mjs +6 -6
  32. package/esm2020/lib/compose/box/box.component.mjs +43 -0
  33. package/esm2020/lib/compose/document.component.mjs +2 -2
  34. package/esm2020/lib/compose/form-ref.mjs +7 -2
  35. package/esm2020/lib/compose/form-selector/form-selector.sheet.mjs +3 -3
  36. package/esm2020/lib/compose/form.component.mjs +2 -2
  37. package/esm2020/lib/compose/new-menu.component.mjs +3 -3
  38. package/esm2020/lib/compose/version-compare/version-compare.component.mjs +2 -2
  39. package/esm2020/lib/core/functions.mjs +6 -1
  40. package/esm2020/lib/core/mailbox.service.mjs +2 -2
  41. package/esm2020/lib/core/models.mjs +1 -1
  42. package/esm2020/lib/core/translations.mjs +2 -1
  43. package/esm2020/lib/cube/filter/filter.component.mjs +3 -3
  44. package/esm2020/lib/cube/matrix/table.component.mjs +1 -1
  45. package/esm2020/lib/dashboard/cube/cube-analysis.base.mjs +1 -1
  46. package/esm2020/lib/shared.module.mjs +5 -4
  47. package/esm2020/lib/system.module.mjs +8 -4
  48. package/esm2020/lib/views/cube/chart.component.mjs +1 -1
  49. package/fesm2015/bizdoc-core.mjs +699 -242
  50. package/fesm2015/bizdoc-core.mjs.map +1 -1
  51. package/fesm2020/bizdoc-core.mjs +692 -242
  52. package/fesm2020/bizdoc-core.mjs.map +1 -1
  53. package/lib/admin/configuration-designer/designer.base.d.ts +78 -31
  54. package/lib/admin/configuration-designer/designer.component.d.ts +14 -3
  55. package/lib/admin/configuration-designer/elements/action.component.d.ts +2 -6
  56. package/lib/admin/configuration-designer/elements/box-form.component.d.ts +2 -4
  57. package/lib/admin/configuration-designer/elements/configuration-datasource.component.d.ts +26 -0
  58. package/lib/admin/configuration-designer/elements/cube.component.d.ts +5 -9
  59. package/lib/admin/configuration-designer/elements/folder.component.d.ts +3 -9
  60. package/lib/admin/configuration-designer/elements/form.component.d.ts +6 -11
  61. package/lib/admin/configuration-designer/elements/guide.component.d.ts +2 -7
  62. package/lib/admin/configuration-designer/elements/matrix-view.component.d.ts +7 -1
  63. package/lib/admin/configuration-designer/elements/report.component.d.ts +2 -10
  64. package/lib/admin/configuration-designer/elements/role.component.d.ts +4 -9
  65. package/lib/admin/configuration-designer/elements/rule.component.d.ts +2 -6
  66. package/lib/admin/configuration-designer/elements/state.component.d.ts +3 -6
  67. package/lib/admin/configuration-designer/elements/sum-view.component.d.ts +1 -0
  68. package/lib/admin/configuration-designer/elements/type.component.d.ts +3 -13
  69. package/lib/admin/configuration-designer/elements/utility.component.d.ts +2 -4
  70. package/lib/admin/configuration-designer/elements/view.component.d.ts +5 -7
  71. package/lib/admin/configuration-designer/elements/widget.component.d.ts +2 -6
  72. package/lib/admin/configuration-designer/icon-picker.component.d.ts +67 -0
  73. package/lib/admin/configuration-designer/privileges.component.d.ts +3 -4
  74. package/lib/admin/core/color-picker.input.d.ts +3 -6
  75. package/lib/admin/form/designer/designer.component.d.ts +59 -19
  76. package/lib/admin/form/workflow/workflow.component.d.ts +2 -2
  77. package/lib/compose/box/box.component.d.ts +17 -0
  78. package/lib/compose/form-ref.d.ts +6 -2
  79. package/lib/core/models.d.ts +4 -1
  80. package/lib/core/translations.d.ts +1 -0
  81. package/lib/cube/matrix/table.component.d.ts +0 -1
  82. package/lib/dashboard/cube/cube-analysis.base.d.ts +1 -0
  83. package/lib/shared.module.d.ts +183 -182
  84. package/lib/system.module.d.ts +61 -59
  85. package/lib/views/cube/chart.component.d.ts +2 -1
  86. package/package.json +1 -1
@@ -4,7 +4,6 @@ import { merge, Subject } from "rxjs";
4
4
  import { filter } from "rxjs/operators";
5
5
  import { ESCAPE } from "@angular/cdk/keycodes";
6
6
  import { TemplatePortal } from "@angular/cdk/portal";
7
- import { MatButton } from "@angular/material/button";
8
7
  import { MATERIAL_PALETTES } from "../../core/colors";
9
8
  import * as i0 from "@angular/core";
10
9
  import * as i1 from "@angular/forms";
@@ -53,7 +52,6 @@ export class ColorPicker {
53
52
  this.Object = Object;
54
53
  this._required = false;
55
54
  this._disabled = false;
56
- this._opened = false;
57
55
  this.stateChanges = new Subject();
58
56
  this.valueChanges = new Subject();
59
57
  this.id = `color-picker-${ColorPicker.nextId++}`;
@@ -99,7 +97,7 @@ export class ColorPicker {
99
97
  }
100
98
  get disabled() { return this._disabled; }
101
99
  set disabled(value) {
102
- this._trigger.disabled = this._disabled = value;
100
+ this._disabled = value;
103
101
  this.stateChanges.next();
104
102
  }
105
103
  setDescribedByIds(ids) {
@@ -107,21 +105,20 @@ export class ColorPicker {
107
105
  }
108
106
  onContainerClick(_event) {
109
107
  this._onTouched && this._onTouched();
110
- !this._opened && this.open();
108
+ this.open();
111
109
  }
112
110
  ngOnDestroy() {
113
111
  this._destroy.next();
112
+ this._destroy.complete();
114
113
  }
115
114
  open() {
116
115
  if (!this._overlayRef)
117
116
  this._overlayRef = this._createOverlay();
118
117
  const portal = new TemplatePortal(this._colorPalette, this._vc);
119
118
  this._overlayRef.attach(portal);
120
- this._opened = true;
121
119
  }
122
120
  close() {
123
121
  this._overlayRef.detach();
124
- this._opened = false;
125
122
  }
126
123
  _pick(color) {
127
124
  this.value = color;
@@ -150,40 +147,22 @@ export class ColorPicker {
150
147
  }
151
148
  ColorPicker.nextId = 0;
152
149
  ColorPicker.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: ColorPicker, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i2.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i3.Directionality }], target: i0.ɵɵFactoryTarget.Component });
153
- ColorPicker.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: ColorPicker, selector: "bizdoc-color-picker", inputs: { label: "label", required: "required", disabled: "disabled" }, outputs: { valueChanges: "valueChanges" }, host: { properties: { "class.floating": "this.shouldLabelFloat", "id": "this.id", "attr.aria-describedby": "this.describedBy" } }, providers: [{ provide: MatFormFieldControl, useExisting: ColorPicker }], viewQueries: [{ propertyName: "_trigger", first: true, predicate: MatButton, descendants: true, static: true }, { propertyName: "_colorPalette", first: true, predicate: TemplateRef, descendants: true, static: true }], ngImport: i0, template: `<button mat-button (click)='open()'>
154
- <span>{{label}}</span>
155
- <mat-icon>arrow_drop_down</mat-icon>
156
- </button>
157
- <ng-template>
158
- <div class="color-palette">
159
- <div *ngFor='let p of Object.keys(_palettes)' class="color-container">
160
- <span *ngFor='let c of Object.keys(_palettes[p])' (click)='_pick(_palettes[p][c])' [style.background-color]='_palettes[p][c]' class="color-item"></span>
161
- </div>
162
- </div>
163
- </ng-template>`, isInline: true, styles: [".color-palette{display:flex;flex-direction:column}.color-palette .color-container{display:flex}button{width:100%}.color-item{width:20px;height:20px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
150
+ ColorPicker.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: ColorPicker, selector: "bizdoc-color-picker", inputs: { label: "label", value: "value", required: "required", disabled: "disabled" }, outputs: { valueChanges: "valueChanges" }, host: { properties: { "class.floating": "this.shouldLabelFloat", "id": "this.id", "attr.aria-describedby": "this.describedBy" } }, providers: [{ provide: MatFormFieldControl, useExisting: ColorPicker }], viewQueries: [{ propertyName: "_colorPalette", first: true, predicate: TemplateRef, descendants: true, static: true }], ngImport: i0, template: "<button mat-button (click)='open()' [disabled]=\"disabled\">\r\n <span>{{label}}</span>\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n</button>\r\n<ng-template>\r\n <div class=\"color-palette\">\r\n <div *ngFor='let p of Object.keys(_palettes)' class=\"color-container\">\r\n <span *ngFor='let c of Object.keys(_palettes[p])' (click)='_pick(_palettes[p][c])' [style.background-color]='_palettes[p][c]' class=\"color-item\"></span>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".color-palette{display:flex;flex-direction:column}.color-palette .color-container{display:flex}button{width:100%}.color-item{width:20px;height:20px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
164
151
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: ColorPicker, decorators: [{
165
152
  type: Component,
166
- args: [{ selector: 'bizdoc-color-picker', providers: [{ provide: MatFormFieldControl, useExisting: ColorPicker }], template: `<button mat-button (click)='open()'>
167
- <span>{{label}}</span>
168
- <mat-icon>arrow_drop_down</mat-icon>
169
- </button>
170
- <ng-template>
171
- <div class="color-palette">
172
- <div *ngFor='let p of Object.keys(_palettes)' class="color-container">
173
- <span *ngFor='let c of Object.keys(_palettes[p])' (click)='_pick(_palettes[p][c])' [style.background-color]='_palettes[p][c]' class="color-item"></span>
174
- </div>
175
- </div>
176
- </ng-template>`, host: {
153
+ args: [{ selector: 'bizdoc-color-picker', providers: [{ provide: MatFormFieldControl, useExisting: ColorPicker }], host: {
177
154
  '[class.floating]': 'shouldLabelFloat',
178
155
  '[id]': 'id',
179
156
  '[attr.aria-describedby]': 'describedBy'
180
- }, styles: [".color-palette{display:flex;flex-direction:column}.color-palette .color-container{display:flex}button{width:100%}.color-item{width:20px;height:20px}\n"] }]
157
+ }, template: "<button mat-button (click)='open()' [disabled]=\"disabled\">\r\n <span>{{label}}</span>\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n</button>\r\n<ng-template>\r\n <div class=\"color-palette\">\r\n <div *ngFor='let p of Object.keys(_palettes)' class=\"color-container\">\r\n <span *ngFor='let c of Object.keys(_palettes[p])' (click)='_pick(_palettes[p][c])' [style.background-color]='_palettes[p][c]' class=\"color-item\"></span>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".color-palette{display:flex;flex-direction:column}.color-palette .color-container{display:flex}button{width:100%}.color-item{width:20px;height:20px}\n"] }]
181
158
  }], ctorParameters: function () { return [{ type: i1.NgControl, decorators: [{
182
159
  type: Optional
183
160
  }, {
184
161
  type: Self
185
162
  }] }, { type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i3.Directionality }]; }, propDecorators: { label: [{
186
163
  type: Input
164
+ }], value: [{
165
+ type: Input
187
166
  }], valueChanges: [{
188
167
  type: Output
189
168
  }], id: [{
@@ -198,11 +177,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImpor
198
177
  }], describedBy: [{
199
178
  type: HostBinding,
200
179
  args: ['attr.aria-describedby']
201
- }], _trigger: [{
202
- type: ViewChild,
203
- args: [MatButton, { static: true }]
204
180
  }], _colorPalette: [{
205
181
  type: ViewChild,
206
182
  args: [TemplateRef, { static: true }]
207
183
  }] } });
208
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9jb3JlL2NvbG9yLXBpY2tlci5pbnB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUErQixXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQWMsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkosT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7OztBQUV0RCxrQ0FBa0M7QUFzQmxDLE1BQU0sT0FBTyxXQUFXO0lBc0d0QixZQUF1QyxTQUFvQixFQUFVLFFBQWlCLEVBQVUsR0FBcUIsRUFBVSxRQUFvQixFQUFVLElBQW9CO1FBQTFJLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFZO1FBQVUsU0FBSSxHQUFKLElBQUksQ0FBZ0I7UUFwR3hLLGNBQVMsR0FBRyxpQkFBaUIsQ0FBQztRQUV2QyxXQUFNLEdBQUcsQ0FBQyxJQUFJO1lBQ1osS0FBSztZQUNMLEtB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O3dCQUNaLHlCQUF5QixFQUFFLGFBQWE7cUJBQ3pDOzswQkF3R1ksUUFBUTs7MEJBQUksSUFBSTt1SkFuR3BCLEtBQUs7c0JBQWIsS0FBSztnQkEwREcsWUFBWTtzQkFEcEIsTUFBTTtnQkFFUSxFQUFFO3NCQUFoQixXQUFXO2dCQU9SLGdCQUFnQjtzQkFEbkIsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBS3pCLFFBQVE7c0JBRFgsS0FBSztnQkFTRixRQUFRO3NCQURYLEtBQUs7Z0JBT2dDLFdBQVc7c0JBQWhELFdBQVc7dUJBQUMsdUJBQXVCO2dCQVFJLFFBQVE7c0JBQS9DLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDSSxhQUFhO3NCQUF0RCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgVmlld0NvbnRhaW5lclJlZiwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgU2VsZiwgT3B0aW9uYWwsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQ29udHJvbCB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkXCI7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgT3ZlcmxheVJlZiwgT3ZlcmxheSB9IGZyb20gXCJAYW5ndWxhci9jZGsvb3ZlcmxheVwiO1xyXG5pbXBvcnQgeyBtZXJnZSwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBFU0NBUEUgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2tleWNvZGVzXCI7XHJcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9wb3J0YWxcIjtcclxuaW1wb3J0IHsgTWF0QnV0dG9uIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2J1dHRvblwiO1xyXG5pbXBvcnQgeyBNQVRFUklBTF9QQUxFVFRFUyB9IGZyb20gXCIuLi8uLi9jb3JlL2NvbG9yc1wiO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb25hbGl0eSB9IGZyb20gXCJAYW5ndWxhci9jZGsvYmlkaVwiO1xyXG4vL1tzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT0ndmFsdWUnXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLWNvbG9yLXBpY2tlcicsXHJcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogQ29sb3JQaWNrZXIgfV0sXHJcbiAgdGVtcGxhdGU6IGA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT0nb3BlbigpJz5cclxuPHNwYW4+e3tsYWJlbH19PC9zcGFuPlxyXG4gICAgICA8bWF0LWljb24+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG48bmctdGVtcGxhdGU+XHJcbiAgPGRpdiBjbGFzcz1cImNvbG9yLXBhbGV0dGVcIj5cclxuICAgIDxkaXYgKm5nRm9yPSdsZXQgcCBvZiBPYmplY3Qua2V5cyhfcGFsZXR0ZXMpJyBjbGFzcz1cImNvbG9yLWNvbnRhaW5lclwiPlxyXG4gICAgICA8c3BhbiAqbmdGb3I9J2xldCBjIG9mIE9iamVjdC5rZXlzKF9wYWxldHRlc1twXSknIChjbGljayk9J19waWNrKF9wYWxldHRlc1twXVtjXSknIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT0nX3BhbGV0dGVzW3BdW2NdJyBjbGFzcz1cImNvbG9yLWl0ZW1cIj48L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5gLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbG9yLXBpY2tlci5pbnB1dC5zY3NzJ10sXHJcbiAgaG9zdDoge1xyXG4gICAgJ1tjbGFzcy5mbG9hdGluZ10nOiAnc2hvdWxkTGFiZWxGbG9hdCcsXHJcbiAgICAnW2lkXSc6ICdpZCcsXHJcbiAgICAnW2F0dHIuYXJpYS1kZXNjcmliZWRieV0nOiAnZGVzY3JpYmVkQnknXHJcbiAgfVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29sb3JQaWNrZXIgaW1wbGVtZW50cyBNYXRGb3JtRmllbGRDb250cm9sPHN0cmluZz4sIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgc3RhdGljIG5leHRJZCA9IDA7XHJcbiAgcmVhZG9ubHkgX3BhbGV0dGVzID0gTUFURVJJQUxfUEFMRVRURVM7XHJcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcclxuICBzY2FsZXMgPSBbXCI1MFwiLFxyXG4gICAgXCIxMDBcIixcclxuICAgIFwiMjAwXCIsXHJcbiAgICBcIjMwMFwiLFxyXG4gICAgXCI0MDBcIixcclxuICAgIFwiNTAwXCIsXHJcbiAgICBcIjYwMFwiLFxyXG4gICAgXCI3MDBcIixcclxuICAgIFwiODAwXCIsXHJcbiAgICBcIjkwMFwiXTtcclxuICBjb2xvcnMgPSBbXCJyZWRcIixcclxuICAgIFwicGlua1wiLFxyXG4gICAgXCJwdXJwbGVcIixcclxuICAgIFwiZGVlcFB1cnBsZVwiLFxyXG4gICAgXCJpbmRpZ29cIixcclxuICAgIFwiYmx1ZVwiLFxyXG4gICAgXCJsaWdodEJsdWVcIixcclxuICAgIFwiY3lhblwiLFxyXG4gICAgXCJ0ZWFsXCIsXHJcbiAgICBcImdyZWVuXCIsXHJcbiAgICBcImxpZ2h0R3JlZW5cIixcclxuICAgIFwibGltZVwiLFxyXG4gICAgXCJ5ZWxsb3dcIixcclxuICAgIFwiYW1iZXJcIixcclxuICAgIFwib3JhbmdlXCIsXHJcbiAgICBcImJyb3duXCIsXHJcbiAgICBcImdyZXlcIixcclxuICAgIFwiYmx1ZUdyZXlcIl07XHJcblxyXG4gIHJlYWRvbmx5IE9iamVjdCA9IE9iamVjdDtcclxuICBwcml2YXRlIF9vbkNoYW5nZTogYW55O1xyXG4gIHByaXZhdGUgX29uVG91Y2hlZDogYW55O1xyXG4gIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIF9vcGVuZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIF92YWx1ZTogc3RyaW5nO1xyXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ZhbHVlID0gb2JqO1xyXG4gIH1cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl92YWx1ZTsgfVxyXG4gIHNldCB2YWx1ZSh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdmFsdWUgPSB2YWw7XHJcbiAgICB0aGlzLl9vbkNoYW5nZSAmJiB0aGlzLl9vbkNoYW5nZSh2YWwpO1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZXMubmV4dCh2YWwpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuICByZWFkb25seSBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHJlYWRvbmx5IHZhbHVlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBASG9zdEJpbmRpbmcoKSBpZCA9IGBjb2xvci1waWNrZXItJHtDb2xvclBpY2tlci5uZXh0SWQrK31gO1xyXG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgZm9jdXNlZCA9IGZhbHNlO1xyXG4gIGdldCBlbXB0eSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZSA9PT0gbnVsbDtcclxuICB9XHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mbG9hdGluZycpXHJcbiAgZ2V0IHNob3VsZExhYmVsRmxvYXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkIHx8ICF0aGlzLmVtcHR5O1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIGdldCByZXF1aXJlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcclxuICB9XHJcbiAgc2V0IHJlcXVpcmVkKHJlcSkge1xyXG4gICAgdGhpcy5fcmVxdWlyZWQgPSByZXE7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7IH1cclxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3RyaWdnZXIuZGlzYWJsZWQgPSB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuICBlcnJvclN0YXRlID0gZmFsc2U7XHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpYmVkYnknKSBkZXNjcmliZWRCeSA9ICcnO1xyXG4gIHNldERlc2NyaWJlZEJ5SWRzKGlkczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzY3JpYmVkQnkgPSBpZHMuam9pbignICcpO1xyXG4gIH1cclxuICBvbkNvbnRhaW5lckNsaWNrKF9ldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5fb25Ub3VjaGVkICYmIHRoaXMuX29uVG91Y2hlZCgpO1xyXG4gICAgIXRoaXMuX29wZW5lZCAmJiB0aGlzLm9wZW4oKTtcclxuICB9XHJcbiAgQFZpZXdDaGlsZChNYXRCdXR0b24sIHsgc3RhdGljOiB0cnVlIH0pIF90cmlnZ2VyOiBNYXRCdXR0b247XHJcbiAgQFZpZXdDaGlsZChUZW1wbGF0ZVJlZiwgeyBzdGF0aWM6IHRydWUgfSkgX2NvbG9yUGFsZXR0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9vdmVybGF5UmVmOiBPdmVybGF5UmVmO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLCBwcml2YXRlIF9vdmVybGF5OiBPdmVybGF5LCBwcml2YXRlIF92YzogVmlld0NvbnRhaW5lclJlZiwgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZiwgcHJpdmF0ZSBfZGlyOiBEaXJlY3Rpb25hbGl0eSkge1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAoIXRoaXMuX292ZXJsYXlSZWYpIHRoaXMuX292ZXJsYXlSZWYgPSB0aGlzLl9jcmVhdGVPdmVybGF5KCk7XHJcbiAgICBjb25zdCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5fY29sb3JQYWxldHRlLCB0aGlzLl92Yyk7XHJcbiAgICB0aGlzLl9vdmVybGF5UmVmLmF0dGFjaChwb3J0YWwpO1xyXG4gICAgdGhpcy5fb3BlbmVkID0gdHJ1ZTtcclxuICB9XHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpO1xyXG4gICAgdGhpcy5fb3BlbmVkID0gZmFsc2U7XHJcbiAgfVxyXG4gIF9waWNrKGNvbG9yOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudmFsdWUgPSBjb2xvcjtcclxuICAgIHRoaXMuY2xvc2UoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY3JlYXRlT3ZlcmxheSgpOiBPdmVybGF5UmVmIHtcclxuICAgIGNvbnN0IHJlZiA9IHRoaXMuX292ZXJsYXkuY3JlYXRlKHtcclxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZWxlbWVudCkud2l0aFBvc2l0aW9ucyhbe1xyXG4gICAgICAgIG9yaWdpblg6ICdzdGFydCcsXHJcbiAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXHJcbiAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXHJcbiAgICAgICAgb3ZlcmxheVk6ICd0b3AnXHJcbiAgICAgIH0sIHtcclxuICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxyXG4gICAgICAgIG9yaWdpblk6ICd0b3AnLFxyXG4gICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxyXG4gICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJ1xyXG4gICAgICB9XSksXHJcbiAgICAgIGRpcmVjdGlvbjogdGhpcy5fZGlyLnZhbHVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3BDbGFzczogJ2Nkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wJ1xyXG4gICAgfSk7XHJcbiAgICBtZXJnZShyZWYuYmFja2Ryb3BDbGljaygpLCByZWYua2V5ZG93bkV2ZW50cygpLnBpcGUoZmlsdGVyKGsgPT4gay5rZXlDb2RlID09PSBFU0NBUEUpKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2UoKSk7XHJcbiAgICByZXR1cm4gcmVmO1xyXG4gIH1cclxufVxyXG4iXX0=
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9jb3JlL2NvbG9yLXBpY2tlci5pbnB1dC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vY29yZS9jb2xvci1waWNrZXIuaW5wdXQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUErQixXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQWMsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkosT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7O0FBRXRELGtDQUFrQztBQVlsQyxNQUFNLE9BQU8sV0FBVztJQXNHdEIsWUFDNkIsU0FBb0IsRUFDdkMsUUFBaUIsRUFDakIsR0FBcUIsRUFDckIsUUFBb0IsRUFDcEIsSUFBb0I7UUFKRCxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3ZDLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDakIsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQUNwQixTQUFJLEdBQUosSUFBSSxDQUFnQjtRQXpHckIsY0FBUyxHQUFHLGlCQUFpQixDQUFDO1FBRTlCLFdBQU0sR0FBRyxDQUFDLElBQUk7WUFDckIsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLLENBQUMsQ0FBQztRQUNBLFdBQU0sR0FBRyxDQUFDLEtBQUs7WUFDdEIsTUFBTTtZQUNOLFFBQVE7WUFDUixZQUFZO1lBQ1osUUFBUTtZQUNSLE1BQU07WUFDTixXQUFXO1lBQ1gsTUFBTTtZQUNOLE1BQU07WUFDTixPQUFPO1lBQ1AsWUFBWTtZQUNaLE1BQU07WUFDTixRQUFRO1lBQ1IsT0FBTztZQUNQLFFBQVE7WUFDUixPQUFPO1lBQ1AsTUFBTTtZQUNOLFVBQVUsQ0FBQyxDQUFDO1FBRUwsV0FBTSxHQUFHLE1BQU0sQ0FBQztRQUdqQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFzQmpCLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVuQyxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFDL0IsT0FBRSxHQUFHLGdCQUFnQixXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUUzRCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBc0JoQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ21CLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBY3RDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBTzlDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQztJQXhFRCxVQUFVLENBQUMsR0FBUTtRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUNwQixDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsRUFBTztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBQ0QsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBQ0QsZ0JBQWdCLENBQUUsVUFBbUI7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQUksS0FBSyxLQUFhLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDM0MsSUFDSSxLQUFLLENBQUMsR0FBVztRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNsQixJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBT0QsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQztJQUM5QixDQUFDO0lBQ0QsSUFDSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNyQyxDQUFDO0lBQ0QsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxHQUFHO1FBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFDSSxRQUFRLEtBQWMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNsRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUdELGlCQUFpQixDQUFDLEdBQWE7UUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxNQUFrQjtRQUNqQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBYUQsSUFBSTtRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztZQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBQ0QsS0FBSyxDQUFDLEtBQWE7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUNPLGNBQWM7UUFDcEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDL0IsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQzNGLE9BQU8sRUFBRSxPQUFPO29CQUNoQixPQUFPLEVBQUUsUUFBUTtvQkFDakIsUUFBUSxFQUFFLE9BQU87b0JBQ2pCLFFBQVEsRUFBRSxLQUFLO2lCQUNoQixFQUFFO29CQUNELE9BQU8sRUFBRSxPQUFPO29CQUNoQixPQUFPLEVBQUUsS0FBSztvQkFDZCxRQUFRLEVBQUUsT0FBTztvQkFDakIsUUFBUSxFQUFFLFFBQVE7aUJBQ25CLENBQUMsQ0FBQztZQUNILFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFDMUIsV0FBVyxFQUFFLElBQUk7WUFDakIsYUFBYSxFQUFFLGtDQUFrQztTQUNsRCxDQUFDLENBQUM7UUFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3RILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQzs7QUE5SWMsa0JBQU0sR0FBRyxDQUFFLENBQUE7d0dBRGYsV0FBVzs0RkFBWCxXQUFXLG9UQVRYLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDLHlFQXdHNUQsV0FBVyw4RENySHhCLHllQVdBOzJGRFdhLFdBQVc7a0JBWHZCLFNBQVM7K0JBQ0UscUJBQXFCLGFBQ3BCLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxhQUFhLEVBQUUsQ0FBQyxRQUdqRTt3QkFDSixrQkFBa0IsRUFBRSxrQkFBa0I7d0JBQ3RDLE1BQU0sRUFBRSxJQUFJO3dCQUNaLHlCQUF5QixFQUFFLGFBQWE7cUJBQ3pDOzswQkF5R0UsUUFBUTs7MEJBQUksSUFBSTt1SkFwR1YsS0FBSztzQkFBYixLQUFLO2dCQWtERixLQUFLO3NCQURSLEtBQUs7Z0JBU0csWUFBWTtzQkFEcEIsTUFBTTtnQkFFUSxFQUFFO3NCQUFoQixXQUFXO2dCQU9SLGdCQUFnQjtzQkFEbkIsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBS3pCLFFBQVE7c0JBRFgsS0FBSztnQkFTRixRQUFRO3NCQURYLEtBQUs7Z0JBT2dDLFdBQVc7c0JBQWhELFdBQVc7dUJBQUMsdUJBQXVCO2dCQVFNLGFBQWE7c0JBQXRELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBWaWV3Q29udGFpbmVyUmVmLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBTZWxmLCBPcHRpb25hbCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRDb250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGRcIjtcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBPdmVybGF5UmVmLCBPdmVybGF5IH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9vdmVybGF5XCI7XHJcbmltcG9ydCB7IG1lcmdlLCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IEVTQ0FQRSB9IGZyb20gXCJAYW5ndWxhci9jZGsva2V5Y29kZXNcIjtcclxuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL3BvcnRhbFwiO1xyXG5pbXBvcnQgeyBNQVRFUklBTF9QQUxFVFRFUyB9IGZyb20gXCIuLi8uLi9jb3JlL2NvbG9yc1wiO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb25hbGl0eSB9IGZyb20gXCJAYW5ndWxhci9jZGsvYmlkaVwiO1xyXG4vL1tzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT0ndmFsdWUnXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLWNvbG9yLXBpY2tlcicsXHJcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogQ29sb3JQaWNrZXIgfV0sXHJcbiAgdGVtcGxhdGVVcmw6IGAuL2NvbG9yLXBpY2tlci5pbnB1dC5odG1sYCxcclxuICBzdHlsZVVybHM6IFsnLi9jb2xvci1waWNrZXIuaW5wdXQuc2NzcyddLFxyXG4gIGhvc3Q6IHtcclxuICAgICdbY2xhc3MuZmxvYXRpbmddJzogJ3Nob3VsZExhYmVsRmxvYXQnLFxyXG4gICAgJ1tpZF0nOiAnaWQnLFxyXG4gICAgJ1thdHRyLmFyaWEtZGVzY3JpYmVkYnldJzogJ2Rlc2NyaWJlZEJ5J1xyXG4gIH1cclxufSlcclxuZXhwb3J0IGNsYXNzIENvbG9yUGlja2VyIGltcGxlbWVudHMgTWF0Rm9ybUZpZWxkQ29udHJvbDxzdHJpbmc+LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHN0YXRpYyBuZXh0SWQgPSAwO1xyXG4gIHJlYWRvbmx5IF9wYWxldHRlcyA9IE1BVEVSSUFMX1BBTEVUVEVTO1xyXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XHJcbiAgcmVhZG9ubHkgc2NhbGVzID0gW1wiNTBcIixcclxuICAgIFwiMTAwXCIsXHJcbiAgICBcIjIwMFwiLFxyXG4gICAgXCIzMDBcIixcclxuICAgIFwiNDAwXCIsXHJcbiAgICBcIjUwMFwiLFxyXG4gICAgXCI2MDBcIixcclxuICAgIFwiNzAwXCIsXHJcbiAgICBcIjgwMFwiLFxyXG4gICAgXCI5MDBcIl07XHJcbiAgcmVhZG9ubHkgY29sb3JzID0gW1wicmVkXCIsXHJcbiAgICBcInBpbmtcIixcclxuICAgIFwicHVycGxlXCIsXHJcbiAgICBcImRlZXBQdXJwbGVcIixcclxuICAgIFwiaW5kaWdvXCIsXHJcbiAgICBcImJsdWVcIixcclxuICAgIFwibGlnaHRCbHVlXCIsXHJcbiAgICBcImN5YW5cIixcclxuICAgIFwidGVhbFwiLFxyXG4gICAgXCJncmVlblwiLFxyXG4gICAgXCJsaWdodEdyZWVuXCIsXHJcbiAgICBcImxpbWVcIixcclxuICAgIFwieWVsbG93XCIsXHJcbiAgICBcImFtYmVyXCIsXHJcbiAgICBcIm9yYW5nZVwiLFxyXG4gICAgXCJicm93blwiLFxyXG4gICAgXCJncmV5XCIsXHJcbiAgICBcImJsdWVHcmV5XCJdO1xyXG5cclxuICByZWFkb25seSBPYmplY3QgPSBPYmplY3Q7XHJcbiAgcHJpdmF0ZSBfb25DaGFuZ2U6IGFueTtcclxuICBwcml2YXRlIF9vblRvdWNoZWQ6IGFueTtcclxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfdmFsdWU6IHN0cmluZztcclxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl92YWx1ZSA9IG9iajtcclxuICB9XHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG4gIGdldCB2YWx1ZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fdmFsdWU7IH1cclxuICBASW5wdXQoKVxyXG4gIHNldCB2YWx1ZSh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdmFsdWUgPSB2YWw7XHJcbiAgICB0aGlzLl9vbkNoYW5nZSAmJiB0aGlzLl9vbkNoYW5nZSh2YWwpO1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZXMubmV4dCh2YWwpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuICByZWFkb25seSBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHJlYWRvbmx5IHZhbHVlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBASG9zdEJpbmRpbmcoKSBpZCA9IGBjb2xvci1waWNrZXItJHtDb2xvclBpY2tlci5uZXh0SWQrK31gO1xyXG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgZm9jdXNlZCA9IGZhbHNlO1xyXG4gIGdldCBlbXB0eSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZSA9PT0gbnVsbDtcclxuICB9XHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mbG9hdGluZycpXHJcbiAgZ2V0IHNob3VsZExhYmVsRmxvYXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkIHx8ICF0aGlzLmVtcHR5O1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIGdldCByZXF1aXJlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcclxuICB9XHJcbiAgc2V0IHJlcXVpcmVkKHJlcSkge1xyXG4gICAgdGhpcy5fcmVxdWlyZWQgPSByZXE7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7IH1cclxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIGVycm9yU3RhdGUgPSBmYWxzZTtcclxuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1kZXNjcmliZWRieScpIGRlc2NyaWJlZEJ5ID0gJyc7XHJcbiAgc2V0RGVzY3JpYmVkQnlJZHMoaWRzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXNjcmliZWRCeSA9IGlkcy5qb2luKCcgJyk7XHJcbiAgfVxyXG4gIG9uQ29udGFpbmVyQ2xpY2soX2V2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLl9vblRvdWNoZWQgJiYgdGhpcy5fb25Ub3VjaGVkKCk7XHJcbiAgICB0aGlzLm9wZW4oKTtcclxuICB9XHJcbiAgQFZpZXdDaGlsZChUZW1wbGF0ZVJlZiwgeyBzdGF0aWM6IHRydWUgfSkgX2NvbG9yUGFsZXR0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9vdmVybGF5UmVmOiBPdmVybGF5UmVmO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXHJcbiAgICBwcml2YXRlIF9vdmVybGF5OiBPdmVybGF5LFxyXG4gICAgcHJpdmF0ZSBfdmM6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBfZGlyOiBEaXJlY3Rpb25hbGl0eSkge1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAoIXRoaXMuX292ZXJsYXlSZWYpIHRoaXMuX292ZXJsYXlSZWYgPSB0aGlzLl9jcmVhdGVPdmVybGF5KCk7XHJcbiAgICBjb25zdCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5fY29sb3JQYWxldHRlLCB0aGlzLl92Yyk7XHJcbiAgICB0aGlzLl9vdmVybGF5UmVmLmF0dGFjaChwb3J0YWwpO1xyXG4gIH1cclxuICBjbG9zZSgpIHtcclxuICAgIHRoaXMuX292ZXJsYXlSZWYuZGV0YWNoKCk7XHJcbiAgfVxyXG4gIF9waWNrKGNvbG9yOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudmFsdWUgPSBjb2xvcjtcclxuICAgIHRoaXMuY2xvc2UoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY3JlYXRlT3ZlcmxheSgpOiBPdmVybGF5UmVmIHtcclxuICAgIGNvbnN0IHJlZiA9IHRoaXMuX292ZXJsYXkuY3JlYXRlKHtcclxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZWxlbWVudCkud2l0aFBvc2l0aW9ucyhbe1xyXG4gICAgICAgIG9yaWdpblg6ICdzdGFydCcsXHJcbiAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXHJcbiAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXHJcbiAgICAgICAgb3ZlcmxheVk6ICd0b3AnXHJcbiAgICAgIH0sIHtcclxuICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxyXG4gICAgICAgIG9yaWdpblk6ICd0b3AnLFxyXG4gICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxyXG4gICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJ1xyXG4gICAgICB9XSksXHJcbiAgICAgIGRpcmVjdGlvbjogdGhpcy5fZGlyLnZhbHVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3BDbGFzczogJ2Nkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wJ1xyXG4gICAgfSk7XHJcbiAgICBtZXJnZShyZWYuYmFja2Ryb3BDbGljaygpLCByZWYua2V5ZG93bkV2ZW50cygpLnBpcGUoZmlsdGVyKGsgPT4gay5rZXlDb2RlID09PSBFU0NBUEUpKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2UoKSk7XHJcbiAgICByZXR1cm4gcmVmO1xyXG4gIH1cclxufVxyXG4iLCI8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT0nb3BlbigpJyBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cclxuICA8c3Bhbj57e2xhYmVsfX08L3NwYW4+XHJcbiAgPG1hdC1pY29uPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+XHJcbjwvYnV0dG9uPlxyXG48bmctdGVtcGxhdGU+XHJcbiAgPGRpdiBjbGFzcz1cImNvbG9yLXBhbGV0dGVcIj5cclxuICAgIDxkaXYgKm5nRm9yPSdsZXQgcCBvZiBPYmplY3Qua2V5cyhfcGFsZXR0ZXMpJyBjbGFzcz1cImNvbG9yLWNvbnRhaW5lclwiPlxyXG4gICAgICA8c3BhbiAqbmdGb3I9J2xldCBjIG9mIE9iamVjdC5rZXlzKF9wYWxldHRlc1twXSknIChjbGljayk9J19waWNrKF9wYWxldHRlc1twXVtjXSknIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT0nX3BhbGV0dGVzW3BdW2NdJyBjbGFzcz1cImNvbG9yLWl0ZW1cIj48L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
@@ -1,36 +1,148 @@
1
1
  import { __decorate } from "tslib";
2
2
  import { moveItemInArray, transferArrayItem } from "@angular/cdk/drag-drop";
3
- import { Component } from "@angular/core";
3
+ import { Component, HostListener } from "@angular/core";
4
4
  import { BizDoc } from "../../../core/decorators";
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@angular/forms";
7
- import * as i2 from "../../../core/session.service";
8
- import * as i3 from "../../utility-ref";
9
- import * as i4 from "@angular/common";
10
- import * as i5 from "@angular/material/toolbar";
7
+ import * as i2 from "../../../core/slots/pane-ref";
8
+ import * as i3 from "../../../core/prompt.service";
9
+ import * as i4 from "../../../core/session.service";
10
+ import * as i5 from "../../utility-ref";
11
+ import * as i6 from "@angular/common";
12
+ import * as i7 from "@angular/cdk/drag-drop";
13
+ import * as i8 from "@angular/material/toolbar";
14
+ import * as i9 from "@angular/material/core";
15
+ import * as i10 from "@angular/material/form-field";
16
+ import * as i11 from "@angular/material/select";
17
+ import * as i12 from "@angular/material/button";
18
+ import * as i13 from "@angular/material/input";
19
+ import * as i14 from "@angular/material/icon";
20
+ import * as i15 from "@angular/material/menu";
21
+ import * as i16 from "../../../core/popup/tooltip.directive";
22
+ import * as i17 from "../../core/ace.input";
23
+ import * as i18 from "../../../core/pipes/translate.pipe";
11
24
  /** */
12
25
  let FormDesignerComponent = class FormDesignerComponent {
13
- constructor(_fb, _session, _ref) {
26
+ constructor(_fb, _pane, _cd, _ps, _session, _ref) {
14
27
  this._fb = _fb;
28
+ this._pane = _pane;
29
+ this._cd = _cd;
30
+ this._ps = _ps;
15
31
  this._session = _session;
16
32
  this._ref = _ref;
17
33
  this.loading = true;
18
34
  this.tools = true;
19
35
  this.saving = false;
36
+ this.history = [];
37
+ this.historyIndex = 0;
20
38
  this.form = this._fb.group({
21
- name: this._fb.control(null),
22
- label: this._fb.control(null),
23
- dataType: this._fb.control(null)
39
+ subject: null,
40
+ value: null,
41
+ cube: null,
42
+ summary: null,
24
43
  });
44
+ this.dirty = false;
45
+ this.settings = false;
46
+ this.datatypes = this._session.profile.types;
47
+ this.cubes = this._session.profile.cubes;
25
48
  }
26
49
  ngOnInit() {
27
- this.datatypes = this._session.profile.types;
28
- this._ref.populate().subscribe(r => {
29
- this.model = r;
50
+ this._pane.queryParamsChange.subscribe(p => {
51
+ const { formId } = p;
52
+ formId && this._open(formId);
53
+ });
54
+ this.form.valueChanges.pipe().
55
+ subscribe(v => {
56
+ this._notifyChange();
57
+ Object.assign(this.model, v);
58
+ });
59
+ }
60
+ _open(formId) {
61
+ this._ref.populate(formId).subscribe(r => {
62
+ this._formId = formId;
63
+ this.model = r || { sections: [] };
30
64
  this.loading = false;
31
65
  });
32
66
  }
67
+ addSection(evt) {
68
+ let n = 0, name, title;
69
+ do {
70
+ n++;
71
+ name = 'section' + '-' + n;
72
+ title = 'Section' + ' ' + n;
73
+ } while (this.model.sections.find(s => s.name === name || s.title === title));
74
+ this._notifyChange();
75
+ this.model.sections.push({
76
+ name,
77
+ title,
78
+ rows: [{ fields: [] }]
79
+ });
80
+ this._cd.detectChanges();
81
+ evt.target.querySelector('input')?.focus();
82
+ }
83
+ addRow(section, evt) {
84
+ this._notifyChange();
85
+ section.rows.push({
86
+ fields: []
87
+ });
88
+ evt.target.querySelector('input')?.focus();
89
+ this._cd.detectChanges();
90
+ }
91
+ addField(section, row, kind, evt) {
92
+ let n = 0, name, label;
93
+ do {
94
+ n++;
95
+ name = 'field' + '_' + n;
96
+ label = 'Field' + ' ' + n;
97
+ } while (section.rows.find(r => r.fields.find(f => f.name === name || f.label === label) != null));
98
+ this._notifyChange();
99
+ row.fields.push({
100
+ kind,
101
+ name,
102
+ label,
103
+ });
104
+ this._cd.detectChanges();
105
+ evt.target.querySelector('input')?.focus();
106
+ }
107
+ removeField(row, field) {
108
+ this._notifyChange();
109
+ row.fields.remove(field);
110
+ }
111
+ removeSection(section) {
112
+ this._notifyChange();
113
+ this.model.sections.remove(section);
114
+ }
115
+ removeRow(section, row) {
116
+ this._notifyChange();
117
+ section.rows.remove(row);
118
+ }
119
+ _notifyChange() {
120
+ this.history.push(this.model);
121
+ this.historyIndex = this.history.length - 1;
122
+ this.dirty = true;
123
+ }
124
+ undo() {
125
+ this.model = this.history[this.historyIndex];
126
+ this.historyIndex--;
127
+ }
128
+ redo() {
129
+ this.model = this.history[this.historyIndex];
130
+ this.historyIndex++;
131
+ }
132
+ /**
133
+ * Ctrl-s save; Ctrl-z undo
134
+ * @param event
135
+ */
136
+ handleKeyboardEvent(event) {
137
+ if (this.dirty && event.ctrlKey) {
138
+ if (event.which === 83 || event.which === 115) {
139
+ this.save();
140
+ event.preventDefault();
141
+ }
142
+ }
143
+ }
33
144
  drop(event) {
145
+ this._notifyChange();
34
146
  if (event.previousContainer === event.container) {
35
147
  moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
36
148
  }
@@ -40,17 +152,27 @@ let FormDesignerComponent = class FormDesignerComponent {
40
152
  }
41
153
  save() {
42
154
  this.saving = true;
43
- this._ref.execute(this.model).subscribe(() => this.saving = false);
155
+ this._ref.execute({ metadata: this.model, formId: this._formId }).subscribe(() => {
156
+ this._ps.toast('ChangesSaved');
157
+ this.dirty = false;
158
+ this.saving = false;
159
+ }, () => {
160
+ this._ps.error();
161
+ this.saving = false;
162
+ });
44
163
  }
45
164
  };
46
- FormDesignerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: FormDesignerComponent, deps: [{ token: i1.FormBuilder }, { token: i2.SessionService }, { token: i3.UtilityRef }], target: i0.ɵɵFactoryTarget.Component });
47
- FormDesignerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: FormDesignerComponent, selector: "ng-component", ngImport: i0, template: "<mat-toolbar></mat-toolbar>\r\n<div class=\"row\">\r\n <div></div>\r\n <div *ngIf=\"tools\"></div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }] });
165
+ FormDesignerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: FormDesignerComponent, deps: [{ token: i1.FormBuilder }, { token: i2.PaneRef }, { token: i0.ChangeDetectorRef }, { token: i3.PromptService }, { token: i4.SessionService }, { token: i5.UtilityRef }], target: i0.ɵɵFactoryTarget.Component });
166
+ FormDesignerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: FormDesignerComponent, selector: "ng-component", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, ngImport: i0, template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n <button mat-icon-button (click)=\"undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"historyIndex === 0\"><mat-icon>undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"historyIndex === history.length - 1\"><mat-icon>redo</mat-icon></button>\r\n</mat-toolbar>\r\n<button mat-icon-button (click)=\"settings = !settings\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\" *ngIf=\"settings\">\r\n <mat-form-field>\r\n <mat-label>{{'Value'|translate}}</mat-label>\r\n <bizdoc-ace-input formControlName=\"value\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'Expression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Subject'|translate}}</mat-label>\r\n <bizdoc-ace-input formControlName=\"subject\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'Expression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Summary'|translate}}</mat-label>\r\n <bizdoc-ace-input formControlName=\"summary\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'Expression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Analysis'|translate}}</mat-label>\r\n <mat-select formControlName=\"cube\">\r\n <mat-option>{{'None'|translate}}</mat-option>\r\n <mat-option *ngFor=\"let c of cubes\" [value]=\"c.name\">{{c.title}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</form>\r\n<div class=\"form\" autocomplete=\"off\" *ngIf=\"model\" cdkDropList [cdkDropListData]=\"model.sections\" (cdkDropListDropped)=\"drop($event)\">\r\n <section class=\"column\" *ngFor=\"let s of model.sections\" cdkDrag>\r\n <div class=\"row\">\r\n <mat-icon class=\"section-drag\" cdkDragHandle>drag_indicator</mat-icon>\r\n <div class=\"column\">\r\n <mat-form-field>\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput [(value)]=\"s.title\" />\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput [(value)]=\"s.name\" />\r\n </mat-form-field>\r\n <div cdkDropList [cdkDropListData]=\"s.rows\" (cdkDropListDropped)=\"drop($event)\">\r\n <div *ngFor=\"let r of s.rows\" class=\"row designer-row\" cdkDrag>\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n <div cdkDropList cdkDropListOrientation=\"horizontal\" [cdkDropListData]=\"r.fields\" (cdkDropListDropped)=\"drop($event)\" class=\"row\">\r\n <div *ngFor=\"let f of r.fields\" cdkDrag class=\"field row\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n <div class=\"column\">\r\n <mat-form-field>\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput required [(value)]=\"f.name\" />\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Label'|translate}}</mat-label>\r\n <input matInput required [(value)]=\"f.label\" />\r\n </mat-form-field>\r\n <ng-container [ngSwitch]=\"f.kind\">\r\n <mat-form-field *ngSwitchCase=\"'Date'\">\r\n <input matInput [required]=\"f.required\" />\r\n </mat-form-field>\r\n <div *ngSwitchCase=\"'Text'\">\r\n </div>\r\n <mat-form-field *ngSwitchCase=\"'Select'\">\r\n <mat-label>{{'DataType'|translate}}</mat-label>\r\n <mat-select [(value)]=\"f.dataType\" required>\r\n <mat-option *ngFor=\"let t of datatypes\" [value]=\"t.name\">{{t.title}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <div *ngSwitchDefault>\r\n <mat-form-field>\r\n <mat-label>{{'Type'|translate}}</mat-label>\r\n <mat-select [(value)]=\"f.kind\" required>\r\n <mat-option value=\"String\">{{'None'|translate}}</mat-option>\r\n <mat-option value=\"Number\">{{'Number'|translate}}</mat-option>\r\n <mat-option value=\"PhoneNumber\">{{'PhoneNumber'|translate}}</mat-option>\r\n <mat-option value=\"EmailAddress\">{{'EmailAddress'|translate}}</mat-option>\r\n <mat-option value=\"Url\">{{'Url'|translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"actions\">\r\n <button mat-stroked-button (click)=\"removeField(r, f)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n <div *cdkDragPlaceholder class=\"drag-placeholder\"></div>\r\n </div>\r\n </div>\r\n <div class=\"column\">\r\n <button mat-stroked-button [matMenuTriggerFor]=\"fieldKindMenu\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #fieldKindMenu>\r\n <button mat-menu-item (click)=\"addField(s, r, 'String', $event)\">{{'Input'|translate}}</button>\r\n <button mat-menu-item (click)=\"addField(s, r, 'Date', $event)\">{{'Date'|translate}}</button>\r\n <button mat-menu-item (click)=\"addField(s, r, 'Select', $event)\">{{'Select'|translate}}</button>\r\n <button mat-menu-item (click)=\"addField(s, r, 'Checkbox', $event)\">{{'Checkbox'|translate}}</button>\r\n <button mat-menu-item (click)=\"addField(s, r, 'Switch', $event)\">{{'Switch'|translate}}</button>\r\n <button mat-menu-item (click)=\"addField(s, r, 'Text', $event)\">{{'Text'|translate}}</button>\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button (click)=\"removeRow(s, r)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <button mat-stroked-button (click)=\"addRow(s, $event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <button mat-stroked-button (click)=\"removeSection(s)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>{{'Value'|translate}}</mat-label>\r\n <bizdoc-ace-input [(value)]=\"s.value\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'Expression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n </section>\r\n <button mat-stroked-button (click)=\"addSection($event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n</div>\r\n", styles: [".form{margin:8px}section,.designer-row,.field{border:2px solid transparent;border-radius:3px;padding:8px}section:hover,.designer-row:hover,.field:hover{border:2px dotted}section .designer-row .field{flex:1}.drag-placeholder{border:2px dashed}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i6.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i6.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i7.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i7.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i7.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i7.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "component", type: i8.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i13.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i14.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i15.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i15.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i15.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i16.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "component", type: i17.AceInput, selector: "bizdoc-ace-input", inputs: ["params", "placeholder", "required", "disabled", "value"] }, { kind: "pipe", type: i18.TranslatePipe, name: "translate" }] });
48
167
  FormDesignerComponent = __decorate([
49
168
  BizDoc({ selector: 'bizdoc-form-designer' })
50
169
  ], FormDesignerComponent);
51
170
  export { FormDesignerComponent };
52
171
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: FormDesignerComponent, decorators: [{
53
172
  type: Component,
54
- args: [{ template: "<mat-toolbar></mat-toolbar>\r\n<div class=\"row\">\r\n <div></div>\r\n <div *ngIf=\"tools\"></div>\r\n</div>\r\n" }]
55
- }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.SessionService }, { type: i3.UtilityRef }]; } });
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9mb3JtL2Rlc2lnbmVyL2Rlc2lnbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vZm9ybS9kZXNpZ25lci9kZXNpZ25lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFlLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7O0FBS2xELE1BQU07SUFHTyxxQkFBcUIsU0FBckIscUJBQXFCO0lBV2hDLFlBQ1UsR0FBZ0IsRUFDaEIsUUFBd0IsRUFDeEIsSUFBdUM7UUFGdkMsUUFBRyxHQUFILEdBQUcsQ0FBYTtRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUN4QixTQUFJLEdBQUosSUFBSSxDQUFtQztRQWJqRCxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsVUFBSyxHQUFHLElBQUksQ0FBQztRQUNiLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFHZixTQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUM1QixLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7U0FDakMsQ0FBQyxDQUFDO0lBSWtELENBQUM7SUFDdEQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQTRCO1FBQy9CLElBQUksS0FBSyxDQUFDLGlCQUFpQixLQUFLLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDL0MsZUFBZSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ2hGO2FBQU07WUFDTCxpQkFBaUIsQ0FDZixLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUM1QixLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksRUFDcEIsS0FBSyxDQUFDLGFBQWEsRUFDbkIsS0FBSyxDQUFDLFlBQVksQ0FDbkIsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUNELElBQUk7UUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDckUsQ0FBQztDQUNGLENBQUE7a0hBdENZLHFCQUFxQjtzR0FBckIscUJBQXFCLG9EQ1hsQyxvSEFLQTtBRE1hLHFCQUFxQjtJQURqQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztHQUNoQyxxQkFBcUIsQ0FzQ2pDO1NBdENZLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQUZqQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSwgdHJhbnNmZXJBcnJheUl0ZW0gfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2RyYWctZHJvcFwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEJpekRvYyB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL2RlY29yYXRvcnNcIjtcclxuaW1wb3J0IHsgRmllbGRUeXBlLCBUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvbW9kZWxzXCI7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlSZWYgfSBmcm9tIFwiLi4vLi4vdXRpbGl0eS1yZWZcIjtcclxuXHJcbi8qKiAqL1xyXG5AQ29tcG9uZW50KHsgdGVtcGxhdGVVcmw6ICdkZXNpZ25lci5jb21wb25lbnQuaHRtbCcgfSlcclxuQEJpekRvYyh7IHNlbGVjdG9yOiAnYml6ZG9jLWZvcm0tZGVzaWduZXInIH0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtRGVzaWduZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGxvYWRpbmcgPSB0cnVlO1xyXG4gIHRvb2xzID0gdHJ1ZTtcclxuICBzYXZpbmcgPSBmYWxzZTtcclxuICBtb2RlbDogTW9kZWw7XHJcbiAgZGF0YXR5cGVzOiBUeXBlW107XHJcbiAgZm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgIG5hbWU6IHRoaXMuX2ZiLmNvbnRyb2wobnVsbCksXHJcbiAgICBsYWJlbDogdGhpcy5fZmIuY29udHJvbChudWxsKSxcclxuICAgIGRhdGFUeXBlOiB0aGlzLl9mYi5jb250cm9sKG51bGwpXHJcbiAgfSk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9mYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3JlZjogVXRpbGl0eVJlZjxib29sZWFuLCBNb2RlbCwgTW9kZWw+KSB7IH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YXR5cGVzID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnR5cGVzO1xyXG4gICAgdGhpcy5fcmVmLnBvcHVsYXRlKCkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICB0aGlzLm1vZGVsID0gcjtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8c3RyaW5nW10+KSB7XHJcbiAgICBpZiAoZXZlbnQucHJldmlvdXNDb250YWluZXIgPT09IGV2ZW50LmNvbnRhaW5lcikge1xyXG4gICAgICBtb3ZlSXRlbUluQXJyYXkoZXZlbnQuY29udGFpbmVyLmRhdGEsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0cmFuc2ZlckFycmF5SXRlbShcclxuICAgICAgICBldmVudC5wcmV2aW91c0NvbnRhaW5lci5kYXRhLFxyXG4gICAgICAgIGV2ZW50LmNvbnRhaW5lci5kYXRhLFxyXG4gICAgICAgIGV2ZW50LnByZXZpb3VzSW5kZXgsXHJcbiAgICAgICAgZXZlbnQuY3VycmVudEluZGV4LFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICBzYXZlKCkge1xyXG4gICAgdGhpcy5zYXZpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5fcmVmLmV4ZWN1dGUodGhpcy5tb2RlbCkuc3Vic2NyaWJlKCgpID0+IHRoaXMuc2F2aW5nID0gZmFsc2UpO1xyXG4gIH1cclxufVxyXG5pbnRlcmZhY2UgTW9kZWwge1xyXG4gIHNlY3Rpb25zOiBTZWN0aW9uW107XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbn1cclxuaW50ZXJmYWNlIFNlY3Rpb24ge1xyXG4gIHJvd3M6IFJvd1tdO1xyXG59XHJcbmludGVyZmFjZSBSb3cgeyBmaWVsZHM6IEZpZWxkW10gfVxyXG5pbnRlcmZhY2UgRmllbGQge1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAga2luZDogRmllbGRUeXBlO1xyXG4gIGRhdGFUeXBlOiBzdHJpbmc7XHJcbn1cclxuIiwiPG1hdC10b29sYmFyPjwvbWF0LXRvb2xiYXI+XHJcbjxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICA8ZGl2PjwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJ0b29sc1wiPjwvZGl2PlxyXG48L2Rpdj5cclxuIl19
173
+ args: [{ template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n <button mat-icon-button (click)=\"undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"historyIndex === 0\"><mat-icon>undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"historyIndex === history.length - 1\"><mat-icon>redo</mat-icon></button>\r\n</mat-toolbar>\r\n<button mat-icon-button (click)=\"settings = !settings\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\" *ngIf=\"settings\">\r\n <mat-form-field>\r\n <mat-label>{{'Value'|translate}}</mat-label>\r\n <bizdoc-ace-input formControlName=\"value\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'Expression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Subject'|translate}}</mat-label>\r\n <bizdoc-ace-input formControlName=\"subject\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'Expression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Summary'|translate}}</mat-label>\r\n <bizdoc-ace-input formControlName=\"summary\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'Expression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Analysis'|translate}}</mat-label>\r\n <mat-select formControlName=\"cube\">\r\n <mat-option>{{'None'|translate}}</mat-option>\r\n <mat-option *ngFor=\"let c of cubes\" [value]=\"c.name\">{{c.title}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</form>\r\n<div class=\"form\" autocomplete=\"off\" *ngIf=\"model\" cdkDropList [cdkDropListData]=\"model.sections\" (cdkDropListDropped)=\"drop($event)\">\r\n <section class=\"column\" *ngFor=\"let s of model.sections\" cdkDrag>\r\n <div class=\"row\">\r\n <mat-icon class=\"section-drag\" cdkDragHandle>drag_indicator</mat-icon>\r\n <div class=\"column\">\r\n <mat-form-field>\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput [(value)]=\"s.title\" />\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput [(value)]=\"s.name\" />\r\n </mat-form-field>\r\n <div cdkDropList [cdkDropListData]=\"s.rows\" (cdkDropListDropped)=\"drop($event)\">\r\n <div *ngFor=\"let r of s.rows\" class=\"row designer-row\" cdkDrag>\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n <div cdkDropList cdkDropListOrientation=\"horizontal\" [cdkDropListData]=\"r.fields\" (cdkDropListDropped)=\"drop($event)\" class=\"row\">\r\n <div *ngFor=\"let f of r.fields\" cdkDrag class=\"field row\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n <div class=\"column\">\r\n <mat-form-field>\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput required [(value)]=\"f.name\" />\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Label'|translate}}</mat-label>\r\n <input matInput required [(value)]=\"f.label\" />\r\n </mat-form-field>\r\n <ng-container [ngSwitch]=\"f.kind\">\r\n <mat-form-field *ngSwitchCase=\"'Date'\">\r\n <input matInput [required]=\"f.required\" />\r\n </mat-form-field>\r\n <div *ngSwitchCase=\"'Text'\">\r\n </div>\r\n <mat-form-field *ngSwitchCase=\"'Select'\">\r\n <mat-label>{{'DataType'|translate}}</mat-label>\r\n <mat-select [(value)]=\"f.dataType\" required>\r\n <mat-option *ngFor=\"let t of datatypes\" [value]=\"t.name\">{{t.title}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <div *ngSwitchDefault>\r\n <mat-form-field>\r\n <mat-label>{{'Type'|translate}}</mat-label>\r\n <mat-select [(value)]=\"f.kind\" required>\r\n <mat-option value=\"String\">{{'None'|translate}}</mat-option>\r\n <mat-option value=\"Number\">{{'Number'|translate}}</mat-option>\r\n <mat-option value=\"PhoneNumber\">{{'PhoneNumber'|translate}}</mat-option>\r\n <mat-option value=\"EmailAddress\">{{'EmailAddress'|translate}}</mat-option>\r\n <mat-option value=\"Url\">{{'Url'|translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"actions\">\r\n <button mat-stroked-button (click)=\"removeField(r, f)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n <div *cdkDragPlaceholder class=\"drag-placeholder\"></div>\r\n </div>\r\n </div>\r\n <div class=\"column\">\r\n <button mat-stroked-button [matMenuTriggerFor]=\"fieldKindMenu\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #fieldKindMenu>\r\n <button mat-menu-item (click)=\"addField(s, r, 'String', $event)\">{{'Input'|translate}}</button>\r\n <button mat-menu-item (click)=\"addField(s, r, 'Date', $event)\">{{'Date'|translate}}</button>\r\n <button mat-menu-item (click)=\"addField(s, r, 'Select', $event)\">{{'Select'|translate}}</button>\r\n <button mat-menu-item (click)=\"addField(s, r, 'Checkbox', $event)\">{{'Checkbox'|translate}}</button>\r\n <button mat-menu-item (click)=\"addField(s, r, 'Switch', $event)\">{{'Switch'|translate}}</button>\r\n <button mat-menu-item (click)=\"addField(s, r, 'Text', $event)\">{{'Text'|translate}}</button>\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button (click)=\"removeRow(s, r)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <button mat-stroked-button (click)=\"addRow(s, $event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <button mat-stroked-button (click)=\"removeSection(s)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>{{'Value'|translate}}</mat-label>\r\n <bizdoc-ace-input [(value)]=\"s.value\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'Expression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n </section>\r\n <button mat-stroked-button (click)=\"addSection($event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n</div>\r\n", styles: [".form{margin:8px}section,.designer-row,.field{border:2px solid transparent;border-radius:3px;padding:8px}section:hover,.designer-row:hover,.field:hover{border:2px dotted}section .designer-row .field{flex:1}.drag-placeholder{border:2px dashed}\n"] }]
174
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.PaneRef }, { type: i0.ChangeDetectorRef }, { type: i3.PromptService }, { type: i4.SessionService }, { type: i5.UtilityRef }]; }, propDecorators: { handleKeyboardEvent: [{
175
+ type: HostListener,
176
+ args: ['document:keydown', ['$event']]
177
+ }] } });
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9mb3JtL2Rlc2lnbmVyL2Rlc2lnbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vZm9ybS9kZXNpZ25lci9kZXNpZ25lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFlLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pGLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUduRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT2xELE1BQU07SUFNTyxxQkFBcUIsU0FBckIscUJBQXFCO0lBbUJoQyxZQUNVLEdBQWdCLEVBQ2hCLEtBQW1CLEVBQ25CLEdBQXNCLEVBQ3RCLEdBQWtCLEVBQ2xCLFFBQXdCLEVBQ3hCLElBQWlHO1FBTGpHLFFBQUcsR0FBSCxHQUFHLENBQWE7UUFDaEIsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNuQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixRQUFHLEdBQUgsR0FBRyxDQUFlO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQWdCO1FBQ3hCLFNBQUksR0FBSixJQUFJLENBQTZGO1FBeEIzRyxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsVUFBSyxHQUFHLElBQUksQ0FBQztRQUNiLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFTixZQUFPLEdBQXNCLEVBQUUsQ0FBQztRQUN6QyxpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUdSLFNBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUM3QixPQUFP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Q29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5LCB0cmFuc2ZlckFycmF5SXRlbSB9IGZyb20gXCJAYW5ndWxhci9jZGsvZHJhZy1kcm9wXCI7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgY2hhbmdlIH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWdyaWRzXCI7XHJcbmltcG9ydCB7IEJpekRvYyB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL2RlY29yYXRvcnNcIjtcclxuaW1wb3J0IHsgQ3ViZSwgRmllbGRUeXBlLCBUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvbW9kZWxzXCI7XHJcbmltcG9ydCB7IFByb21wdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9wcm9tcHQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBQYW5lUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvc2xvdHMvcGFuZS1yZWZcIjtcclxuaW1wb3J0IHsgVXRpbGl0eVJlZiB9IGZyb20gXCIuLi8uLi91dGlsaXR5LXJlZlwiO1xyXG5cclxuLyoqICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlVXJsOiAnZGVzaWduZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWydkZXNpZ25lci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbkBCaXpEb2MoeyBzZWxlY3RvcjogJ2JpemRvYy1mb3JtLWRlc2lnbmVyJyB9KVxyXG5leHBvcnQgY2xhc3MgRm9ybURlc2lnbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBsb2FkaW5nID0gdHJ1ZTtcclxuICB0b29scyA9IHRydWU7XHJcbiAgc2F2aW5nID0gZmFsc2U7XHJcbiAgbW9kZWw6IEJveEZvcm1NZXRhZGF0YTtcclxuICByZWFkb25seSBoaXN0b3J5OiBCb3hGb3JtTWV0YWRhdGFbXSA9IFtdO1xyXG4gIGhpc3RvcnlJbmRleCA9IDA7XHJcbiAgcmVhZG9ubHkgZGF0YXR5cGVzOiBUeXBlW107XHJcbiAgcmVhZG9ubHkgY3ViZXM6IEN1YmVbXTtcclxuICByZWFkb25seSBmb3JtID0gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgc3ViamVjdDogbnVsbCxcclxuICAgIHZhbHVlOiBudWxsLFxyXG4gICAgY3ViZTogbnVsbCxcclxuICAgIHN1bW1hcnk6IG51bGwsXHJcbiAgfSk7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBkaXJ0eSA9IGZhbHNlO1xyXG4gIHNldHRpbmdzID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfZm9ybUlkOiBzdHJpbmc7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9mYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIF9wYW5lOiBQYW5lUmVmPGFueT4sXHJcbiAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIF9wczogUHJvbXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcmVmOiBVdGlsaXR5UmVmPGJvb2xlYW4sIHsgbWV0YWRhdGE6IEJveEZvcm1NZXRhZGF0YSwgZm9ybUlkOiBzdHJpbmcgfSwgQm94Rm9ybU1ldGFkYXRhLCBzdHJpbmc+KSB7XHJcbiAgICB0aGlzLmRhdGF0eXBlcyA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS50eXBlcztcclxuICAgIHRoaXMuY3ViZXMgPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuY3ViZXM7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcGFuZS5xdWVyeVBhcmFtc0NoYW5nZS5zdWJzY3JpYmUocCA9PiB7XHJcbiAgICAgIGNvbnN0IHsgZm9ybUlkIH0gPSBwO1xyXG4gICAgICBmb3JtSWQgJiYgdGhpcy5fb3Blbihmb3JtSWQpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUoKS5cclxuICAgICAgc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5tb2RlbCwgdik7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIF9vcGVuKGZvcm1JZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9yZWYucG9wdWxhdGUoZm9ybUlkKS5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgIHRoaXMuX2Zvcm1JZCA9IGZvcm1JZDtcclxuICAgICAgdGhpcy5tb2RlbCA9IHIgfHwgeyBzZWN0aW9uczogW10gfTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgYWRkU2VjdGlvbihldnQ/OiBFdmVudCkge1xyXG4gICAgbGV0IG4gPSAwLCBuYW1lLCB0aXRsZTtcclxuICAgIGRvIHtcclxuICAgICAgbisrO1xyXG4gICAgICBuYW1lID0gJ3NlY3Rpb24nICsgJy0nICsgbjtcclxuICAgICAgdGl0bGUgPSAnU2VjdGlvbicgKyAnICcgKyBuO1xyXG4gICAgfSB3aGlsZSAodGhpcy5tb2RlbC5zZWN0aW9ucy5maW5kKHMgPT4gcy5uYW1lID09PSBuYW1lIHx8IHMudGl0bGUgPT09IHRpdGxlKSk7XHJcbiAgICB0aGlzLl9ub3RpZnlDaGFuZ2UoKTtcclxuICAgIHRoaXMubW9kZWwuc2VjdGlvbnMucHVzaCh7XHJcbiAgICAgIG5hbWUsXHJcbiAgICAgIHRpdGxlLFxyXG4gICAgICByb3dzOiBbeyBmaWVsZHM6IFtdIH1dXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIChldnQudGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50KS5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpPy5mb2N1cygpXHJcbiAgfVxyXG4gIGFkZFJvdyhzZWN0aW9uOiBTZWN0aW9uTW9kZWwsIGV2dD86IEV2ZW50KSB7XHJcbiAgICB0aGlzLl9ub3RpZnlDaGFuZ2UoKTtcclxuICAgIHNlY3Rpb24ucm93cy5wdXNoKHtcclxuICAgICAgZmllbGRzOiBbXVxyXG4gICAgfSk7XHJcbiAgICAoZXZ0LnRhcmdldCBhcyBIVE1MRGl2RWxlbWVudCkucXVlcnlTZWxlY3RvcignaW5wdXQnKT8uZm9jdXMoKVxyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBhZGRGaWVsZChzZWN0aW9uOiBTZWN0aW9uTW9kZWwsIHJvdzogUm93TW9kZWwsIGtpbmQ6IEZpZWxkVHlwZSwgZXZ0PzogRXZlbnQpIHtcclxuICAgIGxldCBuID0gMCwgbmFtZSwgbGFiZWw7XHJcbiAgICBkbyB7XHJcbiAgICAgIG4rKztcclxuICAgICAgbmFtZSA9ICdmaWVsZCcgKyAnXycgKyBuO1xyXG4gICAgICBsYWJlbCA9ICdGaWVsZCcgKyAnICcgKyBuO1xyXG4gICAgfSB3aGlsZSAoc2VjdGlvbi5yb3dzLmZpbmQociA9PiByLmZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBuYW1lIHx8IGYubGFiZWwgPT09IGxhYmVsKSAhPSBudWxsKSk7XHJcbiAgICB0aGlzLl9ub3RpZnlDaGFuZ2UoKTtcclxuICAgIHJvdy5maWVsZHMucHVzaCh7XHJcbiAgICAgIGtpbmQsXHJcbiAgICAgIG5hbWUsXHJcbiAgICAgIGxhYmVsLFxyXG4gICAgfSBhcyBhbnkpO1xyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgKGV2dC50YXJnZXQgYXMgSFRNTERpdkVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk/LmZvY3VzKClcclxuICB9XHJcbiAgcmVtb3ZlRmllbGQocm93OiBSb3dNb2RlbCwgZmllbGQ6IEZpZWxkTW9kZWwpIHtcclxuICAgIHRoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgcm93LmZpZWxkcy5yZW1vdmUoZmllbGQpO1xyXG4gIH1cclxuICByZW1vdmVTZWN0aW9uKHNlY3Rpb246IFNlY3Rpb25Nb2RlbCkge1xyXG4gICAgdGhpcy5fbm90aWZ5Q2hhbmdlKCk7XHJcbiAgICB0aGlzLm1vZGVsLnNlY3Rpb25zLnJlbW92ZShzZWN0aW9uKTtcclxuICB9XHJcbiAgcmVtb3ZlUm93KHNlY3Rpb246IFNlY3Rpb25Nb2RlbCwgcm93OiBSb3dNb2RlbCkge1xyXG4gICAgdGhpcy5fbm90aWZ5Q2hhbmdlKCk7XHJcbiAgICBzZWN0aW9uLnJvd3MucmVtb3ZlKHJvdyk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX25vdGlmeUNoYW5nZSgpIHtcclxuICAgIHRoaXMuaGlzdG9yeS5wdXNoKHRoaXMubW9kZWwpO1xyXG4gICAgdGhpcy5oaXN0b3J5SW5kZXggPSB0aGlzLmhpc3RvcnkubGVuZ3RoIC0gMTtcclxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gIH1cclxuICB1bmRvKCkge1xyXG4gICAgdGhpcy5tb2RlbCA9IHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnlJbmRleF07XHJcbiAgICB0aGlzLmhpc3RvcnlJbmRleC0tO1xyXG4gIH1cclxuICByZWRvKCkge1xyXG4gICAgdGhpcy5tb2RlbCA9IHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnlJbmRleF07XHJcbiAgICB0aGlzLmhpc3RvcnlJbmRleCsrO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDdHJsLXMgc2F2ZTsgQ3RybC16IHVuZG9cclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5kaXJ0eSAmJiBldmVudC5jdHJsS2V5KSB7XHJcbiAgICAgIGlmIChldmVudC53aGljaCA9PT0gODMgfHwgZXZlbnQud2hpY2ggPT09IDExNSkge1xyXG4gICAgICAgIHRoaXMuc2F2ZSgpO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8KEZpZWxkTW9kZWwgfCBSb3dNb2RlbCB8IFNlY3Rpb25Nb2RlbClbXT4pIHtcclxuICAgIHRoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgaWYgKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyID09PSBldmVudC5jb250YWluZXIpIHtcclxuICAgICAgbW92ZUl0ZW1JbkFycmF5KGV2ZW50LmNvbnRhaW5lci5kYXRhLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHJhbnNmZXJBcnJheUl0ZW0oXHJcbiAgICAgICAgZXZlbnQucHJldmlvdXNDb250YWluZXIuZGF0YSxcclxuICAgICAgICBldmVudC5jb250YWluZXIuZGF0YSxcclxuICAgICAgICBldmVudC5wcmV2aW91c0luZGV4LFxyXG4gICAgICAgIGV2ZW50LmN1cnJlbnRJbmRleCxcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbiAgc2F2ZSgpIHtcclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuX3JlZi5leGVjdXRlKHsgbWV0YWRhdGE6IHRoaXMubW9kZWwsIGZvcm1JZDogdGhpcy5fZm9ybUlkIH0pLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuX3BzLnRvYXN0KCdDaGFuZ2VzU2F2ZWQnKTtcclxuICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgfSwgKCkgPT4ge1xyXG4gICAgICB0aGlzLl9wcy5lcnJvcigpO1xyXG4gICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgQm94Rm9ybU1ldGFkYXRhIHtcclxuICBzZWN0aW9uczogU2VjdGlvbk1vZGVsW107XHJcbiAgdmFsdWU/OiBzdHJpbmc7XHJcbiAgc3ViamVjdD86IHN0cmluZztcclxuICBzdW1tYXJ5Pzogc3RyaW5nO1xyXG4gIGN1YmU/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBTZWN0aW9uTW9kZWwge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIHZhbHVlPzogc3RyaW5nO1xyXG4gIHJvd3M6IFJvd01vZGVsW107XHJcbn1cclxuaW50ZXJmYWNlIFJvd01vZGVsIHtcclxuICBmaWVsZHM6IEZpZWxkTW9kZWxbXTtcclxufVxyXG5pbnRlcmZhY2UgRmllbGRNb2RlbCB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAga2luZDogRmllbGRUeXBlO1xyXG4gIHJlcXVpcmVkOiBib29sZWFuO1xyXG4gIGRhdGFUeXBlPzogc3RyaW5nO1xyXG4gIG1pbj86IGFueTtcclxuICBtYXg/OiBhbnk7XHJcbn1cclxuIiwiPG1hdC10b29sYmFyPlxyXG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzYXZlKClcIiBbZGlzYWJsZWRdPVwiIWRpcnR5IHx8IGxvYWRpbmcgfHwgc2F2aW5nXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1NhdmUnfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj5zYXZlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidW5kbygpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1VuZG8nIHwgdHJhbnNsYXRlXCIgW2Rpc2FibGVkXT1cImhpc3RvcnlJbmRleCA9PT0gMFwiPjxtYXQtaWNvbj51bmRvPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicmVkbygpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1JlZG8nIHwgdHJhbnNsYXRlXCIgW2Rpc2FibGVkXT1cImhpc3RvcnlJbmRleCA9PT0gaGlzdG9yeS5sZW5ndGggLSAxXCI+PG1hdC1pY29uPnJlZG88L21hdC1pY29uPjwvYnV0dG9uPlxyXG48L21hdC10b29sYmFyPlxyXG48YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2V0dGluZ3MgPSAhc2V0dGluZ3NcIiBbYml6ZG9jVG9vbHRpcF09XCInU2V0dGluZ3MnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+c2V0dGluZ3M8L21hdC1pY29uPjwvYnV0dG9uPlxyXG48Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImNvbHVtblwiICpuZ0lmPVwic2V0dGluZ3NcIj5cclxuICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8bWF0LWxhYmVsPnt7J1ZhbHVlJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgPGJpemRvYy1hY2UtaW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIj48L2JpemRvYy1hY2UtaW5wdXQ+XHJcbiAgICA8bWF0LWhpbnQ+IHt7ICdFeHByZXNzaW9uJ3x0cmFuc2xhdGUgfX08L21hdC1oaW50PlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgPG1hdC1sYWJlbD57eydTdWJqZWN0J3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgPGJpemRvYy1hY2UtaW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwic3ViamVjdFwiPjwvYml6ZG9jLWFjZS1pbnB1dD5cclxuICAgIDxtYXQtaGludD4ge3sgJ0V4cHJlc3Npb24nfHRyYW5zbGF0ZSB9fTwvbWF0LWhpbnQ+XHJcbiAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8bWF0LWxhYmVsPnt7J1N1bW1hcnknfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICA8Yml6ZG9jLWFjZS1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJzdW1tYXJ5XCI+PC9iaXpkb2MtYWNlLWlucHV0PlxyXG4gICAgPG1hdC1oaW50PiB7eyAnRXhwcmVzc2lvbid8dHJhbnNsYXRlIH19PC9tYXQtaGludD5cclxuICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDxtYXQtZm9ybS1maWVsZD5cclxuICAgIDxtYXQtbGFiZWw+e3snQW5hbHlzaXMnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjdWJlXCI+XHJcbiAgICAgIDxtYXQtb3B0aW9uPnt7J05vbmUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgYyBvZiBjdWJlc1wiIFt2YWx1ZV09XCJjLm5hbWVcIj57e2MudGl0bGV9fTwvbWF0LW9wdGlvbj5cclxuICAgIDwvbWF0LXNlbGVjdD5cclxuICA8L21hdC1mb3JtLWZpZWxkPlxyXG48L2Zvcm0+XHJcbjxkaXYgY2xhc3M9XCJmb3JtXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKm5nSWY9XCJtb2RlbFwiIGNka0Ryb3BMaXN0IFtjZGtEcm9wTGlzdERhdGFdPVwibW9kZWwuc2VjdGlvbnNcIiAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50KVwiPlxyXG4gIDxzZWN0aW9uIGNsYXNzPVwiY29sdW1uXCIgKm5nRm9yPVwibGV0IHMgb2YgbW9kZWwuc2VjdGlvbnNcIiBjZGtEcmFnPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJzZWN0aW9uLWRyYWdcIiBjZGtEcmFnSGFuZGxlPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbHVtblwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+e3snVGl0bGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyh2YWx1ZSldPVwicy50aXRsZVwiIC8+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPnt7J05hbWUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyh2YWx1ZSldPVwicy5uYW1lXCIgLz5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxkaXYgY2RrRHJvcExpc3QgW2Nka0Ryb3BMaXN0RGF0YV09XCJzLnJvd3NcIiAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgciBvZiBzLnJvd3NcIiBjbGFzcz1cInJvdyBkZXNpZ25lci1yb3dcIiBjZGtEcmFnPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2RrRHJhZ0hhbmRsZT5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDxkaXYgY2RrRHJvcExpc3QgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIiBbY2RrRHJvcExpc3REYXRhXT1cInIuZmllbGRzXCIgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGYgb2Ygci5maWVsZHNcIiBjZGtEcmFnIGNsYXNzPVwiZmllbGQgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2RrRHJhZ0hhbmRsZT5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7J05hbWUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIFsodmFsdWUpXT1cImYubmFtZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7J0xhYmVsJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCByZXF1aXJlZCBbKHZhbHVlKV09XCJmLmxhYmVsXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZi5raW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ1N3aXRjaENhc2U9XCInRGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbcmVxdWlyZWRdPVwiZi5yZXF1aXJlZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInVGV4dCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nU3dpdGNoQ2FzZT1cIidTZWxlY3QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7J0RhdGFUeXBlJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyh2YWx1ZSldPVwiZi5kYXRhVHlwZVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdCBvZiBkYXRhdHlwZXNcIiBbdmFsdWVdPVwidC5uYW1lXCI+e3t0LnRpdGxlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3snVHlwZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyh2YWx1ZSldPVwiZi5raW5kXCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdHJpbmdcIj57eydOb25lJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIk51bWJlclwiPnt7J051bWJlcid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJQaG9uZU51bWJlclwiPnt7J1Bob25lTnVtYmVyJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkVtYWlsQWRkcmVzc1wiPnt7J0VtYWlsQWRkcmVzcyd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJVcmxcIj57eydVcmwnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cInJlbW92ZUZpZWxkKHIsIGYpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0Rpc2NhcmQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqY2RrRHJhZ1BsYWNlaG9sZGVyIGNsYXNzPVwiZHJhZy1wbGFjZWhvbGRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJmaWVsZEtpbmRNZW51XCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0FkZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxtYXQtbWVudSAjZmllbGRLaW5kTWVudT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiYWRkRmllbGQocywgciwgJ1N0cmluZycsICRldmVudClcIj57eydJbnB1dCd8dHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiYWRkRmllbGQocywgciwgJ0RhdGUnLCAkZXZlbnQpXCI+e3snRGF0ZSd8dHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiYWRkRmllbGQocywgciwgJ1NlbGVjdCcsICRldmVudClcIj57eydTZWxlY3QnfHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFkZEZpZWxkKHMsIHIsICdDaGVja2JveCcsICRldmVudClcIj57eydDaGVja2JveCd8dHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiYWRkRmllbGQocywgciwgJ1N3aXRjaCcsICRldmVudClcIj57eydTd2l0Y2gnfHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFkZEZpZWxkKHMsIHIsICdUZXh0JywgJGV2ZW50KVwiPnt7J1RleHQnfHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cInJlbW92ZVJvdyhzLCByKVwiIFtiaXpkb2NUb29sdGlwXT1cIidEaXNjYXJkJ3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJhZGRSb3cocywgJGV2ZW50KVwiIFtiaXpkb2NUb29sdGlwXT1cIidBZGQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+YWRkPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cInJlbW92ZVNlY3Rpb24ocylcIiBbYml6ZG9jVG9vbHRpcF09XCInRGlzY2FyZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snVmFsdWUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxiaXpkb2MtYWNlLWlucHV0IFsodmFsdWUpXT1cInMudmFsdWVcIj48L2JpemRvYy1hY2UtaW5wdXQ+XHJcbiAgICAgIDxtYXQtaGludD4ge3sgJ0V4cHJlc3Npb24nfHRyYW5zbGF0ZSB9fTwvbWF0LWhpbnQ+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvc2VjdGlvbj5cclxuICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwiYWRkU2VjdGlvbigkZXZlbnQpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0FkZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG48L2Rpdj5cclxuIl19