@bizdoc/core 1.17.10 → 1.17.12

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 (107) hide show
  1. package/assets/bizdoc-schema.json +1 -0
  2. package/esm2020/lib/admin/architecture/declarations.mjs +1 -1
  3. package/esm2020/lib/admin/architecture/designer-element.component.mjs +2 -2
  4. package/esm2020/lib/admin/architecture/designer.base.mjs +29 -1
  5. package/esm2020/lib/admin/architecture/designer.component.mjs +5 -4
  6. package/esm2020/lib/admin/architecture/elements/action.component.mjs +1 -1
  7. package/esm2020/lib/admin/architecture/elements/attribute.component.mjs +6 -5
  8. package/esm2020/lib/admin/architecture/elements/configuration-datasource.component.mjs +1 -1
  9. package/esm2020/lib/admin/architecture/elements/control.component.mjs +3 -2
  10. package/esm2020/lib/admin/architecture/elements/cube.component.mjs +24 -20
  11. package/esm2020/lib/admin/architecture/elements/folder.component.mjs +4 -3
  12. package/esm2020/lib/admin/architecture/elements/form-invite.dialog.mjs +1 -1
  13. package/esm2020/lib/admin/architecture/elements/form.component.mjs +4 -4
  14. package/esm2020/lib/admin/architecture/elements/report.component.mjs +4 -3
  15. package/esm2020/lib/admin/architecture/elements/role.component.mjs +6 -5
  16. package/esm2020/lib/admin/architecture/elements/state.component.mjs +1 -1
  17. package/esm2020/lib/admin/architecture/elements/type.component.mjs +6 -6
  18. package/esm2020/lib/admin/architecture/elements/widget.component.mjs +4 -3
  19. package/esm2020/lib/admin/core/localized-string.component.mjs +12 -45
  20. package/esm2020/lib/admin/form/designer/box-designer.component.mjs +11 -9
  21. package/esm2020/lib/admin/form/designer/properties.component.mjs +2 -2
  22. package/esm2020/lib/admin/form/designer/section.component.mjs +1 -1
  23. package/esm2020/lib/admin/form/workflow/node.component.mjs +2 -2
  24. package/esm2020/lib/admin/positions/positions.component.mjs +27 -26
  25. package/esm2020/lib/admin/system.service.mjs +30 -2
  26. package/esm2020/lib/browse/browse-items.component.mjs +12 -11
  27. package/esm2020/lib/compose/form.component.mjs +4 -4
  28. package/esm2020/lib/compose/version-compare/version-compare.directive.mjs +8 -8
  29. package/esm2020/lib/core/checkbox.mjs +5 -5
  30. package/esm2020/lib/core/component-factory-resolver.mjs +1 -1
  31. package/esm2020/lib/core/fields/address.designer.mjs +1 -1
  32. package/esm2020/lib/core/fields/autocomplete.field.mjs +27 -12
  33. package/esm2020/lib/core/fields/checkbox.designer.mjs +1 -1
  34. package/esm2020/lib/core/fields/checkbox.field.mjs +3 -3
  35. package/esm2020/lib/core/fields/checklist.designer.mjs +27 -12
  36. package/esm2020/lib/core/fields/date-range.designer.mjs +1 -1
  37. package/esm2020/lib/core/fields/date.designer.mjs +1 -1
  38. package/esm2020/lib/core/fields/expression.field.mjs +31 -5
  39. package/esm2020/lib/core/fields/file.designer.mjs +1 -1
  40. package/esm2020/lib/core/fields/html.designer.mjs +1 -1
  41. package/esm2020/lib/core/fields/input.designer.mjs +1 -1
  42. package/esm2020/lib/core/fields/localized-string.field.mjs +32 -5
  43. package/esm2020/lib/core/fields/numeric.designer.mjs +1 -1
  44. package/esm2020/lib/core/fields/options.base.mjs +7 -7
  45. package/esm2020/lib/core/fields/options.component.mjs +3 -3
  46. package/esm2020/lib/core/fields/radio-button.designer.mjs +9 -9
  47. package/esm2020/lib/core/fields/select.designer.mjs +26 -12
  48. package/esm2020/lib/core/fields/signature.designer.mjs +1 -1
  49. package/esm2020/lib/core/fields/textarea.designer.mjs +1 -1
  50. package/esm2020/lib/core/fields/time.designer.mjs +40 -0
  51. package/esm2020/lib/core/fields/time.field.mjs +40 -0
  52. package/esm2020/lib/core/fields/timespan.field.mjs +19 -2
  53. package/esm2020/lib/core/fields/yesno.designer.mjs +29 -15
  54. package/esm2020/lib/core/inputs/auto-complete.input.mjs +2 -2
  55. package/esm2020/lib/core/inputs/select.input.mjs +2 -2
  56. package/esm2020/lib/core/layout.component.mjs +9 -71
  57. package/esm2020/lib/core/models.mjs +1 -19
  58. package/esm2020/lib/core/slots/router.service.mjs +2 -2
  59. package/esm2020/lib/core/slots/slots.component.mjs +7 -4
  60. package/esm2020/lib/cube/chart/chart.component.mjs +2 -2
  61. package/esm2020/lib/cube/explore/explore-items.component.mjs +9 -9
  62. package/esm2020/lib/designer.module.mjs +18 -14
  63. package/esm2020/lib/reports/report-viewer.component.mjs +2 -2
  64. package/esm2020/lib/reports/report.mobile.component.mjs +5 -5
  65. package/esm2020/lib/reports/table/table-view.component.mjs +2 -2
  66. package/esm2020/lib/shared.module.mjs +6 -4
  67. package/esm2020/lib/system.module.mjs +7 -3
  68. package/esm2020/lib/views/timeline/timeline.component.exp.mjs +5 -2
  69. package/esm2020/public-api.mjs +5 -1
  70. package/fesm2015/bizdoc-core.mjs +7208 -7053
  71. package/fesm2015/bizdoc-core.mjs.map +1 -1
  72. package/fesm2020/bizdoc-core.mjs +11266 -11115
  73. package/fesm2020/bizdoc-core.mjs.map +1 -1
  74. package/lib/admin/architecture/declarations.d.ts +5 -0
  75. package/lib/admin/architecture/designer.base.d.ts +4 -2
  76. package/lib/admin/architecture/elements/attribute.component.d.ts +2 -2
  77. package/lib/admin/architecture/elements/control.component.d.ts +2 -2
  78. package/lib/admin/architecture/elements/cube.component.d.ts +5 -5
  79. package/lib/admin/architecture/elements/folder.component.d.ts +1 -0
  80. package/lib/admin/architecture/elements/form.component.d.ts +2 -2
  81. package/lib/admin/architecture/elements/role.component.d.ts +2 -2
  82. package/lib/admin/architecture/elements/type.component.d.ts +1 -1
  83. package/lib/admin/core/localized-string.component.d.ts +4 -17
  84. package/lib/admin/form/designer/box-designer.component.d.ts +1 -2
  85. package/lib/admin/positions/positions.component.d.ts +8 -5
  86. package/lib/admin/system.service.d.ts +12 -1
  87. package/lib/core/checkbox.d.ts +2 -2
  88. package/lib/core/component-factory-resolver.d.ts +1 -1
  89. package/lib/core/fields/autocomplete.field.d.ts +4 -6
  90. package/lib/core/fields/checklist.designer.d.ts +2 -2
  91. package/lib/core/fields/expression.field.d.ts +12 -2
  92. package/lib/core/fields/localized-string.field.d.ts +9 -2
  93. package/lib/core/fields/options.base.d.ts +6 -5
  94. package/lib/core/fields/radio-button.designer.d.ts +2 -2
  95. package/lib/core/fields/select.designer.d.ts +2 -2
  96. package/lib/core/fields/time.designer.d.ts +25 -0
  97. package/lib/core/fields/time.field.d.ts +22 -0
  98. package/lib/core/fields/timespan.field.d.ts +10 -2
  99. package/lib/core/fields/yesno.designer.d.ts +4 -6
  100. package/lib/core/layout.component.d.ts +5 -2
  101. package/lib/core/models.d.ts +4 -28
  102. package/lib/core/slots/router.service.d.ts +1 -1
  103. package/lib/designer.module.d.ts +24 -20
  104. package/lib/shared.module.d.ts +137 -136
  105. package/lib/views/timeline/timeline.component.exp.d.ts +2 -1
  106. package/package.json +1 -1
  107. package/public-api.d.ts +4 -0
@@ -85,7 +85,6 @@ let FormDesignerComponent = class FormDesignerComponent {
85
85
  summary: null,
86
86
  sections: this.sections
87
87
  });
88
- this._controls = {};
89
88
  }
