uitec-ng-upload-order 1.0.14 → 1.0.16
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/esm2020/lib/ui-upload-order.component.mjs +111 -69
- package/fesm2015/uitec-ng-upload-order.mjs +108 -68
- package/fesm2015/uitec-ng-upload-order.mjs.map +1 -1
- package/fesm2020/uitec-ng-upload-order.mjs +108 -66
- package/fesm2020/uitec-ng-upload-order.mjs.map +1 -1
- package/lib/ui-upload-order.component.d.ts +7 -5
- package/package.json +1 -1
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output, ViewChild } from "@angular/core";
|
|
2
|
-
import { FilePondComponent
|
|
3
|
-
import { Lightbox } from
|
|
2
|
+
import { FilePondComponent } from "ngx-filepond";
|
|
3
|
+
import { Lightbox } from "ngx-lightbox";
|
|
4
4
|
import { Observable } from "rxjs";
|
|
5
5
|
import { UntypedFormGroup } from "@angular/forms";
|
|
6
|
+
import { HttpClient, HttpEventType } from "@angular/common/http";
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
import * as i1 from "ngx-lightbox";
|
|
8
|
-
import * as i2 from "@angular/common";
|
|
9
|
-
import * as i3 from "
|
|
9
|
+
import * as i2 from "@angular/common/http";
|
|
10
|
+
import * as i3 from "@angular/common";
|
|
11
|
+
import * as i4 from "ngx-filepond";
|
|
10
12
|
export class UiUploadOrderComponent {
|
|
11
|
-
constructor(_lightbox) {
|
|
13
|
+
constructor(_lightbox, http) {
|
|
12
14
|
this._lightbox = _lightbox;
|
|
15
|
+
this.http = http;
|
|
13
16
|
this.multiple = true;
|
|
14
17
|
this.reorder = true;
|
|
15
|
-
this.maxFiles =
|
|
18
|
+
this.maxFiles = 10;
|
|
16
19
|
this.lightBox = true;
|
|
17
20
|
this.instantUpload = true;
|
|
18
21
|
this.onRemove = new EventEmitter();
|
|
@@ -25,6 +28,7 @@ export class UiUploadOrderComponent {
|
|
|
25
28
|
this.onSelected = new EventEmitter();
|
|
26
29
|
this.noFilesAdded = new EventEmitter();
|
|
27
30
|
this.onUploadError = new EventEmitter();
|
|
31
|
+
// public pondFiles: FilePondOptions["files"] = [];
|
|
28
32
|
this.pondFiles = [];
|
|
29
33
|
this.album = [];
|
|
30
34
|
}
|
|
@@ -34,7 +38,7 @@ export class UiUploadOrderComponent {
|
|
|
34
38
|
labelIdle: 'Arraste seus arquivos ou <span class="filepond--label-action">clique aqui</span> para selecionar.',
|
|
35
39
|
allowReorder: this.reorder,
|
|
36
40
|
maxFiles: this.maxFiles,
|
|
37
|
-
acceptedFileTypes: [
|
|
41
|
+
acceptedFileTypes: ["image/*"],
|
|
38
42
|
instantUpload: this.instantUpload,
|
|
39
43
|
allowProcess: this.instantUpload,
|
|
40
44
|
dropValidation: true,
|
|
@@ -45,71 +49,106 @@ export class UiUploadOrderComponent {
|
|
|
45
49
|
<g mask="url(#mask0_37067_34146)">
|
|
46
50
|
<path d="M4.43 13.5263C4.09228 13.5263 3.80317 13.406 3.56267 13.1655C3.32217 12.925 3.20193 12.6359 3.20193 12.2982V4.31574C3.02795 4.31574 2.88212 4.25689 2.76443 4.1392C2.64674 4.02151 2.58789 3.87568 2.58789 3.7017C2.58789 3.52773 2.64674 3.38189 2.76443 3.2642C2.88212 3.14651 3.02795 3.08767 3.20193 3.08767H5.65807C5.65807 2.91369 5.71691 2.76786 5.8346 2.65017C5.95229 2.53248 6.09812 2.47363 6.2721 2.47363H8.72824C8.90222 2.47363 9.04805 2.53248 9.16574 2.65017C9.28343 2.76786 9.34228 2.91369 9.34228 3.08767H11.7984C11.9724 3.08767 12.1182 3.14651 12.2359 3.2642C12.3536 3.38189 12.4125 3.52773 12.4125 3.7017C12.4125 3.87568 12.3536 4.02151 12.2359 4.1392C12.1182 4.25689 11.9724 4.31574 11.7984 4.31574V12.2982C11.7984 12.6359 11.6782 12.925 11.4377 13.1655C11.1972 13.406 10.9081 13.5263 10.5703 13.5263H4.43ZM4.43 4.31574V12.2982H10.5703V4.31574H4.43ZM7.50017 9.16662L8.66684 10.3333C8.78965 10.4459 8.93548 10.5021 9.10434 10.5021C9.2732 10.5021 9.41391 10.4459 9.52649 10.3333C9.64929 10.2105 9.7107 10.0646 9.7107 9.89578C9.7107 9.72692 9.64929 9.58621 9.52649 9.47363L8.35982 8.30697L9.52649 7.1403C9.64929 7.01749 9.7107 6.87166 9.7107 6.7028C9.7107 6.53394 9.64929 6.39322 9.52649 6.28065C9.41391 6.15784 9.2732 6.09644 9.10434 6.09644C8.93548 6.09644 8.78965 6.15784 8.66684 6.28065L7.50017 7.44732L6.3335 6.28065C6.22093 6.15784 6.08022 6.09644 5.91136 6.09644C5.7425 6.09644 5.59666 6.15784 5.47386 6.28065C5.36128 6.39322 5.305 6.53394 5.305 6.7028C5.305 6.87166 5.36128 7.01749 5.47386 7.1403L6.64052 8.30697L5.47386 9.47363C5.36128 9.58621 5.305 9.72692 5.305 9.89578C5.305 10.0646 5.36128 10.2105 5.47386 10.3333C5.59666 10.4459 5.7425 10.5021 5.91136 10.5021C6.08022 10.5021 6.22093 10.4459 6.3335 10.3333L7.50017 9.16662Z" fill="white"/>
|
|
47
51
|
</g></svg>`,
|
|
48
|
-
styleButtonRemoveItemPosition:
|
|
49
|
-
imageResizeMode:
|
|
50
|
-
styleItemPanelAspectRatio:
|
|
51
|
-
itemInsertLocation:
|
|
52
|
+
styleButtonRemoveItemPosition: "right",
|
|
53
|
+
imageResizeMode: "contain",
|
|
54
|
+
styleItemPanelAspectRatio: "0.75",
|
|
55
|
+
itemInsertLocation: "after",
|
|
52
56
|
credits: false,
|
|
53
57
|
server: {
|
|
54
|
-
process: (fieldName, file, metadata, load, error, progress, abort
|
|
55
|
-
// fieldName is the name of the input field
|
|
56
|
-
// file is the actual file object to send
|
|
58
|
+
process: (fieldName, file, metadata, load, error, progress, abort) => {
|
|
57
59
|
const formData = new FormData();
|
|
58
60
|
formData.append(fieldName, file, file.name);
|
|
59
|
-
const request =
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
61
|
+
const request = this.http
|
|
62
|
+
.post(this.url, formData, {
|
|
63
|
+
reportProgress: true,
|
|
64
|
+
observe: "events",
|
|
65
|
+
})
|
|
66
|
+
.subscribe({
|
|
67
|
+
next: (event) => {
|
|
68
|
+
if (event.type === HttpEventType.UploadProgress) {
|
|
69
|
+
progress(event.lengthComputable, event.loaded, event.total);
|
|
70
|
+
}
|
|
71
|
+
else if (event.type === HttpEventType.Response) {
|
|
72
|
+
try {
|
|
73
|
+
const response = event.body;
|
|
74
|
+
let serverId;
|
|
75
|
+
if (Array.isArray(response) && response.length > 0) {
|
|
76
|
+
serverId = response[0];
|
|
77
|
+
}
|
|
78
|
+
else if (response && (response.serverId || response.id)) {
|
|
79
|
+
serverId = response.serverId || response.id;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
error("Resposta do servidor inválida: serverId não encontrado");
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
load(serverId);
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
console.error("Erro ao processar resposta do servidor:", e);
|
|
89
|
+
error("Erro ao processar resposta do servidor");
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
error: (err) => {
|
|
94
|
+
error("Erro no upload: " + err.message);
|
|
95
|
+
},
|
|
96
|
+
complete: () => {
|
|
97
|
+
request.unsubscribe();
|
|
98
|
+
},
|
|
99
|
+
});
|
|
81
100
|
return {
|
|
82
101
|
abort: () => {
|
|
83
|
-
|
|
84
|
-
request.abort();
|
|
85
|
-
// Let FilePond know the request has been cancelled
|
|
102
|
+
request.unsubscribe();
|
|
86
103
|
abort();
|
|
87
104
|
},
|
|
88
105
|
};
|
|
89
106
|
},
|
|
90
107
|
load: (source, load, error, progress, abort, headers) => {
|
|
91
|
-
|
|
92
|
-
fetch(myRequest)
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
108
|
+
const myRequest = new Request(source);
|
|
109
|
+
fetch(myRequest)
|
|
110
|
+
.then((response) => {
|
|
111
|
+
if (!response.ok) {
|
|
112
|
+
console.error("Erro ao carregar imagem:", response.status);
|
|
113
|
+
error("Erro ao carregar a imagem");
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
response.arrayBuffer().then((buffer) => {
|
|
117
|
+
const contentType = response.headers.get("content-type");
|
|
118
|
+
const fileExtension = source.split(".").pop();
|
|
98
119
|
const mimeTypeMap = {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
// Add other supported image types as needed
|
|
120
|
+
webp: "image/webp",
|
|
121
|
+
jpg: "image/jpeg",
|
|
122
|
+
jpeg: "image/jpeg",
|
|
123
|
+
png: "image/png",
|
|
104
124
|
};
|
|
105
|
-
const fileType = mimeTypeMap[fileExtension] || contentType ||
|
|
125
|
+
const fileType = mimeTypeMap[fileExtension] || contentType || "application/octet-stream";
|
|
106
126
|
const myBlob = new Blob([buffer], { type: fileType });
|
|
107
127
|
load(myBlob);
|
|
108
128
|
});
|
|
109
|
-
})
|
|
110
|
-
|
|
129
|
+
})
|
|
130
|
+
.catch((err) => {
|
|
131
|
+
console.error("Erro no server.load:", err);
|
|
132
|
+
error("Erro ao carregar a imagem");
|
|
111
133
|
});
|
|
112
134
|
},
|
|
135
|
+
remove: (source, load, error) => {
|
|
136
|
+
if (!source) {
|
|
137
|
+
error("Nome do arquivo não fornecido");
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const fileName = source.split("/").pop();
|
|
141
|
+
load();
|
|
142
|
+
this.onRemove.emit(fileName);
|
|
143
|
+
},
|
|
144
|
+
revert: (uniqueFileId, load, error) => {
|
|
145
|
+
if (!uniqueFileId) {
|
|
146
|
+
error("Nome do arquivo não fornecido");
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
load();
|
|
150
|
+
this.onRemove.emit(uniqueFileId);
|
|
151
|
+
},
|
|
113
152
|
},
|
|
114
153
|
};
|
|
115
154
|
if (!this.instantUpload) {
|
|
@@ -122,7 +161,7 @@ export class UiUploadOrderComponent {
|
|
|
122
161
|
return {
|
|
123
162
|
source: item,
|
|
124
163
|
options: {
|
|
125
|
-
type:
|
|
164
|
+
type: "local",
|
|
126
165
|
},
|
|
127
166
|
};
|
|
128
167
|
});
|
|
@@ -141,15 +180,14 @@ export class UiUploadOrderComponent {
|
|
|
141
180
|
this.pond = event.pond;
|
|
142
181
|
}
|
|
143
182
|
pondHandleAddFile(event) {
|
|
144
|
-
|
|
145
|
-
this.onAdded.emit(formattedName);
|
|
183
|
+
this.onAdded.emit(event);
|
|
146
184
|
}
|
|
147
185
|
//Só funciona quando não tem arquivos iniciais
|
|
148
186
|
pondHandleAllFilesAdded(event) {
|
|
149
187
|
const filesList = [];
|
|
150
188
|
const files = event.pond.getFiles();
|
|
151
189
|
files.forEach((file) => {
|
|
152
|
-
let formattedName = file.serverId?.replace(/["\[\]]/g,
|
|
190
|
+
let formattedName = file.serverId?.replace(/["\[\]]/g, "");
|
|
153
191
|
filesList.push(formattedName);
|
|
154
192
|
});
|
|
155
193
|
this.onAllAdded.emit(filesList);
|
|
@@ -164,10 +202,10 @@ export class UiUploadOrderComponent {
|
|
|
164
202
|
pondHandleRemove(event) {
|
|
165
203
|
let fileName;
|
|
166
204
|
if (event.file.source instanceof File) {
|
|
167
|
-
fileName = event.file.serverId
|
|
205
|
+
fileName = event.file.serverId;
|
|
168
206
|
}
|
|
169
207
|
else {
|
|
170
|
-
fileName = event.file
|
|
208
|
+
fileName = event.file.source.includes("/") ? event.file.source.split("/").pop() : event.file.source;
|
|
171
209
|
}
|
|
172
210
|
this.onRemove.emit(fileName);
|
|
173
211
|
}
|
|
@@ -175,7 +213,7 @@ export class UiUploadOrderComponent {
|
|
|
175
213
|
this.fillAlbum(event.items, true);
|
|
176
214
|
let itemsList = event.items.map((item) => {
|
|
177
215
|
if (item.source instanceof File) {
|
|
178
|
-
return item.serverId.replace(/["\[\]]/g,
|
|
216
|
+
return item.serverId.replace(/["\[\]]/g, "");
|
|
179
217
|
}
|
|
180
218
|
else {
|
|
181
219
|
return item.filename;
|
|
@@ -189,7 +227,11 @@ export class UiUploadOrderComponent {
|
|
|
189
227
|
}
|
|
190
228
|
}
|
|
191
229
|
openLightBox(fileName) {
|
|
192
|
-
let index = this.album
|
|
230
|
+
let index = this.album
|
|
231
|
+
.map(function (e) {
|
|
232
|
+
return e.caption;
|
|
233
|
+
})
|
|
234
|
+
.indexOf(fileName);
|
|
193
235
|
this._lightbox.open(this.album, index);
|
|
194
236
|
}
|
|
195
237
|
async fillAlbum(files, reOrder) {
|
|
@@ -205,7 +247,7 @@ export class UiUploadOrderComponent {
|
|
|
205
247
|
return {
|
|
206
248
|
src: fileUrl,
|
|
207
249
|
caption: file.filenameWithoutExtension,
|
|
208
|
-
thumb:
|
|
250
|
+
thumb: "",
|
|
209
251
|
};
|
|
210
252
|
}));
|
|
211
253
|
this.album = preAlbum;
|
|
@@ -229,17 +271,17 @@ export class UiUploadOrderComponent {
|
|
|
229
271
|
isErrorMessage() {
|
|
230
272
|
let control = this.form?.get(this.controlName);
|
|
231
273
|
if (control?.errors?.required && (!this.pond || this.pond.getFiles().length === 0)) {
|
|
232
|
-
return
|
|
274
|
+
return "Obrigatório";
|
|
233
275
|
}
|
|
234
276
|
return null;
|
|
235
277
|
}
|
|
236
278
|
}
|
|
237
|
-
UiUploadOrderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UiUploadOrderComponent, deps: [{ token: i1.Lightbox }], target: i0.ɵɵFactoryTarget.Component });
|
|
238
|
-
UiUploadOrderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UiUploadOrderComponent, selector: "ui-upload-order", inputs: { uploadObservable: "uploadObservable", form: "form", controlName: "controlName", url: "url", initialFiles: "initialFiles", multiple: "multiple", reorder: "reorder", maxFiles: "maxFiles", transparent: "transparent", lightBox: "lightBox", instantUpload: "instantUpload" }, outputs: { onRemove: "onRemove", onAdded: "onAdded", onAllAdded: "onAllAdded", onActivate: "onActivate", onInit: "onInit", onMaxReached: "onMaxReached", onReOrder: "onReOrder", onSelected: "onSelected", noFilesAdded: "noFilesAdded", onUploadError: "onUploadError" }, viewQueries: [{ propertyName: "myPond", first: true, predicate: ["myPond"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- app.component.html -->\r\n<div class=\"position-relative\" [class.upload-invalid]=\"isErrorMessage()\">\r\n <file-pond #myPond name='UploadForm[imagem][]' [class.file-pont-transparent]=\"transparent\" [options]=\"pondOptions\"\r\n (oninit)=\"pondHandleInit($event)\" [files]=\"pondFiles\" (onupdatefiles)=\"pondHandleUpdate($event)\"\r\n (onactivatefile)=\"pondHandleActivateFile($event)\"
|
|
279
|
+
UiUploadOrderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UiUploadOrderComponent, deps: [{ token: i1.Lightbox }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Component });
|
|
280
|
+
UiUploadOrderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UiUploadOrderComponent, selector: "ui-upload-order", inputs: { uploadObservable: "uploadObservable", form: "form", controlName: "controlName", url: "url", initialFiles: "initialFiles", multiple: "multiple", reorder: "reorder", maxFiles: "maxFiles", transparent: "transparent", lightBox: "lightBox", instantUpload: "instantUpload" }, outputs: { onRemove: "onRemove", onAdded: "onAdded", onAllAdded: "onAllAdded", onActivate: "onActivate", onInit: "onInit", onMaxReached: "onMaxReached", onReOrder: "onReOrder", onSelected: "onSelected", noFilesAdded: "noFilesAdded", onUploadError: "onUploadError" }, viewQueries: [{ propertyName: "myPond", first: true, predicate: ["myPond"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- app.component.html -->\r\n<div class=\"position-relative\" [class.upload-invalid]=\"isErrorMessage()\">\r\n <file-pond #myPond name='UploadForm[imagem][]' [class.file-pont-transparent]=\"transparent\" [options]=\"pondOptions\"\r\n (oninit)=\"pondHandleInit($event)\" [files]=\"pondFiles\" (onupdatefiles)=\"pondHandleUpdate($event)\"\r\n (onactivatefile)=\"pondHandleActivateFile($event)\"\r\n (onreorderfiles)=\"onReorderFiles($event)\" (onwarning)=\"warning($event)\"\r\n (onprocessfiles)=\"pondHandleAllFilesAdded($event)\" (onprocessfile)=\"pondHandleAddFile($event)\"\r\n (onerror)=\"pondHandleError()\"/>\r\n\r\n <div class=\"invalid-tooltip\" [class]=\"'tooltip-' + errorPosition\" [class.touched]=\"control?.touched\"\r\n *ngIf=\"isErrorMessage()\">\r\n {{isErrorMessage()}}\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep .filepond--list-scroller{width:calc(100% - 25px);margin:auto;padding-bottom:20px}:host ::ng-deep .filepond--drop-label{color:#555;justify-content:flex-start;margin-left:20px}:host ::ng-deep .filepond--label-action{color:var(--theme-default);text-decoration-color:var(--theme-default)}:host ::ng-deep .filepond--panel-root{background-color:#fff;border:1.5px solid rgba(173,181,189,.5019607843);border-style:dashed;height:12%}:host ::ng-deep .filepond--image-preview-overlay{display:none}:host ::ng-deep .filepond--file-action-button{background-color:var(--theme-secondary);display:none}:host ::ng-deep .file-pont-transparent .filepond--image-preview,:host ::ng-deep .file-pont-transparent .filepond--item-panel{background:transparent!important}:host ::ng-deep .file-pont-transparent .filepond--file-info{display:none}:host ::ng-deep .file-pont-transparent .filepond--item>.filepond--panel .filepond--panel-bottom{box-shadow:none}:host ::ng-deep .filepond--file:hover .filepond--file-action-button{display:block}@media (max-width: 800px){:host ::ng-deep .filepond--panel-root{height:5%}}@media (max-width: 480px){:host ::ng-deep .filepond--panel-root{height:2%}}::ng-deep .ng-submitted .upload-invalid .filepond--panel-root{border-color:#fc4438}::ng-deep .ng-submitted .upload-invalid .invalid-tooltip{display:block;transform:translate(-50%,-50%);top:0;right:0}::ng-deep .dark-only .filepond--panel-root{background:transparent!important}::ng-deep .dark-only .filepond--drop-label{color:#ffffffb3}@media (min-width: 30em){:host ::ng-deep .filepond--item{width:calc(40% - .5em)}}@media (min-width: 50em){:host ::ng-deep .filepond--item{width:calc(25% - 7px)}}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.FilePondComponent, selector: "file-pond", inputs: ["options", "files"], outputs: ["oninit", "onwarning", "onerror", "oninitfile", "onactivatefile", "onaddfilestart", "onaddfileprogress", "onaddfile", "onprocessfilestart", "onprocessfileprogress", "onprocessfileabort", "onprocessfilerevert", "onprocessfile", "onprocessfiles", "onremovefile", "onpreparefile", "onupdatefiles", "onreorderfiles"] }] });
|
|
239
281
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UiUploadOrderComponent, decorators: [{
|
|
240
282
|
type: Component,
|
|
241
|
-
args: [{ selector:
|
|
242
|
-
}], ctorParameters: function () { return [{ type: i1.Lightbox }]; }, propDecorators: { uploadObservable: [{
|
|
283
|
+
args: [{ selector: "ui-upload-order", template: "<!-- app.component.html -->\r\n<div class=\"position-relative\" [class.upload-invalid]=\"isErrorMessage()\">\r\n <file-pond #myPond name='UploadForm[imagem][]' [class.file-pont-transparent]=\"transparent\" [options]=\"pondOptions\"\r\n (oninit)=\"pondHandleInit($event)\" [files]=\"pondFiles\" (onupdatefiles)=\"pondHandleUpdate($event)\"\r\n (onactivatefile)=\"pondHandleActivateFile($event)\"\r\n (onreorderfiles)=\"onReorderFiles($event)\" (onwarning)=\"warning($event)\"\r\n (onprocessfiles)=\"pondHandleAllFilesAdded($event)\" (onprocessfile)=\"pondHandleAddFile($event)\"\r\n (onerror)=\"pondHandleError()\"/>\r\n\r\n <div class=\"invalid-tooltip\" [class]=\"'tooltip-' + errorPosition\" [class.touched]=\"control?.touched\"\r\n *ngIf=\"isErrorMessage()\">\r\n {{isErrorMessage()}}\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep .filepond--list-scroller{width:calc(100% - 25px);margin:auto;padding-bottom:20px}:host ::ng-deep .filepond--drop-label{color:#555;justify-content:flex-start;margin-left:20px}:host ::ng-deep .filepond--label-action{color:var(--theme-default);text-decoration-color:var(--theme-default)}:host ::ng-deep .filepond--panel-root{background-color:#fff;border:1.5px solid rgba(173,181,189,.5019607843);border-style:dashed;height:12%}:host ::ng-deep .filepond--image-preview-overlay{display:none}:host ::ng-deep .filepond--file-action-button{background-color:var(--theme-secondary);display:none}:host ::ng-deep .file-pont-transparent .filepond--image-preview,:host ::ng-deep .file-pont-transparent .filepond--item-panel{background:transparent!important}:host ::ng-deep .file-pont-transparent .filepond--file-info{display:none}:host ::ng-deep .file-pont-transparent .filepond--item>.filepond--panel .filepond--panel-bottom{box-shadow:none}:host ::ng-deep .filepond--file:hover .filepond--file-action-button{display:block}@media (max-width: 800px){:host ::ng-deep .filepond--panel-root{height:5%}}@media (max-width: 480px){:host ::ng-deep .filepond--panel-root{height:2%}}::ng-deep .ng-submitted .upload-invalid .filepond--panel-root{border-color:#fc4438}::ng-deep .ng-submitted .upload-invalid .invalid-tooltip{display:block;transform:translate(-50%,-50%);top:0;right:0}::ng-deep .dark-only .filepond--panel-root{background:transparent!important}::ng-deep .dark-only .filepond--drop-label{color:#ffffffb3}@media (min-width: 30em){:host ::ng-deep .filepond--item{width:calc(40% - .5em)}}@media (min-width: 50em){:host ::ng-deep .filepond--item{width:calc(25% - 7px)}}\n"] }]
|
|
284
|
+
}], ctorParameters: function () { return [{ type: i1.Lightbox }, { type: i2.HttpClient }]; }, propDecorators: { uploadObservable: [{
|
|
243
285
|
type: Input
|
|
244
286
|
}], form: [{
|
|
245
287
|
type: Input
|
|
@@ -285,4 +327,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
285
327
|
type: ViewChild,
|
|
286
328
|
args: ["myPond"]
|
|
287
329
|
}] } });
|
|
288
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktdXBsb2FkLW9yZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLXVwbG9hZC1vcmRlci9zcmMvbGliL3VpLXVwbG9hZC1vcmRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy91aS11cGxvYWQtb3JkZXIvc3JjL2xpYi91aS11cGxvYWQtb3JkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFnQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxpQkFBaUIsR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUVsRCxPQUFPLEVBQVUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQU9sRCxNQUFNLE9BQU8sc0JBQXNCO0lBOEIvQixZQUFvQixTQUFtQjtRQUFuQixjQUFTLEdBQVQsU0FBUyxDQUFVO1FBckI5QixhQUFRLEdBQVksSUFBSSxDQUFDO1FBQ3pCLFlBQU8sR0FBWSxJQUFJLENBQUM7UUFDeEIsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUVyQixhQUFRLEdBQVksSUFBSSxDQUFDO1FBQ3pCLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBRzdCLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3RDLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3JDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO1FBQzFDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQUM5QyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQTRCLENBQUM7UUFDdEQs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dCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRmlsZVBvbmRDb21wb25lbnQsIH0gZnJvbSBcIm5neC1maWxlcG9uZFwiO1xyXG5pbXBvcnQgeyBGaWxlUG9uZCwgRmlsZVBvbmRGaWxlLCBGaWxlUG9uZE9wdGlvbnMgfSBmcm9tIFwiZmlsZXBvbmRcIjtcclxuaW1wb3J0IHsgSUFsYnVtLCBMaWdodGJveCB9IGZyb20gJ25neC1saWdodGJveCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd1aS11cGxvYWQtb3JkZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VpLXVwbG9hZC1vcmRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi91aS11cGxvYWQtb3JkZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVWlVcGxvYWRPcmRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gICAgQElucHV0KCkgdXBsb2FkT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTx2b2lkPjtcclxuICAgIHByaXZhdGUgZXZlbnRzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb25cclxuXHJcbiAgICBASW5wdXQoKSBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gICAgQElucHV0KCkgY29udHJvbE5hbWU6IHN0cmluZztcclxuXHJcbiAgICBASW5wdXQoKSB1cmw6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGluaXRpYWxGaWxlczogc3RyaW5nW107XHJcbiAgICBASW5wdXQoKSBtdWx0aXBsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBASW5wdXQoKSByZW9yZGVyOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIG1heEZpbGVzOiBudW1iZXIgPSA2O1xyXG4gICAgQElucHV0KCkgdHJhbnNwYXJlbnQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBsaWdodEJveDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBpbnN0YW50VXBsb2FkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgQE91dHB1dCgpIG9uUmVtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25BZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gICAgQE91dHB1dCgpIG9uQWxsQWRkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xyXG4gICAgQE91dHB1dCgpIG9uQWN0aXZhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGVQb25kRmlsZT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGVQb25kT3B0aW9uc1tcImZpbGVzXCJdPigpO1xyXG4gICAgQE91dHB1dCgpIG9uTWF4UmVhY2hlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gICAgQE91dHB1dCgpIG9uUmVPcmRlciA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZVBvbmRGaWxlW10+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG5vRmlsZXNBZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uVXBsb2FkRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBAVmlld0NoaWxkKFwibXlQb25kXCIpIG15UG9uZDogRmlsZVBvbmRDb21wb25lbnQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfbGlnaHRib3g6IExpZ2h0Ym94KSB7IH1cclxuXHJcbiAgICBwdWJsaWMgcG9uZDogRmlsZVBvbmQ7XHJcbiAgICBwdWJsaWMgcG9uZE9wdGlvbnM6IEZpbGVQb25kT3B0aW9ucztcclxuICAgIHB1YmxpYyBwb25kRmlsZXM6IEZpbGVQb25kT3B0aW9uc1tcImZpbGVzXCJdID0gW107XHJcbiAgICBwdWJsaWMgYWxidW06IElBbGJ1bVtdID0gW107XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wb25kT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgYWxsb3dNdWx0aXBsZTogdGhpcy5tdWx0aXBsZSxcclxuICAgICAgICAgICAgbGFiZWxJZGxlOiAnQXJyYXN0ZSBzZXVzIGFycXVpdm9zIG91IDxzcGFuIGNsYXNzPVwiZmlsZXBvbmQtLWxhYmVsLWFjdGlvblwiPmNsaXF1ZSBhcXVpPC9zcGFuPiBwYXJhIHNlbGVjaW9uYXIuJyxcclxuICAgICAgICAgICAgYWxsb3dSZW9yZGVyOiB0aGlzLnJlb3JkZXIsXHJcbiAgICAgICAgICAgIG1heEZpbGVzOiB0aGlzLm1heEZpbGVzLFxyXG4gICAgICAgICAgICBhY2NlcHRlZEZpbGVUeXBlczogWydpbWFnZS8qJ10sXHJcbiAgICAgICAgICAgIGluc3RhbnRVcGxvYWQ6IHRoaXMuaW5zdGFudFVwbG9hZCxcclxuICAgICAgICAgICAgYWxsb3dQcm9jZXNzOiB0aGlzLmluc3RhbnRVcGxvYWQsXHJcbiAgICAgICAgICAgIGRyb3BWYWxpZGF0aW9uOiB0cnVlLFxyXG4gICAgICAgICAgICBpY29uUmVtb3ZlOiBgPHN2ZyB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE1IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIDxtYXNrIGlkPVwibWFzazBfMzcwNjdfMzQxNDZcIiBzdHlsZT1cIm1hc2stdHlwZTphbHBoYVwiIG1hc2tVbml0cz1cInVzZXJTcGFjZU9uVXNlXCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNlwiPlxyXG4gICAgICAgICAgICA8cmVjdCB4PVwiMC4xMzA4NTlcIiB5PVwiMC42MzE1OTJcIiB3aWR0aD1cIjE0LjczNjhcIiBoZWlnaHQ9XCIxNC43MzY4XCIgZmlsbD1cIiNEOUQ5RDlcIi8+XHJcbiAgICAgICAgICAgIDwvbWFzaz5cclxuICAgICAgICAgICAgPGcgbWFzaz1cInVybCgjbWFzazBfMzcwNjdfMzQxNDYpXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNNC40MyAxMy41MjYzQzQuMDkyMjggMTMuNTI2MyAzLjgwMzE3IDEzLjQwNiAzLjU2MjY3IDEzLjE2NTVDMy4zMjIxNyAxMi45MjUgMy4yMDE5MyAxMi42MzU5IDMuMjAxOTMgMTIuMjk4MlY0LjMxNTc0QzMuMDI3OTUgNC4zMTU3NCAyLjg4MjEyIDQuMjU2ODkgMi43NjQ0MyA0LjEzOTJDMi42NDY3NCA0LjAyMTUxIDIuNTg3ODkgMy44NzU2OCAyLjU4Nzg5IDMuNzAxN0MyLjU4Nzg5IDMuNTI3NzMgMi42NDY3NCAzLjM4MTg5IDIuNzY0NDMgMy4yNjQyQzIuODgyMTIgMy4xNDY1MSAzLjAyNzk1IDMuMDg3NjcgMy4yMDE5MyAzLjA4NzY3SDUuNjU4MDdDNS42NTgwNyAyLjkxMzY5IDUuNzE2OTEgMi43Njc4NiA1LjgzNDYgMi42NTAxN0M1Ljk1MjI5IDIuNTMyNDggNi4wOTgxMiAyLjQ3MzYzIDYuMjcyMSAyLjQ3MzYzSDguNzI4MjRDOC45MDIyMiAyLjQ3MzYzIDkuMDQ4MDUgMi41MzI0OCA5LjE2NTc0IDIuNjUwMTdDOS4yODM0MyAyLjc2Nzg2IDkuMzQyMjggMi45MTM2OSA5LjM0MjI4IDMuMDg3NjdIMTEuNzk4NEMxMS45NzI0IDMuMDg3NjcgMTIuMTE4MiAzLjE0NjUxIDEyLjIzNTkgMy4yNjQyQzEyLjM1MzYgMy4zODE4OSAxMi40MTI1IDMuNTI3NzMgMTIuNDEyNSAzLjcwMTdDMTIuNDEyNSAzLjg3NTY4IDEyLjM1MzYgNC4wMjE1MSAxMi4yMzU5IDQuMTM5MkMxMi4xMTgyIDQuMjU2ODkgMTEuOTcyNCA0LjMxNTc0IDExLjc5ODQgNC4zMTU3NFYxMi4yOTgyQzExLjc5ODQgMTIuNjM1OSAxMS42NzgyIDEyLjkyNSAxMS40Mzc3IDEzLjE2NTVDMTEuMTk3MiAxMy40MDYgMTAuOTA4MSAxMy41MjYzIDEwLjU3MDMgMTMuNTI2M0g0LjQzWk00LjQzIDQuMzE1NzRWMTIuMjk4MkgxMC41NzAzVjQuMzE1NzRINC40M1pNNy41MDAxNyA5LjE2NjYyTDguNjY2ODQgMTAuMzMzM0M4Ljc4OTY1IDEwLjQ0NTkgOC45MzU0OCAxMC41MDIxIDkuMTA0MzQgMTAuNTAyMUM5LjI3MzIgMTAuNTAyMSA5LjQxMzkxIDEwLjQ0NTkgOS41MjY0OSAxMC4zMzMzQzkuNjQ5MjkgMTAuMjEwNSA5LjcxMDcgMTAuMDY0NiA5LjcxMDcgOS44OTU3OEM5LjcxMDcgOS43MjY5MiA5LjY0OTI5IDkuNTg2MjEgOS41MjY0OSA5LjQ3MzYzTDguMzU5ODIgOC4zMDY5N0w5LjUyNjQ5IDcuMTQwM0M5LjY0OTI5IDcuMDE3NDkgOS43MTA3IDYuODcxNjYgOS43MTA3IDYuNzAyOEM5LjcxMDcgNi41MzM5NCA5LjY0OTI5IDYuMzkzMjIgOS41MjY0OSA2LjI4MDY1QzkuNDEzOTEgNi4xNTc4NCA5LjI3MzIgNi4wOTY0NCA5LjEwNDM0IDYuMDk2NDRDOC45MzU0OCA2LjA5NjQ0IDguNzg5NjUgNi4xNTc4NCA4LjY2Njg0IDYuMjgwNjVMNy41MDAxNyA3LjQ0NzMyTDYuMzMzNSA2LjI4MDY1QzYuMjIwOTMgNi4xNTc4NCA2LjA4MDIyIDYuMDk2NDQgNS45MTEzNiA2LjA5NjQ0QzUuNzQyNSA2LjA5NjQ0IDUuNTk2NjYgNi4xNTc4NCA1LjQ3Mzg2IDYuMjgwNjVDNS4zNjEyOCA2LjM5MzIyIDUuMzA1IDYuNTMzOTQgNS4zMDUgNi43MDI4QzUuMzA1IDYuODcxNjYgNS4zNjEyOCA3LjAxNzQ5IDUuNDczODYgNy4xNDAzTDYuNjQwNTIgOC4zMDY5N0w1LjQ3Mzg2IDkuNDczNjNDNS4zNjEyOCA5LjU4NjIxIDUuMzA1IDkuNzI2OTIgNS4zMDUgOS44OTU3OEM1LjMwNSAxMC4wNjQ2IDUuMzYxMjggMTAuMjEwNSA1LjQ3Mzg2IDEwLjMzMzNDNS41OTY2NiAxMC40NDU5IDUuNzQyNSAxMC41MDIxIDUuOTExMzYgMTAuNTAyMUM2LjA4MDIyIDEwLjUwMjEgNi4yMjA5MyAxMC40NDU5IDYuMzMzNSAxMC4zMzMzTDcuNTAwMTcgOS4xNjY2MlpcIiBmaWxsPVwid2hpdGVcIi8+XHJcbiAgICAgICAgICAgIDwvZz48L3N2Zz5gLFxyXG4gICAgICAgICAgICBzdHlsZUJ1dHRvblJlbW92ZUl0ZW1Qb3NpdGlvbjogJ3JpZ2h0JyxcclxuICAgICAgICAgICAgaW1hZ2VSZXNpemVNb2RlOiAnY29udGFpbicsXHJcbiAgICAgICAgICAgIHN0eWxlSXRlbVBhbmVsQXNwZWN0UmF0aW86ICcwLjc1JyxcclxuICAgICAgICAgICAgaXRlbUluc2VydExvY2F0aW9uOiAnYWZ0ZXInLFxyXG4gICAgICAgICAgICBjcmVkaXRzOiBmYWxzZSxcclxuICAgICAgICAgICAgc2VydmVyOiB7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzOiAoZmllbGROYW1lLCBmaWxlLCBtZXRhZGF0YSwgbG9hZCwgZXJyb3IsIHByb2dyZXNzLCBhYm9ydCwgdHJhbnNmZXIsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBmaWVsZE5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIGlucHV0IGZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZmlsZSBpcyB0aGUgYWN0dWFsIGZpbGUgb2JqZWN0IHRvIHNlbmRcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChmaWVsZE5hbWUsIGZpbGUsIGZpbGUubmFtZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Lm9wZW4oJ1BPU1QnLCB0aGlzLnVybCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNob3VsZCBjYWxsIHRoZSBwcm9ncmVzcyBtZXRob2QgdG8gdXBkYXRlIHRoZSBwcm9ncmVzcyB0byAxMDAlIGJlZm9yZSBjYWxsaW5nIGxvYWRcclxuICAgICAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIGNvbXB1dGFibGUgdG8gZmFsc2Ugc3dpdGNoZXMgdGhlIGxvYWRpbmcgaW5kaWNhdG9yIHRvIGluZmluaXRlIG1vZGVcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnVwbG9hZC5vbnByb2dyZXNzID0gKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MoZS5sZW5ndGhDb21wdXRhYmxlLCBlLmxvYWRlZCwgZS50b3RhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGNhbGwgdGhlIGxvYWQgbWV0aG9kIHdoZW4gZG9uZSBhbmQgcGFzcyB0aGUgcmV0dXJuZWQgc2VydmVyIGZpbGUgaWRcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHNlcnZlciBmaWxlIGlkIGlzIHRoZW4gdXNlZCBsYXRlciBvbiB3aGVuIHJldmVydGluZyBvciByZXN0b3JpbmcgYSBmaWxlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc28geW91ciBzZXJ2ZXIga25vd3Mgd2hpY2ggZmlsZSB0byByZXR1cm4gd2l0aG91dCBleHBvc2luZyB0aGF0IGluZm8gdG8gdGhlIGNsaWVudFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPj0gMjAwICYmIHJlcXVlc3Quc3RhdHVzIDwgMzAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbG9hZCBtZXRob2QgYWNjZXB0cyBlaXRoZXIgYSBzdHJpbmcgKGlkKSBvciBhbiBvYmplY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQocmVxdWVzdC5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FuIGNhbGwgdGhlIGVycm9yIG1ldGhvZCBpZiBzb21ldGhpbmcgaXMgd3JvbmcsIHNob3VsZCBleGl0IGFmdGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcignb2ggbm8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Quc2VuZChmb3JtRGF0YSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNob3VsZCBleHBvc2UgYW4gYWJvcnQgbWV0aG9kIHNvIHRoZSByZXF1ZXN0IGNhbiBiZSBjYW5jZWxsZWRcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhYm9ydDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBlbnRlcmVkIGlmIHRoZSB1c2VyIGhhcyB0YXBwZWQgdGhlIGNhbmNlbCBidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMZXQgRmlsZVBvbmQga25vdyB0aGUgcmVxdWVzdCBoYXMgYmVlbiBjYW5jZWxsZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBsb2FkOiAoc291cmNlLCBsb2FkLCBlcnJvciwgcHJvZ3Jlc3MsIGFib3J0LCBoZWFkZXJzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG15UmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2gobXlSZXF1ZXN0KS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKS50aGVuKGJ1ZmZlciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgZmlsZSBleHRlbnNpb24gZnJvbSB0aGUgc291cmNlIFVSTFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZUV4dGVuc2lvbiA9IHNvdXJjZS5zcGxpdCgnLicpLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFwIGZpbGUgZXh0ZW5zaW9ucyB0byBNSU1FIHR5cGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW1lVHlwZU1hcCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2VicCc6ICdpbWFnZS93ZWJwJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnanBnJzogJ2ltYWdlL2pwZWcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqcGVnJzogJ2ltYWdlL2pwZWcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbmcnOiAnaW1hZ2UvcG5nJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgb3RoZXIgc3VwcG9ydGVkIGltYWdlIHR5cGVzIGFzIG5lZWRlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVUeXBlID0gbWltZVR5cGVNYXBbZmlsZUV4dGVuc2lvbl0gfHwgY29udGVudFR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXlCbG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogZmlsZVR5cGUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkKG15QmxvYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SOiAnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pbnN0YW50VXBsb2FkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzU3Vic2NyaXB0aW9uID0gdGhpcy51cGxvYWRPYnNlcnZhYmxlLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwbG9hZEZpbGVzKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5pbml0aWFsRmlsZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5wb25kRmlsZXMgPSB0aGlzLmluaXRpYWxGaWxlcy5tYXAoKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbG9jYWwnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbnRVcGxvYWQpIHtcclxuICAgICAgICAgICAgdGhpcy5ldmVudHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcG9uZEhhbmRsZUVycm9yKCkge1xyXG4gICAgICAgIHRoaXMub25VcGxvYWRFcnJvci5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9uZEhhbmRsZUluaXQoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMub25Jbml0LmVtaXQodGhpcy5wb25kRmlsZXMpXHJcblxyXG4gICAgICAgIHRoaXMucG9uZCA9IGV2ZW50LnBvbmQ7XHJcbiAgICB9XHJcblxyXG4gICAgcG9uZEhhbmRsZUFkZEZpbGUoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZE5hbWUgPSBldmVudC5maWxlPy5zZXJ2ZXJJZD8ucmVwbGFjZSgvW1wiXFxbXFxdXS9nLCAnJyk7XHJcbiAgICAgICAgdGhpcy5vbkFkZGVkLmVtaXQoZm9ybWF0dGVkTmFtZSlcclxuICAgIH1cclxuXHJcbiAgICAvL1PDsyBmdW5jaW9uYSBxdWFuZG8gbsOjbyB0ZW0gYXJxdWl2b3MgaW5pY2lhaXNcclxuICAgIHBvbmRIYW5kbGVBbGxGaWxlc0FkZGVkKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBjb25zdCBmaWxlc0xpc3Q6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBldmVudC5wb25kLmdldEZpbGVzKCk7XHJcblxyXG4gICAgICAgIGZpbGVzLmZvckVhY2goKGZpbGU6IEZpbGVQb25kRmlsZSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZm9ybWF0dGVkTmFtZSA9IGZpbGUuc2VydmVySWQ/LnJlcGxhY2UoL1tcIlxcW1xcXV0vZywgJycpO1xyXG4gICAgICAgICAgICBmaWxlc0xpc3QucHVzaChmb3JtYXR0ZWROYW1lKTtcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMub25BbGxBZGRlZC5lbWl0KGZpbGVzTGlzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9uZEhhbmRsZUFjdGl2YXRlRmlsZShldmVudDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5vbkFjdGl2YXRlLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgIHRoaXMubGlnaHRCb3ggJiYgdGhpcy5vcGVuTGlnaHRCb3goZXZlbnQuZmlsZS5maWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHBvbmRIYW5kbGVVcGRhdGUoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZmlsbEFsYnVtKGV2ZW50Lml0ZW1zKVxyXG4gICAgfVxyXG5cclxuICAgIHBvbmRIYW5kbGVSZW1vdmUoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIGxldCBmaWxlTmFtZTogc3RyaW5nO1xyXG4gICAgICAgIGlmIChldmVudC5maWxlLnNvdXJjZSBpbnN0YW5jZW9mIEZpbGUpIHtcclxuICAgICAgICAgICAgZmlsZU5hbWUgPSBldmVudC5maWxlLnNlcnZlcklkPy5yZXBsYWNlKC9bXCJcXFtcXF1dL2csICcnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaWxlTmFtZSA9IGV2ZW50LmZpbGU/LmZpbGVuYW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vblJlbW92ZS5lbWl0KGZpbGVOYW1lKVxyXG4gICAgfVxyXG5cclxuICAgIG9uUmVvcmRlckZpbGVzKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICB0aGlzLmZpbGxBbGJ1bShldmVudC5pdGVtcywgdHJ1ZSlcclxuICAgICAgICBsZXQgaXRlbXNMaXN0ID0gZXZlbnQuaXRlbXMubWFwKChpdGVtOiBGaWxlUG9uZEZpbGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uc291cmNlIGluc3RhbmNlb2YgRmlsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uc2VydmVySWQucmVwbGFjZSgvW1wiXFxbXFxdXS9nLCAnJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5maWxlbmFtZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLm9uUmVPcmRlci5lbWl0KGl0ZW1zTGlzdClcclxuICAgIH1cclxuXHJcbiAgICB3YXJuaW5nKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBpZiAoZXZlbnQuZXJyb3IuY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25NYXhSZWFjaGVkLmVtaXQoYExpbWl0ZSBkZSBBcnF1aXZvcyBhdGluZ2lkby4gVm9jw6ogcG9kZSBpbnNlcmlyIHVtIHRvdGFsIGRlICR7dGhpcy5tYXhGaWxlc30gYXJxdWl2b3MuYClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkxpZ2h0Qm94KGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmFsYnVtLm1hcChmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS5jYXB0aW9uOyB9KS5pbmRleE9mKGZpbGVOYW1lKTtcclxuICAgICAgICB0aGlzLl9saWdodGJveC5vcGVuKHRoaXMuYWxidW0sIGluZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmaWxsQWxidW0oZmlsZXM6IFtdLCByZU9yZGVyPzogYm9vbGVhbikge1xyXG4gICAgICAgIGlmIChmaWxlcy5sZW5ndGggIT09IHRoaXMuYWxidW0ubGVuZ3RoIHx8IHJlT3JkZXIpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHByZUFsYnVtID0gYXdhaXQgUHJvbWlzZS5hbGwoZmlsZXMubWFwKGFzeW5jIChmaWxlOiBGaWxlUG9uZEZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBmaWxlVXJsOiBzdHJpbmc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGZpbGUuc291cmNlIGluc3RhbmNlb2YgRmlsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVVcmwgPSBhd2FpdCB0aGlzLnJlYWRGaWxlQXN5bmMoZmlsZS5zb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxlVXJsID0gZmlsZS5zb3VyY2UudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNyYzogZmlsZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBjYXB0aW9uOiBmaWxlLmZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbixcclxuICAgICAgICAgICAgICAgICAgICB0aHVtYjogJydcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYWxidW0gPSBwcmVBbGJ1bTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVhZEZpbGVBc3luYyhmaWxlOiBGaWxlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gcmVhZGVyLnJlc3VsdDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVVcmwgPSBkYXRhVXJsLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZpbGVVcmwpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwbG9hZEZpbGVzKCkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5wb25kLmdldEZpbGVzKCk7XHJcbiAgICAgICAgZmlsZXMubGVuZ3RoID4gMCA/IHRoaXMucG9uZC5wcm9jZXNzRmlsZXMoKSA6IHRoaXMubm9GaWxlc0FkZGVkLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0Vycm9yTWVzc2FnZSgpIHtcclxuICAgICAgICBsZXQgY29udHJvbCA9IHRoaXMuZm9ybT8uZ2V0KHRoaXMuY29udHJvbE5hbWUpO1xyXG5cclxuICAgICAgICBpZiAoY29udHJvbD8uZXJyb3JzPy5yZXF1aXJlZCAmJiAoIXRoaXMucG9uZCB8fCB0aGlzLnBvbmQuZ2V0RmlsZXMoKS5sZW5ndGggPT09IDApKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnT2JyaWdhdMOzcmlvJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgfVxyXG59XHJcbiIsIjwhLS0gYXBwLmNvbXBvbmVudC5odG1sIC0tPlxyXG48ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmVcIiBbY2xhc3MudXBsb2FkLWludmFsaWRdPVwiaXNFcnJvck1lc3NhZ2UoKVwiPlxyXG4gICAgPGZpbGUtcG9uZCAjbXlQb25kIG5hbWU9J1VwbG9hZEZvcm1baW1hZ2VtXVtdJyBbY2xhc3MuZmlsZS1wb250LXRyYW5zcGFyZW50XT1cInRyYW5zcGFyZW50XCIgW29wdGlvbnNdPVwicG9uZE9wdGlvbnNcIlxyXG4gICAgICAgIChvbmluaXQpPVwicG9uZEhhbmRsZUluaXQoJGV2ZW50KVwiIFtmaWxlc109XCJwb25kRmlsZXNcIiAob251cGRhdGVmaWxlcyk9XCJwb25kSGFuZGxlVXBkYXRlKCRldmVudClcIlxyXG4gICAgICAgIChvbmFjdGl2YXRlZmlsZSk9XCJwb25kSGFuZGxlQWN0aXZhdGVGaWxlKCRldmVudClcIiAob25yZW1vdmVmaWxlKT1cInBvbmRIYW5kbGVSZW1vdmUoJGV2ZW50KVwiXHJcbiAgICAgICAgKG9ucmVvcmRlcmZpbGVzKT1cIm9uUmVvcmRlckZpbGVzKCRldmVudClcIiAob253YXJuaW5nKT1cIndhcm5pbmcoJGV2ZW50KVwiXHJcbiAgICAgICAgKG9ucHJvY2Vzc2ZpbGVzKT1cInBvbmRIYW5kbGVBbGxGaWxlc0FkZGVkKCRldmVudClcIiAob25wcm9jZXNzZmlsZSk9XCJwb25kSGFuZGxlQWRkRmlsZSgkZXZlbnQpXCJcclxuICAgICAgICAob25lcnJvcik9XCJwb25kSGFuZGxlRXJyb3IoKVwiIC8+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImludmFsaWQtdG9vbHRpcFwiIFtjbGFzc109XCIndG9vbHRpcC0nICsgZXJyb3JQb3NpdGlvblwiIFtjbGFzcy50b3VjaGVkXT1cImNvbnRyb2w/LnRvdWNoZWRcIlxyXG4gICAgICAgICpuZ0lmPVwiaXNFcnJvck1lc3NhZ2UoKVwiPlxyXG4gICAgICAgIHt7aXNFcnJvck1lc3NhZ2UoKX19XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
330
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktdXBsb2FkLW9yZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLXVwbG9hZC1vcmRlci9zcmMvbGliL3VpLXVwbG9hZC1vcmRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy91aS11cGxvYWQtb3JkZXIvc3JjL2xpYi91aS11cGxvYWQtb3JkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFnQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVqRCxPQUFPLEVBQVUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7OztBQU9qRSxNQUFNLE9BQU8sc0JBQXNCO0lBNkIvQixZQUFvQixTQUFtQixFQUFVLElBQWdCO1FBQTdDLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFZO1FBcEJ4RCxhQUFRLEdBQVksSUFBSSxDQUFDO1FBQ3pCLFlBQU8sR0FBWSxJQUFJLENBQUM7UUFDeEIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUV0QixhQUFRLEdBQVksSUFBSSxDQUFDO1FBQ3pCLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBRTdCLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3RDLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3JDLGVBQVUsR0FBRyxJQUFJLFlBQVks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QVc7c0JBQW5CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFFYyxNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRmlsZVBvbmRDb21wb25lbnQgfSBmcm9tIFwibmd4LWZpbGVwb25kXCI7XHJcbmltcG9ydCB7IEZpbGVQb25kLCBGaWxlUG9uZEZpbGUsIEZpbGVQb25kSW5pdGlhbEZpbGUsIEZpbGVQb25kT3B0aW9ucyB9IGZyb20gXCJmaWxlcG9uZFwiO1xyXG5pbXBvcnQgeyBJQWxidW0sIExpZ2h0Ym94IH0gZnJvbSBcIm5neC1saWdodGJveFwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFdmVudFR5cGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwidWktdXBsb2FkLW9yZGVyXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3VpLXVwbG9hZC1vcmRlci5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgc3R5bGVVcmxzOiBbXCIuL3VpLXVwbG9hZC1vcmRlci5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVpVXBsb2FkT3JkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICAgIEBJbnB1dCgpIHVwbG9hZE9ic2VydmFibGU6IE9ic2VydmFibGU8dm9pZD47XHJcbiAgICBwcml2YXRlIGV2ZW50c1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgIEBJbnB1dCgpIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgICBASW5wdXQoKSBjb250cm9sTmFtZTogc3RyaW5nO1xyXG5cclxuICAgIEBJbnB1dCgpIHVybDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgaW5pdGlhbEZpbGVzOiBzdHJpbmdbXTtcclxuICAgIEBJbnB1dCgpIG11bHRpcGxlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIHJlb3JkZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgQElucHV0KCkgbWF4RmlsZXM6IG51bWJlciA9IDEwO1xyXG4gICAgQElucHV0KCkgdHJhbnNwYXJlbnQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBsaWdodEJveDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBpbnN0YW50VXBsb2FkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBAT3V0cHV0KCkgb25SZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkFkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25BbGxBZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25BY3RpdmF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZVBvbmRGaWxlPigpO1xyXG4gICAgQE91dHB1dCgpIG9uSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZVBvbmRPcHRpb25zW1wiZmlsZXNcIl0+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25NYXhSZWFjaGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25SZU9yZGVyID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlUG9uZEZpbGVbXT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgbm9GaWxlc0FkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25VcGxvYWRFcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoXCJteVBvbmRcIikgbXlQb25kOiBGaWxlUG9uZENvbXBvbmVudDtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9saWdodGJveDogTGlnaHRib3gsIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBwdWJsaWMgcG9uZDogRmlsZVBvbmQ7XHJcbiAgICBwdWJsaWMgcG9uZE9wdGlvbnM6IEZpbGVQb25kT3B0aW9ucztcclxuICAgIC8vIHB1YmxpYyBwb25kRmlsZXM6IEZpbGVQb25kT3B0aW9uc1tcImZpbGVzXCJdID0gW107XHJcbiAgICBwdWJsaWMgcG9uZEZpbGVzOiBGaWxlUG9uZEluaXRpYWxGaWxlW10gPSBbXTtcclxuICAgIHB1YmxpYyBhbGJ1bTogSUFsYnVtW10gPSBbXTtcclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBvbmRPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBhbGxvd011bHRpcGxlOiB0aGlzLm11bHRpcGxlLFxyXG4gICAgICAgICAgICBsYWJlbElkbGU6XHJcbiAgICAgICAgICAgICAgICAnQXJyYXN0ZSBzZXVzIGFycXVpdm9zIG91IDxzcGFuIGNsYXNzPVwiZmlsZXBvbmQtLWxhYmVsLWFjdGlvblwiPmNsaXF1ZSBhcXVpPC9zcGFuPiBwYXJhIHNlbGVjaW9uYXIuJyxcclxuICAgICAgICAgICAgYWxsb3dSZW9yZGVyOiB0aGlzLnJlb3JkZXIsXHJcbiAgICAgICAgICAgIG1heEZpbGVzOiB0aGlzLm1heEZpbGVzLFxyXG4gICAgICAgICAgICBhY2NlcHRlZEZpbGVUeXBlczogW1wiaW1hZ2UvKlwiXSxcclxuICAgICAgICAgICAgaW5zdGFudFVwbG9hZDogdGhpcy5pbnN0YW50VXBsb2FkLFxyXG4gICAgICAgICAgICBhbGxvd1Byb2Nlc3M6IHRoaXMuaW5zdGFudFVwbG9hZCxcclxuICAgICAgICAgICAgZHJvcFZhbGlkYXRpb246IHRydWUsXHJcbiAgICAgICAgICAgIGljb25SZW1vdmU6IGA8c3ZnIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTUgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgPG1hc2sgaWQ9XCJtYXNrMF8zNzA2N18zNDE0NlwiIHN0eWxlPVwibWFzay10eXBlOmFscGhhXCIgbWFza1VuaXRzPVwidXNlclNwYWNlT25Vc2VcIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCIxNVwiIGhlaWdodD1cIjE2XCI+XHJcbiAgICAgICAgICAgIDxyZWN0IHg9XCIwLjEzMDg1OVwiIHk9XCIwLjYzMTU5MlwiIHdpZHRoPVwiMTQuNzM2OFwiIGhlaWdodD1cIjE0LjczNjhcIiBmaWxsPVwiI0Q5RDlEOVwiLz5cclxuICAgICAgICAgICAgPC9tYXNrPlxyXG4gICAgICAgICAgICA8ZyBtYXNrPVwidXJsKCNtYXNrMF8zNzA2N18zNDE0NilcIj5cclxuICAgICAgICAgICAgPHBhdGggZD1cIk00LjQzIDEzLjUyNjNDNC4wOTIyOCAxMy41MjYzIDMuODAzMTcgMTMuNDA2IDMuNTYyNjcgMTMuMTY1NUMzLjMyMjE3IDEyLjkyNSAzLjIwMTkzIDEyLjYzNTkgMy4yMDE5MyAxMi4yOTgyVjQuMzE1NzRDMy4wMjc5NSA0LjMxNTc0IDIuODgyMTIgNC4yNTY4OSAyLjc2NDQzIDQuMTM5MkMyLjY0Njc0IDQuMDIxNTEgMi41ODc4OSAzLjg3NTY4IDIuNTg3ODkgMy43MDE3QzIuNTg3ODkgMy41Mjc3MyAyLjY0Njc0IDMuMzgxODkgMi43NjQ0MyAzLjI2NDJDMi44ODIxMiAzLjE0NjUxIDMuMDI3OTUgMy4wODc2NyAzLjIwMTkzIDMuMDg3NjdINS42NTgwN0M1LjY1ODA3IDIuOTEzNjkgNS43MTY5MSAyLjc2Nzg2IDUuODM0NiAyLjY1MDE3QzUuOTUyMjkgMi41MzI0OCA2LjA5ODEyIDIuNDczNjMgNi4yNzIxIDIuNDczNjNIOC43MjgyNEM4LjkwMjIyIDIuNDczNjMgOS4wNDgwNSAyLjUzMjQ4IDkuMTY1NzQgMi42NTAxN0M5LjI4MzQzIDIuNzY3ODYgOS4zNDIyOCAyLjkxMzY5IDkuMzQyMjggMy4wODc2N0gxMS43OTg0QzExLjk3MjQgMy4wODc2NyAxMi4xMTgyIDMuMTQ2NTEgMTIuMjM1OSAzLjI2NDJDMTIuMzUzNiAzLjM4MTg5IDEyLjQxMjUgMy41Mjc3MyAxMi40MTI1IDMuNzAxN0MxMi40MTI1IDMuODc1NjggMTIuMzUzNiA0LjAyMTUxIDEyLjIzNTkgNC4xMzkyQzEyLjExODIgNC4yNTY4OSAxMS45NzI0IDQuMzE1NzQgMTEuNzk4NCA0LjMxNTc0VjEyLjI5ODJDMTEuNzk4NCAxMi42MzU5IDExLjY3ODIgMTIuOTI1IDExLjQzNzcgMTMuMTY1NUMxMS4xOTcyIDEzLjQwNiAxMC45MDgxIDEzLjUyNjMgMTAuNTcwMyAxMy41MjYzSDQuNDNaTTQuNDMgNC4zMTU3NFYxMi4yOTgySDEwLjU3MDNWNC4zMTU3NEg0LjQzWk03LjUwMDE3IDkuMTY2NjJMOC42NjY4NCAxMC4zMzMzQzguNzg5NjUgMTAuNDQ1OSA4LjkzNTQ4IDEwLjUwMjEgOS4xMDQzNCAxMC41MDIxQzkuMjczMiAxMC41MDIxIDkuNDEzOTEgMTAuNDQ1OSA5LjUyNjQ5IDEwLjMzMzNDOS42NDkyOSAxMC4yMTA1IDkuNzEwNyAxMC4wNjQ2IDkuNzEwNyA5Ljg5NTc4QzkuNzEwNyA5LjcyNjkyIDkuNjQ5MjkgOS41ODYyMSA5LjUyNjQ5IDkuNDczNjNMOC4zNTk4MiA4LjMwNjk3TDkuNTI2NDkgNy4xNDAzQzkuNjQ5MjkgNy4wMTc0OSA5LjcxMDcgNi44NzE2NiA5LjcxMDcgNi43MDI4QzkuNzEwNyA2LjUzMzk0IDkuNjQ5MjkgNi4zOTMyMiA5LjUyNjQ5IDYuMjgwNjVDOS40MTM5MSA2LjE1Nzg0IDkuMjczMiA2LjA5NjQ0IDkuMTA0MzQgNi4wOTY0NEM4LjkzNTQ4IDYuMDk2NDQgOC43ODk2NSA2LjE1Nzg0IDguNjY2ODQgNi4yODA2NUw3LjUwMDE3IDcuNDQ3MzJMNi4zMzM1IDYuMjgwNjVDNi4yMjA5MyA2LjE1Nzg0IDYuMDgwMjIgNi4wOTY0NCA1LjkxMTM2IDYuMDk2NDRDNS43NDI1IDYuMDk2NDQgNS41OTY2NiA2LjE1Nzg0IDUuNDczODYgNi4yODA2NUM1LjM2MTI4IDYuMzkzMjIgNS4zMDUgNi41MzM5NCA1LjMwNSA2LjcwMjhDNS4zMDUgNi44NzE2NiA1LjM2MTI4IDcuMDE3NDkgNS40NzM4NiA3LjE0MDNMNi42NDA1MiA4LjMwNjk3TDUuNDczODYgOS40NzM2M0M1LjM2MTI4IDkuNTg2MjEgNS4zMDUgOS43MjY5MiA1LjMwNSA5Ljg5NTc4QzUuMzA1IDEwLjA2NDYgNS4zNjEyOCAxMC4yMTA1IDUuNDczODYgMTAuMzMzM0M1LjU5NjY2IDEwLjQ0NTkgNS43NDI1IDEwLjUwMjEgNS45MTEzNiAxMC41MDIxQzYuMDgwMjIgMTAuNTAyMSA2LjIyMDkzIDEwLjQ0NTkgNi4zMzM1IDEwLjMzMzNMNy41MDAxNyA5LjE2NjYyWlwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgICAgPC9nPjwvc3ZnPmAsXHJcbiAgICAgICAgICAgIHN0eWxlQnV0dG9uUmVtb3ZlSXRlbVBvc2l0aW9uOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgICAgIGltYWdlUmVzaXplTW9kZTogXCJjb250YWluXCIsXHJcbiAgICAgICAgICAgIHN0eWxlSXRlbVBhbmVsQXNwZWN0UmF0aW86IFwiMC43NVwiLFxyXG4gICAgICAgICAgICBpdGVtSW5zZXJ0TG9jYXRpb246IFwiYWZ0ZXJcIixcclxuICAgICAgICAgICAgY3JlZGl0czogZmFsc2UsXHJcbiAgICAgICAgICAgIHNlcnZlcjoge1xyXG4gICAgICAgICAgICAgICAgcHJvY2VzczogKGZpZWxkTmFtZSwgZmlsZSwgbWV0YWRhdGEsIGxvYWQsIGVycm9yLCBwcm9ncmVzcywgYWJvcnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChmaWVsZE5hbWUsIGZpbGUsIGZpbGUubmFtZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmh0dHBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnBvc3QodGhpcy51cmwsIGZvcm1EYXRhLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmU6IFwiZXZlbnRzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyhldmVudC5sZW5ndGhDb21wdXRhYmxlLCBldmVudC5sb2FkZWQsIGV2ZW50LnRvdGFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gZXZlbnQuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZXJ2ZXJJZDogc3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzcG9uc2UpICYmIHJlc3BvbnNlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJJZCA9IHJlc3BvbnNlWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZSAmJiAocmVzcG9uc2Uuc2VydmVySWQgfHwgcmVzcG9uc2UuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVySWQgPSByZXNwb25zZS5zZXJ2ZXJJZCB8fCByZXNwb25zZS5pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoXCJSZXNwb3N0YSBkbyBzZXJ2aWRvciBpbnbDoWxpZGE6IHNlcnZlcklkIG7Do28gZW5jb250cmFkb1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkKHNlcnZlcklkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm8gYW8gcHJvY2Vzc2FyIHJlc3Bvc3RhIGRvIHNlcnZpZG9yOlwiLCBlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKFwiRXJybyBhbyBwcm9jZXNzYXIgcmVzcG9zdGEgZG8gc2Vydmlkb3JcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcihcIkVycm8gbm8gdXBsb2FkOiBcIiArIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbG9hZDogKHNvdXJjZSwgbG9hZCwgZXJyb3IsIHByb2dyZXNzLCBhYm9ydCwgaGVhZGVycykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG15UmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2gobXlSZXF1ZXN0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJybyBhbyBjYXJyZWdhciBpbWFnZW06XCIsIHJlc3BvbnNlLnN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoXCJFcnJvIGFvIGNhcnJlZ2FyIGEgaW1hZ2VtXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmFycmF5QnVmZmVyKCkudGhlbigoYnVmZmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gc291cmNlLnNwbGl0KFwiLlwiKS5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW1lVHlwZU1hcCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VicDogXCJpbWFnZS93ZWJwXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZzogXCJpbWFnZS9qcGVnXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWc6IFwiaW1hZ2UvanBlZ1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbmc6IFwiaW1hZ2UvcG5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlVHlwZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlTWFwW2ZpbGVFeHRlbnNpb25dIHx8IGNvbnRlbnRUeXBlIHx8IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG15QmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6IGZpbGVUeXBlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQobXlCbG9iKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm8gbm8gc2VydmVyLmxvYWQ6XCIsIGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcihcIkVycm8gYW8gY2FycmVnYXIgYSBpbWFnZW1cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHJlbW92ZTogKHNvdXJjZSwgbG9hZCwgZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcihcIk5vbWUgZG8gYXJxdWl2byBuw6NvIGZvcm5lY2lkb1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IHNvdXJjZS5zcGxpdChcIi9cIikucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25SZW1vdmUuZW1pdChmaWxlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcmV2ZXJ0OiAodW5pcXVlRmlsZUlkLCBsb2FkLCBlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdW5pcXVlRmlsZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKFwiTm9tZSBkbyBhcnF1aXZvIG7Do28gZm9ybmVjaWRvXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxvYWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUmVtb3ZlLmVtaXQodW5pcXVlRmlsZUlkKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbnRVcGxvYWQpIHtcclxuICAgICAgICAgICAgdGhpcy5ldmVudHNTdWJzY3JpcHRpb24gPSB0aGlzLnVwbG9hZE9ic2VydmFibGUuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBsb2FkRmlsZXMoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxGaWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLnBvbmRGaWxlcyA9IHRoaXMuaW5pdGlhbEZpbGVzLm1hcCgoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibG9jYWxcIixcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pbnN0YW50VXBsb2FkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHBvbmRIYW5kbGVFcnJvcigpIHtcclxuICAgICAgICB0aGlzLm9uVXBsb2FkRXJyb3IuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHBvbmRIYW5kbGVJbml0KGV2ZW50OiBhbnkpIHtcclxuICAgICAgICB0aGlzLm9uSW5pdC5lbWl0KHRoaXMucG9uZEZpbGVzKTtcclxuXHJcbiAgICAgICAgdGhpcy5wb25kID0gZXZlbnQucG9uZDtcclxuICAgIH1cclxuXHJcbiAgICBwb25kSGFuZGxlQWRkRmlsZShldmVudDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5vbkFkZGVkLmVtaXQoZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vU8OzIGZ1bmNpb25hIHF1YW5kbyBuw6NvIHRlbSBhcnF1aXZvcyBpbmljaWFpc1xyXG4gICAgcG9uZEhhbmRsZUFsbEZpbGVzQWRkZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVzTGlzdDogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBjb25zdCBmaWxlcyA9IGV2ZW50LnBvbmQuZ2V0RmlsZXMoKTtcclxuXHJcbiAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZTogRmlsZVBvbmRGaWxlKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBmb3JtYXR0ZWROYW1lID0gZmlsZS5zZXJ2ZXJJZD8ucmVwbGFjZSgvW1wiXFxbXFxdXS9nLCBcIlwiKTtcclxuICAgICAgICAgICAgZmlsZXNMaXN0LnB1c2goZm9ybWF0dGVkTmFtZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMub25BbGxBZGRlZC5lbWl0KGZpbGVzTGlzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9uZEhhbmRsZUFjdGl2YXRlRmlsZShldmVudDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5vbkFjdGl2YXRlLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgIHRoaXMubGlnaHRCb3ggJiYgdGhpcy5vcGVuTGlnaHRCb3goZXZlbnQuZmlsZS5maWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHBvbmRIYW5kbGVVcGRhdGUoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZmlsbEFsYnVtKGV2ZW50Lml0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBwb25kSGFuZGxlUmVtb3ZlKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBsZXQgZmlsZU5hbWU6IHN0cmluZztcclxuICAgICAgICBpZiAoZXZlbnQuZmlsZS5zb3VyY2UgaW5zdGFuY2VvZiBGaWxlKSB7XHJcbiAgICAgICAgICAgIGZpbGVOYW1lID0gZXZlbnQuZmlsZS5zZXJ2ZXJJZDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaWxlTmFtZSA9IGV2ZW50LmZpbGUuc291cmNlLmluY2x1ZGVzKFwiL1wiKSA/IGV2ZW50LmZpbGUuc291cmNlLnNwbGl0KFwiL1wiKS5wb3AoKSA6IGV2ZW50LmZpbGUuc291cmNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uUmVtb3ZlLmVtaXQoZmlsZU5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUmVvcmRlckZpbGVzKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICB0aGlzLmZpbGxBbGJ1bShldmVudC5pdGVtcywgdHJ1ZSk7XHJcbiAgICAgICAgbGV0IGl0ZW1zTGlzdCA9IGV2ZW50Lml0ZW1zLm1hcCgoaXRlbTogRmlsZVBvbmRGaWxlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLnNvdXJjZSBpbnN0YW5jZW9mIEZpbGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLnNlcnZlcklkLnJlcGxhY2UoL1tcIlxcW1xcXV0vZywgXCJcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5maWxlbmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMub25SZU9yZGVyLmVtaXQoaXRlbXNMaXN0KTtcclxuICAgIH1cclxuXHJcbiAgICB3YXJuaW5nKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBpZiAoZXZlbnQuZXJyb3IuY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25NYXhSZWFjaGVkLmVtaXQoXHJcbiAgICAgICAgICAgICAgICBgTGltaXRlIGRlIEFycXVpdm9zIGF0aW5naWRvLiBWb2PDqiBwb2RlIGluc2VyaXIgdW0gdG90YWwgZGUgJHt0aGlzLm1heEZpbGVzfSBhcnF1aXZvcy5gXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9wZW5MaWdodEJveChmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5hbGJ1bVxyXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZS5jYXB0aW9uO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuaW5kZXhPZihmaWxlTmFtZSk7XHJcbiAgICAgICAgdGhpcy5fbGlnaHRib3gub3Blbih0aGlzLmFsYnVtLCBpbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmlsbEFsYnVtKGZpbGVzOiBbXSwgcmVPcmRlcj86IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoZmlsZXMubGVuZ3RoICE9PSB0aGlzLmFsYnVtLmxlbmd0aCB8fCByZU9yZGVyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZUFsYnVtID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgICBmaWxlcy5tYXAoYXN5bmMgKGZpbGU6IEZpbGVQb25kRmlsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmaWxlVXJsOiBzdHJpbmc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlLnNvdXJjZSBpbnN0YW5jZW9mIEZpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVVybCA9IGF3YWl0IHRoaXMucmVhZEZpbGVBc3luYyhmaWxlLnNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVVybCA9IGZpbGUuc291cmNlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzcmM6IGZpbGVVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcHRpb246IGZpbGUuZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHVtYjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYWxidW0gPSBwcmVBbGJ1bTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVhZEZpbGVBc3luYyhmaWxlOiBGaWxlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gcmVhZGVyLnJlc3VsdDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVVcmwgPSBkYXRhVXJsLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZpbGVVcmwpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwbG9hZEZpbGVzKCkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5wb25kLmdldEZpbGVzKCk7XHJcbiAgICAgICAgZmlsZXMubGVuZ3RoID4gMCA/IHRoaXMucG9uZC5wcm9jZXNzRmlsZXMoKSA6IHRoaXMubm9GaWxlc0FkZGVkLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0Vycm9yTWVzc2FnZSgpIHtcclxuICAgICAgICBsZXQgY29udHJvbCA9IHRoaXMuZm9ybT8uZ2V0KHRoaXMuY29udHJvbE5hbWUpO1xyXG5cclxuICAgICAgICBpZiAoY29udHJvbD8uZXJyb3JzPy5yZXF1aXJlZCAmJiAoIXRoaXMucG9uZCB8fCB0aGlzLnBvbmQuZ2V0RmlsZXMoKS5sZW5ndGggPT09IDApKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIk9icmlnYXTDs3Jpb1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG4iLCI8IS0tIGFwcC5jb21wb25lbnQuaHRtbCAtLT5cclxuPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCIgW2NsYXNzLnVwbG9hZC1pbnZhbGlkXT1cImlzRXJyb3JNZXNzYWdlKClcIj5cclxuICAgIDxmaWxlLXBvbmQgI215UG9uZCBuYW1lPSdVcGxvYWRGb3JtW2ltYWdlbV1bXScgW2NsYXNzLmZpbGUtcG9udC10cmFuc3BhcmVudF09XCJ0cmFuc3BhcmVudFwiIFtvcHRpb25zXT1cInBvbmRPcHRpb25zXCJcclxuICAgICAgICAob25pbml0KT1cInBvbmRIYW5kbGVJbml0KCRldmVudClcIiBbZmlsZXNdPVwicG9uZEZpbGVzXCIgKG9udXBkYXRlZmlsZXMpPVwicG9uZEhhbmRsZVVwZGF0ZSgkZXZlbnQpXCJcclxuICAgICAgICAob25hY3RpdmF0ZWZpbGUpPVwicG9uZEhhbmRsZUFjdGl2YXRlRmlsZSgkZXZlbnQpXCJcclxuICAgICAgICAob25yZW9yZGVyZmlsZXMpPVwib25SZW9yZGVyRmlsZXMoJGV2ZW50KVwiIChvbndhcm5pbmcpPVwid2FybmluZygkZXZlbnQpXCJcclxuICAgICAgICAob25wcm9jZXNzZmlsZXMpPVwicG9uZEhhbmRsZUFsbEZpbGVzQWRkZWQoJGV2ZW50KVwiIChvbnByb2Nlc3NmaWxlKT1cInBvbmRIYW5kbGVBZGRGaWxlKCRldmVudClcIlxyXG4gICAgICAgIChvbmVycm9yKT1cInBvbmRIYW5kbGVFcnJvcigpXCIvPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLXRvb2x0aXBcIiBbY2xhc3NdPVwiJ3Rvb2x0aXAtJyArIGVycm9yUG9zaXRpb25cIiBbY2xhc3MudG91Y2hlZF09XCJjb250cm9sPy50b3VjaGVkXCJcclxuICAgICAgICAqbmdJZj1cImlzRXJyb3JNZXNzYWdlKClcIj5cclxuICAgICAgICB7e2lzRXJyb3JNZXNzYWdlKCl9fVxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|