@dignite-ng/expand.file-explorer 3.0.0-rc.4 → 3.0.0-rc.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +128 -24
  2. package/esm2022/config/dignite-ng-expand.file-explorer-config.mjs +1 -1
  3. package/esm2022/config/enums/index.mjs +1 -1
  4. package/esm2022/config/enums/route-names.mjs +1 -1
  5. package/esm2022/config/file-config.module.mjs +1 -1
  6. package/esm2022/config/providers/index.mjs +1 -1
  7. package/esm2022/config/providers/route.provider.mjs +1 -1
  8. package/esm2022/config/public-api.mjs +1 -1
  9. package/esm2022/dignite-ng-expand.file-explorer.mjs +1 -1
  10. package/esm2022/lib/components/dome/file-dome.component.mjs +1 -1
  11. package/esm2022/lib/components/dynamic-form/file-explorer/file-explorer-config.component.mjs +3 -2
  12. package/esm2022/lib/components/dynamic-form/file-explorer/file-explorer-config.mjs +1 -1
  13. package/esm2022/lib/components/dynamic-form/file-explorer/file-explorer-control.component.mjs +17 -3
  14. package/esm2022/lib/components/dynamic-form/file-explorer/file-explorer-view.component.mjs +41 -0
  15. package/esm2022/lib/components/dynamic-form/file-explorer/index.mjs +1 -1
  16. package/esm2022/lib/components/dynamic-form/form-control-group.mjs +3 -2
  17. package/esm2022/lib/components/file-edit/file-edit.component.mjs +4 -3
  18. package/esm2022/lib/components/file-modal/file-modal.component.mjs +294 -82
  19. package/esm2022/lib/components/file-modal-tree/file-modal-tree.component.mjs +129 -52
  20. package/esm2022/lib/components/file-picker/file-picker.component.mjs +15 -5
  21. package/esm2022/lib/components/index.mjs +1 -1
  22. package/esm2022/lib/file-explorer-routing.module.mjs +1 -1
  23. package/esm2022/lib/file-explorer.module.mjs +19 -4
  24. package/esm2022/lib/pipe/get-directory-name.pipe.mjs +20 -0
  25. package/esm2022/lib/previews/file-preview.component.mjs +7 -3
  26. package/esm2022/lib/previews/index.mjs +1 -1
  27. package/esm2022/lib/previews/models.mjs +1 -1
  28. package/esm2022/lib/proxy/dignite/file-explorer/directories/file-descriptor.service.mjs +2 -1
  29. package/esm2022/lib/proxy/dignite/file-explorer/directories/index.mjs +1 -1
  30. package/esm2022/lib/proxy/dignite/file-explorer/directories/models.mjs +1 -1
  31. package/esm2022/lib/proxy/dignite/file-explorer/files/file-descriptor.service.mjs +11 -3
  32. package/esm2022/lib/proxy/dignite/file-explorer/files/index.mjs +1 -1
  33. package/esm2022/lib/proxy/dignite/file-explorer/files/models.mjs +1 -1
  34. package/esm2022/lib/proxy/microsoft/asp-net-core/mvc/models.mjs +1 -1
  35. package/esm2022/lib/proxy/microsoft/extensions/primitives/models.mjs +1 -1
  36. package/esm2022/lib/proxy/microsoft/net/http/headers/models.mjs +1 -1
  37. package/esm2022/lib/proxy/volo/abp/content/models.mjs +1 -1
  38. package/esm2022/lib/services/file-api.service.mjs +1 -1
  39. package/esm2022/public-api.mjs +1 -1
  40. package/fesm2022/dignite-ng-expand.file-explorer-config.mjs.map +1 -1
  41. package/fesm2022/dignite-ng-expand.file-explorer.mjs +528 -152
  42. package/fesm2022/dignite-ng-expand.file-explorer.mjs.map +1 -1
  43. package/lib/components/dynamic-form/file-explorer/file-explorer-control.component.d.ts +4 -1
  44. package/lib/components/dynamic-form/file-explorer/file-explorer-view.component.d.ts +17 -0
  45. package/lib/components/file-modal/file-modal.component.d.ts +63 -22
  46. package/lib/components/file-modal-tree/file-modal-tree.component.d.ts +21 -10
  47. package/lib/components/file-picker/file-picker.component.d.ts +2 -0
  48. package/lib/file-explorer.module.d.ts +12 -8
  49. package/lib/pipe/get-directory-name.pipe.d.ts +7 -0
  50. package/lib/previews/file-preview.component.d.ts +2 -1
  51. package/lib/proxy/dignite/file-explorer/files/file-descriptor.service.d.ts +3 -1
  52. package/lib/proxy/dignite/file-explorer/files/models.d.ts +5 -2
  53. package/package.json +25 -7
@@ -1,7 +1,12 @@
1
1
  /* eslint-disable @angular-eslint/component-selector */
2
- import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
3
- import { Validators } from '@angular/forms';
4
- import { of } from 'rxjs';
2
+ import { Component, ElementRef, EventEmitter, inject, Input, Output, ViewChild, } from '@angular/core';
3
+ import { FormBuilder, Validators } from '@angular/forms';
4
+ import * as DescriptorService from '../../proxy/dignite/file-explorer/directories';
5
+ import { ConfirmationService, ToasterService } from '@abp/ng.theme.shared';
6
+ import { finalize, map, of, tap } from 'rxjs';
7
+ import { FileApiService } from '../../services/file-api.service';
8
+ import { LocalizationService } from '@abp/ng.core';
9
+ import { ValidatorsService } from '@dignite-ng/expand.core';
5
10
  import * as i0 from "@angular/core";
6
11
  import * as i1 from "../../proxy/dignite/file-explorer/directories";
7
12
  import * as i2 from "@angular/forms";
@@ -11,15 +16,16 @@ import * as i5 from "@abp/ng.core";
11
16
  import * as i6 from "@angular/common";
12
17
  import * as i7 from "@ngx-validate/core";
13
18
  import * as i8 from "@ng-bootstrap/ng-bootstrap";
14
- import * as i9 from "ng-zorro-antd/tree";
19
+ import * as i9 from "@abp/ng.components/tree";
15
20
  var that;