90
89
  ngOnInit() {
91
90
  this._pane.queryParamsChange().subscribe(p => {
@@ -156,7 +155,7 @@ let FormDesignerComponent = class FormDesignerComponent {
156
155
  this._cd.detectChanges();
157
156
  this._el.nativeElement.querySelector(`section[data-index='${this.sections.controls.indexOf(section)}'] .designer-row:last-child button`)?.focus();
158
157
  }
159
- iconOf(type) { return this._controls[type].icon; }
158
+ iconOf(type) { return this.controls[type].icon; }
160
159
  addField(section, row, control, evt) {
161
160
  let n = 0, name, label;
162
161
  do {
@@ -167,6 +166,7 @@ let FormDesignerComponent = class FormDesignerComponent {
167
166
  find(r => r.get('fields').controls.find(f => f.value.name === name || f.value.label === label) != null));
168
167
  this._router.navigate(ControlPropertiesComponent, {
169
168
  policy: OpenPolicy.Dialog | OpenPolicy.Dismissable,
169
+ icon: control.icon,
170
170
  state: {
171
171
  name, label, draft: true,
172
172
  controlType: control.name
@@ -179,9 +179,11 @@ let FormDesignerComponent = class FormDesignerComponent {
179
179
  }));
180
180
  }
181
181
  editField(field) {
182
+ const model = field.getRawValue(), control = this.controls[model.controlType];
182
183
  this._router.navigate(ControlPropertiesComponent, {
183
- policy: OpenPolicy.Tab,
184
- state: field.getRawValue()
184
+ policy: OpenPolicy.Tab | OpenPolicy.Defer,
185
+ icon: control.icon,
186
+ state: model
185
187
  }).then(e => e.closed().subscribe(v => {
186
188
  if (v) {
187
189
  this._notifyChange();
@@ -191,7 +193,7 @@ let FormDesignerComponent = class FormDesignerComponent {
191
193
  }
192
194
  editSection(field) {
193
195
  this._router.navigate(SectionPropertiesComponent, {
194
- policy: OpenPolicy.Tab,
196
+ policy: OpenPolicy.Tab | OpenPolicy.Defer,
195
197
  state: field.getRawValue()
196
198
  }).then(e => e.closed().subscribe(v => {
197
199
  if (v) {
@@ -202,7 +204,7 @@ let FormDesignerComponent = class FormDesignerComponent {
202
204
  }
203
205
  opensettings() {
204
206
  this._router.navigate(BoxSettingsComponent, {
205
- policy: OpenPolicy.Tab,
207
+ policy: OpenPolicy.Tab | OpenPolicy.Defer,
206
208
  state: this.form.getRawValue()
207
209
  }).then(e => e.closed().subscribe(v => {
208
210
  this._notifyChange();
@@ -284,16 +286,16 @@ let FormDesignerComponent = class FormDesignerComponent {
284
286
  }
285
287
  };
286
288
  FormDesignerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: FormDesignerComponent, deps: [{ token: i3.FormBuilder }, { token: i4.PaneRef }, { token: i0.ChangeDetectorRef }, { token: i5.PromptService }, { token: i6.SystemService }, { token: i7.TranslateService }, { token: i8.PanesRouter }, { token: i1.SessionService }, { token: i0.ElementRef }, { token: i9.UtilityRef }], target: i0.ɵɵFactoryTarget.Component });
287
- FormDesignerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", 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]=\"!form.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 === -1\"><mat-icon class=\"mat-icon-rtl-mirror\">undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"historyIndex === history.length - 1\"><mat-icon class=\"mat-icon-rtl-mirror\">redo</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <!--<button mat-icon-button (click)=\"opensettings()\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>-->\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" *ngIf=\"model\">\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, sections)\">\r\n <section class=\"column\" *ngFor=\"let s of sections.controls; let si = index\" cdkDrag [attr.data-index]=\"si\">\r\n <div class=\"row\">\r\n <mat-icon class=\"section-drag\" cdkDragHandle>drag_indicator</mat-icon>\r\n <div class=\"column\" [formGroup]=\"s\">\r\n <h2 class=\"mat-title\">{{s.get('title').value|localizedString}}</h2>\r\n <p class=\"mat-body-1\" *ngIf=\"s.get('note').value\">{{s.get('note').value|localizedString}}</p>\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, s.get('rows'))\">\r\n <div *ngFor=\"let r of s.get('rows').controls; let ri = index\" class=\"row designer-row\" cdkDrag [attr.data-index]=\"ri\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n <div cdkDropList cdkDropListOrientation=\"horizontal\" (cdkDropListDropped)=\"drop($event, r.get('fields'))\" class=\"row\">\r\n <div *ngFor=\"let f of r.get('fields').controls; let fi = index\" cdkDrag class=\"designer-field row\" [attr.data-index]=\"fi\">\r\n <!--<mat-icon cdkDragHandle>{{iconOf(f.value.type)}}</mat-icon>-->\r\n <bizdoc-box-control-design [metadata]=\"f.value\"></bizdoc-box-control-design>\r\n <div class=\"tools\">\r\n <button mat-stroked-button (click)=\"removeField(r, f)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-stroked-button (click)=\"editField(f)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</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]=\"fieldMenu\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #fieldMenu>\r\n <button mat-menu-item *ngFor=\"let c of controls\" (click)=\"addField(s, r, c, $event)\">\r\n <mat-icon>{{c.icon}}</mat-icon>\r\n <span>{{c.title}}</span>\r\n </button>\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <div class=\"tools\">\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>\r\n <div class=\"tools row\">\r\n <button mat-stroked-button (click)=\"addRow(s, $event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button (click)=\"removeSection(s)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-stroked-button (click)=\"editSection(s)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n </div>\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</form>\r\n", styles: ["form{margin:8px}:host ::ng-deep .cdk-drag-handle{cursor:move}section,.designer-row{border:2px solid transparent;border-radius:3px;padding:8px}.designer-field button{opacity:.1}.designer-field:hover button{opacity:1}section:hover,.designer-row:hover{border:2px dotted}.designer-field:hover{background-color:#f5f5f5}section .designer-row{margin:5px 0}section .designer-row .designer-field{flex:1}.drag-placeholder{border:2px dashed}\n"], dependencies: [{ kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i11.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: i11.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: i11.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i12.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i13.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: 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: DesignControlComponent, selector: "bizdoc-box-control-design", inputs: ["metadata"] }, { kind: "pipe", type: i17.LocalizedStringPipe, name: "localizedString" }, { kind: "pipe", type: i18.TranslatePipe, name: "translate" }] });
289
+ FormDesignerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", 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]=\"!form.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 === -1\"><mat-icon class=\"mat-icon-rtl-mirror\">undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"historyIndex === history.length - 1\"><mat-icon class=\"mat-icon-rtl-mirror\">redo</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <!--<button mat-icon-button (click)=\"opensettings()\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>-->\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" *ngIf=\"model\">\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, sections)\">\r\n <section class=\"column\" *ngFor=\"let s of sections.controls; let si = index\" cdkDrag [attr.data-index]=\"si\">\r\n <div class=\"row\">\r\n <mat-icon class=\"section-drag\" cdkDragHandle>drag_indicator</mat-icon>\r\n <div class=\"column\" [formGroup]=\"s\">\r\n <h2 class=\"mat-title\">{{s.get('title').value|localizedString}}</h2>\r\n <p class=\"mat-body-1\" *ngIf=\"s.get('note').value\">{{s.get('note').value|localizedString}}</p>\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, s.get('rows'))\">\r\n <div *ngFor=\"let r of s.get('rows').controls; let ri = index\" class=\"row designer-row\" cdkDrag [attr.data-index]=\"ri\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n <div cdkDropList cdkDropListOrientation=\"horizontal\" (cdkDropListDropped)=\"drop($event, r.get('fields'))\" class=\"row\">\r\n <div *ngFor=\"let f of r.get('fields').controls; let fi = index\" cdkDrag class=\"designer-field row\" [attr.data-index]=\"fi\">\r\n <!--<mat-icon cdkDragHandle>{{iconOf(f.value.type)}}</mat-icon>-->\r\n <bizdoc-box-control-design [metadata]=\"f.value\"></bizdoc-box-control-design>\r\n <div class=\"tools\">\r\n <button mat-stroked-button (click)=\"removeField(r, f)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-stroked-button (click)=\"editField(f)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</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]=\"fieldMenu\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #fieldMenu>\r\n <button mat-menu-item *ngFor=\"let c of controls\" (click)=\"addField(s, r, c, $event)\">\r\n <mat-icon>{{c.icon}}</mat-icon>\r\n <span>{{c.title}}</span>\r\n </button>\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <div class=\"tools\">\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>\r\n <div class=\"tools row\">\r\n <button mat-stroked-button (click)=\"addRow(s, $event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button (click)=\"removeSection(s)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-stroked-button (click)=\"editSection(s)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n </div>\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</form>\r\n", styles: ["form{margin:8px}:host ::ng-deep .cdk-drag-handle{cursor:move}section,.designer-row{border:2px solid transparent;border-radius:3px;padding:8px}.designer-field button{opacity:.1}.designer-field:hover button{opacity:1}section:hover,.designer-row:hover{border:2px dotted}section .designer-row{margin:5px 0}section .designer-row .designer-field{flex:1}.drag-placeholder{border:2px dashed}\n"], dependencies: [{ kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i11.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: i11.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: i11.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i12.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i13.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: 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: DesignControlComponent, selector: "bizdoc-box-control-design", inputs: ["metadata"] }, { kind: "pipe", type: i17.LocalizedStringPipe, name: "localizedString" }, { kind: "pipe", type: i18.TranslatePipe, name: "translate" }] });
288
290
  FormDesignerComponent = __decorate([
289
291
  BizDoc({ selector: 'bizdoc-form-designer' })
290
292
  ], FormDesignerComponent);
291
293
  export { FormDesignerComponent };
292
294
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: FormDesignerComponent, decorators: [{
293
295
  type: Component,
294
- args: [{ entryComponents: [SectionPropertiesComponent, ControlPropertiesComponent, BoxSettingsComponent], template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.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 === -1\"><mat-icon class=\"mat-icon-rtl-mirror\">undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"historyIndex === history.length - 1\"><mat-icon class=\"mat-icon-rtl-mirror\">redo</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <!--<button mat-icon-button (click)=\"opensettings()\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>-->\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" *ngIf=\"model\">\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, sections)\">\r\n <section class=\"column\" *ngFor=\"let s of sections.controls; let si = index\" cdkDrag [attr.data-index]=\"si\">\r\n <div class=\"row\">\r\n <mat-icon class=\"section-drag\" cdkDragHandle>drag_indicator</mat-icon>\r\n <div class=\"column\" [formGroup]=\"s\">\r\n <h2 class=\"mat-title\">{{s.get('title').value|localizedString}}</h2>\r\n <p class=\"mat-body-1\" *ngIf=\"s.get('note').value\">{{s.get('note').value|localizedString}}</p>\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, s.get('rows'))\">\r\n <div *ngFor=\"let r of s.get('rows').controls; let ri = index\" class=\"row designer-row\" cdkDrag [attr.data-index]=\"ri\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n <div cdkDropList cdkDropListOrientation=\"horizontal\" (cdkDropListDropped)=\"drop($event, r.get('fields'))\" class=\"row\">\r\n <div *ngFor=\"let f of r.get('fields').controls; let fi = index\" cdkDrag class=\"designer-field row\" [attr.data-index]=\"fi\">\r\n <!--<mat-icon cdkDragHandle>{{iconOf(f.value.type)}}</mat-icon>-->\r\n <bizdoc-box-control-design [metadata]=\"f.value\"></bizdoc-box-control-design>\r\n <div class=\"tools\">\r\n <button mat-stroked-button (click)=\"removeField(r, f)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-stroked-button (click)=\"editField(f)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</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]=\"fieldMenu\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #fieldMenu>\r\n <button mat-menu-item *ngFor=\"let c of controls\" (click)=\"addField(s, r, c, $event)\">\r\n <mat-icon>{{c.icon}}</mat-icon>\r\n <span>{{c.title}}</span>\r\n </button>\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <div class=\"tools\">\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>\r\n <div class=\"tools row\">\r\n <button mat-stroked-button (click)=\"addRow(s, $event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button (click)=\"removeSection(s)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-stroked-button (click)=\"editSection(s)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n </div>\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</form>\r\n", styles: ["form{margin:8px}:host ::ng-deep .cdk-drag-handle{cursor:move}section,.designer-row{border:2px solid transparent;border-radius:3px;padding:8px}.designer-field button{opacity:.1}.designer-field:hover button{opacity:1}section:hover,.designer-row:hover{border:2px dotted}.designer-field:hover{background-color:#f5f5f5}section .designer-row{margin:5px 0}section .designer-row .designer-field{flex:1}.drag-placeholder{border:2px dashed}\n"] }]
296
+ args: [{ entryComponents: [SectionPropertiesComponent, ControlPropertiesComponent, BoxSettingsComponent], template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.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 === -1\"><mat-icon class=\"mat-icon-rtl-mirror\">undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"historyIndex === history.length - 1\"><mat-icon class=\"mat-icon-rtl-mirror\">redo</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <!--<button mat-icon-button (click)=\"opensettings()\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>-->\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" *ngIf=\"model\">\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, sections)\">\r\n <section class=\"column\" *ngFor=\"let s of sections.controls; let si = index\" cdkDrag [attr.data-index]=\"si\">\r\n <div class=\"row\">\r\n <mat-icon class=\"section-drag\" cdkDragHandle>drag_indicator</mat-icon>\r\n <div class=\"column\" [formGroup]=\"s\">\r\n <h2 class=\"mat-title\">{{s.get('title').value|localizedString}}</h2>\r\n <p class=\"mat-body-1\" *ngIf=\"s.get('note').value\">{{s.get('note').value|localizedString}}</p>\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, s.get('rows'))\">\r\n <div *ngFor=\"let r of s.get('rows').controls; let ri = index\" class=\"row designer-row\" cdkDrag [attr.data-index]=\"ri\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n <div cdkDropList cdkDropListOrientation=\"horizontal\" (cdkDropListDropped)=\"drop($event, r.get('fields'))\" class=\"row\">\r\n <div *ngFor=\"let f of r.get('fields').controls; let fi = index\" cdkDrag class=\"designer-field row\" [attr.data-index]=\"fi\">\r\n <!--<mat-icon cdkDragHandle>{{iconOf(f.value.type)}}</mat-icon>-->\r\n <bizdoc-box-control-design [metadata]=\"f.value\"></bizdoc-box-control-design>\r\n <div class=\"tools\">\r\n <button mat-stroked-button (click)=\"removeField(r, f)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-stroked-button (click)=\"editField(f)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</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]=\"fieldMenu\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #fieldMenu>\r\n <button mat-menu-item *ngFor=\"let c of controls\" (click)=\"addField(s, r, c, $event)\">\r\n <mat-icon>{{c.icon}}</mat-icon>\r\n <span>{{c.title}}</span>\r\n </button>\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <div class=\"tools\">\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>\r\n <div class=\"tools row\">\r\n <button mat-stroked-button (click)=\"addRow(s, $event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button (click)=\"removeSection(s)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-stroked-button (click)=\"editSection(s)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n </div>\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</form>\r\n", styles: ["form{margin:8px}:host ::ng-deep .cdk-drag-handle{cursor:move}section,.designer-row{border:2px solid transparent;border-radius:3px;padding:8px}.designer-field button{opacity:.1}.designer-field:hover button{opacity:1}section:hover,.designer-row:hover{border:2px dotted}section .designer-row{margin:5px 0}section .designer-row .designer-field{flex:1}.drag-placeholder{border:2px dashed}\n"] }]
295
297
  }], ctorParameters: function () { return [{ type: i3.FormBuilder }, { type: i4.PaneRef }, { type: i0.ChangeDetectorRef }, { type: i5.PromptService }, { type: i6.SystemService }, { type: i7.TranslateService }, { type: i8.PanesRouter }, { type: i1.SessionService }, { type: i0.ElementRef }, { type: i9.UtilityRef }]; }, propDecorators: { handleKeyboardEvent: [{
296
298
  type: HostListener,
297
299
  args: ['document:keydown', ['$event']]
298
300
  }] } });
299
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm94LWRlc2lnbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vZm9ybS9kZXNpZ25lci9ib3gtZGVzaWduZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9mb3JtL2Rlc2lnbmVyL2JveC1kZXNpZ25lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFxQixTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXNELE1BQU0sZUFBZSxDQUFDO0FBSTFKLE9BQU8sRUFBZ0IsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFXbEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTTVELE1BQU0sT0FBTyxzQkFBc0I7SUFHakMsWUFDVSxJQUFzQixFQUNDLE9BQXFCLEVBQzVDLFFBQXdCLEVBQ3hCLEdBQW1DO1FBSG5DLFNBQUksR0FBSixJQUFJLENBQWtCO1FBQ0MsWUFBTyxHQUFQLE9BQU8sQ0FBYztRQUM1QyxhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUN4QixRQUFHLEdBQUgsR0FBRyxDQUFnQztJQUFLLENBQUM7SUFDbkQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFD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QyxPQUFPLENBQUMsQ0FBQztZQUMzRSxJQUFJLElBQUk7Z0JBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLENBQUMsRUFBRSxHQUFHLEVBQUU7WUFDTixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7a0hBck9VLHFCQUFxQjtzR0FBckIscUJBQXFCLGdJQzFEbEMsa3pJQXdEQSxxeUdEOUJhLHNCQUFzQjtBQWdDdEIscUJBQXFCO0lBRGpDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxDQUFDO0dBQ2hDLHFCQUFxQixDQXNPakM7U0F0T1kscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBTmpDLFNBQVM7c0NBR1MsQ0FBQywwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSxvQkFBb0IsQ0FBQzt3VkFrTS9GLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0RyYWdEcm9wIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9kcmFnLWRyb3BcIjtcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBDb250cm9sQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvYmFzZVwiO1xyXG5pbXBvcnQgeyBCaXpEb2NDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9jb21wb25lbnQtZmFjdG9yeS1yZXNvbHZlclwiO1xyXG5pbXBvcnQgeyBCaXpEb2NDb25maWcsIEJJWkRPQ19DT05GSUcsIE9wZW5Qb2xpY3kgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9jb25maWd1cmF0aW9uXCI7XHJcbmltcG9ydCB7IEJpekRvYyB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL2RlY29yYXRvcnNcIjtcclxuaW1wb3J0IHsgY2xlYW51cCB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL2Z1bmN0aW9uc1wiO1xyXG5pbXBvcnQgeyBDdWJlLCBUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvbW9kZWxzXCI7XHJcbmltcG9ydCB7IFByb21wdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9wcm9tcHQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBQYW5lUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvc2xvdHMvcGFuZS1yZWZcIjtcclxuaW1wb3J0IHsgUGFuZXNSb3V0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9zbG90cy9yb3V0ZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvdHJhbnNsYXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgcHJvZ3JhbU5hbWUgfSBmcm9tIFwiLi4vLi4vYXJjaGl0ZWN0dXJlL2RlY2xhcmF0aW9uc1wiO1xyXG5pbXBvcnQgeyBDb250cm9sSW5mbywgU3lzdGVtU2VydmljZSB9IGZyb20gXCIuLi8uLi9zeXN0ZW0uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBVdGlsaXR5UmVmIH0gZnJvbSBcIi4uLy4uL3V0aWxpdHktcmVmXCI7XHJcbmltcG9ydCB7IEJveEZvcm1NZXRhZGF0YSwgRmllbGRNb2RlbCwgQm94Um93TW9kZWwsIFNlY3Rpb25Nb2RlbCB9IGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xyXG5pbXBvcnQgeyBDb250cm9sUHJvcGVydGllc0NvbXBvbmVudCB9IGZyb20gXCIuL3Byb3BlcnRpZXMuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFNlY3Rpb25Qcm9wZXJ0aWVzQ29tcG9uZW50IH0gZnJvbSBcIi4vc2VjdGlvbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQm94U2V0dGluZ3NDb21wb25lbnQgfSBmcm9tIFwiLi9zZXR0aW5ncy5jb21wb25lbnRcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlOiAnJyxcclxuICBzZWxlY3RvcjogJ2JpemRvYy1ib3gtY29udHJvbC1kZXNpZ24nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEZXNpZ25Db250cm9sQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIG1ldGFkYXRhOiBGaWVsZE1vZGVsO1xyXG4gIHByaXZhdGUgX2luc3RhbmNlOiBDb250cm9sQ29tcG9uZW50PGFueT47XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF92Y3I6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBASW5qZWN0KEJJWkRPQ19DT05GSUcpIHByaXZhdGUgX2NvbmZpZzogQml6RG9jQ29uZmlnLFxyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jZjogQml6RG9jQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCkgeyB9XHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgIWNoYW5nZXNbJ21ldGFkYXRhJ10uZmlyc3RDaGFuZ2UgJiYgT2JqZWN0LmFzc2lnbih0aGlzLl9pbnN0YW5jZSwgdGhpcy5tZXRhZGF0YSk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBjb250cm9scyB9ID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLFxyXG4gICAgICB7IGNvbnRyb2xUeXBlIH0gPSB0aGlzLm1ldGFkYXRhLFxyXG4gICAgICBjb250cm9sID0gY29udHJvbHNbY29udHJvbFR5cGVdIHx8IChjb250cm9sc1tjb250cm9sVHlwZV0gPSBjb250cm9scy5maW5kKGMgPT4gYy5uYW1lID09PSBjb250cm9sVHlwZSkpLFxyXG4gICAgICBzZWxlY3RvciA9IGNvbnRyb2wudGVtcGxhdGU7XHJcbiAgICBjb25zdCBjb21wID0gdGhpcy5fY2YuY29tcG9uZW50KHNlbGVjdG9yKTtcclxuICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLl92Y3IuY3JlYXRlQ29tcG9uZW50PENvbnRyb2xDb21wb25lbnQ+KGNvbXApO1xyXG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLl9pbnN0YW5jZSA9IGNvbXBSZWYuaW5zdGFuY2U7XHJcbiAgICBPYmplY3QuYXNzaWduKGluc3RhbmNlLCB0aGlzLm1ldGFkYXRhKTtcclxuICAgIGluc3RhbmNlLmFwcGVhcmFuY2UgPSB0aGlzLl9jb25maWcuYXBwZWFyYW5jZSB8fCAnb3V0bGluZSc7XHJcbiAgICBpbnN0YW5jZS5tb2RlID0gJ2NvbXBvc2UnO1xyXG4gICAgaW5zdGFuY2UuY29udHJvbC5kaXNhYmxlKCk7XHJcbiAgfVxyXG59XHJcbi8qKiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZVVybDogJ2JveC1kZXNpZ25lci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2JveC1kZXNpZ25lci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVudHJ5Q29tcG9uZW50czogW1NlY3Rpb25Qcm9wZXJ0aWVzQ29tcG9uZW50LCBDb250cm9sUHJvcGVydGllc0NvbXBvbmVudCwgQm94U2V0dGluZ3NDb21wb25lbnRdXHJcbn0pXHJcbkBCaXpEb2MoeyBzZWxlY3RvcjogJ2JpemRvYy1mb3JtLWRlc2lnbmVyJyB9KVxyXG5leHBvcnQgY2xhc3MgRm9ybURlc2lnbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBsb2FkaW5nID0gdHJ1ZTtcclxuICB0b29scyA9IHRydWU7XHJcbiAgc2F2aW5nID0gZmFsc2U7XHJcbiAgbW9kZWw6IEJveEZvcm1NZXRhZGF0YTtcclxuICByZWFkb25seSBoaXN0b3J5OiBzdHJpbmdbXSA9IFtdO1xyXG4gIGhpc3RvcnlJbmRleCA9IC0xO1xyXG4gIHJlYWRvbmx5IGRhdGF0eXBlczogVHlwZVtdO1xyXG4gIHJlYWRvbmx5IGN1YmVzOiBDdWJlW107XHJcbiAgcmVhZG9ubHkgc2VjdGlvbnMgPSB0aGlzLl9mYi5hcnJheShbXSk7XHJcbiAgcmVhZG9ubHkgZm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgIHN1YmplY3Q6IG51bGwsXHJcbiAgICB2YWx1ZTogbnVsbCxcclxuICAgIHN1bW1hcnk6IG51bGwsXHJcbiAgICBzZWN0aW9uczogdGhpcy5zZWN0aW9uc1xyXG4gIH0pO1xyXG4gIGNvbnRyb2xzOiBDb250cm9sSW5mb1tdO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRyb2xzOiB7IFt0eXBlOiBzdHJpbmddOiBDb250cm9sSW5mbyB9ID0ge307XHJcbiAgcHJpdmF0ZSBfZm9ybUlkOiBzdHJpbmc7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9mYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIF9wYW5lOiBQYW5lUmVmPGFueT4sXHJcbiAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIF9wczogUHJvbXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgX3N5c3RlbTogU3lzdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3JvdXRlcjogUGFuZXNSb3V0ZXIsXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2VsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBfcmVmOiBVdGlsaXR5UmVmPGJvb2xlYW4sIHsgbWV0YWRhdGE6IEJveEZvcm1NZXRhZGF0YSwgZm9ybUlkOiBzdHJpbmcgfSwgQm94Rm9ybU1ldGFkYXRhLCBzdHJpbmc+KSB7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcGFuZS5xdWVyeVBhcmFtc0NoYW5nZSgpLnN1YnNjcmliZShwID0+IHtcclxuICAgICAgY29uc3QgeyBmb3JtSWQgfSA9IHA7XHJcbiAgICAgIGZvcm1JZCAmJiB0aGlzLl9vcGVuKGZvcm1JZCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3N5c3RlbS5jb250cm9scygpLnN1YnNjcmliZShjID0+IFxyXG4gICAgICB0aGlzLmNvbnRyb2xzID0gY1xyXG4gICAgKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfb3Blbihmb3JtSWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcmVmLnBvcHVsYXRlKGZvcm1JZCkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICB0aGlzLl9mb3JtSWQgPSBmb3JtSWQ7XHJcbiAgICAgIHRoaXMuX2Fzc2lnbihyKTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYXNzaWduKG1vZGVsOiBCb3hGb3JtTWV0YWRhdGEpIHtcclxuICAgIHRoaXMubW9kZWwgPSBtb2RlbCB8fCB7IHNlY3Rpb25zOiBbXSB9O1xyXG4gICAgdGhpcy5zZWN0aW9ucy5jbGVhcih7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh0aGlzLm1vZGVsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB0aGlzLm1vZGVsLnNlY3Rpb25zLmZvckVhY2gocyA9PiB0aGlzLnNlY3Rpb25zLnB1c2godGhpcy5fc2VjdGlvbmZvcm0ocykgYXMgYW55LCB7IGVtaXRFdmVudDogZmFsc2UgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZWN0aW9uZm9ybShtb2RlbDogU2VjdGlvbk1vZGVsKSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBuYW1lOiBtb2RlbC5uYW1lLFxyXG4gICAgICB0aXRsZTogbW9kZWwudGl0bGUsXHJcbiAgICAgIG5vdGU6IG1vZGVsLm5vdGUsXHJcbiAgICAgIG11bHRpTGluZTogbW9kZWwubXVsdGlMaW5lLFxyXG4gICAgICByb3dzOiB0aGlzLl9mYi5hcnJheShtb2RlbC5yb3dzPy5tYXAociA9PiB0aGlzLl9yb3dmb3JtKHIpKSB8fCBbXSlcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZvcm07XHJcbiAgfVxyXG4gIHByaXZhdGUgX3Jvd2Zvcm0ocm93OiBCb3hSb3dNb2RlbCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBmaWVsZHM6IHRoaXMuX2ZiLmFycmF5KHJvdy5maWVsZHM/Lm1hcChmID0+IHRoaXMuX2ZpZWxkZm9ybShmKSkpXHJcbiAgICB9KVxyXG4gIH1cclxuICBwcml2YXRlIF9maWVsZGZvcm0oZmllbGQ6IEZpZWxkTW9kZWwpOiBhbnkge1xyXG4gICAgY29uc3QgZm9ybSA9IHRoaXMuX2ZiLmNvbnRyb2woZmllbGQpO1xyXG4gICAgcmV0dXJuIGZvcm07XHJcbiAgfVxyXG4gIGFkZFNlY3Rpb24oZXZ0PzogRXZlbnQpIHtcclxuICAgIGxldCBuID0gMCwgbmFtZSwgdGl0bGU7XHJcbiAgICBkbyB7XHJcbiAgICAgIG4rKztcclxuICAgICAgbmFtZSA9ICdzZWN0aW9uJyArICdfJyArIG47XHJcbiAgICAgIHRpdGxlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnU2VjdGlvbk4nLCBuKTtcclxuICAgIH0gd2hpbGUgKHRoaXMuc2VjdGlvbnMuY29udHJvbHMuZmluZChzID0+IHMuZ2V0KCduYW1lJykudmFsdWUgPT09IG5hbWUgfHwgcy5nZXQoJ3RpdGxlJykudmFsdWUgPT09IHRpdGxlKSk7XHJcbiAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoU2VjdGlvblByb3BlcnRpZXNDb21wb25lbnQsIHtcclxuICAgICAgcG9saWN5OiBPcGVuUG9saWN5LkRpYWxvZyB8IE9wZW5Qb2xpY3kuRGlzbWlzc2FibGUsXHJcbiAgICAgIHN0YXRlOiB7XHJcbiAgICAgICAgbmFtZSxcclxuICAgICAgICB0aXRsZSxcclxuICAgICAgICBkcmFmdDogdHJ1ZSxcclxuICAgICAgICByb3dzOiBbeyBmaWVsZHM6IFtdIH1dXHJcbiAgICAgIH0gYXMgU2VjdGlvbk1vZGVsXHJcbiAgICB9KS50aGVuKGUgPT4gZS5jbG9zZWQoKS5zdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZ5Q2hhbmdlKCk7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9ucy5wdXNoKHRoaXMuX3NlY3Rpb25mb3JtKHYpIGFzIGFueSk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcbiAgYWRkUm93KHNlY3Rpb246IEZvcm1Hcm91cCwgZXZ0PzogRXZlbnQpIHtcclxuICAgIHRoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgKHNlY3Rpb24uZ2V0KCdyb3dzJykgYXMgRm9ybUFycmF5KS5wdXNoKHRoaXMuX3Jvd2Zvcm0oe1xyXG4gICAgICBmaWVsZHM6IFtdIGFzIGFueVxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5fZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGBzZWN0aW9uW2RhdGEtaW5kZXg9JyR7dGhpcy5zZWN0aW9ucy5jb250cm9scy5pbmRleE9mKHNlY3Rpb24gYXMgYW55KX0nXSAuZGVzaWduZXItcm93Omxhc3QtY2hpbGQgYnV0dG9uYCk/LmZvY3VzKClcclxuICB9XHJcbiAgaWNvbk9mKHR5cGU6IHN0cmluZykgeyByZXR1cm4gdGhpcy5fY29udHJvbHNbdHlwZV0uaWNvbiB9XHJcbiAgYWRkRmllbGQoc2VjdGlvbjogRm9ybUdyb3VwLCByb3c6IEZvcm1Hcm91cCwgY29udHJvbDogQ29udHJvbEluZm8sIGV2dD86IEV2ZW50KSB7XHJcbiAgICBsZXQgbiA9IDAsIG5hbWUsIGxhYmVsO1xyXG4gICAgZG8ge1xyXG4gICAgICBuKys7XHJcbiAgICAgIG5hbWUgPSBjb250cm9sLm5hbWUucmVwbGFjZSgnLScsICdfJykgKyAnXycgKyBuO1xyXG4gICAgICBsYWJlbCA9IGNvbnRyb2wudGl0bGUgKyAnICcgKyBuO1xyXG4gICAgfSB3aGlsZSAoKHNlY3Rpb24uZ2V0KCdyb3dzJykgYXMgRm9ybUFycmF5KS5jb250cm9scy5cclxuICAgICAgZmluZChyID0+IChyLmdldCgnZmllbGRzJykgYXMgRm9ybUFycmF5KS5jb250cm9scy5maW5kKGYgPT4gZi52YWx1ZS5uYW1lID09PSBuYW1lIHx8IGYudmFsdWUubGFiZWwgPT09IGxhYmVsKSAhPSBudWxsKSk7XHJcbiAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoQ29udHJvbFByb3BlcnRpZXNDb21wb25lbnQsIHtcclxuICAgICAgcG9saWN5OiBPcGVuUG9saWN5LkRpYWxvZyB8IE9wZW5Qb2xpY3kuRGlzbWlzc2FibGUsXHJcbiAgICAgIHN0YXRlOiB7XHJcbiAgICAgICAgbmFtZSwgbGFiZWwsIGRyYWZ0OiB0cnVlLFxyXG4gICAgICAgIGNvbnRyb2xUeXBlOiBjb250cm9sLm5hbWVcclxuICAgICAgfSBhcyBGaWVsZE1vZGVsXHJcbiAgICB9KS50aGVuKGUgPT4gZS5jbG9zZWQoKS5zdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZ5Q2hhbmdlKCk7XHJcbiAgICAgICAgKHJvdy5nZXQoJ2ZpZWxkcycpIGFzIEZvcm1BcnJheSkucHVzaCh0aGlzLl9maWVsZGZvcm0odikpO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcblxyXG4gIH1cclxuICBlZGl0RmllbGQoZmllbGQ6IEZvcm1Hcm91cCkge1xyXG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKENvbnRyb2xQcm9wZXJ0aWVzQ29tcG9uZW50LCB7XHJcbiAgICAgIHBvbGljeTogT3BlblBvbGljeS5UYWIsXHJcbiAgICAgIHN0YXRlOiBmaWVsZC5nZXRSYXdWYWx1ZSgpXHJcbiAgICB9KS50aGVuKGUgPT4gZS5jbG9zZWQoKS5zdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZ5Q2hhbmdlKCk7XHJcbiAgICAgICAgZmllbGQuc2V0VmFsdWUodik7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcbiAgZWRpdFNlY3Rpb24oZmllbGQ6IEZvcm1Hcm91cCkge1xyXG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFNlY3Rpb25Qcm9wZXJ0aWVzQ29tcG9uZW50LCB7XHJcbiAgICAgIHBvbGljeTogT3BlblBvbGljeS5UYWIsXHJcbiAgICAgIHN0YXRlOiBmaWVsZC5nZXRSYXdWYWx1ZSgpXHJcbiAgICB9KS50aGVuKGUgPT4gZS5jbG9zZWQoKS5zdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZ5Q2hhbmdlKCk7XHJcbiAgICAgICAgZmllbGQuc2V0VmFsdWUodik7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcbiAgb3BlbnNldHRpbmdzKCkge1xyXG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKEJveFNldHRpbmdzQ29tcG9uZW50LCB7XHJcbiAgICAgIHBvbGljeTogT3BlblBvbGljeS5UYWIsXHJcbiAgICAgIHN0YXRlOiB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKVxyXG4gICAgfSkudGhlbihlID0+IGUuY2xvc2VkKCkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICB0aGlzLl9ub3RpZnlDaGFuZ2UoKTtcclxuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodilcclxuICAgIH0pKTtcclxuICB9XHJcbiAgcmVtb3ZlRmllbGQocm93OiBGb3JtR3JvdXAsIGZpZWxkOiBGb3JtR3JvdXApIHtcclxuICAgIHRoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgKHJvdy5nZXQoJ2ZpZWxkcycpIGFzIEZvcm1BcnJheSkuY29udHJvbHMucmVtb3ZlKGZpZWxkKTtcclxuICB9XHJcbiAgcmVtb3ZlU2VjdGlvbihzZWN0aW9uOiBGb3JtR3JvdXApIHtcclxuICAgIHRoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgdGhpcy5zZWN0aW9ucy5jb250cm9scy5yZW1vdmUoc2VjdGlvbiBhcyBhbnkpO1xyXG4gIH1cclxuICByZW1vdmVSb3coc2VjdGlvbjogRm9ybUdyb3VwLCByb3c6IEZvcm1Hcm91cCkge1xyXG4gICAgdGhpcy5fbm90aWZ5Q2hhbmdlKCk7XHJcbiAgICAoc2VjdGlvbi5nZXQoJ3Jvd3MnKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLnJlbW92ZShyb3cpO1xyXG4gIH1cclxuICBwcml2YXRlIF9ub3RpZnlDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLmhpc3RvcnkucHVzaChKU09OLnN0cmluZ2lmeSh0aGlzLmZvcm0udmFsdWUpKTtcclxuICAgIHRoaXMuaGlzdG9yeUluZGV4ID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDE7XHJcbiAgICB0aGlzLmZvcm0ubWFya0FzRGlydHkoKTtcclxuICB9XHJcbiAgdW5kbygpIHtcclxuICAgIHRoaXMuX3Jlc3RvcmUoKTtcclxuICAgIHRoaXMuaGlzdG9yeUluZGV4LS07XHJcbiAgfVxyXG4gIHJlZG8oKSB7XHJcbiAgICB0aGlzLl9yZXN0b3JlKCk7XHJcbiAgICB0aGlzLmhpc3RvcnlJbmRleCsrO1xyXG4gIH1cclxuICBwcml2YXRlIF9yZXN0b3JlKCkge1xyXG4gICAgdGhpcy5fYXNzaWduKEpTT04ucGFyc2UodGhpcy5oaXN0b3J5W3RoaXMuaGlzdG9yeUluZGV4XSkpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDdHJsLXMgc2F2ZTsgQ3RybC16IHVuZG9cclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQuY3RybEtleSkge1xyXG4gICAgICBpZiAoZXZlbnQud2hpY2ggPT09IDgzIHx8IGV2ZW50LndoaWNoID09PSAxMTUpIHtcclxuICAgICAgICB0aGlzLmZvcm0uZGlydHkgJiYgdGhpcy5zYXZlKCk7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxGb3JtR3JvdXA+LCBjb2xsZWN0aW9uOiBGb3JtQXJyYXkpIHtcclxuICAgIHRoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgaWYgKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyID09PSBldmVudC5jb250YWluZXIpIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IGNvbGxlY3Rpb24uYXQoZXZlbnQucHJldmlvdXNJbmRleCk7XHJcbiAgICAgIGNvbGxlY3Rpb24ucmVtb3ZlQXQoZXZlbnQucHJldmlvdXNJbmRleCk7XHJcbiAgICAgIGNvbGxlY3Rpb24uaW5zZXJ0KGV2ZW50LmN1cnJlbnRJbmRleCwgZWxlbWVudCk7XHJcbiAgICAgIC8vbW92ZUl0ZW1JbkFycmF5KGV2ZW50LmNvbnRhaW5lci5kYXRhLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gIHRyYW5zZmVyQXJyYXlJdGVtKFxyXG4gICAgICAvLyAgICBldmVudC5wcmV2aW91c0NvbnRhaW5lci5kYXRhLFxyXG4gICAgICAvLyAgICBldmVudC5jb250YWluZXIuZGF0YSxcclxuICAgICAgLy8gICAgZXZlbnQucHJldmlvdXNJbmRleCxcclxuICAgICAgLy8gICAgZXZlbnQuY3VycmVudEluZGV4LFxyXG4gICAgICAvLyAgKTtcclxuICAgIH1cclxuICB9XHJcbiAgc2F2ZSgpIHtcclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubW9kZWwgPSB0aGlzLmZvcm0udmFsdWUgYXMgYW55O1xyXG4gICAgdGhpcy5fcmVmLmV4ZWN1dGUoeyBtZXRhZGF0YTogY2xlYW51cCh0aGlzLm1vZGVsKSwgZm9ybUlkOiB0aGlzLl9mb3JtSWQgfSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5fcHMudG9hc3QoJ0NoYW5nZXNTYXZlZCcpO1xyXG4gICAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5mb3Jtcy5maW5kKGYgPT4gZi5uYW1lID09IHRoaXMuX2Zvcm1JZCk7XHJcbiAgICAgIGlmIChmb3JtKSBmb3JtLm9wdGlvbnMgPSB0aGlzLm1vZGVsO1xyXG4gICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgfSwgKCkgPT4ge1xyXG4gICAgICB0aGlzLl9wcy5lcnJvcigpO1xyXG4gICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG4iLCI8bWF0LXRvb2xiYXI+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInNhdmUoKVwiIFtkaXNhYmxlZF09XCIhZm9ybS5kaXJ0eSB8fCBsb2FkaW5nIHx8IHNhdmluZ1wiIFtiaXpkb2NUb29sdGlwXT1cIidTYXZlJ3x0cmFuc2xhdGVcIj48bWF0LWljb24+c2F2ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInVuZG8oKVwiIFtiaXpkb2NUb29sdGlwXT1cIidVbmRvJyB8IHRyYW5zbGF0ZVwiIFtkaXNhYmxlZF09XCJoaXN0b3J5SW5kZXggPT09IC0xXCI+PG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPnVuZG88L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJyZWRvKClcIiBbYml6ZG9jVG9vbHRpcF09XCInUmVkbycgfCB0cmFuc2xhdGVcIiBbZGlzYWJsZWRdPVwiaGlzdG9yeUluZGV4ID09PSBoaXN0b3J5Lmxlbmd0aCAtIDFcIj48bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+cmVkbzwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gIDwhLS08YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwib3BlbnNldHRpbmdzKClcIiBbYml6ZG9jVG9vbHRpcF09XCInU2V0dGluZ3MnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+c2V0dGluZ3M8L21hdC1pY29uPjwvYnV0dG9uPi0tPlxyXG48L21hdC10b29sYmFyPlxyXG48Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAqbmdJZj1cIm1vZGVsXCI+XHJcbiAgPGRpdiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50LCBzZWN0aW9ucylcIj5cclxuICAgIDxzZWN0aW9uIGNsYXNzPVwiY29sdW1uXCIgKm5nRm9yPVwibGV0IHMgb2Ygc2VjdGlvbnMuY29udHJvbHM7IGxldCBzaSA9IGluZGV4XCIgY2RrRHJhZyBbYXR0ci5kYXRhLWluZGV4XT1cInNpXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzZWN0aW9uLWRyYWdcIiBjZGtEcmFnSGFuZGxlPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCIgW2Zvcm1Hcm91cF09XCJzXCI+XHJcbiAgICAgICAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIj57e3MuZ2V0KCd0aXRsZScpLnZhbHVlfGxvY2FsaXplZFN0cmluZ319PC9oMj5cclxuICAgICAgICAgIDxwIGNsYXNzPVwibWF0LWJvZHktMVwiICpuZ0lmPVwicy5nZXQoJ25vdGUnKS52YWx1ZVwiPnt7cy5nZXQoJ25vdGUnKS52YWx1ZXxsb2NhbGl6ZWRTdHJpbmd9fTwvcD5cclxuICAgICAgICAgIDxkaXYgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudCwgcy5nZXQoJ3Jvd3MnKSlcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgciBvZiBzLmdldCgncm93cycpLmNvbnRyb2xzOyBsZXQgcmkgPSBpbmRleFwiIGNsYXNzPVwicm93IGRlc2lnbmVyLXJvd1wiIGNka0RyYWcgW2F0dHIuZGF0YS1pbmRleF09XCJyaVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjZGtEcmFnSGFuZGxlPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8ZGl2IGNka0Ryb3BMaXN0IGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCIgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudCwgci5nZXQoJ2ZpZWxkcycpKVwiIGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmIG9mIHIuZ2V0KCdmaWVsZHMnKS5jb250cm9sczsgbGV0IGZpID0gaW5kZXhcIiBjZGtEcmFnIGNsYXNzPVwiZGVzaWduZXItZmllbGQgcm93XCIgW2F0dHIuZGF0YS1pbmRleF09XCJmaVwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tPG1hdC1pY29uIGNka0RyYWdIYW5kbGU+e3tpY29uT2YoZi52YWx1ZS50eXBlKX19PC9tYXQtaWNvbj4tLT5cclxuICAgICAgICAgICAgICAgICAgPGJpemRvYy1ib3gtY29udHJvbC1kZXNpZ24gW21ldGFkYXRhXT1cImYudmFsdWVcIj48L2JpemRvYy1ib3gtY29udHJvbC1kZXNpZ24+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJyZW1vdmVGaWVsZChyLCBmKVwiIFtiaXpkb2NUb29sdGlwXT1cIidEaXNjYXJkJ3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cImVkaXRGaWVsZChmKVwiIFtiaXpkb2NUb29sdGlwXT1cIidTZXR0aW5ncyd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5zZXR0aW5nczwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8IS0tPGRpdiAqY2RrRHJhZ1BsYWNlaG9sZGVyIGNsYXNzPVwiZHJhZy1wbGFjZWhvbGRlclwiPjwvZGl2Pi0tPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImZpZWxkTWVudVwiIFtiaXpkb2NUb29sdGlwXT1cIidBZGQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+YWRkPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjZmllbGRNZW51PlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nRm9yPVwibGV0IGMgb2YgY29udHJvbHNcIiAoY2xpY2spPVwiYWRkRmllbGQocywgciwgYywgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj57e2MuaWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2MudGl0bGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJyZW1vdmVSb3cocywgcilcIiBbYml6ZG9jVG9vbHRpcF09XCInRGlzY2FyZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidG9vbHMgcm93XCI+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cImFkZFJvdyhzLCAkZXZlbnQpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0FkZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlU2VjdGlvbihzKVwiIFtiaXpkb2NUb29sdGlwXT1cIidEaXNjYXJkJ3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cImVkaXRTZWN0aW9uKHMpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1NldHRpbmdzJ3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPnNldHRpbmdzPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3NlY3Rpb24+XHJcbiAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwiYWRkU2VjdGlvbigkZXZlbnQpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0FkZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Zvcm0+XHJcbiJdfQ==
301
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm94LWRlc2lnbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vZm9ybS9kZXNpZ25lci9ib3gtZGVzaWduZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9mb3JtL2Rlc2lnbmVyL2JveC1kZXNpZ25lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFxQixTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXNELE1BQU0sZUFBZSxDQUFDO0FBSTFKLE9BQU8sRUFBZ0IsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFXbEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTTVELE1BQU0sT0FBTyxzQkFBc0I7SUFHakMsWUFDVSxJQUFzQixFQUNDLE9BQXFCLEVBQzVDLFFBQXdCLEVBQ3hCLEdBQW1DO1FBSG5DLFNBQUksR0FBSixJQUFJLENBQWtCO1FBQ0MsWUFBTyxHQUFQLE9BQU8sQ0FBYztRQUM1QyxhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUN4QixRQUFHLEdBQUgsR0FBRyxDQUFnQztJQUFLLENBQUM7SUFDbkQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFDRCxRQUFRO1FBQ04sTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUN4QyxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQy9CLE9BQU8sR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsRUFDdkcsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQW1CLElBQUksQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNuRCxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsUUFBUSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUM7UUFDM0QsUUFBUSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7UUFDMUIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDOzttSEF2QlUsc0JBQXNCLGtEQUt2QixhQUFhO3VHQUxaLHNCQUFzQix3SEFIdkIsRUFBRTsyRkFHRCxzQkFBc0I7a0JBSmxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLEVBQUU7b0JBQ1osUUFBUSxFQUFFLDJCQUEyQjtpQkFDdEM7OzBCQU1JLE1BQU07MkJBQUMsYUFBYTtzSEFKZCxRQUFRO3NCQUFoQixLQUFLOztBQXdCUixNQUFNO0FBT0MsSUFBTSxxQkFBcUIsR0FBM0IsTUFBTSxxQkFBcUI7SUFrQmhDLFlBQ1UsR0FBZ0IsRUFDaEIsS0FBbUIsRUFDbkIsR0FBc0IsRUFDdEIsR0FBa0IsRUFDbEIsT0FBc0IsRUFDdEIsVUFBNEIsRUFDNUIsT0FBb0IsRUFDcEIsUUFBd0IsRUFDeEIsR0FBZSxFQUNmLElBQWlHO1FBVGpHLFFBQUcsR0FBSCxHQUFHLENBQWE7UUFDaEIsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNuQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixRQUFHLEdBQUgsR0FBRyxDQUFlO1FBQ2xCLFlBQU8sR0FBUCxPQUFPLENBQWU7UUFDdEIsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQUNwQixhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUN4QixRQUFHLEdBQUgsR0FBRyxDQUFZO1FBQ2YsU0FBSSxHQUFKLElBQUksQ0FBNkY7UUEzQjNHLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFDZixVQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2IsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUVOLFlBQU8sR0FBYSxFQUFFLENBQUM7UUFDaEMsaUJBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUdULGFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QixTQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDN0IsT0FBTyxFQUFFLElBQUk7WUFDYixLQUFLLEVBQUUsSUFBSTtZQUNYLE9BQU8sRUFBRSxJQUFJO1lBQ2IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3hCLENBQUMsQ0FBQztJQWNILENBQUM7SUFDRCxRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMzQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQ2xCLENBQUM7SUFDSixDQUFDO0lBQ08sS0FBSyxDQUFDLE1BQWM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ08sT0FBTyxDQUFDLEtBQXNCO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FDckcsQ0FBQztJQUNKLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBbUI7UUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDMUIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztZQUNsQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbkUsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ08sUUFBUSxDQUFDLEdBQWdCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDcEIsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pFLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDTyxVQUFVLENBQUMsS0FBaUI7UUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsVUFBVSxDQUFDLEdBQVc7UUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7UUFDdkIsR0FBRztZQUNELENBQUMsRUFBRSxDQUFDO1lBQ0osSUFBSSxHQUFHLFNBQVMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDNUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLEVBQUU7UUFDM0csSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLEVBQUU7WUFDaEQsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLFdBQVc7WUFDbEQsS0FBSyxFQUFFO2dCQUNMLElBQUk7Z0JBQ0osS0FBSztnQkFDTCxLQUFLLEVBQUUsSUFBSTtnQkFDWCxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQzthQUNQO1NBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxFQUFFO2dCQUNMLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQVEsQ0FBQyxDQUFDO2FBQ2pEO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFDRCxNQUFNLENBQUMsT0FBa0IsRUFBRSxHQUFXO1FBQ3BDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3BELE1BQU0sRUFBRSxFQUFTO1NBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFjLENBQUMsb0NBQW9DLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQTtJQUMxSixDQUFDO0lBQ0QsTUFBTSxDQUFDLElBQVksSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFBLENBQUMsQ0FBQztJQUN4RCxRQUFRLENBQUMsT0FBa0IsRUFBRSxHQUFjLEVBQUUsT0FBb0IsRUFBRSxHQUFXO1FBQzVFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO1FBQ3ZCLEdBQUc7WUFDRCxDQUFDLEVBQUUsQ0FBQztZQUNKLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNoRCxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQ2pDLFFBQVMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQWUsQ0FBQyxRQUFRO1lBQ2xELElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRTtRQUMxSCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsRUFBRTtZQUNoRCxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsV0FBVztZQUNsRCxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDbEIsS0FBSyxFQUFFO2dCQUNMLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUk7Z0JBQ3hCLFdBQVcsRUFBRSxPQUFPLENBQUMsSUFBSTthQUNaO1NBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxFQUFFO2dCQUNMLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDcEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNEO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFDRCxTQUFTLENBQUMsS0FBZ0I7UUFDeEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBZ0IsRUFDN0MsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLDBCQUEwQixFQUFFO1lBQ2hELE1BQU0sRUFBRSxVQUFVLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxLQUFLO1lBQ3pDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxFQUFFO2dCQUNMLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDckIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNuQjtRQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBQ0QsV0FBVyxDQUFDLEtBQWdCO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLDBCQUEwQixFQUFFO1lBQ2hELE1BQU0sRUFBRSxVQUFVLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxLQUFLO1lBQ3pDLEtBQUssRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFO1NBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxFQUFFO2dCQUNMLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDckIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNuQjtRQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBQ0QsWUFBWTtRQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFO1lBQzFDLE1BQU0sRUFBRSxVQUFVLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxLQUFLO1lBQ3pDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtTQUMvQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDekIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFDRCxXQUFXLENBQUMsR0FBYyxFQUFFLEtBQWdCO1FBQzFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNwQixHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUNELGFBQWEsQ0FBQyxPQUFrQjtRQUM5QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQWMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxTQUFTLENBQUMsT0FBa0IsRUFBRSxHQUFjO1FBQzFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUNPLGFBQWE7UUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBSTtRQUNGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUNELElBQUk7UUFDRixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFDTyxRQUFRO1FBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBQ0Q7OztPQUdHO0lBRUgsbUJBQW1CLENBQUMsS0FBb0I7UUFDdEMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ2pCLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxHQUFHLEVBQUU7Z0JBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDL0IsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDekI7U0FDRjtJQUNILENBQUM7SUFDRCxJQUFJLENBQUMsS0FBNkIsRUFBRSxVQUFxQjtRQUN2RCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEtBQUssS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUMvQyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNuRCxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN6QyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDL0MsaUZBQWlGO1NBQ2xGO2FBQU07WUFDTCxzQkFBc0I7WUFDdEIsbUNBQW1DO1lBQ25DLDJCQUEyQjtZQUMzQiwwQkFBMEI7WUFDMUIseUJBQXlCO1lBQ3pCLE1BQU07U0FDUDtJQUNILENBQUM7SUFDRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQVksQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3hGLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzNFLElBQUksSUFBSTtnQkFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDdEIsQ0FBQyxFQUFFLEdBQUcsRUFBRTtZQUNOLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztrSEF2T1UscUJBQXFCO3NHQUFyQixxQkFBcUIsZ0lDMURsQyxreklBd0RBLHN2R0Q5QmEsc0JBQXNCO0FBZ0N0QixxQkFBcUI7SUFEakMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixFQUFFLENBQUM7R0FDaEMscUJBQXFCLENBd09qQztTQXhPWSxxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFOakMsU0FBUztzQ0FHUyxDQUFDLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLG9CQUFvQixDQUFDO3dWQW9NL0YsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2RyYWctZHJvcFwiO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IENvbnRyb2xDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9iYXNlXCI7XHJcbmltcG9ydCB7IEJpekRvY0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlciB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL2NvbXBvbmVudC1mYWN0b3J5LXJlc29sdmVyXCI7XHJcbmltcG9ydCB7IEJpekRvY0NvbmZpZywgQklaRE9DX0NPTkZJRywgT3BlblBvbGljeSB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL2NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHsgQml6RG9jIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvZGVjb3JhdG9yc1wiO1xyXG5pbXBvcnQgeyBjbGVhbnVwIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCB7IEN1YmUsIFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9tb2RlbHNcIjtcclxuaW1wb3J0IHsgUHJvbXB0U2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3Byb21wdC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFBhbmVSZWYgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9zbG90cy9wYW5lLXJlZlwiO1xyXG5pbXBvcnQgeyBQYW5lc1JvdXRlciB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3Nsb3RzL3JvdXRlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS90cmFuc2xhdGUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBwcm9ncmFtTmFtZSB9IGZyb20gXCIuLi8uLi9hcmNoaXRlY3R1cmUvZGVjbGFyYXRpb25zXCI7XHJcbmltcG9ydCB7IENvbnRyb2xJbmZvLCBTeXN0ZW1TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3N5c3RlbS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlSZWYgfSBmcm9tIFwiLi4vLi4vdXRpbGl0eS1yZWZcIjtcclxuaW1wb3J0IHsgQm94Rm9ybU1ldGFkYXRhLCBGaWVsZE1vZGVsLCBCb3hSb3dNb2RlbCwgU2VjdGlvbk1vZGVsIH0gZnJvbSBcIi4vZGVjbGFyYXRpb25zXCI7XHJcbmltcG9ydCB7IENvbnRyb2xQcm9wZXJ0aWVzQ29tcG9uZW50IH0gZnJvbSBcIi4vcHJvcGVydGllcy5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgU2VjdGlvblByb3BlcnRpZXNDb21wb25lbnQgfSBmcm9tIFwiLi9zZWN0aW9uLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBCb3hTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gXCIuL3NldHRpbmdzLmNvbXBvbmVudFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGU6ICcnLFxyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLWJveC1jb250cm9sLWRlc2lnbidcclxufSlcclxuZXhwb3J0IGNsYXNzIERlc2lnbkNvbnRyb2xDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgbWV0YWRhdGE6IEZpZWxkTW9kZWw7XHJcbiAgcHJpdmF0ZSBfaW5zdGFuY2U6IENvbnRyb2xDb21wb25lbnQ8YW55PjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX3ZjcjogVmlld0NvbnRhaW5lclJlZixcclxuICAgIEBJbmplY3QoQklaRE9DX0NPTkZJRykgcHJpdmF0ZSBfY29uZmlnOiBCaXpEb2NDb25maWcsXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NmOiBCaXpEb2NDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsKSB7IH1cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAhY2hhbmdlc1snbWV0YWRhdGEnXS5maXJzdENoYW5nZSAmJiBPYmplY3QuYXNzaWduKHRoaXMuX2luc3RhbmNlLCB0aGlzLm1ldGFkYXRhKTtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCB7IGNvbnRyb2xzIH0gPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUsXHJcbiAgICAgIHsgY29udHJvbFR5cGUgfSA9IHRoaXMubWV0YWRhdGEsXHJcbiAgICAgIGNvbnRyb2wgPSBjb250cm9sc1tjb250cm9sVHlwZV0gfHwgKGNvbnRyb2xzW2NvbnRyb2xUeXBlXSA9IGNvbnRyb2xzLmZpbmQoYyA9PiBjLm5hbWUgPT09IGNvbnRyb2xUeXBlKSksXHJcbiAgICAgIHNlbGVjdG9yID0gY29udHJvbC50ZW1wbGF0ZTtcclxuICAgIGNvbnN0IGNvbXAgPSB0aGlzLl9jZi5jb21wb25lbnQoc2VsZWN0b3IpO1xyXG4gICAgY29uc3QgY29tcFJlZiA9IHRoaXMuX3Zjci5jcmVhdGVDb21wb25lbnQ8Q29udHJvbENvbXBvbmVudD4oY29tcCk7XHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuX2luc3RhbmNlID0gY29tcFJlZi5pbnN0YW5jZTtcclxuICAgIE9iamVjdC5hc3NpZ24oaW5zdGFuY2UsIHRoaXMubWV0YWRhdGEpO1xyXG4gICAgaW5zdGFuY2UuYXBwZWFyYW5jZSA9IHRoaXMuX2NvbmZpZy5hcHBlYXJhbmNlIHx8ICdvdXRsaW5lJztcclxuICAgIGluc3RhbmNlLm1vZGUgPSAnY29tcG9zZSc7XHJcbiAgICBpbnN0YW5jZS5jb250cm9sLmRpc2FibGUoKTtcclxuICB9XHJcbn1cclxuLyoqICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlVXJsOiAnYm94LWRlc2lnbmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnYm94LWRlc2lnbmVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW50cnlDb21wb25lbnRzOiBbU2VjdGlvblByb3BlcnRpZXNDb21wb25lbnQsIENvbnRyb2xQcm9wZXJ0aWVzQ29tcG9uZW50LCBCb3hTZXR0aW5nc0NvbXBvbmVudF1cclxufSlcclxuQEJpekRvYyh7IHNlbGVjdG9yOiAnYml6ZG9jLWZvcm0tZGVzaWduZXInIH0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtRGVzaWduZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGxvYWRpbmcgPSB0cnVlO1xyXG4gIHRvb2xzID0gdHJ1ZTtcclxuICBzYXZpbmcgPSBmYWxzZTtcclxuICBtb2RlbDogQm94Rm9ybU1ldGFkYXRhO1xyXG4gIHJlYWRvbmx5IGhpc3Rvcnk6IHN0cmluZ1tdID0gW107XHJcbiAgaGlzdG9yeUluZGV4ID0gLTE7XHJcbiAgcmVhZG9ubHkgZGF0YXR5cGVzOiBUeXBlW107XHJcbiAgcmVhZG9ubHkgY3ViZXM6IEN1YmVbXTtcclxuICByZWFkb25seSBzZWN0aW9ucyA9IHRoaXMuX2ZiLmFycmF5KFtdKTtcclxuICByZWFkb25seSBmb3JtID0gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgc3ViamVjdDogbnVsbCxcclxuICAgIHZhbHVlOiBudWxsLFxyXG4gICAgc3VtbWFyeTogbnVsbCxcclxuICAgIHNlY3Rpb25zOiB0aGlzLnNlY3Rpb25zXHJcbiAgfSk7XHJcbiAgY29udHJvbHM6IENvbnRyb2xJbmZvW107XHJcbiAgcHJpdmF0ZSBfZm9ybUlkOiBzdHJpbmc7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9mYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIF9wYW5lOiBQYW5lUmVmPGFueT4sXHJcbiAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIF9wczogUHJvbXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgX3N5c3RlbTogU3lzdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3JvdXRlcjogUGFuZXNSb3V0ZXIsXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2VsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBfcmVmOiBVdGlsaXR5UmVmPGJvb2xlYW4sIHsgbWV0YWRhdGE6IEJveEZvcm1NZXRhZGF0YSwgZm9ybUlkOiBzdHJpbmcgfSwgQm94Rm9ybU1ldGFkYXRhLCBzdHJpbmc+KSB7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcGFuZS5xdWVyeVBhcmFtc0NoYW5nZSgpLnN1YnNjcmliZShwID0+IHtcclxuICAgICAgY29uc3QgeyBmb3JtSWQgfSA9IHA7XHJcbiAgICAgIGZvcm1JZCAmJiB0aGlzLl9vcGVuKGZvcm1JZCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3N5c3RlbS5jb250cm9scygpLnN1YnNjcmliZShjID0+XHJcbiAgICAgIHRoaXMuY29udHJvbHMgPSBjXHJcbiAgICApO1xyXG4gIH1cclxuICBwcml2YXRlIF9vcGVuKGZvcm1JZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9yZWYucG9wdWxhdGUoZm9ybUlkKS5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgIHRoaXMuX2Zvcm1JZCA9IGZvcm1JZDtcclxuICAgICAgdGhpcy5fYXNzaWduKHIpO1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIF9hc3NpZ24obW9kZWw6IEJveEZvcm1NZXRhZGF0YSkge1xyXG4gICAgdGhpcy5tb2RlbCA9IG1vZGVsIHx8IHsgc2VjdGlvbnM6IFtdIH07XHJcbiAgICB0aGlzLnNlY3Rpb25zLmNsZWFyKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIHRoaXMubW9kZWwuc2VjdGlvbnMuZm9yRWFjaChzID0+IHRoaXMuc2VjdGlvbnMucHVzaCh0aGlzLl9zZWN0aW9uZm9ybShzKSBhcyBhbnksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NlY3Rpb25mb3JtKG1vZGVsOiBTZWN0aW9uTW9kZWwpIHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICAgIG5hbWU6IG1vZGVsLm5hbWUsXHJcbiAgICAgIHRpdGxlOiBtb2RlbC50aXRsZSxcclxuICAgICAgbm90ZTogbW9kZWwubm90ZSxcclxuICAgICAgbXVsdGlMaW5lOiBtb2RlbC5tdWx0aUxpbmUsXHJcbiAgICAgIHJvd3M6IHRoaXMuX2ZiLmFycmF5KG1vZGVsLnJvd3M/Lm1hcChyID0+IHRoaXMuX3Jvd2Zvcm0ocikpIHx8IFtdKVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZm9ybTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfcm93Zm9ybShyb3c6IEJveFJvd01vZGVsKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICAgIGZpZWxkczogdGhpcy5fZmIuYXJyYXkocm93LmZpZWxkcz8ubWFwKGYgPT4gdGhpcy5fZmllbGRmb3JtKGYpKSlcclxuICAgIH0pXHJcbiAgfVxyXG4gIHByaXZhdGUgX2ZpZWxkZm9ybShmaWVsZDogRmllbGRNb2RlbCk6IGFueSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5fZmIuY29udHJvbChmaWVsZCk7XHJcbiAgICByZXR1cm4gZm9ybTtcclxuICB9XHJcbiAgYWRkU2VjdGlvbihldnQ/OiBFdmVudCkge1xyXG4gICAgbGV0IG4gPSAwLCBuYW1lLCB0aXRsZTtcclxuICAgIGRvIHtcclxuICAgICAgbisrO1xyXG4gICAgICBuYW1lID0gJ3NlY3Rpb24nICsgJ18nICsgbjtcclxuICAgICAgdGl0bGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdTZWN0aW9uTicsIG4pO1xyXG4gICAgfSB3aGlsZSAodGhpcy5zZWN0aW9ucy5jb250cm9scy5maW5kKHMgPT4gcy5nZXQoJ25hbWUnKS52YWx1ZSA9PT0gbmFtZSB8fCBzLmdldCgndGl0bGUnKS52YWx1ZSA9PT0gdGl0bGUpKTtcclxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShTZWN0aW9uUHJvcGVydGllc0NvbXBvbmVudCwge1xyXG4gICAgICBwb2xpY3k6IE9wZW5Qb2xpY3kuRGlhbG9nIHwgT3BlblBvbGljeS5EaXNtaXNzYWJsZSxcclxuICAgICAgc3RhdGU6IHtcclxuICAgICAgICBuYW1lLFxyXG4gICAgICAgIHRpdGxlLFxyXG4gICAgICAgIGRyYWZ0OiB0cnVlLFxyXG4gICAgICAgIHJvd3M6IFt7IGZpZWxkczogW10gfV1cclxuICAgICAgfSBhcyBTZWN0aW9uTW9kZWxcclxuICAgIH0pLnRoZW4oZSA9PiBlLmNsb3NlZCgpLnN1YnNjcmliZSh2ID0+IHtcclxuICAgICAgaWYgKHYpIHtcclxuICAgICAgICB0aGlzLl9ub3RpZnlDaGFuZ2UoKTtcclxuICAgICAgICB0aGlzLnNlY3Rpb25zLnB1c2godGhpcy5fc2VjdGlvbmZvcm0odikgYXMgYW55KTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuICBhZGRSb3coc2VjdGlvbjogRm9ybUdyb3VwLCBldnQ/OiBFdmVudCkge1xyXG4gICAgdGhpcy5fbm90aWZ5Q2hhbmdlKCk7XHJcbiAgICAoc2VjdGlvbi5nZXQoJ3Jvd3MnKSBhcyBGb3JtQXJyYXkpLnB1c2godGhpcy5fcm93Zm9ybSh7XHJcbiAgICAgIGZpZWxkczogW10gYXMgYW55XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYHNlY3Rpb25bZGF0YS1pbmRleD0nJHt0aGlzLnNlY3Rpb25zLmNvbnRyb2xzLmluZGV4T2Yoc2VjdGlvbiBhcyBhbnkpfSddIC5kZXNpZ25lci1yb3c6bGFzdC1jaGlsZCBidXR0b25gKT8uZm9jdXMoKVxyXG4gIH1cclxuICBpY29uT2YodHlwZTogc3RyaW5nKSB7IHJldHVybiB0aGlzLmNvbnRyb2xzW3R5cGVdLmljb24gfVxyXG4gIGFkZEZpZWxkKHNlY3Rpb246IEZvcm1Hcm91cCwgcm93OiBGb3JtR3JvdXAsIGNvbnRyb2w6IENvbnRyb2xJbmZvLCBldnQ/OiBFdmVudCkge1xyXG4gICAgbGV0IG4gPSAwLCBuYW1lLCBsYWJlbDtcclxuICAgIGRvIHtcclxuICAgICAgbisrO1xyXG4gICAgICBuYW1lID0gY29udHJvbC5uYW1lLnJlcGxhY2UoJy0nLCAnXycpICsgJ18nICsgbjtcclxuICAgICAgbGFiZWwgPSBjb250cm9sLnRpdGxlICsgJyAnICsgbjtcclxuICAgIH0gd2hpbGUgKChzZWN0aW9uLmdldCgncm93cycpIGFzIEZvcm1BcnJheSkuY29udHJvbHMuXHJcbiAgICAgIGZpbmQociA9PiAoci5nZXQoJ2ZpZWxkcycpIGFzIEZvcm1BcnJheSkuY29udHJvbHMuZmluZChmID0+IGYudmFsdWUubmFtZSA9PT0gbmFtZSB8fCBmLnZhbHVlLmxhYmVsID09PSBsYWJlbCkgIT0gbnVsbCkpO1xyXG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKENvbnRyb2xQcm9wZXJ0aWVzQ29tcG9uZW50LCB7XHJcbiAgICAgIHBvbGljeTogT3BlblBvbGljeS5EaWFsb2cgfCBPcGVuUG9saWN5LkRpc21pc3NhYmxlLFxyXG4gICAgICBpY29uOiBjb250cm9sLmljb24sXHJcbiAgICAgIHN0YXRlOiB7XHJcbiAgICAgICAgbmFtZSwgbGFiZWwsIGRyYWZ0OiB0cnVlLFxyXG4gICAgICAgIGNvbnRyb2xUeXBlOiBjb250cm9sLm5hbWVcclxuICAgICAgfSBhcyBGaWVsZE1vZGVsXHJcbiAgICB9KS50aGVuKGUgPT4gZS5jbG9zZWQoKS5zdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZ5Q2hhbmdlKCk7XHJcbiAgICAgICAgKHJvdy5nZXQoJ2ZpZWxkcycpIGFzIEZvcm1BcnJheSkucHVzaCh0aGlzLl9maWVsZGZvcm0odikpO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgfVxyXG4gIGVkaXRGaWVsZChmaWVsZDogRm9ybUdyb3VwKSB7XHJcbiAgICBjb25zdCBtb2RlbCA9IGZpZWxkLmdldFJhd1ZhbHVlKCkgYXMgRmllbGRNb2RlbCxcclxuICAgICAgY29udHJvbCA9IHRoaXMuY29udHJvbHNbbW9kZWwuY29udHJvbFR5cGVdO1xyXG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKENvbnRyb2xQcm9wZXJ0aWVzQ29tcG9uZW50LCB7XHJcbiAgICAgIHBvbGljeTogT3BlblBvbGljeS5UYWIgfCBPcGVuUG9saWN5LkRlZmVyLFxyXG4gICAgICBpY29uOiBjb250cm9sLmljb24sXHJcbiAgICAgIHN0YXRlOiBtb2RlbFxyXG4gICAgfSkudGhlbihlID0+IGUuY2xvc2VkKCkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICBpZiAodikge1xyXG4gICAgICAgIHRoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgICAgIGZpZWxkLnNldFZhbHVlKHYpO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgfVxyXG4gIGVkaXRTZWN0aW9uKGZpZWxkOiBGb3JtR3JvdXApIHtcclxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShTZWN0aW9uUHJvcGVydGllc0NvbXBvbmVudCwge1xyXG4gICAgICBwb2xpY3k6IE9wZW5Qb2xpY3kuVGFiIHwgT3BlblBvbGljeS5EZWZlcixcclxuICAgICAgc3RhdGU6IGZpZWxkLmdldFJhd1ZhbHVlKClcclxuICAgIH0pLnRoZW4oZSA9PiBlLmNsb3NlZCgpLnN1YnNjcmliZSh2ID0+IHtcclxuICAgICAgaWYgKHYpIHtcclxuICAgICAgICB0aGlzLl9ub3RpZnlDaGFuZ2UoKTtcclxuICAgICAgICBmaWVsZC5zZXRWYWx1ZSh2KTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuICBvcGVuc2V0dGluZ3MoKSB7XHJcbiAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoQm94U2V0dGluZ3NDb21wb25lbnQsIHtcclxuICAgICAgcG9saWN5OiBPcGVuUG9saWN5LlRhYiB8IE9wZW5Qb2xpY3kuRGVmZXIsXHJcbiAgICAgIHN0YXRlOiB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKVxyXG4gICAgfSkudGhlbihlID0+IGUuY2xvc2VkKCkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICB0aGlzLl9ub3RpZnlDaGFuZ2UoKTtcclxuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodilcclxuICAgIH0pKTtcclxuICB9XHJcbiAgcmVtb3ZlRmllbGQocm93OiBGb3JtR3JvdXAsIGZpZWxkOiBGb3JtR3JvdXApIHtcclxuICAgIHRoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgKHJvdy5nZXQoJ2ZpZWxkcycpIGFzIEZvcm1BcnJheSkuY29udHJvbHMucmVtb3ZlKGZpZWxkKTtcclxuICB9XHJcbiAgcmVtb3ZlU2VjdGlvbihzZWN0aW9uOiBGb3JtR3JvdXApIHtcclxuICAgIHRoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgdGhpcy5zZWN0aW9ucy5jb250cm9scy5yZW1vdmUoc2VjdGlvbiBhcyBhbnkpO1xyXG4gIH1cclxuICByZW1vdmVSb3coc2VjdGlvbjogRm9ybUdyb3VwLCByb3c6IEZvcm1Hcm91cCkge1xyXG4gICAgdGhpcy5fbm90aWZ5Q2hhbmdlKCk7XHJcbiAgICAoc2VjdGlvbi5nZXQoJ3Jvd3MnKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLnJlbW92ZShyb3cpO1xyXG4gIH1cclxuICBwcml2YXRlIF9ub3RpZnlDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLmhpc3RvcnkucHVzaChKU09OLnN0cmluZ2lmeSh0aGlzLmZvcm0udmFsdWUpKTtcclxuICAgIHRoaXMuaGlzdG9yeUluZGV4ID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDE7XHJcbiAgICB0aGlzLmZvcm0ubWFya0FzRGlydHkoKTtcclxuICB9XHJcbiAgdW5kbygpIHtcclxuICAgIHRoaXMuX3Jlc3RvcmUoKTtcclxuICAgIHRoaXMuaGlzdG9yeUluZGV4LS07XHJcbiAgfVxyXG4gIHJlZG8oKSB7XHJcbiAgICB0aGlzLl9yZXN0b3JlKCk7XHJcbiAgICB0aGlzLmhpc3RvcnlJbmRleCsrO1xyXG4gIH1cclxuICBwcml2YXRlIF9yZXN0b3JlKCkge1xyXG4gICAgdGhpcy5fYXNzaWduKEpTT04ucGFyc2UodGhpcy5oaXN0b3J5W3RoaXMuaGlzdG9yeUluZGV4XSkpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDdHJsLXMgc2F2ZTsgQ3RybC16IHVuZG9cclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQuY3RybEtleSkge1xyXG4gICAgICBpZiAoZXZlbnQud2hpY2ggPT09IDgzIHx8IGV2ZW50LndoaWNoID09PSAxMTUpIHtcclxuICAgICAgICB0aGlzLmZvcm0uZGlydHkgJiYgdGhpcy5zYXZlKCk7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxGb3JtR3JvdXA+LCBjb2xsZWN0aW9uOiBGb3JtQXJyYXkpIHtcclxuICAgIHRoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgaWYgKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyID09PSBldmVudC5jb250YWluZXIpIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IGNvbGxlY3Rpb24uYXQoZXZlbnQucHJldmlvdXNJbmRleCk7XHJcbiAgICAgIGNvbGxlY3Rpb24ucmVtb3ZlQXQoZXZlbnQucHJldmlvdXNJbmRleCk7XHJcbiAgICAgIGNvbGxlY3Rpb24uaW5zZXJ0KGV2ZW50LmN1cnJlbnRJbmRleCwgZWxlbWVudCk7XHJcbiAgICAgIC8vbW92ZUl0ZW1JbkFycmF5KGV2ZW50LmNvbnRhaW5lci5kYXRhLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gIHRyYW5zZmVyQXJyYXlJdGVtKFxyXG4gICAgICAvLyAgICBldmVudC5wcmV2aW91c0NvbnRhaW5lci5kYXRhLFxyXG4gICAgICAvLyAgICBldmVudC5jb250YWluZXIuZGF0YSxcclxuICAgICAgLy8gICAgZXZlbnQucHJldmlvdXNJbmRleCxcclxuICAgICAgLy8gICAgZXZlbnQuY3VycmVudEluZGV4LFxyXG4gICAgICAvLyAgKTtcclxuICAgIH1cclxuICB9XHJcbiAgc2F2ZSgpIHtcclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubW9kZWwgPSB0aGlzLmZvcm0udmFsdWUgYXMgYW55O1xyXG4gICAgdGhpcy5fcmVmLmV4ZWN1dGUoeyBtZXRhZGF0YTogY2xlYW51cCh0aGlzLm1vZGVsKSwgZm9ybUlkOiB0aGlzLl9mb3JtSWQgfSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5fcHMudG9hc3QoJ0NoYW5nZXNTYXZlZCcpO1xyXG4gICAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5mb3Jtcy5maW5kKGYgPT4gZi5uYW1lID09IHRoaXMuX2Zvcm1JZCk7XHJcbiAgICAgIGlmIChmb3JtKSBmb3JtLm9wdGlvbnMgPSB0aGlzLm1vZGVsO1xyXG4gICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgfSwgKCkgPT4ge1xyXG4gICAgICB0aGlzLl9wcy5lcnJvcigpO1xyXG4gICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG4iLCI8bWF0LXRvb2xiYXI+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInNhdmUoKVwiIFtkaXNhYmxlZF09XCIhZm9ybS5kaXJ0eSB8fCBsb2FkaW5nIHx8IHNhdmluZ1wiIFtiaXpkb2NUb29sdGlwXT1cIidTYXZlJ3x0cmFuc2xhdGVcIj48bWF0LWljb24+c2F2ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInVuZG8oKVwiIFtiaXpkb2NUb29sdGlwXT1cIidVbmRvJyB8IHRyYW5zbGF0ZVwiIFtkaXNhYmxlZF09XCJoaXN0b3J5SW5kZXggPT09IC0xXCI+PG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPnVuZG88L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJyZWRvKClcIiBbYml6ZG9jVG9vbHRpcF09XCInUmVkbycgfCB0cmFuc2xhdGVcIiBbZGlzYWJsZWRdPVwiaGlzdG9yeUluZGV4ID09PSBoaXN0b3J5Lmxlbmd0aCAtIDFcIj48bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+cmVkbzwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gIDwhLS08YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwib3BlbnNldHRpbmdzKClcIiBbYml6ZG9jVG9vbHRpcF09XCInU2V0dGluZ3MnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+c2V0dGluZ3M8L21hdC1pY29uPjwvYnV0dG9uPi0tPlxyXG48L21hdC10b29sYmFyPlxyXG48Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAqbmdJZj1cIm1vZGVsXCI+XHJcbiAgPGRpdiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50LCBzZWN0aW9ucylcIj5cclxuICAgIDxzZWN0aW9uIGNsYXNzPVwiY29sdW1uXCIgKm5nRm9yPVwibGV0IHMgb2Ygc2VjdGlvbnMuY29udHJvbHM7IGxldCBzaSA9IGluZGV4XCIgY2RrRHJhZyBbYXR0ci5kYXRhLWluZGV4XT1cInNpXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzZWN0aW9uLWRyYWdcIiBjZGtEcmFnSGFuZGxlPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCIgW2Zvcm1Hcm91cF09XCJzXCI+XHJcbiAgICAgICAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIj57e3MuZ2V0KCd0aXRsZScpLnZhbHVlfGxvY2FsaXplZFN0cmluZ319PC9oMj5cclxuICAgICAgICAgIDxwIGNsYXNzPVwibWF0LWJvZHktMVwiICpuZ0lmPVwicy5nZXQoJ25vdGUnKS52YWx1ZVwiPnt7cy5nZXQoJ25vdGUnKS52YWx1ZXxsb2NhbGl6ZWRTdHJpbmd9fTwvcD5cclxuICAgICAgICAgIDxkaXYgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudCwgcy5nZXQoJ3Jvd3MnKSlcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgciBvZiBzLmdldCgncm93cycpLmNvbnRyb2xzOyBsZXQgcmkgPSBpbmRleFwiIGNsYXNzPVwicm93IGRlc2lnbmVyLXJvd1wiIGNka0RyYWcgW2F0dHIuZGF0YS1pbmRleF09XCJyaVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjZGtEcmFnSGFuZGxlPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8ZGl2IGNka0Ryb3BMaXN0IGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCIgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudCwgci5nZXQoJ2ZpZWxkcycpKVwiIGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmIG9mIHIuZ2V0KCdmaWVsZHMnKS5jb250cm9sczsgbGV0IGZpID0gaW5kZXhcIiBjZGtEcmFnIGNsYXNzPVwiZGVzaWduZXItZmllbGQgcm93XCIgW2F0dHIuZGF0YS1pbmRleF09XCJmaVwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tPG1hdC1pY29uIGNka0RyYWdIYW5kbGU+e3tpY29uT2YoZi52YWx1ZS50eXBlKX19PC9tYXQtaWNvbj4tLT5cclxuICAgICAgICAgICAgICAgICAgPGJpemRvYy1ib3gtY29udHJvbC1kZXNpZ24gW21ldGFkYXRhXT1cImYudmFsdWVcIj48L2JpemRvYy1ib3gtY29udHJvbC1kZXNpZ24+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJyZW1vdmVGaWVsZChyLCBmKVwiIFtiaXpkb2NUb29sdGlwXT1cIidEaXNjYXJkJ3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cImVkaXRGaWVsZChmKVwiIFtiaXpkb2NUb29sdGlwXT1cIidTZXR0aW5ncyd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5zZXR0aW5nczwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8IS0tPGRpdiAqY2RrRHJhZ1BsYWNlaG9sZGVyIGNsYXNzPVwiZHJhZy1wbGFjZWhvbGRlclwiPjwvZGl2Pi0tPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImZpZWxkTWVudVwiIFtiaXpkb2NUb29sdGlwXT1cIidBZGQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+YWRkPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjZmllbGRNZW51PlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nRm9yPVwibGV0IGMgb2YgY29udHJvbHNcIiAoY2xpY2spPVwiYWRkRmllbGQocywgciwgYywgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj57e2MuaWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2MudGl0bGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJyZW1vdmVSb3cocywgcilcIiBbYml6ZG9jVG9vbHRpcF09XCInRGlzY2FyZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidG9vbHMgcm93XCI+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cImFkZFJvdyhzLCAkZXZlbnQpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0FkZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlU2VjdGlvbihzKVwiIFtiaXpkb2NUb29sdGlwXT1cIidEaXNjYXJkJ3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cImVkaXRTZWN0aW9uKHMpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1NldHRpbmdzJ3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPnNldHRpbmdzPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3NlY3Rpb24+XHJcbiAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwiYWRkU2VjdGlvbigkZXZlbnQpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0FkZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Zvcm0+XHJcbiJdfQ==
@@ -57,10 +57,10 @@ export class ControlPropertiesComponent {
57
57
  save() { this._paneRef.close(this.form.value); }
58
58
  }
59
59
  ControlPropertiesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ControlPropertiesComponent, deps: [{ token: i1.FormBuilder }, { token: i2.SystemService }, { token: i3.BizDocComponentFactoryResolver }, { token: i4.PaneRef }], target: i0.ɵɵFactoryTarget.Component });
60
- ControlPropertiesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: ControlPropertiesComponent, selector: "ng-component", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, viewQueries: [{ propertyName: "design", first: true, predicate: ["design"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form?.dirty || !form?.valid\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput required formControlName=\"name\" />\r\n <mat-error *ngIf=\"form.get('name').hasError('pattern')\" [innerHTML]=\"'ProgramPatternErr'|translate\"></mat-error>\r\n <mat-error *ngIf=\"form.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:'Field'\"></mat-error>\r\n </mat-form-field>\r\n\r\n <ng-container #design>\r\n </ng-container>\r\n <mat-checkbox formControlName=\"required\">{{'Mandatory'|translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"autofill\">{{'Autofill'|translate}}</mat-checkbox>\r\n</form>\r\n", styles: [":host{flex:1;display:flex;flex-flow:column}form{padding:8px}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { 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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { 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: "component", type: i6.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i7.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "component", type: i8.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: i9.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i10.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: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i12.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i13.TranslatePipe, name: "translate" }] });
60
+ ControlPropertiesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: ControlPropertiesComponent, selector: "ng-component", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, viewQueries: [{ propertyName: "design", first: true, predicate: ["design"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form?.dirty || !form?.valid\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput required formControlName=\"name\" />\r\n <mat-error *ngIf=\"form.get('name').hasError('pattern')\" [innerHTML]=\"'ProgramPatternErr'|translate\"></mat-error>\r\n <mat-error *ngIf=\"form.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:'Field'\"></mat-error>\r\n </mat-form-field>\r\n\r\n <ng-container #design>\r\n </ng-container>\r\n <mat-checkbox formControlName=\"required\">{{'Mandatory'|translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"autofill\">{{'Autofill'|translate}}</mat-checkbox>\r\n</form>\r\n", styles: [":host{flex:1;display:flex;flex-flow:column}form{padding:8px}:host ::ng-deep .cdk-drag-handle{cursor:move}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { 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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { 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: "component", type: i6.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i7.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "component", type: i8.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: i9.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i10.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: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i12.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i13.TranslatePipe, name: "translate" }] });
61
61
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ControlPropertiesComponent, decorators: [{
62
62
  type: Component,
63
- args: [{ template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form?.dirty || !form?.valid\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput required formControlName=\"name\" />\r\n <mat-error *ngIf=\"form.get('name').hasError('pattern')\" [innerHTML]=\"'ProgramPatternErr'|translate\"></mat-error>\r\n <mat-error *ngIf=\"form.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:'Field'\"></mat-error>\r\n </mat-form-field>\r\n\r\n <ng-container #design>\r\n </ng-container>\r\n <mat-checkbox formControlName=\"required\">{{'Mandatory'|translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"autofill\">{{'Autofill'|translate}}</mat-checkbox>\r\n</form>\r\n", styles: [":host{flex:1;display:flex;flex-flow:column}form{padding:8px}\n"] }]
63
+ args: [{ template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form?.dirty || !form?.valid\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput required formControlName=\"name\" />\r\n <mat-error *ngIf=\"form.get('name').hasError('pattern')\" [innerHTML]=\"'ProgramPatternErr'|translate\"></mat-error>\r\n <mat-error *ngIf=\"form.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:'Field'\"></mat-error>\r\n </mat-form-field>\r\n\r\n <ng-container #design>\r\n </ng-container>\r\n <mat-checkbox formControlName=\"required\">{{'Mandatory'|translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"autofill\">{{'Autofill'|translate}}</mat-checkbox>\r\n</form>\r\n", styles: [":host{flex:1;display:flex;flex-flow:column}form{padding:8px}:host ::ng-deep .cdk-drag-handle{cursor:move}\n"] }]
64
64
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.SystemService }, { type: i3.BizDocComponentFactoryResolver }, { type: i4.PaneRef }]; }, propDecorators: { design: [{
65
65
  type: ViewChild,
66
66
  args: ['design', {
@@ -45,7 +45,7 @@ export class SectionPropertiesComponent {
45
45
  save() { this._paneRef.close(this.form.value); }
46
46
  }
47
47
  SectionPropertiesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: SectionPropertiesComponent, deps: [{ token: i1.FormBuilder }, { token: i2.PaneRef }], target: i0.ɵɵFactoryTarget.Component });
48
- SectionPropertiesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: SectionPropertiesComponent, selector: "ng-component", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, ngImport: i0, template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form?.dirty || !form?.valid\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <bizdoc-localized-string [placeholder]=\"'Title'|translate\" formControlName=\"title\"></bizdoc-localized-string>\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput required formControlName=\"name\" />\r\n <mat-error *ngIf=\"form.get('name').hasError('pattern')\" [innerHTML]=\"'ProgramPatternErr'|translate\"></mat-error>\r\n <mat-error *ngIf=\"form.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:'Field'\"></mat-error>\r\n </mat-form-field>\r\n <bizdoc-localized-string [placeholder]=\"'Note'|translate\" formControlName=\"note\"></bizdoc-localized-string>\r\n\r\n</form>\r\n", styles: ["form{padding:8px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { 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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { 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: "component", type: i4.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i5.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "component", type: i6.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: i7.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: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "component", type: i10.LocalizedStringComponent, selector: "bizdoc-localized-string", inputs: ["class", "value", "placeholder", "required", "disabled", "maxlength"], outputs: ["valueChanges"] }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }] });
48
+ SectionPropertiesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: SectionPropertiesComponent, selector: "ng-component", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, ngImport: i0, template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form?.dirty || !form?.valid\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <bizdoc-localized-string [placeholder]=\"'Title'|translate\" formControlName=\"title\"></bizdoc-localized-string>\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput required formControlName=\"name\" />\r\n <mat-error *ngIf=\"form.get('name').hasError('pattern')\" [innerHTML]=\"'ProgramPatternErr'|translate\"></mat-error>\r\n <mat-error *ngIf=\"form.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:'Field'\"></mat-error>\r\n </mat-form-field>\r\n <bizdoc-localized-string [placeholder]=\"'Note'|translate\" formControlName=\"note\"></bizdoc-localized-string>\r\n\r\n</form>\r\n", styles: ["form{padding:8px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { 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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { 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: "component", type: i4.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i5.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "component", type: i6.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: i7.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: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "component", type: i10.LocalizedStringComponent, selector: "bizdoc-localized-string", inputs: ["class", "floatLabel", "value", "placeholder", "required", "disabled", "maxlength"] }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }] });
49
49
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: SectionPropertiesComponent, decorators: [{
50
50
  type: Component,
51
51
  args: [{ template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form?.dirty || !form?.valid\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <bizdoc-localized-string [placeholder]=\"'Title'|translate\" formControlName=\"title\"></bizdoc-localized-string>\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput required formControlName=\"name\" />\r\n <mat-error *ngIf=\"form.get('name').hasError('pattern')\" [innerHTML]=\"'ProgramPatternErr'|translate\"></mat-error>\r\n <mat-error *ngIf=\"form.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:'Field'\"></mat-error>\r\n </mat-form-field>\r\n <bizdoc-localized-string [placeholder]=\"'Note'|translate\" formControlName=\"note\"></bizdoc-localized-string>\r\n\r\n</form>\r\n", styles: ["form{padding:8px}\n"] }]
@@ -82,7 +82,7 @@ export class WorkflowNodeComponent {
82
82
  const nodeType = addInfo.nodeType;
83
83
  const tool = this.tool = this._session.profile.nodes.find(n => n.name === nodeType);
84
84
  this._pane.title = tool.title;
85
- const annotationArg = tool.arguments.find(a => a.diagram);
85
+ const annotationArg = tool.arguments.find(a => a.flags?.indexOf('Diagram') > -1);
86
86
  function change(m) {
87
87
  if (annotationArg && m[annotationArg.name] !== null) {
88
88
  if (node.annotations.length) {
@@ -156,4 +156,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
156
156
  type: ViewChild,
157
157
  args: ['connectorargs', { static: true }]
158
158
  }] } });
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2Zvcm0vd29ya2Zsb3cvbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2Zvcm0vd29ya2Zsb3cvbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTRCLFlBQVksRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBZSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2pLLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTTFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFckMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFNbEQsTUFBTSxPQUNFLHFCQUFxQjtJQWUzQixZQUNVLFFBQXdCLEVBQ3hCLGdCQUFnRCxFQUNoRCxHQUE2QixFQUM3QixTQUFtQixFQUNuQixVQUE0QixFQUM1QixHQUFnQixFQUNoQixLQUFxQztRQU5yQyxhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUN4QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWdDO1FBQ2hELFFBQUcsR0FBSCxHQUFHLENBQTBCO1FBQzdCLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsUUFBRyxHQUFILEdBQUcsQ0FBYTtRQUNoQixVQUFLLEdBQUwsS0FBSyxDQUFnQztRQXJCNUIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFNdEMsY0FBUyxH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bXJDQW9CQTsyRkRBUSxxQkFBcUI7a0JBTDVCLFNBQVM7OytSQU1XLE1BQU07c0JBQXhCLE1BQU07Z0JBQzJELGlCQUFpQjtzQkFBbEYsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFDbEIsYUFBYTtzQkFBMUQsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgVGVtcGxhdGVSZWYsIENvbXBvbmVudCwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZUNoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi10b2dnbGUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29ubmVjdG9yTW9kZWwsIERpYWdyYW0sIE5vZGVNb2RlbCB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWRpYWdyYW1zJztcclxuaW1wb3J0IHsgQml6RG9jQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9jb21wb25lbnQtZmFjdG9yeS1yZXNvbHZlcic7XHJcbmltcG9ydCB7IEFjdGlvbiwgRmxvd05vZGUgfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYW5lUmVmIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zbG90cy9wYW5lLXJlZic7XHJcbmltcG9ydCB7IE5vZGVSZWYgfSBmcm9tICcuL25vZGUtcmVmJztcclxuaW1wb3J0IHsgQXJndW1lbnRzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9iYXNlJztcclxuaW1wb3J0IHsgTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9sYXlvdXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBjbGVhbnVwIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9mdW5jdGlvbnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25vZGUuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0XHJcbiAgY2xhc3MgV29ya2Zsb3dOb2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBPdXRwdXQoKSByZWFkb25seSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQFZpZXdDaGlsZCgnYXJndW1lbnRzJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgYXJndW1lbnRzdGVtcGxhdGU6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgQFZpZXdDaGlsZCgnY29ubmVjdG9yYXJncycsIHsgc3RhdGljOiB0cnVlIH0pIGNvbm5lY3RvcmFyZ3M6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgbm9kZXM6IE5vZGVNb2RlbFtdO1xyXG4gIGNvbm5lY3RvcnM6IENvbm5lY3Rvck1vZGVsW107XHJcbiAgZGlhZ3JhbTogRGlhZ3JhbTtcclxuICByZWFkb25seSBjb25uZWN0b3IgPSB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICBhY3Rpb246IG51bGwsXHJcbiAgICBjYXNlOiBudWxsXHJcbiAgfSk7XHJcbiAgYWN0aW9uczogQWN0aW9uW107XHJcbiAgdG9vbD86IEZsb3dOb2RlO1xyXG4gIG5vZGU6IE5vZGVNb2RlbDtcclxuICBwcml2YXRlIF9lbGVtZW50RGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2ZhY3RvcnlSZXNvbHZlcjogQml6RG9jQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgcHJpdmF0ZSBfY2Y6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2ZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgX3BhbmU6IFBhbmVSZWY8V29ya2Zsb3dOb2RlQ29tcG9uZW50Pikge1xyXG4gICAgdGhpcy5hY3Rpb25zID0gX3Nlc3Npb24ucHJvZmlsZS5hY3Rpb25zO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3BhbmUuZGF0YUNoYW5nZSgpLnN1YnNjcmliZShkID0+IHtcclxuICAgICAgdGhpcy5ub2RlcyA9IGRbJ25vZGVzJ107XHJcbiAgICAgIHRoaXMuZGlhZ3JhbSA9IGRbJ2RpYWdyYW0nXTtcclxuICAgICAgdGhpcy5jb25uZWN0b3JzID0gZFsnY29ubmVjdG9ycyddO1xyXG4gICAgICB0aGlzLnRvb2wgPSBudWxsO1xyXG5cclxuICAgICAgdGhpcy5fZWxlbWVudERlc3Ryb3kubmV4dCgpO1xyXG4gICAgICB0aGlzLmFyZ3VtZW50c3RlbXBsYXRlLmNsZWFyKCk7XHJcbiAgICAgIGlmICh0aGlzLmNvbm5lY3RvcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgY29ubmVjdG9yID0gdGhpcy5jb25uZWN0b3JzWzBdO1xyXG4gICAgICAgIGlmIChjb25uZWN0b3IuYWRkSW5mbykge1xyXG4gICAgICAgICAgY29uc3QgYWN0aW9uID0gY29ubmVjdG9yLmFkZEluZm9bJ2FjdGlvbiddLCBhY2FzZSA9IGNvbm5lY3Rvci5hZGRJbmZvWydjYXNlJ107XHJcbiAgICAgICAgICB0aGlzLmNvbm5lY3Rvci5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgYWN0aW9uOiB0aGlzLmNvbm5lY3RvcnMubGVuZ3RoID09PSAxIHx8IHRoaXMuY29ubmVjdG9ycy5ldmVyeShjID0+IGMuYWRkSW5mbyAmJiBjLmFkZEluZm9bJ2FjdGlvbiddID09PSBhY3Rpb24pID8gYWN0aW9uIDogbnVsbCxcclxuICAgICAgICAgICAgY2FzZTogdGhpcy5jb25uZWN0b3JzLmxlbmd0aCA9PT0gMSB8fCB0aGlzLmNvbm5lY3RvcnMuZXZlcnkoYyA9PiBjLmFkZEluZm8gJiYgYy5hZGRJbmZvWydjYXNlJ10gPT09IGFjYXNlKSA/IGFjYXNlIDogbnVsbFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3BhbmUudGl0bGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KHRoaXMuY29ubmVjdG9ycy5sZW5ndGggPT09IDEgPyAnQ29ubmVjdG9yJyA6ICdDb25uZWN0b3JzJywgdGhpcy5jb25uZWN0b3JzLmxlbmd0aCk7XHJcbiAgICAgICAgdGhpcy5fcGFuZS5pY29uID0gJ2xpbmsnO1xyXG4gICAgICAgIHRoaXMuY29ubmVjdG9yLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9lbGVtZW50RGVzdHJveSkpLnN1YnNjcmliZSh2ID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSAodlsnY2FzZSddIHx8IHZbJ2FjdGlvbiddKSBhcyBzdHJpbmc7XHJcbiAgICAgICAgICBpZiAoIWNvbm5lY3Rvci5hZGRJbmZvKVxyXG4gICAgICAgICAgICBjb25uZWN0b3IuYWRkSW5mbyA9IHRoaXMuY29ubmVjdG9yLmdldFJhd1ZhbHVlKCk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29ubmVjdG9yLmFkZEluZm8sIHRoaXMuY29ubmVjdG9yLmdldFJhd1ZhbHVlKCkpO1xyXG4gICAgICAgICAgY2xlYW51cChjb25uZWN0b3IuYWRkSW5mbyk7XHJcbiAgICAgICAgICBpZiAoY29ubmVjdG9yLmFubm90YXRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25uZWN0b3IuYW5ub3RhdGlvbnNbMF0uY29udGVudCA9IGNvbnRlbnQ7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhZ3JhbS5kYXRhQmluZCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmRpYWdyYW0uYWRkQ29ubmVjdG9yTGFiZWxzKGNvbm5lY3RvciwgW3tcclxuICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoaXMuX3Nlc3Npb24udGhlbWUuZGFyayA/ICd3aGl0ZScgOiAnYmxhY2snLFxyXG4gICAgICAgICAgICAgICAgZmlsbDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IC44LFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgY29udGVudFxyXG4gICAgICAgICAgICB9XSk7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hcmd1bWVudHN0ZW1wbGF0ZS5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5jb25uZWN0b3JhcmdzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5ub2RlID0gdGhpcy5ub2Rlc1swXSxcclxuICAgICAgICAgIGFkZEluZm8gPSBub2RlLmFkZEluZm8gYXMgYW55O1xyXG4gICAgICAgIGlmIChhZGRJbmZvICYmIGFkZEluZm8ubm9kZVR5cGUpIHtcclxuICAgICAgICAgIGNvbnN0IG5vZGVUeXBlID0gYWRkSW5mby5ub2RlVHlwZTtcclxuICAgICAgICAgIGNvbnN0IHRvb2wgPSB0aGlzLnRvb2wgPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUubm9kZXMuZmluZChuID0+IG4ubmFtZSA9PT0gbm9kZVR5cGUpO1xyXG4gICAgICAgICAgdGhpcy5fcGFuZS50aXRsZSA9IHRvb2wudGl0bGU7XHJcbiAgICAgICAgICBjb25zdCBhbm5vdGF0aW9uQXJnID0gdG9vbC5hcmd1bWVudHMuZmluZChhID0+IGEuZGlhZ3JhbSk7XHJcblxyXG4gICAgICAgICAgZnVuY3Rpb24gY2hhbmdlKG0pIHtcclxuICAgICAgICAgICAgaWYgKGFubm90YXRpb25BcmcgJiYgbVthbm5vdGF0aW9uQXJnLm5hbWVdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG5vZGUuYW5ub3RhdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLmFubm90YXRpb25zWzBdLmNvbnRlbnQgPSBtW2Fubm90YXRpb25BcmcubmFtZV0gfHwgbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhZ3JhbS5kYXRhQmluZCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWdyYW0uYWRkTm9kZUxhYmVscyhub2RlLCBbe1xyXG4gICAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLl9zZXNzaW9uLnRoZW1lLmRhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJyxcclxuICAgICAgICAgICAgICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IC44LFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICBjb250ZW50OiBtW2Fubm90YXRpb25BcmcubmFtZV0gfHwgbnVsbFxyXG4gICAgICAgICAgICAgICAgfV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oYWRkSW5mbywgbSk7XHJcbiAgICAgICAgICAgIGNsZWFudXAoYWRkSW5mbyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlLmVtaXQoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodG9vbC50ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSB0aGlzLl9jcmVhdGVUb29sVGVtcGxhdGUodG9vbCwgbm9kZSk7XHJcblxyXG4gICAgICAgICAgICBpbnN0YW5jZS5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoY2hhbmdlLmJpbmQodGhpcykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAodG9vbC5hcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHRoaXMuX2NyZWF0ZUxheW91dEFyZ3VtZW50cyh0b29sLCBub2RlKTtcclxuXHJcbiAgICAgICAgICAgIGluc3RhbmNlLm1vZGVsQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX2VsZW1lbnREZXN0cm95KSkuc3Vic2NyaWJlKGNoYW5nZS5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIF9jcmVhdGVMYXlvdXRBcmd1bWVudHModG9vbDogRmxvd05vZGUsIG5vZGU6IE5vZGVNb2RlbCkge1xyXG4gICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMuX2NmLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KExheW91dENvbXBvbmVudCk7XHJcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmFyZ3VtZW50c3RlbXBsYXRlLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5LCAwLCB0aGlzLl9pbmplY3Rvcik7XHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBMYXlvdXRDb21wb25lbnQ7XHJcbiAgICBpbnN0YW5jZS5maWVsZHMgPSB0b29sLmFyZ3VtZW50cztcclxuICAgIGluc3RhbmNlLm1vZGVsID0gbm9kZS5hZGRJbmZvIHx8IHt9O1xyXG4gICAgaW5zdGFuY2UubGF5b3V0KCk7XHJcbiAgICByZXR1cm4gaW5zdGFuY2U7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NyZWF0ZVRvb2xUZW1wbGF0ZSh0b29sOiBGbG93Tm9kZSwgbm9kZTogTm9kZU1vZGVsKSB7XHJcbiAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5fZmFjdG9yeVJlc29sdmVyLnJlc29sdmUodGhpcy50b29sLnRlbXBsYXRlKTtcclxuICAgIGNvbnN0IG5vZGVSZWYgPSBuZXcgTm9kZVJlZih0b29sKTtcclxuICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKFt7IHByb3ZpZGU6IE5vZGVSZWYsIHVzZVZhbHVlOiBub2RlUmVmIH1dLCB0aGlzLl9pbmplY3Rvcik7XHJcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmFyZ3VtZW50c3RlbXBsYXRlLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5LCAwLCBpbmplY3Rvcik7XHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBBcmd1bWVudHNDb21wb25lbnQ8YW55PjtcclxuICAgIGluc3RhbmNlLmZvcm0ucGF0Y2hWYWx1ZShub2RlLmFkZEluZm8sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIHJldHVybiBpbnN0YW5jZTtcclxuICB9XHJcbiAgY29ubmVjdG9yQ2FzZUNoYW5nZShldnQ/OiBNYXRCdXR0b25Ub2dnbGVDaGFuZ2UpIHtcclxuICAgIHRoaXMuY29ubmVjdG9yLmNvbnRyb2xzWydjYXNlJ10uc2V0VmFsdWUoZXZ0LnZhbHVlKTtcclxuICAgIHRoaXMuY2hhbmdlLmVtaXQoKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9lbGVtZW50RGVzdHJveS5uZXh0KCk7XHJcbiAgICB0aGlzLl9lbGVtZW50RGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICNhcmd1bWVudHM+XHJcbjwvbmctY29udGFpbmVyPlxyXG48bmctdGVtcGxhdGUgI2Nvbm5lY3RvcmFyZ3M+XHJcbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJjb25uZWN0b3JcIiBjbGFzcz1cImNvbHVtblwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LXNlbGVjdCBbcGxhY2Vob2xkZXJdPVwiJ0FjdGlvbicgfCB0cmFuc2xhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJhY3Rpb25cIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIiBbdmFsdWVdPVwiYWN0aW9uLm5hbWVcIj57e2FjdGlvbi50aXRsZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uPnt7J05vbmUnIHwgdHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgW3ZhbHVlXT1cImNvbm5lY3Rvci5jb250cm9sc1snY2FzZSddLnZhbHVlXCIgI2FjYXNlPVwibWF0QnV0dG9uVG9nZ2xlR3JvdXBcIiAoY2hhbmdlKT1cImNvbm5lY3RvckNhc2VDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJ0cnVlXCI+e3snVHJ1ZScgfCB0cmFuc2xhdGV9fTwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cImZhbHNlXCI+e3snRmFsc2UnIHwgdHJhbnNsYXRlfX08L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGU+e3snQ2FzZScgfCB0cmFuc2xhdGV9fTwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIFtzdHlsZS5kaXNwbGF5XT1cImNvbm5lY3Rvci5jb250cm9sc1snY2FzZSddLnZhbHVlPT09J3RydWUnfHxjb25uZWN0b3IuY29udHJvbHNbJ2Nhc2UnXS52YWx1ZT09PSdmYWxzZSc/J25vbmUnOicnXCI+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBbcGxhY2Vob2xkZXJdPVwiJ0Nhc2UnIHwgdHJhbnNsYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwiY2FzZVwiIC8+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZm9ybT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2Zvcm0vd29ya2Zsb3cvbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2Zvcm0vd29ya2Zsb3cvbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTRCLFlBQVksRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBZSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2pLLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTTFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFckMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFNbEQsTUFBTSxPQUNFLHFCQUFxQjtJQWUzQixZQUNVLFFBQXdCLEVBQ3hCLGdCQUFnRCxFQUNoRCxHQUE2QixFQUM3QixTQUFtQixFQUNuQixVQUE0QixFQUM1QixHQUFnQixFQUNoQixLQUFxQztRQU5yQyxhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUN4QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWdDO1FBQ2hELFFBQUcsR0FBSCxHQUFHLENBQTBCO1FBQzdCLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsUUFBRyxHQUFILEdBQUcsQ0FBYTtRQUNoQixVQUFLLEdBQUwsS0FBSyxDQUFnQztRQXJCNUIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFNdEMsY0FBUyxH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QXFCO3NHQUFyQixxQkFBcUIsOEtBRW1CLGdCQUFnQiwwSkN0QmhFLG1yQ0FvQkE7MkZEQVEscUJBQXFCO2tCQUw1QixTQUFTOzsrUkFNVyxNQUFNO3NCQUF4QixNQUFNO2dCQUMyRCxpQkFBaUI7c0JBQWxGLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ2xCLGFBQWE7c0JBQTFELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIFRlbXBsYXRlUmVmLCBDb21wb25lbnQsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Ub2dnbGVDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbm5lY3Rvck1vZGVsLCBEaWFncmFtLCBOb2RlTW9kZWwgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItYW5ndWxhci1kaWFncmFtcyc7XHJcbmltcG9ydCB7IEJpekRvY0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlciB9IGZyb20gJy4uLy4uLy4uL2NvcmUvY29tcG9uZW50LWZhY3RvcnktcmVzb2x2ZXInO1xyXG5pbXBvcnQgeyBBY3Rpb24sIEZsb3dOb2RlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGFuZVJlZiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2xvdHMvcGFuZS1yZWYnO1xyXG5pbXBvcnQgeyBOb2RlUmVmIH0gZnJvbSAnLi9ub2RlLXJlZic7XHJcbmltcG9ydCB7IEFyZ3VtZW50c0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvYmFzZSc7XHJcbmltcG9ydCB7IExheW91dENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbGF5b3V0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgY2xlYW51cCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvZnVuY3Rpb25zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlVXJsOiAnLi9ub2RlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9ub2RlLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydFxyXG4gIGNsYXNzIFdvcmtmbG93Tm9kZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBWaWV3Q2hpbGQoJ2FyZ3VtZW50cycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGFyZ3VtZW50c3RlbXBsYXRlOiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2Nvbm5lY3RvcmFyZ3MnLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb25uZWN0b3JhcmdzOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIG5vZGVzOiBOb2RlTW9kZWxbXTtcclxuICBjb25uZWN0b3JzOiBDb25uZWN0b3JNb2RlbFtdO1xyXG4gIGRpYWdyYW06IERpYWdyYW07XHJcbiAgcmVhZG9ubHkgY29ubmVjdG9yID0gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgYWN0aW9uOiBudWxsLFxyXG4gICAgY2FzZTogbnVsbFxyXG4gIH0pO1xyXG4gIGFjdGlvbnM6IEFjdGlvbltdO1xyXG4gIHRvb2w/OiBGbG93Tm9kZTtcclxuICBub2RlOiBOb2RlTW9kZWw7XHJcbiAgcHJpdmF0ZSBfZWxlbWVudERlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mYWN0b3J5UmVzb2x2ZXI6IEJpekRvY0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIHByaXZhdGUgX2NmOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIF9wYW5lOiBQYW5lUmVmPFdvcmtmbG93Tm9kZUNvbXBvbmVudD4pIHtcclxuICAgIHRoaXMuYWN0aW9ucyA9IF9zZXNzaW9uLnByb2ZpbGUuYWN0aW9ucztcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wYW5lLmRhdGFDaGFuZ2UoKS5zdWJzY3JpYmUoZCA9PiB7XHJcbiAgICAgIHRoaXMubm9kZXMgPSBkWydub2RlcyddO1xyXG4gICAgICB0aGlzLmRpYWdyYW0gPSBkWydkaWFncmFtJ107XHJcbiAgICAgIHRoaXMuY29ubmVjdG9ycyA9IGRbJ2Nvbm5lY3RvcnMnXTtcclxuICAgICAgdGhpcy50b29sID0gbnVsbDtcclxuXHJcbiAgICAgIHRoaXMuX2VsZW1lbnREZXN0cm95Lm5leHQoKTtcclxuICAgICAgdGhpcy5hcmd1bWVudHN0ZW1wbGF0ZS5jbGVhcigpO1xyXG4gICAgICBpZiAodGhpcy5jb25uZWN0b3JzLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGNvbm5lY3RvciA9IHRoaXMuY29ubmVjdG9yc1swXTtcclxuICAgICAgICBpZiAoY29ubmVjdG9yLmFkZEluZm8pIHtcclxuICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IGNvbm5lY3Rvci5hZGRJbmZvWydhY3Rpb24nXSwgYWNhc2UgPSBjb25uZWN0b3IuYWRkSW5mb1snY2FzZSddO1xyXG4gICAgICAgICAgdGhpcy5jb25uZWN0b3IucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgIGFjdGlvbjogdGhpcy5jb25uZWN0b3JzLmxlbmd0aCA9PT0gMSB8fCB0aGlzLmNvbm5lY3RvcnMuZXZlcnkoYyA9PiBjLmFkZEluZm8gJiYgYy5hZGRJbmZvWydhY3Rpb24nXSA9PT0gYWN0aW9uKSA/IGFjdGlvbiA6IG51bGwsXHJcbiAgICAgICAgICAgIGNhc2U6IHRoaXMuY29ubmVjdG9ycy5sZW5ndGggPT09IDEgfHwgdGhpcy5jb25uZWN0b3JzLmV2ZXJ5KGMgPT4gYy5hZGRJbmZvICYmIGMuYWRkSW5mb1snY2FzZSddID09PSBhY2FzZSkgPyBhY2FzZSA6IG51bGxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wYW5lLnRpdGxlID0gdGhpcy5fdHJhbnNsYXRlLmdldCh0aGlzLmNvbm5lY3RvcnMubGVuZ3RoID09PSAxID8gJ0Nvbm5lY3RvcicgOiAnQ29ubmVjdG9ycycsIHRoaXMuY29ubmVjdG9ycy5sZW5ndGgpO1xyXG4gICAgICAgIHRoaXMuX3BhbmUuaWNvbiA9ICdsaW5rJztcclxuICAgICAgICB0aGlzLmNvbm5lY3Rvci52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZWxlbWVudERlc3Ryb3kpKS5zdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gKHZbJ2Nhc2UnXSB8fCB2WydhY3Rpb24nXSkgYXMgc3RyaW5nO1xyXG4gICAgICAgICAgaWYgKCFjb25uZWN0b3IuYWRkSW5mbylcclxuICAgICAgICAgICAgY29ubmVjdG9yLmFkZEluZm8gPSB0aGlzLmNvbm5lY3Rvci5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbm5lY3Rvci5hZGRJbmZvLCB0aGlzLmNvbm5lY3Rvci5nZXRSYXdWYWx1ZSgpKTtcclxuICAgICAgICAgIGNsZWFudXAoY29ubmVjdG9yLmFkZEluZm8pO1xyXG4gICAgICAgICAgaWYgKGNvbm5lY3Rvci5hbm5vdGF0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29ubmVjdG9yLmFubm90YXRpb25zWzBdLmNvbnRlbnQgPSBjb250ZW50O1xyXG4gICAgICAgICAgICB0aGlzLmRpYWdyYW0uZGF0YUJpbmQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5kaWFncmFtLmFkZENvbm5lY3RvckxhYmVscyhjb25uZWN0b3IsIFt7XHJcbiAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLl9zZXNzaW9uLnRoZW1lLmRhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJyxcclxuICAgICAgICAgICAgICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsXHJcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAuOCxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGNvbnRlbnRcclxuICAgICAgICAgICAgfV0pO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYXJndW1lbnRzdGVtcGxhdGUuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuY29ubmVjdG9yYXJncyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMubm9kZSA9IHRoaXMubm9kZXNbMF0sXHJcbiAgICAgICAgICBhZGRJbmZvID0gbm9kZS5hZGRJbmZvIGFzIGFueTtcclxuICAgICAgICBpZiAoYWRkSW5mbyAmJiBhZGRJbmZvLm5vZGVUeXBlKSB7XHJcbiAgICAgICAgICBjb25zdCBub2RlVHlwZSA9IGFkZEluZm8ubm9kZVR5cGU7XHJcbiAgICAgICAgICBjb25zdCB0b29sID0gdGhpcy50b29sID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5vZGVzLmZpbmQobiA9PiBuLm5hbWUgPT09IG5vZGVUeXBlKTtcclxuICAgICAgICAgIHRoaXMuX3BhbmUudGl0bGUgPSB0b29sLnRpdGxlO1xyXG4gICAgICAgICAgY29uc3QgYW5ub3RhdGlvbkFyZyA9IHRvb2wuYXJndW1lbnRzLmZpbmQoYSA9PiBhLmZsYWdzPy5pbmRleE9mKCdEaWFncmFtJykgPiAtMSk7XHJcblxyXG4gICAgICAgICAgZnVuY3Rpb24gY2hhbmdlKG0pIHtcclxuICAgICAgICAgICAgaWYgKGFubm90YXRpb25BcmcgJiYgbVthbm5vdGF0aW9uQXJnLm5hbWVdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG5vZGUuYW5ub3RhdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLmFubm90YXRpb25zWzBdLmNvbnRlbnQgPSBtW2Fubm90YXRpb25BcmcubmFtZV0gfHwgbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhZ3JhbS5kYXRhQmluZCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWdyYW0uYWRkTm9kZUxhYmVscyhub2RlLCBbe1xyXG4gICAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLl9zZXNzaW9uLnRoZW1lLmRhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJyxcclxuICAgICAgICAgICAgICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IC44LFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICBjb250ZW50OiBtW2Fubm90YXRpb25BcmcubmFtZV0gfHwgbnVsbFxyXG4gICAgICAgICAgICAgICAgfV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oYWRkSW5mbywgbSk7XHJcbiAgICAgICAgICAgIGNsZWFudXAoYWRkSW5mbyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlLmVtaXQoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodG9vbC50ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSB0aGlzLl9jcmVhdGVUb29sVGVtcGxhdGUodG9vbCwgbm9kZSk7XHJcblxyXG4gICAgICAgICAgICBpbnN0YW5jZS5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoY2hhbmdlLmJpbmQodGhpcykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAodG9vbC5hcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHRoaXMuX2NyZWF0ZUxheW91dEFyZ3VtZW50cyh0b29sLCBub2RlKTtcclxuXHJcbiAgICAgICAgICAgIGluc3RhbmNlLm1vZGVsQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX2VsZW1lbnREZXN0cm95KSkuc3Vic2NyaWJlKGNoYW5nZS5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIF9jcmVhdGVMYXlvdXRBcmd1bWVudHModG9vbDogRmxvd05vZGUsIG5vZGU6IE5vZGVNb2RlbCkge1xyXG4gICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMuX2NmLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KExheW91dENvbXBvbmVudCk7XHJcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmFyZ3VtZW50c3RlbXBsYXRlLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5LCAwLCB0aGlzLl9pbmplY3Rvcik7XHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBMYXlvdXRDb21wb25lbnQ7XHJcbiAgICBpbnN0YW5jZS5maWVsZHMgPSB0b29sLmFyZ3VtZW50cztcclxuICAgIGluc3RhbmNlLm1vZGVsID0gbm9kZS5hZGRJbmZvIHx8IHt9O1xyXG4gICAgaW5zdGFuY2UubGF5b3V0KCk7XHJcbiAgICByZXR1cm4gaW5zdGFuY2U7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NyZWF0ZVRvb2xUZW1wbGF0ZSh0b29sOiBGbG93Tm9kZSwgbm9kZTogTm9kZU1vZGVsKSB7XHJcbiAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5fZmFjdG9yeVJlc29sdmVyLnJlc29sdmUodGhpcy50b29sLnRlbXBsYXRlKTtcclxuICAgIGNvbnN0IG5vZGVSZWYgPSBuZXcgTm9kZVJlZih0b29sKTtcclxuICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKFt7IHByb3ZpZGU6IE5vZGVSZWYsIHVzZVZhbHVlOiBub2RlUmVmIH1dLCB0aGlzLl9pbmplY3Rvcik7XHJcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmFyZ3VtZW50c3RlbXBsYXRlLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5LCAwLCBpbmplY3Rvcik7XHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBBcmd1bWVudHNDb21wb25lbnQ8YW55PjtcclxuICAgIGluc3RhbmNlLmZvcm0ucGF0Y2hWYWx1ZShub2RlLmFkZEluZm8sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIHJldHVybiBpbnN0YW5jZTtcclxuICB9XHJcbiAgY29ubmVjdG9yQ2FzZUNoYW5nZShldnQ/OiBNYXRCdXR0b25Ub2dnbGVDaGFuZ2UpIHtcclxuICAgIHRoaXMuY29ubmVjdG9yLmNvbnRyb2xzWydjYXNlJ10uc2V0VmFsdWUoZXZ0LnZhbHVlKTtcclxuICAgIHRoaXMuY2hhbmdlLmVtaXQoKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9lbGVtZW50RGVzdHJveS5uZXh0KCk7XHJcbiAgICB0aGlzLl9lbGVtZW50RGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICNhcmd1bWVudHM+XHJcbjwvbmctY29udGFpbmVyPlxyXG48bmctdGVtcGxhdGUgI2Nvbm5lY3RvcmFyZ3M+XHJcbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJjb25uZWN0b3JcIiBjbGFzcz1cImNvbHVtblwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LXNlbGVjdCBbcGxhY2Vob2xkZXJdPVwiJ0FjdGlvbicgfCB0cmFuc2xhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJhY3Rpb25cIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIiBbdmFsdWVdPVwiYWN0aW9uLm5hbWVcIj57e2FjdGlvbi50aXRsZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uPnt7J05vbmUnIHwgdHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgW3ZhbHVlXT1cImNvbm5lY3Rvci5jb250cm9sc1snY2FzZSddLnZhbHVlXCIgI2FjYXNlPVwibWF0QnV0dG9uVG9nZ2xlR3JvdXBcIiAoY2hhbmdlKT1cImNvbm5lY3RvckNhc2VDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJ0cnVlXCI+e3snVHJ1ZScgfCB0cmFuc2xhdGV9fTwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cImZhbHNlXCI+e3snRmFsc2UnIHwgdHJhbnNsYXRlfX08L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGU+e3snQ2FzZScgfCB0cmFuc2xhdGV9fTwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIFtzdHlsZS5kaXNwbGF5XT1cImNvbm5lY3Rvci5jb250cm9sc1snY2FzZSddLnZhbHVlPT09J3RydWUnfHxjb25uZWN0b3IuY29udHJvbHNbJ2Nhc2UnXS52YWx1ZT09PSdmYWxzZSc/J25vbmUnOicnXCI+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBbcGxhY2Vob2xkZXJdPVwiJ0Nhc2UnIHwgdHJhbnNsYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwiY2FzZVwiIC8+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZm9ybT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19