@dignite-ng/expand.file-explorer 0.0.22 → 0.0.27
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.
- package/esm2022/config/enums/route-names.mjs +1 -1
- package/esm2022/config/file-config.module.mjs +4 -4
- package/esm2022/lib/components/dome/file-dome.component.mjs +10 -15
- package/esm2022/lib/components/dynamic-form/file-explorer/file-explorer-config.component.mjs +3 -11
- package/esm2022/lib/components/dynamic-form/file-explorer/file-explorer-config.mjs +5 -5
- package/esm2022/lib/components/dynamic-form/file-explorer/file-explorer-control.component.mjs +11 -19
- package/esm2022/lib/components/file-edit/file-edit.component.mjs +17 -20
- package/esm2022/lib/components/file-modal/file-modal.component.mjs +56 -67
- package/esm2022/lib/components/file-modal-tree/file-modal-tree.component.mjs +22 -33
- package/esm2022/lib/components/file-picker/file-picker.component.mjs +12 -14
- package/esm2022/lib/file-explorer-routing.module.mjs +4 -4
- package/esm2022/lib/file-explorer.module.mjs +6 -6
- package/esm2022/lib/previews/file-preview.component.mjs +25 -28
- package/esm2022/lib/proxy/dignite/file-explorer/directories/file-descriptor.service.mjs +32 -33
- package/esm2022/lib/proxy/dignite/file-explorer/files/file-descriptor.service.mjs +44 -45
- package/esm2022/lib/services/file-api.service.mjs +3 -3
- package/fesm2022/dignite-ng-expand.file-explorer-config.mjs +3 -3
- package/fesm2022/dignite-ng-expand.file-explorer-config.mjs.map +1 -1
- package/fesm2022/dignite-ng-expand.file-explorer.mjs +238 -291
- package/fesm2022/dignite-ng-expand.file-explorer.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -13,13 +13,6 @@ import * as i7 from "../file-modal-tree/file-modal-tree.component";
|
|
|
13
13
|
import * as i8 from "../../previews/file-preview.component";
|
|
14
14
|
var that;
|
|
15
15
|
export class FileModalComponent {
|
|
16
|
-
_FileService;
|
|
17
|
-
toaster;
|
|
18
|
-
list;
|
|
19
|
-
_FileApiService;
|
|
20
|
-
restService;
|
|
21
|
-
confirmation;
|
|
22
|
-
_LocalizationService;
|
|
23
16
|
constructor(_FileService, toaster, list, _FileApiService, restService, confirmation, _LocalizationService) {
|
|
24
17
|
this._FileService = _FileService;
|
|
25
18
|
this.toaster = toaster;
|
|
@@ -28,35 +21,75 @@ export class FileModalComponent {
|
|
|
28
21
|
this.restService = restService;
|
|
29
22
|
this.confirmation = confirmation;
|
|
30
23
|
this._LocalizationService = _LocalizationService;
|
|
24
|
+
this._FileDescriptorService = inject(FileDescriptorService);
|
|
25
|
+
/**目录的权限名称 */
|
|
26
|
+
this.createDirectoryPermissionName = null;
|
|
27
|
+
/**是否多选 */
|
|
28
|
+
this._multiple = false;
|
|
29
|
+
/**文件大小限制
|
|
30
|
+
* @param 1mb
|
|
31
|
+
*/
|
|
32
|
+
this.sizeLimit = 1048576;
|
|
33
|
+
/**模态框状态回调 */
|
|
34
|
+
this.visibleChange = new EventEmitter();
|
|
35
|
+
/**模态框-状态-是否打开 */
|
|
36
|
+
this.ModalOpen = false;
|
|
37
|
+
/**模态框-繁忙状态-用于确定模态的繁忙状态是否为真 */
|
|
38
|
+
this.ModalBusy = false;
|
|
39
|
+
/**dignite-file-modal-tree */
|
|
40
|
+
/**选择的tree节点 */
|
|
41
|
+
this._theSelectedTreeNode = '';
|
|
42
|
+
/**图片上传-要上传图片的状态文件列表 */
|
|
43
|
+
this.uploadPictureStatusList = [];
|
|
44
|
+
/**文件表格-数据*/
|
|
45
|
+
this.data = {
|
|
46
|
+
items: [],
|
|
47
|
+
totalCount: 0,
|
|
48
|
+
};
|
|
49
|
+
/**文件表格-条件*/
|
|
50
|
+
this.filters = {};
|
|
51
|
+
/**文件表格-表格自带选择类型 */
|
|
52
|
+
this.SelectionType = SelectionType;
|
|
53
|
+
/**文件表格-选择的表格数据项 */
|
|
54
|
+
this.selectedTable = [];
|
|
55
|
+
/**当前选择的table项 id */
|
|
56
|
+
this.nowSelectId = '';
|
|
57
|
+
/**选择文件回调 */
|
|
58
|
+
this.selectFilefn = new EventEmitter();
|
|
59
|
+
/**一个布尔or函数,可用于检查是否要根据条件选择特定行。 */
|
|
60
|
+
this.selectCheck = (row, column, value) => {
|
|
61
|
+
this.nowSelectId = row.id;
|
|
62
|
+
return true;
|
|
63
|
+
};
|
|
64
|
+
/**判断row是否选中 */
|
|
65
|
+
this.selectedcheckbox = (id) => {
|
|
66
|
+
return this.selectedTable.some(el => el.id == id);
|
|
67
|
+
};
|
|
68
|
+
/**创建图片的接口,代理中的file类型不匹配,切换为any类型 */
|
|
69
|
+
this.createFile = (input, config) => this.restService.request({
|
|
70
|
+
method: 'POST',
|
|
71
|
+
url: '/api/file-explorer/files',
|
|
72
|
+
params: { containerName: input.containerName, cellName: input.cellName, directoryId: input.directoryId, entityId: input.entityId },
|
|
73
|
+
body: input.file,
|
|
74
|
+
}, { apiName: 'FileExplorer', ...config });
|
|
31
75
|
that = this;
|
|
32
76
|
}
|
|
33
|
-
_FileDescriptorService = inject(FileDescriptorService);
|
|
34
77
|
/**获取目录配置 */
|
|
35
78
|
getFilesConfiguration() {
|
|
36
79
|
this._FileDescriptorService.getFileContainerConfiguration(this._fileContainerName).subscribe(res => {
|
|
37
80
|
this.createDirectoryPermissionName = res.createDirectoryPermissionName;
|
|
38
81
|
});
|
|
39
82
|
}
|
|
40
|
-
/**目录的权限名称 */
|
|
41
|
-
createDirectoryPermissionName = null;
|
|
42
|
-
/**图片容器 */
|
|
43
|
-
_fileContainerName;
|
|
44
83
|
set fileContainerName(v) {
|
|
45
84
|
if (v) {
|
|
46
85
|
this._fileContainerName = v;
|
|
47
86
|
this.loadData();
|
|
48
87
|
}
|
|
49
88
|
}
|
|
50
|
-
/**是否多选 */
|
|
51
|
-
_multiple = false;
|
|
52
89
|
set multiple(v) {
|
|
53
90
|
this._multiple = v;
|
|
54
91
|
if (v) { }
|
|
55
92
|
}
|
|
56
|
-
/**文件大小限制
|
|
57
|
-
* @param 1mb
|
|
58
|
-
*/
|
|
59
|
-
sizeLimit = 1048576;
|
|
60
93
|
set limit(v) {
|
|
61
94
|
this.sizeLimit = v;
|
|
62
95
|
}
|
|
@@ -67,12 +100,6 @@ export class FileModalComponent {
|
|
|
67
100
|
this.loadData();
|
|
68
101
|
}
|
|
69
102
|
}
|
|
70
|
-
/**模态框状态回调 */
|
|
71
|
-
visibleChange = new EventEmitter();
|
|
72
|
-
/**模态框-状态-是否打开 */
|
|
73
|
-
ModalOpen = false;
|
|
74
|
-
/**模态框-繁忙状态-用于确定模态的繁忙状态是否为真 */
|
|
75
|
-
ModalBusy = false;
|
|
76
103
|
/**模态框-状态改变回调 */
|
|
77
104
|
ModalVisibleChange(event) {
|
|
78
105
|
if (!event) {
|
|
@@ -86,9 +113,6 @@ export class FileModalComponent {
|
|
|
86
113
|
this.selectFilefn.emit(selectedTablearr);
|
|
87
114
|
this.ModalVisibleChange(false);
|
|
88
115
|
}
|
|
89
|
-
/**dignite-file-modal-tree */
|
|
90
|
-
/**选择的tree节点 */
|
|
91
|
-
_theSelectedTreeNode = '';
|
|
92
116
|
/**初始化数据 */
|
|
93
117
|
loadData() {
|
|
94
118
|
if (this.ModalOpen && this._fileContainerName) {
|
|
@@ -101,8 +125,6 @@ export class FileModalComponent {
|
|
|
101
125
|
this._theSelectedTreeNode = event;
|
|
102
126
|
this.list.get();
|
|
103
127
|
}
|
|
104
|
-
/**图片上传-要上传图片的状态文件列表 */
|
|
105
|
-
uploadPictureStatusList = [];
|
|
106
128
|
/**图片上传-获取文件信息改变 */
|
|
107
129
|
async getFileChange(event) {
|
|
108
130
|
let files = new Array(...event.target.files);
|
|
@@ -152,28 +174,11 @@ export class FileModalComponent {
|
|
|
152
174
|
});
|
|
153
175
|
});
|
|
154
176
|
}
|
|
155
|
-
/**文件表格-数据*/
|
|
156
|
-
data = {
|
|
157
|
-
items: [],
|
|
158
|
-
totalCount: 0,
|
|
159
|
-
};
|
|
160
|
-
/**文件表格-条件*/
|
|
161
|
-
filters = {};
|
|
162
|
-
/**文件表格-表格自带选择类型 */
|
|
163
|
-
SelectionType = SelectionType;
|
|
164
|
-
/**文件表格-选择的表格数据项 */
|
|
165
|
-
selectedTable = [];
|
|
166
|
-
/**已选定的文件 */
|
|
167
|
-
selectPickerFile;
|
|
168
177
|
ngOnChanges(changes) {
|
|
169
178
|
//Called before any other lifecycle hook. Use it to inject dependencies, but avoid any serious work here.
|
|
170
179
|
//Add '${implements OnChanges}' to the class.
|
|
171
180
|
this.selectedTable = this._FileApiService.deepClone(this.selectPickerFile);
|
|
172
181
|
}
|
|
173
|
-
/**当前选择的table项 id */
|
|
174
|
-
nowSelectId = '';
|
|
175
|
-
/**选择文件回调 */
|
|
176
|
-
selectFilefn = new EventEmitter();
|
|
177
182
|
/**文件表格-获取表格数据 */
|
|
178
183
|
hookToQuery() {
|
|
179
184
|
const getData = (query) => this._FileService.getList({
|
|
@@ -210,15 +215,6 @@ export class FileModalComponent {
|
|
|
210
215
|
return false;
|
|
211
216
|
});
|
|
212
217
|
}
|
|
213
|
-
/**一个布尔or函数,可用于检查是否要根据条件选择特定行。 */
|
|
214
|
-
selectCheck = (row, column, value) => {
|
|
215
|
-
this.nowSelectId = row.id;
|
|
216
|
-
return true;
|
|
217
|
-
};
|
|
218
|
-
/**判断row是否选中 */
|
|
219
|
-
selectedcheckbox = (id) => {
|
|
220
|
-
return this.selectedTable.some(el => el.id == id);
|
|
221
|
-
};
|
|
222
218
|
/**删除图片 */
|
|
223
219
|
deleteFile(file) {
|
|
224
220
|
this.confirmation
|
|
@@ -236,22 +232,15 @@ export class FileModalComponent {
|
|
|
236
232
|
closeFileStatusModal() {
|
|
237
233
|
this.uploadPictureStatusList = [];
|
|
238
234
|
}
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
method: 'POST',
|
|
242
|
-
url: '/api/file-explorer/files',
|
|
243
|
-
params: { containerName: input.containerName, cellName: input.cellName, directoryId: input.directoryId, entityId: input.entityId },
|
|
244
|
-
body: input.file,
|
|
245
|
-
}, { apiName: 'FileExplorer', ...config });
|
|
246
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: FileModalComponent, deps: [{ token: i1.FileDescriptorService }, { token: i2.ToasterService }, { token: i3.ListService }, { token: i4.FileApiService }, { token: i3.RestService }, { token: i2.ConfirmationService }, { token: i3.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
247
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.5", type: FileModalComponent, selector: "fe-file-modal", inputs: { fileContainerName: "fileContainerName", multiple: "multiple", limit: "limit", visible: "visible", selectPickerFile: "selectPickerFile" }, outputs: { visibleChange: "visibleChange", selectFilefn: "selectFilefn" }, providers: [
|
|
235
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: FileModalComponent, deps: [{ token: i1.FileDescriptorService }, { token: i2.ToasterService }, { token: i3.ListService }, { token: i4.FileApiService }, { token: i3.RestService }, { token: i2.ConfirmationService }, { token: i3.LocalizationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
236
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.5", type: FileModalComponent, selector: "fe-file-modal", inputs: { fileContainerName: "fileContainerName", multiple: "multiple", limit: "limit", visible: "visible", selectPickerFile: "selectPickerFile" }, outputs: { visibleChange: "visibleChange", selectFilefn: "selectFilefn" }, providers: [
|
|
248
237
|
// [Required]
|
|
249
238
|
ListService,
|
|
250
239
|
// [Optional]
|
|
251
240
|
// Provide this token if you want a different debounce time.
|
|
252
241
|
// Default is 300. Cannot be 0. Any value below 100 is not recommended.
|
|
253
242
|
{ provide: LIST_QUERY_DEBOUNCE_TIME, useValue: 500 },
|
|
254
|
-
], usesOnChanges: true, ngImport: i0, template: "<abp-modal [(visible)]=\"ModalOpen\" (visibleChange)=\"ModalVisibleChange($event)\"\n [options]=\"{ size: 'xl', scrollable: false }\">\n <ng-template #abpHeader>\n <h3>{{'FileExplorer::FileExplorer' | abpLocalization}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <div class=\"row file-explorer-modal-body file-modal\">\n <div class=\"col-3\" *ngIf=\"createDirectoryPermissionName\" style=\"overflow: auto; height: calc(100vh - 240px)\">\n <fe-file-modal-tree [theSelectedTreeNode]=\"_theSelectedTreeNode\" (nodeClick)=\"_nodeClick($event)\"\n [fileContainerName]=\"_fileContainerName\"></fe-file-modal-tree>\n </div>\n <div [class]=\"createDirectoryPermissionName?'col-9':'col-12'\" style=\"height: calc(100vh - 240px)\">\n <div class=\"mb-2 d-flex justify-content-between align-items-center\">\n <div class=\"btn-link\" role=button style=\"flex: 2\" (click)=\"lookAllFile()\">{{'FileExplorer::AllFiles' | abpLocalization}}</div>\n <div class=\"input-group form-file\" style=\"flex: 2\">\n <input type=\"file\" class=\"form-control\" #fileEdit [multiple]=\"_multiple\" \n (change)=\"getFileChange($event)\" />\n <!-- accept=\".jpg,.jpeg,.png,.gif,.webp\" -->\n </div>\n </div>\n <div>\n <ngx-datatable class=\"material container-height\" [rows]=\"data.items\" [list]=\"list\" columnMode=\"flex\"\n [columns]=\"columns\" [headerHeight]=\"50\" [footerHeight]=\"50\" rowHeight=\"auto\" [scrollbarV]=\"true\"\n [virtualization]=\"false\" [externalPaging]=\"true\" [count]=\"data.totalCount\" [selected]=\"selectedTable\"\n [selectCheck]=\"selectCheck\" [selectionType]=\"_multiple?SelectionType.multiClick:SelectionType.single\" (select)=\"onSelectTableItem($event)\">\n <ngx-datatable-column [width]=\"50\" prop=\"id\" [sortable]=\"false\" [canAutoResize]=\"false\" [draggable]=\"false\"\n [resizeable]=\"false\">\n <ng-template ngx-datatable-header-template let-value=\"value\" let-allRowsSelected=\"allRowsSelected\"\n let-selectFn=\"selectFn\">\n <input type=\"checkbox\" class=\"form-check-input\" [checked]=\"allRowsSelected\"\n (change)=\"selectFn(!allRowsSelected)\" />\n </ng-template>\n <ng-template ngx-datatable-cell-template let-row=\"row\" let-value=\"value\" let-isSelected=\"isSelected\"\n let-onCheckboxChangeFn=\"onCheckboxChangeFn\">\n <input type=\"checkbox\" class=\"form-check-input\" [checked]=\"selectedcheckbox(value)\"\n (change)=\"onCheckboxChangeFn($event)\" />\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [flexGrow]=\"2\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <fe-file-preview [width]=\"'80px'\" [src]=\"row.url\" [name]=\"row.name\" [type]=\"row.mimeType\" [preview]=\"true\"></fe-file-preview>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'FileExplorer::FileName' | abpLocalization\" prop=\"name\" [flexGrow]=\"4\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ value }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'FileExplorer::FileSize' | abpLocalization\" prop=\"size\" [flexGrow]=\"1.5\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ _FileApiService.formatFileSize(value) }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'FileExplorer::Directory' | abpLocalization\" prop=\"cellName\" [flexGrow]=\"1\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ value }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'FileExplorer::CreationTime' | abpLocalization\" prop=\"creationTime\" [flexGrow]=\"2\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ value | date : 'YYYY/MM/dd HH:mm:s' }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [flexGrow]=\"1\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <button class=\"btn btn-sm btn-light p-0\" (click.stop)=\"deleteFile(row)\">\n <i class=\"fas fa-trash text-primary p-2\"></i>\n </button>\n </ng-template>\n </ngx-datatable-column>\n </ngx-datatable>\n </div>\n <div *ngIf=\"uploadPictureStatusList.length > 0\"\n class=\"position-fixed bottom-0 end-0 shadow-lg file-status-modal m-5\"\n style=\"border-radius: 10px\">\n <div class=\"card p-1\">\n <div class=\"card-header d-flex align-items-center justify-content-between p-0 py-1 border-bottom\">\n <div>{{'FileExplorer::UploadFiles' | abpLocalization}}</div>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click.stop)=\"closeFileStatusModal()\"></button>\n </div>\n <div class=\"card-body\">\n <table class=\"table\">\n <thead>\n <tr>\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 uploadPictureStatusList; let i = index\">\n <tr>\n <th scope=\"row\">\n <div>{{ item.name }}</div>\n <div class=\"form-text text-danger\" *ngIf=\"item.size > sizeLimit\">\n {{'FileExplorer::ExceedsMaximumSize' | abpLocalization:_FileApiService.formatFileSize(sizeLimit)}}\n </div>\n </th>\n <td>{{ item.fileSize }}</td>\n <td>\n <i *ngIf=\"item.status === 1\" class=\"fas fa-check text-primary\"></i>\n <i *ngIf=\"item.status === 2\" class=\"fas fa-times-circle text-danger\"></i>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n </div>\n </div>\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\" (click)=\"modalSave()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>", styles: ["::ng-deep .file-modal .container-height{height:calc(100vh - 284px)}::ng-deep .file-modal .file-status-modal{background:#fff}::ng-deep .file-modal .file-status-modal .card-body{max-height:300px;overflow-y:auto}::ng-deep .file-modal .ngx-datatable.material.single-selection .datatable-body-row.active,::ng-deep .file-modal .ngx-datatable.material.single-selection .datatable-body-row.active .datatable-row-group,::ng-deep .file-modal .ngx-datatable.material.multi-selection .datatable-body-row.active,::ng-deep .file-modal .ngx-datatable.material.multi-selection .datatable-body-row.active .datatable-row-group,::ng-deep .file-modal .ngx-datatable.material.multi-click-selection .datatable-body-row.active,::ng-deep .file-modal .ngx-datatable.material.multi-click-selection .datatable-body-row.active .datatable-row-group{background-color:transparent!important}::ng-deep .file-modal .ant-tree .ant-tree-node-content-wrapper{padding:0}::ng-deep .file-modal .ant-tree .ant-tree-node-content-wrapper .custom-node{width:100%}::ng-deep .file-modal .ant-tree .ant-tree-node-content-wrapper .selected{background-color:var(--lpx-brand)!important}::ng-deep .file-modal .ant-tree .ant-tree-node-content-wrapper .selected .btn{color:var(--lpx-navbar-color)}::ng-deep .file-modal .ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected{background-color:transparent}::ng-deep .file-modal .ngx-datatable.fixed-header .datatable-header .datatable-header-inner .datatable-header-cell,::ng-deep .file-modal .ngx-datatable.material .datatable-body .datatable-body-row .datatable-body-cell{overflow:initial;line-break:anywhere}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.StopPropagationDirective, selector: "[click.stop]", outputs: ["click.stop"] }, { kind: "component", type: i6.DatatableComponent, selector: "ngx-datatable", inputs: ["targetMarkerTemplate", "rows", "groupRowsBy", "groupedRows", "columns", "selected", "scrollbarV", "scrollbarH", "rowHeight", "columnMode", "headerHeight", "footerHeight", "externalPaging", "externalSorting", "limit", "count", "offset", "loadingIndicator", "selectionType", "reorderable", "swapColumns", "sortType", "sorts", "cssClasses", "messages", "rowClass", "selectCheck", "displayCheck", "groupExpansionDefault", "trackByProp", "selectAllRowsOnPage", "virtualization", "treeFromRelation", "treeToRelation", "summaryRow", "summaryHeight", "summaryPosition", "rowIdentity"], outputs: ["scroll", "activate", "select", "sort", "page", "reorder", "resize", "tableContextmenu", "treeAction"] }, { kind: "directive", type: i6.DataTableColumnDirective, selector: "ngx-datatable-column", inputs: ["name", "prop", "frozenLeft", "frozenRight", "flexGrow", "resizeable", "comparator", "pipe", "sortable", "draggable", "canAutoResize", "minWidth", "width", "maxWidth", "checkboxable", "headerCheckboxable", "headerClass", "cellClass", "isTreeColumn", "treeLevelIndent", "summaryFunc", "summaryTemplate", "cellTemplate", "headerTemplate", "treeToggleTemplate"] }, { kind: "directive", type: i6.DataTableColumnHeaderDirective, selector: "[ngx-datatable-header-template]" }, { kind: "directive", type: i6.DataTableColumnCellDirective, selector: "[ngx-datatable-cell-template]" }, { kind: "directive", type: i2.NgxDatatableListDirective, selector: "ngx-datatable[list]", inputs: ["list"], exportAs: ["ngxDatatableList"] }, { kind: "component", type: i2.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i2.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i2.ModalCloseDirective, selector: "[abpClose]" }, { kind: "component", type: i7.FileModalTreeComponent, selector: "fe-file-modal-tree", inputs: ["theSelectedTreeNode", "fileContainerName"], outputs: ["nodeClick"] }, { kind: "component", type: i8.FilePreviewComponent, selector: "fe-file-preview", inputs: ["width", "src", "preview", "type", "name"] }, { kind: "pipe", type: i5.DatePipe, name: "date" }, { kind: "pipe", type: i3.LocalizationPipe, name: "abpLocalization" }] });
|
|
243
|
+
], usesOnChanges: true, ngImport: i0, template: "<abp-modal [(visible)]=\"ModalOpen\" (visibleChange)=\"ModalVisibleChange($event)\"\n [options]=\"{ size: 'xl', scrollable: false }\">\n <ng-template #abpHeader>\n <h3>{{'FileExplorer::FileExplorer' | abpLocalization}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <div class=\"row file-explorer-modal-body file-modal\">\n <div class=\"col-3\" *ngIf=\"createDirectoryPermissionName\" style=\"overflow: auto; height: calc(100vh - 240px)\">\n <fe-file-modal-tree [theSelectedTreeNode]=\"_theSelectedTreeNode\" (nodeClick)=\"_nodeClick($event)\"\n [fileContainerName]=\"_fileContainerName\"></fe-file-modal-tree>\n </div>\n <div [class]=\"createDirectoryPermissionName?'col-9':'col-12'\" style=\"height: calc(100vh - 240px)\">\n <div class=\"mb-2 d-flex justify-content-between align-items-center\">\n <div class=\"btn-link\" role=button style=\"flex: 2\" (click)=\"lookAllFile()\">{{'FileExplorer::AllFiles' | abpLocalization}}</div>\n <div class=\"input-group form-file\" style=\"flex: 2\">\n <input type=\"file\" class=\"form-control\" #fileEdit [multiple]=\"_multiple\" \n (change)=\"getFileChange($event)\" />\n </div>\n </div>\n <div>\n <ngx-datatable class=\"material container-height\" [rows]=\"data.items\" [list]=\"list\" columnMode=\"flex\"\n [columns]=\"columns\" [headerHeight]=\"50\" [footerHeight]=\"50\" rowHeight=\"auto\" [scrollbarV]=\"true\"\n [virtualization]=\"false\" [externalPaging]=\"true\" [count]=\"data.totalCount\" [selected]=\"selectedTable\"\n [selectCheck]=\"selectCheck\" [selectionType]=\"_multiple?SelectionType.multiClick:SelectionType.single\" (select)=\"onSelectTableItem($event)\">\n <ngx-datatable-column [width]=\"50\" prop=\"id\" [sortable]=\"false\" [canAutoResize]=\"false\" [draggable]=\"false\"\n [resizeable]=\"false\">\n <ng-template ngx-datatable-header-template let-value=\"value\" let-allRowsSelected=\"allRowsSelected\"\n let-selectFn=\"selectFn\">\n <input type=\"checkbox\" class=\"form-check-input\" [checked]=\"allRowsSelected\"\n (change)=\"selectFn(!allRowsSelected)\" />\n </ng-template>\n <ng-template ngx-datatable-cell-template let-row=\"row\" let-value=\"value\" let-isSelected=\"isSelected\"\n let-onCheckboxChangeFn=\"onCheckboxChangeFn\">\n <input type=\"checkbox\" class=\"form-check-input\" [checked]=\"selectedcheckbox(value)\"\n (change)=\"onCheckboxChangeFn($event)\" />\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [flexGrow]=\"2\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <fe-file-preview [width]=\"'80px'\" [src]=\"row.url\" [name]=\"row.name\" [type]=\"row.mimeType\" [preview]=\"true\"></fe-file-preview>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'FileExplorer::FileName' | abpLocalization\" prop=\"name\" [flexGrow]=\"4\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ value }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'FileExplorer::FileSize' | abpLocalization\" prop=\"size\" [flexGrow]=\"1.5\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ _FileApiService.formatFileSize(value) }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'FileExplorer::Directory' | abpLocalization\" prop=\"cellName\" [flexGrow]=\"1\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ value }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'FileExplorer::CreationTime' | abpLocalization\" prop=\"creationTime\" [flexGrow]=\"2\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ value | date : 'YYYY/MM/dd HH:mm:s' }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [flexGrow]=\"1\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <button class=\"btn btn-sm btn-light p-0\" (click.stop)=\"deleteFile(row)\">\n <i class=\"fas fa-trash text-primary p-2\"></i>\n </button>\n </ng-template>\n </ngx-datatable-column>\n </ngx-datatable>\n </div>\n <div *ngIf=\"uploadPictureStatusList.length > 0\"\n class=\"position-fixed bottom-0 end-0 shadow-lg file-status-modal m-5\"\n style=\"border-radius: 10px\">\n <div class=\"card p-1\">\n <div class=\"card-header d-flex align-items-center justify-content-between p-0 py-1 border-bottom\">\n <div>{{'FileExplorer::UploadFiles' | abpLocalization}}</div>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click.stop)=\"closeFileStatusModal()\"></button>\n </div>\n <div class=\"card-body\">\n <table class=\"table\">\n <thead>\n <tr>\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 uploadPictureStatusList; let i = index\">\n <tr>\n <th scope=\"row\">\n <div>{{ item.name }}</div>\n <div class=\"form-text text-danger\" *ngIf=\"item.size > sizeLimit\">\n {{'FileExplorer::ExceedsMaximumSize' | abpLocalization:_FileApiService.formatFileSize(sizeLimit)}}\n </div>\n </th>\n <td>{{ item.fileSize }}</td>\n <td>\n <i *ngIf=\"item.status === 1\" class=\"fas fa-check text-primary\"></i>\n <i *ngIf=\"item.status === 2\" class=\"fas fa-times-circle text-danger\"></i>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n </div>\n </div>\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\" (click)=\"modalSave()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>", styles: ["::ng-deep .file-modal .container-height{height:calc(100vh - 284px)}::ng-deep .file-modal .file-status-modal{background:#fff}::ng-deep .file-modal .file-status-modal .card-body{max-height:300px;overflow-y:auto}::ng-deep .file-modal .ngx-datatable.material.single-selection .datatable-body-row.active,::ng-deep .file-modal .ngx-datatable.material.single-selection .datatable-body-row.active .datatable-row-group,::ng-deep .file-modal .ngx-datatable.material.multi-selection .datatable-body-row.active,::ng-deep .file-modal .ngx-datatable.material.multi-selection .datatable-body-row.active .datatable-row-group,::ng-deep .file-modal .ngx-datatable.material.multi-click-selection .datatable-body-row.active,::ng-deep .file-modal .ngx-datatable.material.multi-click-selection .datatable-body-row.active .datatable-row-group{background-color:transparent!important}::ng-deep .file-modal .ant-tree .ant-tree-node-content-wrapper{padding:0}::ng-deep .file-modal .ant-tree .ant-tree-node-content-wrapper .custom-node{width:100%}::ng-deep .file-modal .ant-tree .ant-tree-node-content-wrapper .selected{background-color:var(--lpx-brand)!important}::ng-deep .file-modal .ant-tree .ant-tree-node-content-wrapper .selected .btn{color:var(--lpx-navbar-color)}::ng-deep .file-modal .ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected{background-color:transparent}::ng-deep .file-modal .ngx-datatable.fixed-header .datatable-header .datatable-header-inner .datatable-header-cell,::ng-deep .file-modal .ngx-datatable.material .datatable-body .datatable-body-row .datatable-body-cell{overflow:initial;line-break:anywhere}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.StopPropagationDirective, selector: "[click.stop]", outputs: ["click.stop"] }, { kind: "component", type: i6.DatatableComponent, selector: "ngx-datatable", inputs: ["targetMarkerTemplate", "rows", "groupRowsBy", "groupedRows", "columns", "selected", "scrollbarV", "scrollbarH", "rowHeight", "columnMode", "headerHeight", "footerHeight", "externalPaging", "externalSorting", "limit", "count", "offset", "loadingIndicator", "selectionType", "reorderable", "swapColumns", "sortType", "sorts", "cssClasses", "messages", "rowClass", "selectCheck", "displayCheck", "groupExpansionDefault", "trackByProp", "selectAllRowsOnPage", "virtualization", "treeFromRelation", "treeToRelation", "summaryRow", "summaryHeight", "summaryPosition", "rowIdentity"], outputs: ["scroll", "activate", "select", "sort", "page", "reorder", "resize", "tableContextmenu", "treeAction"] }, { kind: "directive", type: i6.DataTableColumnDirective, selector: "ngx-datatable-column", inputs: ["name", "prop", "frozenLeft", "frozenRight", "flexGrow", "resizeable", "comparator", "pipe", "sortable", "draggable", "canAutoResize", "minWidth", "width", "maxWidth", "checkboxable", "headerCheckboxable", "headerClass", "cellClass", "isTreeColumn", "treeLevelIndent", "summaryFunc", "summaryTemplate", "cellTemplate", "headerTemplate", "treeToggleTemplate"] }, { kind: "directive", type: i6.DataTableColumnHeaderDirective, selector: "[ngx-datatable-header-template]" }, { kind: "directive", type: i6.DataTableColumnCellDirective, selector: "[ngx-datatable-cell-template]" }, { kind: "directive", type: i2.NgxDatatableListDirective, selector: "ngx-datatable[list]", inputs: ["list"], exportAs: ["ngxDatatableList"] }, { kind: "component", type: i2.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i2.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i2.ModalCloseDirective, selector: "[abpClose]" }, { kind: "component", type: i7.FileModalTreeComponent, selector: "fe-file-modal-tree", inputs: ["theSelectedTreeNode", "fileContainerName"], outputs: ["nodeClick"] }, { kind: "component", type: i8.FilePreviewComponent, selector: "fe-file-preview", inputs: ["width", "src", "preview", "type", "name"] }, { kind: "pipe", type: i5.DatePipe, name: "date" }, { kind: "pipe", type: i3.LocalizationPipe, name: "abpLocalization" }] }); }
|
|
255
244
|
}
|
|
256
245
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: FileModalComponent, decorators: [{
|
|
257
246
|
type: Component,
|
|
@@ -262,7 +251,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImpor
|
|
|
262
251
|
// Provide this token if you want a different debounce time.
|
|
263
252
|
// Default is 300. Cannot be 0. Any value below 100 is not recommended.
|
|
264
253
|
{ provide: LIST_QUERY_DEBOUNCE_TIME, useValue: 500 },
|
|
265
|
-
], template: "<abp-modal [(visible)]=\"ModalOpen\" (visibleChange)=\"ModalVisibleChange($event)\"\n [options]=\"{ size: 'xl', scrollable: false }\">\n <ng-template #abpHeader>\n <h3>{{'FileExplorer::FileExplorer' | abpLocalization}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <div class=\"row file-explorer-modal-body file-modal\">\n <div class=\"col-3\" *ngIf=\"createDirectoryPermissionName\" style=\"overflow: auto; height: calc(100vh - 240px)\">\n <fe-file-modal-tree [theSelectedTreeNode]=\"_theSelectedTreeNode\" (nodeClick)=\"_nodeClick($event)\"\n [fileContainerName]=\"_fileContainerName\"></fe-file-modal-tree>\n </div>\n <div [class]=\"createDirectoryPermissionName?'col-9':'col-12'\" style=\"height: calc(100vh - 240px)\">\n <div class=\"mb-2 d-flex justify-content-between align-items-center\">\n <div class=\"btn-link\" role=button style=\"flex: 2\" (click)=\"lookAllFile()\">{{'FileExplorer::AllFiles' | abpLocalization}}</div>\n <div class=\"input-group form-file\" style=\"flex: 2\">\n <input type=\"file\" class=\"form-control\" #fileEdit [multiple]=\"_multiple\" \n (change)=\"getFileChange($event)\" />\n
|
|
254
|
+
], template: "<abp-modal [(visible)]=\"ModalOpen\" (visibleChange)=\"ModalVisibleChange($event)\"\n [options]=\"{ size: 'xl', scrollable: false }\">\n <ng-template #abpHeader>\n <h3>{{'FileExplorer::FileExplorer' | abpLocalization}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <div class=\"row file-explorer-modal-body file-modal\">\n <div class=\"col-3\" *ngIf=\"createDirectoryPermissionName\" style=\"overflow: auto; height: calc(100vh - 240px)\">\n <fe-file-modal-tree [theSelectedTreeNode]=\"_theSelectedTreeNode\" (nodeClick)=\"_nodeClick($event)\"\n [fileContainerName]=\"_fileContainerName\"></fe-file-modal-tree>\n </div>\n <div [class]=\"createDirectoryPermissionName?'col-9':'col-12'\" style=\"height: calc(100vh - 240px)\">\n <div class=\"mb-2 d-flex justify-content-between align-items-center\">\n <div class=\"btn-link\" role=button style=\"flex: 2\" (click)=\"lookAllFile()\">{{'FileExplorer::AllFiles' | abpLocalization}}</div>\n <div class=\"input-group form-file\" style=\"flex: 2\">\n <input type=\"file\" class=\"form-control\" #fileEdit [multiple]=\"_multiple\" \n (change)=\"getFileChange($event)\" />\n </div>\n </div>\n <div>\n <ngx-datatable class=\"material container-height\" [rows]=\"data.items\" [list]=\"list\" columnMode=\"flex\"\n [columns]=\"columns\" [headerHeight]=\"50\" [footerHeight]=\"50\" rowHeight=\"auto\" [scrollbarV]=\"true\"\n [virtualization]=\"false\" [externalPaging]=\"true\" [count]=\"data.totalCount\" [selected]=\"selectedTable\"\n [selectCheck]=\"selectCheck\" [selectionType]=\"_multiple?SelectionType.multiClick:SelectionType.single\" (select)=\"onSelectTableItem($event)\">\n <ngx-datatable-column [width]=\"50\" prop=\"id\" [sortable]=\"false\" [canAutoResize]=\"false\" [draggable]=\"false\"\n [resizeable]=\"false\">\n <ng-template ngx-datatable-header-template let-value=\"value\" let-allRowsSelected=\"allRowsSelected\"\n let-selectFn=\"selectFn\">\n <input type=\"checkbox\" class=\"form-check-input\" [checked]=\"allRowsSelected\"\n (change)=\"selectFn(!allRowsSelected)\" />\n </ng-template>\n <ng-template ngx-datatable-cell-template let-row=\"row\" let-value=\"value\" let-isSelected=\"isSelected\"\n let-onCheckboxChangeFn=\"onCheckboxChangeFn\">\n <input type=\"checkbox\" class=\"form-check-input\" [checked]=\"selectedcheckbox(value)\"\n (change)=\"onCheckboxChangeFn($event)\" />\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [flexGrow]=\"2\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <fe-file-preview [width]=\"'80px'\" [src]=\"row.url\" [name]=\"row.name\" [type]=\"row.mimeType\" [preview]=\"true\"></fe-file-preview>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'FileExplorer::FileName' | abpLocalization\" prop=\"name\" [flexGrow]=\"4\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ value }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'FileExplorer::FileSize' | abpLocalization\" prop=\"size\" [flexGrow]=\"1.5\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ _FileApiService.formatFileSize(value) }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'FileExplorer::Directory' | abpLocalization\" prop=\"cellName\" [flexGrow]=\"1\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ value }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'FileExplorer::CreationTime' | abpLocalization\" prop=\"creationTime\" [flexGrow]=\"2\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ value | date : 'YYYY/MM/dd HH:mm:s' }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [flexGrow]=\"1\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <button class=\"btn btn-sm btn-light p-0\" (click.stop)=\"deleteFile(row)\">\n <i class=\"fas fa-trash text-primary p-2\"></i>\n </button>\n </ng-template>\n </ngx-datatable-column>\n </ngx-datatable>\n </div>\n <div *ngIf=\"uploadPictureStatusList.length > 0\"\n class=\"position-fixed bottom-0 end-0 shadow-lg file-status-modal m-5\"\n style=\"border-radius: 10px\">\n <div class=\"card p-1\">\n <div class=\"card-header d-flex align-items-center justify-content-between p-0 py-1 border-bottom\">\n <div>{{'FileExplorer::UploadFiles' | abpLocalization}}</div>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click.stop)=\"closeFileStatusModal()\"></button>\n </div>\n <div class=\"card-body\">\n <table class=\"table\">\n <thead>\n <tr>\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 uploadPictureStatusList; let i = index\">\n <tr>\n <th scope=\"row\">\n <div>{{ item.name }}</div>\n <div class=\"form-text text-danger\" *ngIf=\"item.size > sizeLimit\">\n {{'FileExplorer::ExceedsMaximumSize' | abpLocalization:_FileApiService.formatFileSize(sizeLimit)}}\n </div>\n </th>\n <td>{{ item.fileSize }}</td>\n <td>\n <i *ngIf=\"item.status === 1\" class=\"fas fa-check text-primary\"></i>\n <i *ngIf=\"item.status === 2\" class=\"fas fa-times-circle text-danger\"></i>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n </div>\n </div>\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\" (click)=\"modalSave()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>", styles: ["::ng-deep .file-modal .container-height{height:calc(100vh - 284px)}::ng-deep .file-modal .file-status-modal{background:#fff}::ng-deep .file-modal .file-status-modal .card-body{max-height:300px;overflow-y:auto}::ng-deep .file-modal .ngx-datatable.material.single-selection .datatable-body-row.active,::ng-deep .file-modal .ngx-datatable.material.single-selection .datatable-body-row.active .datatable-row-group,::ng-deep .file-modal .ngx-datatable.material.multi-selection .datatable-body-row.active,::ng-deep .file-modal .ngx-datatable.material.multi-selection .datatable-body-row.active .datatable-row-group,::ng-deep .file-modal .ngx-datatable.material.multi-click-selection .datatable-body-row.active,::ng-deep .file-modal .ngx-datatable.material.multi-click-selection .datatable-body-row.active .datatable-row-group{background-color:transparent!important}::ng-deep .file-modal .ant-tree .ant-tree-node-content-wrapper{padding:0}::ng-deep .file-modal .ant-tree .ant-tree-node-content-wrapper .custom-node{width:100%}::ng-deep .file-modal .ant-tree .ant-tree-node-content-wrapper .selected{background-color:var(--lpx-brand)!important}::ng-deep .file-modal .ant-tree .ant-tree-node-content-wrapper .selected .btn{color:var(--lpx-navbar-color)}::ng-deep .file-modal .ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected{background-color:transparent}::ng-deep .file-modal .ngx-datatable.fixed-header .datatable-header .datatable-header-inner .datatable-header-cell,::ng-deep .file-modal .ngx-datatable.material .datatable-body .datatable-body-row .datatable-body-cell{overflow:initial;line-break:anywhere}\n"] }]
|
|
266
255
|
}], ctorParameters: () => [{ type: i1.FileDescriptorService }, { type: i2.ToasterService }, { type: i3.ListService }, { type: i4.FileApiService }, { type: i3.RestService }, { type: i2.ConfirmationService }, { type: i3.LocalizationService }], propDecorators: { fileContainerName: [{
|
|
267
256
|
type: Input
|
|
268
257
|
}], multiple: [{
|
|
@@ -278,4 +267,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImpor
|
|
|
278
267
|
}], selectFilefn: [{
|
|
279
268
|
type: Output
|
|
280
269
|
}] } });
|
|
281
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9maWxlLWV4cGxvcmVyL3NyYy9saWIvY29tcG9uZW50cy9maWxlLW1vZGFsL2ZpbGUtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZmlsZS1leHBsb3Jlci9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tb2RhbC9maWxlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWlCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc5RixPQUFPLEVBQXVCLFdBQVcsRUFBMEMsd0JBQXdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEksT0FBTyxFQUFxQixxQkFBcUIsRUFBaUIsTUFBTSx5Q0FBeUMsQ0FBQztBQUVsSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7QUFDeEQsSUFBSSxJQUFJLENBQUE7QUFjUixNQUFNLE9BQU8sa0JBQWtCO0lBR25CO0lBQ0E7SUFDUTtJQUNUO0lBQ0M7SUFDQTtJQUNBO0lBUFYsWUFDVSxZQUErQyxFQUMvQyxPQUF1QixFQUNmLElBQWlCLEVBQzFCLGVBQStCLEVBQzlCLFdBQXdCLEVBQ3hCLFlBQWlDLEVBQ2pDLG9CQUF5QztRQU56QyxpQkFBWSxHQUFaLFlBQVksQ0FBbUM7UUFDL0MsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDZixTQUFJLEdBQUosSUFBSSxDQUFhO1FBQzFCLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDakMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQUVqRCxJQUFJ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LEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO3VHQWpSakMsa0JBQWtCOzJGQUFsQixrQkFBa0IsdVFBVGxCO1lBQ1QsYUFBYTtZQUNiLFdBQVc7WUFDWCxhQUFhO1lBQ2IsNERBQTREO1lBQzVELHVFQUF1RTtZQUN2RSxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1NBQ3JELCtDQ25CSCxrak9BcUhZOzsyRkRoR0Msa0JBQWtCO2tCQWI5QixTQUFTOytCQUNFLGVBQWUsYUFHZDt3QkFDVCxhQUFhO3dCQUNiLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYiw0REFBNEQ7d0JBQzVELHVFQUF1RTt3QkFDdkUsRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtxQkFDckQ7NFFBOEJVLGlCQUFpQjtzQkFEM0IsS0FBSztnQkFZSyxRQUFRO3NCQURsQixLQUFLO2dCQVdLLEtBQUs7c0JBRGYsS0FBSztnQkFNSyxPQUFPO3NCQURqQixLQUFLO2dCQVNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBcUhFLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFXSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgRmlsZVNlcnZpY2UgZnJvbSAnLi4vLi4vcHJveHkvZGlnbml0ZS9maWxlLWV4cGxvcmVyL2ZpbGVzJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbiwgQ29uZmlybWF0aW9uU2VydmljZSwgVG9hc3RlclNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XG5pbXBvcnQgeyBQYWdlZFJlc3VsdER0bywgQUJQLCBMaXN0U2VydmljZSwgUmVzdCwgUmVzdFNlcnZpY2UsIExvY2FsaXphdGlvblNlcnZpY2UsIExJU1RfUVVFUllfREVCT1VOQ0VfVElNRSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XG5pbXBvcnQgeyBGaWxlRGVzY3JpcHRvckR0bywgRmlsZURlc2NyaXB0b3JTZXJ2aWNlLCBHZXRGaWxlc0lucHV0IH0gZnJvbSAnLi4vLi4vcHJveHkvZGlnbml0ZS9maWxlLWV4cGxvcmVyL2ZpbGVzJztcbmltcG9ydCB7IEZpbGVBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmlsZS1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25UeXBlIH0gZnJvbSAnQHN3aW1sYW5lL25neC1kYXRhdGFibGUnO1xudmFyIHRoYXRcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZlLWZpbGUtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpbGUtbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgLy8gW1JlcXVpcmVkXVxuICAgIExpc3RTZXJ2aWNlLFxuICAgIC8vIFtPcHRpb25hbF1cbiAgICAvLyBQcm92aWRlIHRoaXMgdG9rZW4gaWYgeW91IHdhbnQgYSBkaWZmZXJlbnQgZGVib3VuY2UgdGltZS5cbiAgICAvLyBEZWZhdWx0IGlzIDMwMC4gQ2Fubm90IGJlIDAuIEFueSB2YWx1ZSBiZWxvdyAxMDAgaXMgbm90IHJlY29tbWVuZGVkLlxuICAgIHsgcHJvdmlkZTogTElTVF9RVUVSWV9ERUJPVU5DRV9USU1FLCB1c2VWYWx1ZTogNTAwIH0sXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRmlsZU1vZGFsQ29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9GaWxlU2VydmljZTogRmlsZVNlcnZpY2UuRmlsZURlc2NyaXB0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RlcjogVG9hc3RlclNlcnZpY2UsXG4gICAgcHVibGljIHJlYWRvbmx5IGxpc3Q6IExpc3RTZXJ2aWNlLFxuICAgIHB1YmxpYyBfRmlsZUFwaVNlcnZpY2U6IEZpbGVBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlybWF0aW9uOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgX0xvY2FsaXphdGlvblNlcnZpY2U6IExvY2FsaXphdGlvblNlcnZpY2UsXG4gICkge1xuICAgIHRoYXQgPSB0aGlzXG4gICAgXG4gIH1cblxuICBwcml2YXRlIF9GaWxlRGVzY3JpcHRvclNlcnZpY2U9aW5qZWN0KEZpbGVEZXNjcmlwdG9yU2VydmljZSlcbiAgLyoq6I635Y+W55uu5b2V6YWN572uICovXG4gIGdldEZpbGVzQ29uZmlndXJhdGlvbigpe1xuICAgIHRoaXMuX0ZpbGVEZXNjcmlwdG9yU2VydmljZS5nZXRGaWxlQ29udGFpbmVyQ29uZmlndXJhdGlvbih0aGlzLl9maWxlQ29udGFpbmVyTmFtZSkuc3Vic2NyaWJlKHJlcz0+e1xuICAgICAgdGhpcy5jcmVhdGVEaXJlY3RvcnlQZXJtaXNzaW9uTmFtZT1yZXMuY3JlYXRlRGlyZWN0b3J5UGVybWlzc2lvbk5hbWVcbiAgICB9KVxuICB9XG4gIC8qKuebruW9leeahOadg+mZkOWQjeensCAqL1xuICBjcmVhdGVEaXJlY3RvcnlQZXJtaXNzaW9uTmFtZTpzdHJpbmc9bnVsbFxuXG4gIC8qKuWbvueJh+WuueWZqCAqL1xuICBfZmlsZUNvbnRhaW5lck5hbWU6IHN0cmluZ1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGZpbGVDb250YWluZXJOYW1lKHY6IHN0cmluZykge1xuICAgIGlmICh2KSB7XG4gICAgICB0aGlzLl9maWxlQ29udGFpbmVyTmFtZSA9IHY7XG4gICAgICB0aGlzLmxvYWREYXRhKClcbiAgICAgXG4gICAgfVxuICB9XG5cbiAgLyoq5piv5ZCm5aSa6YCJICovXG4gIF9tdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbXVsdGlwbGUodjogYm9vbGVhbikge1xuICAgIHRoaXMuX211bHRpcGxlID0gdjtcbiAgICBpZiAodikgeyB9XG4gIH1cblxuICAvKirmlofku7blpKflsI/pmZDliLYgXG4qIEBwYXJhbSAxbWJcbiovXG4gIHNpemVMaW1pdDogbnVtYmVyID0gMTA0ODU3NlxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGxpbWl0KHY6IG51bWJlcikge1xuICAgIHRoaXMuc2l6ZUxpbWl0ID0gdjtcbiAgfVxuICAvKirniLbnu4Tku7bkvKDpgJLnmoTmqKHmgIHmoYbnirbmgIEgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB2aXNpYmxlKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLk1vZGFsT3BlbiA9IHY7XG4gICAgaWYgKHYpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoKVxuICAgIH1cbiAgfVxuXG4gIC8qKuaooeaAgeahhueKtuaAgeWbnuiwgyAqL1xuICBAT3V0cHV0KCkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuXG5cblxuICAvKirmqKHmgIHmoYYt54q25oCBLeaYr+WQpuaJk+W8gCAqL1xuICBNb2RhbE9wZW46IGJvb2xlYW4gPSBmYWxzZVxuXG4gIC8qKuaooeaAgeahhi3nuYHlv5nnirbmgIEt55So5LqO56Gu5a6a5qih5oCB55qE57mB5b+Z54q25oCB5piv5ZCm5Li655yfICovXG4gIE1vZGFsQnVzeTogYm9vbGVhbiA9IGZhbHNlXG5cblxuXG4gIC8qKuaooeaAgeahhi3nirbmgIHmlLnlj5jlm57osIMgKi9cbiAgTW9kYWxWaXNpYmxlQ2hhbmdlKGV2ZW50KSB7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZXZlbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cblxuICAvKirmqKHmgIHmoYbkv53lrZggKi9cbiAgbW9kYWxTYXZlKCkge1xuICAgIGxldCBzZWxlY3RlZFRhYmxlYXJyID0gdGhpcy5fRmlsZUFwaVNlcnZpY2UuZGVlcENsb25lKHRoaXMuc2VsZWN0ZWRUYWJsZSlcbiAgICB0aGlzLnNlbGVjdEZpbGVmbi5lbWl0KHNlbGVjdGVkVGFibGVhcnIpXG5cbiAgICB0aGlzLk1vZGFsVmlzaWJsZUNoYW5nZShmYWxzZSlcbiAgfVxuICAvKipkaWduaXRlLWZpbGUtbW9kYWwtdHJlZSAqL1xuICAvKirpgInmi6nnmoR0cmVl6IqC54K5ICovXG4gIF90aGVTZWxlY3RlZFRyZWVOb2RlOiBhbnkgPSAnJ1xuXG4gIC8qKuWIneWni+WMluaVsOaNriAqL1xuICBsb2FkRGF0YSgpIHtcbiAgICBpZiAodGhpcy5Nb2RhbE9wZW4gJiYgdGhpcy5fZmlsZUNvbnRhaW5lck5hbWUpIHtcbiAgICAgIHRoaXMuaG9va1RvUXVlcnkoKVxuICAgICAgdGhpcy5nZXRGaWxlc0NvbmZpZ3VyYXRpb24oKVxuICAgIH1cbiAgfVxuXG4gIC8qKnRyZWUt6IqC54K56YCJ5oupICovXG4gIF9ub2RlQ2xpY2soZXZlbnQpIHtcbiAgICB0aGlzLl90aGVTZWxlY3RlZFRyZWVOb2RlID0gZXZlbnRcbiAgICB0aGlzLmxpc3QuZ2V0KClcbiAgfVxuXG4gIC8qKuWbvueJh+S4iuS8oC3opoHkuIrkvKDlm77niYfnmoTnirbmgIHmlofku7bliJfooaggKi9cbiAgdXBsb2FkUGljdHVyZVN0YXR1c0xpc3Q6IGFueVtdID0gW11cblxuICAvKirlm77niYfkuIrkvKAt6I635Y+W5paH5Lu25L+h5oGv5pS55Y+YICovXG4gIGFzeW5jIGdldEZpbGVDaGFuZ2UoZXZlbnQpIHtcbiAgICBsZXQgZmlsZXMgPSBuZXcgQXJyYXkoLi4uZXZlbnQudGFyZ2V0LmZpbGVzKVxuICAgIHRoaXMudXBsb2FkUGljdHVyZVN0YXR1c0xpc3QgPSBmaWxlc1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgaWYgKGZpbGUuc2l6ZSA+IHRoaXMuc2l6ZUxpbWl0KSB7XG4gICAgICAgIHRoaXMuc2V0dXBsb2FkUGljdHVyZVN0YXR1cyhmaWxlLCAyKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMudXBsb2FkaW5nRmlsZShmaWxlKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXR1cGxvYWRQaWN0dXJlU3RhdHVzKGZpbGUsIDEpXG4gICAgICAgIHRoaXMubGlzdC5nZXQoKVxuICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICB0aGlzLnNldHVwbG9hZFBpY3R1cmVTdGF0dXMoZmlsZSwgMilcbiAgICAgIH0pOyAvLyDnrYnlvoXmr4/kuKrmlofku7bkuIrkvKDlrozmiJAgIFxuICAgIH1cbiAgICB0aGlzLmxpc3QuZ2V0KClcbiAgICBsZXQgaXNTdWJtaXQgPSAhdGhpcy51cGxvYWRQaWN0dXJlU3RhdHVzTGlzdC5zb21lKGVsID0+IGVsLnN0YXR1cyA9PSAyKTtcbiAgICBpZiAoaXNTdWJtaXQpIHtcbiAgICAgIC8vIHRoaXMudG9hc3Rlci5zdWNjZXNzKFwi5LiK5Lyg5a6M5oiQXCIpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudXBsb2FkUGljdHVyZVN0YXR1c0xpc3QgPSBbXVxuICAgICAgfSwgNjAwMClcbiAgICB9XG4gIH1cblxuICAvKirlm77niYfkuIrkvKAt6K6+572udXBsb2FkUGljdHVyZVN0YXR1c0xpc3TnmoTnirbmgIEgKi9cbiAgc2V0dXBsb2FkUGljdHVyZVN0YXR1cyhmaWxlLCB0eXBlKSB7XG4gICAgdGhpcy51cGxvYWRQaWN0dXJlU3RhdHVzTGlzdC5tYXAoZWwgPT4ge1xuICAgICAgaWYgKGVsID09IGZpbGUpIGVsLnN0YXR1cyA9IHR5cGVcbiAgICB9KVxuICB9XG5cblxuICAvKirlm77niYfkuIrkvKAt6YCS5b2S5oyJ6aG65bqP5LiK5LygICovXG4gIHVwbG9hZGluZ0ZpbGUoZmlsZSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0cykgPT4ge1xuICAgICAgbGV0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlLCBmaWxlLm5hbWUpO1xuICAgICAgdGhpcy5jcmVhdGVGaWxlKHtcbiAgICAgICAgZmlsZTogZm9ybURhdGEsXG4gICAgICAgIGNvbnRhaW5lck5hbWU6IHRoaXMuX2ZpbGVDb250YWluZXJOYW1lLFxuICAgICAgICBkaXJlY3RvcnlJZDogdGhpcy5fdGhlU2VsZWN0ZWRUcmVlTm9kZT8ua2V5IHx8ICcnLFxuICAgICAgICBlbnRpdHlJZDogJydcbiAgICAgIH0pLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgIHJlamVjdHMoZmFsc2UpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuXG4gIC8qKuaWh+S7tuihqOagvC3mlbDmja4qL1xuICBkYXRhOiBQYWdlZFJlc3VsdER0bzxGaWxlRGVzY3JpcHRvckR0bz4gPSB7XG4gICAgaXRlbXM6IFtdLFxuICAgIHRvdGFsQ291bnQ6IDAsXG4gIH07XG5cbiAgLyoq5paH5Lu26KGo5qC8LeadoeS7tiovXG4gIGZpbHRlcnMgPSB7fSBhcyBHZXRGaWxlc0lucHV0O1xuXG4gIC8qKuaWh+S7tuihqOagvC3ooajmoLzoh6rluKbpgInmi6nnsbvlnosgKi9cbiAgU2VsZWN0aW9uVHlwZSA9IFNlbGVjdGlvblR5cGU7XG5cbiAgLyoq5paH5Lu26KGo5qC8LemAieaLqeeahOihqOagvOaVsOaNrumhuSAqL1xuICBzZWxlY3RlZFRhYmxlID0gW11cblxuICAvKirlt7LpgInlrprnmoTmlofku7YgKi9cbiAgQElucHV0KCkgc2VsZWN0UGlja2VyRmlsZTogYW55W11cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy9DYWxsZWQgYmVmb3JlIGFueSBvdGhlciBsaWZlY3ljbGUgaG9vay4gVXNlIGl0IHRvIGluamVjdCBkZXBlbmRlbmNpZXMsIGJ1dCBhdm9pZCBhbnkgc2VyaW91cyB3b3JrIGhlcmUuXG4gICAgLy9BZGQgJyR7aW1wbGVtZW50cyBPbkNoYW5nZXN9JyB0byB0aGUgY2xhc3MuXG4gICAgdGhpcy5zZWxlY3RlZFRhYmxlID0gdGhpcy5fRmlsZUFwaVNlcnZpY2UuZGVlcENsb25lKHRoaXMuc2VsZWN0UGlja2VyRmlsZSlcbiAgfVxuICAvKirlvZPliY3pgInmi6nnmoR0YWJsZemhuSBpZCAqL1xuICBub3dTZWxlY3RJZDogYW55ID0gJydcblxuICAvKirpgInmi6nmlofku7blm57osIMgKi9cbiAgQE91dHB1dCgpIHNlbGVjdEZpbGVmbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KClcblxuICAvKirmlofku7booajmoLwt6I635Y+W6KGo5qC85pWw5o2uICovXG4gIGhvb2tUb1F1ZXJ5KCkge1xuICAgIGNvbnN0IGdldERhdGEgPSAocXVlcnk6IEFCUC5QYWdlUXVlcnlQYXJhbXMpID0+IHRoaXMuX0ZpbGVTZXJ2aWNlLmdldExpc3Qoe1xuICAgICAgLi4ucXVlcnksXG4gICAgICAuLi50aGlzLmZpbHRlcnMsXG4gICAgICBjb250YWluZXJOYW1lOiB0aGlzLl9maWxlQ29udGFpbmVyTmFtZSxcbiAgICAgIGRpcmVjdG9yeUlkOiB0aGlzLl90aGVTZWxlY3RlZFRyZWVOb2RlLmtleVxuICAgIH0pO1xuICAgIGNvbnN0IHNldERhdGEgPSAobGlzdDogUGFnZWRSZXN1bHREdG88RmlsZURlc2NyaXB0b3JEdG8+KSA9PiAodGhpcy5kYXRhID0gbGlzdCk7XG4gICAgdGhpcy5saXN0Lmhvb2tUb1F1ZXJ5KGdldERhdGEpLnN1YnNjcmliZShzZXREYXRhKTtcbiAgfVxuXG4gIC8qKuaWh+S7tuihqOagvC3mn6XnnIvmiYDmnInliIbnu4TnmoTmlofku7bmlbDmja4gKi9cbiAgbG9va0FsbEZpbGUoKSB7XG4gICAgdGhpcy5fdGhlU2VsZWN0ZWRUcmVlTm9kZSA9ICcnXG4gICAgdGhpcy5saXN0LmdldCgpXG4gIH1cblxuICAvKirpgInmi6nooajmoLzpobkgKi9cbiAgb25TZWxlY3RUYWJsZUl0ZW0oeyBzZWxlY3RlZCB9KSB7XG4gICAgdGhpcy5zZWxlY3RlZFRhYmxlID0gdGhpcy5fRmlsZUFwaVNlcnZpY2UuZGVlcENsb25lKHNlbGVjdGVkKVxuICAgIGxldCBzZWxlY3RlZFRhYmxlYXJyID0gdGhpcy5yZW1vdmVEdXBsaWNhdGVzQnlJZCh0aGlzLnNlbGVjdGVkVGFibGUpXG4gICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IHNlbGVjdGVkVGFibGVhcnIubGVuZ3RoKSB7XG4gICAgICBzZWxlY3RlZFRhYmxlYXJyID0gc2VsZWN0ZWRUYWJsZWFyci5maWx0ZXIoZWwgPT4gZWwuaWQgIT09IHRoaXMubm93U2VsZWN0SWQpXG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRUYWJsZSA9IHNlbGVjdGVkVGFibGVhcnJcbiAgfVxuXG4gIC8qKuWIoOmZpOaVsOe7hOS4remHjeWkjeeahOmhuSAqL1xuICByZW1vdmVEdXBsaWNhdGVzQnlJZChhcnJheSkge1xuICAgIGNvbnN0IHNlZW5JZHMgPSB7fTtcbiAgICByZXR1cm4gYXJyYXkuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgaWYgKCFzZWVuSWRzW2l0ZW0uaWRdKSB7XG4gICAgICAgIHNlZW5JZHNbaXRlbS5pZF0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKuS4gOS4quW4g+WwlG9y5Ye95pWw77yM5Y+v55So5LqO5qOA5p+l5piv5ZCm6KaB5qC55o2u5p2h5Lu26YCJ5oup54m55a6a6KGM44CCICovXG4gIHNlbGVjdENoZWNrID0gKHJvdywgY29sdW1uLCB2YWx1ZSkgPT4ge1xuICAgIHRoaXMubm93U2VsZWN0SWQgPSByb3cuaWRcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKuWIpOaWrXJvd+aYr+WQpumAieS4rSAqL1xuICBzZWxlY3RlZGNoZWNrYm94ID0gKGlkKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWJsZS5zb21lKGVsID0+IGVsLmlkID09IGlkKVxuICB9XG5cblxuXG4gIC8qKuWIoOmZpOWbvueJhyAqL1xuICBkZWxldGVGaWxlKGZpbGUpIHtcblxuICAgIHRoaXMuY29uZmlybWF0aW9uXG4gICAgICAud2FybignJywgeyBrZXk6ICcnLCBkZWZhdWx0VmFsdWU6IHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgQWJwVWk6Okl0ZW1XaWxsQmVEZWxldGVkTWVzc2FnZWApIH0pXG4gICAgICAuc3Vic2NyaWJlKChzdGF0dXM6IENvbmZpcm1hdGlvbi5TdGF0dXMpID0+IHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PSAnY29uZmlybScpIHtcbiAgICAgICAgICB0aGlzLl9GaWxlU2VydmljZS5kZWxldGUoZmlsZS5pZCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXIuc3VjY2Vzcyh0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYEFicFVpOjpTdWNjZXNzZnVsbHlEZWxldGVkYCkpO1xuICAgICAgICAgICAgdGhpcy5saXN0LmdldCgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKirlhbPpl63mlofku7bnirbmgIHlvLnnqpcgKi9cbiAgY2xvc2VGaWxlU3RhdHVzTW9kYWwoKSB7XG4gICAgdGhpcy51cGxvYWRQaWN0dXJlU3RhdHVzTGlzdCA9IFtdXG4gIH1cblxuICAvKirliJvlu7rlm77niYfnmoTmjqXlj6PvvIzku6PnkIbkuK3nmoRmaWxl57G75Z6L5LiN5Yy56YWN77yM5YiH5o2i5Li6YW5557G75Z6LICovXG4gIGNyZWF0ZUZpbGUgPSAoaW5wdXQ6IGFueSwgY29uZmlnPzogUGFydGlhbDxSZXN0LkNvbmZpZz4pID0+XG4gICAgdGhpcy5yZXN0U2VydmljZS5yZXF1ZXN0PGFueSwgRmlsZURlc2NyaXB0b3JEdG8+KHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgdXJsOiAnL2FwaS9maWxlLWV4cGxvcmVyL2ZpbGVzJyxcbiAgICAgIHBhcmFtczogeyBjb250YWluZXJOYW1lOiBpbnB1dC5jb250YWluZXJOYW1lLCBjZWxsTmFtZTogaW5wdXQuY2VsbE5hbWUsIGRpcmVjdG9yeUlkOiBpbnB1dC5kaXJlY3RvcnlJZCwgZW50aXR5SWQ6IGlucHV0LmVudGl0eUlkIH0sXG4gICAgICBib2R5OiBpbnB1dC5maWxlLFxuICAgIH0sXG4gICAgICB7IGFwaU5hbWU6ICdGaWxlRXhwbG9yZXInLCAuLi5jb25maWcgfSk7XG59XG4iLCI8YWJwLW1vZGFsIFsodmlzaWJsZSldPVwiTW9kYWxPcGVuXCIgKHZpc2libGVDaGFuZ2UpPVwiTW9kYWxWaXNpYmxlQ2hhbmdlKCRldmVudClcIlxuICBbb3B0aW9uc109XCJ7IHNpemU6ICd4bCcsIHNjcm9sbGFibGU6IGZhbHNlIH1cIj5cbiAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XG4gICAgPGgzPnt7J0ZpbGVFeHBsb3Jlcjo6RmlsZUV4cGxvcmVyJyB8IGFicExvY2FsaXphdGlvbn19PC9oMz5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgZmlsZS1leHBsb3Jlci1tb2RhbC1ib2R5IGZpbGUtbW9kYWxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiICpuZ0lmPVwiY3JlYXRlRGlyZWN0b3J5UGVybWlzc2lvbk5hbWVcIiAgc3R5bGU9XCJvdmVyZmxvdzogYXV0bzsgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjQwcHgpXCI+XG4gICAgICAgIDxmZS1maWxlLW1vZGFsLXRyZWUgW3RoZVNlbGVjdGVkVHJlZU5vZGVdPVwiX3RoZVNlbGVjdGVkVHJlZU5vZGVcIiAobm9kZUNsaWNrKT1cIl9ub2RlQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgW2ZpbGVDb250YWluZXJOYW1lXT1cIl9maWxlQ29udGFpbmVyTmFtZVwiPjwvZmUtZmlsZS1tb2RhbC10cmVlPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IFtjbGFzc109XCJjcmVhdGVEaXJlY3RvcnlQZXJtaXNzaW9uTmFtZT8nY29sLTknOidjb2wtMTInXCIgc3R5bGU9XCJoZWlnaHQ6IGNhbGMoMTAwdmggLSAyNDBweClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tbGlua1wiIHJvbGU9YnV0dG9uIHN0eWxlPVwiZmxleDogMlwiIChjbGljayk9XCJsb29rQWxsRmlsZSgpXCI+e3snRmlsZUV4cGxvcmVyOjpBbGxGaWxlcycgfCBhYnBMb2NhbGl6YXRpb259fTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBmb3JtLWZpbGVcIiBzdHlsZT1cImZsZXg6IDJcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgI2ZpbGVFZGl0IFttdWx0aXBsZV09XCJfbXVsdGlwbGVcIiBcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJnZXRGaWxlQ2hhbmdlKCRldmVudClcIiAvPlxuICAgICAgICAgICAgICA8IS0tIGFjY2VwdD1cIi5qcGcsLmpwZWcsLnBuZywuZ2lmLC53ZWJwXCIgLS0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxuZ3gtZGF0YXRhYmxlIGNsYXNzPVwibWF0ZXJpYWwgY29udGFpbmVyLWhlaWdodFwiIFtyb3dzXT1cImRhdGEuaXRlbXNcIiBbbGlzdF09XCJsaXN0XCIgY29sdW1uTW9kZT1cImZsZXhcIlxuICAgICAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiIFtoZWFkZXJIZWlnaHRdPVwiNTBcIiBbZm9vdGVySGVpZ2h0XT1cIjUwXCIgcm93SGVpZ2h0PVwiYXV0b1wiIFtzY3JvbGxiYXJWXT1cInRydWVcIlxuICAgICAgICAgICAgW3ZpcnR1YWxpemF0aW9uXT1cImZhbHNlXCIgW2V4dGVybmFsUGFnaW5nXT1cInRydWVcIiBbY291bnRdPVwiZGF0YS50b3RhbENvdW50XCIgW3NlbGVjdGVkXT1cInNlbGVjdGVkVGFibGVcIlxuICAgICAgICAgICAgW3NlbGVjdENoZWNrXT1cInNlbGVjdENoZWNrXCIgW3NlbGVjdGlvblR5cGVdPVwiX211bHRpcGxlP1NlbGVjdGlvblR5cGUubXVsdGlDbGljazpTZWxlY3Rpb25UeXBlLnNpbmdsZVwiIChzZWxlY3QpPVwib25TZWxlY3RUYWJsZUl0ZW0oJGV2ZW50KVwiPlxuICAgICAgICAgICAgPG5neC1kYXRhdGFibGUtY29sdW1uIFt3aWR0aF09XCI1MFwiIHByb3A9XCJpZFwiIFtzb3J0YWJsZV09XCJmYWxzZVwiIFtjYW5BdXRvUmVzaXplXT1cImZhbHNlXCIgW2RyYWdnYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtyZXNpemVhYmxlXT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ3gtZGF0YXRhYmxlLWhlYWRlci10ZW1wbGF0ZSBsZXQtdmFsdWU9XCJ2YWx1ZVwiIGxldC1hbGxSb3dzU2VsZWN0ZWQ9XCJhbGxSb3dzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIGxldC1zZWxlY3RGbj1cInNlbGVjdEZuXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIFtjaGVja2VkXT1cImFsbFJvd3NTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlbGVjdEZuKCFhbGxSb3dzU2VsZWN0ZWQpXCIgLz5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPVwidmFsdWVcIiBsZXQtaXNTZWxlY3RlZD1cImlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIGxldC1vbkNoZWNrYm94Q2hhbmdlRm49XCJvbkNoZWNrYm94Q2hhbmdlRm5cIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgW2NoZWNrZWRdPVwic2VsZWN0ZWRjaGVja2JveCh2YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlRm4oJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25neC1kYXRhdGFibGUtY29sdW1uPlxuICAgICAgICAgICAgPG5neC1kYXRhdGFibGUtY29sdW1uICAgW2ZsZXhHcm93XT1cIjJcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZmUtZmlsZS1wcmV2aWV3IFt3aWR0aF09XCInODBweCdcIiBbc3JjXT1cInJvdy51cmxcIiBbbmFtZV09XCJyb3cubmFtZVwiIFt0eXBlXT1cInJvdy5taW1lVHlwZVwiIFtwcmV2aWV3XT1cInRydWVcIj48L2ZlLWZpbGUtcHJldmlldz5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmd4LWRhdGF0YWJsZS1jb2x1bW4+XG4gICAgICAgICAgICA8bmd4LWRhdGF0YWJsZS1jb2x1bW4gW25hbWVdPVwiJ0ZpbGVFeHBsb3Jlcjo6RmlsZU5hbWUnIHwgYWJwTG9jYWxpemF0aW9uXCIgcHJvcD1cIm5hbWVcIiBbZmxleEdyb3ddPVwiNFwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT1cInZhbHVlXCIgbmd4LWRhdGF0YWJsZS1jZWxsLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIHt7IHZhbHVlIH19XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25neC1kYXRhdGFibGUtY29sdW1uPlxuICAgICAgICAgICAgPG5neC1kYXRhdGFibGUtY29sdW1uICBbbmFtZV09XCInRmlsZUV4cGxvcmVyOjpGaWxlU2l6ZScgfCBhYnBMb2NhbGl6YXRpb25cIiBwcm9wPVwic2l6ZVwiIFtmbGV4R3Jvd109XCIxLjVcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICB7eyBfRmlsZUFwaVNlcnZpY2UuZm9ybWF0RmlsZVNpemUodmFsdWUpIH19XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25neC1kYXRhdGFibGUtY29sdW1uPlxuICAgICAgICAgICAgPG5neC1kYXRhdGFibGUtY29sdW1uICBbbmFtZV09XCInRmlsZUV4cGxvcmVyOjpEaXJlY3RvcnknIHwgYWJwTG9jYWxpemF0aW9uXCIgcHJvcD1cImNlbGxOYW1lXCIgW2ZsZXhHcm93XT1cIjFcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICB7eyB2YWx1ZSB9fVxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWNvbHVtbj5cbiAgICAgICAgICAgIDxuZ3gtZGF0YXRhYmxlLWNvbHVtbiBbbmFtZV09XCInRmlsZUV4cGxvcmVyOjpDcmVhdGlvblRpbWUnIHwgYWJwTG9jYWxpemF0aW9uXCIgcHJvcD1cImNyZWF0aW9uVGltZVwiIFtmbGV4R3Jvd109XCIyXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPVwidmFsdWVcIiBuZ3gtZGF0YXRhYmxlLWNlbGwtdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAge3sgdmFsdWUgfCBkYXRlIDogJ1lZWVkvTU0vZGQgSEg6bW06cycgfX1cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmd4LWRhdGF0YWJsZS1jb2x1bW4+XG4gICAgICAgICAgICA8bmd4LWRhdGF0YWJsZS1jb2x1bW4gW2ZsZXhHcm93XT1cIjFcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQgcC0wXCIgKGNsaWNrLnN0b3ApPVwiZGVsZXRlRmlsZShyb3cpXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10cmFzaCB0ZXh0LXByaW1hcnkgcC0yXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWNvbHVtbj5cbiAgICAgICAgICA8L25neC1kYXRhdGFibGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwidXBsb2FkUGljdHVyZVN0YXR1c0xpc3QubGVuZ3RoID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1maXhlZCBib3R0b20tMCBlbmQtMCBzaGFkb3ctbGcgZmlsZS1zdGF0dXMtbW9kYWwgICBtLTVcIlxuICAgICAgICAgIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMTBweFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIHAtMVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gcC0wIHB5LTEgYm9yZGVyLWJvdHRvbVwiPlxuICAgICAgICAgICAgICA8ZGl2Pnt7J0ZpbGVFeHBsb3Jlcjo6VXBsb2FkRmlsZXMnIHwgYWJwTG9jYWxpemF0aW9ufX08L2Rpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2suc3RvcCk9XCJjbG9zZUZpbGVTdGF0dXNNb2RhbCgpXCI+PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGVcIj5cbiAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPnt7J0ZpbGVFeHBsb3Jlcjo6RmlsZU5hbWUnIHwgYWJwTG9jYWxpemF0aW9ufX08L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj57eydGaWxlRXhwbG9yZXI6OkZpbGVTaXplJyB8IGFicExvY2FsaXphdGlvbn19PC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+PC90aD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHVwbG9hZFBpY3R1cmVTdGF0dXNMaXN0OyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgaXRlbS5uYW1lIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS10ZXh0IHRleHQtZGFuZ2VyXCIgKm5nSWY9XCJpdGVtLnNpemUgPiBzaXplTGltaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3snRmlsZUV4cGxvcmVyOjpFeGNlZWRzTWF4aW11bVNpemUnIHwgYWJwTG9jYWxpemF0aW9uOl9GaWxlQXBpU2VydmljZS5mb3JtYXRGaWxlU2l6ZShzaXplTGltaXQpfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IGl0ZW0uZmlsZVNpemUgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiaXRlbS5zdGF0dXMgPT09IDFcIiBjbGFzcz1cImZhcyBmYS1jaGVjayB0ZXh0LXByaW1hcnlcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIml0ZW0uc3RhdHVzID09PSAyXCIgY2xhc3M9XCJmYXMgZmEtdGltZXMtY2lyY2xlIHRleHQtZGFuZ2VyXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjYWJwRm9vdGVyPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBhYnBDbG9zZT57eydBYnBVaTo6Q2xvc2UnIHwgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cbiAgICA8YWJwLWJ1dHRvbiBpY29uQ2xhc3M9XCJmYSBmYS1jaGVja1wiIChjbGljayk9XCJtb2RhbFNhdmUoKVwiPnt7J0FicFVpOjpTYXZlJyB8IGFicExvY2FsaXphdGlvbn19PC9hYnAtYnV0dG9uPlxuICA8L25nLXRlbXBsYXRlPlxuPC9hYnAtbW9kYWw+Il19
|
|
270
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9maWxlLWV4cGxvcmVyL3NyYy9saWIvY29tcG9uZW50cy9maWxlLW1vZGFsL2ZpbGUtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZmlsZS1leHBsb3Jlci9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tb2RhbC9maWxlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWlCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc5RixPQUFPLEVBQXVCLFdBQVcsRUFBMEMsd0JBQXdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEksT0FBTyxFQUFxQixxQkFBcUIsRUFBaUIsTUFBTSx5Q0FBeUMsQ0FBQztBQUVsSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7QUFDeEQsSUFBSSxJQUFJLENBQUE7QUFlUixNQUFNLE9BQU8sa0JBQWtCO0lBRTdCLFlBQ1UsWUFBK0MsRUFDL0MsT0FBdUIsRUFDZixJQUFpQixFQUMxQixlQUErQixFQUM5QixXQUF3QixFQUN4QixZQUFpQyxFQUNqQyxvQkFBeUM7UUFOekMsaUJBQVksR0FBWixZQUFZLENBQW1DO1FBQy9DLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ2YsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUMxQixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFNM0MsMkJBQXNCLEdBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUE7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QUNiLFdBQVc7WUFDWCxhQUFhO1lBQ2IsNERBQTREO1lBQzVELHVFQUF1RTtZQUN2RSxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1NBQ3JELCtDQ3BCSCxvL05Bb0hZOzsyRkQ5RkMsa0JBQWtCO2tCQWQ5QixTQUFTOytCQUVFLGVBQWUsYUFHZDt3QkFDVCxhQUFhO3dCQUNiLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYiw0REFBNEQ7d0JBQzVELHVFQUF1RTt3QkFDdkUsRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtxQkFDckQ7NFFBOEJVLGlCQUFpQjtzQkFEM0IsS0FBSztnQkFZSyxRQUFRO3NCQURsQixLQUFLO2dCQVdLLEtBQUs7c0JBRGYsS0FBSztnQkFNSyxPQUFPO3NCQURqQixLQUFLO2dCQVNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBcUhFLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFXSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgRmlsZVNlcnZpY2UgZnJvbSAnLi4vLi4vcHJveHkvZGlnbml0ZS9maWxlLWV4cGxvcmVyL2ZpbGVzJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbiwgQ29uZmlybWF0aW9uU2VydmljZSwgVG9hc3RlclNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XG5pbXBvcnQgeyBQYWdlZFJlc3VsdER0bywgQUJQLCBMaXN0U2VydmljZSwgUmVzdCwgUmVzdFNlcnZpY2UsIExvY2FsaXphdGlvblNlcnZpY2UsIExJU1RfUVVFUllfREVCT1VOQ0VfVElNRSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XG5pbXBvcnQgeyBGaWxlRGVzY3JpcHRvckR0bywgRmlsZURlc2NyaXB0b3JTZXJ2aWNlLCBHZXRGaWxlc0lucHV0IH0gZnJvbSAnLi4vLi4vcHJveHkvZGlnbml0ZS9maWxlLWV4cGxvcmVyL2ZpbGVzJztcbmltcG9ydCB7IEZpbGVBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmlsZS1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25UeXBlIH0gZnJvbSAnQHN3aW1sYW5lL25neC1kYXRhdGFibGUnO1xudmFyIHRoYXRcbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2ZlLWZpbGUtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpbGUtbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgLy8gW1JlcXVpcmVkXVxuICAgIExpc3RTZXJ2aWNlLFxuICAgIC8vIFtPcHRpb25hbF1cbiAgICAvLyBQcm92aWRlIHRoaXMgdG9rZW4gaWYgeW91IHdhbnQgYSBkaWZmZXJlbnQgZGVib3VuY2UgdGltZS5cbiAgICAvLyBEZWZhdWx0IGlzIDMwMC4gQ2Fubm90IGJlIDAuIEFueSB2YWx1ZSBiZWxvdyAxMDAgaXMgbm90IHJlY29tbWVuZGVkLlxuICAgIHsgcHJvdmlkZTogTElTVF9RVUVSWV9ERUJPVU5DRV9USU1FLCB1c2VWYWx1ZTogNTAwIH0sXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRmlsZU1vZGFsQ29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9GaWxlU2VydmljZTogRmlsZVNlcnZpY2UuRmlsZURlc2NyaXB0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RlcjogVG9hc3RlclNlcnZpY2UsXG4gICAgcHVibGljIHJlYWRvbmx5IGxpc3Q6IExpc3RTZXJ2aWNlLFxuICAgIHB1YmxpYyBfRmlsZUFwaVNlcnZpY2U6IEZpbGVBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlybWF0aW9uOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgX0xvY2FsaXphdGlvblNlcnZpY2U6IExvY2FsaXphdGlvblNlcnZpY2UsXG4gICkge1xuICAgIHRoYXQgPSB0aGlzXG4gICAgXG4gIH1cblxuICBwcml2YXRlIF9GaWxlRGVzY3JpcHRvclNlcnZpY2U9aW5qZWN0KEZpbGVEZXNjcmlwdG9yU2VydmljZSlcbiAgLyoq6I635Y+W55uu5b2V6YWN572uICovXG4gIGdldEZpbGVzQ29uZmlndXJhdGlvbigpe1xuICAgIHRoaXMuX0ZpbGVEZXNjcmlwdG9yU2VydmljZS5nZXRGaWxlQ29udGFpbmVyQ29uZmlndXJhdGlvbih0aGlzLl9maWxlQ29udGFpbmVyTmFtZSkuc3Vic2NyaWJlKHJlcz0+e1xuICAgICAgdGhpcy5jcmVhdGVEaXJlY3RvcnlQZXJtaXNzaW9uTmFtZT1yZXMuY3JlYXRlRGlyZWN0b3J5UGVybWlzc2lvbk5hbWVcbiAgICB9KVxuICB9XG4gIC8qKuebruW9leeahOadg+mZkOWQjeensCAqL1xuICBjcmVhdGVEaXJlY3RvcnlQZXJtaXNzaW9uTmFtZTpzdHJpbmc9bnVsbFxuXG4gIC8qKuWbvueJh+WuueWZqCAqL1xuICBfZmlsZUNvbnRhaW5lck5hbWU6IHN0cmluZ1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGZpbGVDb250YWluZXJOYW1lKHY6IHN0cmluZykge1xuICAgIGlmICh2KSB7XG4gICAgICB0aGlzLl9maWxlQ29udGFpbmVyTmFtZSA9IHY7XG4gICAgICB0aGlzLmxvYWREYXRhKClcbiAgICAgXG4gICAgfVxuICB9XG5cbiAgLyoq5piv5ZCm5aSa6YCJICovXG4gIF9tdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbXVsdGlwbGUodjogYm9vbGVhbikge1xuICAgIHRoaXMuX211bHRpcGxlID0gdjtcbiAgICBpZiAodikgeyB9XG4gIH1cblxuICAvKirmlofku7blpKflsI/pmZDliLYgXG4qIEBwYXJhbSAxbWJcbiovXG4gIHNpemVMaW1pdDogbnVtYmVyID0gMTA0ODU3NlxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGxpbWl0KHY6IG51bWJlcikge1xuICAgIHRoaXMuc2l6ZUxpbWl0ID0gdjtcbiAgfVxuICAvKirniLbnu4Tku7bkvKDpgJLnmoTmqKHmgIHmoYbnirbmgIEgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB2aXNpYmxlKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLk1vZGFsT3BlbiA9IHY7XG4gICAgaWYgKHYpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoKVxuICAgIH1cbiAgfVxuXG4gIC8qKuaooeaAgeahhueKtuaAgeWbnuiwgyAqL1xuICBAT3V0cHV0KCkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuXG5cblxuICAvKirmqKHmgIHmoYYt54q25oCBLeaYr+WQpuaJk+W8gCAqL1xuICBNb2RhbE9wZW46IGJvb2xlYW4gPSBmYWxzZVxuXG4gIC8qKuaooeaAgeahhi3nuYHlv5nnirbmgIEt55So5LqO56Gu5a6a5qih5oCB55qE57mB5b+Z54q25oCB5piv5ZCm5Li655yfICovXG4gIE1vZGFsQnVzeTogYm9vbGVhbiA9IGZhbHNlXG5cblxuXG4gIC8qKuaooeaAgeahhi3nirbmgIHmlLnlj5jlm57osIMgKi9cbiAgTW9kYWxWaXNpYmxlQ2hhbmdlKGV2ZW50KSB7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZXZlbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cblxuICAvKirmqKHmgIHmoYbkv53lrZggKi9cbiAgbW9kYWxTYXZlKCkge1xuICAgIGxldCBzZWxlY3RlZFRhYmxlYXJyID0gdGhpcy5fRmlsZUFwaVNlcnZpY2UuZGVlcENsb25lKHRoaXMuc2VsZWN0ZWRUYWJsZSlcbiAgICB0aGlzLnNlbGVjdEZpbGVmbi5lbWl0KHNlbGVjdGVkVGFibGVhcnIpXG5cbiAgICB0aGlzLk1vZGFsVmlzaWJsZUNoYW5nZShmYWxzZSlcbiAgfVxuICAvKipkaWduaXRlLWZpbGUtbW9kYWwtdHJlZSAqL1xuICAvKirpgInmi6nnmoR0cmVl6IqC54K5ICovXG4gIF90aGVTZWxlY3RlZFRyZWVOb2RlOiBhbnkgPSAnJ1xuXG4gIC8qKuWIneWni+WMluaVsOaNriAqL1xuICBsb2FkRGF0YSgpIHtcbiAgICBpZiAodGhpcy5Nb2RhbE9wZW4gJiYgdGhpcy5fZmlsZUNvbnRhaW5lck5hbWUpIHtcbiAgICAgIHRoaXMuaG9va1RvUXVlcnkoKVxuICAgICAgdGhpcy5nZXRGaWxlc0NvbmZpZ3VyYXRpb24oKVxuICAgIH1cbiAgfVxuXG4gIC8qKnRyZWUt6IqC54K56YCJ5oupICovXG4gIF9ub2RlQ2xpY2soZXZlbnQpIHtcbiAgICB0aGlzLl90aGVTZWxlY3RlZFRyZWVOb2RlID0gZXZlbnRcbiAgICB0aGlzLmxpc3QuZ2V0KClcbiAgfVxuXG4gIC8qKuWbvueJh+S4iuS8oC3opoHkuIrkvKDlm77niYfnmoTnirbmgIHmlofku7bliJfooaggKi9cbiAgdXBsb2FkUGljdHVyZVN0YXR1c0xpc3Q6IGFueVtdID0gW11cblxuICAvKirlm77niYfkuIrkvKAt6I635Y+W5paH5Lu25L+h5oGv5pS55Y+YICovXG4gIGFzeW5jIGdldEZpbGVDaGFuZ2UoZXZlbnQpIHtcbiAgICBsZXQgZmlsZXMgPSBuZXcgQXJyYXkoLi4uZXZlbnQudGFyZ2V0LmZpbGVzKVxuICAgIHRoaXMudXBsb2FkUGljdHVyZVN0YXR1c0xpc3QgPSBmaWxlc1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgaWYgKGZpbGUuc2l6ZSA+IHRoaXMuc2l6ZUxpbWl0KSB7XG4gICAgICAgIHRoaXMuc2V0dXBsb2FkUGljdHVyZVN0YXR1cyhmaWxlLCAyKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMudXBsb2FkaW5nRmlsZShmaWxlKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXR1cGxvYWRQaWN0dXJlU3RhdHVzKGZpbGUsIDEpXG4gICAgICAgIHRoaXMubGlzdC5nZXQoKVxuICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICB0aGlzLnNldHVwbG9hZFBpY3R1cmVTdGF0dXMoZmlsZSwgMilcbiAgICAgIH0pOyAvLyDnrYnlvoXmr4/kuKrmlofku7bkuIrkvKDlrozmiJAgIFxuICAgIH1cbiAgICB0aGlzLmxpc3QuZ2V0KClcbiAgICBsZXQgaXNTdWJtaXQgPSAhdGhpcy51cGxvYWRQaWN0dXJlU3RhdHVzTGlzdC5zb21lKGVsID0+IGVsLnN0YXR1cyA9PSAyKTtcbiAgICBpZiAoaXNTdWJtaXQpIHtcbiAgICAgIC8vIHRoaXMudG9hc3Rlci5zdWNjZXNzKFwi5LiK5Lyg5a6M5oiQXCIpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudXBsb2FkUGljdHVyZVN0YXR1c0xpc3QgPSBbXVxuICAgICAgfSwgNjAwMClcbiAgICB9XG4gIH1cblxuICAvKirlm77niYfkuIrkvKAt6K6+572udXBsb2FkUGljdHVyZVN0YXR1c0xpc3TnmoTnirbmgIEgKi9cbiAgc2V0dXBsb2FkUGljdHVyZVN0YXR1cyhmaWxlLCB0eXBlKSB7XG4gICAgdGhpcy51cGxvYWRQaWN0dXJlU3RhdHVzTGlzdC5tYXAoZWwgPT4ge1xuICAgICAgaWYgKGVsID09IGZpbGUpIGVsLnN0YXR1cyA9IHR5cGVcbiAgICB9KVxuICB9XG5cblxuICAvKirlm77niYfkuIrkvKAt6YCS5b2S5oyJ6aG65bqP5LiK5LygICovXG4gIHVwbG9hZGluZ0ZpbGUoZmlsZSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0cykgPT4ge1xuICAgICAgbGV0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlLCBmaWxlLm5hbWUpO1xuICAgICAgdGhpcy5jcmVhdGVGaWxlKHtcbiAgICAgICAgZmlsZTogZm9ybURhdGEsXG4gICAgICAgIGNvbnRhaW5lck5hbWU6IHRoaXMuX2ZpbGVDb250YWluZXJOYW1lLFxuICAgICAgICBkaXJlY3RvcnlJZDogdGhpcy5fdGhlU2VsZWN0ZWRUcmVlTm9kZT8ua2V5IHx8ICcnLFxuICAgICAgICBlbnRpdHlJZDogJydcbiAgICAgIH0pLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgIHJlamVjdHMoZmFsc2UpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuXG4gIC8qKuaWh+S7tuihqOagvC3mlbDmja4qL1xuICBkYXRhOiBQYWdlZFJlc3VsdER0bzxGaWxlRGVzY3JpcHRvckR0bz4gPSB7XG4gICAgaXRlbXM6IFtdLFxuICAgIHRvdGFsQ291bnQ6IDAsXG4gIH07XG5cbiAgLyoq5paH5Lu26KGo5qC8LeadoeS7tiovXG4gIGZpbHRlcnMgPSB7fSBhcyBHZXRGaWxlc0lucHV0O1xuXG4gIC8qKuaWh+S7tuihqOagvC3ooajmoLzoh6rluKbpgInmi6nnsbvlnosgKi9cbiAgU2VsZWN0aW9uVHlwZSA9IFNlbGVjdGlvblR5cGU7XG5cbiAgLyoq5paH5Lu26KGo5qC8LemAieaLqeeahOihqOagvOaVsOaNrumhuSAqL1xuICBzZWxlY3RlZFRhYmxlID0gW11cblxuICAvKirlt7LpgInlrprnmoTmlofku7YgKi9cbiAgQElucHV0KCkgc2VsZWN0UGlja2VyRmlsZTogYW55W11cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy9DYWxsZWQgYmVmb3JlIGFueSBvdGhlciBsaWZlY3ljbGUgaG9vay4gVXNlIGl0IHRvIGluamVjdCBkZXBlbmRlbmNpZXMsIGJ1dCBhdm9pZCBhbnkgc2VyaW91cyB3b3JrIGhlcmUuXG4gICAgLy9BZGQgJyR7aW1wbGVtZW50cyBPbkNoYW5nZXN9JyB0byB0aGUgY2xhc3MuXG4gICAgdGhpcy5zZWxlY3RlZFRhYmxlID0gdGhpcy5fRmlsZUFwaVNlcnZpY2UuZGVlcENsb25lKHRoaXMuc2VsZWN0UGlja2VyRmlsZSlcbiAgfVxuICAvKirlvZPliY3pgInmi6nnmoR0YWJsZemhuSBpZCAqL1xuICBub3dTZWxlY3RJZDogYW55ID0gJydcblxuICAvKirpgInmi6nmlofku7blm57osIMgKi9cbiAgQE91dHB1dCgpIHNlbGVjdEZpbGVmbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KClcblxuICAvKirmlofku7booajmoLwt6I635Y+W6KGo5qC85pWw5o2uICovXG4gIGhvb2tUb1F1ZXJ5KCkge1xuICAgIGNvbnN0IGdldERhdGEgPSAocXVlcnk6IEFCUC5QYWdlUXVlcnlQYXJhbXMpID0+IHRoaXMuX0ZpbGVTZXJ2aWNlLmdldExpc3Qoe1xuICAgICAgLi4ucXVlcnksXG4gICAgICAuLi50aGlzLmZpbHRlcnMsXG4gICAgICBjb250YWluZXJOYW1lOiB0aGlzLl9maWxlQ29udGFpbmVyTmFtZSxcbiAgICAgIGRpcmVjdG9yeUlkOiB0aGlzLl90aGVTZWxlY3RlZFRyZWVOb2RlLmtleVxuICAgIH0pO1xuICAgIGNvbnN0IHNldERhdGEgPSAobGlzdDogUGFnZWRSZXN1bHREdG88RmlsZURlc2NyaXB0b3JEdG8+KSA9PiAodGhpcy5kYXRhID0gbGlzdCk7XG4gICAgdGhpcy5saXN0Lmhvb2tUb1F1ZXJ5KGdldERhdGEpLnN1YnNjcmliZShzZXREYXRhKTtcbiAgfVxuXG4gIC8qKuaWh+S7tuihqOagvC3mn6XnnIvmiYDmnInliIbnu4TnmoTmlofku7bmlbDmja4gKi9cbiAgbG9va0FsbEZpbGUoKSB7XG4gICAgdGhpcy5fdGhlU2VsZWN0ZWRUcmVlTm9kZSA9ICcnXG4gICAgdGhpcy5saXN0LmdldCgpXG4gIH1cblxuICAvKirpgInmi6nooajmoLzpobkgKi9cbiAgb25TZWxlY3RUYWJsZUl0ZW0oeyBzZWxlY3RlZCB9KSB7XG4gICAgdGhpcy5zZWxlY3RlZFRhYmxlID0gdGhpcy5fRmlsZUFwaVNlcnZpY2UuZGVlcENsb25lKHNlbGVjdGVkKVxuICAgIGxldCBzZWxlY3RlZFRhYmxlYXJyID0gdGhpcy5yZW1vdmVEdXBsaWNhdGVzQnlJZCh0aGlzLnNlbGVjdGVkVGFibGUpXG4gICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IHNlbGVjdGVkVGFibGVhcnIubGVuZ3RoKSB7XG4gICAgICBzZWxlY3RlZFRhYmxlYXJyID0gc2VsZWN0ZWRUYWJsZWFyci5maWx0ZXIoZWwgPT4gZWwuaWQgIT09IHRoaXMubm93U2VsZWN0SWQpXG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRUYWJsZSA9IHNlbGVjdGVkVGFibGVhcnJcbiAgfVxuXG4gIC8qKuWIoOmZpOaVsOe7hOS4remHjeWkjeeahOmhuSAqL1xuICByZW1vdmVEdXBsaWNhdGVzQnlJZChhcnJheSkge1xuICAgIGNvbnN0IHNlZW5JZHMgPSB7fTtcbiAgICByZXR1cm4gYXJyYXkuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgaWYgKCFzZWVuSWRzW2l0ZW0uaWRdKSB7XG4gICAgICAgIHNlZW5JZHNbaXRlbS5pZF0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKuS4gOS4quW4g+WwlG9y5Ye95pWw77yM5Y+v55So5LqO5qOA5p+l5piv5ZCm6KaB5qC55o2u5p2h5Lu26YCJ5oup54m55a6a6KGM44CCICovXG4gIHNlbGVjdENoZWNrID0gKHJvdywgY29sdW1uLCB2YWx1ZSkgPT4ge1xuICAgIHRoaXMubm93U2VsZWN0SWQgPSByb3cuaWRcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKuWIpOaWrXJvd+aYr+WQpumAieS4rSAqL1xuICBzZWxlY3RlZGNoZWNrYm94ID0gKGlkKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWJsZS5zb21lKGVsID0+IGVsLmlkID09IGlkKVxuICB9XG5cblxuXG4gIC8qKuWIoOmZpOWbvueJhyAqL1xuICBkZWxldGVGaWxlKGZpbGUpIHtcblxuICAgIHRoaXMuY29uZmlybWF0aW9uXG4gICAgICAud2FybignJywgeyBrZXk6ICcnLCBkZWZhdWx0VmFsdWU6IHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgQWJwVWk6Okl0ZW1XaWxsQmVEZWxldGVkTWVzc2FnZWApIH0pXG4gICAgICAuc3Vic2NyaWJlKChzdGF0dXM6IENvbmZpcm1hdGlvbi5TdGF0dXMpID0+IHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PSAnY29uZmlybScpIHtcbiAgICAgICAgICB0aGlzLl9GaWxlU2VydmljZS5kZWxldGUoZmlsZS5pZCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXIuc3VjY2Vzcyh0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYEFicFVpOjpTdWNjZXNzZnVsbHlEZWxldGVkYCkpO1xuICAgICAgICAgICAgdGhpcy5saXN0LmdldCgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKirlhbPpl63mlofku7bnirbmgIHlvLnnqpcgKi9cbiAgY2xvc2VGaWxlU3RhdHVzTW9kYWwoKSB7XG4gICAgdGhpcy51cGxvYWRQaWN0dXJlU3RhdHVzTGlzdCA9IFtdXG4gIH1cblxuICAvKirliJvlu7rlm77niYfnmoTmjqXlj6PvvIzku6PnkIbkuK3nmoRmaWxl57G75Z6L5LiN5Yy56YWN77yM5YiH5o2i5Li6YW5557G75Z6LICovXG4gIGNyZWF0ZUZpbGUgPSAoaW5wdXQ6IGFueSwgY29uZmlnPzogUGFydGlhbDxSZXN0LkNvbmZpZz4pID0+XG4gICAgdGhpcy5yZXN0U2VydmljZS5yZXF1ZXN0PGFueSwgRmlsZURlc2NyaXB0b3JEdG8+KHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgdXJsOiAnL2FwaS9maWxlLWV4cGxvcmVyL2ZpbGVzJyxcbiAgICAgIHBhcmFtczogeyBjb250YWluZXJOYW1lOiBpbnB1dC5jb250YWluZXJOYW1lLCBjZWxsTmFtZTogaW5wdXQuY2VsbE5hbWUsIGRpcmVjdG9yeUlkOiBpbnB1dC5kaXJlY3RvcnlJZCwgZW50aXR5SWQ6IGlucHV0LmVudGl0eUlkIH0sXG4gICAgICBib2R5OiBpbnB1dC5maWxlLFxuICAgIH0sXG4gICAgICB7IGFwaU5hbWU6ICdGaWxlRXhwbG9yZXInLCAuLi5jb25maWcgfSk7XG59XG4iLCI8YWJwLW1vZGFsIFsodmlzaWJsZSldPVwiTW9kYWxPcGVuXCIgKHZpc2libGVDaGFuZ2UpPVwiTW9kYWxWaXNpYmxlQ2hhbmdlKCRldmVudClcIlxuICBbb3B0aW9uc109XCJ7IHNpemU6ICd4bCcsIHNjcm9sbGFibGU6IGZhbHNlIH1cIj5cbiAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XG4gICAgPGgzPnt7J0ZpbGVFeHBsb3Jlcjo6RmlsZUV4cGxvcmVyJyB8IGFicExvY2FsaXphdGlvbn19PC9oMz5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgZmlsZS1leHBsb3Jlci1tb2RhbC1ib2R5IGZpbGUtbW9kYWxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiICpuZ0lmPVwiY3JlYXRlRGlyZWN0b3J5UGVybWlzc2lvbk5hbWVcIiAgc3R5bGU9XCJvdmVyZmxvdzogYXV0bzsgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjQwcHgpXCI+XG4gICAgICAgIDxmZS1maWxlLW1vZGFsLXRyZWUgW3RoZVNlbGVjdGVkVHJlZU5vZGVdPVwiX3RoZVNlbGVjdGVkVHJlZU5vZGVcIiAobm9kZUNsaWNrKT1cIl9ub2RlQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgW2ZpbGVDb250YWluZXJOYW1lXT1cIl9maWxlQ29udGFpbmVyTmFtZVwiPjwvZmUtZmlsZS1tb2RhbC10cmVlPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IFtjbGFzc109XCJjcmVhdGVEaXJlY3RvcnlQZXJtaXNzaW9uTmFtZT8nY29sLTknOidjb2wtMTInXCIgc3R5bGU9XCJoZWlnaHQ6IGNhbGMoMTAwdmggLSAyNDBweClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tbGlua1wiIHJvbGU9YnV0dG9uIHN0eWxlPVwiZmxleDogMlwiIChjbGljayk9XCJsb29rQWxsRmlsZSgpXCI+e3snRmlsZUV4cGxvcmVyOjpBbGxGaWxlcycgfCBhYnBMb2NhbGl6YXRpb259fTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBmb3JtLWZpbGVcIiBzdHlsZT1cImZsZXg6IDJcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgI2ZpbGVFZGl0IFttdWx0aXBsZV09XCJfbXVsdGlwbGVcIiBcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJnZXRGaWxlQ2hhbmdlKCRldmVudClcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8bmd4LWRhdGF0YWJsZSBjbGFzcz1cIm1hdGVyaWFsIGNvbnRhaW5lci1oZWlnaHRcIiBbcm93c109XCJkYXRhLml0ZW1zXCIgW2xpc3RdPVwibGlzdFwiIGNvbHVtbk1vZGU9XCJmbGV4XCJcbiAgICAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbaGVhZGVySGVpZ2h0XT1cIjUwXCIgW2Zvb3RlckhlaWdodF09XCI1MFwiIHJvd0hlaWdodD1cImF1dG9cIiBbc2Nyb2xsYmFyVl09XCJ0cnVlXCJcbiAgICAgICAgICAgIFt2aXJ0dWFsaXphdGlvbl09XCJmYWxzZVwiIFtleHRlcm5hbFBhZ2luZ109XCJ0cnVlXCIgW2NvdW50XT1cImRhdGEudG90YWxDb3VudFwiIFtzZWxlY3RlZF09XCJzZWxlY3RlZFRhYmxlXCJcbiAgICAgICAgICAgIFtzZWxlY3RDaGVja109XCJzZWxlY3RDaGVja1wiIFtzZWxlY3Rpb25UeXBlXT1cIl9tdWx0aXBsZT9TZWxlY3Rpb25UeXBlLm11bHRpQ2xpY2s6U2VsZWN0aW9uVHlwZS5zaW5nbGVcIiAoc2VsZWN0KT1cIm9uU2VsZWN0VGFibGVJdGVtKCRldmVudClcIj5cbiAgICAgICAgICAgIDxuZ3gtZGF0YXRhYmxlLWNvbHVtbiBbd2lkdGhdPVwiNTBcIiBwcm9wPVwiaWRcIiBbc29ydGFibGVdPVwiZmFsc2VcIiBbY2FuQXV0b1Jlc2l6ZV09XCJmYWxzZVwiIFtkcmFnZ2FibGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcmVzaXplYWJsZV09XCJmYWxzZVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmd4LWRhdGF0YWJsZS1oZWFkZXItdGVtcGxhdGUgbGV0LXZhbHVlPVwidmFsdWVcIiBsZXQtYWxsUm93c1NlbGVjdGVkPVwiYWxsUm93c1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICBsZXQtc2VsZWN0Rm49XCJzZWxlY3RGblwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBbY2hlY2tlZF09XCJhbGxSb3dzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RGbighYWxsUm93c1NlbGVjdGVkKVwiIC8+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ3gtZGF0YXRhYmxlLWNlbGwtdGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT1cInZhbHVlXCIgbGV0LWlzU2VsZWN0ZWQ9XCJpc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICBsZXQtb25DaGVja2JveENoYW5nZUZuPVwib25DaGVja2JveENoYW5nZUZuXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIFtjaGVja2VkXT1cInNlbGVjdGVkY2hlY2tib3godmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveENoYW5nZUZuKCRldmVudClcIiAvPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWNvbHVtbj5cbiAgICAgICAgICAgIDxuZ3gtZGF0YXRhYmxlLWNvbHVtbiAgIFtmbGV4R3Jvd109XCIyXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPVwidmFsdWVcIiBuZ3gtZGF0YXRhYmxlLWNlbGwtdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPGZlLWZpbGUtcHJldmlldyBbd2lkdGhdPVwiJzgwcHgnXCIgW3NyY109XCJyb3cudXJsXCIgW25hbWVdPVwicm93Lm5hbWVcIiBbdHlwZV09XCJyb3cubWltZVR5cGVcIiBbcHJldmlld109XCJ0cnVlXCI+PC9mZS1maWxlLXByZXZpZXc+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25neC1kYXRhdGFibGUtY29sdW1uPlxuICAgICAgICAgICAgPG5neC1kYXRhdGFibGUtY29sdW1uIFtuYW1lXT1cIidGaWxlRXhwbG9yZXI6OkZpbGVOYW1lJyB8IGFicExvY2FsaXphdGlvblwiIHByb3A9XCJuYW1lXCIgW2ZsZXhHcm93XT1cIjRcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICB7eyB2YWx1ZSB9fVxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWNvbHVtbj5cbiAgICAgICAgICAgIDxuZ3gtZGF0YXRhYmxlLWNvbHVtbiAgW25hbWVdPVwiJ0ZpbGVFeHBsb3Jlcjo6RmlsZVNpemUnIHwgYWJwTG9jYWxpemF0aW9uXCIgcHJvcD1cInNpemVcIiBbZmxleEdyb3ddPVwiMS41XCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPVwidmFsdWVcIiBuZ3gtZGF0YXRhYmxlLWNlbGwtdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAge3sgX0ZpbGVBcGlTZXJ2aWNlLmZvcm1hdEZpbGVTaXplKHZhbHVlKSB9fVxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWNvbHVtbj5cbiAgICAgICAgICAgIDxuZ3gtZGF0YXRhYmxlLWNvbHVtbiAgW25hbWVdPVwiJ0ZpbGVFeHBsb3Jlcjo6RGlyZWN0b3J5JyB8IGFicExvY2FsaXphdGlvblwiIHByb3A9XCJjZWxsTmFtZVwiIFtmbGV4R3Jvd109XCIxXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPVwidmFsdWVcIiBuZ3gtZGF0YXRhYmxlLWNlbGwtdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAge3sgdmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmd4LWRhdGF0YWJsZS1jb2x1bW4+XG4gICAgICAgICAgICA8bmd4LWRhdGF0YWJsZS1jb2x1bW4gW25hbWVdPVwiJ0ZpbGVFeHBsb3Jlcjo6Q3JlYXRpb25UaW1lJyB8IGFicExvY2FsaXphdGlvblwiIHByb3A9XCJjcmVhdGlvblRpbWVcIiBbZmxleEdyb3ddPVwiMlwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT1cInZhbHVlXCIgbmd4LWRhdGF0YWJsZS1jZWxsLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIHt7IHZhbHVlIHwgZGF0ZSA6ICdZWVlZL01NL2RkIEhIOm1tOnMnIH19XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25neC1kYXRhdGFibGUtY29sdW1uPlxuICAgICAgICAgICAgPG5neC1kYXRhdGFibGUtY29sdW1uIFtmbGV4R3Jvd109XCIxXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPVwidmFsdWVcIiBuZ3gtZGF0YXRhYmxlLWNlbGwtdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0IHAtMFwiIChjbGljay5zdG9wKT1cImRlbGV0ZUZpbGUocm93KVwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2ggdGV4dC1wcmltYXJ5IHAtMlwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmd4LWRhdGF0YWJsZS1jb2x1bW4+XG4gICAgICAgICAgPC9uZ3gtZGF0YXRhYmxlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInVwbG9hZFBpY3R1cmVTdGF0dXNMaXN0Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tZml4ZWQgYm90dG9tLTAgZW5kLTAgc2hhZG93LWxnIGZpbGUtc3RhdHVzLW1vZGFsICAgbS01XCJcbiAgICAgICAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDEwcHhcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBwLTFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHAtMCBweS0xIGJvcmRlci1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdj57eydGaWxlRXhwbG9yZXI6OlVwbG9hZEZpbGVzJyB8IGFicExvY2FsaXphdGlvbn19PC9kaXY+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrLnN0b3ApPVwiY2xvc2VGaWxlU3RhdHVzTW9kYWwoKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlXCI+XG4gICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj57eydGaWxlRXhwbG9yZXI6OkZpbGVOYW1lJyB8IGFicExvY2FsaXphdGlvbn19PC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+e3snRmlsZUV4cGxvcmVyOjpGaWxlU2l6ZScgfCBhYnBMb2NhbGl6YXRpb259fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPjwvdGg+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiB1cGxvYWRQaWN0dXJlU3RhdHVzTGlzdDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IGl0ZW0ubmFtZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LWRhbmdlclwiICpuZ0lmPVwiaXRlbS5zaXplID4gc2l6ZUxpbWl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0ZpbGVFeHBsb3Jlcjo6RXhjZWVkc01heGltdW1TaXplJyB8IGFicExvY2FsaXphdGlvbjpfRmlsZUFwaVNlcnZpY2UuZm9ybWF0RmlsZVNpemUoc2l6ZUxpbWl0KX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBpdGVtLmZpbGVTaXplIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIml0ZW0uc3RhdHVzID09PSAxXCIgY2xhc3M9XCJmYXMgZmEtY2hlY2sgdGV4dC1wcmltYXJ5XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJpdGVtLnN0YXR1cyA9PT0gMlwiIGNsYXNzPVwiZmFzIGZhLXRpbWVzLWNpcmNsZSB0ZXh0LWRhbmdlclwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgYWJwQ2xvc2U+e3snQWJwVWk6OkNsb3NlJyB8IGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XG4gICAgPGFicC1idXR0b24gaWNvbkNsYXNzPVwiZmEgZmEtY2hlY2tcIiAoY2xpY2spPVwibW9kYWxTYXZlKClcIj57eydBYnBVaTo6U2F2ZScgfCBhYnBMb2NhbGl6YXRpb259fTwvYWJwLWJ1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvYWJwLW1vZGFsPiJdfQ==
|