16
21
  export class FileModalTreeComponent {
17
- constructor(_DescriptorService, fb, toaster, _FileApiService, _LocalizationService) {
22
+ constructor(_DescriptorService, fb, toaster, _FileApiService, _LocalizationService, confirmation) {
18
23
  this._DescriptorService = _DescriptorService;
19
24
  this.fb = fb;
20
25
  this.toaster = toaster;
21
26
  this._FileApiService = _FileApiService;
22
27
  this._LocalizationService = _LocalizationService;
28
+ this.confirmation = confirmation;
23
29
  /**文件分组列表 */
24
30
  this.fileGroupList = [];
25
31
  /**选择的tree节点 */
@@ -30,25 +36,41 @@ export class FileModalTreeComponent {
30
36
  this.anExpandedNode = [];
31
37
  /**tree节点选择回调 */
32
38
  this.nodeClick = new EventEmitter();
33
- this.handleClick = (event) => event.stopPropagation();
39
+ /**获取数据后回调给file-modal */
40
+ this.treeNodeData = new EventEmitter();
41
+ /**查看所有文件回调函数,在file-modal中处理逻辑 */
42
+ this.lookAllBtn = new EventEmitter();
43
+ this.handleClick = event => event.stopPropagation();
44
+ this.selectedNode = [];
34
45
  /**判断节点是否选中 */
35
- this.isNodeSelected = (el) => el.key === this._theSelectedTreeNode?.key;
46
+ this.isNodeSelected = el => {
47
+ return el.key === this._theSelectedTreeNode?.key;
48
+ };
36
49
  /**分组 */
37
50
  /**模态框-状态-是否打开 */
38
51
  this.ModalDescriptorOpen = false;
39
52
  /**模态框-descriptor-繁忙状态-用于确定模态的繁忙状态是否为真 */
40
53
  this.ModalDescriptorBusy = false;
54
+ this.formValidation = '';
55
+ this._ValidatorsService = inject(ValidatorsService);
41
56
  that = this;
42
57
  }
43
58
  set theSelectedTreeNode(v) {
44
59
  this._theSelectedTreeNode = v;
45
- if (v.length > 0) {
60
+ if (v == '') {
46
61
  this.loadData();
47
62
  }
48
63
  }
49
64
  set fileContainerName(v) {
50
65
  if (v) {
51
66
  this._fileContainerName = v;
67
+ // this.loadData();
68
+ }
69
+ }
70
+ ngAfterContentInit() {
71
+ //Called after ngOnInit when the component's or directive's content has been initialized.
72
+ //Add 'implements AfterContentInit' to the class.
73
+ if (this._fileContainerName) {
52
74
  this.loadData();
53
75
  }
54
76
  }
@@ -59,48 +81,70 @@ export class FileModalTreeComponent {
59
81
  }
60
82
  /**获取文件分组 */
61
83
  getFileGroupList() {
62
- this._DescriptorService.getList({
84
+ this._DescriptorService
85
+ .getList({
63
86
  containerName: this._fileContainerName,
64
- }).subscribe(async (res) => {
87
+ })
88
+ .subscribe(async (res) => {
65
89
  this.fileGroupList = await this.setTheValueOfTheNodeRecursively(res.items);
90
+ this.treeNodeData.emit(this.fileGroupList);
66
91
  });
67
92
  }
68
- /**递归设置节点的值 */
69
- setTheValueOfTheNodeRecursively(array) {
70
- return new Promise((reslove, rejects) => {
71
- array.forEach((el) => {
72
- el.title = el.name;
73
- el.key = el.id;
74
- el.expanded = this.anExpandedNode.includes(el.key);
75
- if (el.children.length > 0) {
76
- this.setTheValueOfTheNodeRecursively(el.children);
77
- }
78
- });
79
- reslove(array);
93
+ /**查看所有文件 */
94
+ onLookAllBtn() {
95
+ this.lookAllBtn.emit();
96
+ }
97
+ /**递归-将列表转化为父子级结构 */
98
+ setTheValueOfTheNodeRecursively(array, parentId = null, root) {
99
+ let rootList = root || array;
100
+ let result = array.filter(item => item.parentId === parentId);
101
+ result.sort((a, b) => a.order - b.order);
102
+ result.map((el) => {
103
+ el.title = el.name;
104
+ el.key = el.id;
105
+ el.entity = el.id; /** 节点值 */
106
+ el.expanded = this.anExpandedNode.includes(el.key);
107
+ el.children.sort((a, b) => a.order - b.order);
108
+ if (el.children.length > 0) {
109
+ this.setTheValueOfTheNodeRecursively(el.children, el.id, rootList);
110
+ }
80
111
  });
112
+ return result;
81
113
  }
82
114
  /**tree-拖拽 */
83
- nzEvent(event) {
84
- }
115
+ nzEvent(event) { }
85
116
  /**tree-拖拽 -验证*/
86
117
  beforeDrop(arg) {
87
- if (arg.pos === 0 || arg.pos === 1) {
88
- that._DescriptorService.move(arg.dragNode.key, {
89
- "parentId": arg.pos === 1 ? (arg.node.parentNode?.key || '') : arg.node.key,
90
- "order": arg.pos === 1 ? arg.node.origin.order + 1 : arg.node.origin.children.length + 1
91
- }).subscribe(res => {
92
- that.getFileGroupList();
93
- });
94
- return of(true);
95
- }
96
- else {
97
- return of(false);
118
+ const { pos, dragNode, node } = arg;
119
+ // 只处理有效的拖拽位置
120
+ if (pos === 0 || pos === 1 || pos === -1) {
121
+ // 根据不同的拖拽位置计算参数
122
+ const parentId = pos === 0 ? node.key : node.parentNode?.key || '';
123
+ let order;
124
+ if (pos === 1) {
125
+ order = node.origin.order + 1;
126
+ }
127
+ else if (pos === 0) {
128
+ order = node.origin.children.length + 1;
129
+ }
130
+ else {
131
+ // pos === -1
132
+ order = Math.max(0, node.origin.order - 1);
133
+ }
134
+ // 统一处理移动逻辑
135
+ return that._DescriptorService.move(dragNode.key, { parentId, order }).pipe(tap(() => that.getFileGroupList()), map(() => true));
98
136
  }
137
+ return of(false);
99
138
  }
100
139
  /**tree--选择节点 */
101
- activeNode(event) {
102
- this._theSelectedTreeNode = event.node;
103
- this.nodeClick.emit(event.node);
140
+ activeNode(node) {
141
+ if (event?.target?.localName == 'i')
142
+ return;
143
+ if (this._theSelectedTreeNode?.key == node.key)
144
+ return;
145
+ this.selectedNode = [node];
146
+ this._theSelectedTreeNode = node;
147
+ this.nodeClick.emit(node);
104
148
  }
105
149
  /**点击展开树节点图标触发 */
106
150
  nzExpandChange(event) {
@@ -119,23 +163,32 @@ export class FileModalTreeComponent {
119
163
  this.ModalDescriptorForm = this.fb.group({
120
164
  containerName: [this._fileContainerName || '', Validators.required],
121
165
  name: ['', Validators.required],
122
- parentId: [items?.key || '', Validators.required],
166
+ parentId: [items?.key || ''],
123
167
  });
124
168
  /**编辑 */
125
169
  if (edit) {
126
170
  this.theNodeBeingEdited = items.origin;
127
171
  this.ModalDescriptorForm.patchValue({
128
- name: items.origin.name
172
+ name: items.origin.name,
129
173
  });
130
174
  }
131
175
  }
132
176
  /**删除分组 */
133
177
  deleteDescriptorBtn(node) {
134
- this._DescriptorService.delete(node.key).subscribe(res => {
135
- this.ModalDescriptorOpen = false;
136
- if (this.theNodeBeingEdited.key == node.key)
137
- this.theNodeBeingEdited = '';
138
- this.getFileGroupList();
178
+ this.confirmation
179
+ .warn('', {
180
+ key: '',
181
+ defaultValue: this._LocalizationService.instant(`FileExplorer::DeletionConfirmationMessage`, node.title),
182
+ })
183
+ .subscribe((status) => {
184
+ if (status == 'confirm') {
185
+ this._DescriptorService.delete(node.key).subscribe(res => {
186
+ this.ModalDescriptorOpen = false;
187
+ if (this.theNodeBeingEdited.key == node.key)
188
+ this.theNodeBeingEdited = '';
189
+ this.getFileGroupList();
190
+ });
191
+ }
139
192
  });
140
193
  }
141
194
  /**模态框-descriptor-状态改变回调 */
@@ -149,32 +202,56 @@ export class FileModalTreeComponent {
149
202
  /**f分组模态框保存 */
150
203
  createOrEditSave() {
151
204
  let input = this.ModalDescriptorForm.value;
205
+ this.formValidation = this._ValidatorsService.getFormValidationStatus(this.ModalDescriptorForm);
206
+ if (this._ValidatorsService.isCheckForm(this.formValidation, 'FileExplorer'))
207
+ return;
208
+ if (!this.ModalDescriptorForm.valid)
209
+ return;
210
+ if (this.ModalDescriptorBusy)
211
+ return;
212
+ this.ModalDescriptorBusy = true;
152
213
  if (this.theNodeBeingEdited) {
153
- this._DescriptorService.update(this.theNodeBeingEdited.key, input).subscribe(res => {
214
+ this._DescriptorService
215
+ .update(this.theNodeBeingEdited.key, input)
216
+ .pipe(finalize(() => {
217
+ this.ModalDescriptorBusy = false;
218
+ }))
219
+ .subscribe(res => {
154
220
  this.ModalDescriptorOpen = false;
221
+ this.ModalDescriptorVisibleChange(false);
155
222
  this.getFileGroupList();
156
223
  });
157
224
  return;
158
225
  }
159
- this._DescriptorService.create(input).subscribe(res => {
226
+ this._DescriptorService
227
+ .create(input)
228
+ .pipe(finalize(() => {
229
+ this.ModalDescriptorBusy = false;
230
+ }))
231
+ .subscribe(res => {
160
232
  this.ModalDescriptorOpen = false;
233
+ this.ModalDescriptorVisibleChange(false);
161
234
  this.getFileGroupList();
162
235
  });
163
236
  }
164
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: FileModalTreeComponent, deps: [{ token: i1.FileDescriptorService }, { token: i2.FormBuilder }, { token: i3.ToasterService }, { token: i4.FileApiService }, { token: i5.LocalizationService }], target: i0.ɵɵFactoryTarget.Component }); }
165
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.5", type: FileModalTreeComponent, selector: "fe-file-modal-tree", inputs: { theSelectedTreeNode: "theSelectedTreeNode", fileContainerName: "fileContainerName" }, outputs: { nodeClick: "nodeClick" }, viewQueries: [{ propertyName: "ModalFormDescriptorSubmit", first: true, predicate: ["ModalFormDescriptorSubmit"], descendants: true }], ngImport: i0, template: "<div class=\"card-header p-0 mb-1 d-flex justify-content-between align-items-center\">\n <h6 class=\"h6 mb-0\">{{'FileExplorer::MyDirectories' | abpLocalization}}</h6>\n <button type=\"button\" class=\"btn btn-light btn-sm ms-2\" (click.stop)=\"addDescriptorBtn()\"><i\n class=\"fas fa-plus-circle\" aria-hidden=\"true\"></i></button>\n</div>\n<nz-tree [nzData]=\"fileGroupList\" class=\"ng-zorro-antd-tree\" nzDraggable nzBlockNode nzShowIcon\n [nzExpandedIcon]=\"multiExpandedIconTpl\" (nzOnDrop)=\"nzEvent($event)\" [nzBeforeDrop]=\"beforeDrop\"\n (nzClick)=\"activeNode($event)\" (nzExpandChange)=\"nzExpandChange($event)\" [nzTreeTemplate]=\"nzTreeTemplate\">\n <ng-template #nzTreeTemplate let-node let-origin=\"origin\">\n <div class=\"custom-node d-inline-block ng-star-inserted dropdown\" [title]=\"node.title\">\n <div #dropdown=\"ngbDropdown\" class=\"d-inline-block\" ngbDropdown placement=\"bottom\" container=\"body\">\n <div class=\"btn-group\" [class.selected]=\"isNodeSelected(node)\">\n <button class=\"btn btn-sm p-0 px-1\">{{ node.title }}</button>\n <button class=\"btn btn-sm p-0\" (click)=\"handleClick($event)\" ngbDropdownToggle\n [class.dropdown-toggle]=\"false\" aria-hidden=\"true\">\n <i class=\"fas fa-caret-down text-muted p-1\"></i>\n </button>\n </div>\n <div ngbDropdownMenu>\n <button ngbDropdownItem\n (click.stop)=\"addDescriptorBtn(node)\">{{'FileExplorer::NewDirectory' | abpLocalization}}</button>\n <button ngbDropdownItem\n (click.stop)=\"addDescriptorBtn(node,true)\">{{'AbpUi::Edit' | abpLocalization}}</button>\n <button ngbDropdownItem\n (click.stop)=\"deleteDescriptorBtn(node)\">{{'AbpUi::Delete' | abpLocalization}}</button>\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template #multiExpandedIconTpl let-node let-origin=\"origin\">\n <ng-container *ngIf=\"node.children.length > 0\">\n <i [class]=\"node.isExpanded ? 'fas fa-caret-down' : 'fas fa-caret-right'\"></i>\n </ng-container>\n </ng-template>\n</nz-tree>\n\n\n<abp-modal [(visible)]=\"ModalDescriptorOpen\" [busy]=\"ModalDescriptorBusy\"\n (visibleChange)=\"ModalDescriptorVisibleChange($event)\">\n <ng-template #abpHeader>\n <h3>{{theNodeBeingEdited?('AbpUi::Edit' | abpLocalization):('FileExplorer::NewDirectory' | abpLocalization)}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"ModalDescriptorForm; else loaderRef\">\n <form class=\"sites-modal-form\" #myForm=\"ngForm\" [formGroup]=\"ModalDescriptorForm\"\n (keydown.enter)=\"$event.preventDefault()\" (submit)=\"createOrEditSave()\">\n <button type=\"submit\" #ModalFormDescriptorSubmit style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'FileExplorer::DirectoryName' | abpLocalization}}</label>\n <input type=\"email\" class=\"form-control\" formControlName=\"name\">\n </div>\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\"\n (click)=\"ModalFormDescriptorSubmit.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>", styles: [""], dependencies: [{ kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.StopPropagationDirective, selector: "[click.stop]", outputs: ["click.stop"] }, { kind: "directive", type: i7.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i7.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: i3.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i3.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i3.ModalCloseDirective, selector: "[abpClose]" }, { kind: "directive", type: i8.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i8.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i8.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i8.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "directive", type: i8.NgbDropdownButtonItem, selector: "button[ngbDropdownItem]" }, { kind: "component", type: i9.NzTreeComponent, selector: "nz-tree", inputs: ["nzShowIcon", "nzHideUnMatched", "nzBlockNode", "nzExpandAll", "nzSelectMode", "nzCheckStrictly", "nzShowExpand", "nzShowLine", "nzCheckable", "nzAsyncData", "nzDraggable", "nzMultiple", "nzExpandedIcon", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualHeight", "nzTreeTemplate", "nzBeforeDrop", "nzData", "nzExpandedKeys", "nzSelectedKeys", "nzCheckedKeys", "nzSearchValue", "nzSearchFunc"], outputs: ["nzExpandedKeysChange", "nzSelectedKeysChange", "nzCheckedKeysChange", "nzSearchValueChange", "nzClick", "nzDblClick", "nzContextMenu", "nzCheckBoxChange", "nzExpandChange", "nzOnDragStart", "nzOnDragEnter", "nzOnDragOver", "nzOnDragLeave", "nzOnDrop", "nzOnDragEnd"], exportAs: ["nzTree"] }, { kind: "pipe", type: i5.LocalizationPipe, name: "abpLocalization" }] }); }
237
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: FileModalTreeComponent, deps: [{ token: i1.FileDescriptorService }, { token: i2.FormBuilder }, { token: i3.ToasterService }, { token: i4.FileApiService }, { token: i5.LocalizationService }, { token: i3.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component }); }
238
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.5", type: FileModalTreeComponent, selector: "fe-file-modal-tree", inputs: { theSelectedTreeNode: "theSelectedTreeNode", fileContainerName: "fileContainerName" }, outputs: { nodeClick: "nodeClick", treeNodeData: "treeNodeData", lookAllBtn: "lookAllBtn" }, viewQueries: [{ propertyName: "ModalFormDescriptorSubmit", first: true, predicate: ["ModalFormDescriptorSubmit"], descendants: true }], ngImport: i0, template: "<div class=\"card-header p-0 mb-1 d-flex justify-content-between align-items-center\">\n <h6 class=\"h6 mb-0 btn-link\" role=\"button\" (click.stop)=\"onLookAllBtn()\">{{'FileExplorer::MyDirectories' | abpLocalization}}</h6>\n <button type=\"button\" class=\"btn btn-light btn-sm ms-2\" (click.stop)=\"addDescriptorBtn()\"><i\n class=\"fas fa-plus-circle\" aria-hidden=\"true\"></i></button>\n</div>\n@if(fileGroupList.length>0){\n<abp-tree [nodes]=\"fileGroupList\" (nzExpandChange)=\"nzExpandChange($event)\" [draggable]=\"true\"\n (dropOver)=\"nzEvent($event)\" [beforeDrop]=\"beforeDrop\" (selectedNodeChange)=\"activeNode($event)\" [changeCheckboxWithNode]=\"true\" [isNodeSelected]=\"isNodeSelected\">\n\n <ng-template #menu let-node>\n <button ngbDropdownItem (click.stop)=\"addDescriptorBtn(node)\"><i\n class=\" me-1 fa fa-pencil\"></i>{{'FileExplorer::NewDirectory' | abpLocalization}}</button>\n <button ngbDropdownItem (click.stop)=\"addDescriptorBtn(node,true)\"><i\n class=\" me-1 fa fa-plus\"></i>{{'AbpUi::Edit' | abpLocalization}}</button>\n <button ngbDropdownItem (click.stop)=\"deleteDescriptorBtn(node)\"><i\n class=\" me-1 fa fa-remove\"></i>{{'AbpUi::Delete' | abpLocalization}}</button>\n </ng-template>\n\n <ng-template abpTreeExpandedIconTemplate let-node let-origin=\"origin\">\n <i aria-hidden=\"true\" *ngIf=\"node.children.length>0\">\n <ng-container *ngTemplateOutlet=\"node.isExpanded ? minusIcon : plusIcon\"></ng-container></i>\n </ng-template>\n\n <ng-template #minusIcon>\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" fill-rule=\"evenodd\"\n clip-rule=\"evenodd\">\n <path\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm-6.5 10h13v1h-13v-1z\" />\n </svg>\n </ng-template>\n\n <ng-template #plusIcon>\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" fill-rule=\"evenodd\"\n clip-rule=\"evenodd\">\n <path\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm.5 10h6v1h-6v6h-1v-6h-6v-1h6v-6h1v6z\" />\n </svg>\n </ng-template>\n</abp-tree>\n\n}\n<abp-modal [(visible)]=\"ModalDescriptorOpen\" [busy]=\"ModalDescriptorBusy\"\n (visibleChange)=\"ModalDescriptorVisibleChange($event)\">\n <ng-template #abpHeader>\n <h3>{{theNodeBeingEdited?('AbpUi::Edit' | abpLocalization):('FileExplorer::NewDirectory' | abpLocalization)}}\n </h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"ModalDescriptorForm; else loaderRef\">\n <form class=\"sites-modal-form\" #myForm=\"ngForm\" [formGroup]=\"ModalDescriptorForm\"\n (keydown.enter)=\"$event.preventDefault()\" (submit)=\"createOrEditSave()\">\n <button type=\"submit\" #ModalFormDescriptorSubmit style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'FileExplorer::DirectoryName' | abpLocalization}}</label>\n <input type=\"email\" class=\"form-control\" formControlName=\"name\">\n </div>\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" [loading]=\"ModalDescriptorBusy\"\n (click)=\"ModalFormDescriptorSubmit.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>", styles: [""], dependencies: [{ kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.StopPropagationDirective, selector: "[click.stop]", outputs: ["click.stop"] }, { kind: "directive", type: i7.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i7.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: i3.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i3.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i3.ModalCloseDirective, selector: "[abpClose]" }, { kind: "directive", type: i8.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "directive", type: i8.NgbDropdownButtonItem, selector: "button[ngbDropdownItem]" }, { kind: "directive", type: i9.ExpandedIconTemplateDirective, selector: "[abpTreeExpandedIconTemplate],[abp-tree-expanded-icon-template]" }, { kind: "component", type: i9.TreeComponent, selector: "abp-tree", inputs: ["noAnimation", "draggable", "checkable", "checkStrictly", "checkedKeys", "nodes", "expandedKeys", "selectedNode", "changeCheckboxWithNode", "isNodeSelected", "beforeDrop"], outputs: ["checkedKeysChange", "expandedKeysChange", "selectedNodeChange", "dropOver", "nzExpandChange"] }, { kind: "pipe", type: i5.LocalizationPipe, name: "abpLocalization" }] }); }
166
239
  }
167
240
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: FileModalTreeComponent, decorators: [{
168
241
  type: Component,
169
- args: [{ selector: 'fe-file-modal-tree', template: "<div class=\"card-header p-0 mb-1 d-flex justify-content-between align-items-center\">\n <h6 class=\"h6 mb-0\">{{'FileExplorer::MyDirectories' | abpLocalization}}</h6>\n <button type=\"button\" class=\"btn btn-light btn-sm ms-2\" (click.stop)=\"addDescriptorBtn()\"><i\n class=\"fas fa-plus-circle\" aria-hidden=\"true\"></i></button>\n</div>\n<nz-tree [nzData]=\"fileGroupList\" class=\"ng-zorro-antd-tree\" nzDraggable nzBlockNode nzShowIcon\n [nzExpandedIcon]=\"multiExpandedIconTpl\" (nzOnDrop)=\"nzEvent($event)\" [nzBeforeDrop]=\"beforeDrop\"\n (nzClick)=\"activeNode($event)\" (nzExpandChange)=\"nzExpandChange($event)\" [nzTreeTemplate]=\"nzTreeTemplate\">\n <ng-template #nzTreeTemplate let-node let-origin=\"origin\">\n <div class=\"custom-node d-inline-block ng-star-inserted dropdown\" [title]=\"node.title\">\n <div #dropdown=\"ngbDropdown\" class=\"d-inline-block\" ngbDropdown placement=\"bottom\" container=\"body\">\n <div class=\"btn-group\" [class.selected]=\"isNodeSelected(node)\">\n <button class=\"btn btn-sm p-0 px-1\">{{ node.title }}</button>\n <button class=\"btn btn-sm p-0\" (click)=\"handleClick($event)\" ngbDropdownToggle\n [class.dropdown-toggle]=\"false\" aria-hidden=\"true\">\n <i class=\"fas fa-caret-down text-muted p-1\"></i>\n </button>\n </div>\n <div ngbDropdownMenu>\n <button ngbDropdownItem\n (click.stop)=\"addDescriptorBtn(node)\">{{'FileExplorer::NewDirectory' | abpLocalization}}</button>\n <button ngbDropdownItem\n (click.stop)=\"addDescriptorBtn(node,true)\">{{'AbpUi::Edit' | abpLocalization}}</button>\n <button ngbDropdownItem\n (click.stop)=\"deleteDescriptorBtn(node)\">{{'AbpUi::Delete' | abpLocalization}}</button>\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template #multiExpandedIconTpl let-node let-origin=\"origin\">\n <ng-container *ngIf=\"node.children.length > 0\">\n <i [class]=\"node.isExpanded ? 'fas fa-caret-down' : 'fas fa-caret-right'\"></i>\n </ng-container>\n </ng-template>\n</nz-tree>\n\n\n<abp-modal [(visible)]=\"ModalDescriptorOpen\" [busy]=\"ModalDescriptorBusy\"\n (visibleChange)=\"ModalDescriptorVisibleChange($event)\">\n <ng-template #abpHeader>\n <h3>{{theNodeBeingEdited?('AbpUi::Edit' | abpLocalization):('FileExplorer::NewDirectory' | abpLocalization)}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"ModalDescriptorForm; else loaderRef\">\n <form class=\"sites-modal-form\" #myForm=\"ngForm\" [formGroup]=\"ModalDescriptorForm\"\n (keydown.enter)=\"$event.preventDefault()\" (submit)=\"createOrEditSave()\">\n <button type=\"submit\" #ModalFormDescriptorSubmit style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'FileExplorer::DirectoryName' | abpLocalization}}</label>\n <input type=\"email\" class=\"form-control\" formControlName=\"name\">\n </div>\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\"\n (click)=\"ModalFormDescriptorSubmit.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>" }]
170
- }], ctorParameters: () => [{ type: i1.FileDescriptorService }, { type: i2.FormBuilder }, { type: i3.ToasterService }, { type: i4.FileApiService }, { type: i5.LocalizationService }], propDecorators: { theSelectedTreeNode: [{
242
+ args: [{ selector: 'fe-file-modal-tree', template: "<div class=\"card-header p-0 mb-1 d-flex justify-content-between align-items-center\">\n <h6 class=\"h6 mb-0 btn-link\" role=\"button\" (click.stop)=\"onLookAllBtn()\">{{'FileExplorer::MyDirectories' | abpLocalization}}</h6>\n <button type=\"button\" class=\"btn btn-light btn-sm ms-2\" (click.stop)=\"addDescriptorBtn()\"><i\n class=\"fas fa-plus-circle\" aria-hidden=\"true\"></i></button>\n</div>\n@if(fileGroupList.length>0){\n<abp-tree [nodes]=\"fileGroupList\" (nzExpandChange)=\"nzExpandChange($event)\" [draggable]=\"true\"\n (dropOver)=\"nzEvent($event)\" [beforeDrop]=\"beforeDrop\" (selectedNodeChange)=\"activeNode($event)\" [changeCheckboxWithNode]=\"true\" [isNodeSelected]=\"isNodeSelected\">\n\n <ng-template #menu let-node>\n <button ngbDropdownItem (click.stop)=\"addDescriptorBtn(node)\"><i\n class=\" me-1 fa fa-pencil\"></i>{{'FileExplorer::NewDirectory' | abpLocalization}}</button>\n <button ngbDropdownItem (click.stop)=\"addDescriptorBtn(node,true)\"><i\n class=\" me-1 fa fa-plus\"></i>{{'AbpUi::Edit' | abpLocalization}}</button>\n <button ngbDropdownItem (click.stop)=\"deleteDescriptorBtn(node)\"><i\n class=\" me-1 fa fa-remove\"></i>{{'AbpUi::Delete' | abpLocalization}}</button>\n </ng-template>\n\n <ng-template abpTreeExpandedIconTemplate let-node let-origin=\"origin\">\n <i aria-hidden=\"true\" *ngIf=\"node.children.length>0\">\n <ng-container *ngTemplateOutlet=\"node.isExpanded ? minusIcon : plusIcon\"></ng-container></i>\n </ng-template>\n\n <ng-template #minusIcon>\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" fill-rule=\"evenodd\"\n clip-rule=\"evenodd\">\n <path\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm-6.5 10h13v1h-13v-1z\" />\n </svg>\n </ng-template>\n\n <ng-template #plusIcon>\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" fill-rule=\"evenodd\"\n clip-rule=\"evenodd\">\n <path\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm.5 10h6v1h-6v6h-1v-6h-6v-1h6v-6h1v6z\" />\n </svg>\n </ng-template>\n</abp-tree>\n\n}\n<abp-modal [(visible)]=\"ModalDescriptorOpen\" [busy]=\"ModalDescriptorBusy\"\n (visibleChange)=\"ModalDescriptorVisibleChange($event)\">\n <ng-template #abpHeader>\n <h3>{{theNodeBeingEdited?('AbpUi::Edit' | abpLocalization):('FileExplorer::NewDirectory' | abpLocalization)}}\n </h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"ModalDescriptorForm; else loaderRef\">\n <form class=\"sites-modal-form\" #myForm=\"ngForm\" [formGroup]=\"ModalDescriptorForm\"\n (keydown.enter)=\"$event.preventDefault()\" (submit)=\"createOrEditSave()\">\n <button type=\"submit\" #ModalFormDescriptorSubmit style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'FileExplorer::DirectoryName' | abpLocalization}}</label>\n <input type=\"email\" class=\"form-control\" formControlName=\"name\">\n </div>\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" [loading]=\"ModalDescriptorBusy\"\n (click)=\"ModalFormDescriptorSubmit.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>" }]
243
+ }], ctorParameters: () => [{ type: i1.FileDescriptorService }, { type: i2.FormBuilder }, { type: i3.ToasterService }, { type: i4.FileApiService }, { type: i5.LocalizationService }, { type: i3.ConfirmationService }], propDecorators: { theSelectedTreeNode: [{
171
244
  type: Input
172
245
  }], nodeClick: [{
173
246
  type: Output
247
+ }], treeNodeData: [{
248
+ type: Output
249
+ }], lookAllBtn: [{
250
+ type: Output
174
251
  }], fileContainerName: [{
175
252
  type: Input
176
253
  }], ModalFormDescriptorSubmit: [{
177
254
  type: ViewChild,
178
255
  args: ['ModalFormDescriptorSubmit', { static: false }]
179
256
  }] } });
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tb2RhbC10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZpbGUtZXhwbG9yZXIvc3JjL2xpYi9jb21wb25lbnRzL2ZpbGUtbW9kYWwtdHJlZS9maWxlLW1vZGFsLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZmlsZS1leHBsb3Jlci9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tb2RhbC10cmVlL2ZpbGUtbW9kYWwtdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLcEUsT0FBTyxFQUFHLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7QUFHM0IsSUFBSSxJQUFJLENBQUM7QUFNVCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ1Usa0JBQTJELEVBQzNELEVBQWUsRUFDZixPQUF1QixFQUN4QixlQUErQixFQUMvQixvQkFBeUM7UUFKeEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF5QztRQUMzRCxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDeEIsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFLbEQsWUFBWTtRQUNaLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBRTFCLGVBQWU7UUFDZix5QkFBb0IsR0FBUSxFQUFFLENBQUM7UUFTL0IsYUFBYTtRQUNiLHVCQUFrQixHQUFRLEVBQUUsQ0FBQztRQUU3QixZQUFZO1FBQ1osbUJBQWMsR0FBVSxF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a0JJLFNBQVM7c0JBQWxCLE1BQU07Z0JBSUksaUJBQWlCO3NCQUQzQixLQUFLO2dCQXdIcUQseUJBQXlCO3NCQUFuRixTQUFTO3VCQUFDLDJCQUEyQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3IgKi9cbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOekZvcm1hdEVtaXRFdmVudCB9IGZyb20gJ25nLXpvcnJvLWFudGQvdHJlZSc7XG5pbXBvcnQgKiBhcyBEZXNjcmlwdG9yU2VydmljZSBmcm9tICcuLi8uLi9wcm94eS9kaWduaXRlL2ZpbGUtZXhwbG9yZXIvZGlyZWN0b3JpZXMnO1xuaW1wb3J0IHsgIFRvYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xuaW1wb3J0IHsgTnpGb3JtYXRCZWZvcmVEcm9wRXZlbnQgfSBmcm9tICduZy16b3Jyby1hbnRkL3RyZWUnO1xuaW1wb3J0IHsgIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaWxlQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpbGUtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XG52YXIgdGhhdDtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZlLWZpbGUtbW9kYWwtdHJlZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLW1vZGFsLXRyZWUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWxlLW1vZGFsLXRyZWUuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlTW9kYWxUcmVlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfRGVzY3JpcHRvclNlcnZpY2U6IERlc2NyaXB0b3JTZXJ2aWNlLkZpbGVEZXNjcmlwdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHRvYXN0ZXI6IFRvYXN0ZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyBfRmlsZUFwaVNlcnZpY2U6IEZpbGVBcGlTZXJ2aWNlLFxuICAgIHB1YmxpYyBfTG9jYWxpemF0aW9uU2VydmljZTogTG9jYWxpemF0aW9uU2VydmljZSxcbiAgKSB7XG4gICAgdGhhdCA9IHRoaXNcbiAgfVxuXG4gIC8qKuaWh+S7tuWIhue7hOWIl+ihqCAqL1xuICBmaWxlR3JvdXBMaXN0OiBhbnlbXSA9IFtdO1xuXG4gIC8qKumAieaLqeeahHRyZWXoioLngrkgKi9cbiAgX3RoZVNlbGVjdGVkVHJlZU5vZGU6IGFueSA9ICcnO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHRoZVNlbGVjdGVkVHJlZU5vZGUodjogYW55KSB7XG4gICAgdGhpcy5fdGhlU2VsZWN0ZWRUcmVlTm9kZSA9IHY7XG4gICAgaWYgKHYubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5sb2FkRGF0YSgpXG4gICAgfVxuICB9XG5cbiAgLyoq5q2j5Zyo57yW6L6R55qE6IqC54K5ICovXG4gIHRoZU5vZGVCZWluZ0VkaXRlZDogYW55ID0gJyc7XG5cbiAgLyoq5bey5bGV5byA55qE6IqC54K5ICovXG4gIGFuRXhwYW5kZWROb2RlOiBhbnlbXSA9IFtdO1xuXG4gIC8qKuWbvueJh+WuueWZqCAqL1xuICBfZmlsZUNvbnRhaW5lck5hbWU6IHN0cmluZztcblxuICAvKip0cmVl6IqC54K56YCJ5oup5Zue6LCDICovXG4gIEBPdXRwdXQoKSBub2RlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGZpbGVDb250YWluZXJOYW1lKHY6IHN0cmluZykge1xuICAgIGlmICh2KSB7XG4gICAgICB0aGlzLl9maWxlQ29udGFpbmVyTmFtZSA9IHY7XG4gICAgICB0aGlzLmxvYWREYXRhKClcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDbGljayA9IChldmVudCkgPT4gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgbG9hZERhdGEoKSB7XG4gICAgaWYgKHRoaXMuX2ZpbGVDb250YWluZXJOYW1lKSB7XG4gICAgICB0aGlzLmdldEZpbGVHcm91cExpc3QoKVxuICAgIH1cbiAgfVxuXG5cbiAgLyoq6I635Y+W5paH5Lu25YiG57uEICovXG4gIGdldEZpbGVHcm91cExpc3QoKSB7XG4gICAgdGhpcy5fRGVzY3JpcHRvclNlcnZpY2UuZ2V0TGlzdCh7XG4gICAgICBjb250YWluZXJOYW1lOiB0aGlzLl9maWxlQ29udGFpbmVyTmFtZSxcbiAgICB9KS5zdWJzY3JpYmUoYXN5bmMgKHJlcykgPT4ge1xuICAgICAgdGhpcy5maWxlR3JvdXBMaXN0ID0gYXdhaXQgdGhpcy5zZXRUaGVWYWx1ZU9mVGhlTm9kZVJlY3Vyc2l2ZWx5KHJlcy5pdGVtcylcbiAgICB9KVxuICB9XG4gIFxuICAvKirpgJLlvZLorr7nva7oioLngrnnmoTlgLwgKi9cbiAgc2V0VGhlVmFsdWVPZlRoZU5vZGVSZWN1cnNpdmVseShhcnJheTogYW55W10pOiBhbnkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzbG92ZSwgcmVqZWN0cykgPT4ge1xuICAgICAgYXJyYXkuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgZWwudGl0bGUgPSBlbC5uYW1lXG4gICAgICAgIGVsLmtleSA9IGVsLmlkXG4gICAgICAgIGVsLmV4cGFuZGVkID0gdGhpcy5hbkV4cGFuZGVkTm9kZS5pbmNsdWRlcyhlbC5rZXkpXG4gICAgICAgIGlmIChlbC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5zZXRUaGVWYWx1ZU9mVGhlTm9kZVJlY3Vyc2l2ZWx5KGVsLmNoaWxkcmVuKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgcmVzbG92ZShhcnJheSlcbiAgICB9KVxuICB9XG5cbiAgLyoqdHJlZS3mi5bmi70gKi9cbiAgbnpFdmVudChldmVudDogTnpGb3JtYXRFbWl0RXZlbnQpOiB2b2lkIHtcbiAgfVxuXG4gIC8qKnRyZWUt5ouW5ou9IC3pqozor4EqL1xuICBiZWZvcmVEcm9wKGFyZzogTnpGb3JtYXRCZWZvcmVEcm9wRXZlbnQpIHtcbiAgICBpZiAoYXJnLnBvcyA9PT0gMCB8fCBhcmcucG9zID09PSAxKSB7XG4gICAgICB0aGF0Ll9EZXNjcmlwdG9yU2VydmljZS5tb3ZlKGFyZy5kcmFnTm9kZS5rZXksIHtcbiAgICAgICAgXCJwYXJlbnRJZFwiOiBhcmcucG9zID09PSAxID8gKGFyZy5ub2RlLnBhcmVudE5vZGU/LmtleXx8JycpIDogYXJnLm5vZGUua2V5LFxuICAgICAgICBcIm9yZGVyXCI6IGFyZy5wb3MgPT09IDEgPyBhcmcubm9kZS5vcmlnaW4ub3JkZXIgKyAxIDogYXJnLm5vZGUub3JpZ2luLmNoaWxkcmVuLmxlbmd0aCArIDFcbiAgICAgIH0pLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGF0LmdldEZpbGVHcm91cExpc3QoKVxuICAgICAgfSlcbiAgICAgIHJldHVybiBvZih0cnVlKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKnRyZWUtLemAieaLqeiKgueCuSAqL1xuICBhY3RpdmVOb2RlKGV2ZW50KSB7XG4gICAgdGhpcy5fdGhlU2VsZWN0ZWRUcmVlTm9kZSA9IGV2ZW50Lm5vZGVcbiAgICB0aGlzLm5vZGVDbGljay5lbWl0KGV2ZW50Lm5vZGUpXG4gIH1cblxuICAvKirliKTmlq3oioLngrnmmK/lkKbpgInkuK0gKi9cbiAgaXNOb2RlU2VsZWN0ZWQgPSAoZWwpID0+IGVsLmtleSA9PT0gdGhpcy5fdGhlU2VsZWN0ZWRUcmVlTm9kZT8ua2V5XG5cbiAgLyoq54K55Ye75bGV5byA5qCR6IqC54K55Zu+5qCH6Kem5Y+RICovXG4gIG56RXhwYW5kQ2hhbmdlKGV2ZW50KSB7XG4gICAgbGV0IGFuRXhwYW5kZWROb2RlID0gdGhpcy5hbkV4cGFuZGVkTm9kZVxuICAgIGlmIChhbkV4cGFuZGVkTm9kZS5pbmNsdWRlcyhldmVudC5ub2RlLmtleSkpIHtcbiAgICAgIGFuRXhwYW5kZWROb2RlID0gYW5FeHBhbmRlZE5vZGUuZmlsdGVyKGtleSA9PiBrZXkgIT09IGV2ZW50Lm5vZGUua2V5KVxuICAgIH0gZWxzZSB7XG4gICAgICBhbkV4cGFuZGVkTm9kZS5wdXNoKGV2ZW50Lm5vZGUua2V5KVxuICAgIH1cbiAgICB0aGlzLmFuRXhwYW5kZWROb2RlID0gYW5FeHBhbmRlZE5vZGVcbiAgfVxuXG5cbiAgLyoq5aKe5Yqg5YiG57uEICovXG4gIGFkZERlc2NyaXB0b3JCdG4oaXRlbXM6IGFueSA9ICcnLCBlZGl0ID0gZmFsc2UpIHtcbiAgICB0aGlzLk1vZGFsRGVzY3JpcHRvck9wZW4gPSB0cnVlXG4gICAgdGhpcy5Nb2RhbERlc2NyaXB0b3JGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBjb250YWluZXJOYW1lOiBbdGhpcy5fZmlsZUNvbnRhaW5lck5hbWUgfHwgJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgbmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHBhcmVudElkOiBbaXRlbXM/LmtleSB8fCAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgfSlcbiAgICAvKirnvJbovpEgKi9cbiAgICBpZiAoZWRpdCkge1xuICAgICAgdGhpcy50aGVOb2RlQmVpbmdFZGl0ZWQgPSBpdGVtcy5vcmlnaW5cbiAgICAgIHRoaXMuTW9kYWxEZXNjcmlwdG9yRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgbmFtZTogaXRlbXMub3JpZ2luLm5hbWVcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoq5Yig6Zmk5YiG57uEICovXG4gIGRlbGV0ZURlc2NyaXB0b3JCdG4obm9kZSkge1xuICAgIHRoaXMuX0Rlc2NyaXB0b3JTZXJ2aWNlLmRlbGV0ZShub2RlLmtleSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICB0aGlzLk1vZGFsRGVzY3JpcHRvck9wZW4gPSBmYWxzZVxuICAgICAgaWYgKHRoaXMudGhlTm9kZUJlaW5nRWRpdGVkLmtleSA9PSBub2RlLmtleSkgdGhpcy50aGVOb2RlQmVpbmdFZGl0ZWQgPSAnJ1xuICAgICAgdGhpcy5nZXRGaWxlR3JvdXBMaXN0KClcbiAgICB9KVxuICB9XG5cbiAgXG5cbiAgLyoq5YiG57uEICovXG4gIC8qKuaooeaAgeahhi3nirbmgIEt5piv5ZCm5omT5byAICovXG4gIE1vZGFsRGVzY3JpcHRvck9wZW46IGJvb2xlYW4gPSBmYWxzZVxuXG4gIC8qKuaooeaAgeahhi1kZXNjcmlwdG9yLee5geW/meeKtuaAgS3nlKjkuo7noa7lrprmqKHmgIHnmoTnuYHlv5nnirbmgIHmmK/lkKbkuLrnnJ8gKi9cbiAgTW9kYWxEZXNjcmlwdG9yQnVzeTogYm9vbGVhbiA9IGZhbHNlXG5cbiAgLyoq5qih5oCB5qGGLWRlc2NyaXB0b3It6KGo5Y2VICovXG4gIE1vZGFsRGVzY3JpcHRvckZvcm06IEZvcm1Hcm91cCB8IHVuZGVmaW5lZDtcbiAgXG4gIC8qKuaooeaAgeahhi1kZXNjcmlwdG9yLeihqOWNlS0t5o6n5Lu25qih5p2/LeWKqOaAgei1i+WAvOihqOWNleaOp+S7tiAqL1xuICBAVmlld0NoaWxkKCdNb2RhbEZvcm1EZXNjcmlwdG9yU3VibWl0JywgeyBzdGF0aWM6IGZhbHNlIH0pIE1vZGFsRm9ybURlc2NyaXB0b3JTdWJtaXQ6IEVsZW1lbnRSZWY7XG5cbiAgLyoq5qih5oCB5qGGLWRlc2NyaXB0b3It54q25oCB5pS55Y+Y5Zue6LCDICovXG4gIE1vZGFsRGVzY3JpcHRvclZpc2libGVDaGFuZ2UoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50KSB7XG4gICAgICB0aGlzLk1vZGFsRGVzY3JpcHRvckZvcm0gPSB1bmRlZmluZWRcbiAgICAgIHRoaXMudGhlTm9kZUJlaW5nRWRpdGVkID0gJydcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIC8qKmbliIbnu4TmqKHmgIHmoYbkv53lrZggKi9cbiAgY3JlYXRlT3JFZGl0U2F2ZSgpIHtcbiAgICBsZXQgaW5wdXQgPSB0aGlzLk1vZGFsRGVzY3JpcHRvckZvcm0udmFsdWVcbiAgICBpZiAodGhpcy50aGVOb2RlQmVpbmdFZGl0ZWQpIHtcbiAgICAgIHRoaXMuX0Rlc2NyaXB0b3JTZXJ2aWNlLnVwZGF0ZSh0aGlzLnRoZU5vZGVCZWluZ0VkaXRlZC5rZXksIGlucHV0KS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy5Nb2RhbERlc2NyaXB0b3JPcGVuID0gZmFsc2VcbiAgICAgICAgdGhpcy5nZXRGaWxlR3JvdXBMaXN0KClcbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5fRGVzY3JpcHRvclNlcnZpY2UuY3JlYXRlKGlucHV0KS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIHRoaXMuTW9kYWxEZXNjcmlwdG9yT3BlbiA9IGZhbHNlXG4gICAgICB0aGlzLmdldEZpbGVHcm91cExpc3QoKVxuICAgIH0pXG4gIH1cblxuXG5cblxufVxuIiwiPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyICBwLTAgbWItMSBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgPGg2IGNsYXNzPVwiaDYgbWItMFwiPnt7J0ZpbGVFeHBsb3Jlcjo6TXlEaXJlY3RvcmllcycgfCBhYnBMb2NhbGl6YXRpb259fTwvaDY+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBtcy0yXCIgKGNsaWNrLnN0b3ApPVwiYWRkRGVzY3JpcHRvckJ0bigpXCI+PGlcbiAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLXBsdXMtY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYnV0dG9uPlxuPC9kaXY+XG48bnotdHJlZSBbbnpEYXRhXT1cImZpbGVHcm91cExpc3RcIiBjbGFzcz1cIm5nLXpvcnJvLWFudGQtdHJlZVwiIG56RHJhZ2dhYmxlIG56QmxvY2tOb2RlIG56U2hvd0ljb25cbiAgICBbbnpFeHBhbmRlZEljb25dPVwibXVsdGlFeHBhbmRlZEljb25UcGxcIiAobnpPbkRyb3ApPVwibnpFdmVudCgkZXZlbnQpXCIgW256QmVmb3JlRHJvcF09XCJiZWZvcmVEcm9wXCJcbiAgICAobnpDbGljayk9XCJhY3RpdmVOb2RlKCRldmVudClcIiAobnpFeHBhbmRDaGFuZ2UpPVwibnpFeHBhbmRDaGFuZ2UoJGV2ZW50KVwiIFtuelRyZWVUZW1wbGF0ZV09XCJuelRyZWVUZW1wbGF0ZVwiPlxuICAgIDxuZy10ZW1wbGF0ZSAjbnpUcmVlVGVtcGxhdGUgbGV0LW5vZGUgbGV0LW9yaWdpbj1cIm9yaWdpblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLW5vZGUgZC1pbmxpbmUtYmxvY2sgICBuZy1zdGFyLWluc2VydGVkIGRyb3Bkb3duXCIgW3RpdGxlXT1cIm5vZGUudGl0bGVcIj5cbiAgICAgICAgICAgIDxkaXYgI2Ryb3Bkb3duPVwibmdiRHJvcGRvd25cIiBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCIgbmdiRHJvcGRvd24gcGxhY2VtZW50PVwiYm90dG9tXCIgY29udGFpbmVyPVwiYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNOb2RlU2VsZWN0ZWQobm9kZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gIHAtMCBweC0xXCI+e3sgbm9kZS50aXRsZSB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSAgcC0wXCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrKCRldmVudClcIiBuZ2JEcm9wZG93blRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRyb3Bkb3duLXRvZ2dsZV09XCJmYWxzZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2FyZXQtZG93biB0ZXh0LW11dGVkIHAtMVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnU+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25JdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2suc3RvcCk9XCJhZGREZXNjcmlwdG9yQnRuKG5vZGUpXCI+e3snRmlsZUV4cGxvcmVyOjpOZXdEaXJlY3RvcnknIHwgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljay5zdG9wKT1cImFkZERlc2NyaXB0b3JCdG4obm9kZSx0cnVlKVwiPnt7J0FicFVpOjpFZGl0JyB8IGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25JdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2suc3RvcCk9XCJkZWxldGVEZXNjcmlwdG9yQnRuKG5vZGUpXCI+e3snQWJwVWk6OkRlbGV0ZScgfCBhYnBMb2NhbGl6YXRpb259fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNtdWx0aUV4cGFuZGVkSWNvblRwbCBsZXQtbm9kZSBsZXQtb3JpZ2luPVwib3JpZ2luXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxpIFtjbGFzc109XCJub2RlLmlzRXhwYW5kZWQgPyAnZmFzIGZhLWNhcmV0LWRvd24nIDogJ2ZhcyBmYS1jYXJldC1yaWdodCdcIj48L2k+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L256LXRyZWU+XG5cblxuPGFicC1tb2RhbCBbKHZpc2libGUpXT1cIk1vZGFsRGVzY3JpcHRvck9wZW5cIiBbYnVzeV09XCJNb2RhbERlc2NyaXB0b3JCdXN5XCJcbiAgICAodmlzaWJsZUNoYW5nZSk9XCJNb2RhbERlc2NyaXB0b3JWaXNpYmxlQ2hhbmdlKCRldmVudClcIj5cbiAgICA8bmctdGVtcGxhdGUgI2FicEhlYWRlcj5cbiAgICAgICAgPGgzPnt7dGhlTm9kZUJlaW5nRWRpdGVkPygnQWJwVWk6OkVkaXQnIHwgYWJwTG9jYWxpemF0aW9uKTooJ0ZpbGVFeHBsb3Jlcjo6TmV3RGlyZWN0b3J5JyB8IGFicExvY2FsaXphdGlvbil9fTwvaDM+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2FicEJvZHk+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGVyUmVmPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+PGkgY2xhc3M9XCJmYSBmYS1wdWxzZSBmYS1zcGlubmVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiTW9kYWxEZXNjcmlwdG9yRm9ybTsgZWxzZSBsb2FkZXJSZWZcIj5cbiAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwic2l0ZXMtbW9kYWwtZm9ybVwiICNteUZvcm09XCJuZ0Zvcm1cIiBbZm9ybUdyb3VwXT1cIk1vZGFsRGVzY3JpcHRvckZvcm1cIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCIgKHN1Ym1pdCk9XCJjcmVhdGVPckVkaXRTYXZlKClcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiAjTW9kYWxGb3JtRGVzY3JpcHRvclN1Ym1pdCBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3snRmlsZUV4cGxvcmVyOjpEaXJlY3RvcnlOYW1lJyB8IGFicExvY2FsaXphdGlvbn19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwRm9vdGVyPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgYWJwQ2xvc2U+e3snQWJwVWk6OkNsb3NlJyB8IGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XG4gICAgICAgIDxhYnAtYnV0dG9uIGljb25DbGFzcz1cImZhIGZhLWNoZWNrXCJcbiAgICAgICAgICAgIChjbGljayk9XCJNb2RhbEZvcm1EZXNjcmlwdG9yU3VibWl0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKVwiPnt7J0FicFVpOjpTYXZlJyB8IGFicExvY2FsaXphdGlvbn19PC9hYnAtYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L2FicC1tb2RhbD4iXX0=
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tb2RhbC10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ZpbGUtZXhwbG9yZXIvc3JjL2xpYi9jb21wb25lbnRzL2ZpbGUtbW9kYWwtdHJlZS9maWxlLW1vZGFsLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZmlsZS1leHBsb3Jlci9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tb2RhbC10cmVlL2ZpbGUtbW9kYWwtdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sS0FBSyxpQkFBaUIsTUFBTSwrQ0FBK0MsQ0FBQztBQUNuRixPQUFPLEVBQWdCLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXpGLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7QUFDNUQsSUFBSSxJQUFJLENBQUM7QUFNVCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ1Usa0JBQTJELEVBQzNELEVBQWUsRUFDZixPQUF1QixFQUN4QixlQUErQixFQUMvQixv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SSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztnQkFDakMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztZQUNMLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQjthQUNwQixNQUFNLENBQUMsS0FBSyxDQUFDO2FBQ2IsSUFBSSxDQUNILFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztZQUNqQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzhHQTFQVSxzQkFBc0I7a0dBQXRCLHNCQUFzQiwrWEMxQm5DLHNuSUFtRVk7OzJGRHpDQyxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0Usb0JBQW9CO2tQQXNCbkIsbUJBQW1CO3NCQUQ3QixLQUFLO2dCQW1CSSxTQUFTO3NCQUFsQixNQUFNO2dCQUVHLFlBQVk7c0JBQXJCLE1BQU07Z0JBRUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFHSSxpQkFBaUI7c0JBRDNCLEtBQUs7Z0JBZ0txRCx5QkFBeUI7c0JBQW5GLFNBQVM7dUJBQUMsMkJBQTJCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvciAqL1xuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOekZvcm1hdEVtaXRFdmVudCwgTnpUcmVlTm9kZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvdHJlZSc7XG5pbXBvcnQgKiBhcyBEZXNjcmlwdG9yU2VydmljZSBmcm9tICcuLi8uLi9wcm94eS9kaWduaXRlL2ZpbGUtZXhwbG9yZXIvZGlyZWN0b3JpZXMnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uLCBDb25maXJtYXRpb25TZXJ2aWNlLCBUb2FzdGVyU2VydmljZSB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcbmltcG9ydCB7IE56Rm9ybWF0QmVmb3JlRHJvcEV2ZW50IH0gZnJvbSAnbmctem9ycm8tYW50ZC90cmVlJztcbmltcG9ydCB7IGZpbmFsaXplLCBtYXAsIG9mLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZpbGVBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmlsZS1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcbmltcG9ydCB7IFZhbGlkYXRvcnNTZXJ2aWNlIH0gZnJvbSAnQGRpZ25pdGUtbmcvZXhwYW5kLmNvcmUnO1xudmFyIHRoYXQ7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmZS1maWxlLW1vZGFsLXRyZWUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS1tb2RhbC10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsZS1tb2RhbC10cmVlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVNb2RhbFRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfRGVzY3JpcHRvclNlcnZpY2U6IERlc2NyaXB0b3JTZXJ2aWNlLkZpbGVEZXNjcmlwdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHRvYXN0ZXI6IFRvYXN0ZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyBfRmlsZUFwaVNlcnZpY2U6IEZpbGVBcGlTZXJ2aWNlLFxuICAgIHB1YmxpYyBfTG9jYWxpemF0aW9uU2VydmljZTogTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvbjogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgKSB7XG4gICAgdGhhdCA9IHRoaXM7XG4gIH1cblxuICAvKirmlofku7bliIbnu4TliJfooaggKi9cbiAgZmlsZUdyb3VwTGlzdDogYW55W10gPSBbXTtcblxuICAvKirpgInmi6nnmoR0cmVl6IqC54K5ICovXG4gIF90aGVTZWxlY3RlZFRyZWVOb2RlOiBhbnkgPSAnJztcbiAgQElucHV0KClcbiAgcHVibGljIHNldCB0aGVTZWxlY3RlZFRyZWVOb2RlKHY6IGFueSkge1xuICAgIHRoaXMuX3RoZVNlbGVjdGVkVHJlZU5vZGUgPSB2O1xuXG4gICAgaWYgKHYgPT0gJycpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICB9XG4gIH1cblxuICAvKirmraPlnKjnvJbovpHnmoToioLngrkgKi9cbiAgdGhlTm9kZUJlaW5nRWRpdGVkOiBhbnkgPSAnJztcblxuICAvKirlt7LlsZXlvIDnmoToioLngrkgKi9cbiAgYW5FeHBhbmRlZE5vZGU6IGFueVtdID0gW107XG5cbiAgLyoq5Zu+54mH5a655ZmoICovXG4gIF9maWxlQ29udGFpbmVyTmFtZTogc3RyaW5nO1xuXG4gIC8qKnRyZWXoioLngrnpgInmi6nlm57osIMgKi9cbiAgQE91dHB1dCgpIG5vZGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyoq6I635Y+W5pWw5o2u5ZCO5Zue6LCD57uZZmlsZS1tb2RhbCAqL1xuICBAT3V0cHV0KCkgdHJlZU5vZGVEYXRhID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvKirmn6XnnIvmiYDmnInmlofku7blm57osIPlh73mlbDvvIzlnKhmaWxlLW1vZGFs5Lit5aSE55CG6YC76L6RICovXG4gIEBPdXRwdXQoKSBsb29rQWxsQnRuID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZmlsZUNvbnRhaW5lck5hbWUodjogc3RyaW5nKSB7XG4gICAgaWYgKHYpIHtcbiAgICAgIHRoaXMuX2ZpbGVDb250YWluZXJOYW1lID0gdjtcbiAgICAgIC8vIHRoaXMubG9hZERhdGEoKTtcbiAgICB9XG4gIH1cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIC8vQ2FsbGVkIGFmdGVyIG5nT25Jbml0IHdoZW4gdGhlIGNvbXBvbmVudCdzIG9yIGRpcmVjdGl2ZSdzIGNvbnRlbnQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXG4gICAgLy9BZGQgJ2ltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCcgdG8gdGhlIGNsYXNzLlxuICAgIGlmICh0aGlzLl9maWxlQ29udGFpbmVyTmFtZSkge1xuICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNsaWNrID0gZXZlbnQgPT4gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgbG9hZERhdGEoKSB7XG4gICAgaWYgKHRoaXMuX2ZpbGVDb250YWluZXJOYW1lKSB7XG4gICAgICB0aGlzLmdldEZpbGVHcm91cExpc3QoKTtcbiAgICB9XG4gIH1cblxuICAvKirojrflj5bmlofku7bliIbnu4QgKi9cbiAgZ2V0RmlsZUdyb3VwTGlzdCgpIHtcbiAgICB0aGlzLl9EZXNjcmlwdG9yU2VydmljZVxuICAgICAgLmdldExpc3Qoe1xuICAgICAgICBjb250YWluZXJOYW1lOiB0aGlzLl9maWxlQ29udGFpbmVyTmFtZSxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIHJlcyA9PiB7XG4gICAgICAgIHRoaXMuZmlsZUdyb3VwTGlzdCA9IGF3YWl0IHRoaXMuc2V0VGhlVmFsdWVPZlRoZU5vZGVSZWN1cnNpdmVseShyZXMuaXRlbXMpO1xuICAgICAgICB0aGlzLnRyZWVOb2RlRGF0YS5lbWl0KHRoaXMuZmlsZUdyb3VwTGlzdCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKuafpeeci+aJgOacieaWh+S7tiAqL1xuICBvbkxvb2tBbGxCdG4oKSB7XG4gICAgdGhpcy5sb29rQWxsQnRuLmVtaXQoKTtcbiAgfVxuXG4gIC8qKumAkuW9ki3lsIbliJfooajovazljJbkuLrniLblrZDnuqfnu5PmnoQgKi9cbiAgc2V0VGhlVmFsdWVPZlRoZU5vZGVSZWN1cnNpdmVseShhcnJheTogYW55W10sIHBhcmVudElkOiBhbnkgPSBudWxsLCByb290PzogYW55W10pOiBhbnkge1xuICAgIGxldCByb290TGlzdCA9IHJvb3QgfHwgYXJyYXk7XG4gICAgbGV0IHJlc3VsdCA9IGFycmF5LmZpbHRlcihpdGVtID0+IGl0ZW0ucGFyZW50SWQgPT09IHBhcmVudElkKTtcbiAgICByZXN1bHQuc29ydCgoYSwgYikgPT4gYS5vcmRlciAtIGIub3JkZXIpO1xuICAgIHJlc3VsdC5tYXAoKGVsOiBhbnkpID0+IHtcbiAgICAgIGVsLnRpdGxlID0gZWwubmFtZTtcbiAgICAgIGVsLmtleSA9IGVsLmlkO1xuICAgICAgZWwuZW50aXR5ID0gZWwuaWQ7IC8qKiDoioLngrnlgLwgKi9cbiAgICAgIGVsLmV4cGFuZGVkID0gdGhpcy5hbkV4cGFuZGVkTm9kZS5pbmNsdWRlcyhlbC5rZXkpO1xuICAgICAgZWwuY2hpbGRyZW4uc29ydCgoYSwgYikgPT4gYS5vcmRlciAtIGIub3JkZXIpO1xuICAgICAgaWYgKGVsLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zZXRUaGVWYWx1ZU9mVGhlTm9kZVJlY3Vyc2l2ZWx5KGVsLmNoaWxkcmVuLCBlbC5pZCwgcm9vdExpc3QpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKip0cmVlLeaLluaLvSAqL1xuICBuekV2ZW50KGV2ZW50OiBOekZvcm1hdEVtaXRFdmVudCk6IHZvaWQge31cblxuICAvKip0cmVlLeaLluaLvSAt6aqM6K+BKi9cbiAgYmVmb3JlRHJvcChhcmc6IE56Rm9ybWF0QmVmb3JlRHJvcEV2ZW50KSB7XG4gICAgY29uc3QgeyBwb3MsIGRyYWdOb2RlLCBub2RlIH0gPSBhcmc7XG4gICAgLy8g5Y+q5aSE55CG5pyJ5pWI55qE5ouW5ou95L2N572uXG4gICAgaWYgKHBvcyA9PT0gMCB8fCBwb3MgPT09IDEgfHwgcG9zID09PSAtMSkge1xuICAgICAgLy8g5qC55o2u5LiN5ZCM55qE5ouW5ou95L2N572u6K6h566X5Y+C5pWwXG4gICAgICBjb25zdCBwYXJlbnRJZCA9IHBvcyA9PT0gMCA/IG5vZGUua2V5IDogbm9kZS5wYXJlbnROb2RlPy5rZXkgfHwgJyc7XG5cbiAgICAgIGxldCBvcmRlcjtcbiAgICAgIGlmIChwb3MgPT09IDEpIHtcbiAgICAgICAgb3JkZXIgPSBub2RlLm9yaWdpbi5vcmRlciArIDE7XG4gICAgICB9IGVsc2UgaWYgKHBvcyA9PT0gMCkge1xuICAgICAgICBvcmRlciA9IG5vZGUub3JpZ2luLmNoaWxkcmVuLmxlbmd0aCArIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwb3MgPT09IC0xXG4gICAgICAgIG9yZGVyID0gTWF0aC5tYXgoMCwgbm9kZS5vcmlnaW4ub3JkZXIgLSAxKTtcbiAgICAgIH1cbiAgICAgIC8vIOe7n+S4gOWkhOeQhuenu+WKqOmAu+i+kVxuICAgICAgcmV0dXJuIHRoYXQuX0Rlc2NyaXB0b3JTZXJ2aWNlLm1vdmUoZHJhZ05vZGUua2V5LCB7IHBhcmVudElkLCBvcmRlciB9KS5waXBlKFxuICAgICAgICB0YXAoKCkgPT4gdGhhdC5nZXRGaWxlR3JvdXBMaXN0KCkpLFxuICAgICAgICBtYXAoKCkgPT4gdHJ1ZSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgfVxuXG4gIHNlbGVjdGVkTm9kZTogTnpUcmVlTm9kZVtdID0gW107XG4gIC8qKnRyZWUtLemAieaLqeiKgueCuSAqL1xuICBhY3RpdmVOb2RlKG5vZGU6IE56VHJlZU5vZGUpIHtcbiAgICBpZiAoKGV2ZW50IGFzIGFueSk/LnRhcmdldD8ubG9jYWxOYW1lID09ICdpJykgcmV0dXJuO1xuICAgIGlmICh0aGlzLl90aGVTZWxlY3RlZFRyZWVOb2RlPy5rZXkgPT0gbm9kZS5rZXkpIHJldHVybjtcbiAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IFtub2RlXTtcbiAgICB0aGlzLl90aGVTZWxlY3RlZFRyZWVOb2RlID0gbm9kZTtcbiAgICB0aGlzLm5vZGVDbGljay5lbWl0KG5vZGUpO1xuICB9XG5cbiAgLyoq5Yik5pat6IqC54K55piv5ZCm6YCJ5LitICovXG4gIGlzTm9kZVNlbGVjdGVkID0gZWwgPT4ge1xuICAgIHJldHVybiBlbC5rZXkgPT09IHRoaXMuX3RoZVNlbGVjdGVkVHJlZU5vZGU/LmtleTtcbiAgfTtcblxuICAvKirngrnlh7vlsZXlvIDmoJHoioLngrnlm77moIfop6blj5EgKi9cbiAgbnpFeHBhbmRDaGFuZ2UoZXZlbnQpIHtcbiAgICBsZXQgYW5FeHBhbmRlZE5vZGUgPSB0aGlzLmFuRXhwYW5kZWROb2RlO1xuICAgIGlmIChhbkV4cGFuZGVkTm9kZS5pbmNsdWRlcyhldmVudC5ub2RlLmtleSkpIHtcbiAgICAgIGFuRXhwYW5kZWROb2RlID0gYW5FeHBhbmRlZE5vZGUuZmlsdGVyKGtleSA9PiBrZXkgIT09IGV2ZW50Lm5vZGUua2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYW5FeHBhbmRlZE5vZGUucHVzaChldmVudC5ub2RlLmtleSk7XG4gICAgfVxuICAgIHRoaXMuYW5FeHBhbmRlZE5vZGUgPSBhbkV4cGFuZGVkTm9kZTtcbiAgfVxuXG4gIC8qKuWinuWKoOWIhue7hCAqL1xuICBhZGREZXNjcmlwdG9yQnRuKGl0ZW1zOiBhbnkgPSAnJywgZWRpdCA9IGZhbHNlKSB7XG4gICAgdGhpcy5Nb2RhbERlc2NyaXB0b3JPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLk1vZGFsRGVzY3JpcHRvckZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGNvbnRhaW5lck5hbWU6IFt0aGlzLl9maWxlQ29udGFpbmVyTmFtZSB8fCAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBuYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgcGFyZW50SWQ6IFtpdGVtcz8ua2V5IHx8ICcnXSxcbiAgICB9KTtcbiAgICAvKirnvJbovpEgKi9cbiAgICBpZiAoZWRpdCkge1xuICAgICAgdGhpcy50aGVOb2RlQmVpbmdFZGl0ZWQgPSBpdGVtcy5vcmlnaW47XG4gICAgICB0aGlzLk1vZGFsRGVzY3JpcHRvckZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIG5hbWU6IGl0ZW1zLm9yaWdpbi5uYW1lLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoq5Yig6Zmk5YiG57uEICovXG4gIGRlbGV0ZURlc2NyaXB0b3JCdG4obm9kZSkge1xuICAgIHRoaXMuY29uZmlybWF0aW9uXG4gICAgICAud2FybignJywge1xuICAgICAgICBrZXk6ICcnLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgRmlsZUV4cGxvcmVyOjpEZWxldGlvbkNvbmZpcm1hdGlvbk1lc3NhZ2VgLG5vZGUudGl0bGUpLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoKHN0YXR1czogQ29uZmlybWF0aW9uLlN0YXR1cykgPT4ge1xuICAgICAgICBpZiAoc3RhdHVzID09ICdjb25maXJtJykge1xuICAgICAgICAgIHRoaXMuX0Rlc2NyaXB0b3JTZXJ2aWNlLmRlbGV0ZShub2RlLmtleSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLk1vZGFsRGVzY3JpcHRvck9wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnRoZU5vZGVCZWluZ0VkaXRlZC5rZXkgPT0gbm9kZS5rZXkpIHRoaXMudGhlTm9kZUJlaW5nRWRpdGVkID0gJyc7XG4gICAgICAgICAgICB0aGlzLmdldEZpbGVHcm91cExpc3QoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKirliIbnu4QgKi9cbiAgLyoq5qih5oCB5qGGLeeKtuaAgS3mmK/lkKbmiZPlvIAgKi9cbiAgTW9kYWxEZXNjcmlwdG9yT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKuaooeaAgeahhi1kZXNjcmlwdG9yLee5geW/meeKtuaAgS3nlKjkuo7noa7lrprmqKHmgIHnmoTnuYHlv5nnirbmgIHmmK/lkKbkuLrnnJ8gKi9cbiAgTW9kYWxEZXNjcmlwdG9yQnVzeTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKuaooeaAgeahhi1kZXNjcmlwdG9yLeihqOWNlSAqL1xuICBNb2RhbERlc2NyaXB0b3JGb3JtOiBGb3JtR3JvdXAgfCB1bmRlZmluZWQ7XG5cbiAgLyoq5qih5oCB5qGGLWRlc2NyaXB0b3It6KGo5Y2VLS3mjqfku7bmqKHmnb8t5Yqo5oCB6LWL5YC86KGo5Y2V5o6n5Lu2ICovXG4gIEBWaWV3Q2hpbGQoJ01vZGFsRm9ybURlc2NyaXB0b3JTdWJtaXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgTW9kYWxGb3JtRGVzY3JpcHRvclN1Ym1pdDogRWxlbWVudFJlZjtcblxuICAvKirmqKHmgIHmoYYtZGVzY3JpcHRvci3nirbmgIHmlLnlj5jlm57osIMgKi9cbiAgTW9kYWxEZXNjcmlwdG9yVmlzaWJsZUNoYW5nZShldmVudCkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHRoaXMuTW9kYWxEZXNjcmlwdG9yRm9ybSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMudGhlTm9kZUJlaW5nRWRpdGVkID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGZvcm1WYWxpZGF0aW9uOiBhbnkgPSAnJztcbiAgcHJpdmF0ZSBfVmFsaWRhdG9yc1NlcnZpY2UgPSBpbmplY3QoVmFsaWRhdG9yc1NlcnZpY2UpO1xuICAvKipm5YiG57uE5qih5oCB5qGG5L+d5a2YICovXG4gIGNyZWF0ZU9yRWRpdFNhdmUoKSB7XG4gICAgbGV0IGlucHV0ID0gdGhpcy5Nb2RhbERlc2NyaXB0b3JGb3JtLnZhbHVlO1xuICAgIHRoaXMuZm9ybVZhbGlkYXRpb24gPSB0aGlzLl9WYWxpZGF0b3JzU2VydmljZS5nZXRGb3JtVmFsaWRhdGlvblN0YXR1cyh0aGlzLk1vZGFsRGVzY3JpcHRvckZvcm0pO1xuICAgIGlmICh0aGlzLl9WYWxpZGF0b3JzU2VydmljZS5pc0NoZWNrRm9ybSh0aGlzLmZvcm1WYWxpZGF0aW9uLCAnRmlsZUV4cGxvcmVyJykpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuTW9kYWxEZXNjcmlwdG9yRm9ybS52YWxpZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLk1vZGFsRGVzY3JpcHRvckJ1c3kpIHJldHVybjtcbiAgICB0aGlzLk1vZGFsRGVzY3JpcHRvckJ1c3kgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMudGhlTm9kZUJlaW5nRWRpdGVkKSB7XG4gICAgICB0aGlzLl9EZXNjcmlwdG9yU2VydmljZVxuICAgICAgICAudXBkYXRlKHRoaXMudGhlTm9kZUJlaW5nRWRpdGVkLmtleSwgaW5wdXQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuTW9kYWxEZXNjcmlwdG9yQnVzeSA9IGZhbHNlO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgIHRoaXMuTW9kYWxEZXNjcmlwdG9yT3BlbiA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuTW9kYWxEZXNjcmlwdG9yVmlzaWJsZUNoYW5nZShmYWxzZSk7XG4gICAgICAgICAgdGhpcy5nZXRGaWxlR3JvdXBMaXN0KCk7XG4gICAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9EZXNjcmlwdG9yU2VydmljZVxuICAgICAgLmNyZWF0ZShpbnB1dClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5Nb2RhbERlc2NyaXB0b3JCdXN5ID0gZmFsc2U7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuTW9kYWxEZXNjcmlwdG9yT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLk1vZGFsRGVzY3JpcHRvclZpc2libGVDaGFuZ2UoZmFsc2UpO1xuICAgICAgICB0aGlzLmdldEZpbGVHcm91cExpc3QoKTtcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgIHAtMCBtYi0xIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICA8aDYgY2xhc3M9XCJoNiBtYi0wIGJ0bi1saW5rXCIgcm9sZT1cImJ1dHRvblwiIChjbGljay5zdG9wKT1cIm9uTG9va0FsbEJ0bigpXCI+e3snRmlsZUV4cGxvcmVyOjpNeURpcmVjdG9yaWVzJyB8IGFicExvY2FsaXphdGlvbn19PC9oNj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIG1zLTJcIiAoY2xpY2suc3RvcCk9XCJhZGREZXNjcmlwdG9yQnRuKClcIj48aVxuICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtcGx1cy1jaXJjbGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9idXR0b24+XG48L2Rpdj5cbkBpZihmaWxlR3JvdXBMaXN0Lmxlbmd0aD4wKXtcbjxhYnAtdHJlZSBbbm9kZXNdPVwiZmlsZUdyb3VwTGlzdFwiIChuekV4cGFuZENoYW5nZSk9XCJuekV4cGFuZENoYW5nZSgkZXZlbnQpXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCJcbiAgICAoZHJvcE92ZXIpPVwibnpFdmVudCgkZXZlbnQpXCIgW2JlZm9yZURyb3BdPVwiYmVmb3JlRHJvcFwiIChzZWxlY3RlZE5vZGVDaGFuZ2UpPVwiYWN0aXZlTm9kZSgkZXZlbnQpXCIgW2NoYW5nZUNoZWNrYm94V2l0aE5vZGVdPVwidHJ1ZVwiICBbaXNOb2RlU2VsZWN0ZWRdPVwiaXNOb2RlU2VsZWN0ZWRcIj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjbWVudSBsZXQtbm9kZT5cbiAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrLnN0b3ApPVwiYWRkRGVzY3JpcHRvckJ0bihub2RlKVwiPjxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCIgbWUtMSBmYSBmYS1wZW5jaWxcIj48L2k+e3snRmlsZUV4cGxvcmVyOjpOZXdEaXJlY3RvcnknIHwgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrLnN0b3ApPVwiYWRkRGVzY3JpcHRvckJ0bihub2RlLHRydWUpXCI+PGlcbiAgICAgICAgICAgICAgICBjbGFzcz1cIiBtZS0xIGZhIGZhLXBsdXNcIj48L2k+e3snQWJwVWk6OkVkaXQnIHwgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrLnN0b3ApPVwiZGVsZXRlRGVzY3JpcHRvckJ0bihub2RlKVwiPjxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCIgbWUtMSBmYSBmYS1yZW1vdmVcIj48L2k+e3snQWJwVWk6OkRlbGV0ZScgfCBhYnBMb2NhbGl6YXRpb259fTwvYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgYWJwVHJlZUV4cGFuZGVkSWNvblRlbXBsYXRlIGxldC1ub2RlIGxldC1vcmlnaW49XCJvcmlnaW5cIj5cbiAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCJub2RlLmNoaWxkcmVuLmxlbmd0aD4wXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9kZS5pc0V4cGFuZGVkID8gbWludXNJY29uIDogcGx1c0ljb25cIj48L25nLWNvbnRhaW5lcj48L2k+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjbWludXNJY29uPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCI+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIGQ9XCJNMTEuNSAwYzYuMzQ3IDAgMTEuNSA1LjE1MyAxMS41IDExLjVzLTUuMTUzIDExLjUtMTEuNSAxMS41LTExLjUtNS4xNTMtMTEuNS0xMS41IDUuMTUzLTExLjUgMTEuNS0xMS41em0wIDFjNS43OTUgMCAxMC41IDQuNzA1IDEwLjUgMTAuNXMtNC43MDUgMTAuNS0xMC41IDEwLjUtMTAuNS00LjcwNS0xMC41LTEwLjUgNC43MDUtMTAuNSAxMC41LTEwLjV6bS02LjUgMTBoMTN2MWgtMTN2LTF6XCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjcGx1c0ljb24+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNVwiIGhlaWdodD1cIjE1XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIj5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgZD1cIk0xMS41IDBjNi4zNDcgMCAxMS41IDUuMTUzIDExLjUgMTEuNXMtNS4xNTMgMTEuNS0xMS41IDExLjUtMTEuNS01LjE1My0xMS41LTExLjUgNS4xNTMtMTEuNSAxMS41LTExLjV6bTAgMWM1Ljc5NSAwIDEwLjUgNC43MDUgMTAuNSAxMC41cy00LjcwNSAxMC41LTEwLjUgMTAuNS0xMC41LTQuNzA1LTEwLjUtMTAuNSA0LjcwNS0xMC41IDEwLjUtMTAuNXptLjUgMTBoNnYxaC02djZoLTF2LTZoLTZ2LTFoNnYtNmgxdjZ6XCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvYWJwLXRyZWU+XG5cbn1cbjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJNb2RhbERlc2NyaXB0b3JPcGVuXCIgW2J1c3ldPVwiTW9kYWxEZXNjcmlwdG9yQnVzeVwiXG4gICAgKHZpc2libGVDaGFuZ2UpPVwiTW9kYWxEZXNjcmlwdG9yVmlzaWJsZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XG4gICAgICAgIDxoMz57e3RoZU5vZGVCZWluZ0VkaXRlZD8oJ0FicFVpOjpFZGl0JyB8IGFicExvY2FsaXphdGlvbik6KCdGaWxlRXhwbG9yZXI6Ok5ld0RpcmVjdG9yeScgfCBhYnBMb2NhbGl6YXRpb24pfX1cbiAgICAgICAgPC9oMz5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNsb2FkZXJSZWY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj48aSBjbGFzcz1cImZhIGZhLXB1bHNlIGZhLXNwaW5uZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJNb2RhbERlc2NyaXB0b3JGb3JtOyBlbHNlIGxvYWRlclJlZlwiPlxuICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJzaXRlcy1tb2RhbC1mb3JtXCIgI215Rm9ybT1cIm5nRm9ybVwiIFtmb3JtR3JvdXBdPVwiTW9kYWxEZXNjcmlwdG9yRm9ybVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiAoc3VibWl0KT1cImNyZWF0ZU9yRWRpdFNhdmUoKVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiICNNb2RhbEZvcm1EZXNjcmlwdG9yU3VibWl0IHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eydGaWxlRXhwbG9yZXI6OkRpcmVjdG9yeU5hbWUnIHwgYWJwTG9jYWxpemF0aW9ufX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBhYnBDbG9zZT57eydBYnBVaTo6Q2xvc2UnIHwgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cbiAgICAgICAgPGFicC1idXR0b24gaWNvbkNsYXNzPVwiZmEgZmEtY2hlY2tcIiBbbG9hZGluZ109XCJNb2RhbERlc2NyaXB0b3JCdXN5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJNb2RhbEZvcm1EZXNjcmlwdG9yU3VibWl0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKVwiPnt7J0FicFVpOjpTYXZlJyB8IGFicExvY2FsaXphdGlvbn19PC9hYnAtYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L2FicC1tb2RhbD4iXX0=
@@ -1,11 +1,14 @@
1
1
  /* eslint-disable @angular-eslint/component-selector */
2
2
  import { Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import { FileApiService } from '../../services/file-api.service';
4
+ import { moveItemInArray } from '@angular/cdk/drag-drop';
3
5
  import * as i0 from "@angular/core";
4
6
  import * as i1 from "../../services/file-api.service";
5
7
  import * as i2 from "@angular/common";
6
8
  import * as i3 from "@abp/ng.core";
7
- import * as i4 from "../file-modal/file-modal.component";
8
- import * as i5 from "../../previews/file-preview.component";
9
+ import * as i4 from "@angular/cdk/drag-drop";
10
+ import * as i5 from "../file-modal/file-modal.component";
11
+ import * as i6 from "../../previews/file-preview.component";
9
12
  export class FilePickerComponent {
10
13
  constructor(_FileApiService) {
11
14
  this._FileApiService = _FileApiService;
@@ -44,12 +47,19 @@ export class FilePickerComponent {
44
47
  this.selectedFileChange.emit([]);
45
48
  this.selectedFileChange.emit(this.selectFormFile);
46
49
  }
50
+ /**调整表格位置 */
51
+ drop(event) {
52
+ moveItemInArray(this._fileShowTable, event.previousIndex, event.currentIndex);
53
+ this.selectFormFile = this._fileShowTable;
54
+ this.selectedFileChange.emit(this.selectFormFile);
55
+ // this._fileShowTable.updateValueAndValidity()
56
+ }
47
57
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: FilePickerComponent, deps: [{ token: i1.FileApiService }], target: i0.ɵɵFactoryTarget.Component }); }
48
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.5", type: FilePickerComponent, selector: "fe-file-picker", inputs: { multiple: "multiple", fileContainerName: "fileContainerName", selectFormFile: "selectFormFile" }, outputs: { selectedFileChange: "selectedFileChange" }, usesOnChanges: true, ngImport: i0, template: "<button class=\"btn btn-sm btn-primary ms-2 float-end\" type=\"button\" (click.stop)=\"ModalOpen = true\">{{'FileExplorer::SelectFile' | abpLocalization}}</button>\n<fe-file-modal [(visible)]=\"ModalOpen\" [selectPickerFile]=\"selectFormFile\" [multiple]=\"_multiple\" (selectFilefn)=\"_selectFilefn($event)\" [fileContainerName]=\"_fileContainerName\"></fe-file-modal>\n<table class=\"table\" *ngIf=\"_fileShowTable.length>0\">\n <thead>\n <tr>\n <th scope=\"col\"></th>\n <th scope=\"col\">{{'FileExplorer::FileName' | abpLocalization}}</th>\n <th scope=\"col\">{{'FileExplorer::FileSize' | abpLocalization}}</th>\n <th scope=\"col\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let item of _fileShowTable;let i =index\">\n <tr>\n <td>\n <fe-file-preview [width]=\"'80px'\" [src]=\"item.url||item.Url\" [name]=\"item.name||item.Name\" [type]=\"item.mimeType||item.MimeType\" [preview]=\"true\"></fe-file-preview>\n </td>\n <th scope=\"row\">\n <div>{{item.name||item.Name}}</div>\n </th>\n <td >{{_FileApiService.formatFileSize(item.Size||item.size)}}</td>\n <td>\n <button class=\"btn btn-sm p-0 btn-light \" (click.stop)=\"deleteFileTableItem(i,item)\">\n <i class=\"fas fa-trash p-2\"></i>\n </button>\n </td>\n </tr>\n </ng-container>\n </tbody>\n</table>\n\n\n", styles: [".table{border-collapse:collapse;table-layout:fixed}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.StopPropagationDirective, selector: "[click.stop]", outputs: ["click.stop"] }, { kind: "component", type: i4.FileModalComponent, selector: "fe-file-modal", inputs: ["fileContainerName", "multiple", "limit", "visible", "selectPickerFile"], outputs: ["visibleChange", "selectFilefn"] }, { kind: "component", type: i5.FilePreviewComponent, selector: "fe-file-preview", inputs: ["width", "src", "preview", "type", "name"] }, { kind: "pipe", type: i3.LocalizationPipe, name: "abpLocalization" }] }); }
58
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.5", type: FilePickerComponent, selector: "fe-file-picker", inputs: { multiple: "multiple", fileContainerName: "fileContainerName", selectFormFile: "selectFormFile" }, outputs: { selectedFileChange: "selectedFileChange" }, usesOnChanges: true, ngImport: i0, template: "<button class=\"btn btn-sm btn-dark soft ms-2 float-end\" type=\"button\"\n (click.stop)=\"ModalOpen = true\">{{'FileExplorer::SelectFile' | abpLocalization}}</button>\n\n<fe-file-modal [(visible)]=\"ModalOpen\" [selectPickerFile]=\"selectFormFile\" [multiple]=\"_multiple\"\n (selectFilefn)=\"_selectFilefn($event)\" [fileContainerName]=\"_fileContainerName\"></fe-file-modal>\n<table class=\"table\" *ngIf=\"_fileShowTable.length>0\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n <thead>\n <tr>\n <th scope=\"col\" style=\"width: 30px;\"></th>\n <th scope=\"col\"></th>\n <th scope=\"col\">{{'FileExplorer::FileName' | abpLocalization}}</th>\n <th scope=\"col\">{{'FileExplorer::FileSize' | abpLocalization}}</th>\n <th scope=\"col\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let item of _fileShowTable;let i =index\">\n <tr cdkDrag cdkDragLockAxis=\"y\" [cdkDragData]=\"item\">\n <td>\n <div class=\"drag-handle\" cdkDragHandle>\n <span class=\"bi bi-arrows-move fs-5\"></span>\n </div>\n </td>\n <td>\n <fe-file-preview [width]=\"'80px'\" [src]=\"item.url||item.Url\" [name]=\"item.name||item.Name\"\n [type]=\"item.mimeType||item.MimeType\" [preview]=\"true\"></fe-file-preview>\n </td>\n <th scope=\"row\">\n <div>{{item.name||item.Name}}</div>\n </th>\n <td>{{_FileApiService.formatFileSize(item.Size||item.size)}}</td>\n <td>\n <button class=\"btn btn-sm p-0 btn-light \" (click.stop)=\"deleteFileTableItem(i,item)\">\n <i class=\"fas fa-trash p-2\"></i>\n </button>\n </td>\n </tr>\n </ng-container>\n </tbody>\n</table>", styles: [".table{border-collapse:collapse;table-layout:fixed}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.StopPropagationDirective, selector: "[click.stop]", outputs: ["click.stop"] }, { kind: "directive", type: i4.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: i4.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: i4.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i5.FileModalComponent, selector: "fe-file-modal", inputs: ["fileContainerName", "multiple", "limit", "visible", "selectPickerFile"], outputs: ["visibleChange", "selectFilefn"] }, { kind: "component", type: i6.FilePreviewComponent, selector: "fe-file-preview", inputs: ["width", "src", "preview", "type", "name", "className"] }, { kind: "pipe", type: i3.LocalizationPipe, name: "abpLocalization" }] }); }
49
59
  }
50
60
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: FilePickerComponent, decorators: [{
51
61
  type: Component,
52
- args: [{ selector: 'fe-file-picker', template: "<button class=\"btn btn-sm btn-primary ms-2 float-end\" type=\"button\" (click.stop)=\"ModalOpen = true\">{{'FileExplorer::SelectFile' | abpLocalization}}</button>\n<fe-file-modal [(visible)]=\"ModalOpen\" [selectPickerFile]=\"selectFormFile\" [multiple]=\"_multiple\" (selectFilefn)=\"_selectFilefn($event)\" [fileContainerName]=\"_fileContainerName\"></fe-file-modal>\n<table class=\"table\" *ngIf=\"_fileShowTable.length>0\">\n <thead>\n <tr>\n <th scope=\"col\"></th>\n <th scope=\"col\">{{'FileExplorer::FileName' | abpLocalization}}</th>\n <th scope=\"col\">{{'FileExplorer::FileSize' | abpLocalization}}</th>\n <th scope=\"col\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let item of _fileShowTable;let i =index\">\n <tr>\n <td>\n <fe-file-preview [width]=\"'80px'\" [src]=\"item.url||item.Url\" [name]=\"item.name||item.Name\" [type]=\"item.mimeType||item.MimeType\" [preview]=\"true\"></fe-file-preview>\n </td>\n <th scope=\"row\">\n <div>{{item.name||item.Name}}</div>\n </th>\n <td >{{_FileApiService.formatFileSize(item.Size||item.size)}}</td>\n <td>\n <button class=\"btn btn-sm p-0 btn-light \" (click.stop)=\"deleteFileTableItem(i,item)\">\n <i class=\"fas fa-trash p-2\"></i>\n </button>\n </td>\n </tr>\n </ng-container>\n </tbody>\n</table>\n\n\n", styles: [".table{border-collapse:collapse;table-layout:fixed}\n"] }]
62
+ args: [{ selector: 'fe-file-picker', template: "<button class=\"btn btn-sm btn-dark soft ms-2 float-end\" type=\"button\"\n (click.stop)=\"ModalOpen = true\">{{'FileExplorer::SelectFile' | abpLocalization}}</button>\n\n<fe-file-modal [(visible)]=\"ModalOpen\" [selectPickerFile]=\"selectFormFile\" [multiple]=\"_multiple\"\n (selectFilefn)=\"_selectFilefn($event)\" [fileContainerName]=\"_fileContainerName\"></fe-file-modal>\n<table class=\"table\" *ngIf=\"_fileShowTable.length>0\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n <thead>\n <tr>\n <th scope=\"col\" style=\"width: 30px;\"></th>\n <th scope=\"col\"></th>\n <th scope=\"col\">{{'FileExplorer::FileName' | abpLocalization}}</th>\n <th scope=\"col\">{{'FileExplorer::FileSize' | abpLocalization}}</th>\n <th scope=\"col\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let item of _fileShowTable;let i =index\">\n <tr cdkDrag cdkDragLockAxis=\"y\" [cdkDragData]=\"item\">\n <td>\n <div class=\"drag-handle\" cdkDragHandle>\n <span class=\"bi bi-arrows-move fs-5\"></span>\n </div>\n </td>\n <td>\n <fe-file-preview [width]=\"'80px'\" [src]=\"item.url||item.Url\" [name]=\"item.name||item.Name\"\n [type]=\"item.mimeType||item.MimeType\" [preview]=\"true\"></fe-file-preview>\n </td>\n <th scope=\"row\">\n <div>{{item.name||item.Name}}</div>\n </th>\n <td>{{_FileApiService.formatFileSize(item.Size||item.size)}}</td>\n <td>\n <button class=\"btn btn-sm p-0 btn-light \" (click.stop)=\"deleteFileTableItem(i,item)\">\n <i class=\"fas fa-trash p-2\"></i>\n </button>\n </td>\n </tr>\n </ng-container>\n </tbody>\n</table>", styles: [".table{border-collapse:collapse;table-layout:fixed}\n"] }]
53
63
  }], ctorParameters: () => [{ type: i1.FileApiService }], propDecorators: { multiple: [{
54
64
  type: Input
55
65
  }], fileContainerName: [{
@@ -59,4 +69,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImpor
59
69
  }], selectedFileChange: [{
60
70
  type: Output
61
71
  }] } });
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZmlsZS1leHBsb3Jlci9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1waWNrZXIvZmlsZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZmlsZS1leHBsb3Jlci9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1waWNrZXIvZmlsZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBUWpHLE1BQU0sT0FBTyxtQkFBbUI7SUFJOUIsWUFDVSxlQUErQjtRQUEvQixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFNekMsVUFBVTtRQUNWLGNBQVMsR0FBWSxLQUFLLENBQUE7UUFNMUIsVUFBVTtRQUNWLHVCQUFrQixHQUFXLFFBQVEsQ0FBQTtRQWdCM0IsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQTtRQUVqRCxtQkFBYyxHQUFVLEVBQUUsQ0FBQTtRQVUxQixpQkFBaUI7UUFDakIsY0FBUyxHQUFZLEtBQUssQ0FBQTtJQXhDMUIsQ0FBQztJQUtELElBQ1csUUFBUSxDQUFDLENBQVU7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUlELElBQ1csaUJBQWlCLENBQUMsQ0FBUztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFLRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSx5QkFBeUIsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ3RFLElBQUkseUJBQXlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxjQUFjLEdBQUcseUJBQXlCLENBQUE7UUFDakQsQ0FBQztJQUNILENBQUM7SUFNRCxlQUFlO0lBQ2YsYUFBYSxDQUFDLEtBQVk7UUFDeEIsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDMUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUE7UUFDcEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUE7UUFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUM5QyxDQUFDO0lBS0QsYUFBYTtJQUNiLG1CQUFtQixDQUFDLENBQUMsRUFBRSxJQUFJO1FBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUE7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNoQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUNuRCxDQUFDOzhHQXhEVSxtQkFBbUI7a0dBQW5CLG1CQUFtQiw4T0NUaEMsMmpEQWdDQTs7MkZEdkJhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxnQkFBZ0I7bUZBa0JmLFFBQVE7c0JBRGxCLEtBQUs7Z0JBUUssaUJBQWlCO3NCQUQzQixLQUFLO2dCQU1HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBU0ksa0JBQWtCO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvciAqL1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmlsZUFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWxlLWFwaS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZmUtZmlsZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWxlLXBpY2tlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuXG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9GaWxlQXBpU2VydmljZTogRmlsZUFwaVNlcnZpY2UsXG4gICkge1xuXG4gIH1cblxuXG4gIC8qKuaYr+WQpuWkmumAiSAqL1xuICBfbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZVxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG11bHRpcGxlKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9tdWx0aXBsZSA9IHY7XG4gIH1cblxuICAvKirlm77niYflrrnlmaggKi9cbiAgX2ZpbGVDb250YWluZXJOYW1lOiBzdHJpbmcgPSAnSW1hZ2VzJ1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGZpbGVDb250YWluZXJOYW1lKHY6IHN0cmluZykge1xuICAgIHRoaXMuX2ZpbGVDb250YWluZXJOYW1lID0gdjtcbiAgfVxuXG4gIC8qKuW3sumAieWumueahOaWh+S7tiAqL1xuICBASW5wdXQoKSBzZWxlY3RGb3JtRmlsZTogYW55W11cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgbGV0IHNlbGVjdEZvcm1GaWxlbmdPbkNoYW5nZXMgPSBjaGFuZ2VzLnNlbGVjdEZvcm1GaWxlWydjdXJyZW50VmFsdWUnXVxuICAgIGlmIChzZWxlY3RGb3JtRmlsZW5nT25DaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2ZpbGVTaG93VGFibGUgPSBzZWxlY3RGb3JtRmlsZW5nT25DaGFuZ2VzXG4gICAgfVxuICB9XG5cbiAgQE91dHB1dCgpIHNlbGVjdGVkRmlsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuXG4gIF9maWxlU2hvd1RhYmxlOiBhbnlbXSA9IFtdXG5cbiAgLyoq6KGo5qC86YCJ5oup55qE5paH5Lu25Zue6LCDICovXG4gIF9zZWxlY3RGaWxlZm4oZXZlbnQ6IGFueVtdKSB7XG4gICAgbGV0IF9maWxlU2hvd1RhYmxlID0gdGhpcy5fRmlsZUFwaVNlcnZpY2UuZGVlcENsb25lKGV2ZW50KVxuICAgIHRoaXMuX2ZpbGVTaG93VGFibGUgPSBfZmlsZVNob3dUYWJsZVxuICAgIHRoaXMuc2VsZWN0Rm9ybUZpbGUgPSBfZmlsZVNob3dUYWJsZVxuICAgIHRoaXMuc2VsZWN0ZWRGaWxlQ2hhbmdlLmVtaXQoX2ZpbGVTaG93VGFibGUpXG4gIH1cblxuICAvKirmqKHmgIHmoYYt54q25oCBLeaYr+WQpuaJk+W8gCAqL1xuICBNb2RhbE9wZW46IGJvb2xlYW4gPSBmYWxzZVxuXG4gIC8qKuWIoOmZpOaWh+S7tuihqOagvOmhuSAqL1xuICBkZWxldGVGaWxlVGFibGVJdGVtKGksIGZpbGUpIHtcbiAgICB0aGlzLl9maWxlU2hvd1RhYmxlLnNwbGljZShpLCAxKVxuICAgIHRoaXMuc2VsZWN0Rm9ybUZpbGUgPSB0aGlzLl9maWxlU2hvd1RhYmxlXG4gICAgdGhpcy5zZWxlY3RlZEZpbGVDaGFuZ2UuZW1pdChbXSlcbiAgICB0aGlzLnNlbGVjdGVkRmlsZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0Rm9ybUZpbGUpXG4gIH1cblxufVxuIiwiPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnkgbXMtMiBmbG9hdC1lbmRcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrLnN0b3ApPVwiTW9kYWxPcGVuID0gdHJ1ZVwiPnt7J0ZpbGVFeHBsb3Jlcjo6U2VsZWN0RmlsZScgfCBhYnBMb2NhbGl6YXRpb259fTwvYnV0dG9uPlxuPGZlLWZpbGUtbW9kYWwgWyh2aXNpYmxlKV09XCJNb2RhbE9wZW5cIiBbc2VsZWN0UGlja2VyRmlsZV09XCJzZWxlY3RGb3JtRmlsZVwiIFttdWx0aXBsZV09XCJfbXVsdGlwbGVcIiAgKHNlbGVjdEZpbGVmbik9XCJfc2VsZWN0RmlsZWZuKCRldmVudClcIiBbZmlsZUNvbnRhaW5lck5hbWVdPVwiX2ZpbGVDb250YWluZXJOYW1lXCI+PC9mZS1maWxlLW1vZGFsPlxuPHRhYmxlIGNsYXNzPVwidGFibGVcIiAqbmdJZj1cIl9maWxlU2hvd1RhYmxlLmxlbmd0aD4wXCI+XG4gICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj48L3RoPlxuICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+e3snRmlsZUV4cGxvcmVyOjpGaWxlTmFtZScgfCBhYnBMb2NhbGl6YXRpb259fTwvdGg+XG4gICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj57eydGaWxlRXhwbG9yZXI6OkZpbGVTaXplJyB8IGFicExvY2FsaXphdGlvbn19PC90aD5cbiAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPjwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cbiAgICA8dGJvZHk+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgX2ZpbGVTaG93VGFibGU7bGV0IGkgPWluZGV4XCI+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICA8ZmUtZmlsZS1wcmV2aWV3IFt3aWR0aF09XCInODBweCdcIiBbc3JjXT1cIml0ZW0udXJsfHxpdGVtLlVybFwiIFtuYW1lXT1cIml0ZW0ubmFtZXx8aXRlbS5OYW1lXCIgW3R5cGVdPVwiaXRlbS5taW1lVHlwZXx8aXRlbS5NaW1lVHlwZVwiIFtwcmV2aWV3XT1cInRydWVcIj48L2ZlLWZpbGUtcHJldmlldz5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7aXRlbS5uYW1lfHxpdGVtLk5hbWV9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgPHRkID57e19GaWxlQXBpU2VydmljZS5mb3JtYXRGaWxlU2l6ZShpdGVtLlNpemV8fGl0ZW0uc2l6ZSl9fTwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBwLTAgYnRuLWxpZ2h0IFwiIChjbGljay5zdG9wKT1cImRlbGV0ZUZpbGVUYWJsZUl0ZW0oaSxpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2ggcC0yXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC90Ym9keT5cbjwvdGFibGU+XG5cblxuIl19
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZmlsZS1leHBsb3Jlci9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1waWNrZXIvZmlsZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZmlsZS1leHBsb3Jlci9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1waWNrZXIvZmlsZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7O0FBT3pELE1BQU0sT0FBTyxtQkFBbUI7SUFJOUIsWUFDVSxlQUErQjtRQUEvQixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFNekMsVUFBVTtRQUNWLGNBQVMsR0FBWSxLQUFLLENBQUE7UUFNMUIsVUFBVTtRQUNWLHVCQUFrQixHQUFXLFFBQVEsQ0FBQTtRQWdCM0IsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQTtRQUVqRCxtQkFBYyxHQUFVLEVBQUUsQ0FBQTtRQVUxQixpQkFBaUI7UUFDakIsY0FBUyxHQUFZLEtBQUssQ0FBQTtJQXhDMUIsQ0FBQztJQUtELElBQ1csUUFBUSxDQUFDLENBQVU7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUlELElBQ1csaUJBQWlCLENBQUMsQ0FBUztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFLRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSx5QkFBeUIsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ3RFLElBQUkseUJBQXlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxjQUFjLEdBQUcseUJBQXlCLENBQUE7UUFDakQsQ0FBQztJQUNILENBQUM7SUFNRCxlQUFlO0lBQ2YsYUFBYSxDQUFDLEtBQVk7UUFDeEIsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDMUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUE7UUFDcEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUE7UUFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUM5QyxDQUFDO0lBS0QsYUFBYTtJQUNiLG1CQUFtQixDQUFDLENBQUMsRUFBRSxJQUFJO1FBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUE7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNoQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUNuRCxDQUFDO0lBQ0QsWUFBWTtJQUNWLElBQUksQ0FBQyxLQUFVO1FBQ2IsZUFBZSxDQUNiLElBQUksQ0FBQyxjQUFjLEVBQ25CLEtBQUssQ0FBQyxhQUFhLEVBQ25CLEtBQUssQ0FBQyxZQUFZLENBQ25CLENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUE7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDakQsK0NBQStDO0lBQ2pELENBQUM7OEdBbkVRLG1CQUFtQjtrR0FBbkIsbUJBQW1CLDhPQ1ZoQyw2OERBdUNROzsyRkQ3QkssbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGdCQUFnQjttRkFrQmYsUUFBUTtzQkFEbEIsS0FBSztnQkFRSyxpQkFBaUI7c0JBRDNCLEtBQUs7Z0JBTUcsY0FBYztzQkFBdEIsS0FBSztnQkFTSSxrQkFBa0I7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWxlQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpbGUtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZlLWZpbGUtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcblxuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfRmlsZUFwaVNlcnZpY2U6IEZpbGVBcGlTZXJ2aWNlLFxuICApIHtcblxuICB9XG5cblxuICAvKirmmK/lkKblpJrpgIkgKi9cbiAgX211bHRpcGxlOiBib29sZWFuID0gZmFsc2VcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtdWx0aXBsZSh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5fbXVsdGlwbGUgPSB2O1xuICB9XG5cbiAgLyoq5Zu+54mH5a655ZmoICovXG4gIF9maWxlQ29udGFpbmVyTmFtZTogc3RyaW5nID0gJ0ltYWdlcydcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBmaWxlQ29udGFpbmVyTmFtZSh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9maWxlQ29udGFpbmVyTmFtZSA9IHY7XG4gIH1cblxuICAvKirlt7LpgInlrprnmoTmlofku7YgKi9cbiAgQElucHV0KCkgc2VsZWN0Rm9ybUZpbGU6IGFueVtdXG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGxldCBzZWxlY3RGb3JtRmlsZW5nT25DaGFuZ2VzID0gY2hhbmdlcy5zZWxlY3RGb3JtRmlsZVsnY3VycmVudFZhbHVlJ11cbiAgICBpZiAoc2VsZWN0Rm9ybUZpbGVuZ09uQ2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9maWxlU2hvd1RhYmxlID0gc2VsZWN0Rm9ybUZpbGVuZ09uQ2hhbmdlc1xuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKSBzZWxlY3RlZEZpbGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKClcblxuICBfZmlsZVNob3dUYWJsZTogYW55W10gPSBbXVxuXG4gIC8qKuihqOagvOmAieaLqeeahOaWh+S7tuWbnuiwgyAqL1xuICBfc2VsZWN0RmlsZWZuKGV2ZW50OiBhbnlbXSkge1xuICAgIGxldCBfZmlsZVNob3dUYWJsZSA9IHRoaXMuX0ZpbGVBcGlTZXJ2aWNlLmRlZXBDbG9uZShldmVudClcbiAgICB0aGlzLl9maWxlU2hvd1RhYmxlID0gX2ZpbGVTaG93VGFibGVcbiAgICB0aGlzLnNlbGVjdEZvcm1GaWxlID0gX2ZpbGVTaG93VGFibGVcbiAgICB0aGlzLnNlbGVjdGVkRmlsZUNoYW5nZS5lbWl0KF9maWxlU2hvd1RhYmxlKVxuICB9XG5cbiAgLyoq5qih5oCB5qGGLeeKtuaAgS3mmK/lkKbmiZPlvIAgKi9cbiAgTW9kYWxPcGVuOiBib29sZWFuID0gZmFsc2VcblxuICAvKirliKDpmaTmlofku7booajmoLzpobkgKi9cbiAgZGVsZXRlRmlsZVRhYmxlSXRlbShpLCBmaWxlKSB7XG4gICAgdGhpcy5fZmlsZVNob3dUYWJsZS5zcGxpY2UoaSwgMSlcbiAgICB0aGlzLnNlbGVjdEZvcm1GaWxlID0gdGhpcy5fZmlsZVNob3dUYWJsZVxuICAgIHRoaXMuc2VsZWN0ZWRGaWxlQ2hhbmdlLmVtaXQoW10pXG4gICAgdGhpcy5zZWxlY3RlZEZpbGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdEZvcm1GaWxlKVxuICB9XG4gIC8qKuiwg+aVtOihqOagvOS9jee9riAqL1xuICAgIGRyb3AoZXZlbnQ6IGFueSkge1xuICAgICAgbW92ZUl0ZW1JbkFycmF5KFxuICAgICAgICB0aGlzLl9maWxlU2hvd1RhYmxlLFxuICAgICAgICBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgICBldmVudC5jdXJyZW50SW5kZXhcbiAgICAgICk7XG4gICAgICB0aGlzLnNlbGVjdEZvcm1GaWxlID0gdGhpcy5fZmlsZVNob3dUYWJsZVxuICAgICAgdGhpcy5zZWxlY3RlZEZpbGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdEZvcm1GaWxlKVxuICAgICAgLy8gdGhpcy5fZmlsZVNob3dUYWJsZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICB9XG59XG4iLCI8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tZGFyayBzb2Z0IG1zLTIgZmxvYXQtZW5kXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrLnN0b3ApPVwiTW9kYWxPcGVuID0gdHJ1ZVwiPnt7J0ZpbGVFeHBsb3Jlcjo6U2VsZWN0RmlsZScgfCBhYnBMb2NhbGl6YXRpb259fTwvYnV0dG9uPlxuXG48ZmUtZmlsZS1tb2RhbCBbKHZpc2libGUpXT1cIk1vZGFsT3BlblwiIFtzZWxlY3RQaWNrZXJGaWxlXT1cInNlbGVjdEZvcm1GaWxlXCIgW211bHRpcGxlXT1cIl9tdWx0aXBsZVwiXG4gICAgKHNlbGVjdEZpbGVmbik9XCJfc2VsZWN0RmlsZWZuKCRldmVudClcIiBbZmlsZUNvbnRhaW5lck5hbWVdPVwiX2ZpbGVDb250YWluZXJOYW1lXCI+PC9mZS1maWxlLW1vZGFsPlxuPHRhYmxlIGNsYXNzPVwidGFibGVcIiAqbmdJZj1cIl9maWxlU2hvd1RhYmxlLmxlbmd0aD4wXCIgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIj5cbiAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIHN0eWxlPVwid2lkdGg6IDMwcHg7XCI+PC90aD5cbiAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPjwvdGg+XG4gICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj57eydGaWxlRXhwbG9yZXI6OkZpbGVOYW1lJyB8IGFicExvY2FsaXphdGlvbn19PC90aD5cbiAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPnt7J0ZpbGVFeHBsb3Jlcjo6RmlsZVNpemUnIHwgYWJwTG9jYWxpemF0aW9ufX08L3RoPlxuICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+PC90aD5cbiAgICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuICAgIDx0Ym9keT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBfZmlsZVNob3dUYWJsZTtsZXQgaSA9aW5kZXhcIj5cbiAgICAgICAgICAgIDx0ciBjZGtEcmFnIGNka0RyYWdMb2NrQXhpcz1cInlcIiBbY2RrRHJhZ0RhdGFdPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyYWctaGFuZGxlXCIgY2RrRHJhZ0hhbmRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmkgYmktYXJyb3dzLW1vdmUgZnMtNVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgIDxmZS1maWxlLXByZXZpZXcgW3dpZHRoXT1cIic4MHB4J1wiIFtzcmNdPVwiaXRlbS51cmx8fGl0ZW0uVXJsXCIgW25hbWVdPVwiaXRlbS5uYW1lfHxpdGVtLk5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiaXRlbS5taW1lVHlwZXx8aXRlbS5NaW1lVHlwZVwiIFtwcmV2aWV3XT1cInRydWVcIj48L2ZlLWZpbGUtcHJldmlldz5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7aXRlbS5uYW1lfHxpdGVtLk5hbWV9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgPHRkPnt7X0ZpbGVBcGlTZXJ2aWNlLmZvcm1hdEZpbGVTaXplKGl0ZW0uU2l6ZXx8aXRlbS5zaXplKX19PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIHAtMCBidG4tbGlnaHQgXCIgKGNsaWNrLnN0b3ApPVwiZGVsZXRlRmlsZVRhYmxlSXRlbShpLGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10cmFzaCBwLTJcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3Rib2R5PlxuPC90YWJsZT4iXX0=
@@ -4,4 +4,4 @@ export * from './file-modal/file-modal.component';
4
4
  export * from './file-modal-tree/file-modal-tree.component';
5
5
  export * from './file-picker/file-picker.component';
6
6
  export * from './dynamic-form/form-control-group';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9maWxlLWV4cGxvcmVyL3NyYy9saWIvY29tcG9uZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDRCQUE0QixDQUFBO0FBQzFDLGNBQWMsaUNBQWlDLENBQUE7QUFDL0MsY0FBYyxtQ0FBbUMsQ0FBQTtBQUNqRCxjQUFjLDZDQUE2QyxDQUFBO0FBQzNELGNBQWMscUNBQXFDLENBQUE7QUFDbkQsY0FBYyxtQ0FBbUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZG9tZS9maWxlLWRvbWUuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2ZpbGUtZWRpdC9maWxlLWVkaXQuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2ZpbGUtbW9kYWwvZmlsZS1tb2RhbC5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS1tb2RhbC10cmVlL2ZpbGUtbW9kYWwtdHJlZS5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS1waWNrZXIvZmlsZS1waWNrZXIuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2R5bmFtaWMtZm9ybS9mb3JtLWNvbnRyb2wtZ3JvdXAnIl19
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9maWxlLWV4cGxvcmVyL3NyYy9saWIvY29tcG9uZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDRCQUE0QixDQUFBO0FBQzFDLGNBQWMsaUNBQWlDLENBQUE7QUFDL0MsY0FBYyxtQ0FBbUMsQ0FBQTtBQUNqRCxjQUFjLDZDQUE2QyxDQUFBO0FBQzNELGNBQWMscUNBQXFDLENBQUE7QUFDbkQsY0FBYyxtQ0FBbUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZG9tZS9maWxlLWRvbWUuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2ZpbGUtZWRpdC9maWxlLWVkaXQuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2ZpbGUtbW9kYWwvZmlsZS1tb2RhbC5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS1tb2RhbC10cmVlL2ZpbGUtbW9kYWwtdHJlZS5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS1waWNrZXIvZmlsZS1waWNrZXIuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2R5bmFtaWMtZm9ybS9mb3JtLWNvbnRyb2wtZ3JvdXAnIl19
@@ -21,4 +21,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImpor
21
21
  exports: [RouterModule]
22
22
  }]
23
23
  }] });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1leHBsb3Jlci1yb3V0aW5nLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2ZpbGUtZXhwbG9yZXIvc3JjL2xpYi9maWxlLWV4cGxvcmVyLXJvdXRpbmcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFHLFlBQVksRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7QUFFMUUsTUFBTSxNQUFNLEdBQVc7SUFDckI7UUFDRSxJQUFJLEVBQUUsV0FBVztRQUNqQixTQUFTLEVBQUUsaUJBQWlCO0tBQy9CO0NBQ0EsQ0FBQztBQU1GLE1BQU0sT0FBTyx5QkFBeUI7OEdBQXpCLHlCQUF5QjsrR0FBekIseUJBQXlCLHdDQUYxQixZQUFZOytHQUVYLHlCQUF5QixZQUgxQixZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUM3QixZQUFZOzsyRkFFWCx5QkFBeUI7a0JBSnJDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDeEMsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyAgUm91dGVyTW9kdWxlLCBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRmlsZURvbWVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZG9tZS9maWxlLWRvbWUuY29tcG9uZW50JztcblxuY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gIHtcbiAgICBwYXRoOiAnZmlsZS1kb21lJyxcbiAgICBjb21wb25lbnQ6IEZpbGVEb21lQ29tcG9uZW50XG59LFxuXTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1JvdXRlck1vZHVsZS5mb3JDaGlsZChyb3V0ZXMpXSxcbiAgZXhwb3J0czogW1JvdXRlck1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgRmlsZUV4cGxvcmVyUm91dGluZ01vZHVsZSB7IFxuICBcbn1cbiJdfQ==
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1leHBsb3Jlci1yb3V0aW5nLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ZpbGUtZXhwbG9yZXIvc3JjL2xpYi9maWxlLWV4cGxvcmVyLXJvdXRpbmcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFHLFlBQVksRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7QUFFMUUsTUFBTSxNQUFNLEdBQVc7SUFDckI7UUFDRSxJQUFJLEVBQUUsV0FBVztRQUNqQixTQUFTLEVBQUUsaUJBQWlCO0tBQy9CO0NBQ0EsQ0FBQztBQU1GLE1BQU0sT0FBTyx5QkFBeUI7OEdBQXpCLHlCQUF5QjsrR0FBekIseUJBQXlCLHdDQUYxQixZQUFZOytHQUVYLHlCQUF5QixZQUgxQixZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUM3QixZQUFZOzsyRkFFWCx5QkFBeUI7a0JBSnJDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDeEMsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyAgUm91dGVyTW9kdWxlLCBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRmlsZURvbWVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZG9tZS9maWxlLWRvbWUuY29tcG9uZW50JztcblxuY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gIHtcbiAgICBwYXRoOiAnZmlsZS1kb21lJyxcbiAgICBjb21wb25lbnQ6IEZpbGVEb21lQ29tcG9uZW50XG59LFxuXTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1JvdXRlck1vZHVsZS5mb3JDaGlsZChyb3V0ZXMpXSxcbiAgZXhwb3J0czogW1JvdXRlck1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgRmlsZUV4cGxvcmVyUm91dGluZ01vZHVsZSB7IFxuICBcbn1cbiJdfQ==