speechrecorderng 3.4.3 → 3.4.5
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/action/action.mjs +3 -3
- package/esm2020/lib/audio/audio_display.mjs +9 -11
- package/esm2020/lib/audio/audio_player.mjs +4 -4
- package/esm2020/lib/audio/capture/capture.mjs +120 -106
- package/esm2020/lib/audio/io/stream.mjs +1 -1
- package/esm2020/lib/audio/net_audio_buffer.mjs +1 -1
- package/esm2020/lib/audio/playback/array_audio_buffer_source_node.mjs +2 -2
- package/esm2020/lib/audio/playback/audio_source_worklet_module_loader.mjs +2 -2
- package/esm2020/lib/audio/playback/inddb_audio_buffer_source_node.mjs +1 -1
- package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +7 -7
- package/esm2020/lib/audio/ui/audio_display_control.mjs +4 -4
- package/esm2020/lib/audio/ui/audio_display_scroll_pane.mjs +4 -4
- package/esm2020/lib/audio/ui/audiosignal.mjs +4 -4
- package/esm2020/lib/audio/ui/container.mjs +6 -6
- package/esm2020/lib/audio/ui/livelevel.mjs +4 -4
- package/esm2020/lib/audio/ui/scroll_pane_horizontal.mjs +4 -4
- package/esm2020/lib/audio/ui/sonagram.mjs +4 -4
- package/esm2020/lib/db/inddb.mjs +4 -4
- package/esm2020/lib/net/uploader.mjs +31 -28
- package/esm2020/lib/speechrecorder/project/project.service.mjs +7 -7
- package/esm2020/lib/speechrecorder/recordings/basic_recording.service.mjs +53 -51
- package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +124 -116
- package/esm2020/lib/speechrecorder/script/script.service.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +26 -27
- package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +1 -1
- package/esm2020/lib/speechrecorder/session/controlpanel.mjs +34 -32
- package/esm2020/lib/speechrecorder/session/progress.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/prompting.mjs +16 -16
- package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/recording_list.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +6 -6
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +20 -19
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +43 -41
- package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +147 -137
- package/esm2020/lib/speechrecorder/session/session.service.mjs +15 -12
- package/esm2020/lib/speechrecorder/session/session_finished_dialog.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/warning_bar.mjs +4 -4
- package/esm2020/lib/speechrecorder/spruploader.mjs +4 -4
- package/esm2020/lib/speechrecorder/startstopsignal/startstopsignal.mjs +1 -2
- package/esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +4 -4
- package/esm2020/lib/speechrecorderng.component.mjs +6 -6
- package/esm2020/lib/speechrecorderng.module.mjs +5 -5
- package/esm2020/lib/spr.config.mjs +4 -4
- package/esm2020/lib/spr.module.version.mjs +2 -2
- package/esm2020/lib/ui/canvas_layer_comp.mjs +4 -4
- package/esm2020/lib/ui/message_dialog.mjs +4 -4
- package/esm2020/lib/ui/recordingitem_display.mjs +8 -8
- package/esm2020/lib/ui/responsive_component.mjs +4 -4
- package/esm2020/lib/utils/scrollIntoViewToBottom.mjs +4 -4
- package/fesm2015/speechrecorderng.mjs +744 -701
- package/fesm2015/speechrecorderng.mjs.map +1 -1
- package/fesm2020/speechrecorderng.mjs +744 -701
- package/fesm2020/speechrecorderng.mjs.map +1 -1
- package/lib/action/action.d.ts +1 -1
- package/lib/audio/audio_display.d.ts +1 -3
- package/lib/audio/capture/capture.d.ts +2 -0
- package/lib/audio/io/stream.d.ts +1 -1
- package/lib/net/uploader.d.ts +6 -6
- package/lib/speechrecorder/project/project.service.d.ts +4 -4
- package/lib/speechrecorder/script/script.service.d.ts +2 -2
- package/lib/speechrecorder/session/audiorecorder.d.ts +1 -2
- package/lib/speechrecorder/session/basicrecorder.d.ts +1 -1
- package/lib/speechrecorder/session/controlpanel.d.ts +1 -1
- package/lib/speechrecorder/session/session.service.d.ts +2 -2
- package/lib/spr.module.version.d.ts +1 -1
- package/package.json +14 -14
|
@@ -216,7 +216,7 @@ export class Uploader {
|
|
|
216
216
|
si += v.size;
|
|
217
217
|
}
|
|
218
218
|
else if (typeof v === 'string') {
|
|
219
|
-
// encode to
|
|
219
|
+
// encode to UTF-8 to get upload size
|
|
220
220
|
si += this.te.encode().length;
|
|
221
221
|
}
|
|
222
222
|
});
|
|
@@ -254,34 +254,37 @@ export class Uploader {
|
|
|
254
254
|
// pipe(timeout()) is not the same as xhr.timeout
|
|
255
255
|
let uploadedUpload = null;
|
|
256
256
|
//console.debug("Post upload: "+ul)
|
|
257
|
-
this.http.post(ul.url, ul.data, { withCredentials: this.withCredentials }).pipe(timeout(timeoVal)).subscribe(
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
// The backend returned an unsuccessful response code.
|
|
267
|
-
// The response body may contain clues as to what went wrong,
|
|
268
|
-
console.error(`Upload error: Server returned code ${err.status}`);
|
|
269
|
-
}
|
|
270
|
-
this.processError(ul);
|
|
271
|
-
}, () => {
|
|
272
|
-
//console.debug('Upload complete method called')
|
|
273
|
-
if (uploadedUpload) {
|
|
274
|
-
if (this.DEBUG_DELAY > 0) {
|
|
275
|
-
window.setTimeout(() => {
|
|
276
|
-
this.uploadDone(ul);
|
|
277
|
-
}, this.DEBUG_DELAY);
|
|
257
|
+
this.http.post(ul.url, ul.data, { withCredentials: this.withCredentials }).pipe(timeout(timeoVal)).subscribe({
|
|
258
|
+
next: (data) => {
|
|
259
|
+
uploadedUpload = ul;
|
|
260
|
+
//console.debug('Next method called for upload: '+uploadedUpload)
|
|
261
|
+
},
|
|
262
|
+
error: (err) => {
|
|
263
|
+
if (err.error instanceof Error) {
|
|
264
|
+
// A client-side or network error occurred. Handle it accordingly.
|
|
265
|
+
console.error('Upload error occurred:', err.error.message);
|
|
278
266
|
}
|
|
279
267
|
else {
|
|
280
|
-
|
|
268
|
+
// The backend returned an unsuccessful response code.
|
|
269
|
+
// The response body may contain clues as to what went wrong,
|
|
270
|
+
console.error(`Upload error: Server returned code ${err.status}`);
|
|
271
|
+
}
|
|
272
|
+
this.processError(ul);
|
|
273
|
+
}, complete: () => {
|
|
274
|
+
//console.debug('Upload complete method called')
|
|
275
|
+
if (uploadedUpload) {
|
|
276
|
+
if (this.DEBUG_DELAY > 0) {
|
|
277
|
+
window.setTimeout(() => {
|
|
278
|
+
this.uploadDone(ul);
|
|
279
|
+
}, this.DEBUG_DELAY);
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
this.uploadDone(uploadedUpload);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
console.error('Upload post complete, but upload not set in next method!');
|
|
281
287
|
}
|
|
282
|
-
}
|
|
283
|
-
else {
|
|
284
|
-
console.error('Upload post complete, but upload not set in next method!');
|
|
285
288
|
}
|
|
286
289
|
});
|
|
287
290
|
}
|
|
@@ -296,7 +299,7 @@ export class Uploader {
|
|
|
296
299
|
// set retry timer
|
|
297
300
|
this.retryTimerId = window.setTimeout(() => {
|
|
298
301
|
this.retryTimerRunning = false;
|
|
299
|
-
//console.debug("Upload retry timer
|
|
302
|
+
//console.debug("Upload retry timer expired. Continue processing...")
|
|
300
303
|
this.process();
|
|
301
304
|
}, this.RETRY_DELAY);
|
|
302
305
|
this.retryTimerRunning = true;
|
|
@@ -361,4 +364,4 @@ export class Uploader {
|
|
|
361
364
|
}
|
|
362
365
|
}
|
|
363
366
|
}
|
|
364
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvbmV0L3VwbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV4QyxxQkFBcUI7QUFDckIsTUFBTSxDQUFOLElBQVksWUFBc0U7QUFBbEYsV0FBWSxZQUFZO0lBQUUsK0NBQVEsQ0FBQTtJQUFFLHlEQUFhLENBQUE7SUFBRyxpREFBUyxDQUFBO0lBQUUsK0NBQVEsQ0FBQTtJQUFFLDhDQUFRLENBQUE7QUFBQSxDQUFDLEVBQXRFLFlBQVksS0FBWixZQUFZLFFBQTBEO0FBRWxGLHdCQUF3QjtBQUN4Qiw0RkFBNEY7QUFDNUYsTUFBTSxDQUFOLElBQVksY0FBK0U7QUFBM0YsV0FBWSxjQUFjO0lBQUcsbURBQVEsQ0FBQTtJQUFFLDZEQUFhLENBQUE7SUFBRSxxRUFBaUIsQ0FBQTtJQUFDLG1EQUFRLENBQUE7SUFBRSxrREFBUSxDQUFBO0FBQUEsQ0FBQyxFQUEvRSxjQUFjLEtBQWQsY0FBYyxRQUFpRTtBQUUzRixNQUFNLE9BQU8seUJBQXlCO0lBTWxDLFlBQVksVUFBa0IsRUFBRSxRQUFnQixFQUFFLE1BQXNCO1FBQ3BFLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsR0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVELFVBQVU7UUFDTixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLGdDQUFnQztZQUNoQyxPQUFPLEdBQUcsQ0FBQztTQUNkO1FBQ0QsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEUsb0dBQW9HO1FBQ3BHLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7Q0FFSjtBQUVELE1BQU0sT0FBTyxNQUFNO0lBWWYsWUFBWSxJQUFrQixFQUFFLEdBQVUsRUFBUyxxQkFBMEMsSUFBSTtRQUE5Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQTRCO1FBRmpHLFdBQU0sR0FBZ0MsSUFBSSxDQUFDO1FBZ0N0QyxhQUFRLEdBQUcsR0FBWSxFQUFFO1lBQzlCLElBQUksQ0FBQyxHQUFDLG1CQUFtQixJQUFJLENBQUMsTUFBTSxVQUFVLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxRCxJQUFHLElBQUksQ0FBQyxLQUFLLFlBQVksSUFBSSxFQUFDO2dCQUMxQixDQUFDLEdBQUMsQ0FBQyxHQUFDLFdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNwQztpQkFBSyxJQUFHLElBQUksQ0FBQyxLQUFLLFlBQWEsUUFBUSxFQUFDO2dCQUN0QyxrQ0FBa0M7YUFDcEM7WUFDRCxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQTtRQXJDSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDcEMsQ0FBQztJQWRILElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFjQyxJQUFJLEdBQUc7UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSTtRQUNBLElBQUksQ0FBQyxNQUFNLEdBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztRQUM5Qix1Q0FBdUM7UUFDdkMsSUFBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDL0MsK0VBQStFO1NBQ2hGO2FBQUk7WUFDSCwrQ0FBK0M7U0FDaEQ7UUFDRCxJQUFHLElBQUksQ0FBQyxNQUFNLEVBQUM7WUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25CO0lBQ0wsQ0FBQztDQWFKO0FBRUQsTUFBTSxPQUFPLFlBQVk7SUFBekI7UUFFRSxnQkFBVyxHQUE4QixJQUFJLENBQUM7UUFZdEMsWUFBTyxHQUFhLElBQUksQ0FBQztJQUNuQyxDQUFDO0lBWEMsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxLQUFvQjtRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBQztZQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7Q0FFRjtBQUVELE1BQU0sT0FBTyxTQUFTO0lBQXRCO1FBRVUsWUFBTyxHQUE2QixJQUFJLEtBQUssRUFBdUIsQ0FBQztRQUNyRSxjQUFTLEdBQUMsS0FBSyxDQUFDO1FBRWhCLFlBQU8sR0FBb0MsSUFBSSxDQUFDO0lBZ0YxRCxDQUFDO0lBOUVDLEdBQUcsQ0FBQyxNQUEwQjtRQUM1QixJQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFBO1NBQ2pGO1FBQ0QsSUFBRyxNQUFNLFlBQVksWUFBWSxFQUFDO1lBQ2hDLE1BQU0sQ0FBQyxXQUFXLEdBQUMsQ0FBQyxHQUFHLEVBQUMsRUFBRTtnQkFDeEIsR0FBRyxDQUFDLE1BQU0sR0FBQyxHQUFFLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzNCLENBQUMsQ0FBQTtnQkFDRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixDQUFDLENBQUE7U0FDRjtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTVCLENBQUM7SUFFRCxRQUFRO1FBQ04sdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDO1FBRXBCLCtCQUErQjtRQUMvQixLQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUM7WUFDMUIsSUFBRyxHQUFHLFlBQVksTUFBTSxFQUFFO2dCQUN4QixHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7b0JBQzNCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUMzQixDQUFDLENBQUE7YUFDRjtpQkFBSyxJQUFHLEdBQUcsWUFBWSxZQUFZLEVBQUM7Z0JBQ25DLElBQUcsR0FBRyxDQUFDLE1BQU0sRUFBQztvQkFDWixHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFO3dCQUNsQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDM0IsQ0FBQyxDQUFBO2lCQUNGO2FBQ0Y7U0FDRjtRQUVELG9DQUFvQztRQUNwQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsS0FBOEM7UUFDdkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVPLGlCQUFpQjtRQUN2Qix3Q0FBd0M7UUFDeEMsSUFBRyxJQUFJLENBQUMsU0FBUyxFQUFDO1lBRWhCLElBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDZixLQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUM7b0JBQzFCLElBQUcsR0FBRyxZQUFZLE1BQU0sRUFBRTt3QkFDeEIsSUFBSSxZQUFZLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEVBQUU7NEJBQ3BDLHVDQUF1Qzs0QkFDdkMsYUFBYTs0QkFDYix1REFBdUQ7NEJBQ3ZELE9BQU87eUJBQ1I7cUJBQ0Y7eUJBQUssSUFBRyxHQUFHLFlBQVksWUFBWSxFQUFDO3dCQUNuQyxJQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUM7NEJBQ1osSUFBSSxZQUFZLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO2dDQUMzQyx1Q0FBdUM7Z0NBQ3ZDLGFBQWE7Z0NBQ2IsZ0VBQWdFO2dDQUNoRSxPQUFPOzZCQUNSO3lCQUNGOzZCQUFJOzRCQUNILG1DQUFtQzs0QkFDbkMsMkVBQTJFOzRCQUMzRSxPQUFPO3lCQUNSO3FCQUNGO2lCQUNGO2dCQUNELG9FQUFvRTtnQkFDcEUsZ0RBQWdEO2dCQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3BCO1NBQ0Y7SUFDSCxDQUFDO0NBQ0Y7QUFNRCxNQUFNLE9BQU8sUUFBUTtJQWtCakIsWUFBb0IsSUFBZ0IsRUFBVSxrQkFBMkIsS0FBSztRQUExRCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBakI5RSxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsQ0FBQyxnQkFBZ0I7UUFDM0Msd0JBQW1CLEdBQUcsSUFBSSxDQUFDLENBQUUsZ0JBQWdCO1FBRTdDLGdCQUFXLEdBQVcsS0FBSyxDQUFDLENBQUMsa0JBQWtCO1FBQy9DLGdCQUFXLEdBQVcsQ0FBQyxDQUFDO1FBQ3hCLHVCQUF1QjtRQUNmLFdBQU0sR0FBbUIsY0FBYyxDQUFDLElBQUksQ0FBQztRQUVyRCxhQUFRLEdBQXFELElBQUksQ0FBQztRQUMxRCxnQkFBVyxHQUFXLENBQUMsQ0FBQztRQUN4QixjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBRXRCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMxQixpQkFBWSxHQUFrQixJQUFJLENBQUM7UUFFbkMsT0FBRSxHQUFhLElBQUksV0FBVyxFQUFFLENBQUM7UUFHckMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO0lBQ25DLENBQUM7SUFFTyxRQUFRLENBQUMsRUFBZ0I7UUFDN0IsSUFBSSxFQUFFLEdBQUMsQ0FBQyxDQUFDO1FBQ1QsSUFBRyxFQUFFLFlBQVksSUFBSSxFQUFDO1lBQ2xCLEVBQUUsR0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO1NBQ2Q7YUFBSyxJQUFHLEVBQUUsWUFBYSxRQUFRLEVBQUM7WUFDN0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRTtnQkFDZCxJQUFHLENBQUMsWUFBWSxJQUFJLEVBQUM7b0JBQ2pCLEVBQUUsSUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO2lCQUNkO3FCQUFLLElBQUcsT0FBTyxDQUFDLEtBQUksUUFBUSxFQUFDO29CQUMxQixxQ0FBcUM7b0JBQ3JDLEVBQUUsSUFBRyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztpQkFDaEM7WUFDTCxDQUFDLENBQUMsQ0FBQTtTQUNMO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRVEsVUFBVSxDQUFDLEVBQVM7UUFFekIsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRVYsMkJBQTJCO1FBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0QyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNwQixnQkFBZ0I7Z0JBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDO2dCQUN6QixNQUFNO2FBQ1Q7U0FDSjtRQUNELHlCQUF5QjtRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFDbEMsV0FBVztRQUNYLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRU8sV0FBVyxDQUFDLEVBQVM7UUFFekIsRUFBRSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBQ25DLElBQUksY0FBYyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQztTQUM5QzthQUFNO1lBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDO1NBQzFDO1FBRUQsSUFBSSxLQUFLLEdBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxrQkFBa0IsR0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLG1CQUFtQixHQUFDLElBQUksQ0FBQztRQUMzRCxJQUFJLFFBQVEsR0FBUSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBQ3hFLGlEQUFpRDtRQUVuRCxJQUFJLGNBQWMsR0FBYSxJQUFJLENBQUM7UUFDbEMsbUNBQW1DO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFDLElBQUksRUFBQyxFQUFDLGVBQWUsRUFBQyxJQUFJLENBQUMsZUFBZSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUNyRyxJQUFJLENBQUMsRUFBRTtZQUNMLGNBQWMsR0FBRyxFQUFFLENBQUM7WUFDcEIsaUVBQWlFO1FBQ25FLENBQUMsRUFBQyxDQUFDLEdBQXNCLEVBQUUsRUFBRTtZQUMzQixJQUFJLEdBQUcsQ0FBQyxLQUFLLFlBQVksS0FBSyxFQUFFO2dCQUM5QixrRUFBa0U7Z0JBQ2xFLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUM1RDtpQkFBTTtnQkFDTCxzREFBc0Q7Z0JBQ3RELDZEQUE2RDtnQkFDN0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7YUFDbkU7WUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3ZCLENBQUMsRUFBQyxHQUFFLEVBQUU7WUFDSixnREFBZ0Q7WUFDaEQsSUFBRyxjQUFjLEVBQUU7Z0JBQ2pCLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBQyxDQUFDLEVBQUU7b0JBQ3RCLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN0QixDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUN0QjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFBO2lCQUNoQzthQUNGO2lCQUFJO2dCQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQTthQUMxRTtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFlBQVksQ0FBQyxFQUFTO1FBQzFCLDBDQUEwQztRQUMxQyxFQUFFLENBQUMsTUFBTSxHQUFDLFlBQVksQ0FBQyxHQUFHLENBQUE7UUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDO1FBRWpDLElBQUksRUFBRSxHQUFHLElBQUkseUJBQXlCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3JCO1FBRUQsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDckMsSUFBSSxDQUFDLGlCQUFpQixHQUFDLEtBQUssQ0FBQztZQUM3QixzRUFBc0U7WUFDdEUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25CLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFckIsSUFBSSxDQUFDLGlCQUFpQixHQUFDLElBQUksQ0FBQztRQUM1Qix3RUFBd0U7SUFDNUUsQ0FBQztJQUVLLE9BQU87UUFDYiwyQkFBMkI7UUFDM0IsSUFBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUM7WUFDdEIsSUFBRyxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNsQixNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTthQUN6QztZQUNILElBQUksQ0FBQyxpQkFBaUIsR0FBQyxLQUFLLENBQUE7WUFDNUIsdUNBQXVDO1NBQ3hDO1FBRUQsSUFBSSxHQUFHLEdBQWtCLElBQUksQ0FBQztRQUU5QixnREFBZ0Q7UUFFaEQsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDeEIsK0NBQStDO1FBRS9DLElBQUksQ0FBQyxHQUFDLENBQUMsSUFBSSxjQUFjLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksY0FBYyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBRWpHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzFCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JCLGdEQUFnRDtnQkFDaEQsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxJQUFJLEVBQUU7b0JBQ25DLDBDQUEwQztvQkFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDckIsR0FBRyxHQUFHLEVBQUUsQ0FBQztvQkFDVCxNQUFNO2lCQUNQO2FBQ0Y7WUFDRCxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNSLHFDQUFxQztnQkFDckMscUJBQXFCO2dCQUNyQiw0RUFBNEU7Z0JBQzVFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzFCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3JCLGdEQUFnRDtvQkFDaEQsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxHQUFHLEVBQUU7d0JBQ2xDLGdEQUFnRDt3QkFDaEQsK0NBQStDO3dCQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUNyQixHQUFHLEdBQUcsRUFBRSxDQUFDO3dCQUNULE1BQU07cUJBQ1A7aUJBQ0Y7YUFDRjtTQUNGO1FBQ0QsSUFBRyxDQUFDLElBQUUsQ0FBQyxFQUFDO1lBQ04sK0JBQStCO1lBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUMsY0FBYyxDQUFDLElBQUksQ0FBQTtTQUNoQztRQUNELElBQUksRUFBRSxHQUFHLElBQUkseUJBQXlCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNuQjtJQUNILENBQUM7SUFFQyxXQUFXLENBQUMsRUFBVTtRQUNsQixJQUFJLEVBQUUsRUFBRTtZQUNKLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDO1lBQzNCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNsQjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG4gICAgaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbiAgICBpbXBvcnQgeyB0aW1lb3V0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXHJcblxyXG4gICAgLy8gc3RhdGUgb2YgYW4gdXBsb2FkXHJcbiAgICBleHBvcnQgZW51bSBVcGxvYWRTdGF0dXMge0lETEUgPSAxLCBVUExPQURJTkcgPSAyLCAgQUJPUlQgPSAzLCBET05FID0gMCwgRVJSID0gLTF9XHJcblxyXG4gICAgLy8gc3RhdGUgb2YgdGhlIHVwbG9hZGVyXHJcbiAgICAvLyBUUllfVVBMT0FESU5HIGlzIHVwbG9hZGluZyBzdGF0ZSBhZnRlciBhbiBlcnJvciAoZm9yIGV4YW1wbGUgaWYgZGlzY29ubmVjdGVkIGZyb20gc2VydmVyKVxyXG4gICAgZXhwb3J0IGVudW0gVXBsb2FkZXJTdGF0dXMgeyBET05FID0gMCwgVVBMT0FESU5HID0gMSwgVFJZX1VQTE9BRElORyA9IDIsTkVYVCA9IDMsIEVSUiA9IC0xfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50IHtcclxuICAgICAgICBwcml2YXRlIF9zaXplUXVldWVkOm51bWJlcjtcclxuICAgICAgICBwcml2YXRlIF9zaXplRG9uZTpudW1iZXI7XHJcbiAgICAgICAgcHJpdmF0ZSBfc3RhdHVzOiBVcGxvYWRlclN0YXR1cztcclxuXHJcblxyXG4gICAgICAgIGNvbnN0cnVjdG9yKHNpemVRdWV1ZWQ6IG51bWJlciwgc2l6ZURvbmU6IG51bWJlciwgc3RhdHVzOiBVcGxvYWRlclN0YXR1cykge1xyXG4gICAgICAgICAgICB0aGlzLl9zaXplUXVldWVkID0gc2l6ZVF1ZXVlZDtcclxuICAgICAgICAgICAgdGhpcy5fc2l6ZURvbmUgPSBzaXplRG9uZTtcclxuICAgICAgICAgICAgdGhpcy5fc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IHNpemVRdWV1ZWQoKTpudW1iZXIge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZVF1ZXVlZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBzaXplRG9uZSgpOm51bWJlciB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaXplRG9uZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNpemVJblF1ZXVlKCl7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZVF1ZXVlZC10aGlzLl9zaXplRG9uZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBzdGF0dXMoKTogVXBsb2FkZXJTdGF0dXMge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXBsb2FkRG9uZSgpOiBib29sZWFuIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLl9zaXplRG9uZSA+PSB0aGlzLl9zaXplUXVldWVkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBlcmNlbnREb25lKCk6IG51bWJlciB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zaXplUXVldWVkID09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIG5vIGRhdGEgcXVldWVkLCB3ZSBhcmUgXCJkb25lXCJcclxuICAgICAgICAgICAgICAgIHJldHVybiAxMDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHBlcmNlbnQgPSBNYXRoLmZsb29yKHRoaXMuX3NpemVEb25lICogMTAwIC8gdGhpcy5fc2l6ZVF1ZXVlZCk7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJVcGxvYWQgc3RhdHVzOiBxdWV1ZWQ6IFwiK3RoaXMuX3NpemVRdWV1ZWQrXCIsIGRvbmU6IFwiK3RoaXMuX3NpemVEb25lK1wiLCBcIitwZXJjZW50K1wiJVwiKVxyXG4gICAgICAgICAgICByZXR1cm4gcGVyY2VudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBVcGxvYWQge1xyXG5cclxuICAgICAgZ2V0IHNlcnZlclBlcnNpc3RhYmxlKCk6IFNlcnZlclBlcnNpc3RhYmxlIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlcnZlclBlcnNpc3RhYmxlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAgIHByaXZhdGUgX2RhdGE6QmxvYnxGb3JtRGF0YTtcclxuICAgICAgICBwcml2YXRlIF91cmw6c3RyaW5nO1xyXG5cclxuICAgICAgICBzdGF0dXM6IFVwbG9hZFN0YXR1cztcclxuICAgICAgICBvbkRvbmU6KCh1cGxvYWQ6VXBsb2FkKT0+dm9pZCkgfCBudWxsPW51bGw7XHJcblxyXG4gICAgICAgIGNvbnN0cnVjdG9yKGJsb2I6QmxvYnxGb3JtRGF0YSwgdXJsOnN0cmluZyxwcml2YXRlIF9zZXJ2ZXJQZXJzaXN0YWJsZTpTZXJ2ZXJQZXJzaXN0YWJsZXxudWxsPW51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5fZGF0YSA9IGJsb2I7XHJcbiAgICAgICAgICAgIHRoaXMuX3VybCA9IHVybDtcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBVcGxvYWRTdGF0dXMuSURMRTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCB1cmwoKTpzdHJpbmcge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXJsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IGRhdGEoKTpCbG9ifEZvcm1EYXRhIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkb25lKCl7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzPVVwbG9hZFN0YXR1cy5ET05FO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTaW5nbGUgdXBsb2FkIGRvbmUuXCIpO1xyXG4gICAgICAgICAgICBpZih0aGlzLl9zZXJ2ZXJQZXJzaXN0YWJsZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3NlcnZlclBlcnNpc3RhYmxlLnNlcnZlclBlcnNpc3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU2luZ2xlIHVwbG9hZCBzZXQgc2VydmVyIHBlcnNpc3RlZDogXCIrdGhpcy5zZXJ2ZXJQZXJzaXN0YWJsZSk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNlcnZlciBwZXJzaXN0YWJsZSBub3Qgc2V0LlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0aGlzLm9uRG9uZSl7XHJcbiAgICAgICAgICAgICAgdGhpcy5vbkRvbmUodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgIHB1YmxpYyB0b1N0cmluZyA9ICgpIDogc3RyaW5nID0+IHtcclxuICAgICAgICBsZXQgcz1gVXBsb2FkOiBTdGF0dXM6ICR7dGhpcy5zdGF0dXN9LCBVUkw6ICR7dGhpcy5fdXJsfWA7XHJcbiAgICAgICAgaWYodGhpcy5fZGF0YSBpbnN0YW5jZW9mIEJsb2Ipe1xyXG4gICAgICAgICAgICBzPXMrYCwgU2l6ZTogJHt0aGlzLl9kYXRhLnNpemV9YDtcclxuICAgICAgICB9ZWxzZSBpZih0aGlzLl9kYXRhIGluc3RhbmNlb2YgIEZvcm1EYXRhKXtcclxuICAgICAgICAgICAvLyBUT0RPIChpdGVyYXRlIHRocm91Z2ggcGFydHMgPz8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGNsYXNzIFVwbG9hZEhvbGRlcntcclxuXHJcbiAgICAgIG9uVXBsb2FkU2V0OigodXBsb2FkOlVwbG9hZCk9PnZvaWQpfG51bGw9bnVsbDtcclxuXHJcbiAgICAgIGdldCB1cGxvYWQoKTogVXBsb2FkIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwbG9hZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2V0IHVwbG9hZCh2YWx1ZTogVXBsb2FkIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX3VwbG9hZCA9IHZhbHVlO1xyXG4gICAgICAgIGlmKHRoaXMuX3VwbG9hZCAmJiB0aGlzLm9uVXBsb2FkU2V0KXtcclxuICAgICAgICAgIHRoaXMub25VcGxvYWRTZXQodGhpcy5fdXBsb2FkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcHJpdmF0ZSBfdXBsb2FkOlVwbG9hZHxudWxsPW51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGNsYXNzIFVwbG9hZFNldHtcclxuXHJcbiAgICAgIHByaXZhdGUgdXBsb2FkczogQXJyYXk8VXBsb2FkfFVwbG9hZEhvbGRlcj49bmV3IEFycmF5PFVwbG9hZHxVcGxvYWRIb2xkZXI+KCk7XHJcbiAgICAgIHByaXZhdGUgX2NvbXBsZXRlPWZhbHNlO1xyXG5cclxuICAgICAgcHJpdmF0ZSBfb25Eb25lOigodXBsb2FkU2V0OlVwbG9hZFNldCk9PnZvaWQpfG51bGw9bnVsbDtcclxuXHJcbiAgICAgIGFkZCh1cGxvYWQ6VXBsb2FkfFVwbG9hZEhvbGRlcil7XHJcbiAgICAgICAgaWYodGhpcy5fY29tcGxldGUpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFkZCB1cGxvYWQgdG8gdXBsb2FkIHNldC4gVXBsb2FkIHNldCBhbHJlYWR5IGNvbXBsZXRlLicpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHVwbG9hZCBpbnN0YW5jZW9mIFVwbG9hZEhvbGRlcil7XHJcbiAgICAgICAgICB1cGxvYWQub25VcGxvYWRTZXQ9KHVwbCk9PntcclxuICAgICAgICAgICAgdXBsLm9uRG9uZT0oKT0+e1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tVcGxvYWRTdGF0ZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrVXBsb2FkU3RhdGVzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBsb2Fkcy5wdXNoKHVwbG9hZCk7XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb21wbGV0ZSgpe1xyXG4gICAgICAgIC8vIE1hcmsgc2V0IGFzIGNvbXBsZXRlXHJcbiAgICAgICAgdGhpcy5fY29tcGxldGU9dHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gYWRkIGxpc3RlbmVycyB0byBlYWNoIHVwbG9hZFxyXG4gICAgICAgIGZvcihsZXQgdXBsIG9mIHRoaXMudXBsb2Fkcyl7XHJcbiAgICAgICAgICBpZih1cGwgaW5zdGFuY2VvZiBVcGxvYWQpIHtcclxuICAgICAgICAgICAgdXBsLm9uRG9uZSA9ICh1cGw6IFVwbG9hZCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tVcGxvYWRTdGF0ZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfWVsc2UgaWYodXBsIGluc3RhbmNlb2YgVXBsb2FkSG9sZGVyKXtcclxuICAgICAgICAgICAgaWYodXBsLnVwbG9hZCl7XHJcbiAgICAgICAgICAgICAgdXBsLnVwbG9hZC5vbkRvbmUgPSAodXBsOiBVcGxvYWQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tVcGxvYWRTdGF0ZXMoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNoZWNrIGltbWVkaWF0ZWx5IGlmIGFscmVhZHkgZG9uZVxyXG4gICAgICAgIHRoaXMuY2hlY2tVcGxvYWRTdGF0ZXMoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2V0IG9uRG9uZSh2YWx1ZTogKCh1cGxvYWRTZXQ6IFVwbG9hZFNldCkgPT4gdm9pZCkgfCBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fb25Eb25lID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5jaGVja1VwbG9hZFN0YXRlcygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBwcml2YXRlIGNoZWNrVXBsb2FkU3RhdGVzKCl7XHJcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ2hlY2sgdXBsb2FkIHN0YXRlLi4uXCIpXHJcbiAgICAgICAgaWYodGhpcy5fY29tcGxldGUpe1xyXG5cclxuICAgICAgICAgIGlmKHRoaXMuX29uRG9uZSkge1xyXG4gICAgICAgICAgICBmb3IobGV0IHVwbCBvZiB0aGlzLnVwbG9hZHMpe1xyXG4gICAgICAgICAgICAgIGlmKHVwbCBpbnN0YW5jZW9mIFVwbG9hZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFVwbG9hZFN0YXR1cy5ET05FICE9PSB1cGwuc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIEF0IGxlYXN0IHRoaXMgdXBsb2FkIGlzIG5vdCB5ZXQgZG9uZVxyXG4gICAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nXHJcbiAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNoZWNrIHVwbG9hZCBzdGF0ZTogVXBsb2FkIG5vdCBkb25lLlwiKVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfWVsc2UgaWYodXBsIGluc3RhbmNlb2YgVXBsb2FkSG9sZGVyKXtcclxuICAgICAgICAgICAgICAgIGlmKHVwbC51cGxvYWQpe1xyXG4gICAgICAgICAgICAgICAgICBpZiAoVXBsb2FkU3RhdHVzLkRPTkUgIT09IHVwbC51cGxvYWQuc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQXQgbGVhc3QgdGhpcyB1cGxvYWQgaXMgbm90IHlldCBkb25lXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNoZWNrIHVwbG9hZCBzdGF0ZTogVXBsb2FkIChob2xkZXIpIG5vdCBkb25lLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBhY3R1YWwgdXBsb2FkIGlzIG5vdCB5ZXQgc2V0XHJcbiAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNoZWNrIHVwbG9hZCBzdGF0ZTogVXBsb2FkIChob2xkZXIpOiB1cGxvYWQgbm90IHlldCBzZXQuXCIpXHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2V0IGlzIGNvbXBsZXRlIGFuZCBhbGwgdXBsb2FkIHBhcnRzIGFyZSBkb25lLCBjYWxsIGRvbmUgY2FsbGJhY2tcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ2hlY2sgdXBsb2FkIHN0YXRlOiBBbGwgZG9uZS5cIilcclxuICAgICAgICAgICAgdGhpcy5fb25Eb25lKHRoaXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBpbnRlcmZhY2UgU2VydmVyUGVyc2lzdGFibGV7XHJcbiAgICAgICAgc2VydmVyUGVyc2lzdGVkOmJvb2xlYW47XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGNsYXNzIFVwbG9hZGVyIHtcclxuICAgICAgICBQT1NUX01JTl9USU1FT1VUID0gMTIwMDAwOyAvLyAybWluIHBsdXMgLi4uXHJcbiAgICAgICAgUE9TVF9USU1FT1VUX1BFUl9LQiA9IDEwMDA7ICAvLyAuLi4gMXMgcGVyIGtCXHJcblxyXG4gICAgICAgIFJFVFJZX0RFTEFZOiBudW1iZXIgPSAzMDAwMDsgLy8gcmV0cnkgZXZlcnkgMzBzXHJcbiAgICAgICAgREVCVUdfREVMQVk6IG51bWJlciA9IDA7XHJcbiAgICAgICAgLy9ERUJVR19ERUxBWTpudW1iZXI9MDtcclxuICAgICAgICBwcml2YXRlIHN0YXR1czogVXBsb2FkZXJTdGF0dXMgPSBVcGxvYWRlclN0YXR1cy5ET05FO1xyXG4gICAgICAgIHByaXZhdGUgcXVlOiBBcnJheTxVcGxvYWQ+O1xyXG4gICAgICAgIGxpc3RlbmVyOiAoKHVlOiBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIHByaXZhdGUgX3NpemVRdWV1ZWQ6IG51bWJlciA9IDA7XHJcbiAgICAgICAgcHJpdmF0ZSBfc2l6ZURvbmU6IG51bWJlciA9IDA7XHJcblxyXG4gICAgICAgIHByaXZhdGUgcmV0cnlUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICBwcml2YXRlIHJldHJ5VGltZXJJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgIHByaXZhdGUgdGU6VGV4dEVuY29kZXI9bmV3IFRleHRFbmNvZGVyKCk7XHJcblxyXG4gICAgICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZSA9IG5ldyBBcnJheTxVcGxvYWQ+KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlIGRhdGFTaXplKGR0OkJsb2J8Rm9ybURhdGEpe1xyXG4gICAgICAgICAgICBsZXQgc2k9MDtcclxuICAgICAgICAgICAgaWYoZHQgaW5zdGFuY2VvZiBCbG9iKXtcclxuICAgICAgICAgICAgICAgIHNpPWR0LnNpemU7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKGR0IGluc3RhbmNlb2YgIEZvcm1EYXRhKXtcclxuICAgICAgICAgICAgICAgIGR0LmZvckVhY2goKHYsayk9PntcclxuICAgICAgICAgICAgICAgICAgICBpZih2IGluc3RhbmNlb2YgRmlsZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpKz12LnNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYodHlwZW9mIHYgPT09J3N0cmluZycpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlbmNvZGUgdG8gVVQtZjggdG8gZ2V0IHVwbG9hZCBzaXplXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpKz0gdGhpcy50ZS5lbmNvZGUoKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc2k7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlICB1cGxvYWREb25lKHVsOlVwbG9hZCkge1xyXG5cclxuICAgICAgICAgICAgdWwuZG9uZSgpO1xyXG5cclxuICAgICAgICAgICAgLy8gcmVtb3ZlIHVwbG9hZCBmcm9tIHF1ZXVlXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5xdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnF1ZVtpXSA9PT0gdWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCwgcmVtb3ZlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWUuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB1bFNpemUgPSB0aGlzLmRhdGFTaXplKHVsLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpemVEb25lICs9IHVsU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzZXQgdG8gZG9uZSBmb3Igbm93Li4uXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gVXBsb2FkZXJTdGF0dXMuTkVYVDtcclxuICAgICAgICAgICAgLy8gY29udGludWVcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlIHN0YXJ0VXBsb2FkKHVsOlVwbG9hZCkge1xyXG5cclxuICAgICAgICAgICAgdWwuc3RhdHVzID0gVXBsb2FkU3RhdHVzLlVQTE9BRElORztcclxuICAgICAgICAgICAgaWYgKFVwbG9hZGVyU3RhdHVzLkVSUiA9PT0gdGhpcy5zdGF0dXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gVXBsb2FkZXJTdGF0dXMuVFJZX1VQTE9BRElORztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gVXBsb2FkZXJTdGF0dXMuVVBMT0FESU5HO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZFNpemU9dGhpcy5kYXRhU2l6ZSh1bC5kYXRhKTtcclxuICAgICAgICAgICAgbGV0IHRpbWVvdXRGb3JEYXRhU2l6ZT1kU2l6ZSp0aGlzLlBPU1RfVElNRU9VVF9QRVJfS0IvMTAwMDtcclxuICAgICAgICAgICAgbGV0IHRpbWVvVmFsOm51bWJlcj1NYXRoLnJvdW5kKHRoaXMuUE9TVF9NSU5fVElNRU9VVCt0aW1lb3V0Rm9yRGF0YVNpemUpXHJcbiAgICAgICAgICAgIC8vIHBpcGUodGltZW91dCgpKSBpcyBub3QgdGhlIHNhbWUgYXMgeGhyLnRpbWVvdXRcclxuXHJcbiAgICAgICAgICBsZXQgdXBsb2FkZWRVcGxvYWQ6VXBsb2FkfG51bGw9bnVsbDtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiUG9zdCB1cGxvYWQ6IFwiK3VsKVxyXG4gICAgICAgICAgdGhpcy5odHRwLnBvc3QodWwudXJsLHVsLmRhdGEse3dpdGhDcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFsc30pLnBpcGUodGltZW91dCh0aW1lb1ZhbCkpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgdXBsb2FkZWRVcGxvYWQgPSB1bDtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoJ05leHQgbWV0aG9kIGNhbGxlZCBmb3IgdXBsb2FkOiAnK3VwbG9hZGVkVXBsb2FkKVxyXG4gICAgICAgICAgICB9LChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGVyci5lcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBBIGNsaWVudC1zaWRlIG9yIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQuIEhhbmRsZSBpdCBhY2NvcmRpbmdseS5cclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VwbG9hZCBlcnJvciBvY2N1cnJlZDonLCBlcnIuZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIFRoZSBiYWNrZW5kIHJldHVybmVkIGFuIHVuc3VjY2Vzc2Z1bCByZXNwb25zZSBjb2RlLlxyXG4gICAgICAgICAgICAgICAgLy8gVGhlIHJlc3BvbnNlIGJvZHkgbWF5IGNvbnRhaW4gY2x1ZXMgYXMgdG8gd2hhdCB3ZW50IHdyb25nLFxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgVXBsb2FkIGVycm9yOiBTZXJ2ZXIgcmV0dXJuZWQgY29kZSAke2Vyci5zdGF0dXN9YCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0Vycm9yKHVsKVxyXG4gICAgICAgICAgICB9LCgpPT57XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKCdVcGxvYWQgY29tcGxldGUgbWV0aG9kIGNhbGxlZCcpXHJcbiAgICAgICAgICAgICAgaWYodXBsb2FkZWRVcGxvYWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLkRFQlVHX0RFTEFZPjApIHtcclxuICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkRG9uZSh1bCk7XHJcbiAgICAgICAgICAgICAgICAgIH0sIHRoaXMuREVCVUdfREVMQVkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWREb25lKHVwbG9hZGVkVXBsb2FkKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVXBsb2FkIHBvc3QgY29tcGxldGUsIGJ1dCB1cGxvYWQgbm90IHNldCBpbiBuZXh0IG1ldGhvZCEnKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlIHByb2Nlc3NFcnJvcih1bDpVcGxvYWQpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiUHJvY2VzcyB1cGxvYWQgZXJyb3IuLi5cIilcclxuICAgICAgICAgICAgdWwuc3RhdHVzPVVwbG9hZFN0YXR1cy5FUlJcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBVcGxvYWRlclN0YXR1cy5FUlI7XHJcblxyXG4gICAgICAgICAgICBsZXQgdWUgPSBuZXcgVXBsb2FkZXJTdGF0dXNDaGFuZ2VFdmVudCh0aGlzLl9zaXplUXVldWVkLCB0aGlzLl9zaXplRG9uZSwgdGhpcy5zdGF0dXMpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5saXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcih1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHNldCByZXRyeSB0aW1lclxyXG4gICAgICAgICAgICB0aGlzLnJldHJ5VGltZXJJZD13aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJldHJ5VGltZXJSdW5uaW5nPWZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiVXBsb2FkIHJldHJ5IHRpbWVyIGV4cHJpcmVkLiBDb250aW51ZSBwcm9jZXNzaW5nLi4uXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3MoKTtcclxuICAgICAgICAgICAgfSwgdGhpcy5SRVRSWV9ERUxBWSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJldHJ5VGltZXJSdW5uaW5nPXRydWU7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlN0YXJ0ZWQgdXBsb2FkIHJldHJ5IHRpbWVyIFwiK3RoaXMuUkVUUllfREVMQVkrXCJtcyAuLi5cIilcclxuICAgICAgICB9XHJcblxyXG4gICAgICBwcml2YXRlIHByb2Nlc3MoKSB7XHJcbiAgICAgICAgLy8gY2xlYXIgcmV0cnkgdGltZXIgaWYgc2V0XHJcbiAgICAgICAgaWYodGhpcy5yZXRyeVRpbWVyUnVubmluZyl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucmV0cnlUaW1lcklkKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMucmV0cnlUaW1lcklkKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJldHJ5VGltZXJSdW5uaW5nPWZhbHNlXHJcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJDbGVhcmVkIHJldHJ5IHRpbWVyLlwiKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHB1bDogVXBsb2FkIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlVwbG9hZGVyIHN0YXR1czogXCIrdGhpcy5zdGF0dXMpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5xdWUubGVuZ3RoO1xyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhzK1wiIHVwbG9hZHMgYXJlIGluIHRoZSBxdWV1ZS5cIilcclxuXHJcbiAgICAgICAgaWYgKHM+MCAmJiBVcGxvYWRlclN0YXR1cy5VUExPQURJTkcgIT0gdGhpcy5zdGF0dXMgJiYgVXBsb2FkZXJTdGF0dXMuVFJZX1VQTE9BRElORyAhPSB0aGlzLnN0YXR1cykge1xyXG5cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgczsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB1bCA9IHRoaXMucXVlW2ldO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVXBsb2FkIFwiK3VsK1wiIHN0YXR1czpcIit1bC5zdGF0dXMpXHJcbiAgICAgICAgICAgIGlmICh1bC5zdGF0dXMgPT09IFVwbG9hZFN0YXR1cy5JRExFKSB7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlVwbG9hZCBcIit1bCtcIiBzdGFydFVwbG9hZFwiKVxyXG4gICAgICAgICAgICAgIHRoaXMuc3RhcnRVcGxvYWQodWwpO1xyXG4gICAgICAgICAgICAgIHB1bCA9IHVsO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIXB1bCkge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiQ2hlY2sgRVJSIHVwbG9hZHMuLi5cIilcclxuICAgICAgICAgICAgLy8gbm93IGZhaWxlZCB1cGxvYWRzXHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIk5vIHJlZ3VsYXIgdXBsb2FkIGZvdW5kLiBMb29raW5nIGZvciBlcnJvciBzdGF0ZSB1cGxvYWRzLlwiKVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHM7IGkrKykge1xyXG4gICAgICAgICAgICAgIGxldCB1bCA9IHRoaXMucXVlW2ldO1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJVcGxvYWQgXCIrdWwrXCIgc3RhdHVzOlwiK3VsLnN0YXR1cylcclxuICAgICAgICAgICAgICBpZiAodWwuc3RhdHVzID09PSBVcGxvYWRTdGF0dXMuRVJSKSB7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVXBsb2FkIChFUlIpIFwiK3VsK1wiIHN0YXJ0VXBsb2FkXCIpXHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTdGFydCBlcnJvciBzdGF0ZSB1cGxvYWQgXCIrdWwpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VXBsb2FkKHVsKTtcclxuICAgICAgICAgICAgICAgIHB1bCA9IHVsO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHM9PTApe1xyXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiVXBsb2FkIGRvbmUuXCIpXHJcbiAgICAgICAgICB0aGlzLnN0YXR1cz1VcGxvYWRlclN0YXR1cy5ET05FXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB1ZSA9IG5ldyBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50KHRoaXMuX3NpemVRdWV1ZWQsIHRoaXMuX3NpemVEb25lLCB0aGlzLnN0YXR1cyk7XHJcbiAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgIHRoaXMubGlzdGVuZXIodWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgICBxdWV1ZVVwbG9hZCh1bDogVXBsb2FkKSB7XHJcbiAgICAgICAgICAgIGlmICh1bCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHVsU2l6ZSA9IHRoaXMuZGF0YVNpemUodWwuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZS5wdXNoKHVsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NpemVRdWV1ZWQgKz0gdWxTaXplO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuIl19
|
|
367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvbmV0L3VwbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV4QyxxQkFBcUI7QUFDckIsTUFBTSxDQUFOLElBQVksWUFBc0U7QUFBbEYsV0FBWSxZQUFZO0lBQUUsK0NBQVEsQ0FBQTtJQUFFLHlEQUFhLENBQUE7SUFBRyxpREFBUyxDQUFBO0lBQUUsK0NBQVEsQ0FBQTtJQUFFLDhDQUFRLENBQUE7QUFBQSxDQUFDLEVBQXRFLFlBQVksS0FBWixZQUFZLFFBQTBEO0FBRWxGLHdCQUF3QjtBQUN4Qiw0RkFBNEY7QUFDNUYsTUFBTSxDQUFOLElBQVksY0FBK0U7QUFBM0YsV0FBWSxjQUFjO0lBQUcsbURBQVEsQ0FBQTtJQUFFLDZEQUFhLENBQUE7SUFBRSxxRUFBaUIsQ0FBQTtJQUFDLG1EQUFRLENBQUE7SUFBRSxrREFBUSxDQUFBO0FBQUEsQ0FBQyxFQUEvRSxjQUFjLEtBQWQsY0FBYyxRQUFpRTtBQUUzRixNQUFNLE9BQU8seUJBQXlCO0lBTWxDLFlBQVksVUFBa0IsRUFBRSxRQUFnQixFQUFFLE1BQXNCO1FBQ3BFLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsR0FBQyxJQUFJLENBQUMsU0FB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Q0Y7U0FDRjtRQUNELElBQUcsQ0FBQyxJQUFFLENBQUMsRUFBQztZQUNOLCtCQUErQjtZQUMvQixJQUFJLENBQUMsTUFBTSxHQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUE7U0FDaEM7UUFDRCxJQUFJLEVBQUUsR0FBRyxJQUFJLHlCQUF5QixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEYsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbkI7SUFDSCxDQUFDO0lBRUMsV0FBVyxDQUFDLEVBQVU7UUFDbEIsSUFBSSxFQUFFLEVBQUU7WUFDSixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQixJQUFJLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQztZQUMzQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDbEI7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuICAgIGltcG9ydCB7SHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2V9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG4gICAgaW1wb3J0IHsgdGltZW91dCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xyXG5cclxuICAgIC8vIHN0YXRlIG9mIGFuIHVwbG9hZFxyXG4gICAgZXhwb3J0IGVudW0gVXBsb2FkU3RhdHVzIHtJRExFID0gMSwgVVBMT0FESU5HID0gMiwgIEFCT1JUID0gMywgRE9ORSA9IDAsIEVSUiA9IC0xfVxyXG5cclxuICAgIC8vIHN0YXRlIG9mIHRoZSB1cGxvYWRlclxyXG4gICAgLy8gVFJZX1VQTE9BRElORyBpcyB1cGxvYWRpbmcgc3RhdGUgYWZ0ZXIgYW4gZXJyb3IgKGZvciBleGFtcGxlIGlmIGRpc2Nvbm5lY3RlZCBmcm9tIHNlcnZlcilcclxuICAgIGV4cG9ydCBlbnVtIFVwbG9hZGVyU3RhdHVzIHsgRE9ORSA9IDAsIFVQTE9BRElORyA9IDEsIFRSWV9VUExPQURJTkcgPSAyLE5FWFQgPSAzLCBFUlIgPSAtMX1cclxuXHJcbiAgICBleHBvcnQgY2xhc3MgVXBsb2FkZXJTdGF0dXNDaGFuZ2VFdmVudCB7XHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfc2l6ZVF1ZXVlZDpudW1iZXI7XHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfc2l6ZURvbmU6bnVtYmVyO1xyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3N0YXR1czogVXBsb2FkZXJTdGF0dXM7XHJcblxyXG5cclxuICAgICAgICBjb25zdHJ1Y3RvcihzaXplUXVldWVkOiBudW1iZXIsIHNpemVEb25lOiBudW1iZXIsIHN0YXR1czogVXBsb2FkZXJTdGF0dXMpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2l6ZVF1ZXVlZCA9IHNpemVRdWV1ZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuX3NpemVEb25lID0gc2l6ZURvbmU7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXR1cyA9IHN0YXR1cztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBzaXplUXVldWVkKCk6bnVtYmVyIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NpemVRdWV1ZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXQgc2l6ZURvbmUoKTpudW1iZXIge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZURvbmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzaXplSW5RdWV1ZSgpe1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3NpemVRdWV1ZWQtdGhpcy5fc2l6ZURvbmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXQgc3RhdHVzKCk6IFVwbG9hZGVyU3RhdHVzIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1cztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHVwbG9hZERvbmUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5fc2l6ZURvbmUgPj0gdGhpcy5fc2l6ZVF1ZXVlZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwZXJjZW50RG9uZSgpOiBudW1iZXIge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc2l6ZVF1ZXVlZCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBubyBkYXRhIHF1ZXVlZCwgd2UgYXJlIFwiZG9uZVwiXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMTAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBwZXJjZW50ID0gTWF0aC5mbG9vcih0aGlzLl9zaXplRG9uZSAqIDEwMCAvIHRoaXMuX3NpemVRdWV1ZWQpO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVXBsb2FkIHN0YXR1czogcXVldWVkOiBcIit0aGlzLl9zaXplUXVldWVkK1wiLCBkb25lOiBcIit0aGlzLl9zaXplRG9uZStcIiwgXCIrcGVyY2VudCtcIiVcIilcclxuICAgICAgICAgICAgcmV0dXJuIHBlcmNlbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgY2xhc3MgVXBsb2FkIHtcclxuXHJcbiAgICAgIGdldCBzZXJ2ZXJQZXJzaXN0YWJsZSgpOiBTZXJ2ZXJQZXJzaXN0YWJsZSB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXJ2ZXJQZXJzaXN0YWJsZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhOkJsb2J8Rm9ybURhdGE7XHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdXJsOnN0cmluZztcclxuXHJcbiAgICAgICAgc3RhdHVzOiBVcGxvYWRTdGF0dXM7XHJcbiAgICAgICAgb25Eb25lOigodXBsb2FkOlVwbG9hZCk9PnZvaWQpIHwgbnVsbD1udWxsO1xyXG5cclxuICAgICAgICBjb25zdHJ1Y3RvcihibG9iOkJsb2J8Rm9ybURhdGEsIHVybDpzdHJpbmcscHJpdmF0ZSBfc2VydmVyUGVyc2lzdGFibGU6U2VydmVyUGVyc2lzdGFibGV8bnVsbD1udWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBibG9iO1xyXG4gICAgICAgICAgICB0aGlzLl91cmwgPSB1cmw7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gVXBsb2FkU3RhdHVzLklETEU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXQgdXJsKCk6c3RyaW5nIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBkYXRhKCk6QmxvYnxGb3JtRGF0YSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZG9uZSgpe1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cz1VcGxvYWRTdGF0dXMuRE9ORTtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU2luZ2xlIHVwbG9hZCBkb25lLlwiKTtcclxuICAgICAgICAgICAgaWYodGhpcy5fc2VydmVyUGVyc2lzdGFibGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9zZXJ2ZXJQZXJzaXN0YWJsZS5zZXJ2ZXJQZXJzaXN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNpbmdsZSB1cGxvYWQgc2V0IHNlcnZlciBwZXJzaXN0ZWQ6IFwiK3RoaXMuc2VydmVyUGVyc2lzdGFibGUpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTZXJ2ZXIgcGVyc2lzdGFibGUgbm90IHNldC5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodGhpcy5vbkRvbmUpe1xyXG4gICAgICAgICAgICAgIHRoaXMub25Eb25lKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICBwdWJsaWMgdG9TdHJpbmcgPSAoKSA6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgbGV0IHM9YFVwbG9hZDogU3RhdHVzOiAke3RoaXMuc3RhdHVzfSwgVVJMOiAke3RoaXMuX3VybH1gO1xyXG4gICAgICAgIGlmKHRoaXMuX2RhdGEgaW5zdGFuY2VvZiBCbG9iKXtcclxuICAgICAgICAgICAgcz1zK2AsIFNpemU6ICR7dGhpcy5fZGF0YS5zaXplfWA7XHJcbiAgICAgICAgfWVsc2UgaWYodGhpcy5fZGF0YSBpbnN0YW5jZW9mICBGb3JtRGF0YSl7XHJcbiAgICAgICAgICAgLy8gVE9ETyAoaXRlcmF0ZSB0aHJvdWdoIHBhcnRzID8/KVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBVcGxvYWRIb2xkZXJ7XHJcblxyXG4gICAgICBvblVwbG9hZFNldDooKHVwbG9hZDpVcGxvYWQpPT52b2lkKXxudWxsPW51bGw7XHJcblxyXG4gICAgICBnZXQgdXBsb2FkKCk6IFVwbG9hZCB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91cGxvYWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldCB1cGxvYWQodmFsdWU6IFVwbG9hZCB8IG51bGwpIHtcclxuICAgICAgICB0aGlzLl91cGxvYWQgPSB2YWx1ZTtcclxuICAgICAgICBpZih0aGlzLl91cGxvYWQgJiYgdGhpcy5vblVwbG9hZFNldCl7XHJcbiAgICAgICAgICB0aGlzLm9uVXBsb2FkU2V0KHRoaXMuX3VwbG9hZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHByaXZhdGUgX3VwbG9hZDpVcGxvYWR8bnVsbD1udWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBVcGxvYWRTZXR7XHJcblxyXG4gICAgICBwcml2YXRlIHVwbG9hZHM6IEFycmF5PFVwbG9hZHxVcGxvYWRIb2xkZXI+PW5ldyBBcnJheTxVcGxvYWR8VXBsb2FkSG9sZGVyPigpO1xyXG4gICAgICBwcml2YXRlIF9jb21wbGV0ZT1mYWxzZTtcclxuXHJcbiAgICAgIHByaXZhdGUgX29uRG9uZTooKHVwbG9hZFNldDpVcGxvYWRTZXQpPT52b2lkKXxudWxsPW51bGw7XHJcblxyXG4gICAgICBhZGQodXBsb2FkOlVwbG9hZHxVcGxvYWRIb2xkZXIpe1xyXG4gICAgICAgIGlmKHRoaXMuX2NvbXBsZXRlKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhZGQgdXBsb2FkIHRvIHVwbG9hZCBzZXQuIFVwbG9hZCBzZXQgYWxyZWFkeSBjb21wbGV0ZS4nKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZih1cGxvYWQgaW5zdGFuY2VvZiBVcGxvYWRIb2xkZXIpe1xyXG4gICAgICAgICAgdXBsb2FkLm9uVXBsb2FkU2V0PSh1cGwpPT57XHJcbiAgICAgICAgICAgIHVwbC5vbkRvbmU9KCk9PntcclxuICAgICAgICAgICAgICB0aGlzLmNoZWNrVXBsb2FkU3RhdGVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jaGVja1VwbG9hZFN0YXRlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwbG9hZHMucHVzaCh1cGxvYWQpO1xyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgY29tcGxldGUoKXtcclxuICAgICAgICAvLyBNYXJrIHNldCBhcyBjb21wbGV0ZVxyXG4gICAgICAgIHRoaXMuX2NvbXBsZXRlPXRydWU7XHJcblxyXG4gICAgICAgIC8vIGFkZCBsaXN0ZW5lcnMgdG8gZWFjaCB1cGxvYWRcclxuICAgICAgICBmb3IobGV0IHVwbCBvZiB0aGlzLnVwbG9hZHMpe1xyXG4gICAgICAgICAgaWYodXBsIGluc3RhbmNlb2YgVXBsb2FkKSB7XHJcbiAgICAgICAgICAgIHVwbC5vbkRvbmUgPSAodXBsOiBVcGxvYWQpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNoZWNrVXBsb2FkU3RhdGVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1lbHNlIGlmKHVwbCBpbnN0YW5jZW9mIFVwbG9hZEhvbGRlcil7XHJcbiAgICAgICAgICAgIGlmKHVwbC51cGxvYWQpe1xyXG4gICAgICAgICAgICAgIHVwbC51cGxvYWQub25Eb25lID0gKHVwbDogVXBsb2FkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrVXBsb2FkU3RhdGVzKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjaGVjayBpbW1lZGlhdGVseSBpZiBhbHJlYWR5IGRvbmVcclxuICAgICAgICB0aGlzLmNoZWNrVXBsb2FkU3RhdGVzKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldCBvbkRvbmUodmFsdWU6ICgodXBsb2FkU2V0OiBVcGxvYWRTZXQpID0+IHZvaWQpIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX29uRG9uZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuY2hlY2tVcGxvYWRTdGF0ZXMoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcHJpdmF0ZSBjaGVja1VwbG9hZFN0YXRlcygpe1xyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNoZWNrIHVwbG9hZCBzdGF0ZS4uLlwiKVxyXG4gICAgICAgIGlmKHRoaXMuX2NvbXBsZXRlKXtcclxuXHJcbiAgICAgICAgICBpZih0aGlzLl9vbkRvbmUpIHtcclxuICAgICAgICAgICAgZm9yKGxldCB1cGwgb2YgdGhpcy51cGxvYWRzKXtcclxuICAgICAgICAgICAgICBpZih1cGwgaW5zdGFuY2VvZiBVcGxvYWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChVcGxvYWRTdGF0dXMuRE9ORSAhPT0gdXBsLnN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAvLyBBdCBsZWFzdCB0aGlzIHVwbG9hZCBpcyBub3QgeWV0IGRvbmVcclxuICAgICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZ1xyXG4gICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJDaGVjayB1cGxvYWQgc3RhdGU6IFVwbG9hZCBub3QgZG9uZS5cIilcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1lbHNlIGlmKHVwbCBpbnN0YW5jZW9mIFVwbG9hZEhvbGRlcil7XHJcbiAgICAgICAgICAgICAgICBpZih1cGwudXBsb2FkKXtcclxuICAgICAgICAgICAgICAgICAgaWYgKFVwbG9hZFN0YXR1cy5ET05FICE9PSB1cGwudXBsb2FkLnN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEF0IGxlYXN0IHRoaXMgdXBsb2FkIGlzIG5vdCB5ZXQgZG9uZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmdcclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJDaGVjayB1cGxvYWQgc3RhdGU6IFVwbG9hZCAoaG9sZGVyKSBub3QgZG9uZS5cIilcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAvLyBUaGUgYWN0dWFsIHVwbG9hZCBpcyBub3QgeWV0IHNldFxyXG4gICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJDaGVjayB1cGxvYWQgc3RhdGU6IFVwbG9hZCAoaG9sZGVyKTogdXBsb2FkIG5vdCB5ZXQgc2V0LlwiKVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHNldCBpcyBjb21wbGV0ZSBhbmQgYWxsIHVwbG9hZCBwYXJ0cyBhcmUgZG9uZSwgY2FsbCBkb25lIGNhbGxiYWNrXHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNoZWNrIHVwbG9hZCBzdGF0ZTogQWxsIGRvbmUuXCIpXHJcbiAgICAgICAgICAgIHRoaXMuX29uRG9uZSh0aGlzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgaW50ZXJmYWNlIFNlcnZlclBlcnNpc3RhYmxle1xyXG4gICAgICAgIHNlcnZlclBlcnNpc3RlZDpib29sZWFuO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBVcGxvYWRlciB7XHJcbiAgICAgICAgUE9TVF9NSU5fVElNRU9VVCA9IDEyMDAwMDsgLy8gMm1pbiBwbHVzIC4uLlxyXG4gICAgICAgIFBPU1RfVElNRU9VVF9QRVJfS0IgPSAxMDAwOyAgLy8gLi4uIDFzIHBlciBrQlxyXG5cclxuICAgICAgICBSRVRSWV9ERUxBWTogbnVtYmVyID0gMzAwMDA7IC8vIHJldHJ5IGV2ZXJ5IDMwc1xyXG4gICAgICAgIERFQlVHX0RFTEFZOiBudW1iZXIgPSAwO1xyXG4gICAgICAgIC8vREVCVUdfREVMQVk6bnVtYmVyPTA7XHJcbiAgICAgICAgcHJpdmF0ZSBzdGF0dXM6IFVwbG9hZGVyU3RhdHVzID0gVXBsb2FkZXJTdGF0dXMuRE9ORTtcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHF1ZTogQXJyYXk8VXBsb2FkPjtcclxuICAgICAgICBsaXN0ZW5lcjogKCh1ZTogVXBsb2FkZXJTdGF0dXNDaGFuZ2VFdmVudCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcclxuICAgICAgICBwcml2YXRlIF9zaXplUXVldWVkOiBudW1iZXIgPSAwO1xyXG4gICAgICAgIHByaXZhdGUgX3NpemVEb25lOiBudW1iZXIgPSAwO1xyXG5cclxuICAgICAgICBwcml2YXRlIHJldHJ5VGltZXJSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgcHJpdmF0ZSByZXRyeVRpbWVySWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICBwcml2YXRlIHRlOlRleHRFbmNvZGVyPW5ldyBUZXh0RW5jb2RlcigpO1xyXG5cclxuICAgICAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgd2l0aENyZWRlbnRpYWxzOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWUgPSBuZXcgQXJyYXk8VXBsb2FkPigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJpdmF0ZSBkYXRhU2l6ZShkdDpCbG9ifEZvcm1EYXRhKXtcclxuICAgICAgICAgICAgbGV0IHNpPTA7XHJcbiAgICAgICAgICAgIGlmKGR0IGluc3RhbmNlb2YgQmxvYil7XHJcbiAgICAgICAgICAgICAgICBzaT1kdC5zaXplO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZihkdCBpbnN0YW5jZW9mICBGb3JtRGF0YSl7XHJcbiAgICAgICAgICAgICAgICBkdC5mb3JFYWNoKCh2LGspPT57XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodiBpbnN0YW5jZW9mIEZpbGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaSs9di5zaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2ID09PSdzdHJpbmcnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5jb2RlIHRvIFVURi04IHRvIGdldCB1cGxvYWQgc2l6ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaSs9IHRoaXMudGUuZW5jb2RlKCkubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHNpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJpdmF0ZSAgdXBsb2FkRG9uZSh1bDpVcGxvYWQpIHtcclxuXHJcbiAgICAgICAgICAgIHVsLmRvbmUoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHJlbW92ZSB1cGxvYWQgZnJvbSBxdWV1ZVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucXVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5xdWVbaV0gPT09IHVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQsIHJlbW92ZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdWxTaXplID0gdGhpcy5kYXRhU2l6ZSh1bC5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaXplRG9uZSArPSB1bFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2V0IHRvIGRvbmUgZm9yIG5vdy4uLlxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IFVwbG9hZGVyU3RhdHVzLk5FWFQ7XHJcbiAgICAgICAgICAgIC8vIGNvbnRpbnVlXHJcbiAgICAgICAgICAgIHRoaXMucHJvY2VzcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJpdmF0ZSBzdGFydFVwbG9hZCh1bDpVcGxvYWQpIHtcclxuXHJcbiAgICAgICAgICAgIHVsLnN0YXR1cyA9IFVwbG9hZFN0YXR1cy5VUExPQURJTkc7XHJcbiAgICAgICAgICAgIGlmIChVcGxvYWRlclN0YXR1cy5FUlIgPT09IHRoaXMuc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9IFVwbG9hZGVyU3RhdHVzLlRSWV9VUExPQURJTkc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9IFVwbG9hZGVyU3RhdHVzLlVQTE9BRElORztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGRTaXplPXRoaXMuZGF0YVNpemUodWwuZGF0YSk7XHJcbiAgICAgICAgICAgIGxldCB0aW1lb3V0Rm9yRGF0YVNpemU9ZFNpemUqdGhpcy5QT1NUX1RJTUVPVVRfUEVSX0tCLzEwMDA7XHJcbiAgICAgICAgICAgIGxldCB0aW1lb1ZhbDpudW1iZXI9TWF0aC5yb3VuZCh0aGlzLlBPU1RfTUlOX1RJTUVPVVQrdGltZW91dEZvckRhdGFTaXplKVxyXG4gICAgICAgICAgICAvLyBwaXBlKHRpbWVvdXQoKSkgaXMgbm90IHRoZSBzYW1lIGFzIHhoci50aW1lb3V0XHJcblxyXG4gICAgICAgICAgbGV0IHVwbG9hZGVkVXBsb2FkOlVwbG9hZHxudWxsPW51bGw7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlBvc3QgdXBsb2FkOiBcIit1bClcclxuICAgICAgICAgICAgdGhpcy5odHRwLnBvc3QodWwudXJsLHVsLmRhdGEse3dpdGhDcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFsc30pLnBpcGUodGltZW91dCh0aW1lb1ZhbCkpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0OiAoZGF0YSk9PlxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZWRVcGxvYWQgPSB1bDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKCdOZXh0IG1ldGhvZCBjYWxsZWQgZm9yIHVwbG9hZDogJyt1cGxvYWRlZFVwbG9hZClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLCBlcnJvcjooZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgY2xpZW50LXNpZGUgb3IgbmV0d29yayBlcnJvciBvY2N1cnJlZC4gSGFuZGxlIGl0IGFjY29yZGluZ2x5LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVXBsb2FkIGVycm9yIG9jY3VycmVkOicsIGVyci5lcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBiYWNrZW5kIHJldHVybmVkIGFuIHVuc3VjY2Vzc2Z1bCByZXNwb25zZSBjb2RlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJlc3BvbnNlIGJvZHkgbWF5IGNvbnRhaW4gY2x1ZXMgYXMgdG8gd2hhdCB3ZW50IHdyb25nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgVXBsb2FkIGVycm9yOiBTZXJ2ZXIgcmV0dXJuZWQgY29kZSAke2Vyci5zdGF0dXN9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRXJyb3IodWwpXHJcbiAgICAgICAgICAgICAgICAgICAgfSwgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKCdVcGxvYWQgY29tcGxldGUgbWV0aG9kIGNhbGxlZCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cGxvYWRlZFVwbG9hZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuREVCVUdfREVMQVkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZERvbmUodWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuREVCVUdfREVMQVkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZERvbmUodXBsb2FkZWRVcGxvYWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVcGxvYWQgcG9zdCBjb21wbGV0ZSwgYnV0IHVwbG9hZCBub3Qgc2V0IGluIG5leHQgbWV0aG9kIScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByaXZhdGUgcHJvY2Vzc0Vycm9yKHVsOlVwbG9hZCkge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJQcm9jZXNzIHVwbG9hZCBlcnJvci4uLlwiKVxyXG4gICAgICAgICAgICB1bC5zdGF0dXM9VXBsb2FkU3RhdHVzLkVSUlxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IFVwbG9hZGVyU3RhdHVzLkVSUjtcclxuXHJcbiAgICAgICAgICAgIGxldCB1ZSA9IG5ldyBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50KHRoaXMuX3NpemVRdWV1ZWQsIHRoaXMuX3NpemVEb25lLCB0aGlzLnN0YXR1cyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyKHVlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gc2V0IHJldHJ5IHRpbWVyXHJcbiAgICAgICAgICAgIHRoaXMucmV0cnlUaW1lcklkPXdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmV0cnlUaW1lclJ1bm5pbmc9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJVcGxvYWQgcmV0cnkgdGltZXIgZXhwaXJlZC4gQ29udGludWUgcHJvY2Vzc2luZy4uLlwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzKCk7XHJcbiAgICAgICAgICAgIH0sIHRoaXMuUkVUUllfREVMQVkpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZXRyeVRpbWVyUnVubmluZz10cnVlO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTdGFydGVkIHVwbG9hZCByZXRyeSB0aW1lciBcIit0aGlzLlJFVFJZX0RFTEFZK1wibXMgLi4uXCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgcHJpdmF0ZSBwcm9jZXNzKCkge1xyXG4gICAgICAgIC8vIGNsZWFyIHJldHJ5IHRpbWVyIGlmIHNldFxyXG4gICAgICAgIGlmKHRoaXMucmV0cnlUaW1lclJ1bm5pbmcpe1xyXG4gICAgICAgICAgICBpZih0aGlzLnJldHJ5VGltZXJJZCkge1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnJldHJ5VGltZXJJZClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZXRyeVRpbWVyUnVubmluZz1mYWxzZVxyXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ2xlYXJlZCByZXRyeSB0aW1lci5cIilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBwdWw6IFVwbG9hZCB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJVcGxvYWRlciBzdGF0dXM6IFwiK3RoaXMuc3RhdHVzKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucXVlLmxlbmd0aDtcclxuICAgICAgICAvL2NvbnNvbGUuZGVidWcocytcIiB1cGxvYWRzIGFyZSBpbiB0aGUgcXVldWUuXCIpXHJcblxyXG4gICAgICAgIGlmIChzPjAgJiYgVXBsb2FkZXJTdGF0dXMuVVBMT0FESU5HICE9IHRoaXMuc3RhdHVzICYmIFVwbG9hZGVyU3RhdHVzLlRSWV9VUExPQURJTkcgIT0gdGhpcy5zdGF0dXMpIHtcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHM7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdWwgPSB0aGlzLnF1ZVtpXTtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlVwbG9hZCBcIit1bCtcIiBzdGF0dXM6XCIrdWwuc3RhdHVzKVxyXG4gICAgICAgICAgICBpZiAodWwuc3RhdHVzID09PSBVcGxvYWRTdGF0dXMuSURMRSkge1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJVcGxvYWQgXCIrdWwrXCIgc3RhcnRVcGxvYWRcIilcclxuICAgICAgICAgICAgICB0aGlzLnN0YXJ0VXBsb2FkKHVsKTtcclxuICAgICAgICAgICAgICBwdWwgPSB1bDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCFwdWwpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIkNoZWNrIEVSUiB1cGxvYWRzLi4uXCIpXHJcbiAgICAgICAgICAgIC8vIG5vdyBmYWlsZWQgdXBsb2Fkc1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJObyByZWd1bGFyIHVwbG9hZCBmb3VuZC4gTG9va2luZyBmb3IgZXJyb3Igc3RhdGUgdXBsb2Fkcy5cIilcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzOyBpKyspIHtcclxuICAgICAgICAgICAgICBsZXQgdWwgPSB0aGlzLnF1ZVtpXTtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVXBsb2FkIFwiK3VsK1wiIHN0YXR1czpcIit1bC5zdGF0dXMpXHJcbiAgICAgICAgICAgICAgaWYgKHVsLnN0YXR1cyA9PT0gVXBsb2FkU3RhdHVzLkVSUikge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlVwbG9hZCAoRVJSKSBcIit1bCtcIiBzdGFydFVwbG9hZFwiKVxyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU3RhcnQgZXJyb3Igc3RhdGUgdXBsb2FkIFwiK3VsKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFVwbG9hZCh1bCk7XHJcbiAgICAgICAgICAgICAgICBwdWwgPSB1bDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihzPT0wKXtcclxuICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlVwbG9hZCBkb25lLlwiKVxyXG4gICAgICAgICAgdGhpcy5zdGF0dXM9VXBsb2FkZXJTdGF0dXMuRE9ORVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdWUgPSBuZXcgVXBsb2FkZXJTdGF0dXNDaGFuZ2VFdmVudCh0aGlzLl9zaXplUXVldWVkLCB0aGlzLl9zaXplRG9uZSwgdGhpcy5zdGF0dXMpO1xyXG4gICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICB0aGlzLmxpc3RlbmVyKHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICAgcXVldWVVcGxvYWQodWw6IFVwbG9hZCkge1xyXG4gICAgICAgICAgICBpZiAodWwpIHtcclxuICAgICAgICAgICAgICAgIGxldCB1bFNpemUgPSB0aGlzLmRhdGFTaXplKHVsLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWUucHVzaCh1bCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaXplUXVldWVkICs9IHVsU2l6ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2VzcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiJdfQ==
|
|
@@ -9,12 +9,12 @@ import * as i1 from "@angular/common/http";
|
|
|
9
9
|
import * as i2 from "@angular/common";
|
|
10
10
|
import * as i3 from "../../spr.config";
|
|
11
11
|
export class ProjectService {
|
|
12
|
-
constructor(http,
|
|
12
|
+
constructor(http, platformLocation, config) {
|
|
13
13
|
this.http = http;
|
|
14
|
-
this.
|
|
14
|
+
this.platformLocation = platformLocation;
|
|
15
15
|
this.config = config;
|
|
16
16
|
this.withCredentials = false;
|
|
17
|
-
console.log("Base Href: " +
|
|
17
|
+
console.log("Base Href: " + platformLocation.getBaseHrefFromDOM());
|
|
18
18
|
let apiEndPoint = '';
|
|
19
19
|
if (config && config.apiEndPoint) {
|
|
20
20
|
apiEndPoint = config.apiEndPoint;
|
|
@@ -53,12 +53,12 @@ export class ProjectService {
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
ProjectService.PROJECT_API_CTX = 'project';
|
|
56
|
-
ProjectService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.
|
|
57
|
-
ProjectService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.
|
|
58
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.
|
|
56
|
+
ProjectService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProjectService, deps: [{ token: i1.HttpClient }, { token: i2.PlatformLocation }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
57
|
+
ProjectService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProjectService });
|
|
58
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProjectService, decorators: [{
|
|
59
59
|
type: Injectable
|
|
60
60
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.PlatformLocation }, { type: i3.SpeechRecorderConfig, decorators: [{
|
|
61
61
|
type: Inject,
|
|
62
62
|
args: [SPEECHRECORDER_CONFIG]
|
|
63
63
|
}] }]; } });
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3Byb2plY3QvcHJvamVjdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBdUIsTUFBTSxrQkFBa0IsQ0FBQztBQUV0RixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7Ozs7O0FBT3ZDLE1BQU0sT0FBTyxjQUFjO0lBS3pCLFlBQW9CLElBQWUsRUFBUyxnQkFBaUMsRUFBd0MsTUFBNEI7UUFBN0gsU0FBSSxHQUFKLElBQUksQ0FBVztRQUFTLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFBd0MsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFGaEksb0JBQWUsR0FBUyxLQUFLLENBQUM7UUFJN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEdBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBRWpFLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQTtRQUVwQixJQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQy9CLFdBQVcsR0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1NBQ2hDO1FBQ0QsSUFBRyxXQUFXLEtBQUssRUFBRSxFQUFDO1lBQ3BCLFdBQVcsR0FBQyxXQUFXLEdBQUMsR0FBRyxDQUFBO1NBQzVCO1FBQ0QsSUFBRyxNQUFNLElBQUUsSUFBSSxJQUFJLE1BQU0sQ0FBQyxlQUFlLElBQUUsSUFBSSxFQUFDO1lBQzlDLElBQUksQ0FBQyxlQUFlLEdBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztTQUM3QztRQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsV0FBVyxHQUFHLGNBQWMsQ0FBQyxlQUFlLENBQUM7SUFFcEUsQ0FBQztJQUVPLHFDQUFxQyxDQUFDLEdBQVU7UUFDdEQsSUFBSSxNQUFNLEdBQUMsR0FBRyxDQUFDO1FBQ2YsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDeEQsMkJBQTJCO1lBQzNCLDJFQUEyRTtZQUMzRSxNQUFNLEdBQUcsTUFBTSxHQUFHLG9CQUFvQixHQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUN4RDtRQUNELE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztJQUVELFVBQVUsQ0FBQyxFQUFTO1FBQ2xCLElBQUksUUFBUSxHQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLHFDQUFxQyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxTQUFpQixFQUFDLGVBQXNCO1FBQ3pELElBQUksUUFBUSxHQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLDhGQUE4RjtRQUM5Riw0RkFBNEY7UUFDNUYsSUFBSSxhQUFhLEdBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsUUFBUSxHQUFFLEdBQUcsR0FBQyxhQUFhLENBQUM7SUFDaEUsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQVM7UUFDekIsSUFBSSxNQUFNLEdBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFVLE1BQU0sRUFBQyxFQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFDLENBQUMsQ0FBQTtJQUMvRSxDQUFDOztBQWxEcUIsOEJBQWUsR0FBQyxTQUFTLENBQUE7NEdBRHJDLGNBQWMsNEVBSzZELHFCQUFxQjtnSEFMaEcsY0FBYzs0RkFBZCxjQUFjO2tCQUQxQixVQUFVOzswQkFNc0UsTUFBTTsyQkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ3JlYXRlZCBieSBrbGF1c2ogb24gMTcuMDYuMjAxNy5cclxuICovXHJcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHtBcGlUeXBlLCBTUEVFQ0hSRUNPUkRFUl9DT05GSUcsIFNwZWVjaFJlY29yZGVyQ29uZmlnfSBmcm9tIFwiLi4vLi4vc3ByLmNvbmZpZ1wiO1xyXG5pbXBvcnQge1Byb2plY3R9IGZyb20gXCIuL3Byb2plY3RcIjtcclxuaW1wb3J0IHtVVUlEfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge1BsYXRmb3JtTG9jYXRpb259IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuXHJcblxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUHJvamVjdFNlcnZpY2Uge1xyXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPSkVDVF9BUElfQ1RYPSdwcm9qZWN0J1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvamVjdEN0eFVybDpzdHJpbmc7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB3aXRoQ3JlZGVudGlhbHM6Ym9vbGVhbj1mYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOkh0dHBDbGllbnQscHJpdmF0ZSBwbGF0Zm9ybUxvY2F0aW9uOlBsYXRmb3JtTG9jYXRpb24sQEluamVjdChTUEVFQ0hSRUNPUkRFUl9DT05GSUcpIHByaXZhdGUgY29uZmlnPzpTcGVlY2hSZWNvcmRlckNvbmZpZykge1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiQmFzZSBIcmVmOiBcIitwbGF0Zm9ybUxvY2F0aW9uLmdldEJhc2VIcmVmRnJvbURPTSgpKTtcclxuXHJcbiAgICBsZXQgYXBpRW5kUG9pbnQgPSAnJ1xyXG5cclxuICAgIGlmKGNvbmZpZyAmJiBjb25maWcuYXBpRW5kUG9pbnQpIHtcclxuICAgICAgYXBpRW5kUG9pbnQ9Y29uZmlnLmFwaUVuZFBvaW50O1xyXG4gICAgfVxyXG4gICAgaWYoYXBpRW5kUG9pbnQgIT09ICcnKXtcclxuICAgICAgYXBpRW5kUG9pbnQ9YXBpRW5kUG9pbnQrJy8nXHJcbiAgICB9XHJcbiAgICBpZihjb25maWchPW51bGwgJiYgY29uZmlnLndpdGhDcmVkZW50aWFscyE9bnVsbCl7XHJcbiAgICAgIHRoaXMud2l0aENyZWRlbnRpYWxzPWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcm9qZWN0Q3R4VXJsID0gYXBpRW5kUG9pbnQgKyBQcm9qZWN0U2VydmljZS5QUk9KRUNUX0FQSV9DVFg7XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBlbmRSZXF1ZXN0VVVJREZvckRldmVsb3BtZW50U2VydmVyKHVybDpzdHJpbmcpOnN0cmluZ3tcclxuICAgIGxldCByZXNVcmw9dXJsO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmFwaVR5cGUgPT09IEFwaVR5cGUuRklMRVMpIHtcclxuICAgICAgLy8gZm9yIGRldmVsb3BtZW50IGFuZCBkZW1vXHJcbiAgICAgIC8vIGFwcGVuZCBVVUlEIHRvIG1ha2UgcmVxdWVzdCBVUkwgdW5pcXVlIHRvIGF2b2lkIGxvY2FsaG9zdCBzZXJ2ZXIgY2FjaGluZ1xyXG4gICAgICByZXNVcmwgPSByZXNVcmwgKyAnLmpzb24/cmVxdWVzdFVVSUQ9JytVVUlELmdlbmVyYXRlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzVXJsXHJcbiAgfVxyXG5cclxuICBwcm9qZWN0VXJsKGlkOnN0cmluZyk6c3RyaW5ne1xyXG4gICAgbGV0IGVuY1ByaklkPWVuY29kZVVSSUNvbXBvbmVudChpZCk7XHJcbiAgICByZXR1cm4gdGhpcy5hcHBlbmRSZXF1ZXN0VVVJREZvckRldmVsb3BtZW50U2VydmVyKHRoaXMucHJvamVjdEN0eFVybCArICcvJyArIGVuY1ByaklkKTtcclxuICB9XHJcblxyXG4gIHByb2plY3RSZXNvdXJjZVVybChwcm9qZWN0SWQ6IHN0cmluZyxyZWxSZXNvdXJjZVBhdGg6c3RyaW5nKTpzdHJpbmd7XHJcbiAgICBsZXQgZW5jUHJqSWQ9ZW5jb2RlVVJJQ29tcG9uZW50KHByb2plY3RJZCk7XHJcbiAgICAvLyBVc2UgZW5jb2RlVVJJIGhlcmUgc2luY2UgdGhlIHJlbGF0aWNlIHJlc291cmNlIHBhdGggZnJvbSByZWNvcmRpbmcgc2NyaXB0cyBpcyBhbHJlYWR5IGEgVVJJXHJcbiAgICAvLyBlbmNvZGVVUklDb21wb25lbnQgZnVuY3Rpb24gd291bGQgZW5jb2RlIHRoZSBzbGFzaGVzIGFuZCBmZXRjaGluZyB0aGUgcmVzb3VyY2Ugd291bGQgZmFpbFxyXG4gICAgbGV0IGVuY1JlbFJlc1BhdGg9ZW5jb2RlVVJJKHJlbFJlc291cmNlUGF0aCk7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9qZWN0Q3R4VXJsICsgJy8nICsgZW5jUHJqSWQgKycvJytlbmNSZWxSZXNQYXRoO1xyXG4gIH1cclxuXHJcbiAgcHJvamVjdE9ic2VydmFibGUoaWQ6c3RyaW5nKTpPYnNlcnZhYmxlPFByb2plY3Q+e1xyXG4gICAgbGV0IHByalVybD10aGlzLnByb2plY3RVcmwoaWQpO1xyXG4gICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFByb2plY3Q+KHByalVybCx7d2l0aENyZWRlbnRpYWxzOiB0aGlzLndpdGhDcmVkZW50aWFsc30pXHJcbiAgIH1cclxuXHJcbn1cclxuXHJcblxyXG4iXX0=
|
|
@@ -69,62 +69,64 @@ let BasicRecordingService = class BasicRecordingService {
|
|
|
69
69
|
ausps.set('requestUUID', UUID.generate());
|
|
70
70
|
}
|
|
71
71
|
let obs = new Observable(observer => {
|
|
72
|
-
this.audioRequestByURL(baseAudioUrl, ausps).subscribe(
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
72
|
+
this.audioRequestByURL(baseAudioUrl, ausps).subscribe({
|
|
73
|
+
next: resp => {
|
|
74
|
+
// Do not use Promise version, which does not work with Safari 13 (13.0.5)
|
|
75
|
+
if (resp.body) {
|
|
76
|
+
//console.debug("chunkAudioRequest: observer.closed: "+observer.closed);
|
|
77
|
+
//console.debug("Audio file bytes: "+resp.body.byteLength);
|
|
78
|
+
// Check original audio format
|
|
79
|
+
let wr = new WavReader(resp.body);
|
|
80
|
+
const pcmFmt = wr.readFormat();
|
|
81
|
+
const orgFl = wr.frameLength();
|
|
82
|
+
// if(pcmFmt){
|
|
83
|
+
// console.debug("Original WAVE format of download chunk: "+pcmFmt);
|
|
84
|
+
// }else{
|
|
85
|
+
// console.error("Could not read WAVE format of original download chunk!");
|
|
86
|
+
// }
|
|
87
|
+
// if(orgFl){
|
|
88
|
+
// console.debug("Original frame length of download chunk: "+orgFl);
|
|
89
|
+
// }else{
|
|
90
|
+
// console.error("Could not read WAVE format of original download chunk!");
|
|
91
|
+
// }
|
|
92
|
+
if (pcmFmt && orgFl) {
|
|
93
|
+
aCtx.decodeAudioData(resp.body, ab => {
|
|
94
|
+
//console.debug("Decoded audio chunk frames: "+ab.length);
|
|
95
|
+
let chDl = new ChunkDownload(pcmFmt, orgFl, ab);
|
|
96
|
+
observer.next(chDl);
|
|
97
|
+
observer.complete();
|
|
98
|
+
}, error => {
|
|
99
|
+
//if(error instanceof HttpErrorResponse) {
|
|
100
|
+
// if (error.status == 404) {
|
|
101
|
+
// // Interpret not as an error, the file ist not recorded yet
|
|
102
|
+
// observer.next(null);
|
|
103
|
+
// observer.complete()
|
|
104
|
+
// } else {
|
|
105
|
+
// // all other states are errors
|
|
106
|
+
console.error("Recordings service chunkAudioRequest error decoding audio data: " + error.name + ": " + error.message);
|
|
107
|
+
observer.error(error);
|
|
108
|
+
// }
|
|
109
|
+
// }
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
const errMsg = 'Could not parse audio header for format and/or frame length of download.';
|
|
114
|
+
console.error(errMsg);
|
|
115
|
+
observer.error(errMsg);
|
|
116
|
+
}
|
|
110
117
|
}
|
|
111
118
|
else {
|
|
112
|
-
const errMsg = '
|
|
119
|
+
const errMsg = 'Fetching audio file: response has no body';
|
|
113
120
|
console.error(errMsg);
|
|
114
121
|
observer.error(errMsg);
|
|
115
122
|
}
|
|
123
|
+
}, error: (error) => {
|
|
124
|
+
// all other states are errors
|
|
125
|
+
//const errMsg='Fetching audio file HTTP error: '+error;
|
|
126
|
+
//console.error(errMsg);
|
|
127
|
+
observer.error(error);
|
|
128
|
+
//observer.complete();
|
|
116
129
|
}
|
|
117
|
-
else {
|
|
118
|
-
const errMsg = 'Fetching audio file: response has no body';
|
|
119
|
-
console.error(errMsg);
|
|
120
|
-
observer.error(errMsg);
|
|
121
|
-
}
|
|
122
|
-
}, (error) => {
|
|
123
|
-
// all other states are errors
|
|
124
|
-
//const errMsg='Fetching audio file HTTP error: '+error;
|
|
125
|
-
//console.error(errMsg);
|
|
126
|
-
observer.error(error);
|
|
127
|
-
//observer.complete();
|
|
128
130
|
});
|
|
129
131
|
});
|
|
130
132
|
return obs;
|
|
@@ -210,4 +212,4 @@ BasicRecordingService = __decorate([
|
|
|
210
212
|
__param(1, Inject(SPEECHRECORDER_CONFIG))
|
|
211
213
|
], BasicRecordingService);
|
|
212
214
|
export { BasicRecordingService };
|
|
213
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWNfcmVjb3JkaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvcmVjb3JkaW5ncy9iYXNpY19yZWNvcmRpbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFhLFdBQVcsRUFBZSxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDckMsT0FBTyxFQUFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBdUIsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDdkMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBR3JELE1BQU0sT0FBTyxhQUFhO0lBWXhCLFlBQW9CLGtCQUFpQyxFQUFTLGVBQXNCLEVBQVMsbUJBQStCO1FBQXhHLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBZTtRQUFTLG9CQUFlLEdBQWYsZUFBZSxDQUFPO1FBQVMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFZO0lBQUUsQ0FBQztJQVgvSCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztDQUVGO0FBRUQsSUFBYSxxQkFBcUIsR0FBbEMsTUFBYSxxQkFBcUI7SUFTOUIsWUFBc0IsSUFBZ0IsRUFBMkMsTUFBNkI7UUFBeEYsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUEyQyxXQUFNLEdBQU4sTUFBTSxDQUF1QjtRQUh0RywrQkFBMEIsR0FBUSxxQkFBcUIsQ0FBQyxzQ0FBc0MsQ0FBQztRQUU3RixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUV2QyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQTtRQUVyQixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztTQUN6QztRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxFQUFFLEVBQUU7WUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQTtTQUM1QztRQUNELElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsZUFBZSxJQUFJLElBQUksRUFBRTtZQUNsRCxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7U0FDakQ7SUFDTCxDQUFDO0lBRVMsaUJBQWlCLENBQUMsWUFBbUIsRUFBQyxvQkFBb0M7UUFDaEYsSUFBSSxRQUFRLEdBQUMsWUFBWSxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ3RELDJCQUEyQjtZQUMzQixRQUFRLEdBQUMsUUFBUSxHQUFDLE1BQU0sQ0FBQztZQUN6QiwyRUFBMkU7WUFDM0Usb0JBQW9CLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN4RCw4REFBOEQ7U0FDakU7UUFFRCxRQUFRLEdBQUMsUUFBUSxHQUFDLEdBQUcsR0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUV0RCxJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRTtZQUMzQixPQUFPLEVBQUUsT0FBTztZQUNoQixPQUFPLEVBQUUsVUFBVTtZQUNuQixZQUFZLEVBQUUsYUFBYTtZQUMzQixlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7U0FDeEMsQ0FBQyxDQUFDO0lBRVAsQ0FBQztJQUVNLGlCQUFpQixDQUFDLElBQWlCLEVBQUMsWUFBbUIsRUFBQyxhQUFrQixDQUFDLEVBQUMsV0FBa0I7UUFFakcsSUFBSSxLQUFLLEdBQUMsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNoQyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM5QyxLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLEtBQUssRUFBRTtZQUN0RCwyQkFBMkI7WUFDM0IsMkVBQTJFO1lBQzNFLDhEQUE4RDtZQUM5RCxLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUM1QztRQUVELElBQUksR0FBRyxHQUFDLElBQUksVUFBVSxDQUFxQixRQUFRLENBQUEsRUFBRTtZQUNqRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDcEQsMEVBQTBFO2dCQUMxRSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQ1gsd0VBQXdFO29CQUN4RSwyREFBMkQ7b0JBRTNELDhCQUE4QjtvQkFDOUIsSUFBSSxFQUFFLEdBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNoQyxNQUFNLE1BQU0sR0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQzdCLE1BQU0sS0FBSyxHQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDN0IsY0FBYztvQkFDZCxzRUFBc0U7b0JBQ3RFLFNBQVM7b0JBQ1QsNkVBQTZFO29CQUM3RSxJQUFJO29CQUNKLGFBQWE7b0JBQ2Isc0VBQXNFO29CQUN0RSxTQUFTO29CQUNULDZFQUE2RTtvQkFDN0UsSUFBSTtvQkFFSixJQUFHLE1BQU0sSUFBSSxLQUFLLEVBQUU7d0JBQ2hCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRTs0QkFDN0IsMERBQTBEOzRCQUMxRCxJQUFJLElBQUksR0FBRyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDOzRCQUNoRCxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNwQixRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3hCLENBQUMsRUFDQyxLQUFLLENBQUMsRUFBRTs0QkFDTiwwQ0FBMEM7NEJBQzFDLDZCQUE2Qjs0QkFDN0IsZ0VBQWdFOzRCQUNoRSx5QkFBeUI7NEJBQ3pCLHdCQUF3Qjs0QkFDeEIsV0FBVzs0QkFDWCxtQ0FBbUM7NEJBQ25DLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0VBQWtFLEdBQUMsS0FBSyxDQUFDLElBQUksR0FBQyxJQUFJLEdBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDOzRCQUNoSCxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUN0QixJQUFJOzRCQUNKLElBQUk7d0JBQ1IsQ0FBQyxDQUFDLENBQUM7cUJBQ1Y7eUJBQUk7d0JBQ0QsTUFBTSxNQUFNLEdBQUMsMEVBQTBFLENBQUM7d0JBQ3hGLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ3RCLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQzFCO2lCQUNKO3FCQUFNO29CQUNILE1BQU0sTUFBTSxHQUFDLDJDQUEyQyxDQUFDO29CQUN6RCxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN0QixRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUMxQjtZQUNMLENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNOLDhCQUE4QjtnQkFDOUIsd0RBQXdEO2dCQUN4RCx3QkFBd0I7Z0JBQ3hCLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3RCLHNCQUFzQjtZQUUxQixDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBR1MsaUNBQWlDLENBQUMsSUFBa0IsRUFBRSxZQUFvQixFQUFFLGFBQXFCLENBQUMsRUFBRSxhQUFxQixFQUFFLE9BQWMsRUFBQyxNQUFxQjtRQUNySyxrRkFBa0Y7UUFDbEYscUNBQXFDO1FBQ3JDLDBEQUEwRDtRQUMxRCxrRkFBa0Y7UUFDbEYsbUdBQW1HO1FBQ25HLHdCQUF3QjtRQUN4QixJQUFJO1FBQ0osSUFBSSxXQUFXLEdBQVEsYUFBYSxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekQsSUFBSSxLQUFLLEdBQUMsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNoQyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM5QyxLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLEtBQUssRUFBRTtZQUN0RCwyQkFBMkI7WUFDM0IsMkVBQTJFO1lBQzNFLDhEQUE4RDtZQUM5RCxLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUM1QztRQUNELElBQUksR0FBRyxHQUFDLElBQUksVUFBVSxDQUFzQixVQUFVLENBQUEsRUFBRTtZQUNwRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLElBQUksRUFBRSxFQUFFO29CQUM1RCwwRUFBMEU7b0JBQzFFLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTt3QkFDWCxtRkFBbUY7d0JBQ25GLHFGQUFxRjt3QkFDckYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFOzRCQUM3Qiw4RkFBOEY7NEJBQzlGLDhFQUE4RTs0QkFDOUUsSUFBRyxNQUFNLEtBQUcsSUFBSSxFQUFDO2dDQUNiLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQyxDQUFDOzZCQUN4RjtpQ0FBSztnQ0FDRixJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7Z0NBQ2hCLElBQUksRUFBRSxDQUFDLFVBQVUsS0FBSyxhQUFhLEVBQUU7b0NBQ2pDLElBQUksYUFBYSxJQUFJLE1BQU0sRUFBRTt3Q0FDekIsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsR0FBRyxNQUFNLEdBQUcsYUFBYSxDQUFDLENBQUM7d0NBQ3hELGtKQUFrSjtxQ0FDcko7aUNBQ0o7Z0NBRUQsSUFBSSxHQUFHLEdBQUcsY0FBYyxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUMsV0FBVyxDQUFDLENBQUM7Z0NBQzNGLDZCQUE2QjtnQ0FDN0IsdUJBQXVCO2dDQUN2QixhQUFhO2dDQUNiLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQ0FDWixJQUFJLEdBQUcsQ0FBQyxRQUFRLEdBQUcsV0FBVyxFQUFFO29DQUM1Qix3TUFBd007b0NBQ3hNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQ0FDZDtnQ0FDRCxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dDQUVyQixVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7NkJBQ3pCO3dCQUNMLENBQUMsRUFDQyxLQUFLLENBQUMsRUFBRTs0QkFDTixPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxHQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUN6RCwwQ0FBMEM7NEJBQzFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQ3hCLEdBQUc7d0JBQ1AsQ0FBQyxDQUFDLENBQUE7cUJBQ1Q7eUJBQU07d0JBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO3dCQUNyRixVQUFVLENBQUMsS0FBSyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7cUJBQzNGO2dCQUNMLENBQUM7Z0JBQ0QsS0FBSyxFQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsR0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDekQsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDeEIsd0JBQXdCO2dCQUM1QixDQUFDO2FBQ0osQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FFSixDQUFBO0FBcE1DLDhDQUE4QztBQUM5Qyx5RUFBeUU7QUFDekUsNkJBQTZCO0FBQ04sc0RBQWdDLEdBQVEsRUFBRyxDQUFBO0FBQzNDLDREQUFzQyxHQUFRLE9BQU8sR0FBQyxDQUFFLENBQUEsQ0FBQyx5Q0FBeUM7QUFMOUcscUJBQXFCO0lBU1csV0FBQSxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQTtHQVQ3RCxxQkFBcUIsQ0FxTWpDO1NBck1ZLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBSZXNwb25zZX0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7SW5qZWN0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0FwaVR5cGUsIFNQRUVDSFJFQ09SREVSX0NPTkZJRywgU3BlZWNoUmVjb3JkZXJDb25maWd9IGZyb20gXCIuLi8uLi9zcHIuY29uZmlnXCI7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtOZXRBdWRpb0J1ZmZlcn0gZnJvbSBcIi4uLy4uL2F1ZGlvL25ldF9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtVVUlEfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcclxuaW1wb3J0IHtXYXZSZWFkZXJ9IGZyb20gXCIuLi8uLi9hdWRpby9pbXBsL3dhdnJlYWRlclwiO1xyXG5pbXBvcnQge1BDTUF1ZGlvRm9ybWF0fSBmcm9tIFwiLi4vLi4vYXVkaW8vZm9ybWF0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2h1bmtEb3dubG9hZHtcclxuICBnZXQgb3JnUENNQXVkaW9Gb3JtYXQoKTogUENNQXVkaW9Gb3JtYXQge1xyXG4gICAgcmV0dXJuIHRoaXMuX29yZ1BDTUF1ZGlvRm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgZ2V0IG9yZ0ZyYW1lTGVuZ3RoKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3JnRnJhbWVMZW5ndGg7XHJcbiAgfVxyXG5cclxuICBnZXQgZGVjb2RlZEF1ZGlvQnVmZmVyKCk6IEF1ZGlvQnVmZmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWNvZGVkQXVkaW9CdWZmZXI7XHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX29yZ1BDTUF1ZGlvRm9ybWF0OlBDTUF1ZGlvRm9ybWF0LHByaXZhdGUgX29yZ0ZyYW1lTGVuZ3RoOm51bWJlcixwcml2YXRlIF9kZWNvZGVkQXVkaW9CdWZmZXI6QXVkaW9CdWZmZXIpe31cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEJhc2ljUmVjb3JkaW5nU2VydmljZXtcclxuICAvLyBpUGFkIDl0aCBnZW5lcmF0aW9uLCBpT1MgMTUuNy4xLCBzb21ldGltZXM6XHJcbiAgLy8gRmFpbGVkIHRvIGxvYWQgcmVzb3VyY2U6IFdlYktpdCBoYXQgZWluZW4gaW50ZXJuZW4gRmVobGVyIGZlc3RnZXN0ZWxsdFxyXG4gIC8vIEZpcmVmb3ggb24gV2luZG93cyBjcmFzaGVzXHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0NIVU5LRURfRE9XTkxPQURfU0VDT05EUzpudW1iZXI9MTA7XHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX01BWF9ORVRfQVVUT19NRU1fU1RPUkVfU0FNUExFUzpudW1iZXI9Mjg4MDAwMCo1OyAvLyBEZWZhdWx0IDUgbWludXRlcyBvbmUgY2hhbm5lbCBhdCA0OGtIelxyXG4gIHByb3RlY3RlZCBfbWF4QXV0b05ldE1lbVN0b3JlU2FtcGxlczpudW1iZXI9QmFzaWNSZWNvcmRpbmdTZXJ2aWNlLkRFRkFVTFRfTUFYX05FVF9BVVRPX01FTV9TVE9SRV9TQU1QTEVTO1xyXG4gICAgcHJvdGVjdGVkIGFwaUVuZFBvaW50OiBzdHJpbmc7XHJcbiAgICBwcm90ZWN0ZWQgd2l0aENyZWRlbnRpYWxzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCwgQEluamVjdChTUEVFQ0hSRUNPUkRFUl9DT05GSUcpIHByb3RlY3RlZCBjb25maWc/OiBTcGVlY2hSZWNvcmRlckNvbmZpZykge1xyXG4gICAgICAgIHRoaXMuYXBpRW5kUG9pbnQgPSAnJ1xyXG5cclxuICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5hcGlFbmRQb2ludCkge1xyXG4gICAgICAgICAgICB0aGlzLmFwaUVuZFBvaW50ID0gY29uZmlnLmFwaUVuZFBvaW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5hcGlFbmRQb2ludCAhPT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy5hcGlFbmRQb2ludCA9IHRoaXMuYXBpRW5kUG9pbnQgKyAnLydcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsICYmIGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLndpdGhDcmVkZW50aWFscyA9IGNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhdWRpb1JlcXVlc3RCeVVSTChhdWRpb0Jhc2VVcmw6c3RyaW5nLGF1ZGlvVVJMU2VhcmNoUGFyYW1zOlVSTFNlYXJjaFBhcmFtcyk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFycmF5QnVmZmVyPj4ge1xyXG4gICAgICAgIGxldCBhdWRpb1VybD1hdWRpb0Jhc2VVcmw7XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmFwaVR5cGUgPT09IEFwaVR5cGUuRklMRVMpIHtcclxuICAgICAgICAgICAgLy8gZm9yIGRldmVsb3BtZW50IGFuZCBkZW1vXHJcbiAgICAgICAgICAgIGF1ZGlvVXJsPWF1ZGlvVXJsKycud2F2JztcclxuICAgICAgICAgICAgLy8gYXBwZW5kIFVVSUQgdG8gbWFrZSByZXF1ZXN0IFVSTCB1bmlxdWUgdG8gYXZvaWQgbG9jYWxob3N0IHNlcnZlciBjYWNoaW5nXHJcbiAgICAgICAgICAgIGF1ZGlvVVJMU2VhcmNoUGFyYW1zLnNldCgncmVxdWVzdFVVSUQnLFVVSUQuZ2VuZXJhdGUoKSk7XHJcbiAgICAgICAgICAgIC8vYXVkaW9VcmwgPSBhdWRpb1VybCArICcud2F2P3JlcXVlc3RVVUlEPScgKyBVVUlELmdlbmVyYXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhdWRpb1VybD1hdWRpb1VybCsnPycrYXVkaW9VUkxTZWFyY2hQYXJhbXMudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsICdhdWRpby93YXYnKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChhdWRpb1VybCwge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxyXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicsXHJcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy53aXRoQ3JlZGVudGlhbHNcclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNodW5rQXVkaW9SZXF1ZXN0KGFDdHg6QXVkaW9Db250ZXh0LGJhc2VBdWRpb1VybDpzdHJpbmcsc3RhcnRGcmFtZTpudW1iZXI9MCxmcmFtZUxlbmd0aDpudW1iZXIpOiBPYnNlcnZhYmxlPENodW5rRG93bmxvYWR8bnVsbD4ge1xyXG5cclxuICAgICAgICBsZXQgYXVzcHM9bmV3IFVSTFNlYXJjaFBhcmFtcygpO1xyXG4gICAgICAgIGF1c3BzLnNldCgnc3RhcnRGcmFtZScsc3RhcnRGcmFtZS50b1N0cmluZygpKTtcclxuICAgICAgICBhdXNwcy5zZXQoJ2ZyYW1lTGVuZ3RoJyxmcmFtZUxlbmd0aC50b1N0cmluZygpKTtcclxuICAgICAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuYXBpVHlwZSA9PT0gQXBpVHlwZS5GSUxFUykge1xyXG4gICAgICAgICAgICAvLyBmb3IgZGV2ZWxvcG1lbnQgYW5kIGRlbW9cclxuICAgICAgICAgICAgLy8gYXBwZW5kIFVVSUQgdG8gbWFrZSByZXF1ZXN0IFVSTCB1bmlxdWUgdG8gYXZvaWQgbG9jYWxob3N0IHNlcnZlciBjYWNoaW5nXHJcbiAgICAgICAgICAgIC8vYXVkaW9VcmwgPSBhdWRpb1VybCArICcud2F2P3JlcXVlc3RVVUlEPScgKyBVVUlELmdlbmVyYXRlKCk7XHJcbiAgICAgICAgICAgIGF1c3BzLnNldCgncmVxdWVzdFVVSUQnLFVVSUQuZ2VuZXJhdGUoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgb2JzPW5ldyBPYnNlcnZhYmxlPENodW5rRG93bmxvYWR8bnVsbD4ob2JzZXJ2ZXI9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaW9SZXF1ZXN0QnlVUkwoYmFzZUF1ZGlvVXJsLGF1c3BzKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IHVzZSBQcm9taXNlIHZlcnNpb24sIHdoaWNoIGRvZXMgbm90IHdvcmsgd2l0aCBTYWZhcmkgMTMgKDEzLjAuNSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcC5ib2R5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcImNodW5rQXVkaW9SZXF1ZXN0OiBvYnNlcnZlci5jbG9zZWQ6IFwiK29ic2VydmVyLmNsb3NlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkF1ZGlvIGZpbGUgYnl0ZXM6IFwiK3Jlc3AuYm9keS5ieXRlTGVuZ3RoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIG9yaWdpbmFsIGF1ZGlvIGZvcm1hdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgd3I9bmV3IFdhdlJlYWRlcihyZXNwLmJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwY21GbXQ9d3IucmVhZEZvcm1hdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmdGbD13ci5mcmFtZUxlbmd0aCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZihwY21GbXQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUuZGVidWcoXCJPcmlnaW5hbCBXQVZFIGZvcm1hdCBvZiBkb3dubG9hZCBjaHVuazogXCIrcGNtRm10KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCByZWFkIFdBVkUgZm9ybWF0IG9mIG9yaWdpbmFsIGRvd25sb2FkIGNodW5rIVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZihvcmdGbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgY29uc29sZS5kZWJ1ZyhcIk9yaWdpbmFsIGZyYW1lIGxlbmd0aCBvZiBkb3dubG9hZCBjaHVuazogXCIrb3JnRmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IHJlYWQgV0FWRSBmb3JtYXQgb2Ygb3JpZ2luYWwgZG93bmxvYWQgY2h1bmshXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihwY21GbXQgJiYgb3JnRmwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDdHguZGVjb2RlQXVkaW9EYXRhKHJlc3AuYm9keSwgYWIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJEZWNvZGVkIGF1ZGlvIGNodW5rIGZyYW1lczogXCIrYWIubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNoRGwgPSBuZXcgQ2h1bmtEb3dubG9hZChwY21GbXQsIG9yZ0ZsLCBhYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoY2hEbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lmKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGVycm9yLnN0YXR1cyA9PSA0MDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAvLyBJbnRlcnByZXQgbm90IGFzIGFuIGVycm9yLCB0aGUgZmlsZSBpc3Qgbm90IHJlY29yZGVkIHlldFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIG9ic2VydmVyLm5leHQobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgb2JzZXJ2ZXIuY29tcGxldGUoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIC8vIGFsbCBvdGhlciBzdGF0ZXMgYXJlIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiUmVjb3JkaW5ncyBzZXJ2aWNlIGNodW5rQXVkaW9SZXF1ZXN0IGVycm9yIGRlY29kaW5nIGF1ZGlvIGRhdGE6IFwiK2Vycm9yLm5hbWUrXCI6IFwiK2Vycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVyck1zZz0nQ291bGQgbm90IHBhcnNlIGF1ZGlvIGhlYWRlciBmb3IgZm9ybWF0IGFuZC9vciBmcmFtZSBsZW5ndGggb2YgZG93bmxvYWQuJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyTXNnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVyck1zZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJNc2c9J0ZldGNoaW5nIGF1ZGlvIGZpbGU6IHJlc3BvbnNlIGhhcyBubyBib2R5JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJNc2cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJNc2cpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBhbGwgb3RoZXIgc3RhdGVzIGFyZSBlcnJvcnNcclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnN0IGVyck1zZz0nRmV0Y2hpbmcgYXVkaW8gZmlsZSBIVFRQIGVycm9yOiAnK2Vycm9yO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5lcnJvcihlcnJNc2cpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAvL29ic2VydmVyLmNvbXBsZXRlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG9icztcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJvdGVjdGVkIGNodW5rQXVkaW9SZXF1ZXN0VG9OZXRBdWRpb0J1ZmZlcihhQ3R4OiBBdWRpb0NvbnRleHQsIGJhc2VBdWRpb1VybDogc3RyaW5nLCBzdGFydEZyYW1lOiBudW1iZXIgPSAwLCBvcmdTYW1wbGVSYXRlOiBudW1iZXIsIHNlY29uZHM6bnVtYmVyLGZyYW1lczogbnVtYmVyIHwgbnVsbCk6IE9ic2VydmFibGU8TmV0QXVkaW9CdWZmZXIgfCBudWxsPiB7XHJcbiAgICAgICAgLy9sZXQgYXVkaW9Vcmw9YmFzZUF1ZGlvVXJsKyc/c3RhcnRGcmFtZT0nK3N0YXJ0RnJhbWUrJyZmcmFtZUxlbmd0aD0nK2ZyYW1lTGVuZ3RoO1xyXG4gICAgICAgIC8vbGV0IGF1ZGlvVXJsPW5ldyBVUkwoYmFzZUF1ZGlvVXJsKTtcclxuICAgICAgICAvLyBpZihvcmdTYW1wbGVSYXRlIT1udWxsICYmIGZyYW1lTGVuZ3RoJW9yZ1NhbXBsZVJhdGU+MCl7XHJcbiAgICAgICAgLy8gICBjb25zdCBlcnJNc2c9J2ZyYW1lTGVuZ3RoIG11c3QgYmUgZXF1YWwgb3IgbXVsdGlwbGUgb2Ygb3JpZ2luYWwgc2FtcGxlcmF0ZS4nO1xyXG4gICAgICAgIC8vICAgY29uc29sZS5lcnJvcihlcnJNc2crJyAoJytmcmFtZUxlbmd0aCsnJScrb3JnU2FtcGxlUmF0ZSsnPT0nKyhmcmFtZUxlbmd0aCVvcmdTYW1wbGVSYXRlKSsnKScpO1xyXG4gICAgICAgIC8vICAgdGhyb3cgRXJyb3IoZXJyTXNnKVxyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBsZXQgZnJhbWVMZW5ndGg6bnVtYmVyPW9yZ1NhbXBsZVJhdGUqTWF0aC5yb3VuZChzZWNvbmRzKTtcclxuICAgICAgICBsZXQgYXVzcHM9bmV3IFVSTFNlYXJjaFBhcmFtcygpO1xyXG4gICAgICAgIGF1c3BzLnNldCgnc3RhcnRGcmFtZScsc3RhcnRGcmFtZS50b1N0cmluZygpKTtcclxuICAgICAgICBhdXNwcy5zZXQoJ2ZyYW1lTGVuZ3RoJyxmcmFtZUxlbmd0aC50b1N0cmluZygpKTtcclxuICAgICAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuYXBpVHlwZSA9PT0gQXBpVHlwZS5GSUxFUykge1xyXG4gICAgICAgICAgICAvLyBmb3IgZGV2ZWxvcG1lbnQgYW5kIGRlbW9cclxuICAgICAgICAgICAgLy8gYXBwZW5kIFVVSUQgdG8gbWFrZSByZXF1ZXN0IFVSTCB1bmlxdWUgdG8gYXZvaWQgbG9jYWxob3N0IHNlcnZlciBjYWNoaW5nXHJcbiAgICAgICAgICAgIC8vYXVkaW9VcmwgPSBhdWRpb1VybCArICcud2F2P3JlcXVlc3RVVUlEPScgKyBVVUlELmdlbmVyYXRlKCk7XHJcbiAgICAgICAgICAgIGF1c3BzLnNldCgncmVxdWVzdFVVSUQnLFVVSUQuZ2VuZXJhdGUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBvYnM9bmV3IE9ic2VydmFibGU8TmV0QXVkaW9CdWZmZXJ8bnVsbD4oc3Vic2NyaWJlcj0+IHtcclxuICAgICAgICAgICAgdGhpcy5hdWRpb1JlcXVlc3RCeVVSTChiYXNlQXVkaW9VcmwsYXVzcHMpLnN1YnNjcmliZSh7bmV4dDoocmVzcCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdCB1c2UgUHJvbWlzZSB2ZXJzaW9uLCB3aGljaCBkb2VzIG5vdCB3b3JrIHdpdGggU2FmYXJpIDEzICgxMy4wLjUpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3AuYm9keSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJjaHVua0F1ZGlvUmVxdWVzdFRvbmV0QWI6IHN1YnNjcmliZXIuY2xvc2VkOiBcIitzdWJzY3JpYmVyLmNsb3NlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcImNodW5rQXVkaW9SZXF1ZXN0VG9uZXRBYjogQXVkaW8gZmlsZSBieXRlczogXCIrcmVzcC5ib2R5LmJ5dGVMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhQ3R4LmRlY29kZUF1ZGlvRGF0YShyZXNwLmJvZHksIGFiID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJjaHVua0F1ZGlvUmVxdWVzdFRvbmV0QWI6IERlY29kZWQgYXVkaW8gY2h1bmsgZnJhbWVzIGZvciBuZXRBYjogXCIrYWIubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJjaHVua0F1ZGlvUmVxdWVzdFRvbmV0QWI6IENyZWF0ZSBuZXRBYiBhYiBmcm9tIGNodW5rIGFiLi4uXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZyYW1lcz09PW51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKG5ldyBFcnJvcignQ291bGQgbm90IGdldCBmcmFtZSBsZW5ndGggZnJvbSByZWNvcmRpbmcgZmlsZSBvYmplY3QnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmwgPSBmcmFtZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYi5zYW1wbGVSYXRlICE9PSBvcmdTYW1wbGVSYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JnU2FtcGxlUmF0ZSAmJiBmcmFtZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbCA9IE1hdGgucm91bmQoYWIuc2FtcGxlUmF0ZSAqIGZyYW1lcyAvIG9yZ1NhbXBsZVJhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlBsYXRmb3JtIHNyOiBcIithYi5zYW1wbGVSYXRlK1wiLCBmaWxlIHNyOiBcIitvcmdTYW1wbGVSYXRlK1wiLCBkZWNvZGVkL29yZyBmcmFtZSBsZW5ndGg6IFwiK2ZsK1wiL1wiK2ZyYW1lcytcIiwgYWIubGVuZ3RoOiBcIithYi5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmFiID0gTmV0QXVkaW9CdWZmZXIuZnJvbUNodW5rQXVkaW9CdWZmZXIoYUN0eCwgdGhpcyxiYXNlQXVkaW9VcmwsIGFiLCBmbCxmcmFtZUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbGV0IHJwPW5ldyBSZWFkeVByb3ZpZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbmFiLnJlYWR5UHJvdmlkZXI9cnA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcnAucmVhZHkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFiLnJlYWR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYWIuZnJhbWVMZW4gPCBmcmFtZUxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiY2h1bmtBdWRpb1JlcXVlc3RUb25ldEFiOiBCdWlsdCBuZXRBYiBhYiBmcm9tIGNodW5rIGFiOiBGaXJzdCBjaHVuayBzaG9ydGVyIHRoYSBmcmFtZUxlbmd0aCAoXCIrbmV0QWJBdWRpb0J1ZmZlci5mcmFtZUxlbitcIjxcIitmcmFtZUxlbmd0aCtcIiksIGFzc3VtaW5nIGVuZCBvZiBkYXRhLCBzZWFsaW5nIG5ldEFiIGFiLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hYi5zZWFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KG5hYik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignY2h1bmtBdWRpb1JlcXVlc3RUb05ldEFiOiBlcnJvcjogJytlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pZihlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2NodW5rQXVkaW9SZXF1ZXN0VG9OZXRBYjogRmV0Y2hpbmcgYXVkaW8gZmlsZTogcmVzcG9uc2UgaGFzIG5vIGJvZHknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcignY2h1bmtBdWRpb1JlcXVlc3RUb05ldEFiOiBGZXRjaGluZyBhdWRpbyBmaWxlOiByZXNwb25zZSBoYXMgbm8gYm9keScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjooZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdjaHVua0F1ZGlvUmVxdWVzdFRvTmV0QWI6IGVycm9yOiAnK2Vycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3N1YnNjcmliZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG9icztcclxuICAgIH1cclxuXHJcbn1cclxuIl19
|
|
215
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWNfcmVjb3JkaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvcmVjb3JkaW5ncy9iYXNpY19yZWNvcmRpbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFhLFdBQVcsRUFBZSxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDckMsT0FBTyxFQUFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBdUIsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDdkMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBR3JELE1BQU0sT0FBTyxhQUFhO0lBWXhCLFlBQW9CLGtCQUFpQyxFQUFTLGVBQXNCLEVBQVMsbUJBQStCO1FBQXhHLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBZTtRQUFTLG9CQUFlLEdBQWYsZUFBZSxDQUFPO1FBQVMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFZO0lBQUUsQ0FBQztJQVgvSCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztDQUVGO0FBRUQsSUFBYSxxQkFBcUIsR0FBbEMsTUFBYSxxQkFBcUI7SUFT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RCxxQkFBcUIsQ0F3TWpDO1NBeE1ZLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBSZXNwb25zZX0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7SW5qZWN0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0FwaVR5cGUsIFNQRUVDSFJFQ09SREVSX0NPTkZJRywgU3BlZWNoUmVjb3JkZXJDb25maWd9IGZyb20gXCIuLi8uLi9zcHIuY29uZmlnXCI7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtOZXRBdWRpb0J1ZmZlcn0gZnJvbSBcIi4uLy4uL2F1ZGlvL25ldF9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtVVUlEfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcclxuaW1wb3J0IHtXYXZSZWFkZXJ9IGZyb20gXCIuLi8uLi9hdWRpby9pbXBsL3dhdnJlYWRlclwiO1xyXG5pbXBvcnQge1BDTUF1ZGlvRm9ybWF0fSBmcm9tIFwiLi4vLi4vYXVkaW8vZm9ybWF0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2h1bmtEb3dubG9hZHtcclxuICBnZXQgb3JnUENNQXVkaW9Gb3JtYXQoKTogUENNQXVkaW9Gb3JtYXQge1xyXG4gICAgcmV0dXJuIHRoaXMuX29yZ1BDTUF1ZGlvRm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgZ2V0IG9yZ0ZyYW1lTGVuZ3RoKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3JnRnJhbWVMZW5ndGg7XHJcbiAgfVxyXG5cclxuICBnZXQgZGVjb2RlZEF1ZGlvQnVmZmVyKCk6IEF1ZGlvQnVmZmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWNvZGVkQXVkaW9CdWZmZXI7XHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX29yZ1BDTUF1ZGlvRm9ybWF0OlBDTUF1ZGlvRm9ybWF0LHByaXZhdGUgX29yZ0ZyYW1lTGVuZ3RoOm51bWJlcixwcml2YXRlIF9kZWNvZGVkQXVkaW9CdWZmZXI6QXVkaW9CdWZmZXIpe31cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEJhc2ljUmVjb3JkaW5nU2VydmljZXtcclxuICAvLyBpUGFkIDl0aCBnZW5lcmF0aW9uLCBpT1MgMTUuNy4xLCBzb21ldGltZXM6XHJcbiAgLy8gRmFpbGVkIHRvIGxvYWQgcmVzb3VyY2U6IFdlYktpdCBoYXQgZWluZW4gaW50ZXJuZW4gRmVobGVyIGZlc3RnZXN0ZWxsdFxyXG4gIC8vIEZpcmVmb3ggb24gV2luZG93cyBjcmFzaGVzXHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0NIVU5LRURfRE9XTkxPQURfU0VDT05EUzpudW1iZXI9MTA7XHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX01BWF9ORVRfQVVUT19NRU1fU1RPUkVfU0FNUExFUzpudW1iZXI9Mjg4MDAwMCo1OyAvLyBEZWZhdWx0IDUgbWludXRlcyBvbmUgY2hhbm5lbCBhdCA0OGtIelxyXG4gIHByb3RlY3RlZCBfbWF4QXV0b05ldE1lbVN0b3JlU2FtcGxlczpudW1iZXI9QmFzaWNSZWNvcmRpbmdTZXJ2aWNlLkRFRkFVTFRfTUFYX05FVF9BVVRPX01FTV9TVE9SRV9TQU1QTEVTO1xyXG4gICAgcHJvdGVjdGVkIGFwaUVuZFBvaW50OiBzdHJpbmc7XHJcbiAgICBwcm90ZWN0ZWQgd2l0aENyZWRlbnRpYWxzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCwgQEluamVjdChTUEVFQ0hSRUNPUkRFUl9DT05GSUcpIHByb3RlY3RlZCBjb25maWc/OiBTcGVlY2hSZWNvcmRlckNvbmZpZykge1xyXG4gICAgICAgIHRoaXMuYXBpRW5kUG9pbnQgPSAnJ1xyXG5cclxuICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5hcGlFbmRQb2ludCkge1xyXG4gICAgICAgICAgICB0aGlzLmFwaUVuZFBvaW50ID0gY29uZmlnLmFwaUVuZFBvaW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5hcGlFbmRQb2ludCAhPT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy5hcGlFbmRQb2ludCA9IHRoaXMuYXBpRW5kUG9pbnQgKyAnLydcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsICYmIGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLndpdGhDcmVkZW50aWFscyA9IGNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhdWRpb1JlcXVlc3RCeVVSTChhdWRpb0Jhc2VVcmw6c3RyaW5nLGF1ZGlvVVJMU2VhcmNoUGFyYW1zOlVSTFNlYXJjaFBhcmFtcyk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFycmF5QnVmZmVyPj4ge1xyXG4gICAgICAgIGxldCBhdWRpb1VybD1hdWRpb0Jhc2VVcmw7XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmFwaVR5cGUgPT09IEFwaVR5cGUuRklMRVMpIHtcclxuICAgICAgICAgICAgLy8gZm9yIGRldmVsb3BtZW50IGFuZCBkZW1vXHJcbiAgICAgICAgICAgIGF1ZGlvVXJsPWF1ZGlvVXJsKycud2F2JztcclxuICAgICAgICAgICAgLy8gYXBwZW5kIFVVSUQgdG8gbWFrZSByZXF1ZXN0IFVSTCB1bmlxdWUgdG8gYXZvaWQgbG9jYWxob3N0IHNlcnZlciBjYWNoaW5nXHJcbiAgICAgICAgICAgIGF1ZGlvVVJMU2VhcmNoUGFyYW1zLnNldCgncmVxdWVzdFVVSUQnLFVVSUQuZ2VuZXJhdGUoKSk7XHJcbiAgICAgICAgICAgIC8vYXVkaW9VcmwgPSBhdWRpb1VybCArICcud2F2P3JlcXVlc3RVVUlEPScgKyBVVUlELmdlbmVyYXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhdWRpb1VybD1hdWRpb1VybCsnPycrYXVkaW9VUkxTZWFyY2hQYXJhbXMudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsICdhdWRpby93YXYnKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChhdWRpb1VybCwge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxyXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicsXHJcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy53aXRoQ3JlZGVudGlhbHNcclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNodW5rQXVkaW9SZXF1ZXN0KGFDdHg6QXVkaW9Db250ZXh0LGJhc2VBdWRpb1VybDpzdHJpbmcsc3RhcnRGcmFtZTpudW1iZXI9MCxmcmFtZUxlbmd0aDpudW1iZXIpOiBPYnNlcnZhYmxlPENodW5rRG93bmxvYWR8bnVsbD4ge1xyXG5cclxuICAgICAgICBsZXQgYXVzcHM9bmV3IFVSTFNlYXJjaFBhcmFtcygpO1xyXG4gICAgICAgIGF1c3BzLnNldCgnc3RhcnRGcmFtZScsc3RhcnRGcmFtZS50b1N0cmluZygpKTtcclxuICAgICAgICBhdXNwcy5zZXQoJ2ZyYW1lTGVuZ3RoJyxmcmFtZUxlbmd0aC50b1N0cmluZygpKTtcclxuICAgICAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuYXBpVHlwZSA9PT0gQXBpVHlwZS5GSUxFUykge1xyXG4gICAgICAgICAgICAvLyBmb3IgZGV2ZWxvcG1lbnQgYW5kIGRlbW9cclxuICAgICAgICAgICAgLy8gYXBwZW5kIFVVSUQgdG8gbWFrZSByZXF1ZXN0IFVSTCB1bmlxdWUgdG8gYXZvaWQgbG9jYWxob3N0IHNlcnZlciBjYWNoaW5nXHJcbiAgICAgICAgICAgIC8vYXVkaW9VcmwgPSBhdWRpb1VybCArICcud2F2P3JlcXVlc3RVVUlEPScgKyBVVUlELmdlbmVyYXRlKCk7XHJcbiAgICAgICAgICAgIGF1c3BzLnNldCgncmVxdWVzdFVVSUQnLFVVSUQuZ2VuZXJhdGUoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgb2JzPW5ldyBPYnNlcnZhYmxlPENodW5rRG93bmxvYWR8bnVsbD4ob2JzZXJ2ZXI9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaW9SZXF1ZXN0QnlVUkwoYmFzZUF1ZGlvVXJsLGF1c3BzKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogcmVzcCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdCB1c2UgUHJvbWlzZSB2ZXJzaW9uLCB3aGljaCBkb2VzIG5vdCB3b3JrIHdpdGggU2FmYXJpIDEzICgxMy4wLjUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwLmJvZHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcImNodW5rQXVkaW9SZXF1ZXN0OiBvYnNlcnZlci5jbG9zZWQ6IFwiK29ic2VydmVyLmNsb3NlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJBdWRpbyBmaWxlIGJ5dGVzOiBcIityZXNwLmJvZHkuYnl0ZUxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgb3JpZ2luYWwgYXVkaW8gZm9ybWF0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgd3IgPSBuZXcgV2F2UmVhZGVyKHJlc3AuYm9keSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwY21GbXQgPSB3ci5yZWFkRm9ybWF0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmdGbCA9IHdyLmZyYW1lTGVuZ3RoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZihwY21GbXQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmRlYnVnKFwiT3JpZ2luYWwgV0FWRSBmb3JtYXQgb2YgZG93bmxvYWQgY2h1bms6IFwiK3BjbUZtdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCByZWFkIFdBVkUgZm9ybWF0IG9mIG9yaWdpbmFsIGRvd25sb2FkIGNodW5rIVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmKG9yZ0ZsKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgY29uc29sZS5kZWJ1ZyhcIk9yaWdpbmFsIGZyYW1lIGxlbmd0aCBvZiBkb3dubG9hZCBjaHVuazogXCIrb3JnRmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUuZXJyb3IoXCJDb3VsZCBub3QgcmVhZCBXQVZFIGZvcm1hdCBvZiBvcmlnaW5hbCBkb3dubG9hZCBjaHVuayFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBjbUZtdCAmJiBvcmdGbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDdHguZGVjb2RlQXVkaW9EYXRhKHJlc3AuYm9keSwgYWIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiRGVjb2RlZCBhdWRpbyBjaHVuayBmcmFtZXM6IFwiK2FiLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hEbCA9IG5ldyBDaHVua0Rvd25sb2FkKHBjbUZtdCwgb3JnRmwsIGFiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoY2hEbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pZihlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoZXJyb3Iuc3RhdHVzID09IDQwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAvLyBJbnRlcnByZXQgbm90IGFzIGFuIGVycm9yLCB0aGUgZmlsZSBpc3Qgbm90IHJlY29yZGVkIHlldFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBvYnNlcnZlci5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBvYnNlcnZlci5jb21wbGV0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAvLyBhbGwgb3RoZXIgc3RhdGVzIGFyZSBlcnJvcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJSZWNvcmRpbmdzIHNlcnZpY2UgY2h1bmtBdWRpb1JlcXVlc3QgZXJyb3IgZGVjb2RpbmcgYXVkaW8gZGF0YTogXCIgKyBlcnJvci5uYW1lICsgXCI6IFwiICsgZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJNc2cgPSAnQ291bGQgbm90IHBhcnNlIGF1ZGlvIGhlYWRlciBmb3IgZm9ybWF0IGFuZC9vciBmcmFtZSBsZW5ndGggb2YgZG93bmxvYWQuJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyck1zZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyTXNnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVyck1zZyA9ICdGZXRjaGluZyBhdWRpbyBmaWxlOiByZXNwb25zZSBoYXMgbm8gYm9keSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyck1zZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJNc2cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3I6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxsIG90aGVyIHN0YXRlcyBhcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnN0IGVyck1zZz0nRmV0Y2hpbmcgYXVkaW8gZmlsZSBIVFRQIGVycm9yOiAnK2Vycm9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmVycm9yKGVyck1zZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL29ic2VydmVyLmNvbXBsZXRlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gb2JzO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcm90ZWN0ZWQgY2h1bmtBdWRpb1JlcXVlc3RUb05ldEF1ZGlvQnVmZmVyKGFDdHg6IEF1ZGlvQ29udGV4dCwgYmFzZUF1ZGlvVXJsOiBzdHJpbmcsIHN0YXJ0RnJhbWU6IG51bWJlciA9IDAsIG9yZ1NhbXBsZVJhdGU6IG51bWJlciwgc2Vjb25kczpudW1iZXIsZnJhbWVzOiBudW1iZXIgfCBudWxsKTogT2JzZXJ2YWJsZTxOZXRBdWRpb0J1ZmZlciB8IG51bGw+IHtcclxuICAgICAgICAvL2xldCBhdWRpb1VybD1iYXNlQXVkaW9VcmwrJz9zdGFydEZyYW1lPScrc3RhcnRGcmFtZSsnJmZyYW1lTGVuZ3RoPScrZnJhbWVMZW5ndGg7XHJcbiAgICAgICAgLy9sZXQgYXVkaW9Vcmw9bmV3IFVSTChiYXNlQXVkaW9VcmwpO1xyXG4gICAgICAgIC8vIGlmKG9yZ1NhbXBsZVJhdGUhPW51bGwgJiYgZnJhbWVMZW5ndGglb3JnU2FtcGxlUmF0ZT4wKXtcclxuICAgICAgICAvLyAgIGNvbnN0IGVyck1zZz0nZnJhbWVMZW5ndGggbXVzdCBiZSBlcXVhbCBvciBtdWx0aXBsZSBvZiBvcmlnaW5hbCBzYW1wbGVyYXRlLic7XHJcbiAgICAgICAgLy8gICBjb25zb2xlLmVycm9yKGVyck1zZysnICgnK2ZyYW1lTGVuZ3RoKyclJytvcmdTYW1wbGVSYXRlKyc9PScrKGZyYW1lTGVuZ3RoJW9yZ1NhbXBsZVJhdGUpKycpJyk7XHJcbiAgICAgICAgLy8gICB0aHJvdyBFcnJvcihlcnJNc2cpXHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIGxldCBmcmFtZUxlbmd0aDpudW1iZXI9b3JnU2FtcGxlUmF0ZSpNYXRoLnJvdW5kKHNlY29uZHMpO1xyXG4gICAgICAgIGxldCBhdXNwcz1uZXcgVVJMU2VhcmNoUGFyYW1zKCk7XHJcbiAgICAgICAgYXVzcHMuc2V0KCdzdGFydEZyYW1lJyxzdGFydEZyYW1lLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGF1c3BzLnNldCgnZnJhbWVMZW5ndGgnLGZyYW1lTGVuZ3RoLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlUeXBlID09PSBBcGlUeXBlLkZJTEVTKSB7XHJcbiAgICAgICAgICAgIC8vIGZvciBkZXZlbG9wbWVudCBhbmQgZGVtb1xyXG4gICAgICAgICAgICAvLyBhcHBlbmQgVVVJRCB0byBtYWtlIHJlcXVlc3QgVVJMIHVuaXF1ZSB0byBhdm9pZCBsb2NhbGhvc3Qgc2VydmVyIGNhY2hpbmdcclxuICAgICAgICAgICAgLy9hdWRpb1VybCA9IGF1ZGlvVXJsICsgJy53YXY/cmVxdWVzdFVVSUQ9JyArIFVVSUQuZ2VuZXJhdGUoKTtcclxuICAgICAgICAgICAgYXVzcHMuc2V0KCdyZXF1ZXN0VVVJRCcsVVVJRC5nZW5lcmF0ZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG9icz1uZXcgT2JzZXJ2YWJsZTxOZXRBdWRpb0J1ZmZlcnxudWxsPihzdWJzY3JpYmVyPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmF1ZGlvUmVxdWVzdEJ5VVJMKGJhc2VBdWRpb1VybCxhdXNwcykuc3Vic2NyaWJlKHtuZXh0OihyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IHVzZSBQcm9taXNlIHZlcnNpb24sIHdoaWNoIGRvZXMgbm90IHdvcmsgd2l0aCBTYWZhcmkgMTMgKDEzLjAuNSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcC5ib2R5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcImNodW5rQXVkaW9SZXF1ZXN0VG9uZXRBYjogc3Vic2NyaWJlci5jbG9zZWQ6IFwiK3N1YnNjcmliZXIuY2xvc2VkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiY2h1bmtBdWRpb1JlcXVlc3RUb25ldEFiOiBBdWRpbyBmaWxlIGJ5dGVzOiBcIityZXNwLmJvZHkuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFDdHguZGVjb2RlQXVkaW9EYXRhKHJlc3AuYm9keSwgYWIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcImNodW5rQXVkaW9SZXF1ZXN0VG9uZXRBYjogRGVjb2RlZCBhdWRpbyBjaHVuayBmcmFtZXMgZm9yIG5ldEFiOiBcIithYi5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcImNodW5rQXVkaW9SZXF1ZXN0VG9uZXRBYjogQ3JlYXRlIG5ldEFiIGFiIGZyb20gY2h1bmsgYWIuLi5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZnJhbWVzPT09bnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IobmV3IEVycm9yKCdDb3VsZCBub3QgZ2V0IGZyYW1lIGxlbmd0aCBmcm9tIHJlY29yZGluZyBmaWxlIG9iamVjdCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmbCA9IGZyYW1lcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFiLnNhbXBsZVJhdGUgIT09IG9yZ1NhbXBsZVJhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmdTYW1wbGVSYXRlICYmIGZyYW1lcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsID0gTWF0aC5yb3VuZChhYi5zYW1wbGVSYXRlICogZnJhbWVzIC8gb3JnU2FtcGxlUmF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiUGxhdGZvcm0gc3I6IFwiK2FiLnNhbXBsZVJhdGUrXCIsIGZpbGUgc3I6IFwiK29yZ1NhbXBsZVJhdGUrXCIsIGRlY29kZWQvb3JnIGZyYW1lIGxlbmd0aDogXCIrZmwrXCIvXCIrZnJhbWVzK1wiLCBhYi5sZW5ndGg6IFwiK2FiLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuYWIgPSBOZXRBdWRpb0J1ZmZlci5mcm9tQ2h1bmtBdWRpb0J1ZmZlcihhQ3R4LCB0aGlzLGJhc2VBdWRpb1VybCwgYWIsIGZsLGZyYW1lTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sZXQgcnA9bmV3IFJlYWR5UHJvdmlkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9uYWIucmVhZHlQcm92aWRlcj1ycDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9ycC5yZWFkeSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYWIucmVhZHkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hYi5mcmFtZUxlbiA8IGZyYW1lTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJjaHVua0F1ZGlvUmVxdWVzdFRvbmV0QWI6IEJ1aWx0IG5ldEFiIGFiIGZyb20gY2h1bmsgYWI6IEZpcnN0IGNodW5rIHNob3J0ZXIgdGhhIGZyYW1lTGVuZ3RoIChcIituZXRBYkF1ZGlvQnVmZmVyLmZyYW1lTGVuK1wiPFwiK2ZyYW1lTGVuZ3RoK1wiKSwgYXNzdW1pbmcgZW5kIG9mIGRhdGEsIHNlYWxpbmcgbmV0QWIgYWIuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFiLnNlYWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobmFiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdjaHVua0F1ZGlvUmVxdWVzdFRvTmV0QWI6IGVycm9yOiAnK2Vycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lmKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignY2h1bmtBdWRpb1JlcXVlc3RUb05ldEFiOiBGZXRjaGluZyBhdWRpbyBmaWxlOiByZXNwb25zZSBoYXMgbm8gYm9keScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKCdjaHVua0F1ZGlvUmVxdWVzdFRvTmV0QWI6IEZldGNoaW5nIGF1ZGlvIGZpbGU6IHJlc3BvbnNlIGhhcyBubyBib2R5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOihlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2NodW5rQXVkaW9SZXF1ZXN0VG9OZXRBYjogZXJyb3I6ICcrZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gb2JzO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
|